[Pkg-virtualbox-commits] [virtualbox] 01/04: Imported Upstream version 5.0.10-dfsg

Gianfranco Costamagna locutusofborg-guest at moszumanska.debian.org
Sun Nov 15 11:56:46 UTC 2015


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

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

commit 2f501cd1ed90c07c223b2969162d3a0a21903398
Author: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
Date:   Wed Nov 11 10:27:08 2015 +0100

    Imported Upstream version 5.0.10-dfsg
---
 Config.kmk                                         |    12 +-
 Doxyfile.Core                                      |   372 +-
 Makefile.kmk                                       |   163 +-
 configure                                          |    19 +-
 doc/VBox-doc.c                                     |    18 +-
 doc/manual/en_US/user_Installation.xml             |    63 +
 doc/manual/user_ChangeLogImpl.xml                  |   137 +-
 include/VBox/ExtPack/ExtPack.h                     |     6 +-
 include/VBox/GuestHost/clipboard-helper.h          |    89 +-
 include/VBox/HostServices/Service.h                |    13 +-
 include/VBox/VBoxGuest.h                           |    10 +-
 include/VBox/VBoxGuest2.h                          |     4 +
 include/VBox/VBoxGuestLib.h                        |   304 +-
 include/VBox/VBoxGuestLibSharedFolders.h           |   120 +
 include/VBox/VBoxTpG.h                             |     8 +-
 include/VBox/VMMDev.h                              |     7 +-
 include/VBox/VMMDev2.h                             |     8 +
 include/VBox/VMMDevTesting.h                       |     8 +
 include/VBox/bioslogo.h                            |     5 +-
 include/VBox/cdefs.h                               |    10 +
 include/VBox/com/AutoLock.h                        |    20 +-
 include/VBox/com/ErrorInfo.h                       |    36 +-
 include/VBox/com/EventQueue.h                      |    10 +-
 include/VBox/com/Guid.h                            |     8 +
 include/VBox/com/MultiResult.h                     |    15 +-
 include/VBox/com/NativeEventQueue.h                |    16 +-
 include/VBox/com/VirtualBox.h                      |     2 +-
 include/VBox/com/array.h                           |    67 +-
 include/VBox/com/assert.h                          |    76 +-
 include/VBox/com/com.h                             |     7 +-
 include/VBox/com/defs.h                            |    19 +-
 include/VBox/com/errorprint.h                      |    25 +-
 include/VBox/com/list.h                            |    15 +-
 include/VBox/com/listeners.h                       |    10 +-
 include/VBox/com/mtlist.h                          |    14 +-
 include/VBox/com/ptr.h                             |     9 +
 include/VBox/com/string.h                          |    16 +-
 include/VBox/dbg.h                                 |    20 +-
 include/VBox/dbggui.h                              |     5 +-
 include/VBox/dis.h                                 |     3 +
 include/VBox/err.h                                 |    12 +-
 include/VBox/hgcmsvc.h                             |    14 +-
 include/VBox/intnetinline.h                        |     3 +-
 include/VBox/log.h                                 |     6 +-
 include/VBox/pci.h                                 |     5 +-
 include/VBox/rawpci.h                              |    26 +-
 include/VBox/sup.h                                 |     8 +-
 include/VBox/types.h                               |     2 +-
 include/VBox/usb.h                                 |     6 +
 include/VBox/usbfilter.h                           |     4 +-
 include/VBox/usblib-darwin.h                       |    10 +-
 include/VBox/usblib-solaris.h                      |     8 +-
 include/VBox/usblib-win.h                          |    11 +-
 include/VBox/usblib.h                              |     2 +-
 include/VBox/vd-ifs-internal.h                     |    18 +-
 include/VBox/vd-ifs.h                              |    85 +-
 include/VBox/vd-image-backend.h                    |    12 +-
 include/VBox/vd.h                                  |   190 +-
 include/VBox/vddbg.h                               |     3 +-
 include/VBox/vmm/cfgm.h                            |     7 +-
 include/VBox/vmm/cpum.h                            |     6 +-
 include/VBox/vmm/cpumctx-v1_6.h                    |     2 +-
 include/VBox/vmm/cpumctx.h                         |     2 +-
 include/VBox/vmm/csam.h                            |     3 +-
 include/VBox/vmm/dbgf.h                            |    10 +-
 include/VBox/vmm/dbgfcorefmt.h                     |     2 +-
 include/VBox/vmm/dbgftrace.h                       |     4 +-
 include/VBox/vmm/em.h                              |    11 +-
 include/VBox/vmm/ftm.h                             |     1 +
 include/VBox/vmm/gim.h                             |    23 +-
 include/VBox/vmm/gmm.h                             |     3 +-
 include/VBox/vmm/gvm.h                             |     5 +-
 include/VBox/vmm/gvmm.h                            |     3 +-
 include/VBox/vmm/hm.h                              |    15 +-
 include/VBox/vmm/hm_svm.h                          |     2 +-
 include/VBox/vmm/hm_vmx.h                          |    14 +-
 include/VBox/vmm/iem.h                             |     1 +
 include/VBox/vmm/iom.h                             |     1 +
 include/VBox/vmm/mm.h                              |     1 +
 include/VBox/vmm/patm.h                            |     3 +-
 include/VBox/vmm/pdmapi.h                          |     3 +-
 include/VBox/vmm/pdmasynccompletion.h              |     5 +-
 include/VBox/vmm/pdmaudioifs.h                     |   163 +-
 include/VBox/vmm/pdmblkcache.h                     |   183 +-
 include/VBox/vmm/pdmcardreaderinfs.h               |    22 +-
 include/VBox/vmm/pdmdev.h                          |   103 +-
 include/VBox/vmm/pdmdrv.h                          |    99 +-
 include/VBox/vmm/pdmifs.h                          |    10 +-
 include/VBox/vmm/pdmnetifs.h                       |     4 +-
 include/VBox/vmm/pdmnetinline.h                    |    12 +-
 include/VBox/vmm/pdmqueue.h                        |     2 +-
 include/VBox/vmm/pdmsrv.h                          |     2 +-
 include/VBox/vmm/pdmthread.h                       |     4 +-
 include/VBox/vmm/pdmusb.h                          |    14 +-
 include/VBox/vmm/pdmwebcaminfs.h                   |    36 +-
 include/VBox/vmm/pgm.h                             |    31 +-
 include/VBox/vmm/rem.h                             |     1 +
 include/VBox/vmm/selm.h                            |     4 +-
 include/VBox/vmm/ssm.h                             |    19 +-
 include/VBox/vmm/stam.h                            |    26 +-
 include/VBox/vmm/tm.h                              |     3 +-
 include/VBox/vmm/trpm.h                            |     3 +-
 include/VBox/vmm/uvm.h                             |     4 +
 include/VBox/vmm/vm.h                              |    33 +-
 include/VBox/vmm/vmapi.h                           |    12 +-
 include/VBox/vmm/vmcpuset.h                        |     2 +-
 include/VBox/vmm/vmm.h                             |    26 +-
 include/VBox/vrdpusb.h                             |    15 +-
 include/VBox/vscsi.h                               |    82 +-
 include/VBox/vusb.h                                |    19 +-
 include/iprt/asm-amd64-x86.h                       |     2 +-
 include/iprt/asm.h                                 |     2 +-
 include/iprt/asn1.h                                |    17 +-
 include/iprt/assert.h                              |     8 +-
 include/iprt/cdefs.h                               |    28 +-
 include/iprt/cdrom.h                               |     4 +-
 include/iprt/condvar.h                             |    62 +-
 include/iprt/coredumper.h                          |     2 -
 include/iprt/cpp/list.h                            |     8 +-
 include/iprt/cpp/ministring.h                      |    22 +-
 include/iprt/cpp/mtlist.h                          |     6 +-
 include/iprt/cpp/xml.h                             |     6 +-
 include/iprt/critsect.h                            |    43 +-
 include/iprt/crypto/digest.h                       |     2 +-
 include/iprt/crypto/pkcs7.h                        |     4 +-
 include/iprt/crypto/rsa.h                          |     2 +-
 include/iprt/crypto/spc.h                          |     3 +-
 include/iprt/crypto/tsp.h                          |     2 +-
 include/iprt/crypto/x509.h                         |     2 +-
 include/iprt/dbg.h                                 |    18 +-
 include/iprt/file.h                                |    16 +-
 include/iprt/getopt.h                              |     6 +-
 include/iprt/http.h                                |    69 +-
 include/iprt/initterm.h                            |    12 +-
 include/iprt/isofs.h                               |    15 +-
 include/iprt/latin1.h                              |   392 +
 include/iprt/ldr.h                                 |    32 +-
 include/iprt/ldrlazy.h                             |     9 +-
 include/iprt/list-off32.h                          |    18 +-
 include/iprt/list.h                                |    18 +-
 include/iprt/lockvalidator.h                       |    22 +-
 include/iprt/log.h                                 |    10 +-
 include/iprt/mangling.h                            |     2 +
 include/iprt/manifest.h                            |     7 +-
 include/iprt/mem.h                                 |    34 +-
 include/iprt/memsafer.h                            |     2 +-
 include/iprt/message.h                             |     6 +-
 include/iprt/net.h                                 |    20 +-
 include/iprt/path.h                                |     2 +-
 include/iprt/process.h                             |     8 +-
 include/iprt/semaphore.h                           |    81 +-
 include/iprt/sha.h                                 |    82 +-
 include/iprt/socket.h                              |    27 +-
 include/iprt/sort.h                                |    10 +-
 include/iprt/string.h                              |  1211 +-
 include/iprt/tcp.h                                 |    69 +-
 include/iprt/test.h                                |     7 +-
 include/iprt/udp.h                                 |     1 +
 include/iprt/uint128.h                             |    34 +-
 include/iprt/uri.h                                 |     2 +-
 include/iprt/utf16.h                               |   885 ++
 include/iprt/vfs.h                                 |    26 +-
 include/iprt/vfslowlevel.h                         |     9 +-
 .../Additions/common/VBoxControl/VBoxControl.cpp   |    22 +-
 .../common/VBoxControl/testcase/tstVBoxControl.cpp |    36 +-
 .../Additions/common/VBoxGuest/VBoxDev-haiku.c     |   109 +-
 .../common/VBoxGuest/VBoxGuest-darwin.cpp          |   327 +-
 .../Additions/common/VBoxGuest/VBoxGuest-freebsd.c |   260 +-
 .../common/VBoxGuest/VBoxGuest-haiku-stubs.c       |    12 +-
 .../Additions/common/VBoxGuest/VBoxGuest-haiku.c   |   126 +-
 .../Additions/common/VBoxGuest/VBoxGuest-haiku.h   |    10 +-
 .../Additions/common/VBoxGuest/VBoxGuest-linux.c   |   376 +-
 .../Additions/common/VBoxGuest/VBoxGuest-os2.cpp   |   113 +-
 .../Additions/common/VBoxGuest/VBoxGuest-solaris.c |   200 +-
 .../common/VBoxGuest/VBoxGuest-win-legacy.cpp      |    38 +-
 .../common/VBoxGuest/VBoxGuest-win-pnp.cpp         |   158 +-
 .../Additions/common/VBoxGuest/VBoxGuest-win.cpp   |   409 +-
 .../Additions/common/VBoxGuest/VBoxGuest-win.h     |    79 +-
 src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp  |   639 +-
 .../Additions/common/VBoxGuest/VBoxGuestA-os2.asm  |   276 +-
 .../common/VBoxGuest/VBoxGuestIDC-unix.c.h         |    17 +-
 .../Additions/common/VBoxGuest/VBoxGuestInternal.h |    38 +-
 .../common/VBoxGuest/freebsd/files_vboxguest       |     2 +
 .../common/VBoxGuest/linux/files_vboxguest         |     2 +
 .../common/VBoxGuestLib/GenericRequest.cpp         |   133 +-
 src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp    |   177 +-
 .../Additions/common/VBoxGuestLib/HGCMInternal.cpp |     4 +-
 src/VBox/Additions/common/VBoxGuestLib/Init.cpp    |    10 +-
 src/VBox/Additions/common/VBoxGuestLib/Mouse.cpp   |    16 +-
 .../Additions/common/VBoxGuestLib/PhysHeap.cpp     |     2 +-
 src/VBox/Additions/common/VBoxGuestLib/SysHlp.cpp  |    82 +-
 src/VBox/Additions/common/VBoxGuestLib/SysHlp.h    |    28 +-
 .../Additions/common/VBoxGuestLib/VBGLInternal.h   |    10 +-
 .../common/VBoxGuestLib/VBoxGuestR0LibCrOgl.cpp    |    77 +-
 .../common/VBoxGuestLib/VBoxGuestR0LibCrOgl.h      |    40 -
 .../VBoxGuestLib/VBoxGuestR0LibSharedFolders.c     |   397 +-
 .../VBoxGuestLib/VBoxGuestR0LibSharedFolders.h     |   200 -
 .../VBoxGuestLib/VBoxGuestR3LibAdditions.cpp       |   370 +-
 .../VBoxGuestLib/VBoxGuestR3LibAutoLogon.cpp       |    13 +-
 .../common/VBoxGuestLib/VBoxGuestR3LibBalloon.cpp  |     2 +-
 .../VBoxGuestLib/VBoxGuestR3LibClipboard.cpp       |    36 +-
 .../VBoxGuestLib/VBoxGuestR3LibCpuHotPlug.cpp      |     2 +-
 .../VBoxGuestLib/VBoxGuestR3LibCredentials.cpp     |     2 +-
 .../VBoxGuestLib/VBoxGuestR3LibDragAndDrop.cpp     |     2 +-
 .../VBoxGuestLib/VBoxGuestR3LibGuestCtrl.cpp       |    78 +-
 .../VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp       |    99 +-
 .../VBoxGuestLib/VBoxGuestR3LibGuestUser.cpp       |    32 +-
 .../VBoxGuestLib/VBoxGuestR3LibHostVersion.cpp     |    29 +-
 .../common/VBoxGuestLib/VBoxGuestR3LibMisc.cpp     |     2 +-
 .../common/VBoxGuestLib/VBoxGuestR3LibMouse.cpp    |     3 +-
 .../VBoxGuestLib/VBoxGuestR3LibSharedFolders.cpp   |    49 +-
 .../common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp    |   148 +-
 src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp  |     5 +-
 .../common/VBoxService/VBoxService-os2.def         |     1 +
 .../common/VBoxService/VBoxService-win.cpp         |   132 +-
 .../Additions/common/VBoxService/VBoxService.cpp   |   278 +-
 .../common/VBoxService/VBoxServiceAutoMount.cpp    |   313 +-
 .../common/VBoxService/VBoxServiceBalloon.cpp      |   113 +-
 .../VBoxService/VBoxServiceClipboard-os2.cpp       |   275 +-
 .../common/VBoxService/VBoxServiceControl.cpp      |   212 +-
 .../common/VBoxService/VBoxServiceControl.h        |    70 +-
 .../VBoxService/VBoxServiceControlProcess.cpp      |   647 +-
 .../VBoxService/VBoxServiceControlSession.cpp      |   931 +-
 .../common/VBoxService/VBoxServiceCpuHotPlug.cpp   |   145 +-
 .../common/VBoxService/VBoxServiceInternal.h       |    51 +-
 .../common/VBoxService/VBoxServicePageSharing.cpp  |   341 +-
 .../common/VBoxService/VBoxServicePropCache.cpp    |    65 +-
 .../common/VBoxService/VBoxServicePropCache.h      |    32 +-
 .../common/VBoxService/VBoxServiceStats.cpp        |   274 +-
 .../common/VBoxService/VBoxServiceTimeSync.cpp     |   240 +-
 .../common/VBoxService/VBoxServiceToolBox.cpp      |   373 +-
 .../common/VBoxService/VBoxServiceUtils.cpp        |    88 +-
 .../common/VBoxService/VBoxServiceUtils.h          |    11 +-
 .../common/VBoxService/VBoxServiceVMInfo-win.cpp   |   641 +-
 .../common/VBoxService/VBoxServiceVMInfo.cpp       |   485 +-
 .../common/VBoxService/VBoxServiceVMInfo.h         |     8 +-
 .../Additions/darwin/vboxfs/VBoxVFS-VFSOps.cpp     |    19 +-
 .../Additions/darwin/vboxfs/VBoxVFS-VNODEOps.cpp   |    13 +-
 src/VBox/Additions/darwin/vboxfs/VBoxVFS-utils.cpp |     8 +-
 src/VBox/Additions/darwin/vboxfs/VBoxVFS.cpp       |    25 +-
 src/VBox/Additions/darwin/vboxfs/vboxvfs.h         |    15 +-
 src/VBox/Additions/freebsd/vboxvfs/vboxvfs.h       |     4 +-
 .../Additions/freebsd/vboxvfs/vboxvfs_vfsops.c     |    26 +-
 .../Additions/haiku/SharedFolders/Makefile.kmk     |     1 -
 src/VBox/Additions/haiku/SharedFolders/vboxsf.c    |   110 +-
 src/VBox/Additions/haiku/SharedFolders/vboxsf.h    |     8 +-
 src/VBox/Additions/linux/drm/Makefile.module       |     6 +-
 src/VBox/Additions/linux/drm/Makefile.module.kms   |     5 +-
 src/VBox/Additions/linux/drm/files_vboxvideo_drv   |     2 +
 src/VBox/Additions/linux/drm/vbox_drv.c            |     4 +-
 src/VBox/Additions/linux/drm/vbox_drv.h            |     4 +-
 src/VBox/Additions/linux/drm/vbox_fb.c             |     4 +-
 src/VBox/Additions/linux/drm/vbox_main.c           |     4 +-
 src/VBox/Additions/linux/drm/vbox_mode.c           |     4 +-
 src/VBox/Additions/linux/drm/vbox_ttm.c            |     4 +-
 src/VBox/Additions/linux/drm/vboxvideo_drm.c       |     4 +-
 src/VBox/Additions/linux/drm/vboxvideo_drm.h       |     4 +-
 .../Additions/linux/installer/vboxadd-service.sh   |    40 +-
 src/VBox/Additions/linux/installer/vboxadd-x11.sh  |    31 +-
 src/VBox/Additions/linux/installer/vboxadd.sh      |    17 +-
 .../Additions/linux/sharedfolders/Makefile.kmk     |     1 -
 src/VBox/Additions/linux/sharedfolders/dirops.c    |    48 +-
 .../Additions/linux/sharedfolders/files_vboxsf     |     4 +-
 src/VBox/Additions/linux/sharedfolders/lnkops.c    |     4 +-
 .../Additions/linux/sharedfolders/mount.vboxsf.c   |    41 +-
 src/VBox/Additions/linux/sharedfolders/regops.c    |    20 +-
 src/VBox/Additions/linux/sharedfolders/utils.c     |    38 +-
 src/VBox/Additions/linux/sharedfolders/vfsmod.c    |    32 +-
 src/VBox/Additions/linux/sharedfolders/vfsmod.h    |     6 +-
 .../Additions/solaris/Mouse/testcase/solaris.h     |     2 +-
 src/VBox/Additions/solaris/Mouse/vboxms.c          |     2 +-
 src/VBox/Additions/solaris/SharedFolders/vboxfs.h  |    10 +-
 .../Additions/solaris/SharedFolders/vboxfs_prov.c  |   112 +-
 .../Additions/solaris/SharedFolders/vboxfs_prov.h  |    18 +-
 src/VBox/Additions/x11/undefined_xorg              |     1 +
 src/VBox/Additions/x11/vboxvideo/Makefile.kmk      |    18 +-
 src/VBox/Additions/x11/vboxvideo/setmode.c         |     1 -
 src/VBox/Additions/x11/vboxvideo/vboxvideo.c       |     1 -
 src/VBox/Additions/x11/vboxvideo/vboxvideo.h       |     1 -
 src/VBox/Additions/x11/vboxvideo/vboxvideo_dri.c   |     4 +-
 src/VBox/Additions/x11/vboxvideo/vboxvideo_dri2.c  |     4 +-
 src/VBox/Debugger/DBGCCmdHlp.cpp                   |    10 +-
 src/VBox/Debugger/DBGCCommands.cpp                 |    58 +-
 src/VBox/Debugger/DBGCEmulateCodeView.cpp          |    88 +-
 src/VBox/Debugger/DBGCFunctions.cpp                |     2 +-
 src/VBox/Debugger/DBGCOps.cpp                      |    99 +-
 src/VBox/Debugger/DBGCTcp.cpp                      |     6 +-
 src/VBox/Debugger/DBGConsole.cpp                   |    12 +-
 src/VBox/Devices/Audio/AudioMixer.cpp              |    67 +-
 src/VBox/Devices/Audio/DevIchAc97.cpp              |   167 +-
 src/VBox/Devices/Audio/DevIchHda.cpp               |    38 +-
 src/VBox/Devices/Audio/DevIchHdaCodec.cpp          |     6 +-
 src/VBox/Devices/Audio/DevIchHdaCodec.h            |    24 +-
 src/VBox/Devices/Audio/DevSB16.cpp                 |     6 +-
 src/VBox/Devices/Audio/DrvAudio.cpp                |   205 +-
 src/VBox/Devices/Audio/DrvHostPulseAudio.cpp       |    77 +-
 src/VBox/Devices/Bus/DevPCI.cpp                    |    12 +-
 src/VBox/Devices/EFI/DevEFI.cpp                    |     4 +-
 .../Graphics/BIOS/VBoxVgaBiosAlternative.asm       |   262 +-
 .../Graphics/BIOS/VBoxVgaBiosAlternative.md5sum    |     2 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA.cpp          |    18 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp    |     4 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp        |     2 +-
 src/VBox/Devices/Graphics/DevVGA.cpp               |    10 +-
 src/VBox/Devices/Graphics/DevVGA_VBVA.cpp          |    20 +-
 src/VBox/Devices/Input/DevPS2.cpp                  |     8 +-
 src/VBox/Devices/Input/DrvKeyboardQueue.cpp        |     8 +-
 src/VBox/Devices/Input/DrvMouseQueue.cpp           |     8 +-
 src/VBox/Devices/Input/PS2M.cpp                    |     6 +-
 src/VBox/Devices/Network/DevE1000.cpp              |     2 +-
 src/VBox/Devices/Network/DevINIP.cpp               |     2 +-
 src/VBox/Devices/Network/slirp/tcp_subr.c          |    16 +
 src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm   |     4 +-
 .../Devices/PC/BIOS/VBoxBiosAlternative.md5sum     |     2 +-
 src/VBox/Devices/PC/DevACPI.cpp                    |    16 +-
 src/VBox/Devices/PC/DevDMA.cpp                     |    84 +-
 src/VBox/Devices/PC/DevPIC.cpp                     |     2 +-
 src/VBox/Devices/PC/vbox-cpuhotplug.dsl            |    14 +-
 src/VBox/Devices/Parallel/DevParallel.cpp          |     2 +-
 src/VBox/Devices/Parallel/DrvHostParallel.cpp      |    15 +-
 src/VBox/Devices/Serial/DevSerial.cpp              |    20 +-
 src/VBox/Devices/Storage/DevAHCI.cpp               |    18 +-
 src/VBox/Devices/Storage/DevATA.cpp                |    12 +-
 src/VBox/Devices/Storage/DrvBlock.cpp              |     6 +-
 src/VBox/Devices/Storage/DrvSCSI.cpp               |     4 +-
 src/VBox/Devices/Storage/DrvVD.cpp                 |    98 +-
 src/VBox/Devices/Storage/UsbMsd.cpp                |    40 +-
 src/VBox/Devices/USB/DevOHCI.cpp                   |     8 +-
 src/VBox/Devices/USB/USBProxyDevice.cpp            |    14 +
 src/VBox/Devices/USB/USBProxyDevice.h              |    37 +-
 src/VBox/Devices/USB/VUSBDevice.cpp                |    17 +-
 .../Devices/USB/darwin/USBProxyDevice-darwin.cpp   |    25 +-
 .../Devices/USB/linux/USBProxyDevice-linux.cpp     |     6 +-
 .../Devices/USB/usbip/USBProxyDevice-usbip.cpp     |     2 +-
 src/VBox/Devices/VMMDev/VMMDev.cpp                 |   680 +-
 src/VBox/Devices/VMMDev/VMMDevState.h              |    42 +-
 src/VBox/Devices/VirtIO/Virtio.cpp                 |     2 +-
 .../Devices/testcase/tstDeviceStructSizeRC.cpp     |    12 +-
 src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp      |     2 +-
 .../Frontends/VBoxManage/VBoxManageControlVM.cpp   |    21 +-
 .../Frontends/VBoxManage/VBoxManageSnapshot.cpp    |    10 +
 src/VBox/Frontends/VirtualBox/Makefile.kmk         |     2 +-
 .../Frontends/VirtualBox/nls/ApprovedLanguages.kmk |     3 -
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts |    72 +-
 .../Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts   |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts |  1090 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts |    81 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts |    74 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts |   537 +-
 .../Frontends/VirtualBox/nls/VirtualBox_fa_IR.ts   | 11940 ++++++++++---------
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts |    76 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts |  1142 +-
 .../Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts   |    76 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts |    72 +-
 .../Frontends/VirtualBox/nls/VirtualBox_km_KH.ts   |    76 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts |    76 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts |    76 +-
 .../Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts   |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts |    76 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts |    72 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts |    82 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts |    72 +-
 .../Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts   |    76 +-
 .../Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts   |    72 +-
 .../Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts   |    74 +-
 src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts      |     4 +-
 .../VirtualBox/src/globals/UIIconPool.cpp          |    62 +
 .../Frontends/VirtualBox/src/globals/UIIconPool.h  |     9 +
 .../VirtualBox/src/globals/VBoxGlobal.cpp          |   184 +-
 .../Frontends/VirtualBox/src/globals/VBoxGlobal.h  |    20 +-
 .../Frontends/VirtualBox/src/globals/VBoxUtils.h   |   120 +-
 .../Frontends/VirtualBox/src/net/UIDownloader.cpp  |    26 +-
 .../Frontends/VirtualBox/src/net/UIDownloader.h    |     6 +-
 .../VirtualBox/src/net/UIDownloaderAdditions.cpp   |    11 +-
 .../VirtualBox/src/net/UIDownloaderAdditions.h     |     3 +
 .../src/net/UIDownloaderExtensionPack.cpp          |    11 +-
 .../VirtualBox/src/net/UIDownloaderExtensionPack.h |     3 +
 .../VirtualBox/src/net/UIDownloaderUserManual.cpp  |    11 +-
 .../VirtualBox/src/net/UIDownloaderUserManual.h    |     3 +
 .../VirtualBox/src/net/UINetworkCustomer.cpp       |    12 +-
 .../VirtualBox/src/net/UINetworkCustomer.h         |    12 +-
 .../Frontends/VirtualBox/src/net/UINetworkDefs.h   |    24 +-
 .../VirtualBox/src/net/UINetworkManager.cpp        |    16 +-
 .../VirtualBox/src/net/UINetworkManager.h          |    20 +-
 .../VirtualBox/src/net/UINetworkReply.cpp          |   804 +-
 .../Frontends/VirtualBox/src/net/UINetworkReply.h  |    91 +-
 .../VirtualBox/src/net/UINetworkRequest.cpp        |   176 +-
 .../VirtualBox/src/net/UINetworkRequest.h          |   108 +-
 .../VirtualBox/src/net/UINetworkRequestWidget.cpp  |    55 +-
 .../VirtualBox/src/net/UINetworkRequestWidget.h    |     3 +
 .../VirtualBox/src/net/UIUpdateManager.cpp         |    13 +-
 .../VirtualBox/src/net/tstSSLCertDownloads.cpp     |     5 +-
 src/VBox/Frontends/VirtualBox/src/precomp.h        |     5 -
 .../VirtualBox/src/runtime/UIFrameBuffer.cpp       |     5 +
 .../VirtualBox/src/runtime/UIMachineLogic.cpp      |    61 +-
 .../src/selector/UIActionPoolSelector.cpp          |     4 +-
 .../VirtualBox/src/selector/UISelectorWindow.cpp   |    10 +-
 .../settings/global/UIGlobalSettingsNetwork.cpp    |    74 +-
 .../src/settings/global/UIGlobalSettingsProxy.cpp  |    31 +-
 .../src/settings/global/UIGlobalSettingsProxy.h    |     5 +-
 .../src/settings/global/UIGlobalSettingsProxy.ui   |    32 +-
 .../src/widgets/UIPortForwardingTable.cpp          |    11 +-
 src/VBox/GuestHost/HGSMI/HGSMICommon.cpp           |     4 +-
 src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp     |     2 -
 src/VBox/HostDrivers/Support/SUPDrv.cpp            |    14 +-
 src/VBox/HostDrivers/Support/SUPDrvGip.cpp         |     2 +-
 src/VBox/HostDrivers/Support/SUPDrvIOC.h           |     2 +-
 src/VBox/HostDrivers/Support/SUPDrvInternal.h      |    13 +-
 src/VBox/HostDrivers/Support/SUPDrvTracer.cpp      |     4 +-
 src/VBox/HostDrivers/Support/SUPLib.cpp            |    16 +-
 src/VBox/HostDrivers/Support/SUPLibLdr.cpp         |     7 +-
 src/VBox/HostDrivers/Support/SUPR0IdcClientStubs.c |     4 +-
 src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp |     6 +-
 src/VBox/HostDrivers/Support/SUPSvc.cpp            |     2 +-
 src/VBox/HostDrivers/Support/SUPSvcInternal.h      |     2 +-
 .../HostDrivers/Support/darwin/SUPDrv-darwin.cpp   |     2 +-
 .../HostDrivers/Support/freebsd/SUPDrv-freebsd.c   |    38 +-
 src/VBox/HostDrivers/Support/freebsd/files_vboxdrv |     2 +
 src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c  |    11 +-
 src/VBox/HostDrivers/Support/linux/files_vboxdrv   |     2 +
 .../HostDrivers/Support/solaris/SUPDrv-solaris.c   |     6 +-
 src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp    |     4 +-
 .../Support/win/SUPHardenedVerifyImage-win.cpp     |    10 +-
 .../Support/win/SUPHardenedVerifyProcess-win.cpp   |    11 +-
 .../Support/win/SUPR3HardenedMain-win.cpp          |    10 +-
 .../Support/win/SUPR3HardenedMainImports-win.cpp   |     5 +-
 src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c       |  1011 --
 .../VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp        |     6 +-
 .../VBoxNetAdp/freebsd/files_vboxnetadp            |     2 +
 .../VBoxNetAdp/linux/VBoxNetAdp-linux.c            |     1 +
 .../HostDrivers/VBoxNetAdp/linux/files_vboxnetadp  |     4 +-
 src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c       |     2 +-
 .../HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h    |     1 +
 .../VBoxNetFlt/freebsd/files_vboxnetflt            |     2 +
 .../VBoxNetFlt/linux/VBoxNetFlt-linux.c            |    17 +-
 .../HostDrivers/VBoxNetFlt/linux/files_vboxnetflt  |     2 +
 .../VBoxNetFlt/solaris/VBoxNetFlt-solaris.c        |    19 +-
 .../VBoxNetFlt/solaris/VBoxNetFltBow-solaris.c     |    23 +-
 .../VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp          |    56 +-
 src/VBox/HostDrivers/VBoxPci/VBoxPci.c             |    27 +-
 src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c |     4 +-
 src/VBox/HostDrivers/VBoxPci/linux/files_vboxpci   |     2 +
 src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.cpp  |    16 +-
 src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.h    |     2 +
 .../HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c  |    27 +-
 .../VBoxUSB/solaris/VBoxUSBMon-solaris.c           |    22 +-
 src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp |     9 +-
 src/VBox/HostServices/GuestControl/service.cpp     |    18 +-
 .../GuestControl/testcase/tstGuestControlSvc.cpp   |     2 +-
 src/VBox/HostServices/GuestProperties/service.cpp  |    14 +-
 .../HostServices/SharedOpenGL/render/renderspu.c   |     2 +-
 src/VBox/HostServices/auth/winlogon/winlogon.cpp   |   158 +-
 src/VBox/Installer/darwin/VBoxKEXTs/postflight     |    11 +
 src/VBox/Installer/linux/distributions_deb         |     1 +
 src/VBox/Installer/linux/routines.sh               |     2 +-
 src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec  |     2 +-
 src/VBox/Installer/linux/vboxautostart-service.sh  |    52 +-
 .../Installer/linux/vboxballoonctrl-service.sh     |    54 +-
 src/VBox/Installer/linux/vboxweb-service.sh        |    54 +-
 src/VBox/Installer/solaris/Makefile.kmk            |     1 -
 src/VBox/Installer/win/Stub/VBoxStub.cpp           |    12 +-
 src/VBox/Installer/win/UserInterface.wxi           |    11 +-
 src/VBox/Installer/win/VBoxMergeApp.wxi            |     2 -
 src/VBox/Installer/win/VBoxMergeNetAdp6.wxi        |     2 +
 src/VBox/Installer/win/VBoxMergeNetLwf.wxi         |     2 +
 src/VBox/Installer/win/VirtualBox.wxs              |    40 +-
 src/VBox/Main/Makefile.kmk                         |     6 +
 src/VBox/Main/glue/NativeEventQueue.cpp            |    11 +-
 src/VBox/Main/idl/VirtualBox.xidl                  |    18 +-
 src/VBox/Main/include/AuthLibrary.h                |    41 +
 src/VBox/Main/include/ConsoleImpl.h                |     1 +
 src/VBox/Main/include/ConsoleVRDPServer.h          |    11 +-
 src/VBox/Main/include/Logging.h                    |    13 +-
 src/VBox/Main/include/MachineImpl.h                |     7 +
 src/VBox/Main/include/Matching.h                   |    35 +-
 src/VBox/Main/include/MediumImpl.h                 |     1 +
 src/VBox/Main/include/USBIdDatabase.h              |   305 +-
 src/VBox/Main/src-all/AuthLibrary.cpp              |   254 +
 src/VBox/Main/src-all/ExtPackManagerImpl.cpp       |     2 +-
 src/VBox/Main/src-all/VirtualBoxBase.cpp           |     4 +-
 src/VBox/Main/src-client/ConsoleImpl.cpp           |     7 +-
 src/VBox/Main/src-client/ConsoleVRDPServer.cpp     |   262 +-
 src/VBox/Main/src-client/DisplayImpl.cpp           |     2 +-
 src/VBox/Main/src-client/DrvAudioVRDE.cpp          |     2 +-
 src/VBox/Main/src-client/KeyboardImpl.cpp          |     2 +-
 src/VBox/Main/src-client/MachineDebuggerImpl.cpp   |     8 +-
 src/VBox/Main/src-client/MouseImpl.cpp             |     2 +-
 src/VBox/Main/src-client/Nvram.cpp                 |    14 +-
 src/VBox/Main/src-client/RemoteUSBBackend.cpp      |     1 -
 src/VBox/Main/src-server/ApplianceImplIO.cpp       |     2 +-
 src/VBox/Main/src-server/ApplianceImplImport.cpp   |     4 +-
 .../Main/src-server/HostDnsServiceResolvConf.cpp   |     6 +-
 src/VBox/Main/src-server/HostUSBDeviceImpl.cpp     |    37 +-
 src/VBox/Main/src-server/MachineImpl.cpp           |   118 +-
 src/VBox/Main/src-server/MachineImplCloneVM.cpp    |     3 +-
 src/VBox/Main/src-server/MediumImpl.cpp            |    19 +
 src/VBox/Main/src-server/StorageControllerImpl.cpp |    12 +-
 src/VBox/Main/src-server/USBDeviceFilterImpl.cpp   |     1 +
 .../Main/src-server/USBIdDatabaseGenerator.cpp     |  1149 +-
 src/VBox/Main/src-server/USBIdDatabaseStub.cpp     |    45 +-
 src/VBox/Main/src-server/USBProxyService.cpp       |     6 +-
 src/VBox/Main/src-server/VirtualBoxImpl.cpp        |     8 +-
 src/VBox/Main/src-server/custom.ids                |     2 +-
 src/VBox/Main/src-server/linux/USBGetDevices.cpp   |     2 +-
 src/VBox/Main/src-server/usb.ids                   |   417 +-
 src/VBox/Main/src-server/xpcom/server.cpp          |   135 +-
 src/VBox/Main/xml/Settings.cpp                     |    90 +-
 src/VBox/Main/xml/ovfreader.cpp                    |     9 +-
 src/VBox/NetworkServices/DHCP/Config.cpp           |    22 +-
 src/VBox/NetworkServices/NAT/pxtcp.c               |    14 +-
 src/VBox/RDP/client-1.8.3/vrdp/rdpusb.c            |     6 +-
 src/VBox/Runtime/Doxyfile                          |  2487 ++--
 src/VBox/Runtime/Makefile.kmk                      |    47 +-
 src/VBox/Runtime/VBox/log-vbox.cpp                 |     2 +-
 src/VBox/Runtime/VBox/logbackdoor-redirect.cpp     |     3 +-
 src/VBox/Runtime/common/asn1/asn1-basics.cpp       |    28 +-
 src/VBox/Runtime/common/checksum/manifest2.cpp     |    24 +-
 src/VBox/Runtime/common/checksum/x509.cpp          |     4 +-
 src/VBox/Runtime/common/crypto/store-internal.h    |     2 +-
 src/VBox/Runtime/common/dbg/dbgas.cpp              |     2 +-
 src/VBox/Runtime/common/dbg/dbgcfg.cpp             |    39 +-
 src/VBox/Runtime/common/dbg/dbgmodcodeview.cpp     |    22 +-
 src/VBox/Runtime/common/dbg/dbgmoddeferred.cpp     |     4 +-
 src/VBox/Runtime/common/dbg/dbgmoddwarf.cpp        |    14 +-
 src/VBox/Runtime/common/dbg/dbgmodexports.cpp      |     7 +-
 src/VBox/Runtime/common/dbg/dbgmodldr.cpp          |    13 +-
 .../Runtime/common/err/RTErrConvertFromErrno.cpp   |     2 +-
 src/VBox/Runtime/common/err/errmsg.cpp             |     2 +-
 src/VBox/Runtime/common/err/errmsgxpcom.cpp        |     2 +-
 src/VBox/Runtime/common/ldr/ldrMemory.cpp          |    24 +-
 src/VBox/Runtime/common/ldr/ldrPE.cpp              |    28 +-
 src/VBox/Runtime/common/ldr/ldrkStuff.cpp          |    64 +-
 src/VBox/Runtime/common/log/log.cpp                |     8 +-
 src/VBox/Runtime/common/math/bignum.cpp            |     4 +-
 src/VBox/Runtime/common/misc/aiomgr.cpp            |     2 +-
 src/VBox/Runtime/common/misc/lockvalidator.cpp     |    14 +-
 src/VBox/Runtime/common/net/netaddrstr2.cpp        |    51 +
 src/VBox/Runtime/common/path/RTPathGlob.cpp        |   117 +-
 src/VBox/Runtime/common/string/strformat.cpp       |     4 +-
 src/VBox/Runtime/common/string/uniread.cpp         |     5 +-
 src/VBox/Runtime/common/string/utf-8.cpp           |     2 +-
 src/VBox/Runtime/common/time/timesup.cpp           |     4 +-
 src/VBox/Runtime/generic/http-curl.cpp             |    82 +-
 src/VBox/Runtime/include/internal/dbgmod.h         |     6 +-
 src/VBox/Runtime/include/internal/ldr.h            |     4 +-
 .../r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp      |    72 +-
 src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c  |     4 +-
 src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp    |     4 +-
 src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp          |    17 +-
 src/VBox/Runtime/r0drv/nt/ntBldSymDb.cpp           |     7 +-
 .../r0drv/solaris/semeventwait-r0drv-solaris.h     |     1 -
 src/VBox/Runtime/r3/init.cpp                       |    18 +-
 src/VBox/Runtime/r3/isofs.cpp                      |    18 +-
 src/VBox/Runtime/r3/nt/internal-r3-nt.h            |     2 +-
 src/VBox/Runtime/r3/nt/pathint-nt.cpp              |    22 +-
 src/VBox/Runtime/r3/socket.cpp                     |     2 +-
 src/VBox/Runtime/r3/solaris/coredumper-solaris.cpp |    21 +-
 src/VBox/Runtime/r3/stream.cpp                     |     4 +-
 src/VBox/Runtime/r3/tcp.cpp                        |     2 +-
 src/VBox/Runtime/r3/test.cpp                       |     6 +-
 src/VBox/Runtime/r3/udp.cpp                        |     2 +-
 src/VBox/Runtime/r3/win/fs-win.cpp                 |     9 +-
 src/VBox/Runtime/r3/win/init-win.cpp               |     2 +-
 src/VBox/Runtime/r3/win/localipc-win.cpp           |     6 +-
 src/VBox/Runtime/r3/win/process-win.cpp            |     4 +-
 src/VBox/Runtime/r3/xml.cpp                        |     6 +-
 src/VBox/Runtime/testcase/tstIprtList.cpp          |     2 +-
 src/VBox/Runtime/testcase/tstRTNetIPv4.cpp         |    22 +
 src/VBox/Runtime/testcase/tstRTNetIPv6.cpp         |    30 +
 src/VBox/Runtime/win/errmsgwin.cpp                 |     2 +-
 src/VBox/Storage/DMG.cpp                           |     6 +-
 src/VBox/Storage/ISCSI.cpp                         |    16 +-
 src/VBox/Storage/Parallels.cpp                     |     6 +-
 src/VBox/Storage/QCOW.cpp                          |     6 +-
 src/VBox/Storage/QED.cpp                           |     6 +-
 src/VBox/Storage/RAW.cpp                           |     8 +-
 src/VBox/Storage/VD.cpp                            |    31 +-
 src/VBox/Storage/VDI.cpp                           |     6 +-
 src/VBox/Storage/VDIfVfs.cpp                       |     2 +-
 src/VBox/Storage/VDVfs.cpp                         |     2 +-
 src/VBox/Storage/VHD.cpp                           |   118 +-
 src/VBox/Storage/VHDX.cpp                          |     6 +-
 src/VBox/Storage/VMDK.cpp                          |     6 +-
 src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp                |    22 +-
 src/VBox/VMM/VMMAll/CPUMAllRegs.cpp                |   108 +-
 src/VBox/VMM/VMMAll/CSAMAll.cpp                    |    35 +-
 src/VBox/VMM/VMMAll/DBGFAll.cpp                    |    20 +-
 src/VBox/VMM/VMMAll/EMAll.cpp                      |   122 +-
 src/VBox/VMM/VMMAll/FTMAll.cpp                     |     4 +-
 src/VBox/VMM/VMMAll/GIMAll.cpp                     |    26 +-
 src/VBox/VMM/VMMAll/GIMAllHv.cpp                   |    10 +-
 src/VBox/VMM/VMMAll/GIMAllKvm.cpp                  |    20 +-
 src/VBox/VMM/VMMAll/HMAll.cpp                      |    59 +-
 src/VBox/VMM/VMMAll/IEMAll.cpp                     |    99 +-
 src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h              |    12 +-
 src/VBox/VMM/VMMAll/IOMAll.cpp                     |    40 +-
 src/VBox/VMM/VMMAll/IOMAllMMIO.cpp                 |    74 +-
 src/VBox/VMM/VMMAll/MMAll.cpp                      |    40 +-
 src/VBox/VMM/VMMAll/MMAllHyper.cpp                 |    22 +-
 src/VBox/VMM/VMMAll/MMAllPagePool.cpp              |     8 +-
 src/VBox/VMM/VMMAll/PATMAll.cpp                    |    36 +-
 src/VBox/VMM/VMMAll/PDMAll.cpp                     |    56 +-
 src/VBox/VMM/VMMAll/PDMAllCritSect.cpp             |    21 +-
 src/VBox/VMM/VMMAll/PDMAllCritSectBoth.cpp         |     2 +-
 src/VBox/VMM/VMMAll/PDMAllCritSectRw.cpp           |    40 +-
 src/VBox/VMM/VMMAll/PGMAll.cpp                     |   145 +-
 src/VBox/VMM/VMMAll/PGMAllBth.h                    |    52 +-
 src/VBox/VMM/VMMAll/PGMAllGst.h                    |    13 +-
 src/VBox/VMM/VMMAll/PGMAllHandler.cpp              |    58 +-
 src/VBox/VMM/VMMAll/PGMAllMap.cpp                  |    34 +-
 src/VBox/VMM/VMMAll/PGMAllPhys.cpp                 |   141 +-
 src/VBox/VMM/VMMAll/PGMAllPool.cpp                 |    79 +-
 src/VBox/VMM/VMMAll/PGMAllShw.h                    |     6 +-
 src/VBox/VMM/VMMAll/REMAll.cpp                     |    16 +-
 src/VBox/VMM/VMMAll/SELMAll.cpp                    |    52 +-
 src/VBox/VMM/VMMAll/TMAll.cpp                      |    84 +-
 src/VBox/VMM/VMMAll/TMAllCpu.cpp                   |    52 +-
 src/VBox/VMM/VMMAll/TMAllReal.cpp                  |     4 +-
 src/VBox/VMM/VMMAll/TMAllVirtual.cpp               |    58 +-
 src/VBox/VMM/VMMAll/TRPMAll.cpp                    |    64 +-
 src/VBox/VMM/VMMAll/VMAll.cpp                      |    18 +-
 src/VBox/VMM/VMMAll/VMMAll.cpp                     |    22 +-
 src/VBox/VMM/VMMR0/CPUMR0.cpp                      |    31 +-
 src/VBox/VMM/VMMR0/GIMR0.cpp                       |     6 +-
 src/VBox/VMM/VMMR0/GIMR0Hv.cpp                     |     6 +-
 src/VBox/VMM/VMMR0/GIMR0Kvm.cpp                    |     8 +-
 src/VBox/VMM/VMMR0/GMMR0.cpp                       |   314 +-
 src/VBox/VMM/VMMR0/GVMMR0.cpp                      |    65 +-
 src/VBox/VMM/VMMR0/HMR0.cpp                        |    50 +-
 src/VBox/VMM/VMMR0/HMR0A.asm                       |    20 +-
 src/VBox/VMM/VMMR0/HMSVMR0.cpp                     |   377 +-
 src/VBox/VMM/VMMR0/HMSVMR0.h                       |    10 +-
 src/VBox/VMM/VMMR0/HMVMXR0.cpp                     |   549 +-
 src/VBox/VMM/VMMR0/HMVMXR0.h                       |     2 +-
 src/VBox/VMM/VMMR0/PDMR0Device.cpp                 |    16 +-
 src/VBox/VMM/VMMR0/PDMR0Driver.cpp                 |     4 +-
 src/VBox/VMM/VMMR0/PGMR0.cpp                       |    26 +-
 src/VBox/VMM/VMMR0/PGMR0SharedPage.cpp             |     2 +-
 src/VBox/VMM/VMMR0/TRPMR0.cpp                      |     2 +-
 src/VBox/VMM/VMMR0/VMMR0.cpp                       |    39 +-
 src/VBox/VMM/VMMR3/CFGM.cpp                        |    53 +-
 src/VBox/VMM/VMMR3/CPUM.cpp                        |    57 +-
 src/VBox/VMM/VMMR3/CPUMDbg.cpp                     |    56 +-
 src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp                 |    68 +-
 src/VBox/VMM/VMMR3/CPUMR3Db.cpp                    |   150 +-
 src/VBox/VMM/VMMR3/CSAM.cpp                        |    74 +-
 src/VBox/VMM/VMMR3/DBGF.cpp                        |    69 +-
 src/VBox/VMM/VMMR3/DBGFAddr.cpp                    |     3 +-
 src/VBox/VMM/VMMR3/DBGFBp.cpp                      |    18 +-
 src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp               |    52 +-
 src/VBox/VMM/VMMR3/DBGFCpu.cpp                     |     4 +-
 src/VBox/VMM/VMMR3/DBGFDisas.cpp                   |    35 +-
 src/VBox/VMM/VMMR3/DBGFInfo.cpp                    |    22 +-
 src/VBox/VMM/VMMR3/DBGFMem.cpp                     |     3 +-
 src/VBox/VMM/VMMR3/DBGFR3PlugIn.cpp                |     2 +-
 src/VBox/VMM/VMMR3/DBGFR3Trace.cpp                 |    14 +-
 src/VBox/VMM/VMMR3/DBGFReg.cpp                     |    36 +-
 src/VBox/VMM/VMMR3/EM.cpp                          |    60 +-
 src/VBox/VMM/VMMR3/EMHM.cpp                        |    29 +-
 src/VBox/VMM/VMMR3/EMRaw.cpp                       |    58 +-
 src/VBox/VMM/VMMR3/FTM.cpp                         |    54 +-
 src/VBox/VMM/VMMR3/GIM.cpp                         |    60 +-
 src/VBox/VMM/VMMR3/GIMHv.cpp                       |    23 +-
 src/VBox/VMM/VMMR3/GIMKvm.cpp                      |    24 +-
 src/VBox/VMM/VMMR3/GIMMinimal.cpp                  |     6 +-
 src/VBox/VMM/VMMR3/GMM.cpp                         |    13 +-
 src/VBox/VMM/VMMR3/HM.cpp                          |    78 +-
 src/VBox/VMM/VMMR3/IEMR3.cpp                       |     2 +-
 src/VBox/VMM/VMMR3/IOM.cpp                         |    35 +-
 src/VBox/VMM/VMMR3/MM.cpp                          |    28 +-
 src/VBox/VMM/VMMR3/MMHeap.cpp                      |    20 +-
 src/VBox/VMM/VMMR3/MMHyper.cpp                     |    54 +-
 src/VBox/VMM/VMMR3/MMPagePool.cpp                  |    26 +-
 src/VBox/VMM/VMMR3/MMUkHeap.cpp                    |    15 +-
 src/VBox/VMM/VMMR3/PATM.cpp                        |   193 +-
 src/VBox/VMM/VMMR3/PATMGuest.cpp                   |     7 +-
 src/VBox/VMM/VMMR3/PATMPatch.cpp                   |    32 +-
 src/VBox/VMM/VMMR3/PATMPatch.h                     |    26 +-
 src/VBox/VMM/VMMR3/PATMR3Dbg.cpp                   |    41 +-
 src/VBox/VMM/VMMR3/PATMSSM.cpp                     |     6 +-
 src/VBox/VMM/VMMR3/PDM.cpp                         |    58 +-
 src/VBox/VMM/VMMR3/PDMAsyncCompletion.cpp          |    33 +-
 src/VBox/VMM/VMMR3/PDMAsyncCompletionFile.cpp      |     3 +-
 .../VMM/VMMR3/PDMAsyncCompletionFileNormal.cpp     |     9 +-
 src/VBox/VMM/VMMR3/PDMBlkCache.cpp                 |   115 +-
 src/VBox/VMM/VMMR3/PDMCritSect.cpp                 |    70 +-
 src/VBox/VMM/VMMR3/PDMDevHlp.cpp                   |    24 +-
 src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp               |     8 +-
 src/VBox/VMM/VMMR3/PDMDevice.cpp                   |    10 +-
 src/VBox/VMM/VMMR3/PDMDriver.cpp                   |   100 +-
 src/VBox/VMM/VMMR3/PDMLdr.cpp                      |    34 +-
 src/VBox/VMM/VMMR3/PDMNetShaper.cpp                |    14 +-
 src/VBox/VMM/VMMR3/PDMQueue.cpp                    |    22 +-
 src/VBox/VMM/VMMR3/PDMThread.cpp                   |    28 +-
 src/VBox/VMM/VMMR3/PDMUsb.cpp                      |    34 +-
 src/VBox/VMM/VMMR3/PGM.cpp                         |    80 +-
 src/VBox/VMM/VMMR3/PGMBth.h                        |     9 +-
 src/VBox/VMM/VMMR3/PGMDbg.cpp                      |    37 +-
 src/VBox/VMM/VMMR3/PGMGst.h                        |     9 +-
 src/VBox/VMM/VMMR3/PGMHandler.cpp                  |    25 +-
 src/VBox/VMM/VMMR3/PGMMap.cpp                      |    43 +-
 src/VBox/VMM/VMMR3/PGMPhys.cpp                     |   123 +-
 src/VBox/VMM/VMMR3/PGMPhysRWTmpl.h                 |     4 +-
 src/VBox/VMM/VMMR3/PGMPool.cpp                     |    28 +-
 src/VBox/VMM/VMMR3/PGMSavedState.cpp               |   110 +-
 src/VBox/VMM/VMMR3/PGMSharedPage.cpp               |    16 +-
 src/VBox/VMM/VMMR3/PGMShw.h                        |     9 +-
 src/VBox/VMM/VMMR3/SELM.cpp                        |    72 +-
 src/VBox/VMM/VMMR3/SSM.cpp                         |   243 +-
 src/VBox/VMM/VMMR3/STAM.cpp                        |    65 +-
 src/VBox/VMM/VMMR3/TM.cpp                          |   123 +-
 src/VBox/VMM/VMMR3/TRPM.cpp                        |    34 +-
 src/VBox/VMM/VMMR3/VM.cpp                          |   119 +-
 src/VBox/VMM/VMMR3/VMEmt.cpp                       |    18 +-
 src/VBox/VMM/VMMR3/VMM.cpp                         |    90 +-
 src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp           |     5 +-
 src/VBox/VMM/VMMR3/VMMSwitcher.cpp                 |    16 +-
 src/VBox/VMM/VMMR3/VMMTests.cpp                    |    12 +-
 src/VBox/VMM/VMMR3/VMReq.cpp                       |    14 +-
 src/VBox/VMM/VMMR3/cpus/Intel_Atom_330_1_60GHz.h   |   206 +
 src/VBox/VMM/VMMR3/cpus/Intel_Core_i7_5600U.h      |   364 +
 src/VBox/VMM/VMMRC/CPUMRC.cpp                      |     8 +-
 src/VBox/VMM/VMMRC/CSAMRC.cpp                      |    15 +-
 src/VBox/VMM/VMMRC/IOMRC.cpp                       |    20 +-
 src/VBox/VMM/VMMRC/MMRamRC.cpp                     |    16 +-
 src/VBox/VMM/VMMRC/PATMRC.cpp                      |   158 +-
 src/VBox/VMM/VMMRC/PDMRCDevice.cpp                 |    18 +-
 src/VBox/VMM/VMMRC/SELMRC.cpp                      |    67 +-
 src/VBox/VMM/VMMRC/TRPMRC.cpp                      |    36 +-
 src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp              |    26 +-
 src/VBox/VMM/VMMRC/VMMRC.cpp                       |    18 +-
 src/VBox/VMM/VMMRZ/DBGFRZ.cpp                      |     8 +-
 src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp                 |    40 +-
 src/VBox/VMM/VMMRZ/VMMRZ.cpp                       |    18 +-
 src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac        |     2 +-
 src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac        |    14 +-
 src/VBox/VMM/include/CSAMInternal.h                |     2 +-
 src/VBox/VMM/include/EMHandleRCTmpl.h              |     9 +-
 src/VBox/VMM/include/GIMKvmInternal.h              |     2 +-
 src/VBox/VMM/include/HMInternal.h                  |    32 +-
 src/VBox/VMM/include/IEMInternal.h                 |     6 +-
 src/VBox/VMM/include/IOMInline.h                   |    22 +-
 src/VBox/VMM/include/MMInternal.h                  |     2 +-
 src/VBox/VMM/include/PATMInternal.h                |     2 +-
 src/VBox/VMM/include/PDMBlkCacheInternal.h         |     2 +-
 src/VBox/VMM/include/PDMInline.h                   |     2 +-
 src/VBox/VMM/include/PDMInternal.h                 |     6 +-
 src/VBox/VMM/include/PGMInline.h                   |   111 +-
 src/VBox/VMM/include/PGMInternal.h                 |    64 +-
 src/VBox/VMM/include/SELMInline.h                  |     6 +-
 src/VBox/VMM/include/TMInternal.h                  |     4 +-
 src/VBox/VMM/include/TRPMInternal.h                |    20 +-
 src/VBox/VMM/include/VMMInternal.h                 |    23 +-
 src/VBox/VMM/include/VMMSwitcher.h                 |     2 +-
 src/VBox/VMM/tools/VBoxCpuReport.cpp               |    10 +-
 .../utils/TestExecServ/TestExecServiceTcp.cpp      |     2 +-
 src/VBox/ValidationKit/utils/cpu/cidet.h           |     2 +-
 src/VBox/ValidationKit/utils/network/NetPerf.cpp   |     4 +-
 src/libs/xpcom18a4/nsprpub/lib/ds/plarena.c        |    10 +
 src/libs/xpcom18a4/nsprpub/lib/ds/plarena.h        |    36 +-
 src/recompiler/VBoxRecompiler.c                    |    25 +-
 772 files changed, 31450 insertions(+), 25142 deletions(-)

diff --git a/Config.kmk b/Config.kmk
index 4077431..4fd6f9c 100644
--- a/Config.kmk
+++ b/Config.kmk
@@ -208,7 +208,7 @@ VBOX_VERSION_MINOR = 0
 # This is the current build number. It should be increased every time we publish a
 # new build. The define is available in every source file. Only even build numbers
 # will be published, odd numbers are set during development.
-VBOX_VERSION_BUILD = 8
+VBOX_VERSION_BUILD = 10
 # The raw version string. This *must not* contain any other information/fields than
 # major, minor and build revision (as it is now) -- also will be used for host/guest version
 # comparison.
@@ -549,7 +549,7 @@ if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), solaris.amd64 win.amd64)
  endif
 endif
 # Whether to generate a database of USB vendor IDs and device IDs into VBoxSVC.
-#VBOX_WITH_MAIN_USB_ID_DATABASE = 1
+VBOX_WITH_MAIN_USB_ID_DATABASE = 1
 # The recompiler.
 VBOX_WITH_REM = 1
 # Set this to prefix all C symbols in XPCOM, to avoid dynamic linking problems
@@ -657,6 +657,10 @@ if1of ($(KBUILD_TARGET), darwin linux solaris win)
   endif
  endif
 endif
+# Use the VRDE external authentication library from VBoxSVC
+if1of ($(KBUILD_TARGET), win)
+ VBOX_WITH_VRDEAUTH_IN_VBOXSVC = 1
+endif
 # Enables use of merge modules in the windows installer. This will increase
 # the overall installer size significantly because merge modules are not able
 # to use a common .cab file to reduce their size.
@@ -5161,7 +5165,7 @@ ifdef VBOX_WITH_QTGUI
   VBOX_QT4_INFIX=VBox
  endif
 
- VBOX_QT4_MOD = QtCore QtGui QtNetwork $(if $(VBOX_GUI_USE_QGL),QtOpenGL,)
+ VBOX_QT4_MOD = QtCore QtGui $(if $(VBOX_GUI_USE_QGL),QtOpenGL,)
  VBOX_QT4_MOD_NAMES = $(foreach qtmod,$(VBOX_QT4_MOD),$(qtmod)$(VBOX_QT4_INFIX))
 
  # Hack LD_LIBRARY_PATH for stuff in tools.
@@ -6159,7 +6163,7 @@ endif
 SVN                    ?= svn$(HOSTSUFF_EXE)
 VBOX_SVN_REV_KMK        = $(PATH_OUT)/revision.kmk
 ifndef VBOX_SVN_REV
- VBOX_SVN_REV_FALLBACK := $(patsubst %:,,  $Rev: 103449 $  )
+ VBOX_SVN_REV_FALLBACK := $(patsubst %:,,  $Rev: 104061 $  )
  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         :=
diff --git a/Doxyfile.Core b/Doxyfile.Core
index 0d259c7..ecdbffe 100644
--- a/Doxyfile.Core
+++ b/Doxyfile.Core
@@ -1,4 +1,4 @@
-# Doxyfile 1.5.4
+# Doxyfile 1.8.9
 
 #---------------------------------------------------------------------------
 # Project related configuration options
@@ -6,8 +6,11 @@
 DOXYFILE_ENCODING      = UTF-8
 PROJECT_NAME           = VBox
 PROJECT_NUMBER         =
-# OUTPUT_DIRECTORY       =  later
+PROJECT_BRIEF          =
+PROJECT_LOGO           =
+# OUTPUT_DIRECTORY       = later
 CREATE_SUBDIRS         = NO
+ALLOW_UNICODE_NAMES    = NO
 OUTPUT_LANGUAGE        = English
 BRIEF_MEMBER_DESC      = YES
 REPEAT_BRIEF           = YES
@@ -21,7 +24,6 @@ SHORT_NAMES            = NO
 JAVADOC_AUTOBRIEF      = YES
 QT_AUTOBRIEF           = NO
 MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP         = NO
 INHERIT_DOCS           = YES
 SEPARATE_MEMBER_PAGES  = NO
 TAB_SIZE               = 4
@@ -31,6 +33,11 @@ ALIASES                = \
     "vmstate=@par VM State In:\n" \
     "vmstateto=@par VM State Out:\n"
 
+# Input / output paragraphs.
+ALIASES                += \
+    "output=@par Output:\n" \
+    "input=@par Input:\n"
+
 # Interface method implementation macros.
 ALIASES                += \
     interface_method_impl{2}="Implements \1 method \link \1::\2 \2 \endlink @copydoc \1::\2 "
@@ -45,7 +52,7 @@ ALIASES                += \
 ALIASES                += \
     callback_method_impl{2}="\2. \
 \
-Implements the callback \link \1 \1 "
+Implements the callback \link \1 \1 \endlink "
 
 # The following is for Global Configuration options.
 ALIASES                += \
@@ -257,20 +264,30 @@ http://www.virtualbox.org/ticket/\3, \
 http://www.virtualbox.org/ticket/\4"
 
 
+TCL_SUBST              =
 OPTIMIZE_OUTPUT_FOR_C  = YES
 OPTIMIZE_OUTPUT_JAVA   = NO
+OPTIMIZE_FOR_FORTRAN   = NO
+OPTIMIZE_OUTPUT_VHDL   = NO
+EXTENSION_MAPPING      =
+MARKDOWN_SUPPORT       = YES
+AUTOLINK_SUPPORT       = YES
 BUILTIN_STL_SUPPORT    = NO
 CPP_CLI_SUPPORT        = NO
 SIP_SUPPORT            = NO
+IDL_PROPERTY_SUPPORT   = YES
 DISTRIBUTE_GROUP_DOC   = NO
 SUBGROUPING            = YES
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS  = NO
 TYPEDEF_HIDES_STRUCT   = NO
-
+LOOKUP_CACHE_SIZE      = 0
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------
 EXTRACT_ALL            = YES
 EXTRACT_PRIVATE        = YES
+EXTRACT_PACKAGE        = NO
 EXTRACT_STATIC         = YES
 EXTRACT_LOCAL_CLASSES  = YES
 EXTRACT_LOCAL_METHODS  = NO
@@ -282,11 +299,17 @@ HIDE_IN_BODY_DOCS      = NO
 INTERNAL_DOCS          = NO
 CASE_SENSE_NAMES       = NO
 HIDE_SCOPE_NAMES       = NO
+HIDE_COMPOUND_REFERENCE= NO
 SHOW_INCLUDE_FILES     = YES
+SHOW_GROUPED_MEMB_INC  = NO
+FORCE_LOCAL_INCLUDES   = NO
 INLINE_INFO            = YES
 SORT_MEMBER_DOCS       = YES
 SORT_BRIEF_DOCS        = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES       = NO
 SORT_BY_SCOPE_NAME     = NO
+STRICT_PROTO_MATCHING  = NO
 GENERATE_TODOLIST      = YES
 GENERATE_TESTLIST      = YES
 GENERATE_BUGLIST       = YES
@@ -294,11 +317,13 @@ GENERATE_DEPRECATEDLIST= YES
 ENABLED_SECTIONS       =
 MAX_INITIALIZER_LINES  = 30
 SHOW_USED_FILES        = YES
-SHOW_DIRECTORIES       = NO
+SHOW_FILES             = YES
+SHOW_NAMESPACES        = YES
 FILE_VERSION_FILTER    =
-
+LAYOUT_FILE            =
+CITE_BIB_FILES         =
 #---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
 QUIET                  = YES
 WARNINGS               = YES
@@ -308,9 +333,8 @@ WARN_IF_DOC_ERROR      = YES
 WARN_NO_PARAMDOC       = NO
 WARN_FORMAT            = "$file:$line: $text"
 #WARN_LOGFILE           = later
-
 #---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
 #---------------------------------------------------------------------------
 # INPUT                  = later
 INPUT_ENCODING         = UTF-8
@@ -332,9 +356,10 @@ IMAGE_PATH             = \
 INPUT_FILTER           =
 FILTER_PATTERNS        =
 FILTER_SOURCE_FILES    = NO
-
+FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE =
 #---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
 #---------------------------------------------------------------------------
 SOURCE_BROWSER         = NO
 INLINE_SOURCES         = NO
@@ -342,18 +367,19 @@ STRIP_CODE_COMMENTS    = YES
 REFERENCED_BY_RELATION = YES
 REFERENCES_RELATION    = YES
 REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS        = YES
 USE_HTAGS              = NO
 VERBATIM_HEADERS       = YES
-
+CLANG_ASSISTED_PARSING = NO
+CLANG_OPTIONS          =
 #---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
 ALPHABETICAL_INDEX     = NO
 COLS_IN_ALPHA_INDEX    = 5
 IGNORE_PREFIX          =
-
 #---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
 #---------------------------------------------------------------------------
 GENERATE_HTML          = YES
 HTML_OUTPUT            = html
@@ -361,21 +387,57 @@ HTML_FILE_EXTENSION    = .html
 HTML_HEADER            =
 HTML_FOOTER            =
 HTML_STYLESHEET        =
-HTML_ALIGN_MEMBERS     = YES
-GENERATE_HTMLHELP      = NO
+HTML_EXTRA_STYLESHEET  =
+HTML_EXTRA_FILES       =
+HTML_COLORSTYLE_HUE    = 220
+HTML_COLORSTYLE_SAT    = 100
+HTML_COLORSTYLE_GAMMA  = 80
+HTML_TIMESTAMP         = YES
 HTML_DYNAMIC_SECTIONS  = NO
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET        = NO
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME  = Publisher
+GENERATE_HTMLHELP      = NO
 CHM_FILE               =
 HHC_LOCATION           =
 GENERATE_CHI           = NO
+CHM_INDEX_ENCODING     =
 BINARY_TOC             = NO
 TOC_EXPAND             = NO
+GENERATE_QHP           = NO
+QCH_FILE               =
+QHP_NAMESPACE          = org.doxygen.Project
+QHP_VIRTUAL_FOLDER     = doc
+QHP_CUST_FILTER_NAME   =
+QHP_CUST_FILTER_ATTRS  =
+QHP_SECT_FILTER_ATTRS  =
+QHG_LOCATION           =
+GENERATE_ECLIPSEHELP   = NO
+ECLIPSE_DOC_ID         = org.doxygen.Project
 DISABLE_INDEX          = NO
-ENUM_VALUES_PER_LINE   = 4
 GENERATE_TREEVIEW      = NO
+ENUM_VALUES_PER_LINE   = 4
 TREEVIEW_WIDTH         = 250
-
+EXT_LINKS_IN_WINDOW    = NO
+FORMULA_FONTSIZE       = 10
+FORMULA_TRANSPARENT    = YES
+USE_MATHJAX            = NO
+MATHJAX_FORMAT         = HTML-CSS
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+MATHJAX_EXTENSIONS     =
+MATHJAX_CODEFILE       =
+SEARCHENGINE           = NO
+SERVER_BASED_SEARCH    = NO
+EXTERNAL_SEARCH        = NO
+SEARCHENGINE_URL       =
+SEARCHDATA_FILE        = searchdata.xml
+EXTERNAL_SEARCH_ID     =
+EXTRA_SEARCH_MAPPINGS  =
 #---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 GENERATE_LATEX         = NO
 LATEX_OUTPUT           = latex
@@ -385,13 +447,17 @@ COMPACT_LATEX          = NO
 PAPER_TYPE             = a4wide
 EXTRA_PACKAGES         =
 LATEX_HEADER           =
+LATEX_FOOTER           =
+LATEX_EXTRA_STYLESHEET =
+LATEX_EXTRA_FILES      =
 PDF_HYPERLINKS         = NO
 USE_PDFLATEX           = NO
 LATEX_BATCHMODE        = NO
 LATEX_HIDE_INDICES     = NO
-
+LATEX_SOURCE_CODE      = NO
+LATEX_BIB_STYLE        = plain
 #---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
 #---------------------------------------------------------------------------
 GENERATE_RTF           = NO
 RTF_OUTPUT             = rtf
@@ -399,37 +465,38 @@ COMPACT_RTF            = NO
 RTF_HYPERLINKS         = NO
 RTF_STYLESHEET_FILE    =
 RTF_EXTENSIONS_FILE    =
-
+RTF_SOURCE_CODE        = NO
 #---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
 #---------------------------------------------------------------------------
 GENERATE_MAN           = NO
 MAN_OUTPUT             = man
 MAN_EXTENSION          = .3
+MAN_SUBDIR             =
 MAN_LINKS              = NO
-
 #---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
 #---------------------------------------------------------------------------
 GENERATE_XML           = NO
 XML_OUTPUT             = xml
-XML_SCHEMA             =
-XML_DTD                =
 XML_PROGRAMLISTING     = YES
-
 #---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK       = NO
+DOCBOOK_OUTPUT         = docbook
+DOCBOOK_PROGRAMLISTING = NO
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
 GENERATE_AUTOGEN_DEF   = NO
-
 #---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# Configuration options related to the Perl module output
 #---------------------------------------------------------------------------
 GENERATE_PERLMOD       = NO
 PERLMOD_LATEX          = NO
 PERLMOD_PRETTY         = YES
 PERLMOD_MAKEVAR_PREFIX =
-
 #---------------------------------------------------------------------------
 # Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
@@ -439,11 +506,88 @@ EXPAND_ONLY_PREDEF     = YES
 SEARCH_INCLUDES        = YES
 # INCLUDE_PATH           = later
 # INCLUDE_FILE_PATTERNS  = later
+
 PREDEFINED             =  \
     DOXYGEN_RUNNING \
     RT_C_DECLS_END \
     RT_C_DECLS_BEGIN \
-    VBOX \
+    VBOX=1 \
+    RT_STRICT=1 \
+    VBOX_STRICT=1 \
+    __cplusplus=1 \
+    ARCH_BITS=HC_ARCH_BITS \
+    R3_ARCH_BITS=HC_ARCH_BITS \
+    R0_ARCH_BITS=HC_ARCH_BITS \
+    RTDECL(type)=type \
+    RT_EXPORT_SYMBOL(name)= \
+    \
+    RT_SRC_POS=1 \
+    RT_SRC_POS_ARGS=SRC_POS \
+    "RT_SRC_POS_DECL=int SRC_POS" \
+    "RTLOG_COMMA_SRC_POS_DECL=, int SRC_POS" \
+    \
+    RT_IPRT_FORMAT_ATTR(a,b)= \
+    RT_IPRT_FORMAT_ATTR_MAYBE_NULL(a,b)= \
+    RT_NO_THROW_PROTO= \
+    RTASN1CONTEXTTAG_IMPL_CURSOR_INLINES(a)= 
+
+# decl and calling conventions.
+PREDEFINED += \
+    "DECLINLINE(type)=inline type" \
+    DECL_FORCE_INLINE(type)=DECLINLINE(type) \
+    DECL_NO_INLINE(type)=type \
+    DECLCALLBACK(type)=type \
+    DECLEXPORT(type)=type \
+    DECLIMPORT(type)=type \
+    DECLHIDDEN(type)=type \
+    DECL_HIDDEN_CONST(type)=type \
+    DECLASM(type)=type \
+    DECLNORETURN(type)=type \
+    VBOXCALL= \
+    RTCALL= \
+    DECLVBGL(type)=type \
+    DECLR0VBGL(type)=type \
+    USBLIB_DECL(type)=type \
+    VMMDECL(type)=type \
+    VMMR0DECL(type)=type \
+    VMMR3DECL(type)=type \
+    VMMRCDECL(type)=type \
+    VMMRZDECL(type)=type \
+    VMMR0_INT_DECL(type)=type \
+    VMMR3_INT_DECL(type)=type \
+    VMMRC_INT_DECL(type)=type \
+    VMMRZ_INT_DECL(type)=type \
+    GMMR0DECL(type)=type \
+    GMMR3DECL(type)=type 
+
+# templated fun.
+PREDEFINED += \
+    "PGM_BTH_DECL(type,name)=type pgmBth##name" \
+    "PGM_SHW_DECL(type,name)=type pgmShw##name" \
+    "PGM_GST_DECL(type,name)=type pgmGst##name" \
+    "PGM_BTH_NAME(name)=pgmBth##name" \
+    "PGM_SHW_NAME(name)=pgmShw##name" \
+    "PGM_GST_NAME(name)=pgmGst##name" \
+    PGM_ALL_CB_DECL(type)=type \
+    PGM_ALL_CB2_DECL(type)=type \
+    PGMPHYS_DATATYPE=uintXX_t \
+    "PGMPHYSFN_READNAME(a,b,c)=PGMR3PhysReadUxx(a,b,c)" \
+    "PGMPHYSFN_WRITENAME(a,b,c,d)=PGMR3PhysWriteUxx(a,b,c,d)" \
+
+# context hacks.
+PREDEFINED            += RCPTRTYPE(RCType)=RCType
+PREDEFINED            += R3PTRTYPE(R3Type)=R3Type
+PREDEFINED            += R0PTRTYPE(R0Type)=R0Type
+PREDEFINED            += HCPTRTYPE(HCType)=HCType
+PREDEFINED            += R3R0PTRTYPE(R3R0Type)=R3R0Type
+PREDEFINED += \
+        "CTX_SUFF(var)=var##R3" \
+        "CTX_SUFF_Z(var)=var##RZ" \
+        "CTX_MID(first,last)=firstr##R3##last" \
+        "CTX_MID_Z(first,last)=firstr##RZ##last" \
+
+# Compile assertion hacks.
+PREDEFINED            += \
     AssertCompileNS(expr) \
     AssertCompile(expr) \
     AssertCompileSize(type, size) \
@@ -458,81 +602,72 @@ PREDEFINED             =  \
     AssertCompileMembersSameSize(type1, member1, type2, member2) \
     AssertCompileMembersSameSizeAndOffset(type1, member1, type2, member2)
 
-# context hacks.
-PREDEFINED            += RCPTRTYPE(RCType)=RCType
-PREDEFINED            += R3PTRTYPE(R3Type)=R3Type
-PREDEFINED            += R0PTRTYPE(R0Type)=R0Type
-PREDEFINED            += HCPTRTYPE(HCType)=HCType
-PREDEFINED            += R3R0PTRTYPE(R3R0Type)=R3R0Type
-# Compile assertion hacks.
-PREDEFINED            += \
-    AssertCompile(expr) \
-    AssertCompileSize(a,b) \
-    AssertCompileSizeAlignment(a,b) \
-    AssertCompileMemberSizeAlignment(a,b,c) \
-    AssertCompileMemberAlignment(a,b,c) \
-    AssertCompileMemberOffset(a,b,c) \
-    AssertCompile2MemberOffsets(a,b,c)
 # COM/XPCOM hacks.
-PREDEFINED            += STDMETHODIMP=HRESULT
-PREDEFINED            += "COMGETTER(n)=get_##n"
-PREDEFINED            += "COMSETTER(n)=set_##n"
+PREDEFINED            += \
+    STDMETHODIMP=HRESULT \
+    "COMGETTER(n)=get_##n" \
+    "COMSETTER(n)=set_##n" \
+    "ComSafeArrayIn(aType,aArg)=aType *aArg" \
+    "ComSafeArrayOut(aType, aArg)=aType **aArg" \
+    DECLARE_CLS_COPY_CTOR_ASSIGN_NOOP(a)=
+
 # COM hacks from From http://www.stack.nl/~dimitri/doxygen/preprocessing.html
-PREDEFINED          += "DECLARE_INTERFACE(name)=class name" \
-                       "STDMETHOD_(result,name)=virtual result name" \
-                       "PURE= = 0" \
-                       THIS_= \
-                       THIS= \
-                       DECLARE_REGISTRY_RESOURCEID=// \
-                       DECLARE_PROTECT_FINAL_CONSTRUCT=// \
-                       "DECLARE_AGGREGATABLE(Class)= " \
-                       "DECLARE_REGISTRY_RESOURCEID(Id)= " \
-                       DECLARE_MESSAGE_MAP= \
-                       BEGIN_MESSAGE_MAP=/* \
-                       END_MESSAGE_MAP=*/// \
-                       BEGIN_COM_MAP=/* \
-                       END_COM_MAP=*/// \
-                       BEGIN_PROP_MAP=/* \
-                       END_PROP_MAP=*/// \
-                       BEGIN_MSG_MAP=/* \
-                       END_MSG_MAP=*/// \
-                       BEGIN_PROPERTY_MAP=/* \
-                       END_PROPERTY_MAP=*/// \
-                       BEGIN_OBJECT_MAP=/* \
-                       END_OBJECT_MAP()=*/// \
-                       DECLARE_VIEW_STATUS=// \
-                       "STDMETHOD(a)=HRESULT a" \
-                       "ATL_NO_VTABLE= " \
-                       "__declspec(a)= " \
-                       BEGIN_CONNECTION_POINT_MAP=/* \
-                       END_CONNECTION_POINT_MAP=*/// \
-                       "DECLARE_DYNAMIC(class)= " \
-                       "IMPLEMENT_DYNAMIC(class1, class2)= " \
-                       "DECLARE_DYNCREATE(class)= " \
-                       "IMPLEMENT_DYNCREATE(class1, class2)= " \
-                       "IMPLEMENT_SERIAL(class1, class2, class3)= " \
-                       "DECLARE_MESSAGE_MAP()= " \
-                       TRY=try \
-                       "CATCH_ALL(e)= catch(...)" \
-                       END_CATCH_ALL= \
-                       "THROW_LAST()= throw"\
-                       "RUNTIME_CLASS(class)=class" \
-                       "MAKEINTRESOURCE(nId)=nId" \
-                       "IMPLEMENT_REGISTER(v, w, x, y, z)= " \
-                       "ASSERT(x)=assert(x)" \
-                       "ASSERT_VALID(x)=assert(x)" \
-                       "TRACE0(x)=printf(x)" \
-                       "OS_ERR(A,B)={ #A, B }" \
-                       __cplusplus \
-                       "DECLARE_OLECREATE(class)= " \
-                       "BEGIN_DISPATCH_MAP(class1, class2)= " \
-                       "BEGIN_INTERFACE_MAP(class1, class2)= " \
-                       "INTERFACE_PART(class, id, name)= " \
-                       "END_INTERFACE_MAP()=" \
-                       "DISP_FUNCTION(class, name, function, result, id)=" \
-                       "END_DISPATCH_MAP()=" \
-                       "IMPLEMENT_OLECREATE2(class, name, id1, id2, id3, id4,\
-                        id5, id6, id7, id8, id9, id10, id11)="
+PREDEFINED          += \
+    "DECLARE_INTERFACE(name)=class name" \
+    "STDMETHOD_(result,name)=virtual result name" \
+    "PURE= = 0" \
+    THIS_= \
+    THIS= \
+    DECLARE_REGISTRY_RESOURCEID=// \
+    DECLARE_PROTECT_FINAL_CONSTRUCT=// \
+    "DECLARE_AGGREGATABLE(Class)= " \
+    "DECLARE_REGISTRY_RESOURCEID(Id)= " \
+    DECLARE_MESSAGE_MAP= \
+    BEGIN_MESSAGE_MAP=/* \
+    END_MESSAGE_MAP=*/// \
+    BEGIN_COM_MAP=/* \
+    END_COM_MAP=*/// \
+    BEGIN_PROP_MAP=/* \
+    END_PROP_MAP=*/// \
+    BEGIN_MSG_MAP=/* \
+    END_MSG_MAP=*/// \
+    BEGIN_PROPERTY_MAP=/* \
+    END_PROPERTY_MAP=*/// \
+    BEGIN_OBJECT_MAP=/* \
+    END_OBJECT_MAP()=*/// \
+    DECLARE_VIEW_STATUS=// \
+    "STDMETHOD(a)=HRESULT a" \
+    "ATL_NO_VTABLE= " \
+    "__declspec(a)= " \
+    BEGIN_CONNECTION_POINT_MAP=/* \
+    END_CONNECTION_POINT_MAP=*/// \
+    "DECLARE_DYNAMIC(class)= " \
+    "IMPLEMENT_DYNAMIC(class1, class2)= " \
+    "DECLARE_DYNCREATE(class)= " \
+    "IMPLEMENT_DYNCREATE(class1, class2)= " \
+    "IMPLEMENT_SERIAL(class1, class2, class3)= " \
+    "DECLARE_MESSAGE_MAP()= " \
+    TRY=try \
+    "CATCH_ALL(e)= catch(...)" \
+    END_CATCH_ALL= \
+    "THROW_LAST()= throw"\
+    "RUNTIME_CLASS(class)=class" \
+    "MAKEINTRESOURCE(nId)=nId" \
+    "IMPLEMENT_REGISTER(v, w, x, y, z)= " \
+    "ASSERT(x)=assert(x)" \
+    "ASSERT_VALID(x)=assert(x)" \
+    "TRACE0(x)=printf(x)" \
+    "OS_ERR(A,B)={ #A, B }" \
+    __cplusplus \
+    "DECLARE_OLECREATE(class)= " \
+    "BEGIN_DISPATCH_MAP(class1, class2)= " \
+    "BEGIN_INTERFACE_MAP(class1, class2)= " \
+    "INTERFACE_PART(class, id, name)= " \
+    "END_INTERFACE_MAP()=" \
+    "DISP_FUNCTION(class, name, function, result, id)=" \
+    "END_DISPATCH_MAP()=" \
+    "IMPLEMENT_OLECREATE2(class, name, id1, id2, id3, id4,\
+    id5, id6, id7, id8, id9, id10, id11)="
 
 EXPAND_AS_DEFINED      = \
     RCPTRTYPE \
@@ -605,27 +740,32 @@ EXPAND_AS_DEFINED      = \
     VMM_INT_DECL
 
 SKIP_FUNCTION_MACROS   = NO
-
 #---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration options related to external references
 #---------------------------------------------------------------------------
 TAGFILES               =
 GENERATE_TAGFILE       =
 ALLEXTERNALS           = NO
 EXTERNAL_GROUPS        = YES
+EXTERNAL_PAGES         = YES
 PERL_PATH              = /usr/bin/perl
-
 #---------------------------------------------------------------------------
 # Configuration options related to the dot tool
 #---------------------------------------------------------------------------
 CLASS_DIAGRAMS         = YES
 MSCGEN_PATH            =
+DIA_PATH               =
 HIDE_UNDOC_RELATIONS   = YES
 HAVE_DOT               = NO
+DOT_NUM_THREADS        = 0
+DOT_FONTNAME           = Helvetica
+DOT_FONTSIZE           = 10
+DOT_FONTPATH           =
 CLASS_GRAPH            = YES
 COLLABORATION_GRAPH    = YES
 GROUP_GRAPHS           = YES
 UML_LOOK               = YES
+UML_LIMIT_NUM_FIELDS   = 10
 TEMPLATE_RELATIONS     = YES
 INCLUDE_GRAPH          = YES
 INCLUDED_BY_GRAPH      = YES
@@ -634,16 +774,16 @@ CALLER_GRAPH           = YES
 GRAPHICAL_HIERARCHY    = YES
 DIRECTORY_GRAPH        = YES
 DOT_IMAGE_FORMAT       = png
+INTERACTIVE_SVG        = NO
 DOT_PATH               =
 DOTFILE_DIRS           =
+MSCFILE_DIRS           =
+DIAFILE_DIRS           =
+PLANTUML_JAR_PATH      =
+PLANTUML_INCLUDE_PATH  =
 DOT_GRAPH_MAX_NODES    = 50
 MAX_DOT_GRAPH_DEPTH    = 0
 DOT_TRANSPARENT        = YES
 DOT_MULTI_TARGETS      = NO
 GENERATE_LEGEND        = YES
 DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-SEARCHENGINE           = NO
diff --git a/Makefile.kmk b/Makefile.kmk
index 54a106b..3481865 100644
--- a/Makefile.kmk
+++ b/Makefile.kmk
@@ -445,7 +445,13 @@ OTHER_CLEAN += \
 VBOX_CORE_DOXYFILE_INPUT_DIRS = \
 	include/iprt \
 	include/iprt/cpp \
+	include/iprt/crypto \
+	include/iprt/formats \
 	include/iprt/linux \
+	include/iprt/nt \
+	include/iprt/solaris \
+	include/iprt/win \
+	include/iprt/nocrt \
 	include/VBox \
 	include/VBox/vmm \
 	include/VBox/com \
@@ -459,12 +465,14 @@ VBOX_CORE_DOXYFILE_INPUT_DIRS = \
 	src/VBox/VMM/VMMR3 \
 	src/VBox/VMM/VMMAll \
 	src/VBox/VMM/VMMSwitcher \
+	src/VBox/VMM/include \
 	src/VBox/Debugger \
 	src/VBox/Devices \
 	src/VBox/Devices/Audio \
 	src/VBox/Devices/Bus \
 	src/VBox/Devices/Graphics \
 	src/VBox/Devices/Graphics/BIOS \
+	src/VBox/Devices/Graphics/shaderlib \
 	src/VBox/Devices/Input \
 	src/VBox/Devices/Networking \
 	src/VBox/Devices/PC \
@@ -577,10 +585,6 @@ VBOX_CORE_DOXYFILE_INPUT_DIRS = \
 	src/VBox/Additions/WINNT/Graphics/Wine_new/libWine \
 	src/VBox/Additions/WINNT/Graphics/Wine_new/switcher \
 	src/VBox/Additions/WINNT/Graphics/Wine_new/vbox \
-	src/VBox/Additions/WINNT/Graphics/Wine_new/vbox/libWineStub \
-	src/VBox/Additions/WINNT/Graphics/Wine_new/vbox/libWineStub/include \
-	src/VBox/Additions/WINNT/Graphics/Wine_new/vbox/libWineStub/include/backup \
-	src/VBox/Additions/WINNT/Graphics/Wine_new/vbox/libWineStub/include/wine \
 	src/VBox/Additions/WINNT/Graphics/Wine_new/wined3d \
 	src/VBox/Additions/WINNT/Installer \
 	src/VBox/Additions/WINNT/Installer/ISO \
@@ -637,7 +641,6 @@ VBOX_CORE_DOXYFILE_INPUT_DIRS = \
 	src/VBox/Additions/os2/VBoxSF \
 	src/VBox/Additions/solaris \
 	src/VBox/Additions/solaris/DRM \
-	src/VBox/Additions/solaris/DRM/include \
 	src/VBox/Additions/solaris/Installer \
 	src/VBox/Additions/solaris/SharedFolders \
 	src/VBox/Additions/solaris/SharedFolders/solaris10 \
@@ -654,7 +657,41 @@ VBOX_CORE_DOXYFILE_INPUT_DIRS = \
 	src/VBox/NetworkServices/DHCP \
 	src/VBox/NetworkServices/NAT \
 	src/VBox/NetworkServices/NetLib \
-	src/VBox/Storage
+	src/VBox/Storage \
+	src/VBox/ValidationKit/ \
+	src/VBox/ValidationKit/docs/ \
+	src/VBox/ValidationKit/testdriver/ \
+	src/VBox/ValidationKit/bootsectors/ \
+	src/VBox/ValidationKit/tests/ \
+	src/VBox/ValidationKit/tests/additions/ \
+	src/VBox/ValidationKit/tests/api/ \
+	src/VBox/ValidationKit/tests/autostart/ \
+	src/VBox/ValidationKit/tests/benchmarks/ \
+	src/VBox/ValidationKit/tests/cpu/ \
+	src/VBox/ValidationKit/tests/installation/ \
+	src/VBox/ValidationKit/tests/network/ \
+	src/VBox/ValidationKit/tests/selftests/ \
+	src/VBox/ValidationKit/tests/smoketests/ \
+	src/VBox/ValidationKit/tests/storage/ \
+	src/VBox/ValidationKit/tests/teleportation/ \
+	src/VBox/ValidationKit/tests/unittests/ \
+	src/VBox/ValidationKit/tests/usb/ \
+	src/VBox/ValidationKit/common/ \
+	src/VBox/ValidationKit/utils/ \
+	src/VBox/ValidationKit/utils/TestExecServ/ \
+	src/VBox/ValidationKit/utils/cpu/ \
+	src/VBox/ValidationKit/utils/misc/ \
+	src/VBox/ValidationKit/utils/network/ \
+	src/VBox/ValidationKit/utils/nt/ \
+	src/VBox/ValidationKit/utils/usb/ \
+	src/VBox/ValidationKit/vms/ \
+	src/VBox/ValidationKit/testmanager/ \
+	src/VBox/ValidationKit/testmanager/core/ \
+	src/VBox/ValidationKit/testmanager/db/ \
+	src/VBox/ValidationKit/testmanager/debug/ \
+	src/VBox/ValidationKit/testmanager/cgi/ \
+	src/VBox/ValidationKit/testmanager/webui/ \
+	src/VBox/ValidationKit/testboxscript/ \
 
 # These must come first in order to make things look nice.
 VBOX_CORE_DOXYFILE_INPUT_FIRST =\
@@ -664,8 +701,8 @@ VBOX_CORE_DOXYFILE_INPUT_FIRST =\
 	$(PATH_ROOT)/src/VBox/VMM/Docs-CodingGuidelines.cpp \
 	$(PATH_ROOT)/src/VBox/VMM/Docs-RawMode.cpp \
 	$(PATH_ROOT)/include/VBox/cdefs.h \
-	$(PATH_ROOT)/include/VBox/vmm/vmapi.h \
 	$(PATH_ROOT)/include/VBox/vmm/vmm.h \
+	$(PATH_ROOT)/include/VBox/vmm/vmapi.h \
 	$(PATH_ROOT)/include/VBox/vmm/cpum.h \
 	$(PATH_ROOT)/include/VBox/vmm/mm.h \
 	$(PATH_ROOT)/include/VBox/vmm/pgm.h \
@@ -675,26 +712,30 @@ VBOX_CORE_DOXYFILE_INPUT_FIRST =\
 	$(PATH_ROOT)/include/VBox/vmm/dbgf.h \
 	$(PATH_ROOT)/include/VBox/vmm/stam.h \
 	$(PATH_ROOT)/include/VBox/vmm/em.h \
+	$(PATH_ROOT)/include/VBox/vmm/hm.h \
+	$(PATH_ROOT)/include/VBox/vmm/hm_svm.h \
+	$(PATH_ROOT)/include/VBox/vmm/hm_vmx.h \
+	$(PATH_ROOT)/include/VBox/vmm/iem.h \
 	$(PATH_ROOT)/include/VBox/vmm/pdm.h \
 	$(PATH_ROOT)/include/VBox/vmm/rem.h \
 	$(PATH_ROOT)/include/VBox/vmm/iom.h \
 	$(PATH_ROOT)/include/VBox/vmm/cfgm.h \
+	$(PATH_ROOT)/include/VBox/vmm/gim.h \
 	$(PATH_ROOT)/include/VBox/vmm/tm.h \
 	$(PATH_ROOT)/include/VBox/vmm/csam.h \
 	$(PATH_ROOT)/include/VBox/vmm/ssm.h \
-	$(PATH_ROOT)/include/VBox/vmm/hm.h \
-	$(PATH_ROOT)/include/VBox/vmm/hm_svm.h \
-	$(PATH_ROOT)/include/VBox/vmm/hm_vmx.h \
 	\
 	$(PATH_ROOT)/src/VBox/VMM/include/CFGMInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/CPUMInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/DBGFInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/EMInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/HMInternal.h \
+	$(PATH_ROOT)/src/VBox/VMM/include/IEMInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/IOMInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/MMInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/PDMInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/PGMInternal.h \
+	$(PATH_ROOT)/src/VBox/VMM/include/GIMInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/CSAMInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/PATMInternal.h \
 	$(PATH_ROOT)/src/VBox/VMM/include/REMInternal.h \
@@ -727,11 +768,14 @@ VBOX_CORE_DOXYFILE_INPUT_FIRST =\
 	\
 	$(PATH_ROOT)/include/VBox/log.h \
 	$(PATH_ROOT)/include/VBox/param.h \
-	$(PATH_ROOT)/include/VBox/version.h
+	$(PATH_ROOT)/include/VBox/version.h \
+       \
+	$(PATH_ROOT)/include/VBox/com/com.h
 
 VBOX_CORE_DOXYFILE_INPUT := \
 	$(filter-out %.cpp.h, $(sort $(wildcard $(addsuffix /*.h, $(VBOX_CORE_DOXYFILE_INPUT_DIRS)))) ) \
-	$(foreach dir, $(VBOX_CORE_DOXYFILE_INPUT_DIRS), $(wildcard $(dir)/*.cpp $(dir)/*.c $(dir)/.asm))
+	$(foreach dir, $(VBOX_CORE_DOXYFILE_INPUT_DIRS) \
+		, $(wildcard $(dir)/*.cpp $(dir)/*.c $(dir)/*.m $(dir)/*.mm $(dir)/*.py $(dir)/.asm))
 VBOX_CORE_DOXYFILE_INPUT := \
 	$(VBOX_CORE_DOXYFILE_INPUT_FIRST) \
 	$(filter-out $(VBOX_CORE_DOXYFILE_INPUT_FIRST), $(VBOX_CORE_DOXYFILE_INPUT))
@@ -752,20 +796,26 @@ $(PATH_TARGET)/Doxyfile.Core: Doxyfile.Core \
 		$(comp-vars VBOX_CORE_DOXYFILE_INPUT,DOXYGEN_INPUT_PREV,FORCE) \
 		$(comp-vars VBOX_CORE_DOXYFILE_OUTPUT,DOXYGEN_OUTPUT_PREV,FORCE) \
 		| $$(dir $$@)
-	$(RM) -f $@ $@.tmp $(PATH_TARGET)/Doxyfile.Core.dep
-	$(CP) -f Doxyfile.Core $@.tmp
-	$(APPEND) $@.tmp
-	$(APPEND) $@.tmp "OUTPUT_DIRECTORY = $(VBOX_CORE_DOXYFILE_OUTPUT)"
-	$(APPEND) $@.tmp "WARN_LOGFILE = $(VBOX_CORE_DOXYFILE_OUTPUT)/errors"
-	$(APPEND) $@.tmp "INCLUDE_PATH = $(PATH_ROOT)/include $(PATH_ROOT)/src/VBox/VMM $(PATH_ROOT)/src/VBox/Main/include "
-	$(APPEND) $@.tmp "INCLUDE_FILE_PATTERNS = *.cpp.h"
-	$(APPEND) $@.tmp
-	$(APPEND) $@.tmp "INPUT = $(VBOX_CORE_DOXYFILE_INPUT)"
-	$(APPEND) $@.tmp
-	$(APPEND) $@.tmp "PREDEFINED += $(DEFS) $(DEFS.$(KBUILD_TARGET)) $(DEFS.$(KBUILD_TARGET_ARCH)) $(ARCH_BITS_DEFS)"
-	$(APPEND) $@.tmp "PREDEFINED += ARCH_BITS=HC_ARCH_BITS R3_ARCH_BITS=HC_ARCH_BITS R0_ARCH_BITS=HC_ARCH_BITS "
-	$(APPEND) $@.tmp
-	$(MV) -f $@.tmp $@
+	$(QUIET)$(RM) -f $@ $@.tmp $(PATH_TARGET)/Doxyfile.Core.dep
+	$(QUIET)$(CP) -f Doxyfile.Core $@.tmp
+	$(QUIET)$(APPEND) $@.tmp
+	$(QUIET)$(APPEND) $@.tmp "OUTPUT_DIRECTORY = $(VBOX_CORE_DOXYFILE_OUTPUT)"
+	$(QUIET)$(APPEND) $@.tmp "WARN_LOGFILE = $(VBOX_CORE_DOXYFILE_OUTPUT)/errors"
+	$(QUIET)$(APPEND) $@.tmp "INCLUDE_PATH = $(PATH_ROOT)/include $(PATH_ROOT)/src/VBox/VMM $(PATH_ROOT)/src/VBox/Main/include "
+	$(QUIET)$(APPEND) $@.tmp "INCLUDE_FILE_PATTERNS = *.cpp.h"
+	$(QUIET)$(APPEND) $@.tmp "EXCLUDE = " \
+		"$(PATH_ROOT)/src/VBox/Additions/common/crOpenGL/utils.c" \
+		"$(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserver/main.c" \
+		"$(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c" \
+		"$(PATH_ROOT)/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_arrays.c" \
+		"$(PATH_ROOT)/src/VBox/Additions/common/crOpenGL/context.c"
+	$(QUIET)$(APPEND) $@.tmp
+	$(QUIET)$(APPEND) $@.tmp 'INPUT = $(foreach x,$(VBOX_CORE_DOXYFILE_INPUT),\$(NLTAB)$(x))'
+	$(QUIET)$(APPEND) $@.tmp
+	$(QUIET)$(APPEND) $@.tmp "PREDEFINED += $(DEFS) $(DEFS.$(KBUILD_TARGET)) $(DEFS.$(KBUILD_TARGET_ARCH)) $(ARCH_BITS_DEFS)"
+	$(QUIET)$(APPEND) $@.tmp "PREDEFINED += ARCH_BITS=HC_ARCH_BITS R3_ARCH_BITS=HC_ARCH_BITS R0_ARCH_BITS=HC_ARCH_BITS "
+	$(QUIET)$(APPEND) $@.tmp
+	$(QUIET)$(MV) -f $@.tmp $@
 	@$(APPEND) $(PATH_TARGET)/Doxyfile.Core.dep "DOXYGEN_OUTPUT_PREV = $(VBOX_CORE_DOXYFILE_OUTPUT)"
 	@$(APPEND) $(PATH_TARGET)/Doxyfile.Core.dep "DOXYGEN_INPUT_PREV = $(VBOX_CORE_DOXYFILE_INPUT)"
 
@@ -774,6 +824,67 @@ $(PATH_TARGET)/docs.Core: $(PATH_TARGET)/Doxyfile.Core $$(VBOX_CORE_DOXYFILE_INP
 	$(RM) -f $(PATH_TARGET)/docs.Core
 	$(RM) -Rf $(VBOX_CORE_DOXYFILE_OUTPUT)/html/
 	doxygen $(PATH_TARGET)/Doxyfile.Core
+	$(SED) -n \
+		-e ':nextwarning' \
+               -e '/^ *$(DOLLAR)/d' \
+		-e '/warning. Unexpected tag .dd. found/d' \
+		-e '/warning. Unsupported xml.html tag .globalScope. found/d' \
+               -e '/\/include\/VBox\/VBoxVideoGuest\.h.* warning/b ignore' \
+               -e '/\/include\/VBox\/sup\.h.* warning/b ignore' \
+               -e '/\/include\/VBox\/settings\.h.* warning/b ignore' \
+               -e '/\/include\/VBox\/com\/EventQueue\.h.* warning/b ignore' \
+               -e '/\/include\/VBox\/com\/NativeEventQueue\.h.* warning/b ignore' \
+               -e '/\/src\/VBox\/Devices\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/Main\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/HostDrivers\/VBoxPci\/VBoxPci\.c.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/WINNT\/Installer\/VBoxDrvInst\.cpp.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/WINNT\/VBoxCredProv\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/WINNT\/VBoxGINA\/Helper\.cpp.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/WINNT\/VBoxGINA\/Helper\.h.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/WINNT\/VBoxTray\/VBoxDispIf\.h.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/WINNT\/VBoxTray\/VBoxDnD\.h.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/WINNT\/VBoxTray\/VBoxDnD\.cpp.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/common\/VBoxVideo\/HGSMIBase\.cpp.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/common\/VBoxVideo\/Modesetting\.cpp.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/common\/crOpenGL\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/common\/pam\/pam_vbox\.cpp.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/os2\/VBoxMouse\/cmdline\.c.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/solaris\/SharedFolders\/vboxfs_prov\.c.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/solaris\/Virtio\/Virtio-solaris\.c.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/solaris\/Virtio\/Virtio-solaris\.h.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/solaris\/Virtio\/VirtioNet-solaris\.c.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/x11\/VBoxClient\/clipboard\.cpp.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/x11\/VBoxClient\/draganddrop\.cpp.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/x11\/VBoxClient\/seamless-x11\.cpp.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/x11\/VBoxClient\/seamless-x11\.h.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/x11\/vboxvideo\/vbva\.c.* warning/b ignore' \
+               -e '/\/src\/VBox\/Additions\/x11\/vboxvideo\/vboxvideo\.h.* warning/b ignore' \
+               -e '/\/src\/VBox\/Debugger\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/HostServices\/GuestControl\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/HostServices\/GuestProperties\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/HostServices\/SharedClipboard\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/HostServices\/SharedFolders\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/HostServices\/SharedOpenGL\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/NetworkServices\/DHCP\/Config\.cpp.* warning/b ignore' \
+               -e '/\/src\/VBox\/NetworkServices\/DHCP\/Config\.h.* warning/b ignore' \
+               -e '/\/src\/VBox\/Storage\/.* warning/b ignore' \
+               -e '/\/src\/VBox\/ValidationKit\/.* warning/b ignore' \
+               \
+               -e '/unable to resolve link to .dtrace_pops_t./b ignore' \
+               \
+               -e 'b end' \
+               -e ':ignore' \
+               -e 'n' \
+               -e '/^[[:space:]]/b ignore' \
+               -e '/^Possible candidates/b ignore' \
+               -e '/^HRESULT HostDnsService/b ignore' \
+               -e 'b nextwarning' \
+               -e ':end' \
+               -e 'p' \
+               --output $(VBOX_CORE_DOXYFILE_OUTPUT)/errors2 \
+		$(VBOX_CORE_DOXYFILE_OUTPUT)/errors
+	$(CAT) $(VBOX_CORE_DOXYFILE_OUTPUT)/errors2
+	$(SED) -e "/[^ ]/q 1" $(VBOX_CORE_DOXYFILE_OUTPUT)/errors2
 	$(APPEND) $(PATH_TARGET)/docs.Core
 
 
diff --git a/configure b/configure
index be49912..0bdf331 100755
--- a/configure
+++ b/configure
@@ -1181,9 +1181,8 @@ extern "C" int main(void)
 }
 EOF
   if test_compile "-lSDL_ttf $I_INCSDL" SDL_ttf SDL_ttf nofatal; then
-    if ! test_execute nofatal; then
+    test_execute nofatal || \
       cnf_append "VBOX_WITH_SECURELABEL" ""
-    fi
   else
     echo "not found -- disabling VBoxSDL secure label."
     cnf_append "VBOX_WITH_SECURELABEL" ""
@@ -1591,20 +1590,18 @@ EOF
           cnf_append "PATH_SDK_QT4_LIB" '$'"(firstword `strip_L "$LIBQT4"`)"
           if [ "$foundqt4" = "2" ]; then
             cnf_append "VBOX_WITH_QT4_SUN" "1"
-          elif [ "$foundqt4" = "3" ]; then
-            cnf_append "VBOX_PATH_QT4" "$TOOLQT4"
-            cnf_append "PATH_SDK_QT4" "$TOOLQT4"
-            cnf_append "PATH_TOOL_QT4_BIN" "$TOOLQT4BIN"
-            return
+          fi
+          if [ "$foundqt4" != "3" ]; then
+            TOOLQT4BIN="$TOOLQT4/bin"
           fi
           test_header "Qt4 devtools"
           # try it with a suffix, some platforms use that
-          if which_wrapper "$TOOLQT4/bin/moc-qt4" > /dev/null; then
+          if which_wrapper "$TOOLQT4BIN/moc-qt4" > /dev/null; then
             QT4BINSUFF="-qt4"
           else
             QT4BINSUFF=""
           fi
-          moc_ver=`$TOOLQT4/bin/moc$QT4BINSUFF -v 2>&1|sed 's+^.*(Qt \(.*\))+\1+'`
+          moc_ver=`$TOOLQT4BIN/moc$QT4BINSUFF -v 2>&1|sed 's+^.*(Qt \(.*\))+\1+'`
           if [ $? -ne 0 ]; then
             log_failure "moc$QT4BINSUFF not working"
             fail
@@ -1612,7 +1609,7 @@ EOF
             log_success "found version $moc_ver"
             cnf_append "VBOX_PATH_QT4" "$TOOLQT4"
             cnf_append "PATH_SDK_QT4" "$TOOLQT4"
-            cnf_append "PATH_TOOL_QT4_BIN" "$TOOLQT4/bin"
+            cnf_append "PATH_TOOL_QT4_BIN" "$TOOLQT4BIN"
             [ -n "$QT4BINSUFF" ] && cnf_append "TOOL_QT4_BIN_SUFF" "$QT4BINSUFF"
           fi
         fi
@@ -1827,7 +1824,7 @@ check_kbuild()
 check_compiler_h()
 {
   test_header compiler.h
-  if ! test -f "/usr/include/linux/compiler.h"; then
+  if test ! -f "/usr/include/linux/compiler.h"; then
     log_success "compiler.h not found"
   else
     cnf_append "VBOX_WITH_LINUX_COMPILER_H" "1"
diff --git a/doc/VBox-doc.c b/doc/VBox-doc.c
index 7fc3828..89bcd92 100644
--- a/doc/VBox-doc.c
+++ b/doc/VBox-doc.c
@@ -35,7 +35,8 @@
  *          - VBoxDbg - Debugger GUI (Qt).
  *      - DIS - Disassembler.
  *      - @ref pg_em
- *      - HWACCM - Intel/AMD VM Hardware Support Manager.
+ *      - @ref pg_gim
+ *      - HM - Intel/AMD Hardware Accelerated Virtualization Manager.
  *      - REM - Recompiled Execution Monitor.
  *          - @ref pg_vboxrem_amd64
  *      - @ref pg_iem
@@ -120,9 +121,16 @@
  *  - Guest Additions.
  *      - VBoxGuest.
  *          - @ref pg_guest_lib
- *      - VBoxService.
- *          - @ref pg_vboxervice_timesync
- *          - ...
+ *      - @ref pg_vgsvc
+ *          - @ref pg_vgsvc_timesync
+ *          - @ref pg_vgsvc_vminfo
+ *          - @ref pg_vgsvc_vmstats
+ *          - @ref pg_vgsvc_gstctrl
+ *          - @ref pg_vgsvc_pagesharing
+ *          - @ref pg_vgsvc_memballoon
+ *          - @ref pg_vgsvc_cpuhotplug
+ *          - @ref pg_vgsvc_automount
+ *          - @ref pg_vgsvc_clipboard
  *      - VBoxControl.
  *      - VBoxVideo.
  *      - crOpenGL.
@@ -131,7 +139,7 @@
  *      - ...
  *  - Network Services:
  *      - @ref pg_net_dhcp
- *      - @ref pg_net_nat
+ *      - NAT
  *  - @ref pg_main
  *      - @ref pg_main_events
  *      - @ref pg_vrdb_usb
diff --git a/doc/manual/en_US/user_Installation.xml b/doc/manual/en_US/user_Installation.xml
index 79b74c9..2f1d9bb 100644
--- a/doc/manual/en_US/user_Installation.xml
+++ b/doc/manual/en_US/user_Installation.xml
@@ -192,6 +192,69 @@
       support.</para>
 
     </sect2>
+
+    <sect2>
+      <title>Public properties</title>
+
+      <para>The following public properties can be specified via MSI API,
+      <screen>VirtualBox.exe -msiparams NAME=VALUE [...]</screen>
+      or
+      <screen>msiexec /i VirtualBox-<version>-MultiArch_<x86|amd64>.msi NAME=VALUE [...]</screen>
+      to control additional behavior and/or features of the Windows host installer:
+        <glosslist>
+          <glossentry>
+            <glossterm>VBOX_INSTALLDESKTOPSHORTCUT</glossterm>
+
+            <glossdef>
+              <para>Specifies whether or not a VirtualBox icon on the desktop
+              should be created.</para>
+
+              <para>Set to <computeroutput>1</computeroutput> to enable,
+              <computeroutput>0</computeroutput> to disable. Default is 1.</para>
+            </glossdef>
+          </glossentry>
+
+          <glossentry>
+            <glossterm>VBOX_INSTALLQUICKLAUNCHSHORTCUT</glossterm>
+
+            <glossdef>
+              <para>Specifies whether or not a VirtualBox icon in the Quick Launch
+              Bar should be created.</para>
+
+              <para>Set to <computeroutput>1</computeroutput> to enable,
+              <computeroutput>0</computeroutput> to disable. Default is 1.</para>
+            </glossdef>
+          </glossentry>
+
+          <glossentry>
+            <glossterm>VBOX_REGISTERFILEEXTENSIONS</glossterm>
+
+            <glossdef>
+              <para>Specifies whether or not the file extensions .vbox,
+              .vbox-extpack, .ovf, .ova, .vdi, .vmdk, .vhd and .vdd should be
+              associated with VirtualBox. Files of these types then will be opened
+              with VirtualBox.</para>
+
+              <para>Set to <computeroutput>1</computeroutput> to enable,
+              <computeroutput>0</computeroutput> to disable. Default is 1.</para>
+            </glossdef>
+          </glossentry>
+
+          <glossentry>
+            <glossterm>VBOX_START</glossterm>
+
+            <glossdef>
+              <para>Specifies whether or not VirtualBox should be started right after
+              successful installation.</para>
+
+              <para>Set to <computeroutput>1</computeroutput> to enable,
+              <computeroutput>0</computeroutput> to disable. Default is 1.</para>
+            </glossdef>
+          </glossentry>
+        </glosslist>
+      </para>
+
+    </sect2>
   </sect1>
 
   <sect1>
diff --git a/doc/manual/user_ChangeLogImpl.xml b/doc/manual/user_ChangeLogImpl.xml
index 536f3e6..4a58da6 100644
--- a/doc/manual/user_ChangeLogImpl.xml
+++ b/doc/manual/user_ChangeLogImpl.xml
@@ -3,6 +3,139 @@
 <chapter> <!-- HACK ALERT! Seems we must have a single top level element for xi:include to work.
                            So, we use chapter and xpointer="xpointer(/chapter/)" with xi:include. -->
   <sect1>
+    <title>Version 5.0.10 (2015-11-10)</title>
+
+    <para>This is a maintenance release. The following items were fixed and/or
+      added:</para>
+
+    <itemizedlist>
+
+      <listitem>
+        <para>VMM: improved support for certain Intel Atom CPUs (bug #14773)</para>
+      </listitem>
+
+      <listitem>
+        <para>VMM: system register emulation fix (5.0 regression; bug #14515)</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: fixed immediate screenshot issue (bug #14108)</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: fixed another 3D overlay window reparenting issue when the
+          VM is switched to fullscreen mode on X11 hosts</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: fixed help index (bug #14722)</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: fixed state synchronization issue in the VM manager window
+          when VM was paused from its runtime window</para>
+      </listitem>
+
+      <listitem>
+        <para>Audio: fixed suspending/resuming audio streams on VM
+          pause/unpause (bug #14784)</para>
+      </listitem>
+
+      <listitem>
+        <para>Audio: properly reset AC97 audio streams, otherwise there is
+          silence until a non-48 kHz stream is played</para>
+      </listitem>
+
+      <listitem>
+        <para>Audio: fixed a small emulation quirk of the AD1980 codec of the
+          HDA device to make recent linux guests work (bug #14653)</para>
+      </listitem>
+
+      <listitem>
+        <para>USB: serveral fixes for the xHCI controller</para>
+      </listitem>
+
+      <listitem>
+        <para>USB: fixed a crash under certain conditions on hosts with Linux
+          kernels older than version 3.3</para>
+      </listitem>
+
+      <listitem>
+        <para>USB: better identification of certain USB devices</para>
+      </listitem>
+
+      <listitem>
+        <para>NAT: support TCP in DNS proxy (bug #14736)</para>
+      </listitem>
+
+      <listitem>
+        <para>NAT Network: fixed sporadic crashes on Windows hosts (bug #13899)</para>
+      </listitem>
+
+      <listitem>
+        <para>API: when creating differencing images (e.g. as part of a snapshot
+          or cloning a VM) use the same disk image variant as the parent image
+          if possible, which means that e.g. a diff image for a VMDK image
+          split into 2 GB files will also be split (bug #14764)</para>
+      </listitem>
+
+      <listitem>
+        <para>API: event queue handling fixes preventing loss of certain events
+          at runtime (e.g. new webcam attached), particularly important on Mac
+          OS X hosts</para>
+      </listitem>
+
+      <listitem>
+        <para>Webcam: passthrough fix for certain devices (Windows hosts only)</para>
+      </listitem>
+
+      <listitem>
+        <para>VBoxManage: don't crash on <emphasis>snapshot restorecurrent /
+            edit</emphasis> if the VM has no snapshots</para>
+      </listitem>
+
+      <listitem>
+        <para>VBoxManage: don't crash on <emphasis>controlvm
+            addencpassword</emphasis> (bug #14729)</para>
+      </listitem>
+
+      <listitem>
+        <para>Mac OS X hosts: use the correct kernel on certain hosts</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fixed VRDP external authentication</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: allow to use a shared folder path with extended-length
+          path prefix (5.0 regression; bug #14651)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fix a crash in the netfilter host driver under
+          certain conditions (bug #14799)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows host installer: documented and fixed public properties which
+         can be used to control the installation to some extent</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows host installer: fixed not starting the actual installation
+        when showing the version information or help dialogs</para>
+      </listitem>
+
+      <listitem>
+        <para>X11 Additions: added basic support for X.Org Server 1.18 (3D
+          requires additional fixes)</para>
+      </listitem>
+
+    </itemizedlist>
+  </sect1>
+
+  <sect1>
     <title>Version 5.0.8 (2015-10-20)</title>
 
     <para>This is a maintenance release. The following items were fixed and/or
@@ -98,7 +231,7 @@
 
       <listitem>
         <para>GUI: fixed settings dialog which is opened if the network settings
-          need to be changed at VM startup (5.0.0 regression; bug #14601)</para>
+          need to be changed at VM startup (5.0 regression; bug #14601)</para>
       </listitem>
 
       <listitem>
@@ -419,7 +552,7 @@
       </listitem>
 
       <listitem>
-        <para>VMM: fixed an issue causing artifically high load averages on
+        <para>VMM: fixed an issue causing artificially high load averages on
           Linux hosts</para>
       </listitem>
 
diff --git a/include/VBox/ExtPack/ExtPack.h b/include/VBox/ExtPack/ExtPack.h
index eee2da5..bc26a62 100644
--- a/include/VBox/ExtPack/ExtPack.h
+++ b/include/VBox/ExtPack/ExtPack.h
@@ -307,7 +307,7 @@ typedef struct VBOXEXTPACKREG
      * @returns VBox status code.
      * @param   pThis       Pointer to this structure.
      * @param   pConsole    The console interface.
-     * @param   pVM         The VM handle.
+     * @param   pVM         The cross context VM structure.
      */
     DECLCALLBACKMEMBER(int, pfnVMConfigureVMM)(PCVBOXEXTPACKREG pThis, VBOXEXTPACK_IF_CS(IConsole) *pConsole, PVM pVM);
 
@@ -319,7 +319,7 @@ typedef struct VBOXEXTPACKREG
      * @returns VBox status code.
      * @param   pThis       Pointer to this structure.
      * @param   pConsole    The console interface.
-     * @param   pVM         The VM handle.
+     * @param   pVM         The cross context VM structure.
      */
     DECLCALLBACKMEMBER(int, pfnVMPowerOn)(PCVBOXEXTPACKREG pThis, VBOXEXTPACK_IF_CS(IConsole) *pConsole, PVM pVM);
 
@@ -330,7 +330,7 @@ typedef struct VBOXEXTPACKREG
      *
      * @param   pThis       Pointer to this structure.
      * @param   pConsole    The console interface.
-     * @param   pVM         The VM handle.  Can be NULL.
+     * @param   pVM         The cross context VM structure. Can be NULL.
      */
     DECLCALLBACKMEMBER(void, pfnVMPowerOff)(PCVBOXEXTPACKREG pThis, VBOXEXTPACK_IF_CS(IConsole) *pConsole, PVM pVM);
 
diff --git a/include/VBox/GuestHost/clipboard-helper.h b/include/VBox/GuestHost/clipboard-helper.h
index 8023be1..e2e7ddd 100644
--- a/include/VBox/GuestHost/clipboard-helper.h
+++ b/include/VBox/GuestHost/clipboard-helper.h
@@ -1,6 +1,6 @@
 /* $Id: clipboard-helper.h $ */
 /** @file
- * Shared Clipboard: Some helper function for converting between the various eol.
+ * Shared Clipboard - Some helper function for converting between the various EOLs.
  */
 
 /*
@@ -24,8 +24,8 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
-#ifndef ___CLIPBOARD_HELPER_H
-#define ___CLIPBOARD_HELPER_H
+#ifndef ___VBox_GuestHost_clipboard_helper_h
+#define ___VBox_GuestHost_clipboard_helper_h
 
 #include <iprt/string.h>
 
@@ -35,61 +35,64 @@ enum {
     LINEFEED = 0xa,
     /** In Windows, lines end with a carriage return and a linefeed character. */
     CARRIAGERETURN = 0xd,
-    /** Little endian "real" Utf16 strings start with this marker. */
+    /** Little endian "real" UTF-16 strings start with this marker. */
     UTF16LEMARKER = 0xfeff,
-    /** Big endian "real" Utf16 strings start with this marker. */
+    /** Big endian "real" UTF-16 strings start with this marker. */
     UTF16BEMARKER = 0xfffe
 };
 
 /**
- * Get the size of the buffer needed to hold a Utf16-LE zero terminated string with Windows EOLs
- * converted from a Utf16 string with Linux EOLs.
+ * Get the size of the buffer needed to hold a UTF-16-LE zero terminated string
+ * with Windows EOLs converted from a UTF-16 string with Linux EOLs.
  *
- * @returns RT error code
+ * @returns VBox status code.
  *
- * @param   pwszSrc  The source Utf16 string
- * @param   cwSrc    The length in 16 bit words of the source string
- * @retval  pcwDest  The length of the destination string in 16 bit words
+ * @param   pwszSrc  The source UTF-16 string.
+ * @param   cwcSrc   The length of the source string in RTUTF16 units.
+ * @param   pcwcDst  The length of the destination string in RTUTF16 units.
  */
-int vboxClipboardUtf16GetWinSize(PRTUTF16 pwszSrc, size_t cwSrc, size_t *pcwDest);
+int vboxClipboardUtf16GetWinSize(PRTUTF16 pwszSrc, size_t cwcSrc, size_t *pcwcDst);
 
 /**
- * Convert a Utf16 text with Linux EOLs to null-terminated Utf16-LE with Windows EOLs.  Does no
- * checking for validity.
+ * Convert a UTF-16 text with Linux EOLs to null-terminated UTF-16-LE with
+ * Windows EOLs.
+ *
+ * Does no checking for validity.
  *
  * @returns VBox status code
  *
- * @param   pwszSrc  Source Utf16 text to convert
- * @param   cwSrc    Size of the source text in 16 bit words
- * @retval  pu16Dest Buffer to store the converted text to.
- * @retval  pcwDest  Size of the buffer for the converted text in 16 bit words
+ * @param   pwszSrc  Source UTF-16 text to convert.
+ * @param   cwcSrc   Size of the source text int RTUTF16 units
+ * @param   pwszDst  Buffer to store the converted text to.
+ * @param   cwcDst   Size of the buffer for the converted text in RTUTF16 units.
  */
-int vboxClipboardUtf16LinToWin(PRTUTF16 pwszSrc, size_t cwSrc, PRTUTF16 pu16Dest, size_t cwDest);
+int vboxClipboardUtf16LinToWin(PRTUTF16 pwszSrc, size_t cwcSrc, PRTUTF16 pwszDst, size_t cwcDst);
 
 /**
- * Get the size of the buffer needed to hold a zero-terminated Utf16 string with Linux EOLs
- * converted from a Utf16 string with Windows EOLs.
+ * Get the size of the buffer needed to hold a zero-terminated UTF-16 string
+ * with Linux EOLs converted from a UTF-16 string with Windows EOLs.
  *
  * @returns RT status code
  *
- * @param   pwszSrc  The source Utf16 string
- * @param   cwSrc    The length in 16 bit words of the source string
- * @retval  pcwDest  The length of the destination string in 16 bit words
+ * @param   pwszSrc  The source UTF-16 string
+ * @param   cwcSrc   The length of the source string in RTUTF16 units.
+ * @retval  pcwcDst  The length of the destination string in RTUTF16 units.
  */
-int vboxClipboardUtf16GetLinSize(PRTUTF16 pwszSrc, size_t cwSrc, size_t *pcwDest);
+int vboxClipboardUtf16GetLinSize(PRTUTF16 pwszSrc, size_t cwcSrc, size_t *pcwcDst);
 
 /**
- * Convert Utf16-LE text with Windows EOLs to zero-terminated Utf16 with Linux EOLs.  This
- * function does not verify that the Utf16 is valid.
+ * Convert UTF-16-LE text with Windows EOLs to zero-terminated UTF-16 with Linux
+ * EOLs.  This function does not verify that the UTF-16 is valid.
  *
  * @returns VBox status code
  *
- * @param   pwszSrc       Text to convert
- * @param   cwSrc         Size of the source text in 16 bit words
- * @param   pu16Dest      The buffer to store the converted text to
- * @param   cwDest        The size of the buffer for the destination text in 16 bit words
+ * @param   pwszSrc  Text to convert
+ * @param   cwcSrc   Size of the source text in RTUTF16 units.
+ * @param   pwszDst  The buffer to store the converted text to
+ * @param   cwcDst   The size of the buffer for the destination text in RTUTF16
+ *                   chars.
  */
-int vboxClipboardUtf16WinToLin(PRTUTF16 pwszSrc, size_t cwSrc, PRTUTF16 pu16Dest, size_t cwDest);
+int vboxClipboardUtf16WinToLin(PRTUTF16 pwszSrc, size_t cwcSrc, PRTUTF16 pwszDst, size_t cwcDst);
 
 #pragma pack(1)
 /** @todo r=bird: Why duplicate these structures here, we've got them in
@@ -100,6 +103,7 @@ int vboxClipboardUtf16WinToLin(PRTUTF16 pwszSrc, size_t cwSrc, PRTUTF16 pu16Dest
  */
 typedef struct BMFILEHEADER
 {
+/** @todo r=bird: this type centric prefixing is what give hungarian notation a bad name... */
     uint16_t    u16Type;
     uint32_t    u32Size;
     uint16_t    u16Reserved1;
@@ -117,6 +121,7 @@ typedef BMFILEHEADER *PBMFILEHEADER;
  */
 typedef struct BMINFOHEADER
 {
+/** @todo r=bird: this type centric prefixing is what give hungarian notation a bad name... */
     uint32_t    u32Size;
     uint32_t    u32Width;
     uint32_t    u32Height;
@@ -131,7 +136,7 @@ typedef struct BMINFOHEADER
 } BMINFOHEADER;
 /** Pointer to a BMINFOHEADER structure. */
 typedef BMINFOHEADER *PBMINFOHEADER;
-#pragma pack()
+#pragma pack() /** @todo r=bird: Only BMFILEHEADER needs packing. The BMINFOHEADER is perfectly aligned. */
 
 /**
  * Convert CF_DIB data to full BMP data by prepending the BM header.
@@ -139,12 +144,14 @@ typedef BMINFOHEADER *PBMINFOHEADER;
  *
  * @returns VBox status code
  *
- * @param   pSrc          DIB data to convert
+ * @param   pvSrc         DIB data to convert
  * @param   cbSrc         Size of the DIB data to convert in bytes
- * @param   ppDest        Where to store the pointer to the buffer for the destination data
- * @param   pcbDest       Pointer to the size of the buffer for the destination data in bytes
+ * @param   ppvDst        Where to store the pointer to the buffer for the
+ *                        destination data
+ * @param   pcbDst        Pointer to the size of the buffer for the destination
+ *                        data in bytes.
  */
-int vboxClipboardDibToBmp(const void *pvSrc, size_t cbSrc, void **ppvDest, size_t *pcbDest);
+int vboxClipboardDibToBmp(const void *pvSrc, size_t cbSrc, void **ppvDst, size_t *pcbDst);
 
 /**
  * Get the address and size of CF_DIB data in a full BMP data in the input buffer.
@@ -152,12 +159,12 @@ int vboxClipboardDibToBmp(const void *pvSrc, size_t cbSrc, void **ppvDest, size_
  *
  * @returns VBox status code
  *
- * @param   pSrc          BMP data to convert
+ * @param   pvSrc         BMP data to convert
  * @param   cbSrc         Size of the BMP data to convert in bytes
- * @param   ppDest        Where to store the pointer to the destination data
- * @param   pcbDest       Pointer to the size of the destination data in bytes
+ * @param   ppvDst        Where to store the pointer to the destination data
+ * @param   pcbDst        Pointer to the size of the destination data in bytes
  */
-int vboxClipboardBmpGetDib(const void *pvSrc, size_t cbSrc, const void **ppvDest, size_t *pcbDest);
+int vboxClipboardBmpGetDib(const void *pvSrc, size_t cbSrc, const void **ppvDst, size_t *pcbDst);
 
 
 #endif
diff --git a/include/VBox/HostServices/Service.h b/include/VBox/HostServices/Service.h
index 737266b..9d65d55 100644
--- a/include/VBox/HostServices/Service.h
+++ b/include/VBox/HostServices/Service.h
@@ -35,6 +35,7 @@
 
 #include <memory>  /* for auto_ptr */
 
+/** @todo  document the poor classes.   */
 namespace HGCM
 {
 
@@ -405,7 +406,7 @@ protected:
     void *m_pvHostData;
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnUnload
+     * @copydoc VBOXHGCMSVCFNTABLE::pfnUnload
      * Simply deletes the service object
      */
     static DECLCALLBACK(int) svcUnload(void *pvService)
@@ -420,7 +421,7 @@ protected:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnConnect
+     * @copydoc VBOXHGCMSVCFNTABLE::pfnConnect
      * Stub implementation of pfnConnect and pfnDisconnect.
      */
     static DECLCALLBACK(int) svcConnect(void *pvService,
@@ -436,7 +437,7 @@ protected:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnConnect
+     * @copydoc VBOXHGCMSVCFNTABLE::pfnConnect
      * Stub implementation of pfnConnect and pfnDisconnect.
      */
     static DECLCALLBACK(int) svcDisconnect(void *pvService,
@@ -452,7 +453,7 @@ protected:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnCall
+     * @copydoc VBOXHGCMSVCFNTABLE::pfnCall
      * Wraps to the call member function
      */
     static DECLCALLBACK(void) svcCall(void * pvService,
@@ -471,7 +472,7 @@ protected:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnHostCall
+     * @copydoc VBOXHGCMSVCFNTABLE::pfnHostCall
      * Wraps to the hostCall member function
      */
     static DECLCALLBACK(int) svcHostCall(void *pvService,
@@ -488,7 +489,7 @@ protected:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnRegisterExtension
+     * @copydoc VBOXHGCMSVCFNTABLE::pfnRegisterExtension
      * Installs a host callback for notifications of property changes.
      */
     static DECLCALLBACK(int) svcRegisterExtension(void *pvService,
diff --git a/include/VBox/VBoxGuest.h b/include/VBox/VBoxGuest.h
index d355f00..5e1b19e 100644
--- a/include/VBox/VBoxGuest.h
+++ b/include/VBox/VBoxGuest.h
@@ -35,7 +35,14 @@
 #include <VBox/VBoxGuest2.h>
 
 
-/** @defgroup grp_vboxguest     VirtualBox Guest Additions Driver Interface
+/** @defgroup grp_vboxguest  VirtualBox Guest Additions Device Driver
+ *
+ * Also know as VBoxGuest.
+ *
+ * @{
+ */
+
+/** @defgroup grp_vboxguest_ioc  VirtualBox Guest Additions Driver Interface
  * @{
  */
 
@@ -553,5 +560,6 @@ typedef VBOXGUESTOS2IDCCONNECT *PVBOXGUESTOS2IDCCONNECT;
 
 /** @} */
 
+/** @} */
 #endif
 
diff --git a/include/VBox/VBoxGuest2.h b/include/VBox/VBoxGuest2.h
index 5abe726..a2032c7 100644
--- a/include/VBox/VBoxGuest2.h
+++ b/include/VBox/VBoxGuest2.h
@@ -32,6 +32,8 @@
 #ifdef VBOX_WITH_HGCM
 # include <VBox/VMMDev2.h>
 
+/** @addtogroup grp_vmmdev
+ * @{ */
 
 /**
  * HGCM connect info structure.
@@ -102,6 +104,8 @@ typedef struct VBoxGuestHGCMCallInfoTimed
 AssertCompileSize(VBoxGuestHGCMCallInfoTimed, 8+16);
 # pragma pack()
 
+/** @} */
+
 #endif /* VBOX_WITH_HGCM */
 
 #endif
diff --git a/include/VBox/VBoxGuestLib.h b/include/VBox/VBoxGuestLib.h
index 9681014..9d9c3e0 100644
--- a/include/VBox/VBoxGuestLib.h
+++ b/include/VBox/VBoxGuestLib.h
@@ -35,7 +35,8 @@
 #endif
 
 
-/** @defgroup grp_guest_lib     VirtualBox Guest Additions Library
+/** @defgroup grp_vboxguest_lib     VirtualBox Guest Additions Library
+ * @ingroup grp_vboxguest
  * @{
  */
 
@@ -78,7 +79,12 @@
 
 RT_C_DECLS_BEGIN
 
-/** @defgroup grp_guest_lib_r0     Ring-0 interface.
+/** HGCM client ID.
+ * @todo Promote to VBox/types.h  */
+typedef uint32_t HGCMCLIENTID;
+
+
+/** @defgroup grp_vboxguest_lib_r0     Ring-0 interface.
  * @{
  */
 #if defined(IN_RING0) && !defined(IN_RING0_AGNOSTIC)
@@ -92,8 +98,6 @@ RT_C_DECLS_BEGIN
 # endif
 # define DECLVBGL(type) DECLR0VBGL(type)
 
-typedef uint32_t VBGLIOPORT; /**< @todo r=bird: We have RTIOPORT (uint16_t) for this. */
-
 
 # ifdef VBGL_VBOXGUEST
 
@@ -103,7 +107,7 @@ typedef uint32_t VBGLIOPORT; /**< @todo r=bird: We have RTIOPORT (uint16_t) for
  *
  * @return VBox status code.
  */
-DECLVBGL(int) VbglInit (VBGLIOPORT portVMMDev, struct VMMDevMemory *pVMMDevMemory);
+DECLVBGL(int) VbglInitPrimary(RTIOPORT portVMMDev, struct VMMDevMemory *pVMMDevMemory);
 
 # else
 
@@ -113,14 +117,14 @@ DECLVBGL(int) VbglInit (VBGLIOPORT portVMMDev, struct VMMDevMemory *pVMMDevMemor
  *
  * @return VBox status code.
  */
-DECLVBGL(int) VbglInit (void);
+DECLVBGL(int) VbglInitClient(void);
 
 # endif
 
 /**
  * The library termination function.
  */
-DECLVBGL(void) VbglTerminate (void);
+DECLVBGL(void) VbglTerminate(void);
 
 
 /** @name Generic request functions.
@@ -130,13 +134,12 @@ DECLVBGL(void) VbglTerminate (void);
 /**
  * Allocate memory for generic request and initialize the request header.
  *
- * @param ppReq    pointer to resulting memory address.
- * @param cbSize   size of memory block required for the request.
- * @param reqType  the generic request type.
- *
- * @return VBox status code.
+ * @returns VBox status code.
+ * @param   ppReq       Where to return the pointer to the allocated memory.
+ * @param   cbReq       Size of memory block required for the request.
+ * @param   enmReqType  the generic request type.
  */
-DECLVBGL(int) VbglGRAlloc (VMMDevRequestHeader **ppReq, uint32_t cbSize, VMMDevRequestType reqType);
+DECLVBGL(int) VbglGRAlloc(VMMDevRequestHeader **ppReq, size_t cbReq, VMMDevRequestType enmReqType);
 
 /**
  * Perform the generic request.
@@ -145,7 +148,7 @@ DECLVBGL(int) VbglGRAlloc (VMMDevRequestHeader **ppReq, uint32_t cbSize, VMMDevR
  *
  * @return VBox status code.
  */
-DECLVBGL(int) VbglGRPerform (VMMDevRequestHeader *pReq);
+DECLVBGL(int) VbglGRPerform(VMMDevRequestHeader *pReq);
 
 /**
  * Free the generic request memory.
@@ -154,7 +157,7 @@ DECLVBGL(int) VbglGRPerform (VMMDevRequestHeader *pReq);
  *
  * @return VBox status code.
  */
-DECLVBGL(void) VbglGRFree (VMMDevRequestHeader *pReq);
+DECLVBGL(void) VbglGRFree(VMMDevRequestHeader *pReq);
 
 /**
  * Verify the generic request header.
@@ -166,7 +169,7 @@ DECLVBGL(void) VbglGRFree (VMMDevRequestHeader *pReq);
  *
  * @return VBox status code.
  */
-DECLVBGL(int) VbglGRVerify (const VMMDevRequestHeader *pReq, size_t cbReq);
+DECLVBGL(int) VbglGRVerify(const VMMDevRequestHeader *pReq, size_t cbReq);
 /** @} */
 
 # ifdef VBOX_WITH_HGCM
@@ -201,8 +204,8 @@ typedef FNVBGLHGCMCALLBACK *PFNVBGLHGCMCALLBACK;
  * @return  VBox status code.
  */
 
-DECLR0VBGL(int) VbglR0HGCMInternalConnect (VBoxGuestHGCMConnectInfo *pConnectInfo,
-                                           PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
+DECLR0VBGL(int) VbglR0HGCMInternalConnect(VBoxGuestHGCMConnectInfo *pConnectInfo,
+                                          PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
 
 
 /**
@@ -222,8 +225,8 @@ DECLR0VBGL(int) VbglR0HGCMInternalConnect (VBoxGuestHGCMConnectInfo *pConnectInf
  * @return  VBox status code.
  */
 
-DECLR0VBGL(int) VbglR0HGCMInternalDisconnect (VBoxGuestHGCMDisconnectInfo *pDisconnectInfo,
-                                              PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
+DECLR0VBGL(int) VbglR0HGCMInternalDisconnect(VBoxGuestHGCMDisconnectInfo *pDisconnectInfo,
+                                             PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
 
 /** Call a HGCM service.
  *
@@ -239,8 +242,8 @@ DECLR0VBGL(int) VbglR0HGCMInternalDisconnect (VBoxGuestHGCMDisconnectInfo *pDisc
  *
  * @return VBox status code.
  */
-DECLR0VBGL(int) VbglR0HGCMInternalCall (VBoxGuestHGCMCallInfo *pCallInfo, uint32_t cbCallInfo, uint32_t fFlags,
-                                        PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
+DECLR0VBGL(int) VbglR0HGCMInternalCall(VBoxGuestHGCMCallInfo *pCallInfo, uint32_t cbCallInfo, uint32_t fFlags,
+                                       PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
 
 /** Call a HGCM service. (32 bits packet structure in a 64 bits guest)
  *
@@ -256,8 +259,8 @@ DECLR0VBGL(int) VbglR0HGCMInternalCall (VBoxGuestHGCMCallInfo *pCallInfo, uint32
  *
  * @return  VBox status code.
  */
-DECLR0VBGL(int) VbglR0HGCMInternalCall32 (VBoxGuestHGCMCallInfo *pCallInfo, uint32_t cbCallInfo, uint32_t fFlags,
-                                          PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
+DECLR0VBGL(int) VbglR0HGCMInternalCall32(VBoxGuestHGCMCallInfo *pCallInfo, uint32_t cbCallInfo, uint32_t fFlags,
+                                         PFNVBGLHGCMCALLBACK pfnAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
 
 /** @name VbglR0HGCMInternalCall flags
  * @{ */
@@ -292,7 +295,7 @@ typedef struct VBGLHGCMHANDLEDATA *VBGLHGCMHANDLE;
  *
  * @return VBox status code.
  */
-DECLVBGL(int) VbglHGCMConnect (VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData);
+DECLVBGL(int) VbglHGCMConnect(VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData);
 
 /**
  * Connect to a service.
@@ -302,7 +305,7 @@ DECLVBGL(int) VbglHGCMConnect (VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo
  *
  * @return VBox status code.
  */
-DECLVBGL(int) VbglHGCMDisconnect (VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnectInfo *pData);
+DECLVBGL(int) VbglHGCMDisconnect(VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnectInfo *pData);
 
 /**
  * Call to a service.
@@ -313,7 +316,7 @@ DECLVBGL(int) VbglHGCMDisconnect (VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnect
  *
  * @return VBox status code.
  */
-DECLVBGL(int) VbglHGCMCall (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData);
+DECLVBGL(int) VbglHGCMCall(VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData);
 
 /**
  * Call to a service with user-mode data received by the calling driver from the User-Mode process.
@@ -325,7 +328,7 @@ DECLVBGL(int) VbglHGCMCall (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData,
  *
  * @return VBox status code.
  */
-DECLVBGL(int) VbglHGCMCallUserData (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData);
+DECLVBGL(int) VbglHGCMCallUserData(VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData);
 
 /**
  * Call to a service with timeout.
@@ -337,8 +340,18 @@ DECLVBGL(int) VbglHGCMCallUserData (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo
  *
  * @return VBox status code.
  */
-DECLVBGL(int) VbglHGCMCallTimed (VBGLHGCMHANDLE handle,
-                                 VBoxGuestHGCMCallInfoTimed *pData, uint32_t cbData);
+DECLVBGL(int) VbglHGCMCallTimed(VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfoTimed *pData, uint32_t cbData);
+/** @} */
+
+/** @name Undocumented helpers for talking to the Chromium OpenGL Host Service
+ * @{ */
+typedef VBGLHGCMHANDLE VBGLCRCTLHANDLE;
+DECLVBGL(int) VbglR0CrCtlCreate(VBGLCRCTLHANDLE *phCtl);
+DECLVBGL(int) VbglR0CrCtlDestroy(VBGLCRCTLHANDLE hCtl);
+DECLVBGL(int) VbglR0CrCtlConConnect(VBGLCRCTLHANDLE hCtl, HGCMCLIENTID *pidClient);
+DECLVBGL(int) VbglR0CrCtlConDisconnect(VBGLCRCTLHANDLE hCtl, HGCMCLIENTID idClient);
+DECLVBGL(int) VbglR0CrCtlConCall(VBGLCRCTLHANDLE hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo);
+DECLVBGL(int) VbglR0CrCtlConCallUserData(VBGLCRCTLHANDLE hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo);
 /** @} */
 
 #  endif /* !VBGL_VBOXGUEST */
@@ -349,67 +362,62 @@ DECLVBGL(int) VbglHGCMCallTimed (VBGLHGCMHANDLE handle,
 /**
  * Initialize the heap.
  *
- * @return VBox error code.
+ * @returns VBox status code.
  */
-DECLVBGL(int) VbglPhysHeapInit (void);
+DECLVBGL(int) VbglPhysHeapInit(void);
 
 /**
  * Shutdown the heap.
  */
-DECLVBGL(void) VbglPhysHeapTerminate (void);
-
+DECLVBGL(void) VbglPhysHeapTerminate(void);
 
 /**
  * Allocate a memory block.
  *
- * @param cbSize    Size of block to be allocated.
- * @return Virtual address of allocated memory block.
+ * @returns Virtual address of the allocated memory block.
+ * @param   cbSize    Size of block to be allocated.
  */
-DECLVBGL(void *) VbglPhysHeapAlloc (uint32_t cbSize);
+DECLVBGL(void *) VbglPhysHeapAlloc(uint32_t cbSize);
 
 /**
- * Get physical address of memory block pointed by
- * the virtual address.
+ * Get physical address of memory block pointed by the virtual address.
  *
  * @note WARNING!
  *       The function does not acquire the Heap mutex!
- *       When calling the function make sure that
- *       the pointer is a valid one and is not being
- *       deallocated.
- *       This function can NOT be used for verifying
- *       if the given pointer is a valid one allocated
- *       from the heap.
- *
+ *       When calling the function make sure that the pointer is a valid one and
+ *       is not being deallocated.  This function can NOT be used for verifying
+ *       if the given pointer is a valid one allocated from the heap.
  *
- * @param p    Virtual address of memory block.
- * @return Physical address of the memory block.
+ * @param   pv      Virtual address of memory block.
+ * @returns Physical address of the memory block.
  */
-DECLVBGL(uint32_t) VbglPhysHeapGetPhysAddr (void *p);
+DECLVBGL(uint32_t)  VbglPhysHeapGetPhysAddr(void *pv);
 
 /**
  * Free a memory block.
  *
- * @param p    Virtual address of memory block.
+ * @param   pv    Virtual address of memory block.
  */
-DECLVBGL(void) VbglPhysHeapFree (void *p);
+DECLVBGL(void)      VbglPhysHeapFree(void *pv);
 
-DECLVBGL(int) VbglQueryVMMDevMemory (VMMDevMemory **ppVMMDevMemory);
-DECLR0VBGL(bool) VbglR0CanUsePhysPageList(void);
+DECLVBGL(int)       VbglQueryVMMDevMemory(VMMDevMemory **ppVMMDevMemory);
+DECLR0VBGL(bool)    VbglR0CanUsePhysPageList(void);
 
 # ifndef VBOX_GUEST
 /** @name Mouse
  * @{ */
-DECLVBGL(int)     VbglSetMouseNotifyCallback(PFNVBOXGUESTMOUSENOTIFY pfnNotify, void *pvUser);
-DECLVBGL(int)     VbglGetMouseStatus(uint32_t *pfFeatures, uint32_t *px, uint32_t *py);
-DECLVBGL(int)     VbglSetMouseStatus(uint32_t fFeatures);
+DECLVBGL(int)       VbglSetMouseNotifyCallback(PFNVBOXGUESTMOUSENOTIFY pfnNotify, void *pvUser);
+DECLVBGL(int)       VbglGetMouseStatus(uint32_t *pfFeatures, uint32_t *px, uint32_t *py);
+DECLVBGL(int)       VbglSetMouseStatus(uint32_t fFeatures);
 /** @}  */
 # endif /* VBOX_GUEST */
 
 #endif /* IN_RING0 && !IN_RING0_AGNOSTIC */
+
 /** @} */
 
 
-/** @defgroup grp_guest_lib_r3     Ring-3 interface.
+/** @defgroup grp_vboxguest_lib_r3      Ring-3 interface.
  * @{
  */
 #ifdef IN_RING3
@@ -437,7 +445,8 @@ VBGLR3DECL(void)    VbglR3ClosePidFile(const char *pszPath, RTFILE hFile);
 VBGLR3DECL(int)     VbglR3SetGuestCaps(uint32_t fOr, uint32_t fNot);
 VBGLR3DECL(int)     VbglR3WaitEvent(uint32_t fMask, uint32_t cMillies, uint32_t *pfEvents);
 
-VBGLR3DECL(int)     VbglR3ReportAdditionsStatus(VBoxGuestFacilityType Facility, VBoxGuestFacilityStatus StatusCurrent, uint32_t uFlags);
+VBGLR3DECL(int)     VbglR3ReportAdditionsStatus(VBoxGuestFacilityType Facility, VBoxGuestFacilityStatus StatusCurrent,
+                                                uint32_t fFlags);
 VBGLR3DECL(int)     VbglR3GetAdditionsVersion(char **ppszVer, char **ppszVerEx, char **ppszRev);
 VBGLR3DECL(int)     VbglR3GetAdditionsInstallationPath(char **ppszPath);
 VBGLR3DECL(int)     VbglR3GetSessionId(uint64_t *pu64IdSession);
@@ -446,12 +455,12 @@ VBGLR3DECL(int)     VbglR3GetSessionId(uint64_t *pu64IdSession);
 
 /** @name Shared clipboard
  * @{ */
-VBGLR3DECL(int)     VbglR3ClipboardConnect(uint32_t *pu32ClientId);
-VBGLR3DECL(int)     VbglR3ClipboardDisconnect(uint32_t u32ClientId);
-VBGLR3DECL(int)     VbglR3ClipboardGetHostMsg(uint32_t u32ClientId, uint32_t *pMsg, uint32_t *pfFormats);
-VBGLR3DECL(int)     VbglR3ClipboardReadData(uint32_t u32ClientId, uint32_t fFormat, void *pv, uint32_t cb, uint32_t *pcb);
-VBGLR3DECL(int)     VbglR3ClipboardReportFormats(uint32_t u32ClientId, uint32_t fFormats);
-VBGLR3DECL(int)     VbglR3ClipboardWriteData(uint32_t u32ClientId, uint32_t fFormat, void *pv, uint32_t cb);
+VBGLR3DECL(int)     VbglR3ClipboardConnect(HGCMCLIENTID *pidClient);
+VBGLR3DECL(int)     VbglR3ClipboardDisconnect(HGCMCLIENTID idClient);
+VBGLR3DECL(int)     VbglR3ClipboardGetHostMsg(HGCMCLIENTID idClient, uint32_t *pMsg, uint32_t *pfFormats);
+VBGLR3DECL(int)     VbglR3ClipboardReadData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb, uint32_t *pcb);
+VBGLR3DECL(int)     VbglR3ClipboardReportFormats(HGCMCLIENTID idClient, uint32_t fFormats);
+VBGLR3DECL(int)     VbglR3ClipboardWriteData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb);
 /** @} */
 
 /** @name Seamless mode
@@ -473,42 +482,32 @@ VBGLR3DECL(int)     VbglR3SetMouseStatus(uint32_t fFeatures);
  * @{ */
 VBGLR3DECL(int)     VbglR3VideoAccelEnable(bool fEnable);
 VBGLR3DECL(int)     VbglR3VideoAccelFlush(void);
-VBGLR3DECL(int)     VbglR3SetPointerShape(uint32_t fFlags, uint32_t xHot, uint32_t yHot, uint32_t cx, uint32_t cy, const void *pvImg, size_t cbImg);
+VBGLR3DECL(int)     VbglR3SetPointerShape(uint32_t fFlags, uint32_t xHot, uint32_t yHot, uint32_t cx, uint32_t cy,
+                                          const void *pvImg, size_t cbImg);
 VBGLR3DECL(int)     VbglR3SetPointerShapeReq(struct VMMDevReqMousePointer *pReq);
 /** @}  */
 
 /** @name Display
  * @{ */
 /** The folder for the video mode hint unix domain socket on Unix-like guests.
- */
-/** @note This can be safely changed as all users are rebuilt in lock-step. */
-#define VBGLR3HOSTDISPSOCKETPATH "/tmp/.VBoxService"
+ * @note This can be safely changed as all users are rebuilt in lock-step. */
+#define VBGLR3HOSTDISPSOCKETPATH    "/tmp/.VBoxService"
 /** The path to the video mode hint unix domain socket on Unix-like guests. */
-#define VBGLR3HOSTDISPSOCKET     VBGLR3VIDEOMODEHINTSOCKETPATH \
-    "/VideoModeHint"
+#define VBGLR3HOSTDISPSOCKET        VBGLR3VIDEOMODEHINTSOCKETPATH "/VideoModeHint"
 
 /** The folder for saving video mode hints to between sessions. */
 #define VBGLR3HOSTDISPSAVEDMODEPATH "/var/lib/VBoxGuestAdditions"
 /** The path to the file for saving video mode hints to between sessions. */
-#define VBGLR3HOSTDISPSAVEDMODE     VBGLR3HOSTDISPSAVEDMODEPATH \
-    "/SavedVideoModes"
-
-VBGLR3DECL(int)     VbglR3GetDisplayChangeRequest(uint32_t *pcx, uint32_t *pcy,
-                                                  uint32_t *pcBits,
-                                                  uint32_t *piDisplay,
-                                                  uint32_t *pdx, uint32_t *pdy,
-                                                  bool *pfEnabled,
-                                                  bool *pfChangeOrigin,
-                                                  bool fAck);
+#define VBGLR3HOSTDISPSAVEDMODE     VBGLR3HOSTDISPSAVEDMODEPATH "/SavedVideoModes"
+
+VBGLR3DECL(int)     VbglR3GetDisplayChangeRequest(uint32_t *pcx, uint32_t *pcy, uint32_t *pcBits, uint32_t *piDisplay,
+                                                  uint32_t *pdx, uint32_t *pdy, bool *pfEnabled, bool *pfChangeOrigin, bool fAck);
 VBGLR3DECL(bool)    VbglR3HostLikesVideoMode(uint32_t cx, uint32_t cy, uint32_t cBits);
 VBGLR3DECL(int)     VbglR3VideoModeGetHighestSavedScreen(unsigned *pcScreen);
-VBGLR3DECL(int)     VbglR3SaveVideoMode(unsigned cScreen, unsigned cx,
-                                        unsigned cy, unsigned cBits, unsigned x,
-                                        unsigned y, bool fEnabled);
-VBGLR3DECL(int)     VbglR3RetrieveVideoMode(unsigned cScreen, unsigned *pcx,
-                                            unsigned *pcy, unsigned *pcBits,
-                                            unsigned *px, unsigned *py,
-                                            bool *pfEnabled);
+VBGLR3DECL(int)     VbglR3SaveVideoMode(unsigned cScreen, unsigned cx, unsigned cy, unsigned cBits,
+                                        unsigned x, unsigned y, bool fEnabled);
+VBGLR3DECL(int)     VbglR3RetrieveVideoMode(unsigned cScreen, unsigned *pcx, unsigned *pcy, unsigned *pcBits,
+                                            unsigned *px, unsigned *py, bool *pfEnabled);
 /** @}  */
 
 /** @name VM Statistics
@@ -536,39 +535,47 @@ VBGLR3DECL(int)     VbglR3WriteCoreDump(void);
 typedef struct VBGLR3GUESTPROPENUM VBGLR3GUESTPROPENUM;
 /** @todo Docs. */
 typedef VBGLR3GUESTPROPENUM *PVBGLR3GUESTPROPENUM;
-VBGLR3DECL(int)     VbglR3GuestPropConnect(uint32_t *pu32ClientId);
-VBGLR3DECL(int)     VbglR3GuestPropDisconnect(uint32_t u32ClientId);
-VBGLR3DECL(int)     VbglR3GuestPropWrite(uint32_t u32ClientId, const char *pszName, const char *pszValue, const char *pszFlags);
-VBGLR3DECL(int)     VbglR3GuestPropWriteValue(uint32_t u32ClientId, const char *pszName, const char *pszValue);
-VBGLR3DECL(int)     VbglR3GuestPropWriteValueV(uint32_t u32ClientId, const char *pszName,
+VBGLR3DECL(int)     VbglR3GuestPropConnect(uint32_t *pidClient);
+VBGLR3DECL(int)     VbglR3GuestPropDisconnect(HGCMCLIENTID idClient);
+VBGLR3DECL(int)     VbglR3GuestPropWrite(HGCMCLIENTID idClient, const char *pszName, const char *pszValue, const char *pszFlags);
+VBGLR3DECL(int)     VbglR3GuestPropWriteValue(HGCMCLIENTID idClient, const char *pszName, const char *pszValue);
+VBGLR3DECL(int)     VbglR3GuestPropWriteValueV(HGCMCLIENTID idClient, const char *pszName,
                                                const char *pszValueFormat, va_list va) RT_IPRT_FORMAT_ATTR(3, 0);
-VBGLR3DECL(int)     VbglR3GuestPropWriteValueF(uint32_t u32ClientId, const char *pszName,
+VBGLR3DECL(int)     VbglR3GuestPropWriteValueF(HGCMCLIENTID idClient, const char *pszName,
                                                const char *pszValueFormat, ...) RT_IPRT_FORMAT_ATTR(3, 4);
-VBGLR3DECL(int)     VbglR3GuestPropRead(uint32_t u32ClientId, const char *pszName, void *pvBuf, uint32_t cbBuf, char **ppszValue, uint64_t *pu64Timestamp, char **ppszFlags, uint32_t *pcbBufActual);
-VBGLR3DECL(int)     VbglR3GuestPropReadValue(uint32_t ClientId, const char *pszName, char *pszValue, uint32_t cchValue, uint32_t *pcchValueActual);
-VBGLR3DECL(int)     VbglR3GuestPropReadValueAlloc(uint32_t u32ClientId, const char *pszName, char **ppszValue);
+VBGLR3DECL(int)     VbglR3GuestPropRead(HGCMCLIENTID idClient, const char *pszName, void *pvBuf, uint32_t cbBuf, char **ppszValue,
+                                        uint64_t *pu64Timestamp, char **ppszFlags, uint32_t *pcbBufActual);
+VBGLR3DECL(int)     VbglR3GuestPropReadValue(uint32_t ClientId, const char *pszName, char *pszValue, uint32_t cchValue,
+                                             uint32_t *pcchValueActual);
+VBGLR3DECL(int)     VbglR3GuestPropReadValueAlloc(HGCMCLIENTID idClient, const char *pszName, char **ppszValue);
 VBGLR3DECL(void)    VbglR3GuestPropReadValueFree(char *pszValue);
-VBGLR3DECL(int)     VbglR3GuestPropEnumRaw(uint32_t u32ClientId, const char *paszPatterns, char *pcBuf, uint32_t cbBuf, uint32_t *pcbBufActual);
-VBGLR3DECL(int)     VbglR3GuestPropEnum(uint32_t u32ClientId, char const * const *ppaszPatterns, uint32_t cPatterns, PVBGLR3GUESTPROPENUM *ppHandle,
-                                        char const **ppszName, char const **ppszValue, uint64_t *pu64Timestamp, char const **ppszFlags);
-VBGLR3DECL(int)     VbglR3GuestPropEnumNext(PVBGLR3GUESTPROPENUM pHandle, char const **ppszName, char const **ppszValue, uint64_t *pu64Timestamp,
-                                            char const **ppszFlags);
+VBGLR3DECL(int)     VbglR3GuestPropEnumRaw(HGCMCLIENTID idClient, const char *paszPatterns, char *pcBuf, uint32_t cbBuf,
+                                           uint32_t *pcbBufActual);
+VBGLR3DECL(int)     VbglR3GuestPropEnum(HGCMCLIENTID idClient, char const * const *ppaszPatterns, uint32_t cPatterns,
+                                        PVBGLR3GUESTPROPENUM *ppHandle, char const **ppszName, char const **ppszValue,
+                                        uint64_t *pu64Timestamp, char const **ppszFlags);
+VBGLR3DECL(int)     VbglR3GuestPropEnumNext(PVBGLR3GUESTPROPENUM pHandle, char const **ppszName, char const **ppszValue,
+                                            uint64_t *pu64Timestamp, char const **ppszFlags);
 VBGLR3DECL(void)    VbglR3GuestPropEnumFree(PVBGLR3GUESTPROPENUM pHandle);
-VBGLR3DECL(int)     VbglR3GuestPropDelete(uint32_t u32ClientId, const char *pszName);
-VBGLR3DECL(int)     VbglR3GuestPropDelSet(uint32_t u32ClientId, char const * const *papszPatterns, uint32_t cPatterns);
-VBGLR3DECL(int)     VbglR3GuestPropWait(uint32_t u32ClientId, const char *pszPatterns, void *pvBuf, uint32_t cbBuf, uint64_t u64Timestamp, uint32_t cMillies, char ** ppszName, char **ppszValue, uint64_t *pu64Timestamp, char **ppszFlags, uint32_t *pcbBufActual);
+VBGLR3DECL(int)     VbglR3GuestPropDelete(HGCMCLIENTID idClient, const char *pszName);
+VBGLR3DECL(int)     VbglR3GuestPropDelSet(HGCMCLIENTID idClient, char const * const *papszPatterns, uint32_t cPatterns);
+VBGLR3DECL(int)     VbglR3GuestPropWait(HGCMCLIENTID idClient, const char *pszPatterns, void *pvBuf, uint32_t cbBuf,
+                                        uint64_t u64Timestamp, uint32_t cMillies, char ** ppszName, char **ppszValue,
+                                        uint64_t *pu64Timestamp, char **ppszFlags, uint32_t *pcbBufActual);
 /** @}  */
 
 /** @name Guest user handling / reporting.
  * @{ */
-VBGLR3DECL(int)     VbglR3GuestUserReportState(const char *pszUser, const char *pszDomain, VBoxGuestUserState enmState, uint8_t *puDetails, uint32_t cbDetails);
+VBGLR3DECL(int)     VbglR3GuestUserReportState(const char *pszUser, const char *pszDomain, VBoxGuestUserState enmState,
+                                               uint8_t *pbDetails, uint32_t cbDetails);
 /** @}  */
 
 /** @name Host version handling
  * @{ */
-VBGLR3DECL(int)     VbglR3HostVersionCheckForUpdate(uint32_t u32ClientId, bool *pfUpdate, char **ppszHostVersion, char **ppszGuestVersion);
-VBGLR3DECL(int)     VbglR3HostVersionLastCheckedLoad(uint32_t u32ClientId, char **ppszVer);
-VBGLR3DECL(int)     VbglR3HostVersionLastCheckedStore(uint32_t u32ClientId, const char *pszVer);
+VBGLR3DECL(int)     VbglR3HostVersionCheckForUpdate(HGCMCLIENTID idClient, bool *pfUpdate, char **ppszHostVersion,
+                                                    char **ppszGuestVersion);
+VBGLR3DECL(int)     VbglR3HostVersionLastCheckedLoad(HGCMCLIENTID idClient, char **ppszVer);
+VBGLR3DECL(int)     VbglR3HostVersionLastCheckedStore(HGCMCLIENTID idClient, const char *pszVer);
 /** @}  */
 # endif /* VBOX_WITH_GUEST_PROPS defined */
 
@@ -585,16 +592,18 @@ typedef struct VBGLR3SHAREDFOLDERMAPPING
     /** Root handle. */
     uint32_t u32Root;
 } VBGLR3SHAREDFOLDERMAPPING;
-/** Pointer to a shared folder mapping information struct. */
+/** Pointer to a shared folder mapping information structure. */
 typedef VBGLR3SHAREDFOLDERMAPPING *PVBGLR3SHAREDFOLDERMAPPING;
+/** Pointer to a const shared folder mapping information structure. */
+typedef VBGLR3SHAREDFOLDERMAPPING const *PCVBGLR3SHAREDFOLDERMAPPING;
 
-VBGLR3DECL(int)     VbglR3SharedFolderConnect(uint32_t *pu32ClientId);
-VBGLR3DECL(int)     VbglR3SharedFolderDisconnect(uint32_t u32ClientId);
-VBGLR3DECL(bool)    VbglR3SharedFolderExists(uint32_t u32ClientId, const char *pszShareName);
-VBGLR3DECL(int)     VbglR3SharedFolderGetMappings(uint32_t u32ClientId, bool fAutoMountOnly,
+VBGLR3DECL(int)     VbglR3SharedFolderConnect(uint32_t *pidClient);
+VBGLR3DECL(int)     VbglR3SharedFolderDisconnect(HGCMCLIENTID idClient);
+VBGLR3DECL(bool)    VbglR3SharedFolderExists(HGCMCLIENTID idClient, const char *pszShareName);
+VBGLR3DECL(int)     VbglR3SharedFolderGetMappings(HGCMCLIENTID idClient, bool fAutoMountOnly,
                                                   PVBGLR3SHAREDFOLDERMAPPING *ppaMappings, uint32_t *pcMappings);
 VBGLR3DECL(void)    VbglR3SharedFolderFreeMappings(PVBGLR3SHAREDFOLDERMAPPING paMappings);
-VBGLR3DECL(int)     VbglR3SharedFolderGetName(uint32_t  u32ClientId,uint32_t u32Root, char **ppszName);
+VBGLR3DECL(int)     VbglR3SharedFolderGetName(HGCMCLIENTID  idClient,uint32_t u32Root, char **ppszName);
 VBGLR3DECL(int)     VbglR3SharedFolderGetMountPrefix(char **ppszPrefix);
 VBGLR3DECL(int)     VbglR3SharedFolderGetMountDir(char **ppszDir);
 /** @}  */
@@ -631,38 +640,54 @@ typedef struct VBGLR3GUESTCTRLCMDCTX
 } VBGLR3GUESTCTRLCMDCTX, *PVBGLR3GUESTCTRLCMDCTX;
 
 /* General message handling on the guest. */
-VBGLR3DECL(int) VbglR3GuestCtrlConnect(uint32_t *puClientId);
+VBGLR3DECL(int) VbglR3GuestCtrlConnect(uint32_t *pidClient);
 VBGLR3DECL(int) VbglR3GuestCtrlDisconnect(uint32_t uClientId);
 VBGLR3DECL(int) VbglR3GuestCtrlMsgFilterSet(uint32_t uClientId, uint32_t uValue, uint32_t uMaskAdd, uint32_t uMaskRemove);
 VBGLR3DECL(int) VbglR3GuestCtrlMsgFilterUnset(uint32_t uClientId);
 VBGLR3DECL(int) VbglR3GuestCtrlMsgReply(PVBGLR3GUESTCTRLCMDCTX pCtx, int rc);
-VBGLR3DECL(int) VbglR3GuestCtrlMsgReplyEx(PVBGLR3GUESTCTRLCMDCTX pCtx, int rc, uint32_t uType, void *pvPayload, uint32_t cbPayload);
+VBGLR3DECL(int) VbglR3GuestCtrlMsgReplyEx(PVBGLR3GUESTCTRLCMDCTX pCtx, int rc, uint32_t uType,
+                                          void *pvPayload, uint32_t cbPayload);
 VBGLR3DECL(int) VbglR3GuestCtrlMsgSkip(uint32_t uClientId);
 VBGLR3DECL(int) VbglR3GuestCtrlMsgWaitFor(uint32_t uClientId, uint32_t *puMsg, uint32_t *puNumParms);
-VBGLR3DECL(int) VbglR3GuestCtrlCancelPendingWaits(uint32_t u32ClientId);
+VBGLR3DECL(int) VbglR3GuestCtrlCancelPendingWaits(HGCMCLIENTID idClient);
 /* Guest session handling. */
-VBGLR3DECL(int) VbglR3GuestCtrlSessionClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uFlags);
+VBGLR3DECL(int) VbglR3GuestCtrlSessionClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t fFlags);
 VBGLR3DECL(int) VbglR3GuestCtrlSessionNotify(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uType, uint32_t uResult);
-VBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puProtocol, char *pszUser, uint32_t  cbUser, char *pszPassword, uint32_t  cbPassword, char *pszDomain, uint32_t cbDomain, uint32_t *puFlags, uint32_t *puSessionID);
-VBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puFlags, uint32_t *puSessionID);
+VBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puProtocol, char *pszUser, uint32_t cbUser,
+                                              char *pszPassword, uint32_t  cbPassword, char *pszDomain, uint32_t cbDomain,
+                                              uint32_t *pfFlags, uint32_t *pidSession);
+VBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *pfFlags, uint32_t *pidSession);
 /* Guest path handling. */
-VBGLR3DECL(int) VbglR3GuestCtrlPathGetRename(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszSource, uint32_t cbSource, char *pszDest, uint32_t cbDest, uint32_t *puFlags);
+VBGLR3DECL(int) VbglR3GuestCtrlPathGetRename(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszSource, uint32_t cbSource, char *pszDest,
+                                             uint32_t cbDest, uint32_t *pfFlags);
 /* Guest process execution. */
-VBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszCmd, uint32_t cbCmd, uint32_t *puFlags, char *pszArgs, uint32_t cbArgs, uint32_t *puNumArgs, char *pszEnv, uint32_t *pcbEnv, uint32_t *puNumEnvVars, char *pszUser, uint32_t cbUser, char *pszPassword, uint32_t cbPassword, uint32_t *puTimeoutMS, uint32_t *puPriority, uint64_t *puAffinity, uint32_t cbAffinity, uint32_t *pcAffinity);
+VBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszCmd, uint32_t cbCmd, uint32_t *pfFlags,
+                                            char *pszArgs, uint32_t cbArgs, uint32_t *puNumArgs, char *pszEnv, uint32_t *pcbEnv,
+                                            uint32_t *puNumEnvVars, char *pszUser, uint32_t cbUser, char *pszPassword,
+                                            uint32_t cbPassword, uint32_t *puTimeoutMS, uint32_t *puPriority,
+                                            uint64_t *puAffinity, uint32_t cbAffinity, uint32_t *pcAffinity);
 VBGLR3DECL(int) VbglR3GuestCtrlProcGetTerminate(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID);
-VBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *puFlags, void *pvData, uint32_t cbData, uint32_t *pcbSize);
-VBGLR3DECL(int) VbglR3GuestCtrlProcGetOutput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *puHandle, uint32_t *puFlags);
-VBGLR3DECL(int) VbglR3GuestCtrlProcGetWaitFor(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *puWaitFlags, uint32_t *puTimeoutMS);
+VBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *pfFlags, void *pvData,
+                                            uint32_t cbData, uint32_t *pcbSize);
+VBGLR3DECL(int) VbglR3GuestCtrlProcGetOutput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *puHandle, uint32_t *pfFlags);
+VBGLR3DECL(int) VbglR3GuestCtrlProcGetWaitFor(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puPID, uint32_t *puWaitFlags,
+                                              uint32_t *puTimeoutMS);
 /* Guest native directory handling. */
-VBGLR3DECL(int) VbglR3GuestCtrlDirGetRemove(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszPath, uint32_t cbPath, uint32_t *puFlags);
+VBGLR3DECL(int) VbglR3GuestCtrlDirGetRemove(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszPath, uint32_t cbPath, uint32_t *pfFlags);
 /* Guest native file handling. */
-VBGLR3DECL(int) VbglR3GuestCtrlFileGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszFileName, uint32_t cbFileName, char *pszOpenMode, uint32_t cbOpenMode, char *pszDisposition, uint32_t cbDisposition, char *pszSharing, uint32_t cbSharing, uint32_t *puCreationMode, uint64_t *puOffset);
+VBGLR3DECL(int) VbglR3GuestCtrlFileGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, char *pszFileName, uint32_t cbFileName, char *pszOpenMode,
+                                           uint32_t cbOpenMode, char *pszDisposition, uint32_t cbDisposition, char *pszSharing,
+                                           uint32_t cbSharing, uint32_t *puCreationMode, uint64_t *puOffset);
 VBGLR3DECL(int) VbglR3GuestCtrlFileGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle);
 VBGLR3DECL(int) VbglR3GuestCtrlFileGetRead(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, uint32_t *puToRead);
-VBGLR3DECL(int) VbglR3GuestCtrlFileGetReadAt(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, uint32_t *puToRead, uint64_t *puOffset);
-VBGLR3DECL(int) VbglR3GuestCtrlFileGetWrite(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, void *pvData, uint32_t cbData, uint32_t *pcbSize);
-VBGLR3DECL(int) VbglR3GuestCtrlFileGetWriteAt(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, void *pvData, uint32_t cbData, uint32_t *pcbSize, uint64_t *puOffset);
-VBGLR3DECL(int) VbglR3GuestCtrlFileGetSeek(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, uint32_t *puSeekMethod, uint64_t *puOffset);
+VBGLR3DECL(int) VbglR3GuestCtrlFileGetReadAt(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle,
+                                             uint32_t *puToRead, uint64_t *poffRead);
+VBGLR3DECL(int) VbglR3GuestCtrlFileGetWrite(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle,
+                                            void *pvData, uint32_t cbData, uint32_t *pcbActual);
+VBGLR3DECL(int) VbglR3GuestCtrlFileGetWriteAt(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle, void *pvData, uint32_t cbData,
+                                              uint32_t *pcbActual, uint64_t *poffWrite);
+VBGLR3DECL(int) VbglR3GuestCtrlFileGetSeek(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle,
+                                           uint32_t *puSeekMethod, uint64_t *poffSeek);
 VBGLR3DECL(int) VbglR3GuestCtrlFileGetTell(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puHandle);
 /* Guest -> Host. */
 VBGLR3DECL(int) VbglR3GuestCtrlFileCbOpen(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint32_t uFileHandle);
@@ -672,9 +697,12 @@ VBGLR3DECL(int) VbglR3GuestCtrlFileCbRead(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t
 VBGLR3DECL(int) VbglR3GuestCtrlFileCbWrite(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint32_t uWritten);
 VBGLR3DECL(int) VbglR3GuestCtrlFileCbSeek(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint64_t uOffActual);
 VBGLR3DECL(int) VbglR3GuestCtrlFileCbTell(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uRc, uint64_t uOffActual);
-VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatus(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uPID, uint32_t uStatus, uint32_t uFlags, void *pvData, uint32_t cbData);
-VBGLR3DECL(int) VbglR3GuestCtrlProcCbOutput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uPID, uint32_t uHandle, uint32_t uFlags, void *pvData, uint32_t cbData);
-VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatusInput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t u32PID, uint32_t uStatus, uint32_t uFlags, uint32_t cbWritten);
+VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatus(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uPID, uint32_t uStatus, uint32_t fFlags,
+                                            void *pvData, uint32_t cbData);
+VBGLR3DECL(int) VbglR3GuestCtrlProcCbOutput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uPID, uint32_t uHandle, uint32_t fFlags,
+                                            void *pvData, uint32_t cbData);
+VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatusInput(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t u32PID, uint32_t uStatus,
+                                                 uint32_t fFlags, uint32_t cbWritten);
 
 /** @}  */
 # endif /* VBOX_WITH_GUEST_CONTROL defined */
@@ -704,7 +732,8 @@ VBGLR3DECL(int)     VbglR3CpuHotPlugWaitForEvent(VMMDevCpuEventType *penmEventTy
 
 /** @name Page sharing
  * @{ */
-VBGLR3DECL(int)     VbglR3RegisterSharedModule(char *pszModuleName, char *pszVersion, RTGCPTR64  GCBaseAddr, uint32_t cbModule, unsigned cRegions, VMMDEVSHAREDREGIONDESC *pRegions);
+VBGLR3DECL(int)     VbglR3RegisterSharedModule(char *pszModuleName, char *pszVersion, RTGCPTR64  GCBaseAddr, uint32_t cbModule,
+                                               unsigned cRegions, VMMDEVSHAREDREGIONDESC *pRegions);
 VBGLR3DECL(int)     VbglR3UnregisterSharedModule(char *pszModuleName, char *pszVersion, RTGCPTR64  GCBaseAddr, uint32_t cbModule);
 VBGLR3DECL(int)     VbglR3CheckSharedModules(void);
 VBGLR3DECL(bool)    VbglR3PageSharingIsEnabled(void);
@@ -766,10 +795,11 @@ VBGLR3DECL(int)     VbglR3DnDDisconnect(PVBGLR3GUESTDNDCMDCTX pCtx);
 VBGLR3DECL(int)     VbglR3DnDProcessNextMessage(PVBGLR3GUESTDNDCMDCTX pCtx, CPVBGLR3DNDHGCMEVENT pEvent);
 
 VBGLR3DECL(int)     VbglR3DnDHGAcknowledgeOperation(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uAction);
-VBGLR3DECL(int)     VbglR3DnDHGRequestData(PVBGLR3GUESTDNDCMDCTX pCtx, const char* pcszFormat);
+VBGLR3DECL(int)     VbglR3DnDHGRequestData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pszFormat);
 VBGLR3DECL(int)     VbglR3DnDHGSetProgress(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uStatus, uint8_t uPercent, int rcErr);
 #  ifdef VBOX_WITH_DRAG_AND_DROP_GH
-VBGLR3DECL(int)     VbglR3DnDGHAcknowledgePending(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uDefAction, uint32_t uAllActions, const char* pcszFormats);
+VBGLR3DECL(int)     VbglR3DnDGHAcknowledgePending(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uDefAction,
+                                                  uint32_t uAllActions, const char *pszFormats);
 VBGLR3DECL(int)     VbglR3DnDGHSendData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pszFormat, void *pvData, uint32_t cbData);
 VBGLR3DECL(int)     VbglR3DnDGHSendError(PVBGLR3GUESTDNDCMDCTX pCtx, int rcOp);
 #  endif /* VBOX_WITH_DRAG_AND_DROP_GH */
diff --git a/include/VBox/VBoxGuestLibSharedFolders.h b/include/VBox/VBoxGuestLibSharedFolders.h
new file mode 100644
index 0000000..6e2001e
--- /dev/null
+++ b/include/VBox/VBoxGuestLibSharedFolders.h
@@ -0,0 +1,120 @@
+/* $Id: VBoxGuestLibSharedFolders.h $ */
+/** @file
+ * VBoxGuestLib - Central calls header.
+ */
+
+/*
+ * 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.
+ *
+ * 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_VBoxGuestLibSharedFolders_h_
+#define ___VBox_VBoxGuestLibSharedFolders_h_
+
+#include <VBox/VBoxGuestLib.h>
+#include <VBox/shflsvc.h>
+
+RT_C_DECLS_BEGIN
+
+
+/** @addtogroup grp_vboxguest_lib_r0
+ * @{
+ */
+
+typedef struct VBGLSFCLIENT
+{
+    HGCMCLIENTID idClient;
+    VBGLHGCMHANDLE handle;
+} VBGLSFCLIENT;
+typedef VBGLSFCLIENT *PVBGLSFCLIENT;
+
+typedef struct VBGLSFMAP
+{
+    SHFLROOT root;
+} VBGLSFMAP, *PVBGLSFMAP;
+
+DECLVBGL(int)  VbglR0SfInit(void);
+DECLVBGL(void) VbglR0SfTerm(void);
+DECLVBGL(int)  VbglR0SfConnect(PVBGLSFCLIENT pClient);
+DECLVBGL(void) VbglR0SfDisconnect(PVBGLSFCLIENT pClient);
+
+DECLVBGL(int)  VbglR0SfQueryMappings(PVBGLSFCLIENT pClient, SHFLMAPPING paMappings[], uint32_t *pcMappings);
+
+DECLVBGL(int)  VbglR0SfQueryMapName(PVBGLSFCLIENT pClient, SHFLROOT root, SHFLSTRING *pString, uint32_t size);
+
+/**
+ * Create a new file or folder or open an existing one in a shared folder.  Proxies
+ * to vbsfCreate in the host shared folder service.
+ *
+ * @returns IPRT status code, but see note below
+ * @param   pClient      Host-guest communication connection
+ * @param   pMap         The mapping for the shared folder in which the file
+ *                       or folder is to be created
+ * @param   pParsedPath  The path of the file or folder relative to the shared
+ *                       folder
+ * @param   pCreateParms Parameters for file/folder creation.  See the
+ *                       structure description in shflsvc.h
+ * @retval  pCreateParms See the structure description in shflsvc.h
+ *
+ * @note This function reports errors as follows.  The return value is always
+ *       VINF_SUCCESS unless an exceptional condition occurs - out of
+ *       memory, invalid arguments, etc.  If the file or folder could not be
+ *       opened or created, pCreateParms->Handle will be set to
+ *       SHFL_HANDLE_NIL on return.  In this case the value in
+ *       pCreateParms->Result provides information as to why (e.g.
+ *       SHFL_FILE_EXISTS).  pCreateParms->Result is also set on success
+ *       as additional information.
+ */
+DECLVBGL(int)  VbglR0SfCreate(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pParsedPath, PSHFLCREATEPARMS pCreateParms);
+
+DECLVBGL(int)  VbglR0SfClose(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE Handle);
+DECLVBGL(int)  VbglR0SfRemove(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pParsedPath, uint32_t flags);
+DECLVBGL(int)  VbglR0SfRename(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pSrcPath, PSHFLSTRING pDestPath, uint32_t flags);
+DECLVBGL(int)  VbglR0SfFlush(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile);
+
+DECLVBGL(int)  VbglR0SfRead(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer, uint8_t *pBuffer, bool fLocked);
+DECLVBGL(int)  VbglR0SfReadPageList(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer,
+                                    uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages);
+DECLVBGL(int)  VbglR0SfWrite(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset,
+                             uint32_t *pcbBuffer,  uint8_t *pBuffer, bool fLocked);
+DECLVBGL(int)  VbglR0SfWritePhysCont(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset,
+                                     uint32_t *pcbBuffer, RTCCPHYS PhysBuffer);
+DECLVBGL(int)  VbglR0SfWritePageList(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer,
+                                     uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages);
+
+DECLVBGL(int)  VbglR0SfLock(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint64_t cbSize, uint32_t fLock);
+
+DECLVBGL(int)  VbglR0SfDirInfo(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile,PSHFLSTRING ParsedPath, uint32_t flags,
+                               uint32_t index, uint32_t *pcbBuffer, PSHFLDIRINFO pBuffer, uint32_t *pcFiles);
+DECLVBGL(int)  VbglR0SfFsInfo(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint32_t flags, uint32_t *pcbBuffer, PSHFLDIRINFO pBuffer);
+
+DECLVBGL(int)  VbglR0SfMapFolder(PVBGLSFCLIENT pClient, PSHFLSTRING szFolderName, PVBGLSFMAP pMap);
+DECLVBGL(int)  VbglR0SfUnmapFolder(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap);
+DECLVBGL(int)  VbglR0SfSetUtf8(PVBGLSFCLIENT pClient);
+
+DECLVBGL(int)  VbglR0SfReadLink(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING ParsedPath, uint32_t pcbBuffer, uint8_t *pBuffer);
+DECLVBGL(int)  VbglR0SfSymlink(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pNewPath, PSHFLSTRING pOldPath, PSHFLFSOBJINFO pBuffer);
+DECLVBGL(int)  VbglR0SfSetSymlinks(PVBGLSFCLIENT pClient);
+
+/** @} */
+
+RT_C_DECLS_END
+
+#endif
+
diff --git a/include/VBox/VBoxTpG.h b/include/VBox/VBoxTpG.h
index 48f8774..8cf5e42 100644
--- a/include/VBox/VBoxTpG.h
+++ b/include/VBox/VBoxTpG.h
@@ -104,7 +104,7 @@ typedef VTGPROBELOC const *PCVTGPROBELOC;
 # ifdef _MSC_VER
 #  define VTG_DECL_VTGPROBELOC(a_VarName) \
     __declspec(allocate(VTG_LOC_SECT)) static VTGPROBELOC a_VarName
-# elif defined(__GNUC__)
+# elif defined(__GNUC__) || defined(DOXYGEN_RUNNING)
 #  define VTG_DECL_VTGPROBELOC(a_VarName) \
     static VTGPROBELOC __attribute__((section(VTG_LOC_SECT))) a_VarName
 # else
@@ -115,7 +115,7 @@ typedef VTGPROBELOC const *PCVTGPROBELOC;
 # define VTG_OBJ_SECT       "__VTGObj"
 # define VTG_LOC_SECT       "__VTGPrLc"
 # define VTG_LOC_SEG        "__VTG"
-# ifdef __GNUC__
+# if defined(__GNUC__) || defined(DOXYGEN_RUNNING)
 #  define VTG_DECL_VTGPROBELOC(a_VarName) \
     static VTGPROBELOC __attribute__((section(VTG_LOC_SEG "," VTG_LOC_SECT ",regular")/*, aligned(16)*/)) a_VarName
 # else
@@ -126,7 +126,7 @@ typedef VTGPROBELOC const *PCVTGPROBELOC;
 # define VTG_OBJ_SECT       "__DATA"
 # define VTG_LOC_SECT       "__VTGPrLc"
 # define VTG_LOC_SET        "__VTGPrLcSet"
-# ifdef __GNUC__
+# if defined(__GNUC__) || defined(DOXYGEN_RUNNING)
 #  define VTG_DECL_VTGPROBELOC(a_VarName) \
     static VTGPROBELOC a_VarName; \
     __asm__ (".stabs \"__VTGPrLcSet\",  23, 0, 0, _" #a_VarName );
@@ -138,7 +138,7 @@ typedef VTGPROBELOC const *PCVTGPROBELOC;
 #else /* Assume the rest uses ELF. */
 # define VTG_OBJ_SECT       ".VTGObj"
 # define VTG_LOC_SECT       ".VTGPrLc"
-# ifdef __GNUC__
+# if defined(__GNUC__) || defined(DOXYGEN_RUNNING)
 #  define VTG_DECL_VTGPROBELOC(a_VarName) \
     static VTGPROBELOC __attribute__((section(VTG_LOC_SECT))) a_VarName
 # else
diff --git a/include/VBox/VMMDev.h b/include/VBox/VMMDev.h
index 70c9aca..e19c9ab 100644
--- a/include/VBox/VMMDev.h
+++ b/include/VBox/VMMDev.h
@@ -41,7 +41,7 @@ RT_C_DECLS_BEGIN
 
 /** @defgroup grp_vmmdev    VMM Device
  *
- * Note! This interface cannot be changed, it can only be extended!
+ * @note This interface cannot be changed, it can only be extended!
  *
  * @{
  */
@@ -743,6 +743,11 @@ AssertCompileSize(VBoxGuestFacilityType, 4);
 /**
  * The current guest status of a facility.
  * This needs to be kept in sync with AdditionsFacilityStatus of the Main API!
+ *
+ * @remarks r=bird: Pretty please, for future types like this, simply do a
+ *          linear allocation without any gaps.  This stuff is impossible work
+ *          efficiently with, let alone validate.  Applies to the other facility
+ *          enums too.
  */
 typedef enum
 {
diff --git a/include/VBox/VMMDev2.h b/include/VBox/VMMDev2.h
index fc1b06a..63cc7b9 100644
--- a/include/VBox/VMMDev2.h
+++ b/include/VBox/VMMDev2.h
@@ -28,6 +28,12 @@
 
 #include <iprt/assert.h>
 
+
+/** @addtogroup grp_vmmdev
+ * @{
+ */
+
+
 /**
  * Seamless mode.
  *
@@ -110,5 +116,7 @@ AssertCompileSize(HGCMServiceLocation, 128+4);
 struct VMMDevReqMousePointer;
 struct VMMDevMemory;
 
+/** @} */
+
 #endif
 
diff --git a/include/VBox/VMMDevTesting.h b/include/VBox/VMMDevTesting.h
index d78257a..4a02f6b 100644
--- a/include/VBox/VMMDevTesting.h
+++ b/include/VBox/VMMDevTesting.h
@@ -30,6 +30,12 @@
 
 #include <VBox/types.h>
 
+
+/** @defgroup grp_vmmdev_testing    VMM Device Testing
+ * @ingroup grp_vmmdev
+ * @{
+ */
+
 /** The base address of the MMIO range used for testing.
  * This is intentionally put at the 2nd page above 1M so that it can be
  * accessed from both real (!A20) and protected mode. */
@@ -120,5 +126,7 @@
 /** What the NOP accesses returns. */
 #define VMMDEV_TESTING_NOP_RET          UINT32_C(0x64726962) /* bird */
 
+/** @} */
+
 #endif
 
diff --git a/include/VBox/bioslogo.h b/include/VBox/bioslogo.h
index d583066..aaddf1d 100644
--- a/include/VBox/bioslogo.h
+++ b/include/VBox/bioslogo.h
@@ -33,8 +33,11 @@
 #endif
 
 /** @defgroup grp_bios_logo     The Private BIOS Logo Interface.
- * @remark All this is currently duplicated in logo.c.
+ * @ingroup grp_devdrv
  * @internal
+ *
+ * @remark All this is currently duplicated in logo.c.
+ *
  * @{
  */
 
diff --git a/include/VBox/cdefs.h b/include/VBox/cdefs.h
index db7006a..a85b6e7 100644
--- a/include/VBox/cdefs.h
+++ b/include/VBox/cdefs.h
@@ -29,6 +29,10 @@
 #include <iprt/cdefs.h>
 
 
+/** @defgroup VBox Common Defintions and Macros
+ * @{
+ */
+
 /** @def VBOX_WITH_STATISTICS
  * When defined all statistics will be included in the build.
  * This is enabled by default in all debug builds.
@@ -442,6 +446,12 @@
 # define VBOXDDU_DECL(type) DECLIMPORT(type) VBOXCALL
 #endif
 
+/** @} */
+
+
+/** @defgroup grp_devdrv    Device Emulations and Drivers
+ * @{ */
+/** @} */
 
 #endif
 
diff --git a/include/VBox/com/AutoLock.h b/include/VBox/com/AutoLock.h
index 61b35de..4fe0b9f 100644
--- a/include/VBox/com/AutoLock.h
+++ b/include/VBox/com/AutoLock.h
@@ -1,5 +1,5 @@
 /** @file
- * Automatic locks, implementation
+ * MS COM / XPCOM Abstraction Layer - Automatic locks, implementation.
  */
 
 /*
@@ -28,6 +28,12 @@
 
 #include <iprt/types.h>
 
+
+/** @defgroup grp_com_autolock  Automatic Locks
+ * @ingroup grp_com
+ * @{
+ */
+
 // macros for automatic lock validation; these will amount to nothing
 // unless lock validation is enabled for the runtime
 #if defined(RT_LOCK_STRICT)
@@ -119,8 +125,8 @@ public:
 
     /**
      * Returns the current write lock level of this semaphore. The lock level
-     * determines the number of nested #lock() calls on the given semaphore
-     * handle.
+     * determines the number of nested #lockWrite() calls on the given
+     * semaphore handle.
      *
      * Note that this call is valid only when the current thread owns a write
      * lock on the given semaphore handle and will assert otherwise.
@@ -521,11 +527,11 @@ public:
                   COMMA_LOCKVAL_SRC_POS_DECL);
 
     /**
-     * Release all write locks acquired by this instance through the #lock()
+     * Release all write locks acquired by this instance through the #acquire()
      * call and destroys the instance.
      *
-     * Note that if there there are nested #lock() calls without the
-     * corresponding number of #unlock() calls when the destructor is called, it
+     * Note that if there there are nested #acquire() calls without the
+     * corresponding number of #release() calls when the destructor is called, it
      * will assert. This is because having an unbalanced number of nested locks
      * is a program logic error which must be fixed.
      */
@@ -632,6 +638,8 @@ public:
 
 } /* namespace util */
 
+/** @} */
+
 #endif
 
 /* vi: set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/include/VBox/com/ErrorInfo.h b/include/VBox/com/ErrorInfo.h
index ead288d..fc6e231 100644
--- a/include/VBox/com/ErrorInfo.h
+++ b/include/VBox/com/ErrorInfo.h
@@ -31,6 +31,12 @@
 #include "VBox/com/Guid.h"
 #include "VBox/com/assert.h"
 
+
+/** @defgroup grp_com_errinfo   ErrorInfo Classes
+ * @ingroup grp_com
+ * @{
+ */
+
 COM_STRUCT_OR_CLASS(IProgress);
 COM_STRUCT_OR_CLASS(IVirtualBoxErrorInfo);
 
@@ -190,10 +196,10 @@ public:
     }
 
     /** Specialization for the IVirtualBoxErrorInfo smart pointer */
-    ErrorInfo (const ComPtr <IVirtualBoxErrorInfo> &aPtr)
-        : mIsBasicAvailable (false), mIsFullAvailable (false)
-        , mResultCode (S_OK), mResultDetail(0)
-        { init (aPtr); }
+    ErrorInfo(const ComPtr<IVirtualBoxErrorInfo> &aPtr)
+        : mIsBasicAvailable(false), mIsFullAvailable(false)
+        , mResultCode(S_OK), mResultDetail(0)
+        { init(aPtr); }
 
     /**
      *  Constructs a new ErrorInfo instance from the IVirtualBoxErrorInfo
@@ -203,10 +209,10 @@ public:
      *  @param aInfo    pointer to the IVirtualBoxErrorInfo interface that
      *                  holds error info to be fetched by this instance
      */
-    ErrorInfo (IVirtualBoxErrorInfo *aInfo)
-        : mIsBasicAvailable (false), mIsFullAvailable (false)
-        , mResultCode (S_OK), mResultDetail(0)
-        { init (aInfo); }
+    ErrorInfo(IVirtualBoxErrorInfo *aInfo)
+        : mIsBasicAvailable(false), mIsFullAvailable(false)
+        , mResultCode(S_OK), mResultDetail(0)
+        { init(aInfo); }
 
     ErrorInfo(const ErrorInfo &x)
     {
@@ -319,8 +325,10 @@ public:
      *  Returns the IID of the interface that returned the error.
      *
      *  This method returns a non-null IID only if the instance was created
-     *  using #template <class I> ErrorInfo(I *i) or
-     *  template <class I> ErrorInfo(const ComPtr<I> &i) constructor.
+     *  using template \<class I\> ErrorInfo(I *i) or
+     *  template \<class I\> ErrorInfo(const ComPtr<I> &i) constructor.
+     *
+     *  @todo broken ErrorInfo documentation links, possibly misleading.
      */
     const Guid& getCalleeIID() const
     {
@@ -331,8 +339,10 @@ public:
      *  Returns the name of the interface that returned the error
      *
      *  This method returns a non-null name only if the instance was created
-     *  using #template <class I> ErrorInfo(I *i) or
-     *  template <class I> ErrorInfo(const ComPtr<I> &i) constructor.
+     *  using template \<class I\> ErrorInfo(I *i) or
+     *  template \<class I\> ErrorInfo(const ComPtr<I> &i) constructor.
+     *
+     *  @todo broken ErrorInfo documentation links, possibly misleading.
      */
     const Bstr& getCalleeName() const
     {
@@ -516,5 +526,7 @@ private:
 
 } /* namespace com */
 
+/** @} */
+
 #endif
 
diff --git a/include/VBox/com/EventQueue.h b/include/VBox/com/EventQueue.h
index 8a2dce5..80a13bd 100644
--- a/include/VBox/com/EventQueue.h
+++ b/include/VBox/com/EventQueue.h
@@ -1,6 +1,6 @@
 /* $Id: EventQueue.h $ */
 /** @file
- * Event queue class declaration.
+ * MS COM / XPCOM Abstraction Layer - Event queue class declaration.
  */
 
 /*
@@ -35,6 +35,12 @@
 #include <VBox/com/defs.h>
 #include <VBox/com/assert.h>
 
+
+/** @defgroup grp_com_evtqueue  Event Queue Classes
+ * @ingroup grp_com
+ * @{
+ */
+
 namespace com
 {
 
@@ -126,5 +132,7 @@ private:
 
 } /* namespace com */
 
+/** @} */
+
 #endif
 
diff --git a/include/VBox/com/Guid.h b/include/VBox/com/Guid.h
index 1136e99..1396d85 100644
--- a/include/VBox/com/Guid.h
+++ b/include/VBox/com/Guid.h
@@ -40,6 +40,12 @@
 #include <iprt/uuid.h>
 #include <iprt/err.h>
 
+
+/** @defgroup grp_com_guid  GUID Class
+ * @ingroup grp_com
+ * @{
+ */
+
 namespace com
 {
 
@@ -520,5 +526,7 @@ private:
 
 } /* namespace com */
 
+/** @} */
+
 #endif /* !___VBox_com_Guid_h */
 
diff --git a/include/VBox/com/MultiResult.h b/include/VBox/com/MultiResult.h
index f7053aa..5a59497 100644
--- a/include/VBox/com/MultiResult.h
+++ b/include/VBox/com/MultiResult.h
@@ -32,6 +32,11 @@
 
 #include <stdarg.h>
 
+/** @defgroup grp_com_mr    MultiResult Classes
+ * @ingroup grp_com
+ * @{
+ */
+
 namespace com
 {
 
@@ -128,8 +133,7 @@ private:
  * a S_OK value multiple times. See com::FWResult for details.
  *
  * Here is the typical usage pattern:
- *  <code>
-
+ * @code
     HRESULT Bar::method()
     {
         // assume multi-errors are turned off here...
@@ -156,8 +160,7 @@ private:
 
         return S_OK;
     }
-
- *  </code>
+ * @endcode
  *
  * @note This class is intended to be instantiated on the stack, therefore
  *       You cannot create them using new(). Although it is possible to copy
@@ -169,7 +172,7 @@ class MultiResult : public FWResult
 public:
 
     /**
-     * @copydoc FWResult::FWResult().
+     * @copydoc FWResult::FWResult()
      */
     MultiResult (HRESULT aRC = E_FAIL) : FWResult (aRC) { incCounter(); }
 
@@ -256,5 +259,7 @@ private:
 
 } /* namespace com */
 
+/** @} */
+
 #endif /* !___VBox_com_MultiResult_h */
 
diff --git a/include/VBox/com/NativeEventQueue.h b/include/VBox/com/NativeEventQueue.h
index 2f91ab4..81efc0e 100644
--- a/include/VBox/com/NativeEventQueue.h
+++ b/include/VBox/com/NativeEventQueue.h
@@ -1,6 +1,5 @@
 /** @file
- * MS COM / XPCOM Abstraction Layer:
- * Event and EventQueue class declaration
+ * MS COM / XPCOM Abstraction Layer - Event and EventQueue class declaration.
  */
 
 /*
@@ -29,13 +28,19 @@
 
 #ifndef VBOX_WITH_XPCOM
 # include <Windows.h>
-#else // VBOX_WITH_XPCOM
+#else
 # include <nsEventQueueUtils.h>
-#endif // VBOX_WITH_XPCOM
+#endif
 
 #include <VBox/com/defs.h>
 #include <VBox/com/assert.h>
 
+
+/** @defgroup grp_com_evt   Event and EventQueue Classes
+ * @ingroup grp_com
+ * @{
+ */
+
 namespace com
 {
 
@@ -137,4 +142,7 @@ private:
 
 } /* namespace com */
 
+/** @} */
+
 #endif
+
diff --git a/include/VBox/com/VirtualBox.h b/include/VBox/com/VirtualBox.h
index 2cd9c88..f32a16b 100644
--- a/include/VBox/com/VirtualBox.h
+++ b/include/VBox/com/VirtualBox.h
@@ -8,7 +8,7 @@
  *       /src/VBox/Main/idl/VirtualBox.xidl, which contains all the VirtualBox
  *       interfaces; the include file is called VirtualBox.h on Windows hosts
  *       and VirtualBox_XPCOM.h on Linux hosts.  The build process places it in
- *       out/<platform>/bin/sdk/include, from where it gets
+ *       out/{platform}/bin/sdk/include, from where it gets
  *       included by the rest of the VirtualBox code.
  */
 
diff --git a/include/VBox/com/array.h b/include/VBox/com/array.h
index b0da627..1692d4d 100644
--- a/include/VBox/com/array.h
+++ b/include/VBox/com/array.h
@@ -26,7 +26,9 @@
 #ifndef ___VBox_com_array_h
 #define ___VBox_com_array_h
 
-/** @defgroup   grp_COM_arrays    COM/XPCOM Arrays
+
+/** @defgroup   grp_com_arrays    COM/XPCOM Arrays
+ * @ingroup grp_com
  * @{
  *
  * The COM/XPCOM array support layer provides a cross-platform way to pass
@@ -155,8 +157,9 @@
  *
  * Arrays of interface pointers are also supported but they require to use a
  * special SafeArray implementation, com::SafeIfacePointer, which takes the
- * interface class name as a template argument (e.g. com::SafeIfacePointer
- * <IUnknown>). This implementation functions identically to com::SafeArray.
+ * interface class name as a template argument (e.g.
+ * com::SafeIfacePointer\<IUnknown\>). This implementation functions
+ * identically to com::SafeArray.
  */
 
 #ifdef VBOX_WITH_XPCOM
@@ -686,7 +689,7 @@ public:
      *
      * @param aCntr Container object to copy.
      *
-     * @param C     Standard C++ container template class (normally deduced from
+     * @tparam C    Standard C++ container template class (normally deduced from
      *              @c aCntr).
      */
     template<template<typename, typename> class C, class A>
@@ -711,11 +714,11 @@ public:
      *
      * @param aMap  Map object to copy.
      *
-     * @param C     Standard C++ map template class (normally deduced from
-     *              @c aCntr).
-     * @param L     Standard C++ compare class (deduced from @c aCntr).
-     * @param A     Standard C++ allocator class (deduced from @c aCntr).
-     * @param K     Map key class (deduced from @c aCntr).
+     * @tparam C    Standard C++ map template class (normally deduced from
+     *              @a aMap).
+     * @tparam L    Standard C++ compare class (deduced from @a aMap).
+     * @tparam A    Standard C++ allocator class (deduced from @a aMap).
+     * @tparam K    Map key class (deduced from @a aMap).
      */
     template<template<typename, typename, typename, typename>
               class C, class L, class A, class K>
@@ -828,9 +831,9 @@ public:
      * This method is handy for operations like
      * <tt>Bstr("foo").detachTo(array.appendedRaw());</tt>. Don't use it as
      * an l-value (<tt>array.appendedRaw() = SysAllocString(L"tralala");</tt>)
-     * since this doesn't check for a NULL condition; use #resize() and
-     * #setRawAt() instead. If you need to assign a copy of the existing value
-     * instead of transferring the ownership, look at #push_back().
+     * since this doesn't check for a NULL condition; use #resize() instead. If
+     * you need to assign a copy of the existing value instead of transferring
+     * the ownership, look at #push_back().
      *
      * @return          Raw pointer to the added element or NULL if no memory.
      */
@@ -1628,14 +1631,14 @@ public:
 
     /**
      * Creates a deep copy of the given standard C++ container that stores
-     * interface pointers as objects of the ComPtr<I> class.
+     * interface pointers as objects of the ComPtr\<I\> class.
      *
      * @param aCntr Container object to copy.
      *
-     * @param C     Standard C++ container template class (normally deduced from
+     * @tparam C    Standard C++ container template class (normally deduced from
      *              @c aCntr).
-     * @param A     Standard C++ allocator class (deduced from @c aCntr).
-     * @param OI    Argument to the ComPtr template (deduced from @c aCntr).
+     * @tparam A    Standard C++ allocator class (deduced from @c aCntr).
+     * @tparam OI   Argument to the ComPtr template (deduced from @c aCntr).
      */
     template<template<typename, typename> class C, class A, class OI>
     SafeIfaceArray(const C<ComPtr<OI>, A> & aCntr)
@@ -1657,14 +1660,14 @@ public:
 
     /**
      * Creates a deep copy of the given standard C++ container that stores
-     * interface pointers as objects of the ComObjPtr<I> class.
+     * interface pointers as objects of the ComObjPtr\<I\> class.
      *
      * @param aCntr Container object to copy.
      *
-     * @param C     Standard C++ container template class (normally deduced from
+     * @tparam C    Standard C++ container template class (normally deduced from
      *              @c aCntr).
-     * @param A     Standard C++ allocator class (deduced from @c aCntr).
-     * @param OI    Argument to the ComObjPtr template (deduced from @c aCntr).
+     * @tparam A    Standard C++ allocator class (deduced from @c aCntr).
+     * @tparam OI   Argument to the ComObjPtr template (deduced from @c aCntr).
      */
     template<template<typename, typename> class C, class A, class OI>
     SafeIfaceArray(const C<ComObjPtr<OI>, A> & aCntr)
@@ -1686,16 +1689,16 @@ public:
 
     /**
      * Creates a deep copy of the given standard C++ map whose values are
-     * interface pointers stored as objects of the ComPtr<I> class.
+     * interface pointers stored as objects of the ComPtr\<I\> class.
      *
      * @param aMap  Map object to copy.
      *
-     * @param C     Standard C++ map template class (normally deduced from
+     * @tparam C    Standard C++ map template class (normally deduced from
      *              @c aCntr).
-     * @param L     Standard C++ compare class (deduced from @c aCntr).
-     * @param A     Standard C++ allocator class (deduced from @c aCntr).
-     * @param K     Map key class (deduced from @c aCntr).
-     * @param OI    Argument to the ComPtr template (deduced from @c aCntr).
+     * @tparam L    Standard C++ compare class (deduced from @c aCntr).
+     * @tparam A    Standard C++ allocator class (deduced from @c aCntr).
+     * @tparam K    Map key class (deduced from @c aCntr).
+     * @tparam OI   Argument to the ComPtr template (deduced from @c aCntr).
      */
     template<template<typename, typename, typename, typename>
               class C, class L, class A, class K, class OI>
@@ -1718,16 +1721,16 @@ public:
 
     /**
      * Creates a deep copy of the given standard C++ map whose values are
-     * interface pointers stored as objects of the ComObjPtr<I> class.
+     * interface pointers stored as objects of the ComObjPtr\<I\> class.
      *
      * @param aMap  Map object to copy.
      *
-     * @param C     Standard C++ map template class (normally deduced from
+     * @tparam C    Standard C++ map template class (normally deduced from
      *              @c aCntr).
-     * @param L     Standard C++ compare class (deduced from @c aCntr).
-     * @param A     Standard C++ allocator class (deduced from @c aCntr).
-     * @param K     Map key class (deduced from @c aCntr).
-     * @param OI    Argument to the ComObjPtr template (deduced from @c aCntr).
+     * @tparam L    Standard C++ compare class (deduced from @c aCntr).
+     * @tparam A    Standard C++ allocator class (deduced from @c aCntr).
+     * @tparam K    Map key class (deduced from @c aCntr).
+     * @tparam OI   Argument to the ComObjPtr template (deduced from @c aCntr).
      */
     template<template<typename, typename, typename, typename>
               class C, class L, class A, class K, class OI>
diff --git a/include/VBox/com/assert.h b/include/VBox/com/assert.h
index db52480..517cbaa 100644
--- a/include/VBox/com/assert.h
+++ b/include/VBox/com/assert.h
@@ -28,81 +28,95 @@
 
 #include <iprt/assert.h>
 
+/** @defgroup grp_com_assert    Assertion Macros for COM/XPCOM
+ * @ingroup grp_com
+ * @{
+ */
+
+
 /**
  *  Asserts that the COM result code is succeeded in strict builds.
  *  In non-strict builds the result code will be NOREF'ed to kill compiler warnings.
  *
- *  @param rc   COM result code
+ *  @param hrc      The COM result code
  */
-#define AssertComRC(rc)      \
-    do { AssertMsg (SUCCEEDED (rc), ("COM RC = %Rhrc (0x%08X)\n", rc, rc)); NOREF (rc); } while (0)
+#define AssertComRC(hrc) \
+    do { AssertMsg(SUCCEEDED(hrc), ("COM RC = %Rhrc (0x%08X)\n", hrc, hrc)); NOREF(hrc); } while (0)
+
+/**
+ *  Same as AssertComRC, except the caller already knows we failed.
+ *
+ *  @param hrc      The COM result code
+ */
+#define AssertComRCFailed(hrc) \
+    do { AssertMsgFailed(("COM RC = %Rhrc (0x%08X)\n", hrc, hrc)); NOREF(hrc); } while (0)
 
 /**
  *  A special version of AssertComRC that returns the given expression
  *  if the result code is failed.
  *
- *  @param rc   COM result code
- *  @param ret  the expression to return
+ *  @param hrc      The COM result code
+ *  @param RetExpr  The expression to return
  */
-#define AssertComRCReturn(rc, ret)      \
-    AssertMsgReturn (SUCCEEDED (rc), ("COM RC = %Rhrc (0x%08X)\n", rc, rc), ret)
+#define AssertComRCReturn(hrc, RetExpr) \
+    AssertMsgReturn(SUCCEEDED(hrc), ("COM RC = %Rhrc (0x%08X)\n", hrc, hrc), RetExpr)
 
 /**
  *  A special version of AssertComRC that returns the given result code
  *  if it is failed.
  *
- *  @param rc   COM result code
- *  @param ret  the expression to return
+ *  @param hrc      The COM result code
  */
-#define AssertComRCReturnRC(rc)         \
-    AssertMsgReturn (SUCCEEDED (rc), ("COM RC = %Rhrc (0x%08X)\n", rc, rc), rc)
+#define AssertComRCReturnRC(hrc) \
+    AssertMsgReturn(SUCCEEDED(hrc), ("COM RC = %Rhrc (0x%08X)\n", hrc, hrc), hrc)
 
 /**
  *  A special version of AssertComRC that returns if the result code is failed.
  *
- *  @param rc   COM result code
- *  @param ret  the expression to return
+ *  @param hrc      The COM result code
  */
-#define AssertComRCReturnVoid(rc)      \
-    AssertMsgReturnVoid (SUCCEEDED (rc), ("COM RC = %Rhrc (0x%08X)\n", rc, rc))
+#define AssertComRCReturnVoid(hrc) \
+    AssertMsgReturnVoid(SUCCEEDED(hrc), ("COM RC = %Rhrc (0x%08X)\n", hrc, hrc))
 
 /**
  *  A special version of AssertComRC that evaluates the given expression and
  *  breaks if the result code is failed.
  *
- *  @param rc   COM result code
- *  @param eval the expression to evaluate
+ *  @param hrc          The COM result code
+ *  @param PreBreakExpr The expression to evaluate on failure.
  */
-#define AssertComRCBreak(rc, eval)      \
-    if (!SUCCEEDED (rc)) { AssertComRC (rc); eval; break; } else do {} while (0)
+#define AssertComRCBreak(hrc, PreBreakExpr) \
+    if (!SUCCEEDED(hrc)) { AssertComRCFailed(hrc); PreBreakExpr; break; } else do {} while (0)
 
 /**
  *  A special version of AssertComRC that evaluates the given expression and
  *  throws it if the result code is failed.
  *
- *  @param rc   COM result code
- *  @param eval the expression to throw
+ *  @param hrc          The COM result code
+ *  @param ThrowMeExpr  The expression which result to be thrown on failure.
  */
-#define AssertComRCThrow(rc, eval)      \
-    if (!SUCCEEDED (rc)) { AssertComRC (rc); throw (eval); } else do {} while (0)
+#define AssertComRCThrow(hrc, ThrowMeExpr) \
+    do { if (SUCCEEDED(hrc)) { /*likely*/} else { AssertComRCFailed(hrc); throw (ThrowMeExpr); } } while (0)
 
 /**
  *  A special version of AssertComRC that just breaks if the result code is
  *  failed.
  *
- *  @param rc   COM result code
+ *  @param hrc      The COM result code
  */
-#define AssertComRCBreakRC(rc)          \
-    if (!SUCCEEDED (rc)) { AssertComRC (rc); break; } else do {} while (0)
+#define AssertComRCBreakRC(hrc) \
+    if (!SUCCEEDED(hrc)) { AssertComRCFailed(hrc); break; } else do {} while (0)
 
 /**
- *  A special version of AssertComRC that just throws @a rc if the result code is
- *  failed.
+ *  A special version of AssertComRC that just throws @a hrc if the result code
+ *  is failed.
  *
- *  @param rc   COM result code
+ *  @param hrc      The COM result code
  */
-#define AssertComRCThrowRC(rc)          \
-    if (!SUCCEEDED (rc)) { AssertComRC (rc); throw rc; } else do {} while (0)
+#define AssertComRCThrowRC(hrc) \
+    do { if (SUCCEEDED(hrc)) { /*likely*/ } else { AssertComRCFailed(hrc); throw hrc; } } while (0)
+
+/** @} */
 
 #endif // !___VBox_com_assert_h
 
diff --git a/include/VBox/com/com.h b/include/VBox/com/com.h
index e287c73..db67263 100644
--- a/include/VBox/com/com.h
+++ b/include/VBox/com/com.h
@@ -28,6 +28,10 @@
 
 #include "VBox/com/defs.h"
 
+/** @defgroup grp_com   MS COM / XPCOM Abstraction Layer
+ * @{
+ */
+
 namespace com
 {
 
@@ -36,7 +40,7 @@ namespace com
  *  Must be called on the main thread, before any COM activity in any thread, and by any thread
  *  willing to perform COM operations.
  *
- *  @param fMain     if call is performed on the GUI thread
+ *  @param fGui     if call is performed on the GUI thread
  *  @return COM result code
  */
 HRESULT Initialize(bool fGui = false);
@@ -106,5 +110,6 @@ int VBoxLogRelCreate(const char *pcszEntity, const char *pcszLogFile,
 
 } /* namespace com */
 
+/** @} */
 #endif
 
diff --git a/include/VBox/com/defs.h b/include/VBox/com/defs.h
index 8deebe3..50ddb16 100644
--- a/include/VBox/com/defs.h
+++ b/include/VBox/com/defs.h
@@ -1,5 +1,5 @@
 /** @file
- * MS COM / XPCOM Abstraction Layer - Common definitions.
+ * MS COM / XPCOM Abstraction Layer - Common Definitions.
  */
 
 /*
@@ -65,6 +65,13 @@
  * we'll be without the macros that are optional in C++. */
 #include <iprt/types.h>
 
+
+
+/** @defgroup grp_com_defs  Common Definitions
+ * @ingroup grp_com
+ * @{
+ */
+
 #if !defined(VBOX_WITH_XPCOM)
 
 #if defined(RT_OS_WINDOWS)
@@ -144,7 +151,7 @@ typedef const OLECHAR *CBSTR;
 #define ComSafeArrayIn(aType, aArg)     SAFEARRAY *aArg
 
 /**
- * Expands to @true if the given input safearray parameter is a "null pointer"
+ * Expands to @c true if the given input safearray parameter is a "null pointer"
  * which makes it impossible to use it for reading safearray data.
  */
 #define ComSafeArrayInIsNull(aArg)      ((aArg) == NULL)
@@ -179,8 +186,8 @@ typedef const OLECHAR *CBSTR;
 #define ComSafeArrayOut(aType, aArg)    SAFEARRAY **aArg
 
 /**
- * Expands to @true if the given output safearray parameter is a "null pointer"
- * which makes it impossible to use it for returning a safearray.
+ * Expands to @c true if the given output safearray parameter is a "null
+ * pointer" which makes it impossible to use it for returning a safearray.
  */
 #define ComSafeArrayOutIsNull(aArg)     ((aArg) == NULL)
 
@@ -240,7 +247,7 @@ typedef const OLECHAR *CBSTR;
  *  Returns the const reference to the IID (i.e., |const GUID &|) of the given
  *  interface.
  *
- *  @param i    interface class
+ *  @param I    interface class
  */
 #define COM_IIDOF(I) _ATL_IIDOF(I)
 
@@ -561,5 +568,7 @@ namespace com
 
 } /* namespace com */
 
+/** @} */
+
 #endif /* !___VBox_com_defs_h */
 
diff --git a/include/VBox/com/errorprint.h b/include/VBox/com/errorprint.h
index 43ed0ed..f55790b 100644
--- a/include/VBox/com/errorprint.h
+++ b/include/VBox/com/errorprint.h
@@ -32,24 +32,23 @@
 
 #include <VBox/com/ErrorInfo.h>
 
+
+/** @defgroup grp_com_error_reporting   Error Reporting
+ * @ingroup grp_com
+ * @{
+ */
+
 namespace com
 {
 
 // shared prototypes; these are defined in shared glue code and are
 // compiled only once for all front-ends
 void GluePrintErrorInfo(const com::ErrorInfo &info);
-void GluePrintErrorContext(const char *pcszContext, const char *pcszSourceFile, uint32_t ulLine);
+void GluePrintErrorContext(const char *pcszContext, const char *pcszSourceFile, uint32_t uLine);
 void GluePrintRCMessage(HRESULT rc);
-void GlueHandleComError(ComPtr<IUnknown> iface,
-                        const char *pcszContext,
-                        HRESULT rc,
-                        const char *pcszSourceFile,
-                        uint32_t ulLine);
-void GlueHandleComErrorProgress(ComPtr<IProgress> progress,
-                                const char *pcszContext,
-                                HRESULT rc,
-                                const char *pcszSourceFile,
-                                uint32_t ulLine);
+void GlueHandleComError(ComPtr<IUnknown> iface, const char *pcszContext, HRESULT rc, const char *pcszSourceFile, uint32_t uLine);
+void GlueHandleComErrorProgress(ComPtr<IProgress> progress, const char *pcszContext, HRESULT rc,
+                                const char *pcszSourceFile, uint32_t uLine);
 
 /**
  * Extended macro that implements all the other CHECK_ERROR2XXX macros.
@@ -238,6 +237,7 @@ void GlueHandleComErrorProgress(ComPtr<IProgress> progress,
  * Simplified version of CHECK_ERROR2_EX that executes the |return (rcRet)|
  * statement after error reporting.
  *
+ * @param   hrc         The result variable (type HRESULT).
  * @param   iface       The interface pointer (can be a smart pointer object).
  * @param   method      The method to invoke together with the parameters.
  * @param   rcRet       What to return on failure.
@@ -361,3 +361,6 @@ void GlueHandleComErrorProgress(ComPtr<IProgress> progress,
 
 } /* namespace com */
 
+/** @} */
+
+
diff --git a/include/VBox/com/list.h b/include/VBox/com/list.h
index 7d84406..c65dd9a 100644
--- a/include/VBox/com/list.h
+++ b/include/VBox/com/list.h
@@ -33,10 +33,15 @@
 #include <iprt/cpp/list.h>
 
 
+/** @defgroup grp_com_list  List Classes
+ * @ingroup grp_com
+ * @{
+ */
+
 /**
  * Specialized list class for using with com::ComPtr<C>
  *
- * @note: This is necessary cause ComPtr<IFACE> has a size of 8.
+ * @note    This is necessary cause ComPtr<IFACE> has a size of 8.
  */
 template <typename C>
 class RTCList< ComPtr<C> >: public RTCListBase< ComPtr<C>, ComPtr<C>*, false>
@@ -53,7 +58,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity   The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCList(size_t cCapacity = BASE::kDefaultCapacity)
@@ -83,7 +88,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity   The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCList(size_t cCapacity = BASE::kDefaultCapacity)
@@ -113,7 +118,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity    The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCList(size_t cCapacity = BASE::kDefaultCapacity)
@@ -199,5 +204,7 @@ public:
     RTMEMEF_NEW_AND_DELETE_OPERATORS();
 };
 
+/** @} */
+
 #endif /* !___VBox_com_list_h */
 
diff --git a/include/VBox/com/listeners.h b/include/VBox/com/listeners.h
index 09d8fce..874e10a 100644
--- a/include/VBox/com/listeners.h
+++ b/include/VBox/com/listeners.h
@@ -1,6 +1,6 @@
 /* $Id: listeners.h $ */
 /** @file
- * MS COM / XPCOM Abstraction Layer - Listeners helpers.
+ * MS COM / XPCOM Abstraction Layer - Listener helpers.
  */
 
 /*
@@ -30,6 +30,13 @@
 #include <VBox/com/com.h>
 #include <VBox/com/VirtualBox.h>
 
+
+/** @defgroup grp_com_listeners     Listener Helpers
+ * @ingroup grp_com
+ * @{
+ */
+
+
 #ifdef VBOX_WITH_XPCOM
 # define NS_IMPL_QUERY_HEAD_INLINE() \
 NS_IMETHODIMP QueryInterface(REFNSIID aIID, void **aInstancePtr) \
@@ -168,5 +175,6 @@ public:
 # define VBOX_LISTENER_DECLARE(klazz)
 #endif
 
+/** @} */
 #endif
 
diff --git a/include/VBox/com/mtlist.h b/include/VBox/com/mtlist.h
index ed6c302..0643e69 100644
--- a/include/VBox/com/mtlist.h
+++ b/include/VBox/com/mtlist.h
@@ -32,6 +32,12 @@
 #include <VBox/com/array.h>
 #include <iprt/cpp/mtlist.h>
 
+
+/** @defgroup grp_com_mtlist    Thread-safe List Classes
+ * @ingroup grp_com
+ * @{
+ */
+
 /**
  * Specialized thread-safe list class for using with com::ComPtr<C>
  *
@@ -52,7 +58,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity   The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCMTList(size_t cCapacity = BASE::kDefaultCapacity)
@@ -82,7 +88,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity   The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCMTList(size_t cCapacity = BASE::kDefaultCapacity)
@@ -112,7 +118,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity    The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCMTList(size_t cCapacity = BASE::kDefaultCapacity)
@@ -195,5 +201,7 @@ public:
     RTMEMEF_NEW_AND_DELETE_OPERATORS();
 };
 
+/** @} */
+
 #endif /* !___VBox_com_mtlist_h */
 
diff --git a/include/VBox/com/ptr.h b/include/VBox/com/ptr.h
index d435051..14a4f33 100644
--- a/include/VBox/com/ptr.h
+++ b/include/VBox/com/ptr.h
@@ -46,6 +46,12 @@
 
 #include <VBox/com/defs.h>
 
+
+/** @defgroup grp_com_ptr   Smart COM Pointer Classes
+ * @ingroup grp_com
+ * @{
+ */
+
 #ifdef VBOX_WITH_XPCOM
 
 namespace com
@@ -498,5 +504,8 @@ public:
         return rc;
     }
 };
+
+/** @} */
+
 #endif
 
diff --git a/include/VBox/com/string.h b/include/VBox/com/string.h
index ba784c7..e70f7ad 100644
--- a/include/VBox/com/string.h
+++ b/include/VBox/com/string.h
@@ -45,6 +45,12 @@
 #include <iprt/mem.h>
 #include <iprt/cpp/ministring.h>
 
+
+/** @defgroup grp_com_str   Smart String Classes
+ * @ingroup grp_com
+ * @{
+ */
+
 namespace com
 {
 
@@ -455,9 +461,9 @@ protected:
      *
      * @param   a_pszSrc            The source string.  The caller guarantees
      *                              that this is valid UTF-8.
-     * @param   a_cchMax            The maximum number of chars (not
-     *                              codepoints) to copy.  If you pass RTSTR_MAX
-     *                              it'll be exactly like copyFrom().
+     * @param   a_cchSrc            The maximum number of chars (not codepoints) to
+     *                              copy.  If you pass RTSTR_MAX it'll be exactly
+     *                              like copyFrom().
      *
      * @throws  std::bad_alloc - the object is representing an empty string.
      */
@@ -581,7 +587,7 @@ public:
      * exception on failure.
      *
      * @returns S_OK, E_OUTOFMEMORY or E_INVALIDARG.
-     * @param   a_pcszSrc   The source string
+     * @param   a_rSrcStr   The source string
      * @param   a_offSrc    The character (byte) offset of the substring.
      * @param   a_cchSrc    The number of characters (bytes) to copy from the source
      *                      string.
@@ -815,5 +821,7 @@ public:
 
 } /* namespace com */
 
+/** @} */
+
 #endif /* !___VBox_com_string_h */
 
diff --git a/include/VBox/dbg.h b/include/VBox/dbg.h
index 51b2602..f39eb24 100644
--- a/include/VBox/dbg.h
+++ b/include/VBox/dbg.h
@@ -42,6 +42,11 @@
 RT_C_DECLS_BEGIN
 
 
+
+/** @defgroup grp_dbg       The VirtualBox Debugger
+ * @{
+ */
+
 #ifdef IN_RING3 /* The debugger stuff is ring-3 only. */
 
 /** @defgroup grp_dbgc     The Debugger Console API
@@ -683,7 +688,13 @@ typedef struct DBGCCMDHLP
 #ifdef IN_RING3
 
 /**
- * @copydoc DBGCCMDHLP::pfnPrintf
+ * Command helper for writing formatted text to the debug console.
+ *
+ * @returns VBox status.
+ * @param   pCmdHlp     Pointer to the command callback structure.
+ * @param   pszFormat   The format string.  This may use all IPRT extensions as
+ *                      well as the debugger ones.
+ * @param   ...         Arguments specified in the format string.
  */
 DECLINLINE(int) RT_IPRT_FORMAT_ATTR(2, 3) DBGCCmdHlpPrintf(PDBGCCMDHLP pCmdHlp, const char *pszFormat, ...)
 {
@@ -715,7 +726,7 @@ DECLINLINE(size_t) RT_IPRT_FORMAT_ATTR(4, 5) DBGCCmdHlpStrPrintf(PDBGCCMDHLP pCm
 }
 
 /**
- * @copydoc FNDBGCHLPVBOXERROR
+ * @copydoc DBGCCMDHLP::pfnVBoxError
  */
 DECLINLINE(int) RT_IPRT_FORMAT_ATTR(3, 4) DBGCCmdHlpVBoxError(PDBGCCMDHLP pCmdHlp, int rc, const char *pszFormat, ...)
 {
@@ -729,7 +740,7 @@ DECLINLINE(int) RT_IPRT_FORMAT_ATTR(3, 4) DBGCCmdHlpVBoxError(PDBGCCMDHLP pCmdHl
 }
 
 /**
- * @copydoc FNDBGCHLPMEMREAD
+ * @copydoc DBGCCMDHLP::pfnMemRead
  */
 DECLINLINE(int) DBGCCmdHlpMemRead(PDBGCCMDHLP pCmdHlp, void *pvBuffer, size_t cbRead, PCDBGCVAR pVarPointer, size_t *pcbRead)
 {
@@ -844,7 +855,7 @@ DECLINLINE(int) DBGCCmdHlpVarToDbgfAddr(PDBGCCMDHLP pCmdHlp, PCDBGCVAR pVar, PDB
 }
 
 /**
- * @copydoc DBGCCMDHLP::pfnVarToDbgfAddr
+ * @copydoc DBGCCMDHLP::pfnVarFromDbgfAddr
  */
 DECLINLINE(int) DBGCCmdHlpVarFromDbgfAddr(PDBGCCMDHLP pCmdHlp, PCDBGFADDRESS pAddress, PDBGCVAR pResult)
 {
@@ -1113,6 +1124,7 @@ DBGDECL(int)    DBGCTcpTerminate(PUVM pUVM, void *pvData);
 
 #endif /* IN_RING3 */
 
+/** @} */
 RT_C_DECLS_END
 
 #endif
diff --git a/include/VBox/dbggui.h b/include/VBox/dbggui.h
index b6142dc..65c242a 100644
--- a/include/VBox/dbggui.h
+++ b/include/VBox/dbggui.h
@@ -32,6 +32,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_dbggui    VirtualBox Debugger GUI
+ * @ingroup grp_dbg
  * @{
  */
 
@@ -89,7 +90,7 @@ typedef DBGGUIVT const *PCDBGGUIVT;
  *                      Optional.
  */
 DBGDECL(int) DBGGuiCreate(ISession *pSession, PDBGGUI *ppGui, PCDBGGUIVT *ppGuiVT);
-/** @copydoc DBGGuiCreate. */
+/** @copydoc DBGGuiCreate */
 typedef DECLCALLBACK(int) FNDBGGUICREATE(ISession *pSession, PDBGGUI *ppGui, PCDBGGUIVT *ppGuiVT);
 /** Pointer to DBGGuiCreate. */
 typedef FNDBGGUICREATE *PFNDBGGUICREATE;
@@ -104,7 +105,7 @@ typedef FNDBGGUICREATE *PFNDBGGUICREATE;
  *                      Optional.
  */
 DBGDECL(int) DBGGuiCreateForVM(PUVM pUVM, PDBGGUI *ppGui, PCDBGGUIVT *ppGuiVT);
-/** @copydoc DBGGuiCreateForVM. */
+/** @copydoc DBGGuiCreateForVM */
 typedef DECLCALLBACK(int) FNDBGGUICREATEFORVM(PUVM pUVM, PDBGGUI *ppGui, PCDBGGUIVT *ppGuiVT);
 /** Pointer to DBGGuiCreateForVM. */
 typedef FNDBGGUICREATEFORVM *PFNDBGGUICREATEFORVM;
diff --git a/include/VBox/dis.h b/include/VBox/dis.h
index d56c3e5..dbaad76 100644
--- a/include/VBox/dis.h
+++ b/include/VBox/dis.h
@@ -33,6 +33,8 @@
 
 RT_C_DECLS_BEGIN
 
+/** @defgroup grp_dis   VBox Disassembler
+ * @{ */
 
 /** @name Prefix byte flags (DISSTATE::fPrefix).
  * @{
@@ -838,6 +840,7 @@ DISDECL(size_t) DISFormatGasEx( PCDISSTATE pDis, char *pszBuf, size_t cchBuf, ui
 
 DISDECL(bool)   DISFormatYasmIsOddEncoding(PDISSTATE pDis);
 
+/** @} */
 
 RT_C_DECLS_END
 
diff --git a/include/VBox/err.h b/include/VBox/err.h
index 3ac91fb..1193560 100644
--- a/include/VBox/err.h
+++ b/include/VBox/err.h
@@ -30,7 +30,7 @@
 #include <iprt/err.h>
 
 
-/** @defgroup grp_err       Error Codes
+/** @defgroup grp_err       VBox Error Codes
  * @{
  */
 
@@ -246,6 +246,8 @@
 #define VERR_EM_CANNOT_EXEC_GUEST           (-1156)
 /** Reason for leaving RC: Inject a TRPM event. */
 #define VINF_EM_RAW_INJECT_TRPM_EVENT       1157
+/** Guest tried to trigger a CPU hang.  The guest is probably up to no good. */
+#define VERR_EM_GUEST_CPU_HANG              (-1158)
 /** @} */
 
 
@@ -491,7 +493,7 @@
 #define VINF_PGM_PHYS_TLB_CATCH_WRITE           1635
 /** Catch write access and route it thru PGM. */
 #define VERR_PGM_PHYS_TLB_CATCH_WRITE           (-1635)
-/** No CR3 root shadow page table.. */
+/** No CR3 root shadow page table. */
 #define VERR_PGM_NO_CR3_SHADOW_ROOT             (-1636)
 /** Trying to free a page with an invalid Page ID. */
 #define VERR_PGM_PHYS_INVALID_PAGE_ID           (-1637)
@@ -1143,8 +1145,8 @@
 #define VERR_VMM_RING3_CALL_DISABLED        (-2703)
 /** The VMMR0.r0 module version does not match VBoxVMM.dll/so/dylib.
  * If you just upgraded VirtualBox, please terminate all VMs and make sure
- * VBoxNetDHCP is not running.  Then try again.  If this error persists, try
- * re-installing VirtualBox. */
+ * that neither VBoxNetDHCP nor VBoxNetNAT is running.  Then try again.
+ * If this error persists, try re-installing VirtualBox. */
 #define VERR_VMM_R0_VERSION_MISMATCH        (-2704)
 /** The VMMRC.rc module version does not match VBoxVMM.dll/so/dylib.
  * Re-install if you are a user.  Developers should make sure the build is
@@ -2358,7 +2360,7 @@
 #define VINF_DBGC_BP_NO_COMMAND                     5406
 /** Generic debugger command failure. */
 #define VERR_DBGC_COMMAND_FAILED                    (-5407)
-/** Logic bug in the DBGC code.. */
+/** Logic bug in the DBGC code. */
 #define VERR_DBGC_IPE                               (-5408)
 
 /** The lowest parse status code.   */
diff --git a/include/VBox/hgcmsvc.h b/include/VBox/hgcmsvc.h
index df3e6d0..b823292 100644
--- a/include/VBox/hgcmsvc.h
+++ b/include/VBox/hgcmsvc.h
@@ -72,7 +72,7 @@ struct VBOXHGCMCALLHANDLE_TYPEDEF;
 typedef struct VBOXHGCMCALLHANDLE_TYPEDEF *VBOXHGCMCALLHANDLE;
 
 /** Service helpers pointers table. */
-typedef struct _VBOXHGCMSVCHELPERS
+typedef struct VBOXHGCMSVCHELPERS
 {
     /** The service has processed the Call request. */
     DECLR3CALLBACKMEMBER(void, pfnCallComplete, (VBOXHGCMCALLHANDLE callHandle, int32_t rc));
@@ -354,10 +354,11 @@ typedef FNHGCMSVCEXT *PFNHGCMSVCEXT;
  */
 
 /* The structure is used in separately compiled binaries so an explicit packing is required. */
-#pragma pack(1)
-typedef struct _VBOXHGCMSVCFNTABLE
+#pragma pack(1) /** @todo r=bird: The pragma pack(1) is not at all required!! */
+typedef struct VBOXHGCMSVCFNTABLE
 {
-    /** Filled by HGCM */
+    /** @name Filled by HGCM
+     * @{ */
 
     /** Size of the structure. */
     uint32_t                 cbSize;
@@ -366,8 +367,10 @@ typedef struct _VBOXHGCMSVCFNTABLE
     uint32_t                 u32Version;
 
     PVBOXHGCMSVCHELPERS      pHelpers;
+    /** @} */
 
-    /** Filled by the service. */
+    /** @name Filled in by the service.
+     * @{ */
 
     /** Size of client information the service want to have. */
     uint32_t                 cbClient;
@@ -407,6 +410,7 @@ typedef struct _VBOXHGCMSVCFNTABLE
     /** User/instance data pointer for the service. */
     void *pvService;
 
+    /** @} */
 } VBOXHGCMSVCFNTABLE;
 #pragma pack()
 
diff --git a/include/VBox/intnetinline.h b/include/VBox/intnetinline.h
index 3faab22..242fbfa 100644
--- a/include/VBox/intnetinline.h
+++ b/include/VBox/intnetinline.h
@@ -397,6 +397,7 @@ DECLINLINE(void) IntNetRingSkipFrame(PINTNETRINGBUF pRingBuf)
  * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW.
  * @param   pRingBuf            The ring buffer.
  * @param   cbFrame             The frame size.
+ * @param   u8Type              The header type.
  * @param   ppHdr               Where to return the frame header.
  *                              Don't touch this!
  * @param   ppvFrame            Where to return the frame pointer.
@@ -737,7 +738,7 @@ DECLINLINE(int) IntNetRingWriteFrame(PINTNETRINGBUF pRingBuf, const void *pvFram
  * Reads the next frame in the buffer and moves the read cursor past it.
  *
  * @returns Size of the frame in bytes.  0 is returned if nothing in the buffer.
- * @param   pRingBuff   The ring buffer to read from.
+ * @param   pRingBuf    The ring buffer to read from.
  * @param   pvFrameDst  Where to put the frame.  The caller is responsible for
  *                      ensuring that there is sufficient space for the frame.
  *
diff --git a/include/VBox/log.h b/include/VBox/log.h
index 97ccc57..4c5b9c1 100644
--- a/include/VBox/log.h
+++ b/include/VBox/log.h
@@ -36,7 +36,7 @@
 #include <iprt/log.h>
 
 
-/** @defgroup grp_rt_vbox_log    VirtualBox Logging
+/** @defgroup grp_rt_vbox_log    VBox Logging
  * @ingroup grp_rt_vbox
  * @{
  */
@@ -740,7 +740,7 @@ typedef enum LOGGROUP
     /** USB webcam. */
     LOG_GROUP_USB_WEBCAM,
     /** VBox Guest Additions Driver (VBoxGuest). */
-    LOG_GROUP_VBGD,
+    LOG_GROUP_VGDRV,
     /** VBox Guest Additions Library. */
     LOG_GROUP_VBGL,
     /** Generic virtual disk layer. */
@@ -1138,7 +1138,7 @@ typedef enum LOGGROUP
     "USB_MSD",      \
     "USB_REMOTE",   \
     "USB_WEBCAM",   \
-    "VBGD",         \
+    "VGDRV",        \
     "VBGL",         \
     "VD",           \
     "VD_DMG",       \
diff --git a/include/VBox/pci.h b/include/VBox/pci.h
index c3c3aa2..c7fd5d8 100644
--- a/include/VBox/pci.h
+++ b/include/VBox/pci.h
@@ -31,6 +31,7 @@
 #include <iprt/assert.h>
 
 /** @defgroup grp_pci       PCI - The PCI Controller.
+ * @ingroup grp_devdrv
  * @{
  */
 
@@ -792,12 +793,14 @@ DECLINLINE(uint8_t) PCIDevGetBIST(PPCIDEVICE pPciDev)
  * Sets a base address config register.
  *
  * @param   pPciDev         The PCI device.
+ * @param   iReg            Base address register number (0..5).
  * @param   fIOSpace        Whether it's I/O (true) or memory (false) space.
  * @param   fPrefetchable   Whether the memory is prefetachable. Must be false if fIOSpace == true.
  * @param   f64Bit          Whether the memory can be mapped anywhere in the 64-bit address space. Otherwise restrict to 32-bit.
  * @param   u32Addr         The address value.
  */
-DECLINLINE(void) PCIDevSetBaseAddress(PPCIDEVICE pPciDev, uint8_t iReg, bool fIOSpace, bool fPrefetchable, bool f64Bit, uint32_t u32Addr)
+DECLINLINE(void) PCIDevSetBaseAddress(PPCIDEVICE pPciDev, uint8_t iReg, bool fIOSpace, bool fPrefetchable, bool f64Bit,
+                                      uint32_t u32Addr)
 {
     if (fIOSpace)
     {
diff --git a/include/VBox/rawpci.h b/include/VBox/rawpci.h
index dec8f37..0a37e48 100644
--- a/include/VBox/rawpci.h
+++ b/include/VBox/rawpci.h
@@ -77,13 +77,15 @@ struct RAWPCIPERVM;
  *
  * @returns VBox status code.
  *
- * @param   pVM           VM pointer.
- * @param   HostStart     Physical address of region start on the host.
- * @param   GuestStart    Physical address of region start on the guest.
- * @param   cMemSize      Region size in bytes.
- * @param   Action        Action performed (i.e. if page was mapped or unmapped).
+ * @param   pVM             The cross context VM structure.
+ * @param   HCPhysStart     Physical address of region start on the host.
+ * @param   GCPhysStart     Physical address of region start on the guest.
+ * @param   cbMem           Region size in bytes.
+ * @param   enmAction       Action performed (i.e. if page was mapped
+ *                          or unmapped).
  */
-typedef DECLCALLBACK(int) FNRAWPCICONTIGPHYSMEMINFO(struct RAWPCIPERVM* pVmData, RTHCPHYS HostStart, RTGCPHYS GuestStart, uint64_t cMemSize, PCIRAWMEMINFOACTION Action);
+typedef DECLCALLBACK(int) FNRAWPCICONTIGPHYSMEMINFO(struct RAWPCIPERVM *pVmData, RTHCPHYS HCPhysStart,
+                                                    RTGCPHYS GCPhysStart, uint64_t cbMem, PCIRAWMEMINFOACTION enmAction);
 typedef FNRAWPCICONTIGPHYSMEMINFO *PFNRAWPCICONTIGPHYSMEMINFO;
 
 /** Data being part of the VM structure. */
@@ -525,9 +527,9 @@ typedef struct RAWPCIFACTORY
      *
      * @returns VBox status code.
      *
-     * @param   pIfFactory          Pointer to this structure.
-     * @param   pVM                 Pointer to VM structure to initialize.
-     * @param   pPciData            Pointer to PCI data.
+     * @param   pIfFactory  Pointer to this structure.
+     * @param   pVM         The cross context VM structure.
+     * @param   pPciData    Pointer to PCI data.
      */
     DECLR0CALLBACKMEMBER(int, pfnInitVm,(PRAWPCIFACTORY       pFactory,
                                          PVM                  pVM,
@@ -538,9 +540,9 @@ typedef struct RAWPCIFACTORY
      *
      * @returns VBox status code.
      *
-     * @param   pIfFactory          Pointer to this structure.
-     * @param   pVM                 Pointer to VM structure to deinitialize.
-     * @param   pPciData            Pointer to PCI data.
+     * @param   pIfFactory  Pointer to this structure.
+     * @param   pVM         The cross context VM structure.
+     * @param   pPciData    Pointer to PCI data.
      */
     DECLR0CALLBACKMEMBER(void, pfnDeinitVm,(PRAWPCIFACTORY       pFactory,
                                             PVM                  pVM,
diff --git a/include/VBox/sup.h b/include/VBox/sup.h
index a93f495..eb6fa87 100644
--- a/include/VBox/sup.h
+++ b/include/VBox/sup.h
@@ -1149,7 +1149,7 @@ SUPR3DECL(int) SUPR3CallVMMR0Ex(PVMR0 pVMR0, VMCPUID idCpu, unsigned uOperation,
  * @returns error code specific to uFunction.
  * @param   pszService  The service name.
  * @param   cchService  The length of the service name.
- * @param   uReq        The request number.
+ * @param   uOperation  The request number.
  * @param   u64Arg      Constant argument.
  * @param   pReqHdr     Pointer to a request header. Optional.
  *                      This will be copied in and out of kernel space. There currently is a size
@@ -1372,7 +1372,7 @@ SUPR3DECL(int) SUPR3LoadServiceModule(const char *pszFilename, const char *pszMo
  * Frees a R0 HC module.
  *
  * @returns VBox status code.
- * @param   pszModule       The module to free.
+ * @param   pvImageBase     The base address of the image to free.
  * @remark  This will not actually 'free' the module, there are of course usage counting.
  */
 SUPR3DECL(int) SUPR3FreeModule(void *pvImageBase);
@@ -1393,7 +1393,7 @@ SUPR3DECL(int) SUPR3LockDownLoader(PRTERRINFO pErrInfo);
  * Get the address of a symbol in a ring-0 module.
  *
  * @returns VBox status code.
- * @param   pszModule       The module name.
+ * @param   pvImageBase     The base address of the image to search.
  * @param   pszSymbol       Symbol name. If it's value is less than 64k it's treated like a
  *                          ordinal value rather than a string pointer.
  * @param   ppvValue        Where to store the symbol value.
@@ -1982,7 +1982,7 @@ typedef struct SUPDRVVDTPROVIDERCORE
     uint8_t                     cbProbeLocsEn;
     /** The actual module bit count (corresponds to cbProbeLocsEn). */
     uint8_t                     cBits;
-    /** Set if this is a Umod, otherwise clear.. */
+    /** Set if this is a Umod, otherwise clear. */
     bool                        fUmod;
     /** Explicit alignment padding (paranoia). */
     uint8_t                     abAlignment[ARCH_BITS == 32 ? 1 : 5];
diff --git a/include/VBox/types.h b/include/VBox/types.h
index 9778b44..dd93665 100644
--- a/include/VBox/types.h
+++ b/include/VBox/types.h
@@ -30,7 +30,7 @@
 #include <iprt/types.h>
 
 
-/** @defgroup grp_types     Basic VBox Types
+/** @defgroup grp_types     VBox Basic Types
  * @{
  */
 
diff --git a/include/VBox/usb.h b/include/VBox/usb.h
index 4a34cb1..3a2fca2 100644
--- a/include/VBox/usb.h
+++ b/include/VBox/usb.h
@@ -30,6 +30,11 @@
 
 RT_C_DECLS_BEGIN
 
+/** @defgroup grp_usblib_usb    USB Device Structures & Types
+ * @ingroup grp_usblib
+ * @{
+ */
+
 /**
  * The USB host device state.
  */
@@ -251,6 +256,7 @@ typedef USBCONFIGDESC *PUSBCONFIGDESC;
 
 #endif /* VBOX_USB_H_INCL_DESCRIPTORS */
 
+/** @} */
 RT_C_DECLS_END
 
 #endif
diff --git a/include/VBox/usbfilter.h b/include/VBox/usbfilter.h
index cc0181e..a86d1de 100644
--- a/include/VBox/usbfilter.h
+++ b/include/VBox/usbfilter.h
@@ -33,8 +33,8 @@
 #include <VBox/usb.h>
 
 
-/** @defgroup grp_USBFilter     USBFilter - USB Filter constructs shared by kernel and user mode
- * @ingroup grp_USBLib
+/** @defgroup grp_usbfilter  USBFilter - USB Filter constructs shared by kernel and user mode
+ * @ingroup grp_usblib
  * @{
  */
 
diff --git a/include/VBox/usblib-darwin.h b/include/VBox/usblib-darwin.h
index b841f70..fec5cdb 100644
--- a/include/VBox/usblib-darwin.h
+++ b/include/VBox/usblib-darwin.h
@@ -31,9 +31,11 @@
 #include <VBox/usbfilter.h>
 
 RT_C_DECLS_BEGIN
-/** @defgroup grp_USBLib_darwin Darwin Specifics
- * @addtogroup grp_USBLib
- * @{ */
+
+/** @defgroup grp_usblib_darwin     Darwin USB Specifics
+ * @ingroup grp_usblib
+ * @{
+ */
 
 /** @name VBoxUSB specific device properties.
  * VBoxUSB makes use of the OWNER property for communicating between the probe and
@@ -50,6 +52,8 @@ RT_C_DECLS_BEGIN
 /** @} */
 
 /** @} */
+
 RT_C_DECLS_END
 
 #endif
+
diff --git a/include/VBox/usblib-solaris.h b/include/VBox/usblib-solaris.h
index 32ca6ff..bd47420 100644
--- a/include/VBox/usblib-solaris.h
+++ b/include/VBox/usblib-solaris.h
@@ -35,9 +35,11 @@
 #include <sys/param.h>
 
 RT_C_DECLS_BEGIN
-/** @defgroup grp_USBLib_solaris Solaris Specifics
- * @addtogroup grp_USBLib
- * @{ */
+
+/** @defgroup grp_usblib_solaris    Solaris USB Specifics
+ * @ingroup grp_usblib
+ * @{
+ */
 
 /** @name VBoxUSB specific IOCtls.
  * VBoxUSB uses them for resetting USB devices requests from userland.
diff --git a/include/VBox/usblib-win.h b/include/VBox/usblib-win.h
index 3c7eb30..3719398 100644
--- a/include/VBox/usblib-win.h
+++ b/include/VBox/usblib-win.h
@@ -31,9 +31,14 @@
 #include <VBox/types.h>
 #include <VBox/usb.h>
 
-#ifdef RT_OS_WINDOWS
-
 #include <initguid.h>
+
+
+/** @defgroup grp_usblib_win    Windows USB Specifics
+ * @ingroup grp_usblib
+ * @{
+ */
+
 // {6068EB61-98E7-4c98-9E20-1F068295909A}
 DEFINE_GUID(GUID_CLASS_VBOXUSB, 0x873fdf, 0xCAFE, 0x80EE, 0xaa, 0x5e, 0x0, 0xc0, 0x4f, 0xb1, 0x72, 0xb);
 
@@ -133,7 +138,6 @@ typedef struct
     uint32_t        u32Minor;
 } USBSUP_VERSION, *PUSBSUP_VERSION;
 
-#endif /* RT_OS_WINDOWS */
 
 typedef struct USBSUP_FLTADDOUT
 {
@@ -308,6 +312,5 @@ USBLIB_DECL(int) USBLibRunFilters();
 
 RT_C_DECLS_END
 
-
 #endif
 
diff --git a/include/VBox/usblib.h b/include/VBox/usblib.h
index 2a079ea..8db14b9 100644
--- a/include/VBox/usblib.h
+++ b/include/VBox/usblib.h
@@ -43,7 +43,7 @@
 /** @todo merge the usblib-win.h interface into the darwin and linux ports where suitable. */
 
 RT_C_DECLS_BEGIN
-/** @defgroup grp_USBLib    USBLib - USB Support Library
+/** @defgroup grp_usblib    USBLib - USB Support Library
  * This module implements the basic low-level OS interfaces and common USB code.
  * @{
  */
diff --git a/include/VBox/vd-ifs-internal.h b/include/VBox/vd-ifs-internal.h
index 6e772eb..d9ccb3d 100644
--- a/include/VBox/vd-ifs-internal.h
+++ b/include/VBox/vd-ifs-internal.h
@@ -128,7 +128,7 @@ typedef struct VDINTERFACEIOINT
      * @param   pvUser          The opaque data passed on container creation.
      * @param   pszLocation     Name of the location to open.
      * @param   fOpen           Flags for opening the backend.
-     *                          See RTFILE_O_* #defines, inventing another set
+     *                          See RTFILE_O_* \#defines, inventing another set
      *                          of open flags is not worth the mapping effort.
      * @param   ppStorage       Where to store the storage handle.
      */
@@ -255,12 +255,12 @@ typedef struct VDINTERFACEIOINT
      * @param   pfnCompleted   Completion callback.
      * @param   pvCompleteUser Opaque user data passed in the completion callback.
      *
-     * @notes If pIoCtx is NULL the metadata read is handled synchronously
-     *        i.e. the call returns only if the data is available in the given
-     *        buffer. ppMetaXfer, pfnCompleted and pvCompleteUser are ignored in that case.
-     *        Use the synchronous version only when opening/closing the image
-     *        or when doing certain operations like resizing, compacting or repairing
-     *        the disk.
+     * @note    If pIoCtx is NULL the metadata read is handled synchronously
+     *          i.e. the call returns only if the data is available in the given
+     *          buffer. ppMetaXfer, pfnCompleted and pvCompleteUser are ignored in that case.
+     *          Use the synchronous version only when opening/closing the image
+     *          or when doing certain operations like resizing, compacting or repairing
+     *          the disk.
      */
     DECLR3CALLBACKMEMBER(int, pfnReadMeta, (void *pvUser, PVDIOSTORAGE pStorage,
                                             uint64_t uOffset, void *pvBuffer,
@@ -282,7 +282,7 @@ typedef struct VDINTERFACEIOINT
      * @param   pfnCompleted   Completion callback.
      * @param   pvCompleteUser Opaque user data passed in the completion callback.
      *
-     * @notes See pfnReadMeta().
+     * @sa      VDINTERFACEIOINT::pfnReadMeta
      */
     DECLR3CALLBACKMEMBER(int, pfnWriteMeta, (void *pvUser, PVDIOSTORAGE pStorage,
                                              uint64_t uOffset, const void *pvBuffer,
@@ -310,7 +310,7 @@ typedef struct VDINTERFACEIOINT
      * @param   pfnCompleted   Completion callback.
      * @param   pvCompleteUser Opaque user data passed in the completion callback.
      *
-     * @notes See pfnReadMeta().
+     * @sa      VDINTERFACEIOINT::pfnReadMeta
      */
     DECLR3CALLBACKMEMBER(int, pfnFlush, (void *pvUser, PVDIOSTORAGE pStorage,
                                          PVDIOCTX pIoCtx,
diff --git a/include/VBox/vd-ifs.h b/include/VBox/vd-ifs.h
index 8873678..7bb5236 100644
--- a/include/VBox/vd-ifs.h
+++ b/include/VBox/vd-ifs.h
@@ -142,10 +142,10 @@ DECLINLINE(PVDINTERFACE) VDInterfaceGet(PVDINTERFACE pVDIfs, VDINTERFACETYPE enm
  * @param  pszName      Name of the interface.
  * @param  enmInterface Type of the interface.
  * @param  pvUser       Opaque user data passed on every function call.
+ * @param  cbInterface  The interface size.
  * @param  ppVDIfs      Pointer to the VD interface list.
  */
-DECLINLINE(int) VDInterfaceAdd(PVDINTERFACE pInterface, const char *pszName,
-                               VDINTERFACETYPE enmInterface, void *pvUser,
+DECLINLINE(int) VDInterfaceAdd(PVDINTERFACE pInterface, const char *pszName, VDINTERFACETYPE enmInterface, void *pvUser,
                                size_t cbInterface, PVDINTERFACE *ppVDIfs)
 {
     /* Argument checks. */
@@ -239,7 +239,7 @@ typedef struct VDINTERFACEERROR
      *
      * @param   pvUser          The opaque data passed on container creation.
      * @param   rc              The VBox error code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   va              Error message arguments.
      */
@@ -284,7 +284,7 @@ DECLINLINE(PVDINTERFACEERROR) VDIfErrorGet(PVDINTERFACE pVDIfs)
  * @returns VBox status code.
  * @param   pIfError           The error interface.
  * @param   rc                 The status code.
- * @param   RT_SRC_POS_DECL    The position in the source code.
+ * @param   SRC_POS            The position in the source code.
  * @param   pszFormat          The format string to pass.
  * @param   ...                Arguments to the format string.
  */
@@ -349,7 +349,7 @@ typedef struct VDINTERFACEIO
      * @param   pvUser          The opaque data passed on container creation.
      * @param   pszLocation     Name of the location to open.
      * @param   fOpen           Flags for opening the backend.
-     *                          See RTFILE_O_* #defines, inventing another set
+     *                          See RTFILE_O_* \#defines, inventing another set
      *                          of open flags is not worth the mapping effort.
      * @param   pfnCompleted    The callback which is called whenever a task
      *                          completed. The backend has to pass the user data
@@ -1090,7 +1090,7 @@ typedef struct VDINTERFACETCPNET
      *
      * @return  iprt status code.
      * @retval  VERR_NOT_SUPPORTED if the combination of flags is not supported.
-     * @param   fFlags    Combination of the VD_INTERFACETCPNET_CONNECT_* #defines.
+     * @param   fFlags    Combination of the VD_INTERFACETCPNET_CONNECT_* \#defines.
      * @param   pSock     Where to store the handle.
      */
     DECLR3CALLBACKMEMBER(int, pfnSocketCreate, (uint32_t fFlags, PVDSOCKET pSock));
@@ -1297,9 +1297,9 @@ DECLINLINE(PVDINTERFACETCPNET) VDIfTcpNetGet(PVDINTERFACE pVDIfs)
  * the HDD container has been created, and they must stop before destroying the
  * container. Opening or closing images is covered by the synchronization, but
  * that does not mean it is safe to close images while a thread executes
- * <link to="VDMerge"/> or <link to="VDCopy"/> operating on these images.
- * Making them safe would require the lock to be held during the entire
- * operation, which prevents other concurrent acitivities.
+ * #VDMerge or #VDCopy operating on these images. Making them safe would require
+ * the lock to be held during the entire operation, which prevents other
+ * concurrent acitivities.
  *
  * @note Right now this is kept as simple as possible, and does not even
  * attempt to provide enough information to allow e.g. concurrent write
@@ -1439,9 +1439,10 @@ typedef struct VDINTERFACECRYPTO
      * @param   pvUser          The opaque user data associated with this interface.
      * @param   pszId           The alias/id for the key to release.
      *
-     * @note: It is advised to release the key whenever it is not used anymore so the entity
-     *        storing the key can do anything to make retrieving the key from memory more
-     *        difficult like scrambling the memory buffer for instance.
+     * @note  It is advised to release the key whenever it is not used anymore so
+     *        the entity storing the key can do anything to make retrieving the key
+     *        from memory more difficult like scrambling the memory buffer for
+     *        instance.
      */
     DECLR3CALLBACKMEMBER(int, pfnKeyRelease, (void *pvUser, const char *pszId));
 
@@ -1520,7 +1521,14 @@ DECLINLINE(PVDINTERFACECRYPTO) VDIfCryptoGet(PVDINTERFACE pVDIfs)
 }
 
 /**
- * @copydoc VDINTERFACECRYPTO::pfnKeyRetain
+ * Retains a key identified by the ID. The caller will only hold a reference
+ * to the key and must not modify the key buffer in any way.
+ *
+ * @returns VBox status code.
+ * @param   pIfCrypto       Pointer to the crypto interface.
+ * @param   pszId           The alias/id for the key to retrieve.
+ * @param   ppbKey          Where to store the pointer to the key buffer on success.
+ * @param   pcbKey          Where to store the size of the key in bytes on success.
  */
 DECLINLINE(int) vdIfCryptoKeyRetain(PVDINTERFACECRYPTO pIfCrypto, const char *pszId, const uint8_t **ppbKey, size_t *pcbKey)
 {
@@ -1528,7 +1536,17 @@ DECLINLINE(int) vdIfCryptoKeyRetain(PVDINTERFACECRYPTO pIfCrypto, const char *ps
 }
 
 /**
- * @copydoc VDINTERFACECRYPTO::pfnKeyRelease
+ * Releases one reference of the key identified by the given identifier.
+ * The caller must not access the key buffer after calling this operation.
+ *
+ * @returns VBox status code.
+ * @param   pIfCrypto       Pointer to the crypto interface.
+ * @param   pszId           The alias/id for the key to release.
+ *
+ * @note  It is advised to release the key whenever it is not used anymore so
+ *        the entity storing the key can do anything to make retrieving the key
+ *        from memory more difficult like scrambling the memory buffer for
+ *        instance.
  */
 DECLINLINE(int) vdIfCryptoKeyRelease(PVDINTERFACECRYPTO pIfCrypto, const char *pszId)
 {
@@ -1536,7 +1554,12 @@ DECLINLINE(int) vdIfCryptoKeyRelease(PVDINTERFACECRYPTO pIfCrypto, const char *p
 }
 
 /**
- * @copydoc VDINTERFACECRYPTO::pfnKeyStorePasswordRetain
+ * Gets a reference to the password identified by the given ID to open a key store supplied through the config interface.
+ *
+ * @returns VBox status code.
+ * @param   pIfCrypto       Pointer to the crypto interface.
+ * @param   pszId           The alias/id for the password to retain.
+ * @param   ppszPassword    Where to store the password to unlock the key store on success.
  */
 DECLINLINE(int) vdIfCryptoKeyStorePasswordRetain(PVDINTERFACECRYPTO pIfCrypto, const char *pszId, const char **ppszPassword)
 {
@@ -1544,7 +1567,12 @@ DECLINLINE(int) vdIfCryptoKeyStorePasswordRetain(PVDINTERFACECRYPTO pIfCrypto, c
 }
 
 /**
- * @copydoc VDINTERFACECRYPTO::pfnKeyStorePasswordRelease
+ * Releases a reference of the password previously acquired with VDINTERFACECRYPTO::pfnKeyStorePasswordRetain()
+ * identified by the given ID.
+ *
+ * @returns VBox status code.
+ * @param   pIfCrypto       Pointer to the crypto interface.
+ * @param   pszId           The alias/id for the password to release.
  */
 DECLINLINE(int) vdIfCryptoKeyStorePasswordRelease(PVDINTERFACECRYPTO pIfCrypto, const char *pszId)
 {
@@ -1552,7 +1580,14 @@ DECLINLINE(int) vdIfCryptoKeyStorePasswordRelease(PVDINTERFACECRYPTO pIfCrypto,
 }
 
 /**
- * @copydoc VDINTERFACECRYPTO::pfnKeyStoreSave
+ * Saves a key store.
+ *
+ * @returns VBox status code.
+ * @param   pIfCrypto       Pointer to the crypto interface.
+ * @param   pvKeyStore      The key store to save.
+ * @param   cbKeyStore      Size of the key store in bytes.
+ *
+ * @note The format is filter specific and should be treated as binary data.
  */
 DECLINLINE(int) vdIfCryptoKeyStoreSave(PVDINTERFACECRYPTO pIfCrypto, const void *pvKeyStore, size_t cbKeyStore)
 {
@@ -1560,7 +1595,21 @@ DECLINLINE(int) vdIfCryptoKeyStoreSave(PVDINTERFACECRYPTO pIfCrypto, const void
 }
 
 /**
- * @copydoc VDINTERFACECRYPTO::pfnKeyStoreReturnParameters
+ * Returns the parameters after the key store was loaded successfully.
+ *
+ * @returns VBox status code.
+ * @param   pIfCrypto       Pointer to the crypto interface.
+ * @param   pszCipher       The cipher identifier the DEK is used for.
+ * @param   pbDek           The raw DEK which was contained in the key store loaded by
+ *                          VDINTERFACECRYPTO::pfnKeyStoreLoad().
+ * @param   cbDek           The size of the DEK.
+ *
+ * @note The provided pointer to the DEK is only valid until this call returns.
+ *       The content might change afterwards with out notice (when scrambling the key
+ *       for further protection for example) or might be even freed.
+ *
+ * @note This method is optional and can be NULL if the caller does not require the
+ *       parameters.
  */
 DECLINLINE(int) vdIfCryptoKeyStoreReturnParameters(PVDINTERFACECRYPTO pIfCrypto, const char *pszCipher,
                                                    const uint8_t *pbDek, size_t cbDek)
diff --git a/include/VBox/vd-image-backend.h b/include/VBox/vd-image-backend.h
index 560cc01..12298f6 100644
--- a/include/VBox/vd-image-backend.h
+++ b/include/VBox/vd-image-backend.h
@@ -460,27 +460,27 @@ typedef struct VBOXHDDBACKEND
      *
      * @returns VBox status code.
      * @param   pBackendData    Opaque state data for this image.
-     * @param   pTimeStamp      Where to store the time stamp.
+     * @param   pTimestamp      Where to store the time stamp.
      */
-    DECLR3CALLBACKMEMBER(int, pfnGetTimeStamp, (void *pBackendData, PRTTIMESPEC pTimeStamp));
+    DECLR3CALLBACKMEMBER(int, pfnGetTimestamp, (void *pBackendData, PRTTIMESPEC pTimestamp));
 
     /**
      * Get the parent time stamp of a disk image. May be NULL.
      *
      * @returns VBox status code.
      * @param   pBackendData    Opaque state data for this image.
-     * @param   pTimeStamp      Where to store the time stamp.
+     * @param   pTimestamp      Where to store the time stamp.
      */
-    DECLR3CALLBACKMEMBER(int, pfnGetParentTimeStamp, (void *pBackendData, PRTTIMESPEC pTimeStamp));
+    DECLR3CALLBACKMEMBER(int, pfnGetParentTimestamp, (void *pBackendData, PRTTIMESPEC pTimestamp));
 
     /**
      * Set the parent time stamp of a disk image. May be NULL.
      *
      * @returns VBox status code.
      * @param   pBackendData    Opaque state data for this image.
-     * @param   pTimeStamp      Where to get the time stamp from.
+     * @param   pTimestamp      Where to get the time stamp from.
      */
-    DECLR3CALLBACKMEMBER(int, pfnSetParentTimeStamp, (void *pBackendData, PCRTTIMESPEC pTimeStamp));
+    DECLR3CALLBACKMEMBER(int, pfnSetParentTimestamp, (void *pBackendData, PCRTTIMESPEC pTimestamp));
 
     /**
      * Get the relative path to parent image. May be NULL.
diff --git a/include/VBox/vd.h b/include/VBox/vd.h
index 9f468d8..7cb4268 100644
--- a/include/VBox/vd.h
+++ b/include/VBox/vd.h
@@ -189,7 +189,7 @@ typedef struct VBOXHDDRAW
      * partition information below). */
     uint32_t        uFlags;
     /** Filename for the raw disk. Ignored for partitioned raw disks.
-     * For Linux e.g. /dev/sda, and for Windows e.g. \\\\.\\PhysicalDisk0. */
+     * For Linux e.g. /dev/sda, and for Windows e.g. //./PhysicalDisk0. */
     const char      *pszRawDisk;
     /** Number of entries in the partition descriptor array. */
     unsigned        cPartDescs;
@@ -563,7 +563,7 @@ VBOXDDU_DECL(int) VDBackendInfo(unsigned cEntriesAlloc, PVDBACKENDINFO pEntries,
  *
  * @return  VBox status code.
  * @param   pszBackend      The backend name (case insensitive).
- * @param   pEntries        Pointer to an entry.
+ * @param   pEntry          Pointer to an entry.
  */
 VBOXDDU_DECL(int) VDBackendInfoOne(const char *pszBackend, PVDBACKENDINFO pEntry);
 
@@ -584,7 +584,7 @@ VBOXDDU_DECL(int) VDFilterInfo(unsigned cEntriesAlloc, PVDFILTERINFO pEntries,
  *
  * @return  VBox status code.
  * @param   pszFilter       The filter name (case insensitive).
- * @param   pEntries        Pointer to an entry.
+ * @param   pEntry          Pointer to an entry.
  */
 VBOXDDU_DECL(int) VDFilterInfoOne(const char *pszFilter, PVDFILTERINFO pEntry);
 
@@ -730,6 +730,7 @@ VBOXDDU_DECL(int) VDCreateDiff(PVBOXHDD pDisk, const char *pszBackend,
  *
  * @return  VBox status code.
  * @param   pDisk           Name of the cache file backend to use (case insensitive).
+ * @param   pszBackend      Name of the image file backend to use (case insensitive).
  * @param   pszFilename     Name of the differencing cache file to create.
  * @param   cbSize          Maximum size of the cache.
  * @param   uImageFlags     Flags specifying special cache features.
@@ -763,13 +764,14 @@ VBOXDDU_DECL(int) VDMerge(PVBOXHDD pDisk, unsigned nImageFrom,
 
 /**
  * Copies an image from one HDD container to another - extended version.
- * The copy is opened in the target HDD container.
- * It is possible to convert between different image formats, because the
- * backend for the destination may be different from the source.
- * If both the source and destination reference the same HDD container,
- * then the image is moved (by copying/deleting or renaming) to the new location.
- * The source container is unchanged if the move operation fails, otherwise
- * the image at the new location is opened in the same way as the old one was.
+ *
+ * The copy is opened in the target HDD container.  It is possible to convert
+ * between different image formats, because the backend for the destination may
+ * be different from the source.  If both the source and destination reference
+ * the same HDD container, then the image is moved (by copying/deleting or
+ * renaming) to the new location.  The source container is unchanged if the move
+ * operation fails, otherwise the image at the new location is opened in the
+ * same way as the old one was.
  *
  * @note The read/write accesses across disks are not synchronized, just the
  * accesses to each disk. Once there is a use case which requires a defined
@@ -777,53 +779,64 @@ VBOXDDU_DECL(int) VDMerge(PVBOXHDD pDisk, unsigned nImageFrom,
  *
  * @return  VBox status code.
  * @return  VERR_VD_IMAGE_NOT_FOUND if image with specified number was not opened.
+ *
  * @param   pDiskFrom       Pointer to source HDD container.
- * @param   nImage          Image number, counts from 0. 0 is always base image of container.
+ * @param   nImage          Image number, counts from 0. 0 is always base image
+ *                          of container.
  * @param   pDiskTo         Pointer to destination HDD container.
- * @param   pszBackend      Name of the image file backend to use (may be NULL to use the same as the source, case insensitive).
- * @param   pszFilename     New name of the image (may be NULL to specify that the
- *                          copy destination is the destination container, or
- *                          if pDiskFrom == pDiskTo, i.e. when moving).
- * @param   fMoveByRename   If true, attempt to perform a move by renaming (if successful the new size is ignored).
+ * @param   pszBackend      Name of the image file backend to use (may be NULL
+ *                          to use the same as the source, case insensitive).
+ * @param   pszFilename     New name of the image (may be NULL to specify that
+ *                          the copy destination is the destination container,
+ *                          or if pDiskFrom == pDiskTo, i.e. when moving).
+ * @param   fMoveByRename   If true, attempt to perform a move by renaming (if
+ *                          successful the new size is ignored).
  * @param   cbSize          New image size (0 means leave unchanged).
- * @param   nImageSameFrom  The number of the last image in the source chain having the same content as the
- *                          image in the destination chain given by nImageSameTo or
- *                          VD_IMAGE_CONTENT_UNKNOWN to indicate that the content of both containers is unknown.
- *                          See the notes for further information.
- * @param   nImageSameTo    The number of the last image in the destination chain having the same content as the
- *                          image in the source chain given by nImageSameFrom or
- *                          VD_IMAGE_CONTENT_UNKNOWN to indicate that the content of both containers is unknown.
- *                          See the notes for further information.
+ * @param   nImageFromSame  The number of the last image in the source chain
+ *                          having the same content as the image in the
+ *                          destination chain given by nImageToSame or
+ *                          VD_IMAGE_CONTENT_UNKNOWN to indicate that the
+ *                          content of both containers is unknown.  See the
+ *                          notes for further information.
+ * @param   nImageToSame    The number of the last image in the destination
+ *                          chain having the same content as the image in the
+ *                          source chain given by nImageFromSame or
+ *                          VD_IMAGE_CONTENT_UNKNOWN to indicate that the
+ *                          content of both containers is unknown. See the notes
+ *                          for further information.
  * @param   uImageFlags     Flags specifying special destination image features.
- * @param   pDstUuid        New UUID of the destination image. If NULL, a new UUID is created.
- *                          This parameter is used if and only if a true copy is created.
- *                          In all rename/move cases or copy to existing image cases the modification UUIDs are copied over.
+ * @param   pDstUuid        New UUID of the destination image. If NULL, a new
+ *                          UUID is created. This parameter is used if and only
+ *                          if a true copy is created. In all rename/move cases
+ *                          or copy to existing image cases the modification
+ *                          UUIDs are copied over.
  * @param   uOpenFlags      Image file open mode, see VD_OPEN_FLAGS_* constants.
  *                          Only used if the destination image is created.
  * @param   pVDIfsOperation Pointer to the per-operation VD interface list.
  * @param   pDstVDIfsImage  Pointer to the per-image VD interface list, for the
  *                          destination image.
- * @param   pDstVDIfsOperation Pointer to the per-operation VD interface list,
+ * @param   pDstVDIfsOperation  Pointer to the per-operation VD interface list,
  *                          for the destination operation.
  *
- * @note Using nImageSameFrom and nImageSameTo can lead to a significant speedup
- *       when copying an image but can also lead to a corrupted copy if used incorrectly.
- *       It is mainly useful when cloning a chain of images and it is known that
- *       the virtual disk content of the two chains is exactly the same upto a certain image.
- *       Example:
- *          Imagine the chain of images which consist of a base and one diff image.
- *          Copying the chain starts with the base image. When copying the first
- *          diff image VDCopy() will read the data from the diff of the source chain
- *          and probably from the base image again in case the diff doesn't has data
- *          for the block. However the block will be optimized away because VDCopy()
- *          reads data from the base image of the destination chain compares the to
- *          and suppresses the write because the data is unchanged.
- *          For a lot of diff images this will be a huge waste of I/O bandwidth if
- *          the diff images contain only few changes.
- *          Because it is known that the base image of the source and the destination chain
- *          have the same content it is enough to check the diff image for changed data
- *          and copy it to the destination diff image which is achieved with
- *          nImageSameFrom and nImageSameTo. Setting both to 0 can suppress a lot of I/O.
+ * @note Using nImageFromSame and nImageToSame can lead to a significant speedup
+ *       when copying an image but can also lead to a corrupted copy if used
+ *       incorrectly. It is mainly useful when cloning a chain of images and it
+ *       is known that the virtual disk content of the two chains is exactly the
+ *       same upto a certain image. Example:
+ *          Imagine the chain of images which consist of a base and one diff
+ *          image. Copying the chain starts with the base image. When copying
+ *          the first diff image VDCopy() will read the data from the diff of
+ *          the source chain and probably from the base image again in case the
+ *          diff doesn't has data for the block. However the block will be
+ *          optimized away because VDCopy() reads data from the base image of
+ *          the destination chain compares the to and suppresses the write
+ *          because the data is unchanged. For a lot of diff images this will be
+ *          a huge waste of I/O bandwidth if the diff images contain only few
+ *          changes. Because it is known that the base image of the source and
+ *          the destination chain have the same content it is enough to check
+ *          the diff image for changed data and copy it to the destination diff
+ *          image which is achieved with nImageFromSame and nImageToSame.
+ *          Setting both to 0 can suppress a lot of I/O.
  */
 VBOXDDU_DECL(int) VDCopyEx(PVBOXHDD pDiskFrom, unsigned nImage, PVBOXHDD pDiskTo,
                            const char *pszBackend, const char *pszFilename,
@@ -900,8 +913,7 @@ VBOXDDU_DECL(int) VDCopy(PVBOXHDD pDiskFrom, unsigned nImage, PVBOXHDD pDiskTo,
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   pVDIfsOperation Pointer to the per-operation VD interface list.
  */
-VBOXDDU_DECL(int) VDCompact(PVBOXHDD pDisk, unsigned nImage,
-                            PVDINTERFACE pVDIfsOperation);
+VBOXDDU_DECL(int) VDCompact(PVBOXHDD pDisk, unsigned nImage, PVDINTERFACE pVDIfsOperation);
 
 /**
  * Resizes the given disk image to the given size. It is OK if there are
@@ -989,13 +1001,13 @@ VBOXDDU_DECL(int) VDFilterRemoveAll(PVBOXHDD pDisk);
  * @return  VBox status code.
  * @return  VERR_VD_NOT_OPENED if no image is opened in HDD container.
  * @param   pDisk           Pointer to HDD container.
- * @param   uOffset         Offset of first reading byte from start of disk.
+ * @param   off             Offset of first reading byte from start of disk.
  *                          Must be aligned to a sector boundary.
  * @param   pvBuffer        Pointer to buffer for reading data.
  * @param   cbBuffer        Number of bytes to read.
  *                          Must be aligned to a sector boundary.
  */
-VBOXDDU_DECL(int) VDRead(PVBOXHDD pDisk, uint64_t uOffset, void *pvBuffer, size_t cbBuffer);
+VBOXDDU_DECL(int) VDRead(PVBOXHDD pDisk, uint64_t off, void *pvBuffer, size_t cbBuffer);
 
 /**
  * Write data to virtual HDD.
@@ -1003,13 +1015,13 @@ VBOXDDU_DECL(int) VDRead(PVBOXHDD pDisk, uint64_t uOffset, void *pvBuffer, size_
  * @return  VBox status code.
  * @return  VERR_VD_NOT_OPENED if no image is opened in HDD container.
  * @param   pDisk           Pointer to HDD container.
- * @param   uOffset         Offset of first writing byte from start of disk.
+ * @param   off             Offset of first writing byte from start of disk.
  *                          Must be aligned to a sector boundary.
  * @param   pvBuffer        Pointer to buffer for writing data.
  * @param   cbBuffer        Number of bytes to write.
  *                          Must be aligned to a sector boundary.
  */
-VBOXDDU_DECL(int) VDWrite(PVBOXHDD pDisk, uint64_t uOffset, const void *pvBuffer, size_t cbBuffer);
+VBOXDDU_DECL(int) VDWrite(PVBOXHDD pDisk, uint64_t off, const void *pvBuffer, size_t cbBuffer);
 
 /**
  * Make sure the on disk representation of a virtual HDD is up to date.
@@ -1077,8 +1089,7 @@ VBOXDDU_DECL(uint64_t) VDGetFileSize(PVBOXHDD pDisk, unsigned nImage);
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   pPCHSGeometry   Where to store PCHS geometry. Not NULL.
  */
-VBOXDDU_DECL(int) VDGetPCHSGeometry(PVBOXHDD pDisk, unsigned nImage,
-                                    PVDGEOMETRY pPCHSGeometry);
+VBOXDDU_DECL(int) VDGetPCHSGeometry(PVBOXHDD pDisk, unsigned nImage, PVDGEOMETRY pPCHSGeometry);
 
 /**
  * Store virtual disk PCHS geometry of an image in HDD container.
@@ -1089,8 +1100,7 @@ VBOXDDU_DECL(int) VDGetPCHSGeometry(PVBOXHDD pDisk, unsigned nImage,
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   pPCHSGeometry   Where to load PCHS geometry from. Not NULL.
  */
-VBOXDDU_DECL(int) VDSetPCHSGeometry(PVBOXHDD pDisk, unsigned nImage,
-                                    PCVDGEOMETRY pPCHSGeometry);
+VBOXDDU_DECL(int) VDSetPCHSGeometry(PVBOXHDD pDisk, unsigned nImage, PCVDGEOMETRY pPCHSGeometry);
 
 /**
  * Get virtual disk LCHS geometry of an image in HDD container.
@@ -1102,8 +1112,7 @@ VBOXDDU_DECL(int) VDSetPCHSGeometry(PVBOXHDD pDisk, unsigned nImage,
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   pLCHSGeometry   Where to store LCHS geometry. Not NULL.
  */
-VBOXDDU_DECL(int) VDGetLCHSGeometry(PVBOXHDD pDisk, unsigned nImage,
-                                    PVDGEOMETRY pLCHSGeometry);
+VBOXDDU_DECL(int) VDGetLCHSGeometry(PVBOXHDD pDisk, unsigned nImage, PVDGEOMETRY pLCHSGeometry);
 
 /**
  * Store virtual disk LCHS geometry of an image in HDD container.
@@ -1114,8 +1123,7 @@ VBOXDDU_DECL(int) VDGetLCHSGeometry(PVBOXHDD pDisk, unsigned nImage,
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   pLCHSGeometry   Where to load LCHS geometry from. Not NULL.
  */
-VBOXDDU_DECL(int) VDSetLCHSGeometry(PVBOXHDD pDisk, unsigned nImage,
-                                    PCVDGEOMETRY pLCHSGeometry);
+VBOXDDU_DECL(int) VDSetLCHSGeometry(PVBOXHDD pDisk, unsigned nImage, PCVDGEOMETRY pLCHSGeometry);
 
 /**
  * Get version of image in HDD container.
@@ -1126,8 +1134,7 @@ VBOXDDU_DECL(int) VDSetLCHSGeometry(PVBOXHDD pDisk, unsigned nImage,
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   puVersion       Where to store the image version.
  */
-VBOXDDU_DECL(int) VDGetVersion(PVBOXHDD pDisk, unsigned nImage,
-                               unsigned *puVersion);
+VBOXDDU_DECL(int) VDGetVersion(PVBOXHDD pDisk, unsigned nImage, unsigned *puVersion);
 
 /**
  * List the capabilities of image backend in HDD container.
@@ -1136,10 +1143,9 @@ VBOXDDU_DECL(int) VDGetVersion(PVBOXHDD pDisk, unsigned nImage,
  * @return  VERR_VD_IMAGE_NOT_FOUND if image with specified number was not opened.
  * @param   pDisk           Pointer to the HDD container.
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
- * @param   pbackendInfo    Where to store the backend information.
+ * @param   pBackendInfo    Where to store the backend information.
  */
-VBOXDDU_DECL(int) VDBackendInfoSingle(PVBOXHDD pDisk, unsigned nImage,
-                                      PVDBACKENDINFO pBackendInfo);
+VBOXDDU_DECL(int) VDBackendInfoSingle(PVBOXHDD pDisk, unsigned nImage, PVDBACKENDINFO pBackendInfo);
 
 /**
  * Get flags of image in HDD container.
@@ -1161,8 +1167,7 @@ VBOXDDU_DECL(int) VDGetImageFlags(PVBOXHDD pDisk, unsigned nImage, unsigned *puI
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   puOpenFlags     Where to store the image open flags.
  */
-VBOXDDU_DECL(int) VDGetOpenFlags(PVBOXHDD pDisk, unsigned nImage,
-                                 unsigned *puOpenFlags);
+VBOXDDU_DECL(int) VDGetOpenFlags(PVBOXHDD pDisk, unsigned nImage, unsigned *puOpenFlags);
 
 /**
  * Set open flags of image in HDD container.
@@ -1175,8 +1180,7 @@ VBOXDDU_DECL(int) VDGetOpenFlags(PVBOXHDD pDisk, unsigned nImage,
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   uOpenFlags      Image file open mode, see VD_OPEN_FLAGS_* constants.
  */
-VBOXDDU_DECL(int) VDSetOpenFlags(PVBOXHDD pDisk, unsigned nImage,
-                                 unsigned uOpenFlags);
+VBOXDDU_DECL(int) VDSetOpenFlags(PVBOXHDD pDisk, unsigned nImage, unsigned uOpenFlags);
 
 /**
  * Get base filename of image in HDD container. Some image formats use
@@ -1191,8 +1195,7 @@ VBOXDDU_DECL(int) VDSetOpenFlags(PVBOXHDD pDisk, unsigned nImage,
  * @param   pszFilename     Where to store the image file name.
  * @param   cbFilename      Size of buffer pszFilename points to.
  */
-VBOXDDU_DECL(int) VDGetFilename(PVBOXHDD pDisk, unsigned nImage,
-                                char *pszFilename, unsigned cbFilename);
+VBOXDDU_DECL(int) VDGetFilename(PVBOXHDD pDisk, unsigned nImage, char *pszFilename, unsigned cbFilename);
 
 /**
  * Get the comment line of image in HDD container.
@@ -1205,8 +1208,7 @@ VBOXDDU_DECL(int) VDGetFilename(PVBOXHDD pDisk, unsigned nImage,
  * @param   pszComment      Where to store the comment string of image. NULL is ok.
  * @param   cbComment       The size of pszComment buffer. 0 is ok.
  */
-VBOXDDU_DECL(int) VDGetComment(PVBOXHDD pDisk, unsigned nImage,
-                               char *pszComment, unsigned cbComment);
+VBOXDDU_DECL(int) VDGetComment(PVBOXHDD pDisk, unsigned nImage, char *pszComment, unsigned cbComment);
 
 /**
  * Changes the comment line of image in HDD container.
@@ -1217,8 +1219,7 @@ VBOXDDU_DECL(int) VDGetComment(PVBOXHDD pDisk, unsigned nImage,
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   pszComment      New comment string (UTF-8). NULL is allowed to reset the comment.
  */
-VBOXDDU_DECL(int) VDSetComment(PVBOXHDD pDisk, unsigned nImage,
-                                   const char *pszComment);
+VBOXDDU_DECL(int) VDSetComment(PVBOXHDD pDisk, unsigned nImage, const char *pszComment);
 
 /**
  * Get UUID of image in HDD container.
@@ -1251,8 +1252,7 @@ VBOXDDU_DECL(int) VDSetUuid(PVBOXHDD pDisk, unsigned nImage, PCRTUUID pUuid);
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   pUuid           Where to store the image modification UUID.
  */
-VBOXDDU_DECL(int) VDGetModificationUuid(PVBOXHDD pDisk, unsigned nImage,
-                                        PRTUUID pUuid);
+VBOXDDU_DECL(int) VDGetModificationUuid(PVBOXHDD pDisk, unsigned nImage, PRTUUID pUuid);
 
 /**
  * Set the image's last modification UUID. Should not be used by normal applications.
@@ -1263,8 +1263,7 @@ VBOXDDU_DECL(int) VDGetModificationUuid(PVBOXHDD pDisk, unsigned nImage,
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   pUuid           New modification UUID of the image. If NULL, a new UUID is created.
  */
-VBOXDDU_DECL(int) VDSetModificationUuid(PVBOXHDD pDisk, unsigned nImage,
-                                        PCRTUUID pUuid);
+VBOXDDU_DECL(int) VDSetModificationUuid(PVBOXHDD pDisk, unsigned nImage, PCRTUUID pUuid);
 
 /**
  * Get parent UUID of image in HDD container.
@@ -1275,8 +1274,7 @@ VBOXDDU_DECL(int) VDSetModificationUuid(PVBOXHDD pDisk, unsigned nImage,
  * @param   nImage          Image number, counts from 0. 0 is always base image of the container.
  * @param   pUuid           Where to store the parent image UUID.
  */
-VBOXDDU_DECL(int) VDGetParentUuid(PVBOXHDD pDisk, unsigned nImage,
-                                  PRTUUID pUuid);
+VBOXDDU_DECL(int) VDGetParentUuid(PVBOXHDD pDisk, unsigned nImage, PRTUUID pUuid);
 
 /**
  * Set the image's parent UUID. Should not be used by normal applications.
@@ -1286,8 +1284,7 @@ VBOXDDU_DECL(int) VDGetParentUuid(PVBOXHDD pDisk, unsigned nImage,
  * @param   nImage          Image number, counts from 0. 0 is always base image of container.
  * @param   pUuid           New parent UUID of the image. If NULL, a new UUID is created.
  */
-VBOXDDU_DECL(int) VDSetParentUuid(PVBOXHDD pDisk, unsigned nImage,
-                                  PCRTUUID pUuid);
+VBOXDDU_DECL(int) VDSetParentUuid(PVBOXHDD pDisk, unsigned nImage, PCRTUUID pUuid);
 
 
 /**
@@ -1317,13 +1314,14 @@ VBOXDDU_DECL(int) VDDiscardRanges(PVBOXHDD pDisk, PCRTRANGE paRanges, unsigned c
  *
  * @return  VBox status code.
  * @param   pDisk           Pointer to the HDD container.
- * @param   uOffset         The offset of the virtual disk to read from.
+ * @param   off             The offset of the virtual disk to read from.
  * @param   cbRead          How many bytes to read.
  * @param   pcSgBuf         Pointer to the S/G buffer to read into.
  * @param   pfnComplete     Completion callback.
- * @param   pvUser          User data which is passed on completion
+ * @param   pvUser1         User data which is passed on completion.
+ * @param   pvUser2         User data which is passed on completion.
  */
-VBOXDDU_DECL(int) VDAsyncRead(PVBOXHDD pDisk, uint64_t uOffset, size_t cbRead,
+VBOXDDU_DECL(int) VDAsyncRead(PVBOXHDD pDisk, uint64_t off, size_t cbRead,
                               PCRTSGBUF pcSgBuf,
                               PFNVDASYNCTRANSFERCOMPLETE pfnComplete,
                               void *pvUser1, void *pvUser2);
@@ -1334,13 +1332,14 @@ VBOXDDU_DECL(int) VDAsyncRead(PVBOXHDD pDisk, uint64_t uOffset, size_t cbRead,
  *
  * @return  VBox status code.
  * @param   pDisk           Pointer to the HDD container.
- * @param   uOffset         The offset of the virtual disk to write to.
- * @param   cbWrtie         How many bytes to write.
+ * @param   off             The offset of the virtual disk to write to.
+ * @param   cbWrite         How many bytes to write.
  * @param   pcSgBuf         Pointer to the S/G buffer to write from.
  * @param   pfnComplete     Completion callback.
- * @param   pvUser          User data which is passed on completion.
+ * @param   pvUser1         User data which is passed on completion.
+ * @param   pvUser2         User data which is passed on completion.
  */
-VBOXDDU_DECL(int) VDAsyncWrite(PVBOXHDD pDisk, uint64_t uOffset, size_t cbWrite,
+VBOXDDU_DECL(int) VDAsyncWrite(PVBOXHDD pDisk, uint64_t off, size_t cbWrite,
                                PCRTSGBUF pcSgBuf,
                                PFNVDASYNCTRANSFERCOMPLETE pfnComplete,
                                void *pvUser1, void *pvUser2);
@@ -1352,7 +1351,8 @@ VBOXDDU_DECL(int) VDAsyncWrite(PVBOXHDD pDisk, uint64_t uOffset, size_t cbWrite,
  * @return  VBox status code.
  * @param   pDisk           Pointer to the HDD container.
  * @param   pfnComplete     Completion callback.
- * @param   pvUser          User data which is passed on completion.
+ * @param   pvUser1         User data which is passed on completion.
+ * @param   pvUser2         User data which is passed on completion.
  */
 VBOXDDU_DECL(int) VDAsyncFlush(PVBOXHDD pDisk,
                                PFNVDASYNCTRANSFERCOMPLETE pfnComplete,
@@ -1371,7 +1371,7 @@ VBOXDDU_DECL(int) VDAsyncFlush(PVBOXHDD pDisk,
  */
 VBOXDDU_DECL(int) VDAsyncDiscardRanges(PVBOXHDD pDisk, PCRTRANGE paRanges, unsigned cRanges,
                                        PFNVDASYNCTRANSFERCOMPLETE pfnComplete,
-                                       void *pvUser1, void *pvUser);
+                                       void *pvUser1, void *pvUser2);
 
 /**
  * Tries to repair a corrupted image.
@@ -1382,12 +1382,11 @@ VBOXDDU_DECL(int) VDAsyncDiscardRanges(PVBOXHDD pDisk, PCRTRANGE paRanges, unsig
  * @param   pVDIfsDisk      Pointer to the per-disk VD interface list.
  * @param   pVDIfsImage     Pointer to the per-image VD interface list.
  * @param   pszFilename     Name of the image file to repair.
- * @param   pszFormat       The backend to use.
+ * @param   pszBackend      The backend to use.
  * @param   fFlags          Combination of the VD_REPAIR_* flags.
  */
 VBOXDDU_DECL(int) VDRepair(PVDINTERFACE pVDIfsDisk, PVDINTERFACE pVDIfsImage,
-                           const char *pszFilename, const char *pszBackend,
-                           uint32_t fFlags);
+                           const char *pszFilename, const char *pszBackend, uint32_t fFlags);
 
 /**
  * Create a VFS file handle from the given HDD container.
@@ -1406,3 +1405,4 @@ RT_C_DECLS_END
 /** @} */
 
 #endif
+
diff --git a/include/VBox/vddbg.h b/include/VBox/vddbg.h
index ad8920e..809d46c 100644
--- a/include/VBox/vddbg.h
+++ b/include/VBox/vddbg.h
@@ -39,6 +39,7 @@ RT_C_DECLS_BEGIN
 #endif
 
 /** @defgroup grp_vddbg            VD Debug API
+ * @ingroup grp_vd
  * @{
  */
 
@@ -202,7 +203,7 @@ VBOXDDU_DECL(int) VDDbgIoLogEventTypeGetNext(VDIOLOGGER hIoLogger, VDIOLOGEVENT
  *
  * @returns VBox status code.
  * @param   hIoLogger    The I/O logger to use.
- * @param   penmEvent    Where to store the next event on success.
+ * @param   penmReq      Where to store the next request on success.
  */
 VBOXDDU_DECL(int) VDDbgIoLogReqTypeGetNext(VDIOLOGGER hIoLogger, PVDDBGIOLOGREQ penmReq);
 
diff --git a/include/VBox/vmm/cfgm.h b/include/VBox/vmm/cfgm.h
index 700d74c..f3834e4 100644
--- a/include/VBox/vmm/cfgm.h
+++ b/include/VBox/vmm/cfgm.h
@@ -30,6 +30,7 @@
 #include <iprt/stdarg.h>
 
 /** @defgroup   grp_cfgm        The Configuration Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -73,9 +74,9 @@ typedef enum CFGMCONFIGTYPE
  * can make any necessary per-thread initializations at this point.
  *
  * @returns VBox status code.
- * @param   pUVM            The user mode VM handle.
- * @param   pVM             The shared VM handle.
- * @param   pvUser          The argument supplied to VMR3Create().
+ * @param   pUVM        The user mode VM handle.
+ * @param   pVM         The cross context VM structure.
+ * @param   pvUser      The argument supplied to VMR3Create().
  */
 typedef DECLCALLBACK(int) FNCFGMCONSTRUCTOR(PUVM pUVM, PVM pVM, void *pvUser);
 /** Pointer to a FNCFGMCONSTRUCTOR(). */
diff --git a/include/VBox/vmm/cpum.h b/include/VBox/vmm/cpum.h
index 85ee5a8..6d73d66 100644
--- a/include/VBox/vmm/cpum.h
+++ b/include/VBox/vmm/cpum.h
@@ -34,6 +34,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_cpum      The CPU Monitor / Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -1160,7 +1161,7 @@ DECLINLINE(bool) CPUMIsGuestInV86ModeEx(PCPUMCTX pCtx)
  * Tests if the guest is running in paged protected or not.
  *
  * @returns true if in paged protected mode, otherwise false.
- * @param   pVM     The VM handle.
+ * @param   pCtx    Current CPU context
  */
 DECLINLINE(bool) CPUMIsGuestInPagedProtectedModeEx(PCPUMCTX pCtx)
 {
@@ -1184,7 +1185,6 @@ VMM_INT_DECL(bool) CPUMIsGuestIn64BitCodeSlow(PCPUMCTX pCtx);
  * Tests if the guest is running in 64 bits mode or not.
  *
  * @returns true if in 64 bits protected mode, otherwise false.
- * @param   pVCpu   The current virtual CPU.
  * @param   pCtx    Current CPU context
  */
 DECLINLINE(bool) CPUMIsGuestIn64BitCodeEx(PCPUMCTX pCtx)
@@ -1338,7 +1338,7 @@ VMMDECL(void)           CPUMRawSetEFlags(PVMCPU pVCpu, uint32_t fEfl);
                                                  | CPUM_CHANGED_CPUID )
 /** @} */
 
-VMMDECL(void)           CPUMSetChangedFlags(PVMCPU pVCpu, uint32_t fChangedFlags);
+VMMDECL(void)           CPUMSetChangedFlags(PVMCPU pVCpu, uint32_t fChangedAdd);
 VMMR3DECL(uint32_t)     CPUMR3RemEnter(PVMCPU pVCpu, uint32_t *puCpl);
 VMMR3DECL(void)         CPUMR3RemLeave(PVMCPU pVCpu, bool fNoOutOfSyncSels);
 VMMDECL(bool)           CPUMSupportsXSave(PVM pVM);
diff --git a/include/VBox/vmm/cpumctx-v1_6.h b/include/VBox/vmm/cpumctx-v1_6.h
index 721890b..e478aea 100644
--- a/include/VBox/vmm/cpumctx-v1_6.h
+++ b/include/VBox/vmm/cpumctx-v1_6.h
@@ -31,7 +31,7 @@
 
 RT_C_DECLS_BEGIN
 
-/** @addgroup grp_cpum_ctx_v1_6  The CPUM Context Structures from v1.6
+/** @defgroup grp_cpum_ctx_v1_6  The CPUM Context Structures from v1.6
  * @ingroup grp_cpum
  * @{
  */
diff --git a/include/VBox/vmm/cpumctx.h b/include/VBox/vmm/cpumctx.h
index 4d98582..c84a164 100644
--- a/include/VBox/vmm/cpumctx.h
+++ b/include/VBox/vmm/cpumctx.h
@@ -36,7 +36,7 @@
 
 RT_C_DECLS_BEGIN
 
-/** @addgroup grp_cpum_ctx  The CPUM Context Structures
+/** @defgroup grp_cpum_ctx  The CPUM Context Structures
  * @ingroup grp_cpum
  * @{
  */
diff --git a/include/VBox/vmm/csam.h b/include/VBox/vmm/csam.h
index 163b05c..a67f440 100644
--- a/include/VBox/vmm/csam.h
+++ b/include/VBox/vmm/csam.h
@@ -31,6 +31,7 @@
 #if defined(VBOX_WITH_RAW_MODE) || defined(DOXYGEN_RUNNING)
 
 /** @defgroup grp_csam      The Code Scanning and Analysis API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -71,7 +72,7 @@ VMM_INT_DECL(bool)      CSAMIsKnownDangerousInstr(PVM pVM, RTRCUINTPTR GCPtr);
 
 
 #ifdef IN_RING3
-/** @defgroup grp_csam_r3      The Code Scanning and Analysis API
+/** @defgroup grp_csam_r3      The CSAM ring-3 Context API
  * @{
  */
 
diff --git a/include/VBox/vmm/dbgf.h b/include/VBox/vmm/dbgf.h
index c635e9e..e88bbc9 100644
--- a/include/VBox/vmm/dbgf.h
+++ b/include/VBox/vmm/dbgf.h
@@ -38,12 +38,12 @@ RT_C_DECLS_BEGIN
 
 
 /** @defgroup grp_dbgf     The Debugger Facility API
+ * @ingroup grp_vmm
  * @{
  */
 
 #if defined(IN_RC) || defined(IN_RING0)
-/** @addgroup grp_dbgf_rz  The RZ DBGF API
- * @ingroup grp_dbgf
+/** @defgroup grp_dbgf_rz  The RZ DBGF API
  * @{
  */
 VMMRZ_INT_DECL(int) DBGFRZTrap01Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCUINTREG uDr6, bool fAltStepping);
@@ -273,7 +273,7 @@ typedef const DBGFEVENT *PCDBGFEVENT;
  * Stops the debugger raising a DBGFEVENT_DEVELOPER_STOP event.
  *
  * @returns VBox status code which must be propagated up to EM if not VINF_SUCCESS.
- * @param   pVM     VM Handle.
+ * @param   pVM     The cross context VM structure.
  */
 # ifdef VBOX_STRICT
 #  define DBGFSTOP(pVM)  DBGFR3EventSrc(pVM, DBGFEVENT_DEV_STOP, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL)
@@ -494,7 +494,7 @@ typedef FNDBGFHANDLERDRV  *PFNDBGFHANDLERDRV;
 /**
  * Info handler, internal version.
  *
- * @param   pVM         The VM handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        Callback functions for doing output.
  * @param   pszArgs     Argument string. Optional and specific to the handler.
  */
@@ -868,7 +868,7 @@ VMMR3DECL(void)             DBGFR3StackWalkEnd(PCDBGFSTACKFRAME pFirstFrame);
 
 #ifdef IN_RING3 /* The disassembly API only works in ring-3. */
 
-/** Flags to pass to DBGFR3DisasInstrEx().
+/** @name Flags to pass to DBGFR3DisasInstrEx().
  * @{ */
 /** Disassemble the current guest instruction, with annotations. */
 #define DBGF_DISAS_FLAGS_CURRENT_GUEST      RT_BIT(0)
diff --git a/include/VBox/vmm/dbgfcorefmt.h b/include/VBox/vmm/dbgfcorefmt.h
index 4dd862b..2b6b71b 100644
--- a/include/VBox/vmm/dbgfcorefmt.h
+++ b/include/VBox/vmm/dbgfcorefmt.h
@@ -34,7 +34,7 @@
 RT_C_DECLS_BEGIN
 
 
-/** @addgroup grp_dbgf_corefmt  VM Core File Format
+/** @defgroup grp_dbgf_corefmt  VM Core File Format
  * @ingroup grp_dbgf
  *
  * @todo Add description of the core file format and how the structures in this
diff --git a/include/VBox/vmm/dbgftrace.h b/include/VBox/vmm/dbgftrace.h
index b19ba25..61db8e0 100644
--- a/include/VBox/vmm/dbgftrace.h
+++ b/include/VBox/vmm/dbgftrace.h
@@ -30,13 +30,13 @@
 #include <VBox/types.h>
 
 RT_C_DECLS_BEGIN
-/** @addgroup grp_dbgf_trace  Tracing
+/** @defgroup grp_dbgf_trace  Tracing
  * @ingroup grp_dbgf
  *
  * @{
  */
 
-#if (defined(RTTRACE_ENABLED) || DBGFTRACE_ENABLED) && !defined(DBGFTRACE_DISABLED)
+#if (defined(RTTRACE_ENABLED) || defined(DBGFTRACE_ENABLED)) && !defined(DBGFTRACE_DISABLED)
 # undef DBGFTRACE_ENABLED
 # undef DBGFTRACE_DISABLED
 # define DBGFTRACE_ENABLED
diff --git a/include/VBox/vmm/em.h b/include/VBox/vmm/em.h
index 5a57e9c..bff9ac6 100644
--- a/include/VBox/vmm/em.h
+++ b/include/VBox/vmm/em.h
@@ -33,6 +33,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_em        The Execution Monitor / Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -124,7 +125,7 @@ typedef FNEMULATELOCKPARAM3    *PFNEMULATELOCKPARAM3;
  *
  * @returns true if enabled.
  * @returns false if disabled.
- * @param   pVM         The VM to operate on.
+ * @param   pVM         The cross context VM structure.
  */
 #define EMIsRawRing3Enabled(pVM)            (!(pVM)->fRecompileUser)
 
@@ -133,7 +134,7 @@ typedef FNEMULATELOCKPARAM3    *PFNEMULATELOCKPARAM3;
  *
  * @returns true if enabled.
  * @returns false if disabled.
- * @param   pVM         The VM to operate on.
+ * @param   pVM         The cross context VM structure.
  */
 #define EMIsRawRing0Enabled(pVM)            (!(pVM)->fRecompileSupervisor)
 
@@ -143,7 +144,7 @@ typedef FNEMULATELOCKPARAM3    *PFNEMULATELOCKPARAM3;
  *
  * @returns true if enabled.
  * @returns false if disabled.
- * @param   pVM         The VM to operate on.
+ * @param   pVM         The cross context VM structure.
  */
 # define EMIsRawRing1Enabled(pVM)           ((pVM)->fRawRing1Enabled)
 #else
@@ -155,7 +156,7 @@ typedef FNEMULATELOCKPARAM3    *PFNEMULATELOCKPARAM3;
  *
  * @returns true if enabled.
  * @returns false if disabled.
- * @param   pVM         The VM to operate on.
+ * @param   pVM         The cross context VM structure.
  */
 #define EMIsHwVirtExecutionEnabled(pVM)     (!(pVM)->fRecompileSupervisor && !(pVM)->fRecompileUser)
 
@@ -165,7 +166,7 @@ typedef FNEMULATELOCKPARAM3    *PFNEMULATELOCKPARAM3;
  *
  * @returns true if enabled.
  * @returns false if disabled.
- * @param   pVM         The VM to operate on.
+ * @param   pVM         The cross context VM structure.
  */
 #define EMIsSupervisorCodeRecompiled(pVM) ((pVM)->fRecompileSupervisor)
 
diff --git a/include/VBox/vmm/ftm.h b/include/VBox/vmm/ftm.h
index 487c6e4..0c214e0 100644
--- a/include/VBox/vmm/ftm.h
+++ b/include/VBox/vmm/ftm.h
@@ -32,6 +32,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_ftm        The Fault Tolerance Monitor / Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
diff --git a/include/VBox/vmm/gim.h b/include/VBox/vmm/gim.h
index bcd01b3..57fb0b1 100644
--- a/include/VBox/vmm/gim.h
+++ b/include/VBox/vmm/gim.h
@@ -39,6 +39,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_gim   The Guest Interface Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -101,8 +102,8 @@ AssertCompileMemberAlignment(GIMMMIO2REGION, pvPageR0, 8);
 /**
  * A GIM Hypercall handler.
  *
- * @param   pVM             Pointer to the VMCPU.
- * @param   pCtx            Pointer to the guest-CPU context.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
+ * @param   pCtx    Pointer to the guest-CPU context.
  */
 typedef DECLCALLBACK(int) FNGIMHYPERCALL(PVMCPU pVCpu, PCPUMCTX pCtx);
 /** Pointer to a GIM hypercall handler. */
@@ -112,10 +113,10 @@ typedef FNGIMHYPERCALL *PFNGIMHYPERCALL;
  * A GIM MSR-read handler.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VMCPU.
- * @param   idMsr           The MSR being read.
- * @param   pRange          The range that the MSR belongs to.
- * @param   puValue         Where to store the value of the MSR.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
+ * @param   idMsr   The MSR being read.
+ * @param   pRange  The range that the MSR belongs to.
+ * @param   puValue Where to store the value of the MSR.
  */
 typedef DECLCALLBACK(int) FNGIMRDMSR(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue);
 /** Pointer to a GIM MSR-read handler. */
@@ -125,11 +126,11 @@ typedef FNGIMRDMSR *PFNGIMRDMSR;
  * A GIM MSR-write handler.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VMCPU.
- * @param   idMsr           The MSR being written.
- * @param   pRange          The range that the MSR belongs to.
- * @param   uValue          The value to set, ignored bits masked.
- * @param   uRawValue       The raw value with the ignored bits not masked.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
+ * @param   idMsr       The MSR being written.
+ * @param   pRange      The range that the MSR belongs to.
+ * @param   uValue      The value to set, ignored bits masked.
+ * @param   uRawValue   The raw value with the ignored bits not masked.
  */
 typedef DECLCALLBACK(int) FNGIMWRMSR(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t uValue, uint64_t uRawValue);
 /** Pointer to a GIM MSR-write handler. */
diff --git a/include/VBox/vmm/gmm.h b/include/VBox/vmm/gmm.h
index ba3fef8..ba1733e 100644
--- a/include/VBox/vmm/gmm.h
+++ b/include/VBox/vmm/gmm.h
@@ -37,6 +37,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup   grp_gmm     GMM - The Global Memory Manager
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -246,7 +247,7 @@ typedef struct GMMPAGEDESC
 
     /** The Page ID.
      *
-     * @intput  GMMR0AllocateHandyPages expects the Page ID of the page to
+     * @input   GMMR0AllocateHandyPages expects the Page ID of the page to
      *          update here. NIL_GMM_PAGEID means no page should be updated.
      *
      *          GMMR0AllocatePages requires this to be initialized to
diff --git a/include/VBox/vmm/gvm.h b/include/VBox/vmm/gvm.h
index 7a40b37..a7869d8 100644
--- a/include/VBox/vmm/gvm.h
+++ b/include/VBox/vmm/gvm.h
@@ -32,7 +32,8 @@
 #include <iprt/thread.h>
 
 
-/** @defgroup grp_gvmcpu GVMCPU - The Global VMCPU Data
+/** @defgroup grp_gvmcpu    GVMCPU - The Global VMCPU Data
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -59,6 +60,7 @@ typedef GVMCPU *PGVMCPU;
 /** @} */
 
 /** @defgroup grp_gvm   GVM - The Global VM Data
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -122,3 +124,4 @@ typedef struct GVM
 /** @} */
 
 #endif
+
diff --git a/include/VBox/vmm/gvmm.h b/include/VBox/vmm/gvmm.h
index 4e6b4f3..2a75093 100644
--- a/include/VBox/vmm/gvmm.h
+++ b/include/VBox/vmm/gvmm.h
@@ -34,7 +34,8 @@
 
 RT_C_DECLS_BEGIN
 
-/** @defgroup grp_GVMM  GVMM - The Global VM Manager.
+/** @defgroup grp_gvmm  GVMM - The Global VM Manager.
+ * @ingroup grp_vmm
  * @{
  */
 
diff --git a/include/VBox/vmm/hm.h b/include/VBox/vmm/hm.h
index 2963696..1185070 100644
--- a/include/VBox/vmm/hm.h
+++ b/include/VBox/vmm/hm.h
@@ -32,7 +32,8 @@
 #include <iprt/mp.h>
 
 
-/** @defgroup grp_hm      The VM Hardware Manager API
+/** @defgroup grp_hm      The Hardware Assisted Virtualization Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -41,8 +42,8 @@ RT_C_DECLS_BEGIN
 /**
  * Checks whether HM (VT-x/AMD-V) is being used by this VM.
  *
- * @retval  @c true if used.
- * @retval  @c false if software virtualization (raw-mode) is used.
+ * @retval  true if used.
+ * @retval  false if software virtualization (raw-mode) is used.
  *
  * @param   a_pVM       The cross context VM structure.
  * @sa      HMIsEnabledNotMacro, HMR3IsEnabled
@@ -57,9 +58,9 @@ RT_C_DECLS_BEGIN
 /**
  * Checks whether raw-mode context is required for any purpose.
  *
- * @retval  @c true if required either by raw-mode itself or by HM for doing
+ * @retval  true if required either by raw-mode itself or by HM for doing
  *          switching the cpu to 64-bit mode.
- * @retval  @c false if not required.
+ * @retval  false if not required.
  *
  * @param   a_pVM       The cross context VM structure.
  * @internal
@@ -166,7 +167,7 @@ VMM_INT_DECL(PGMMODE)           HMGetShwPagingMode(PVM pVM);
 #endif
 
 #ifdef IN_RING0
-/** @defgroup grp_hm_r0    The VM Hardware Manager API
+/** @defgroup grp_hm_r0    The HM ring-0 Context API
  * @{
  */
 VMMR0_INT_DECL(int)             HMR0Init(void);
@@ -204,7 +205,7 @@ VMMR0_INT_DECL(int)             HMR0EnsureCompleteBasicContext(PVMCPU pVCpu, PCP
 
 
 #ifdef IN_RING3
-/** @defgroup grp_hm_r3    The VM Hardware Manager API
+/** @defgroup grp_hm_r3    The HM ring-3 Context API
  * @{
  */
 VMMR3DECL(bool)                 HMR3IsEnabled(PUVM pUVM);
diff --git a/include/VBox/vmm/hm_svm.h b/include/VBox/vmm/hm_svm.h
index 8175d10..853b0d0 100644
--- a/include/VBox/vmm/hm_svm.h
+++ b/include/VBox/vmm/hm_svm.h
@@ -32,7 +32,7 @@
 #include <iprt/asm.h>
 
 
-/** @defgroup grp_svm   SVM (AMD-V) Types and Definitions
+/** @defgroup grp_hm_svm    SVM (AMD-V) Types and Definitions
  * @ingroup grp_hm
  * @{
  */
diff --git a/include/VBox/vmm/hm_vmx.h b/include/VBox/vmm/hm_vmx.h
index 2d745ee..c4df6b5 100644
--- a/include/VBox/vmm/hm_vmx.h
+++ b/include/VBox/vmm/hm_vmx.h
@@ -48,7 +48,7 @@
 #endif
 
 
-/** @defgroup grp_vmx   vmx Types and Definitions
+/** @defgroup grp_hm_vmx    VMX Types and Definitions
  * @ingroup grp_hm
  * @{
  */
@@ -56,7 +56,7 @@
 /** @def HMVMXCPU_GST_SET_UPDATED
  * Sets a guest-state-updated flag.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlag   The flag to set.
  */
 #define HMVMXCPU_GST_SET_UPDATED(pVCpu, fFlag)        (ASMAtomicUoOrU32(&(pVCpu)->hm.s.vmx.fUpdatedGuestState, (fFlag)))
@@ -64,7 +64,7 @@
 /** @def HMVMXCPU_GST_IS_SET
  * Checks if all the flags in the specified guest-state-updated set is pending.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlag   The flag to check.
  */
 #define HMVMXCPU_GST_IS_SET(pVCpu, fFlag)             ((ASMAtomicUoReadU32(&(pVCpu)->hm.s.vmx.fUpdatedGuestState) & (fFlag)) == (fFlag))
@@ -73,7 +73,7 @@
  * Checks if one or more of the flags in the specified guest-state-updated set
  * is updated.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlags  The flags to check for.
  */
 #define HMVMXCPU_GST_IS_UPDATED(pVCpu, fFlags)        RT_BOOL(ASMAtomicUoReadU32(&(pVCpu)->hm.s.vmx.fUpdatedGuestState) & (fFlags))
@@ -81,7 +81,7 @@
 /** @def HMVMXCPU_GST_RESET_TO
  * Resets the guest-state-updated flags to the specified value.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlags  The new value.
  */
 #define HMVMXCPU_GST_RESET_TO(pVCpu, fFlags)          (ASMAtomicUoWriteU32(&(pVCpu)->hm.s.vmx.fUpdatedGuestState, (fFlags)))
@@ -89,7 +89,7 @@
 /** @def HMVMXCPU_GST_VALUE
  * Returns the current guest-state-updated flags value.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 #define HMVMXCPU_GST_VALUE(pVCpu)                     (ASMAtomicUoReadU32(&(pVCpu)->hm.s.vmx.fUpdatedGuestState))
 
@@ -1825,7 +1825,7 @@ typedef VMXMSRS *PVMXMSRS;
 /** @} */
 
 
-/** @defgroup grp_vmx_asm   vmx assembly helpers
+/** @defgroup grp_hm_vmx_asm    VMX Assembly Helpers
  * @{
  */
 
diff --git a/include/VBox/vmm/iem.h b/include/VBox/vmm/iem.h
index 1f4005f..13154e1 100644
--- a/include/VBox/vmm/iem.h
+++ b/include/VBox/vmm/iem.h
@@ -34,6 +34,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_iem       The Interpreted Execution Manager API.
+ * @ingroup grp_vmm
  * @{
  */
 
diff --git a/include/VBox/vmm/iom.h b/include/VBox/vmm/iom.h
index 9bc6300..cb75fd4 100644
--- a/include/VBox/vmm/iom.h
+++ b/include/VBox/vmm/iom.h
@@ -33,6 +33,7 @@ RT_C_DECLS_BEGIN
 
 
 /** @defgroup grp_iom   The Input / Ouput Monitor API
+ * @ingroup grp_vmm
  * @{
  */
 
diff --git a/include/VBox/vmm/mm.h b/include/VBox/vmm/mm.h
index 10b4b28..9b34fa2 100644
--- a/include/VBox/vmm/mm.h
+++ b/include/VBox/vmm/mm.h
@@ -35,6 +35,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_mm       The Memory Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
diff --git a/include/VBox/vmm/patm.h b/include/VBox/vmm/patm.h
index caef685..ea5fb35 100644
--- a/include/VBox/vmm/patm.h
+++ b/include/VBox/vmm/patm.h
@@ -34,6 +34,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_patm      The Patch Manager API
+ * @ingroup grp_vmm
  * @{
  */
 #define MAX_PATCHES          512
@@ -135,7 +136,7 @@ typedef enum
  * Query PATM state (enabled/disabled)
  *
  * @returns 0 - disabled, 1 - enabled
- * @param   pVM         The VM to operate on.
+ * @param   a_pVM       The VM to operate on.
  * @internal
  */
 #define PATMIsEnabled(a_pVM)    ((a_pVM)->fPATMEnabled)
diff --git a/include/VBox/vmm/pdmapi.h b/include/VBox/vmm/pdmapi.h
index 9fce2db..d2922ef 100644
--- a/include/VBox/vmm/pdmapi.h
+++ b/include/VBox/vmm/pdmapi.h
@@ -37,6 +37,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_pdm       The Pluggable Device Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -99,7 +100,7 @@ typedef enum  PDMLDRCTX
  * @returns VBox status.
  *          Failure will stop the search and return the return code.
  *          Warnings will be ignored and not returned.
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   pszFilename     Module filename.
  * @param   pszName         Module name. (short and unique)
  * @param   ImageBase       Address where to executable image is loaded.
diff --git a/include/VBox/vmm/pdmasynccompletion.h b/include/VBox/vmm/pdmasynccompletion.h
index bbf1d39..9def396 100644
--- a/include/VBox/vmm/pdmasynccompletion.h
+++ b/include/VBox/vmm/pdmasynccompletion.h
@@ -95,7 +95,7 @@ typedef FNPDMASYNCCOMPLETEUSB *PFNPDMASYNCCOMPLETEUSB;
 /**
  * Completion callback for internal.
  *
- * @param   pVM         Pointer to the shared VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   pvUser      User argument for the task.
  * @param   pvUser2     User argument for the template.
  * @param   rc          The status code of the completed request.
@@ -104,7 +104,8 @@ typedef DECLCALLBACK(void) FNPDMASYNCCOMPLETEINT(PVM pVM, void *pvUser, void *pv
 /** Pointer to a FNPDMASYNCCOMPLETEINT(). */
 typedef FNPDMASYNCCOMPLETEINT *PFNPDMASYNCCOMPLETEINT;
 
-VMMR3DECL(int) PDMR3AsyncCompletionTemplateCreateInternal(PVM pVM, PPPDMASYNCCOMPLETIONTEMPLATE ppTemplate, PFNPDMASYNCCOMPLETEINT pfnCompleted, void *pvUser2, const char *pszDesc);
+VMMR3DECL(int) PDMR3AsyncCompletionTemplateCreateInternal(PVM pVM, PPPDMASYNCCOMPLETIONTEMPLATE ppTemplate,
+                                                          PFNPDMASYNCCOMPLETEINT pfnCompleted, void *pvUser2, const char *pszDesc);
 VMMR3DECL(int) PDMR3AsyncCompletionTemplateDestroy(PPDMASYNCCOMPLETIONTEMPLATE pTemplate);
 VMMR3DECL(int) PDMR3AsyncCompletionEpCreateForFile(PPPDMASYNCCOMPLETIONENDPOINT ppEndpoint,
                                                    const char *pszFilename, uint32_t fFlags,
diff --git a/include/VBox/vmm/pdmaudioifs.h b/include/VBox/vmm/pdmaudioifs.h
index 08c53c6..7789653 100644
--- a/include/VBox/vmm/pdmaudioifs.h
+++ b/include/VBox/vmm/pdmaudioifs.h
@@ -29,9 +29,17 @@
 #include <VBox/types.h>
 #include <iprt/list.h>
 
+
+/** @defgroup grp_pdm_ifs_audio     PDM Audio Interfaces
+ * @ingroup grp_pdm_interfaces
+ * @{
+ */
+
+/** @todo r=bird: Don't be lazy with documentation! */
 typedef uint32_t PDMAUDIODRVFLAGS;
 
 /** No flags set. */
+/** @todo r=bird: s/PDMAUDIODRVFLAG/PDMAUDIODRV_FLAGS/g */
 #define PDMAUDIODRVFLAG_NONE        0
 /** Marks a primary audio driver which is critical
  *  when running the VM. */
@@ -166,6 +174,10 @@ typedef enum PDMAUDIOSTREAMCMD
     PDMAUDIOSTREAMCMD_ENABLE,
     /** Disables the stream. */
     PDMAUDIOSTREAMCMD_DISABLE,
+    /** Pauses the stream. */
+    PDMAUDIOSTREAMCMD_PAUSE,
+    /** Resumes the stream. */
+    PDMAUDIOSTREAMCMD_RESUME,
     /** Hack to blow the type up to 32-bit. */
     PDMAUDIOSTREAMCMD_32BIT_HACK = 0x7fffffff
 } PDMAUDIOSTREAMCMD;
@@ -291,6 +303,23 @@ typedef struct PDMAUDIOMIXBUF
     uint8_t                cShift;
 } PDMAUDIOMIXBUF;
 
+/** Stream status flag. To be used with PDMAUDIOSTRMSTS_FLAG_ flags. */
+typedef uint32_t PDMAUDIOSTRMSTS;
+
+/** No flags being set. */
+#define PDMAUDIOSTRMSTS_FLAG_NONE            0
+/** Whether this stream General Enabled or disabled flag. */
+#define PDMAUDIOSTRMSTS_FLAG_ENABLED         RT_BIT_32(0)
+/** Whether this stream has been paused or not. This also implies
+ *  that this is an enabled stream! */
+#define PDMAUDIOSTRMSTS_FLAG_PAUSED          RT_BIT_32(1)
+/** Whether this stream was marked as being disabled
+ *  but there are still associated guest output streams
+ *  which rely on its data. */
+#define PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE RT_BIT_32(2)
+/** Validation mask. */
+#define PDMAUDIOSTRMSTS_VALID_MASK           UINT32_C(0x00000007)
+
 /**
  * Represents an audio input on the host of a certain
  * backend (e.g. DirectSound, PulseAudio etc).
@@ -307,8 +336,8 @@ typedef struct PDMAUDIOHSTSTRMIN
     RTLISTNODE             Node;
     /** PCM properties. */
     PDMPCMPROPS            Props;
-    /** Whether this input is enabled or not. */
-    bool                   fEnabled;
+    /** Stream status flag. */
+    PDMAUDIOSTRMSTS        fStatus;
     /** This stream's mixing buffer. */
     PDMAUDIOMIXBUF         MixBuf;
     /** Pointer to (parent) guest stream. */
@@ -328,12 +357,8 @@ typedef struct PDMAUDIOHSTSTRMOUT
     RTLISTNODE             Node;
     /** Stream properites. */
     PDMPCMPROPS            Props;
-    /** Enabled or disabled flag. */
-    bool                   fEnabled;
-    /** Whether this stream was marked as being disabled
-     *  but there are still associated guest output streams
-     *  which rely on its data. */
-    bool                   fPendingDisable;
+    /** Stream status flag. */
+    PDMAUDIOSTRMSTS        fStatus;
     /** This stream's mixing buffer. */
     PDMAUDIOMIXBUF         MixBuf;
     /** Associated guest output streams. */
@@ -351,6 +376,9 @@ typedef struct PDMAUDIOGSTSTRMSTATE
     bool                   fEmpty;
     /** Name of this stream. */
     char                  *pszName;
+    /** Number of references to this stream. Only can be
+     *  destroyed if the reference count is reaching 0. */
+    uint8_t                cRefs;
 } PDMAUDIOGSTSTRMSTATE, *PPDMAUDIOGSTSTRMSTATE;
 
 /**
@@ -425,6 +453,24 @@ typedef struct PDMIAUDIOCONNECTOR
     DECLR3CALLBACKMEMBER(int, pfnWrite, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut, const void *pvBuf, uint32_t cbSize, uint32_t *pcbWritten));
 
     /**
+     * Checks whether a specific guest input stream is active or not.
+     *
+     * @returns Whether the specified stream is active or not.
+     * @param   pInterface      Pointer to the interface structure containing the called function pointer.
+     * @param   pGstStrmIn      Pointer to guest input stream.
+     */
+    DECLR3CALLBACKMEMBER(bool, pfnIsActiveIn, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn));
+
+    /**
+     * Checks whether a specific guest output stream is active or not.
+     *
+     * @returns Whether the specified stream is active or not.
+     * @param   pInterface      Pointer to the interface structure containing the called function pointer.
+     * @param   pGstStrmOut     Pointer to guest output stream.
+     */
+    DECLR3CALLBACKMEMBER(bool, pfnIsActiveOut, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut));
+
+    /**
      * Checks whether the specified guest input stream is in a working state.
      *
      * @returns True if a host voice in is available, false if not.
@@ -471,23 +517,7 @@ typedef struct PDMIAUDIOCONNECTOR
     DECLR3CALLBACKMEMBER(int, pfnEnableIn, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn, bool fEnable));
 
     /**
-     * Closes a specific guest input stream.
-     *
-     * @param   pInterface      Pointer to the interface structure containing the called function pointer.
-     * @param   pGstStrmIn      Pointer to guest input stream.
-     */
-    DECLR3CALLBACKMEMBER(void, pfnCloseIn, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn));
-
-    /**
-     * Closes a specific guest output stream.
-     *
-     * @param   pInterface      Pointer to the interface structure containing the called function pointer.
-     * @param   pGstStrmOut     Pointer to guest output stream.
-     */
-    DECLR3CALLBACKMEMBER(void, pfnCloseOut, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut));
-
-    /**
-     * Opens an input audio channel.
+     * Creates a guest input stream.
      *
      * @returns VBox status code.
      * @param   pInterface           Pointer to the interface structure containing the called function pointer.
@@ -496,12 +526,12 @@ typedef struct PDMIAUDIOCONNECTOR
      * @param   pCfg                 Pointer to PDMAUDIOSTREAMCFG to use.
      * @param   ppGstStrmIn          Pointer where to return the guest guest input stream on success.
      */
-    DECLR3CALLBACKMEMBER(int, pfnOpenIn, (PPDMIAUDIOCONNECTOR pInterface, const char *pszName,
-                                          PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg,
-                                          PPDMAUDIOGSTSTRMIN *ppGstStrmIn));
+    DECLR3CALLBACKMEMBER(int, pfnCreateIn, (PPDMIAUDIOCONNECTOR pInterface, const char *pszName,
+                                            PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg,
+                                            PPDMAUDIOGSTSTRMIN *ppGstStrmIn));
 
     /**
-     * Opens an output audio channel.
+     * Creates a guest output stream.
      *
      * @returns VBox status code.
      * @param   pInterface           Pointer to the interface structure containing the called function pointer.
@@ -509,55 +539,60 @@ typedef struct PDMIAUDIOCONNECTOR
      * @param   pCfg                 Pointer to PDMAUDIOSTREAMCFG to use.
      * @param   ppGstStrmOut         Pointer where to return the guest guest input stream on success.
      */
-    DECLR3CALLBACKMEMBER(int, pfnOpenOut, (PPDMIAUDIOCONNECTOR pInterface, const char *pszName,
-                                           PPDMAUDIOSTREAMCFG pCfg, PPDMAUDIOGSTSTRMOUT *ppGstStrmOut));
+    DECLR3CALLBACKMEMBER(int, pfnCreateOut, (PPDMIAUDIOCONNECTOR pInterface, const char *pszName,
+                                             PPDMAUDIOSTREAMCFG pCfg, PPDMAUDIOGSTSTRMOUT *ppGstStrmOut));
 
     /**
-     * Plays (transfers) all available samples via the connected host backend.
+     * Destroys a guest input stream.
      *
-     * @returns VBox status code.
-     * @param   pInterface           Pointer to the interface structure containing the called function pointer.
-     * @param   pcSamplesPlayed      Number of samples played. Optional.
+     * @param   pInterface      Pointer to the interface structure containing the called function pointer.
+     * @param   pGstStrmIn      Pointer to guest input stream.
      */
-    DECLR3CALLBACKMEMBER(int, pfnPlayOut, (PPDMIAUDIOCONNECTOR pInterface, uint32_t *pcSamplesPlayed));
+    DECLR3CALLBACKMEMBER(void, pfnDestroyIn, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn));
 
     /**
-     * Checks whether a specific guest input stream is active or not.
+     * Destroys a guest output stream.
      *
-     * @returns Whether the specified stream is active or not.
      * @param   pInterface      Pointer to the interface structure containing the called function pointer.
-     * @param   pGstStrmIn      Pointer to guest input stream.
+     * @param   pGstStrmOut     Pointer to guest output stream.
      */
-    DECLR3CALLBACKMEMBER(bool, pfnIsActiveIn, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn));
+    DECLR3CALLBACKMEMBER(void, pfnDestroyOut, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut));
 
     /**
-     * Checks whether a specific guest output stream is active or not.
+     * Plays (transfers) all available samples via the connected host backend.
      *
-     * @returns Whether the specified stream is active or not.
-     * @param   pInterface      Pointer to the interface structure containing the called function pointer.
-     * @param   pGstStrmOut     Pointer to guest output stream.
+     * @returns VBox status code.
+     * @param   pInterface           Pointer to the interface structure containing the called function pointer.
+     * @param   pcSamplesPlayed      Number of samples played. Optional.
      */
-    DECLR3CALLBACKMEMBER(bool, pfnIsActiveOut, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut));
+    DECLR3CALLBACKMEMBER(int, pfnPlayOut, (PPDMIAUDIOCONNECTOR pInterface, uint32_t *pcSamplesPlayed));
 
 } PDMIAUDIOCONNECTOR;
 
 /** PDMIAUDIOCONNECTOR interface ID. */
-#define PDMIAUDIOCONNECTOR_IID                  "a41ca770-ed07-4f57-a0a6-41377d9d484f"
-
-/** Defines all needed interface callbacks for an audio backend. */
-#define PDMAUDIO_IHOSTAUDIO_CALLBACKS(_aDrvName) \
-    pThis->IHostAudio.pfnCaptureIn  = _aDrvName##CaptureIn;  \
-    pThis->IHostAudio.pfnControlIn  = _aDrvName##ControlIn;  \
-    pThis->IHostAudio.pfnControlOut = _aDrvName##ControlOut; \
-    pThis->IHostAudio.pfnFiniIn     = _aDrvName##FiniIn;     \
-    pThis->IHostAudio.pfnFiniOut    = _aDrvName##FiniOut;    \
-    pThis->IHostAudio.pfnGetConf    = _aDrvName##GetConf;    \
-    pThis->IHostAudio.pfnInit       = _aDrvName##Init;       \
-    pThis->IHostAudio.pfnInitIn     = _aDrvName##InitIn;     \
-    pThis->IHostAudio.pfnInitOut    = _aDrvName##InitOut;    \
-    pThis->IHostAudio.pfnIsEnabled  = _aDrvName##IsEnabled;  \
-    pThis->IHostAudio.pfnPlayOut    = _aDrvName##PlayOut;    \
-    pThis->IHostAudio.pfnShutdown   = _aDrvName##Shutdown;
+#define PDMIAUDIOCONNECTOR_IID                  "7bbb9565-8dd2-4fab-81d6-4d78985e5daa"
+
+
+/**
+ * Assign all needed interface callbacks for an audio backend.
+ *
+ * @param   a_NamePrefix        The function name prefix.
+ */
+#define PDMAUDIO_IHOSTAUDIO_CALLBACKS(a_NamePrefix) \
+    do { \
+        pThis->IHostAudio.pfnInit       = RT_CONCAT(a_NamePrefix,Init); \
+        pThis->IHostAudio.pfnShutdown   = RT_CONCAT(a_NamePrefix,Shutdown); \
+        pThis->IHostAudio.pfnInitIn     = RT_CONCAT(a_NamePrefix,InitIn); \
+        pThis->IHostAudio.pfnInitOut    = RT_CONCAT(a_NamePrefix,InitOut); \
+        pThis->IHostAudio.pfnControlOut = RT_CONCAT(a_NamePrefix,ControlOut); \
+        pThis->IHostAudio.pfnControlIn  = RT_CONCAT(a_NamePrefix,ControlIn); \
+        pThis->IHostAudio.pfnFiniIn     = RT_CONCAT(a_NamePrefix,FiniIn); \
+        pThis->IHostAudio.pfnFiniOut    = RT_CONCAT(a_NamePrefix,FiniOut); \
+        pThis->IHostAudio.pfnIsEnabled  = RT_CONCAT(a_NamePrefix,IsEnabled); \
+        pThis->IHostAudio.pfnPlayOut    = RT_CONCAT(a_NamePrefix,PlayOut); \
+        pThis->IHostAudio.pfnCaptureIn  = RT_CONCAT(a_NamePrefix,CaptureIn); \
+        pThis->IHostAudio.pfnGetConf    = RT_CONCAT(a_NamePrefix,GetConf); \
+    } while (0)
 
 /** Pointer to a host audio interface. */
 typedef struct PDMIHOSTAUDIO *PPDMIHOSTAUDIO;
@@ -681,7 +716,11 @@ typedef struct PDMIHOSTAUDIO
     DECLR3CALLBACKMEMBER(int, pfnGetConf, (PPDMIHOSTAUDIO pInterface, PPDMAUDIOBACKENDCFG pBackendCfg));
 
 } PDMIHOSTAUDIO;
+
+/** PDMIHOSTAUDIO interface ID. */
 #define PDMIHOSTAUDIO_IID                           "39feea4f-c824-4197-bcff-7d4a6ede7420"
 
-#endif /* ___VBox_vmm_pdmaudioifs_h */
+/** @} */
+
+#endif /* !___VBox_vmm_pdmaudioifs_h */
 
diff --git a/include/VBox/vmm/pdmblkcache.h b/include/VBox/vmm/pdmblkcache.h
index d5c9470..971bab2 100644
--- a/include/VBox/vmm/pdmblkcache.h
+++ b/include/VBox/vmm/pdmblkcache.h
@@ -65,9 +65,9 @@ typedef enum PDMBLKCACHEXFERDIR
 /**
  * Completion callback for drivers.
  *
- * @param   pDrvIns        The driver instance.
- * @param   pvUser         User argument given during request initiation.
- * @param   rc             The status code of the completed request.
+ * @param   pDrvIns         The driver instance.
+ * @param   pvUser          User argument given during request initiation.
+ * @param   rc              The status code of the completed request.
  */
 typedef DECLCALLBACK(void) FNPDMBLKCACHEXFERCOMPLETEDRV(PPDMDRVINS pDrvIns, void *pvUser, int rc);
 /** Pointer to a FNPDMBLKCACHEXFERCOMPLETEDRV(). */
@@ -76,27 +76,27 @@ typedef FNPDMBLKCACHEXFERCOMPLETEDRV *PFNPDMBLKCACHEXFERCOMPLETEDRV;
 /**
  * I/O enqueue callback for drivers.
  *
- * @param   pDrvIns        The driver instance.
- * @param   pvUser         User argument given during request initiation.
- * @param   rc             The status code of the completed request.
- */
-typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDRV(PPDMDRVINS pDrvIns,
-                                                      PDMBLKCACHEXFERDIR enmXferDir,
-                                                      uint64_t off, size_t cbXfer,
-                                                      PCRTSGBUF pcSgBuf, PPDMBLKCACHEIOXFER hIoXfer);
+ * @param   pDrvIns         The driver instance.
+ * @param   enmXferDir      Transfer direction.
+ * @param   off             Transfer offset.
+ * @param   cbXfer          Transfer size.
+ * @param   pSgBuf          Scather / gather buffer for the transfer.
+ * @param   hIoXfer         I/O transfer handle to ping on completion.
+ */
+typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDRV(PPDMDRVINS pDrvIns, PDMBLKCACHEXFERDIR enmXferDir,
+                                                      uint64_t off, size_t cbXfer, PCRTSGBUF pSgBuf, PPDMBLKCACHEIOXFER hIoXfer);
 /** Pointer to a FNPDMBLKCACHEXFERENQUEUEDRV(). */
 typedef FNPDMBLKCACHEXFERENQUEUEDRV *PFNPDMBLKCACHEXFERENQUEUEDRV;
 
 /**
  * Discard enqueue callback for drivers.
  *
- * @param   pDrvIns        The driver instance.
- * @param   paRanges       Ranges to discard.
- * @param   cRanges        Number of range entries.
- * @param   hIoXfer        I/O handle to return on completion.
+ * @param   pDrvIns         The driver instance.
+ * @param   paRanges        Ranges to discard.
+ * @param   cRanges         Number of range entries.
+ * @param   hIoXfer         I/O handle to return on completion.
  */
-typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDISCARDDRV(PPDMDRVINS pDrvIns,
-                                                             PCRTRANGE paRanges, unsigned cRanges,
+typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDISCARDDRV(PPDMDRVINS pDrvIns, PCRTRANGE paRanges, unsigned cRanges,
                                                              PPDMBLKCACHEIOXFER hIoXfer);
 /** Pointer to a FNPDMBLKCACHEXFERENQUEUEDISCARDDRV(). */
 typedef FNPDMBLKCACHEXFERENQUEUEDISCARDDRV *PFNPDMBLKCACHEXFERENQUEUEDISCARDDRV;
@@ -104,9 +104,9 @@ typedef FNPDMBLKCACHEXFERENQUEUEDISCARDDRV *PFNPDMBLKCACHEXFERENQUEUEDISCARDDRV;
 /**
  * Completion callback for devices.
  *
- * @param   pDrvIns        The device instance.
- * @param   pvUser         User argument given during request initiation.
- * @param   rc             The status code of the completed request.
+ * @param   pDrvIns         The device instance.
+ * @param   pvUser          User argument given during request initiation.
+ * @param   rc              The status code of the completed request.
  */
 typedef DECLCALLBACK(void) FNPDMBLKCACHEXFERCOMPLETEDEV(PPDMDEVINS pDevIns, void *pvUser, int rc);
 /** Pointer to a FNPDMBLKCACHEXFERCOMPLETEDEV(). */
@@ -115,27 +115,27 @@ typedef FNPDMBLKCACHEXFERCOMPLETEDEV *PFNPDMBLKCACHEXFERCOMPLETEDEV;
 /**
  * I/O enqueue callback for devices.
  *
- * @param   pDevIns        The device instance.
- * @param   pvUser         User argument given during request initiation.
- * @param   rc             The status code of the completed request.
- */
-typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDEV(PPDMDEVINS pDevIns,
-                                                      PDMBLKCACHEXFERDIR enmXferDir,
-                                                      uint64_t off, size_t cbXfer,
-                                                      PCRTSGBUF pcSgBuf, PPDMBLKCACHEIOXFER hIoXfer);
+ * @param   pDevIns         The device instance.
+ * @param   enmXferDir      Transfer direction.
+ * @param   off             Transfer offset.
+ * @param   cbXfer          Transfer size.
+ * @param   pSgBuf          Scather / gather buffer for the transfer.
+ * @param   hIoXfer         I/O transfer handle to ping on completion.
+ */
+typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDEV(PPDMDEVINS pDevIns, PDMBLKCACHEXFERDIR enmXferDir,
+                                                      uint64_t off, size_t cbXfer, PCRTSGBUF pSgBuf, PPDMBLKCACHEIOXFER hIoXfer);
 /** Pointer to a FNPDMBLKCACHEXFERENQUEUEDEV(). */
 typedef FNPDMBLKCACHEXFERENQUEUEDEV *PFNPDMBLKCACHEXFERENQUEUEDEV;
 
 /**
  * Discard enqueue callback for devices.
  *
- * @param   pDrvIns        The driver instance.
- * @param   paRanges       Ranges to discard.
- * @param   cRanges        Number of range entries.
- * @param   hIoXfer        I/O handle to return on completion.
+ * @param   pDrvIns         The driver instance.
+ * @param   paRanges        Ranges to discard.
+ * @param   cRanges         Number of range entries.
+ * @param   hIoXfer         I/O handle to return on completion.
  */
-typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDISCARDDEV(PPDMDEVINS pDevIns,
-                                                             PCRTRANGE paRanges, unsigned cRanges,
+typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDISCARDDEV(PPDMDEVINS pDevIns, PCRTRANGE paRanges, unsigned cRanges,
                                                              PPDMBLKCACHEIOXFER hIoXfer);
 /** Pointer to a FNPDMBLKCACHEXFERENQUEUEDISCARDDEV(). */
 typedef FNPDMBLKCACHEXFERENQUEUEDISCARDDEV *PFNPDMBLKCACHEXFERENQUEUEDISCARDDEV;
@@ -143,9 +143,9 @@ typedef FNPDMBLKCACHEXFERENQUEUEDISCARDDEV *PFNPDMBLKCACHEXFERENQUEUEDISCARDDEV;
 /**
  * Completion callback for drivers.
  *
- * @param   pDrvIns        The driver instance.
- * @param   pvUser         User argument given during request initiation.
- * @param   rc             The status code of the completed request.
+ * @param   pDrvIns         The driver instance.
+ * @param   pvUser          User argument given during request initiation.
+ * @param   rc              The status code of the completed request.
  */
 typedef DECLCALLBACK(void) FNPDMBLKCACHEXFERCOMPLETEINT(void *pvUserInt, void *pvUser, int rc);
 /** Pointer to a FNPDMBLKCACHEXFERCOMPLETEINT(). */
@@ -154,27 +154,27 @@ typedef FNPDMBLKCACHEXFERCOMPLETEINT *PFNPDMBLKCACHEXFERCOMPLETEINT;
 /**
  * I/O enqueue callback for drivers.
  *
- * @param   pDrvIns        The driver instance.
- * @param   pvUser         User argument given during request initiation.
- * @param   rc             The status code of the completed request.
- */
-typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEINT(void *pvUser,
-                                                      PDMBLKCACHEXFERDIR enmXferDir,
-                                                      uint64_t off, size_t cbXfer,
-                                                      PCRTSGBUF pcSgBuf, PPDMBLKCACHEIOXFER hIoXfer);
+ * @param   pDrvIns         The driver instance.
+ * @param   enmXferDir      Transfer direction.
+ * @param   off             Transfer offset.
+ * @param   cbXfer          Transfer size.
+ * @param   pSgBuf          Scather / gather buffer for the transfer.
+ * @param   hIoXfer         I/O transfer handle to ping on completion.
+ */
+typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEINT(void *pvUser, PDMBLKCACHEXFERDIR enmXferDir,
+                                                      uint64_t off, size_t cbXfer, PCRTSGBUF pSgBuf, PPDMBLKCACHEIOXFER hIoXfer);
 /** Pointer to a FNPDMBLKCACHEXFERENQUEUEINT(). */
 typedef FNPDMBLKCACHEXFERENQUEUEINT *PFNPDMBLKCACHEXFERENQUEUEINT;
 
 /**
  * Discard enqueue callback for VMM internal users.
  *
- * @param   pDrvIns        The driver instance.
- * @param   paRanges       Ranges to discard.
- * @param   cRanges        Number of range entries.
- * @param   hIoXfer        I/O handle to return on completion.
+ * @param   pDrvIns         The driver instance.
+ * @param   paRanges        Ranges to discard.
+ * @param   cRanges         Number of range entries.
+ * @param   hIoXfer         I/O handle to return on completion.
  */
-typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDISCARDINT(void *pvUser,
-                                                             PCRTRANGE paRanges, unsigned cRanges,
+typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDISCARDINT(void *pvUser, PCRTRANGE paRanges, unsigned cRanges,
                                                              PPDMBLKCACHEIOXFER hIoXfer);
 /** Pointer to a FNPDMBLKCACHEXFERENQUEUEDISCARDINT(). */
 typedef FNPDMBLKCACHEXFERENQUEUEDISCARDINT *PFNPDMBLKCACHEXFERENQUEUEDISCARDINT;
@@ -182,9 +182,9 @@ typedef FNPDMBLKCACHEXFERENQUEUEDISCARDINT *PFNPDMBLKCACHEXFERENQUEUEDISCARDINT;
 /**
  * Completion callback for USB.
  *
- * @param   pDrvIns        The driver instance.
- * @param   pvUser         User argument given during request initiation.
- * @param   rc             The status code of the completed request.
+ * @param   pDrvIns         The driver instance.
+ * @param   pvUser          User argument given during request initiation.
+ * @param   rc              The status code of the completed request.
  */
 typedef DECLCALLBACK(void) FNPDMBLKCACHEXFERCOMPLETEUSB(PPDMUSBINS pUsbIns, void *pvUser, int rc);
 /** Pointer to a FNPDMBLKCACHEXFERCOMPLETEUSB(). */
@@ -193,27 +193,27 @@ typedef FNPDMBLKCACHEXFERCOMPLETEUSB *PFNPDMBLKCACHEXFERCOMPLETEUSB;
 /**
  * I/O enqueue callback for drivers.
  *
- * @param   pDrvIns        The driver instance.
- * @param   pvUser         User argument given during request initiation.
- * @param   rc             The status code of the completed request.
- */
-typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEUSB(PPDMUSBINS pUsbIns,
-                                                      PDMBLKCACHEXFERDIR enmXferDir,
-                                                      uint64_t off, size_t cbXfer,
-                                                      PCRTSGBUF pcSgBuf, PPDMBLKCACHEIOXFER hIoXfer);
+ * @param   pDrvIns         The driver instance.
+ * @param   enmXferDir      Transfer direction.
+ * @param   off             Transfer offset.
+ * @param   cbXfer          Transfer size.
+ * @param   pSgBuf          Scather / gather buffer for the transfer.
+ * @param   hIoXfer         I/O transfer handle to ping on completion.
+ */
+typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEUSB(PPDMUSBINS pUsbIns, PDMBLKCACHEXFERDIR enmXferDir,
+                                                      uint64_t off, size_t cbXfer, PCRTSGBUF pSgBuf, PPDMBLKCACHEIOXFER hIoXfer);
 /** Pointer to a FNPDMBLKCACHEXFERENQUEUEUSB(). */
 typedef FNPDMBLKCACHEXFERENQUEUEUSB *PFNPDMBLKCACHEXFERENQUEUEUSB;
 
 /**
  * Discard enqueue callback for USB devices.
  *
- * @param   pUsbIns        The USB device instance.
- * @param   paRanges       Ranges to discard.
- * @param   cRanges        Number of range entries.
- * @param   hIoXfer        I/O handle to return on completion.
+ * @param   pUsbIns         The USB device instance.
+ * @param   paRanges        Ranges to discard.
+ * @param   cRanges         Number of range entries.
+ * @param   hIoXfer         I/O handle to return on completion.
  */
-typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDISCARDUSB(PPDMUSBINS pUsbIns,
-                                                             PCRTRANGE paRanges, unsigned cRanges,
+typedef DECLCALLBACK(int) FNPDMBLKCACHEXFERENQUEUEDISCARDUSB(PPDMUSBINS pUsbIns, PCRTRANGE paRanges, unsigned cRanges,
                                                              PPDMBLKCACHEIOXFER hIoXfer);
 /** Pointer to a FNPDMBLKCACHEXFERENQUEUEDISCARDUSB(). */
 typedef FNPDMBLKCACHEXFERENQUEUEDISCARDUSB *PFNPDMBLKCACHEXFERENQUEUEDISCARDUSB;
@@ -222,7 +222,7 @@ typedef FNPDMBLKCACHEXFERENQUEUEDISCARDUSB *PFNPDMBLKCACHEXFERENQUEUEDISCARDUSB;
  * Create a block cache user for a driver instance.
  *
  * @returns VBox status code.
- * @param   pVM                      Pointer to the shared VM structure.
+ * @param   pVM                      The cross context VM structure.
  * @param   pDrvIns                  The driver instance.
  * @param   ppBlkCache               Where to store the handle to the block cache.
  * @param   pfnXferComplete          The I/O transfer complete callback.
@@ -240,7 +240,7 @@ VMMR3DECL(int) PDMR3BlkCacheRetainDriver(PVM pVM, PPDMDRVINS pDrvIns, PPPDMBLKCA
  * Create a block cache user for a device instance.
  *
  * @returns VBox status code.
- * @param   pVM                      Pointer to the shared VM structure.
+ * @param   pVM                      The cross context VM structure.
  * @param   pDevIns                  The device instance.
  * @param   ppBlkCache               Where to store the handle to the block cache.
  * @param   pfnXferComplete          The I/O transfer complete callback.
@@ -258,7 +258,7 @@ VMMR3DECL(int) PDMR3BlkCacheRetainDevice(PVM pVM, PPDMDEVINS pDevIns, PPPDMBLKCA
  * Create a block cache user for a USB instance.
  *
  * @returns VBox status code.
- * @param   pVM                      Pointer to the shared VM structure.
+ * @param   pVM                      The cross context VM structure.
  * @param   pUsbIns                  The USB device instance.
  * @param   ppBlkCache               Where to store the handle to the block cache.
  * @param   pfnXferComplete          The I/O transfer complete callback.
@@ -276,7 +276,7 @@ VMMR3DECL(int) PDMR3BlkCacheRetainUsb(PVM pVM, PPDMUSBINS pUsbIns, PPPDMBLKCACHE
  * Create a block cache user for internal use by VMM.
  *
  * @returns VBox status code.
- * @param   pVM                      Pointer to the shared VM structure.
+ * @param   pVM                      The cross context VM structure.
  * @param   pvUser                   Opaque user data.
  * @param   ppBlkCache               Where to store the handle to the block cache.
  * @param   pfnXferComplete          The I/O transfer complete callback.
@@ -302,7 +302,7 @@ VMMR3DECL(void) PDMR3BlkCacheRelease(PPDMBLKCACHE pBlkCache);
  * Releases all block cache handles for a device instance.
  *
  * @returns nothing.
- * @param   pVM             Pointer to the shared VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         The device instance.
  */
 VMMR3DECL(void) PDMR3BlkCacheReleaseDevice(PVM pVM, PPDMDEVINS pDevIns);
@@ -311,7 +311,7 @@ VMMR3DECL(void) PDMR3BlkCacheReleaseDevice(PVM pVM, PPDMDEVINS pDevIns);
  * Releases all block cache handles for a driver instance.
  *
  * @returns nothing.
- * @param   pVM             Pointer to the shared VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   pDrvIns         The driver instance.
  */
 VMMR3DECL(void) PDMR3BlkCacheReleaseDriver(PVM pVM, PPDMDRVINS pDrvIns);
@@ -320,7 +320,7 @@ VMMR3DECL(void) PDMR3BlkCacheReleaseDriver(PVM pVM, PPDMDRVINS pDrvIns);
  * Releases all block cache handles for a USB device instance.
  *
  * @returns nothing.
- * @param   pVM             Pointer to the shared VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   pUsbIns         The USB device instance.
  */
 VMMR3DECL(void) PDMR3BlkCacheReleaseUsb(PVM pVM, PPDMUSBINS pUsbIns);
@@ -329,37 +329,33 @@ VMMR3DECL(void) PDMR3BlkCacheReleaseUsb(PVM pVM, PPDMUSBINS pUsbIns);
  * Creates a read task on the given endpoint.
  *
  * @returns VBox status code.
- * @param   pEndpoint       The file endpoint to read from.
+ * @param   pBlkCache       The cache instance.
  * @param   off             Where to start reading from.
- * @param   paSegments      Scatter gather list to store the data in.
- * @param   cSegments       Number of segments in the list.
+ * @param   pSgBuf          Scatter gather buffer store the data in.
  * @param   cbRead          The overall number of bytes to read.
  * @param   pvUser          Opaque user data returned in the completion callback
  *                          upon completion of the read.
  */
-VMMR3DECL(int) PDMR3BlkCacheRead(PPDMBLKCACHE pBlkCache, uint64_t off,
-                                 PCRTSGBUF pcSgBuf, size_t cbRead, void *pvUser);
+VMMR3DECL(int) PDMR3BlkCacheRead(PPDMBLKCACHE pBlkCache, uint64_t off, PCRTSGBUF pSgBuf, size_t cbRead, void *pvUser);
 
 /**
  * Creates a write task on the given endpoint.
  *
  * @returns VBox status code.
- * @param   pEndpoint       The file endpoint to write to.
+ * @param   pBlkCache       The cache instance.
  * @param   off             Where to start writing at.
- * @param   paSegments      Scatter gather list of the data to write.
- * @param   cSegments       Number of segments in the list.
+ * @param   pSgBuf          Scatter gather buffer gather the data from.
  * @param   cbWrite         The overall number of bytes to write.
  * @param   pvUser          Opaque user data returned in the completion callback
  *                          upon completion of the task.
  */
-VMMR3DECL(int) PDMR3BlkCacheWrite(PPDMBLKCACHE pBlkCache, uint64_t off,
-                                  PCRTSGBUF pcSgBuf, size_t cbWrite, void *pvUser);
+VMMR3DECL(int) PDMR3BlkCacheWrite(PPDMBLKCACHE pBlkCache, uint64_t off, PCRTSGBUF pSgBuf, size_t cbWrite, void *pvUser);
 
 /**
  * Creates a flush task on the given endpoint.
  *
  * @returns VBox status code.
- * @param   pEndpoint       The file endpoint to flush.
+ * @param   pBlkCache       The cache instance.
  * @param   pvUser          Opaque user data returned in the completion callback
  *                          upon completion of the task.
  */
@@ -369,7 +365,7 @@ VMMR3DECL(int) PDMR3BlkCacheFlush(PPDMBLKCACHE pBlkCache, void *pvUser);
  * Discards the given ranges from the cache.
  *
  * @returns VBox status code.
- * @param   pEndpoint       The file endpoint to flush.
+ * @param   pBlkCache       The cache instance.
  * @param   paRanges        Array of ranges to discard.
  * @param   cRanges         Number of ranges in the array.
  * @param   pvUser          Opaque user data returned in the completion callback
@@ -388,9 +384,11 @@ VMMR3DECL(int) PDMR3BlkCacheDiscard(PPDMBLKCACHE pBlkCache, PCRTRANGE paRanges,
 VMMR3DECL(void) PDMR3BlkCacheIoXferComplete(PPDMBLKCACHE pBlkCache, PPDMBLKCACHEIOXFER hIoXfer, int rcIoXfer);
 
 /**
- * Suspends the block cache. The cache waits until all I/O transfers completed
- * and stops to enqueue new requests after the call returned but will not accept
- * reads, write or flushes either.
+ * Suspends the block cache.
+ *
+ * The cache waits until all I/O transfers completed and stops to enqueue new
+ * requests after the call returned but will not accept reads, write or flushes
+ * either.
  *
  * @returns VBox status code.
  * @param   pBlkCache       The cache instance.
@@ -406,8 +404,9 @@ VMMR3DECL(int) PDMR3BlkCacheSuspend(PPDMBLKCACHE pBlkCache);
 VMMR3DECL(int) PDMR3BlkCacheResume(PPDMBLKCACHE pBlkCache);
 
 /**
- * Clears the block cache and removes all entries. The cache waits until all
- * I/O transfers completed.
+ * Clears the block cache and removes all entries.
+ *
+ * The cache waits until all I/O transfers completed.
  *
  * @returns VBox status code.
  * @param   pBlkCache       The cache instance.
diff --git a/include/VBox/vmm/pdmcardreaderinfs.h b/include/VBox/vmm/pdmcardreaderinfs.h
index ba4f543..df555d8 100644
--- a/include/VBox/vmm/pdmcardreaderinfs.h
+++ b/include/VBox/vmm/pdmcardreaderinfs.h
@@ -1,6 +1,6 @@
 /* $Id: pdmcardreaderinfs.h $ */
 /** @file
- * cardreaderinfs - interface between Usb Card Reader device and its driver.
+ * cardreaderinfs - interface between USB Card Reader device and its driver.
  */
 
 /*
@@ -30,20 +30,26 @@
 #include <VBox/types.h>
 
 
+/** @defgroup grp_pdm_ifs_cardreader    PDM USB Card Reader Interfaces
+ * @ingroup grp_pdm_interfaces
+ * @{
+ */
+
+
 typedef struct PDMICARDREADER_IO_REQUEST
 {
-    uint32_t u32Protocol;  /* Protocol identifier */
-    uint32_t cbPciLength;  /* Protocol Control Information Length */
+    uint32_t u32Protocol;       /**< Protocol identifier */
+    uint32_t cbPciLength;       /**< Protocol Control Information Length */
     /* 'cbPciLength - 8' bytes of control info may follow. */
 } PDMICARDREADER_IO_REQUEST;
 
 typedef struct PDMICARDREADER_READERSTATE
 {
     char *pszReaderName;
-    uint32_t u32CurrentState; /* Current state of reader at time of call. */
-    uint32_t u32EventState;   /* State of reader after state change */
-    uint32_t cbAtr;           /* Number of bytes in the returned ATR. */
-    uint8_t au8Atr[36];       /* Atr of inserted card, (extra alignment bytes) */
+    uint32_t u32CurrentState;   /**< Current state of reader at time of call. */
+    uint32_t u32EventState;     /**< State of reader after state change */
+    uint32_t cbAtr;             /**< Number of bytes in the returned ATR. */
+    uint8_t au8Atr[36];         /**< Atr of inserted card, (extra alignment bytes) */
 } PDMICARDREADER_READERSTATE;
 
 
@@ -111,5 +117,7 @@ struct PDMICARDREADERUP
     DECLR3CALLBACKMEMBER(int, pfnSetAttrib,(PPDMICARDREADERUP pInterface, void *pvUser, int32_t lSCardRc, uint32_t u32AttribId));
 };
 
+/** @} */
+
 #endif
 
diff --git a/include/VBox/vmm/pdmdev.h b/include/VBox/vmm/pdmdev.h
index b302e66..1f083ca 100644
--- a/include/VBox/vmm/pdmdev.h
+++ b/include/VBox/vmm/pdmdev.h
@@ -63,7 +63,7 @@ RT_C_DECLS_BEGIN
  * @param   pCfg        Configuration node handle for the driver.  This is
  *                      expected to be in high demand in the constructor and is
  *                      therefore passed as an argument.  When using it at other
- *                      times, it can be found in pDrvIns->pCfg.
+ *                      times, it can be found in pDevIns->pCfg.
  */
 typedef DECLCALLBACK(int)   FNPDMDEVCONSTRUCT(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfg);
 /** Pointer to a FNPDMDEVCONSTRUCT() function. */
@@ -1498,7 +1498,7 @@ typedef struct PDMAPICHLPR3
      *
      * @param   pDevIns         The APIC device instance.
      * @param   idCpu           Virtual CPU to perform SIPI on
-     * @param   iVector         SIPI vector
+     * @param   uVector         SIPI vector
      */
     DECLR3CALLBACKMEMBER(void,    pfnSendSipi,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t uVector));
 
@@ -1913,7 +1913,8 @@ typedef struct PDMHPETHLPR3
      * @returns VINF_SUCCESS on success.
      * @returns rc if we failed to set legacy mode.
      * @param   pDevIns         Device instance of the HPET.
-     * @param   fActivate       Activate or deactivate legacy mode.
+     * @param   iIrq            IRQ number to set.
+     * @param   iLevel          IRQ level. See the PDM_IRQ_LEVEL_* \#defines.
      */
     DECLR3CALLBACKMEMBER(int, pfnSetIrq,(PPDMDEVINS pDevIns, int iIrq, int iLevel));
 
@@ -2327,7 +2328,7 @@ typedef struct PDMDEVHLPR3
                                                uint32_t fFlags, const char *pszDesc));
 
     /**
-     * Register a Memory Mapped I/O (MMIO) region for GC.
+     * Register a Memory Mapped I/O (MMIO) region for RC.
      *
      * These callbacks are for the raw-mode context (RC). Register ring-3 context
      * (R3) handlers before guest context handlers! There must be a R3 handler for
@@ -2362,7 +2363,6 @@ typedef struct PDMDEVHLPR3
      * @param   pszWrite            Name of the RC function which is gonna handle Write operations.
      * @param   pszRead             Name of the RC function which is gonna handle Read operations.
      * @param   pszFill             Name of the RC function which is gonna handle Fill/memset operations. (optional)
-     * @param   pszDesc             Obsolete. NULL is fine.
      * @remarks Caller enters the device critical section prior to invoking the
      *          registered callback methods.
      */
@@ -2527,9 +2527,6 @@ typedef struct PDMDEVHLPR3
      *
      * @returns VBox status.
      * @param   pDevIns             The device instance.
-     * @param   pszName             Data unit name.
-     * @param   uInstance           The instance identifier of the data unit.
-     *                              This must together with the name be unique.
      * @param   uVersion            Data layout version number.
      * @param   cbGuess             The approximate amount of data in the unit.
      *                              Only for progress indicators.
@@ -2570,7 +2567,8 @@ typedef struct PDMDEVHLPR3
      * @remarks Caller enters the device critical section prior to invoking the
      *          callback.
      */
-    DECLR3CALLBACKMEMBER(int, pfnTMTimerCreate,(PPDMDEVINS pDevIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback, void *pvUser, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer));
+    DECLR3CALLBACKMEMBER(int, pfnTMTimerCreate,(PPDMDEVINS pDevIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback,
+                                                void *pvUser, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer));
 
     /**
      * Get the real world UTC time adjusted for VM lag, user offset and warpdrive.
@@ -2622,7 +2620,7 @@ typedef struct PDMDEVHLPR3
      *          must fall back on using PGMR3PhysWriteExternal.
      * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
      *
-     * @param   pVM                 The VM handle.
+     * @param   pDevIns             The device instance.
      * @param   GCPhys              The guest physical address of the page that
      *                              should be mapped.
      * @param   fFlags              Flags reserved for future use, MBZ.
@@ -2636,7 +2634,8 @@ typedef struct PDMDEVHLPR3
      *          task to an EMT.
      * @thread  Any.
      */
-    DECLR3CALLBACKMEMBER(int, pfnPhysGCPhys2CCPtr,(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, uint32_t fFlags, void **ppv, PPGMPAGEMAPLOCK pLock));
+    DECLR3CALLBACKMEMBER(int, pfnPhysGCPhys2CCPtr,(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, uint32_t fFlags, void **ppv,
+                                                   PPGMPAGEMAPLOCK pLock));
 
     /**
      * Requests the mapping of a guest page into ring-3, external threads.
@@ -2663,7 +2662,8 @@ typedef struct PDMDEVHLPR3
      * @remark  Avoid calling this API from within critical sections.
      * @thread  Any.
      */
-    DECLR3CALLBACKMEMBER(int, pfnPhysGCPhys2CCPtrReadOnly,(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, uint32_t fFlags, void const **ppv, PPGMPAGEMAPLOCK pLock));
+    DECLR3CALLBACKMEMBER(int, pfnPhysGCPhys2CCPtrReadOnly,(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, uint32_t fFlags,
+                                                           void const **ppv, PPGMPAGEMAPLOCK pLock));
 
     /**
      * Release the mapping of a guest page.
@@ -2764,7 +2764,7 @@ typedef struct PDMDEVHLPR3
      * @returns rc.
      * @param   pDevIns             The device instance.
      * @param   rc                  VBox status code.
-     * @param   RT_SRC_POS_DECL     Use RT_SRC_POS.
+     * @param   SRC_POS             Use RT_SRC_POS.
      * @param   pszFormat           Error message format string.
      * @param   ...                 Error message arguments.
      */
@@ -2777,7 +2777,7 @@ typedef struct PDMDEVHLPR3
      * @returns rc.
      * @param   pDevIns             The device instance.
      * @param   rc                  VBox status code.
-     * @param   RT_SRC_POS_DECL     Use RT_SRC_POS.
+     * @param   SRC_POS             Use RT_SRC_POS.
      * @param   pszFormat           Error message format string.
      * @param   va                  Error message arguments.
      */
@@ -2970,9 +2970,10 @@ typedef struct PDMDEVHLPR3
      *                              PCI config read function. This way, user can decide when (and if)
      *                              to call default PCI config read function. Can be NULL.
      * @param   pfnWrite            Pointer to the user defined PCI config write function.
-     * @param   pfnWriteOld         Pointer to function pointer which will receive the old (default)
-     *                              PCI config write function. This way, user can decide when (and if)
-     *                              to call default PCI config write function. Can be NULL.
+     * @param   ppfnWriteOld        Pointer to function pointer which will receive
+     *                              the old (default) PCI config write function.
+     *                              This way, user can decide when (and if) to call
+     *                              default PCI config write function. Can be NULL.
      * @remarks The callbacks will be invoked holding the PDM lock. The device lock
      *          is NOT take because that is very likely be a lock order violation.
      * @thread  EMT
@@ -3096,7 +3097,7 @@ typedef struct PDMDEVHLPR3
      * @returns VBox status code.
      * @param   pDevIns             The device instance.
      * @param   pCritSect           Pointer to the critical section.
-     * @param   RT_SRC_POS_DECL     Use RT_SRC_POS.
+     * @param   SRC_POS             Use RT_SRC_POS.
      * @param   pszNameFmt          Format string for naming the critical section.
      *                              For statistics and lock validation.
      * @param   va                  Arguments for the format string.
@@ -3258,7 +3259,7 @@ typedef struct PDMDEVHLPR3
      *
      * @returns VBox status code.
      * @param   pDevIns             The device instance.
-     * @param   pHpetReg            Pointer to a raw PCI registration structure.
+     * @param   pPciRawReg          Pointer to a raw PCI registration structure.
      * @param   ppPciRawHlpR3       Where to store the pointer to the raw PCI
      *                              device helpers.
      */
@@ -3654,7 +3655,7 @@ typedef struct PDMDEVHLPR3
      * This is intended for working with the semaphore API.
      *
      * @returns Support driver session handle.
-     * @param   pDrvIns         The driver instance.
+     * @param   pDevIns             The device instance.
      */
     DECLR3CALLBACKMEMBER(PSUPDRVSESSION, pfnGetSupDrvSession,(PPDMDEVINS pDevIns));
 
@@ -3772,9 +3773,9 @@ typedef struct PDMDEVHLPRC
      * Set the VM error message
      *
      * @returns rc.
-     * @param   pDrvIns         Driver instance.
+     * @param   pDevIns         Driver instance.
      * @param   rc              VBox status code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   ...             Error message arguments.
      */
@@ -3785,9 +3786,9 @@ typedef struct PDMDEVHLPRC
      * Set the VM error message
      *
      * @returns rc.
-     * @param   pDrvIns         Driver instance.
+     * @param   pDevIns         Driver instance.
      * @param   rc              VBox status code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   va              Error message arguments.
      */
@@ -4001,9 +4002,9 @@ typedef struct PDMDEVHLPR0
      * Set the VM error message
      *
      * @returns rc.
-     * @param   pDrvIns         Driver instance.
+     * @param   pDevIns         Driver instance.
      * @param   rc              VBox status code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   ...             Error message arguments.
      */
@@ -4014,9 +4015,9 @@ typedef struct PDMDEVHLPR0
      * Set the VM error message
      *
      * @returns rc.
-     * @param   pDrvIns         Driver instance.
+     * @param   pDevIns         Driver instance.
      * @param   rc              VBox status code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   va              Error message arguments.
      */
@@ -4406,7 +4407,7 @@ DECLINLINE(int) PDMDevHlpMMIORegister(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart,
 }
 
 /**
- * Register a Memory Mapped I/O (MMIO) region for GC.
+ * Register a Memory Mapped I/O (MMIO) region for RC.
  *
  * These callbacks are for the raw-mode context (RC). Register ring-3 context
  * (R3) handlers before guest context handlers! There must be a R3 handler for
@@ -4427,7 +4428,21 @@ DECLINLINE(int) PDMDevHlpMMIORegisterRC(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart
 }
 
 /**
- * @copydoc PDMDEVHLPR3::pfnMMIORegisterR0
+ * Register a Memory Mapped I/O (MMIO) region for R0.
+ *
+ * These callbacks are for the ring-0 host context (R0).  Register ring-3
+ * constext (R3) handlers before R0 handlers!  There must be a R3 handler for
+ * every R0 handler!
+ *
+ * @returns VBox status.
+ * @param   pDevIns             The device instance to register the MMIO with.
+ * @param   GCPhysStart         First physical address in the range.
+ * @param   cbRange             The size of the range (in bytes).
+ * @param   pvUser              User argument. (if pointer, then it must be in locked memory!)
+ * @param   pszWrite            Name of the RC function which is gonna handle Write operations.
+ * @param   pszRead             Name of the RC function which is gonna handle Read operations.
+ * @remarks Caller enters the device critical section prior to invoking the
+ *          registered callback methods.
  */
 DECLINLINE(int) PDMDevHlpMMIORegisterR0(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, uint32_t cbRange, RTR0PTR pvUser,
                                         const char *pszWrite, const char *pszRead)
@@ -4450,7 +4465,7 @@ DECLINLINE(int) PDMDevHlpMMIORegisterEx(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart
  * @copydoc PDMDEVHLPR3::pfnMMIORegisterRC
  */
 DECLINLINE(int) PDMDevHlpMMIORegisterRCEx(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, uint32_t cbRange, RTRCPTR pvUser,
-                                        const char *pszWrite, const char *pszRead, const char *pszFill)
+                                          const char *pszWrite, const char *pszRead, const char *pszFill)
 {
     return pDevIns->pHlpR3->pfnMMIORegisterRC(pDevIns, GCPhysStart, cbRange, pvUser, pszWrite, pszRead, pszFill);
 }
@@ -4459,7 +4474,7 @@ DECLINLINE(int) PDMDevHlpMMIORegisterRCEx(PPDMDEVINS pDevIns, RTGCPHYS GCPhysSta
  * @copydoc PDMDEVHLPR3::pfnMMIORegisterR0
  */
 DECLINLINE(int) PDMDevHlpMMIORegisterR0Ex(PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, uint32_t cbRange, RTR0PTR pvUser,
-                                        const char *pszWrite, const char *pszRead, const char *pszFill)
+                                          const char *pszWrite, const char *pszRead, const char *pszFill)
 {
     return pDevIns->pHlpR3->pfnMMIORegisterR0(pDevIns, GCPhysStart, cbRange, pvUser, pszWrite, pszRead, pszFill);
 }
@@ -4589,9 +4604,9 @@ DECLINLINE(int) PDMDevHlpSSMRegisterEx(PPDMDEVINS pDevIns, uint32_t uVersion, si
                                        PFNSSMDEVLOADPREP pfnLoadPrep, PFNSSMDEVLOADEXEC pfnLoadExec, PFNSSMDEVLOADDONE pfnLoadDone)
 {
     return pDevIns->pHlpR3->pfnSSMRegister(pDevIns, uVersion, cbGuess, pszBefore,
-                                              pfnLivePrep, pfnLiveExec, pfnLiveVote,
-                                              pfnSavePrep, pfnSaveExec, pfnSaveDone,
-                                              pfnLoadPrep, pfnLoadExec, pfnLoadDone);
+                                           pfnLivePrep, pfnLiveExec, pfnLiveVote,
+                                           pfnSavePrep, pfnSaveExec, pfnSaveDone,
+                                           pfnLoadPrep, pfnLoadExec, pfnLoadDone);
 }
 
 /**
@@ -4642,7 +4657,8 @@ DECLINLINE(int) PDMDevHlpPhysGCPhys2CCPtr(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, u
 /**
  * @copydoc PDMDEVHLPR3::pfnPhysGCPhys2CCPtrReadOnly
  */
-DECLINLINE(int) PDMDevHlpPhysGCPhys2CCPtrReadOnly(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, uint32_t fFlags, void const **ppv, PPGMPAGEMAPLOCK pLock)
+DECLINLINE(int) PDMDevHlpPhysGCPhys2CCPtrReadOnly(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, uint32_t fFlags, void const **ppv,
+                                                  PPGMPAGEMAPLOCK pLock)
 {
     return pDevIns->CTX_SUFF(pHlp)->pfnPhysGCPhys2CCPtrReadOnly(pDevIns, GCPhys, fFlags, ppv, pLock);
 }
@@ -4755,7 +4771,7 @@ DECLINLINE(int) RT_IPRT_FORMAT_ATTR(4, 5) PDMDevHlpVMSetRuntimeError(PPDMDEVINS
  * @returns VBox status code which must be passed up to the VMM.  This will be
  *          VINF_SUCCESS in non-strict builds.
  * @param   pDevIns             The device instance.
- * @param   RT_SRC_POS_DECL     Use RT_SRC_POS.
+ * @param   SRC_POS             Use RT_SRC_POS.
  * @param   pszFormat           Message. (optional)
  * @param   ...                 Message parameters.
  */
@@ -4837,7 +4853,8 @@ DECLINLINE(int) PDMDevHlpPCIRegister(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev)
 /**
  * @copydoc PDMDEVHLPR3::pfnPCIIORegionRegister
  */
-DECLINLINE(int) PDMDevHlpPCIIORegionRegister(PPDMDEVINS pDevIns, int iRegion, uint32_t cbRegion, PCIADDRESSSPACE enmType, PFNPCIIOREGIONMAP pfnCallback)
+DECLINLINE(int) PDMDevHlpPCIIORegionRegister(PPDMDEVINS pDevIns, int iRegion, uint32_t cbRegion,
+                                             PCIADDRESSSPACE enmType, PFNPCIIOREGIONMAP pfnCallback)
 {
     return pDevIns->pHlpR3->pfnPCIIORegionRegister(pDevIns, iRegion, cbRegion, enmType, pfnCallback);
 }
@@ -4937,7 +4954,7 @@ DECLINLINE(int) PDMDevHlpQueueCreate(PPDMDEVINS pDevIns, size_t cbItem, uint32_t
  * @returns VBox status code.
  * @param   pDevIns             The device instance.
  * @param   pCritSect           Pointer to the critical section.
- * @param   RT_SRC_POS_DECL     Use RT_SRC_POS.
+ * @param   SRC_POS             Use RT_SRC_POS.
  * @param   pszNameFmt          Format string for naming the critical section.
  *                              For statistics and lock validation.
  * @param   ...                 Arguments for the format string.
@@ -5051,7 +5068,7 @@ DECLINLINE(int) PDMDevHlpAPICRegister(PPDMDEVINS pDevIns, PPDMAPICREG pApicReg,
 }
 
 /**
- * @copydoc PDMDEVHLPR3::pfn
+ * @copydoc PDMDEVHLPR3::pfnIOAPICRegister
  */
 DECLINLINE(int) PDMDevHlpIOAPICRegister(PPDMDEVINS pDevIns, PPDMIOAPICREG pIoApicReg, PCPDMIOAPICHLPR3 *ppIoApicHlpR3)
 {
@@ -5147,7 +5164,7 @@ DECLINLINE(int) PDMDevHlpCMOSRead(PPDMDEVINS pDevIns, unsigned iReg, uint8_t *pu
 }
 
 /**
- * @copydoc PDMDEVHLP::pfnCallR0
+ * @copydoc PDMDEVHLPR3::pfnCallR0
  */
 DECLINLINE(int) PDMDevHlpCallR0(PPDMDEVINS pDevIns, uint32_t uOperation, uint64_t u64Arg)
 {
@@ -5155,7 +5172,7 @@ DECLINLINE(int) PDMDevHlpCallR0(PPDMDEVINS pDevIns, uint32_t uOperation, uint64_
 }
 
 /**
- * @copydoc PDMDEVHLP::pfnVMGetSuspendReason
+ * @copydoc PDMDEVHLPR3::pfnVMGetSuspendReason
  */
 DECLINLINE(VMSUSPENDREASON) PDMDevHlpVMGetSuspendReason(PPDMDEVINS pDevIns)
 {
@@ -5163,7 +5180,7 @@ DECLINLINE(VMSUSPENDREASON) PDMDevHlpVMGetSuspendReason(PPDMDEVINS pDevIns)
 }
 
 /**
- * @copydoc PDMDEVHLP::pfnVMGetResumeReason
+ * @copydoc PDMDEVHLPR3::pfnVMGetResumeReason
  */
 DECLINLINE(VMRESUMEREASON) PDMDevHlpVMGetResumeReason(PPDMDEVINS pDevIns)
 {
diff --git a/include/VBox/vmm/pdmdrv.h b/include/VBox/vmm/pdmdrv.h
index 85b3f14..c147b97 100644
--- a/include/VBox/vmm/pdmdrv.h
+++ b/include/VBox/vmm/pdmdrv.h
@@ -576,7 +576,7 @@ typedef struct PDMDRVHLPRC
      * @returns rc.
      * @param   pDrvIns         Driver instance.
      * @param   rc              VBox status code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   ...             Error message arguments.
      */
@@ -589,7 +589,7 @@ typedef struct PDMDRVHLPRC
      * @returns rc.
      * @param   pDrvIns         Driver instance.
      * @param   rc              VBox status code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   va              Error message arguments.
      */
@@ -676,7 +676,7 @@ typedef struct PDMDRVHLPR0
      * @returns rc.
      * @param   pDrvIns         Driver instance.
      * @param   rc              VBox status code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   ...             Error message arguments.
      */
@@ -689,7 +689,7 @@ typedef struct PDMDRVHLPR0
      * @returns rc.
      * @param   pDrvIns         Driver instance.
      * @param   rc              VBox status code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   va              Error message arguments.
      */
@@ -846,7 +846,7 @@ typedef struct PDMDRVHLPR3
      * @returns rc.
      * @param   pDrvIns         Driver instance.
      * @param   rc              VBox status code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   ...             Error message arguments.
      */
@@ -859,7 +859,7 @@ typedef struct PDMDRVHLPR3
      * @returns rc.
      * @param   pDrvIns         Driver instance.
      * @param   rc              VBox status code.
-     * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+     * @param   SRC_POS         Use RT_SRC_POS.
      * @param   pszFormat       Error message format string.
      * @param   va              Error message arguments.
      */
@@ -1255,15 +1255,13 @@ typedef struct PDMDRVHLPR3
      * @returns VBox status code.
      * @param   pDrvIns             The driver instance.
      * @param   pCritSect           Pointer to the critical section.
-     * @param   RT_SRC_POS_DECL     Use RT_SRC_POS.
+     * @param   SRC_POS             Use RT_SRC_POS.
      * @param   pszName             The base name of the critical section.  Will be
      *                              mangeled with the instance number.  For
      *                              statistics and lock validation.
-     * @param   va                  Arguments for the format string.
      * @thread  EMT
      */
-    DECLR3CALLBACKMEMBER(int, pfnCritSectInit,(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect,
-                                               RT_SRC_POS_DECL, const char *pszName));
+    DECLR3CALLBACKMEMBER(int, pfnCritSectInit,(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect, RT_SRC_POS_DECL, const char *pszName));
 
     /**
      * Call the ring-0 request handler routine of the driver.
@@ -1300,11 +1298,12 @@ typedef struct PDMDRVHLPR3
      * Creates a block cache for a driver driver instance.
      *
      * @returns VBox status code.
-     * @param   pDrvIns         The driver instance.
-     * @param   ppBlkCache      Where to store the handle to the block cache.
-     * @param   pfnXferComplete The I/O transfer complete callback.
-     * @param   pfnXferEnqueue  The I/O request enqueue callback.
-     * @param   pcszId          Unique ID used to identify the user.
+     * @param   pDrvIns             The driver instance.
+     * @param   ppBlkCache          Where to store the handle to the block cache.
+     * @param   pfnXferComplete     The I/O transfer complete callback.
+     * @param   pfnXferEnqueue      The I/O request enqueue callback.
+     * @param   pfnXferEnqueueDiscard   The discard request enqueue callback.
+     * @param   pcszId              Unique ID used to identify the user.
      */
     DECLR3CALLBACKMEMBER(int, pfnBlkCacheRetain, (PPDMDRVINS pDrvIns, PPPDMBLKCACHE ppBlkCache,
                                                   PFNPDMBLKCACHEXFERCOMPLETEDRV pfnXferComplete,
@@ -1353,7 +1352,7 @@ typedef struct PDMDRVHLPR3
 
 
 /**
- * @copydoc PDMDRVHLP::pfnVMSetError
+ * @copydoc PDMDRVHLPR3::pfnVMSetError
  */
 DECLINLINE(int)  RT_IPRT_FORMAT_ATTR(6, 7) PDMDrvHlpVMSetError(PPDMDRVINS pDrvIns, const int rc, RT_SRC_POS_DECL,
                                                                const char *pszFormat, ...)
@@ -1372,7 +1371,7 @@ DECLINLINE(int)  RT_IPRT_FORMAT_ATTR(6, 7) PDMDrvHlpVMSetError(PPDMDRVINS pDrvIn
     PDMDrvHlpVMSetError(pDrvIns, rc, RT_SRC_POS, "%s", pszError)
 
 /**
- * @copydoc PDMDRVHLP::pfnVMSetErrorV
+ * @copydoc PDMDRVHLPR3::pfnVMSetErrorV
  */
 DECLINLINE(int)  RT_IPRT_FORMAT_ATTR(6, 0) PDMDrvHlpVMSetErrorV(PPDMDRVINS pDrvIns, const int rc, RT_SRC_POS_DECL,
                                                                 const char *pszFormat, va_list va)
@@ -1382,7 +1381,7 @@ DECLINLINE(int)  RT_IPRT_FORMAT_ATTR(6, 0) PDMDrvHlpVMSetErrorV(PPDMDRVINS pDrvI
 
 
 /**
- * @copydoc PDMDRVHLP::pfnVMSetRuntimeError
+ * @copydoc PDMDRVHLPR3::pfnVMSetRuntimeError
  */
 DECLINLINE(int)  RT_IPRT_FORMAT_ATTR(4, 5) PDMDrvHlpVMSetRuntimeError(PPDMDRVINS pDrvIns, uint32_t fFlags, const char *pszErrorId,
                                                                       const char *pszFormat, ...)
@@ -1402,7 +1401,7 @@ DECLINLINE(int)  RT_IPRT_FORMAT_ATTR(4, 5) PDMDrvHlpVMSetRuntimeError(PPDMDRVINS
     PDMDrvHlpVMSetRuntimeError(pDrvIns, fFlags, pszErrorId, "%s", pszError)
 
 /**
- * @copydoc PDMDRVHLP::pfnVMSetRuntimeErrorV
+ * @copydoc PDMDRVHLPR3::pfnVMSetRuntimeErrorV
  */
 DECLINLINE(int)  RT_IPRT_FORMAT_ATTR(4, 0) PDMDrvHlpVMSetRuntimeErrorV(PPDMDRVINS pDrvIns, uint32_t fFlags,
                                                                        const char *pszErrorId,  const char *pszFormat, va_list va)
@@ -1431,7 +1430,7 @@ DECLINLINE(int)  RT_IPRT_FORMAT_ATTR(4, 0) PDMDrvHlpVMSetRuntimeErrorV(PPDMDRVIN
 #endif
 
 /**
- * @copydoc PDMDRVHLP::pfnFTSetCheckpoint
+ * @copydoc PDMDRVHLPR3::pfnFTSetCheckpoint
  */
 DECLINLINE(int) PDMDrvHlpFTSetCheckpoint(PPDMDRVINS pDrvIns, FTMCHECKPOINTTYPE enmType)
 {
@@ -1442,7 +1441,7 @@ DECLINLINE(int) PDMDrvHlpFTSetCheckpoint(PPDMDRVINS pDrvIns, FTMCHECKPOINTTYPE e
 #ifdef IN_RING3
 
 /**
- * @copydoc PDMDRVHLP::pfnAttach
+ * @copydoc PDMDRVHLPR3::pfnAttach
  */
 DECLINLINE(int) PDMDrvHlpAttach(PPDMDRVINS pDrvIns, uint32_t fFlags, PPDMIBASE *ppBaseInterface)
 {
@@ -1461,7 +1460,7 @@ DECLINLINE(int) PDMDrvHlpNoAttach(PPDMDRVINS pDrvIns)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnDetach
+ * @copydoc PDMDRVHLPR3::pfnDetach
  */
 DECLINLINE(int) PDMDrvHlpDetach(PPDMDRVINS pDrvIns, uint32_t fFlags)
 {
@@ -1469,7 +1468,7 @@ DECLINLINE(int) PDMDrvHlpDetach(PPDMDRVINS pDrvIns, uint32_t fFlags)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnDetachSelf
+ * @copydoc PDMDRVHLPR3::pfnDetachSelf
  */
 DECLINLINE(int) PDMDrvHlpDetachSelf(PPDMDRVINS pDrvIns, uint32_t fFlags)
 {
@@ -1477,7 +1476,7 @@ DECLINLINE(int) PDMDrvHlpDetachSelf(PPDMDRVINS pDrvIns, uint32_t fFlags)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnMountPrepare
+ * @copydoc PDMDRVHLPR3::pfnMountPrepare
  */
 DECLINLINE(int) PDMDrvHlpMountPrepare(PPDMDRVINS pDrvIns, const char *pszFilename, const char *pszCoreDriver)
 {
@@ -1485,7 +1484,7 @@ DECLINLINE(int) PDMDrvHlpMountPrepare(PPDMDRVINS pDrvIns, const char *pszFilenam
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnVMState
+ * @copydoc PDMDRVHLPR3::pfnVMState
  */
 DECLINLINE(VMSTATE) PDMDrvHlpVMState(PPDMDRVINS pDrvIns)
 {
@@ -1493,7 +1492,7 @@ DECLINLINE(VMSTATE) PDMDrvHlpVMState(PPDMDRVINS pDrvIns)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnVMTeleportedAndNotFullyResumedYet
+ * @copydoc PDMDRVHLPR3::pfnVMTeleportedAndNotFullyResumedYet
  */
 DECLINLINE(bool) PDMDrvHlpVMTeleportedAndNotFullyResumedYet(PPDMDRVINS pDrvIns)
 {
@@ -1501,7 +1500,7 @@ DECLINLINE(bool) PDMDrvHlpVMTeleportedAndNotFullyResumedYet(PPDMDRVINS pDrvIns)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnGetSupDrvSession
+ * @copydoc PDMDRVHLPR3::pfnGetSupDrvSession
  */
 DECLINLINE(PSUPDRVSESSION) PDMDrvHlpGetSupDrvSession(PPDMDRVINS pDrvIns)
 {
@@ -1509,7 +1508,7 @@ DECLINLINE(PSUPDRVSESSION) PDMDrvHlpGetSupDrvSession(PPDMDRVINS pDrvIns)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnQueueCreate
+ * @copydoc PDMDRVHLPR3::pfnQueueCreate
  */
 DECLINLINE(int) PDMDrvHlpQueueCreate(PPDMDRVINS pDrvIns, uint32_t cbItem, uint32_t cItems, uint32_t cMilliesInterval,
                                         PFNPDMQUEUEDRV pfnCallback, const char *pszName, PPDMQUEUE *ppQueue)
@@ -1518,7 +1517,7 @@ DECLINLINE(int) PDMDrvHlpQueueCreate(PPDMDRVINS pDrvIns, uint32_t cbItem, uint32
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnTMGetVirtualFreq
+ * @copydoc PDMDRVHLPR3::pfnTMGetVirtualFreq
  */
 DECLINLINE(uint64_t) PDMDrvHlpTMGetVirtualFreq(PPDMDRVINS pDrvIns)
 {
@@ -1526,7 +1525,7 @@ DECLINLINE(uint64_t) PDMDrvHlpTMGetVirtualFreq(PPDMDRVINS pDrvIns)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnTMGetVirtualTime
+ * @copydoc PDMDRVHLPR3::pfnTMGetVirtualTime
  */
 DECLINLINE(uint64_t) PDMDrvHlpTMGetVirtualTime(PPDMDRVINS pDrvIns)
 {
@@ -1534,7 +1533,7 @@ DECLINLINE(uint64_t) PDMDrvHlpTMGetVirtualTime(PPDMDRVINS pDrvIns)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnTMTimerCreate
+ * @copydoc PDMDRVHLPR3::pfnTMTimerCreate
  */
 DECLINLINE(int) PDMDrvHlpTMTimerCreate(PPDMDRVINS pDrvIns, TMCLOCK enmClock, PFNTMTIMERDRV pfnCallback, void *pvUser, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer)
 {
@@ -1562,7 +1561,7 @@ DECLINLINE(int) PDMDrvHlpSSMRegister(PPDMDRVINS pDrvIns, uint32_t uVersion, size
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnSSMRegister
+ * @copydoc PDMDRVHLPR3::pfnSSMRegister
  */
 DECLINLINE(int) PDMDrvHlpSSMRegisterEx(PPDMDRVINS pDrvIns, uint32_t uVersion, size_t cbGuess,
                                        PFNSSMDRVLIVEPREP pfnLivePrep, PFNSSMDRVLIVEEXEC pfnLiveExec, PFNSSMDRVLIVEVOTE pfnLiveVote,
@@ -1591,7 +1590,7 @@ DECLINLINE(int) PDMDrvHlpSSMRegisterLoadDone(PPDMDRVINS pDrvIns, PFNSSMDRVLOADDO
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnDBGFInfoRegister
+ * @copydoc PDMDRVHLPR3::pfnDBGFInfoRegister
  */
 DECLINLINE(int) PDMDrvHlpDBGFInfoRegister(PPDMDRVINS pDrvIns, const char *pszName, const char *pszDesc, PFNDBGFHANDLERDRV pfnHandler)
 {
@@ -1599,7 +1598,7 @@ DECLINLINE(int) PDMDrvHlpDBGFInfoRegister(PPDMDRVINS pDrvIns, const char *pszNam
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnDBGFInfoDeregister
+ * @copydoc PDMDRVHLPR3::pfnDBGFInfoRegister
  */
 DECLINLINE(int) PDMDrvHlpDBGFInfoDeregister(PPDMDRVINS pDrvIns, const char *pszName, const char *pszDesc, PFNDBGFHANDLERDRV pfnHandler)
 {
@@ -1607,7 +1606,7 @@ DECLINLINE(int) PDMDrvHlpDBGFInfoDeregister(PPDMDRVINS pDrvIns, const char *pszN
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnSTAMRegister
+ * @copydoc PDMDRVHLPR3::pfnSTAMRegister
  */
 DECLINLINE(void) PDMDrvHlpSTAMRegister(PPDMDRVINS pDrvIns, void *pvSample, STAMTYPE enmType, const char *pszName, STAMUNIT enmUnit, const char *pszDesc)
 {
@@ -1615,7 +1614,7 @@ DECLINLINE(void) PDMDrvHlpSTAMRegister(PPDMDRVINS pDrvIns, void *pvSample, STAMT
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnSTAMRegisterF
+ * @copydoc PDMDRVHLPR3::pfnSTAMRegisterF
  */
 DECLINLINE(void)  RT_IPRT_FORMAT_ATTR(7, 8) PDMDrvHlpSTAMRegisterF(PPDMDRVINS pDrvIns, void *pvSample, STAMTYPE enmType,
                                                                    STAMVISIBILITY enmVisibility, STAMUNIT enmUnit,
@@ -1722,7 +1721,7 @@ DECLINLINE(void) PDMDrvHlpSTAMRegProfileAdv(PPDMDRVINS pDrvIns, PSTAMPROFILEADV
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnSTAMDeregister
+ * @copydoc PDMDRVHLPR3::pfnSTAMDeregister
  */
 DECLINLINE(int) PDMDrvHlpSTAMDeregister(PPDMDRVINS pDrvIns, void *pvSample)
 {
@@ -1730,7 +1729,7 @@ DECLINLINE(int) PDMDrvHlpSTAMDeregister(PPDMDRVINS pDrvIns, void *pvSample)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnSUPCallVMMR0Ex
+ * @copydoc PDMDRVHLPR3::pfnSUPCallVMMR0Ex
  */
 DECLINLINE(int) PDMDrvHlpSUPCallVMMR0Ex(PPDMDRVINS pDrvIns, unsigned uOperation, void *pvArg, unsigned cbArg)
 {
@@ -1738,7 +1737,7 @@ DECLINLINE(int) PDMDrvHlpSUPCallVMMR0Ex(PPDMDRVINS pDrvIns, unsigned uOperation,
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnUSBRegisterHub
+ * @copydoc PDMDRVHLPR3::pfnUSBRegisterHub
  */
 DECLINLINE(int) PDMDrvHlpUSBRegisterHub(PPDMDRVINS pDrvIns, uint32_t fVersions, uint32_t cPorts, PCPDMUSBHUBREG pUsbHubReg, PPCPDMUSBHUBHLP ppUsbHubHlp)
 {
@@ -1746,7 +1745,7 @@ DECLINLINE(int) PDMDrvHlpUSBRegisterHub(PPDMDRVINS pDrvIns, uint32_t fVersions,
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnSetAsyncNotification
+ * @copydoc PDMDRVHLPR3::pfnSetAsyncNotification
  */
 DECLINLINE(int) PDMDrvHlpSetAsyncNotification(PPDMDRVINS pDrvIns, PFNPDMDRVASYNCNOTIFY pfnAsyncNotify)
 {
@@ -1754,7 +1753,7 @@ DECLINLINE(int) PDMDrvHlpSetAsyncNotification(PPDMDRVINS pDrvIns, PFNPDMDRVASYNC
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnAsyncNotificationCompleted
+ * @copydoc PDMDRVHLPR3::pfnAsyncNotificationCompleted
  */
 DECLINLINE(void) PDMDrvHlpAsyncNotificationCompleted(PPDMDRVINS pDrvIns)
 {
@@ -1762,7 +1761,7 @@ DECLINLINE(void) PDMDrvHlpAsyncNotificationCompleted(PPDMDRVINS pDrvIns)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnThreadCreate
+ * @copydoc PDMDRVHLPR3::pfnThreadCreate
  */
 DECLINLINE(int) PDMDrvHlpThreadCreate(PPDMDRVINS pDrvIns, PPPDMTHREAD ppThread, void *pvUser, PFNPDMTHREADDRV pfnThread,
                                       PFNPDMTHREADWAKEUPDRV pfnWakeup, size_t cbStack, RTTHREADTYPE enmType, const char *pszName)
@@ -1772,7 +1771,7 @@ DECLINLINE(int) PDMDrvHlpThreadCreate(PPDMDRVINS pDrvIns, PPPDMTHREAD ppThread,
 
 # ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
 /**
- * @copydoc PDMDRVHLP::pfnAsyncCompletionTemplateCreate
+ * @copydoc PDMDRVHLPR3::pfnAsyncCompletionTemplateCreate
  */
 DECLINLINE(int) PDMDrvHlpAsyncCompletionTemplateCreate(PPDMDRVINS pDrvIns, PPPDMASYNCCOMPLETIONTEMPLATE ppTemplate,
                                                        PFNPDMASYNCCOMPLETEDRV pfnCompleted, void *pvTemplateUser, const char *pszDesc)
@@ -1783,7 +1782,7 @@ DECLINLINE(int) PDMDrvHlpAsyncCompletionTemplateCreate(PPDMDRVINS pDrvIns, PPPDM
 
 # ifdef VBOX_WITH_NETSHAPER
 /**
- * @copydoc PDMDRVHLP::pfnNetShaperAttach
+ * @copydoc PDMDRVHLPR3::pfnNetShaperAttach
  */
 DECLINLINE(int) PDMDrvHlpNetShaperAttach(PPDMDRVINS pDrvIns, const char *pcszBwGroup, PPDMNSFILTER pFilter)
 {
@@ -1791,7 +1790,7 @@ DECLINLINE(int) PDMDrvHlpNetShaperAttach(PPDMDRVINS pDrvIns, const char *pcszBwG
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnNetShaperDetach
+ * @copydoc PDMDRVHLPR3::pfnNetShaperDetach
  */
 DECLINLINE(int) PDMDrvHlpNetShaperDetach(PPDMDRVINS pDrvIns, PPDMNSFILTER pFilter)
 {
@@ -1800,7 +1799,7 @@ DECLINLINE(int) PDMDrvHlpNetShaperDetach(PPDMDRVINS pDrvIns, PPDMNSFILTER pFilte
 # endif
 
 /**
- * @copydoc PDMDRVHLP::pfnCritSectInit
+ * @copydoc PDMDRVHLPR3::pfnCritSectInit
  */
 DECLINLINE(int) PDMDrvHlpCritSectInit(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect, RT_SRC_POS_DECL, const char *pszName)
 {
@@ -1808,7 +1807,7 @@ DECLINLINE(int) PDMDrvHlpCritSectInit(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnCallR0
+ * @copydoc PDMDRVHLPR3::pfnCallR0
  */
 DECLINLINE(int) PDMDrvHlpCallR0(PPDMDRVINS pDrvIns, uint32_t uOperation, uint64_t u64Arg)
 {
@@ -1816,7 +1815,7 @@ DECLINLINE(int) PDMDrvHlpCallR0(PPDMDRVINS pDrvIns, uint32_t uOperation, uint64_
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnBlkCacheRetain
+ * @copydoc PDMDRVHLPR3::pfnBlkCacheRetain
  */
 DECLINLINE(int) PDMDrvHlpBlkCacheRetain(PPDMDRVINS pDrvIns, PPPDMBLKCACHE ppBlkCache,
                                         PFNPDMBLKCACHEXFERCOMPLETEDRV pfnXferComplete,
@@ -1828,7 +1827,7 @@ DECLINLINE(int) PDMDrvHlpBlkCacheRetain(PPDMDRVINS pDrvIns, PPPDMBLKCACHE ppBlkC
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnVMGetSuspendReason
+ * @copydoc PDMDRVHLPR3::pfnVMGetSuspendReason
  */
 DECLINLINE(VMSUSPENDREASON) PDMDrvHlpVMGetSuspendReason(PPDMDRVINS pDrvIns)
 {
@@ -1836,7 +1835,7 @@ DECLINLINE(VMSUSPENDREASON) PDMDrvHlpVMGetSuspendReason(PPDMDRVINS pDrvIns)
 }
 
 /**
- * @copydoc PDMDRVHLP::pfnVMGetResumeReason
+ * @copydoc PDMDRVHLPR3::pfnVMGetResumeReason
  */
 DECLINLINE(VMRESUMEREASON) PDMDrvHlpVMGetResumeReason(PPDMDRVINS pDrvIns)
 {
diff --git a/include/VBox/vmm/pdmifs.h b/include/VBox/vmm/pdmifs.h
index 11578c8..097e637 100644
--- a/include/VBox/vmm/pdmifs.h
+++ b/include/VBox/vmm/pdmifs.h
@@ -2413,7 +2413,7 @@ typedef struct PDMIVMMDEVPORT
      *
      * @returns VBox status code
      * @param   pInterface      Pointer to the interface structure containing the called function pointer.
-     * @param   xabs            New absolute X position
+     * @param   xAbs            New absolute X position
      * @param   yAbs            New absolute Y position
      */
     DECLR3CALLBACKMEMBER(int, pfnSetAbsoluteMouse,(PPDMIVMMDEVPORT pInterface, int32_t xAbs, int32_t yAbs));
@@ -2640,13 +2640,13 @@ typedef struct PDMIVMMDEVCONNECTOR
      * @param   pszUser             Guest user name to update status for.
      * @param   pszDomain           Domain the guest user is bound to. Optional.
      * @param   uState              New guest user state to notify host about.
-     * @param   puDetails           Pointer to optional state data.
+     * @param   pabDetails          Pointer to optional state data.
      * @param   cbDetails           Size (in bytes) of optional state data.
      * @thread  The emulation thread.
      */
-    DECLR3CALLBACKMEMBER(void, pfnUpdateGuestUserState,(PPDMIVMMDEVCONNECTOR pInterface, const char *pszUser, const char *pszDomain,
-                                                        uint32_t uState,
-                                                        const uint8_t *puDetails, uint32_t cbDetails));
+    DECLR3CALLBACKMEMBER(void, pfnUpdateGuestUserState,(PPDMIVMMDEVCONNECTOR pInterface, const char *pszUser,
+                                                        const char *pszDomain, uint32_t uState,
+                                                        const uint8_t *pabDetails, uint32_t cbDetails));
 
     /**
      * Reports the guest API and OS version.
diff --git a/include/VBox/vmm/pdmnetifs.h b/include/VBox/vmm/pdmnetifs.h
index 264f30d..9de33c7 100644
--- a/include/VBox/vmm/pdmnetifs.h
+++ b/include/VBox/vmm/pdmnetifs.h
@@ -336,7 +336,7 @@ typedef struct PDMINETWORKUPR0
     DECLR0CALLBACKMEMBER(int,  pfnFreeBuf,(PPDMINETWORKUPR0 pInterface, PPDMSCATTERGATHER pSgBuf));
     /** @copydoc PDMINETWORKUP::pfnSendBuf */
     DECLR0CALLBACKMEMBER(int,  pfnSendBuf,(PPDMINETWORKUPR0 pInterface, PPDMSCATTERGATHER pSgBuf, bool fOnWorkerThread));
-    /** @copydoc PDMINETWORKUP::pfnEndBuf */
+    /** @copydoc PDMINETWORKUP::pfnEndXmit */
     DECLR0CALLBACKMEMBER(void, pfnEndXmit,(PPDMINETWORKUPR0 pInterface));
     /** @copydoc PDMINETWORKUP::pfnSetPromiscuousMode */
     DECLR0CALLBACKMEMBER(void, pfnSetPromiscuousMode,(PPDMINETWORKUPR0 pInterface, bool fPromiscuous));
@@ -354,7 +354,7 @@ typedef struct PDMINETWORKUPRC
     DECLRCCALLBACKMEMBER(int,  pfnFreeBuf,(PPDMINETWORKUPRC pInterface, PPDMSCATTERGATHER pSgBuf));
     /** @copydoc PDMINETWORKUP::pfnSendBuf */
     DECLRCCALLBACKMEMBER(int,  pfnSendBuf,(PPDMINETWORKUPRC pInterface, PPDMSCATTERGATHER pSgBuf, bool fOnWorkerThread));
-    /** @copydoc PDMINETWORKUP::pfnEndBuf */
+    /** @copydoc PDMINETWORKUP::pfnEndXmit */
     DECLRCCALLBACKMEMBER(void, pfnEndXmit,(PPDMINETWORKUPRC pInterface));
     /** @copydoc PDMINETWORKUP::pfnSetPromiscuousMode */
     DECLRCCALLBACKMEMBER(void, pfnSetPromiscuousMode,(PPDMINETWORKUPRC pInterface, bool fPromiscuous));
diff --git a/include/VBox/vmm/pdmnetinline.h b/include/VBox/vmm/pdmnetinline.h
index a4509c3..b1e0beb 100644
--- a/include/VBox/vmm/pdmnetinline.h
+++ b/include/VBox/vmm/pdmnetinline.h
@@ -38,6 +38,13 @@
 #include <iprt/string.h>
 
 
+
+/** @defgroup grp_pdm_net_inline    The PDM Networking Helper APIs
+ * @ingroup grp_pdm
+ * @{
+ */
+
+
 /**
  * Checksum type.
  */
@@ -197,7 +204,7 @@ DECLINLINE(uint32_t) PDMNetGsoCalcSegmentCount(PCPDMNETWORKGSO pGso, size_t cbFr
  *
  * @returns Offset of the IPv6 header.
  * @param   pbSegHdrs           The headers / frame start.
- * @param   offIpHdr            The offset of the IPv4 header.
+ * @param   offIPv4Hdr          The offset of the IPv4 header.
  */
 DECLINLINE(uint8_t) pgmNetGsoCalcIpv6Offset(uint8_t *pbSegHdrs, uint8_t offIPv4Hdr)
 {
@@ -359,7 +366,6 @@ DECLINLINE(uint32_t) pdmNetGsoUpdateIPv4Hdr(uint8_t *pbSegHdrs, uint8_t offIpHdr
  * @param   offIpHdr            The offset into @a pbSegHdrs of the IP header.
  * @param   cbSegPayload        The amount of segmented payload.
  * @param   offFragment         The offset of this fragment for reassembly.
- * @param   iSeg                The segment index.
  * @param   cbHdrs              The size of all the headers.
  * @param   fLastFragment       True if this is the last fragment of datagram.
  * @internal
@@ -662,3 +668,5 @@ DECLINLINE(const char *) PDMNetGsoTypeName(PDMNETWORKGSOTYPE enmType)
     return "bad-gso-type";
 }
 
+/** @} */
+
diff --git a/include/VBox/vmm/pdmqueue.h b/include/VBox/vmm/pdmqueue.h
index 88dcfa5..9a32be4 100644
--- a/include/VBox/vmm/pdmqueue.h
+++ b/include/VBox/vmm/pdmqueue.h
@@ -106,7 +106,7 @@ typedef FNPDMQUEUEDRV *PFNPDMQUEUEDRV;
  *
  * @returns Success indicator.
  *          If false the item will not be removed and the flushing will stop.
- * @param   pVM         The VM handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pItem       The item to consume. Upon return this item will be freed.
  * @remarks No locks will be held, but for now it's safe to assume that only one
  *          EMT will do queue callbacks at any one time.
diff --git a/include/VBox/vmm/pdmsrv.h b/include/VBox/vmm/pdmsrv.h
index 02f3398..a3aea50 100644
--- a/include/VBox/vmm/pdmsrv.h
+++ b/include/VBox/vmm/pdmsrv.h
@@ -207,7 +207,7 @@ typedef struct PDMSRVHLP
      * Creates a timer.
      *
      * @returns VBox status.
-     * @param   pVM             The VM to create the timer in.
+     * @param   pVM             The cross context VM structure.
      * @param   pSrvIns         Service instance.
      * @param   enmClock        The clock to use on this timer.
      * @param   pfnCallback     Callback function.
diff --git a/include/VBox/vmm/pdmthread.h b/include/VBox/vmm/pdmthread.h
index af745dd..20dd5e2 100644
--- a/include/VBox/vmm/pdmthread.h
+++ b/include/VBox/vmm/pdmthread.h
@@ -120,7 +120,7 @@ typedef FNPDMTHREADDRV *PFNPDMTHREADDRV;
  * PDM thread, driver variation.
  *
  * @returns VBox status code.
- * @param   pVM         The VM handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pThread     The PDM thread data.
  */
 typedef DECLCALLBACK(int) FNPDMTHREADINT(PVM pVM, PPDMTHREAD pThread);
@@ -176,7 +176,7 @@ typedef FNPDMTHREADWAKEUPDRV *PFNPDMTHREADWAKEUPDRV;
  * PDM thread wakeup call, internal variation.
  *
  * @returns VBox status code.
- * @param   pVM         The VM handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pThread     The PDM thread data.
  */
 typedef DECLCALLBACK(int) FNPDMTHREADWAKEUPINT(PVM pVM, PPDMTHREAD pThread);
diff --git a/include/VBox/vmm/pdmusb.h b/include/VBox/vmm/pdmusb.h
index 7dd6f11..f0abfac 100644
--- a/include/VBox/vmm/pdmusb.h
+++ b/include/VBox/vmm/pdmusb.h
@@ -621,7 +621,7 @@ typedef struct PDMUSBHLP
      * @returns rc.
      * @param   pUsbIns             The USB device instance.
      * @param   rc                  VBox status code.
-     * @param   RT_SRC_POS_DECL     Use RT_SRC_POS.
+     * @param   SRC_POS             Use RT_SRC_POS.
      * @param   pszFormat           Error message format string.
      * @param   va                  Error message arguments.
      */
@@ -657,7 +657,7 @@ typedef struct PDMUSBHLP
      * resuming, and destroying the thread as the VM state changes.
      *
      * @returns VBox status code.
-     * @param   pDevIns             The device instance.
+     * @param   pUsbIns             The USB device instance.
      * @param   ppThread            Where to store the thread 'handle'.
      * @param   pvUser              The user argument to the thread function.
      * @param   pfnThread           The thread function.
@@ -677,7 +677,7 @@ typedef struct PDMUSBHLP
      * for each one.
      *
      * @returns VBox status code.
-     * @param   pUSBIns             The USB device instance.
+     * @param   pUsbIns             The USB device instance.
      * @param   pfnAsyncNotify      The callback.
      * @thread  EMT(0)
      */
@@ -689,7 +689,7 @@ typedef struct PDMUSBHLP
      *
      * This can be called at any time, spurious calls will simply be ignored.
      *
-     * @param   pUSBIns             The USB device instance.
+     * @param   pUsbIns             The USB device instance.
      * @thread  Any
      */
     DECLR3CALLBACKMEMBER(void, pfnAsyncNotificationCompleted, (PPDMUSBINS pUsbIns));
@@ -891,7 +891,7 @@ DECLINLINE(int) PDMUsbHlpDriverAttach(PPDMUSBINS pUsbIns, RTUINT iLun, PPDMIBASE
  *
  * @returns VBox status code which must be passed up to the VMM.
  * @param   pUsbIns             Device instance.
- * @param   RT_SRC_POS_DECL     Use RT_SRC_POS.
+ * @param   SRC_POS             Use RT_SRC_POS.
  * @param   pszFormat           Message. (optional)
  * @param   ...                 Message parameters.
  */
@@ -926,7 +926,7 @@ DECLINLINE(VMSTATE) PDMUsbHlpVMState(PPDMUSBINS pUsbIns)
  * @copydoc PDMUSBHLP::pfnThreadCreate
  */
 DECLINLINE(int) PDMUsbHlpThreadCreate(PPDMUSBINS pUsbIns, PPPDMTHREAD ppThread, void *pvUser, PFNPDMTHREADUSB pfnThread,
-                                         PFNPDMTHREADWAKEUPUSB pfnWakeup, size_t cbStack, RTTHREADTYPE enmType, const char *pszName)
+                                      PFNPDMTHREADWAKEUPUSB pfnWakeup, size_t cbStack, RTTHREADTYPE enmType, const char *pszName)
 {
     return pUsbIns->pHlpR3->pfnThreadCreate(pUsbIns, ppThread, pvUser, pfnThread, pfnWakeup, cbStack, enmType, pszName);
 }
@@ -954,7 +954,7 @@ DECLINLINE(void) PDMUsbHlpAsyncNotificationCompleted(PPDMUSBINS pUsbIns)
  * @returns rc.
  * @param   pUsbIns             The USB device instance.
  * @param   rc                  VBox status code.
- * @param   RT_SRC_POS_DECL     Use RT_SRC_POS.
+ * @param   SRC_POS             Use RT_SRC_POS.
  * @param   pszFormat           Error message format string.
  * @param   ...                 Error message arguments.
  */
diff --git a/include/VBox/vmm/pdmwebcaminfs.h b/include/VBox/vmm/pdmwebcaminfs.h
index 78d337a..6cb21fe 100644
--- a/include/VBox/vmm/pdmwebcaminfs.h
+++ b/include/VBox/vmm/pdmwebcaminfs.h
@@ -44,8 +44,7 @@ typedef struct PDMIWEBCAMDOWN
      * @param pInterface  Pointer to the interface.
      * @param fReady      Whether the device is ready.
      */
-    DECLR3CALLBACKMEMBER(void, pfnWebcamDownReady, (PPDMIWEBCAMDOWN pInterface,
-                                                    bool fReady));
+    DECLR3CALLBACKMEMBER(void, pfnWebcamDownReady,(PPDMIWEBCAMDOWN pInterface, bool fReady));
 
     /*
      * Send a control request to the webcam.
@@ -57,11 +56,8 @@ typedef struct PDMIWEBCAMDOWN
      * @param pCtrl       The control data.
      * @param cbCtrl      The size of the control data.
      */
-    DECLR3CALLBACKMEMBER(int, pfnWebcamDownControl, (PPDMIWEBCAMDOWN pInterface,
-                                                     void *pvUser,
-                                                     uint64_t u64DeviceId,
-                                                     const PDMIWEBCAM_CTRLHDR *pCtrl,
-                                                     uint32_t cbCtrl));
+    DECLR3CALLBACKMEMBER(int, pfnWebcamDownControl,(PPDMIWEBCAMDOWN pInterface, void *pvUser, uint64_t u64DeviceId,
+                                                    const PDMIWEBCAM_CTRLHDR *pCtrl, uint32_t cbCtrl));
 } PDMIWEBCAMDOWN;
 
 
@@ -79,12 +75,9 @@ typedef struct PDMIWEBCAMUP
      * @param u32Version   The remote video input protocol version.
      * @param fu32Capabilities The remote video input protocol capabilities.
      */
-    DECLR3CALLBACKMEMBER(int, pfnWebcamUpAttached,(PPDMIWEBCAMUP pInterface,
-                                                   uint64_t u64DeviceId,
+    DECLR3CALLBACKMEMBER(int, pfnWebcamUpAttached,(PPDMIWEBCAMUP pInterface, uint64_t u64DeviceId,
                                                    const PDMIWEBCAM_DEVICEDESC *pDeviceDesc,
-                                                   uint32_t cbDeviceDesc,
-                                                   uint32_t u32Version,
-                                                   uint32_t fu32Capabilities));
+                                                   uint32_t cbDeviceDesc, uint32_t u32Version, uint32_t fu32Capabilities));
 
     /*
      * The webcam is not available anymore.
@@ -92,8 +85,7 @@ typedef struct PDMIWEBCAMUP
      * @param pInterface   Pointer to the interface.
      * @param u64DeviceId  Unique id for the reported webcam assigned by the driver.
      */
-    DECLR3CALLBACKMEMBER(void, pfnWebcamUpDetached,(PPDMIWEBCAMUP pInterface,
-                                                    uint64_t u64DeviceId));
+    DECLR3CALLBACKMEMBER(void, pfnWebcamUpDetached,(PPDMIWEBCAMUP pInterface, uint64_t u64DeviceId));
 
     /*
      * There is a control response or a control change for the webcam.
@@ -105,12 +97,8 @@ typedef struct PDMIWEBCAMUP
      * @param pCtrl        The control data.
      * @param cbCtrl       The size of the control data.
      */
-    DECLR3CALLBACKMEMBER(void, pfnWebcamUpControl,(PPDMIWEBCAMUP pInterface,
-                                                   bool fResponse,
-                                                   void *pvUser,
-                                                   uint64_t u64DeviceId,
-                                                   const PDMIWEBCAM_CTRLHDR *pCtrl,
-                                                   uint32_t cbCtrl));
+    DECLR3CALLBACKMEMBER(void, pfnWebcamUpControl,(PPDMIWEBCAMUP pInterface, bool fResponse, void *pvUser,
+                                                   uint64_t u64DeviceId, const PDMIWEBCAM_CTRLHDR *pCtrl, uint32_t cbCtrl));
 
     /*
      * A new frame.
@@ -122,12 +110,8 @@ typedef struct PDMIWEBCAMUP
      * @param pvFrame      Frame (image) data.
      * @param cbFrame      Size of the image data.
      */
-    DECLR3CALLBACKMEMBER(void, pfnWebcamUpFrame,(PPDMIWEBCAMUP pInterface,
-                                                 uint64_t u64DeviceId,
-                                                 PDMIWEBCAM_FRAMEHDR *pHeader,
-                                                 uint32_t cbHeader,
-                                                 const void *pvFrame,
-                                                 uint32_t cbFrame));
+    DECLR3CALLBACKMEMBER(void, pfnWebcamUpFrame,(PPDMIWEBCAMUP pInterface, uint64_t u64DeviceId, PDMIWEBCAM_FRAMEHDR *pHeader,
+                                                 uint32_t cbHeader, const void *pvFrame, uint32_t cbFrame));
 } PDMIWEBCAMUP;
 
 #endif
diff --git a/include/VBox/vmm/pgm.h b/include/VBox/vmm/pgm.h
index 8babb51..23030dd 100644
--- a/include/VBox/vmm/pgm.h
+++ b/include/VBox/vmm/pgm.h
@@ -37,6 +37,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_pgm   The Page Monitor / Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -63,6 +64,7 @@ typedef enum PGMRELOCATECALL
  *
  * @returns true if the location is ok.
  * @returns false if another location should be found.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtrOld    The old virtual address.
  * @param   GCPtrNew    The new virtual address.
  * @param   enmMode     Used to indicate the callback mode.
@@ -166,9 +168,8 @@ typedef enum PGMACCESSTYPE
  * \#PF Handler callback for physical access handler ranges in RC and R0.
  *
  * @returns Strict VBox status code (appropriate for ring-0 and raw-mode).
- * @param   pVM         VM Handle.
- * @param   pVCpu           Pointer to the cross context CPU context for the
- *                          calling EMT.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   uErrorCode  CPU Error code.
  * @param   pRegFrame   Trap register frame.
  *                      NULL on DMA and other non CPU access.
@@ -197,9 +198,8 @@ typedef FNPGMRZPHYSPFHANDLER *PFNPGMRZPHYSPFHANDLER;
  *          access operation.
  * @retval  VINF_EM_XXX in ring-0 and raw-mode context.
  *
- * @param   pVM             VM Handle.
- * @param   pVCpu           Pointer to the cross context CPU context for the
- *                          calling EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys          The physical address the guest is writing to.
  * @param   pvPhys          The HC mapping of that address.
  * @param   pvBuf           What the guest is reading/writing.
@@ -237,9 +237,8 @@ typedef enum PGMVIRTHANDLERKIND
  * for ALL and WRITE handlers these will also trigger.
  *
  * @returns Strict VBox status code (appropriate for raw-mode).
- * @param   pVM             VM Handle.
- * @param   pVCpu           Pointer to the cross context CPU context for the
- *                          calling EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   uErrorCode      CPU Error code (X86_TRAP_PF_XXX).
  * @param   pRegFrame       Trap register frame.
  * @param   pvFault         The fault address (cr2).
@@ -262,9 +261,8 @@ typedef FNPGMRCVIRTPFHANDLER *PFNPGMRCVIRTPFHANDLER;
  *
  * @returns VINF_SUCCESS if the handler have carried out the operation.
  * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
- * @param   pVM             VM Handle.
- * @param   pVCpu           Pointer to the cross context CPU context for the
- *                          calling EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   GCPtr           The virtual address the guest is writing to.  This
  *                          is the registered address corresponding to the
  *                          access, so no aliasing trouble here.
@@ -284,9 +282,8 @@ typedef FNPGMVIRTHANDLER *PFNPGMVIRTHANDLER;
 /**
  * \#PF Handler callback for invalidation of virtual access handler ranges.
  *
- * @param   pVM             VM Handle.
- * @param   pVCpu           Pointer to the cross context CPU context for the
- *                          calling EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   GCPtr           The virtual address the guest has changed.
  * @param   pvUser          User argument.
  * @thread  EMT(pVCpu)
@@ -303,7 +300,7 @@ typedef FNPGMR3VIRTINVALIDATE *PFNPGMR3VIRTINVALIDATE;
 /**
  * PGMR3PhysEnumDirtyFTPages callback for syncing dirty physical pages
  *
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          GC physical address
  * @param   pRange          HC virtual address of the page(s)
  * @param   cbRange         Size of the dirty range in bytes.
@@ -634,7 +631,7 @@ VMMDECL(int)        PGMSetLargePageUsage(PVM pVM, bool fUseLargePages);
  * Query large page usage state
  *
  * @returns 0 - disabled, 1 - enabled
- * @param   pVM         The VM to operate on.
+ * @param   pVM         The cross context VM structure.
  */
 #define PGMIsUsingLargePages(pVM)   ((pVM)->fUseLargePages)
 
diff --git a/include/VBox/vmm/rem.h b/include/VBox/vmm/rem.h
index 77fa325..fdb9d52 100644
--- a/include/VBox/vmm/rem.h
+++ b/include/VBox/vmm/rem.h
@@ -34,6 +34,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_rem      The Recompiled Execution Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
diff --git a/include/VBox/vmm/selm.h b/include/VBox/vmm/selm.h
index eda5a85..0c15f4a 100644
--- a/include/VBox/vmm/selm.h
+++ b/include/VBox/vmm/selm.h
@@ -35,6 +35,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_selm      The Selector Monitor(/Manager) API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -84,7 +85,7 @@ VMM_INT_DECL(void)      SELMLoadHiddenSelectorReg(PVMCPU pVCpu, PCCPUMCTX pCtx,
 
 
 #ifdef IN_RING3
-/** @defgroup grp_selm_r3   The Selector Monitor(/Manager) API
+/** @defgroup grp_selm_r3   The SELM ring-3 Context API
  * @{
  */
 VMMR3DECL(int)          SELMR3Init(PVM pVM);
@@ -120,6 +121,7 @@ VMMR3DECL(bool)         SELMR3CheckShadowTR(PVM pVM);
 #endif /* IN_RING3 */
 
 /** @} */
+
 RT_C_DECLS_END
 
 #endif
diff --git a/include/VBox/vmm/ssm.h b/include/VBox/vmm/ssm.h
index 586b536..6fb74ee 100644
--- a/include/VBox/vmm/ssm.h
+++ b/include/VBox/vmm/ssm.h
@@ -34,6 +34,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_ssm       The Saved State Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -813,7 +814,7 @@ typedef FNSSMDRVLOADDONE *PFNSSMDRVLOADDONE;
  * Prepare state live save operation.
  *
  * @returns VBox status code.
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @thread  Any.
  */
@@ -828,7 +829,7 @@ typedef FNSSMINTLIVEPREP *PFNSSMINTLIVEPREP;
  * been concluded.
  *
  * @returns VBox status code.
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uPass           The data pass.
  * @thread  Any.
@@ -850,7 +851,7 @@ typedef FNSSMINTLIVEEXEC *PFNSSMINTLIVEEXEC;
  *          done and there is not need calling it again before the final pass.
  * @retval  VERR_SSM_VOTE_FOR_GIVING_UP if its time to give up.
  *
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uPass           The data pass.
  * @thread  Any.
@@ -863,7 +864,7 @@ typedef FNSSMINTLIVEVOTE *PFNSSMINTLIVEVOTE;
  * Prepare state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 typedef DECLCALLBACK(int) FNSSMINTSAVEPREP(PVM pVM, PSSMHANDLE pSSM);
@@ -874,7 +875,7 @@ typedef FNSSMINTSAVEPREP *PFNSSMINTSAVEPREP;
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 typedef DECLCALLBACK(int) FNSSMINTSAVEEXEC(PVM pVM, PSSMHANDLE pSSM);
@@ -885,7 +886,7 @@ typedef FNSSMINTSAVEEXEC *PFNSSMINTSAVEEXEC;
  * Done state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 typedef DECLCALLBACK(int) FNSSMINTSAVEDONE(PVM pVM, PSSMHANDLE pSSM);
@@ -896,7 +897,7 @@ typedef FNSSMINTSAVEDONE *PFNSSMINTSAVEDONE;
  * Prepare state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 typedef DECLCALLBACK(int) FNSSMINTLOADPREP(PVM pVM, PSSMHANDLE pSSM);
@@ -907,7 +908,7 @@ typedef FNSSMINTLOADPREP *PFNSSMINTLOADPREP;
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion        Data layout version.
  * @param   uPass           The pass. This is always SSM_PASS_FINAL for units
@@ -921,7 +922,7 @@ typedef FNSSMINTLOADEXEC *PFNSSMINTLOADEXEC;
  * Done state load operation.
  *
  * @returns VBox load code.
- * @param   pVM             VM Handle.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 typedef DECLCALLBACK(int) FNSSMINTLOADDONE(PVM pVM, PSSMHANDLE pSSM);
diff --git a/include/VBox/vmm/stam.h b/include/VBox/vmm/stam.h
index df237e2..beaea51 100644
--- a/include/VBox/vmm/stam.h
+++ b/include/VBox/vmm/stam.h
@@ -37,6 +37,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_stam     The Statistics Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -342,7 +343,7 @@ typedef enum STAMUNIT
 #endif
 
 
-/** @def STAM_REL_U16_INC
+/** @def STAM_REL_U16_ADD
  * Increments a uint16_t sample by a value.
  *
  * @param   pCounter    Pointer to the uint16_t variable to operate on.
@@ -354,7 +355,7 @@ typedef enum STAMUNIT
 #else
 # define STAM_REL_U16_ADD(pCounter, Addend) do { } while (0)
 #endif
-/** @def STAM_U16_INC
+/** @def STAM_U16_ADD
  * Increments a uint16_t sample by a value.
  *
  * @param   pCounter    Pointer to the uint16_t variable to operate on.
@@ -636,7 +637,7 @@ typedef const STAMPROFILE *PCSTAMPROFILE;
 /** @def STAM_REL_PROFILE_ADD_PERIOD
  * Adds a period.
  *
- * @param   pProfileAdv     Pointer to the STAMPROFILEADV structure to operate on.
+ * @param   pProfile        Pointer to the STAMPROFILE structure to operate on.
  * @param   cTicksInPeriod  The number of tick (or whatever) of the preiod
  *                          being added.  This is only referenced once.
  */
@@ -657,7 +658,7 @@ typedef const STAMPROFILE *PCSTAMPROFILE;
 /** @def STAM_PROFILE_ADD_PERIOD
  * Adds a period.
  *
- * @param   pProfileAdv     Pointer to the STAMPROFILEADV structure to operate on.
+ * @param   pProfile        Pointer to the STAMPROFILE structure to operate on.
  * @param   cTicksInPeriod  The number of tick (or whatever) of the preiod
  *                          being added.  This is only referenced once.
  */
@@ -902,8 +903,9 @@ typedef const STAMPROFILEADV *PCSTAMPROFILEADV;
  * Samples the stop time of a profiling period (if running) and updates the
  * sample.
  *
- * @param   pProfileAdv Pointer to the STAMPROFILEADV structure to operate on.
- * @param   Prefix      Identifier prefix used to internal variables.
+ * @param   pProfileAdv1    Pointer to the STAMPROFILEADV structure to stop.
+ * @param   pProfileAdv2    Pointer to the STAMPROFILEADV structure to start.
+ * @param   Prefix          Identifier prefix used to internal variables.
  */
 #ifdef VBOX_WITH_STATISTICS
 # define STAM_PROFILE_ADV_STOP_START(pProfileAdv1, pProfileAdv2, Prefix) \
@@ -1110,7 +1112,7 @@ VMMR3DECL(int)  STAMR3Register(PVM pVM, void *pvSample, STAMTYPE enmType, STAMVI
 /** @def STAM_REL_REG
  * Registers a statistics sample.
  *
- * @param   pVM         VM Handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
  * @param   pszName     Sample name. The name is on this form "/<component>/<sample>".
@@ -1124,7 +1126,7 @@ VMMR3DECL(int)  STAMR3Register(PVM pVM, void *pvSample, STAMTYPE enmType, STAMVI
 /** @def STAM_REG
  * Registers a statistics sample if statistics are enabled.
  *
- * @param   pVM         VM Handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
  * @param   pszName     Sample name. The name is on this form "/<component>/<sample>".
@@ -1138,7 +1140,7 @@ VMMR3DECL(int)  STAMR3Register(PVM pVM, void *pvSample, STAMTYPE enmType, STAMVI
 /** @def STAM_REL_REG_USED
  * Registers a statistics sample which only shows when used.
  *
- * @param   pVM         VM Handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
  * @param   pszName     Sample name. The name is on this form "/<component>/<sample>".
@@ -1152,7 +1154,7 @@ VMMR3DECL(int)  STAMR3Register(PVM pVM, void *pvSample, STAMTYPE enmType, STAMVI
 /** @def STAM_REG_USED
  * Registers a statistics sample which only shows when used, if statistics are enabled.
  *
- * @param   pVM         VM Handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
  * @param   pszName     Sample name. The name is on this form "/<component>/<sample>".
@@ -1174,7 +1176,7 @@ VMMR3DECL(int)  STAMR3RegisterV(PVM pVM, void *pvSample, STAMTYPE enmType, STAMV
 
 /**
  * Resets the sample.
- * @param   pVM         The VM handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    The sample registered using STAMR3RegisterCallback.
  */
 typedef void FNSTAMR3CALLBACKRESET(PVM pVM, void *pvSample);
@@ -1184,7 +1186,7 @@ typedef FNSTAMR3CALLBACKRESET *PFNSTAMR3CALLBACKRESET;
 /**
  * Prints the sample into the buffer.
  *
- * @param   pVM         The VM handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    The sample registered using STAMR3RegisterCallback.
  * @param   pszBuf      The buffer to print into.
  * @param   cchBuf      The size of the buffer.
diff --git a/include/VBox/vmm/tm.h b/include/VBox/vmm/tm.h
index 12a2aea..9566b1b 100644
--- a/include/VBox/vmm/tm.h
+++ b/include/VBox/vmm/tm.h
@@ -34,6 +34,7 @@
 RT_C_DECLS_BEGIN
 
 /** @defgroup grp_tm        The Time Manager API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -193,7 +194,7 @@ typedef FNTMTIMERSRV *PFNTMTIMERSRV;
 /**
  * Internal timer callback function.
  *
- * @param   pVM             The VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pTimer          The timer handle.
  * @param   pvUser          User argument specified upon timer creation.
  */
diff --git a/include/VBox/vmm/trpm.h b/include/VBox/vmm/trpm.h
index 03e9729..511b989 100644
--- a/include/VBox/vmm/trpm.h
+++ b/include/VBox/vmm/trpm.h
@@ -32,6 +32,7 @@
 
 RT_C_DECLS_BEGIN
 /** @defgroup grp_trpm The Trap Monitor API
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -123,7 +124,7 @@ VMMR3DECL(RTRCPTR)  TRPMR3GetGuestTrapHandler(PVM pVM, unsigned iTrap);
  *
  * @returns VBox status code (appropriate for GC return).
  *          In this context VINF_SUCCESS means to restart the instruction.
- * @param   pVM         VM handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegFrame   Trap register frame.
  */
 typedef DECLCALLBACK(int) FNTRPMGCTRAPHANDLER(PVM pVM, PCPUMCTXCORE pRegFrame);
diff --git a/include/VBox/vmm/uvm.h b/include/VBox/vmm/uvm.h
index 4aca1c9..d9524ed 100644
--- a/include/VBox/vmm/uvm.h
+++ b/include/VBox/vmm/uvm.h
@@ -30,6 +30,9 @@
 #include <VBox/types.h>
 #include <iprt/assert.h>
 
+/** @addtogroup grp_vm
+ * @{ */
+
 
 /**
  * Per virtual CPU ring-3 (user mode) data.
@@ -175,5 +178,6 @@ AssertCompileMemberAlignment(UVM, aCpus, 32);
                             ("a_pUVM=%p u32Magic=%#x\n", (a_pUVM), \
                              RT_VALID_ALIGNED_PTR(a_pUVM, PAGE_SIZE) ? (a_pUVM)->u32Magic : 0))
 
+/** @} */
 #endif
 
diff --git a/include/VBox/vmm/vm.h b/include/VBox/vmm/vm.h
index 5bc086a..219427d 100644
--- a/include/VBox/vmm/vm.h
+++ b/include/VBox/vmm/vm.h
@@ -42,6 +42,7 @@
 
 
 /** @defgroup grp_vm    The Virtual Machine
+ * @ingroup grp_vmm
  * @{
  */
 
@@ -513,7 +514,7 @@ typedef struct VMCPU
 /** @def VM_FF_SET
  * Sets a force action flag.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   fFlag   The flag to set.
  */
 #if 1
@@ -528,7 +529,7 @@ typedef struct VMCPU
 /** @def VMCPU_FF_SET
  * Sets a force action flag for the given VCPU.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlag   The flag to set.
  */
 #define VMCPU_FF_SET(pVCpu, fFlag)          ASMAtomicOrU32(&(pVCpu)->fLocalForcedActions, (fFlag))
@@ -536,7 +537,7 @@ typedef struct VMCPU
 /** @def VM_FF_CLEAR
  * Clears a force action flag.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   fFlag   The flag to clear.
  */
 #if 1
@@ -551,7 +552,7 @@ typedef struct VMCPU
 /** @def VMCPU_FF_CLEAR
  * Clears a force action flag for the given VCPU.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlag   The flag to clear.
  */
 #define VMCPU_FF_CLEAR(pVCpu, fFlag)        ASMAtomicAndU32(&(pVCpu)->fLocalForcedActions, ~(fFlag))
@@ -559,7 +560,7 @@ typedef struct VMCPU
 /** @def VM_FF_IS_SET
  * Checks if a force action flag is set.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   fFlag   The flag to check.
  */
 #define VM_FF_IS_SET(pVM, fFlag)            (((pVM)->fGlobalForcedActions & (fFlag)) == (fFlag))
@@ -567,7 +568,7 @@ typedef struct VMCPU
 /** @def VMCPU_FF_IS_SET
  * Checks if a force action flag is set for the given VCPU.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlag   The flag to check.
  */
 #define VMCPU_FF_IS_SET(pVCpu, fFlag)       (((pVCpu)->fLocalForcedActions & (fFlag)) == (fFlag))
@@ -575,27 +576,27 @@ typedef struct VMCPU
 /** @def VM_FF_IS_PENDING
  * Checks if one or more force action in the specified set is pending.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   fFlags  The flags to check for.
  */
 #define VM_FF_IS_PENDING(pVM, fFlags)       RT_BOOL((pVM)->fGlobalForcedActions & (fFlags))
 
-/** @def VM_FF_TESTANDCLEAR
+/** @def VM_FF_TEST_AND_CLEAR
  * Checks if one (!) force action in the specified set is pending and clears it atomically
  *
  * @returns true if the bit was set.
  * @returns false if the bit was clear.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   iBit    Bit position to check and clear
  */
 #define VM_FF_TEST_AND_CLEAR(pVM, iBit)     (ASMAtomicBitTestAndClear(&(pVM)->fGlobalForcedActions, iBit##_BIT))
 
-/** @def VMCPU_FF_TESTANDCLEAR
+/** @def VMCPU_FF_TEST_AND_CLEAR
  * Checks if one (!) force action in the specified set is pending and clears it atomically
  *
  * @returns true if the bit was set.
  * @returns false if the bit was clear.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   iBit    Bit position to check and clear
  */
 #define VMCPU_FF_TEST_AND_CLEAR(pVCpu, iBit) (ASMAtomicBitTestAndClear(&(pVCpu)->fLocalForcedActions, iBit##_BIT))
@@ -603,7 +604,7 @@ typedef struct VMCPU
 /** @def VMCPU_FF_IS_PENDING
  * Checks if one or more force action in the specified set is pending for the given VCPU.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlags  The flags to check for.
  */
 #define VMCPU_FF_IS_PENDING(pVCpu, fFlags)  RT_BOOL((pVCpu)->fLocalForcedActions & (fFlags))
@@ -612,7 +613,7 @@ typedef struct VMCPU
  * Checks if one or more force action in the specified set is pending while one
  * or more other ones are not.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   fFlags  The flags to check for.
  * @param   fExcpt  The flags that should not be set.
  */
@@ -622,7 +623,7 @@ typedef struct VMCPU
  * Checks if one or more force action in the specified set is pending for the given
  * VCPU while one or more other ones are not.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlags  The flags to check for.
  * @param   fExcpt  The flags that should not be set.
  */
@@ -925,7 +926,7 @@ typedef struct VM
     bool                        fUseLargePages;
     /** @} */
 
-    /** Alignment padding.. */
+    /** Alignment padding. */
     uint8_t                     uPadding1[2];
 
     /** @name Debugging
@@ -939,7 +940,7 @@ typedef struct VM
     /** @} */
 
 #if HC_ARCH_BITS == 32
-    /** Alignment padding.. */
+    /** Alignment padding. */
     uint32_t                    uPadding2;
 #endif
 
diff --git a/include/VBox/vmm/vmapi.h b/include/VBox/vmm/vmapi.h
index f66b64c..4ef717f 100644
--- a/include/VBox/vmm/vmapi.h
+++ b/include/VBox/vmm/vmapi.h
@@ -34,7 +34,7 @@
 
 RT_C_DECLS_BEGIN
 
-/** @defgroup grp_vmm_apis  VM All Contexts API
+/** @defgroup grp_vm_apis   VM All Contexts API
  * @ingroup grp_vm
  * @{ */
 
@@ -43,7 +43,7 @@ RT_C_DECLS_BEGIN
  * raw-mode address.
  *
  * @returns raw-mode virtual address.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pvInVM  CC Pointer within the VM.
  */
 #ifdef IN_RING3
@@ -59,7 +59,7 @@ RT_C_DECLS_BEGIN
  * ring-3 host address.
  *
  * @returns host virtual address.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pvInVM  CC pointer within the VM.
  */
 #ifdef IN_RC
@@ -76,7 +76,7 @@ RT_C_DECLS_BEGIN
  * ring-0 host address.
  *
  * @returns host virtual address.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pvInVM  CC pointer within the VM.
  */
 #ifdef IN_RC
@@ -115,7 +115,7 @@ VMMDECL(int)    VMSetErrorV(PVM pVM, int rc, RT_SRC_POS_DECL, const char *pszFor
  *    @code
  *    return VM_SET_ERROR(pVM, VERR_OF_YOUR_CHOICE, "descriptive message");
  *    @endcode
- * @param   pVM             VM handle.
+ * @param   pVM             The cross context VM structure.
  * @param   rc              VBox status code.
  * @param   pszMessage      Error message string.
  * @thread  Any
@@ -130,7 +130,7 @@ VMMDECL(int)    VMSetErrorV(PVM pVM, int rc, RT_SRC_POS_DECL, const char *pszFor
  *    @code
  *    return VM_SET_ERROR(pVM, VERR_OF_YOUR_CHOICE, "descriptive message");
  *    @endcode
- * @param   pVM             VM handle.
+ * @param   pVM             The cross context VM structure.
  * @param   rc              VBox status code.
  * @param   pszMessage      Error message string.
  * @thread  Any
diff --git a/include/VBox/vmm/vmcpuset.h b/include/VBox/vmm/vmcpuset.h
index 6f89409..4eb35e4 100644
--- a/include/VBox/vmm/vmcpuset.h
+++ b/include/VBox/vmm/vmcpuset.h
@@ -36,7 +36,7 @@
  * @{
  */
 
-/** Tests if a valid CPU ID is present in the set.. */
+/** Tests if a valid CPU ID is present in the set. */
 #define VMCPUSET_IS_PRESENT(pSet, idCpu)    ASMBitTest( &(pSet)->au32Bitmap[0], (idCpu))
 /** Adds a CPU to the set. */
 #define VMCPUSET_ADD(pSet, idCpu)           ASMBitSet(  &(pSet)->au32Bitmap[0], (idCpu))
diff --git a/include/VBox/vmm/vmm.h b/include/VBox/vmm/vmm.h
index fa8bc63..563030c 100644
--- a/include/VBox/vmm/vmm.h
+++ b/include/VBox/vmm/vmm.h
@@ -35,7 +35,11 @@
 
 RT_C_DECLS_BEGIN
 
-/** @defgroup grp_vmm       The Virtual Machine Monitor API
+/** @defgroup grp_vmm       The Virtual Machine Monitor
+ * @{
+ */
+
+/** @defgroup grp_vmm_api   The Virtual Machine Monitor API
  * @{
  */
 
@@ -125,7 +129,7 @@ typedef enum VMMCALLRING3
  * VMMRZCallRing3 notification callback.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   enmOperation    The operation causing the ring-3 jump.
  * @param   pvUser          The user argument.
  */
@@ -140,9 +144,9 @@ typedef FNVMMR0CALLRING3NOTIFICATION *PFNVMMR0CALLRING3NOTIFICATION;
  *          informational status code other than the ones used by EM for
  *          scheduling.
  *
- * @param   pVM         The VM handle.
- * @param   pVCpu       The handle of the calling virtual CPU.
- * @param   pvUser      The user argument.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
+ * @param   pvUser  The user argument.
  */
 typedef DECLCALLBACK(VBOXSTRICTRC) FNVMMEMTRENDEZVOUS(PVM pVM, PVMCPU pVCpu, void *pvUser);
 /** Pointer to a rendezvous callback function. */
@@ -246,7 +250,7 @@ typedef struct VMM2USERMETHODS
  * Checks whether we've armed the ring-0 long jump machinery.
  *
  * @returns @c true / @c false
- * @param   pVCpu           The caller's cross context virtual CPU structure.
+ * @param   a_pVCpu     The caller's cross context virtual CPU structure.
  * @thread  EMT
  * @sa      VMMR0IsLongJumpArmed
  */
@@ -273,7 +277,7 @@ VMM_INT_DECL(void)          VMMHypercallsDisable(PVMCPU pVCpu);
 
 
 #if defined(IN_RING3) || defined(DOXYGEN_RUNNING)
-/** @defgroup grp_vmm_r3    The VMM Host Context Ring 3 API
+/** @defgroup grp_vmm_api_r3    The VMM Host Context Ring 3 API
  * @{
  */
 VMMR3_INT_DECL(int)     VMMR3Init(PVM pVM);
@@ -337,7 +341,7 @@ VMMR3_INT_DECL(int)     VMMR3ReadR0Stack(PVM pVM, VMCPUID idCpu, RTHCUINTPTR R0A
 #endif /* IN_RING3 */
 
 
-/** @defgroup grp_vmm_r0    The VMM Host Context Ring 0 API
+/** @defgroup grp_vmm_api_r0    The VMM Host Context Ring 0 API
  * @{
  */
 
@@ -531,7 +535,7 @@ VMMR0_INT_DECL(bool) VMMR0IsLogFlushDisabled(PVMCPU pVCpu);
 
 
 #if defined(IN_RC) || defined(DOXYGEN_RUNNING)
-/** @defgroup grp_vmm_rc    The VMM Raw-Mode Context API
+/** @defgroup grp_vmm_api_rc    The VMM Raw-Mode Context API
  * @{
  */
 VMMRCDECL(int)      VMMRCEntry(PVM pVM, unsigned uOperation, unsigned uArg, ...);
@@ -541,7 +545,7 @@ VMMRCDECL(void)     VMMRCLogFlushIfFull(PVM pVM);
 #endif /* IN_RC */
 
 #if defined(IN_RC) || defined(IN_RING0) || defined(DOXYGEN_RUNNING)
-/** @defgroup grp_vmm_rz    The VMM Raw-Mode and Ring-0 Context API
+/** @defgroup grp_vmm_api_rz    The VMM Raw-Mode and Ring-0 Context API
  * @{
  */
 VMMRZDECL(int)      VMMRZCallRing3(PVM pVM, PVMCPU pVCpu, VMMCALLRING3 enmOperation, uint64_t uArg);
@@ -557,6 +561,8 @@ VMMRZDECL(bool)     VMMRZCallRing3IsNotificationSet(PVMCPU pVCpu);
 
 
 /** @} */
+
+/** @} */
 RT_C_DECLS_END
 
 #endif
diff --git a/include/VBox/vrdpusb.h b/include/VBox/vrdpusb.h
index 166f62d..cdbeeb1 100644
--- a/include/VBox/vrdpusb.h
+++ b/include/VBox/vrdpusb.h
@@ -36,6 +36,12 @@
 # error "There are no VRDP APIs available Guest Context!"
 #endif
 
+
+/** @defgroup grp_vrdpusb   Remote USB over VURP
+ * @ingroup grp_vusb
+ * @{
+ */
+
 #define REMOTE_USB_BACKEND_PREFIX_S   "REMOTEUSB"
 #define REMOTE_USB_BACKEND_PREFIX_LEN 9
 
@@ -51,10 +57,11 @@ typedef struct _REMOTEUSBQURB *PREMOTEUSBQURB;
 struct _REMOTEUSBBACKEND;
 typedef struct _REMOTEUSBBACKEND *PREMOTEUSBBACKEND;
 
-/* Pointer to this structure is passed to pfnCreateProxyDevice
- * as the device specific pointer, when creating remote devices.
+/**
+ * Pointer to this structure is passed to pfnCreateProxyDevice as the device
+ * specific pointer, when creating remote devices.
  */
-typedef struct _REMOTEUSBCALLBACK
+typedef struct REMOTEUSBCALLBACK
 {
     PREMOTEUSBBACKEND pInstance;
 
@@ -72,5 +79,7 @@ typedef struct _REMOTEUSBCALLBACK
     DECLCALLBACKMEMBER(int, pfnWakeup)           (PREMOTEUSBDEVICE pDevice);
 } REMOTEUSBCALLBACK;
 
+/** @} */
+
 #endif
 
diff --git a/include/VBox/vscsi.h b/include/VBox/vscsi.h
index e69158d..a33e131 100644
--- a/include/VBox/vscsi.h
+++ b/include/VBox/vscsi.h
@@ -1,10 +1,10 @@
 /* $Id: vscsi.h $ */
 /** @file
- * VBox storage drivers: Virtual SCSI driver
+ * VBox storage drivers - Virtual SCSI driver
  */
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * 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;
@@ -37,6 +37,12 @@ RT_C_DECLS_BEGIN
 # error "There are no VBox VSCSI APIs available in Ring-0 Host Context!"
 #endif
 
+/** @defgroup grp_drv_vscsi  Virtual VSCSI Driver
+ * @ingroup grp_devdrv
+ * @{
+ */
+/** @todo figure better grouping.   */
+
 /** A virtual SCSI device handle */
 typedef struct VSCSIDEVICEINT *VSCSIDEVICE;
 /** A pointer to a virtual SCSI device handle. */
@@ -112,68 +118,55 @@ typedef struct VSCSILUNIOCALLBACKS
      * Retrieve the size of the underlying medium.
      *
      * @returns VBox status status code.
-     * @param   hVScsiLun        Virtual SCSI LUN handle.
-     * @param   pvScsiLunUser    Opaque user data which may
-     *                           be used to identify the medium.
-     * @param   pcbSize          Where to store the size of the
-     *                           medium.
+     * @param   hVScsiLun       Virtual SCSI LUN handle.
+     * @param   pvScsiLunUser   Opaque user data which may be used to identify the
+     *                          medium.
+     * @param   pcbSize         Where to store the size of the medium.
      */
-    DECLR3CALLBACKMEMBER(int, pfnVScsiLunMediumGetSize, (VSCSILUN hVScsiLun,
-                                                         void *pvScsiLunUser,
-                                                         uint64_t *pcbSize));
+    DECLR3CALLBACKMEMBER(int, pfnVScsiLunMediumGetSize,(VSCSILUN hVScsiLun, void *pvScsiLunUser, uint64_t *pcbSize));
 
     /**
      * Retrieve the sector size of the underlying medium.
      *
      * @returns VBox status status code.
-     * @param   hVScsiLun        Virtual SCSI LUN handle.
-     * @param   pvScsiLunUser    Opaque user data which may
-     *                           be used to identify the medium.
-     * @param   pcbSectorSize    Where to store the sector size of the
-     *                           medium.
+     * @param   hVScsiLun       Virtual SCSI LUN handle.
+     * @param   pvScsiLunUser   Opaque user data which may be used to identify the
+     *                          medium.
+     * @param   pcbSectorSize   Where to store the sector size of the medium.
      */
-    DECLR3CALLBACKMEMBER(int, pfnVScsiLunMediumGetSectorSize, (VSCSILUN hVScsiLun,
-                                                              void *pvScsiLunUser,
-                                                              uint32_t *pcbSectorSize));
+    DECLR3CALLBACKMEMBER(int, pfnVScsiLunMediumGetSectorSize,(VSCSILUN hVScsiLun, void *pvScsiLunUser, uint32_t *pcbSectorSize));
 
     /**
      * Set the lock state of the underlying medium.
      *
      * @returns VBox status status code.
-     * @param   hVScsiLun        Virtual SCSI LUN handle.
-     * @param   pvScsiLunUser    Opaque user data which may
-     *                           be used to identify the medium.
-     * @param   fLocked          New lock state (locked/unlocked).
+     * @param   hVScsiLun       Virtual SCSI LUN handle.
+     * @param   pvScsiLunUser   Opaque user data which may be used to identify the
+     *                          medium.
+     * @param   fLocked         New lock state (locked/unlocked).
      */
-    DECLR3CALLBACKMEMBER(int, pfnVScsiLunMediumSetLock, (VSCSILUN hVScsiLun,
-                                                         void *pvScsiLunUser,
-                                                         bool fLocked));
+    DECLR3CALLBACKMEMBER(int, pfnVScsiLunMediumSetLock,(VSCSILUN hVScsiLun, void *pvScsiLunUser, bool fLocked));
     /**
      * Enqueue a read or write request from the medium.
      *
      * @returns VBox status status code.
-     * @param   hVScsiLun             Virtual SCSI LUN handle.
-     * @param   pvScsiLunUser         Opaque user data which may
-     *                                be used to identify the medium.
-     * @param   hVScsiIoReq           Virtual SCSI I/O request handle.
+     * @param   hVScsiLun       Virtual SCSI LUN handle.
+     * @param   pvScsiLunUser   Opaque user data which may be used to identify the
+     *                          medium.
+     * @param   hVScsiIoReq     Virtual SCSI I/O request handle.
      */
-    DECLR3CALLBACKMEMBER(int, pfnVScsiLunReqTransferEnqueue, (VSCSILUN hVScsiLun,
-                                                              void *pvScsiLunUser,
-                                                              VSCSIIOREQ hVScsiIoReq));
+    DECLR3CALLBACKMEMBER(int, pfnVScsiLunReqTransferEnqueue,(VSCSILUN hVScsiLun, void *pvScsiLunUser, VSCSIIOREQ hVScsiIoReq));
 
     /**
      * Returns flags of supported features.
      *
      * @returns VBox status status code.
-     * @param   hVScsiLun             Virtual SCSI LUN handle.
-     * @param   pvScsiLunUser         Opaque user data which may
-     *                                be used to identify the medium.
-     * @param   hVScsiIoReq           Virtual SCSI I/O request handle.
+     * @param   hVScsiLun       Virtual SCSI LUN handle.
+     * @param   pvScsiLunUser   Opaque user data which may be used to identify the
+     *                          medium.
+     * @param   pfFeatures      Where to return the queried features.
      */
-    DECLR3CALLBACKMEMBER(int, pfnVScsiLunGetFeatureFlags, (VSCSILUN hVScsiLun,
-                                                           void *pvScsiLunUser,
-                                                           uint64_t *pfFeatures));
-
+    DECLR3CALLBACKMEMBER(int, pfnVScsiLunGetFeatureFlags,(VSCSILUN hVScsiLun, void *pvScsiLunUser, uint64_t *pfFeatures));
 
 } VSCSILUNIOCALLBACKS;
 /** Pointer to a virtual SCSI LUN I/O callback table. */
@@ -207,7 +200,7 @@ VBOXDDU_DECL(int) VSCSIDeviceCreate(PVSCSIDEVICE phVScsiDevice,
  * Destroy a SCSI device instance.
  *
  * @returns VBox status code.
- * @param   hScsiDevice    The SCSI device handle to destroy.
+ * @param   hVScsiDevice   The SCSI device handle to destroy.
  */
 VBOXDDU_DECL(int) VSCSIDeviceDestroy(VSCSIDEVICE hVScsiDevice);
 
@@ -215,8 +208,8 @@ VBOXDDU_DECL(int) VSCSIDeviceDestroy(VSCSIDEVICE hVScsiDevice);
  * Attach a LUN to the SCSI device.
  *
  * @returns VBox status code.
- * @param   hScsiDevice    The SCSI device handle to add the LUN to.
- * @param   hScsiLun       The LUN handle to add.
+ * @param   hVScsiDevice   The SCSI device handle to add the LUN to.
+ * @param   hVScsiLun      The LUN handle to add.
  * @param   iLun           The LUN number.
  */
 VBOXDDU_DECL(int) VSCSIDeviceLunAttach(VSCSIDEVICE hVScsiDevice, VSCSILUN hVScsiLun, uint32_t iLun);
@@ -256,7 +249,7 @@ VBOXDDU_DECL(int) VSCSIDeviceReqEnqueue(VSCSIDEVICE hVScsiDevice, VSCSIREQ hVScs
  * Allocate a new request handle.
  *
  * @returns VBox status code.
- * @param   phVScsiDevice     The SCSI device handle.
+ * @param   hVScsiDevice      The SCSI device handle.
  * @param   phVScsiReq        Where to SCSI request handle.
  * @param   iLun              The LUN the request is for.
  * @param   pbCDB             The CDB for the request.
@@ -361,6 +354,7 @@ VBOXDDU_DECL(int) VSCSIIoReqParamsGet(VSCSIIOREQ hVScsiIoReq, uint64_t *puOffset
 VBOXDDU_DECL(int) VSCSIIoReqUnmapParamsGet(VSCSIIOREQ hVScsiIoReq, PCRTRANGE *ppaRanges,
                                            unsigned *pcRanges);
 
+/** @}  */
 RT_C_DECLS_END
 
 #endif /* ___VBox_vscsi_h */
diff --git a/include/VBox/vusb.h b/include/VBox/vusb.h
index 88e9b22..6a1735b 100644
--- a/include/VBox/vusb.h
+++ b/include/VBox/vusb.h
@@ -679,6 +679,7 @@ typedef struct VUSBIROOTHUBCONNECTOR
      * @returns Other VBox status code.
      *
      * @param   pInterface  Pointer to this struct.
+     * @param   pDevice     Pointer to a USB device.
      * @param   cMillies    Number of milliseconds to poll for completion.
      */
     DECLR3CALLBACKMEMBER(void, pfnReapAsyncUrbs,(PVUSBIROOTHUBCONNECTOR pInterface, PVUSBIDEVICE pDevice, RTMSINTERVAL cMillies));
@@ -719,7 +720,7 @@ typedef struct VUSBIROOTHUBCONNECTOR
      *
      * @returns VBox status code.
      * @param   pInterface  Pointer to this struct.
-     * @param   pDevice     Pointer to the device (interface) attach.
+     * @param   pDevice     Pointer to the device (interface) to attach.
      */
     DECLR3CALLBACKMEMBER(int, pfnAttachDevice,(PVUSBIROOTHUBCONNECTOR pInterface, PVUSBIDEVICE pDevice));
 
@@ -852,7 +853,8 @@ typedef struct VUSBIDEVICE
      * @param   pfnDone         Pointer to the completion routine. If NULL a synchronous
      *                          reset  is preformed not respecting the 10ms.
      * @param   pvUser          User argument to the completion routine.
-     * @param   pVM             Pointer to the VM handle if callback in EMT is required. (optional)
+     * @param   pVM             The cross context VM structure.  Required if pfnDone
+     *                          is not NULL.
      */
     DECLR3CALLBACKMEMBER(int, pfnReset,(PVUSBIDEVICE pInterface, bool fResetOnLinux,
                                         PFNVUSBRESETDONE pfnDone, void *pvUser, PVM pVM));
@@ -924,10 +926,15 @@ typedef struct VUSBIDEVICE
  * @param   pInterface      Pointer to the device interface structure.
  * @param   fResetOnLinux   Set if we can permit a real reset and a potential logical
  *                          device reconnect on linux hosts.
- * @param   pfnDone         Pointer to the completion routine. If NULL a synchronous
- *                          reset  is preformed not respecting the 10ms.
+ * @param   pfnDone         Pointer to the completion routine.  If NULL a
+ *                          synchronous reset is preformed not respecting the
+ *                          10ms.
  * @param   pvUser          User argument to the completion routine.
- * @param   pVM             Pointer to the VM handle if callback in EMT is required. (optional)
+ * @param   pVM             The cross context VM structure.  Required if pfnDone
+ *                          is not NULL.
+ *
+ * NULL is acceptable Required if callback in EMT is desired, NULL is otherwise
+ *                          acceptable.
  */
 DECLINLINE(int) VUSBIDevReset(PVUSBIDEVICE pInterface, bool fResetOnLinux, PFNVUSBRESETDONE pfnDone, void *pvUser, PVM pVM)
 {
@@ -968,7 +975,7 @@ DECLINLINE(VUSBDEVICESTATE) VUSBIDevGetState(PVUSBIDEVICE pInterface)
 }
 
 /**
- * @copydoc VUSBIDEVICE::pfnIsSaveStateSupported
+ * @copydoc VUSBIDEVICE::pfnIsSavedStateSupported
  */
 DECLINLINE(bool) VUSBIDevIsSavedStateSupported(PVUSBIDEVICE pInterface)
 {
diff --git a/include/iprt/asm-amd64-x86.h b/include/iprt/asm-amd64-x86.h
index f6bd434..94587b0 100644
--- a/include/iprt/asm-amd64-x86.h
+++ b/include/iprt/asm-amd64-x86.h
@@ -261,7 +261,7 @@ DECLINLINE(void) ASMGetGDTR(PRTGDTR pGdtr)
 
 /**
  * Sets the content of the GDTR CPU register.
- * @param   pIdtr   Where to load the GDTR contents from
+ * @param   pGdtr   Where to load the GDTR contents from
  */
 #if RT_INLINE_ASM_EXTERNAL
 DECLASM(void) ASMSetGDTR(const RTGDTR *pGdtr);
diff --git a/include/iprt/asm.h b/include/iprt/asm.h
index 36925f1..dafc70c 100644
--- a/include/iprt/asm.h
+++ b/include/iprt/asm.h
@@ -132,7 +132,7 @@
 # define RT_INLINE_ASM_GCC_4_3_X_X86 0
 #endif
 
-/** @def RT_INLINE_DONT_USE_CMPXCHG8B
+/** @def RT_INLINE_DONT_MIX_CMPXCHG8B_AND_PIC
  * i686-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5493) screws up
  * RTSemRWRequestWrite semsemrw-lockless-generic.cpp in release builds. PIC
  * mode, x86.
diff --git a/include/iprt/asn1.h b/include/iprt/asn1.h
index cbbc344..a07873f 100644
--- a/include/iprt/asn1.h
+++ b/include/iprt/asn1.h
@@ -290,7 +290,7 @@ typedef FNRTASN1COREVTCOMPARE *PFNRTASN1COREVTCOMPARE;
  * @returns IPRT status code.
  * @param   pThisCore       Pointer to the ASN.1 core of the object to check out.
  * @param   fFlags          See RTASN1_CHECK_SANITY_F_XXX.
- * @param   pszErrInfo      Where to return additional error details. Optional.
+ * @param   pErrInfo        Where to return additional error details. Optional.
  * @param   pszErrorTag     Tag for the additional error details.
  */
 typedef DECLCALLBACK(int) FNRTASN1COREVTCHECKSANITY(PCRTASN1CORE pThisCore, uint32_t fFlags,
@@ -771,7 +771,7 @@ RTASN1TYPE_STANDARD_PROTOTYPES(RTASN1INTEGER, RTDECL, RTAsn1Integer, Asn1Core);
 /**
  * Initializes an interger object to a default value.
  * @returns VINF_SUCCESS.
- * @param   pBoolean            The integer object representation.
+ * @param   pInteger            The integer object representation.
  * @param   uValue              The default value (unsigned 64-bit).
  * @param   pAllocator          The allocator (pro forma).
  */
@@ -1349,7 +1349,7 @@ RTASN1TYPE_STANDARD_PROTOTYPES(RTASN1DYNTYPE, RTDECL, RTAsn1DynType, u.Core);
 /**
  * Calls the destructor of the ASN.1 object.
  *
- * @param   pAsn1Core           The IPRT representation of an ASN.1 object.
+ * @param   pThisCore           The IPRT representation of an ASN.1 object.
  */
 RTDECL(void) RTAsn1VtDelete(PRTASN1CORE pThisCore);
 
@@ -1399,7 +1399,7 @@ RTDECL(int) RTAsn1VtCompare(PCRTASN1CORE pLeftCore, PCRTASN1CORE pRightCore);
  * @returns IPRT status code.
  * @param   pThisCore       Pointer to the ASN.1 core of the object to check out.
  * @param   fFlags          See RTASN1_CHECK_SANITY_F_XXX.
- * @param   pszErrInfo      Where to return additional error details. Optional.
+ * @param   pErrInfo        Where to return additional error details. Optional.
  * @param   pszErrorTag     Tag for the additional error details.
  */
 RTDECL(int) RTAsn1VtCheckSanity(PCRTASN1CORE pThisCore, uint32_t fFlags,
@@ -1585,7 +1585,7 @@ RTDECL(int) RTAsn1CursorInitSubFromCore(PRTASN1CURSOR pParent, PRTASN1CORE pAsn1
  *
  * @returns Pointer to the allocator info (for call in alloc parameter).
  * @param   pCursor             The cursor.
- * @param   pAllocator          The allocation structure to initialize.
+ * @param   pAllocation         The allocation structure to initialize.
  */
 RTDECL(PRTASN1ALLOCATION) RTAsn1CursorInitAllocation(PRTASN1CURSOR pCursor, PRTASN1ALLOCATION pAllocation);
 
@@ -1924,7 +1924,8 @@ RTDECL(int) RTAsn1CursorGetSetCursor(PRTASN1CURSOR pCursor, uint32_t fFlags,
  * @returns IPRT status code.
  * @param   pCursor             The cursor we're decoding from.
  * @param   fFlags              RTASN1CURSOR_GET_F_XXX.
- * @param   pCtxTagCore         The output context tag object.
+ * @param   uExpectedTag        The expected tag.
+ * @param   pCtxTag             The output context tag object.
  * @param   pCtxTagCursor       The output cursor for the context tag content.
  * @param   pszErrorTag         Error tag, this will be associated with the
  *                              returned cursor.
@@ -2009,7 +2010,7 @@ RTASN1CONTEXTTAG_IMPL_CURSOR_INLINES(7)
  * Checks if the next object is a boolean.
  *
  * @returns true / false
- * @param   pCursor         The cursore we're decoding from.
+ * @param   pCursor         The cursor we're decoding from.
  * @remarks May produce error info output on mismatch.
  */
 DECLINLINE(bool) RTAsn1CursorIsBooleanNext(PRTASN1CURSOR pCursor)
@@ -2022,7 +2023,7 @@ DECLINLINE(bool) RTAsn1CursorIsBooleanNext(PRTASN1CURSOR pCursor)
  * Checks if the next object is a set.
  *
  * @returns true / false
- * @param   pCursor         The cursore we're decoding from.
+ * @param   pCursor         The cursor we're decoding from.
  * @remarks May produce error info output on mismatch.
  */
 DECLINLINE(bool) RTAsn1CursorIsSetNext(PRTASN1CURSOR pCursor)
diff --git a/include/iprt/assert.h b/include/iprt/assert.h
index a2b112c..fb7b45d 100644
--- a/include/iprt/assert.h
+++ b/include/iprt/assert.h
@@ -1589,7 +1589,7 @@ RT_C_DECLS_END
         return (rc); \
     } while (0)
 
-/** @def AssertLogRelMsgFailedReturn
+/** @def AssertLogRelMsgFailedReturnStmt
  * An assertion failed, execute @a stmt and return @a rc.
  * Strict builds will hit a breakpoint, non-strict will only do LogRel.
  *
@@ -1621,7 +1621,7 @@ RT_C_DECLS_END
         return; \
     } while (0)
 
-/** @def AssertLogRelMsgFailedReturnVoid
+/** @def AssertLogRelMsgFailedReturnVoidStmt
  * An assertion failed, execute @a stmt and return void.
  * Strict builds will hit a breakpoint, non-strict will only do LogRel.
  *
@@ -2095,7 +2095,7 @@ RT_C_DECLS_END
  */
 #define AssertRCReturn(rc, rcRet)   AssertMsgRCReturn(rc, ("%Rra\n", (rc)), rcRet)
 
-/** @def AssertRCReturn
+/** @def AssertRCReturnStmt
  * Asserts a iprt status code successful, bitch (RT_STRICT mode only), execute
  * @a stmt and returns @a rcRet if it isn't.
  *
@@ -2115,7 +2115,7 @@ RT_C_DECLS_END
  */
 #define AssertRCReturnVoid(rc)      AssertMsgRCReturnVoid(rc, ("%Rra\n", (rc)))
 
-/** @def AssertReturnVoidStmt
+/** @def AssertRCReturnVoidStmt
  * Asserts a iprt status code successful, bitch (RT_STRICT mode only), and
  * execute the given statement/return if it isn't.
  *
diff --git a/include/iprt/cdefs.h b/include/iprt/cdefs.h
index 0c74e59..629df8a 100644
--- a/include/iprt/cdefs.h
+++ b/include/iprt/cdefs.h
@@ -58,6 +58,8 @@
 # define __X86__
 # define RT_ARCH_AMD64
 # define RT_ARCH_X86
+# define RT_ARCH_SPARC
+# define RT_ARCH_SPARC64
 # define IN_RING0
 # define IN_RING3
 # define IN_RC
@@ -72,7 +74,7 @@
 # define RT_LOCK_NO_STRICT
 # define RT_LOCK_STRICT_ORDER
 # define RT_LOCK_NO_STRICT_ORDER
-# define Breakpoint
+# define RT_BREAKPOINT
 # define RT_NO_DEPRECATED_MACROS
 # define RT_EXCEPTIONS_ENABLED
 # define RT_BIG_ENDIAN
@@ -80,6 +82,8 @@
 # define RT_COMPILER_GROKS_64BIT_BITFIELDS
 # define RT_COMPILER_WITH_80BIT_LONG_DOUBLE
 # define RT_NO_VISIBILITY_HIDDEN
+# define RT_GCC_SUPPORTS_VISIBILITY_HIDDEN
+# define RT_COMPILER_SUPPORTS_LAMBDA
 #endif /* DOXYGEN_RUNNING */
 
 /** @def RT_ARCH_X86
@@ -338,7 +342,7 @@
  * Replace: # elif defined(RT_OS_\1)\n#  define RT_OPSYS RT_OPSYS_\1
  */
 #ifndef RT_OPSYS
-# if defined(RT_OS_UNKNOWN)
+# if defined(RT_OS_UNKNOWN) || defined(DOXYGEN_RUNNING)
 #  define RT_OPSYS RT_OPSYS_UNKNOWN
 # elif defined(RT_OS_AGNOSTIC)
 #  define RT_OPSYS RT_OPSYS_AGNOSTIC
@@ -1412,9 +1416,22 @@
 #define RT_STR(str)             #str
 /** @def RT_XSTR
  * Returns the expanded argument as a string.
- * @param   str     Argument to expand and stringy. */
+ * @param   str     Argument to expand and stringify. */
 #define RT_XSTR(str)            RT_STR(str)
 
+/** @def RT_LSTR_2
+ * Helper for RT_WSTR that gets the expanded @a str.
+ * @param   str     String litteral to prefix with 'L'.  */
+#define RT_LSTR_2(str)          L##str
+/** @def RT_LSTR
+ * Returns the expanded argument with a L string prefix.
+ *
+ * Intended for converting ASCII string \#defines into wide char string
+ * litterals on Windows.
+ *
+ * @param   str     String litteral to . */
+#define RT_LSTR(str)            RT_LSTR_2(str)
+
 /** @def RT_CONCAT
  * Concatenate the expanded arguments without any extra spaces in between.
  *
@@ -1425,7 +1442,7 @@
 /** RT_CONCAT helper, don't use.  */
 #define RT_CONCAT_HLP(a,b)          a##b
 
-/** @def RT_CONCAT
+/** @def RT_CONCAT3
  * Concatenate the expanded arguments without any extra spaces in between.
  *
  * @param   a       The 1st part.
@@ -1436,12 +1453,13 @@
 /** RT_CONCAT3 helper, don't use.  */
 #define RT_CONCAT3_HLP(a,b,c)       a##b##c
 
-/** @def RT_CONCAT
+/** @def RT_CONCAT4
  * Concatenate the expanded arguments without any extra spaces in between.
  *
  * @param   a       The 1st part.
  * @param   b       The 2nd part.
  * @param   c       The 3rd part.
+ * @param   d       The 4th part.
  */
 #define RT_CONCAT4(a,b,c,d)         RT_CONCAT4_HLP(a,b,c,d)
 /** RT_CONCAT4 helper, don't use.  */
diff --git a/include/iprt/cdrom.h b/include/iprt/cdrom.h
index 21742f5..847d5bd 100644
--- a/include/iprt/cdrom.h
+++ b/include/iprt/cdrom.h
@@ -63,7 +63,7 @@ typedef RTCDROM            *PRTCDROM;
  * @param   fFlags              Open flags, see RTCDROM_O_XXX.
  * @param   phCdrom             Where to return the CDROM handle.
  */
-RTDECL(int)         RTCdromOpen(const char *psz, uint32_t fFlags, PRTCDROM phCdrom);
+RTDECL(int)         RTCdromOpen(const char *pszName, uint32_t fFlags, PRTCDROM phCdrom);
 
 /**
  * Retains a reference to the CD-ROM handle.
@@ -165,7 +165,7 @@ RTDECL(int)         RTCdromOrdinalToName(unsigned iCdrom, char *pszName, size_t
  * Combination of RTCdromOrdinalToName() and RTCdromOpen().
  *
  * @returns IPRT status code.
- * @param   pszName             The CD-ROM name (path).
+ * @param   iCdrom              The CD-ROM number.
  * @param   fFlags              Open flags, see RTCDROM_O_XXX.
  * @param   phCdrom             Where to return the CDROM handle .
  * @remarks See remarks on RTCdromOrdinalToName().
diff --git a/include/iprt/condvar.h b/include/iprt/condvar.h
index bc6af97..7ae7e64 100644
--- a/include/iprt/condvar.h
+++ b/include/iprt/condvar.h
@@ -53,7 +53,7 @@ RT_C_DECLS_BEGIN
  * @param   phCondVar           Where to store the handle to the newly created
  *                              condition variable.
  */
-RTDECL(int)  RTConvVarCreate(PRTCONDVAR phCondVar);
+RTDECL(int)  RTCondVarCreate(PRTCONDVAR phCondVar);
 
 /**
  * Create a condition variable.
@@ -71,10 +71,10 @@ RTDECL(int)  RTConvVarCreate(PRTCONDVAR phCondVar);
  *                              optional (NULL).  Max length is 32 bytes.
  * @param   ...                 Format string arguments.
  */
-RTDECL(int)  RTConvVarCreateEx(PRTCONDVAR phCondVar, uint32_t fFlags, RTLOCKVALCLASS hClass,
+RTDECL(int)  RTCondVarCreateEx(PRTCONDVAR phCondVar, uint32_t fFlags, RTLOCKVALCLASS hClass,
                                const char *pszNameFmt, ...) RT_IPRT_FORMAT_ATTR(4, 5);
 
-/** @name RTConvVarCreateEx flags
+/** @name RTCondVarCreateEx flags
  * @{ */
 /** Disables lock validation. */
 #define RTCONDVAR_FLAGS_NO_LOCK_VAL     UINT32_C(0x00000001)
@@ -87,7 +87,7 @@ RTDECL(int)  RTConvVarCreateEx(PRTCONDVAR phCondVar, uint32_t fFlags, RTLOCKVALC
  * @param   hCondVar            Handle of the condition variable.  NIL_RTCONDVAR
  *                              is quietly ignored (VINF_SUCCESS).
  */
-RTDECL(int)  RTConvVarDestroy(RTCONDVAR hCondVar);
+RTDECL(int)  RTCondVarDestroy(RTCONDVAR hCondVar);
 
 /**
  * Signal the condition variable, waking up exactly one thread.
@@ -99,9 +99,9 @@ RTDECL(int)  RTConvVarDestroy(RTCONDVAR hCondVar);
  * effect on the variable.
  *
  * @returns iprt status code.
- * @param   hConvVar            The condition variable to signal.
+ * @param   hCondVar            The condition variable to signal.
  */
-RTDECL(int)  RTConvVarSignal(RTCONDVAR hCondVar);
+RTDECL(int)  RTCondVarSignal(RTCONDVAR hCondVar);
 
 /**
  * Signal the condition variable, waking up all blocked threads.
@@ -113,9 +113,9 @@ RTDECL(int)  RTConvVarSignal(RTCONDVAR hCondVar);
  * effect on the variable.
  *
  * @returns iprt status code.
- * @param   hConvVar            The condition variable to broadcast.
+ * @param   hCondVar            The condition variable to broadcast.
  */
-RTDECL(int)  RTConvVarBroadcast(RTCONDVAR hCondVar);
+RTDECL(int)  RTCondVarBroadcast(RTCONDVAR hCondVar);
 
 /**
  * Wait for the condition variable to be signaled, resume on interruption.
@@ -125,13 +125,13 @@ RTDECL(int)  RTConvVarBroadcast(RTCONDVAR hCondVar);
  *
  * @returns iprt status code.
  *          Will not return VERR_INTERRUPTED.
- * @param   hConvVar            The condition variable to wait on.
+ * @param   hCondVar            The condition variable to wait on.
  * @param   hMtx                The mutex to leave during the wait and which
  *                              will be re-enter before returning.
  * @param   cMillies            Number of milliseconds to wait.  Use
  *                              RT_INDEFINITE_WAIT to wait forever.
  */
-RTDECL(int)  RTConvVarMutexWait(RTCONDVAR hCondVar, RTSEMMUTEX hMtx, RTMSINTERVAL cMillies);
+RTDECL(int)  RTCondVarMutexWait(RTCONDVAR hCondVar, RTSEMMUTEX hMtx, RTMSINTERVAL cMillies);
 
 /**
  * Wait for the condition variable to be signaled, return on interruption.
@@ -139,13 +139,13 @@ RTDECL(int)  RTConvVarMutexWait(RTCONDVAR hCondVar, RTSEMMUTEX hMtx, RTMSINTERVA
  * This function will not resume the wait if interrupted.
  *
  * @returns iprt status code.
- * @param   hConvVar            The condition variable to wait on.
+ * @param   hCondVar            The condition variable to wait on.
  * @param   hMtx                The mutex to leave during the wait and which
  *                              will be re-enter before returning.
  * @param   cMillies            Number of milliseconds to wait.  Use
  *                              RT_INDEFINITE_WAIT to wait forever.
  */
-RTDECL(int)  RTConvVarMutexWaitNoResume(RTCONDVAR hCondVar, RTSEMMUTEX hMtx, RTMSINTERVAL cMillies);
+RTDECL(int)  RTCondVarMutexWaitNoResume(RTCONDVAR hCondVar, RTSEMMUTEX hMtx, RTMSINTERVAL cMillies);
 
 /**
  * Wait for the condition variable to be signaled, resume on interruption.
@@ -155,14 +155,14 @@ RTDECL(int)  RTConvVarMutexWaitNoResume(RTCONDVAR hCondVar, RTSEMMUTEX hMtx, RTM
  *
  * @returns iprt status code.
  *          Will not return VERR_INTERRUPTED.
- * @param   hConvVar            The condition variable to wait on.
+ * @param   hCondVar            The condition variable to wait on.
  * @param   hRWSem              The read/write semaphore to write-leave during
  *                              the wait and which will be re-enter in write
  *                              mode before returning.
  * @param   cMillies            Number of milliseconds to wait.  Use
  *                              RT_INDEFINITE_WAIT to wait forever.
  */
-RTDECL(int)  RTConvVarRWWriteWait(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTMSINTERVAL cMillies);
+RTDECL(int)  RTCondVarRWWriteWait(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTMSINTERVAL cMillies);
 
 /**
  * Wait for the condition variable to be signaled, return on interruption.
@@ -170,14 +170,14 @@ RTDECL(int)  RTConvVarRWWriteWait(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTMSINTERV
  * This function will not resume the wait if interrupted.
  *
  * @returns iprt status code.
- * @param   hConvVar            The condition variable to wait on.
+ * @param   hCondVar            The condition variable to wait on.
  * @param   hRWSem              The read/write semaphore to write-leave during
  *                              the wait and which will be re-enter in write
  *                              mode before returning.
  * @param   cMillies            Number of milliseconds to wait.  Use
  *                              RT_INDEFINITE_WAIT to wait forever.
  */
-RTDECL(int)  RTConvVarRWWriteWaitNoResume(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTMSINTERVAL cMillies);
+RTDECL(int)  RTCondVarRWWriteWaitNoResume(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTMSINTERVAL cMillies);
 
 /**
  * Wait for the condition variable to be signaled, resume on interruption.
@@ -187,14 +187,14 @@ RTDECL(int)  RTConvVarRWWriteWaitNoResume(RTCONDVAR hCondVar, RTSEMRW hRWSem, RT
  *
  * @returns iprt status code.
  *          Will not return VERR_INTERRUPTED.
- * @param   hConvVar            The condition variable to wait on.
+ * @param   hCondVar            The condition variable to wait on.
  * @param   hRWSem              The read/write semaphore to read-leave during
  *                              the wait and which will be re-enter in read mode
  *                              before returning.
  * @param   cMillies            Number of milliseconds to wait.  Use
  *                              RT_INDEFINITE_WAIT to wait forever.
  */
-RTDECL(int)  RTConvVarRWReadWait(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTMSINTERVAL cMillies);
+RTDECL(int)  RTCondVarRWReadWait(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTMSINTERVAL cMillies);
 
 /**
  * Wait for the condition variable to be signaled, return on interruption.
@@ -202,14 +202,14 @@ RTDECL(int)  RTConvVarRWReadWait(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTMSINTERVA
  * This function will not resume the wait if interrupted.
  *
  * @returns iprt status code.
- * @param   hConvVar            The condition variable to wait on.
+ * @param   hCondVar            The condition variable to wait on.
  * @param   hRWSem              The read/write semaphore to read-leave during
  *                              the wait and which will be re-enter in read mode
  *                              before returning.
  * @param   cMillies            Number of milliseconds to wait.  Use
  *                              RT_INDEFINITE_WAIT to wait forever.
  */
-RTDECL(int)  RTConvVarRWReadWaitNoResume(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTMSINTERVAL cMillies);
+RTDECL(int)  RTCondVarRWReadWaitNoResume(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTMSINTERVAL cMillies);
 
 /**
  * Wait for the condition variable to be signaled, resume on interruption.
@@ -219,13 +219,13 @@ RTDECL(int)  RTConvVarRWReadWaitNoResume(RTCONDVAR hCondVar, RTSEMRW hRWSem, RTM
  *
  * @returns iprt status code.
  *          Will not return VERR_INTERRUPTED.
- * @param   hConvVar            The condition variable to wait on.
+ * @param   hCondVar            The condition variable to wait on.
  * @param   pCritSect           The critical section to leave during the wait
  *                              and which will be re-enter before returning.
  * @param   cMillies            Number of milliseconds to wait.  Use
  *                              RT_INDEFINITE_WAIT to wait forever.
  */
-RTDECL(int)  RTConvVarCritSectWait(RTCONDVAR hCondVar, PRTCRITSECT pCritSect, RTMSINTERVAL cMillies);
+RTDECL(int)  RTCondVarCritSectWait(RTCONDVAR hCondVar, PRTCRITSECT pCritSect, RTMSINTERVAL cMillies);
 
 /**
  * Wait for the condition variable to be signaled, return on interruption.
@@ -233,48 +233,48 @@ RTDECL(int)  RTConvVarCritSectWait(RTCONDVAR hCondVar, PRTCRITSECT pCritSect, RT
  * This function will not resume the wait if interrupted.
  *
  * @returns iprt status code.
- * @param   hConvVar            The condition variable to wait on.
+ * @param   hCondVar            The condition variable to wait on.
  * @param   pCritSect           The critical section to leave during the wait
  *                              and which will be re-enter before returning.
  * @param   cMillies            Number of milliseconds to wait.  Use
  *                              RT_INDEFINITE_WAIT to wait forever.
  */
-RTDECL(int)  RTConvVarCritSectWaitNoResume(RTCONDVAR hCondVar, PRTCRITSECT pCritSect, RTMSINTERVAL cMillies);
+RTDECL(int)  RTCondVarCritSectWaitNoResume(RTCONDVAR hCondVar, PRTCRITSECT pCritSect, RTMSINTERVAL cMillies);
 
 /**
  * Sets the signaller thread to one specific thread.
  *
  * This is only used for validating usage and deadlock detection.  When used
- * after calls to RTConvVarAddSignaller, the specified thread will be the only
+ * after calls to RTCondVarAddSignaller, the specified thread will be the only
  * signalling thread.
  *
- * @param   hConvVar            The condition variable.
+ * @param   hCondVar            The condition variable.
  * @param   hThread             The thread that will signal it.  Pass
  *                              NIL_RTTHREAD to indicate that there is no
  *                              special signalling thread.
  */
-RTDECL(void) RTConvVarSetSignaller(RTCONDVAR hCondVar, RTTHREAD hThread);
+RTDECL(void) RTCondVarSetSignaller(RTCONDVAR hCondVar, RTTHREAD hThread);
 
 /**
  * To add more signalling threads.
  *
  * First call RTCondVarSetSignaller then add further threads with this.
  *
- * @param   hConvVar            The condition variable.
+ * @param   hCondVar            The condition variable.
  * @param   hThread             The thread that will signal it. NIL_RTTHREAD is
  *                              not accepted.
  */
-RTDECL(void) RTConvVarAddSignaller(RTCONDVAR hCondVar, RTTHREAD hThread);
+RTDECL(void) RTCondVarAddSignaller(RTCONDVAR hCondVar, RTTHREAD hThread);
 
 /**
  * To remove a signalling thread.
  *
  * Reverts work done by RTCondVarAddSignaller and RTCondVarSetSignaller.
  *
- * @param   hConvVar            The condition variable.
+ * @param   hCondVar            The condition variable.
  * @param   hThread             A previously added thread.
  */
-RTDECL(void) RTConvVarRemoveSignaller(RTCONDVAR hCondVar, RTTHREAD hThread);
+RTDECL(void) RTCondVarRemoveSignaller(RTCONDVAR hCondVar, RTTHREAD hThread);
 
 /** @} */
 
diff --git a/include/iprt/coredumper.h b/include/iprt/coredumper.h
index b115be4..c083466 100644
--- a/include/iprt/coredumper.h
+++ b/include/iprt/coredumper.h
@@ -72,8 +72,6 @@ RTDECL(int) RTCoreDumperTakeDump(const char *pszOutputFile, bool fLiveCore);
  *
  * @param   pszOutputDir        The directory to store the cores in.  If NULL
  *                              the current directory will be used.
- * @param   pszBaseName         Base file name, no directory.  If NULL the
- *                              dumper will generate an appropriate name.
  * @param   fFlags              Setup flags, 0 in NOT a valid flag, it must be
  *                              one or more of RTCOREDUMPER_FLAGS_*.
  */
diff --git a/include/iprt/cpp/list.h b/include/iprt/cpp/list.h
index 2a1f2af..2e5dfa6 100644
--- a/include/iprt/cpp/list.h
+++ b/include/iprt/cpp/list.h
@@ -207,7 +207,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity    The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCListBase(size_t cCapacity = kDefaultCapacity)
@@ -923,7 +923,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity    The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCList(size_t cCapacity = BASE::kDefaultCapacity)
@@ -954,7 +954,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity    The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCList(size_t cCapacity = BASE::kDefaultCapacity)
@@ -982,7 +982,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity    The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCList(size_t cCapacity = BASE::kDefaultCapacity)
diff --git a/include/iprt/cpp/ministring.h b/include/iprt/cpp/ministring.h
index 29216c9..e845867 100644
--- a/include/iprt/cpp/ministring.h
+++ b/include/iprt/cpp/ministring.h
@@ -427,13 +427,13 @@ public:
     /**
      * Shortcut to append(), char variant.
      *
-     * @param pszThat           The character to append.
+     * @param ch                The character to append.
      *
      * @returns                 Reference to the object.
      */
-    RTCString &operator+=(char c)
+    RTCString &operator+=(char ch)
     {
-        return append(c);
+        return append(ch);
     }
 
     /**
@@ -602,28 +602,28 @@ public:
     /**
      * Compares the member string to another RTCString.
      *
-     * @param   pcszThat    The string to compare with.
+     * @param   rThat       The string to compare with.
      * @param   cs          Whether comparison should be case-sensitive.
      * @returns 0 if equal, negative if this is smaller than @a pcsz, positive
      *          if larger.
      */
-    int compare(const RTCString &that, CaseSensitivity cs = CaseSensitive) const
+    int compare(const RTCString &rThat, CaseSensitivity cs = CaseSensitive) const
     {
         if (cs == CaseSensitive)
-            return ::RTStrCmp(m_psz, that.m_psz);
-        return ::RTStrICmp(m_psz, that.m_psz);
+            return ::RTStrCmp(m_psz, rThat.m_psz);
+        return ::RTStrICmp(m_psz, rThat.m_psz);
     }
 
     /**
      * Compares the two strings.
      *
      * @returns true if equal, false if not.
-     * @param   that    The string to compare with.
+     * @param   rThat    The string to compare with.
      */
-    bool equals(const RTCString &that) const
+    bool equals(const RTCString &rThat) const
     {
-        return that.length() == length()
-            && memcmp(that.m_psz, m_psz, length()) == 0;
+        return rThat.length() == length()
+            && memcmp(rThat.m_psz, m_psz, length()) == 0;
     }
 
     /**
diff --git a/include/iprt/cpp/mtlist.h b/include/iprt/cpp/mtlist.h
index e512141..9efa870 100644
--- a/include/iprt/cpp/mtlist.h
+++ b/include/iprt/cpp/mtlist.h
@@ -100,7 +100,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity    The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCMTList(size_t cCapacity = BASE::kDefaultCapacity)
@@ -128,7 +128,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity    The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCMTList(size_t cCapacity = BASE::kDefaultCapacity)
@@ -156,7 +156,7 @@ public:
      *
      * This preallocates @a cCapacity elements within the list.
      *
-     * @param   cCapacitiy   The initial capacity the list has.
+     * @param   cCapacity    The initial capacity the list has.
      * @throws  std::bad_alloc
      */
     RTCMTList(size_t cCapacity = BASE::kDefaultCapacity)
diff --git a/include/iprt/cpp/xml.h b/include/iprt/cpp/xml.h
index 8bc102e..3c7d7a1 100644
--- a/include/iprt/cpp/xml.h
+++ b/include/iprt/cpp/xml.h
@@ -600,11 +600,11 @@ public:
      * @param   pcszPath            The attribute name.  Slashes can be used to make a
      *                              simple path to any decendant.
      * @param   pcszAttribute       The attribute name.
-     * @param   pcszPathNamespace   The namespace to match @pcszPath with, NULL
+     * @param   pcszPathNamespace   The namespace to match @a pcszPath with, NULL
      *                              (default) match any namespace.  When using a
      *                              path, this matches all elements along the way.
-     * @param   pcszAttribNamespace The namespace prefix to apply to the attribute,
-     *                              NULL (default) match any namespace.
+     * @param   pcszAttributeNamespace  The namespace prefix to apply to the
+     *                              attribute, NULL (default) match any namespace.
      * @see     findChildElementP and findAttributeValue
      */
     const char *findChildElementAttributeValueP(const char *pcszPath, const char *pcszAttribute,
diff --git a/include/iprt/critsect.h b/include/iprt/critsect.h
index 5960d4c..3e3819b 100644
--- a/include/iprt/critsect.h
+++ b/include/iprt/critsect.h
@@ -174,9 +174,8 @@ RTDECL(int) RTCritSectEnter(PRTCRITSECT pCritSect);
  *
  * @param   pCritSect       The critical section.
  * @param   uId             Where we're entering the section.
- * @param   pszFile         The source position - file.
- * @param   iLine           The source position - line.
- * @param   pszFunction     The source position - function.
+ * @param   SRC_POS         The source position where call is being made from.
+ *                          Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int) RTCritSectEnterDebug(PRTCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -204,9 +203,8 @@ RTDECL(int) RTCritSectTryEnter(PRTCRITSECT pCritSect);
  *
  * @param   pCritSect       The critical section.
  * @param   uId             Where we're entering the section.
- * @param   pszFile         The source position - file.
- * @param   iLine           The source position - line.
- * @param   pszFunction     The source position - function.
+ * @param   SRC_POS         The source position where call is being made from.
+ *                          Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int) RTCritSectTryEnterDebug(PRTCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -243,9 +241,8 @@ RTDECL(int) RTCritSectEnterMultiple(size_t cCritSects, PRTCRITSECT *papCritSects
  * @param   cCritSects      Number of critical sections in the array.
  * @param   papCritSects    Array of critical section pointers.
  * @param   uId             Where we're entering the section.
- * @param   pszFile         The source position - file.
- * @param   iLine           The source position - line.
- * @param   pszFunction     The source position - function.
+ * @param   SRC_POS         The source position where call is being made from.
+ *                          Use RT_SRC_POS when possible.  Optional.
  *
  * @remark  See RTCritSectEnterMultiple().
  */
@@ -524,9 +521,8 @@ RTDECL(int) RTCritSectRwEnterShared(PRTCRITSECTRW pThis);
  *
  * @param   pThis           Pointer to the read/write critical section.
  * @param   uId             Where we're entering the section.
- * @param   pszFile         The source position - file.
- * @param   iLine           The source position - line.
- * @param   pszFunction     The source position - function.
+ * @param   SRC_POS         The source position where call is being made from.
+ *                          Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int) RTCritSectRwEnterSharedDebug(PRTCRITSECTRW pThis, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -556,9 +552,8 @@ RTDECL(int) RTCritSectRwTryEnterShared(PRTCRITSECTRW pThis);
  *
  * @param   pThis           Pointer to the read/write critical section.
  * @param   uId             Where we're entering the section.
- * @param   pszFile         The source position - file.
- * @param   iLine           The source position - line.
- * @param   pszFunction     The source position - function.
+ * @param   SRC_POS         The source position where call is being made from.
+ *                          Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int) RTCritSectRwTryEnterSharedDebug(PRTCRITSECTRW pThis, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -593,9 +588,8 @@ RTDECL(int) RTCritSectRwEnterExcl(PRTCRITSECTRW pThis);
  *
  * @param   pThis           Pointer to the read/write critical section.
  * @param   uId             Where we're entering the section.
- * @param   pszFile         The source position - file.
- * @param   iLine           The source position - line.
- * @param   pszFunction     The source position - function.
+ * @param   SRC_POS         The source position where call is being made from.
+ *                          Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int) RTCritSectRwEnterExclDebug(PRTCRITSECTRW pThis, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -625,9 +619,8 @@ RTDECL(int) RTCritSectRwTryEnterExcl(PRTCRITSECTRW pThis);
  *
  * @param   pThis           Pointer to the read/write critical section.
  * @param   uId             Where we're entering the section.
- * @param   pszFile         The source position - file.
- * @param   iLine           The source position - line.
- * @param   pszFunction     The source position - function.
+ * @param   SRC_POS         The source position where call is being made from.
+ *                          Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int) RTCritSectRwTryEnterExclDebug(PRTCRITSECTRW pThis, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -652,8 +645,8 @@ RTDECL(int) RTCritSectRwDelete(PRTCRITSECTRW pThis);
 /**
  * Checks the caller is the exclusive (write) owner of the critical section.
  *
- * @retval  @c true if owner.
- * @retval  @c false if not owner.
+ * @retval  true if owner.
+ * @retval  false if not owner.
  * @param   pThis           Pointer to the read/write critical section.
  */
 RTDECL(bool) RTCritSectRwIsWriteOwner(PRTCRITSECTRW pThis);
@@ -711,8 +704,8 @@ RTDECL(uint32_t) RTCritSectRwGetReadCount(PRTCRITSECTRW pThis);
 /**
  * Checks if a critical section is initialized or not.
  *
- * @retval  @c true if initialized.
- * @retval  @c false if not initialized.
+ * @retval  true if initialized.
+ * @retval  false if not initialized.
  * @param   pThis           Pointer to the read/write critical section.
  */
 DECLINLINE(bool) RTCritSectRwIsInitialized(PCRTCRITSECTRW pThis)
diff --git a/include/iprt/crypto/digest.h b/include/iprt/crypto/digest.h
index f969835..13277fb 100644
--- a/include/iprt/crypto/digest.h
+++ b/include/iprt/crypto/digest.h
@@ -153,7 +153,7 @@ RTDECL(PCRTCRDIGESTDESC) RTCrDigestFindByObjIdString(const char *pszObjId, void
  *
  * @returns Pointer to the message digest details & vtable if found.  NULL if
  *          not found.
- * @param   pszObjId        The ASN.1 object ID of the message digest algorithm.
+ * @param   pObjId          The ASN.1 object ID of the message digest algorithm.
  * @param   ppvOpaque       Where to return an opaque implementation specfici
  *                          sub-type indicator that can be passed to
  *                          RTCrDigestCreate.  This is optional, fewer
diff --git a/include/iprt/crypto/pkcs7.h b/include/iprt/crypto/pkcs7.h
index a6b88cf..5feae9e 100644
--- a/include/iprt/crypto/pkcs7.h
+++ b/include/iprt/crypto/pkcs7.h
@@ -443,14 +443,14 @@ typedef FNRTCRPKCS7VERIFYCERTCALLBACK *PFNRTCRPKCS7VERIFYCERTCALLBACK;
 /** @} */
 
 /**
- * @callback_method_impl{RTCRPKCS7VERIFYCERTCALLBACK,
+ * @callback_method_impl{FNRTCRPKCS7VERIFYCERTCALLBACK,
  *  Default implementation that checks for the DigitalSignature KeyUsage bit.}
  */
 RTDECL(int) RTCrPkcs7VerifyCertCallbackDefault(PCRTCRX509CERTIFICATE pCert, RTCRX509CERTPATHS hCertPaths, uint32_t fFlags,
                                                void *pvUser, PRTERRINFO pErrInfo);
 
 /**
- * @callback_method_impl{RTCRPKCS7VERIFYCERTCALLBACK,
+ * @callback_method_impl{FNRTCRPKCS7VERIFYCERTCALLBACK,
  * Standard code signing.  Use this for Microsoft SPC.}
  */
 RTDECL(int) RTCrPkcs7VerifyCertCallbackCodeSigning(PCRTCRX509CERTIFICATE pCert, RTCRX509CERTPATHS hCertPaths, uint32_t fFlags,
diff --git a/include/iprt/crypto/rsa.h b/include/iprt/crypto/rsa.h
index 8b13de9..3352f6e 100644
--- a/include/iprt/crypto/rsa.h
+++ b/include/iprt/crypto/rsa.h
@@ -35,7 +35,7 @@
 
 RT_C_DECLS_BEGIN
 
-/** @defgroup grp_rt_spc  RTCrRsa - RSA Public Key Cryptosystem
+/** @defgroup grp_rt_cr_rsa  RTCrRsa - RSA Public Key Cryptosystem
  * @ingroup grp_rt_crypto
  * @{
  */
diff --git a/include/iprt/crypto/spc.h b/include/iprt/crypto/spc.h
index 7cca0f2..38fe691 100644
--- a/include/iprt/crypto/spc.h
+++ b/include/iprt/crypto/spc.h
@@ -35,7 +35,7 @@
 
 RT_C_DECLS_BEGIN
 
-/** @defgroup grp_rt_spc  RTCrSpc - Microsoft Authenticode
+/** @defgroup grp_rt_cr_spc  RTCrSpc - Microsoft Authenticode
  * @ingroup grp_rt_crypto
  * @{
  */
@@ -477,6 +477,7 @@ RTDECL(int) RTCrSpcIndirectDataContent_CheckSanityEx(PCRTCRSPCINDIRECTDATACONTEN
  *
  * @returns Pointer to the attribute with the given type, NULL if not found.
  * @param   pThis               The Authenticode SpcIndirectDataContent.
+ * @param   enmType             The type of attribute to get.
  */
 RTDECL(PCRTCRSPCSERIALIZEDOBJECTATTRIBUTE)
 RTCrSpcIndirectDataContent_GetPeImageObjAttrib(PCRTCRSPCINDIRECTDATACONTENT pThis,
diff --git a/include/iprt/crypto/tsp.h b/include/iprt/crypto/tsp.h
index 128bf43..0f96517 100644
--- a/include/iprt/crypto/tsp.h
+++ b/include/iprt/crypto/tsp.h
@@ -32,7 +32,7 @@
 
 RT_C_DECLS_BEGIN
 
-/** @defgroup grp_rt_crtaf RTCrTap - Time-Stamp Protocol (RFC-3161)
+/** @defgroup grp_rt_cr_tap RTCrTap - Time-Stamp Protocol (RFC-3161)
  * @ingroup grp_rt_crypto
  * @{
  */
diff --git a/include/iprt/crypto/x509.h b/include/iprt/crypto/x509.h
index 1744f04..6ccbc3d 100644
--- a/include/iprt/crypto/x509.h
+++ b/include/iprt/crypto/x509.h
@@ -945,7 +945,7 @@ RTASN1TYPE_STANDARD_PROTOTYPES(RTCRX509CERTIFICATE, RTDECL, RTCrX509Certificate,
  * Checks if a certificate matches a given issuer name and serial number.
  *
  * @returns True / false.
- * @param   pCertificates   The X.509 certificat.
+ * @param   pCertificate    The X.509 certificat.
  * @param   pIssuer         The issuer name to match against.
  * @param   pSerialNumber   The serial number to match against.
  */
diff --git a/include/iprt/dbg.h b/include/iprt/dbg.h
index c136455..e387ac4 100644
--- a/include/iprt/dbg.h
+++ b/include/iprt/dbg.h
@@ -443,25 +443,25 @@ RTDECL(int) RTDbgCfgSetLogCallback(RTDBGCFG hDbgCfg, PFNRTDBGCFGLOG pfnCallback,
  * @param   pvUser1             First user parameter.
  * @param   pvUser2             Second user parameter.
  */
-typedef DECLCALLBACK(int) FNDBGCFGOPEN(RTDBGCFG hDbgCfg, const char *pszFilename, void *pvUser1, void *pvUser2);
+typedef DECLCALLBACK(int) FNRTDBGCFGOPEN(RTDBGCFG hDbgCfg, const char *pszFilename, void *pvUser1, void *pvUser2);
 /** Pointer to a open-file callback used to the RTDbgCfgOpen functions. */
-typedef FNDBGCFGOPEN *PFNDBGCFGOPEN;
+typedef FNRTDBGCFGOPEN *PFNRTDBGCFGOPEN;
 
 
 RTDECL(int) RTDbgCfgOpenPeImage(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_t cbImage, uint32_t uTimestamp,
-                                PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
+                                PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
 RTDECL(int) RTDbgCfgOpenPdb70(RTDBGCFG hDbgCfg, const char *pszFilename, PCRTUUID pUuid, uint32_t uAge,
-                              PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
+                              PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
 RTDECL(int) RTDbgCfgOpenPdb20(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_t cbImage, uint32_t uTimestamp, uint32_t uAge,
-                              PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
+                              PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
 RTDECL(int) RTDbgCfgOpenDbg(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_t cbImage, uint32_t uTimestamp,
-                            PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
+                            PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
 RTDECL(int) RTDbgCfgOpenDwo(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_t uCrc32,
-                            PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
+                            PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
 RTDECL(int) RTDbgCfgOpenDsymBundle(RTDBGCFG hDbgCfg, const char *pszFilename, PCRTUUID pUuid,
-                                   PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
+                                   PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
 RTDECL(int) RTDbgCfgOpenMachOImage(RTDBGCFG hDbgCfg, const char *pszFilename, PCRTUUID pUuid,
-                                   PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
+                                   PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2);
 
 
 /** @name Static symbol cache configuration
diff --git a/include/iprt/file.h b/include/iprt/file.h
index 877c4a6..06aef69 100644
--- a/include/iprt/file.h
+++ b/include/iprt/file.h
@@ -780,16 +780,20 @@ RTDECL(int) RTFileCreateTempSecure(char *pszTemplate);
 /**
  * Opens a new file with a unique name in the temp directory.
  *
+ * Unlike the other temp file creation APIs, this does not allow you any control
+ * over the name.  Nor do you have to figure out where the temporary directory
+ * is.
+ *
  * @returns iprt status code.
- * @param   pszTemplate     The file name template on input. The actual file
- *                          name on success. Empty string on failure.
- * @param   fMode           The mode to create the file with.  Use 0600 unless
- *                          you have reason not to.
+ * @param   phFile          Where to return the handle to the file.
+ * @param   pszFilename     Where to return the name (+path) of the file .
+ * @param   cbFilename      The size of the buffer @a pszFilename points to.
+ * @param   fOpen           The RTFILE_O_XXX flags to open the file with.
  *
  * @remarks If actual control over the filename or location is required, we'll
  *          create an extended edition of this API.
  */
-RTDECL(int) RTFileOpenTemp(PRTFILE pFile, char *pszFilename, size_t cbFilename, uint64_t fOpen);
+RTDECL(int) RTFileOpenTemp(PRTFILE phFile, char *pszFilename, size_t cbFilename, uint64_t fOpen);
 
 
 /** @page   pg_rt_filelock      RT File locking API description
@@ -1004,7 +1008,7 @@ RTDECL(int) RTFileGetOwner(RTFILE File, uint32_t *pUid, uint32_t *pGid);
  *
  * @returns iprt status code.
  * @param   File        Handle to the file.
- * @param   iRequest    IOCTL request to carry out.
+ * @param   ulRequest   IOCTL request to carry out.
  * @param   pvData      IOCTL data.
  * @param   cbData      Size of the IOCTL data.
  * @param   piRet       Return value of the IOCTL request.
diff --git a/include/iprt/getopt.h b/include/iprt/getopt.h
index ea9ccfb..cb6dcc1 100644
--- a/include/iprt/getopt.h
+++ b/include/iprt/getopt.h
@@ -415,7 +415,7 @@ RTDECL(int) RTGetOptArgvFromString(char ***ppapszArgv, int *pcArgs, const char *
  *
  * @param   papszArgv       Argument vector.  NULL is fine.
  */
-RTDECL(void) RTGetOptArgvFree(char **paArgv);
+RTDECL(void) RTGetOptArgvFree(char **papszArgv);
 
 /**
  * Turns an argv array into a command line string.
@@ -429,7 +429,7 @@ RTDECL(void) RTGetOptArgvFree(char **paArgv);
  *
  * @param   ppszCmdLine     Where to return the command line string.  This must
  *                          be freed by calling RTStrFree.
- * @param   papszArgs       The argument vector to convert.
+ * @param   papszArgv       The argument vector to convert.
  * @param   fFlags          A combination of the RTGETOPTARGV_CNV_XXX flags.
  */
 RTDECL(int) RTGetOptArgvToString(char **ppszCmdLine, const char * const *papszArgv, uint32_t fFlags);
@@ -453,7 +453,7 @@ RTDECL(int) RTGetOptArgvToString(char **ppszCmdLine, const char * const *papszAr
  *
  * @param   ppwszCmdLine    Where to return the command line string.  This must
  *                          be freed by calling RTUtf16Free.
- * @param   papszArgs       The argument vector to convert.
+ * @param   papszArgv       The argument vector to convert.
  * @param   fFlags          A combination of the RTGETOPTARGV_CNV_XXX flags.
  */
 RTDECL(int) RTGetOptArgvToUtf16String(PRTUTF16 *ppwszCmdLine, const char * const *papszArgv, uint32_t fFlags);
diff --git a/include/iprt/http.h b/include/iprt/http.h
index de42cd0..8324061 100644
--- a/include/iprt/http.h
+++ b/include/iprt/http.h
@@ -43,6 +43,10 @@ typedef R3PTRTYPE(struct RTHTTPINTERNAL *)      RTHTTP;
 typedef RTHTTP                                 *PRTHTTP;
 /** Nil HTTP/HTTPS client handle. */
 #define NIL_RTHTTP                              ((RTHTTP)0)
+/** Callback function to be called during RTHttpGet*(). Register it using RTHttpSetDownloadProgressCallback(). */
+typedef DECLCALLBACK(void) RTHTTPDOWNLDPROGRCALLBACK(RTHTTP hHttp, void *pvUser, uint64_t cbDownloadTotal, uint64_t cbDownloaded);
+typedef RTHTTPDOWNLDPROGRCALLBACK *PRTHTTPDOWNLDPROGRCALLBACK;
+
 
 
 /**
@@ -72,7 +76,7 @@ RTR3DECL(void) RTHttpDestroy(RTHTTP hHttp);
 RTR3DECL(int) RTHttpGetRedirLocation(RTHTTP hHttp, char **ppszRedirLocation);
 
 /**
- * Perform a simple blocking HTTP request.
+ * Perform a simple blocking HTTP GET request.
  *
  * This is a just a convenient wrapper around RTHttpGetBinary that returns a
  * different type and sheds a parameter.
@@ -81,7 +85,7 @@ RTR3DECL(int) RTHttpGetRedirLocation(RTHTTP hHttp, char **ppszRedirLocation);
  *
  * @param   hHttp           The HTTP client instance.
  * @param   pszUrl          URL.
- * @param   ppszNotUtf8     Where to return the poitner to the HTTP response.
+ * @param   ppszNotUtf8     Where to return the pointer to the HTTP response.
  *                          The string is of course zero terminated.  Use
  *                          RTHttpFreeReponseText to free.
  *
@@ -101,6 +105,35 @@ RTR3DECL(int) RTHttpGetRedirLocation(RTHTTP hHttp, char **ppszRedirLocation);
 RTR3DECL(int) RTHttpGetText(RTHTTP hHttp, const char *pszUrl, char **ppszNotUtf8);
 
 /**
+ * Perform a simple blocking HTTP HEAD request.
+ *
+ * This is a just a convenient wrapper around RTHttpGetBinary that returns a
+ * different type and sheds a parameter.
+ *
+ * @returns iprt status code.
+ *
+ * @param   hHttp           The HTTP client instance.
+ * @param   pszUrl          URL.
+ * @param   ppszNotUtf8     Where to return the pointer to the HTTP response.
+ *                          The string is of course zero terminated.  Use
+ *                          RTHttpFreeReponseText to free.
+ *
+ * @remarks BIG FAT WARNING!
+ *
+ *          This function does not guarantee the that returned string is valid UTF-8 or
+ *          any other kind of text encoding!
+ *
+ *          The caller must determine and validate the string encoding _before_
+ *          passing it along to functions that expect UTF-8!
+ *
+ *          Also, this function does not guarantee that the returned string
+ *          doesn't have embedded zeros and provides the caller no way of
+ *          finding out!  If you are worried about the response from the HTTPD
+ *          containing embedded zero's, use RTHttpGetHeaderBinary instead.
+ */
+RTR3DECL(int) RTHttpGetHeaderText(RTHTTP hHttp, const char *pszUrl, char **ppszNotUtf8);
+
+/**
  * Frees memory returned by RTHttpGetText.
  *
  * @param   pszNotUtf8      What RTHttpGetText returned.
@@ -108,7 +141,7 @@ RTR3DECL(int) RTHttpGetText(RTHTTP hHttp, const char *pszUrl, char **ppszNotUtf8
 RTR3DECL(void) RTHttpFreeResponseText(char *pszNotUtf8);
 
 /**
- * Perform a simple blocking HTTP request.
+ * Perform a simple blocking HTTP GET request.
  *
  * @returns iprt status code.
  *
@@ -121,6 +154,19 @@ RTR3DECL(void) RTHttpFreeResponseText(char *pszNotUtf8);
 RTR3DECL(int) RTHttpGetBinary(RTHTTP hHttp, const char *pszUrl, void **ppvResponse, size_t *pcb);
 
 /**
+ * Perform a simple blocking HTTP HEAD request.
+ *
+ * @returns iprt status code.
+ *
+ * @param   hHttp           The HTTP client instance.
+ * @param   pszUrl          The URL.
+ * @param   ppvResponse     Where to store the HTTP response data.  Use
+ *                          RTHttpFreeResponse to free.
+ * @param   pcb             Size of the returned buffer.
+ */
+RTR3DECL(int) RTHttpGetHeaderBinary(RTHTTP hHttp, const char *pszUrl, void **ppvResponse, size_t *pcb);
+
+/**
  * Frees memory returned by RTHttpGetBinary.
  *
  * @param   pvResponse      What RTHttpGetBinary returned.
@@ -163,10 +209,13 @@ RTR3DECL(int) RTHttpUseSystemProxySettings(RTHTTP hHttp);
  * @returns iprt status code.
  *
  * @param   hHttp           The HTTP client instance.
- * @param   pszProxy        URL of the proxy.
+ * @param   pszProxyUrl     URL of the proxy server.
  * @param   uPort           port number of the proxy, use 0 for not specifying a port.
  * @param   pszProxyUser    Username, pass NULL for no authentication.
  * @param   pszProxyPwd     Password, pass NULL for no authentication.
+ *
+ * @todo    This API does not allow specifying the type of proxy server... We're
+ *          currently assuming it's a HTTP proxy.
  */
 RTR3DECL(int) RTHttpSetProxy(RTHTTP hHttp, const char *pszProxyUrl, uint32_t uPort,
                              const char *pszProxyUser, const char *pszProxyPwd);
@@ -237,6 +286,18 @@ RTR3DECL(int) RTHttpGatherCaCertsInStore(RTCRSTORE hStore, uint32_t fFlags, PRTE
  */
 RTR3DECL(int) RTHttpGatherCaCertsInFile(const char *pszCaFile, uint32_t fFlags, PRTERRINFO pErrInfo);
 
+/**
+ * Set a callback function which is called during RTHttpGet*()
+ *
+ * @returns IPRT status code.
+ * @param   hHttp           The HTTP client instance.
+ * @param   pfnDownloadProgress Progress function to be called. Set it to
+ *                          NULL to disable the callback.
+ * @param   pvUser          Convenience pointer for the callback function.
+ */
+RTR3DECL(int) RTHttpSetDownloadProgressCallback(RTHTTP hHttp, PRTHTTPDOWNLDPROGRCALLBACK pfnDownloadProgress, void *pvUser);
+
+
 /** @} */
 
 RT_C_DECLS_END
diff --git a/include/iprt/initterm.h b/include/iprt/initterm.h
index e87e1f2..ee10bb0 100644
--- a/include/iprt/initterm.h
+++ b/include/iprt/initterm.h
@@ -35,7 +35,13 @@ RT_C_DECLS_BEGIN
  * @{
  */
 
-/** @defgroup grp_rt_initterm  Init / Term
+/** @defgroup grp_rt_initterm  RTInit/RTTerm - Initialization and Termination
+ *
+ * APIs for initializing and terminating the IPRT, optionally it can also
+ * convert input arguments to UTF-8 (in ring-3).
+ *
+ * @sa RTOnce, RTOnceEx.
+ *
  * @{
  */
 
@@ -76,7 +82,7 @@ RTR3DECL(int) RTR3InitExeNoArguments(uint32_t fFlags);
  * @param   ppapszArgs      Pointer to the argument vector pointer.
  * @param   fFlags          Flags, see RTR3INIT_XXX.
  */
-RTR3DECL(int) RTR3InitExe(int cArgs, char ***papszArgs, uint32_t fFlags);
+RTR3DECL(int) RTR3InitExe(int cArgs, char ***ppapszArgs, uint32_t fFlags);
 
 /**
  * Initializes the runtime library.
@@ -100,7 +106,7 @@ RTR3DECL(int) RTR3InitDll(uint32_t fFlags);
  * @param   pszProgramPath  The program path.  Pass NULL if we're to figure it
  *                          out ourselves.
  */
-RTR3DECL(int) RTR3InitEx(uint32_t iVersion, uint32_t fFlags, int cArgs, char ***papszArgs, const char *pszProgramPath);
+RTR3DECL(int) RTR3InitEx(uint32_t iVersion, uint32_t fFlags, int cArgs, char ***ppapszArgs, const char *pszProgramPath);
 
 /**
  * Terminates the runtime library.
diff --git a/include/iprt/isofs.h b/include/iprt/isofs.h
index 118ba9f..9d89c61 100644
--- a/include/iprt/isofs.h
+++ b/include/iprt/isofs.h
@@ -193,28 +193,29 @@ RTR3DECL(void) RTIsoFsClose(PRTISOFSFILE pFile);
 /**
  * Retrieves the offset + length (both in bytes) of a given file
  * stored in the ISO.
+ *
  * @note    According to the standard, a file cannot be larger than 2^32-1 bytes.
  *          Therefore using size_t / uint32_t is not a problem.
  *
  * @return  IPRT status code.
  * @param   pFile       Pointer to open ISO file returned by RTIsoFsOpen().
  * @param   pszPath     Path of file within the ISO to retrieve information for.
- * @param   pcbOffset   Pointer to store the file's absolute offset within the ISO.
+ * @param   poffInIso   Wheter to store the file's absolute offset within the
+ *                      ISO.
  * @param   pcbLength   Pointer to store the file's size.
  */
-RTR3DECL(int) RTIsoFsGetFileInfo(PRTISOFSFILE pFile, const char *pszPath,
-                                 uint32_t *pcbOffset, size_t *pcbLength);
+RTR3DECL(int) RTIsoFsGetFileInfo(PRTISOFSFILE pFile, const char *pszPath, uint32_t *poffInIso, size_t *pcbLength);
 
 /**
  * Extracts a file from an ISO to the given destination.
  *
  * @return  IPRT status code.
  * @param   pFile       Pointer to open ISO file returned by RTIsoFsOpen().
- * @param   pszPath     Path of file within the ISO to extract.
- * @param   pszDest     Where to store the extracted file.
+ * @param   pszSrcPath  Path of file within the ISO to extract.
+ * @param   pszDstPath  Where to store the extracted file.
  */
-RTR3DECL(int) RTIsoFsExtractFile(PRTISOFSFILE pFile, const char *pszSource,
-                                 const char *pszDest);
+RTR3DECL(int) RTIsoFsExtractFile(PRTISOFSFILE pFile, const char *pszSrcPath, const char *pszDstPath);
+
 #endif /* IN_RING3 */
 
 /** @} */
diff --git a/include/iprt/latin1.h b/include/iprt/latin1.h
new file mode 100644
index 0000000..d3ccfdf
--- /dev/null
+++ b/include/iprt/latin1.h
@@ -0,0 +1,392 @@
+/** @file
+ * IPRT - String Manipulation, Latin-1 (ISO-8859-1) encoding.
+ */
+
+/*
+ * 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.
+ *
+ * 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_latin1_h
+#define ___iprt_latin1_h
+
+#include <iprt/string.h>
+
+RT_C_DECLS_BEGIN
+
+
+/** @defgroup rt_str_latin1     Latin-1 (ISO-8859-1) String Manipulation
+ * @ingroup grp_rt_str
+ *
+ * Deals with Latin-1 encoded strings.
+ *
+ * @warning Make sure to name all variables dealing with Latin-1 strings
+ *          suchthat there is no way to mistake them for normal UTF-8 strings.
+ *          There may be severe security issues resulting from mistaking Latin-1
+ *          for UTF-8!
+ *
+ * @{
+ */
+
+/**
+ * Get the unicode code point at the given string position.
+ *
+ * @returns unicode code point.
+ * @returns RTUNICP_INVALID if the encoding is invalid.
+ * @param   pszLatin1   The Latin-1 string.
+ */
+DECLINLINE(RTUNICP) RTLatin1GetCp(const char *pszLatin1)
+{
+    return *(const unsigned char *)pszLatin1;
+}
+
+/**
+ * Get the unicode code point at the given string position.
+ *
+ * @returns iprt status code.
+ * @param   ppszLatin1  Pointer to the string pointer. This will be updated to
+ *                      point to the char following the current code point. This
+ *                      is advanced one character forward on failure.
+ * @param   pCp         Where to store the code point. RTUNICP_INVALID is stored
+ *                      here on failure.
+ */
+DECLINLINE(int) RTLatin1GetCpEx(const char **ppszLatin1, PRTUNICP pCp)
+{
+    const unsigned char uch = **(const unsigned char **)ppszLatin1;
+    (*ppszLatin1)++;
+    *pCp = uch;
+    return VINF_SUCCESS;
+}
+
+/**
+ * Get the unicode code point at the given string position for a string of a
+ * given maximum length.
+ *
+ * @returns iprt status code.
+ * @retval  VERR_END_OF_STRING if *pcch is 0. *pCp is set to RTUNICP_INVALID.
+ *
+ * @param   ppszLatin1  Pointer to the string pointer. This will be updated to
+ *                      point to the char following the current code point.
+ * @param   pcchLatin1  Pointer to the maximum string length.  This will be
+ *                      decremented by the size of the code point found.
+ * @param   pCp         Where to store the code point.
+ *                      RTUNICP_INVALID is stored here on failure.
+ */
+DECLINLINE(int) RTLatin1GetCpNEx(const char **ppszLatin1, size_t *pcchLatin1, PRTUNICP pCp)
+{
+    if (RT_LIKELY(*pcchLatin1 != 0))
+    {
+        const unsigned char uch = **(const unsigned char **)ppszLatin1;
+        (*ppszLatin1)++;
+        (*pcchLatin1)--;
+        *pCp = uch;
+        return VINF_SUCCESS;
+    }
+    *pCp = RTUNICP_INVALID;
+    return VERR_END_OF_STRING;
+}
+
+/**
+ * Get the Latin-1 size in characters of a given Unicode code point.
+ *
+ * The code point is expected to be a valid Unicode one, but not necessarily in
+ * the range supported by Latin-1.
+ *
+ * @returns the size in characters, or zero if there is no Latin-1 encoding
+ */
+DECLINLINE(size_t) RTLatin1CpSize(RTUNICP CodePoint)
+{
+    if (CodePoint < 0x100)
+        return 1;
+    return 0;
+}
+
+/**
+ * Put the unicode code point at the given string position
+ * and return the pointer to the char following it.
+ *
+ * This function will not consider anything at or following the
+ * buffer area pointed to by psz. It is therefore not suitable for
+ * inserting code points into a string, only appending/overwriting.
+ *
+ * @returns pointer to the char following the written code point.
+ * @param   pszLatin1   The string.
+ * @param   CodePoint   The code point to write.
+ *                      This should not be RTUNICP_INVALID or any other
+ *                      character out of the Latin-1 range.
+ */
+DECLINLINE(char *) RTLatin1PutCp(char *pszLatin1, RTUNICP CodePoint)
+{
+    AssertReturn(CodePoint < 0x100, NULL);
+    *pszLatin1++ = (unsigned char)CodePoint;
+    return pszLatin1;
+}
+
+/**
+ * Skips ahead, past the current code point.
+ *
+ * @returns Pointer to the char after the current code point.
+ * @param   pszLatin1   Pointer to the current code point.
+ * @remark  This will not move the next valid code point, only past the current one.
+ */
+DECLINLINE(char *) RTLatin1NextCp(const char *pszLatin1)
+{
+    pszLatin1++;
+    return (char *)pszLatin1;
+}
+
+/**
+ * Skips back to the previous code point.
+ *
+ * @returns Pointer to the char before the current code point.
+ * @returns pszLatin1Start on failure.
+ * @param   pszLatin1Start  Pointer to the start of the string.
+ * @param   pszLatin1       Pointer to the current code point.
+ */
+DECLINLINE(char *) RTLatin1PrevCp(const char *pszLatin1Start, const char *pszLatin1)
+{
+    if ((uintptr_t)pszLatin1 > (uintptr_t)pszLatin1Start)
+    {
+        pszLatin1--;
+        return (char *)pszLatin1;
+    }
+    return (char *)pszLatin1Start;
+}
+
+/**
+ * Translate a Latin1 string into a UTF-8 allocating the result buffer (default
+ * tag).
+ *
+ * @returns iprt status code.
+ * @param   pszLatin1       Latin1 string to convert.
+ * @param   ppszString      Receives pointer of allocated UTF-8 string on
+ *                          success, and is always set to NULL on failure.
+ *                          The returned pointer must be freed using RTStrFree().
+ */
+#define RTLatin1ToUtf8(pszLatin1, ppszString)       RTLatin1ToUtf8Tag((pszLatin1), (ppszString), RTSTR_TAG)
+
+/**
+ * Translate a Latin-1 string into a UTF-8 allocating the result buffer.
+ *
+ * @returns iprt status code.
+ * @param   pszLatin1       Latin-1 string to convert.
+ * @param   ppszString      Receives pointer of allocated UTF-8 string on
+ *                          success, and is always set to NULL on failure.
+ *                          The returned pointer must be freed using RTStrFree().
+ * @param   pszTag          Allocation tag used for statistics and such.
+ */
+RTDECL(int)  RTLatin1ToUtf8Tag(const char *pszLatin1, char **ppszString, const char *pszTag);
+
+/**
+ * Translates Latin-1 to UTF-8 using buffer provided by the caller or a fittingly
+ * sized buffer allocated by the function (default tag).
+ *
+ * @returns iprt status code.
+ * @param   pszLatin1       The Latin-1 string to convert.
+ * @param   cchLatin1       The number of Latin-1 characters to translate from
+ *                          pszLatin1. The translation will stop when reaching
+ *                          cchLatin1 or the terminator ('\\0').  Use RTSTR_MAX
+ *                          to translate the entire string.
+ * @param   ppsz            If @a cch is non-zero, this must either be pointing
+ *                          to a pointer to a buffer of the specified size, or
+ *                          pointer to a NULL pointer.  If *ppsz is NULL or
+ *                          @a cch is zero a buffer of at least @a cch chars
+ *                          will be allocated to hold the translated string. If
+ *                          a buffer was requested it must be freed using
+ *                          RTStrFree().
+ * @param   cch             The buffer size in chars (the type). This includes the terminator.
+ * @param   pcch            Where to store the length of the translated string,
+ *                          excluding the terminator. (Optional)
+ *
+ *                          This may be set under some error conditions,
+ *                          however, only for VERR_BUFFER_OVERFLOW and
+ *                          VERR_NO_STR_MEMORY will it contain a valid string
+ *                          length that can be used to resize the buffer.
+ */
+#define RTLatin1ToUtf8Ex(pszLatin1, cchLatin1, ppsz, cch, pcch) \
+    RTLatin1ToUtf8ExTag((pszLatin1), (cchLatin1), (ppsz), (cch), (pcch), RTSTR_TAG)
+
+/**
+ * Translates Latin1 to UTF-8 using buffer provided by the caller or a fittingly
+ * sized buffer allocated by the function (custom tag).
+ *
+ * @returns iprt status code.
+ * @param   pszLatin1       The Latin1 string to convert.
+ * @param   cchLatin1       The number of Latin1 characters to translate from
+ *                          pwszString.  The translation will stop when
+ *                          reaching cchLatin1 or the terminator ('\\0').  Use
+ *                          RTSTR_MAX to translate the entire string.
+ * @param   ppsz            If cch is non-zero, this must either be pointing to
+ *                          a pointer to a buffer of the specified size, or
+ *                          pointer to a NULL pointer.  If *ppsz is NULL or cch
+ *                          is zero a buffer of at least cch chars will be
+ *                          allocated to hold the translated string.  If a
+ *                          buffer was requested it must be freed using
+ *                          RTStrFree().
+ * @param   cch             The buffer size in chars (the type).  This includes
+ *                          the terminator.
+ * @param   pcch            Where to store the length of the translated string,
+ *                          excluding the terminator. (Optional)
+ *
+ *                          This may be set under some error conditions,
+ *                          however, only for VERR_BUFFER_OVERFLOW and
+ *                          VERR_NO_STR_MEMORY will it contain a valid string
+ *                          length that can be used to resize the buffer.
+ * @param   pszTag          Allocation tag used for statistics and such.
+ */
+RTDECL(int)  RTLatin1ToUtf8ExTag(const char *pszLatin1, size_t cchLatin1, char **ppsz, size_t cch, size_t *pcch,
+                                 const char *pszTag);
+
+/**
+ * Calculates the length of the Latin-1 string in UTF-8 chars (bytes).
+ *
+ * The primary purpose of this function is to help allocate buffers for
+ * RTLatin1ToUtf8() of the correct size. For most other purposes
+ * RTLatin1ToUtf8Ex() should be used.
+ *
+ * @returns Number of chars (bytes).
+ * @returns 0 if the string was incorrectly encoded.
+ * @param   pszLatin1     The Latin-1 string.
+ */
+RTDECL(size_t) RTLatin1CalcUtf8Len(const char *pszLatin1);
+
+/**
+ * Calculates the length of the Latin-1 string in UTF-8 chars (bytes).
+ *
+ * @returns iprt status code.
+ * @param   pszLatin1   The Latin-1 string.
+ * @param   cchLatin1   The max string length. Use RTSTR_MAX to process the
+ *                      entire string.
+ * @param   pcch        Where to store the string length (in bytes).  Optional.
+ *                      This is undefined on failure.
+ */
+RTDECL(int) RTLatin1CalcUtf8LenEx(const char *pszLatin1, size_t cchLatin1, size_t *pcch);
+
+/**
+ * Calculates the length of the Latin-1 (ISO-8859-1) string in RTUTF16 items.
+ *
+ * @returns Number of RTUTF16 items.
+ * @param   pszLatin1       The Latin-1 string.
+ */
+RTDECL(size_t) RTLatin1CalcUtf16Len(const char *pszLatin1);
+
+/**
+ * Calculates the length of the Latin-1 (ISO-8859-1) string in RTUTF16 items.
+ *
+ * @returns iprt status code.
+ * @param   pszLatin1       The Latin-1 string.
+ * @param   cchLatin1       The max string length. Use RTSTR_MAX to process the
+ *                          entire string.
+ * @param   pcwc            Where to store the string length. Optional.
+ *                          This is undefined on failure.
+ */
+RTDECL(int) RTLatin1CalcUtf16LenEx(const char *pszLatin1, size_t cchLatin1, size_t *pcwc);
+
+/**
+ * Translate a Latin-1 (ISO-8859-1) string into a UTF-16 allocating the result
+ * buffer (default tag).
+ *
+ * @returns iprt status code.
+ * @param   pszLatin1       The Latin-1 string to convert.
+ * @param   ppwszString     Receives pointer to the allocated UTF-16 string. The
+ *                          returned string must be freed using RTUtf16Free().
+ */
+#define RTLatin1ToUtf16(pszLatin1, ppwszString)     RTLatin1ToUtf16Tag((pszLatin1), (ppwszString), RTSTR_TAG)
+
+/**
+ * Translate a Latin-1 (ISO-8859-1) string into a UTF-16 allocating the result
+ * buffer (custom tag).
+ *
+ * @returns iprt status code.
+ * @param   pszLatin1       The Latin-1 string to convert.
+ * @param   ppwszString     Receives pointer to the allocated UTF-16 string. The
+ *                          returned string must be freed using RTUtf16Free().
+ * @param   pszTag          Allocation tag used for statistics and such.
+ */
+RTDECL(int) RTLatin1ToUtf16Tag(const char *pszLatin1, PRTUTF16 *ppwszString, const char *pszTag);
+
+/**
+ * Translates pszLatin1 from Latin-1 (ISO-8859-1) to UTF-16, allocating the
+ * result buffer if requested (default tag).
+ *
+ * @returns iprt status code.
+ * @param   pszLatin1       The Latin-1 string to convert.
+ * @param   cchLatin1       The maximum size in chars (the type) to convert. The
+ *                          conversion stops when it reaches cchLatin1 or the
+ *                          string terminator ('\\0'). Use RTSTR_MAX to
+ *                          translate the entire string.
+ * @param   ppwsz           If cwc is non-zero, this must either be pointing
+ *                          to pointer to a buffer of the specified size, or
+ *                          pointer to a NULL pointer.
+ *                          If *ppwsz is NULL or cwc is zero a buffer of at
+ *                          least cwc items will be allocated to hold the
+ *                          translated string. If a buffer was requested it
+ *                          must be freed using RTUtf16Free().
+ * @param   cwc             The buffer size in RTUTF16s. This includes the
+ *                          terminator.
+ * @param   pcwc            Where to store the length of the translated string,
+ *                          excluding the terminator. (Optional)
+ *
+ *                          This may be set under some error conditions,
+ *                          however, only for VERR_BUFFER_OVERFLOW and
+ *                          VERR_NO_STR_MEMORY will it contain a valid string
+ *                          length that can be used to resize the buffer.
+ */
+#define RTLatin1ToUtf16Ex(pszLatin1, cchLatin1, ppwsz, cwc, pcwc) \
+    RTLatin1ToUtf16ExTag((pszLatin1), (cchLatin1), (ppwsz), (cwc), (pcwc), RTSTR_TAG)
+
+/**
+ * Translates pszLatin1 from Latin-1 (ISO-8859-1) to UTF-16, allocating the
+ * result buffer if requested.
+ *
+ * @returns iprt status code.
+ * @param   pszLatin1       The Latin-1 string to convert.
+ * @param   cchLatin1       The maximum size in chars (the type) to convert. The
+ *                          conversion stops when it reaches cchLatin1 or the
+ *                          string terminator ('\\0'). Use RTSTR_MAX to
+ *                          translate the entire string.
+ * @param   ppwsz           If cwc is non-zero, this must either be pointing
+ *                          to pointer to a buffer of the specified size, or
+ *                          pointer to a NULL pointer.
+ *                          If *ppwsz is NULL or cwc is zero a buffer of at
+ *                          least cwc items will be allocated to hold the
+ *                          translated string. If a buffer was requested it
+ *                          must be freed using RTUtf16Free().
+ * @param   cwc             The buffer size in RTUTF16s. This includes the
+ *                          terminator.
+ * @param   pcwc            Where to store the length of the translated string,
+ *                          excluding the terminator. (Optional)
+ *
+ *                          This may be set under some error conditions,
+ *                          however, only for VERR_BUFFER_OVERFLOW and
+ *                          VERR_NO_STR_MEMORY will it contain a valid string
+ *                          length that can be used to resize the buffer.
+ * @param   pszTag          Allocation tag used for statistics and such.
+ */
+RTDECL(int) RTLatin1ToUtf16ExTag(const char *pszLatin1, size_t cchLatin1,
+                                 PRTUTF16 *ppwsz, size_t cwc, size_t *pcwc, const char *pszTag);
+
+/** @} */
+
+RT_C_DECLS_END
+
+/** @} */
+
+#endif
+
diff --git a/include/iprt/ldr.h b/include/iprt/ldr.h
index 5e8edc9..0ac03ea 100644
--- a/include/iprt/ldr.h
+++ b/include/iprt/ldr.h
@@ -587,10 +587,10 @@ RTDECL(size_t) RTLdrSize(RTLDRMOD hLdrMod);
  * @param   pValue          Where to store the symbol value (address).
  * @param   pvUser          User argument.
  */
-typedef DECLCALLBACK(int) RTLDRIMPORT(RTLDRMOD hLdrMod, const char *pszModule, const char *pszSymbol, unsigned uSymbol,
-                                      PRTLDRADDR pValue, void *pvUser);
+typedef DECLCALLBACK(int) FNRTLDRIMPORT(RTLDRMOD hLdrMod, const char *pszModule, const char *pszSymbol, unsigned uSymbol,
+                                        PRTLDRADDR pValue, void *pvUser);
 /** Pointer to a FNRTLDRIMPORT() callback function. */
-typedef RTLDRIMPORT *PFNRTLDRIMPORT;
+typedef FNRTLDRIMPORT *PFNRTLDRIMPORT;
 
 /**
  * Loads the image into a buffer provided by the user and applies fixups
@@ -634,9 +634,9 @@ RTDECL(int) RTLdrRelocate(RTLDRMOD hLdrMod, void *pvBits, RTLDRADDR NewBaseAddre
  * @param   Value           Symbol value.
  * @param   pvUser          The user argument specified to RTLdrEnumSymbols().
  */
-typedef DECLCALLBACK(int) RTLDRENUMSYMS(RTLDRMOD hLdrMod, const char *pszSymbol, unsigned uSymbol, RTLDRADDR Value, void *pvUser);
-/** Pointer to a RTLDRENUMSYMS() callback function. */
-typedef RTLDRENUMSYMS *PFNRTLDRENUMSYMS;
+typedef DECLCALLBACK(int) FNRTLDRENUMSYMS(RTLDRMOD hLdrMod, const char *pszSymbol, unsigned uSymbol, RTLDRADDR Value, void *pvUser);
+/** Pointer to a FNRTLDRENUMSYMS() callback function. */
+typedef FNRTLDRENUMSYMS *PFNRTLDRENUMSYMS;
 
 /**
  * Enumerates all symbols in a module.
@@ -689,7 +689,7 @@ typedef enum RTLDRDBGINFOTYPE
     RTLDRDBGINFOTYPE_COFF,
     /** Watcom debug info. */
     RTLDRDBGINFOTYPE_WATCOM,
-    /** IBM High Level Language debug info.. */
+    /** IBM High Level Language debug info. */
     RTLDRDBGINFOTYPE_HLL,
     /** The end of the valid debug info values (exclusive). */
     RTLDRDBGINFOTYPE_END,
@@ -930,9 +930,9 @@ RTDECL(int) RTLdrLinkAddressToRva(RTLDRMOD hLdrMod, RTLDRADDR LinkAddress, PRTLD
  * @returns IPRT status code.
  *
  * @param   hLdrMod         The module handle.
- * @param   Rva             The link address to convert.
- * @param   piSeg           Where to return the segment index.
- * @param   poffSeg         Where to return the segment offset.
+ * @param   iSeg            The segment index.
+ * @param   offSeg          The segment offset.
+ * @param   pRva            Where to return the RVA.
  */
 RTDECL(int) RTLdrSegOffsetToRva(RTLDRMOD hLdrMod, uint32_t iSeg, RTLDRADDR offSeg, PRTLDRADDR pRva);
 
@@ -942,9 +942,9 @@ RTDECL(int) RTLdrSegOffsetToRva(RTLDRMOD hLdrMod, uint32_t iSeg, RTLDRADDR offSe
  * @returns IPRT status code.
  *
  * @param   hLdrMod         The module handle.
- * @param   iSeg            The segment index.
- * @param   offSeg          The segment offset.
- * @param   pRva            Where to return the RVA.
+ * @param   Rva             The link address to convert.
+ * @param   piSeg           Where to return the segment index.
+ * @param   poffSeg         Where to return the segment offset.
  */
 RTDECL(int) RTLdrRvaToSegOffset(RTLDRMOD hLdrMod, RTLDRADDR Rva, uint32_t *piSeg, PRTLDRADDR poffSeg);
 
@@ -1035,7 +1035,7 @@ typedef enum RTLDRPROP
  * @retval  VERR_INVALID_HANDLE if the handle is invalid.
  *
  * @param   hLdrMod         The module handle.
- * @param   enmLdrProp      The property to query.
+ * @param   enmProp         The property to query.
  * @param   pvBuf           Pointer to the input / output buffer.  In most cases
  *                          it's only used for returning data.
  * @param   cbBuf           The size of the buffer.
@@ -1058,7 +1058,7 @@ RTDECL(int) RTLdrQueryProp(RTLDRMOD hLdrMod, RTLDRPROP enmProp, void *pvBuf, siz
  * @retval  VERR_INVALID_HANDLE if the handle is invalid.
  *
  * @param   hLdrMod         The module handle.
- * @param   enmLdrProp      The property to query.
+ * @param   enmProp         The property to query.
  * @param   pvBits          Optional pointer to bits returned by
  *                          RTLdrGetBits().  This can be utilized by some module
  *                          interpreters to reduce memory consumption and file
@@ -1070,7 +1070,7 @@ RTDECL(int) RTLdrQueryProp(RTLDRMOD hLdrMod, RTLDRPROP enmProp, void *pvBuf, siz
  *                          buffer size errors, this is set to the correct size.
  *                          Optional.
  */
-RTDECL(int) RTLdrQueryPropEx(RTLDRMOD hLdrMod, RTLDRPROP enmProp, void *pvBits, void *pvBuf, size_t cbBuf, size_t *pcbBuf);
+RTDECL(int) RTLdrQueryPropEx(RTLDRMOD hLdrMod, RTLDRPROP enmProp, void *pvBits, void *pvBuf, size_t cbBuf, size_t *pcbRet);
 
 
 /**
diff --git a/include/iprt/ldrlazy.h b/include/iprt/ldrlazy.h
index 1150cb2..c20bd44 100644
--- a/include/iprt/ldrlazy.h
+++ b/include/iprt/ldrlazy.h
@@ -28,9 +28,16 @@
 
 #include <iprt/ldr.h>
 
-/** @defgroup grp_rt_ldrlazy        Lazy shared library linking.
+/** @defgroup grp_rt_ldrlazy        RTLdrLazy - Lazy shared library linking.
  * @ingroup grp_rt
  *
+ * This is a set of macros which will produce code for dynamically loading and
+ * resolving symbols in shared libraries (DLLs).
+ *
+ * There is an assembly language alternative to this that only requires writing
+ * a list of symbols in a format similar to what the microsoft linkers take as
+ * input when producing DLLs and import libraries.  That is probably preferable
+ * over this code.  See src/bldprog/VBoxDef2LazyLoad.cpp.
  *
  * @{
  */
diff --git a/include/iprt/list-off32.h b/include/iprt/list-off32.h
index 9026772..3b31a90 100644
--- a/include/iprt/list-off32.h
+++ b/include/iprt/list-off32.h
@@ -206,8 +206,8 @@ DECLINLINE(void) RTListOff32NodeRemove(PRTLISTOFF32NODE pNode)
 /**
  * Checks if a node is the last element in the list.
  *
- * @retval  @c true if the node is the last element in the list.
- * @retval  @c false otherwise
+ * @retval  true if the node is the last element in the list.
+ * @retval  false otherwise
  *
  * @param   pList               The list.
  * @param   pNode               The node to check.
@@ -217,8 +217,8 @@ DECLINLINE(void) RTListOff32NodeRemove(PRTLISTOFF32NODE pNode)
 /**
  * Checks if a node is the first element in the list.
  *
- * @retval  @c true if the node is the first element in the list.
- * @retval  @c false otherwise.
+ * @retval  true if the node is the first element in the list.
+ * @retval  false otherwise.
  *
  * @param   pList               The list.
  * @param   pNode               The node to check.
@@ -228,11 +228,11 @@ DECLINLINE(void) RTListOff32NodeRemove(PRTLISTOFF32NODE pNode)
 /**
  * Checks if a type converted node is actually the dummy element (@a pList).
  *
- * @retval  @c true if the node is the dummy element in the list.
- * @retval  @c false otherwise.
+ * @retval  true if the node is the dummy element in the list.
+ * @retval  false otherwise.
  *
  * @param   pList               The list.
- * @param   pNodeStruct         The node structure to check.  Typically
+ * @param   pNode               The node structure to check.  Typically
  *                              something obtained from RTListOff32NodeGetNext()
  *                              or RTListOff32NodeGetPrev().  This is NOT a
  *                              PRTLISTOFF32NODE but something that contains a
@@ -249,8 +249,8 @@ DECLINLINE(void) RTListOff32NodeRemove(PRTLISTOFF32NODE pNode)
 /**
  * Checks if a list is empty.
  *
- * @retval  @c true if the list is empty.
- * @retval  @c false otherwise.
+ * @retval  true if the list is empty.
+ * @retval  false otherwise.
  *
  * @param   pList               The list to check.
  */
diff --git a/include/iprt/list.h b/include/iprt/list.h
index 283f703..7edb2db 100644
--- a/include/iprt/list.h
+++ b/include/iprt/list.h
@@ -152,8 +152,8 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
 /**
  * Checks if a node is the last element in the list.
  *
- * @retval  @c true if the node is the last element in the list.
- * @retval  @c false otherwise
+ * @retval  true if the node is the last element in the list.
+ * @retval  false otherwise
  *
  * @param   pList               The list.
  * @param   pNode               The node to check.
@@ -163,8 +163,8 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
 /**
  * Checks if a node is the first element in the list.
  *
- * @retval  @c true if the node is the first element in the list.
- * @retval  @c false otherwise.
+ * @retval  true if the node is the first element in the list.
+ * @retval  false otherwise.
  *
  * @param   pList               The list.
  * @param   pNode               The node to check.
@@ -174,11 +174,11 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
 /**
  * Checks if a type converted node is actually the dummy element (@a pList).
  *
- * @retval  @c true if the node is the dummy element in the list.
- * @retval  @c false otherwise.
+ * @retval  true if the node is the dummy element in the list.
+ * @retval  false otherwise.
  *
  * @param   pList               The list.
- * @param   pNodeStruct         The node structure to check.  Typically
+ * @param   pNode               The node structure to check.  Typically
  *                              something obtained from RTListNodeGetNext() or
  *                              RTListNodeGetPrev().  This is NOT a PRTLISTNODE
  *                              but something that contains a RTLISTNODE member!
@@ -194,8 +194,8 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
 /**
  * Checks if a list is empty.
  *
- * @retval  @c true if the list is empty.
- * @retval  @c false otherwise.
+ * @retval  true if the list is empty.
+ * @retval  false otherwise.
  *
  * @param   pList               The list to check.
  */
diff --git a/include/iprt/lockvalidator.h b/include/iprt/lockvalidator.h
index 826f01b..d2c88cb 100644
--- a/include/iprt/lockvalidator.h
+++ b/include/iprt/lockvalidator.h
@@ -693,6 +693,7 @@ RTDECL(uint32_t) RTLockValidatorRecSharedSetSubClass(PRTLOCKVALRECSHRD pRec, uin
  * @param   hThreadSelf         The handle of the calling thread.  If not known,
  *                              pass NIL_RTTHREAD and we'll figure it out.
  * @param   pSrcPos             The source position of the lock operation.
+ * @param   cMillies            Intended sleep time in milliseconds.
  */
 RTDECL(int)  RTLockValidatorRecSharedCheckOrder(PRTLOCKVALRECSHRD pRec, RTTHREAD hThreadSelf,
                                                 PCRTLOCKVALSRCPOS pSrcPos, RTMSINTERVAL cMillies);
@@ -715,6 +716,7 @@ RTDECL(int)  RTLockValidatorRecSharedCheckOrder(PRTLOCKVALRECSHRD pRec, RTTHREAD
  * @param   hThreadSelf         The current thread.  Shall not be NIL_RTTHREAD!
  * @param   pSrcPos             The source position of the lock operation.
  * @param   fRecursiveOk        Whether it's ok to recurse.
+ * @param   cMillies            Intended sleep time in milliseconds.
  * @param   enmSleepState       The sleep state to enter on successful return.
  * @param   fReallySleeping     Is it really going to sleep now or not.  Use
  *                              false before calls to other IPRT synchronization
@@ -733,6 +735,7 @@ RTDECL(int) RTLockValidatorRecSharedCheckBlocking(PRTLOCKVALRECSHRD pRec, RTTHRE
  * @param   hThreadSelf         The current thread.  Shall not be NIL_RTTHREAD!
  * @param   pSrcPos             The source position of the lock operation.
  * @param   fRecursiveOk        Whether it's ok to recurse.
+ * @param   cMillies            Intended sleep time in milliseconds.
  * @param   enmSleepState       The sleep state to enter on successful return.
  * @param   fReallySleeping     Is it really going to sleep now or not.  Use
  *                              false before calls to other IPRT synchronization
@@ -987,9 +990,8 @@ RTDECL(int) RTLockValidatorClassCreateExV(PRTLOCKVALCLASS phClass, PCRTLOCKVALSR
  * @param   fAutodidact         Whether the class should be allowed to teach
  *                              itself new locking order rules (true), or if the
  *                              user will teach it all it needs to know (false).
- * @param   pszFile             The source position of the call, file.
- * @param   iLine               The source position of the call, line.
- * @param   pszFunction         The source position of the call, function.
+ * @param   SRC_POS             The source position where call is being made from.
+ *                              Use RT_SRC_POS when possible.  Optional.
  * @param   pszNameFmt          Class name format string, optional (NULL).  Max
  *                              length is 32 bytes.
  * @param   ...                 Format string arguments.
@@ -1006,9 +1008,8 @@ RTDECL(int) RTLockValidatorClassCreate(PRTLOCKVALCLASS phClass, bool fAutodidact
  * @returns Class handle with a reference that is automatically consumed by the
  *          first retainer.  NIL_RTLOCKVALCLASS if we run into trouble.
  *
- * @param   pszFile             The source position of the call, file.
- * @param   iLine               The source position of the call, line.
- * @param   pszFunction         The source position of the call, function.
+ * @param   SRC_POS             The source position where call is being made from.
+ *                              Use RT_SRC_POS when possible.  Optional.
  * @param   pszNameFmt          Class name format string, optional (NULL).  Max
  *                              length is 32 bytes.
  * @param   ...                 Format string arguments.
@@ -1028,9 +1029,8 @@ RTDECL(RTLOCKVALCLASS) RTLockValidatorClassFindForSrcPos(PRTLOCKVALSRCPOS pSrcPo
  * Finds or creates a class given the source position.
  *
  * @returns Class handle (not retained!) or NIL_RTLOCKVALCLASS.
- * @param   pszFile             The source file.
- * @param   iLine               The line in that source file.
- * @param   pszFunction         The function name.
+ * @param   SRC_POS             The source position where call is being made from.
+ *                              Use RT_SRC_POS when possible.  Optional.
  * @param   pszNameFmt          Class name format string, optional (NULL).  Max
  *                              length is 32 bytes.
  * @param   ...                 Format string arguments.
@@ -1057,7 +1057,7 @@ RTDECL(uint32_t) RTLockValidatorClassRelease(RTLOCKVALCLASS hClass);
 
 /**
  * Teaches the class @a hClass that locks in the class @a hPriorClass can be
- * held when taking a lock of class @hClass
+ * held when taking a lock of class @a hClass
  *
  * @returns IPRT status.
  * @param   hClass              Handle to the pupil class.
@@ -1072,7 +1072,7 @@ RTDECL(int) RTLockValidatorClassAddPriorClass(RTLOCKVALCLASS hClass, RTLOCKVALCL
  *
  * @returns IPRT status.
  * @param   hClass              Handle to the class to change.
- * @param   fEnable             Enable it (true) or disable it (false).
+ * @param   fEnabled            Enable it (true) or disable it (false).
  */
 RTDECL(int) RTLockValidatorClassEnforceStrictReleaseOrder(RTLOCKVALCLASS hClass, bool fEnabled);
 
diff --git a/include/iprt/log.h b/include/iprt/log.h
index 2ee0daf..fb423c5 100644
--- a/include/iprt/log.h
+++ b/include/iprt/log.h
@@ -1103,7 +1103,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 /** @name Misc Logging Macros
  * @{ */
 
-/** @def LogWarning1
+/** @def Log1Warning
  * The same as Log(), but prepents a <tt>"WARNING! "</tt> string to the message.
  *
  * @param   a   Custom log message in format <tt>("string\n" [, args])</tt>.
@@ -1114,7 +1114,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
 # define Log1Warning(a)     do { Log(("WARNING! ")); Log(a); } while (0)
 #endif
 
-/** @def LogWarningFunc
+/** @def Log1WarningFunc
  * The same as LogWarning(), but prepents the log message with the function name.
  *
  * @param   a   Log message in format <tt>("string\n" [, args])</tt>.
@@ -1127,7 +1127,7 @@ RTDECL(void) RTLogPrintfEx(void *pvInstance, unsigned fFlags, unsigned iGroup,
     do { Log((LOG_FN_FMT ": WARNING! ", __PRETTY_FUNCTION__)); Log(a); } while (0)
 #endif
 
-/** @def LogWarningThisFunc
+/** @def Log1WarningThisFunc
  * The same as LogWarningFunc() but for class functions (methods): the resulting
  * log line is additionally prepended with a hex value of |this| pointer.
  *
@@ -2325,11 +2325,11 @@ RTDECL(void) RTLogPrintf(const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(1, 2);
  * vprintf like function for writing to the default log.
  *
  * @param   pszFormat   Printf like format string.
- * @param   args        Optional arguments as specified in pszFormat.
+ * @param   va          Optional arguments as specified in pszFormat.
  *
  * @remark The API doesn't support formatting of floating point numbers at the moment.
  */
-RTDECL(void) RTLogPrintfV(const char *pszFormat, va_list args)  RT_IPRT_FORMAT_ATTR(1, 0);
+RTDECL(void) RTLogPrintfV(const char *pszFormat, va_list va)  RT_IPRT_FORMAT_ATTR(1, 0);
 
 /**
  * Dumper vprintf-like function outputting to a logger.
diff --git a/include/iprt/mangling.h b/include/iprt/mangling.h
index 8dcaa9b..9f42899 100644
--- a/include/iprt/mangling.h
+++ b/include/iprt/mangling.h
@@ -1029,9 +1029,11 @@
 # define RTNetUDPChecksum                               RT_MANGLER(RTNetUDPChecksum)
 # define RTNetStrToMacAddr                              RT_MANGLER(RTNetStrToMacAddr)
 # define RTNetIsIPv4AddrStr                             RT_MANGLER(RTNetIsIPv4AddrStr)
+# define RTNetStrIsIPv4AddrAny                          RT_MANGLER(RTNetStrIsIPv4AddrAny)
 # define RTNetStrToIPv4AddrEx                           RT_MANGLER(RTNetStrToIPv4AddrEx)
 # define RTNetStrToIPv4Addr                             RT_MANGLER(RTNetStrToIPv4Addr)
 # define RTNetIsIPv6AddrStr                             RT_MANGLER(RTNetIsIPv6AddrStr)
+# define RTNetStrIsIPv6AddrAny                          RT_MANGLER(RTNetStrIsIPv6AddrAny)
 # define RTNetStrToIPv6AddrEx                           RT_MANGLER(RTNetStrToIPv6AddrEx)
 # define RTNetStrToIPv6Addr                             RT_MANGLER(RTNetStrToIPv6Addr)
 # define RTOnceSlow                                     RT_MANGLER(RTOnceSlow)
diff --git a/include/iprt/manifest.h b/include/iprt/manifest.h
index 33f21aa..ea2e074 100644
--- a/include/iprt/manifest.h
+++ b/include/iprt/manifest.h
@@ -113,7 +113,7 @@ RTDECL(int) RTManifestDup(RTMANIFEST hManifestSrc, PRTMANIFEST phManifestDst);
  *                              pszError.
  */
 RTDECL(int) RTManifestEqualsEx(RTMANIFEST hManifest1, RTMANIFEST hManifest2, const char * const *papszIgnoreEntries,
-                               const char * const *papszIgnoreAttr, uint32_t fFlags, char *pszError, size_t cbError);
+                               const char * const *papszIgnoreAttrs, uint32_t fFlags, char *pszError, size_t cbError);
 
 /** @defgroup RTMANIFEST_EQUALS_XXX     RTManifestEqualsEx flags
  * @{ */
@@ -163,7 +163,7 @@ RTDECL(int) RTManifestSetAttr(RTMANIFEST hManifest, const char *pszAttr, const c
 RTDECL(int) RTManifestUnsetAttr(RTMANIFEST hManifest, const char *pszAttr);
 
 /**
- * Query a manifest entry attribute.
+ * Query a manifest attribute.
  *
  * @returns IPRT status code.
  * @retval  VERR_BUFFER_OVERFLOW if the value buffer is too small. The @a
@@ -173,7 +173,6 @@ RTDECL(int) RTManifestUnsetAttr(RTMANIFEST hManifest, const char *pszAttr);
  * @retval  VERR_MANIFEST_ATTR_TYPE_MISMATCH
  *
  * @param   hManifest           The manifest handle.
- * @param   pszEntry            The entry name.
  * @param   pszAttr             The attribute name.  If NULL, it will be
  *                              selected by @a fType alone.
  * @param   fType               The attribute types the entry should match. Pass
@@ -491,7 +490,7 @@ RTR3DECL(int) RTManifestVerifyDigestType(void const *pvBuf, size_t cbSize, RTDIG
  * @param   pvBuf                Pointer to memory buffer of the manifest file.
  * @param   cbSize               Size of the memory buffer.
  * @param   paTests              Array of file names and digests.
- * @param   cTest                Number of entries in paTests.
+ * @param   cTests               Number of entries in paTests.
  * @param   piFailed             A index to paTests in the
  *                               VERR_MANIFEST_DIGEST_MISMATCH error case
  *                               (optional).
diff --git a/include/iprt/mem.h b/include/iprt/mem.h
index 405fbd6..c8f89c5 100644
--- a/include/iprt/mem.h
+++ b/include/iprt/mem.h
@@ -143,7 +143,6 @@ RTDECL(void)    RTMemTmpFree(void *pv) RT_NO_THROW_PROTO;
  * @returns Pointer to the allocated memory.
  * @returns NULL on failure, assertion raised in strict builds.
  * @param   cb      Size in bytes of the memory block to allocated.
- * @param   pszTag  Allocation tag used for statistics and such.
  */
 #define RTMemAlloc(cb)                  RTMemAllocTag((cb), RTMEM_TAG)
 
@@ -298,7 +297,7 @@ RTDECL(void)    RTMemFree(void *pv) RT_NO_THROW_PROTO;
 
 
 
-/** @def RTR0MemAllocEx and RTR0MemAllocExTag flags.
+/** @name RTR0MemAllocEx and RTR0MemAllocExTag flags.
  * @{ */
 /** The returned memory should be zeroed. */
 #define RTMEMALLOCEX_FLAGS_ZEROED           RT_BIT(0)
@@ -368,11 +367,6 @@ RTDECL(int) RTMemAllocExTag(size_t cb, size_t cbAlignment, uint32_t fFlags, cons
  *
  * @param   pv                  What to free, NULL is fine.
  * @param   cb                  The amount of allocated memory.
- * @param   fFlags              The flags specified when allocating the memory.
- *                              Whether the exact flags are requires depends on
- *                              the implementation, but in general, ring-0
- *                              doesn't require anything while ring-3 requires
- *                              RTMEMALLOCEX_FLAGS_EXEC if used.
  */
 RTDECL(void) RTMemFreeEx(void *pv, size_t cb) RT_NO_THROW_PROTO;
 
@@ -635,6 +629,8 @@ RTR0DECL(int) RTR0MemKernelCopyTo(void *pvDst, void const *pvSrc, size_t cb);
  * @returns NULL on failure.
  * @param   cb      Size in bytes of the memory block to allocate.
  * @param   pszTag  Allocation tag used for statistics and such.
+ * @param   SRC_POS The source position where call is being made from.
+ *                  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void *)  RTMemEfTmpAlloc(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -645,6 +641,8 @@ RTDECL(void *)  RTMemEfTmpAlloc(size_t cb, const char *pszTag, RT_SRC_POS_DECL)
  * @returns NULL on failure.
  * @param   cb      Size in bytes of the memory block to allocate.
  * @param   pszTag  Allocation tag used for statistics and such.
+ * @param   SRC_POS The source position where call is being made from.  Use
+ *                  RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void *)  RTMemEfTmpAllocZ(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -652,6 +650,8 @@ RTDECL(void *)  RTMemEfTmpAllocZ(size_t cb, const char *pszTag, RT_SRC_POS_DECL)
  * Same as RTMemTmpFree() except that it's for fenced memory.
  *
  * @param   pv      Pointer to memory block.
+ * @param   SRC_POS The source position where call is being made from.  Use
+ *                  RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void)    RTMemEfTmpFree(void *pv, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -662,6 +662,8 @@ RTDECL(void)    RTMemEfTmpFree(void *pv, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
  * @returns NULL on failure.
  * @param   cb      Size in bytes of the memory block to allocate.
  * @param   pszTag  Allocation tag used for statistics and such.
+ * @param   SRC_POS The source position where call is being made from.  Use
+ *                  RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void *)  RTMemEfAlloc(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -672,6 +674,8 @@ RTDECL(void *)  RTMemEfAlloc(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_
  * @returns NULL on failure.
  * @param   cb      Size in bytes of the memory block to allocate.
  * @param   pszTag  Allocation tag used for statistics and such.
+ * @param   SRC_POS The source position where call is being made from.  Use
+ *                  RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void *)  RTMemEfAllocZ(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -682,6 +686,8 @@ RTDECL(void *)  RTMemEfAllocZ(size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT
  * @returns NULL on failure.
  * @param   cbUnaligned Size in bytes of the memory block to allocate.
  * @param   pszTag  Allocation tag used for statistics and such.
+ * @param   SRC_POS The source position where call is being made from.  Use
+ *                  RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void *)  RTMemEfAllocVar(size_t cbUnaligned, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -692,6 +698,8 @@ RTDECL(void *)  RTMemEfAllocVar(size_t cbUnaligned, const char *pszTag, RT_SRC_P
  * @returns NULL on failure.
  * @param   cbUnaligned Size in bytes of the memory block to allocate.
  * @param   pszTag  Allocation tag used for statistics and such.
+ * @param   SRC_POS The source position where call is being made from.  Use
+ *                  RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void *)  RTMemEfAllocZVar(size_t cbUnaligned, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -703,6 +711,8 @@ RTDECL(void *)  RTMemEfAllocZVar(size_t cbUnaligned, const char *pszTag, RT_SRC_
  * @param   pvOld   The memory block to reallocate.
  * @param   cbNew   The new block size (in bytes).
  * @param   pszTag  Allocation tag used for statistics and such.
+ * @param   SRC_POS The source position where call is being made from.  Use
+ *                  RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void *)  RTMemEfRealloc(void *pvOld, size_t cbNew, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -710,6 +720,8 @@ RTDECL(void *)  RTMemEfRealloc(void *pvOld, size_t cbNew, const char *pszTag, RT
  * Free memory allocated by any of the RTMemEf* allocators.
  *
  * @param   pv      Pointer to memory block.
+ * @param   SRC_POS The source position where call is being made from.  Use
+ *                  RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void)    RTMemEfFree(void *pv, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -721,6 +733,8 @@ RTDECL(void)    RTMemEfFree(void *pv, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
  * @param   pvSrc   The memory to duplicate.
  * @param   cb      The amount of memory to duplicate.
  * @param   pszTag  Allocation tag used for statistics and such.
+ * @param   SRC_POS The source position where call is being made from.  Use
+ *                  RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void *) RTMemEfDup(const void *pvSrc, size_t cb, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -733,6 +747,8 @@ RTDECL(void *) RTMemEfDup(const void *pvSrc, size_t cb, const char *pszTag, RT_S
  * @param   cbSrc   The amount of memory to duplicate.
  * @param   cbExtra The amount of extra memory to allocate and zero.
  * @param   pszTag  Allocation tag used for statistics and such.
+ * @param   SRC_POS The source position where call is being made from.  Use
+ *                  RT_SRC_POS when possible.  Optional.
  */
 RTDECL(void *) RTMemEfDupEx(const void *pvSrc, size_t cbSrc, size_t cbExtra, const char *pszTag, RT_SRC_POS_DECL) RT_NO_THROW_PROTO;
 
@@ -877,7 +893,7 @@ RTDECL(void *)  RTMemEfTmpAllocZNP(size_t cb, const char *pszTag) RT_NO_THROW_PR
 
 /**
  * Fenced drop-in replacement for RTMemTmpFreeTag.
- * @copydoc RTMemTmpFreeTag
+ * @copydoc RTMemTmpFree
  */
 RTDECL(void)    RTMemEfTmpFreeNP(void *pv) RT_NO_THROW_PROTO;
 
@@ -919,7 +935,7 @@ RTDECL(void)    RTMemEfFreeNP(void *pv) RT_NO_THROW_PROTO;
 
 /**
  * Fenced drop-in replacement for RTMemDupExTag.
- * @copydoc RTMemDupExTag
+ * @copydoc RTMemDupTag
  */
 RTDECL(void *) RTMemEfDupNP(const void *pvSrc, size_t cb, const char *pszTag) RT_NO_THROW_PROTO;
 
diff --git a/include/iprt/memsafer.h b/include/iprt/memsafer.h
index 1978a86..eec649a 100644
--- a/include/iprt/memsafer.h
+++ b/include/iprt/memsafer.h
@@ -162,7 +162,7 @@ RTDECL(void *) RTMemSaferAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW_PR
  * @param   pvOld       The current allocation.
  * @param   cbNew       The size of the new allocation.
  * @param   ppvNew      Where to return the pointer to the new memory.
- * @param   a_fFlags    Flags for controlling the allocation, see
+ * @param   fFlags      Flags for controlling the allocation, see
  *                      RTMEMSAFER_F_XXX.  It is not permitted to drop saftely
  *                      requirments after the initial allocation.
  * @param   pszTag      Allocation tag used for statistics and such.
diff --git a/include/iprt/message.h b/include/iprt/message.h
index bcd6fc3..0d942ca 100644
--- a/include/iprt/message.h
+++ b/include/iprt/message.h
@@ -83,7 +83,7 @@ RTDECL(int)  RTMsgErrorV(const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(
  * @param   pszFormat       The message format string.
  * @param   ...             Format arguments.
  */
-RTDECL(RTEXITCODE) RTMsgErrorExit(RTEXITCODE enmExitcode, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(2, 3);
+RTDECL(RTEXITCODE) RTMsgErrorExit(RTEXITCODE enmExitCode, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(2, 3);
 
 /**
  * Same as RTMsgErrorV() except for the return value.
@@ -105,7 +105,7 @@ RTDECL(RTEXITCODE) RTMsgErrorExitV(RTEXITCODE enmExitCode, const char *pszFormat
  * @param   pszFormat       The message format string.
  * @param   ...             Format arguments.
  */
-RTDECL(int) RTMsgErrorRc(int rc, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(2, 3);
+RTDECL(int) RTMsgErrorRc(int rcRet, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR(2, 3);
 
 /**
  * Same as RTMsgErrorV() except for the return value.
@@ -116,7 +116,7 @@ RTDECL(int) RTMsgErrorRc(int rc, const char *pszFormat, ...) RT_IPRT_FORMAT_ATTR
  * @param   pszFormat       The message format string.
  * @param   va              Format arguments.
  */
-RTDECL(int) RTMsgErrorRcV(int rc, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(2, 0);
+RTDECL(int) RTMsgErrorRcV(int rcRet, const char *pszFormat, va_list va) RT_IPRT_FORMAT_ATTR(2, 0);
 
 /**
  * Print an error message for a RTR3Init failure and suggest an exit code.
diff --git a/include/iprt/net.h b/include/iprt/net.h
index 676a19a..c35f65a 100644
--- a/include/iprt/net.h
+++ b/include/iprt/net.h
@@ -46,8 +46,8 @@ RT_C_DECLS_BEGIN
  * @returns VINF_SUCCESS on success, VERR_GETOPT_INVALID_ARGUMENT_FORMAT on
  *          failure.
  *
- * @param   pszValue        The value to convert.
- * @param   pAddr           Where to store the result.
+ * @param   pszAddr         The address string to convert.
+ * @param   pMacAddr        Where to store the result.
  */
 RTDECL(int) RTNetStrToMacAddr(const char *pszAddr, PRTMAC pMacAddr);
 
@@ -70,6 +70,14 @@ typedef RTNETADDRIPV4 const *PCRTNETADDRIPV4;
 RTDECL(bool) RTNetIsIPv4AddrStr(const char *pcszAddr);
 
 /**
+ * Tests if the given string is a wildcard IPv4 address.
+ *
+ * @returns boolean.
+ * @param   pcszAddr        String which may be an IPv4 address.
+ */
+RTDECL(bool) RTNetStrIsIPv4AddrAny(const char *pcszAddr);
+
+/**
  * Parses dotted-decimal IPv4 address into RTNETADDRIPV4 representation.
  *
  * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on
@@ -113,6 +121,14 @@ typedef RTNETADDRIPV6 const *PCRTNETADDRIPV6;
 RTDECL(bool) RTNetIsIPv6AddrStr(const char *pszAddress);
 
 /**
+ * Tests if the given string is a wildcard IPv6 address.
+ *
+ * @returns @c true if it is, @c false if not.
+ * @param   pszAddress          String which may be an IPv6 address.
+ */
+RTDECL(bool) RTNetStrIsIPv6AddrAny(const char *pszAddress);
+
+/**
  * Parses IPv6 address into RTNETADDRIPV6 representation.
  *
  * @returns VINF_SUCCESS on success, VERR_INVALID_PARAMETER on
diff --git a/include/iprt/path.h b/include/iprt/path.h
index 7e9bf74..420728f 100644
--- a/include/iprt/path.h
+++ b/include/iprt/path.h
@@ -806,7 +806,7 @@ RTDECL(void) RTPathSplitFree(PRTPATHSPLIT pSplit);
  * @retval  VERR_BUFFER_OVERFLOW if @a cbDstPath is less than or equal to
  *          RTPATHSPLIT::cchPath.
  *
- * @param   pParsed             The parser output for @a pszSrcPath.
+ * @param   pSplit              A split path (see RTPathSplit, RTPathSplitA).
  * @param   fFlags              Combination of RTPATH_STR_F_STYLE_XXX.
  *                              Most users will pass 0.
  * @param   pszDstPath          Pointer to the buffer where the path is to be
diff --git a/include/iprt/process.h b/include/iprt/process.h
index 1dc7371..fe096fe 100644
--- a/include/iprt/process.h
+++ b/include/iprt/process.h
@@ -159,7 +159,7 @@ RTR3DECL(int)   RTProcCreate(const char *pszExec, const char * const *papszArgs,
  *                      guest.
  * @param   pszAsUser   User to run the process as.  Pass NULL to use the same
  *                      user as the current process.
- *                      Windows: Use user at domain format to specify a domain.
+ *                      Windows: Use user\@domain format to specify a domain.
  * @param   pszPassword Password to use to authenticate @a pszAsUser.  Must be
  *                      NULL wif pszAsUser is NULL.  Whether this is actually
  *                      used or not depends on the platform.
@@ -340,9 +340,9 @@ RTR3DECL(char *) RTProcGetExecutablePath(char *pszExecPath, size_t cbExecPath);
  * @returns IPRT status code.  On success it is normal for the caller to exit
  *          the process by returning from main().
  *
- * @param   papszArgs       The argument vector of the calling process.
- * @param   pszDaemonized   The daemonized option.  This is appended to the end
- *                          of the parameter list of the daemonized process.
+ * @param   papszArgs           The argument vector of the calling process.
+ * @param   pszDaemonizedOpt    The daemonized option.  This is appended to the
+ *                              end of the parameter list of the daemonized process.
  */
 RTR3DECL(int)   RTProcDaemonize(const char * const *papszArgs, const char *pszDaemonizedOpt);
 
diff --git a/include/iprt/semaphore.h b/include/iprt/semaphore.h
index 22f5f1c..90383a1 100644
--- a/include/iprt/semaphore.h
+++ b/include/iprt/semaphore.h
@@ -214,11 +214,8 @@ RTDECL(int)  RTSemEventWaitEx(RTSEMEVENT hEventSem, uint32_t fFlags, uint64_t uT
  * @param   uTimeout            See RTSemEventWaitEx.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)  RTSemEventWaitExDebug(RTSEMEVENT hEventSem, uint32_t fFlags, uint64_t uTimeout,
                                    RTHCUINTPTR uId, RT_SRC_POS_DECL);
@@ -389,11 +386,8 @@ RTDECL(int)  RTSemEventMultiWaitEx(RTSEMEVENTMULTI hEventMultiSem, uint32_t fFla
  * @param   uTimeout            See RTSemEventMultiWaitEx.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)  RTSemEventMultiWaitExDebug(RTSEMEVENTMULTI hEventMultiSem, uint32_t fFlags, uint64_t uTimeout,
                                         RTHCUINTPTR uId, RT_SRC_POS_DECL);
@@ -467,8 +461,8 @@ RTDECL(int)  RTSemMutexCreate(PRTSEMMUTEX phMutexSem);
  * Creates a read/write semaphore.
  *
  * @returns iprt status code.
- * @param   phRWSem             Where to store the handle to the newly created
- *                              RW semaphore.
+ * @param   phMutexSem          Where to store the handle to the newly created
+ *                              mutex semaphore.
  * @param   fFlags              Flags, any combination of the
  *                              RTSEMMUTEX_FLAGS_XXX \#defines.
  * @param   hClass              The class (no reference consumed).  If NIL, no
@@ -555,11 +549,8 @@ RTDECL(int)  RTSemMutexRequestNoResume(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMilli
  * @param   cMillies            The number of milliseconds to wait.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)  RTSemMutexRequestDebug(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -571,11 +562,8 @@ RTDECL(int)  RTSemMutexRequestDebug(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies,
  * @param   cMillies            The number of milliseconds to wait.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)  RTSemMutexRequestNoResumeDebug(RTSEMMUTEX hMutexSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -607,11 +595,8 @@ RTDECL(int)  RTSemMutexRequestEx(RTSEMMUTEX hMutexSem, uint32_t fFlags, uint64_t
  * @param   uTimeout            See RTSemMutexRequestEx.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)  RTSemMutexRequestExDebug(RTSEMMUTEX hMutexSem, uint32_t fFlags, uint64_t uTimeout,
                                       RTHCUINTPTR uId, RT_SRC_POS_DECL);
@@ -915,11 +900,8 @@ RTDECL(int)   RTSemRWRequestReadNoResume(RTSEMRW hRWSem, RTMSINTERVAL cMillies);
  * @param   cMillies            The number of milliseconds to wait.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)   RTSemRWRequestReadDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -935,11 +917,8 @@ RTDECL(int)   RTSemRWRequestReadDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTH
  * @param   cMillies            The number of milliseconds to wait.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)   RTSemRWRequestReadNoResumeDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -978,11 +957,8 @@ RTDECL(int)   RTSemRWRequestReadEx(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTi
  * @param   uTimeout            See RTSemRWRequestReadEx.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)   RTSemRWRequestReadExDebug(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTimeout,
                                         RTHCUINTPTR uId, RT_SRC_POS_DECL);
@@ -1032,11 +1008,8 @@ RTDECL(int)   RTSemRWRequestWriteNoResume(RTSEMRW hRWSem, RTMSINTERVAL cMillies)
  * @param   cMillies            The number of milliseconds to wait.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)  RTSemRWRequestWriteDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -1048,11 +1021,8 @@ RTDECL(int)  RTSemRWRequestWriteDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTH
  * @param   cMillies            The number of milliseconds to wait.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)  RTSemRWRequestWriteNoResumeDebug(RTSEMRW hRWSem, RTMSINTERVAL cMillies, RTHCUINTPTR uId, RT_SRC_POS_DECL);
 
@@ -1087,11 +1057,8 @@ RTDECL(int)   RTSemRWRequestWriteEx(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uT
  * @param   uTimeout            See RTSemRWRequestWriteEx.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where call is being made
+ *                              from.  Use RT_SRC_POS when possible.  Optional.
  */
 RTDECL(int)  RTSemRWRequestWriteExDebug(RTSEMRW hRWSem, uint32_t fFlags, uint64_t uTimeout,
                                         RTHCUINTPTR uId, RT_SRC_POS_DECL);
diff --git a/include/iprt/sha.h b/include/iprt/sha.h
index 4caccaa..c850c7e 100644
--- a/include/iprt/sha.h
+++ b/include/iprt/sha.h
@@ -62,10 +62,10 @@ typedef RTSHA1CONTEXT *PRTSHA1CONTEXT;
  *
  * @param   pvBuf       Pointer to the data.
  * @param   cbBuf       The amount of data (in bytes).
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(void) RTSha1(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA1_HASH_SIZE]);
+RTDECL(void) RTSha1(const void *pvBuf, size_t cbBuf, uint8_t pabHash[RTSHA1_HASH_SIZE]);
 
 /**
  * Computes the SHA-1 hash for the given data comparing it with the one given.
@@ -76,7 +76,7 @@ RTDECL(void) RTSha1(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA1_HA
  * @param   pabHash     The hash to verify. (What is passed is a pointer to the
  *                      caller's buffer.)
  */
-RTDECL(bool) RTSha1Check(const void *pvBuf, size_t cbBuf, uint8_t const pabDigest[RTSHA1_HASH_SIZE]);
+RTDECL(bool) RTSha1Check(const void *pvBuf, size_t cbBuf, uint8_t const pabHash[RTSHA1_HASH_SIZE]);
 
 /**
  * Initializes the SHA-1 context.
@@ -98,22 +98,22 @@ RTDECL(void) RTSha1Update(PRTSHA1CONTEXT pCtx, const void *pvBuf, size_t cbBuf);
  * Compute the SHA-1 hash of the data.
  *
  * @param   pCtx        Pointer to the SHA-1 context.
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(void) RTSha1Final(PRTSHA1CONTEXT pCtx, uint8_t pabDigest[RTSHA1_HASH_SIZE]);
+RTDECL(void) RTSha1Final(PRTSHA1CONTEXT pCtx, uint8_t pabHash[RTSHA1_HASH_SIZE]);
 
 /**
  * Converts a SHA-1 hash to a digest string.
  *
  * @returns IPRT status code.
  *
- * @param   pabDigest   The binary digest returned by RTSha1Final or RTSha1.
+ * @param   pabHash     The binary digest returned by RTSha1Final or RTSha1.
  * @param   pszDigest   Where to return the stringified digest.
  * @param   cchDigest   The size of the output buffer. Should be at least
  *                      RTSHA1_DIGEST_LEN + 1 bytes.
  */
-RTDECL(int) RTSha1ToString(uint8_t const pabDigest[RTSHA1_HASH_SIZE], char *pszDigest, size_t cchDigest);
+RTDECL(int) RTSha1ToString(uint8_t const pabHash[RTSHA1_HASH_SIZE], char *pszDigest, size_t cchDigest);
 
 /**
  * Converts a SHA-1 hash to a digest string.
@@ -122,10 +122,10 @@ RTDECL(int) RTSha1ToString(uint8_t const pabDigest[RTSHA1_HASH_SIZE], char *pszD
  *
  * @param   pszDigest   The stringified digest. Leading and trailing spaces are
  *                      ignored.
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(int) RTSha1FromString(char const *pszDigest, uint8_t pabDigest[RTSHA1_HASH_SIZE]);
+RTDECL(int) RTSha1FromString(char const *pszDigest, uint8_t pabHash[RTSHA1_HASH_SIZE]);
 
 /**
  * Creates a SHA1 digest for the given memory buffer.
@@ -181,10 +181,10 @@ typedef RTSHA256CONTEXT *PRTSHA256CONTEXT;
  *
  * @param   pvBuf       Pointer to the data.
  * @param   cbBuf       The amount of data (in bytes).
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(void) RTSha256(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA256_HASH_SIZE]);
+RTDECL(void) RTSha256(const void *pvBuf, size_t cbBuf, uint8_t pabHash[RTSHA256_HASH_SIZE]);
 
 /**
  * Computes the SHA-256 hash for the given data comparing it with the one given.
@@ -195,7 +195,7 @@ RTDECL(void) RTSha256(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA25
  * @param   pabHash     The hash to verify. (What is passed is a pointer to the
  *                      caller's buffer.)
  */
-RTDECL(bool) RTSha256Check(const void *pvBuf, size_t cbBuf, uint8_t const pabDigest[RTSHA256_HASH_SIZE]);
+RTDECL(bool) RTSha256Check(const void *pvBuf, size_t cbBuf, uint8_t const pabHash[RTSHA256_HASH_SIZE]);
 
 /**
  * Initializes the SHA-256 context.
@@ -217,22 +217,22 @@ RTDECL(void) RTSha256Update(PRTSHA256CONTEXT pCtx, const void *pvBuf, size_t cbB
  * Compute the SHA-256 hash of the data.
  *
  * @param   pCtx        Pointer to the SHA-256 context.
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(void) RTSha256Final(PRTSHA256CONTEXT pCtx, uint8_t pabDigest[RTSHA256_HASH_SIZE]);
+RTDECL(void) RTSha256Final(PRTSHA256CONTEXT pCtx, uint8_t pabHash[RTSHA256_HASH_SIZE]);
 
 /**
  * Converts a SHA-256 hash to a digest string.
  *
  * @returns IPRT status code.
  *
- * @param   pabDigest   The binary digest returned by RTSha256Final or RTSha256.
+ * @param   pabHash     The binary digest returned by RTSha256Final or RTSha256.
  * @param   pszDigest   Where to return the stringified digest.
  * @param   cchDigest   The size of the output buffer. Should be at least
  *                      RTSHA256_DIGEST_LEN + 1 bytes.
  */
-RTDECL(int) RTSha256ToString(uint8_t const pabDigest[RTSHA256_HASH_SIZE], char *pszDigest, size_t cchDigest);
+RTDECL(int) RTSha256ToString(uint8_t const pabHash[RTSHA256_HASH_SIZE], char *pszDigest, size_t cchDigest);
 
 /**
  * Converts a SHA-256 hash to a digest string.
@@ -241,10 +241,10 @@ RTDECL(int) RTSha256ToString(uint8_t const pabDigest[RTSHA256_HASH_SIZE], char *
  *
  * @param   pszDigest   The stringified digest. Leading and trailing spaces are
  *                      ignored.
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(int) RTSha256FromString(char const *pszDigest, uint8_t pabDigest[RTSHA256_HASH_SIZE]);
+RTDECL(int) RTSha256FromString(char const *pszDigest, uint8_t pabHash[RTSHA256_HASH_SIZE]);
 
 /**
  * Creates a SHA256 digest for the given memory buffer.
@@ -290,10 +290,10 @@ typedef RTSHA256CONTEXT *PRTSHA224CONTEXT;
  *
  * @param   pvBuf       Pointer to the data.
  * @param   cbBuf       The amount of data (in bytes).
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(void) RTSha224(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA224_HASH_SIZE]);
+RTDECL(void) RTSha224(const void *pvBuf, size_t cbBuf, uint8_t pabHash[RTSHA224_HASH_SIZE]);
 
 /**
  * Computes the SHA-224 hash for the given data comparing it with the one given.
@@ -304,7 +304,7 @@ RTDECL(void) RTSha224(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA22
  * @param   pabHash     The hash to verify. (What is passed is a pointer to the
  *                      caller's buffer.)
  */
-RTDECL(bool) RTSha224Check(const void *pvBuf, size_t cbBuf, uint8_t const pabDigest[RTSHA224_HASH_SIZE]);
+RTDECL(bool) RTSha224Check(const void *pvBuf, size_t cbBuf, uint8_t const pabHash[RTSHA224_HASH_SIZE]);
 
 /**
  * Initializes the SHA-224 context.
@@ -326,22 +326,22 @@ RTDECL(void) RTSha224Update(PRTSHA224CONTEXT pCtx, const void *pvBuf, size_t cbB
  * Compute the SHA-224 hash of the data.
  *
  * @param   pCtx        Pointer to the SHA-224 context.
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(void) RTSha224Final(PRTSHA224CONTEXT pCtx, uint8_t pabDigest[RTSHA224_HASH_SIZE]);
+RTDECL(void) RTSha224Final(PRTSHA224CONTEXT pCtx, uint8_t pabHash[RTSHA224_HASH_SIZE]);
 
 /**
  * Converts a SHA-224 hash to a digest string.
  *
  * @returns IPRT status code.
  *
- * @param   pabDigest   The binary digest returned by RTSha224Final or RTSha224.
+ * @param   pabHash     The binary digest returned by RTSha224Final or RTSha224.
  * @param   pszDigest   Where to return the stringified digest.
  * @param   cchDigest   The size of the output buffer. Should be at least
  *                      RTSHA224_DIGEST_LEN + 1 bytes.
  */
-RTDECL(int) RTSha224ToString(uint8_t const pabDigest[RTSHA224_HASH_SIZE], char *pszDigest, size_t cchDigest);
+RTDECL(int) RTSha224ToString(uint8_t const pabHash[RTSHA224_HASH_SIZE], char *pszDigest, size_t cchDigest);
 
 /**
  * Converts a SHA-224 hash to a digest string.
@@ -350,10 +350,10 @@ RTDECL(int) RTSha224ToString(uint8_t const pabDigest[RTSHA224_HASH_SIZE], char *
  *
  * @param   pszDigest   The stringified digest. Leading and trailing spaces are
  *                      ignored.
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(int) RTSha224FromString(char const *pszDigest, uint8_t pabDigest[RTSHA224_HASH_SIZE]);
+RTDECL(int) RTSha224FromString(char const *pszDigest, uint8_t pabHash[RTSHA224_HASH_SIZE]);
 
 /**
  * Creates a SHA224 digest for the given memory buffer.
@@ -409,10 +409,10 @@ typedef RTSHA512CONTEXT *PRTSHA512CONTEXT;
  *
  * @param   pvBuf       Pointer to the data.
  * @param   cbBuf       The amount of data (in bytes).
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(void) RTSha512(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA512_HASH_SIZE]);
+RTDECL(void) RTSha512(const void *pvBuf, size_t cbBuf, uint8_t pabHash[RTSHA512_HASH_SIZE]);
 
 /**
  * Computes the SHA-512 hash for the given data comparing it with the one given.
@@ -423,7 +423,7 @@ RTDECL(void) RTSha512(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RTSHA51
  * @param   pabHash     The hash to verify. (What is passed is a pointer to the
  *                      caller's buffer.)
  */
-RTDECL(bool) RTSha512Check(const void *pvBuf, size_t cbBuf, uint8_t const pabDigest[RTSHA512_HASH_SIZE]);
+RTDECL(bool) RTSha512Check(const void *pvBuf, size_t cbBuf, uint8_t const pabHash[RTSHA512_HASH_SIZE]);
 
 /**
  * Initializes the SHA-512 context.
@@ -445,22 +445,22 @@ RTDECL(void) RTSha512Update(PRTSHA512CONTEXT pCtx, const void *pvBuf, size_t cbB
  * Compute the SHA-512 hash of the data.
  *
  * @param   pCtx        Pointer to the SHA-512 context.
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(void) RTSha512Final(PRTSHA512CONTEXT pCtx, uint8_t pabDigest[RTSHA512_HASH_SIZE]);
+RTDECL(void) RTSha512Final(PRTSHA512CONTEXT pCtx, uint8_t pabHash[RTSHA512_HASH_SIZE]);
 
 /**
  * Converts a SHA-512 hash to a digest string.
  *
  * @returns IPRT status code.
  *
- * @param   pabDigest   The binary digest returned by RTSha512Final or RTSha512.
+ * @param   pabHash     The binary digest returned by RTSha512Final or RTSha512.
  * @param   pszDigest   Where to return the stringified digest.
  * @param   cchDigest   The size of the output buffer. Should be at least
  *                      RTSHA512_DIGEST_LEN + 1 bytes.
  */
-RTDECL(int) RTSha512ToString(uint8_t const pabDigest[RTSHA512_HASH_SIZE], char *pszDigest, size_t cchDigest);
+RTDECL(int) RTSha512ToString(uint8_t const pabHash[RTSHA512_HASH_SIZE], char *pszDigest, size_t cchDigest);
 
 /**
  * Converts a SHA-512 hash to a digest string.
@@ -469,10 +469,10 @@ RTDECL(int) RTSha512ToString(uint8_t const pabDigest[RTSHA512_HASH_SIZE], char *
  *
  * @param   pszDigest   The stringified digest. Leading and trailing spaces are
  *                      ignored.
- * @param   pabDigest   Where to store the hash. (What is passed is a pointer to
+ * @param   pabHash     Where to store the hash. (What is passed is a pointer to
  *                      the caller's buffer.)
  */
-RTDECL(int) RTSha512FromString(char const *pszDigest, uint8_t pabDigest[RTSHA512_HASH_SIZE]);
+RTDECL(int) RTSha512FromString(char const *pszDigest, uint8_t pabHash[RTSHA512_HASH_SIZE]);
 
 
 /** Macro for declaring the interface for a SHA-512 variation.
@@ -480,13 +480,13 @@ RTDECL(int) RTSha512FromString(char const *pszDigest, uint8_t pabDigest[RTSHA512
 #define RTSHA512_DECLARE_VARIANT(a_Name, a_UName) \
     typedef RTSHA512CONTEXT RT_CONCAT3(RTSHA,a_UName,CONTEXT); \
     typedef RTSHA512CONTEXT *RT_CONCAT3(PRTSHA,a_UName,CONTEXT); \
-    RTDECL(void) RT_CONCAT(RTSha,a_Name)(const void *pvBuf, size_t cbBuf, uint8_t pabDigest[RT_CONCAT3(RTSHA,a_UName,_HASH_SIZE)]); \
-    RTDECL(bool) RT_CONCAT3(RTSha,a_Name,Check)(const void *pvBuf, size_t cbBuf, uint8_t const pabDigest[RT_CONCAT3(RTSHA,a_UName,_HASH_SIZE)]); \
+    RTDECL(void) RT_CONCAT(RTSha,a_Name)(const void *pvBuf, size_t cbBuf, uint8_t pabHash[RT_CONCAT3(RTSHA,a_UName,_HASH_SIZE)]); \
+    RTDECL(bool) RT_CONCAT3(RTSha,a_Name,Check)(const void *pvBuf, size_t cbBuf, uint8_t const pabHash[RT_CONCAT3(RTSHA,a_UName,_HASH_SIZE)]); \
     RTDECL(void) RT_CONCAT3(RTSha,a_Name,Init)(RT_CONCAT3(PRTSHA,a_UName,CONTEXT) pCtx); \
     RTDECL(void) RT_CONCAT3(RTSha,a_Name,Update)(RT_CONCAT3(PRTSHA,a_UName,CONTEXT) pCtx, const void *pvBuf, size_t cbBuf); \
-    RTDECL(void) RT_CONCAT3(RTSha,a_Name,Final)(RT_CONCAT3(PRTSHA,a_UName,CONTEXT) pCtx, uint8_t pabDigest[RT_CONCAT3(RTSHA,a_UName,_HASH_SIZE)]); \
-    RTDECL(int)  RT_CONCAT3(RTSha,a_Name,ToString)(uint8_t const pabDigest[RT_CONCAT3(RTSHA,a_UName,_HASH_SIZE)], char *pszDigest, size_t cchDigest); \
-    RTDECL(int)  RT_CONCAT3(RTSha,a_Name,FromString)(char const *pszDigest, uint8_t pabDigest[RT_CONCAT3(RTSHA,a_UName,_HASH_SIZE)])
+    RTDECL(void) RT_CONCAT3(RTSha,a_Name,Final)(RT_CONCAT3(PRTSHA,a_UName,CONTEXT) pCtx, uint8_t pabHash[RT_CONCAT3(RTSHA,a_UName,_HASH_SIZE)]); \
+    RTDECL(int)  RT_CONCAT3(RTSha,a_Name,ToString)(uint8_t const pabHash[RT_CONCAT3(RTSHA,a_UName,_HASH_SIZE)], char *pszDigest, size_t cchDigest); \
+    RTDECL(int)  RT_CONCAT3(RTSha,a_Name,FromString)(char const *pszDigest, uint8_t pabHash[RT_CONCAT3(RTSHA,a_UName,_HASH_SIZE)])
 
 
 /** The size of a SHA-384 hash. */
diff --git a/include/iprt/socket.h b/include/iprt/socket.h
index 8cd6c2d..ef423e8 100644
--- a/include/iprt/socket.h
+++ b/include/iprt/socket.h
@@ -227,22 +227,21 @@ RTDECL(int) RTSocketSelectOne(RTSOCKET hSocket, RTMSINTERVAL cMillies);
  * Checks if the socket is ready for one of the given events.
  *
  * @returns iprt status code.
- * @param   Sock        Socket descriptor.
- * @param   fEvents     Event mask to wait for.
- * @param   pfEvents    Where to store the event mask on return.
- * @param   cMillies    Number of milliseconds to wait for the socket.
- *                      Use RT_INDEFINITE_WAIT to wait for ever.
+ * @param   hSocket         The Socket handle.
+ * @param   fEvents         Event mask to wait for.
+ * @param   pfEvents        Where to store the event mask on return.
+ * @param   cMillies        Number of milliseconds to wait for the socket.  Use
+ *                          RT_INDEFINITE_WAIT to wait for ever.
  */
-RTR3DECL(int)  RTSocketSelectOneEx(RTSOCKET Sock, uint32_t fEvents, uint32_t *pfEvents,
-                                   RTMSINTERVAL cMillies);
+RTR3DECL(int)  RTSocketSelectOneEx(RTSOCKET hSocket, uint32_t fEvents, uint32_t *pfEvents, RTMSINTERVAL cMillies);
 
 /**
  * Shuts down one or both directions of communciation.
  *
  * @returns IPRT status code.
- * @param   hSocket             The socket handle.
- * @param   fRead               Whether to shutdown our read direction.
- * @param   fWrite              Whether to shutdown our write direction.
+ * @param   hSocket         The socket handle.
+ * @param   fRead           Whether to shutdown our read direction.
+ * @param   fWrite          Whether to shutdown our write direction.
  */
 RTDECL(int) RTSocketShutdown(RTSOCKET hSocket, bool fRead, bool fWrite);
 
@@ -250,7 +249,7 @@ RTDECL(int) RTSocketShutdown(RTSOCKET hSocket, bool fRead, bool fWrite);
  * Gets the address of the local side.
  *
  * @returns IPRT status code.
- * @param   Sock            Socket descriptor.
+ * @param   hSocket         The Socket handle.
  * @param   pAddr           Where to store the local address on success.
  */
 RTDECL(int) RTSocketGetLocalAddress(RTSOCKET hSocket, PRTNETADDR pAddr);
@@ -259,7 +258,7 @@ RTDECL(int) RTSocketGetLocalAddress(RTSOCKET hSocket, PRTNETADDR pAddr);
  * Gets the address of the other party.
  *
  * @returns IPRT status code.
- * @param   Sock            Socket descriptor.
+ * @param   hSocket         The Socket handle.
  * @param   pAddr           Where to store the peer address on success.
  */
 RTDECL(int) RTSocketGetPeerAddress(RTSOCKET hSocket, PRTNETADDR pAddr);
@@ -348,11 +347,11 @@ RTDECL(int) RTSocketWriteNB(RTSOCKET hSocket, const void *pvBuffer, size_t cbBuf
  *
  * @returns iprt status code.
  *
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     The Socket handle.
  * @param   pSgBuf      Scatter/gather buffer to write data to socket.
  * @param   pcbWritten  Number of bytes written.
  */
-RTR3DECL(int)  RTSocketSgWriteNB(RTSOCKET Sock, PCRTSGBUF pSgBuf, size_t *pcbWritten);
+RTR3DECL(int)  RTSocketSgWriteNB(RTSOCKET hSocket, PCRTSGBUF pSgBuf, size_t *pcbWritten);
 
 
 /**
diff --git a/include/iprt/sort.h b/include/iprt/sort.h
index 5c6727f..fb1e749 100644
--- a/include/iprt/sort.h
+++ b/include/iprt/sort.h
@@ -54,7 +54,7 @@ typedef FNRTSORTCMP *PFNRTSORTCMP;
  *
  * @param   papvArray       The array to sort.
  * @param   cElements       The number of elements in the array.
- * @param   cbElements      The size of an array element.
+ * @param   cbElement       The size of an array element.
  * @param   pfnCmp          Callback function comparing two elements.
  * @param   pvUser          User argument for the callback.
  */
@@ -77,9 +77,9 @@ typedef FNRTSORTAPV *PFNRTSORTAPV;
 /**
  * Shell sort an array of variable sized elementes.
  *
- * @param   papvArray       The array to sort.
+ * @param   pvArray         The array to sort.
  * @param   cElements       The number of elements in the array.
- * @param   cbElements      The size of an array element.
+ * @param   cbElement       The size of an array element.
  * @param   pfnCmp          Callback function comparing two elements.
  * @param   pvUser          User argument for the callback.
  */
@@ -100,9 +100,9 @@ RTDECL(void) RTSortApvShell(void **papvArray, size_t cElements, PFNRTSORTCMP pfn
  * Checks if an array of variable sized elementes is sorted.
  *
  * @returns true if it is sorted, false if it isn't.
- * @param   papvArray       The array to check.
+ * @param   pvArray         The array to check.
  * @param   cElements       The number of elements in the array.
- * @param   cbElements      The size of an array element.
+ * @param   cbElement       The size of an array element.
  * @param   pfnCmp          Callback function comparing two elements.
  * @param   pvUser          User argument for the callback.
  */
diff --git a/include/iprt/string.h b/include/iprt/string.h
index a162077..ce5f4c1 100644
--- a/include/iprt/string.h
+++ b/include/iprt/string.h
@@ -89,6 +89,10 @@
 # include <string.h>
 #endif
 
+/* For the time being: */
+#include <iprt/utf16.h>
+#include <iprt/latin1.h>
+
 /*
  * Supply prototypes for standard string functions provided by
  * IPRT instead of the operating environment.
@@ -182,7 +186,7 @@ RT_C_DECLS_BEGIN
  * the pointer to the current file name.  The string API will make of use of
  * this as pointer to a volatile but read-only string.
  */
-#ifndef RTSTR_TAG
+#if !defined(RTSTR_TAG) || defined(DOXYGEN_RUNNING)
 # define RTSTR_TAG      (__FILE__)
 #endif
 
@@ -681,6 +685,7 @@ RTDECL(int) RTStrReallocTag(char **ppsz, size_t cbNew, const char *pszTag);
 RTDECL(int) RTStrValidateEncoding(const char *psz);
 
 /** @name Flags for RTStrValidateEncodingEx and RTUtf16ValidateEncodingEx
+ * @{
  */
 /** Check that the string is zero terminated within the given size.
  * VERR_BUFFER_OVERFLOW will be returned if the check fails. */
@@ -728,7 +733,7 @@ RTDECL(size_t) RTStrPurgeEncoding(char *psz);
  *          string is not correctly encoded.  In this last case the string
  *          may be partially processed.
  * @param   psz            The string to sanitise.
- * @param   puszValidSets  A zero-terminated array of pairs of Unicode points.
+ * @param   puszValidSet   A zero-terminated array of pairs of Unicode points.
  *                         Each pair is the start and end point of a range,
  *                         and the union of these ranges forms the white list.
  * @param   chReplacement  The ASCII replacement character.
@@ -928,7 +933,7 @@ RTDECL(size_t) RTStrCalcLatin1Len(const char *psz);
  * @param   pcch        Where to store the string length. Optional.
  *                      This is undefined on failure.
  */
-RTDECL(int) RTStrCalcLatin1LenEx(const char *psz, size_t cch, size_t *pcwc);
+RTDECL(int) RTStrCalcLatin1LenEx(const char *psz, size_t cch, size_t *pcch);
 
 /**
  * Translate a UTF-8 string into a Latin-1 allocating the result buffer (default
@@ -1012,114 +1017,6 @@ RTDECL(int) RTStrToLatin1Tag(const char *pszString, char **ppszString, const cha
  */
 RTDECL(int)  RTStrToLatin1ExTag(const char *pszString, size_t cchString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag);
 
-
-/**
- * Translate a Latin1 string into a UTF-8 allocating the result buffer (default
- * tag).
- *
- * @returns iprt status code.
- * @param   pszString       Latin1 string to convert.
- * @param   ppszString      Receives pointer of allocated UTF-8 string on
- *                          success, and is always set to NULL on failure.
- *                          The returned pointer must be freed using RTStrFree().
- */
-#define RTLatin1ToUtf8(pszString, ppszString)       RTLatin1ToUtf8Tag((pszString), (ppszString), RTSTR_TAG)
-
-/**
- * Translate a Latin-1 string into a UTF-8 allocating the result buffer.
- *
- * @returns iprt status code.
- * @param   pszString       Latin-1 string to convert.
- * @param   ppszString      Receives pointer of allocated UTF-8 string on
- *                          success, and is always set to NULL on failure.
- *                          The returned pointer must be freed using RTStrFree().
- * @param   pszTag          Allocation tag used for statistics and such.
- */
-RTDECL(int)  RTLatin1ToUtf8Tag(const char *pszString, char **ppszString, const char *pszTag);
-
-/**
- * Translates Latin-1 to UTF-8 using buffer provided by the caller or a fittingly
- * sized buffer allocated by the function (default tag).
- *
- * @returns iprt status code.
- * @param   pszString       The Latin-1 string to convert.
- * @param   cchString       The number of Latin-1 characters to translate from
- *                          pszString. The translation will stop when reaching
- *                          cchString or the terminator ('\\0').  Use RTSTR_MAX
- *                          to translate the entire string.
- * @param   ppsz            If cch is non-zero, this must either be pointing to
- *                          a pointer to a buffer of the specified size, or
- *                          pointer to a NULL pointer.  If *ppsz is NULL or cch
- *                          is zero a buffer of at least cch chars will be
- *                          allocated to hold the translated string. If a
- *                          buffer was requested it must be freed using
- *                          RTStrFree().
- * @param   cch             The buffer size in chars (the type). This includes the terminator.
- * @param   pcch            Where to store the length of the translated string,
- *                          excluding the terminator. (Optional)
- *
- *                          This may be set under some error conditions,
- *                          however, only for VERR_BUFFER_OVERFLOW and
- *                          VERR_NO_STR_MEMORY will it contain a valid string
- *                          length that can be used to resize the buffer.
- */
-#define RTLatin1ToUtf8Ex(pszString, cchString, ppsz, cch, pcch) \
-    RTLatin1ToUtf8ExTag((pszString), (cchString), (ppsz), (cch), (pcch), RTSTR_TAG)
-
-/**
- * Translates Latin1 to UTF-8 using buffer provided by the caller or a fittingly
- * sized buffer allocated by the function (custom tag).
- *
- * @returns iprt status code.
- * @param   pszString       The Latin1 string to convert.
- * @param   cchString       The number of Latin1 characters to translate from
- *                          pwszString.  The translation will stop when
- *                          reaching cchString or the terminator ('\\0').  Use
- *                          RTSTR_MAX to translate the entire string.
- * @param   ppsz            If cch is non-zero, this must either be pointing to
- *                          a pointer to a buffer of the specified size, or
- *                          pointer to a NULL pointer.  If *ppsz is NULL or cch
- *                          is zero a buffer of at least cch chars will be
- *                          allocated to hold the translated string.  If a
- *                          buffer was requested it must be freed using
- *                          RTStrFree().
- * @param   cch             The buffer size in chars (the type).  This includes
- *                          the terminator.
- * @param   pcch            Where to store the length of the translated string,
- *                          excluding the terminator. (Optional)
- *
- *                          This may be set under some error conditions,
- *                          however, only for VERR_BUFFER_OVERFLOW and
- *                          VERR_NO_STR_MEMORY will it contain a valid string
- *                          length that can be used to resize the buffer.
- * @param   pszTag          Allocation tag used for statistics and such.
- */
-RTDECL(int)  RTLatin1ToUtf8ExTag(const char *pszString, size_t cchString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag);
-
-/**
- * Calculates the length of the Latin-1 string in UTF-8 chars (bytes).
- *
- * The primary purpose of this function is to help allocate buffers for
- * RTLatin1ToUtf8() of the correct size. For most other purposes
- * RTLatin1ToUtf8Ex() should be used.
- *
- * @returns Number of chars (bytes).
- * @returns 0 if the string was incorrectly encoded.
- * @param   psz        The Latin-1 string.
- */
-RTDECL(size_t) RTLatin1CalcUtf8Len(const char *psz);
-
-/**
- * Calculates the length of the Latin-1 string in UTF-8 chars (bytes).
- *
- * @returns iprt status code.
- * @param   psz         The string.
- * @param   cch         The max string length. Use RTSTR_MAX to process the entire string.
- * @param   pcch        Where to store the string length (in bytes).  Optional.
- *                      This is undefined on failure.
- */
-RTDECL(int) RTLatin1CalcUtf8LenEx(const char *psz, size_t cch, size_t *pcch);
-
 /**
  * Get the unicode code point at the given string position.
  *
@@ -1340,131 +1237,6 @@ DECLINLINE(char *) RTStrNextCp(const char *psz)
  */
 RTDECL(char *) RTStrPrevCp(const char *pszStart, const char *psz);
 
-/**
- * Get the unicode code point at the given string position.
- *
- * @returns unicode code point.
- * @returns RTUNICP_INVALID if the encoding is invalid.
- * @param   psz         The string.
- */
-DECLINLINE(RTUNICP) RTLatin1GetCp(const char *psz)
-{
-    return *(const unsigned char *)psz;
-}
-
-/**
- * Get the unicode code point at the given string position.
- *
- * @returns iprt status code.
- * @param   ppsz        Pointer to the string pointer. This will be updated to
- *                      point to the char following the current code point.
- *                      This is advanced one character forward on failure.
- * @param   pCp         Where to store the code point.
- *                      RTUNICP_INVALID is stored here on failure.
- *
- * @remark  We optimize this operation by using an inline function for
- *          the most frequent and simplest sequence, the rest is
- *          handled by RTStrGetCpExInternal().
- */
-DECLINLINE(int) RTLatin1GetCpEx(const char **ppsz, PRTUNICP pCp)
-{
-    const unsigned char uch = **(const unsigned char **)ppsz;
-    (*ppsz)++;
-    *pCp = uch;
-    return VINF_SUCCESS;
-}
-
-/**
- * Get the unicode code point at the given string position for a string of a
- * given maximum length.
- *
- * @returns iprt status code.
- * @retval  VERR_END_OF_STRING if *pcch is 0. *pCp is set to RTUNICP_INVALID.
- *
- * @param   ppsz        Pointer to the string pointer. This will be updated to
- *                      point to the char following the current code point.
- * @param   pcch        Pointer to the maximum string length.  This will be
- *                      decremented by the size of the code point found.
- * @param   pCp         Where to store the code point.
- *                      RTUNICP_INVALID is stored here on failure.
- */
-DECLINLINE(int) RTLatin1GetCpNEx(const char **ppsz, size_t *pcch, PRTUNICP pCp)
-{
-    if (RT_LIKELY(*pcch != 0))
-    {
-        const unsigned char uch = **(const unsigned char **)ppsz;
-        (*ppsz)++;
-        (*pcch)--;
-        *pCp = uch;
-        return VINF_SUCCESS;
-    }
-    *pCp = RTUNICP_INVALID;
-    return VERR_END_OF_STRING;
-}
-
-/**
- * Get the Latin-1 size in characters of a given Unicode code point.
- *
- * The code point is expected to be a valid Unicode one, but not necessarily in
- * the range supported by Latin-1.
- *
- * @returns the size in characters, or zero if there is no Latin-1 encoding
- */
-DECLINLINE(size_t) RTLatin1CpSize(RTUNICP CodePoint)
-{
-    if (CodePoint < 0x100)
-        return 1;
-    return 0;
-}
-
-/**
- * Put the unicode code point at the given string position
- * and return the pointer to the char following it.
- *
- * This function will not consider anything at or following the
- * buffer area pointed to by psz. It is therefore not suitable for
- * inserting code points into a string, only appending/overwriting.
- *
- * @returns pointer to the char following the written code point.
- * @param   psz         The string.
- * @param   CodePoint   The code point to write.
- *                      This should not be RTUNICP_INVALID or any other
- *                      character out of the Latin-1 range.
- */
-DECLINLINE(char *) RTLatin1PutCp(char *psz, RTUNICP CodePoint)
-{
-    AssertReturn(CodePoint < 0x100, NULL);
-    *psz++ = (unsigned char)CodePoint;
-    return psz;
-}
-
-/**
- * Skips ahead, past the current code point.
- *
- * @returns Pointer to the char after the current code point.
- * @param   psz     Pointer to the current code point.
- * @remark  This will not move the next valid code point, only past the current one.
- */
-DECLINLINE(char *) RTLatin1NextCp(const char *psz)
-{
-    psz++;
-    return (char *)psz;
-}
-
-/**
- * Skips back to the previous code point.
- *
- * @returns Pointer to the char before the current code point.
- * @returns pszStart on failure.
- * @param   pszStart    Pointer to the start of the string.
- * @param   psz         Pointer to the current code point.
- */
-DECLINLINE(char *) RTLatin1PrevCp(const char *psz)
-{
-    psz--;
-    return (char *)psz;
-}
-
 
 /** @page pg_rt_str_format  The IPRT Format Strings
  *
@@ -1663,7 +1435,7 @@ typedef DECLCALLBACK(size_t) FNRTSTROUTPUT(void *pvArg, const char *pachChars, s
 typedef FNRTSTROUTPUT *PFNRTSTROUTPUT;
 #endif
 
-/** Format flag.
+/** @name Format flag.
  * These are used by RTStrFormat extensions and RTStrFormatNumber, mind
  * that not all flags makes sense to both of the functions.
  * @{ */
@@ -3241,972 +3013,9 @@ RTDECL(uint32_t)    RTStrHash1ExNV(size_t cPairs, va_list va);
 
 /** @}  */
 
-
-/** @defgroup rt_str_utf16      UTF-16 String Manipulation
- * @{
- */
-
-/**
- * Allocates memory for UTF-16 string storage (default tag).
- *
- * You should normally not use this function, except if there is some very
- * custom string handling you need doing that isn't covered by any of the other
- * APIs.
- *
- * @returns Pointer to the allocated UTF-16 string.  The first wide char is
- *          always set to the string terminator char, the contents of the
- *          remainder of the memory is undefined.  The string must be freed by
- *          calling RTUtf16Free.
- *
- *          NULL is returned if the allocation failed.  Please translate this to
- *          VERR_NO_UTF16_MEMORY and not VERR_NO_MEMORY.  Also consider
- *          RTUtf16AllocEx if an IPRT status code is required.
- *
- * @param   cb                  How many bytes to allocate, will be rounded up
- *                              to a multiple of two. If this is zero, we will
- *                              allocate a terminator wide char anyway.
- */
-#define RTUtf16Alloc(cb)                    RTUtf16AllocTag((cb), RTSTR_TAG)
-
-/**
- * Allocates memory for UTF-16 string storage (custom tag).
- *
- * You should normally not use this function, except if there is some very
- * custom string handling you need doing that isn't covered by any of the other
- * APIs.
- *
- * @returns Pointer to the allocated UTF-16 string.  The first wide char is
- *          always set to the string terminator char, the contents of the
- *          remainder of the memory is undefined.  The string must be freed by
- *          calling RTUtf16Free.
- *
- *          NULL is returned if the allocation failed.  Please translate this to
- *          VERR_NO_UTF16_MEMORY and not VERR_NO_MEMORY.  Also consider
- *          RTUtf16AllocExTag if an IPRT status code is required.
- *
- * @param   cb                  How many bytes to allocate, will be rounded up
- *                              to a multiple of two. If this is zero, we will
- *                              allocate a terminator wide char anyway.
- * @param   pszTag              Allocation tag used for statistics and such.
- */
-RTDECL(PRTUTF16) RTUtf16AllocTag(size_t cb, const char *pszTag);
-
-
-/**
- * Free a UTF-16 string allocated by RTStrToUtf16(), RTStrToUtf16Ex(),
- * RTLatin1ToUtf16(), RTLatin1ToUtf16Ex(), RTUtf16Dup() or RTUtf16DupEx().
- *
- * @returns iprt status code.
- * @param   pwszString      The UTF-16 string to free. NULL is accepted.
- */
-RTDECL(void)  RTUtf16Free(PRTUTF16 pwszString);
-
-/**
- * Allocates a new copy of the specified UTF-16 string (default tag).
- *
- * @returns Pointer to the allocated string copy. Use RTUtf16Free() to free it.
- * @returns NULL when out of memory.
- * @param   pwszString      UTF-16 string to duplicate.
- * @remark  This function will not make any attempt to validate the encoding.
- */
-#define RTUtf16Dup(pwszString)          RTUtf16DupTag((pwszString), RTSTR_TAG)
-
-/**
- * Allocates a new copy of the specified UTF-16 string (custom tag).
- *
- * @returns Pointer to the allocated string copy. Use RTUtf16Free() to free it.
- * @returns NULL when out of memory.
- * @param   pwszString      UTF-16 string to duplicate.
- * @param   pszTag          Allocation tag used for statistics and such.
- * @remark  This function will not make any attempt to validate the encoding.
- */
-RTDECL(PRTUTF16) RTUtf16DupTag(PCRTUTF16 pwszString, const char *pszTag);
-
-/**
- * Allocates a new copy of the specified UTF-16 string (default tag).
- *
- * @returns iprt status code.
- * @param   ppwszString     Receives pointer of the allocated UTF-16 string.
- *                          The returned pointer must be freed using RTUtf16Free().
- * @param   pwszString      UTF-16 string to duplicate.
- * @param   cwcExtra        Number of extra RTUTF16 items to allocate.
- * @remark  This function will not make any attempt to validate the encoding.
- */
-#define RTUtf16DupEx(ppwszString, pwszString, cwcExtra) \
-    RTUtf16DupExTag((ppwszString), (pwszString), (cwcExtra), RTSTR_TAG)
-
-/**
- * Allocates a new copy of the specified UTF-16 string (custom tag).
- *
- * @returns iprt status code.
- * @param   ppwszString     Receives pointer of the allocated UTF-16 string.
- *                          The returned pointer must be freed using RTUtf16Free().
- * @param   pwszString      UTF-16 string to duplicate.
- * @param   cwcExtra        Number of extra RTUTF16 items to allocate.
- * @param   pszTag          Allocation tag used for statistics and such.
- * @remark  This function will not make any attempt to validate the encoding.
- */
-RTDECL(int) RTUtf16DupExTag(PRTUTF16 *ppwszString, PCRTUTF16 pwszString, size_t cwcExtra, const char *pszTag);
-
-/**
- * Returns the length of a UTF-16 string in UTF-16 characters
- * without trailing '\\0'.
- *
- * Surrogate pairs counts as two UTF-16 characters here. Use RTUtf16CpCnt()
- * to get the exact number of code points in the string.
- *
- * @returns The number of RTUTF16 items in the string.
- * @param   pwszString  Pointer the UTF-16 string.
- * @remark  This function will not make any attempt to validate the encoding.
- */
-RTDECL(size_t) RTUtf16Len(PCRTUTF16 pwszString);
-
-/**
- * Find the length of a zero-terminated byte string, given a max string length.
- *
- * @returns The string length or cbMax. The returned length does not include
- *          the zero terminator if it was found.
- *
- * @param   pwszString  The string.
- * @param   cwcMax      The max string length in RTUTF16s.
- * @sa      RTUtf16NLenEx, RTStrNLen.
- */
-RTDECL(size_t) RTUtf16NLen(PCRTUTF16 pwszString, size_t cwcMax);
-
-/**
- * Find the length of a zero-terminated byte string, given
- * a max string length.
- *
- * @returns IPRT status code.
- * @retval  VINF_SUCCESS if the string has a length less than cchMax.
- * @retval  VERR_BUFFER_OVERFLOW if the end of the string wasn't found
- *          before cwcMax was reached.
- *
- * @param   pwszString  The string.
- * @param   cwcMax      The max string length in RTUTF16s.
- * @param   pcwc        Where to store the string length excluding the
- *                      terminator.  This is set to cwcMax if the terminator
- *                      isn't found.
- * @sa      RTUtf16NLen, RTStrNLenEx.
- */
-RTDECL(int) RTUtf16NLenEx(PCRTUTF16 pwszString, size_t cwcMax, size_t *pcwc);
-
-/**
- * Find the zero terminator in a string with a limited length.
- *
- * @returns Pointer to the zero terminator.
- * @returns NULL if the zero terminator was not found.
- *
- * @param   pwszString  The string.
- * @param   cwcMax      The max string length.  RTSTR_MAX is fine.
- */
-RTDECL(PCRTUTF16) RTUtf16End(PCRTUTF16 pwszString, size_t cwcMax);
-
-/**
- * Strips blankspaces from both ends of the string.
- *
- * @returns Pointer to first non-blank char in the string.
- * @param   pwsz    The string to strip.
- */
-RTDECL(PRTUTF16) RTUtf16Strip(PRTUTF16 pwsz);
-
-/**
- * Strips blankspaces from the start of the string.
- *
- * @returns Pointer to first non-blank char in the string.
- * @param   pwsz    The string to strip.
- */
-RTDECL(PRTUTF16) RTUtf16StripL(PCRTUTF16 pwsz);
-
-/**
- * Strips blankspaces from the end of the string.
- *
- * @returns pwsz.
- * @param   pwsz    The string to strip.
- */
-RTDECL(PRTUTF16) RTUtf16StripR(PRTUTF16 pwsz);
-
-/**
- * String copy with overflow handling.
- *
- * @retval  VINF_SUCCESS on success.
- * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
- *          buffer will contain as much of the string as it can hold, fully
- *          terminated.
- *
- * @param   pwszDst             The destination buffer.
- * @param   cwcDst              The size of the destination buffer in RTUTF16s.
- * @param   pwszSrc             The source string.  NULL is not OK.
- */
-RTDECL(int) RTUtf16Copy(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc);
-
-/**
- * String copy with overflow handling, ASCII source.
- *
- * @retval  VINF_SUCCESS on success.
- * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
- *          buffer will contain as much of the string as it can hold, fully
- *          terminated.
- *
- * @param   pwszDst             The destination buffer.
- * @param   cwcDst              The size of the destination buffer in RTUTF16s.
- * @param   pszSrc              The source string, pure ASCII.  NULL is not OK.
- */
-RTDECL(int) RTUtf16CopyAscii(PRTUTF16 pwszDst, size_t cwcDst, const char *pszSrc);
-
-/**
- * String copy with overflow handling.
- *
- * @retval  VINF_SUCCESS on success.
- * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
- *          buffer will contain as much of the string as it can hold, fully
- *          terminated.
- *
- * @param   pwszDst             The destination buffer.
- * @param   cwcDst              The size of the destination buffer in RTUTF16s.
- * @param   pwszSrc             The source string.  NULL is not OK.
- * @param   cwcSrcMax           The maximum number of chars (not code points) to
- *                              copy from the source string, not counting the
- *                              terminator as usual.
- */
-RTDECL(int) RTUtf16CopyEx(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc, size_t cwcSrcMax);
-
-/**
- * String concatenation with overflow handling.
- *
- * @retval  VINF_SUCCESS on success.
- * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
- *          buffer will contain as much of the string as it can hold, fully
- *          terminated.
- *
- * @param   pszDst              The destination buffer.
- * @param   cwcDst              The size of the destination buffer in RTUTF16s.
- * @param   pwszSrc             The source string.  NULL is not OK.
- */
-RTDECL(int) RTUtf16Cat(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc);
-
-/**
- * String concatenation with overflow handling, ASCII source.
- *
- * @retval  VINF_SUCCESS on success.
- * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
- *          buffer will contain as much of the string as it can hold, fully
- *          terminated.
- *
- * @param   pszDst              The destination buffer.
- * @param   cwcDst              The size of the destination buffer in RTUTF16s.
- * @param   pszSrc              The source string, pure ASCII.  NULL is not OK.
- */
-RTDECL(int) RTUtf16CatAscii(PRTUTF16 pwszDst, size_t cwcDst, const char *pwszSrc);
-
-/**
- * String concatenation with overflow handling.
- *
- * @retval  VINF_SUCCESS on success.
- * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
- *          buffer will contain as much of the string as it can hold, fully
- *          terminated.
- *
- * @param   pwszDst             The destination buffer.
- * @param   cwcDst              The size of the destination buffer in RTUTF16s.
- * @param   pwszSrc             The source string.  NULL is not OK.
- * @param   cwcSrcMax           The maximum number of UTF-16 chars (not code
- *                              points) to copy from the source string, not
- *                              counting the terminator as usual.
- */
-RTDECL(int) RTUtf16CatEx(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc, size_t cwcSrcMax);
-
-/**
- * Performs a case sensitive string compare between two UTF-16 strings.
- *
- * @returns < 0 if the first string less than the second string.s
- * @returns 0 if the first string identical to the second string.
- * @returns > 0 if the first string greater than the second string.
- * @param   pwsz1       First UTF-16 string. Null is allowed.
- * @param   pwsz2       Second UTF-16 string. Null is allowed.
- * @remark  This function will not make any attempt to validate the encoding.
- */
-RTDECL(int) RTUtf16Cmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2);
-
-/**
- * Performs a case sensitive string compare between an UTF-16 string and a pure
- * ASCII string.
- *
- * @returns < 0 if the first string less than the second string.s
- * @returns 0 if the first string identical to the second string.
- * @returns > 0 if the first string greater than the second string.
- * @param   pwsz1       First UTF-16 string. Null is allowed.
- * @param   psz2        Second string, pure ASCII. Null is allowed.
- * @remark  This function will not make any attempt to validate the encoding.
- */
-RTDECL(int) RTUtf16CmpAscii(PCRTUTF16 pwsz1, const char *psz2);
-
-/**
- * Performs a case insensitive string compare between two UTF-16 strings.
- *
- * This is a simplified compare, as only the simplified lower/upper case folding
- * specified by the unicode specs are used. It does not consider character pairs
- * as they are used in some languages, just simple upper & lower case compares.
- *
- * @returns < 0 if the first string less than the second string.
- * @returns 0 if the first string identical to the second string.
- * @returns > 0 if the first string greater than the second string.
- * @param   pwsz1       First UTF-16 string. Null is allowed.
- * @param   pwsz2       Second UTF-16 string. Null is allowed.
- */
-RTDECL(int) RTUtf16ICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2);
-
-/**
- * Performs a case insensitive string compare between an UTF-16 string and an
- * pure ASCII string.
- *
- * Since this compare only takes cares about the first 128 codepoints in
- * unicode, no tables are needed and there aren't any real complications.
- *
- * @returns < 0 if the first string less than the second string.
- * @returns 0 if the first string identical to the second string.
- * @returns > 0 if the first string greater than the second string.
- * @param   pwsz1       First UTF-16 string. Null is allowed.
- * @param   psz2        Second string, pure ASCII. Null is allowed.
- */
-RTDECL(int) RTUtf16ICmpAscii(PCRTUTF16 pwsz1, const char *psz2);
-
-/**
- * Performs a case insensitive string compare between two UTF-16 strings
- * using the current locale of the process (if applicable).
- *
- * This differs from RTUtf16ICmp() in that it will try, if a locale with the
- * required data is available, to do a correct case-insensitive compare. It
- * follows that it is more complex and thereby likely to be more expensive.
- *
- * @returns < 0 if the first string less than the second string.
- * @returns 0 if the first string identical to the second string.
- * @returns > 0 if the first string greater than the second string.
- * @param   pwsz1       First UTF-16 string. Null is allowed.
- * @param   pwsz2       Second UTF-16 string. Null is allowed.
- */
-RTDECL(int) RTUtf16LocaleICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2);
-
-/**
- * Folds a UTF-16 string to lowercase.
- *
- * This is a very simple folding; is uses the simple lowercase
- * code point, it is not related to any locale just the most common
- * lowercase codepoint setup by the unicode specs, and it will not
- * create new surrogate pairs or remove existing ones.
- *
- * @returns Pointer to the passed in string.
- * @param   pwsz        The string to fold.
- */
-RTDECL(PRTUTF16) RTUtf16ToLower(PRTUTF16 pwsz);
-
-/**
- * Folds a UTF-16 string to uppercase.
- *
- * This is a very simple folding; is uses the simple uppercase
- * code point, it is not related to any locale just the most common
- * uppercase codepoint setup by the unicode specs, and it will not
- * create new surrogate pairs or remove existing ones.
- *
- * @returns Pointer to the passed in string.
- * @param   pwsz        The string to fold.
- */
-RTDECL(PRTUTF16) RTUtf16ToUpper(PRTUTF16 pwsz);
-
-/**
- * Validates the UTF-16 encoding of the string.
- *
- * @returns iprt status code.
- * @param   pwsz        The string.
- */
-RTDECL(int) RTUtf16ValidateEncoding(PCRTUTF16 pwsz);
-
-/**
- * Validates the UTF-16 encoding of the string.
- *
- * @returns iprt status code.
- * @param   pwsz        The string.
- * @param   cwc         The max string length (/ size) in UTF-16 units. Use
- *                      RTSTR_MAX to process the entire string.
- * @param   fFlags      Combination of RTSTR_VALIDATE_ENCODING_XXX flags.
- */
-RTDECL(int) RTUtf16ValidateEncodingEx(PCRTUTF16 pwsz, size_t cwc, uint32_t fFlags);
-
-/**
- * Checks if the UTF-16 encoding is valid.
- *
- * @returns true / false.
- * @param   pwsz        The string.
- */
-RTDECL(bool) RTUtf16IsValidEncoding(PCRTUTF16 pwsz);
-
-/**
- * Sanitise a (valid) UTF-16 string by replacing all characters outside a white
- * list in-place by an ASCII replacement character.  Multi-byte characters will
- * be replaced byte by byte.
- *
- * @returns The number of code points replaced, or a negative value if the
- *          string is not correctly encoded.  In this last case the string
- *          may be partially processed.
- * @param   pwsz           The string to sanitise.
- * @param   puszValidSets  A zero-terminated array of pairs of Unicode points.
- *                         Each pair is the start and end point of a range,
- *                         and the union of these ranges forms the white list.
- * @param   chReplacement  The ASCII replacement character.
- */
-RTDECL(ssize_t) RTUtf16PurgeComplementSet(PRTUTF16 pwsz, PCRTUNICP puszValidSet, char chReplacement);
-
-/**
- * Translate a UTF-16 string into a UTF-8 allocating the result buffer (default
- * tag).
- *
- * @returns iprt status code.
- * @param   pwszString      UTF-16 string to convert.
- * @param   ppszString      Receives pointer of allocated UTF-8 string on
- *                          success, and is always set to NULL on failure.
- *                          The returned pointer must be freed using RTStrFree().
- */
-#define RTUtf16ToUtf8(pwszString, ppszString)       RTUtf16ToUtf8Tag((pwszString), (ppszString), RTSTR_TAG)
-
-/**
- * Translate a UTF-16 string into a UTF-8 allocating the result buffer.
- *
- * @returns iprt status code.
- * @param   pwszString      UTF-16 string to convert.
- * @param   ppszString      Receives pointer of allocated UTF-8 string on
- *                          success, and is always set to NULL on failure.
- *                          The returned pointer must be freed using RTStrFree().
- * @param   pszTag          Allocation tag used for statistics and such.
- */
-RTDECL(int)  RTUtf16ToUtf8Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag);
-
-/**
- * Translates UTF-16 to UTF-8 using buffer provided by the caller or a fittingly
- * sized buffer allocated by the function (default tag).
- *
- * @returns iprt status code.
- * @param   pwszString      The UTF-16 string to convert.
- * @param   cwcString       The number of RTUTF16 items to translate from pwszString.
- *                          The translation will stop when reaching cwcString or the terminator ('\\0').
- *                          Use RTSTR_MAX to translate the entire string.
- * @param   ppsz            If cch is non-zero, this must either be pointing to a pointer to
- *                          a buffer of the specified size, or pointer to a NULL pointer.
- *                          If *ppsz is NULL or cch is zero a buffer of at least cch chars
- *                          will be allocated to hold the translated string.
- *                          If a buffer was requested it must be freed using RTStrFree().
- * @param   cch             The buffer size in chars (the type). This includes the terminator.
- * @param   pcch            Where to store the length of the translated string,
- *                          excluding the terminator. (Optional)
- *
- *                          This may be set under some error conditions,
- *                          however, only for VERR_BUFFER_OVERFLOW and
- *                          VERR_NO_STR_MEMORY will it contain a valid string
- *                          length that can be used to resize the buffer.
- */
-#define RTUtf16ToUtf8Ex(pwszString, cwcString, ppsz, cch, pcch) \
-    RTUtf16ToUtf8ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG)
-
-/**
- * Translates UTF-16 to UTF-8 using buffer provided by the caller or a fittingly
- * sized buffer allocated by the function (custom tag).
- *
- * @returns iprt status code.
- * @param   pwszString      The UTF-16 string to convert.
- * @param   cwcString       The number of RTUTF16 items to translate from pwszString.
- *                          The translation will stop when reaching cwcString or the terminator ('\\0').
- *                          Use RTSTR_MAX to translate the entire string.
- * @param   ppsz            If cch is non-zero, this must either be pointing to a pointer to
- *                          a buffer of the specified size, or pointer to a NULL pointer.
- *                          If *ppsz is NULL or cch is zero a buffer of at least cch chars
- *                          will be allocated to hold the translated string.
- *                          If a buffer was requested it must be freed using RTStrFree().
- * @param   cch             The buffer size in chars (the type). This includes the terminator.
- * @param   pcch            Where to store the length of the translated string,
- *                          excluding the terminator. (Optional)
- *
- *                          This may be set under some error conditions,
- *                          however, only for VERR_BUFFER_OVERFLOW and
- *                          VERR_NO_STR_MEMORY will it contain a valid string
- *                          length that can be used to resize the buffer.
- * @param   pszTag          Allocation tag used for statistics and such.
- */
-RTDECL(int)  RTUtf16ToUtf8ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag);
-
-/**
- * Calculates the length of the UTF-16 string in UTF-8 chars (bytes).
- *
- * This function will validate the string, and incorrectly encoded UTF-16
- * strings will be rejected. The primary purpose of this function is to
- * help allocate buffers for RTUtf16ToUtf8() of the correct size. For most
- * other purposes RTUtf16ToUtf8Ex() should be used.
- *
- * @returns Number of char (bytes).
- * @returns 0 if the string was incorrectly encoded.
- * @param   pwsz        The UTF-16 string.
- */
-RTDECL(size_t) RTUtf16CalcUtf8Len(PCRTUTF16 pwsz);
-
-/**
- * Calculates the length of the UTF-16 string in UTF-8 chars (bytes).
- *
- * This function will validate the string, and incorrectly encoded UTF-16
- * strings will be rejected.
- *
- * @returns iprt status code.
- * @param   pwsz        The string.
- * @param   cwc         The max string length. Use RTSTR_MAX to process the entire string.
- * @param   pcch        Where to store the string length (in bytes). Optional.
- *                      This is undefined on failure.
- */
-RTDECL(int) RTUtf16CalcUtf8LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch);
-
-/**
- * Translate a UTF-16 string into a Latin-1 (ISO-8859-1) allocating the result
- * buffer (default tag).
- *
- * @returns iprt status code.
- * @param   pwszString      UTF-16 string to convert.
- * @param   ppszString      Receives pointer of allocated Latin1 string on
- *                          success, and is always set to NULL on failure.
- *                          The returned pointer must be freed using RTStrFree().
- */
-#define RTUtf16ToLatin1(pwszString, ppszString)     RTUtf16ToLatin1Tag((pwszString), (ppszString), RTSTR_TAG)
-
-/**
- * Translate a UTF-16 string into a Latin-1 (ISO-8859-1) allocating the result
- * buffer (custom tag).
- *
- * @returns iprt status code.
- * @param   pwszString      UTF-16 string to convert.
- * @param   ppszString      Receives pointer of allocated Latin1 string on
- *                          success, and is always set to NULL on failure.
- *                          The returned pointer must be freed using RTStrFree().
- * @param   pszTag          Allocation tag used for statistics and such.
- */
-RTDECL(int)  RTUtf16ToLatin1Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag);
-
-/**
- * Translates UTF-16 to Latin-1 (ISO-8859-1) using buffer provided by the caller
- * or a fittingly sized buffer allocated by the function (default tag).
- *
- * @returns iprt status code.
- * @param   pwszString      The UTF-16 string to convert.
- * @param   cwcString       The number of RTUTF16 items to translate from
- *                          pwszString. The translation will stop when reaching
- *                          cwcString or the terminator ('\\0'). Use RTSTR_MAX
- *                          to translate the entire string.
- * @param   ppsz            Pointer to the pointer to the Latin-1 string. The
- *                          buffer can optionally be preallocated by the caller.
- *
- *                          If cch is zero, *ppsz is undefined.
- *
- *                          If cch is non-zero and *ppsz is not NULL, then this
- *                          will be used as the output buffer.
- *                          VERR_BUFFER_OVERFLOW will be returned if this is
- *                          insufficient.
- *
- *                          If cch is zero or *ppsz is NULL, then a buffer of
- *                          sufficient size is allocated. cch can be used to
- *                          specify a minimum size of this buffer. Use
- *                          RTUtf16Free() to free the result.
- *
- * @param   cch             The buffer size in chars (the type). This includes
- *                          the terminator.
- * @param   pcch            Where to store the length of the translated string,
- *                          excluding the terminator. (Optional)
- *
- *                          This may be set under some error conditions,
- *                          however, only for VERR_BUFFER_OVERFLOW and
- *                          VERR_NO_STR_MEMORY will it contain a valid string
- *                          length that can be used to resize the buffer.
- */
-#define RTUtf16ToLatin1Ex(pwszString, cwcString, ppsz, cch, pcch) \
-    RTUtf16ToLatin1ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG)
-
-/**
- * Translates UTF-16 to Latin-1 (ISO-8859-1) using buffer provided by the caller
- * or a fittingly sized buffer allocated by the function (custom tag).
- *
- * @returns iprt status code.
- * @param   pwszString      The UTF-16 string to convert.
- * @param   cwcString       The number of RTUTF16 items to translate from
- *                          pwszString. The translation will stop when reaching
- *                          cwcString or the terminator ('\\0'). Use RTSTR_MAX
- *                          to translate the entire string.
- * @param   ppsz            Pointer to the pointer to the Latin-1 string. The
- *                          buffer can optionally be preallocated by the caller.
- *
- *                          If cch is zero, *ppsz is undefined.
- *
- *                          If cch is non-zero and *ppsz is not NULL, then this
- *                          will be used as the output buffer.
- *                          VERR_BUFFER_OVERFLOW will be returned if this is
- *                          insufficient.
- *
- *                          If cch is zero or *ppsz is NULL, then a buffer of
- *                          sufficient size is allocated. cch can be used to
- *                          specify a minimum size of this buffer. Use
- *                          RTUtf16Free() to free the result.
- *
- * @param   cch             The buffer size in chars (the type). This includes
- *                          the terminator.
- * @param   pcch            Where to store the length of the translated string,
- *                          excluding the terminator. (Optional)
- *
- *                          This may be set under some error conditions,
- *                          however, only for VERR_BUFFER_OVERFLOW and
- *                          VERR_NO_STR_MEMORY will it contain a valid string
- *                          length that can be used to resize the buffer.
- * @param   pszTag          Allocation tag used for statistics and such.
- */
-RTDECL(int)  RTUtf16ToLatin1ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag);
-
-/**
- * Calculates the length of the UTF-16 string in Latin-1 (ISO-8859-1) chars.
- *
- * This function will validate the string, and incorrectly encoded UTF-16
- * strings will be rejected. The primary purpose of this function is to
- * help allocate buffers for RTUtf16ToLatin1() of the correct size. For most
- * other purposes RTUtf16ToLatin1Ex() should be used.
- *
- * @returns Number of char (bytes).
- * @returns 0 if the string was incorrectly encoded.
- * @param   pwsz        The UTF-16 string.
- */
-RTDECL(size_t) RTUtf16CalcLatin1Len(PCRTUTF16 pwsz);
-
-/**
- * Calculates the length of the UTF-16 string in Latin-1 (ISO-8859-1) chars.
- *
- * This function will validate the string, and incorrectly encoded UTF-16
- * strings will be rejected.
- *
- * @returns iprt status code.
- * @param   pwsz        The string.
- * @param   cwc         The max string length. Use RTSTR_MAX to process the
- *                      entire string.
- * @param   pcch        Where to store the string length (in bytes). Optional.
- *                      This is undefined on failure.
- */
-RTDECL(int) RTUtf16CalcLatin1LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch);
-
-/**
- * Get the unicode code point at the given string position.
- *
- * @returns unicode code point.
- * @returns RTUNICP_INVALID if the encoding is invalid.
- * @param   pwsz        The string.
- *
- * @remark  This is an internal worker for RTUtf16GetCp().
- */
-RTDECL(RTUNICP) RTUtf16GetCpInternal(PCRTUTF16 pwsz);
-
-/**
- * Get the unicode code point at the given string position.
- *
- * @returns iprt status code.
- * @param   ppwsz       Pointer to the string pointer. This will be updated to
- *                      point to the char following the current code point.
- * @param   pCp         Where to store the code point.
- *                      RTUNICP_INVALID is stored here on failure.
- *
- * @remark  This is an internal worker for RTUtf16GetCpEx().
- */
-RTDECL(int) RTUtf16GetCpExInternal(PCRTUTF16 *ppwsz, PRTUNICP pCp);
-
-/**
- * Put the unicode code point at the given string position
- * and return the pointer to the char following it.
- *
- * This function will not consider anything at or following the
- * buffer area pointed to by pwsz. It is therefore not suitable for
- * inserting code points into a string, only appending/overwriting.
- *
- * @returns pointer to the char following the written code point.
- * @param   pwsz        The string.
- * @param   CodePoint   The code point to write.
- *                      This should not be RTUNICP_INVALID or any other
- *                      character out of the UTF-16 range.
- *
- * @remark  This is an internal worker for RTUtf16GetCpEx().
- */
-RTDECL(PRTUTF16) RTUtf16PutCpInternal(PRTUTF16 pwsz, RTUNICP CodePoint);
-
-/**
- * Get the unicode code point at the given string position.
- *
- * @returns unicode code point.
- * @returns RTUNICP_INVALID if the encoding is invalid.
- * @param   pwsz        The string.
- *
- * @remark  We optimize this operation by using an inline function for
- *          everything which isn't a surrogate pair or an endian indicator.
- */
-DECLINLINE(RTUNICP) RTUtf16GetCp(PCRTUTF16 pwsz)
-{
-    const RTUTF16 wc = *pwsz;
-    if (wc < 0xd800 || (wc > 0xdfff && wc < 0xfffe))
-        return wc;
-    return RTUtf16GetCpInternal(pwsz);
-}
-
-/**
- * Get the unicode code point at the given string position.
- *
- * @returns iprt status code.
- * @param   ppwsz       Pointer to the string pointer. This will be updated to
- *                      point to the char following the current code point.
- * @param   pCp         Where to store the code point.
- *                      RTUNICP_INVALID is stored here on failure.
- *
- * @remark  We optimize this operation by using an inline function for
- *          everything which isn't a surrogate pair or and endian indicator.
- */
-DECLINLINE(int) RTUtf16GetCpEx(PCRTUTF16 *ppwsz, PRTUNICP pCp)
-{
-    const RTUTF16 wc = **ppwsz;
-    if (wc < 0xd800 || (wc > 0xdfff && wc < 0xfffe))
-    {
-        (*ppwsz)++;
-        *pCp = wc;
-        return VINF_SUCCESS;
-    }
-    return RTUtf16GetCpExInternal(ppwsz, pCp);
-}
-
-/**
- * Put the unicode code point at the given string position
- * and return the pointer to the char following it.
- *
- * This function will not consider anything at or following the
- * buffer area pointed to by pwsz. It is therefore not suitable for
- * inserting code points into a string, only appending/overwriting.
- *
- * @returns pointer to the char following the written code point.
- * @param   pwsz        The string.
- * @param   CodePoint   The code point to write.
- *                      This should not be RTUNICP_INVALID or any other
- *                      character out of the UTF-16 range.
- *
- * @remark  We optimize this operation by using an inline function for
- *          everything which isn't a surrogate pair or and endian indicator.
- */
-DECLINLINE(PRTUTF16) RTUtf16PutCp(PRTUTF16 pwsz, RTUNICP CodePoint)
-{
-    if (CodePoint < 0xd800 || (CodePoint > 0xd800 && CodePoint < 0xfffe))
-    {
-        *pwsz++ = (RTUTF16)CodePoint;
-        return pwsz;
-    }
-    return RTUtf16PutCpInternal(pwsz, CodePoint);
-}
-
-/**
- * Skips ahead, past the current code point.
- *
- * @returns Pointer to the char after the current code point.
- * @param   pwsz    Pointer to the current code point.
- * @remark  This will not move the next valid code point, only past the current one.
- */
-DECLINLINE(PRTUTF16) RTUtf16NextCp(PCRTUTF16 pwsz)
-{
-    RTUNICP Cp;
-    RTUtf16GetCpEx(&pwsz, &Cp);
-    return (PRTUTF16)pwsz;
-}
-
-/**
- * Skips backwards, to the previous code point.
- *
- * @returns Pointer to the char after the current code point.
- * @param   pwszStart   Pointer to the start of the string.
- * @param   pwsz        Pointer to the current code point.
- */
-RTDECL(PRTUTF16) RTUtf16PrevCp(PCRTUTF16 pwszStart, PCRTUTF16 pwsz);
-
-
-/**
- * Checks if the UTF-16 char is the high surrogate char (i.e.
- * the 1st char in the pair).
- *
- * @returns true if it is.
- * @returns false if it isn't.
- * @param   wc      The character to investigate.
- */
-DECLINLINE(bool) RTUtf16IsHighSurrogate(RTUTF16 wc)
-{
-    return wc >= 0xd800 && wc <= 0xdbff;
-}
-
-/**
- * Checks if the UTF-16 char is the low surrogate char (i.e.
- * the 2nd char in the pair).
- *
- * @returns true if it is.
- * @returns false if it isn't.
- * @param   wc      The character to investigate.
- */
-DECLINLINE(bool) RTUtf16IsLowSurrogate(RTUTF16 wc)
-{
-    return wc >= 0xdc00 && wc <= 0xdfff;
-}
-
-
-/**
- * Checks if the two UTF-16 chars form a valid surrogate pair.
- *
- * @returns true if they do.
- * @returns false if they doesn't.
- * @param   wcHigh      The high (1st) character.
- * @param   wcLow       The low (2nd) character.
- */
-DECLINLINE(bool) RTUtf16IsSurrogatePair(RTUTF16 wcHigh, RTUTF16 wcLow)
-{
-    return RTUtf16IsHighSurrogate(wcHigh)
-        && RTUtf16IsLowSurrogate(wcLow);
-}
-
-/**
- * Formats a buffer stream as hex bytes.
- *
- * The default is no separating spaces or line breaks or anything.
- *
- * @returns IPRT status code.
- * @retval  VERR_INVALID_POINTER if any of the pointers are wrong.
- * @retval  VERR_BUFFER_OVERFLOW if the buffer is insufficent to hold the bytes.
- *
- * @param   pwszBuf     Output string buffer.
- * @param   cwcBuf      The size of the output buffer in RTUTF16 units.
- * @param   pv          Pointer to the bytes to stringify.
- * @param   cb          The number of bytes to stringify.
- * @param   fFlags      Combination of RTSTRPRINTHEXBYTES_F_XXX values.
- * @sa      RTStrPrintHexBytes.
- */
-RTDECL(int) RTUtf16PrintHexBytes(PRTUTF16 pwszBuf, size_t cwcBuf, void const *pv, size_t cb, uint32_t fFlags);
-
-/** @} */
-
-
-/** @defgroup rt_str_latin1     Latin-1 (ISO-8859-1) String Manipulation
- * @{
- */
-
-/**
- * Calculates the length of the Latin-1 (ISO-8859-1) string in RTUTF16 items.
- *
- * @returns Number of RTUTF16 items.
- * @param   psz             The Latin-1 string.
- */
-RTDECL(size_t) RTLatin1CalcUtf16Len(const char *psz);
-
-/**
- * Calculates the length of the Latin-1 (ISO-8859-1) string in RTUTF16 items.
- *
- * @returns iprt status code.
- * @param   psz             The Latin-1 string.
- * @param   cch             The max string length. Use RTSTR_MAX to process the
- *                          entire string.
- * @param   pcwc            Where to store the string length. Optional.
- *                          This is undefined on failure.
- */
-RTDECL(int) RTLatin1CalcUtf16LenEx(const char *psz, size_t cch, size_t *pcwc);
-
-/**
- * Translate a Latin-1 (ISO-8859-1) string into a UTF-16 allocating the result
- * buffer (default tag).
- *
- * @returns iprt status code.
- * @param   pszString       The Latin-1 string to convert.
- * @param   ppwszString     Receives pointer to the allocated UTF-16 string. The
- *                          returned string must be freed using RTUtf16Free().
- */
-#define RTLatin1ToUtf16(pszString, ppwszString)     RTLatin1ToUtf16Tag((pszString), (ppwszString), RTSTR_TAG)
-
-/**
- * Translate a Latin-1 (ISO-8859-1) string into a UTF-16 allocating the result
- * buffer (custom tag).
- *
- * @returns iprt status code.
- * @param   pszString       The Latin-1 string to convert.
- * @param   ppwszString     Receives pointer to the allocated UTF-16 string. The
- *                          returned string must be freed using RTUtf16Free().
- * @param   pszTag          Allocation tag used for statistics and such.
- */
-RTDECL(int) RTLatin1ToUtf16Tag(const char *pszString, PRTUTF16 *ppwszString, const char *pszTag);
-
-/**
- * Translates pszString from Latin-1 (ISO-8859-1) to UTF-16, allocating the
- * result buffer if requested (default tag).
- *
- * @returns iprt status code.
- * @param   pszString       The Latin-1 string to convert.
- * @param   cchString       The maximum size in chars (the type) to convert.
- *                          The conversion stops when it reaches cchString or
- *                          the string terminator ('\\0').
- *                          Use RTSTR_MAX to translate the entire string.
- * @param   ppwsz           If cwc is non-zero, this must either be pointing
- *                          to pointer to a buffer of the specified size, or
- *                          pointer to a NULL pointer.
- *                          If *ppwsz is NULL or cwc is zero a buffer of at
- *                          least cwc items will be allocated to hold the
- *                          translated string. If a buffer was requested it
- *                          must be freed using RTUtf16Free().
- * @param   cwc             The buffer size in RTUTF16s. This includes the
- *                          terminator.
- * @param   pcwc            Where to store the length of the translated string,
- *                          excluding the terminator. (Optional)
- *
- *                          This may be set under some error conditions,
- *                          however, only for VERR_BUFFER_OVERFLOW and
- *                          VERR_NO_STR_MEMORY will it contain a valid string
- *                          length that can be used to resize the buffer.
- */
-#define RTLatin1ToUtf16Ex(pszString, cchString, ppwsz, cwc, pcwc) \
-    RTLatin1ToUtf16ExTag((pszString), (cchString), (ppwsz), (cwc), (pcwc), RTSTR_TAG)
-
-/**
- * Translates pszString from Latin-1 (ISO-8859-1) to UTF-16, allocating the
- * result buffer if requested.
- *
- * @returns iprt status code.
- * @param   pszString       The Latin-1 string to convert.
- * @param   cchString       The maximum size in chars (the type) to convert.
- *                          The conversion stops when it reaches cchString or
- *                          the string terminator ('\\0').
- *                          Use RTSTR_MAX to translate the entire string.
- * @param   ppwsz           If cwc is non-zero, this must either be pointing
- *                          to pointer to a buffer of the specified size, or
- *                          pointer to a NULL pointer.
- *                          If *ppwsz is NULL or cwc is zero a buffer of at
- *                          least cwc items will be allocated to hold the
- *                          translated string. If a buffer was requested it
- *                          must be freed using RTUtf16Free().
- * @param   cwc             The buffer size in RTUTF16s. This includes the
- *                          terminator.
- * @param   pcwc            Where to store the length of the translated string,
- *                          excluding the terminator. (Optional)
- *
- *                          This may be set under some error conditions,
- *                          however, only for VERR_BUFFER_OVERFLOW and
- *                          VERR_NO_STR_MEMORY will it contain a valid string
- *                          length that can be used to resize the buffer.
- * @param   pszTag          Allocation tag used for statistics and such.
- */
-RTDECL(int) RTLatin1ToUtf16ExTag(const char *pszString, size_t cchString,
-                                 PRTUTF16 *ppwsz, size_t cwc, size_t *pcwc, const char *pszTag);
-
-/** @} */
-
-#ifndef ___iprt_nocrt_string_h
-# if defined(RT_OS_WINDOWS)
-RTDECL(void *) mempcpy(void *pvDst, const void *pvSrc, size_t cb);
-# endif
-#endif
-
+/** @} */
 
 RT_C_DECLS_END
 
-/** @} */
-
 #endif
 
diff --git a/include/iprt/tcp.h b/include/iprt/tcp.h
index c960ae9..4762ba7 100644
--- a/include/iprt/tcp.h
+++ b/include/iprt/tcp.h
@@ -52,11 +52,11 @@ RT_C_DECLS_BEGIN
  * @returns iprt status code.
  * @returns VERR_TCP_SERVER_STOP to terminate the server loop forcing
  *          the RTTcpCreateServer() call to return.
- * @param   Sock        The socket which the client is connected to.
- *                      The call will close this socket.
+ * @param   hSocket     The socket which the client is connected to. The call
+ *                      will close this socket.
  * @param   pvUser      User argument.
  */
-typedef DECLCALLBACK(int) FNRTTCPSERVE(RTSOCKET Sock, void *pvUser);
+typedef DECLCALLBACK(int) FNRTTCPSERVE(RTSOCKET hSocket, void *pvUser);
 /** Pointer to a RTTCPSERVE(). */
 typedef FNRTTCPSERVE *PFNRTTCPSERVE;
 
@@ -212,9 +212,9 @@ RTR3DECL(int) RTTcpClientCancelConnect(PRTTCPCLIENTCONNECTCANCEL volatile *ppCan
  * Close a socket returned by RTTcpClientConnect().
  *
  * @returns iprt status code.
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  */
-RTR3DECL(int) RTTcpClientClose(RTSOCKET Sock);
+RTR3DECL(int) RTTcpClientClose(RTSOCKET hSocket);
 
 /**
  * Close a socket returned by RTTcpClientConnect().
@@ -227,20 +227,20 @@ RTR3DECL(int) RTTcpClientClose(RTSOCKET Sock);
  *                              If false, just close the connection without
  *                              further ado.
  */
-RTR3DECL(int) RTTcpClientCloseEx(RTSOCKET Sock, bool fGracefulShutdown);
+RTR3DECL(int) RTTcpClientCloseEx(RTSOCKET hSocket, bool fGracefulShutdown);
 
 /**
  * Receive data from a socket.
  *
  * @returns iprt status code.
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  * @param   pvBuffer    Where to put the data we read.
  * @param   cbBuffer    Read buffer size.
  * @param   pcbRead     Number of bytes read.
  *                      If NULL the entire buffer will be filled upon successful return.
  *                      If not NULL a partial read can be done successfully.
  */
-RTR3DECL(int)  RTTcpRead(RTSOCKET Sock, void *pvBuffer, size_t cbBuffer, size_t *pcbRead);
+RTR3DECL(int)  RTTcpRead(RTSOCKET hSocket, void *pvBuffer, size_t cbBuffer, size_t *pcbRead);
 
 /**
  * Send data to a socket.
@@ -248,19 +248,19 @@ RTR3DECL(int)  RTTcpRead(RTSOCKET Sock, void *pvBuffer, size_t cbBuffer, size_t
  * @returns iprt status code.
  * @retval  VERR_INTERRUPTED if interrupted before anything was written.
  *
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  * @param   pvBuffer    Buffer to write data to socket.
  * @param   cbBuffer    How much to write.
  */
-RTR3DECL(int)  RTTcpWrite(RTSOCKET Sock, const void *pvBuffer, size_t cbBuffer);
+RTR3DECL(int)  RTTcpWrite(RTSOCKET hSocket, const void *pvBuffer, size_t cbBuffer);
 
 /**
  * Flush socket write buffers.
  *
  * @returns iprt status code.
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  */
-RTR3DECL(int)  RTTcpFlush(RTSOCKET Sock);
+RTR3DECL(int)  RTTcpFlush(RTSOCKET hSocket);
 
 /**
  * Enables or disables delaying sends to coalesce packets.
@@ -269,57 +269,56 @@ RTR3DECL(int)  RTTcpFlush(RTSOCKET Sock);
  * coalescing.
  *
  * @returns iprt status code.
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  * @param   fEnable     When set to true enables coalescing.
  */
-RTR3DECL(int)  RTTcpSetSendCoalescing(RTSOCKET Sock, bool fEnable);
+RTR3DECL(int)  RTTcpSetSendCoalescing(RTSOCKET hSocket, bool fEnable);
 
 /**
  * Socket I/O multiplexing.
  * Checks if the socket is ready for reading.
  *
  * @returns iprt status code.
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  * @param   cMillies    Number of milliseconds to wait for the socket.
  *                      Use RT_INDEFINITE_WAIT to wait for ever.
  */
-RTR3DECL(int)  RTTcpSelectOne(RTSOCKET Sock, RTMSINTERVAL cMillies);
+RTR3DECL(int)  RTTcpSelectOne(RTSOCKET hSocket, RTMSINTERVAL cMillies);
 
 /**
  * Socket I/O multiplexing
  * Checks if the socket is ready for one of the given events.
  *
  * @returns iprt status code.
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  * @param   fEvents     Event mask to wait for.
  *                      Use the RTSOCKET_EVT_* defines.
  * @param   pfEvents    Where to store the event mask on return.
  * @param   cMillies    Number of milliseconds to wait for the socket.
  *                      Use RT_INDEFINITE_WAIT to wait for ever.
  */
-RTR3DECL(int)  RTTcpSelectOneEx(RTSOCKET Sock, uint32_t fEvents, uint32_t *pfEvents,
-                                RTMSINTERVAL cMillies);
+RTR3DECL(int)  RTTcpSelectOneEx(RTSOCKET hSocket, uint32_t fEvents, uint32_t *pfEvents, RTMSINTERVAL cMillies);
 
 #if 0 /* skipping these for now - RTTcpServer* handles this. */
 /**
  * Listen for connection on a socket.
  *
  * @returns iprt status code.
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  * @param   cBackLog    The maximum length the queue of pending connections
  *                      may grow to.
  */
-RTR3DECL(int)  RTTcpListen(RTSOCKET Sock, int cBackLog);
+RTR3DECL(int)  RTTcpListen(RTSOCKET hSocket, int cBackLog);
 
 /**
  * Accept a connection on a socket.
  *
  * @returns iprt status code.
- * @param   Sock            Socket descriptor.
+ * @param   hSocket         Socket descriptor.
  * @param   uPort           The port for accepting connection.
  * @param   pSockAccepted   Where to store the handle to the accepted connection.
  */
-RTR3DECL(int)  RTTcpAccept(RTSOCKET Sock, unsigned uPort, PRTSOCKET pSockAccepted);
+RTR3DECL(int)  RTTcpAccept(RTSOCKET hSocket, unsigned uPort, PRTSOCKET pSockAccepted);
 
 #endif
 
@@ -327,19 +326,19 @@ RTR3DECL(int)  RTTcpAccept(RTSOCKET Sock, unsigned uPort, PRTSOCKET pSockAccepte
  * Gets the address of the local side.
  *
  * @returns IPRT status code.
- * @param   Sock            Socket descriptor.
+ * @param   hSocket         Socket descriptor.
  * @param   pAddr           Where to store the local address on success.
  */
-RTR3DECL(int) RTTcpGetLocalAddress(RTSOCKET Sock, PRTNETADDR pAddr);
+RTR3DECL(int) RTTcpGetLocalAddress(RTSOCKET hSocket, PRTNETADDR pAddr);
 
 /**
  * Gets the address of the other party.
  *
  * @returns IPRT status code.
- * @param   Sock            Socket descriptor.
+ * @param   hSocket         Socket descriptor.
  * @param   pAddr           Where to store the peer address on success.
  */
-RTR3DECL(int) RTTcpGetPeerAddress(RTSOCKET Sock, PRTNETADDR pAddr);
+RTR3DECL(int) RTTcpGetPeerAddress(RTSOCKET hSocket, PRTNETADDR pAddr);
 
 /**
  * Send data from a scatter/gather buffer to a socket.
@@ -347,10 +346,10 @@ RTR3DECL(int) RTTcpGetPeerAddress(RTSOCKET Sock, PRTNETADDR pAddr);
  * @returns iprt status code.
  * @retval  VERR_INTERRUPTED if interrupted before anything was written.
  *
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  * @param   pSgBuf      Scatter/gather buffer to write data to socket.
  */
-RTR3DECL(int)  RTTcpSgWrite(RTSOCKET Sock, PCRTSGBUF pSgBuf);
+RTR3DECL(int)  RTTcpSgWrite(RTSOCKET hSocket, PCRTSGBUF pSgBuf);
 
 
 /**
@@ -398,12 +397,12 @@ RTR3DECL(int) RTTcpSgWriteLV(RTSOCKET hSocket, size_t cSegs, va_list va);
  *
  * @returns IPRT status code.
  *
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  * @param   pvBuffer    Where to put the data we read.
  * @param   cbBuffer    Read buffer size.
  * @param   pcbRead     Number of bytes read.
  */
-RTR3DECL(int)  RTTcpReadNB(RTSOCKET Sock, void *pvBuffer, size_t cbBuffer, size_t *pcbRead);
+RTR3DECL(int)  RTTcpReadNB(RTSOCKET hSocket, void *pvBuffer, size_t cbBuffer, size_t *pcbRead);
 
 /**
  * Send data to a socket.
@@ -412,12 +411,12 @@ RTR3DECL(int)  RTTcpReadNB(RTSOCKET Sock, void *pvBuffer, size_t cbBuffer, size_
  *
  * @returns IPRT status code.
  *
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  * @param   pvBuffer    Buffer to write data to socket.
  * @param   cbBuffer    How much to write.
  * @param   pcbWritten  Number of bytes written.
  */
-RTR3DECL(int)  RTTcpWriteNB(RTSOCKET Sock, const void *pvBuffer, size_t cbBuffer, size_t *pcbWritten);
+RTR3DECL(int)  RTTcpWriteNB(RTSOCKET hSocket, const void *pvBuffer, size_t cbBuffer, size_t *pcbWritten);
 
 /**
  * Send data from a scatter/gather buffer to a socket.
@@ -427,11 +426,11 @@ RTR3DECL(int)  RTTcpWriteNB(RTSOCKET Sock, const void *pvBuffer, size_t cbBuffer
  * @returns iprt status code.
  * @retval  VERR_INTERRUPTED if interrupted before anything was written.
  *
- * @param   Sock        Socket descriptor.
+ * @param   hSocket     Socket descriptor.
  * @param   pSgBuf      Scatter/gather buffer to write data to socket.
  * @param   pcbWritten  Number of bytes written.
  */
-RTR3DECL(int)  RTTcpSgWriteNB(RTSOCKET Sock, PCRTSGBUF pSgBuf, size_t *pcbWritten);
+RTR3DECL(int)  RTTcpSgWriteNB(RTSOCKET hSocket, PCRTSGBUF pSgBuf, size_t *pcbWritten);
 
 
 /**
diff --git a/include/iprt/test.h b/include/iprt/test.h
index 25d93b8..b96d875 100644
--- a/include/iprt/test.h
+++ b/include/iprt/test.h
@@ -174,7 +174,7 @@ RTR3DECL(RTEXITCODE) RTTestInitAndCreate(const char *pszTest, PRTTEST phTest);
  * @param   pszTest     The test name.
  * @param   phTest      Where to store the test instance handle.
  */
-RTR3DECL(RTEXITCODE) RTTestInitExAndCreate(int cArgs, char ***papszArgs, uint32_t fRtInit, const char *pszTest, PRTTEST phTest);
+RTR3DECL(RTEXITCODE) RTTestInitExAndCreate(int cArgs, char ***ppapszArgs, uint32_t fRtInit, const char *pszTest, PRTTEST phTest);
 
 /**
  * Destroys a test instance previously created by RTTestCreate.
@@ -539,7 +539,7 @@ RTR3DECL(int) RTTestValueF(RTTEST hTest, uint64_t u64Value, RTTESTUNIT enmUnit,
  * @param   u64Value    The value.
  * @param   enmUnit     The value unit.
  * @param   pszNameFmt  The value name format string.
- * @param   va_list     String arguments.
+ * @param   va          String arguments.
  */
 RTR3DECL(int) RTTestValueV(RTTEST hTest, uint64_t u64Value, RTTESTUNIT enmUnit,
                            const char *pszNameFmt, va_list va) RT_IPRT_FORMAT_ATTR(4, 0);
@@ -990,7 +990,7 @@ RTR3DECL(int) RTTestIValueF(uint64_t u64Value, RTTESTUNIT enmUnit, const char *p
  * @param   u64Value    The value.
  * @param   enmUnit     The value unit.
  * @param   pszNameFmt  The value name format string.
- * @param   va_list     String arguments.
+ * @param   va          String arguments.
  */
 RTR3DECL(int) RTTestIValueV(uint64_t u64Value, RTTESTUNIT enmUnit, const char *pszNameFmt, va_list va) RT_IPRT_FORMAT_ATTR(3, 0);
 
@@ -1155,7 +1155,6 @@ RTR3DECL(int) RTTestIFailureDetails(const char *pszFormat, ...) RT_IPRT_FORMAT_A
  * @param   expr            The expression to evaluate.
  * @param   DetailsArgs     Argument list for RTTestIFailureDetails, including
  *                          parenthesis.
- * @param   rcRet           What to return on failure.
  */
 #define RTTESTI_CHECK_MSG_BREAK(expr, DetailsArgs) \
     if (!(expr)) { \
diff --git a/include/iprt/udp.h b/include/iprt/udp.h
index 90368ab..6f98485 100644
--- a/include/iprt/udp.h
+++ b/include/iprt/udp.h
@@ -131,6 +131,7 @@ RTR3DECL(int) RTUdpServerListen(PRTUDPSERVER pServer, PFNRTUDPSERVE pfnServe, vo
  * @param   pvBuffer    Where to put the data we read.
  * @param   cbBuffer    Read buffer size.
  * @param   pcbRead     Number of bytes read. Must be non-NULL.
+ * @param   pSrcAddr    The network address to read from.
  */
 RTR3DECL(int)  RTUdpRead(RTSOCKET Sock, void *pvBuffer, size_t cbBuffer, size_t *pcbRead, PRTNETADDR pSrcAddr);
 
diff --git a/include/iprt/uint128.h b/include/iprt/uint128.h
index 540cfdb..bce7319 100644
--- a/include/iprt/uint128.h
+++ b/include/iprt/uint128.h
@@ -494,8 +494,8 @@ DECLINLINE(PRTUINT128U) RTUInt128Assign(PRTUINT128U pResult, PCRTUINT128U pValue
 /**
  * Assigns a boolean value to 128-bit unsigned integer.
  *
- * @returns pResult
- * @param   pResult             The result variable.
+ * @returns pValueResult
+ * @param   pValueResult        The result variable.
  * @param   fValue              The boolean value.
  */
 DECLINLINE(PRTUINT128U) RTUInt128AssignBoolean(PRTUINT128U pValueResult, bool fValue)
@@ -516,8 +516,8 @@ DECLINLINE(PRTUINT128U) RTUInt128AssignBoolean(PRTUINT128U pValueResult, bool fV
 /**
  * Assigns a 8-bit unsigned integer value to 128-bit unsigned integer.
  *
- * @returns pResult
- * @param   pResult             The result variable.
+ * @returns pValueResult
+ * @param   pValueResult        The result variable.
  * @param   u8Value             The 8-bit unsigned integer value.
  */
 DECLINLINE(PRTUINT128U) RTUInt128AssignU8(PRTUINT128U pValueResult, uint8_t u8Value)
@@ -538,8 +538,8 @@ DECLINLINE(PRTUINT128U) RTUInt128AssignU8(PRTUINT128U pValueResult, uint8_t u8Va
 /**
  * Assigns a 16-bit unsigned integer value to 128-bit unsigned integer.
  *
- * @returns pResult
- * @param   pResult             The result variable.
+ * @returns pValueResult
+ * @param   pValueResult        The result variable.
  * @param   u16Value            The 16-bit unsigned integer value.
  */
 DECLINLINE(PRTUINT128U) RTUInt128AssignU16(PRTUINT128U pValueResult, uint16_t u16Value)
@@ -560,8 +560,8 @@ DECLINLINE(PRTUINT128U) RTUInt128AssignU16(PRTUINT128U pValueResult, uint16_t u1
 /**
  * Assigns a 16-bit unsigned integer value to 128-bit unsigned integer.
  *
- * @returns pResult
- * @param   pResult             The result variable.
+ * @returns pValueResult
+ * @param   pValueResult        The result variable.
  * @param   u32Value            The 32-bit unsigned integer value.
  */
 DECLINLINE(PRTUINT128U) RTUInt128AssignU32(PRTUINT128U pValueResult, uint32_t u32Value)
@@ -582,9 +582,9 @@ DECLINLINE(PRTUINT128U) RTUInt128AssignU32(PRTUINT128U pValueResult, uint32_t u3
 /**
  * Assigns a 64-bit unsigned integer value to 128-bit unsigned integer.
  *
- * @returns pResult
- * @param   pResult             The result variable.
- * @param   u32Value            The 32-bit unsigned integer value.
+ * @returns pValueResult
+ * @param   pValueResult        The result variable.
+ * @param   u64Value            The 64-bit unsigned integer value.
  */
 DECLINLINE(PRTUINT128U) RTUInt128AssignU64(PRTUINT128U pValueResult, uint64_t u64Value)
 {
@@ -743,7 +743,7 @@ DECLINLINE(PRTUINT128U) RTUInt128AssignAndNFirstBits(PRTUINT128U pValueResult, u
     }
     else if (cBits < 128)
         pValueResult->s.Hi &= (RT_BIT_64(cBits - 64) - 1);
-/** @todo #if ARCH_BITS >= 64 */
+/** @todo \#if ARCH_BITS >= 64 */
     return pValueResult;
 }
 
@@ -833,14 +833,14 @@ DECLINLINE(PRTUINT128U) RTUInt128AssignXor(PRTUINT128U pValue1Result, PCRTUINT12
  * Performs a bitwise left shift on a 128-bit unsigned integer value, assigning
  * the result to it.
  *
- * @returns pValue1Result.
- * @param   pValue1Result   The first value and result.
+ * @returns pValueResult.
+ * @param   pValueResult    The first value and result.
  * @param   cBits           The number of bits to shift.
  */
 DECLINLINE(PRTUINT128U) RTUInt128AssignShiftLeft(PRTUINT128U pValueResult, int cBits)
 {
     RTUINT128U const InVal = *pValueResult;
-/** @todo #if ARCH_BITS >= 64 */
+/** @todo \#if ARCH_BITS >= 64 */
     if (cBits > 0)
     {
         /* (left shift) */
@@ -884,8 +884,8 @@ DECLINLINE(PRTUINT128U) RTUInt128AssignShiftLeft(PRTUINT128U pValueResult, int c
  * Performs a bitwise left shift on a 128-bit unsigned integer value, assigning
  * the result to it.
  *
- * @returns pValue1Result.
- * @param   pValue1Result   The first value and result.
+ * @returns pValueResult.
+ * @param   pValueResult    The first value and result.
  * @param   cBits           The number of bits to shift.
  */
 DECLINLINE(PRTUINT128U) RTUInt128AssignShiftRight(PRTUINT128U pValueResult, int cBits)
diff --git a/include/iprt/uri.h b/include/iprt/uri.h
index a57b00a..5f1e6e2 100644
--- a/include/iprt/uri.h
+++ b/include/iprt/uri.h
@@ -311,7 +311,7 @@ RTDECL(int) RTUriFileCreateEx(const char *pszPath, uint32_t fPathStyle, char **p
  * @returns the path if the URI contains one, NULL otherwise.
  * @param   pszUri              The URI to extract from.
  * @param   uFormat             In which format should the path returned.
- * @param   cbMax               The max string length to inspect.
+ * @param   cchMax              The max string length to inspect.
  */
 RTDECL(char *) RTUriFilePath(const char *pszUri);
 
diff --git a/include/iprt/utf16.h b/include/iprt/utf16.h
new file mode 100644
index 0000000..54ff99b
--- /dev/null
+++ b/include/iprt/utf16.h
@@ -0,0 +1,885 @@
+/** @file
+ * IPRT - String Manipulation, UTF-16 encoding.
+ */
+
+/*
+ * 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.
+ *
+ * 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_utf16_h
+#define ___iprt_utf16_h
+
+#include <iprt/string.h>
+
+RT_C_DECLS_BEGIN
+
+
+/** @defgroup rt_str_utf16      UTF-16 String Manipulation
+ * @ingroup grp_rt_str
+ * @{
+ */
+
+/**
+ * Allocates memory for UTF-16 string storage (default tag).
+ *
+ * You should normally not use this function, except if there is some very
+ * custom string handling you need doing that isn't covered by any of the other
+ * APIs.
+ *
+ * @returns Pointer to the allocated UTF-16 string.  The first wide char is
+ *          always set to the string terminator char, the contents of the
+ *          remainder of the memory is undefined.  The string must be freed by
+ *          calling RTUtf16Free.
+ *
+ *          NULL is returned if the allocation failed.  Please translate this to
+ *          VERR_NO_UTF16_MEMORY and not VERR_NO_MEMORY.  Also consider
+ *          RTUtf16AllocEx if an IPRT status code is required.
+ *
+ * @param   cb                  How many bytes to allocate, will be rounded up
+ *                              to a multiple of two. If this is zero, we will
+ *                              allocate a terminator wide char anyway.
+ */
+#define RTUtf16Alloc(cb)                    RTUtf16AllocTag((cb), RTSTR_TAG)
+
+/**
+ * Allocates memory for UTF-16 string storage (custom tag).
+ *
+ * You should normally not use this function, except if there is some very
+ * custom string handling you need doing that isn't covered by any of the other
+ * APIs.
+ *
+ * @returns Pointer to the allocated UTF-16 string.  The first wide char is
+ *          always set to the string terminator char, the contents of the
+ *          remainder of the memory is undefined.  The string must be freed by
+ *          calling RTUtf16Free.
+ *
+ *          NULL is returned if the allocation failed.  Please translate this to
+ *          VERR_NO_UTF16_MEMORY and not VERR_NO_MEMORY.  Also consider
+ *          RTUtf16AllocExTag if an IPRT status code is required.
+ *
+ * @param   cb                  How many bytes to allocate, will be rounded up
+ *                              to a multiple of two. If this is zero, we will
+ *                              allocate a terminator wide char anyway.
+ * @param   pszTag              Allocation tag used for statistics and such.
+ */
+RTDECL(PRTUTF16) RTUtf16AllocTag(size_t cb, const char *pszTag);
+
+
+/**
+ * Free a UTF-16 string allocated by RTStrToUtf16(), RTStrToUtf16Ex(),
+ * RTLatin1ToUtf16(), RTLatin1ToUtf16Ex(), RTUtf16Dup() or RTUtf16DupEx().
+ *
+ * @returns iprt status code.
+ * @param   pwszString      The UTF-16 string to free. NULL is accepted.
+ */
+RTDECL(void)  RTUtf16Free(PRTUTF16 pwszString);
+
+/**
+ * Allocates a new copy of the specified UTF-16 string (default tag).
+ *
+ * @returns Pointer to the allocated string copy. Use RTUtf16Free() to free it.
+ * @returns NULL when out of memory.
+ * @param   pwszString      UTF-16 string to duplicate.
+ * @remark  This function will not make any attempt to validate the encoding.
+ */
+#define RTUtf16Dup(pwszString)          RTUtf16DupTag((pwszString), RTSTR_TAG)
+
+/**
+ * Allocates a new copy of the specified UTF-16 string (custom tag).
+ *
+ * @returns Pointer to the allocated string copy. Use RTUtf16Free() to free it.
+ * @returns NULL when out of memory.
+ * @param   pwszString      UTF-16 string to duplicate.
+ * @param   pszTag          Allocation tag used for statistics and such.
+ * @remark  This function will not make any attempt to validate the encoding.
+ */
+RTDECL(PRTUTF16) RTUtf16DupTag(PCRTUTF16 pwszString, const char *pszTag);
+
+/**
+ * Allocates a new copy of the specified UTF-16 string (default tag).
+ *
+ * @returns iprt status code.
+ * @param   ppwszString     Receives pointer of the allocated UTF-16 string.
+ *                          The returned pointer must be freed using RTUtf16Free().
+ * @param   pwszString      UTF-16 string to duplicate.
+ * @param   cwcExtra        Number of extra RTUTF16 items to allocate.
+ * @remark  This function will not make any attempt to validate the encoding.
+ */
+#define RTUtf16DupEx(ppwszString, pwszString, cwcExtra) \
+    RTUtf16DupExTag((ppwszString), (pwszString), (cwcExtra), RTSTR_TAG)
+
+/**
+ * Allocates a new copy of the specified UTF-16 string (custom tag).
+ *
+ * @returns iprt status code.
+ * @param   ppwszString     Receives pointer of the allocated UTF-16 string.
+ *                          The returned pointer must be freed using RTUtf16Free().
+ * @param   pwszString      UTF-16 string to duplicate.
+ * @param   cwcExtra        Number of extra RTUTF16 items to allocate.
+ * @param   pszTag          Allocation tag used for statistics and such.
+ * @remark  This function will not make any attempt to validate the encoding.
+ */
+RTDECL(int) RTUtf16DupExTag(PRTUTF16 *ppwszString, PCRTUTF16 pwszString, size_t cwcExtra, const char *pszTag);
+
+/**
+ * Returns the length of a UTF-16 string in UTF-16 characters
+ * without trailing '\\0'.
+ *
+ * Surrogate pairs counts as two UTF-16 characters here. Use RTUtf16CpCnt()
+ * to get the exact number of code points in the string.
+ *
+ * @returns The number of RTUTF16 items in the string.
+ * @param   pwszString  Pointer the UTF-16 string.
+ * @remark  This function will not make any attempt to validate the encoding.
+ */
+RTDECL(size_t) RTUtf16Len(PCRTUTF16 pwszString);
+
+/**
+ * Find the length of a zero-terminated byte string, given a max string length.
+ *
+ * @returns The string length or cbMax. The returned length does not include
+ *          the zero terminator if it was found.
+ *
+ * @param   pwszString  The string.
+ * @param   cwcMax      The max string length in RTUTF16s.
+ * @sa      RTUtf16NLenEx, RTStrNLen.
+ */
+RTDECL(size_t) RTUtf16NLen(PCRTUTF16 pwszString, size_t cwcMax);
+
+/**
+ * Find the length of a zero-terminated byte string, given
+ * a max string length.
+ *
+ * @returns IPRT status code.
+ * @retval  VINF_SUCCESS if the string has a length less than cchMax.
+ * @retval  VERR_BUFFER_OVERFLOW if the end of the string wasn't found
+ *          before cwcMax was reached.
+ *
+ * @param   pwszString  The string.
+ * @param   cwcMax      The max string length in RTUTF16s.
+ * @param   pcwc        Where to store the string length excluding the
+ *                      terminator.  This is set to cwcMax if the terminator
+ *                      isn't found.
+ * @sa      RTUtf16NLen, RTStrNLenEx.
+ */
+RTDECL(int) RTUtf16NLenEx(PCRTUTF16 pwszString, size_t cwcMax, size_t *pcwc);
+
+/**
+ * Find the zero terminator in a string with a limited length.
+ *
+ * @returns Pointer to the zero terminator.
+ * @returns NULL if the zero terminator was not found.
+ *
+ * @param   pwszString  The string.
+ * @param   cwcMax      The max string length.  RTSTR_MAX is fine.
+ */
+RTDECL(PCRTUTF16) RTUtf16End(PCRTUTF16 pwszString, size_t cwcMax);
+
+/**
+ * Strips blankspaces from both ends of the string.
+ *
+ * @returns Pointer to first non-blank char in the string.
+ * @param   pwsz    The string to strip.
+ */
+RTDECL(PRTUTF16) RTUtf16Strip(PRTUTF16 pwsz);
+
+/**
+ * Strips blankspaces from the start of the string.
+ *
+ * @returns Pointer to first non-blank char in the string.
+ * @param   pwsz    The string to strip.
+ */
+RTDECL(PRTUTF16) RTUtf16StripL(PCRTUTF16 pwsz);
+
+/**
+ * Strips blankspaces from the end of the string.
+ *
+ * @returns pwsz.
+ * @param   pwsz    The string to strip.
+ */
+RTDECL(PRTUTF16) RTUtf16StripR(PRTUTF16 pwsz);
+
+/**
+ * String copy with overflow handling.
+ *
+ * @retval  VINF_SUCCESS on success.
+ * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
+ *          buffer will contain as much of the string as it can hold, fully
+ *          terminated.
+ *
+ * @param   pwszDst             The destination buffer.
+ * @param   cwcDst              The size of the destination buffer in RTUTF16s.
+ * @param   pwszSrc             The source string.  NULL is not OK.
+ */
+RTDECL(int) RTUtf16Copy(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc);
+
+/**
+ * String copy with overflow handling, ASCII source.
+ *
+ * @retval  VINF_SUCCESS on success.
+ * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
+ *          buffer will contain as much of the string as it can hold, fully
+ *          terminated.
+ *
+ * @param   pwszDst             The destination buffer.
+ * @param   cwcDst              The size of the destination buffer in RTUTF16s.
+ * @param   pszSrc              The source string, pure ASCII.  NULL is not OK.
+ */
+RTDECL(int) RTUtf16CopyAscii(PRTUTF16 pwszDst, size_t cwcDst, const char *pszSrc);
+
+/**
+ * String copy with overflow handling.
+ *
+ * @retval  VINF_SUCCESS on success.
+ * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
+ *          buffer will contain as much of the string as it can hold, fully
+ *          terminated.
+ *
+ * @param   pwszDst             The destination buffer.
+ * @param   cwcDst              The size of the destination buffer in RTUTF16s.
+ * @param   pwszSrc             The source string.  NULL is not OK.
+ * @param   cwcSrcMax           The maximum number of chars (not code points) to
+ *                              copy from the source string, not counting the
+ *                              terminator as usual.
+ */
+RTDECL(int) RTUtf16CopyEx(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc, size_t cwcSrcMax);
+
+/**
+ * String concatenation with overflow handling.
+ *
+ * @retval  VINF_SUCCESS on success.
+ * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
+ *          buffer will contain as much of the string as it can hold, fully
+ *          terminated.
+ *
+ * @param   pwszDst             The destination buffer.
+ * @param   cwcDst              The size of the destination buffer in RTUTF16s.
+ * @param   pwszSrc             The source string.  NULL is not OK.
+ */
+RTDECL(int) RTUtf16Cat(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc);
+
+/**
+ * String concatenation with overflow handling, ASCII source.
+ *
+ * @retval  VINF_SUCCESS on success.
+ * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
+ *          buffer will contain as much of the string as it can hold, fully
+ *          terminated.
+ *
+ * @param   pwszDst             The destination buffer.
+ * @param   cwcDst              The size of the destination buffer in RTUTF16s.
+ * @param   pszSrc              The source string, pure ASCII.  NULL is not OK.
+ */
+RTDECL(int) RTUtf16CatAscii(PRTUTF16 pwszDst, size_t cwcDst, const char *pszSrc);
+
+/**
+ * String concatenation with overflow handling.
+ *
+ * @retval  VINF_SUCCESS on success.
+ * @retval  VERR_BUFFER_OVERFLOW if the destination buffer is too small.  The
+ *          buffer will contain as much of the string as it can hold, fully
+ *          terminated.
+ *
+ * @param   pwszDst             The destination buffer.
+ * @param   cwcDst              The size of the destination buffer in RTUTF16s.
+ * @param   pwszSrc             The source string.  NULL is not OK.
+ * @param   cwcSrcMax           The maximum number of UTF-16 chars (not code
+ *                              points) to copy from the source string, not
+ *                              counting the terminator as usual.
+ */
+RTDECL(int) RTUtf16CatEx(PRTUTF16 pwszDst, size_t cwcDst, PCRTUTF16 pwszSrc, size_t cwcSrcMax);
+
+/**
+ * Performs a case sensitive string compare between two UTF-16 strings.
+ *
+ * @returns < 0 if the first string less than the second string.s
+ * @returns 0 if the first string identical to the second string.
+ * @returns > 0 if the first string greater than the second string.
+ * @param   pwsz1       First UTF-16 string. Null is allowed.
+ * @param   pwsz2       Second UTF-16 string. Null is allowed.
+ * @remark  This function will not make any attempt to validate the encoding.
+ */
+RTDECL(int) RTUtf16Cmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2);
+
+/**
+ * Performs a case sensitive string compare between an UTF-16 string and a pure
+ * ASCII string.
+ *
+ * @returns < 0 if the first string less than the second string.s
+ * @returns 0 if the first string identical to the second string.
+ * @returns > 0 if the first string greater than the second string.
+ * @param   pwsz1       First UTF-16 string. Null is allowed.
+ * @param   psz2        Second string, pure ASCII. Null is allowed.
+ * @remark  This function will not make any attempt to validate the encoding.
+ */
+RTDECL(int) RTUtf16CmpAscii(PCRTUTF16 pwsz1, const char *psz2);
+
+/**
+ * Performs a case insensitive string compare between two UTF-16 strings.
+ *
+ * This is a simplified compare, as only the simplified lower/upper case folding
+ * specified by the unicode specs are used. It does not consider character pairs
+ * as they are used in some languages, just simple upper & lower case compares.
+ *
+ * @returns < 0 if the first string less than the second string.
+ * @returns 0 if the first string identical to the second string.
+ * @returns > 0 if the first string greater than the second string.
+ * @param   pwsz1       First UTF-16 string. Null is allowed.
+ * @param   pwsz2       Second UTF-16 string. Null is allowed.
+ */
+RTDECL(int) RTUtf16ICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2);
+
+/**
+ * Performs a case insensitive string compare between an UTF-16 string and an
+ * pure ASCII string.
+ *
+ * Since this compare only takes cares about the first 128 codepoints in
+ * unicode, no tables are needed and there aren't any real complications.
+ *
+ * @returns < 0 if the first string less than the second string.
+ * @returns 0 if the first string identical to the second string.
+ * @returns > 0 if the first string greater than the second string.
+ * @param   pwsz1       First UTF-16 string. Null is allowed.
+ * @param   psz2        Second string, pure ASCII. Null is allowed.
+ */
+RTDECL(int) RTUtf16ICmpAscii(PCRTUTF16 pwsz1, const char *psz2);
+
+/**
+ * Performs a case insensitive string compare between two UTF-16 strings
+ * using the current locale of the process (if applicable).
+ *
+ * This differs from RTUtf16ICmp() in that it will try, if a locale with the
+ * required data is available, to do a correct case-insensitive compare. It
+ * follows that it is more complex and thereby likely to be more expensive.
+ *
+ * @returns < 0 if the first string less than the second string.
+ * @returns 0 if the first string identical to the second string.
+ * @returns > 0 if the first string greater than the second string.
+ * @param   pwsz1       First UTF-16 string. Null is allowed.
+ * @param   pwsz2       Second UTF-16 string. Null is allowed.
+ */
+RTDECL(int) RTUtf16LocaleICmp(PCRTUTF16 pwsz1, PCRTUTF16 pwsz2);
+
+/**
+ * Folds a UTF-16 string to lowercase.
+ *
+ * This is a very simple folding; is uses the simple lowercase
+ * code point, it is not related to any locale just the most common
+ * lowercase codepoint setup by the unicode specs, and it will not
+ * create new surrogate pairs or remove existing ones.
+ *
+ * @returns Pointer to the passed in string.
+ * @param   pwsz        The string to fold.
+ */
+RTDECL(PRTUTF16) RTUtf16ToLower(PRTUTF16 pwsz);
+
+/**
+ * Folds a UTF-16 string to uppercase.
+ *
+ * This is a very simple folding; is uses the simple uppercase
+ * code point, it is not related to any locale just the most common
+ * uppercase codepoint setup by the unicode specs, and it will not
+ * create new surrogate pairs or remove existing ones.
+ *
+ * @returns Pointer to the passed in string.
+ * @param   pwsz        The string to fold.
+ */
+RTDECL(PRTUTF16) RTUtf16ToUpper(PRTUTF16 pwsz);
+
+/**
+ * Validates the UTF-16 encoding of the string.
+ *
+ * @returns iprt status code.
+ * @param   pwsz        The string.
+ */
+RTDECL(int) RTUtf16ValidateEncoding(PCRTUTF16 pwsz);
+
+/**
+ * Validates the UTF-16 encoding of the string.
+ *
+ * @returns iprt status code.
+ * @param   pwsz        The string.
+ * @param   cwc         The max string length (/ size) in UTF-16 units. Use
+ *                      RTSTR_MAX to process the entire string.
+ * @param   fFlags      Combination of RTSTR_VALIDATE_ENCODING_XXX flags.
+ */
+RTDECL(int) RTUtf16ValidateEncodingEx(PCRTUTF16 pwsz, size_t cwc, uint32_t fFlags);
+
+/**
+ * Checks if the UTF-16 encoding is valid.
+ *
+ * @returns true / false.
+ * @param   pwsz        The string.
+ */
+RTDECL(bool) RTUtf16IsValidEncoding(PCRTUTF16 pwsz);
+
+/**
+ * Sanitise a (valid) UTF-16 string by replacing all characters outside a white
+ * list in-place by an ASCII replacement character.  Multi-byte characters will
+ * be replaced byte by byte.
+ *
+ * @returns The number of code points replaced, or a negative value if the
+ *          string is not correctly encoded.  In this last case the string
+ *          may be partially processed.
+ * @param   pwsz           The string to sanitise.
+ * @param   puszValidSet   A zero-terminated array of pairs of Unicode points.
+ *                         Each pair is the start and end point of a range,
+ *                         and the union of these ranges forms the white list.
+ * @param   chReplacement  The ASCII replacement character.
+ */
+RTDECL(ssize_t) RTUtf16PurgeComplementSet(PRTUTF16 pwsz, PCRTUNICP puszValidSet, char chReplacement);
+
+/**
+ * Translate a UTF-16 string into a UTF-8 allocating the result buffer (default
+ * tag).
+ *
+ * @returns iprt status code.
+ * @param   pwszString      UTF-16 string to convert.
+ * @param   ppszString      Receives pointer of allocated UTF-8 string on
+ *                          success, and is always set to NULL on failure.
+ *                          The returned pointer must be freed using RTStrFree().
+ */
+#define RTUtf16ToUtf8(pwszString, ppszString)       RTUtf16ToUtf8Tag((pwszString), (ppszString), RTSTR_TAG)
+
+/**
+ * Translate a UTF-16 string into a UTF-8 allocating the result buffer.
+ *
+ * @returns iprt status code.
+ * @param   pwszString      UTF-16 string to convert.
+ * @param   ppszString      Receives pointer of allocated UTF-8 string on
+ *                          success, and is always set to NULL on failure.
+ *                          The returned pointer must be freed using RTStrFree().
+ * @param   pszTag          Allocation tag used for statistics and such.
+ */
+RTDECL(int)  RTUtf16ToUtf8Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag);
+
+/**
+ * Translates UTF-16 to UTF-8 using buffer provided by the caller or a fittingly
+ * sized buffer allocated by the function (default tag).
+ *
+ * @returns iprt status code.
+ * @param   pwszString      The UTF-16 string to convert.
+ * @param   cwcString       The number of RTUTF16 items to translate from pwszString.
+ *                          The translation will stop when reaching cwcString or the terminator ('\\0').
+ *                          Use RTSTR_MAX to translate the entire string.
+ * @param   ppsz            If cch is non-zero, this must either be pointing to a pointer to
+ *                          a buffer of the specified size, or pointer to a NULL pointer.
+ *                          If *ppsz is NULL or cch is zero a buffer of at least cch chars
+ *                          will be allocated to hold the translated string.
+ *                          If a buffer was requested it must be freed using RTStrFree().
+ * @param   cch             The buffer size in chars (the type). This includes the terminator.
+ * @param   pcch            Where to store the length of the translated string,
+ *                          excluding the terminator. (Optional)
+ *
+ *                          This may be set under some error conditions,
+ *                          however, only for VERR_BUFFER_OVERFLOW and
+ *                          VERR_NO_STR_MEMORY will it contain a valid string
+ *                          length that can be used to resize the buffer.
+ */
+#define RTUtf16ToUtf8Ex(pwszString, cwcString, ppsz, cch, pcch) \
+    RTUtf16ToUtf8ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG)
+
+/**
+ * Translates UTF-16 to UTF-8 using buffer provided by the caller or a fittingly
+ * sized buffer allocated by the function (custom tag).
+ *
+ * @returns iprt status code.
+ * @param   pwszString      The UTF-16 string to convert.
+ * @param   cwcString       The number of RTUTF16 items to translate from pwszString.
+ *                          The translation will stop when reaching cwcString or the terminator ('\\0').
+ *                          Use RTSTR_MAX to translate the entire string.
+ * @param   ppsz            If cch is non-zero, this must either be pointing to a pointer to
+ *                          a buffer of the specified size, or pointer to a NULL pointer.
+ *                          If *ppsz is NULL or cch is zero a buffer of at least cch chars
+ *                          will be allocated to hold the translated string.
+ *                          If a buffer was requested it must be freed using RTStrFree().
+ * @param   cch             The buffer size in chars (the type). This includes the terminator.
+ * @param   pcch            Where to store the length of the translated string,
+ *                          excluding the terminator. (Optional)
+ *
+ *                          This may be set under some error conditions,
+ *                          however, only for VERR_BUFFER_OVERFLOW and
+ *                          VERR_NO_STR_MEMORY will it contain a valid string
+ *                          length that can be used to resize the buffer.
+ * @param   pszTag          Allocation tag used for statistics and such.
+ */
+RTDECL(int)  RTUtf16ToUtf8ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag);
+
+/**
+ * Calculates the length of the UTF-16 string in UTF-8 chars (bytes).
+ *
+ * This function will validate the string, and incorrectly encoded UTF-16
+ * strings will be rejected. The primary purpose of this function is to
+ * help allocate buffers for RTUtf16ToUtf8() of the correct size. For most
+ * other purposes RTUtf16ToUtf8Ex() should be used.
+ *
+ * @returns Number of char (bytes).
+ * @returns 0 if the string was incorrectly encoded.
+ * @param   pwsz        The UTF-16 string.
+ */
+RTDECL(size_t) RTUtf16CalcUtf8Len(PCRTUTF16 pwsz);
+
+/**
+ * Calculates the length of the UTF-16 string in UTF-8 chars (bytes).
+ *
+ * This function will validate the string, and incorrectly encoded UTF-16
+ * strings will be rejected.
+ *
+ * @returns iprt status code.
+ * @param   pwsz        The string.
+ * @param   cwc         The max string length. Use RTSTR_MAX to process the entire string.
+ * @param   pcch        Where to store the string length (in bytes). Optional.
+ *                      This is undefined on failure.
+ */
+RTDECL(int) RTUtf16CalcUtf8LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch);
+
+/**
+ * Translate a UTF-16 string into a Latin-1 (ISO-8859-1) allocating the result
+ * buffer (default tag).
+ *
+ * @returns iprt status code.
+ * @param   pwszString      UTF-16 string to convert.
+ * @param   ppszString      Receives pointer of allocated Latin1 string on
+ *                          success, and is always set to NULL on failure.
+ *                          The returned pointer must be freed using RTStrFree().
+ */
+#define RTUtf16ToLatin1(pwszString, ppszString)     RTUtf16ToLatin1Tag((pwszString), (ppszString), RTSTR_TAG)
+
+/**
+ * Translate a UTF-16 string into a Latin-1 (ISO-8859-1) allocating the result
+ * buffer (custom tag).
+ *
+ * @returns iprt status code.
+ * @param   pwszString      UTF-16 string to convert.
+ * @param   ppszString      Receives pointer of allocated Latin1 string on
+ *                          success, and is always set to NULL on failure.
+ *                          The returned pointer must be freed using RTStrFree().
+ * @param   pszTag          Allocation tag used for statistics and such.
+ */
+RTDECL(int)  RTUtf16ToLatin1Tag(PCRTUTF16 pwszString, char **ppszString, const char *pszTag);
+
+/**
+ * Translates UTF-16 to Latin-1 (ISO-8859-1) using buffer provided by the caller
+ * or a fittingly sized buffer allocated by the function (default tag).
+ *
+ * @returns iprt status code.
+ * @param   pwszString      The UTF-16 string to convert.
+ * @param   cwcString       The number of RTUTF16 items to translate from
+ *                          pwszString. The translation will stop when reaching
+ *                          cwcString or the terminator ('\\0'). Use RTSTR_MAX
+ *                          to translate the entire string.
+ * @param   ppsz            Pointer to the pointer to the Latin-1 string. The
+ *                          buffer can optionally be preallocated by the caller.
+ *
+ *                          If cch is zero, *ppsz is undefined.
+ *
+ *                          If cch is non-zero and *ppsz is not NULL, then this
+ *                          will be used as the output buffer.
+ *                          VERR_BUFFER_OVERFLOW will be returned if this is
+ *                          insufficient.
+ *
+ *                          If cch is zero or *ppsz is NULL, then a buffer of
+ *                          sufficient size is allocated. cch can be used to
+ *                          specify a minimum size of this buffer. Use
+ *                          RTUtf16Free() to free the result.
+ *
+ * @param   cch             The buffer size in chars (the type). This includes
+ *                          the terminator.
+ * @param   pcch            Where to store the length of the translated string,
+ *                          excluding the terminator. (Optional)
+ *
+ *                          This may be set under some error conditions,
+ *                          however, only for VERR_BUFFER_OVERFLOW and
+ *                          VERR_NO_STR_MEMORY will it contain a valid string
+ *                          length that can be used to resize the buffer.
+ */
+#define RTUtf16ToLatin1Ex(pwszString, cwcString, ppsz, cch, pcch) \
+    RTUtf16ToLatin1ExTag((pwszString), (cwcString), (ppsz), (cch), (pcch), RTSTR_TAG)
+
+/**
+ * Translates UTF-16 to Latin-1 (ISO-8859-1) using buffer provided by the caller
+ * or a fittingly sized buffer allocated by the function (custom tag).
+ *
+ * @returns iprt status code.
+ * @param   pwszString      The UTF-16 string to convert.
+ * @param   cwcString       The number of RTUTF16 items to translate from
+ *                          pwszString. The translation will stop when reaching
+ *                          cwcString or the terminator ('\\0'). Use RTSTR_MAX
+ *                          to translate the entire string.
+ * @param   ppsz            Pointer to the pointer to the Latin-1 string. The
+ *                          buffer can optionally be preallocated by the caller.
+ *
+ *                          If cch is zero, *ppsz is undefined.
+ *
+ *                          If cch is non-zero and *ppsz is not NULL, then this
+ *                          will be used as the output buffer.
+ *                          VERR_BUFFER_OVERFLOW will be returned if this is
+ *                          insufficient.
+ *
+ *                          If cch is zero or *ppsz is NULL, then a buffer of
+ *                          sufficient size is allocated. cch can be used to
+ *                          specify a minimum size of this buffer. Use
+ *                          RTUtf16Free() to free the result.
+ *
+ * @param   cch             The buffer size in chars (the type). This includes
+ *                          the terminator.
+ * @param   pcch            Where to store the length of the translated string,
+ *                          excluding the terminator. (Optional)
+ *
+ *                          This may be set under some error conditions,
+ *                          however, only for VERR_BUFFER_OVERFLOW and
+ *                          VERR_NO_STR_MEMORY will it contain a valid string
+ *                          length that can be used to resize the buffer.
+ * @param   pszTag          Allocation tag used for statistics and such.
+ */
+RTDECL(int)  RTUtf16ToLatin1ExTag(PCRTUTF16 pwszString, size_t cwcString, char **ppsz, size_t cch, size_t *pcch, const char *pszTag);
+
+/**
+ * Calculates the length of the UTF-16 string in Latin-1 (ISO-8859-1) chars.
+ *
+ * This function will validate the string, and incorrectly encoded UTF-16
+ * strings will be rejected. The primary purpose of this function is to
+ * help allocate buffers for RTUtf16ToLatin1() of the correct size. For most
+ * other purposes RTUtf16ToLatin1Ex() should be used.
+ *
+ * @returns Number of char (bytes).
+ * @returns 0 if the string was incorrectly encoded.
+ * @param   pwsz        The UTF-16 string.
+ */
+RTDECL(size_t) RTUtf16CalcLatin1Len(PCRTUTF16 pwsz);
+
+/**
+ * Calculates the length of the UTF-16 string in Latin-1 (ISO-8859-1) chars.
+ *
+ * This function will validate the string, and incorrectly encoded UTF-16
+ * strings will be rejected.
+ *
+ * @returns iprt status code.
+ * @param   pwsz        The string.
+ * @param   cwc         The max string length. Use RTSTR_MAX to process the
+ *                      entire string.
+ * @param   pcch        Where to store the string length (in bytes). Optional.
+ *                      This is undefined on failure.
+ */
+RTDECL(int) RTUtf16CalcLatin1LenEx(PCRTUTF16 pwsz, size_t cwc, size_t *pcch);
+
+/**
+ * Get the unicode code point at the given string position.
+ *
+ * @returns unicode code point.
+ * @returns RTUNICP_INVALID if the encoding is invalid.
+ * @param   pwsz        The string.
+ *
+ * @remark  This is an internal worker for RTUtf16GetCp().
+ */
+RTDECL(RTUNICP) RTUtf16GetCpInternal(PCRTUTF16 pwsz);
+
+/**
+ * Get the unicode code point at the given string position.
+ *
+ * @returns iprt status code.
+ * @param   ppwsz       Pointer to the string pointer. This will be updated to
+ *                      point to the char following the current code point.
+ * @param   pCp         Where to store the code point.
+ *                      RTUNICP_INVALID is stored here on failure.
+ *
+ * @remark  This is an internal worker for RTUtf16GetCpEx().
+ */
+RTDECL(int) RTUtf16GetCpExInternal(PCRTUTF16 *ppwsz, PRTUNICP pCp);
+
+/**
+ * Put the unicode code point at the given string position
+ * and return the pointer to the char following it.
+ *
+ * This function will not consider anything at or following the
+ * buffer area pointed to by pwsz. It is therefore not suitable for
+ * inserting code points into a string, only appending/overwriting.
+ *
+ * @returns pointer to the char following the written code point.
+ * @param   pwsz        The string.
+ * @param   CodePoint   The code point to write.
+ *                      This should not be RTUNICP_INVALID or any other
+ *                      character out of the UTF-16 range.
+ *
+ * @remark  This is an internal worker for RTUtf16GetCpEx().
+ */
+RTDECL(PRTUTF16) RTUtf16PutCpInternal(PRTUTF16 pwsz, RTUNICP CodePoint);
+
+/**
+ * Get the unicode code point at the given string position.
+ *
+ * @returns unicode code point.
+ * @returns RTUNICP_INVALID if the encoding is invalid.
+ * @param   pwsz        The string.
+ *
+ * @remark  We optimize this operation by using an inline function for
+ *          everything which isn't a surrogate pair or an endian indicator.
+ */
+DECLINLINE(RTUNICP) RTUtf16GetCp(PCRTUTF16 pwsz)
+{
+    const RTUTF16 wc = *pwsz;
+    if (wc < 0xd800 || (wc > 0xdfff && wc < 0xfffe))
+        return wc;
+    return RTUtf16GetCpInternal(pwsz);
+}
+
+/**
+ * Get the unicode code point at the given string position.
+ *
+ * @returns iprt status code.
+ * @param   ppwsz       Pointer to the string pointer. This will be updated to
+ *                      point to the char following the current code point.
+ * @param   pCp         Where to store the code point.
+ *                      RTUNICP_INVALID is stored here on failure.
+ *
+ * @remark  We optimize this operation by using an inline function for
+ *          everything which isn't a surrogate pair or and endian indicator.
+ */
+DECLINLINE(int) RTUtf16GetCpEx(PCRTUTF16 *ppwsz, PRTUNICP pCp)
+{
+    const RTUTF16 wc = **ppwsz;
+    if (wc < 0xd800 || (wc > 0xdfff && wc < 0xfffe))
+    {
+        (*ppwsz)++;
+        *pCp = wc;
+        return VINF_SUCCESS;
+    }
+    return RTUtf16GetCpExInternal(ppwsz, pCp);
+}
+
+/**
+ * Put the unicode code point at the given string position
+ * and return the pointer to the char following it.
+ *
+ * This function will not consider anything at or following the
+ * buffer area pointed to by pwsz. It is therefore not suitable for
+ * inserting code points into a string, only appending/overwriting.
+ *
+ * @returns pointer to the char following the written code point.
+ * @param   pwsz        The string.
+ * @param   CodePoint   The code point to write.
+ *                      This should not be RTUNICP_INVALID or any other
+ *                      character out of the UTF-16 range.
+ *
+ * @remark  We optimize this operation by using an inline function for
+ *          everything which isn't a surrogate pair or and endian indicator.
+ */
+DECLINLINE(PRTUTF16) RTUtf16PutCp(PRTUTF16 pwsz, RTUNICP CodePoint)
+{
+    if (CodePoint < 0xd800 || (CodePoint > 0xd800 && CodePoint < 0xfffe))
+    {
+        *pwsz++ = (RTUTF16)CodePoint;
+        return pwsz;
+    }
+    return RTUtf16PutCpInternal(pwsz, CodePoint);
+}
+
+/**
+ * Skips ahead, past the current code point.
+ *
+ * @returns Pointer to the char after the current code point.
+ * @param   pwsz    Pointer to the current code point.
+ * @remark  This will not move the next valid code point, only past the current one.
+ */
+DECLINLINE(PRTUTF16) RTUtf16NextCp(PCRTUTF16 pwsz)
+{
+    RTUNICP Cp;
+    RTUtf16GetCpEx(&pwsz, &Cp);
+    return (PRTUTF16)pwsz;
+}
+
+/**
+ * Skips backwards, to the previous code point.
+ *
+ * @returns Pointer to the char after the current code point.
+ * @param   pwszStart   Pointer to the start of the string.
+ * @param   pwsz        Pointer to the current code point.
+ */
+RTDECL(PRTUTF16) RTUtf16PrevCp(PCRTUTF16 pwszStart, PCRTUTF16 pwsz);
+
+
+/**
+ * Checks if the UTF-16 char is the high surrogate char (i.e.
+ * the 1st char in the pair).
+ *
+ * @returns true if it is.
+ * @returns false if it isn't.
+ * @param   wc      The character to investigate.
+ */
+DECLINLINE(bool) RTUtf16IsHighSurrogate(RTUTF16 wc)
+{
+    return wc >= 0xd800 && wc <= 0xdbff;
+}
+
+/**
+ * Checks if the UTF-16 char is the low surrogate char (i.e.
+ * the 2nd char in the pair).
+ *
+ * @returns true if it is.
+ * @returns false if it isn't.
+ * @param   wc      The character to investigate.
+ */
+DECLINLINE(bool) RTUtf16IsLowSurrogate(RTUTF16 wc)
+{
+    return wc >= 0xdc00 && wc <= 0xdfff;
+}
+
+
+/**
+ * Checks if the two UTF-16 chars form a valid surrogate pair.
+ *
+ * @returns true if they do.
+ * @returns false if they doesn't.
+ * @param   wcHigh      The high (1st) character.
+ * @param   wcLow       The low (2nd) character.
+ */
+DECLINLINE(bool) RTUtf16IsSurrogatePair(RTUTF16 wcHigh, RTUTF16 wcLow)
+{
+    return RTUtf16IsHighSurrogate(wcHigh)
+        && RTUtf16IsLowSurrogate(wcLow);
+}
+
+/**
+ * Formats a buffer stream as hex bytes.
+ *
+ * The default is no separating spaces or line breaks or anything.
+ *
+ * @returns IPRT status code.
+ * @retval  VERR_INVALID_POINTER if any of the pointers are wrong.
+ * @retval  VERR_BUFFER_OVERFLOW if the buffer is insufficent to hold the bytes.
+ *
+ * @param   pwszBuf     Output string buffer.
+ * @param   cwcBuf      The size of the output buffer in RTUTF16 units.
+ * @param   pv          Pointer to the bytes to stringify.
+ * @param   cb          The number of bytes to stringify.
+ * @param   fFlags      Combination of RTSTRPRINTHEXBYTES_F_XXX values.
+ * @sa      RTStrPrintHexBytes.
+ */
+RTDECL(int) RTUtf16PrintHexBytes(PRTUTF16 pwszBuf, size_t cwcBuf, void const *pv, size_t cb, uint32_t fFlags);
+
+/** @} */
+
+
+RT_C_DECLS_END
+
+/** @} */
+
+#endif
+
diff --git a/include/iprt/vfs.h b/include/iprt/vfs.h
index 6de79cb..851cce3 100644
--- a/include/iprt/vfs.h
+++ b/include/iprt/vfs.h
@@ -226,7 +226,7 @@ RTDECL(RTVFSOBJ)        RTVfsObjFromVfs(RTVFS hVfs);
  * Converts a VFS filesystem stream handle to a VFS base object handle.
  *
  * @returns Referenced handle on success, NIL if the input handle was invalid.
- * @param   hVfsFSs         The VFS filesystem stream handle.
+ * @param   hVfsFss         The VFS filesystem stream handle.
  */
 RTDECL(RTVFSOBJ)        RTVfsObjFromFsStream(RTVFSFSSTREAM hVfsFss);
 
@@ -297,12 +297,12 @@ RTDECL(int)         RTVfsFsStrmQueryInfo(RTVFSFSSTREAM hVfsFss, PRTFSOBJINFO pOb
  * @retval  VINF_SUCCESS if a new object was retrieved.
  * @retval  VERR_EOF when there are no more objects.
  *
- * @param   pvThis      The implementation specific directory data.
+ * @param   hVfsFss     The file system stream handle.
  * @param   ppszName    Where to return the object name.  Must be freed by
  *                      calling RTStrFree.
  * @param   penmType    Where to return the object type.
- * @param   hVfsObj     Where to return the object handle (referenced).
- *                      This must be cast to the desired type before use.
+ * @param   phVfsObj    Where to return the object handle (referenced). This
+ *                      must be cast to the desired type before use.
  */
 RTDECL(int)         RTVfsFsStrmNext(RTVFSFSSTREAM hVfsFss, char **ppszName, RTVFSOBJTYPE *penmType, PRTVFSOBJ phVfsObj);
 
@@ -325,7 +325,7 @@ RTDECL(uint32_t)    RTVfsDirRetain(RTVFSDIR hVfsDir);
  * Releases a reference to the VFS directory handle.
  *
  * @returns New reference count on success (0 if closed), UINT32_MAX on failure.
- * @param   hVfsIos         The VFS directory handle.
+ * @param   hVfsDir         The VFS directory handle.
  */
 RTDECL(uint32_t)    RTVfsDirRelease(RTVFSDIR hVfsDir);
 
@@ -566,7 +566,7 @@ RTDECL(int)         RTVfsIoStrmReadAt(RTVFSIOSTREAM hVfsIos, RTFOFF off, void *p
  * @param   cbToWrite       The number of bytes to write.
  * @param   fBlocking       Whether the call is blocking (@c true) or not.  If
  *                          not, the @a pcbWritten parameter must not be NULL.
- * @param   pcbRead         Where to always store the number of bytes actually
+ * @param   pcbWritten      Where to always store the number of bytes actually
  *                          written.  This can be NULL if @a fBlocking is true.
  * @sa      RTVfsFileWrite, RTFileWrite, RTPipeWrite, RTPipeWriteBlocking,
  *          RTSocketWrite
@@ -770,7 +770,7 @@ RTDECL(uint32_t)    RTVfsFileRelease(RTVFSFILE hVfsFile);
  * @retval  VERR_NOT_SUPPORTED if the @a enmAddAttr value is not handled by the
  *          implementation.
  *
- * @param   hVfsObj         The VFS object handle.
+ * @param   hVfsFile        The VFS file handle.
  * @param   pObjInfo        Where to return the info.
  * @param   enmAddAttr      Which additional attributes should be retrieved.
  * @sa      RTVfsObjQueryInfo, RTVfsFsStrmQueryInfo, RTVfsDirQueryInfo,
@@ -800,10 +800,8 @@ RTDECL(int)         RTVfsFileQueryInfo(RTVFSFILE hVfsFile, PRTFSOBJINFO pObjInfo
  * @param   hVfsFile        The VFS file handle.
  * @param   pvBuf           Where to store the read bytes.
  * @param   cbToRead        The number of bytes to read.
- * @param   fBlocking       Whether the call is blocking (@c true) or not.  If
- *                          not, the @a pcbRead parameter must not be NULL.
  * @param   pcbRead         Where to always store the number of bytes actually
- *                          read.  This can be NULL if @a fBlocking is true.
+ *                          read.  Optional.
  * @sa      RTVfsIoStrmRead, RTFileRead, RTPipeRead, RTPipeReadBlocking,
  *          RTSocketRead
  */
@@ -819,10 +817,8 @@ RTDECL(int)         RTVfsFileReadAt(RTVFSFILE hVfsFile, RTFOFF off, void *pvBuf,
  * @param   hVfsFile        The VFS file handle.
  * @param   pvBuf           The bytes to write.
  * @param   cbToWrite       The number of bytes to write.
- * @param   fBlocking       Whether the call is blocking (@c true) or not.  If
- *                          not, the @a pcbWritten parameter must not be NULL.
- * @param   pcbRead         Where to always store the number of bytes actually
- *                          written.  This can be NULL if @a fBlocking is true.
+ * @param   pcbWritten      Where to always store the number of bytes actually
+ *                          written.  This can be NULL.
  * @sa      RTVfsIoStrmRead, RTFileWrite, RTPipeWrite, RTPipeWriteBlocking,
  *          RTSocketWrite
  */
@@ -909,7 +905,7 @@ RTDECL(int) RTVfsMemorizeIoStreamAsFile(RTVFSIOSTREAM hVfsIos, uint32_t fFlags,
  * Pumps data from one I/O stream to another.
  *
  * The data is read in chunks from @a hVfsIosSrc and written to @a hVfsIosDst
- * until @hVfsIosSrc indicates end of stream.
+ * until @a hVfsIosSrc indicates end of stream.
  *
  * @returns IPRT status code
  *
diff --git a/include/iprt/vfslowlevel.h b/include/iprt/vfslowlevel.h
index acaf9f0..d823f42 100644
--- a/include/iprt/vfslowlevel.h
+++ b/include/iprt/vfslowlevel.h
@@ -236,7 +236,7 @@ typedef RTVFSOPS const *PCRTVFSOPS;
  * Creates a new VFS handle.
  *
  * @returns IPRT status code
- * @param   pVfs Ops            The VFS operations.
+ * @param   pVfsOps             The VFS operations.
  * @param   cbInstance          The size of the instance data.
  * @param   hVfs                The VFS handle to associate this VFS with.
  *                              NIL_VFS is ok.
@@ -302,7 +302,7 @@ typedef RTVFSOBJOPS const *PCRTVFSOBJOPS;
  * @param   hLock               Handle to a custom lock to be used with the new
  *                              object.  The reference is consumed.  NIL and
  *                              special lock handles are fine.
- * @param   phVfsFss            Where to return the new handle.
+ * @param   phVfsObj            Where to return the new handle.
  * @param   ppvInstance         Where to return the pointer to the instance data
  *                              (size is @a cbInstance).
  */
@@ -955,7 +955,6 @@ RTDECL(void) RTVfsParsePathFree(PRTVFSPARSEDPATH pPath);
  * all that is required is to wait according to the parameters.
  *
  * @returns IPRT status code.
- * @param   pvThis      The implementation specific file data.
  * @param   fEvents     The events to poll for (RTPOLL_EVT_XXX).
  * @param   cMillies    How long to wait for event to eventuate.
  * @param   fIntr       Whether the wait is interruptible and can return
@@ -969,7 +968,7 @@ RTDECL(int) RTVfsUtilDummyPollOne(uint32_t fEvents, RTMSINTERVAL cMillies, bool
 /** @}  */
 
 
-/** @defgroup grp_rt_vfs_lowlevel_chain     VFS Chains
+/** @defgroup grp_rt_vfs_lowlevel_chain     VFS Chains (Low Level)
  * @ref grp_rt_vfs_chain
  * @{
  */
@@ -1011,7 +1010,7 @@ typedef struct RTVFSCHAINELEMSPEC
     /** The number of arguments. */
     uint32_t            cArgs;
     /** Arguments. */
-    char               **papszArgs;
+    char              **papszArgs;
 } RTVFSCHAINELEMSPEC;
 /** Pointer to a chain element specification. */
 typedef RTVFSCHAINELEMSPEC *PRTVFSCHAINELEMSPEC;
diff --git a/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp b/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp
index 62aaefe..a3806c2 100644
--- a/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp
+++ b/src/VBox/Additions/common/VBoxControl/VBoxControl.cpp
@@ -53,22 +53,26 @@ char const *g_pszProgName = "";
 int g_cVerbosity = 0;
 
 
-/**
- * Displays the program usage message.
- *
- * @param u64Which
- *
+/** @name Displays the program usage message.
  * @{
  */
 
-/** Helper function */
-static void doUsage(char const *line, char const *name = "", char const *command = "")
+/**
+ * Helper function that does indentation.
+ *
+ * @param   pszLine     Text.
+ * @param   pszName     Program name.
+ * @param   pszCommand  Command/option syntax.
+ */
+static void doUsage(char const *pszLine, char const *pszName = "", char const *pszCommand = "")
 {
     /* Allow for up to 15 characters command name length (VBoxControl.exe) with
      * perfect column alignment. Beyond that there's at least one space between
      * the command if there are command line parameters. */
-    RTPrintf("%s %-*s%s%s\n", name, strlen(line) ? 35 - strlen(name) : 1,
-                              command, strlen(line) ? " " : "", line);
+    RTPrintf("%s %-*s%s%s\n",
+             pszName,
+             *pszLine ? 35 - strlen(pszName) : 1, pszCommand,
+             *pszLine ? " " : "", pszLine);
 }
 
 /** Enumerate the different parts of the usage we might want to print out */
diff --git a/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp b/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp
index e3e6136..3e0efd1 100644
--- a/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp
+++ b/src/VBox/Additions/common/VBoxControl/testcase/tstVBoxControl.cpp
@@ -39,41 +39,41 @@ VBGLR3DECL(int)     VbglR3Init(void)
     return VINF_SUCCESS;
 }
 
-VBGLR3DECL(int)     VbglR3GuestPropConnect(uint32_t *pu32ClientId)
+VBGLR3DECL(int)     VbglR3GuestPropConnect(HGCMCLIENTID *pidClient)
 {
-    AssertPtrReturn(pu32ClientId, VERR_INVALID_POINTER);
+    AssertPtrReturn(pidClient, VERR_INVALID_POINTER);
     RTPrintf("Connect to guest property service...\n");
-    *pu32ClientId = 1;
+    *pidClient = 1;
     return VINF_SUCCESS;
 }
 
-VBGLR3DECL(int)     VbglR3GuestPropDisconnect(uint32_t u32ClientId)
+VBGLR3DECL(int)     VbglR3GuestPropDisconnect(HGCMCLIENTID idClient)
 {
-    RTPrintf("Disconnect client %d from guest property service...\n", u32ClientId);
+    RTPrintf("Disconnect client %d from guest property service...\n", idClient);
     return VINF_SUCCESS;
 }
 
-VBGLR3DECL(int)     VbglR3GuestPropWrite(uint32_t u32ClientId,
+VBGLR3DECL(int)     VbglR3GuestPropWrite(HGCMCLIENTID idClient,
                                          const char *pszName,
                                          const char *pszValue,
                                          const char *pszFlags)
 {
     RTPrintf("Called SET_PROP, client %d, name %s, value %s, flags %s...\n",
-             u32ClientId, pszName, pszValue, pszFlags);
+             idClient, pszName, pszValue, pszFlags);
     return VINF_SUCCESS;
 }
 
-VBGLR3DECL(int)     VbglR3GuestPropWriteValue(uint32_t u32ClientId,
+VBGLR3DECL(int)     VbglR3GuestPropWriteValue(HGCMCLIENTID idClient,
                                               const char *pszName,
                                               const char *pszValue)
 {
     RTPrintf("Called SET_PROP_VALUE, client %d, name %s, value %s...\n",
-             u32ClientId, pszName, pszValue);
+             idClient, pszName, pszValue);
     return VINF_SUCCESS;
 }
 
 #ifdef VBOX_WITH_GUEST_PROPS
-VBGLR3DECL(int)     VbglR3GuestPropRead(uint32_t u32ClientId,
+VBGLR3DECL(int)     VbglR3GuestPropRead(HGCMCLIENTID idClient,
                                         const char *pszName,
                                         void *pvBuf,
                                         uint32_t cbBuf,
@@ -83,7 +83,7 @@ VBGLR3DECL(int)     VbglR3GuestPropRead(uint32_t u32ClientId,
                                         uint32_t *pcbBufActual)
 {
     RTPrintf("Called GET_PROP, client %d, name %s...\n",
-             u32ClientId, pszName);
+             idClient, pszName);
     static char szValue[] = "Value";
     static char szFlags[] = "TRANSIENT";
     if (VALID_PTR(ppszValue))
@@ -97,11 +97,11 @@ VBGLR3DECL(int)     VbglR3GuestPropRead(uint32_t u32ClientId,
     return VINF_SUCCESS;
 }
 
-VBGLR3DECL(int)     VbglR3GuestPropDelete(uint32_t u32ClientId,
+VBGLR3DECL(int)     VbglR3GuestPropDelete(HGCMCLIENTID idClient,
                                           const char *pszName)
 {
     RTPrintf("Called DEL_PROP, client %d, name %s...\n",
-             u32ClientId, pszName);
+             idClient, pszName);
     return VINF_SUCCESS;
 }
 
@@ -110,7 +110,7 @@ struct VBGLR3GUESTPROPENUM
     uint32_t u32;
 };
 
-VBGLR3DECL(int)     VbglR3GuestPropEnum(uint32_t u32ClientId,
+VBGLR3DECL(int)     VbglR3GuestPropEnum(HGCMCLIENTID idClient,
                                         char const * const *ppaszPatterns,
                                         uint32_t cPatterns,
                                         PVBGLR3GUESTPROPENUM *ppHandle,
@@ -119,7 +119,7 @@ VBGLR3DECL(int)     VbglR3GuestPropEnum(uint32_t u32ClientId,
                                         uint64_t *pu64Timestamp,
                                         char const **ppszFlags)
 {
-    RTPrintf("Called ENUM_PROPS, client %d...\n", u32ClientId);
+    RTPrintf("Called ENUM_PROPS, client %d...\n", idClient);
     AssertPtrReturn(ppHandle, VERR_INVALID_POINTER);
     static VBGLR3GUESTPROPENUM Handle = { 0 };
     static char szName[] = "Name";
@@ -162,7 +162,7 @@ VBGLR3DECL(void)    VbglR3GuestPropEnumFree(PVBGLR3GUESTPROPENUM pHandle)
     RTPrintf("Called enumerate free...\n");
 }
 
-VBGLR3DECL(int)     VbglR3GuestPropWait(uint32_t u32ClientId,
+VBGLR3DECL(int)     VbglR3GuestPropWait(HGCMCLIENTID idClient,
                                         const char *pszPatterns,
                                         void *pvBuf,
                                         uint32_t cbBuf,
@@ -177,11 +177,11 @@ VBGLR3DECL(int)     VbglR3GuestPropWait(uint32_t u32ClientId,
     if (u32Timeout == RT_INDEFINITE_WAIT)
         RTPrintf("Called GET_NOTIFICATION, client %d, patterns %s, timestamp %llu,\n"
                  "    timeout RT_INDEFINITE_WAIT...\n",
-                 u32ClientId, pszPatterns, u64Timestamp);
+                 idClient, pszPatterns, u64Timestamp);
     else
         RTPrintf("Called GET_NOTIFICATION, client %d, patterns %s, timestamp %llu,\n"
                  "    timeout %u...\n",
-                 u32ClientId, pszPatterns, u64Timestamp, u32Timeout);
+                 idClient, pszPatterns, u64Timestamp, u32Timeout);
     static char szName[] = "Name";
     static char szValue[] = "Value";
     static char szFlags[] = "TRANSIENT";
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxDev-haiku.c b/src/VBox/Additions/common/VBoxGuest/VBoxDev-haiku.c
index 87bcbd1..446d456 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxDev-haiku.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxDev-haiku.c
@@ -71,28 +71,9 @@
 
 
 /*********************************************************************************************************************************
-*   Internal Functions                                                                                                           *
+*   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
-static status_t VBoxGuestHaikuOpen(const char *name, uint32 flags, void **cookie);
-static status_t VBoxGuestHaikuClose(void *cookie);
-static status_t VBoxGuestHaikuFree(void *cookie);
-static status_t VBoxGuestHaikuIOCtl(void *cookie, uint32 op, void *data, size_t len);
-static status_t VBoxGuestHaikuSelect(void *cookie, uint8 event, uint32 ref, selectsync *sync);
-static status_t VBoxGuestHaikuDeselect(void *cookie, uint8 event, selectsync *sync);
-static status_t VBoxGuestHaikuWrite(void *cookie, off_t position, const void *data, size_t *numBytes);
-static status_t VBoxGuestHaikuRead(void *cookie, off_t position, void *data, size_t *numBytes);
-
-static device_hooks g_VBoxGuestHaikuDeviceHooks =
-{
-    VBoxGuestHaikuOpen,
-    VBoxGuestHaikuClose,
-    VBoxGuestHaikuFree,
-    VBoxGuestHaikuIOCtl,
-    VBoxGuestHaikuRead,
-    VBoxGuestHaikuWrite,
-    VBoxGuestHaikuSelect,
-    VBoxGuestHaikuDeselect,
-};
+int32 api_version = B_CUR_DRIVER_API_VERSION;
 
 
 /**
@@ -104,26 +85,26 @@ static device_hooks g_VBoxGuestHaikuDeviceHooks =
  *
  * @return Haiku status code.
  */
-static status_t VBoxGuestHaikuOpen(const char *name, uint32 flags, void **cookie)
+static status_t vgdrvHaikuOpen(const char *name, uint32 flags, void **cookie)
 {
     int rc;
     PVBOXGUESTSESSION pSession;
 
-    LogFlow((DRIVER_NAME ":VBoxGuestHaikuOpen\n"));
+    LogFlow((DRIVER_NAME ":vgdrvHaikuOpen\n"));
 
     /*
      * Create a new session.
      */
-    rc = VbgdCommonCreateUserSession(&g_DevExt, &pSession);
+    rc = VGDrvCommonCreateUserSession(&g_DevExt, &pSession);
     if (RT_SUCCESS(rc))
     {
-        Log((DRIVER_NAME ":VBoxGuestHaikuOpen success: g_DevExt=%p pSession=%p rc=%d pid=%d\n",&g_DevExt, pSession, rc,(int)RTProcSelf()));
+        Log((DRIVER_NAME ":vgdrvHaikuOpen success: g_DevExt=%p pSession=%p rc=%d pid=%d\n",&g_DevExt, pSession, rc,(int)RTProcSelf()));
         ASMAtomicIncU32(&cUsers);
         *cookie = pSession;
         return B_OK;
     }
 
-    LogRel((DRIVER_NAME ":VBoxGuestHaikuOpen: failed. rc=%d\n", rc));
+    LogRel((DRIVER_NAME ":vgdrvHaikuOpen: failed. rc=%d\n", rc));
     return RTErrConvertToErrno(rc);
 }
 
@@ -134,10 +115,10 @@ static status_t VBoxGuestHaikuOpen(const char *name, uint32 flags, void **cookie
  *
  * @return Haiku status code.
  */
-static status_t VBoxGuestHaikuClose(void *cookie)
+static status_t vgdrvHaikuClose(void *cookie)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)cookie;
-    Log(("VBoxGuestHaikuClose: pSession=%p\n", pSession));
+    Log(("vgdrvHaikuClose: pSession=%p\n", pSession));
 
     /** @todo r=ramshankar: should we really be using the session spinlock here? */
     RTSpinlockAcquire(g_DevExt.SessionSpinlock);
@@ -163,21 +144,21 @@ static status_t VBoxGuestHaikuClose(void *cookie)
  *
  * @return Haiku status code.
  */
-static status_t VBoxGuestHaikuFree(void *cookie)
+static status_t vgdrvHaikuFree(void *cookie)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)cookie;
-    Log(("VBoxGuestHaikuFree: pSession=%p\n", pSession));
+    Log(("vgdrvHaikuFree: pSession=%p\n", pSession));
 
     /*
      * Close the session if it's still hanging on to the device...
      */
     if (VALID_PTR(pSession))
     {
-        VbgdCommonCloseSession(&g_DevExt, pSession);
+        VGDrvCommonCloseSession(&g_DevExt, pSession);
         ASMAtomicDecU32(&cUsers);
     }
     else
-        Log(("VBoxGuestHaikuFree: si_drv1=%p!\n", pSession));
+        Log(("vgdrvHaikuFree: si_drv1=%p!\n", pSession));
     return B_OK;
 }
 
@@ -191,12 +172,11 @@ static status_t VBoxGuestHaikuFree(void *cookie)
  *
  * @return Haiku status code.
  */
-static status_t VBoxGuestHaikuIOCtl(void *cookie, uint32 op, void *data, size_t len)
+static status_t vgdrvHaikuIOCtl(void *cookie, uint32 op, void *data, size_t len)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)cookie;
-    Log((DRIVER_NAME ":VBoxGuestHaikuIOCtl cookie=%p op=0x%08x data=%p len=%lu)\n", cookie, op, data, len));
-
-    int rc = B_OK;
+    int rc;
+    Log(("vgdrvHaikuIOCtl: cookie=%p op=0x%08x data=%p len=%lu)\n", cookie, op, data, len));
 
     /*
      * Validate the input.
@@ -210,7 +190,7 @@ static status_t VBoxGuestHaikuIOCtl(void *cookie, uint32 op, void *data, size_t
 #if 0
     if (IOCPARM_LEN(ulCmd) != sizeof(VBGLBIGREQ))
     {
-        Log((DRIVER_NAME ": VBoxGuestHaikuIOCtl: bad request %lu size=%lu expected=%d\n", ulCmd, IOCPARM_LEN(ulCmd),
+        Log((DRIVER_NAME ": vgdrvHaikuIOCtl: bad request %lu size=%lu expected=%d\n", ulCmd, IOCPARM_LEN(ulCmd),
                                                                                         sizeof(VBGLBIGREQ)));
         return ENOTTY;
     }
@@ -218,7 +198,7 @@ static status_t VBoxGuestHaikuIOCtl(void *cookie, uint32 op, void *data, size_t
 
     if (RT_UNLIKELY(len > _1M * 16))
     {
-        dprintf(DRIVER_NAME ": VBoxGuestHaikuIOCtl: bad size %#x; pArg=%p Cmd=%lu.\n", (unsigned)len, data, op);
+        dprintf(DRIVER_NAME ": vgdrvHaikuIOCtl: bad size %#x; pArg=%p Cmd=%lu.\n", (unsigned)len, data, op);
         return EINVAL;
     }
 
@@ -231,7 +211,7 @@ static status_t VBoxGuestHaikuIOCtl(void *cookie, uint32 op, void *data, size_t
         pvBuf = RTMemTmpAlloc(len);
         if (RT_UNLIKELY(!pvBuf))
         {
-            LogRel((DRIVER_NAME ":VBoxGuestHaikuIOCtl: RTMemTmpAlloc failed to alloc %d bytes.\n", len));
+            LogRel((DRIVER_NAME ":vgdrvHaikuIOCtl: RTMemTmpAlloc failed to alloc %d bytes.\n", len));
             return ENOMEM;
         }
 
@@ -240,29 +220,29 @@ static status_t VBoxGuestHaikuIOCtl(void *cookie, uint32 op, void *data, size_t
         if (RT_UNLIKELY(rc < 0))
         {
             RTMemTmpFree(pvBuf);
-            LogRel((DRIVER_NAME ":VBoxGuestHaikuIOCtl: user_memcpy failed; pvBuf=%p data=%p op=%d. rc=%d\n", pvBuf, data, op, rc));
+            LogRel((DRIVER_NAME ":vgdrvHaikuIOCtl: user_memcpy failed; pvBuf=%p data=%p op=%d. rc=%d\n", pvBuf, data, op, rc));
             return EFAULT;
         }
         if (RT_UNLIKELY(!VALID_PTR(pvBuf)))
         {
             RTMemTmpFree(pvBuf);
-            LogRel((DRIVER_NAME ":VBoxGuestHaikuIOCtl: pvBuf invalid pointer %p\n", pvBuf));
+            LogRel((DRIVER_NAME ":vgdrvHaikuIOCtl: pvBuf invalid pointer %p\n", pvBuf));
             return EINVAL;
         }
     }
-    Log((DRIVER_NAME ":VBoxGuestHaikuIOCtl: pSession=%p pid=%d.\n", pSession,(int)RTProcSelf()));
+    Log(("vgdrvHaikuIOCtl: pSession=%p pid=%d.\n", pSession,(int)RTProcSelf()));
 
     /*
      * Process the IOCtl.
      */
     size_t cbDataReturned;
-    rc = VbgdCommonIoCtl(op, &g_DevExt, pSession, pvBuf, len, &cbDataReturned);
+    rc = VGDrvCommonIoCtl(op, &g_DevExt, pSession, pvBuf, len, &cbDataReturned);
     if (RT_SUCCESS(rc))
     {
         rc = 0;
         if (RT_UNLIKELY(cbDataReturned > len))
         {
-            Log((DRIVER_NAME ":VBoxGuestHaikuIOCtl: too much output data %d expected %d\n", cbDataReturned, len));
+            Log(("vgdrvHaikuIOCtl: too much output data %d expected %d\n", cbDataReturned, len));
             cbDataReturned = len;
         }
         if (cbDataReturned > 0)
@@ -270,14 +250,14 @@ static status_t VBoxGuestHaikuIOCtl(void *cookie, uint32 op, void *data, size_t
             rc = user_memcpy(data, pvBuf, cbDataReturned);
             if (RT_UNLIKELY(rc < 0))
             {
-                Log((DRIVER_NAME ":VBoxGuestHaikuIOCtl: user_memcpy failed; pvBuf=%p pArg=%p Cmd=%lu. rc=%d\n", pvBuf, data, op, rc));
+                Log(("vgdrvHaikuIOCtl: user_memcpy failed; pvBuf=%p pArg=%p Cmd=%lu. rc=%d\n", pvBuf, data, op, rc));
                 rc = EFAULT;
             }
         }
     }
     else
     {
-        Log((DRIVER_NAME ":VBoxGuestHaikuIOCtl: VbgdCommonIoCtl failed. rc=%d\n", rc));
+        Log(("vgdrvHaikuIOCtl: VGDrvCommonIoCtl failed. rc=%d\n", rc));
         rc = EFAULT;
     }
     RTMemTmpFree(pvBuf);
@@ -295,7 +275,7 @@ static status_t VBoxGuestHaikuIOCtl(void *cookie, uint32 op, void *data, size_t
  *
  * @return Haiku status code.
  */
-static status_t VBoxGuestHaikuSelect(void *cookie, uint8 event, uint32 ref, selectsync *sync)
+static status_t vgdrvHaikuSelect(void *cookie, uint8 event, uint32 ref, selectsync *sync)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)cookie;
     status_t err = B_OK;
@@ -339,7 +319,7 @@ static status_t VBoxGuestHaikuSelect(void *cookie, uint8 event, uint32 ref, sele
  *
  * @return Haiku status code.
  */
-static status_t VBoxGuestHaikuDeselect(void *cookie, uint8 event, selectsync *sync)
+static status_t vgdrvHaikuDeselect(void *cookie, uint8 event, selectsync *sync)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)cookie;
     status_t err = B_OK;
@@ -371,7 +351,7 @@ static status_t VBoxGuestHaikuDeselect(void *cookie, uint8 event, selectsync *sy
  *
  * @return Haiku status code.
  */
-static status_t VBoxGuestHaikuWrite(void *cookie, off_t position, const void *data, size_t *numBytes)
+static status_t vgdrvHaikuWrite(void *cookie, off_t position, const void *data, size_t *numBytes)
 {
     *numBytes = 0;
     return B_OK;
@@ -387,7 +367,7 @@ static status_t VBoxGuestHaikuWrite(void *cookie, off_t position, const void *da
  *
  * @return Haiku status code.
  */
-static status_t VBoxGuestHaikuRead(void *cookie, off_t position, void *data, size_t *numBytes)
+static status_t vgdrvHaikuRead(void *cookie, off_t position, void *data, size_t *numBytes)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)cookie;
 
@@ -407,7 +387,6 @@ static status_t VBoxGuestHaikuRead(void *cookie, off_t position, void *data, siz
 }
 
 
-int32 api_version = B_CUR_DRIVER_API_VERSION;
 
 status_t init_hardware()
 {
@@ -419,26 +398,26 @@ status_t init_driver()
     return B_OK;
 }
 
-device_hooks* find_device(const char *name)
+device_hooks *find_device(const char *name)
 {
-    static device_hooks g_VBoxGuestHaikuDeviceHooks =
+    static device_hooks s_vgdrvHaikuDeviceHooks =
     {
-        VBoxGuestHaikuOpen,
-        VBoxGuestHaikuClose,
-        VBoxGuestHaikuFree,
-        VBoxGuestHaikuIOCtl,
-        VBoxGuestHaikuRead,
-        VBoxGuestHaikuWrite,
-        VBoxGuestHaikuSelect,
-        VBoxGuestHaikuDeselect
+        vgdrvHaikuOpen,
+        vgdrvHaikuClose,
+        vgdrvHaikuFree,
+        vgdrvHaikuIOCtl,
+        vgdrvHaikuRead,
+        vgdrvHaikuWrite,
+        vgdrvHaikuSelect,
+        vgdrvHaikuDeselect,
     };
-    return &g_VBoxGuestHaikuDeviceHooks;
+    return &s_vgdrvHaikuDeviceHooks;
 }
 
-const char** publish_devices()
+const char **publish_devices()
 {
-    static const char *devices[] = { DEVICE_NAME, NULL };
-    return devices;
+    static const char *s_papszDevices[] = { DEVICE_NAME, NULL };
+    return s_papszDevices;
 }
 
 void uninit_driver()
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-darwin.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-darwin.cpp
index d93ac16..89fc1dd 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-darwin.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-darwin.cpp
@@ -19,7 +19,7 @@
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
-#define LOG_GROUP LOG_GROUP_VBGD
+#define LOG_GROUP LOG_GROUP_VGDRV
 /*
  * Deal with conflicts first.
  * PVM - BSD mess, that FreeBSD has correct a long time ago.
@@ -70,38 +70,22 @@
 #define DEVICE_NAME_USR     "vboxguestu"
 
 
-/** PINFO() - always does printf(). */
-#define PINFO(fmt, args...) \
-    printf(fmt "\n", ## args)
-
-/** PDEBUG() - does printf() with extra debug data on DEBUG build and keep silence on a release one. */
-#if DEBUG
-# define MODULE_NAME "VBoxGuest"
-# define PDEBUG(fmt, args...) \
-  do { \
-      printf(MODULE_NAME ": DEBUG: %s:%d %s(): " fmt "\n", __FILE__, __LINE__, __FUNCTION__, ## args); \
-  } while (0)
-#else
-# define PDEBUG(fmt, args...) do {} while (0)
-#endif
-
-
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
 RT_C_DECLS_BEGIN
-static kern_return_t    VbgdDarwinStart(struct kmod_info *pKModInfo, void *pvData);
-static kern_return_t    VbgdDarwinStop(struct kmod_info *pKModInfo, void *pvData);
-static int              VbgdDarwinCharDevRemove(void);
+static kern_return_t    vgdrvDarwinStart(struct kmod_info *pKModInfo, void *pvData);
+static kern_return_t    vgdrvDarwinStop(struct kmod_info *pKModInfo, void *pvData);
+static int              vgdrvDarwinCharDevRemove(void);
 
-static int              VbgdDarwinOpen(dev_t Dev, int fFlags, int fDevType, struct proc *pProcess);
-static int              VbgdDarwinClose(dev_t Dev, int fFlags, int fDevType, struct proc *pProcess);
-static int              VbgdDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t pData, struct proc *pProcess);
-static int              VbgdDarwinIOCtl(dev_t Dev, u_long iCmd, caddr_t pData, int fFlags, struct proc *pProcess);
+static int              vgdrvDarwinOpen(dev_t Dev, int fFlags, int fDevType, struct proc *pProcess);
+static int              vgdrvDarwinClose(dev_t Dev, int fFlags, int fDevType, struct proc *pProcess);
+static int              vgdrvDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t pData, struct proc *pProcess);
+static int              vgdrvDarwinIOCtl(dev_t Dev, u_long iCmd, caddr_t pData, int fFlags, struct proc *pProcess);
 
-static int              VbgdDarwinErr2DarwinErr(int rc);
+static int              vgdrvDarwinErr2DarwinErr(int rc);
 
-static IOReturn         VbgdDarwinSleepHandler(void *pvTarget, void *pvRefCon, UInt32 uMessageType, IOService *pProvider, void *pvMessageArgument, vm_size_t argSize);
+static IOReturn         vgdrvDarwinSleepHandler(void *pvTarget, void *pvRefCon, UInt32 uMessageType, IOService *pProvider, void *pvMessageArgument, vm_size_t argSize);
 RT_C_DECLS_END
 
 
@@ -177,8 +161,8 @@ extern kern_return_t _start(struct kmod_info *pKModInfo, void *pvData);
 extern kern_return_t _stop(struct kmod_info *pKModInfo, void *pvData);
 
 KMOD_EXPLICIT_DECL(VBoxGuest, VBOX_VERSION_STRING, _start, _stop)
-DECLHIDDEN(kmod_start_func_t *) _realmain = VbgdDarwinStart;
-DECLHIDDEN(kmod_stop_func_t *)  _antimain = VbgdDarwinStop;
+DECLHIDDEN(kmod_start_func_t *) _realmain = vgdrvDarwinStart;
+DECLHIDDEN(kmod_stop_func_t *)  _antimain = vgdrvDarwinStop;
 DECLHIDDEN(int)                 _kext_apple_cc = __APPLE_CC__;
 RT_C_DECLS_END
 
@@ -193,11 +177,11 @@ static VBOXGUESTDEVEXT  g_DevExt;
  */
 static struct cdevsw    g_DevCW =
 {
-    /*.d_open     = */ VbgdDarwinOpen,
-    /*.d_close    = */ VbgdDarwinClose,
+    /*.d_open     = */ vgdrvDarwinOpen,
+    /*.d_close    = */ vgdrvDarwinClose,
     /*.d_read     = */ eno_rdwrt,
     /*.d_write    = */ eno_rdwrt,
-    /*.d_ioctl    = */ VbgdDarwinIOCtl,
+    /*.d_ioctl    = */ vgdrvDarwinIOCtl,
     /*.d_stop     = */ eno_stop,
     /*.d_reset    = */ eno_reset,
     /*.d_ttys     = */ NULL,
@@ -241,79 +225,71 @@ static uint8_t volatile     g_fWorkLoopCreated  = VBOXGUEST_OBJECT_UNINITIALIZED
 /**
  * Start the kernel module.
  */
-static kern_return_t    VbgdDarwinStart(struct kmod_info *pKModInfo, void *pvData)
+static kern_return_t    vgdrvDarwinStart(struct kmod_info *pKModInfo, void *pvData)
 {
     /*
      * Initialize IPRT.
      */
     int rc = RTR0Init(0);
-    if (RT_FAILURE(rc))
+    if (RT_SUCCESS(rc))
     {
-        PDEBUG("VBoxGuest: RTR0Init failed with rc=%d\n", rc);
-        return KMOD_RETURN_FAILURE;
+        Log(("VBoxGuest: driver loaded\n"));
+        return KMOD_RETURN_SUCCESS;
     }
 
-    PDEBUG("VBoxGuest: driver loaded\n");
-
-    return KMOD_RETURN_SUCCESS;
+    printf("VBoxGuest: RTR0Init failed with rc=%d\n", rc);
+    return KMOD_RETURN_FAILURE;
 }
 
 
-/* Register VBoxGuest char device */
-static int VbgdDarwinCharDevInit(void)
+/**
+ * Register VBoxGuest char device
+ */
+static int vgdrvDarwinCharDevInit(void)
 {
     int rc = RTSpinlockCreate(&g_Spinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "VBoxGuestDarwin");
-    if (RT_FAILURE(rc))
-    {
-        return KMOD_RETURN_FAILURE;
-    }
-
-    /*
-     * Registering ourselves as a character device.
-     */
-    g_iMajorDeviceNo = cdevsw_add(-1, &g_DevCW);
-    if (g_iMajorDeviceNo < 0)
-    {
-        VbgdDarwinCharDevRemove();
-        return KMOD_RETURN_FAILURE;
-    }
-
-    g_hDevFsDeviceSys = devfs_make_node(makedev(g_iMajorDeviceNo, 0), DEVFS_CHAR,
-                                        UID_ROOT, GID_WHEEL, 0666, DEVICE_NAME_SYS);
-    if (!g_hDevFsDeviceSys)
-    {
-        VbgdDarwinCharDevRemove();
-        return KMOD_RETURN_FAILURE;
-    }
-
-    /* Register a sleep/wakeup notification callback */
-    g_pSleepNotifier = registerPrioritySleepWakeInterest(&VbgdDarwinSleepHandler, &g_DevExt, NULL);
-    if (g_pSleepNotifier == NULL)
+    if (RT_SUCCESS(rc))
     {
-        VbgdDarwinCharDevRemove();
-        return KMOD_RETURN_FAILURE;
+        /*
+         * Registering ourselves as a character device.
+         */
+        g_iMajorDeviceNo = cdevsw_add(-1, &g_DevCW);
+        if (g_iMajorDeviceNo >= 0)
+        {
+            g_hDevFsDeviceSys = devfs_make_node(makedev(g_iMajorDeviceNo, 0), DEVFS_CHAR,
+                                                UID_ROOT, GID_WHEEL, 0666, DEVICE_NAME_SYS);
+            if (g_hDevFsDeviceSys != NULL)
+            {
+                /*
+                 * Register a sleep/wakeup notification callback.
+                 */
+                g_pSleepNotifier = registerPrioritySleepWakeInterest(&vgdrvDarwinSleepHandler, &g_DevExt, NULL);
+                if (g_pSleepNotifier != NULL)
+                {
+                    return KMOD_RETURN_SUCCESS;
+                }
+            }
+        }
+        vgdrvDarwinCharDevRemove();
     }
-
-    return KMOD_RETURN_SUCCESS;
+    return KMOD_RETURN_FAILURE;
 }
 
 
 /**
  * Stop the kernel module.
  */
-static kern_return_t VbgdDarwinStop(struct kmod_info *pKModInfo, void *pvData)
+static kern_return_t vgdrvDarwinStop(struct kmod_info *pKModInfo, void *pvData)
 {
     RTR0TermForced();
 
-    PDEBUG("VBoxGuest: driver unloaded\n");
-
+    printf("VBoxGuest: driver unloaded\n");
     return KMOD_RETURN_SUCCESS;
 }
 
 
 /* Unregister VBoxGuest char device */
-static int
-VbgdDarwinCharDevRemove(void)
+static int vgdrvDarwinCharDevRemove(void)
 {
     int rc = KMOD_RETURN_SUCCESS;
 
@@ -360,7 +336,7 @@ VbgdDarwinCharDevRemove(void)
  * @param   fDevType    ???.
  * @param   pProcess    The process issuing this request.
  */
-static int VbgdDarwinOpen(dev_t Dev, int fFlags, int fDevType, struct proc *pProcess)
+static int vgdrvDarwinOpen(dev_t Dev, int fFlags, int fDevType, struct proc *pProcess)
 {
     /*
      * Only two minor devices numbers are allowed.
@@ -411,17 +387,17 @@ static int VbgdDarwinOpen(dev_t Dev, int fFlags, int fDevType, struct proc *pPro
     else
         rc = VERR_INVALID_PARAMETER;
 
-    Log(("VbgdDarwinOpen: g_DevExt=%p pSession=%p rc=%d pid=%d\n", &g_DevExt, pSession, rc, proc_pid(pProcess)));
-    return VbgdDarwinErr2DarwinErr(rc);
+    Log(("vgdrvDarwinOpen: g_DevExt=%p pSession=%p rc=%d pid=%d\n", &g_DevExt, pSession, rc, proc_pid(pProcess)));
+    return vgdrvDarwinErr2DarwinErr(rc);
 }
 
 
 /**
  * Close device.
  */
-static int VbgdDarwinClose(dev_t Dev, int fFlags, int fDevType, struct proc *pProcess)
+static int vgdrvDarwinClose(dev_t Dev, int fFlags, int fDevType, struct proc *pProcess)
 {
-    Log(("VbgdDarwinClose: pid=%d\n", (int)RTProcSelf()));
+    Log(("vgdrvDarwinClose: pid=%d\n", (int)RTProcSelf()));
     Assert(proc_pid(pProcess) == (int)RTProcSelf());
 
     /*
@@ -442,7 +418,7 @@ static int VbgdDarwinClose(dev_t Dev, int fFlags, int fDevType, struct proc *pPr
  * @param   fFlags      Flag saying we're a character device (like we didn't know already).
  * @param   pProcess    The process issuing this request.
  */
-static int VbgdDarwinIOCtl(dev_t Dev, u_long iCmd, caddr_t pData, int fFlags, struct proc *pProcess)
+static int vgdrvDarwinIOCtl(dev_t Dev, u_long iCmd, caddr_t pData, int fFlags, struct proc *pProcess)
 {
     //const bool          fUnrestricted = minor(Dev) == 0;
     const RTPROCESS     Process = proc_pid(pProcess);
@@ -459,8 +435,7 @@ static int VbgdDarwinIOCtl(dev_t Dev, u_long iCmd, caddr_t pData, int fFlags, st
     RTSpinlockRelease(g_Spinlock);
     if (!pSession)
     {
-        Log(("VBoxDrvDarwinIOCtl: WHAT?!? pSession == NULL! This must be a mistake... pid=%d iCmd=%#lx\n",
-             (int)Process, iCmd));
+        Log(("VBoxDrvDarwinIOCtl: WHAT?!? pSession == NULL! This must be a mistake... pid=%d iCmd=%#lx\n", (int)Process, iCmd));
         return EINVAL;
     }
 
@@ -468,12 +443,12 @@ static int VbgdDarwinIOCtl(dev_t Dev, u_long iCmd, caddr_t pData, int fFlags, st
      * No high speed IOCtls here yet.
      */
 
-    return VbgdDarwinIOCtlSlow(pSession, iCmd, pData, pProcess);
+    return vgdrvDarwinIOCtlSlow(pSession, iCmd, pData, pProcess);
 }
 
 
 /**
- * Worker for VbgdDarwinIOCtl that takes the slow IOCtl functions.
+ * Worker for vgdrvDarwinIOCtl that takes the slow IOCtl functions.
  *
  * @returns Darwin errno.
  *
@@ -482,9 +457,9 @@ static int VbgdDarwinIOCtl(dev_t Dev, u_long iCmd, caddr_t pData, int fFlags, st
  * @param pData     Pointer to the kernel copy of the data buffer.
  * @param pProcess  The calling process.
  */
-static int VbgdDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t pData, struct proc *pProcess)
+static int vgdrvDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t pData, struct proc *pProcess)
 {
-    LogFlow(("VbgdDarwinIOCtlSlow: pSession=%p iCmd=%p pData=%p pProcess=%p\n", pSession, iCmd, pData, pProcess));
+    LogFlow(("vgdrvDarwinIOCtlSlow: pSession=%p iCmd=%p pData=%p pProcess=%p\n", pSession, iCmd, pData, pProcess));
 
 
     /*
@@ -511,18 +486,18 @@ static int VbgdDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t
         int rc = copyin(pUser, &Hdr, sizeof(Hdr));
         if (RT_UNLIKELY(rc))
         {
-            Log(("VbgdDarwinIOCtlSlow: copyin(%llx,Hdr,) -> %#x; iCmd=%#lx\n", (unsigned long long)pUser, rc, iCmd));
+            Log(("vgdrvDarwinIOCtlSlow: copyin(%llx,Hdr,) -> %#x; iCmd=%#lx\n", (unsigned long long)pUser, rc, iCmd));
             return rc;
         }
         if (RT_UNLIKELY(Hdr.u32Magic != VBGLBIGREQ_MAGIC))
         {
-            Log(("VbgdDarwinIOCtlSlow: bad magic u32Magic=%#x; iCmd=%#lx\n", Hdr.u32Magic, iCmd));
+            Log(("vgdrvDarwinIOCtlSlow: bad magic u32Magic=%#x; iCmd=%#lx\n", Hdr.u32Magic, iCmd));
             return EINVAL;
         }
         cbReq = Hdr.cbData;
         if (RT_UNLIKELY(cbReq > _1M*16))
         {
-            Log(("VbgdDarwinIOCtlSlow: %#x; iCmd=%#lx\n", Hdr.cbData, iCmd));
+            Log(("vgdrvDarwinIOCtlSlow: %#x; iCmd=%#lx\n", Hdr.cbData, iCmd));
             return EINVAL;
         }
         pUser = Hdr.pvDataR3;
@@ -535,13 +510,13 @@ static int VbgdDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t
             pvPageBuf = pvReqData = IOMallocAligned(RT_ALIGN_Z(cbReq, PAGE_SIZE), 8);
         if (RT_UNLIKELY(!pvReqData))
         {
-            Log(("VbgdDarwinIOCtlSlow: failed to allocate buffer of %d bytes; iCmd=%#lx\n", cbReq, iCmd));
+            Log(("vgdrvDarwinIOCtlSlow: failed to allocate buffer of %d bytes; iCmd=%#lx\n", cbReq, iCmd));
             return ENOMEM;
         }
         rc = copyin(pUser, pvReqData, Hdr.cbData);
         if (RT_UNLIKELY(rc))
         {
-            Log(("VbgdDarwinIOCtlSlow: copyin(%llx,%p,%#x) -> %#x; iCmd=%#lx\n",
+            Log(("vgdrvDarwinIOCtlSlow: copyin(%llx,%p,%#x) -> %#x; iCmd=%#lx\n",
                  (unsigned long long)pUser, pvReqData, Hdr.cbData, rc, iCmd));
             if (pvPageBuf)
                 IOFreeAligned(pvPageBuf, RT_ALIGN_Z(cbReq, PAGE_SIZE));
@@ -552,7 +527,7 @@ static int VbgdDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t
     }
     else
     {
-        Log(("VbgdDarwinIOCtlSlow: huh? cbReq=%#x iCmd=%#lx\n", cbReq, iCmd));
+        Log(("vgdrvDarwinIOCtlSlow: huh? cbReq=%#x iCmd=%#lx\n", cbReq, iCmd));
         return EINVAL;
     }
 
@@ -560,7 +535,7 @@ static int VbgdDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t
      * Process the IOCtl.
      */
     size_t cbReqRet = 0;
-    int rc = VbgdCommonIoCtl(iCmd, &g_DevExt, pSession, pvReqData, cbReq, &cbReqRet);
+    int rc = VGDrvCommonIoCtl(iCmd, &g_DevExt, pSession, pvReqData, cbReq, &cbReqRet);
     if (RT_SUCCESS(rc))
     {
         /*
@@ -570,12 +545,12 @@ static int VbgdDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t
         {
             if (cbReqRet > cbReq)
             {
-                Log(("VbgdDarwinIOCtlSlow: too much output! %#x > %#x; uCmd=%#lx!\n", cbReqRet, cbReq, iCmd));
+                Log(("vgdrvDarwinIOCtlSlow: too much output! %#x > %#x; uCmd=%#lx!\n", cbReqRet, cbReq, iCmd));
                 cbReqRet = cbReq;
             }
             rc = copyout(pvReqData, pUser, cbReqRet);
             if (RT_UNLIKELY(rc))
-                Log(("VbgdDarwinIOCtlSlow: copyout(%p,%llx,%#x) -> %d; uCmd=%#lx!\n",
+                Log(("vgdrvDarwinIOCtlSlow: copyout(%p,%llx,%#x) -> %d; uCmd=%#lx!\n",
                      pvReqData, (unsigned long long)pUser, cbReqRet, rc, iCmd));
 
             /* cleanup */
@@ -600,11 +575,11 @@ static int VbgdDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t
                 RTMemTmpFree(pvReqData);
         }
 
-        Log(("VbgdDarwinIOCtlSlow: pid=%d iCmd=%lx pData=%p failed, rc=%d\n", proc_pid(pProcess), iCmd, (void *)pData, rc));
+        Log(("vgdrvDarwinIOCtlSlow: pid=%d iCmd=%lx pData=%p failed, rc=%d\n", proc_pid(pProcess), iCmd, (void *)pData, rc));
         rc = EINVAL;
     }
 
-    Log2(("VbgdDarwinIOCtlSlow: returns %d\n", rc));
+    Log2(("vgdrvDarwinIOCtlSlow: returns %d\n", rc));
     return rc;
 }
 
@@ -617,7 +592,7 @@ static int VbgdDarwinIOCtlSlow(PVBOXGUESTSESSION pSession, u_long iCmd, caddr_t
 #include "VBoxGuestIDC-unix.c.h"
 
 
-void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
+void VGDrvNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
 {
     NOREF(pDevExt);
 }
@@ -626,9 +601,10 @@ void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
 /**
  * Callback for blah blah blah.
  */
-IOReturn VbgdDarwinSleepHandler(void * /* pvTarget */, void *pvRefCon, UInt32 uMessageType, IOService * /* pProvider */, void * /* pvMessageArgument */, vm_size_t /* argSize */)
+static IOReturn vgdrvDarwinSleepHandler(void *pvTarget, void *pvRefCon, UInt32 uMessageType,
+                                        IOService *pProvider, void *pvMsgArg, vm_size_t cbMsgArg)
 {
-    LogFlow(("VBoxGuest: Got sleep/wake notice. Message type was %X\n", (uint)uMessageType));
+    LogFlow(("VBoxGuest: Got sleep/wake notice. Message type was %x\n", uMessageType));
 
     if (uMessageType == kIOMessageSystemWillSleep)
         RTPowerSignalEvent(RTPOWEREVENT_SUSPEND);
@@ -647,7 +623,7 @@ IOReturn VbgdDarwinSleepHandler(void * /* pvTarget */, void *pvRefCon, UInt32 uM
  * @returns corresponding darwin error code.
  * @param   rc      IPRT status code.
  */
-static int VbgdDarwinErr2DarwinErr(int rc)
+static int vgdrvDarwinErr2DarwinErr(int rc)
 {
     switch (rc)
     {
@@ -674,43 +650,50 @@ static int VbgdDarwinErr2DarwinErr(int rc)
  */
 
 
-IOWorkLoop *
-org_virtualbox_VBoxGuest::getWorkLoop()
+/**
+ * Lazy initialization of the m_pWorkLoop member.
+ *
+ * @returns m_pWorkLoop.
+ */
+IOWorkLoop *org_virtualbox_VBoxGuest::getWorkLoop()
 {
-    /* Handle the case when work loop was not created yet */
-    if(ASMAtomicCmpXchgU8(&g_fWorkLoopCreated, VBOXGUEST_OBJECT_INITIALIZING, VBOXGUEST_OBJECT_UNINITIALIZED))
+/** @todo r=bird: This is actually a classic RTOnce scenario, except it's
+ *        tied to a org_virtualbox_VBoxGuest instance.  */
+    /*
+     * Handle the case when work loop was not created yet.
+     */
+    if (ASMAtomicCmpXchgU8(&g_fWorkLoopCreated, VBOXGUEST_OBJECT_INITIALIZING, VBOXGUEST_OBJECT_UNINITIALIZED))
     {
         m_pWorkLoop = IOWorkLoop::workLoop();
         if (m_pWorkLoop)
         {
             /* Notify the rest of threads about the fact that work
              * loop was successully allocated and can be safely used */
-            PDEBUG("created new work loop\n");
+            Log(("VBoxGuest: created new work loop\n"));
             ASMAtomicWriteU8(&g_fWorkLoopCreated, VBOXGUEST_OBJECT_INITIALIZED);
         }
         else
         {
             /* Notify the rest of threads about the fact that there was
              * an error during allocation of a work loop */
-            PDEBUG("unable new work loop\n");
+            Log(("VBoxGuest: failed to create new work loop!\n"));
             ASMAtomicWriteU8(&g_fWorkLoopCreated, VBOXGUEST_OBJECT_UNINITIALIZED);
         }
     }
+    /*
+     * Handle the case when work loop is already create or
+     * in the process of being.
+     */
     else
     {
-        /* Handle the case when work loop is currently being
-         * created or it was previously failed to create */
-        uint8_t fWorkLoopCreated = VBOXGUEST_OBJECT_INVALID;
-        while (fWorkLoopCreated != VBOXGUEST_OBJECT_INITIALIZED
-            && fWorkLoopCreated != VBOXGUEST_OBJECT_UNINITIALIZED)
+        uint8_t fWorkLoopCreated = ASMAtomicReadU8(&g_fWorkLoopCreated);
+        while (fWorkLoopCreated == VBOXGUEST_OBJECT_INITIALIZING)
         {
-            fWorkLoopCreated = ASMAtomicReadU8(&g_fWorkLoopCreated);
             thread_block(0);
+            fWorkLoopCreated = ASMAtomicReadU8(&g_fWorkLoopCreated);
         }
-        if (fWorkLoopCreated == VBOXGUEST_OBJECT_INITIALIZED)
-            PDEBUG("returned existing work loop");
-        else
-            PDEBUG("work loop was not allocated correctly");
+        if (fWorkLoopCreated != VBOXGUEST_OBJECT_INITIALIZED)
+            Log(("VBoxGuest: No work loop!\n"));
     }
 
     return m_pWorkLoop;
@@ -720,58 +703,55 @@ org_virtualbox_VBoxGuest::getWorkLoop()
 /**
  * Perform pending wake ups in work loop context.
  */
-static void
-deferredInterruptHandler(OSObject *pOwner, IOInterruptEventSource *pSrc, int cInts)
+static void vgdrvDarwinDeferredIrqHandler(OSObject *pOwner, IOInterruptEventSource *pSrc, int cInts)
 {
     NOREF(pOwner); NOREF(pSrc); NOREF(cInts);
 
-    VbgdCommonWaitDoWakeUps(&g_DevExt);
+    VGDrvCommonWaitDoWakeUps(&g_DevExt);
 }
 
+
 /**
  * Callback triggered when interrupt occurs.
  */
-static bool
-directInterruptHandler(OSObject *pOwner, IOFilterInterruptEventSource *pSrc)
+static bool vgdrvDarwinDirectIrqHandler(OSObject *pOwner, IOFilterInterruptEventSource *pSrc)
 {
     if (!pSrc)
         return false;
 
-    bool fTaken = VbgdCommonISR(&g_DevExt);
+    bool fTaken = VGDrvCommonISR(&g_DevExt);
     if (!fTaken) /** @todo r=bird: This looks bogus as we might actually be sharing interrupts with someone. */
-        PDEBUG("VbgdCommonISR error\n");
+        Log(("VGDrvCommonISR error\n"));
 
     return fTaken;
 }
 
-bool
-org_virtualbox_VBoxGuest::setupVmmDevInterrupts(IOService *pProvider)
+
+bool org_virtualbox_VBoxGuest::setupVmmDevInterrupts(IOService *pProvider)
 {
     IOWorkLoop *pWorkLoop = getWorkLoop();
-
     if (!pWorkLoop)
         return false;
 
     m_pInterruptSrc = IOFilterInterruptEventSource::filterInterruptEventSource(this,
-                                                                               &deferredInterruptHandler,
-                                                                               &directInterruptHandler,
+                                                                               &vgdrvDarwinDeferredIrqHandler,
+                                                                               &vgdrvDarwinDirectIrqHandler,
                                                                                pProvider);
-
-    if (kIOReturnSuccess != pWorkLoop->addEventSource(m_pInterruptSrc))
+    IOReturn rc = pWorkLoop->addEventSource(m_pInterruptSrc);
+    if (rc == kIOReturnSuccess)
     {
-        m_pInterruptSrc->disable();
-        m_pInterruptSrc->release();
-        m_pInterruptSrc = 0;
-        return false;
+        m_pInterruptSrc->enable();
+        return true;
     }
 
-    m_pInterruptSrc->enable();
-
-    return true;
+    m_pInterruptSrc->disable();
+    m_pInterruptSrc->release();
+    m_pInterruptSrc = NULL;
+    return false;
 }
 
-bool
-org_virtualbox_VBoxGuest::disableVmmDevInterrupts(void)
+
+bool org_virtualbox_VBoxGuest::disableVmmDevInterrupts(void)
 {
     IOWorkLoop *pWorkLoop = (IOWorkLoop *)getWorkLoop();
 
@@ -784,11 +764,12 @@ org_virtualbox_VBoxGuest::disableVmmDevInterrupts(void)
     m_pInterruptSrc->disable();
     pWorkLoop->removeEventSource(m_pInterruptSrc);
     m_pInterruptSrc->release();
-    m_pInterruptSrc = 0;
+    m_pInterruptSrc = NULL;
 
     return true;
 }
 
+
 bool org_virtualbox_VBoxGuest::isVmmDev(IOPCIDevice *pIOPCIDevice)
 {
     UInt16 uVendorId, uDeviceId;
@@ -811,15 +792,14 @@ bool org_virtualbox_VBoxGuest::isVmmDev(IOPCIDevice *pIOPCIDevice)
  */
 bool org_virtualbox_VBoxGuest::start(IOService *pProvider)
 {
-    if (!IOService::start(pProvider))
+    /*
+     * Low level initialization / device initialization should be performed only once.
+     */
+    if (!ASMAtomicCmpXchgBool(&g_fInstantiated, true, false))
         return false;
 
-    /* Low level initialization should be performed only once */
-    if (!ASMAtomicCmpXchgBool(&g_fInstantiated, true, false))
-    {
-        IOService::stop(pProvider);
+    if (!IOService::start(pProvider))
         return false;
-    }
 
     m_pIOPCIDevice = OSDynamicCast(IOPCIDevice, pProvider);
     if (m_pIOPCIDevice)
@@ -848,19 +828,19 @@ bool org_virtualbox_VBoxGuest::start(IOService *pProvider)
                         cbMMIO     = m_pMap->getLength();
                     }
 
-                    int rc = VbgdCommonInitDevExt(&g_DevExt,
-                                                  IOPortBase,
-                                                  pvMMIOBase,
-                                                  cbMMIO,
+                    int rc = VGDrvCommonInitDevExt(&g_DevExt,
+                                                   IOPortBase,
+                                                   pvMMIOBase,
+                                                   cbMMIO,
 #if ARCH_BITS == 64
-                                                  VBOXOSTYPE_MacOS_x64,
+                                                   VBOXOSTYPE_MacOS_x64,
 #else
-                                                  VBOXOSTYPE_MacOS,
+                                                   VBOXOSTYPE_MacOS,
 #endif
-                                                  0);
+                                                   0);
                     if (RT_SUCCESS(rc))
                     {
-                        rc = VbgdDarwinCharDevInit();
+                        rc = vgdrvDarwinCharDevInit();
                         if (rc == KMOD_RETURN_SUCCESS)
                         {
                             if (setupVmmDevInterrupts(pProvider))
@@ -872,12 +852,12 @@ bool org_virtualbox_VBoxGuest::start(IOService *pProvider)
                             }
 
                             LogRel(("VBoxGuest: Failed to set up interrupts\n"));
-                            VbgdDarwinCharDevRemove();
+                            vgdrvDarwinCharDevRemove();
                         }
                         else
                             LogRel(("VBoxGuest: Failed to initialize character device (rc=%d).\n", rc));
 
-                        VbgdCommonDeleteDevExt(&g_DevExt);
+                        VGDrvCommonDeleteDevExt(&g_DevExt);
                     }
                     else
                         LogRel(("VBoxGuest: Failed to initialize common code (rc=%d).\n", rc));
@@ -900,9 +880,7 @@ bool org_virtualbox_VBoxGuest::start(IOService *pProvider)
         LogRel(("VBoxGuest: Provider is not an instance of IOPCIDevice.\n"));
 
     ASMAtomicXchgBool(&g_fInstantiated, false);
-
     IOService::stop(pProvider);
-
     return false;
 }
 
@@ -914,16 +892,16 @@ void org_virtualbox_VBoxGuest::stop(IOService *pProvider)
 {
     /* Do not use Log*() here (in IOService instance) because its instance
      * already terminated in BSD's module unload callback! */
-    PDEBUG("org_virtualbox_VBoxGuest::stop([%p], %p)\n", this, pProvider);
+    Log(("org_virtualbox_VBoxGuest::stop([%p], %p)\n", this, pProvider));
 
     AssertReturnVoid(ASMAtomicReadBool(&g_fInstantiated));
 
     /* Low level termination should be performed only once */
     if (!disableVmmDevInterrupts())
-        PDEBUG("VBoxGuest: unable to unregister interrupt handler\n");
+        printf("VBoxGuest: unable to unregister interrupt handler\n");
 
-    VbgdDarwinCharDevRemove();
-    VbgdCommonDeleteDevExt(&g_DevExt);
+    vgdrvDarwinCharDevRemove();
+    VGDrvCommonDeleteDevExt(&g_DevExt);
 
     if (m_pMap)
     {
@@ -935,7 +913,7 @@ void org_virtualbox_VBoxGuest::stop(IOService *pProvider)
 
     ASMAtomicWriteBool(&g_fInstantiated, false);
 
-    PINFO("VBoxGuest: IOService stopped\n");
+    printf("VBoxGuest: IOService stopped\n");
 }
 
 
@@ -949,16 +927,21 @@ bool org_virtualbox_VBoxGuest::terminate(IOOptionBits fOptions)
 {
     /* Do not use Log*() here (in IOService instance) because its instance
      * already terminated in BSD's module unload callback! */
+#ifdef LOG_ENABLED
+    printf("org_virtualbox_VBoxGuest::terminate: reference_count=%d g_cSessions=%d (fOptions=%#x)\n",
+           KMOD_INFO_NAME.reference_count, ASMAtomicUoReadS32(&g_cSessions), fOptions);
+#endif
 
     bool fRc;
-    PDEBUG("org_virtualbox_VBoxGuest::terminate: reference_count=%d g_cSessions=%d (fOptions=%#x)\n",
-             KMOD_INFO_NAME.reference_count, ASMAtomicUoReadS32(&g_cSessions), fOptions);
     if (    KMOD_INFO_NAME.reference_count != 0
         ||  ASMAtomicUoReadS32(&g_cSessions))
         fRc = false;
     else
         fRc = IOService::terminate(fOptions);
-    PDEBUG("org_virtualbox_SupDrv::terminate: returns %d\n", fRc);
+
+#ifdef LOG_ENABLED
+    printf("org_virtualbox_SupDrv::terminate: returns %d\n", fRc);
+#endif
     return fRc;
 }
 
@@ -1020,7 +1003,7 @@ bool org_virtualbox_VBoxGuestClient::start(IOService *pProvider)
             /*
              * Create a new session.
              */
-            int rc = VbgdCommonCreateUserSession(&g_DevExt, &m_pSession);
+            int rc = VGDrvCommonCreateUserSession(&g_DevExt, &m_pSession);
             if (RT_SUCCESS(rc))
             {
                 m_pSession->fOpened = false;
@@ -1058,7 +1041,7 @@ bool org_virtualbox_VBoxGuestClient::start(IOService *pProvider)
                 }
 
                 LogFlow(("org_virtualbox_VBoxGuestClient::start: already got a session for this process (%p)\n", pCur));
-                VbgdCommonCloseSession(&g_DevExt, m_pSession);
+                VGDrvCommonCloseSession(&g_DevExt, m_pSession);
             }
 
             m_pSession = NULL;
@@ -1080,7 +1063,7 @@ bool org_virtualbox_VBoxGuestClient::start(IOService *pProvider)
      * Find the session and remove it from the hash table.
      *
      * Note! Only one session per process. (Both start() and
-     * VbgdDarwinOpen makes sure this is so.)
+     * vgdrvDarwinOpen makes sure this is so.)
      */
     const unsigned  iHash = SESSION_HASH(Process);
     RTSpinlockAcquire(g_Spinlock);
@@ -1134,7 +1117,7 @@ bool org_virtualbox_VBoxGuestClient::start(IOService *pProvider)
     /*
      * Close the session.
      */
-    VbgdCommonCloseSession(&g_DevExt, pSession);
+    VGDrvCommonCloseSession(&g_DevExt, pSession);
 }
 
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-freebsd.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-freebsd.c
index eb2e392..2aa8fbb 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-freebsd.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-freebsd.c
@@ -20,21 +20,27 @@
  * pci device. I.e. it should be diffable so that fixes to one can easily be
  * applied to the other. */
 
+
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <sys/param.h>
+#undef PVM
+#include <sys/types.h>
+#include <sys/module.h>
 #include <sys/systm.h>
-#include <sys/conf.h>
+#include <sys/errno.h>
 #include <sys/kernel.h>
-#include <sys/module.h>
+#include <sys/fcntl.h>
+#include <sys/conf.h>
+#include <sys/uio.h>
 #include <sys/bus.h>
 #include <sys/poll.h>
 #include <sys/selinfo.h>
 #include <sys/queue.h>
 #include <sys/lock.h>
 #include <sys/lockmgr.h>
-#include <sys/types.h>
-#include <sys/conf.h>
 #include <sys/malloc.h>
-#include <sys/uio.h>
 #include <sys/file.h>
 #include <sys/rman.h>
 #include <machine/bus.h>
@@ -42,10 +48,8 @@
 #include <dev/pci/pcivar.h>
 #include <dev/pci/pcireg.h>
 
-#ifdef PVM
-#  undef PVM
-#endif
 #include "VBoxGuestInternal.h"
+#include <VBox/version.h>
 #include <VBox/log.h>
 #include <iprt/assert.h>
 #include <iprt/initterm.h>
@@ -53,9 +57,17 @@
 #include <iprt/mem.h>
 #include <iprt/asm.h>
 
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
 /** The module name. */
-#define DEVICE_NAME    "vboxguest"
+#define DEVICE_NAME  "vboxguest"
+
 
+/*********************************************************************************************************************************
+*   Structures and Typedefs                                                                                                      *
+*********************************************************************************************************************************/
 struct VBoxGuestDeviceState
 {
     /** Resource ID of the I/O port */
@@ -84,58 +96,60 @@ struct VBoxGuestDeviceState
     uint32_t           u32Version;
 };
 
-static MALLOC_DEFINE(M_VBOXDEV, "vboxdev_pci", "VirtualBox Guest driver PCI");
 
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
 /*
  * Character device file handlers.
  */
-static d_fdopen_t VBoxGuestFreeBSDOpen;
-static d_close_t  VBoxGuestFreeBSDClose;
-static d_ioctl_t  VBoxGuestFreeBSDIOCtl;
-static d_write_t  VBoxGuestFreeBSDWrite;
-static d_read_t   VBoxGuestFreeBSDRead;
-static d_poll_t   VBoxGuestFreeBSDPoll;
+static d_fdopen_t vgdrvFreeBSDOpen;
+static d_close_t  vgdrvFreeBSDClose;
+static d_ioctl_t  vgdrvFreeBSDIOCtl;
+static d_write_t  vgdrvFreeBSDWrite;
+static d_read_t   vgdrvFreeBSDRead;
+static d_poll_t   vgdrvFreeBSDPoll;
 
 /*
  * IRQ related functions.
  */
-static void VBoxGuestFreeBSDRemoveIRQ(device_t pDevice, void *pvState);
-static int  VBoxGuestFreeBSDAddIRQ(device_t pDevice, void *pvState);
-static int  VBoxGuestFreeBSDISR(void *pvState);
+static void vgdrvFreeBSDRemoveIRQ(device_t pDevice, void *pvState);
+static int  vgdrvFreeBSDAddIRQ(device_t pDevice, void *pvState);
+static int  vgdrvFreeBSDISR(void *pvState);
 
-/*
- * Available functions for kernel drivers.
- */
-DECLVBGL(int)    VBoxGuestFreeBSDServiceCall(void *pvSession, unsigned uCmd, void *pvData, size_t cbData, size_t *pcbDataReturned);
-DECLVBGL(void *) VBoxGuestFreeBSDServiceOpen(uint32_t *pu32Version);
-DECLVBGL(int)    VBoxGuestFreeBSDServiceClose(void *pvSession);
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+static MALLOC_DEFINE(M_VBOXGUEST, "vboxguest", "VirtualBox Guest Device Driver");
 
 #ifndef D_NEEDMINOR
 # define D_NEEDMINOR 0
 #endif
 
 /*
- * Device node entry points.
+ * The /dev/vboxguest character device entry points.
  */
-static struct cdevsw    g_VBoxGuestFreeBSDChrDevSW =
+static struct cdevsw    g_vgdrvFreeBSDChrDevSW =
 {
     .d_version =        D_VERSION,
     .d_flags =          D_TRACKCLOSE | D_NEEDMINOR,
-    .d_fdopen =         VBoxGuestFreeBSDOpen,
-    .d_close =          VBoxGuestFreeBSDClose,
-    .d_ioctl =          VBoxGuestFreeBSDIOCtl,
-    .d_read =           VBoxGuestFreeBSDRead,
-    .d_write =          VBoxGuestFreeBSDWrite,
-    .d_poll =           VBoxGuestFreeBSDPoll,
-    .d_name =           DEVICE_NAME
+    .d_fdopen =         vgdrvFreeBSDOpen,
+    .d_close =          vgdrvFreeBSDClose,
+    .d_ioctl =          vgdrvFreeBSDIOCtl,
+    .d_read =           vgdrvFreeBSDRead,
+    .d_write =          vgdrvFreeBSDWrite,
+    .d_poll =           vgdrvFreeBSDPoll,
+    .d_name =           "vboxguest"
 };
 
 /** Device extention & session data association structure. */
 static VBOXGUESTDEVEXT      g_DevExt;
+
 /** List of cloned device. Managed by the kernel. */
-static struct clonedevs    *g_pVBoxGuestFreeBSDClones;
+static struct clonedevs    *g_pvgdrvFreeBSDClones;
 /** The dev_clone event handler tag. */
-static eventhandler_tag     g_VBoxGuestFreeBSDEHTag;
+static eventhandler_tag     g_vgdrvFreeBSDEHTag;
 /** Reference counter */
 static volatile uint32_t    cUsers;
 /** selinfo structure used for polling. */
@@ -144,12 +158,12 @@ static struct selinfo       g_SelInfo;
 /**
  * DEVFS event handler.
  */
-static void VBoxGuestFreeBSDClone(void *pvArg, struct ucred *pCred, char *pszName, int cchName, struct cdev **ppDev)
+static void vgdrvFreeBSDClone(void *pvArg, struct ucred *pCred, char *pszName, int cchName, struct cdev **ppDev)
 {
     int iUnit;
     int rc;
 
-    Log(("VBoxGuestFreeBSDClone: pszName=%s ppDev=%p\n", pszName, ppDev));
+    Log(("vgdrvFreeBSDClone: pszName=%s ppDev=%p\n", pszName, ppDev));
 
     /*
      * One device node per user, si_drv1 points to the session.
@@ -163,17 +177,17 @@ static void VBoxGuestFreeBSDClone(void *pvArg, struct ucred *pCred, char *pszNam
         return;
     if (iUnit >= 256)
     {
-        Log(("VBoxGuestFreeBSDClone: iUnit=%d >= 256 - rejected\n", iUnit));
+        Log(("vgdrvFreeBSDClone: iUnit=%d >= 256 - rejected\n", iUnit));
         return;
     }
 
-    Log(("VBoxGuestFreeBSDClone: pszName=%s iUnit=%d\n", pszName, iUnit));
+    Log(("vgdrvFreeBSDClone: pszName=%s iUnit=%d\n", pszName, iUnit));
 
-    rc = clone_create(&g_pVBoxGuestFreeBSDClones, &g_VBoxGuestFreeBSDChrDevSW, &iUnit, ppDev, 0);
-    Log(("VBoxGuestFreeBSDClone: clone_create -> %d; iUnit=%d\n", rc, iUnit));
+    rc = clone_create(&g_pvgdrvFreeBSDClones, &g_vgdrvFreeBSDChrDevSW, &iUnit, ppDev, 0);
+    Log(("vgdrvFreeBSDClone: clone_create -> %d; iUnit=%d\n", rc, iUnit));
     if (rc)
     {
-        *ppDev = make_dev(&g_VBoxGuestFreeBSDChrDevSW,
+        *ppDev = make_dev(&g_vgdrvFreeBSDChrDevSW,
                           iUnit,
                           UID_ROOT,
                           GID_WHEEL,
@@ -183,15 +197,15 @@ static void VBoxGuestFreeBSDClone(void *pvArg, struct ucred *pCred, char *pszNam
         {
             dev_ref(*ppDev);
             (*ppDev)->si_flags |= SI_CHEAPCLONE;
-            Log(("VBoxGuestFreeBSDClone: Created *ppDev=%p iUnit=%d si_drv1=%p si_drv2=%p\n",
+            Log(("vgdrvFreeBSDClone: Created *ppDev=%p iUnit=%d si_drv1=%p si_drv2=%p\n",
                      *ppDev, iUnit, (*ppDev)->si_drv1, (*ppDev)->si_drv2));
             (*ppDev)->si_drv1 = (*ppDev)->si_drv2 = NULL;
         }
         else
-            Log(("VBoxGuestFreeBSDClone: make_dev iUnit=%d failed\n", iUnit));
+            Log(("vgdrvFreeBSDClone: make_dev iUnit=%d failed\n", iUnit));
     }
     else
-        Log(("VBoxGuestFreeBSDClone: Existing *ppDev=%p iUnit=%d si_drv1=%p si_drv2=%p\n",
+        Log(("vgdrvFreeBSDClone: Existing *ppDev=%p iUnit=%d si_drv1=%p si_drv2=%p\n",
              *ppDev, iUnit, (*ppDev)->si_drv1, (*ppDev)->si_drv2));
 }
 
@@ -200,15 +214,15 @@ static void VBoxGuestFreeBSDClone(void *pvArg, struct ucred *pCred, char *pszNam
  *
  */
 #if __FreeBSD_version >= 700000
-static int VBoxGuestFreeBSDOpen(struct cdev *pDev, int fOpen, struct thread *pTd, struct file *pFd)
+static int vgdrvFreeBSDOpen(struct cdev *pDev, int fOpen, struct thread *pTd, struct file *pFd)
 #else
-static int VBoxGuestFreeBSDOpen(struct cdev *pDev, int fOpen, struct thread *pTd)
+static int vgdrvFreeBSDOpen(struct cdev *pDev, int fOpen, struct thread *pTd)
 #endif
 {
     int                 rc;
     PVBOXGUESTSESSION   pSession;
 
-    LogFlow((DEVICE_NAME ":VBoxGuestFreeBSDOpen\n"));
+    LogFlow(("vgdrvFreeBSDOpen:\n"));
 
     /*
      * Try grab it (we don't grab the giant, remember).
@@ -219,20 +233,20 @@ static int VBoxGuestFreeBSDOpen(struct cdev *pDev, int fOpen, struct thread *pTd
     /*
      * Create a new session.
      */
-    rc = VbgdCommonCreateUserSession(&g_DevExt, &pSession);
+    rc = VGDrvCommonCreateUserSession(&g_DevExt, &pSession);
     if (RT_SUCCESS(rc))
     {
         if (ASMAtomicCmpXchgPtr(&pDev->si_drv1, pSession, (void *)0x42))
         {
-            Log((DEVICE_NAME ":VBoxGuestFreeBSDOpen success: g_DevExt=%p pSession=%p rc=%d pid=%d\n", &g_DevExt, pSession, rc, (int)RTProcSelf()));
+            Log(("vgdrvFreeBSDOpen: success - g_DevExt=%p pSession=%p rc=%d pid=%d\n", &g_DevExt, pSession, rc, (int)RTProcSelf()));
             ASMAtomicIncU32(&cUsers);
             return 0;
         }
 
-        VbgdCommonCloseSession(&g_DevExt, pSession);
+        VGDrvCommonCloseSession(&g_DevExt, pSession);
     }
 
-    LogRel((DEVICE_NAME ":VBoxGuestFreeBSDOpen: failed. rc=%d\n", rc));
+    LogRel(("vgdrvFreeBSDOpen: failed. rc=%d\n", rc));
     return RTErrConvertToErrno(rc);
 }
 
@@ -240,25 +254,25 @@ static int VBoxGuestFreeBSDOpen(struct cdev *pDev, int fOpen, struct thread *pTd
  * File close handler
  *
  */
-static int VBoxGuestFreeBSDClose(struct cdev *pDev, int fFile, int DevType, struct thread *pTd)
+static int vgdrvFreeBSDClose(struct cdev *pDev, int fFile, int DevType, struct thread *pTd)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)pDev->si_drv1;
-    Log(("VBoxGuestFreeBSDClose: fFile=%#x pSession=%p\n", fFile, pSession));
+    Log(("vgdrvFreeBSDClose: fFile=%#x pSession=%p\n", fFile, pSession));
 
     /*
      * Close the session if it's still hanging on to the device...
      */
     if (VALID_PTR(pSession))
     {
-        VbgdCommonCloseSession(&g_DevExt, pSession);
+        VGDrvCommonCloseSession(&g_DevExt, pSession);
         if (!ASMAtomicCmpXchgPtr(&pDev->si_drv1, NULL, pSession))
-            Log(("VBoxGuestFreeBSDClose: si_drv1=%p expected %p!\n", pDev->si_drv1, pSession));
+            Log(("vgdrvFreeBSDClose: si_drv1=%p expected %p!\n", pDev->si_drv1, pSession));
         ASMAtomicDecU32(&cUsers);
         /* Don't use destroy_dev here because it may sleep resulting in a hanging user process. */
         destroy_dev_sched(pDev);
     }
     else
-        Log(("VBoxGuestFreeBSDClose: si_drv1=%p!\n", pSession));
+        Log(("vgdrvFreeBSDClose: si_drv1=%p!\n", pSession));
     return 0;
 }
 
@@ -266,9 +280,9 @@ static int VBoxGuestFreeBSDClose(struct cdev *pDev, int fFile, int DevType, stru
  * IOCTL handler
  *
  */
-static int VBoxGuestFreeBSDIOCtl(struct cdev *pDev, u_long ulCmd, caddr_t pvData, int fFile, struct thread *pTd)
+static int vgdrvFreeBSDIOCtl(struct cdev *pDev, u_long ulCmd, caddr_t pvData, int fFile, struct thread *pTd)
 {
-    LogFlow((DEVICE_NAME ":VBoxGuestFreeBSDIOCtl\n"));
+    LogFlow(("vgdrvFreeBSDIOCtl\n"));
 
     int rc = 0;
 
@@ -284,20 +298,20 @@ static int VBoxGuestFreeBSDIOCtl(struct cdev *pDev, u_long ulCmd, caddr_t pvData
      */
     if (IOCPARM_LEN(ulCmd) != sizeof(VBGLBIGREQ))
     {
-        Log((DEVICE_NAME ": VBoxGuestFreeBSDIOCtl: bad request %lu size=%lu expected=%d\n", ulCmd, IOCPARM_LEN(ulCmd), sizeof(VBGLBIGREQ)));
+        Log(("vgdrvFreeBSDIOCtl: bad request %lu size=%lu expected=%d\n", ulCmd, IOCPARM_LEN(ulCmd), sizeof(VBGLBIGREQ)));
         return ENOTTY;
     }
 
     PVBGLBIGREQ ReqWrap = (PVBGLBIGREQ)pvData;
     if (ReqWrap->u32Magic != VBGLBIGREQ_MAGIC)
     {
-        Log((DEVICE_NAME ": VBoxGuestFreeBSDIOCtl: bad magic %#x; pArg=%p Cmd=%lu.\n", ReqWrap->u32Magic, pvData, ulCmd));
+        Log(("vgdrvFreeBSDIOCtl: bad magic %#x; pArg=%p Cmd=%lu.\n", ReqWrap->u32Magic, pvData, ulCmd));
         return EINVAL;
     }
     if (RT_UNLIKELY(   ReqWrap->cbData == 0
                     || ReqWrap->cbData > _1M*16))
     {
-        printf(DEVICE_NAME ": VBoxGuestFreeBSDIOCtl: bad size %#x; pArg=%p Cmd=%lu.\n", ReqWrap->cbData, pvData, ulCmd);
+        printf("vgdrvFreeBSDIOCtl: bad size %#x; pArg=%p Cmd=%lu.\n", ReqWrap->cbData, pvData, ulCmd);
         return EINVAL;
     }
 
@@ -307,7 +321,7 @@ static int VBoxGuestFreeBSDIOCtl(struct cdev *pDev, u_long ulCmd, caddr_t pvData
     void *pvBuf = RTMemTmpAlloc(ReqWrap->cbData);
     if (RT_UNLIKELY(!pvBuf))
     {
-        Log((DEVICE_NAME ":VBoxGuestFreeBSDIOCtl: RTMemTmpAlloc failed to alloc %d bytes.\n", ReqWrap->cbData));
+        Log(("vgdrvFreeBSDIOCtl: RTMemTmpAlloc failed to alloc %d bytes.\n", ReqWrap->cbData));
         return ENOMEM;
     }
 
@@ -315,29 +329,29 @@ static int VBoxGuestFreeBSDIOCtl(struct cdev *pDev, u_long ulCmd, caddr_t pvData
     if (RT_UNLIKELY(rc))
     {
         RTMemTmpFree(pvBuf);
-        Log((DEVICE_NAME ":VBoxGuestFreeBSDIOCtl: copyin failed; pvBuf=%p pArg=%p Cmd=%lu. rc=%d\n", pvBuf, pvData, ulCmd, rc));
+        Log(("vgdrvFreeBSDIOCtl: copyin failed; pvBuf=%p pArg=%p Cmd=%lu. rc=%d\n", pvBuf, pvData, ulCmd, rc));
         return EFAULT;
     }
     if (RT_UNLIKELY(   ReqWrap->cbData != 0
                     && !VALID_PTR(pvBuf)))
     {
         RTMemTmpFree(pvBuf);
-        Log((DEVICE_NAME ":VBoxGuestFreeBSDIOCtl: pvBuf invalid pointer %p\n", pvBuf));
+        Log(("vgdrvFreeBSDIOCtl: pvBuf invalid pointer %p\n", pvBuf));
         return EINVAL;
     }
-    Log((DEVICE_NAME ":VBoxGuestFreeBSDIOCtl: pSession=%p pid=%d.\n", pSession, (int)RTProcSelf()));
+    Log(("vgdrvFreeBSDIOCtl: pSession=%p pid=%d.\n", pSession, (int)RTProcSelf()));
 
     /*
      * Process the IOCtl.
      */
     size_t cbDataReturned;
-    rc = VbgdCommonIoCtl(ulCmd, &g_DevExt, pSession, pvBuf, ReqWrap->cbData, &cbDataReturned);
+    rc = VGDrvCommonIoCtl(ulCmd, &g_DevExt, pSession, pvBuf, ReqWrap->cbData, &cbDataReturned);
     if (RT_SUCCESS(rc))
     {
         rc = 0;
         if (RT_UNLIKELY(cbDataReturned > ReqWrap->cbData))
         {
-            Log((DEVICE_NAME ":VBoxGuestFreeBSDIOCtl: too much output data %d expected %d\n", cbDataReturned, ReqWrap->cbData));
+            Log(("vgdrvFreeBSDIOCtl: too much output data %d expected %d\n", cbDataReturned, ReqWrap->cbData));
             cbDataReturned = ReqWrap->cbData;
         }
         if (cbDataReturned > 0)
@@ -345,29 +359,29 @@ static int VBoxGuestFreeBSDIOCtl(struct cdev *pDev, u_long ulCmd, caddr_t pvData
             rc = copyout(pvBuf, (void *)(uintptr_t)ReqWrap->pvDataR3, cbDataReturned);
             if (RT_UNLIKELY(rc))
             {
-                Log((DEVICE_NAME ":VBoxGuestFreeBSDIOCtl: copyout failed; pvBuf=%p pArg=%p Cmd=%lu. rc=%d\n", pvBuf, pvData, ulCmd, rc));
+                Log(("vgdrvFreeBSDIOCtl: copyout failed; pvBuf=%p pArg=%p Cmd=%lu. rc=%d\n", pvBuf, pvData, ulCmd, rc));
                 rc = EFAULT;
             }
         }
     }
     else
     {
-        Log((DEVICE_NAME ":VBoxGuestFreeBSDIOCtl: VbgdCommonIoCtl failed. rc=%d\n", rc));
+        Log(("vgdrvFreeBSDIOCtl: VGDrvCommonIoCtl failed. rc=%d\n", rc));
         rc = EFAULT;
     }
     RTMemTmpFree(pvBuf);
     return rc;
 }
 
-static int VBoxGuestFreeBSDPoll (struct cdev *pDev, int fEvents, struct thread *td)
+static int vgdrvFreeBSDPoll(struct cdev *pDev, int fEvents, struct thread *td)
 {
     int fEventsProcessed;
 
-    LogFlow((DEVICE_NAME "::Poll: fEvents=%d\n", fEvents));
+    LogFlow(("vgdrvFreeBSDPoll: fEvents=%d\n", fEvents));
 
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)pDev->si_drv1;
     if (RT_UNLIKELY(!VALID_PTR(pSession))) {
-        Log((DEVICE_NAME "::Poll: no state data for %s\n", devtoname(pDev)));
+        Log(("vgdrvFreeBSDPoll: no state data for %s\n", devtoname(pDev)));
         return (fEvents & (POLLHUP|POLLIN|POLLRDNORM|POLLOUT|POLLWRNORM));
     }
 
@@ -387,17 +401,17 @@ static int VBoxGuestFreeBSDPoll (struct cdev *pDev, int fEvents, struct thread *
     return fEventsProcessed;
 }
 
-static int VBoxGuestFreeBSDWrite (struct cdev *pDev, struct uio *pUio, int fIo)
+static int vgdrvFreeBSDWrite(struct cdev *pDev, struct uio *pUio, int fIo)
 {
     return 0;
 }
 
-static int VBoxGuestFreeBSDRead (struct cdev *pDev, struct uio *pUio, int fIo)
+static int vgdrvFreeBSDRead(struct cdev *pDev, struct uio *pUio, int fIo)
 {
     return 0;
 }
 
-static int VBoxGuestFreeBSDDetach(device_t pDevice)
+static int vgdrvFreeBSDDetach(device_t pDevice)
 {
     struct VBoxGuestDeviceState *pState = device_get_softc(pDevice);
 
@@ -405,21 +419,21 @@ static int VBoxGuestFreeBSDDetach(device_t pDevice)
         return EBUSY;
 
     /*
-     * Reverse what we did in VBoxGuestFreeBSDAttach.
+     * Reverse what we did in vgdrvFreeBSDAttach.
      */
-    if (g_VBoxGuestFreeBSDEHTag != NULL)
-        EVENTHANDLER_DEREGISTER(dev_clone, g_VBoxGuestFreeBSDEHTag);
+    if (g_vgdrvFreeBSDEHTag != NULL)
+        EVENTHANDLER_DEREGISTER(dev_clone, g_vgdrvFreeBSDEHTag);
 
-    clone_cleanup(&g_pVBoxGuestFreeBSDClones);
+    clone_cleanup(&g_pvgdrvFreeBSDClones);
 
-    VBoxGuestFreeBSDRemoveIRQ(pDevice, pState);
+    vgdrvFreeBSDRemoveIRQ(pDevice, pState);
 
     if (pState->pVMMDevMemRes)
         bus_release_resource(pDevice, SYS_RES_MEMORY, pState->iVMMDevMemResId, pState->pVMMDevMemRes);
     if (pState->pIOPortRes)
         bus_release_resource(pDevice, SYS_RES_IOPORT, pState->iIOPortResId, pState->pIOPortRes);
 
-    VbgdCommonDeleteDevExt(&g_DevExt);
+    VGDrvCommonDeleteDevExt(&g_DevExt);
 
     RTR0Term();
 
@@ -432,18 +446,18 @@ static int VBoxGuestFreeBSDDetach(device_t pDevice)
  * @returns Whether the interrupt was from VMMDev.
  * @param   pvState Opaque pointer to the device state.
  */
-static int VBoxGuestFreeBSDISR(void *pvState)
+static int vgdrvFreeBSDISR(void *pvState)
 {
-    LogFlow((DEVICE_NAME ":VBoxGuestFreeBSDISR pvState=%p\n", pvState));
+    LogFlow(("vgdrvFreeBSDISR: pvState=%p\n", pvState));
 
-    bool fOurIRQ = VbgdCommonISR(&g_DevExt);
+    bool fOurIRQ = VGDrvCommonISR(&g_DevExt);
 
     return fOurIRQ ? 0 : 1;
 }
 
-void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
+void VGDrvNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
 {
-    LogFlow((DEVICE_NAME "::NativeISRMousePollEvent:\n"));
+    LogFlow(("VGDrvNativeISRMousePollEvent:\n"));
 
     /*
      * Wake up poll waiters.
@@ -458,7 +472,7 @@ void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
  * @param   pDevice  Pointer to the device info structure.
  * @param   pvState  Pointer to the state info structure.
  */
-static int VBoxGuestFreeBSDAddIRQ(device_t pDevice, void *pvState)
+static int vgdrvFreeBSDAddIRQ(device_t pDevice, void *pvState)
 {
     int iResId = 0;
     int rc = 0;
@@ -467,10 +481,10 @@ static int VBoxGuestFreeBSDAddIRQ(device_t pDevice, void *pvState)
     pState->pIrqRes = bus_alloc_resource_any(pDevice, SYS_RES_IRQ, &iResId, RF_SHAREABLE | RF_ACTIVE);
 
 #if __FreeBSD_version >= 700000
-    rc = bus_setup_intr(pDevice, pState->pIrqRes, INTR_TYPE_BIO | INTR_MPSAFE, NULL, (driver_intr_t *)VBoxGuestFreeBSDISR, pState,
+    rc = bus_setup_intr(pDevice, pState->pIrqRes, INTR_TYPE_BIO | INTR_MPSAFE, NULL, (driver_intr_t *)vgdrvFreeBSDISR, pState,
                         &pState->pfnIrqHandler);
 #else
-    rc = bus_setup_intr(pDevice, pState->pIrqRes, INTR_TYPE_BIO, (driver_intr_t *)VBoxGuestFreeBSDISR, pState, &pState->pfnIrqHandler);
+    rc = bus_setup_intr(pDevice, pState->pIrqRes, INTR_TYPE_BIO, (driver_intr_t *)vgdrvFreeBSDISR, pState, &pState->pfnIrqHandler);
 #endif
 
     if (rc)
@@ -490,7 +504,7 @@ static int VBoxGuestFreeBSDAddIRQ(device_t pDevice, void *pvState)
  * @param   pDevice  Pointer to the device info structure.
  * @param   pvState  Opaque pointer to the state info structure.
  */
-static void VBoxGuestFreeBSDRemoveIRQ(device_t pDevice, void *pvState)
+static void vgdrvFreeBSDRemoveIRQ(device_t pDevice, void *pvState)
 {
     struct VBoxGuestDeviceState *pState = (struct VBoxGuestDeviceState *)pvState;
 
@@ -501,11 +515,11 @@ static void VBoxGuestFreeBSDRemoveIRQ(device_t pDevice, void *pvState)
     }
 }
 
-static int VBoxGuestFreeBSDAttach(device_t pDevice)
+static int vgdrvFreeBSDAttach(device_t pDevice)
 {
-    int rc = VINF_SUCCESS;
-    int iResId = 0;
-    struct VBoxGuestDeviceState *pState = NULL;
+    int rc;
+    int iResId;
+    struct VBoxGuestDeviceState *pState;
 
     cUsers = 0;
 
@@ -538,62 +552,62 @@ static int VBoxGuestFreeBSDAttach(device_t pDevice)
         pState->VMMDevMemHandle  = rman_get_bushandle(pState->pVMMDevMemRes);
         pState->VMMDevMemSize    = rman_get_size(pState->pVMMDevMemRes);
 
-        pState->pMMIOBase       = rman_get_virtual(pState->pVMMDevMemRes);
-        pState->iVMMDevMemResId = iResId;
+        pState->pMMIOBase        = rman_get_virtual(pState->pVMMDevMemRes);
+        pState->iVMMDevMemResId  = iResId;
         if (pState->pMMIOBase)
         {
             /*
              * Call the common device extension initializer.
              */
-            rc = VbgdCommonInitDevExt(&g_DevExt, pState->uIOPortBase,
-                                      pState->pMMIOBase, pState->VMMDevMemSize,
+            rc = VGDrvCommonInitDevExt(&g_DevExt, pState->uIOPortBase,
+                                       pState->pMMIOBase, pState->VMMDevMemSize,
 #if ARCH_BITS == 64
-                                      VBOXOSTYPE_FreeBSD_x64,
+                                       VBOXOSTYPE_FreeBSD_x64,
 #else
-                                      VBOXOSTYPE_FreeBSD,
+                                       VBOXOSTYPE_FreeBSD,
 #endif
-                                      VMMDEV_EVENT_MOUSE_POSITION_CHANGED);
+                                       VMMDEV_EVENT_MOUSE_POSITION_CHANGED);
             if (RT_SUCCESS(rc))
             {
                 /*
                  * Add IRQ of VMMDev.
                  */
-                rc = VBoxGuestFreeBSDAddIRQ(pDevice, pState);
+                rc = vgdrvFreeBSDAddIRQ(pDevice, pState);
                 if (RT_SUCCESS(rc))
                 {
                     /*
                      * Configure device cloning.
                      */
-                    clone_setup(&g_pVBoxGuestFreeBSDClones);
-                    g_VBoxGuestFreeBSDEHTag = EVENTHANDLER_REGISTER(dev_clone, VBoxGuestFreeBSDClone, 0, 1000);
-                    if (g_VBoxGuestFreeBSDEHTag)
+                    clone_setup(&g_pvgdrvFreeBSDClones);
+                    g_vgdrvFreeBSDEHTag = EVENTHANDLER_REGISTER(dev_clone, vgdrvFreeBSDClone, 0, 1000);
+                    if (g_vgdrvFreeBSDEHTag)
                     {
                         printf(DEVICE_NAME ": loaded successfully\n");
                         return 0;
                     }
 
                     printf(DEVICE_NAME ": EVENTHANDLER_REGISTER(dev_clone,,,) failed\n");
-                    clone_cleanup(&g_pVBoxGuestFreeBSDClones);
-                    VBoxGuestFreeBSDRemoveIRQ(pDevice, pState);
+                    clone_cleanup(&g_pvgdrvFreeBSDClones);
+                    vgdrvFreeBSDRemoveIRQ(pDevice, pState);
                 }
                 else
-                    printf((DEVICE_NAME ":VbgdCommonInitDevExt failed.\n"));
-                VbgdCommonDeleteDevExt(&g_DevExt);
+                    printf((DEVICE_NAME ": VGDrvCommonInitDevExt failed.\n"));
+                VGDrvCommonDeleteDevExt(&g_DevExt);
             }
             else
-                printf((DEVICE_NAME ":VBoxGuestFreeBSDAddIRQ failed.\n"));
+                printf((DEVICE_NAME ": vgdrvFreeBSDAddIRQ failed.\n"));
         }
         else
-            printf((DEVICE_NAME ":MMIO region setup failed.\n"));
+            printf((DEVICE_NAME ": MMIO region setup failed.\n"));
     }
     else
-        printf((DEVICE_NAME ":IOport setup failed.\n"));
+        printf((DEVICE_NAME ": IOport setup failed.\n"));
 
     RTR0Term();
     return ENXIO;
 }
 
-static int VBoxGuestFreeBSDProbe(device_t pDevice)
+static int vgdrvFreeBSDProbe(device_t pDevice)
 {
     if ((pci_get_vendor(pDevice) == VMMDEV_VENDORID) && (pci_get_device(pDevice) == VMMDEV_DEVICEID))
         return 0;
@@ -601,25 +615,25 @@ static int VBoxGuestFreeBSDProbe(device_t pDevice)
     return ENXIO;
 }
 
-static device_method_t VBoxGuestFreeBSDMethods[] =
+static device_method_t vgdrvFreeBSDMethods[] =
 {
     /* Device interface. */
-    DEVMETHOD(device_probe,  VBoxGuestFreeBSDProbe),
-    DEVMETHOD(device_attach, VBoxGuestFreeBSDAttach),
-    DEVMETHOD(device_detach, VBoxGuestFreeBSDDetach),
+    DEVMETHOD(device_probe,  vgdrvFreeBSDProbe),
+    DEVMETHOD(device_attach, vgdrvFreeBSDAttach),
+    DEVMETHOD(device_detach, vgdrvFreeBSDDetach),
     {0,0}
 };
 
-static driver_t VBoxGuestFreeBSDDriver =
+static driver_t vgdrvFreeBSDDriver =
 {
     DEVICE_NAME,
-    VBoxGuestFreeBSDMethods,
+    vgdrvFreeBSDMethods,
     sizeof(struct VBoxGuestDeviceState),
 };
 
-static devclass_t VBoxGuestFreeBSDClass;
+static devclass_t vgdrvFreeBSDClass;
 
-DRIVER_MODULE(vboxguest, pci, VBoxGuestFreeBSDDriver, VBoxGuestFreeBSDClass, 0, 0);
+DRIVER_MODULE(vboxguest, pci, vgdrvFreeBSDDriver, vgdrvFreeBSDClass, 0, 0);
 MODULE_VERSION(vboxguest, 1);
 
 /* Common code that depend on g_DevExt. */
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku-stubs.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku-stubs.c
index 4f48aa8..c6b123a 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku-stubs.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku-stubs.c
@@ -346,17 +346,17 @@ RTDECL(int) RTErrConvertToErrno(int iErr)
 {
     return g_VBoxGuest->_RTErrConvertToErrno(iErr);
 }
-int VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, void *pvData, size_t cbData, size_t *pcbDataReturned)
+int VGDrvCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, void *pvData, size_t cbData, size_t *pcbDataReturned)
 {
-    return g_VBoxGuest->_VbgdCommonIoCtl(iFunction, pDevExt, pSession, pvData, cbData, pcbDataReturned);
+    return g_VBoxGuest->_VGDrvCommonIoCtl(iFunction, pDevExt, pSession, pvData, cbData, pcbDataReturned);
 }
-int VbgdCommonCreateUserSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession)
+int VGDrvCommonCreateUserSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession)
 {
-    return g_VBoxGuest->_VbgdCommonCreateUserSession(pDevExt, ppSession);
+    return g_VBoxGuest->_VGDrvCommonCreateUserSession(pDevExt, ppSession);
 }
-void VbgdCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
+void VGDrvCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
 {
-    g_VBoxGuest->_VbgdCommonCloseSession(pDevExt, pSession);
+    g_VBoxGuest->_VGDrvCommonCloseSession(pDevExt, pSession);
 }
 void* VBoxGuestIDCOpen(uint32_t *pu32Version)
 {
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.c
index f7ee2a1..a6ceb70 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.c
@@ -69,25 +69,27 @@
 #include <iprt/timer.h>
 #include <iprt/heap.h>
 
+
+/*********************************************************************************************************************************
+*   Defined Constants And Macros                                                                                                 *
+*********************************************************************************************************************************/
 #define MODULE_NAME VBOXGUEST_MODULE_NAME
 
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
 /*
  * IRQ related functions.
  */
-static void  VBoxGuestHaikuRemoveIRQ(void *pvState);
-static int   VBoxGuestHaikuAddIRQ(void *pvState);
-static int32 VBoxGuestHaikuISR(void *pvState);
+static void  vgdrvHaikuRemoveIRQ(void *pvState);
+static int   vgdrvHaikuAddIRQ(void *pvState);
+static int32 vgdrvHaikuISR(void *pvState);
 
-/*
- * Available functions for kernel drivers.
- */
-DECLVBGL(int)    VBoxGuestHaikuServiceCall(void *pvSession, unsigned uCmd, void *pvData, size_t cbData, size_t *pcbDataReturned);
-DECLVBGL(void *) VBoxGuestHaikuServiceOpen(uint32_t *pu32Version);
-DECLVBGL(int)    VBoxGuestHaikuServiceClose(void *pvSession);
-DECLVBGL(void *) VBoxGuestIDCOpen(uint32_t *pu32Version);
-DECLVBGL(int)    VBoxGuestIDCClose(void *pvSession);
-DECLVBGL(int)    VBoxGuestIDCCall(void *pvSession, unsigned iCmd, void *pvData, size_t cbData, size_t *pcbDataReturned);
 
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
 static status_t std_ops(int32 op, ...);
 
 static RTSPINLOCK g_Spinlock = NIL_RTSPINLOCK;
@@ -95,9 +97,9 @@ static RTSPINLOCK g_Spinlock = NIL_RTSPINLOCK;
 int32    api_version = B_CUR_DRIVER_API_VERSION;
 
 /** List of cloned device. Managed by the kernel. */
-//static struct clonedevs    *g_pVBoxGuestHaikuClones;
+//static struct clonedevs    *g_pvgdrvHaikuClones;
 /** The dev_clone event handler tag. */
-//static eventhandler_tag     g_VBoxGuestHaikuEHTag;
+//static eventhandler_tag     g_vgdrvHaikuEHTag;
 /** selinfo structure used for polling. */
 //static struct selinfo       g_SelInfo;
 /** PCI Bus Manager Module */
@@ -181,9 +183,9 @@ static struct vboxguest_module_info g_VBoxGuest =
     RTLogRelGetDefaultInstance,
     RTLogRelGetDefaultInstanceEx,
     RTErrConvertToErrno,
-    VbgdCommonIoCtl,
-    VbgdCommonCreateUserSession,
-    VbgdCommonCloseSession,
+    VGDrvCommonIoCtl,
+    VGDrvCommonCreateUserSession,
+    VGDrvCommonCloseSession,
     VBoxGuestIDCOpen,
     VBoxGuestIDCClose,
     VBoxGuestIDCCall,
@@ -212,12 +214,12 @@ static struct vboxguest_module_info g_VBoxGuest =
 /**
  * DEVFS event handler.
  */
-static void VBoxGuestHaikuClone(void *pvArg, struct ucred *pCred, char *pszName, int cchName, struct cdev **ppDev)
+static void vgdrvHaikuClone(void *pvArg, struct ucred *pCred, char *pszName, int cchName, struct cdev **ppDev)
 {
     int iUnit;
     int rc;
 
-    Log(("VBoxGuestHaikuClone: pszName=%s ppDev=%p\n", pszName, ppDev));
+    Log(("vgdrvHaikuClone: pszName=%s ppDev=%p\n", pszName, ppDev));
 
     /*
      * One device node per user, si_drv1 points to the session.
@@ -231,17 +233,17 @@ static void VBoxGuestHaikuClone(void *pvArg, struct ucred *pCred, char *pszName,
     return;
     if (iUnit >= 256)
     {
-        Log(("VBoxGuestHaikuClone: iUnit=%d >= 256 - rejected\n", iUnit));
+        Log(("vgdrvHaikuClone: iUnit=%d >= 256 - rejected\n", iUnit));
         return;
     }
 
-    Log(("VBoxGuestHaikuClone: pszName=%s iUnit=%d\n", pszName, iUnit));
+    Log(("vgdrvHaikuClone: pszName=%s iUnit=%d\n", pszName, iUnit));
 
-    rc = clone_create(&g_pVBoxGuestHaikuClones, &g_VBoxGuestHaikuDeviceHooks, &iUnit, ppDev, 0);
-    Log(("VBoxGuestHaikuClone: clone_create -> %d; iUnit=%d\n", rc, iUnit));
+    rc = clone_create(&g_pvgdrvHaikuClones, &g_vgdrvHaikuDeviceHooks, &iUnit, ppDev, 0);
+    Log(("vgdrvHaikuClone: clone_create -> %d; iUnit=%d\n", rc, iUnit));
     if (rc)
     {
-        *ppDev = make_dev(&g_VBoxGuestHaikuDeviceHooks,
+        *ppDev = make_dev(&g_vgdrvHaikuDeviceHooks,
                           iUnit,
                           UID_ROOT,
                           GID_WHEEL,
@@ -251,21 +253,21 @@ static void VBoxGuestHaikuClone(void *pvArg, struct ucred *pCred, char *pszName,
         {
             dev_ref(*ppDev);
             (*ppDev)->si_flags |= SI_CHEAPCLONE;
-            Log(("VBoxGuestHaikuClone: Created *ppDev=%p iUnit=%d si_drv1=%p si_drv2=%p\n",
+            Log(("vgdrvHaikuClone: Created *ppDev=%p iUnit=%d si_drv1=%p si_drv2=%p\n",
                  *ppDev, iUnit, (*ppDev)->si_drv1, (*ppDev)->si_drv2));
             (*ppDev)->si_drv1 = (*ppDev)->si_drv2 = NULL;
         }
         else
-        Log(("VBoxGuestHaikuClone: make_dev iUnit=%d failed\n", iUnit));
+        Log(("vgdrvHaikuClone: make_dev iUnit=%d failed\n", iUnit));
     }
     else
-    Log(("VBoxGuestHaikuClone: Existing *ppDev=%p iUnit=%d si_drv1=%p si_drv2=%p\n",
+    Log(("vgdrvHaikuClone: Existing *ppDev=%p iUnit=%d si_drv1=%p si_drv2=%p\n",
          *ppDev, iUnit, (*ppDev)->si_drv1, (*ppDev)->si_drv2));
 }
 #endif
 
 
-static status_t VBoxGuestHaikuDetach(void)
+static status_t vgdrvHaikuDetach(void)
 {
     struct VBoxGuestDeviceState *pState = &sState;
 
@@ -273,14 +275,14 @@ static status_t VBoxGuestHaikuDetach(void)
         return EBUSY;
 
     /*
-     * Reverse what we did in VBoxGuestHaikuAttach.
+     * Reverse what we did in vgdrvHaikuAttach.
      */
-    VBoxGuestHaikuRemoveIRQ(pState);
+    vgdrvHaikuRemoveIRQ(pState);
 
     if (pState->iVMMDevMemAreaId)
         delete_area(pState->iVMMDevMemAreaId);
 
-    VbgdCommonDeleteDevExt(&g_DevExt);
+    VGDrvCommonDeleteDevExt(&g_DevExt);
 
 #ifdef DO_LOG
     RTLogDestroy(RTLogRelSetDefaultInstance(NULL));
@@ -302,20 +304,20 @@ static status_t VBoxGuestHaikuDetach(void)
  * @returns Whether the interrupt was from VMMDev.
  * @param   pvState Opaque pointer to the device state.
  */
-static int32 VBoxGuestHaikuISR(void *pvState)
+static int32 vgdrvHaikuISR(void *pvState)
 {
-    LogFlow((MODULE_NAME ":VBoxGuestHaikuISR pvState=%p\n", pvState));
+    LogFlow((MODULE_NAME ":vgdrvHaikuISR pvState=%p\n", pvState));
 
-    bool fOurIRQ = VbgdCommonISR(&g_DevExt);
+    bool fOurIRQ = VGDrvCommonISR(&g_DevExt);
     if (fOurIRQ)
         return B_HANDLED_INTERRUPT;
     return B_UNHANDLED_INTERRUPT;
 }
 
 
-void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
+void VGDrvNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
 {
-    LogFlow((MODULE_NAME "::NativeISRMousePollEvent:\n"));
+    LogFlow(("VGDrvNativeISRMousePollEvent:\n"));
 
     status_t err = B_OK;
     //dprintf(MODULE_NAME ": isr mouse\n");
@@ -348,14 +350,14 @@ void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
  * @returns Haiku error code.
  * @param   pvState  Pointer to the state info structure.
  */
-static int VBoxGuestHaikuAddIRQ(void *pvState)
+static int vgdrvHaikuAddIRQ(void *pvState)
 {
     status_t err;
     struct VBoxGuestDeviceState *pState = (struct VBoxGuestDeviceState *)pvState;
 
     AssertReturn(pState, VERR_INVALID_PARAMETER);
 
-    err = install_io_interrupt_handler(pState->iIrqResId, VBoxGuestHaikuISR, pState,  0);
+    err = install_io_interrupt_handler(pState->iIrqResId, vgdrvHaikuISR, pState,  0);
     if (err == B_OK)
         return VINF_SUCCESS;
     return VERR_DEV_IO_ERROR;
@@ -367,20 +369,20 @@ static int VBoxGuestHaikuAddIRQ(void *pvState)
  *
  * @param   pvState  Opaque pointer to the state info structure.
  */
-static void VBoxGuestHaikuRemoveIRQ(void *pvState)
+static void vgdrvHaikuRemoveIRQ(void *pvState)
 {
     struct VBoxGuestDeviceState *pState = (struct VBoxGuestDeviceState *)pvState;
     AssertPtr(pState);
 
-    remove_io_interrupt_handler(pState->iIrqResId, VBoxGuestHaikuISR, pState);
+    remove_io_interrupt_handler(pState->iIrqResId, vgdrvHaikuISR, pState);
 }
 
 
-static status_t VBoxGuestHaikuAttach(const pci_info *pDevice)
+static status_t vgdrvHaikuAttach(const pci_info *pDevice)
 {
     status_t status;
-    int rc = VINF_SUCCESS;
-    int iResId = 0;
+    int rc;
+    int iResId;
     struct VBoxGuestDeviceState *pState = &sState;
     static const char *const     s_apszGroups[] = VBOX_LOGGROUP_NAMES;
     PRTLOGGER                    pRelLogger;
@@ -395,15 +397,14 @@ static status_t VBoxGuestHaikuAttach(const pci_info *pDevice)
     rc = RTR0Init(0);
     if (RT_FAILURE(rc))
     {
-        /** @todo r=ramshankar: use dprintf here. */
-        LogFunc(("RTR0Init failed.\n"));
+        dprintf(MODULE_NAME ": RTR0Init failed: %d\n", rc);
         return ENXIO;
     }
 
-    rc = RTSpinlockCreate(&g_Spinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "VBoxGuestHaiku");
+    rc = RTSpinlockCreate(&g_Spinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "vgdrvHaiku");
     if (RT_FAILURE(rc))
     {
-        LogRel(("VBoxGuestHaikuAttach: RTSpinlock create failed. rc=%Rrc\n", rc));
+        LogRel(("vgdrvHaikuAttach: RTSpinlock create failed. rc=%Rrc\n", rc));
         return ENXIO;
     }
 
@@ -448,46 +449,47 @@ static status_t VBoxGuestHaikuAttach(const pci_info *pDevice)
             /*
              * Call the common device extension initializer.
              */
-            rc = VbgdCommonInitDevExt(&g_DevExt, pState->uIOPortBase, pState->pMMIOBase, pState->VMMDevMemSize,
+            rc = VGDrvCommonInitDevExt(&g_DevExt, pState->uIOPortBase, pState->pMMIOBase, pState->VMMDevMemSize,
 #if ARCH_BITS == 64
-                                      VBOXOSTYPE_Haiku_x64,
+                                       VBOXOSTYPE_Haiku_x64,
 #else
-                                      VBOXOSTYPE_Haiku,
+                                       VBOXOSTYPE_Haiku,
 #endif
-                                      VMMDEV_EVENT_MOUSE_POSITION_CHANGED);
+                                       VMMDEV_EVENT_MOUSE_POSITION_CHANGED);
             if (RT_SUCCESS(rc))
             {
                 /*
                  * Add IRQ of VMMDev.
                  */
                 pState->iIrqResId = pDevice->u.h0.interrupt_line;
-                rc = VBoxGuestHaikuAddIRQ(pState);
+                rc = vgdrvHaikuAddIRQ(pState);
                 if (RT_SUCCESS(rc))
                 {
                     LogRel((MODULE_NAME ": loaded successfully\n"));
                     return B_OK;
                 }
 
-                LogRel((MODULE_NAME ":VbgdCommonInitDevExt failed.\n"));
-                VbgdCommonDeleteDevExt(&g_DevExt);
+                LogRel((MODULE_NAME ": VGDrvCommonInitDevExt failed.\n"));
+                VGDrvCommonDeleteDevExt(&g_DevExt);
             }
             else
-                LogRel((MODULE_NAME ":VBoxGuestHaikuAddIRQ failed.\n"));
+                LogRel((MODULE_NAME ": vgdrvHaikuAddIRQ failed.\n"));
         }
         else
-            LogRel((MODULE_NAME ":MMIO region setup failed.\n"));
+            LogRel((MODULE_NAME ": MMIO region setup failed.\n"));
     }
     else
-        LogRel((MODULE_NAME ":IOport setup failed.\n"));
+        LogRel((MODULE_NAME ": IOport setup failed.\n"));
 
     RTR0Term();
     return ENXIO;
 }
 
 
-static status_t VBoxGuestHaikuProbe(pci_info *pDevice)
+static status_t vgdrvHaikuProbe(pci_info *pDevice)
 {
-    if ((pDevice->vendor_id == VMMDEV_VENDORID) && (pDevice->device_id == VMMDEV_DEVICEID))
+    if (   pDevice->vendor_id == VMMDEV_VENDORID
+        && pDevice->device_id == VMMDEV_DEVICEID)
         return B_OK;
 
     return ENXIO;
@@ -506,10 +508,10 @@ status_t init_module(void)
 
     while ((*gPCI->get_nth_pci_info)(ix++, &info) == B_OK)
     {
-        if (VBoxGuestHaikuProbe(&info) == 0)
+        if (vgdrvHaikuProbe(&info) == 0)
         {
             /* We found it */
-            err = VBoxGuestHaikuAttach(&info);
+            err = vgdrvHaikuAttach(&info);
             return err;
         }
     }
@@ -520,7 +522,7 @@ status_t init_module(void)
 
 void uninit_module(void)
 {
-    VBoxGuestHaikuDetach();
+    vgdrvHaikuDetach();
     put_module(B_PCI_MODULE_NAME);
 }
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.h b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.h
index 3d866bf..2cac9d9 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.h
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.h
@@ -183,10 +183,10 @@ struct vboxguest_module_info
     PRTLOGGER(*_RTLogRelGetDefaultInstance)(void);
     PRTLOGGER(*_RTLogRelGetDefaultInstanceEx)(uint32_t fFlagsAndGroup);
     int (*_RTErrConvertToErrno)(int iErr);
-    int (*_VbgdCommonIoCtl)(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                 void *pvData, size_t cbData, size_t *pcbDataReturned);
-    int (*_VbgdCommonCreateUserSession)(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession);
-    void (*_VbgdCommonCloseSession)(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
+    int (*_VGDrvCommonIoCtl)(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                             void *pvData, size_t cbData, size_t *pcbDataReturned);
+    int (*_VGDrvCommonCreateUserSession)(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession);
+    void (*_VGDrvCommonCloseSession)(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
     void* (*_VBoxGuestIDCOpen)(uint32_t *pu32Version);
     int (*_VBoxGuestIDCClose)(void *pvSession);
     int (*_VBoxGuestIDCCall)(void *pvSession, unsigned iCmd, void *pvData, size_t cbData, size_t *pcbDataReturned);
@@ -223,5 +223,5 @@ struct vboxguest_module_info
 extern struct vboxguest_module_info *g_VBoxGuest;
 #endif
 
-#endif /* ___VBoxGuest_haiku_h */
+#endif /* !___VBoxGuest_haiku_h */
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c
index 45b0355..abc038d 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c
@@ -1,4 +1,4 @@
-/* $Rev: 102121 $ */
+/* $Rev: 103598 $ */
 /** @file
  * VBoxGuest - Linux specifics.
  *
@@ -55,7 +55,7 @@
 *********************************************************************************************************************************/
 /** The device name. */
 #define DEVICE_NAME             "vboxguest"
-/** The device name for the device node open to everyone.. */
+/** The device name for the device node open to everyone. */
 #define DEVICE_NAME_USER        "vboxuser"
 /** The name of the PCI driver */
 #define DRIVER_NAME             DEVICE_NAME
@@ -71,19 +71,20 @@
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static void vboxguestLinuxTermPci(struct pci_dev *pPciDev);
-static int  vboxguestLinuxModInit(void);
-static void vboxguestLinuxModExit(void);
-static int  vboxguestLinuxOpen(struct inode *pInode, struct file *pFilp);
-static int  vboxguestLinuxRelease(struct inode *pInode, struct file *pFilp);
+static void vgdrvLinuxTermPci(struct pci_dev *pPciDev);
+static int  vgdrvLinuxProbePci(struct pci_dev *pPciDev, const struct pci_device_id *id);
+static int  vgdrvLinuxModInit(void);
+static void vgdrvLinuxModExit(void);
+static int  vgdrvLinuxOpen(struct inode *pInode, struct file *pFilp);
+static int  vgdrvLinuxRelease(struct inode *pInode, struct file *pFilp);
 #ifdef HAVE_UNLOCKED_IOCTL
-static long vboxguestLinuxIOCtl(struct file *pFilp, unsigned int uCmd, unsigned long ulArg);
+static long vgdrvLinuxIOCtl(struct file *pFilp, unsigned int uCmd, unsigned long ulArg);
 #else
-static int  vboxguestLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigned int uCmd, unsigned long ulArg);
+static int  vgdrvLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigned int uCmd, unsigned long ulArg);
 #endif
-static int  vboxguestFAsync(int fd, struct file *pFile, int fOn);
-static unsigned int vboxguestPoll(struct file *pFile, poll_table *pPt);
-static ssize_t vboxguestRead(struct file *pFile, char *pbBuf, size_t cbRead, loff_t *poff);
+static int  vgdrvLinuxFAsync(int fd, struct file *pFile, int fOn);
+static unsigned int vgdrvLinuxPoll(struct file *pFile, poll_table *pPt);
+static ssize_t vgdrvLinuxRead(struct file *pFile, char *pbBuf, size_t cbRead, loff_t *poff);
 
 
 /*********************************************************************************************************************************
@@ -140,16 +141,16 @@ static struct input_dev        *g_pInputDevice = NULL;
 static struct file_operations   g_FileOps =
 {
     owner:          THIS_MODULE,
-    open:           vboxguestLinuxOpen,
-    release:        vboxguestLinuxRelease,
+    open:           vgdrvLinuxOpen,
+    release:        vgdrvLinuxRelease,
 #ifdef HAVE_UNLOCKED_IOCTL
-    unlocked_ioctl: vboxguestLinuxIOCtl,
+    unlocked_ioctl: vgdrvLinuxIOCtl,
 #else
-    ioctl:          vboxguestLinuxIOCtl,
+    ioctl:          vgdrvLinuxIOCtl,
 #endif
-    fasync:         vboxguestFAsync,
-    read:           vboxguestRead,
-    poll:           vboxguestPoll,
+    fasync:         vgdrvLinuxFAsync,
+    read:           vgdrvLinuxRead,
+    poll:           vgdrvLinuxPoll,
     llseek:         no_llseek,
 };
 
@@ -167,12 +168,12 @@ static struct miscdevice        g_MiscDevice =
 static struct file_operations   g_FileOpsUser =
 {
     owner:          THIS_MODULE,
-    open:           vboxguestLinuxOpen,
-    release:        vboxguestLinuxRelease,
+    open:           vgdrvLinuxOpen,
+    release:        vgdrvLinuxRelease,
 #ifdef HAVE_UNLOCKED_IOCTL
-    unlocked_ioctl: vboxguestLinuxIOCtl,
+    unlocked_ioctl: vgdrvLinuxIOCtl,
 #else
-    ioctl:          vboxguestLinuxIOCtl,
+    ioctl:          vgdrvLinuxIOCtl,
 #endif
 };
 
@@ -200,17 +201,29 @@ g_VBoxGuestPciId[] =
         /* empty entry */
     }
 };
+
 MODULE_DEVICE_TABLE(pci, g_VBoxGuestPciId);
 
+/** Structure for registering the PCI driver. */
+static struct pci_driver  g_PciDriver =
+{
+    name:           DRIVER_NAME,
+    id_table:       g_VBoxGuestPciId,
+    probe:          vgdrvLinuxProbePci,
+    remove:         vgdrvLinuxTermPci
+};
+
 static PVBOXGUESTSESSION        g_pKernelSession = NULL;
 
+
+
 /**
  * Converts a VBox status code to a linux error code.
  *
  * @returns corresponding negative linux error code.
  * @param   rc  supdrv error code (SUPDRV_ERR_* defines).
  */
-static int vboxguestLinuxConvertToNegErrno(int rc)
+static int vgdrvLinuxConvertToNegErrno(int rc)
 {
     if (   rc > -1000
         && rc < 1000)
@@ -233,16 +246,14 @@ static int vboxguestLinuxConvertToNegErrno(int rc)
 }
 
 
-
 /**
  * Does the PCI detection and init of the device.
  *
  * @returns 0 on success, negated errno on failure.
  */
-static int vboxguestLinuxProbePci(struct pci_dev *pPciDev,
-                                  const struct pci_device_id *id)
+static int vgdrvLinuxProbePci(struct pci_dev *pPciDev, const struct pci_device_id *id)
 {
-    int             rc;
+    int rc;
 
     NOREF(id);
     AssertReturn(!g_pPciDev, -EINVAL);
@@ -298,7 +309,7 @@ static int vboxguestLinuxProbePci(struct pci_dev *pPciDev,
 /**
  * Clean up the usage of the PCI device.
  */
-static void vboxguestLinuxTermPci(struct pci_dev *pPciDev)
+static void vgdrvLinuxTermPci(struct pci_dev *pPciDev)
 {
     g_pPciDev = NULL;
     if (pPciDev)
@@ -315,16 +326,6 @@ static void vboxguestLinuxTermPci(struct pci_dev *pPciDev)
 }
 
 
-/** Structure for registering the PCI driver. */
-static struct pci_driver  g_PciDriver =
-{
-    name:           DRIVER_NAME,
-    id_table:       g_VBoxGuestPciId,
-    probe:          vboxguestLinuxProbePci,
-    remove:         vboxguestLinuxTermPci
-};
-
-
 /**
  * Interrupt service routine.
  *
@@ -333,15 +334,15 @@ static struct pci_driver  g_PciDriver =
  *
  * @param   iIrq            The IRQ number.
  * @param   pvDevId         The device ID, a pointer to g_DevExt.
- * @param   pvRegs          Register set. Removed in 2.6.19.
+ * @param   pRegs           Register set. Removed in 2.6.19.
  */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
-static irqreturn_t vboxguestLinuxISR(int iIrrq, void *pvDevId)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) && !defined(DOXYGEN_RUNNING)
+static irqreturn_t vgdrvLinuxISR(int iIrq, void *pvDevId)
 #else
-static irqreturn_t vboxguestLinuxISR(int iIrrq, void *pvDevId, struct pt_regs *pRegs)
+static irqreturn_t vgdrvLinuxISR(int iIrq, void *pvDevId, struct pt_regs *pRegs)
 #endif
 {
-    bool fTaken = VbgdCommonISR(&g_DevExt);
+    bool fTaken = VGDrvCommonISR(&g_DevExt);
     return IRQ_RETVAL(fTaken);
 }
 
@@ -349,13 +350,13 @@ static irqreturn_t vboxguestLinuxISR(int iIrrq, void *pvDevId, struct pt_regs *p
 /**
  * Registers the ISR and initializes the poll wait queue.
  */
-static int __init vboxguestLinuxInitISR(void)
+static int __init vgdrvLinuxInitISR(void)
 {
     int rc;
 
     init_waitqueue_head(&g_PollEventQueue);
     rc = request_irq(g_pPciDev->irq,
-                     vboxguestLinuxISR,
+                     vgdrvLinuxISR,
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
                      IRQF_SHARED,
 #else
@@ -375,110 +376,120 @@ static int __init vboxguestLinuxInitISR(void)
 /**
  * Deregisters the ISR.
  */
-static void vboxguestLinuxTermISR(void)
+static void vgdrvLinuxTermISR(void)
 {
     free_irq(g_pPciDev->irq, &g_DevExt);
 }
 
 
 #ifdef VBOXGUEST_WITH_INPUT_DRIVER
-/** Calls the kernel IOCtl to report mouse status to the host on behalf of
- * our kernel session. */
-static int vboxguestLinuxSetMouseStatus(uint32_t fStatus)
+
+/**
+ * Reports the mouse integration status to the host.
+ *
+ * Calls the kernel IOCtl to report mouse status to the host on behalf of
+ * our kernel session.
+ *
+ * @param   fStatus     The mouse status to report.
+ */
+static int vgdrvLinuxSetMouseStatus(uint32_t fStatus)
 {
-    return VbgdCommonIoCtl(VBOXGUEST_IOCTL_SET_MOUSE_STATUS, &g_DevExt,
-                           g_pKernelSession, &fStatus, sizeof(fStatus),
-                           NULL);
+    return VGDrvCommonIoCtl(VBOXGUEST_IOCTL_SET_MOUSE_STATUS, &g_DevExt, g_pKernelSession, &fStatus, sizeof(fStatus), NULL);
 }
 
 
-/** Called when the input device is first opened.  Sets up absolute reporting.
+/**
+ * Called when the input device is first opened.
+ *
+ * Sets up absolute mouse reporting.
  */
 static int vboxguestOpenInputDevice(struct input_dev *pDev)
 {
-    NOREF(pDev);
-    if (RT_FAILURE(vboxguestLinuxSetMouseStatus
-                                   (  VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE
-                                    | VMMDEV_MOUSE_NEW_PROTOCOL)))
+    int rc = vgdrvLinuxSetMouseStatus(VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE | VMMDEV_MOUSE_NEW_PROTOCOL);
+    if (RT_FAILURE(rc))
         return ENODEV;
+    NOREF(pDev);
     return 0;
 }
 
 
-/** Called if all open handles to the device are closed, disables absolute
- * reporting. */
+/**
+ * Called if all open handles to the input device are closed.
+ *
+ * Disables absolute reporting.
+ */
 static void vboxguestCloseInputDevice(struct input_dev *pDev)
 {
     NOREF(pDev);
-    vboxguestLinuxSetMouseStatus(0);
+    vgdrvLinuxSetMouseStatus(0);
 }
 
 
 /**
  * Creates the kernel input device.
  */
-static int __init vboxguestLinuxCreateInputDevice(void)
+static int __init vgdrvLinuxCreateInputDevice(void)
 {
-    int rc;
-
-    rc = VbglGRAlloc((VMMDevRequestHeader **)&g_pMouseStatusReq,
-                     sizeof(*g_pMouseStatusReq),
-                     VMMDevReq_GetMouseStatus);
-    if (RT_FAILURE(rc))
-        return -ENOMEM;
-    g_pInputDevice = input_allocate_device();
-    if (!g_pInputDevice)
+    int rc = VbglGRAlloc((VMMDevRequestHeader **)&g_pMouseStatusReq, sizeof(*g_pMouseStatusReq), VMMDevReq_GetMouseStatus);
+    if (RT_SUCCESS(rc))
     {
-        VbglGRFree(&g_pMouseStatusReq->header);
-        return -ENOMEM;
-    }
-    g_pInputDevice->id.bustype = BUS_PCI;
-    g_pInputDevice->id.vendor  = VMMDEV_VENDORID;
-    g_pInputDevice->id.product = VMMDEV_DEVICEID;
-    g_pInputDevice->id.version = VBOX_SHORT_VERSION;
-    g_pInputDevice->open       = vboxguestOpenInputDevice;
-    g_pInputDevice->close      = vboxguestCloseInputDevice;
+        g_pInputDevice = input_allocate_device();
+        if (g_pInputDevice)
+        {
+            g_pInputDevice->id.bustype = BUS_PCI;
+            g_pInputDevice->id.vendor  = VMMDEV_VENDORID;
+            g_pInputDevice->id.product = VMMDEV_DEVICEID;
+            g_pInputDevice->id.version = VBOX_SHORT_VERSION;
+            g_pInputDevice->open       = vboxguestOpenInputDevice;
+            g_pInputDevice->close      = vboxguestCloseInputDevice;
 # if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22)
-    g_pInputDevice->cdev.dev   = &g_pPciDev->dev;
+            g_pInputDevice->cdev.dev   = &g_pPciDev->dev;
 # else
-    g_pInputDevice->dev.parent = &g_pPciDev->dev;
+            g_pInputDevice->dev.parent = &g_pPciDev->dev;
 # endif
-    {
-        int rc = input_register_device(g_pInputDevice);
-        if (rc)
-        {
-            VbglGRFree(&g_pMouseStatusReq->header);
+            rc = input_register_device(g_pInputDevice);
+            if (rc == 0)
+            {
+                /* Do what one of our competitors apparently does as that works. */
+                ASMBitSet(g_pInputDevice->evbit, EV_ABS);
+                ASMBitSet(g_pInputDevice->evbit, EV_KEY);
+# ifdef EV_SYN
+                ASMBitSet(g_pInputDevice->evbit, EV_SYN);
+# endif
+                input_set_abs_params(g_pInputDevice, ABS_X, VMMDEV_MOUSE_RANGE_MIN, VMMDEV_MOUSE_RANGE_MAX, 0, 0);
+                input_set_abs_params(g_pInputDevice, ABS_Y, VMMDEV_MOUSE_RANGE_MIN, VMMDEV_MOUSE_RANGE_MAX, 0, 0);
+                ASMBitSet(g_pInputDevice->keybit, BTN_MOUSE);
+                /** @todo this string should be in a header file somewhere. */
+                g_pInputDevice->name = "VirtualBox mouse integration";
+                return 0;
+            }
+
             input_free_device(g_pInputDevice);
-            return rc;
         }
+        else
+            rc = -ENOMEM;
+        VbglGRFree(&g_pMouseStatusReq->header);
+        g_pMouseStatusReq = NULL;
     }
-    /* Do what one of our competitors apparently does as that works. */
-    ASMBitSet(g_pInputDevice->evbit, EV_ABS);
-    ASMBitSet(g_pInputDevice->evbit, EV_KEY);
-# ifdef EV_SYN
-    ASMBitSet(g_pInputDevice->evbit, EV_SYN);
-# endif
-    input_set_abs_params(g_pInputDevice, ABS_X, VMMDEV_MOUSE_RANGE_MIN,
-                         VMMDEV_MOUSE_RANGE_MAX, 0, 0);
-    input_set_abs_params(g_pInputDevice, ABS_Y, VMMDEV_MOUSE_RANGE_MIN,
-                         VMMDEV_MOUSE_RANGE_MAX, 0, 0);
-    ASMBitSet(g_pInputDevice->keybit, BTN_MOUSE);
-    /** @todo this string should be in a header file somewhere. */
-    g_pInputDevice->name = "VirtualBox mouse integration";
-    return 0;
+    else
+        rc = -ENOMEM;
+    return rc;
 }
 
 
 /**
  * Terminates the kernel input device.
  */
-static void vboxguestLinuxTermInputDevice(void)
+static void vgdrvLinuxTermInputDevice(void)
 {
     VbglGRFree(&g_pMouseStatusReq->header);
+    g_pMouseStatusReq = NULL;
+
     /* See documentation of input_register_device(): input_free_device()
      * should not be called after a device has been registered. */
     input_unregister_device(g_pInputDevice);
 }
+
 #endif /* VBOXGUEST_WITH_INPUT_DRIVER */
 
 
@@ -487,39 +498,33 @@ static void vboxguestLinuxTermInputDevice(void)
  *
  * @returns 0 on success, negated errno on failure.
  */
-static int __init vboxguestLinuxInitDeviceNodes(void)
+static int __init vgdrvLinuxInitDeviceNodes(void)
 {
-    int rc;
-
     /*
      * The full feature device node.
      */
-    rc = misc_register(&g_MiscDevice);
-    if (rc)
-    {
-        LogRel((DEVICE_NAME ": misc_register failed for %s (rc=%d)\n", DEVICE_NAME, rc));
-        return rc;
-    }
-
-    /*
-     * The device node intended to be accessible by all users.
-     */
-    rc = misc_register(&g_MiscDeviceUser);
-    if (rc)
+    int rc = misc_register(&g_MiscDevice);
+    if (!rc)
     {
+        /*
+         * The device node intended to be accessible by all users.
+         */
+        rc = misc_register(&g_MiscDeviceUser);
+        if (!rc)
+            return 0;
         LogRel((DEVICE_NAME ": misc_register failed for %s (rc=%d)\n", DEVICE_NAME_USER, rc));
         misc_deregister(&g_MiscDevice);
-        return rc;
     }
-
-    return 0;
+    else
+        LogRel((DEVICE_NAME ": misc_register failed for %s (rc=%d)\n", DEVICE_NAME, rc));
+    return rc;
 }
 
 
 /**
  * Deregisters the device nodes.
  */
-static void vboxguestLinuxTermDeviceNodes(void)
+static void vgdrvLinuxTermDeviceNodes(void)
 {
     misc_deregister(&g_MiscDevice);
     misc_deregister(&g_MiscDeviceUser);
@@ -531,7 +536,7 @@ static void vboxguestLinuxTermDeviceNodes(void)
  *
  * @returns appropriate status code.
  */
-static int __init vboxguestLinuxModInit(void)
+static int __init vgdrvLinuxModInit(void)
 {
     static const char * const   s_apszGroups[] = VBOX_LOGGROUP_NAMES;
     PRTLOGGER                   pRelLogger;
@@ -577,7 +582,7 @@ static int __init vboxguestLinuxModInit(void)
         /*
          * Register the interrupt service routine for it.
          */
-        rc = vboxguestLinuxInitISR();
+        rc = vgdrvLinuxInitISR();
         if (rc >= 0)
         {
             /*
@@ -595,33 +600,32 @@ static int __init vboxguestLinuxModInit(void)
 # warning "huh? which arch + version is this?"
             VBOXOSTYPE enmOsType = VBOXOSTYPE_Linux;
 #endif
-            rc = VbgdCommonInitDevExt(&g_DevExt,
-                                      g_IOPortBase,
-                                      g_pvMMIOBase,
-                                      g_cbMMIO,
-                                      enmOSType,
-                                      VMMDEV_EVENT_MOUSE_POSITION_CHANGED);
+            rc = VGDrvCommonInitDevExt(&g_DevExt,
+                                       g_IOPortBase,
+                                       g_pvMMIOBase,
+                                       g_cbMMIO,
+                                       enmOSType,
+                                       VMMDEV_EVENT_MOUSE_POSITION_CHANGED);
             if (RT_SUCCESS(rc))
             {
                 /*
                  * Create the kernel session for this driver.
                  */
-                rc = VbgdCommonCreateKernelSession(&g_DevExt,
-                                                  &g_pKernelSession);
+                rc = VGDrvCommonCreateKernelSession(&g_DevExt, &g_pKernelSession);
                 if (RT_SUCCESS(rc))
                 {
                     /*
                      * Create the kernel input device.
                      */
 #ifdef VBOXGUEST_WITH_INPUT_DRIVER
-                    rc = vboxguestLinuxCreateInputDevice();
+                    rc = vgdrvLinuxCreateInputDevice();
                     if (rc >= 0)
                     {
 #endif
                         /*
                          * Finally, create the device nodes.
                          */
-                        rc = vboxguestLinuxInitDeviceNodes();
+                        rc = vgdrvLinuxInitDeviceNodes();
                         if (rc >= 0)
                         {
                             /* some useful information for the user but don't show this on the console */
@@ -634,7 +638,7 @@ static int __init vboxguestLinuxModInit(void)
 
                         /* bail out */
 #ifdef VBOXGUEST_WITH_INPUT_DRIVER
-                        vboxguestLinuxTermInputDevice();
+                        vgdrvLinuxTermInputDevice();
                     }
                     else
                     {
@@ -642,16 +646,16 @@ static int __init vboxguestLinuxModInit(void)
                         rc = RTErrConvertFromErrno(rc);
                     }
 #endif
-                    VbgdCommonCloseSession(&g_DevExt, g_pKernelSession);
+                    VGDrvCommonCloseSession(&g_DevExt, g_pKernelSession);
                 }
-                VbgdCommonDeleteDevExt(&g_DevExt);
+                VGDrvCommonDeleteDevExt(&g_DevExt);
             }
             else
             {
-                LogRel((DEVICE_NAME ": VbgdCommonInitDevExt failed with rc=%Rrc\n", rc));
+                LogRel((DEVICE_NAME ": VGDrvCommonInitDevExt failed with rc=%Rrc\n", rc));
                 rc = RTErrConvertFromErrno(rc);
             }
-            vboxguestLinuxTermISR();
+            vgdrvLinuxTermISR();
         }
     }
     else
@@ -670,18 +674,18 @@ static int __init vboxguestLinuxModInit(void)
 /**
  * Unload the module.
  */
-static void __exit vboxguestLinuxModExit(void)
+static void __exit vgdrvLinuxModExit(void)
 {
     /*
      * Inverse order of init.
      */
-    vboxguestLinuxTermDeviceNodes();
+    vgdrvLinuxTermDeviceNodes();
 #ifdef VBOXGUEST_WITH_INPUT_DRIVER
-    vboxguestLinuxTermInputDevice();
+    vgdrvLinuxTermInputDevice();
 #endif
-    VbgdCommonCloseSession(&g_DevExt, g_pKernelSession);
-    VbgdCommonDeleteDevExt(&g_DevExt);
-    vboxguestLinuxTermISR();
+    VGDrvCommonCloseSession(&g_DevExt, g_pKernelSession);
+    VGDrvCommonDeleteDevExt(&g_DevExt);
+    vgdrvLinuxTermISR();
     pci_unregister_driver(&g_PciDriver);
     RTLogDestroy(RTLogRelSetDefaultInstance(NULL));
     RTLogDestroy(RTLogSetDefaultInstance(NULL));
@@ -695,7 +699,7 @@ static void __exit vboxguestLinuxModExit(void)
  * @param   pInode      Pointer to inode info structure.
  * @param   pFilp       Associated file pointer.
  */
-static int vboxguestLinuxOpen(struct inode *pInode, struct file *pFilp)
+static int vgdrvLinuxOpen(struct inode *pInode, struct file *pFilp)
 {
     int                 rc;
     PVBOXGUESTSESSION   pSession;
@@ -705,7 +709,7 @@ static int vboxguestLinuxOpen(struct inode *pInode, struct file *pFilp)
      * Call common code to create the user session. Associate it with
      * the file so we can access it in the other methods.
      */
-    rc = VbgdCommonCreateUserSession(&g_DevExt, &pSession);
+    rc = VGDrvCommonCreateUserSession(&g_DevExt, &pSession);
     if (RT_SUCCESS(rc))
     {
         pFilp->private_data = pSession;
@@ -713,10 +717,9 @@ static int vboxguestLinuxOpen(struct inode *pInode, struct file *pFilp)
             pSession->fUserSession = true;
     }
 
-    Log(("vboxguestLinuxOpen: g_DevExt=%p pSession=%p rc=%d/%d (pid=%d/%d %s)\n",
-         &g_DevExt, pSession, rc, vboxguestLinuxConvertToNegErrno(rc),
-         RTProcSelf(), current->pid, current->comm));
-    return vboxguestLinuxConvertToNegErrno(rc);
+    Log(("vgdrvLinuxOpen: g_DevExt=%p pSession=%p rc=%d/%d (pid=%d/%d %s)\n",
+         &g_DevExt, pSession, rc, vgdrvLinuxConvertToNegErrno(rc), RTProcSelf(), current->pid, current->comm));
+    return vgdrvLinuxConvertToNegErrno(rc);
 }
 
 
@@ -726,17 +729,17 @@ static int vboxguestLinuxOpen(struct inode *pInode, struct file *pFilp)
  * @param   pInode      Pointer to inode info structure.
  * @param   pFilp       Associated file pointer.
  */
-static int vboxguestLinuxRelease(struct inode *pInode, struct file *pFilp)
+static int vgdrvLinuxRelease(struct inode *pInode, struct file *pFilp)
 {
-    Log(("vboxguestLinuxRelease: pFilp=%p pSession=%p pid=%d/%d %s\n",
+    Log(("vgdrvLinuxRelease: pFilp=%p pSession=%p pid=%d/%d %s\n",
          pFilp, pFilp->private_data, RTProcSelf(), current->pid, current->comm));
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28)
     /* This housekeeping was needed in older kernel versions to ensure that
      * the file pointer didn't get left on the polling queue. */
-    vboxguestFAsync(-1, pFilp, 0);
+    vgdrvLinuxFAsync(-1, pFilp, 0);
 #endif
-    VbgdCommonCloseSession(&g_DevExt, (PVBOXGUESTSESSION)pFilp->private_data);
+    VGDrvCommonCloseSession(&g_DevExt, (PVBOXGUESTSESSION)pFilp->private_data);
     pFilp->private_data = NULL;
     return 0;
 }
@@ -745,14 +748,15 @@ static int vboxguestLinuxRelease(struct inode *pInode, struct file *pFilp)
 /**
  * Device I/O Control entry point.
  *
+ * @param   pInode      Associated inode pointer.
  * @param   pFilp       Associated file pointer.
  * @param   uCmd        The function specified to ioctl().
  * @param   ulArg       The argument specified to ioctl().
  */
 #ifdef HAVE_UNLOCKED_IOCTL
-static long vboxguestLinuxIOCtl(struct file *pFilp, unsigned int uCmd, unsigned long ulArg)
+static long vgdrvLinuxIOCtl(struct file *pFilp, unsigned int uCmd, unsigned long ulArg)
 #else
-static int vboxguestLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigned int uCmd, unsigned long ulArg)
+static int vgdrvLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigned int uCmd, unsigned long ulArg)
 #endif
 {
     PVBOXGUESTSESSION   pSession = (PVBOXGUESTSESSION)pFilp->private_data;
@@ -762,7 +766,7 @@ static int vboxguestLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigne
     int                 rc;
     uint64_t            au64Buf[32/sizeof(uint64_t)];
 
-    Log6(("vboxguestLinuxIOCtl: pFilp=%p uCmd=%#x ulArg=%p pid=%d/%d\n", pFilp, uCmd, (void *)ulArg, RTProcSelf(), current->pid));
+    Log6(("vgdrvLinuxIOCtl: pFilp=%p uCmd=%#x ulArg=%p pid=%d/%d\n", pFilp, uCmd, (void *)ulArg, RTProcSelf(), current->pid));
 
     /*
      * Buffer the request.
@@ -787,7 +791,7 @@ static int vboxguestLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigne
          * Process the IOCtl.
          */
         size_t cbDataReturned;
-        rc = VbgdCommonIoCtl(uCmd, &g_DevExt, pSession, pvBuf, cbData, &cbDataReturned);
+        rc = VGDrvCommonIoCtl(uCmd, &g_DevExt, pSession, pvBuf, cbData, &cbDataReturned);
 
         /*
          * Copy ioctl data and output buffer back to user space.
@@ -812,7 +816,7 @@ static int vboxguestLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigne
         }
         else
         {
-            Log(("vboxguestLinuxIOCtl: pFilp=%p uCmd=%#x ulArg=%p failed, rc=%d\n", pFilp, uCmd, (void *)ulArg, rc));
+            Log(("vgdrvLinuxIOCtl: pFilp=%p uCmd=%#x ulArg=%p failed, rc=%d\n", pFilp, uCmd, (void *)ulArg, rc));
             rc = -rc; Assert(rc > 0); /* Positive returns == negated VBox error status codes. */
         }
     }
@@ -824,7 +828,7 @@ static int vboxguestLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigne
     if (pvBufFree)
         RTMemFree(pvBufFree);
 
-    Log6(("vboxguestLinuxIOCtl: returns %d (pid=%d/%d)\n", rc, RTProcSelf(), current->pid));
+    Log6(("vgdrvLinuxIOCtl: returns %d (pid=%d/%d)\n", rc, RTProcSelf(), current->pid));
     return rc;
 }
 
@@ -838,7 +842,7 @@ static int vboxguestLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigne
  * @param   pFile       The file structure.
  * @param   fOn         On/off indicator.
  */
-static int vboxguestFAsync(int fd, struct file *pFile, int fOn)
+static int vgdrvLinuxFAsync(int fd, struct file *pFile, int fOn)
 {
     return fasync_helper(fd, pFile, fOn, &g_pFAsyncQueue);
 }
@@ -858,7 +862,7 @@ static int vboxguestFAsync(int fd, struct file *pFile, int fOn)
  * @remarks This is probably not really used, X11 is said to use the fasync
  *          interface instead.
  */
-static unsigned int vboxguestPoll(struct file *pFile, poll_table *pPt)
+static unsigned int vgdrvLinuxPoll(struct file *pFile, poll_table *pPt)
 {
     PVBOXGUESTSESSION   pSession  = (PVBOXGUESTSESSION)pFile->private_data;
     uint32_t            u32CurSeq = ASMAtomicUoReadU32(&g_DevExt.u32MousePosChangedSeq);
@@ -882,9 +886,9 @@ static unsigned int vboxguestPoll(struct file *pFile, poll_table *pPt)
  *
  * @remarks This is probably not really used as X11 lets the driver do its own
  *          event reading. The poll condition is therefore also cleared when we
- *          see VMMDevReq_GetMouseStatus in VbgdCommonIoCtl_VMMRequest.
+ *          see VMMDevReq_GetMouseStatus in vgdrvIoCtl_VMMRequest.
  */
-static ssize_t vboxguestRead(struct file *pFile, char *pbBuf, size_t cbRead, loff_t *poff)
+static ssize_t vgdrvLinuxRead(struct file *pFile, char *pbBuf, size_t cbRead, loff_t *poff)
 {
     PVBOXGUESTSESSION   pSession  = (PVBOXGUESTSESSION)pFile->private_data;
     uint32_t            u32CurSeq = ASMAtomicUoReadU32(&g_DevExt.u32MousePosChangedSeq);
@@ -906,7 +910,7 @@ static ssize_t vboxguestRead(struct file *pFile, char *pbBuf, size_t cbRead, lof
 }
 
 
-void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
+void VGDrvNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
 {
 #ifdef VBOXGUEST_WITH_INPUT_DRIVER
     int rc;
@@ -917,9 +921,9 @@ void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
      * Wake up everyone that's in a poll() and post anyone that has
      * subscribed to async notifications.
      */
-    Log3(("VbgdNativeISRMousePollEvent: wake_up_all\n"));
+    Log3(("VGDrvNativeISRMousePollEvent: wake_up_all\n"));
     wake_up_all(&g_PollEventQueue);
-    Log3(("VbgdNativeISRMousePollEvent: kill_fasync\n"));
+    Log3(("VGDrvNativeISRMousePollEvent: kill_fasync\n"));
     kill_fasync(&g_pFAsyncQueue, SIGIO, POLL_IN);
 #ifdef VBOXGUEST_WITH_INPUT_DRIVER
     /* Report events to the kernel input device */
@@ -938,7 +942,7 @@ void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
 # endif
     }
 #endif
-    Log3(("VbgdNativeISRMousePollEvent: done\n"));
+    Log3(("VGDrvNativeISRMousePollEvent: done\n"));
 }
 
 
@@ -953,7 +957,7 @@ EXPORT_SYMBOL(VBoxGuestIDCCall);
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
 
 /** log and dbg_log parameter setter. */
-static int vboxguestLinuxParamLogGrpSet(const char *pszValue, struct kernel_param *pParam)
+static int vgdrvLinuxParamLogGrpSet(const char *pszValue, struct kernel_param *pParam)
 {
     if (g_fLoggerCreated)
     {
@@ -968,7 +972,7 @@ static int vboxguestLinuxParamLogGrpSet(const char *pszValue, struct kernel_para
 }
 
 /** log and dbg_log parameter getter. */
-static int vboxguestLinuxParamLogGrpGet(char *pszBuf, struct kernel_param *pParam)
+static int vgdrvLinuxParamLogGrpGet(char *pszBuf, struct kernel_param *pParam)
 {
     PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance();
     *pszBuf = '\0';
@@ -979,7 +983,7 @@ static int vboxguestLinuxParamLogGrpGet(char *pszBuf, struct kernel_param *pPara
 
 
 /** log and dbg_log_flags parameter setter. */
-static int vboxguestLinuxParamLogFlagsSet(const char *pszValue, struct kernel_param *pParam)
+static int vgdrvLinuxParamLogFlagsSet(const char *pszValue, struct kernel_param *pParam)
 {
     if (g_fLoggerCreated)
     {
@@ -993,7 +997,7 @@ static int vboxguestLinuxParamLogFlagsSet(const char *pszValue, struct kernel_pa
 }
 
 /** log and dbg_log_flags parameter getter. */
-static int vboxguestLinuxParamLogFlagsGet(char *pszBuf, struct kernel_param *pParam)
+static int vgdrvLinuxParamLogFlagsGet(char *pszBuf, struct kernel_param *pParam)
 {
     PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance();
     *pszBuf = '\0';
@@ -1004,7 +1008,7 @@ static int vboxguestLinuxParamLogFlagsGet(char *pszBuf, struct kernel_param *pPa
 
 
 /** log and dbg_log_dest parameter setter. */
-static int vboxguestLinuxParamLogDstSet(const char *pszValue, struct kernel_param *pParam)
+static int vgdrvLinuxParamLogDstSet(const char *pszValue, struct kernel_param *pParam)
 {
     if (g_fLoggerCreated)
     {
@@ -1018,7 +1022,7 @@ static int vboxguestLinuxParamLogDstSet(const char *pszValue, struct kernel_para
 }
 
 /** log and dbg_log_dest parameter getter. */
-static int vboxguestLinuxParamLogDstGet(char *pszBuf, struct kernel_param *pParam)
+static int vgdrvLinuxParamLogDstGet(char *pszBuf, struct kernel_param *pParam)
 {
     PRTLOGGER pLogger = pParam->name[0] == 'd' ? RTLogDefaultInstance() : RTLogRelGetDefaultInstance();
     *pszBuf = '\0';
@@ -1029,7 +1033,7 @@ static int vboxguestLinuxParamLogDstGet(char *pszBuf, struct kernel_param *pPara
 
 
 /** r3_log_to_host parameter setter. */
-static int vboxguestLinuxParamR3LogToHostSet(const char *pszValue, struct kernel_param *pParam)
+static int vgdrvLinuxParamR3LogToHostSet(const char *pszValue, struct kernel_param *pParam)
 {
     if (    pszValue == NULL
         || *pszValue == '\0'
@@ -1047,7 +1051,7 @@ static int vboxguestLinuxParamR3LogToHostSet(const char *pszValue, struct kernel
 }
 
 /** r3_log_to_host parameter getter. */
-static int vboxguestLinuxParamR3LogToHostGet(char *pszBuf, struct kernel_param *pParam)
+static int vgdrvLinuxParamR3LogToHostGet(char *pszBuf, struct kernel_param *pParam)
 {
     strcpy(pszBuf, g_DevExt.fLoggingEnabled ? "enabled" : "disabled");
     return strlen(pszBuf);
@@ -1057,21 +1061,21 @@ static int vboxguestLinuxParamR3LogToHostGet(char *pszBuf, struct kernel_param *
 /*
  * Define module parameters.
  */
-module_param_call(log,            vboxguestLinuxParamLogGrpSet,   vboxguestLinuxParamLogGrpGet,   NULL, 0664);
-module_param_call(log_flags,      vboxguestLinuxParamLogFlagsSet, vboxguestLinuxParamLogFlagsGet, NULL, 0664);
-module_param_call(log_dest,       vboxguestLinuxParamLogDstSet,   vboxguestLinuxParamLogDstGet,   NULL, 0664);
+module_param_call(log,            vgdrvLinuxParamLogGrpSet,   vgdrvLinuxParamLogGrpGet,   NULL, 0664);
+module_param_call(log_flags,      vgdrvLinuxParamLogFlagsSet, vgdrvLinuxParamLogFlagsGet, NULL, 0664);
+module_param_call(log_dest,       vgdrvLinuxParamLogDstSet,   vgdrvLinuxParamLogDstGet,   NULL, 0664);
 # ifdef LOG_ENABLED
-module_param_call(dbg_log,        vboxguestLinuxParamLogGrpSet,   vboxguestLinuxParamLogGrpGet,   NULL, 0664);
-module_param_call(dbg_log_flags,  vboxguestLinuxParamLogFlagsSet, vboxguestLinuxParamLogFlagsGet, NULL, 0664);
-module_param_call(dbg_log_dest,   vboxguestLinuxParamLogDstSet,   vboxguestLinuxParamLogDstGet,   NULL, 0664);
+module_param_call(dbg_log,        vgdrvLinuxParamLogGrpSet,   vgdrvLinuxParamLogGrpGet,   NULL, 0664);
+module_param_call(dbg_log_flags,  vgdrvLinuxParamLogFlagsSet, vgdrvLinuxParamLogFlagsGet, NULL, 0664);
+module_param_call(dbg_log_dest,   vgdrvLinuxParamLogDstSet,   vgdrvLinuxParamLogDstGet,   NULL, 0664);
 # endif
-module_param_call(r3_log_to_host, vboxguestLinuxParamR3LogToHostSet, vboxguestLinuxParamR3LogToHostGet, NULL, 0664);
+module_param_call(r3_log_to_host, vgdrvLinuxParamR3LogToHostSet, vgdrvLinuxParamR3LogToHostGet, NULL, 0664);
 
 #endif /* 2.6.0 and later */
 
 
-module_init(vboxguestLinuxModInit);
-module_exit(vboxguestLinuxModExit);
+module_init(vgdrvLinuxModInit);
+module_exit(vgdrvLinuxModExit);
 
 MODULE_AUTHOR(VBOX_VENDOR);
 MODULE_DESCRIPTION(VBOX_PRODUCT " Guest Additions for Linux Module");
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.cpp
index be22fd3..84d7867 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-os2.cpp
@@ -108,11 +108,11 @@ RT_C_DECLS_END
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static int vboxGuestOS2MapMemory(void);
-static VBOXOSTYPE vboxGuestOS2DetectVersion(void);
+static int vgdrvOS2MapMemory(void);
+static VBOXOSTYPE vgdrvOS2DetectVersion(void);
 
 /* in VBoxGuestA-os2.asm */
-DECLASM(int) VBoxGuestOS2SetIRQ(uint8_t bIRQ);
+DECLASM(int) vgdrvOS2DevHlpSetIRQ(uint8_t bIRQ);
 
 
 /**
@@ -123,9 +123,9 @@ DECLASM(int) VBoxGuestOS2SetIRQ(uint8_t bIRQ);
  * @returns 0 on success, non-zero on failure.
  * @param   pszArgs     Pointer to the device arguments.
  */
-DECLASM(int) VBoxGuestOS2Init(const char *pszArgs)
+DECLASM(int) vgdrvOS2Init(const char *pszArgs)
 {
-    Log(("VBoxGuestOS2Init: pszArgs='%s' MMIO=0x%RX32 IOPort=0x%RX16 Int=%#x Bus=%#x Dev=%#x Fun=%d\n",
+    Log(("vgdrvOS2Init: pszArgs='%s' MMIO=0x%RX32 IOPort=0x%RX16 Int=%#x Bus=%#x Dev=%#x Fun=%d\n",
          pszArgs, g_PhysMMIOBase, g_IOPortBase, g_bInterruptLine, g_bPciBusNo, g_bPciDevFunNo >> 3, g_bPciDevFunNo & 7));
 
     /*
@@ -142,20 +142,20 @@ DECLASM(int) VBoxGuestOS2Init(const char *pszArgs)
         /*
          * Map the MMIO memory if found.
          */
-        rc = vboxGuestOS2MapMemory();
+        rc = vgdrvOS2MapMemory();
         if (RT_SUCCESS(rc))
         {
             /*
              * Initialize the device extension.
              */
             if (g_MemMapMMIO != NIL_RTR0MEMOBJ)
-                rc = VbgdCommonInitDevExt(&g_DevExt, g_IOPortBase,
-                                          RTR0MemObjAddress(g_MemMapMMIO),
-                                          RTR0MemObjSize(g_MemMapMMIO),
-                                          vboxGuestOS2DetectVersion(),
-                                          0);
+                rc = VGDrvCommonInitDevExt(&g_DevExt, g_IOPortBase,
+                                           RTR0MemObjAddress(g_MemMapMMIO),
+                                           RTR0MemObjSize(g_MemMapMMIO),
+                                           vgdrvOS2DetectVersion(),
+                                           0);
             else
-                rc = VbgdCommonInitDevExt(&g_DevExt, g_IOPortBase, NULL, 0, vboxGuestOS2DetectVersion(), 0);
+                rc = VGDrvCommonInitDevExt(&g_DevExt, g_IOPortBase, NULL, 0, vgdrvOS2DetectVersion(), 0);
             if (RT_SUCCESS(rc))
             {
                 /*
@@ -169,10 +169,10 @@ DECLASM(int) VBoxGuestOS2Init(const char *pszArgs)
                      */
                     if (g_bInterruptLine)
                     {
-                        rc = VBoxGuestOS2SetIRQ(g_bInterruptLine);
+                        rc = vgdrvOS2DevHlpSetIRQ(g_bInterruptLine);
                         if (rc)
                         {
-                            Log(("VBoxGuestOS2SetIRQ(%d) -> %d\n", g_bInterruptLine, rc));
+                            Log(("vgdrvOS2DevHlpSetIRQ(%d) -> %d\n", g_bInterruptLine, rc));
                             rc = RTErrConvertFromOS2(rc);
                         }
                     }
@@ -189,7 +189,7 @@ DECLASM(int) VBoxGuestOS2Init(const char *pszArgs)
                                    "Copyright (C) 2008-" VBOX_C_YEAR " " VBOX_VENDOR "\r\n");
                             g_cchInitText = strlen(&g_szInitText[0]);
                         }
-                        Log(("VBoxGuestOS2Init: Successfully loaded\n%s", g_szInitText));
+                        Log(("vgdrvOS2Init: Successfully loaded\n%s", g_szInitText));
                         return VINF_SUCCESS;
                     }
 
@@ -198,10 +198,10 @@ DECLASM(int) VBoxGuestOS2Init(const char *pszArgs)
                 }
                 else
                     g_cchInitText = RTStrPrintf(&g_szInitText[0], g_cchInitTextMax, "VBoxGuest.sys: RTSpinlockCreate failed, rc=%Rrc\n", rc);
-                VbgdCommonDeleteDevExt(&g_DevExt);
+                VGDrvCommonDeleteDevExt(&g_DevExt);
             }
             else
-                g_cchInitText = RTStrPrintf(&g_szInitText[0], g_cchInitTextMax, "VBoxGuest.sys: VBoxGuestOS2InitDevExt failed, rc=%Rrc\n", rc);
+                g_cchInitText = RTStrPrintf(&g_szInitText[0], g_cchInitTextMax, "VBoxGuest.sys: vgdrvOS2InitDevExt failed, rc=%Rrc\n", rc);
 
             int rc2 = RTR0MemObjFree(g_MemObjMMIO, true /* fFreeMappings */); AssertRC(rc2);
             g_MemObjMMIO = g_MemMapMMIO = NIL_RTR0MEMOBJ;
@@ -213,7 +213,7 @@ DECLASM(int) VBoxGuestOS2Init(const char *pszArgs)
     else
         g_cchInitText = RTStrPrintf(&g_szInitText[0], g_cchInitTextMax, "VBoxGuest.sys: RTR0Init failed, rc=%Rrc\n", rc);
 
-    RTLogBackdoorPrintf("VBoxGuestOS2Init: failed rc=%Rrc - %s", rc, &g_szInitText[0]);
+    RTLogBackdoorPrintf("vgdrvOS2Init: failed rc=%Rrc - %s", rc, &g_szInitText[0]);
     return rc;
 }
 
@@ -223,10 +223,8 @@ DECLASM(int) VBoxGuestOS2Init(const char *pszArgs)
  *
  * @returns VBox status code.
  * @retval  VERR_VERSION_MISMATCH       The VMMDev memory didn't meet our expectations.
- *
- * @param   pDevExt     The device extension.
  */
-static int vboxGuestOS2MapMemory(void)
+static int vgdrvOS2MapMemory(void)
 {
     const RTCCPHYS PhysMMIOBase = g_PhysMMIOBase;
 
@@ -255,8 +253,7 @@ static int vboxGuestOS2MapMemory(void)
     }
     if (RT_FAILURE(rc))
     {
-        Log(("vboxGuestOS2MapMemory: RTR0MemObjEnterPhys(,%RCp,%zx) -> %Rrc\n",
-             PhysMMIOBase, cb, rc));
+        Log(("vgdrvOS2MapMemory: RTR0MemObjEnterPhys(,%RCp,%zx) -> %Rrc\n", PhysMMIOBase, cb, rc));
         return rc;
     }
 
@@ -268,8 +265,7 @@ static int vboxGuestOS2MapMemory(void)
      * And second, because PGM doesn't necessarily respect the cache/writethru bits
      * anyway for normal RAM.
      */
-    rc = RTR0MemObjMapKernel(&g_MemMapMMIO, g_MemObjMMIO, (void *)-1, 0,
-                             RTMEM_PROT_READ | RTMEM_PROT_WRITE);
+    rc = RTR0MemObjMapKernel(&g_MemMapMMIO, g_MemObjMMIO, (void *)-1, 0, RTMEM_PROT_READ | RTMEM_PROT_WRITE);
     if (RT_SUCCESS(rc))
     {
         /*
@@ -287,7 +283,7 @@ static int vboxGuestOS2MapMemory(void)
             if (RT_ALIGN_32(pVMMDev->u32Size, PAGE_SIZE) == cb)
                 return VINF_SUCCESS;
 
-            Log(("vboxGuestOS2MapMemory: Actual size %#RX32 (tried %#zx)\n", pVMMDev->u32Size, cb));
+            Log(("vgdrvOS2MapMemory: Actual size %#RX32 (tried %#zx)\n", pVMMDev->u32Size, cb));
             cb = RT_ALIGN_32(pVMMDev->u32Size, PAGE_SIZE);
 
             rc = RTR0MemObjFree(g_MemObjMMIO, true); AssertRC(rc);
@@ -296,28 +292,24 @@ static int vboxGuestOS2MapMemory(void)
             rc = RTR0MemObjEnterPhys(&g_MemObjMMIO, PhysMMIOBase, cb, RTMEM_CACHE_POLICY_DONT_CARE);
             if (RT_SUCCESS(rc))
             {
-                rc = RTR0MemObjMapKernel(&g_MemMapMMIO, g_MemObjMMIO, (void *)-1, 0,
-                                         RTMEM_PROT_READ | RTMEM_PROT_WRITE);
+                rc = RTR0MemObjMapKernel(&g_MemMapMMIO, g_MemObjMMIO, (void *)-1, 0, RTMEM_PROT_READ | RTMEM_PROT_WRITE);
                 if (RT_SUCCESS(rc))
                     return VINF_SUCCESS;
 
-                Log(("vboxGuestOS2MapMemory: RTR0MemObjMapKernel [%RCp,%zx] -> %Rrc (2nd)\n",
-                     PhysMMIOBase, cb, rc));
+                Log(("vgdrvOS2MapMemory: RTR0MemObjMapKernel [%RCp,%zx] -> %Rrc (2nd)\n", PhysMMIOBase, cb, rc));
             }
             else
-                Log(("vboxGuestOS2MapMemory: RTR0MemObjEnterPhys(,%RCp,%zx) -> %Rrc (2nd)\n",
-                     PhysMMIOBase, cb, rc));
+                Log(("vgdrvOS2MapMemory: RTR0MemObjEnterPhys(,%RCp,%zx) -> %Rrc (2nd)\n", PhysMMIOBase, cb, rc));
         }
         else
         {
             rc = VERR_VERSION_MISMATCH;
-            LogRel(("vboxGuestOS2MapMemory: Bogus VMMDev memory; u32Version=%RX32 (expected %RX32) u32Size=%RX32\n",
+            LogRel(("vgdrvOS2MapMemory: Bogus VMMDev memory; u32Version=%RX32 (expected %RX32) u32Size=%RX32\n",
                     pVMMDev->u32Version, VMMDEV_MEMORY_VERSION, pVMMDev->u32Size));
         }
     }
     else
-        Log(("vboxGuestOS2MapMemory: RTR0MemObjMapKernel [%RCp,%zx] -> %Rrc\n",
-             PhysMMIOBase, cb, rc));
+        Log(("vgdrvOS2MapMemory: RTR0MemObjMapKernel [%RCp,%zx] -> %Rrc\n", PhysMMIOBase, cb, rc));
 
     int rc2 = RTR0MemObjFree(g_MemObjMMIO, true /* fFreeMappings */); AssertRC(rc2);
     g_MemObjMMIO = g_MemMapMMIO = NIL_RTR0MEMOBJ;
@@ -326,11 +318,11 @@ static int vboxGuestOS2MapMemory(void)
 
 
 /**
- * Called fromn VBoxGuestOS2Init to determine which OS/2 version this is.
+ * Called fromn vgdrvOS2Init to determine which OS/2 version this is.
  *
  * @returns VBox OS/2 type.
  */
-static VBOXOSTYPE vboxGuestOS2DetectVersion(void)
+static VBOXOSTYPE vgdrvOS2DetectVersion(void)
 {
     VBOXOSTYPE enmOSType = VBOXOSTYPE_OS2;
 
@@ -350,7 +342,7 @@ static VBOXOSTYPE vboxGuestOS2DetectVersion(void)
 }
 
 
-DECLASM(int) VBoxGuestOS2Open(uint16_t sfn)
+DECLASM(int) vgdrvOS2Open(uint16_t sfn)
 {
     int                 rc;
     PVBOXGUESTSESSION   pSession;
@@ -358,7 +350,7 @@ DECLASM(int) VBoxGuestOS2Open(uint16_t sfn)
     /*
      * Create a new session.
      */
-    rc = VbgdCommonCreateUserSession(&g_DevExt, &pSession);
+    rc = VGDrvCommonCreateUserSession(&g_DevExt, &pSession);
     if (RT_SUCCESS(rc))
     {
         pSession->sfn = sfn;
@@ -373,14 +365,14 @@ DECLASM(int) VBoxGuestOS2Open(uint16_t sfn)
         RTSpinlockRelease(g_Spinlock);
     }
 
-    Log(("VBoxGuestOS2Open: g_DevExt=%p pSession=%p rc=%d pid=%d\n", &g_DevExt, pSession, rc, (int)RTProcSelf()));
+    Log(("vgdrvOS2Open: g_DevExt=%p pSession=%p rc=%d pid=%d\n", &g_DevExt, pSession, rc, (int)RTProcSelf()));
     return rc;
 }
 
 
-DECLASM(int) VBoxGuestOS2Close(uint16_t sfn)
+DECLASM(int) vgdrvOS2Close(uint16_t sfn)
 {
-    Log(("VBoxGuestOS2Close: pid=%d sfn=%d\n", (int)RTProcSelf(), sfn));
+    Log(("vgdrvOS2Close: pid=%d sfn=%d\n", (int)RTProcSelf(), sfn));
 
     /*
      * Remove from the hash table.
@@ -429,12 +421,12 @@ DECLASM(int) VBoxGuestOS2Close(uint16_t sfn)
     /*
      * Close the session.
      */
-    VbgdCommonCloseSession(&g_DevExt, pSession);
+    VGDrvCommonCloseSession(&g_DevExt, pSession);
     return 0;
 }
 
 
-DECLASM(int) VBoxGuestOS2IOCtlFast(uint16_t sfn, uint8_t iFunction, int32_t *prc)
+DECLASM(int) vgdrvOS2IOCtlFast(uint16_t sfn, uint8_t iFunction, int32_t *prc)
 {
     /*
      * Find the session.
@@ -462,7 +454,7 @@ DECLASM(int) VBoxGuestOS2IOCtlFast(uint16_t sfn, uint8_t iFunction, int32_t *prc
     /*
      * Dispatch the fast IOCtl.
      */
-    *prc = VbgdCommonIoCtlFast(iFunction, &g_DevExt, pSession);
+    *prc = VGDrvCommonIoCtlFast(iFunction, &g_DevExt, pSession);
     return 0;
 }
 
@@ -483,7 +475,7 @@ DECLASM(int) VBoxGuestOS2IOCtlFast(uint16_t sfn, uint8_t iFunction, int32_t *prc
  *
  * @remark  This is called from the 16-bit thunker as well as directly from the 32-bit clients.
  */
-DECLASM(int) VBoxGuestOS2IDCService(uint32_t u32Session, unsigned iFunction, void *pvData, size_t cbData, size_t *pcbDataReturned)
+DECLASM(int) VGDrvOS2IDCService(uint32_t u32Session, unsigned iFunction, void *pvData, size_t cbData, size_t *pcbDataReturned)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)u32Session;
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
@@ -494,12 +486,12 @@ DECLASM(int) VBoxGuestOS2IDCService(uint32_t u32Session, unsigned iFunction, voi
     switch (iFunction)
     {
         default:
-            rc = VbgdCommonIoCtl(iFunction, &g_DevExt, pSession, pvData, cbData, pcbDataReturned);
+            rc = VGDrvCommonIoCtl(iFunction, &g_DevExt, pSession, pvData, cbData, pcbDataReturned);
             break;
 
         case VBOXGUEST_IOCTL_OS2_IDC_DISCONNECT:
             pSession->sfn = 0;
-            VbgdCommonCloseSession(&g_DevExt, pSession);
+            VGDrvCommonCloseSession(&g_DevExt, pSession);
             rc = VINF_SUCCESS;
             break;
     }
@@ -512,10 +504,10 @@ DECLASM(int) VBoxGuestOS2IDCService(uint32_t u32Session, unsigned iFunction, voi
  *
  * @returns Pointer to the session.
  */
-DECLASM(PVBOXGUESTSESSION) VBoxGuestOS2IDCConnect(void)
+DECLASM(PVBOXGUESTSESSION) vgdrvOS2IDCConnect(void)
 {
     PVBOXGUESTSESSION pSession;
-    int rc = VbgdCommonCreateKernelSession(&g_DevExt, &pSession);
+    int rc = VGDrvCommonCreateKernelSession(&g_DevExt, &pSession);
     if (RT_SUCCESS(rc))
     {
         pSession->sfn = 0xffff;
@@ -525,7 +517,8 @@ DECLASM(PVBOXGUESTSESSION) VBoxGuestOS2IDCConnect(void)
 }
 
 
-DECLASM(int) VBoxGuestOS2IOCtl(uint16_t sfn, uint8_t iCat, uint8_t iFunction, void *pvParm, void *pvData, uint16_t *pcbParm, uint16_t *pcbData)
+DECLASM(int) vgdrvOS2IOCtl(uint16_t sfn, uint8_t iCat, uint8_t iFunction, void *pvParm, void *pvData,
+                           uint16_t *pcbParm, uint16_t *pcbData)
 {
     /*
      * Find the session.
@@ -561,7 +554,7 @@ DECLASM(int) VBoxGuestOS2IOCtl(uint16_t sfn, uint8_t iCat, uint8_t iFunction, vo
      */
     if (RT_LIKELY(iCat == VBOXGUEST_IOCTL_CATEGORY))
     {
-        Log(("VBoxGuestOS2IOCtl: pSession=%p iFunction=%#x pvParm=%p pvData=%p *pcbParm=%d *pcbData=%d\n", pSession, iFunction, pvParm, pvData, *pcbParm, *pcbData));
+        Log(("vgdrvOS2IOCtl: pSession=%p iFunction=%#x pvParm=%p pvData=%p *pcbParm=%d *pcbData=%d\n", pSession, iFunction, pvParm, pvData, *pcbParm, *pcbData));
         Assert(pvParm || !*pcbData);
         Assert(pvData);
         Assert(*pcbData == sizeof(int32_t)); /* the return code */
@@ -597,7 +590,7 @@ DECLASM(int) VBoxGuestOS2IOCtl(uint16_t sfn, uint8_t iCat, uint8_t iFunction, vo
          * Process the IOCtl.
          */
         size_t cbDataReturned;
-        rc = VbgdCommonIoCtl(iFunction, &g_DevExt, pSession, pvParm, *pcbParm, &cbDataReturned);
+        rc = VGDrvCommonIoCtl(iFunction, &g_DevExt, pSession, pvParm, *pcbParm, &cbDataReturned);
 
         /*
          * Unlock the buffers.
@@ -620,7 +613,7 @@ DECLASM(int) VBoxGuestOS2IOCtl(uint16_t sfn, uint8_t iCat, uint8_t iFunction, vo
         AssertMsgReturn(!rc, ("KernCopyOut(%p, %p, sizeof(int32_t)) -> %d\n", pvData, &rc, rc), VERR_LOCK_FAILED);
 #endif
 
-        Log2(("VBoxGuestOS2IOCtl: returns VINF_SUCCESS / %d\n", rc));
+        Log2(("vgdrvOS2IOCtl: returns VINF_SUCCESS / %d\n", rc));
         return VINF_SUCCESS;
     }
     return VERR_NOT_SUPPORTED;
@@ -632,15 +625,15 @@ DECLASM(int) VBoxGuestOS2IOCtl(uint16_t sfn, uint8_t iCat, uint8_t iFunction, vo
  *
  * @returns true if it's our interrupt, false it isn't.
  */
-DECLASM(bool) VBoxGuestOS2ISR(void)
+DECLASM(bool) vgdrvOS2ISR(void)
 {
-    Log(("VBoxGuestOS2ISR\n"));
+    Log(("vgdrvOS2ISR\n"));
 
-    return VbgdCommonISR(&g_DevExt);
+    return VGDrvCommonISR(&g_DevExt);
 }
 
 
-void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
+void VGDrvNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
 {
     /* No polling on OS/2 */
     NOREF(pDevExt);
@@ -657,7 +650,7 @@ void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
  * @param   pachChars   Pointer to an array of utf-8 characters.
  * @param   cbChars     Number of bytes in the character array pointed to by pachChars.
  */
-static DECLCALLBACK(size_t) vboxGuestNativeLogOutput(void *pvArg, const char *pachChars, size_t cbChars)
+static DECLCALLBACK(size_t) vgdrvOS2LogOutput(void *pvArg, const char *pachChars, size_t cbChars)
 {
     size_t cchWritten = 0;
     while (cbChars-- > 0)
@@ -685,7 +678,7 @@ int SUPR0Printf(const char *pszFormat, ...)
 #endif
 
     va_start(va, pszFormat);
-    int cch = RTLogFormatV(vboxGuestNativeLogOutput, NULL, pszFormat, va);
+    int cch = RTLogFormatV(vgdrvOS2LogOutput, NULL, pszFormat, va);
     va_end(va);
 
     return cch;
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c
index 0db5cf3..25d0581 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c
@@ -64,21 +64,21 @@
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static int VBoxGuestSolarisOpen(dev_t *pDev, int fFlag, int fType, cred_t *pCred);
-static int VBoxGuestSolarisClose(dev_t Dev, int fFlag, int fType, cred_t *pCred);
-static int VBoxGuestSolarisRead(dev_t Dev, struct uio *pUio, cred_t *pCred);
-static int VBoxGuestSolarisWrite(dev_t Dev, struct uio *pUio, cred_t *pCred);
-static int VBoxGuestSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, cred_t *pCred, int *pVal);
-static int VBoxGuestSolarisPoll(dev_t Dev, short fEvents, int fAnyYet, short *pReqEvents, struct pollhead **ppPollHead);
+static int vgdrvSolarisOpen(dev_t *pDev, int fFlag, int fType, cred_t *pCred);
+static int vgdrvSolarisClose(dev_t Dev, int fFlag, int fType, cred_t *pCred);
+static int vgdrvSolarisRead(dev_t Dev, struct uio *pUio, cred_t *pCred);
+static int vgdrvSolarisWrite(dev_t Dev, struct uio *pUio, cred_t *pCred);
+static int vgdrvSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, cred_t *pCred, int *pVal);
+static int vgdrvSolarisPoll(dev_t Dev, short fEvents, int fAnyYet, short *pReqEvents, struct pollhead **ppPollHead);
 
-static int VBoxGuestSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pArg, void **ppResult);
-static int VBoxGuestSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd);
-static int VBoxGuestSolarisDetach(dev_info_t *pDip, ddi_detach_cmd_t enmCmd);
-static int VBoxGuestSolarisQuiesce(dev_info_t *pDip);
+static int vgdrvSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pArg, void **ppResult);
+static int vgdrvSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd);
+static int vgdrvSolarisDetach(dev_info_t *pDip, ddi_detach_cmd_t enmCmd);
+static int vgdrvSolarisQuiesce(dev_info_t *pDip);
 
-static int VBoxGuestSolarisAddIRQ(dev_info_t *pDip);
-static void VBoxGuestSolarisRemoveIRQ(dev_info_t *pDip);
-static uint_t VBoxGuestSolarisISR(caddr_t Arg);
+static int vgdrvSolarisAddIRQ(dev_info_t *pDip);
+static void vgdrvSolarisRemoveIRQ(dev_info_t *pDip);
+static uint_t vgdrvSolarisISR(caddr_t Arg);
 
 
 /*********************************************************************************************************************************
@@ -87,20 +87,20 @@ static uint_t VBoxGuestSolarisISR(caddr_t Arg);
 /**
  * cb_ops: for drivers that support char/block entry points
  */
-static struct cb_ops g_VBoxGuestSolarisCbOps =
+static struct cb_ops g_vgdrvSolarisCbOps =
 {
-    VBoxGuestSolarisOpen,
-    VBoxGuestSolarisClose,
+    vgdrvSolarisOpen,
+    vgdrvSolarisClose,
     nodev,                  /* b strategy */
     nodev,                  /* b dump */
     nodev,                  /* b print */
-    VBoxGuestSolarisRead,
-    VBoxGuestSolarisWrite,
-    VBoxGuestSolarisIOCtl,
+    vgdrvSolarisRead,
+    vgdrvSolarisWrite,
+    vgdrvSolarisIOCtl,
     nodev,                  /* c devmap */
     nodev,                  /* c mmap */
     nodev,                  /* c segmap */
-    VBoxGuestSolarisPoll,
+    vgdrvSolarisPoll,
     ddi_prop_op,            /* property ops */
     NULL,                   /* streamtab  */
     D_NEW | D_MP,           /* compat. flag */
@@ -110,39 +110,39 @@ static struct cb_ops g_VBoxGuestSolarisCbOps =
 /**
  * dev_ops: for driver device operations
  */
-static struct dev_ops g_VBoxGuestSolarisDevOps =
+static struct dev_ops g_vgdrvSolarisDevOps =
 {
     DEVO_REV,               /* driver build revision */
     0,                      /* ref count */
-    VBoxGuestSolarisGetInfo,
+    vgdrvSolarisGetInfo,
     nulldev,                /* identify */
     nulldev,                /* probe */
-    VBoxGuestSolarisAttach,
-    VBoxGuestSolarisDetach,
+    vgdrvSolarisAttach,
+    vgdrvSolarisDetach,
     nodev,                  /* reset */
-    &g_VBoxGuestSolarisCbOps,
+    &g_vgdrvSolarisCbOps,
     (struct bus_ops *)0,
     nodev,                  /* power */
-    VBoxGuestSolarisQuiesce
+    vgdrvSolarisQuiesce
 };
 
 /**
  * modldrv: export driver specifics to the kernel
  */
-static struct modldrv g_VBoxGuestSolarisModule =
+static struct modldrv g_vgdrvSolarisModule =
 {
     &mod_driverops,         /* extern from kernel */
     DEVICE_DESC " " VBOX_VERSION_STRING "r" RT_XSTR(VBOX_SVN_REV),
-    &g_VBoxGuestSolarisDevOps
+    &g_vgdrvSolarisDevOps
 };
 
 /**
  * modlinkage: export install/remove/info to the kernel
  */
-static struct modlinkage g_VBoxGuestSolarisModLinkage =
+static struct modlinkage g_vgdrvSolarisModLinkage =
 {
     MODREV_1,               /* loadable module system revision */
-    &g_VBoxGuestSolarisModule,
+    &g_vgdrvSolarisModule,
     NULL                    /* terminate array of linkage structures */
 };
 
@@ -164,7 +164,7 @@ typedef struct
 /** Device handle (we support only one instance). */
 static dev_info_t          *g_pDip = NULL;
 /** Opaque pointer to file-descriptor states */
-static void                *g_pVBoxGuestSolarisState = NULL;
+static void                *g_pvgdrvSolarisState = NULL;
 /** Device extention & session data association structure. */
 static VBOXGUESTDEVEXT      g_DevExt;
 /** IO port handle. */
@@ -218,18 +218,18 @@ int _init(void)
         /*
          * Prevent module autounloading.
          */
-        modctl_t *pModCtl = mod_getctl(&g_VBoxGuestSolarisModLinkage);
+        modctl_t *pModCtl = mod_getctl(&g_vgdrvSolarisModLinkage);
         if (pModCtl)
             pModCtl->mod_loadflags |= MOD_NOAUTOUNLOAD;
         else
-            LogRel((DEVICE_NAME ":failed to disable autounloading!\n"));
+            LogRel((DEVICE_NAME ": failed to disable autounloading!\n"));
 
-        rc = ddi_soft_state_init(&g_pVBoxGuestSolarisState, sizeof(vboxguest_state_t), 1);
+        rc = ddi_soft_state_init(&g_pvgdrvSolarisState, sizeof(vboxguest_state_t), 1);
         if (!rc)
         {
-            rc = mod_install(&g_VBoxGuestSolarisModLinkage);
+            rc = mod_install(&g_vgdrvSolarisModLinkage);
             if (rc)
-                ddi_soft_state_fini(&g_pVBoxGuestSolarisState);
+                ddi_soft_state_fini(&g_pvgdrvSolarisState);
         }
     }
     else
@@ -245,9 +245,9 @@ int _init(void)
 int _fini(void)
 {
     LogFlow((DEVICE_NAME ":_fini\n"));
-    int rc = mod_remove(&g_VBoxGuestSolarisModLinkage);
+    int rc = mod_remove(&g_vgdrvSolarisModLinkage);
     if (!rc)
-        ddi_soft_state_fini(&g_pVBoxGuestSolarisState);
+        ddi_soft_state_fini(&g_pvgdrvSolarisState);
 
     RTLogDestroy(RTLogRelSetDefaultInstance(NULL));
     RTLogDestroy(RTLogSetDefaultInstance(NULL));
@@ -264,7 +264,7 @@ int _fini(void)
 int _info(struct modinfo *pModInfo)
 {
     LogFlow((DEVICE_NAME ":_info\n"));
-    return mod_info(&g_VBoxGuestSolarisModLinkage, pModInfo);
+    return mod_info(&g_vgdrvSolarisModLinkage, pModInfo);
 }
 
 
@@ -276,16 +276,16 @@ int _info(struct modinfo *pModInfo)
  *
  * @return  corresponding solaris error code.
  */
-static int VBoxGuestSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd)
+static int vgdrvSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd)
 {
-    LogFlow((DEVICE_NAME "::Attach\n"));
+    LogFlow(("vgdrvSolarisAttach:\n"));
     switch (enmCmd)
     {
         case DDI_ATTACH:
         {
             if (g_pDip)
             {
-                LogRel((DEVICE_NAME "::Attach: Only one instance supported.\n"));
+                LogRel(("vgdrvSolarisAttach: Only one instance supported.\n"));
                 return DDI_FAILURE;
             }
 
@@ -324,19 +324,19 @@ static int VBoxGuestSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd)
                             /*
                              * Add IRQ of VMMDev.
                              */
-                            rc = VBoxGuestSolarisAddIRQ(pDip);
+                            rc = vgdrvSolarisAddIRQ(pDip);
                             if (rc == DDI_SUCCESS)
                             {
                                 /*
                                  * Call the common device extension initializer.
                                  */
-                                rc = VbgdCommonInitDevExt(&g_DevExt, g_uIOPortBase, g_pMMIOBase, g_cbMMIO,
+                                rc = VGDrvCommonInitDevExt(&g_DevExt, g_uIOPortBase, g_pMMIOBase, g_cbMMIO,
 #if ARCH_BITS == 64
-                                                          VBOXOSTYPE_Solaris_x64,
+                                                           VBOXOSTYPE_Solaris_x64,
 #else
-                                                          VBOXOSTYPE_Solaris,
+                                                           VBOXOSTYPE_Solaris,
 #endif
-                                                          VMMDEV_EVENT_MOUSE_POSITION_CHANGED);
+                                                           VMMDEV_EVENT_MOUSE_POSITION_CHANGED);
                                 if (RT_SUCCESS(rc))
                                 {
                                     rc = ddi_create_minor_node(pDip, DEVICE_NAME, S_IFCHR, instance, DDI_PSEUDO, 0 /* fFlags */);
@@ -348,14 +348,14 @@ static int VBoxGuestSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd)
                                     }
 
                                     LogRel((DEVICE_NAME "::Attach: ddi_create_minor_node failed.\n"));
-                                    VbgdCommonDeleteDevExt(&g_DevExt);
+                                    VGDrvCommonDeleteDevExt(&g_DevExt);
                                 }
                                 else
-                                    LogRel((DEVICE_NAME "::Attach: VbgdCommonInitDevExt failed.\n"));
-                                VBoxGuestSolarisRemoveIRQ(pDip);
+                                    LogRel((DEVICE_NAME "::Attach: VGDrvCommonInitDevExt failed.\n"));
+                                vgdrvSolarisRemoveIRQ(pDip);
                             }
                             else
-                                LogRel((DEVICE_NAME "::Attach: VBoxGuestSolarisAddIRQ failed.\n"));
+                                LogRel((DEVICE_NAME "::Attach: vgdrvSolarisAddIRQ failed.\n"));
                             ddi_regs_map_free(&g_PciMMIOHandle);
                         }
                         else
@@ -394,18 +394,18 @@ static int VBoxGuestSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd)
  *
  * @return  corresponding solaris error code.
  */
-static int VBoxGuestSolarisDetach(dev_info_t *pDip, ddi_detach_cmd_t enmCmd)
+static int vgdrvSolarisDetach(dev_info_t *pDip, ddi_detach_cmd_t enmCmd)
 {
-    LogFlow((DEVICE_NAME "::Detach\n"));
+    LogFlow(("vgdrvSolarisDetach:\n"));
     switch (enmCmd)
     {
         case DDI_DETACH:
         {
-            VBoxGuestSolarisRemoveIRQ(pDip);
+            vgdrvSolarisRemoveIRQ(pDip);
             ddi_regs_map_free(&g_PciIOHandle);
             ddi_regs_map_free(&g_PciMMIOHandle);
             ddi_remove_minor_node(pDip, NULL);
-            VbgdCommonDeleteDevExt(&g_DevExt);
+            VGDrvCommonDeleteDevExt(&g_DevExt);
             g_pDip = NULL;
             return DDI_SUCCESS;
         }
@@ -430,7 +430,7 @@ static int VBoxGuestSolarisDetach(dev_info_t *pDip, ddi_detach_cmd_t enmCmd)
  *
  * @return  corresponding solaris error code.
  */
-static int VBoxGuestSolarisQuiesce(dev_info_t *pDip)
+static int vgdrvSolarisQuiesce(dev_info_t *pDip)
 {
     for (int i = 0; i < g_cIntrAllocated; i++)
     {
@@ -455,9 +455,9 @@ static int VBoxGuestSolarisQuiesce(dev_info_t *pDip)
  *
  * @return  corresponding solaris error code.
  */
-static int VBoxGuestSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pvArg, void **ppvResult)
+static int vgdrvSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pvArg, void **ppvResult)
 {
-    LogFlow((DEVICE_NAME "::GetInfo\n"));
+    LogFlow(("vgdrvSolarisGetInfo:\n"));
 
     int rc = DDI_SUCCESS;
     switch (enmCmd)
@@ -483,12 +483,12 @@ static int VBoxGuestSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void
 /**
  * User context entry points
  */
-static int VBoxGuestSolarisOpen(dev_t *pDev, int fFlag, int fType, cred_t *pCred)
+static int vgdrvSolarisOpen(dev_t *pDev, int fFlag, int fType, cred_t *pCred)
 {
     int                 rc;
     PVBOXGUESTSESSION   pSession = NULL;
 
-    LogFlow((DEVICE_NAME "::Open\n"));
+    LogFlow(("vgdrvSolarisOpen:\n"));
 
     /*
      * Verify we are being opened as a character device.
@@ -500,76 +500,76 @@ static int VBoxGuestSolarisOpen(dev_t *pDev, int fFlag, int fType, cred_t *pCred
     unsigned iOpenInstance;
     for (iOpenInstance = 0; iOpenInstance < 4096; iOpenInstance++)
     {
-        if (    !ddi_get_soft_state(g_pVBoxGuestSolarisState, iOpenInstance) /* faster */
-            &&  ddi_soft_state_zalloc(g_pVBoxGuestSolarisState, iOpenInstance) == DDI_SUCCESS)
+        if (    !ddi_get_soft_state(g_pvgdrvSolarisState, iOpenInstance) /* faster */
+            &&  ddi_soft_state_zalloc(g_pvgdrvSolarisState, iOpenInstance) == DDI_SUCCESS)
         {
-            pState = ddi_get_soft_state(g_pVBoxGuestSolarisState, iOpenInstance);
+            pState = ddi_get_soft_state(g_pvgdrvSolarisState, iOpenInstance);
             break;
         }
     }
     if (!pState)
     {
-        Log((DEVICE_NAME "::Open: too many open instances."));
+        Log(("vgdrvSolarisOpen: too many open instances."));
         return ENXIO;
     }
 
     /*
      * Create a new session.
      */
-    rc = VbgdCommonCreateUserSession(&g_DevExt, &pSession);
+    rc = VGDrvCommonCreateUserSession(&g_DevExt, &pSession);
     if (RT_SUCCESS(rc))
     {
         pState->pvProcRef = proc_ref();
         pState->pSession = pSession;
         *pDev = makedevice(getmajor(*pDev), iOpenInstance);
-        Log((DEVICE_NAME "::Open: pSession=%p pState=%p pid=%d\n", pSession, pState, (int)RTProcSelf()));
+        Log(("vgdrvSolarisOpen: pSession=%p pState=%p pid=%d\n", pSession, pState, (int)RTProcSelf()));
         return 0;
     }
 
     /* Failed, clean up. */
-    ddi_soft_state_free(g_pVBoxGuestSolarisState, iOpenInstance);
+    ddi_soft_state_free(g_pvgdrvSolarisState, iOpenInstance);
 
-    LogRel((DEVICE_NAME "::Open: VbgdCommonCreateUserSession failed. rc=%d\n", rc));
+    LogRel((DEVICE_NAME "::Open: VGDrvCommonCreateUserSession failed. rc=%d\n", rc));
     return EFAULT;
 }
 
 
-static int VBoxGuestSolarisClose(dev_t Dev, int flag, int fType, cred_t *pCred)
+static int vgdrvSolarisClose(dev_t Dev, int flag, int fType, cred_t *pCred)
 {
-    LogFlow((DEVICE_NAME "::Close pid=%d\n", (int)RTProcSelf()));
+    LogFlow(("vgdrvSolarisClose: pid=%d\n", (int)RTProcSelf()));
 
     PVBOXGUESTSESSION pSession = NULL;
-    vboxguest_state_t *pState = ddi_get_soft_state(g_pVBoxGuestSolarisState, getminor(Dev));
+    vboxguest_state_t *pState = ddi_get_soft_state(g_pvgdrvSolarisState, getminor(Dev));
     if (!pState)
     {
-        Log((DEVICE_NAME "::Close: failed to get pState.\n"));
+        Log(("vgdrvSolarisClose: failed to get pState.\n"));
         return EFAULT;
     }
 
     proc_unref(pState->pvProcRef);
     pSession = pState->pSession;
     pState->pSession = NULL;
-    Log((DEVICE_NAME "::Close: pSession=%p pState=%p\n", pSession, pState));
-    ddi_soft_state_free(g_pVBoxGuestSolarisState, getminor(Dev));
+    Log(("vgdrvSolarisClose: pSession=%p pState=%p\n", pSession, pState));
+    ddi_soft_state_free(g_pvgdrvSolarisState, getminor(Dev));
     if (!pSession)
     {
-        Log((DEVICE_NAME "::Close: failed to get pSession.\n"));
+        Log(("vgdrvSolarisClose: failed to get pSession.\n"));
         return EFAULT;
     }
 
     /*
      * Close the session.
      */
-    VbgdCommonCloseSession(&g_DevExt, pSession);
+    VGDrvCommonCloseSession(&g_DevExt, pSession);
     return 0;
 }
 
 
-static int VBoxGuestSolarisRead(dev_t Dev, struct uio *pUio, cred_t *pCred)
+static int vgdrvSolarisRead(dev_t Dev, struct uio *pUio, cred_t *pCred)
 {
     LogFlow((DEVICE_NAME "::Read\n"));
 
-    vboxguest_state_t *pState = ddi_get_soft_state(g_pVBoxGuestSolarisState, getminor(Dev));
+    vboxguest_state_t *pState = ddi_get_soft_state(g_pvgdrvSolarisState, getminor(Dev));
     if (!pState)
     {
         Log((DEVICE_NAME "::Close: failed to get pState.\n"));
@@ -585,9 +585,9 @@ static int VBoxGuestSolarisRead(dev_t Dev, struct uio *pUio, cred_t *pCred)
 }
 
 
-static int VBoxGuestSolarisWrite(dev_t Dev, struct uio *pUio, cred_t *pCred)
+static int vgdrvSolarisWrite(dev_t Dev, struct uio *pUio, cred_t *pCred)
 {
-    LogFlow((DEVICE_NAME "::Write\n"));
+    LogFlow(("vgdrvSolarisWrite:\n"));
     return 0;
 }
 
@@ -613,14 +613,14 @@ static int VBoxGuestSolarisWrite(dev_t Dev, struct uio *pUio, cred_t *pCred)
  *
  * @return  corresponding solaris error code.
  */
-static int VBoxGuestSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, cred_t *pCred, int *pVal)
+static int vgdrvSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, cred_t *pCred, int *pVal)
 {
-    LogFlow((DEVICE_NAME ":VBoxGuestSolarisIOCtl\n"));
+    LogFlow(("vgdrvSolarisIOCtl: iCmd=%#x\n", Cmd));
 
     /*
      * Get the session from the soft state item.
      */
-    vboxguest_state_t *pState = ddi_get_soft_state(g_pVBoxGuestSolarisState, getminor(Dev));
+    vboxguest_state_t *pState = ddi_get_soft_state(g_pvgdrvSolarisState, getminor(Dev));
     if (!pState)
     {
         LogRel((DEVICE_NAME "::IOCtl: no state data for %d\n", getminor(Dev)));
@@ -689,13 +689,13 @@ static int VBoxGuestSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, cr
             return EINVAL;
         }
     }
-    Log((DEVICE_NAME "::IOCtl: pSession=%p pid=%d.\n", pSession, (int)RTProcSelf()));
+    Log(("vgdrvSolarisIOCtl: pSession=%p pid=%d.\n", pSession, (int)RTProcSelf()));
 
     /*
      * Process the IOCtl.
      */
     size_t cbDataReturned = 0;
-    rc = VbgdCommonIoCtl(Cmd, &g_DevExt, pSession, pvBuf, ReqWrap.cbData, &cbDataReturned);
+    rc = VGDrvCommonIoCtl(Cmd, &g_DevExt, pSession, pvBuf, ReqWrap.cbData, &cbDataReturned);
     if (RT_SUCCESS(rc))
     {
         rc = 0;
@@ -722,7 +722,7 @@ static int VBoxGuestSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, cr
          * VBOXGUEST_IOCTL_CANCEL_ALL_EVENTS can return VERR_INTERRUPTED and possibly more in the future;
          * which are not really failures that require logging.
          */
-        Log((DEVICE_NAME "::IOCtl: VbgdCommonIoCtl failed. Cmd=%#x rc=%d\n", Cmd, rc));
+        Log(("vgdrvSolarisIOCtl: VGDrvCommonIoCtl failed. Cmd=%#x rc=%d\n", Cmd, rc));
         if (rc == VERR_PERMISSION_DENIED)   /* RTErrConvertToErrno() below will ring-0 debug assert if we don't do this. */
             rc = VERR_ACCESS_DENIED;
         rc = RTErrConvertToErrno(rc);
@@ -734,11 +734,11 @@ static int VBoxGuestSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, cr
 }
 
 
-static int VBoxGuestSolarisPoll(dev_t Dev, short fEvents, int fAnyYet, short *pReqEvents, struct pollhead **ppPollHead)
+static int vgdrvSolarisPoll(dev_t Dev, short fEvents, int fAnyYet, short *pReqEvents, struct pollhead **ppPollHead)
 {
-    LogFlow((DEVICE_NAME "::Poll: fEvents=%d fAnyYet=%d\n", fEvents, fAnyYet));
+    LogFlow(("vgdrvSolarisPoll: fEvents=%d fAnyYet=%d\n", fEvents, fAnyYet));
 
-    vboxguest_state_t *pState = ddi_get_soft_state(g_pVBoxGuestSolarisState, getminor(Dev));
+    vboxguest_state_t *pState = ddi_get_soft_state(g_pvgdrvSolarisState, getminor(Dev));
     if (RT_LIKELY(pState))
     {
         PVBOXGUESTSESSION pSession  = (PVBOXGUESTSESSION)pState->pSession;
@@ -759,7 +759,7 @@ static int VBoxGuestSolarisPoll(dev_t Dev, short fEvents, int fAnyYet, short *pR
     }
     else
     {
-        Log((DEVICE_NAME "::Poll: no state data for %d\n", getminor(Dev)));
+        Log(("vgdrvSolarisPoll: no state data for %d\n", getminor(Dev)));
         return EINVAL;
     }
 }
@@ -771,9 +771,9 @@ static int VBoxGuestSolarisPoll(dev_t Dev, short fEvents, int fAnyYet, short *pR
  * @returns Solaris error code.
  * @param   pDip     Pointer to the device info structure.
  */
-static int VBoxGuestSolarisAddIRQ(dev_info_t *pDip)
+static int vgdrvSolarisAddIRQ(dev_info_t *pDip)
 {
-    LogFlow((DEVICE_NAME "::AddIRQ: pDip=%p\n", pDip));
+    LogFlow(("vgdrvSolarisAddIRQ: pDip=%p\n", pDip));
 
     int IntrType = 0;
     int rc = ddi_intr_get_supported_types(pDip, &IntrType);
@@ -812,7 +812,7 @@ static int VBoxGuestSolarisAddIRQ(dev_info_t *pDip)
                                 /* Assign interrupt handler functions and enable interrupts. */
                                 for (int i = 0; i < IntrAllocated; i++)
                                 {
-                                    rc = ddi_intr_add_handler(g_pIntr[i], (ddi_intr_handler_t *)VBoxGuestSolarisISR,
+                                    rc = ddi_intr_add_handler(g_pIntr[i], (ddi_intr_handler_t *)vgdrvSolarisISR,
                                                               NULL /* pvArg1 */, NULL /* pvArg2 */);
                                     if (rc == DDI_SUCCESS)
                                         rc = ddi_intr_enable(g_pIntr[i]);
@@ -866,9 +866,9 @@ static int VBoxGuestSolarisAddIRQ(dev_info_t *pDip)
  *
  * @param   pDip     Pointer to the device info structure.
  */
-static void VBoxGuestSolarisRemoveIRQ(dev_info_t *pDip)
+static void vgdrvSolarisRemoveIRQ(dev_info_t *pDip)
 {
-    LogFlow((DEVICE_NAME "::RemoveIRQ:\n"));
+    LogFlow(("vgdrvSolarisRemoveIRQ:\n"));
 
     for (int i = 0; i < g_cIntrAllocated; i++)
     {
@@ -892,21 +892,21 @@ static void VBoxGuestSolarisRemoveIRQ(dev_info_t *pDip)
  * @param   Arg     Private data (unused, will be NULL).
  * @returns DDI_INTR_CLAIMED if it's our interrupt, DDI_INTR_UNCLAIMED if it isn't.
  */
-static uint_t VBoxGuestSolarisISR(caddr_t Arg)
+static uint_t vgdrvSolarisISR(caddr_t Arg)
 {
-    LogFlow((DEVICE_NAME "::ISR:\n"));
+    LogFlow(("vgdrvSolarisISR:\n"));
 
     mutex_enter(&g_IrqMtx);
-    bool fOurIRQ = VbgdCommonISR(&g_DevExt);
+    bool fOurIRQ = VGDrvCommonISR(&g_DevExt);
     mutex_exit(&g_IrqMtx);
 
     return fOurIRQ ? DDI_INTR_CLAIMED : DDI_INTR_UNCLAIMED;
 }
 
 
-void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
+void VGDrvNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
 {
-    LogFlow((DEVICE_NAME "::NativeISRMousePollEvent:\n"));
+    LogFlow(("VGDrvNativeISRMousePollEvent:\n"));
 
     /*
      * Wake up poll waiters.
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-legacy.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-legacy.cpp
index bd0ad98..0829755 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-legacy.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-legacy.cpp
@@ -40,12 +40,12 @@
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
 RT_C_DECLS_BEGIN
-static NTSTATUS vbgdNt4FindPciDevice(PULONG pulBusNumber, PPCI_SLOT_NUMBER pSlotNumber);
+static NTSTATUS vgdrvNt4FindPciDevice(PULONG pulBusNumber, PPCI_SLOT_NUMBER pSlotNumber);
 RT_C_DECLS_END
 
 #ifdef ALLOC_PRAGMA
-# pragma alloc_text(INIT, vbgdNt4CreateDevice)
-# pragma alloc_text(INIT, vbgdNt4FindPciDevice)
+# pragma alloc_text(INIT, vgdrvNt4CreateDevice)
+# pragma alloc_text(INIT, vgdrvNt4FindPciDevice)
 #endif
 
 
@@ -58,19 +58,19 @@ RT_C_DECLS_END
  * @param   pDevObj         Unused. NULL. Dunno why it's here, makes no sense.
  * @param   pRegPath        The driver registry path.
  */
-NTSTATUS vbgdNt4CreateDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STRING pRegPath)
+NTSTATUS vgdrvNt4CreateDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STRING pRegPath)
 {
-    Log(("VBoxGuest::vbgdNt4CreateDevice: pDrvObj=%p, pDevObj=%p, pRegPath=%p\n", pDrvObj, pDevObj, pRegPath));
+    Log(("vgdrvNt4CreateDevice: pDrvObj=%p, pDevObj=%p, pRegPath=%p\n", pDrvObj, pDevObj, pRegPath));
 
     /*
      * Find our virtual PCI device
      */
     ULONG uBusNumber;
     PCI_SLOT_NUMBER SlotNumber;
-    NTSTATUS rc = vbgdNt4FindPciDevice(&uBusNumber, &SlotNumber);
+    NTSTATUS rc = vgdrvNt4FindPciDevice(&uBusNumber, &SlotNumber);
     if (NT_ERROR(rc))
     {
-        Log(("VBoxGuest::vbgdNt4CreateDevice: Device not found!\n"));
+        Log(("vgdrvNt4CreateDevice: Device not found!\n"));
         return rc;
     }
 
@@ -83,24 +83,24 @@ NTSTATUS vbgdNt4CreateDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUN
     rc = IoCreateDevice(pDrvObj, sizeof(VBOXGUESTDEVEXTWIN), &szDevName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pDeviceObject);
     if (NT_SUCCESS(rc))
     {
-        Log(("VBoxGuest::vbgdNt4CreateDevice: Device created\n"));
+        Log(("vgdrvNt4CreateDevice: Device created\n"));
 
         UNICODE_STRING DosName;
         RtlInitUnicodeString(&DosName, VBOXGUEST_DEVICE_NAME_DOS);
         rc = IoCreateSymbolicLink(&DosName, &szDevName);
         if (NT_SUCCESS(rc))
         {
-            Log(("VBoxGuest::vbgdNt4CreateDevice: Symlink created\n"));
+            Log(("vgdrvNt4CreateDevice: Symlink created\n"));
 
             /*
              * Setup the device extension.
              */
-            Log(("VBoxGuest::vbgdNt4CreateDevice: Setting up device extension ...\n"));
+            Log(("vgdrvNt4CreateDevice: Setting up device extension ...\n"));
 
             PVBOXGUESTDEVEXTWIN pDevExt = (PVBOXGUESTDEVEXTWIN)pDeviceObject->DeviceExtension;
             RT_ZERO(*pDevExt);
 
-            Log(("VBoxGuest::vbgdNt4CreateDevice: Device extension created\n"));
+            Log(("vgdrvNt4CreateDevice: Device extension created\n"));
 
             /* Store a reference to ourself. */
             pDevExt->pDeviceObject = pDeviceObject;
@@ -116,10 +116,10 @@ NTSTATUS vbgdNt4CreateDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUN
             /* Do the actual VBox init ... */
             if (NT_SUCCESS(rc))
             {
-                rc = vbgdNtInit(pDrvObj, pDeviceObject, pRegPath);
+                rc = vgdrvNtInit(pDrvObj, pDeviceObject, pRegPath);
                 if (NT_SUCCESS(rc))
                 {
-                    Log(("VBoxGuest::vbgdNt4CreateDevice: Returning rc = 0x%x (succcess)\n", rc));
+                    Log(("vgdrvNt4CreateDevice: Returning rc = 0x%x (succcess)\n", rc));
                     return rc;
                 }
 
@@ -128,12 +128,12 @@ NTSTATUS vbgdNt4CreateDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUN
             IoDeleteSymbolicLink(&DosName);
         }
         else
-            Log(("VBoxGuest::vbgdNt4CreateDevice: IoCreateSymbolicLink failed with rc = %#x\n", rc));
+            Log(("vgdrvNt4CreateDevice: IoCreateSymbolicLink failed with rc = %#x\n", rc));
         IoDeleteDevice(pDeviceObject);
     }
     else
-        Log(("VBoxGuest::vbgdNt4CreateDevice: IoCreateDevice failed with rc = %#x\n", rc));
-    Log(("VBoxGuest::vbgdNt4CreateDevice: Returning rc = 0x%x\n", rc));
+        Log(("vgdrvNt4CreateDevice: IoCreateDevice failed with rc = %#x\n", rc));
+    Log(("vgdrvNt4CreateDevice: Returning rc = 0x%x\n", rc));
     return rc;
 }
 
@@ -146,9 +146,9 @@ NTSTATUS vbgdNt4CreateDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUN
  * @param   pulBusNumber    Where to return the bus number on success.
  * @param   pSlotNumber     Where to return the slot number on success.
  */
-static NTSTATUS vbgdNt4FindPciDevice(PULONG pulBusNumber, PPCI_SLOT_NUMBER pSlotNumber)
+static NTSTATUS vgdrvNt4FindPciDevice(PULONG pulBusNumber, PPCI_SLOT_NUMBER pSlotNumber)
 {
-    Log(("VBoxGuest::vbgdNt4FindPciDevice\n"));
+    Log(("vgdrvNt4FindPciDevice\n"));
 
     PCI_SLOT_NUMBER SlotNumber;
     SlotNumber.u.AsULONG = 0;
@@ -185,7 +185,7 @@ static NTSTATUS vbgdNt4FindPciDevice(PULONG pulBusNumber, PPCI_SLOT_NUMBER pSlot
                     continue;
 
                 /* Hooray, we've found it! */
-                Log(("VBoxGuest::vbgdNt4FindPciDevice: Device found!\n"));
+                Log(("vgdrvNt4FindPciDevice: Device found!\n"));
 
                 *pulBusNumber = ulBusNumber;
                 *pSlotNumber  = SlotNumber;
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-pnp.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-pnp.cpp
index 207b928..71dae42 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-pnp.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win-pnp.cpp
@@ -31,28 +31,28 @@
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
 RT_C_DECLS_BEGIN
-static NTSTATUS vbgdNtSendIrpSynchronously(PDEVICE_OBJECT pDevObj, PIRP pIrp, BOOLEAN fStrict);
-static NTSTATUS vbgdNtPnPIrpComplete(PDEVICE_OBJECT pDevObj, PIRP pIrp, PKEVENT pEvent);
-static VOID     vbgdNtShowDeviceResources(PCM_PARTIAL_RESOURCE_LIST pResourceList);
+static NTSTATUS vgdrvNtSendIrpSynchronously(PDEVICE_OBJECT pDevObj, PIRP pIrp, BOOLEAN fStrict);
+static NTSTATUS vgdrvNtPnPIrpComplete(PDEVICE_OBJECT pDevObj, PIRP pIrp, PKEVENT pEvent);
+static VOID     vgdrvNtShowDeviceResources(PCM_PARTIAL_RESOURCE_LIST pResourceList);
 RT_C_DECLS_END
 
 #ifdef ALLOC_PRAGMA
-# pragma alloc_text(PAGE, vbgdNtPnP)
-# pragma alloc_text(PAGE, vbgdNtPower)
-# pragma alloc_text(PAGE, vbgdNtSendIrpSynchronously)
-# pragma alloc_text(PAGE, vbgdNtShowDeviceResources)
+# pragma alloc_text(PAGE, vgdrvNtPnP)
+# pragma alloc_text(PAGE, vgdrvNtPower)
+# pragma alloc_text(PAGE, vgdrvNtSendIrpSynchronously)
+# pragma alloc_text(PAGE, vgdrvNtShowDeviceResources)
 #endif
 
 
 /**
  * Irp completion routine for PnP Irps we send.
  *
+ * @returns NT status code.
  * @param   pDevObj   Device object.
  * @param   pIrp      Request packet.
  * @param   pEvent    Semaphore.
- * @return   NT status code
  */
-static NTSTATUS vbgdNtPnpIrpComplete(PDEVICE_OBJECT pDevObj, PIRP pIrp, PKEVENT pEvent)
+static NTSTATUS vgdrvNtPnpIrpComplete(PDEVICE_OBJECT pDevObj, PIRP pIrp, PKEVENT pEvent)
 {
     KeSetEvent(pEvent, 0, FALSE);
     return STATUS_MORE_PROCESSING_REQUIRED;
@@ -62,20 +62,19 @@ static NTSTATUS vbgdNtPnpIrpComplete(PDEVICE_OBJECT pDevObj, PIRP pIrp, PKEVENT
 /**
  * Helper to send a PnP IRP and wait until it's done.
  *
+ * @returns NT status code.
  * @param    pDevObj    Device object.
  * @param    pIrp       Request packet.
  * @param    fStrict    When set, returns an error if the IRP gives an error.
- * @return   NT status code
  */
-static NTSTATUS vbgdNtSendIrpSynchronously(PDEVICE_OBJECT pDevObj, PIRP pIrp, BOOLEAN fStrict)
+static NTSTATUS vgdrvNtSendIrpSynchronously(PDEVICE_OBJECT pDevObj, PIRP pIrp, BOOLEAN fStrict)
 {
     KEVENT Event;
 
     KeInitializeEvent(&Event, SynchronizationEvent, FALSE);
 
     IoCopyCurrentIrpStackLocationToNext(pIrp);
-    IoSetCompletionRoutine(pIrp, (PIO_COMPLETION_ROUTINE)vbgdNtPnpIrpComplete,
-                           &Event, TRUE, TRUE, TRUE);
+    IoSetCompletionRoutine(pIrp, (PIO_COMPLETION_ROUTINE)vgdrvNtPnpIrpComplete, &Event, TRUE, TRUE, TRUE);
 
     NTSTATUS rc = IoCallDriver(pDevObj, pIrp);
 
@@ -85,13 +84,13 @@ static NTSTATUS vbgdNtSendIrpSynchronously(PDEVICE_OBJECT pDevObj, PIRP pIrp, BO
         rc = pIrp->IoStatus.Status;
     }
 
-    if (!fStrict
+    if (   !fStrict
         && (rc == STATUS_NOT_SUPPORTED || rc == STATUS_INVALID_DEVICE_REQUEST))
     {
         rc = STATUS_SUCCESS;
     }
 
-    Log(("VBoxGuest::vbgdNtSendIrpSynchronously: Returning 0x%x\n", rc));
+    Log(("vgdrvNtSendIrpSynchronously: Returning 0x%x\n", rc));
     return rc;
 }
 
@@ -102,7 +101,7 @@ static NTSTATUS vbgdNtSendIrpSynchronously(PDEVICE_OBJECT pDevObj, PIRP pIrp, BO
  * @param  pDevObj    Device object.
  * @param  pIrp       Request packet.
  */
-NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
+NTSTATUS vgdrvNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 {
     PVBOXGUESTDEVEXTWIN pDevExt = (PVBOXGUESTDEVEXTWIN)pDevObj->DeviceExtension;
     PIO_STACK_LOCATION  pStack  = IoGetCurrentIrpStackLocation(pIrp);
@@ -135,7 +134,7 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
         "IRP_MN_DEVICE_USAGE_NOTIFICATION",
         "IRP_MN_SURPRISE_REMOVAL",
     };
-    Log(("VBoxGuest::vbgdNtGuestPnp: MinorFunction: %s\n",
+    Log(("vgdrvNtPnP: MinorFunction: %s\n",
          pStack->MinorFunction < RT_ELEMENTS(s_apszFnctName) ? s_apszFnctName[pStack->MinorFunction] : "Unknown"));
 #endif
 
@@ -144,50 +143,50 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
     {
         case IRP_MN_START_DEVICE:
         {
-            Log(("VBoxGuest::vbgdNtVBoxGuestPnP: START_DEVICE\n"));
+            Log(("vgdrvNtPnP: START_DEVICE\n"));
 
             /* This must be handled first by the lower driver. */
-            rc = vbgdNtSendIrpSynchronously(pDevExt->pNextLowerDriver, pIrp, TRUE);
+            rc = vgdrvNtSendIrpSynchronously(pDevExt->pNextLowerDriver, pIrp, TRUE);
 
             if (   NT_SUCCESS(rc)
                 && NT_SUCCESS(pIrp->IoStatus.Status))
             {
-                Log(("VBoxGuest::vbgdNtVBoxGuestPnP: START_DEVICE: pStack->Parameters.StartDevice.AllocatedResources = %p\n",
+                Log(("vgdrvNtPnP: START_DEVICE: pStack->Parameters.StartDevice.AllocatedResources = %p\n",
                      pStack->Parameters.StartDevice.AllocatedResources));
 
-                if (!pStack->Parameters.StartDevice.AllocatedResources)
+                if (pStack->Parameters.StartDevice.AllocatedResources)
+                    rc = vgdrvNtInit(pDevObj, pIrp);
+                else
                 {
-                    Log(("VBoxGuest::vbgdNtVBoxGuestPnP: START_DEVICE: No resources, pDevExt = %p, nextLowerDriver = %p!\n",
+                    Log(("vgdrvNtPnP: START_DEVICE: No resources, pDevExt = %p, nextLowerDriver = %p!\n",
                          pDevExt, pDevExt ? pDevExt->pNextLowerDriver : NULL));
                     rc = STATUS_UNSUCCESSFUL;
                 }
-                else
-                {
-                    rc = vbgdNtInit(pDevObj, pIrp);
-                }
             }
 
             if (NT_ERROR(rc))
             {
-                Log(("VBoxGuest::vbgdNtGuestPnp: START_DEVICE: Error: rc = 0x%x\n", rc));
+                Log(("vgdrvNtPnP: START_DEVICE: Error: rc = 0x%x\n", rc));
 
                 /* Need to unmap memory in case of errors ... */
-                vbgdNtUnmapVMMDevMemory(pDevExt);
+/** @todo r=bird: vgdrvNtInit maps it and is responsible for cleaning up its own friggin mess...
+ * Fix it instead of kind of working around things there!! */
+                vgdrvNtUnmapVMMDevMemory(pDevExt);
             }
             break;
         }
 
         case IRP_MN_CANCEL_REMOVE_DEVICE:
         {
-            Log(("VBoxGuest::vbgdNtVBoxGuestPnP: CANCEL_REMOVE_DEVICE\n"));
+            Log(("vgdrvNtPnP: CANCEL_REMOVE_DEVICE\n"));
 
             /* This must be handled first by the lower driver. */
-            rc = vbgdNtSendIrpSynchronously(pDevExt->pNextLowerDriver, pIrp, TRUE);
+            rc = vgdrvNtSendIrpSynchronously(pDevExt->pNextLowerDriver, pIrp, TRUE);
 
-            if (NT_SUCCESS(rc) && pDevExt->devState == PENDINGREMOVE)
+            if (NT_SUCCESS(rc) && pDevExt->enmDevState == VGDRVNTDEVSTATE_PENDINGREMOVE)
             {
                 /* Return to the state prior to receiving the IRP_MN_QUERY_REMOVE_DEVICE request. */
-                pDevExt->devState = pDevExt->prevDevState;
+                pDevExt->enmDevState = pDevExt->enmPrevDevState;
             }
 
             /* Complete the IRP. */
@@ -196,9 +195,9 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 
         case IRP_MN_SURPRISE_REMOVAL:
         {
-            Log(("VBoxGuest::vbgdNtVBoxGuestPnP: IRP_MN_SURPRISE_REMOVAL\n"));
+            Log(("vgdrvNtPnP: IRP_MN_SURPRISE_REMOVAL\n"));
 
-            VBOXGUEST_UPDATE_DEVSTATE(pDevExt, SURPRISEREMOVED);
+            VBOXGUEST_UPDATE_DEVSTATE(pDevExt, VGDRVNTDEVSTATE_SURPRISEREMOVED);
 
             /* Do nothing here actually. Cleanup is done in IRP_MN_REMOVE_DEVICE.
              * This request is not expected for VBoxGuest.
@@ -218,16 +217,16 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 
         case IRP_MN_QUERY_REMOVE_DEVICE:
         {
-            Log(("VBoxGuest::vbgdNtVBoxGuestPnP: QUERY_REMOVE_DEVICE\n"));
+            Log(("vgdrvNtPnP: QUERY_REMOVE_DEVICE\n"));
 
 #ifdef VBOX_REBOOT_ON_UNINSTALL
-            Log(("VBoxGuest::vbgdNtGuestPnp: QUERY_REMOVE_DEVICE: Device cannot be removed without a reboot.\n"));
+            Log(("vgdrvNtPnP: QUERY_REMOVE_DEVICE: Device cannot be removed without a reboot.\n"));
             rc = STATUS_UNSUCCESSFUL;
 #endif
 
             if (NT_SUCCESS(rc))
             {
-                VBOXGUEST_UPDATE_DEVSTATE(pDevExt, PENDINGREMOVE);
+                VBOXGUEST_UPDATE_DEVSTATE(pDevExt, VGDRVNTDEVSTATE_PENDINGREMOVE);
 
                 /* This IRP passed down to lower driver. */
                 pIrp->IoStatus.Status = STATUS_SUCCESS;
@@ -235,7 +234,7 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
                 IoSkipCurrentIrpStackLocation(pIrp);
 
                 rc = IoCallDriver(pDevExt->pNextLowerDriver, pIrp);
-                Log(("VBoxGuest::vbgdNtGuestPnp: QUERY_REMOVE_DEVICE: Next lower driver replied rc = 0x%x\n", rc));
+                Log(("vgdrvNtPnP: QUERY_REMOVE_DEVICE: Next lower driver replied rc = 0x%x\n", rc));
 
                 /* we must not do anything the IRP after doing IoSkip & CallDriver
                  * since the driver below us will complete (or already have completed) the IRP.
@@ -249,15 +248,15 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 
         case IRP_MN_REMOVE_DEVICE:
         {
-            Log(("VBoxGuest::vbgdNtVBoxGuestPnP: REMOVE_DEVICE\n"));
+            Log(("vgdrvNtPnP: REMOVE_DEVICE\n"));
 
-            VBOXGUEST_UPDATE_DEVSTATE(pDevExt, REMOVED);
+            VBOXGUEST_UPDATE_DEVSTATE(pDevExt, VGDRVNTDEVSTATE_REMOVED);
 
             /* Free hardware resources. */
             /** @todo this should actually free I/O ports, interrupts, etc.
-             * Update/bird: vbgdNtCleanup actually does that... So, what's there to do?  */
-            rc = vbgdNtCleanup(pDevObj);
-            Log(("VBoxGuest::vbgdNtGuestPnp: REMOVE_DEVICE: vbgdNtCleanup rc = 0x%08X\n", rc));
+             * Update/bird: vgdrvNtCleanup actually does that... So, what's there to do?  */
+            rc = vgdrvNtCleanup(pDevObj);
+            Log(("vgdrvNtPnP: REMOVE_DEVICE: vgdrvNtCleanup rc = 0x%08X\n", rc));
 
             /*
              * We need to send the remove down the stack before we detach,
@@ -269,27 +268,27 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
             IoSkipCurrentIrpStackLocation(pIrp);
 
             rc = IoCallDriver(pDevExt->pNextLowerDriver, pIrp);
-            Log(("VBoxGuest::vbgdNtGuestPnp: REMOVE_DEVICE: Next lower driver replied rc = 0x%x\n", rc));
+            Log(("vgdrvNtPnP: REMOVE_DEVICE: Next lower driver replied rc = 0x%x\n", rc));
 
             IoDetachDevice(pDevExt->pNextLowerDriver);
 
-            Log(("VBoxGuest::vbgdNtGuestPnp: REMOVE_DEVICE: Removing device ...\n"));
+            Log(("vgdrvNtPnP: REMOVE_DEVICE: Removing device ...\n"));
 
             /* Destroy device extension and clean up everything else. */
-            VbgdCommonDeleteDevExt(&pDevExt->Core);
+            VGDrvCommonDeleteDevExt(&pDevExt->Core);
 
             /* Remove DOS device + symbolic link. */
             UNICODE_STRING win32Name;
             RtlInitUnicodeString(&win32Name, VBOXGUEST_DEVICE_NAME_DOS);
             IoDeleteSymbolicLink(&win32Name);
 
-            Log(("VBoxGuest::vbgdNtGuestPnp: REMOVE_DEVICE: Deleting device ...\n"));
+            Log(("vgdrvNtPnP: REMOVE_DEVICE: Deleting device ...\n"));
 
             /* Last action: Delete our device! pDevObj is *not* failed
              * anymore after this call! */
             IoDeleteDevice(pDevObj);
 
-            Log(("VBoxGuest::vbgdNtGuestPnp: REMOVE_DEVICE: Device removed!\n"));
+            Log(("vgdrvNtPnP: REMOVE_DEVICE: Device removed!\n"));
 
             /* Propagating rc from IoCallDriver. */
             return rc; /* Make sure that we don't do anything below here anymore! */
@@ -297,15 +296,15 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 
         case IRP_MN_CANCEL_STOP_DEVICE:
         {
-            Log(("VBoxGuest::vbgdNtVBoxGuestPnP: CANCEL_STOP_DEVICE\n"));
+            Log(("vgdrvNtPnP: CANCEL_STOP_DEVICE\n"));
 
             /* This must be handled first by the lower driver. */
-            rc = vbgdNtSendIrpSynchronously(pDevExt->pNextLowerDriver, pIrp, TRUE);
+            rc = vgdrvNtSendIrpSynchronously(pDevExt->pNextLowerDriver, pIrp, TRUE);
 
-            if (NT_SUCCESS(rc) && pDevExt->devState == PENDINGSTOP)
+            if (NT_SUCCESS(rc) && pDevExt->enmDevState == VGDRVNTDEVSTATE_PENDINGSTOP)
             {
                 /* Return to the state prior to receiving the IRP_MN_QUERY_STOP_DEVICE request. */
-                pDevExt->devState = pDevExt->prevDevState;
+                pDevExt->enmDevState = pDevExt->enmPrevDevState;
             }
 
             /* Complete the IRP. */
@@ -314,16 +313,16 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 
         case IRP_MN_QUERY_STOP_DEVICE:
         {
-            Log(("VBoxGuest::vbgdNtVBoxGuestPnP: QUERY_STOP_DEVICE\n"));
+            Log(("vgdrvNtPnP: QUERY_STOP_DEVICE\n"));
 
 #ifdef VBOX_REBOOT_ON_UNINSTALL
-            Log(("VBoxGuest::vbgdNtGuestPnp: QUERY_STOP_DEVICE: Device cannot be stopped without a reboot!\n"));
+            Log(("vgdrvNtPnP: QUERY_STOP_DEVICE: Device cannot be stopped without a reboot!\n"));
             pIrp->IoStatus.Status = STATUS_UNSUCCESSFUL;
 #endif
 
             if (NT_SUCCESS(rc))
             {
-                VBOXGUEST_UPDATE_DEVSTATE(pDevExt, PENDINGSTOP);
+                VBOXGUEST_UPDATE_DEVSTATE(pDevExt, VGDRVNTDEVSTATE_PENDINGSTOP);
 
                 /* This IRP passed down to lower driver. */
                 pIrp->IoStatus.Status = STATUS_SUCCESS;
@@ -331,7 +330,7 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
                 IoSkipCurrentIrpStackLocation(pIrp);
 
                 rc = IoCallDriver(pDevExt->pNextLowerDriver, pIrp);
-                Log(("VBoxGuest::vbgdNtGuestPnp: QUERY_STOP_DEVICE: Next lower driver replied rc = 0x%x\n", rc));
+                Log(("vgdrvNtPnP: QUERY_STOP_DEVICE: Next lower driver replied rc = 0x%x\n", rc));
 
                 /* we must not do anything with the IRP after doing IoSkip & CallDriver
                  * since the driver below us will complete (or already have completed) the IRP.
@@ -345,15 +344,15 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 
         case IRP_MN_STOP_DEVICE:
         {
-            Log(("VBoxGuest::vbgdNtVBoxGuestPnP: STOP_DEVICE\n"));
+            Log(("vgdrvNtPnP: STOP_DEVICE\n"));
 
-            VBOXGUEST_UPDATE_DEVSTATE(pDevExt, STOPPED);
+            VBOXGUEST_UPDATE_DEVSTATE(pDevExt, VGDRVNTDEVSTATE_STOPPED);
 
             /* Free hardware resources. */
             /** @todo this should actually free I/O ports, interrupts, etc.
-             * Update/bird: vbgdNtCleanup actually does that... So, what's there to do?  */
-            rc = vbgdNtCleanup(pDevObj);
-            Log(("VBoxGuest::vbgdNtGuestPnp: STOP_DEVICE: cleaning up, rc = 0x%x\n", rc));
+             * Update/bird: vgdrvNtCleanup actually does that... So, what's there to do?  */
+            rc = vgdrvNtCleanup(pDevObj);
+            Log(("vgdrvNtPnP: STOP_DEVICE: cleaning up, rc = 0x%x\n", rc));
 
             /* Pass to the lower driver. */
             pIrp->IoStatus.Status = STATUS_SUCCESS;
@@ -361,7 +360,7 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
             IoSkipCurrentIrpStackLocation(pIrp);
 
             rc = IoCallDriver(pDevExt->pNextLowerDriver, pIrp);
-            Log(("VBoxGuest::vbgdNtGuestPnp: STOP_DEVICE: Next lower driver replied rc = 0x%x\n", rc));
+            Log(("vgdrvNtPnP: STOP_DEVICE: Next lower driver replied rc = 0x%x\n", rc));
 
             return rc;
         }
@@ -377,7 +376,7 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
     pIrp->IoStatus.Status = rc;
     IoCompleteRequest(pIrp, IO_NO_INCREMENT);
 
-    Log(("VBoxGuest::vbgdNtGuestPnp: Returning with rc = 0x%x\n", rc));
+    Log(("vgdrvNtPnP: Returning with rc = 0x%x\n", rc));
     return rc;
 }
 
@@ -390,7 +389,7 @@ NTSTATUS vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp)
  * @param pIrp      IO request packet.
  * @param pContext  Context value passed to IoSetCompletionRoutine in VBoxGuestPower.
  */
-static NTSTATUS vbgdNtPowerComplete(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp, IN PVOID pContext)
+static NTSTATUS vgdrvNtPowerComplete(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp, IN PVOID pContext)
 {
 #ifdef VBOX_STRICT
     PVBOXGUESTDEVEXTWIN pDevExt = (PVBOXGUESTDEVEXTWIN)pContext;
@@ -406,7 +405,6 @@ static NTSTATUS vbgdNtPowerComplete(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp, IN
             switch (pIrpSp->MinorFunction)
             {
                 case IRP_MN_SET_POWER:
-
                     switch (pIrpSp->Parameters.Power.Type)
                     {
                         case DevicePowerState:
@@ -434,7 +432,7 @@ static NTSTATUS vbgdNtPowerComplete(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp, IN
  * @param     pDevObj   device object
  * @param     pIrp      IRP
  */
-NTSTATUS vbgdNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp)
+NTSTATUS vgdrvNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 {
     PIO_STACK_LOCATION  pStack   = IoGetCurrentIrpStackLocation(pIrp);
     PVBOXGUESTDEVEXTWIN pDevExt  = (PVBOXGUESTDEVEXTWIN)pDevObj->DeviceExtension;
@@ -442,18 +440,18 @@ NTSTATUS vbgdNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp)
     POWER_STATE         PowerState     = pStack->Parameters.Power.State;
     POWER_ACTION        enmPowerAction = pStack->Parameters.Power.ShutdownType;
 
-    Log(("VBoxGuest::vbgdNtGuestPower\n"));
+    Log(("vgdrvNtPower:\n"));
 
     switch (pStack->MinorFunction)
     {
         case IRP_MN_SET_POWER:
         {
-            Log(("VBoxGuest::vbgdNtGuestPower: IRP_MN_SET_POWER, type= %d\n", enmPowerType));
+            Log(("vgdrvNtPower: IRP_MN_SET_POWER, type= %d\n", enmPowerType));
             switch (enmPowerType)
             {
                 case SystemPowerState:
                 {
-                    Log(("VBoxGuest::vbgdNtGuestPower: SystemPowerState, action = %d, state = %d/%d\n",
+                    Log(("vgdrvNtPower: SystemPowerState, action = %d, state = %d/%d\n",
                          enmPowerAction, PowerState.SystemState, PowerState.DeviceState));
 
                     switch (enmPowerAction)
@@ -466,18 +464,18 @@ NTSTATUS vbgdNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp)
                                 if (   pDevExt
                                     && pDevExt->LastSystemPowerAction == PowerActionHibernate)
                                 {
-                                    Log(("VBoxGuest::vbgdNtGuestPower: Returning from hibernation!\n"));
-                                    int rc = VbgdCommonReinitDevExtAfterHibernation(&pDevExt->Core,
-                                                                                   vbgdNtVersionToOSType(g_enmVbgdNtVer));
+                                    Log(("vgdrvNtPower: Returning from hibernation!\n"));
+                                    int rc = VGDrvCommonReinitDevExtAfterHibernation(&pDevExt->Core,
+                                                                                     vgdrvNtVersionToOSType(g_enmVGDrvNtVer));
                                     if (RT_FAILURE(rc))
-                                        Log(("VBoxGuest::vbgdNtGuestPower: Cannot re-init VMMDev chain, rc = %d!\n", rc));
+                                        Log(("vgdrvNtPower: Cannot re-init VMMDev chain, rc = %d!\n", rc));
                                 }
                             }
                             break;
 
                         case PowerActionShutdownReset:
                         {
-                            Log(("VBoxGuest::vbgdNtGuestPower: Power action reset!\n"));
+                            Log(("vgdrvNtPower: Power action reset!\n"));
 
                             /* Tell the VMM that we no longer support mouse pointer integration. */
                             VMMDevReqMouseStatus *pReq = NULL;
@@ -492,7 +490,7 @@ NTSTATUS vbgdNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp)
                                 vrc = VbglGRPerform(&pReq->header);
                                 if (RT_FAILURE(vrc))
                                 {
-                                    Log(("VBoxGuest::PowerStateRequest: error communicating new power status to VMMDev. vrc = %Rrc\n", vrc));
+                                    Log(("vgdrvNtPower: error communicating new power status to VMMDev. vrc = %Rrc\n", vrc));
                                 }
 
                                 VbglGRFree(&pReq->header);
@@ -506,10 +504,10 @@ NTSTATUS vbgdNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp)
                         case PowerActionShutdown:
                         case PowerActionShutdownOff:
                         {
-                            Log(("VBoxGuest::vbgdNtGuestPower: Power action shutdown!\n"));
+                            Log(("vgdrvNtPower: Power action shutdown!\n"));
                             if (PowerState.SystemState >= PowerSystemShutdown)
                             {
-                                Log(("VBoxGuest::vbgdNtGuestPower: Telling the VMMDev to close the VM ...\n"));
+                                Log(("vgdrvNtPower: Telling the VMMDev to close the VM ...\n"));
 
                                 VMMDevPowerStateRequest *pReq = pDevExt->pPowerStateRequest;
                                 int vrc = VERR_NOT_IMPLEMENTED;
@@ -521,7 +519,7 @@ NTSTATUS vbgdNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp)
                                     vrc = VbglGRPerform(&pReq->header);
                                 }
                                 if (RT_FAILURE(vrc))
-                                    Log(("VBoxGuest::PowerStateRequest: Error communicating new power status to VMMDev. vrc = %Rrc\n", vrc));
+                                    Log(("vgdrvNtPower: Error communicating new power status to VMMDev. vrc = %Rrc\n", vrc));
 
                                 /* No need to do cleanup here; at this point we should've been
                                  * turned off by VMMDev already! */
@@ -531,7 +529,7 @@ NTSTATUS vbgdNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 
                         case PowerActionHibernate:
 
-                            Log(("VBoxGuest::vbgdNtGuestPower: Power action hibernate!\n"));
+                            Log(("vgdrvNtPower: Power action hibernate!\n"));
                             break;
                     }
 
@@ -565,7 +563,7 @@ NTSTATUS vbgdNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp)
      */
     IoCopyCurrentIrpStackLocationToNext(pIrp);
     IoSetCompletionRoutine(pIrp,
-                           vbgdNtPowerComplete,
+                           vgdrvNtPowerComplete,
                            (PVOID)pDevExt,
                            TRUE,
                            TRUE,
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp
index 187e631..1457dd5 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.cpp
@@ -44,19 +44,24 @@
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
 RT_C_DECLS_BEGIN
-static NTSTATUS vbgdNtAddDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj);
-static void     vbgdNtUnload(PDRIVER_OBJECT pDrvObj);
-static NTSTATUS vbgdNtCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp);
-static NTSTATUS vbgdNtClose(PDEVICE_OBJECT pDevObj, PIRP pIrp);
-static NTSTATUS vbgdNtIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp);
-static NTSTATUS vbgdNtInternalIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp);
-static NTSTATUS vbgdNtRegistryReadDWORD(ULONG ulRoot, PCWSTR pwszPath, PWSTR pwszName, PULONG puValue);
-static NTSTATUS vbgdNtSystemControl(PDEVICE_OBJECT pDevObj, PIRP pIrp);
-static NTSTATUS vbgdNtShutdown(PDEVICE_OBJECT pDevObj, PIRP pIrp);
-static NTSTATUS vbgdNtNotSupportedStub(PDEVICE_OBJECT pDevObj, PIRP pIrp);
-#ifdef DEBUG
-static void     vbgdNtDoTests(void);
+static NTSTATUS vgdrvNtAddDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj);
+static void     vgdrvNtUnload(PDRIVER_OBJECT pDrvObj);
+static NTSTATUS vgdrvNtCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp);
+static NTSTATUS vgdrvNtClose(PDEVICE_OBJECT pDevObj, PIRP pIrp);
+static NTSTATUS vgdrvNtIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp);
+static NTSTATUS vgdrvNtInternalIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp);
+static NTSTATUS vgdrvNtRegistryReadDWORD(ULONG ulRoot, PCWSTR pwszPath, PWSTR pwszName, PULONG puValue);
+static NTSTATUS vgdrvNtSystemControl(PDEVICE_OBJECT pDevObj, PIRP pIrp);
+static NTSTATUS vgdrvNtShutdown(PDEVICE_OBJECT pDevObj, PIRP pIrp);
+static NTSTATUS vgdrvNtNotSupportedStub(PDEVICE_OBJECT pDevObj, PIRP pIrp);
+#ifdef VBOX_STRICT
+static void     vgdrvNtDoTests(void);
 #endif
+static VOID     vgdrvNtDpcHandler(PKDPC pDPC, PDEVICE_OBJECT pDevObj, PIRP pIrp, PVOID pContext);
+static BOOLEAN  vgdrvNtIsrHandler(PKINTERRUPT interrupt, PVOID serviceContext);
+static NTSTATUS vgdrvNtScanPCIResourceList(PCM_RESOURCE_LIST pResList, PVBOXGUESTDEVEXTWIN pDevExt);
+static NTSTATUS vgdrvNtMapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt, PHYSICAL_ADDRESS PhysAddr, ULONG cbToMap,
+                                       void **ppvMMIOBase, uint32_t *pcbMMIO);
 RT_C_DECLS_END
 
 
@@ -69,13 +74,13 @@ RT_C_DECLS_END
 
 #ifdef ALLOC_PRAGMA
 # pragma alloc_text(INIT, DriverEntry)
-# pragma alloc_text(PAGE, vbgdNtAddDevice)
-# pragma alloc_text(PAGE, vbgdNtUnload)
-# pragma alloc_text(PAGE, vbgdNtCreate)
-# pragma alloc_text(PAGE, vbgdNtClose)
-# pragma alloc_text(PAGE, vbgdNtShutdown)
-# pragma alloc_text(PAGE, vbgdNtNotSupportedStub)
-# pragma alloc_text(PAGE, vbgdNtScanPCIResourceList)
+# pragma alloc_text(PAGE, vgdrvNtAddDevice)
+# pragma alloc_text(PAGE, vgdrvNtUnload)
+# pragma alloc_text(PAGE, vgdrvNtCreate)
+# pragma alloc_text(PAGE, vgdrvNtClose)
+# pragma alloc_text(PAGE, vgdrvNtShutdown)
+# pragma alloc_text(PAGE, vgdrvNtNotSupportedStub)
+# pragma alloc_text(PAGE, vgdrvNtScanPCIResourceList)
 #endif
 
 
@@ -83,7 +88,7 @@ RT_C_DECLS_END
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
 /** The detected NT (windows) version. */
-VBGDNTVER g_enmVbgdNtVer = VBGDNTVER_INVALID;
+VGDRVNTVER g_enmVGDrvNtVer = VGDRVNTVER_INVALID;
 
 
 
@@ -102,7 +107,7 @@ ULONG DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
 
     /*
      * Check if the the NT version is supported and initializing
-     * g_enmVbgdNtVer in the process.
+     * g_enmVGDrvNtVer in the process.
      */
     ULONG ulMajorVer;
     ULONG ulMinorVer;
@@ -114,8 +119,8 @@ ULONG DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
     if (fCheckedBuild)
         RTLogBackdoorPrintf("VBoxGuest: Windows checked build\n");
 
-#ifdef DEBUG
-    vbgdNtDoTests();
+#ifdef VBOX_STRICT
+    vgdrvNtDoTests();
 #endif
     switch (ulMajorVer)
     {
@@ -126,7 +131,7 @@ ULONG DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
                     /* Windows 10 Preview builds starting with 9926. */
                 default:
                     /* Also everything newer. */
-                    g_enmVbgdNtVer = VBGDNTVER_WIN10;
+                    g_enmVGDrvNtVer = VGDRVNTVER_WIN10;
                     break;
             }
             break;
@@ -134,22 +139,22 @@ ULONG DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
             switch (ulMinorVer)
             {
                 case 0: /* Note: Also could be Windows 2008 Server! */
-                    g_enmVbgdNtVer = VBGDNTVER_WINVISTA;
+                    g_enmVGDrvNtVer = VGDRVNTVER_WINVISTA;
                     break;
                 case 1: /* Note: Also could be Windows 2008 Server R2! */
-                    g_enmVbgdNtVer = VBGDNTVER_WIN7;
+                    g_enmVGDrvNtVer = VGDRVNTVER_WIN7;
                     break;
                 case 2:
-                    g_enmVbgdNtVer = VBGDNTVER_WIN8;
+                    g_enmVGDrvNtVer = VGDRVNTVER_WIN8;
                     break;
                 case 3:
-                    g_enmVbgdNtVer = VBGDNTVER_WIN81;
+                    g_enmVGDrvNtVer = VGDRVNTVER_WIN81;
                     break;
                 case 4:
                     /* Windows 10 Preview builds. */
                 default:
                     /* Also everything newer. */
-                    g_enmVbgdNtVer = VBGDNTVER_WIN10;
+                    g_enmVGDrvNtVer = VGDRVNTVER_WIN10;
                     break;
             }
             break;
@@ -158,24 +163,24 @@ ULONG DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
             {
                 default:
                 case 2:
-                    g_enmVbgdNtVer = VBGDNTVER_WIN2K3;
+                    g_enmVGDrvNtVer = VGDRVNTVER_WIN2K3;
                     break;
                 case 1:
-                    g_enmVbgdNtVer = VBGDNTVER_WINXP;
+                    g_enmVGDrvNtVer = VGDRVNTVER_WINXP;
                     break;
                 case 0:
-                    g_enmVbgdNtVer = VBGDNTVER_WIN2K;
+                    g_enmVGDrvNtVer = VGDRVNTVER_WIN2K;
                     break;
             }
             break;
         case 4:
-            g_enmVbgdNtVer = VBGDNTVER_WINNT4;
+            g_enmVGDrvNtVer = VGDRVNTVER_WINNT4;
             break;
         default:
             if (ulMajorVer > 6)
             {
                 /* "Windows 10 mode" for Windows 8.1+. */
-                g_enmVbgdNtVer = VBGDNTVER_WIN10;
+                g_enmVGDrvNtVer = VGDRVNTVER_WIN10;
             }
             else
             {
@@ -193,21 +198,21 @@ ULONG DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
         /*
          * Setup the driver entry points in pDrvObj.
          */
-        pDrvObj->DriverUnload                                  = vbgdNtUnload;
-        pDrvObj->MajorFunction[IRP_MJ_CREATE]                  = vbgdNtCreate;
-        pDrvObj->MajorFunction[IRP_MJ_CLOSE]                   = vbgdNtClose;
-        pDrvObj->MajorFunction[IRP_MJ_DEVICE_CONTROL]          = vbgdNtIOCtl;
-        pDrvObj->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = vbgdNtInternalIOCtl;
-        pDrvObj->MajorFunction[IRP_MJ_SHUTDOWN]                = vbgdNtShutdown;
-        pDrvObj->MajorFunction[IRP_MJ_READ]                    = vbgdNtNotSupportedStub;
-        pDrvObj->MajorFunction[IRP_MJ_WRITE]                   = vbgdNtNotSupportedStub;
+        pDrvObj->DriverUnload                                  = vgdrvNtUnload;
+        pDrvObj->MajorFunction[IRP_MJ_CREATE]                  = vgdrvNtCreate;
+        pDrvObj->MajorFunction[IRP_MJ_CLOSE]                   = vgdrvNtClose;
+        pDrvObj->MajorFunction[IRP_MJ_DEVICE_CONTROL]          = vgdrvNtIOCtl;
+        pDrvObj->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = vgdrvNtInternalIOCtl;
+        pDrvObj->MajorFunction[IRP_MJ_SHUTDOWN]                = vgdrvNtShutdown;
+        pDrvObj->MajorFunction[IRP_MJ_READ]                    = vgdrvNtNotSupportedStub;
+        pDrvObj->MajorFunction[IRP_MJ_WRITE]                   = vgdrvNtNotSupportedStub;
 #ifdef TARGET_NT4
-        rc = vbgdNt4CreateDevice(pDrvObj, NULL /* pDevObj */, pRegPath);
+        rc = vgdrvNt4CreateDevice(pDrvObj, NULL /* pDevObj */, pRegPath);
 #else
-        pDrvObj->MajorFunction[IRP_MJ_PNP]                     = vbgdNtPnP;
-        pDrvObj->MajorFunction[IRP_MJ_POWER]                   = vbgdNtPower;
-        pDrvObj->MajorFunction[IRP_MJ_SYSTEM_CONTROL]          = vbgdNtSystemControl;
-        pDrvObj->DriverExtension->AddDevice                    = (PDRIVER_ADD_DEVICE)vbgdNtAddDevice;
+        pDrvObj->MajorFunction[IRP_MJ_PNP]                     = vgdrvNtPnP;
+        pDrvObj->MajorFunction[IRP_MJ_POWER]                   = vgdrvNtPower;
+        pDrvObj->MajorFunction[IRP_MJ_SYSTEM_CONTROL]          = vgdrvNtSystemControl;
+        pDrvObj->DriverExtension->AddDevice                    = (PDRIVER_ADD_DEVICE)vgdrvNtAddDevice;
 #endif
     }
 
@@ -221,10 +226,12 @@ ULONG DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
  * Handle request from the Plug & Play subsystem.
  *
  * @returns NT status code
- * @param  pDrvObj   Driver object
- * @param  pDevObj   Device object
+ * @param   pDrvObj   Driver object
+ * @param   pDevObj   Device object
+ *
+ * @remarks Parts of this is duplicated in VBoxGuest-win-legacy.cpp.
  */
-static NTSTATUS vbgdNtAddDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj)
+static NTSTATUS vgdrvNtAddDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj)
 {
     NTSTATUS rc;
     LogFlowFuncEnter();
@@ -254,9 +261,9 @@ static NTSTATUS vbgdNtAddDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj)
 
             KeInitializeSpinLock(&pDevExt->MouseEventAccessLock);
 
-            pDevExt->pDeviceObject = pDeviceObject;
-            pDevExt->prevDevState = STOPPED;
-            pDevExt->devState = STOPPED;
+            pDevExt->pDeviceObject   = pDeviceObject;
+            pDevExt->enmPrevDevState = VGDRVNTDEVSTATE_STOPPED;
+            pDevExt->enmDevState     = VGDRVNTDEVSTATE_STOPPED;
 
             pDevExt->pNextLowerDriver = IoAttachDeviceToDeviceStack(pDeviceObject, pDevObj);
             if (pDevExt->pNextLowerDriver != NULL)
@@ -266,7 +273,7 @@ static NTSTATUS vbgdNtAddDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj)
                  * so continue to init our own things.
                  */
 #ifdef VBOX_WITH_GUEST_BUGCHECK_DETECTION
-                vbgdNtBugCheckCallback(pDevExt); /* Ignore failure! */
+                vgdrvNtBugCheckCallback(pDevExt); /* Ignore failure! */
 #endif
                 if (NT_SUCCESS(rc))
                 {
@@ -275,7 +282,7 @@ static NTSTATUS vbgdNtAddDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj)
 
                     /* Driver is ready now. */
                     pDeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
-                    LogFlowFunc(("Returning with rc=0x%x (success)\n", rc));
+                    LogFlowFunc(("Returning with rc=%#x (success)\n", rc));
                     return rc;
                 }
 
@@ -297,20 +304,20 @@ static NTSTATUS vbgdNtAddDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj)
     else
         LogFunc(("IoCreateDevice failed with rc=%#x!\n", rc));
 
-    LogFunc(("Returning with rc=0x%x\n", rc));
+    LogFunc(("Returning with rc=%#x\n", rc));
     return rc;
 }
-#endif
+#endif /* TARGET_NT4 */
 
 
+#ifdef LOG_ENABLED
 /**
  * Debug helper to dump a device resource list.
  *
  * @param pResourceList  list of device resources.
  */
-static void vbgdNtShowDeviceResources(PCM_PARTIAL_RESOURCE_LIST pResourceList)
+static void vgdrvNtShowDeviceResources(PCM_PARTIAL_RESOURCE_LIST pResourceList)
 {
-#ifdef LOG_ENABLED
     PCM_PARTIAL_RESOURCE_DESCRIPTOR pResource = pResourceList->PartialDescriptors;
     ULONG cResources = pResourceList->Count;
 
@@ -338,19 +345,16 @@ static void vbgdNtShowDeviceResources(PCM_PARTIAL_RESOURCE_LIST pResourceList)
             case CmResourceTypePort:
             case CmResourceTypeMemory:
                 LogFunc(("Start %8X%8.8lX, length=%X\n",
-                         pResource->u.Port.Start.HighPart, pResource->u.Port.Start.LowPart,
-                         pResource->u.Port.Length));
+                         pResource->u.Port.Start.HighPart, pResource->u.Port.Start.LowPart, pResource->u.Port.Length));
                 break;
 
             case CmResourceTypeInterrupt:
                 LogFunc(("Level=%X, vector=%X, affinity=%X\n",
-                         pResource->u.Interrupt.Level, pResource->u.Interrupt.Vector,
-                         pResource->u.Interrupt.Affinity));
+                         pResource->u.Interrupt.Level, pResource->u.Interrupt.Vector, pResource->u.Interrupt.Affinity));
                 break;
 
             case CmResourceTypeDma:
-                LogFunc(("Channel %d, Port %X\n",
-                         pResource->u.Dma.Channel, pResource->u.Dma.Port));
+                LogFunc(("Channel %d, Port %X\n", pResource->u.Dma.Channel, pResource->u.Dma.Port));
                 break;
 
             default:
@@ -358,8 +362,8 @@ static void vbgdNtShowDeviceResources(PCM_PARTIAL_RESOURCE_LIST pResourceList)
                 break;
         }
     }
-#endif
 }
+#endif /* LOG_ENABLED */
 
 
 /**
@@ -369,9 +373,9 @@ static void vbgdNtShowDeviceResources(PCM_PARTIAL_RESOURCE_LIST pResourceList)
  * @param  pIrp       Request packet.
  */
 #ifndef TARGET_NT4
-NTSTATUS vbgdNtInit(PDEVICE_OBJECT pDevObj, PIRP pIrp)
+NTSTATUS vgdrvNtInit(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 #else
-NTSTATUS vbgdNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STRING pRegPath)
+NTSTATUS vgdrvNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STRING pRegPath)
 #endif
 {
     PVBOXGUESTDEVEXTWIN pDevExt = (PVBOXGUESTDEVEXTWIN)pDevObj->DeviceExtension;
@@ -381,7 +385,7 @@ NTSTATUS vbgdNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STR
 
     LogFlowFuncEnter();
 
-    int rc = STATUS_SUCCESS; /** @todo r=bird: s/rc/rcNt/ and s/int/NTSTATUS/. gee. */
+    NTSTATUS rcNt;
 #ifdef TARGET_NT4
     /*
      * Let's have a look at what our PCI adapter offers.
@@ -392,21 +396,22 @@ NTSTATUS vbgdNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STR
     PCM_RESOURCE_LIST pResourceList = NULL;
     UNICODE_STRING classNameString;
     RtlInitUnicodeString(&classNameString, L"VBoxGuestAdapter");
-    rc = HalAssignSlotResources(pRegPath, &classNameString,
-                                pDrvObj, pDevObj,
-                                PCIBus, pDevExt->busNumber, pDevExt->slotNumber,
-                                &pResourceList);
+    rcNt = HalAssignSlotResources(pRegPath, &classNameString, pDrvObj, pDevObj,
+                                  PCIBus, pDevExt->busNumber, pDevExt->slotNumber, &pResourceList);
+# ifdef LOG_ENABLED
     if (pResourceList && pResourceList->Count > 0)
-        vbgdNtShowDeviceResources(&pResourceList->List[0].PartialResourceList);
-    if (NT_SUCCESS(rc))
-        rc = vbgdNtScanPCIResourceList(pResourceList, pDevExt);
+        vgdrvNtShowDeviceResources(&pResourceList->List[0].PartialResourceList);
+# endif
+    if (NT_SUCCESS(rcNt))
+        rcNt = vgdrvNtScanPCIResourceList(pResourceList, pDevExt);
 #else
+# ifdef LOG_ENABLED
     if (pStack->Parameters.StartDevice.AllocatedResources->Count > 0)
-        vbgdNtShowDeviceResources(&pStack->Parameters.StartDevice.AllocatedResources->List[0].PartialResourceList);
-    if (NT_SUCCESS(rc))
-        rc = vbgdNtScanPCIResourceList(pStack->Parameters.StartDevice.AllocatedResourcesTranslated, pDevExt);
+        vgdrvNtShowDeviceResources(&pStack->Parameters.StartDevice.AllocatedResources->List[0].PartialResourceList);
+# endif
+    rcNt = vgdrvNtScanPCIResourceList(pStack->Parameters.StartDevice.AllocatedResourcesTranslated, pDevExt);
 #endif
-    if (NT_SUCCESS(rc))
+    if (NT_SUCCESS(rcNt))
     {
         /*
          * Map physical address of VMMDev memory into MMIO region
@@ -414,52 +419,52 @@ NTSTATUS vbgdNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STR
          */
         void *pvMMIOBase = NULL;
         uint32_t cbMMIO = 0;
-        rc = vbgdNtMapVMMDevMemory(pDevExt,
-                                   pDevExt->vmmDevPhysMemoryAddress,
-                                   pDevExt->vmmDevPhysMemoryLength,
-                                   &pvMMIOBase,
-                                   &cbMMIO);
-        if (NT_SUCCESS(rc))
+        rcNt = vgdrvNtMapVMMDevMemory(pDevExt,
+                                      pDevExt->vmmDevPhysMemoryAddress,
+                                      pDevExt->vmmDevPhysMemoryLength,
+                                      &pvMMIOBase,
+                                      &cbMMIO);
+        if (NT_SUCCESS(rcNt))
         {
             pDevExt->Core.pVMMDevMemory = (VMMDevMemory *)pvMMIOBase;
 
             LogFunc(("pvMMIOBase=0x%p, pDevExt=0x%p, pDevExt->Core.pVMMDevMemory=0x%p\n",
                      pvMMIOBase, pDevExt, pDevExt ? pDevExt->Core.pVMMDevMemory : NULL));
 
-            int vrc = VbgdCommonInitDevExt(&pDevExt->Core,
-                                           pDevExt->Core.IOPortBase,
-                                           pvMMIOBase, cbMMIO,
-                                           vbgdNtVersionToOSType(g_enmVbgdNtVer),
-                                           VMMDEV_EVENT_MOUSE_POSITION_CHANGED);
+            int vrc = VGDrvCommonInitDevExt(&pDevExt->Core,
+                                            pDevExt->Core.IOPortBase,
+                                            pvMMIOBase, cbMMIO,
+                                            vgdrvNtVersionToOSType(g_enmVGDrvNtVer),
+                                            VMMDEV_EVENT_MOUSE_POSITION_CHANGED);
             if (RT_FAILURE(vrc))
             {
-                LogFunc(("Could not init device extension, rc=%Rrc\n", vrc));
-                rc = STATUS_DEVICE_CONFIGURATION_ERROR;
+                LogFunc(("Could not init device extension, vrc=%Rrc\n", vrc));
+                rcNt = STATUS_DEVICE_CONFIGURATION_ERROR;
             }
         }
         else
-            LogFunc(("Could not map physical address of VMMDev, rc=0x%x\n", rc));
+            LogFunc(("Could not map physical address of VMMDev, rcNt=%#x\n", rcNt));
     }
 
-    if (NT_SUCCESS(rc))
+    if (NT_SUCCESS(rcNt))
     {
         int vrc = VbglGRAlloc((VMMDevRequestHeader **)&pDevExt->pPowerStateRequest,
                               sizeof(VMMDevPowerStateRequest), VMMDevReq_SetPowerStatus);
         if (RT_FAILURE(vrc))
         {
-            LogFunc(("Alloc for pPowerStateRequest failed, rc=%Rrc\n", vrc));
-            rc = STATUS_UNSUCCESSFUL;
+            LogFunc(("Alloc for pPowerStateRequest failed, vrc=%Rrc\n", vrc));
+            rcNt = STATUS_UNSUCCESSFUL;
         }
     }
 
-    if (NT_SUCCESS(rc))
+    if (NT_SUCCESS(rcNt))
     {
         /*
          * Register DPC and ISR.
          */
         LogFlowFunc(("Initializing DPC/ISR ...\n"));
 
-        IoInitializeDpcRequest(pDevExt->pDeviceObject, vbgdNtDpcHandler);
+        IoInitializeDpcRequest(pDevExt->pDeviceObject, vgdrvNtDpcHandler);
 #ifdef TARGET_NT4
         ULONG uInterruptVector;
         KIRQL irqLevel;
@@ -488,25 +493,25 @@ NTSTATUS vbgdNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STR
         {
             LogFlowFunc(("Connecting interrupt ...\n"));
 
-            rc = IoConnectInterrupt(&pDevExt->pInterruptObject,                 /* Out: interrupt object. */
-                                    (PKSERVICE_ROUTINE)vbgdNtIsrHandler,        /* Our ISR handler. */
-                                    pDevExt,                                    /* Device context. */
-                                    NULL,                                       /* Optional spinlock. */
+            rcNt = IoConnectInterrupt(&pDevExt->pInterruptObject,                 /* Out: interrupt object. */
+                                      (PKSERVICE_ROUTINE)vgdrvNtIsrHandler,        /* Our ISR handler. */
+                                      pDevExt,                                    /* Device context. */
+                                      NULL,                                       /* Optional spinlock. */
 #ifdef TARGET_NT4
-                                    uInterruptVector,                           /* Interrupt vector. */
-                                    irqLevel,                                   /* Interrupt level. */
-                                    irqLevel,                                   /* Interrupt level. */
+                                      uInterruptVector,                           /* Interrupt vector. */
+                                      irqLevel,                                   /* Interrupt level. */
+                                      irqLevel,                                   /* Interrupt level. */
 #else
-                                    pDevExt->interruptVector,                   /* Interrupt vector. */
-                                    (KIRQL)pDevExt->interruptLevel,             /* Interrupt level. */
-                                    (KIRQL)pDevExt->interruptLevel,             /* Interrupt level. */
+                                      pDevExt->interruptVector,                   /* Interrupt vector. */
+                                      (KIRQL)pDevExt->interruptLevel,             /* Interrupt level. */
+                                      (KIRQL)pDevExt->interruptLevel,             /* Interrupt level. */
 #endif
-                                    pDevExt->interruptMode,                     /* LevelSensitive or Latched. */
-                                    TRUE,                                       /* Shareable interrupt. */
-                                    pDevExt->interruptAffinity,                 /* CPU affinity. */
-                                    FALSE);                                     /* Don't save FPU stack. */
-            if (NT_ERROR(rc))
-                LogFunc(("Could not connect interrupt, rc=0x%x\n", rc));
+                                      pDevExt->interruptMode,                     /* LevelSensitive or Latched. */
+                                      TRUE,                                       /* Shareable interrupt. */
+                                      pDevExt->interruptAffinity,                 /* CPU affinity. */
+                                      FALSE);                                     /* Don't save FPU stack. */
+            if (NT_ERROR(rcNt))
+                LogFunc(("Could not connect interrupt, rcNt=%#x\n", rcNt));
         }
         else
             LogFunc(("No interrupt vector found!\n"));
@@ -515,29 +520,28 @@ NTSTATUS vbgdNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STR
 
 #ifdef VBOX_WITH_HGCM
     LogFunc(("Allocating kernel session data ...\n"));
-    int vrc = VbgdCommonCreateKernelSession(&pDevExt->Core, &pDevExt->pKernelSession);
+    int vrc = VGDrvCommonCreateKernelSession(&pDevExt->Core, &pDevExt->pKernelSession);
     if (RT_FAILURE(vrc))
     {
-        LogFunc(("Failed to allocated kernel session data, rc=%Rrc\n", rc));
-        rc = STATUS_UNSUCCESSFUL;
+        LogFunc(("Failed to allocated kernel session data, vrc=%Rrc\n", vrc));
+        rcNt = STATUS_UNSUCCESSFUL;
     }
 #endif
 
-    if (RT_SUCCESS(rc))
+    if (RT_SUCCESS(rcNt))
     {
-        ULONG ulValue = 0;
-        NTSTATUS rcNt = vbgdNtRegistryReadDWORD(RTL_REGISTRY_SERVICES,
-                                                L"VBoxGuest", L"LoggingEnabled", &ulValue);
-        if (NT_SUCCESS(rcNt))
+        ULONG uValue = 0;
+        NTSTATUS rcNt2 = vgdrvNtRegistryReadDWORD(RTL_REGISTRY_SERVICES, L"VBoxGuest", L"LoggingEnabled", &uValue);
+        if (NT_SUCCESS(rcNt2))
         {
-            pDevExt->Core.fLoggingEnabled = ulValue >= 0xFF;
+            pDevExt->Core.fLoggingEnabled = uValue >= 0xFF;
             if (pDevExt->Core.fLoggingEnabled)
-                LogRelFunc(("Logging to host log enabled (0x%x)", ulValue));
+                LogRelFunc(("Logging to host log enabled (%#x)", uValue));
         }
 
         /* Ready to rumble! */
         LogRelFunc(("Device is ready!\n"));
-        VBOXGUEST_UPDATE_DEVSTATE(pDevExt, WORKING);
+        VBOXGUEST_UPDATE_DEVSTATE(pDevExt, VGDRVNTDEVSTATE_WORKING);
     }
     else
         pDevExt->pInterruptObject = NULL;
@@ -545,8 +549,8 @@ NTSTATUS vbgdNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STR
     /** @todo r=bird: The error cleanup here is completely missing. We'll leak a
      *        whole bunch of things... */
 
-    LogFunc(("Returned with rc=0x%x\n", rc));
-    return rc;
+    LogFunc(("Returned with rcNt=%#x\n", rcNt));
+    return rcNt;
 }
 
 
@@ -554,9 +558,9 @@ NTSTATUS vbgdNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STR
  * Cleans up hardware resources.
  * Do not delete DevExt here.
  *
- * @param   pDrvObj     Driver object.
+ * @param   pDevObj     Device object.
  */
-NTSTATUS vbgdNtCleanup(PDEVICE_OBJECT pDevObj)
+NTSTATUS vgdrvNtCleanup(PDEVICE_OBJECT pDevObj)
 {
     LogFlowFuncEnter();
 
@@ -564,11 +568,11 @@ NTSTATUS vbgdNtCleanup(PDEVICE_OBJECT pDevObj)
     if (pDevExt)
     {
 
-#if 0 /* @todo: test & enable cleaning global session data */
+#if 0 /** @todo  test & enable cleaning global session data */
 #ifdef VBOX_WITH_HGCM
         if (pDevExt->pKernelSession)
         {
-            VbgdCommonCloseSession(pDevExt, pDevExt->pKernelSession);
+            VGDrvCommonCloseSession(pDevExt, pDevExt->pKernelSession);
             pDevExt->pKernelSession = NULL;
         }
 #endif
@@ -580,14 +584,14 @@ NTSTATUS vbgdNtCleanup(PDEVICE_OBJECT pDevObj)
             pDevExt->pInterruptObject = NULL;
         }
 
-        /** @todo: cleanup the rest stuff */
+        /** @todo cleanup the rest stuff */
 
 
 #ifdef VBOX_WITH_GUEST_BUGCHECK_DETECTION
         hlpDeregisterBugCheckCallback(pDevExt); /* ignore failure! */
 #endif
         /* According to MSDN we have to unmap previously mapped memory. */
-        vbgdNtUnmapVMMDevMemory(pDevExt);
+        vgdrvNtUnmapVMMDevMemory(pDevExt);
     }
 
     return STATUS_SUCCESS;
@@ -599,16 +603,16 @@ NTSTATUS vbgdNtCleanup(PDEVICE_OBJECT pDevObj)
  *
  * @param   pDrvObj     Driver object.
  */
-static void vbgdNtUnload(PDRIVER_OBJECT pDrvObj)
+static void vgdrvNtUnload(PDRIVER_OBJECT pDrvObj)
 {
     LogFlowFuncEnter();
 
 #ifdef TARGET_NT4
-    vbgdNtCleanup(pDrvObj->DeviceObject);
+    vgdrvNtCleanup(pDrvObj->DeviceObject);
 
     /* Destroy device extension and clean up everything else. */
     if (pDrvObj->DeviceObject && pDrvObj->DeviceObject->DeviceExtension)
-        VbgdCommonDeleteDevExt((PVBOXGUESTDEVEXT)pDrvObj->DeviceObject->DeviceExtension);
+        VGDrvCommonDeleteDevExt((PVBOXGUESTDEVEXT)pDrvObj->DeviceObject->DeviceExtension);
 
     /*
      * I don't think it's possible to unload a driver which processes have
@@ -635,7 +639,7 @@ static void vbgdNtUnload(PDRIVER_OBJECT pDrvObj)
  * @param   pDevObj     Device object.
  * @param   pIrp        Request packet.
  */
-static NTSTATUS vbgdNtCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp)
+static NTSTATUS vgdrvNtCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 {
     /** @todo AssertPtrReturn(pIrp); */
     PIO_STACK_LOCATION  pStack   = IoGetCurrentIrpStackLocation(pIrp);
@@ -644,9 +648,9 @@ static NTSTATUS vbgdNtCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp)
     PVBOXGUESTDEVEXTWIN pDevExt  = (PVBOXGUESTDEVEXTWIN)pDevObj->DeviceExtension;
     NTSTATUS            rc       = STATUS_SUCCESS;
 
-    if (pDevExt->devState != WORKING)
+    if (pDevExt->enmDevState != VGDRVNTDEVSTATE_WORKING)
     {
-        LogFunc(("Device is not working currently, state=%d\n", pDevExt->devState));
+        LogFunc(("Device is not working currently, state=%d\n", pDevExt->enmDevState));
         rc = STATUS_UNSUCCESSFUL;
     }
     else if (pStack->Parameters.Create.Options & FILE_DIRECTORY_FILE)
@@ -673,12 +677,12 @@ static NTSTATUS vbgdNtCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp)
                  * Create a session object if we have a valid file object. This session object
                  * exists for every R3 process.
                  */
-                vrc = VbgdCommonCreateUserSession(&pDevExt->Core, &pSession);
+                vrc = VGDrvCommonCreateUserSession(&pDevExt->Core, &pSession);
             }
             else
             {
                 /* ... otherwise we've been called from R0! */
-                vrc = VbgdCommonCreateKernelSession(&pDevExt->Core, &pSession);
+                vrc = VGDrvCommonCreateKernelSession(&pDevExt->Core, &pSession);
             }
             if (RT_SUCCESS(vrc))
                 pFileObj->FsContext = pSession;
@@ -691,7 +695,7 @@ static NTSTATUS vbgdNtCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp)
     pIrp->IoStatus.Status = rc;
     IoCompleteRequest(pIrp, IO_NO_INCREMENT);
 
-    LogFlowFunc(("Returning rc=0x%x\n", rc));
+    LogFlowFunc(("Returning rc=%#x\n", rc));
     return rc;
 }
 
@@ -702,20 +706,19 @@ static NTSTATUS vbgdNtCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp)
  * @param   pDevObj     Device object.
  * @param   pIrp        Request packet.
  */
-static NTSTATUS vbgdNtClose(PDEVICE_OBJECT pDevObj, PIRP pIrp)
+static NTSTATUS vgdrvNtClose(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 {
     PVBOXGUESTDEVEXTWIN pDevExt  = (PVBOXGUESTDEVEXTWIN)pDevObj->DeviceExtension;
     PIO_STACK_LOCATION  pStack   = IoGetCurrentIrpStackLocation(pIrp);
     PFILE_OBJECT        pFileObj = pStack->FileObject;
 
-    LogFlowFunc(("pDevExt=0x%p, pFileObj=0x%p, FsContext=0x%p\n",
-                 pDevExt, pFileObj, pFileObj->FsContext));
+    LogFlowFunc(("pDevExt=0x%p, pFileObj=0x%p, FsContext=0x%p\n", pDevExt, pFileObj, pFileObj->FsContext));
 
 #ifdef VBOX_WITH_HGCM
     /* Close both, R0 and R3 sessions. */
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)pFileObj->FsContext;
     if (pSession)
-        VbgdCommonCloseSession(&pDevExt->Core, pSession);
+        VGDrvCommonCloseSession(&pDevExt->Core, pSession);
 #endif
 
     pFileObj->FsContext = NULL;
@@ -733,7 +736,7 @@ static NTSTATUS vbgdNtClose(PDEVICE_OBJECT pDevObj, PIRP pIrp)
  * @param   pDevObj     Device object.
  * @param   pIrp        Request packet.
  */
-static NTSTATUS vbgdNtIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
+static NTSTATUS vgdrvNtIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 {
     NTSTATUS            Status   = STATUS_SUCCESS;
     PVBOXGUESTDEVEXTWIN pDevExt  = (PVBOXGUESTDEVEXTWIN)pDevObj->DeviceExtension;
@@ -750,8 +753,7 @@ static NTSTATUS vbgdNtIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
     if (pFileObj) /* ... then we might have a session object as well! */
         pSession = (PVBOXGUESTSESSION)pFileObj->FsContext;
 
-    LogFlowFunc(("uCmd=%u, pDevExt=0x%p, pSession=0x%p\n",
-                 uCmd, pDevExt, pSession));
+    LogFlowFunc(("uCmd=%u, pDevExt=0x%p, pSession=0x%p\n", uCmd, pDevExt, pSession));
 
     /* We don't have a session associated with the file object? So this seems
      * to be a kernel call then. */
@@ -773,7 +775,7 @@ static NTSTATUS vbgdNtIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
          * Process the common IOCtls.
          */
         size_t cbDataReturned;
-        int vrc = VbgdCommonIoCtl(uCmd, &pDevExt->Core, pSession, pBuf, cbData, &cbDataReturned);
+        int vrc = VGDrvCommonIoCtl(uCmd, &pDevExt->Core, pSession, pBuf, cbData, &cbDataReturned);
 
         LogFlowFunc(("rc=%Rrc, pBuf=0x%p, cbData=%u, cbDataReturned=%u\n",
                      vrc, pBuf, cbData, cbDataReturned));
@@ -822,7 +824,7 @@ static NTSTATUS vbgdNtIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
  * @param   pDevObj     Device object.
  * @param   pIrp        Request packet.
  */
-static NTSTATUS vbgdNtInternalIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
+static NTSTATUS vgdrvNtInternalIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 {
     NTSTATUS            Status      = STATUS_SUCCESS;
     PVBOXGUESTDEVEXTWIN pDevExt     = (PVBOXGUESTDEVEXTWIN)pDevObj->DeviceExtension;
@@ -876,7 +878,7 @@ static NTSTATUS vbgdNtInternalIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
     /*
      * No override, go to common code.
      */
-    return vbgdNtIOCtl(pDevObj, pIrp);
+    return vgdrvNtIOCtl(pDevObj, pIrp);
 }
 
 
@@ -887,7 +889,7 @@ static NTSTATUS vbgdNtInternalIOCtl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
  * @param   pDevObj     Device object.
  * @param   pIrp        IRP.
  */
-NTSTATUS vbgdNtSystemControl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
+static NTSTATUS vgdrvNtSystemControl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 {
     PVBOXGUESTDEVEXTWIN pDevExt = (PVBOXGUESTDEVEXTWIN)pDevObj->DeviceExtension;
 
@@ -907,7 +909,7 @@ NTSTATUS vbgdNtSystemControl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
  * @param pDevObj    Device object.
  * @param pIrp       IRP.
  */
-NTSTATUS vbgdNtShutdown(PDEVICE_OBJECT pDevObj, PIRP pIrp)
+static NTSTATUS vgdrvNtShutdown(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 {
     PVBOXGUESTDEVEXTWIN pDevExt = (PVBOXGUESTDEVEXTWIN)pDevObj->DeviceExtension;
 
@@ -935,7 +937,7 @@ NTSTATUS vbgdNtShutdown(PDEVICE_OBJECT pDevObj, PIRP pIrp)
  * @param   pDevObj     Device object.
  * @param   pIrp        IRP.
  */
-NTSTATUS vbgdNtNotSupportedStub(PDEVICE_OBJECT pDevObj, PIRP pIrp)
+static NTSTATUS vgdrvNtNotSupportedStub(PDEVICE_OBJECT pDevObj, PIRP pIrp)
 {
     LogFlowFuncEnter();
 
@@ -955,7 +957,7 @@ NTSTATUS vbgdNtNotSupportedStub(PDEVICE_OBJECT pDevObj, PIRP pIrp)
  * @param   pIrp        Interrupt request packet.
  * @param   pContext    Context specific pointer.
  */
-void vbgdNtDpcHandler(PKDPC pDPC, PDEVICE_OBJECT pDevObj, PIRP pIrp, PVOID pContext)
+static void vgdrvNtDpcHandler(PKDPC pDPC, PDEVICE_OBJECT pDevObj, PIRP pIrp, PVOID pContext)
 {
     PVBOXGUESTDEVEXTWIN pDevExt = (PVBOXGUESTDEVEXTWIN)pDevObj->DeviceExtension;
     Log3Func(("pDevExt=0x%p\n", pDevExt));
@@ -975,8 +977,8 @@ void vbgdNtDpcHandler(PKDPC pDPC, PDEVICE_OBJECT pDevObj, PIRP pIrp, PVOID pCont
     }
 
     /* Process the wake-up list we were asked by the scheduling a DPC
-     * in vbgdNtIsrHandler(). */
-    VbgdCommonWaitDoWakeUps(&pDevExt->Core);
+     * in vgdrvNtIsrHandler(). */
+    VGDrvCommonWaitDoWakeUps(&pDevExt->Core);
 }
 
 
@@ -987,7 +989,7 @@ void vbgdNtDpcHandler(PKDPC pDPC, PDEVICE_OBJECT pDevObj, PIRP pIrp, PVOID pCont
  * @param   pInterrupt      Interrupt that was triggered.
  * @param   pServiceContext Context specific pointer.
  */
-BOOLEAN vbgdNtIsrHandler(PKINTERRUPT pInterrupt, PVOID pServiceContext)
+static BOOLEAN vgdrvNtIsrHandler(PKINTERRUPT pInterrupt, PVOID pServiceContext)
 {
     PVBOXGUESTDEVEXTWIN pDevExt = (PVBOXGUESTDEVEXTWIN)pServiceContext;
     if (pDevExt == NULL)
@@ -996,7 +998,7 @@ BOOLEAN vbgdNtIsrHandler(PKINTERRUPT pInterrupt, PVOID pServiceContext)
     /*Log3Func(("pDevExt=0x%p, pVMMDevMemory=0x%p\n", pDevExt, pDevExt ? pDevExt->pVMMDevMemory : NULL));*/
 
     /* Enter the common ISR routine and do the actual work. */
-    BOOLEAN fIRQTaken = VbgdCommonISR(&pDevExt->Core);
+    BOOLEAN fIRQTaken = VGDrvCommonISR(&pDevExt->Core);
 
     /* If we need to wake up some events we do that in a DPC to make
      * sure we're called at the right IRQL. */
@@ -1019,7 +1021,7 @@ BOOLEAN vbgdNtIsrHandler(PKINTERRUPT pInterrupt, PVOID pServiceContext)
  *
  * @param pDevExt     Device extension structure.
  */
-void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
+void VGDrvNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
 {
     NOREF(pDevExt);
     /* nothing to do here - i.e. since we can not KeSetEvent from ISR level,
@@ -1039,7 +1041,7 @@ void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt)
  *                      not specified in ulRoot), on output this will retrieve the looked up
  *                      registry value if found.
  */
-NTSTATUS vbgdNtRegistryReadDWORD(ULONG ulRoot, PCWSTR pwszPath, PWSTR pwszName, PULONG puValue)
+static NTSTATUS vgdrvNtRegistryReadDWORD(ULONG ulRoot, PCWSTR pwszPath, PWSTR pwszName, PULONG puValue)
 {
     if (!pwszPath || !pwszName || !puValue)
         return STATUS_INVALID_PARAMETER;
@@ -1070,7 +1072,7 @@ NTSTATUS vbgdNtRegistryReadDWORD(ULONG ulRoot, PCWSTR pwszPath, PWSTR pwszName,
  * @param pResList  Resource list
  * @param pDevExt   Device extension
  */
-NTSTATUS vbgdNtScanPCIResourceList(PCM_RESOURCE_LIST pResList, PVBOXGUESTDEVEXTWIN pDevExt)
+static NTSTATUS vgdrvNtScanPCIResourceList(PCM_RESOURCE_LIST pResList, PVBOXGUESTDEVEXTWIN pDevExt)
 {
     /* Enumerate the resource list. */
     LogFlowFunc(("Found %d resources\n",
@@ -1202,8 +1204,8 @@ NTSTATUS vbgdNtScanPCIResourceList(PCM_RESOURCE_LIST pResList, PVBOXGUESTDEVEXTW
  * @param ppvMMIOBase       Pointer of mapped I/O base.
  * @param pcbMMIO           Length of mapped I/O base.
  */
-NTSTATUS vbgdNtMapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt, PHYSICAL_ADDRESS PhysAddr, ULONG cbToMap,
-                               void **ppvMMIOBase, uint32_t *pcbMMIO)
+static NTSTATUS vgdrvNtMapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt, PHYSICAL_ADDRESS PhysAddr, ULONG cbToMap,
+                                       void **ppvMMIOBase, uint32_t *pcbMMIO)
 {
     AssertPtrReturn(pDevExt, VERR_INVALID_POINTER);
     AssertPtrReturn(ppvMMIOBase, VERR_INVALID_POINTER);
@@ -1213,10 +1215,10 @@ NTSTATUS vbgdNtMapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt, PHYSICAL_ADDRESS Phy
     if (PhysAddr.LowPart > 0) /* We're mapping below 4GB. */
     {
          VMMDevMemory *pVMMDevMemory = (VMMDevMemory *)MmMapIoSpace(PhysAddr, cbToMap, MmNonCached);
-         LogFlowFunc(("pVMMDevMemory = 0x%x\n", pVMMDevMemory));
+         LogFlowFunc(("pVMMDevMemory = %#x\n", pVMMDevMemory));
          if (pVMMDevMemory)
          {
-             LogFunc(("VMMDevMemory: Version = 0x%x, Size = %d\n", pVMMDevMemory->u32Version, pVMMDevMemory->u32Size));
+             LogFunc(("VMMDevMemory: Version = %#x, Size = %d\n", pVMMDevMemory->u32Version, pVMMDevMemory->u32Size));
 
              /* Check version of the structure; do we have the right memory version? */
              if (pVMMDevMemory->u32Version == VMMDEV_MEMORY_VERSION)
@@ -1233,7 +1235,7 @@ NTSTATUS vbgdNtMapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt, PHYSICAL_ADDRESS Phy
                  /* Not our version, refuse operation and unmap the memory. */
                  LogFunc(("Wrong version (%u), refusing operation!\n", pVMMDevMemory->u32Version));
 
-                 vbgdNtUnmapVMMDevMemory(pDevExt);
+                 vgdrvNtUnmapVMMDevMemory(pDevExt);
                  rc = STATUS_UNSUCCESSFUL;
              }
          }
@@ -1249,9 +1251,9 @@ NTSTATUS vbgdNtMapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt, PHYSICAL_ADDRESS Phy
  *
  * @param   pDevExt     The device extension.
  */
-void vbgdNtUnmapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt)
+void vgdrvNtUnmapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt)
 {
-    LogFlowFunc(("pVMMDevMemory = 0x%x\n", pDevExt->Core.pVMMDevMemory));
+    LogFlowFunc(("pVMMDevMemory = %#x\n", pDevExt->Core.pVMMDevMemory));
     if (pDevExt->Core.pVMMDevMemory)
     {
         MmUnmapIoSpace((void*)pDevExt->Core.pVMMDevMemory, pDevExt->vmmDevPhysMemoryLength);
@@ -1263,20 +1265,26 @@ void vbgdNtUnmapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt)
 }
 
 
-VBOXOSTYPE vbgdNtVersionToOSType(VBGDNTVER enmNtVer)
+/**
+ * Translates NT version to VBox OS.
+ *
+ * @returns VBox OS type.
+ * @param   enmNtVer            The NT version.
+ */
+VBOXOSTYPE vgdrvNtVersionToOSType(VGDRVNTVER enmNtVer)
 {
     VBOXOSTYPE enmOsType;
     switch (enmNtVer)
     {
-        case VBGDNTVER_WINNT4:
+        case VGDRVNTVER_WINNT4:
             enmOsType = VBOXOSTYPE_WinNT4;
             break;
 
-        case VBGDNTVER_WIN2K:
+        case VGDRVNTVER_WIN2K:
             enmOsType = VBOXOSTYPE_Win2k;
             break;
 
-        case VBGDNTVER_WINXP:
+        case VGDRVNTVER_WINXP:
 #if ARCH_BITS == 64
             enmOsType = VBOXOSTYPE_WinXP_x64;
 #else
@@ -1284,7 +1292,7 @@ VBOXOSTYPE vbgdNtVersionToOSType(VBGDNTVER enmNtVer)
 #endif
             break;
 
-        case VBGDNTVER_WIN2K3:
+        case VGDRVNTVER_WIN2K3:
 #if ARCH_BITS == 64
             enmOsType = VBOXOSTYPE_Win2k3_x64;
 #else
@@ -1292,7 +1300,7 @@ VBOXOSTYPE vbgdNtVersionToOSType(VBGDNTVER enmNtVer)
 #endif
             break;
 
-        case VBGDNTVER_WINVISTA:
+        case VGDRVNTVER_WINVISTA:
 #if ARCH_BITS == 64
             enmOsType = VBOXOSTYPE_WinVista_x64;
 #else
@@ -1300,7 +1308,7 @@ VBOXOSTYPE vbgdNtVersionToOSType(VBGDNTVER enmNtVer)
 #endif
             break;
 
-        case VBGDNTVER_WIN7:
+        case VGDRVNTVER_WIN7:
 #if ARCH_BITS == 64
             enmOsType = VBOXOSTYPE_Win7_x64;
 #else
@@ -1308,7 +1316,7 @@ VBOXOSTYPE vbgdNtVersionToOSType(VBGDNTVER enmNtVer)
 #endif
             break;
 
-        case VBGDNTVER_WIN8:
+        case VGDRVNTVER_WIN8:
 #if ARCH_BITS == 64
             enmOsType = VBOXOSTYPE_Win8_x64;
 #else
@@ -1316,7 +1324,7 @@ VBOXOSTYPE vbgdNtVersionToOSType(VBGDNTVER enmNtVer)
 #endif
             break;
 
-        case VBGDNTVER_WIN81:
+        case VGDRVNTVER_WIN81:
 #if ARCH_BITS == 64
             enmOsType = VBOXOSTYPE_Win81_x64;
 #else
@@ -1324,7 +1332,7 @@ VBOXOSTYPE vbgdNtVersionToOSType(VBGDNTVER enmNtVer)
 #endif
             break;
 
-        case VBGDNTVER_WIN10:
+        case VGDRVNTVER_WIN10:
 #if ARCH_BITS == 64
             enmOsType = VBOXOSTYPE_Win10_x64;
 #else
@@ -1340,15 +1348,15 @@ VBOXOSTYPE vbgdNtVersionToOSType(VBGDNTVER enmNtVer)
     return enmOsType;
 }
 
-#ifdef DEBUG
+#ifdef VBOX_STRICT
 
 /**
  * A quick implementation of AtomicTestAndClear for uint32_t and multiple bits.
  */
-static uint32_t vboxugestwinAtomicBitsTestAndClear(void *pu32Bits, uint32_t u32Mask)
+static uint32_t vgdrvNtAtomicBitsTestAndClear(void *pu32Bits, uint32_t u32Mask)
 {
     AssertPtrReturn(pu32Bits, 0);
-    LogFlowFunc(("*pu32Bits=0x%x, u32Mask=0x%x\n", *(uint32_t *)pu32Bits, u32Mask));
+    LogFlowFunc(("*pu32Bits=%#x, u32Mask=%#x\n", *(uint32_t *)pu32Bits, u32Mask));
     uint32_t u32Result = 0;
     uint32_t u32WorkingMask = u32Mask;
     int iBitOffset = ASMBitFirstSetU32 (u32WorkingMask);
@@ -1361,37 +1369,36 @@ static uint32_t vboxugestwinAtomicBitsTestAndClear(void *pu32Bits, uint32_t u32M
         u32WorkingMask &= ~(1 << (iBitOffset - 1));
         iBitOffset = ASMBitFirstSetU32 (u32WorkingMask);
     }
-    LogFlowFunc(("Returning 0x%x\n", u32Result));
+    LogFlowFunc(("Returning %#x\n", u32Result));
     return u32Result;
 }
 
 
-static void vbgdNtTestAtomicTestAndClearBitsU32(uint32_t u32Mask, uint32_t u32Bits, uint32_t u32Exp)
+static void vgdrvNtTestAtomicTestAndClearBitsU32(uint32_t u32Mask, uint32_t u32Bits, uint32_t u32Exp)
 {
     ULONG u32Bits2 = u32Bits;
-    uint32_t u32Result = vboxugestwinAtomicBitsTestAndClear(&u32Bits2, u32Mask);
+    uint32_t u32Result = vgdrvNtAtomicBitsTestAndClear(&u32Bits2, u32Mask);
     if (   u32Result != u32Exp
         || (u32Bits2 & u32Mask)
         || (u32Bits2 & u32Result)
         || ((u32Bits2 | u32Result) != u32Bits)
        )
-        AssertLogRelMsgFailed(("%s: TEST FAILED: u32Mask=0x%x, u32Bits (before)=0x%x, u32Bits (after)=0x%x, u32Result=0x%x, u32Exp=ox%x\n",
-                               __PRETTY_FUNCTION__, u32Mask, u32Bits, u32Bits2,
-                               u32Result));
+        AssertLogRelMsgFailed(("TEST FAILED: u32Mask=%#x, u32Bits (before)=%#x, u32Bits (after)=%#x, u32Result=%#x, u32Exp=%#x\n",
+                               u32Mask, u32Bits, u32Bits2, u32Result));
 }
 
 
-static void vbgdNtDoTests(void)
+static void vgdrvNtDoTests(void)
 {
-    vbgdNtTestAtomicTestAndClearBitsU32(0x00, 0x23, 0);
-    vbgdNtTestAtomicTestAndClearBitsU32(0x11, 0, 0);
-    vbgdNtTestAtomicTestAndClearBitsU32(0x11, 0x22, 0);
-    vbgdNtTestAtomicTestAndClearBitsU32(0x11, 0x23, 0x1);
-    vbgdNtTestAtomicTestAndClearBitsU32(0x11, 0x32, 0x10);
-    vbgdNtTestAtomicTestAndClearBitsU32(0x22, 0x23, 0x22);
+    vgdrvNtTestAtomicTestAndClearBitsU32(0x00, 0x23, 0);
+    vgdrvNtTestAtomicTestAndClearBitsU32(0x11, 0, 0);
+    vgdrvNtTestAtomicTestAndClearBitsU32(0x11, 0x22, 0);
+    vgdrvNtTestAtomicTestAndClearBitsU32(0x11, 0x23, 0x1);
+    vgdrvNtTestAtomicTestAndClearBitsU32(0x11, 0x32, 0x10);
+    vgdrvNtTestAtomicTestAndClearBitsU32(0x22, 0x23, 0x22);
 }
 
-#endif /* DEBUG */
+#endif /* VBOX_STRICT */
 
 #ifdef VBOX_WITH_DPC_LATENCY_CHECKER
 
@@ -1450,7 +1457,7 @@ AssertCompileMemberAlignment(DPCDATA, aSamples, 64);
  * @param   SystemArgument1     System use, ignored.
  * @param   SystemArgument2     System use, ignored.
  */
-static VOID vbgdNtDpcLatencyCallback(PKDPC pDpc, PVOID pvDeferredContext, PVOID SystemArgument1, PVOID SystemArgument2)
+static VOID vgdrvNtDpcLatencyCallback(PKDPC pDpc, PVOID pvDeferredContext, PVOID SystemArgument1, PVOID SystemArgument2)
 {
     DPCDATA *pData = (DPCDATA *)pvDeferredContext;
 
@@ -1480,7 +1487,7 @@ static VOID vbgdNtDpcLatencyCallback(PKDPC pDpc, PVOID pvDeferredContext, PVOID
  *
  * @returns VBox status code.
  */
-int VbgdNtIOCtl_DpcLatencyChecker(void)
+int VGDrvNtIOCtl_DpcLatencyChecker(void)
 {
     /*
      * Allocate a block of non paged memory for samples and related data.
@@ -1495,7 +1502,7 @@ int VbgdNtIOCtl_DpcLatencyChecker(void)
     /*
      * Initialize the data.
      */
-    KeInitializeDpc(&pData->Dpc, vbgdNtDpcLatencyCallback, pData);
+    KeInitializeDpc(&pData->Dpc, vgdrvNtDpcLatencyCallback, pData);
     KeInitializeTimer(&pData->Timer);
     KeInitializeSpinLock(&pData->SpinLock);
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.h b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.h
index caca294..991d0a7 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.h
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest-win.h
@@ -41,15 +41,15 @@ RT_C_DECLS_END
 
 
 /** Possible device states for our state machine. */
-enum DEVSTATE
+typedef enum VGDRVNTDEVSTATE
 {
-    STOPPED,
-    WORKING,
-    PENDINGSTOP,
-    PENDINGREMOVE,
-    SURPRISEREMOVED,
-    REMOVED
-};
+    VGDRVNTDEVSTATE_STOPPED,
+    VGDRVNTDEVSTATE_WORKING,
+    VGDRVNTDEVSTATE_PENDINGSTOP,
+    VGDRVNTDEVSTATE_PENDINGREMOVE,
+    VGDRVNTDEVSTATE_SURPRISEREMOVED,
+    VGDRVNTDEVSTATE_REMOVED
+} VGDRVNTDEVSTATE;
 
 typedef struct VBOXGUESTWINBASEADDRESS
 {
@@ -104,8 +104,9 @@ typedef struct VBOXGUESTDEVEXTWIN
     ULONG vmmDevPhysMemoryLength;
 
     /** Device state. */
-    DEVSTATE devState;
-    DEVSTATE prevDevState;
+    VGDRVNTDEVSTATE enmDevState;
+    /** The previous device state.   */
+    VGDRVNTDEVSTATE enmPrevDevState;
 
     /** Last system power action set (see VBoxGuestPower). */
     POWER_ACTION LastSystemPowerAction;
@@ -125,26 +126,26 @@ typedef struct VBOXGUESTDEVEXTWIN
 
 
 /** NT (windows) version identifier. */
-typedef enum VBGDNTVER
+typedef enum VGDRVNTVER
 {
-    VBGDNTVER_INVALID = 0,
-    VBGDNTVER_WINNT4,
-    VBGDNTVER_WIN2K,
-    VBGDNTVER_WINXP,
-    VBGDNTVER_WIN2K3,
-    VBGDNTVER_WINVISTA,
-    VBGDNTVER_WIN7,
-    VBGDNTVER_WIN8,
-    VBGDNTVER_WIN81,
-    VBGDNTVER_WIN10
-} VBGDNTVER;
-extern VBGDNTVER g_enmVbgdNtVer;
-
-
-#define VBOXGUEST_UPDATE_DEVSTATE(a_pDevExt, a_newDevState) \
+    VGDRVNTVER_INVALID = 0,
+    VGDRVNTVER_WINNT4,
+    VGDRVNTVER_WIN2K,
+    VGDRVNTVER_WINXP,
+    VGDRVNTVER_WIN2K3,
+    VGDRVNTVER_WINVISTA,
+    VGDRVNTVER_WIN7,
+    VGDRVNTVER_WIN8,
+    VGDRVNTVER_WIN81,
+    VGDRVNTVER_WIN10
+} VGDRVNTVER;
+extern VGDRVNTVER g_enmVGDrvNtVer;
+
+
+#define VBOXGUEST_UPDATE_DEVSTATE(a_pDevExt, a_enmNewDevState) \
     do { \
-        (a_pDevExt)->prevDevState = (a_pDevExt)->devState; \
-        (a_pDevExt)->devState     = (a_newDevState); \
+        (a_pDevExt)->enmPrevDevState = (a_pDevExt)->enmDevState; \
+        (a_pDevExt)->enmDevState     = (a_enmNewDevState); \
     } while (0)
 
 /** CM_RESOURCE_MEMORY_* flags which were used on XP or earlier. */
@@ -154,29 +155,23 @@ extern VBGDNTVER g_enmVbgdNtVer;
 RT_C_DECLS_BEGIN
 
 #ifdef TARGET_NT4
-NTSTATUS   vbgdNt4CreateDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STRING pRegPath);
+NTSTATUS   vgdrvNt4CreateDevice(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STRING pRegPath);
 #else
-NTSTATUS   vbgdNtInit(PDEVICE_OBJECT pDevObj, PIRP pIrp);
-NTSTATUS   vbgdNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp);
-NTSTATUS   vbgdNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp);
+NTSTATUS   vgdrvNtPnP(PDEVICE_OBJECT pDevObj, PIRP pIrp);
+NTSTATUS   vgdrvNtPower(PDEVICE_OBJECT pDevObj, PIRP pIrp);
 #endif
 
 /** @name Common routines used in both (PnP and legacy) driver versions.
  * @{
  */
 #ifdef TARGET_NT4
-NTSTATUS   vbgdNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STRING pRegPath);
+NTSTATUS   vgdrvNtInit(PDRIVER_OBJECT pDrvObj, PDEVICE_OBJECT pDevObj, PUNICODE_STRING pRegPath);
 #else
-NTSTATUS   vbgdNtInit(PDEVICE_OBJECT pDevObj, PIRP pIrp);
+NTSTATUS   vgdrvNtInit(PDEVICE_OBJECT pDevObj, PIRP pIrp);
 #endif
-NTSTATUS   vbgdNtCleanup(PDEVICE_OBJECT pDevObj);
-VOID       vbgdNtDpcHandler(PKDPC pDPC, PDEVICE_OBJECT pDevObj, PIRP pIrp, PVOID pContext);
-BOOLEAN    vbgdNtIsrHandler(PKINTERRUPT interrupt, PVOID serviceContext);
-NTSTATUS   vbgdNtScanPCIResourceList(PCM_RESOURCE_LIST pResList, PVBOXGUESTDEVEXTWIN pDevExt);
-NTSTATUS   vbgdNtMapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt, PHYSICAL_ADDRESS PhysAddr, ULONG cbToMap,
-                                 void **ppvMMIOBase, uint32_t *pcbMMIO);
-void       vbgdNtUnmapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt);
-VBOXOSTYPE vbgdNtVersionToOSType(VBGDNTVER enmNtVer);
+NTSTATUS   vgdrvNtCleanup(PDEVICE_OBJECT pDevObj);
+void       vgdrvNtUnmapVMMDevMemory(PVBOXGUESTDEVEXTWIN pDevExt); /**< @todo make static once buggy vgdrvNtInit is fixed. */
+VBOXOSTYPE vgdrvNtVersionToOSType(VGDRVNTVER enmNtVer);
 /** @}  */
 
 RT_C_DECLS_END
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp b/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
index 5e3357d..835a3ff 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp
@@ -24,6 +24,28 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
+/** @page pg_vbdrv VBoxGuest
+ *
+ * VBoxGuest is the device driver for VMMDev.
+ *
+ * The device driver is shipped as part of the guest additions.  It has roots in
+ * the host VMM support driver (usually known as VBoxDrv), so fixes in platform
+ * specific code may apply to both drivers.
+ *
+ * The common code lives in VBoxGuest.cpp and is compiled both as C++ and C.
+ * The VBoxGuest.cpp source file shall not contain platform specific code,
+ * though it must occationally do a few \#ifdef RT_OS_XXX tests to cater for
+ * platform differences.  Though, in those cases, it is common that more than
+ * one platform needs special handling.
+ *
+ * On most platforms the device driver should create two device nodes, one for
+ * full (unrestricted) access to the feature set, and one which only provides a
+ * restrict set of functions.  These are generally referred to as 'vboxguest'
+ * and 'vboxuser' respectively.  Currently, this two device approach is only
+ * implemented on Linux!
+ *
+ */
+
 
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
@@ -69,23 +91,23 @@
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
 #ifdef VBOX_WITH_HGCM
-static DECLCALLBACK(int) vbgdHgcmAsyncWaitCallback(VMMDevHGCMRequestHeader *pHdrNonVolatile, void *pvUser, uint32_t u32User);
+static DECLCALLBACK(int) vgdrvHgcmAsyncWaitCallback(VMMDevHGCMRequestHeader *pHdrNonVolatile, void *pvUser, uint32_t u32User);
 #endif
-static int      vbgdIoCtl_CancelAllWaitEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
-static void     vbgdBitUsageTrackerClear(PVBOXGUESTBITUSAGETRACER pTracker);
-static uint32_t vbgdGetAllowedEventMaskForSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
-static int      vbgdResetEventFilterOnHost(PVBOXGUESTDEVEXT pDevExt, uint32_t fFixedEvents);
-static int      vbgdResetMouseStatusOnHost(PVBOXGUESTDEVEXT pDevExt);
-static int      vbgdResetCapabilitiesOnHost(PVBOXGUESTDEVEXT pDevExt);
-static int      vbgdSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                          uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination);
-static int      vbgdSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                          uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination);
-static int      vbgdSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                           uint32_t fOrMask, uint32_t fNoMask, bool fSessionTermination);
-static int      vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, uint32_t fOrMask,
-                                               uint32_t fNotMask, VBOXGUESTCAPSACQUIRE_FLAGS enmFlags, bool fSessionTermination);
-static int      vbgdDispatchEventsLocked(PVBOXGUESTDEVEXT pDevExt, uint32_t fEvents);
+static int      vgdrvIoCtl_CancelAllWaitEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
+static void     vgdrvBitUsageTrackerClear(PVBOXGUESTBITUSAGETRACER pTracker);
+static uint32_t vgdrvGetAllowedEventMaskForSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
+static int      vgdrvResetEventFilterOnHost(PVBOXGUESTDEVEXT pDevExt, uint32_t fFixedEvents);
+static int      vgdrvResetMouseStatusOnHost(PVBOXGUESTDEVEXT pDevExt);
+static int      vgdrvResetCapabilitiesOnHost(PVBOXGUESTDEVEXT pDevExt);
+static int      vgdrvSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                           uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination);
+static int      vgdrvSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                           uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination);
+static int      vgdrvSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                            uint32_t fOrMask, uint32_t fNoMask, bool fSessionTermination);
+static int      vgdrvAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, uint32_t fOrMask,
+                                                uint32_t fNotMask, VBOXGUESTCAPSACQUIRE_FLAGS enmFlags, bool fSessionTermination);
+static int      vgdrvDispatchEventsLocked(PVBOXGUESTDEVEXT pDevExt, uint32_t fEvents);
 
 
 /*********************************************************************************************************************************
@@ -127,7 +149,7 @@ PFNRT g_apfnVBoxGuestIPRTDeps[] =
  * @returns VBox status code (ignored).
  * @param   pDevExt     The device extension.
  */
-static int vbgdInitFixateGuestMappings(PVBOXGUESTDEVEXT pDevExt)
+static int vgdrvInitFixateGuestMappings(PVBOXGUESTDEVEXT pDevExt)
 {
     /*
      * Query the required space.
@@ -150,7 +172,7 @@ static int vbgdInitFixateGuestMappings(PVBOXGUESTDEVEXT pDevExt)
      * instance in VT-x and AMD-V mode.
      */
     if (pReq->hypervisorSize == 0)
-        Log(("vbgdInitFixateGuestMappings: nothing to do\n"));
+        Log(("vgdrvInitFixateGuestMappings: nothing to do\n"));
     else
     {
         /*
@@ -162,7 +184,7 @@ static int vbgdInitFixateGuestMappings(PVBOXGUESTDEVEXT pDevExt)
         RTR0MEMOBJ  ahTries[5];
         uint32_t    iTry;
         bool        fBitched = false;
-        Log(("vbgdInitFixateGuestMappings: cbHypervisor=%#x\n", cbHypervisor));
+        Log(("vgdrvInitFixateGuestMappings: cbHypervisor=%#x\n", cbHypervisor));
         for (iTry = 0; iTry < RT_ELEMENTS(ahTries); iTry++)
         {
             /*
@@ -257,11 +279,11 @@ static int vbgdInitFixateGuestMappings(PVBOXGUESTDEVEXT pDevExt)
 
 
 /**
- * Undo what vbgdInitFixateGuestMappings did.
+ * Undo what vgdrvInitFixateGuestMappings did.
  *
  * @param   pDevExt     The device extension.
  */
-static void vbgdTermUnfixGuestMappings(PVBOXGUESTDEVEXT pDevExt)
+static void vgdrvTermUnfixGuestMappings(PVBOXGUESTDEVEXT pDevExt)
 {
     if (pDevExt->hGuestMappings != NIL_RTR0PTR)
     {
@@ -284,7 +306,7 @@ static void vbgdTermUnfixGuestMappings(PVBOXGUESTDEVEXT pDevExt)
             AssertRC(rc);
         }
         else
-            LogRel(("vbgdTermUnfixGuestMappings: Failed to unfix the guest mappings! rc=%Rrc\n", rc));
+            LogRel(("vgdrvTermUnfixGuestMappings: Failed to unfix the guest mappings! rc=%Rrc\n", rc));
 
         pDevExt->hGuestMappings = NIL_RTR0MEMOBJ;
     }
@@ -298,7 +320,7 @@ static void vbgdTermUnfixGuestMappings(PVBOXGUESTDEVEXT pDevExt)
  * @returns IPRT status code.
  * @param   enmOSType       The OS type to report.
  */
-static int vbgdReportGuestInfo(VBOXOSTYPE enmOSType)
+static int vgdrvReportGuestInfo(VBOXOSTYPE enmOSType)
 {
     /*
      * Allocate and fill in the two guest info reports.
@@ -306,7 +328,7 @@ static int vbgdReportGuestInfo(VBOXOSTYPE enmOSType)
     VMMDevReportGuestInfo2 *pReqInfo2 = NULL;
     VMMDevReportGuestInfo  *pReqInfo1 = NULL;
     int rc = VbglGRAlloc((VMMDevRequestHeader **)&pReqInfo2, sizeof (VMMDevReportGuestInfo2), VMMDevReq_ReportGuestInfo2);
-    Log(("vbgdReportGuestInfo: VbglGRAlloc VMMDevReportGuestInfo2 completed with rc=%Rrc\n", rc));
+    Log(("vgdrvReportGuestInfo: VbglGRAlloc VMMDevReportGuestInfo2 completed with rc=%Rrc\n", rc));
     if (RT_SUCCESS(rc))
     {
         pReqInfo2->guestInfo.additionsMajor    = VBOX_VERSION_MAJOR;
@@ -317,7 +339,7 @@ static int vbgdReportGuestInfo(VBOXOSTYPE enmOSType)
         RTStrCopy(pReqInfo2->guestInfo.szName, sizeof(pReqInfo2->guestInfo.szName), VBOX_VERSION_STRING);
 
         rc = VbglGRAlloc((VMMDevRequestHeader **)&pReqInfo1, sizeof (VMMDevReportGuestInfo), VMMDevReq_ReportGuestInfo);
-        Log(("vbgdReportGuestInfo: VbglGRAlloc VMMDevReportGuestInfo completed with rc=%Rrc\n", rc));
+        Log(("vgdrvReportGuestInfo: VbglGRAlloc VMMDevReportGuestInfo completed with rc=%Rrc\n", rc));
         if (RT_SUCCESS(rc))
         {
             pReqInfo1->guestInfo.interfaceVersion = VMMDEV_VERSION;
@@ -332,21 +354,21 @@ static int vbgdReportGuestInfo(VBOXOSTYPE enmOSType)
              * if not supported by the VMMDev (message ordering requirement).
              */
             rc = VbglGRPerform(&pReqInfo2->header);
-            Log(("vbgdReportGuestInfo: VbglGRPerform VMMDevReportGuestInfo2 completed with rc=%Rrc\n", rc));
+            Log(("vgdrvReportGuestInfo: VbglGRPerform VMMDevReportGuestInfo2 completed with rc=%Rrc\n", rc));
             if (RT_SUCCESS(rc))
             {
                 rc = VbglGRPerform(&pReqInfo1->header);
-                Log(("vbgdReportGuestInfo: VbglGRPerform VMMDevReportGuestInfo completed with rc=%Rrc\n", rc));
+                Log(("vgdrvReportGuestInfo: VbglGRPerform VMMDevReportGuestInfo completed with rc=%Rrc\n", rc));
             }
             else if (   rc == VERR_NOT_SUPPORTED
                      || rc == VERR_NOT_IMPLEMENTED)
             {
                 rc = VbglGRPerform(&pReqInfo1->header);
-                Log(("vbgdReportGuestInfo: VbglGRPerform VMMDevReportGuestInfo completed with rc=%Rrc\n", rc));
+                Log(("vgdrvReportGuestInfo: VbglGRPerform VMMDevReportGuestInfo completed with rc=%Rrc\n", rc));
                 if (RT_SUCCESS(rc))
                 {
                     rc = VbglGRPerform(&pReqInfo2->header);
-                    Log(("vbgdReportGuestInfo: VbglGRPerform VMMDevReportGuestInfo2 completed with rc=%Rrc\n", rc));
+                    Log(("vgdrvReportGuestInfo: VbglGRPerform VMMDevReportGuestInfo2 completed with rc=%Rrc\n", rc));
                     if (rc == VERR_NOT_IMPLEMENTED)
                         rc = VINF_SUCCESS;
                 }
@@ -366,14 +388,14 @@ static int vbgdReportGuestInfo(VBOXOSTYPE enmOSType)
  * @returns IPRT status code.
  * @param   fActive         Flag whether the driver is now active or not.
  */
-static int vbgdReportDriverStatus(bool fActive)
+static int vgdrvReportDriverStatus(bool fActive)
 {
     /*
      * Report guest status of the VBox driver to the host.
      */
     VMMDevReportGuestStatus *pReq2 = NULL;
     int rc = VbglGRAlloc((VMMDevRequestHeader **)&pReq2, sizeof(*pReq2), VMMDevReq_ReportGuestStatus);
-    Log(("vbgdReportDriverStatus: VbglGRAlloc VMMDevReportGuestStatus completed with rc=%Rrc\n", rc));
+    Log(("vgdrvReportDriverStatus: VbglGRAlloc VMMDevReportGuestStatus completed with rc=%Rrc\n", rc));
     if (RT_SUCCESS(rc))
     {
         pReq2->guestStatus.facility = VBoxGuestFacilityType_VBoxGuestDriver;
@@ -382,7 +404,7 @@ static int vbgdReportDriverStatus(bool fActive)
                                   : VBoxGuestFacilityStatus_Inactive;
         pReq2->guestStatus.flags = 0;
         rc = VbglGRPerform(&pReq2->header);
-        Log(("vbgdReportDriverStatus: VbglGRPerform VMMDevReportGuestStatus completed with fActive=%d, rc=%Rrc\n",
+        Log(("vgdrvReportDriverStatus: VbglGRPerform VMMDevReportGuestStatus completed with fActive=%d, rc=%Rrc\n",
              fActive ? 1 : 0, rc));
         if (rc == VERR_NOT_IMPLEMENTED) /* Compatibility with older hosts. */
             rc = VINF_SUCCESS;
@@ -406,7 +428,7 @@ static int vbgdReportDriverStatus(bool fActive)
  * @param   pMemObj     Pointer to the R0 memory object.
  * @param   pReq        The pre-allocated request for performing the VMMDev call.
  */
-static int vbgdBalloonInflate(PRTR0MEMOBJ pMemObj, VMMDevChangeMemBalloon *pReq)
+static int vgdrvBalloonInflate(PRTR0MEMOBJ pMemObj, VMMDevChangeMemBalloon *pReq)
 {
     uint32_t iPage;
     int rc;
@@ -423,7 +445,7 @@ static int vbgdBalloonInflate(PRTR0MEMOBJ pMemObj, VMMDevChangeMemBalloon *pReq)
 
     rc = VbglGRPerform(&pReq->header);
     if (RT_FAILURE(rc))
-        LogRel(("vbgdBalloonInflate: VbglGRPerform failed. rc=%Rrc\n", rc));
+        LogRel(("vgdrvBalloonInflate: VbglGRPerform failed. rc=%Rrc\n", rc));
     return rc;
 }
 
@@ -438,7 +460,7 @@ static int vbgdBalloonInflate(PRTR0MEMOBJ pMemObj, VMMDevChangeMemBalloon *pReq)
  *                      The memory object will be freed afterwards.
  * @param   pReq        The pre-allocated request for performing the VMMDev call.
  */
-static int vbgdBalloonDeflate(PRTR0MEMOBJ pMemObj, VMMDevChangeMemBalloon *pReq)
+static int vgdrvBalloonDeflate(PRTR0MEMOBJ pMemObj, VMMDevChangeMemBalloon *pReq)
 {
     uint32_t iPage;
     int rc;
@@ -456,14 +478,14 @@ static int vbgdBalloonDeflate(PRTR0MEMOBJ pMemObj, VMMDevChangeMemBalloon *pReq)
     rc = VbglGRPerform(&pReq->header);
     if (RT_FAILURE(rc))
     {
-        LogRel(("vbgdBalloonDeflate: VbglGRPerform failed. rc=%Rrc\n", rc));
+        LogRel(("vgdrvBalloonDeflate: VbglGRPerform failed. rc=%Rrc\n", rc));
         return rc;
     }
 
     rc = RTR0MemObjFree(*pMemObj, true);
     if (RT_FAILURE(rc))
     {
-        LogRel(("vbgdBalloonDeflate: RTR0MemObjFree(%p,true) -> %Rrc; this is *BAD*!\n", *pMemObj, rc));
+        LogRel(("vgdrvBalloonDeflate: RTR0MemObjFree(%p,true) -> %Rrc; this is *BAD*!\n", *pMemObj, rc));
         return rc;
     }
 
@@ -475,16 +497,15 @@ static int vbgdBalloonDeflate(PRTR0MEMOBJ pMemObj, VMMDevChangeMemBalloon *pReq)
 /**
  * Inflate/deflate the memory balloon and notify the host.
  *
- * This is a worker used by vbgdIoCtl_CheckMemoryBalloon - it takes the mutex.
+ * This is a worker used by vgdrvIoCtl_CheckMemoryBalloon - it takes the mutex.
  *
  * @returns VBox status code.
  * @param   pDevExt         The device extension.
- * @param   pSession        The session.
  * @param   cBalloonChunks  The new size of the balloon in chunks of 1MB.
  * @param   pfHandleInR3    Where to return the handle-in-ring3 indicator
  *                          (VINF_SUCCESS if set).
  */
-static int vbgdSetBalloonSizeKernel(PVBOXGUESTDEVEXT pDevExt, uint32_t cBalloonChunks, uint32_t *pfHandleInR3)
+static int vgdrvSetBalloonSizeKernel(PVBOXGUESTDEVEXT pDevExt, uint32_t cBalloonChunks, uint32_t *pfHandleInR3)
 {
     int rc = VINF_SUCCESS;
 
@@ -495,7 +516,7 @@ static int vbgdSetBalloonSizeKernel(PVBOXGUESTDEVEXT pDevExt, uint32_t cBalloonC
 
         if (cBalloonChunks > pDevExt->MemBalloon.cMaxChunks)
         {
-            LogRel(("vbgdSetBalloonSizeKernel: illegal balloon size %u (max=%u)\n",
+            LogRel(("vgdrvSetBalloonSizeKernel: illegal balloon size %u (max=%u)\n",
                     cBalloonChunks, pDevExt->MemBalloon.cMaxChunks));
             return VERR_INVALID_PARAMETER;
         }
@@ -509,7 +530,7 @@ static int vbgdSetBalloonSizeKernel(PVBOXGUESTDEVEXT pDevExt, uint32_t cBalloonC
             pDevExt->MemBalloon.paMemObj = (PRTR0MEMOBJ)RTMemAllocZ(sizeof(RTR0MEMOBJ) * pDevExt->MemBalloon.cMaxChunks);
             if (!pDevExt->MemBalloon.paMemObj)
             {
-                LogRel(("vbgdSetBalloonSizeKernel: no memory for paMemObj!\n"));
+                LogRel(("vgdrvSetBalloonSizeKernel: no memory for paMemObj!\n"));
                 return VERR_NO_MEMORY;
             }
         }
@@ -541,7 +562,7 @@ static int vbgdSetBalloonSizeKernel(PVBOXGUESTDEVEXT pDevExt, uint32_t cBalloonC
                     break;
                 }
 
-                rc = vbgdBalloonInflate(&pDevExt->MemBalloon.paMemObj[i], pReq);
+                rc = vgdrvBalloonInflate(&pDevExt->MemBalloon.paMemObj[i], pReq);
                 if (RT_FAILURE(rc))
                 {
                     Log(("vboxGuestSetBalloonSize(inflate): failed, rc=%Rrc!\n", rc));
@@ -557,7 +578,7 @@ static int vbgdSetBalloonSizeKernel(PVBOXGUESTDEVEXT pDevExt, uint32_t cBalloonC
             /* deflate */
             for (i = pDevExt->MemBalloon.cChunks; i-- > cBalloonChunks;)
             {
-                rc = vbgdBalloonDeflate(&pDevExt->MemBalloon.paMemObj[i], pReq);
+                rc = vgdrvBalloonDeflate(&pDevExt->MemBalloon.paMemObj[i], pReq);
                 if (RT_FAILURE(rc))
                 {
                     Log(("vboxGuestSetBalloonSize(deflate): failed, rc=%Rrc!\n", rc));
@@ -583,7 +604,7 @@ static int vbgdSetBalloonSizeKernel(PVBOXGUESTDEVEXT pDevExt, uint32_t cBalloonC
 /**
  * Inflate/deflate the balloon by one chunk.
  *
- * Worker for vbgdIoCtl_ChangeMemoryBalloon - it takes the mutex.
+ * Worker for vgdrvIoCtl_ChangeMemoryBalloon - it takes the mutex.
  *
  * @returns VBox status code.
  * @param   pDevExt         The device extension.
@@ -592,7 +613,7 @@ static int vbgdSetBalloonSizeKernel(PVBOXGUESTDEVEXT pDevExt, uint32_t cBalloonC
  *                          balloon.
  * @param   fInflate        Inflate if true, deflate if false.
  */
-static int vbgdSetBalloonSizeFromUser(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, uint64_t u64ChunkAddr, bool fInflate)
+static int vgdrvSetBalloonSizeFromUser(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, uint64_t u64ChunkAddr, bool fInflate)
 {
     VMMDevChangeMemBalloon *pReq;
     int rc = VINF_SUCCESS;
@@ -672,7 +693,7 @@ static int vbgdSetBalloonSizeFromUser(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSIO
                                 RTMEM_PROT_READ | RTMEM_PROT_WRITE, NIL_RTR0PROCESS);
         if (RT_SUCCESS(rc))
         {
-            rc = vbgdBalloonInflate(pMemObj, pReq);
+            rc = vgdrvBalloonInflate(pMemObj, pReq);
             if (RT_SUCCESS(rc))
                 pDevExt->MemBalloon.cChunks++;
             else
@@ -685,7 +706,7 @@ static int vbgdSetBalloonSizeFromUser(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSIO
     }
     else
     {
-        rc = vbgdBalloonDeflate(pMemObj, pReq);
+        rc = vgdrvBalloonDeflate(pMemObj, pReq);
         if (RT_SUCCESS(rc))
             pDevExt->MemBalloon.cChunks--;
         else
@@ -704,9 +725,9 @@ static int vbgdSetBalloonSizeFromUser(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSIO
  * own it already.
  *
  * @param   pDevExt     The device extension.
- * @param   pDevExt     The session.  Can be NULL at unload.
+ * @param   pSession    The session.  Can be NULL at unload.
  */
-static void vbgdCloseMemBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
+static void vgdrvCloseMemBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
 {
     RTSemFastMutexRequest(pDevExt->MemBalloon.hMtx);
     if (    pDevExt->MemBalloon.pOwner == pSession
@@ -721,10 +742,10 @@ static void vbgdCloseMemBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSes
                 uint32_t i;
                 for (i = pDevExt->MemBalloon.cChunks; i-- > 0;)
                 {
-                    rc = vbgdBalloonDeflate(&pDevExt->MemBalloon.paMemObj[i], pReq);
+                    rc = vgdrvBalloonDeflate(&pDevExt->MemBalloon.paMemObj[i], pReq);
                     if (RT_FAILURE(rc))
                     {
-                        LogRel(("vbgdCloseMemBalloon: Deflate failed with rc=%Rrc.  Will leak %u chunks.\n",
+                        LogRel(("vgdrvCloseMemBalloon: Deflate failed with rc=%Rrc.  Will leak %u chunks.\n",
                                 rc, pDevExt->MemBalloon.cChunks));
                         break;
                     }
@@ -734,7 +755,7 @@ static void vbgdCloseMemBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSes
                 VbglGRFree(&pReq->header);
             }
             else
-                LogRel(("vbgdCloseMemBalloon: Failed to allocate VMMDev request buffer (rc=%Rrc).  Will leak %u chunks.\n",
+                LogRel(("vgdrvCloseMemBalloon: Failed to allocate VMMDev request buffer (rc=%Rrc).  Will leak %u chunks.\n",
                         rc, pDevExt->MemBalloon.cChunks));
             RTMemFree(pDevExt->MemBalloon.paMemObj);
             pDevExt->MemBalloon.paMemObj = NULL;
@@ -758,13 +779,13 @@ static void vbgdCloseMemBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSes
  *
  * @returns VBox status code.
  */
-static int vbgdHeartbeatSend(PVBOXGUESTDEVEXT pDevExt)
+static int vgdrvHeartbeatSend(PVBOXGUESTDEVEXT pDevExt)
 {
     int rc;
     if (pDevExt->pReqGuestHeartbeat)
     {
         rc = VbglGRPerform(pDevExt->pReqGuestHeartbeat);
-        Log(("vbgdHeartbeatSend: VbglGRPerform vbgdHeartbeatSend completed with rc=%Rrc\n", rc));
+        Log(("vgdrvHeartbeatSend: VbglGRPerform vgdrvHeartbeatSend completed with rc=%Rrc\n", rc));
     }
     else
         rc = VERR_INVALID_STATE;
@@ -775,15 +796,15 @@ static int vbgdHeartbeatSend(PVBOXGUESTDEVEXT pDevExt)
 /**
  * Callback for heartbeat timer.
  */
-static DECLCALLBACK(void) vbgdHeartbeatTimerHandler(PRTTIMER hTimer, void *pvUser, uint64_t iTick)
+static DECLCALLBACK(void) vgdrvHeartbeatTimerHandler(PRTTIMER hTimer, void *pvUser, uint64_t iTick)
 {
     PVBOXGUESTDEVEXT pDevExt = (PVBOXGUESTDEVEXT)pvUser;
     int rc;
     AssertReturnVoid(pDevExt);
 
-    rc = vbgdHeartbeatSend(pDevExt);
+    rc = vgdrvHeartbeatSend(pDevExt);
     if (RT_FAILURE(rc))
-        Log(("HB Timer: vbgdHeartbeatSend failed: rc=%Rrc\n", rc));
+        Log(("HB Timer: vgdrvHeartbeatSend failed: rc=%Rrc\n", rc));
 
     NOREF(hTimer); NOREF(iTick);
 }
@@ -797,17 +818,17 @@ static DECLCALLBACK(void) vbgdHeartbeatTimerHandler(PRTTIMER hTimer, void *pvUse
  * @param   pDevExt         The device extension.
  * @param   fEnabled        Set true to enable guest heartbeat checks on host.
  */
-static int vbgdHeartbeatHostConfigure(PVBOXGUESTDEVEXT pDevExt, bool fEnabled)
+static int vgdrvHeartbeatHostConfigure(PVBOXGUESTDEVEXT pDevExt, bool fEnabled)
 {
     VMMDevReqHeartbeat *pReq;
     int rc = VbglGRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_HeartbeatConfigure);
-    Log(("vbgdHeartbeatHostConfigure: VbglGRAlloc vbgdHeartbeatHostConfigure completed with rc=%Rrc\n", rc));
+    Log(("vgdrvHeartbeatHostConfigure: VbglGRAlloc vgdrvHeartbeatHostConfigure completed with rc=%Rrc\n", rc));
     if (RT_SUCCESS(rc))
     {
         pReq->fEnabled = fEnabled;
         pReq->cNsInterval = 0;
         rc = VbglGRPerform(&pReq->header);
-        Log(("vbgdHeartbeatHostConfigure: VbglGRPerform vbgdHeartbeatHostConfigure completed with rc=%Rrc\n", rc));
+        Log(("vgdrvHeartbeatHostConfigure: VbglGRPerform vgdrvHeartbeatHostConfigure completed with rc=%Rrc\n", rc));
         pDevExt->cNsHeartbeatInterval = pReq->cNsInterval;
         VbglGRFree(&pReq->header);
     }
@@ -823,15 +844,15 @@ static int vbgdHeartbeatHostConfigure(PVBOXGUESTDEVEXT pDevExt, bool fEnabled)
  * @returns VBox status (ignored).
  * @param   pDevExt             The device extension.
  */
-static int vbgdHeartbeatInit(PVBOXGUESTDEVEXT pDevExt)
+static int vgdrvHeartbeatInit(PVBOXGUESTDEVEXT pDevExt)
 {
     /*
      * Make sure that heartbeat checking is disabled.
      */
-    int rc = vbgdHeartbeatHostConfigure(pDevExt, false);
+    int rc = vgdrvHeartbeatHostConfigure(pDevExt, false);
     if (RT_SUCCESS(rc))
     {
-        rc = vbgdHeartbeatHostConfigure(pDevExt, true);
+        rc = vgdrvHeartbeatHostConfigure(pDevExt, true);
         if (RT_SUCCESS(rc))
         {
             /*
@@ -843,32 +864,32 @@ static int vbgdHeartbeatInit(PVBOXGUESTDEVEXT pDevExt)
             rc = VbglGRAlloc(&pDevExt->pReqGuestHeartbeat, sizeof(*pDevExt->pReqGuestHeartbeat), VMMDevReq_GuestHeartbeat);
             if (RT_SUCCESS(rc))
             {
-                LogRel(("VbgdCommonInitDevExt: Setting up heartbeat to trigger every %RU64 milliseconds\n",
+                LogRel(("vgdrvHeartbeatInit: Setting up heartbeat to trigger every %RU64 milliseconds\n",
                         pDevExt->cNsHeartbeatInterval / RT_NS_1MS));
                 rc = RTTimerCreateEx(&pDevExt->pHeartbeatTimer, pDevExt->cNsHeartbeatInterval, 0 /*fFlags*/,
-                                     (PFNRTTIMER)vbgdHeartbeatTimerHandler, pDevExt);
+                                     (PFNRTTIMER)vgdrvHeartbeatTimerHandler, pDevExt);
                 if (RT_SUCCESS(rc))
                 {
                     rc = RTTimerStart(pDevExt->pHeartbeatTimer, 0);
                     if (RT_SUCCESS(rc))
                         return VINF_SUCCESS;
 
-                    LogRel(("VbgdCommonInitDevExt: Heartbeat timer failed to start, rc=%Rrc\n", rc));
+                    LogRel(("vgdrvHeartbeatInit: Heartbeat timer failed to start, rc=%Rrc\n", rc));
                 }
                 else
-                    LogRel(("VbgdCommonInitDevExt: Failed to create heartbeat timer: %Rrc\n", rc));
+                    LogRel(("vgdrvHeartbeatInit: Failed to create heartbeat timer: %Rrc\n", rc));
 
                 VbglGRFree(pDevExt->pReqGuestHeartbeat);
                 pDevExt->pReqGuestHeartbeat = NULL;
             }
             else
-                LogRel(("VbgdCommonInitDevExt: VbglGRAlloc(VMMDevReq_GuestHeartbeat): %Rrc\n", rc));
+                LogRel(("vgdrvHeartbeatInit: VbglGRAlloc(VMMDevReq_GuestHeartbeat): %Rrc\n", rc));
 
-            LogRel(("VbgdCommonInitDevExt: Failed to set up the timer, guest heartbeat is disabled\n"));
-            vbgdHeartbeatHostConfigure(pDevExt, false);
+            LogRel(("vgdrvHeartbeatInit: Failed to set up the timer, guest heartbeat is disabled\n"));
+            vgdrvHeartbeatHostConfigure(pDevExt, false);
         }
         else
-            LogRel(("VbgdCommonInitDevExt: Failed to configure host for heartbeat checking: rc=%Rrc\n", rc));
+            LogRel(("vgdrvHeartbeatInit: Failed to configure host for heartbeat checking: rc=%Rrc\n", rc));
     }
     return rc;
 }
@@ -885,18 +906,18 @@ static int vbgdHeartbeatInit(PVBOXGUESTDEVEXT pDevExt)
  *
  * @todo Call this on all platforms, not just windows.
  */
-int VbgdCommonReinitDevExtAfterHibernation(PVBOXGUESTDEVEXT pDevExt, VBOXOSTYPE enmOSType)
+int VGDrvCommonReinitDevExtAfterHibernation(PVBOXGUESTDEVEXT pDevExt, VBOXOSTYPE enmOSType)
 {
-    int rc = vbgdReportGuestInfo(enmOSType);
+    int rc = vgdrvReportGuestInfo(enmOSType);
     if (RT_SUCCESS(rc))
     {
-        rc = vbgdReportDriverStatus(true /* Driver is active */);
+        rc = vgdrvReportDriverStatus(true /* Driver is active */);
         if (RT_FAILURE(rc))
-            Log(("VbgdCommonReinitDevExtAfterHibernation: could not report guest driver status, rc=%Rrc\n", rc));
+            Log(("VGDrvCommonReinitDevExtAfterHibernation: could not report guest driver status, rc=%Rrc\n", rc));
     }
     else
-        Log(("VbgdCommonReinitDevExtAfterHibernation: could not report guest information to host, rc=%Rrc\n", rc));
-    LogFlow(("VbgdCommonReinitDevExtAfterHibernation: returned with rc=%Rrc\n", rc));
+        Log(("VGDrvCommonReinitDevExtAfterHibernation: could not report guest information to host, rc=%Rrc\n", rc));
+    LogFlow(("VGDrvCommonReinitDevExtAfterHibernation: returned with rc=%Rrc\n", rc));
     return rc;
 }
 
@@ -922,8 +943,8 @@ int VbgdCommonReinitDevExtAfterHibernation(PVBOXGUESTDEVEXT pDevExt, VBOXOSTYPE
  * @param   fFixedEvents    Events that will be enabled upon init and no client
  *                          will ever be allowed to mask.
  */
-int VbgdCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase,
-                         void *pvMMIOBase, uint32_t cbMMIO, VBOXOSTYPE enmOSType, uint32_t fFixedEvents)
+int VGDrvCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase,
+                          void *pvMMIOBase, uint32_t cbMMIO, VBOXOSTYPE enmOSType, uint32_t fFixedEvents)
 {
     int rc, rc2;
 
@@ -983,16 +1004,16 @@ int VbgdCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase,
     pDevExt->pReqGuestHeartbeat = NULL;
 
     pDevExt->fFixedEvents = fFixedEvents;
-    vbgdBitUsageTrackerClear(&pDevExt->EventFilterTracker);
+    vgdrvBitUsageTrackerClear(&pDevExt->EventFilterTracker);
     pDevExt->fEventFilterHost = UINT32_MAX;  /* forces a report */
 
-    vbgdBitUsageTrackerClear(&pDevExt->MouseStatusTracker);
+    vgdrvBitUsageTrackerClear(&pDevExt->MouseStatusTracker);
     pDevExt->fMouseStatusHost = UINT32_MAX;  /* forces a report */
 
     pDevExt->fAcquireModeGuestCaps = 0;
     pDevExt->fSetModeGuestCaps = 0;
     pDevExt->fAcquiredGuestCaps = 0;
-    vbgdBitUsageTrackerClear(&pDevExt->SetGuestCapsTracker);
+    vgdrvBitUsageTrackerClear(&pDevExt->SetGuestCapsTracker);
     pDevExt->fGuestCapsHost = UINT32_MAX; /* forces a report */
 
     /*
@@ -1007,11 +1028,11 @@ int VbgdCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase,
             &&  pVMMDev->u32Size <= cbMMIO)
         {
             pDevExt->pVMMDevMemory = pVMMDev;
-            Log(("VbgdCommonInitDevExt: VMMDevMemory: mapping=%p size=%#RX32 (%#RX32) version=%#RX32\n",
+            Log(("VGDrvCommonInitDevExt: VMMDevMemory: mapping=%p size=%#RX32 (%#RX32) version=%#RX32\n",
                  pVMMDev, pVMMDev->u32Size, cbMMIO, pVMMDev->u32Version));
         }
         else /* try live without it. */
-            LogRel(("VbgdCommonInitDevExt: Bogus VMMDev memory; u32Version=%RX32 (expected %RX32) u32Size=%RX32 (expected <= %RX32)\n",
+            LogRel(("VGDrvCommonInitDevExt: Bogus VMMDev memory; u32Version=%RX32 (expected %RX32) u32Size=%RX32 (expected <= %RX32)\n",
                     pVMMDev->u32Version, VMMDEV_MEMORY_VERSION, pVMMDev->u32Size, cbMMIO));
     }
 
@@ -1023,7 +1044,7 @@ int VbgdCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase,
         rc = RTSpinlockCreate(&pDevExt->SessionSpinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "VBoxGuestSession");
     if (RT_FAILURE(rc))
     {
-        LogRel(("VbgdCommonInitDevExt: failed to create spinlock, rc=%Rrc!\n", rc));
+        LogRel(("VGDrvCommonInitDevExt: failed to create spinlock, rc=%Rrc!\n", rc));
         if (pDevExt->EventSpinlock != NIL_RTSPINLOCK)
             RTSpinlockDestroy(pDevExt->EventSpinlock);
         return rc;
@@ -1032,7 +1053,7 @@ int VbgdCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase,
     rc = RTSemFastMutexCreate(&pDevExt->MemBalloon.hMtx);
     if (RT_FAILURE(rc))
     {
-        LogRel(("VbgdCommonInitDevExt: failed to create mutex, rc=%Rrc!\n", rc));
+        LogRel(("VGDrvCommonInitDevExt: failed to create mutex, rc=%Rrc!\n", rc));
         RTSpinlockDestroy(pDevExt->SessionSpinlock);
         RTSpinlockDestroy(pDevExt->EventSpinlock);
         return rc;
@@ -1043,7 +1064,7 @@ int VbgdCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase,
      * set the interrupt control filter mask, and fixate the guest mappings
      * made by the VMM.
      */
-    rc = VbglInit(pDevExt->IOPortBase, (VMMDevMemory *)pDevExt->pVMMDevMemory);
+    rc = VbglInitPrimary(pDevExt->IOPortBase, (VMMDevMemory *)pDevExt->pVMMDevMemory);
     if (RT_SUCCESS(rc))
     {
         rc = VbglGRAlloc((VMMDevRequestHeader **)&pDevExt->pIrqAckEvents, sizeof(VMMDevEvents), VMMDevReq_AcknowledgeEvents);
@@ -1052,57 +1073,57 @@ int VbgdCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase,
             pDevExt->PhysIrqAckEvents = VbglPhysHeapGetPhysAddr(pDevExt->pIrqAckEvents);
             Assert(pDevExt->PhysIrqAckEvents != 0);
 
-            rc = vbgdReportGuestInfo(enmOSType);
+            rc = vgdrvReportGuestInfo(enmOSType);
             if (RT_SUCCESS(rc))
             {
                 /*
                  * Set the fixed event and make sure the host doesn't have any lingering
                  * the guest capabilities or mouse status bits set.
                  */
-                rc = vbgdResetEventFilterOnHost(pDevExt, pDevExt->fFixedEvents);
+                rc = vgdrvResetEventFilterOnHost(pDevExt, pDevExt->fFixedEvents);
                 if (RT_SUCCESS(rc))
                 {
-                    rc = vbgdResetCapabilitiesOnHost(pDevExt);
+                    rc = vgdrvResetCapabilitiesOnHost(pDevExt);
                     if (RT_SUCCESS(rc))
                     {
-                        rc = vbgdResetMouseStatusOnHost(pDevExt);
+                        rc = vgdrvResetMouseStatusOnHost(pDevExt);
                         if (RT_SUCCESS(rc))
                         {
                             /*
                              * Initialize stuff which may fail without requiring the driver init to fail.
                              */
-                            vbgdInitFixateGuestMappings(pDevExt);
-                            vbgdHeartbeatInit(pDevExt);
+                            vgdrvInitFixateGuestMappings(pDevExt);
+                            vgdrvHeartbeatInit(pDevExt);
 
                             /*
                              * Done!
                              */
-                            rc = vbgdReportDriverStatus(true /* Driver is active */);
+                            rc = vgdrvReportDriverStatus(true /* Driver is active */);
                             if (RT_FAILURE(rc))
-                                LogRel(("VbgdCommonInitDevExt: VBoxReportGuestDriverStatus failed, rc=%Rrc\n", rc));
+                                LogRel(("VGDrvCommonInitDevExt: VBoxReportGuestDriverStatus failed, rc=%Rrc\n", rc));
 
-                            LogFlowFunc(("VbgdCommonInitDevExt: returns success\n"));
+                            LogFlowFunc(("VGDrvCommonInitDevExt: returns success\n"));
                             return VINF_SUCCESS;
                         }
-                        LogRel(("VbgdCommonInitDevExt: failed to clear mouse status: rc=%Rrc\n", rc));
+                        LogRel(("VGDrvCommonInitDevExt: failed to clear mouse status: rc=%Rrc\n", rc));
                     }
                     else
-                        LogRel(("VbgdCommonInitDevExt: failed to clear guest capabilities: rc=%Rrc\n", rc));
+                        LogRel(("VGDrvCommonInitDevExt: failed to clear guest capabilities: rc=%Rrc\n", rc));
                 }
                 else
-                    LogRel(("VbgdCommonInitDevExt: failed to set fixed event filter: rc=%Rrc\n", rc));
+                    LogRel(("VGDrvCommonInitDevExt: failed to set fixed event filter: rc=%Rrc\n", rc));
             }
             else
-                LogRel(("VbgdCommonInitDevExt: VBoxReportGuestInfo failed: rc=%Rrc\n", rc));
+                LogRel(("VGDrvCommonInitDevExt: VBoxReportGuestInfo failed: rc=%Rrc\n", rc));
             VbglGRFree((VMMDevRequestHeader *)pDevExt->pIrqAckEvents);
         }
         else
-            LogRel(("VbgdCommonInitDevExt: VBoxGRAlloc failed: rc=%Rrc\n", rc));
+            LogRel(("VGDrvCommonInitDevExt: VBoxGRAlloc failed: rc=%Rrc\n", rc));
 
         VbglTerminate();
     }
     else
-        LogRel(("VbgdCommonInitDevExt: VbglInit failed: rc=%Rrc\n", rc));
+        LogRel(("VGDrvCommonInitDevExt: VbglInit failed: rc=%Rrc\n", rc));
 
     rc2 = RTSemFastMutexDestroy(pDevExt->MemBalloon.hMtx); AssertRC(rc2);
     rc2 = RTSpinlockDestroy(pDevExt->EventSpinlock); AssertRC(rc2);
@@ -1120,7 +1141,7 @@ int VbgdCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase,
  * Deletes all the items in a wait chain.
  * @param   pList       The head of the chain.
  */
-static void vbgdDeleteWaitList(PRTLISTNODE pList)
+static void vgdrvDeleteWaitList(PRTLISTNODE pList)
 {
     while (!RTListIsEmpty(pList))
     {
@@ -1144,10 +1165,10 @@ static void vbgdDeleteWaitList(PRTLISTNODE pList)
  *
  * @param   pDevExt         The device extension.
  */
-void VbgdCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt)
+void VGDrvCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt)
 {
     int rc2;
-    Log(("VbgdCommonDeleteDevExt:\n"));
+    Log(("VGDrvCommonDeleteDevExt:\n"));
     Log(("VBoxGuest: The additions driver is terminating.\n"));
 
     /*
@@ -1157,7 +1178,7 @@ void VbgdCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt)
     if (pDevExt->pHeartbeatTimer)
     {
         RTTimerDestroy(pDevExt->pHeartbeatTimer);
-        vbgdHeartbeatHostConfigure(pDevExt, false);
+        vgdrvHeartbeatHostConfigure(pDevExt, false);
     }
 
     VbglGRFree(pDevExt->pReqGuestHeartbeat);
@@ -1166,7 +1187,7 @@ void VbgdCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt)
     /*
      * Clean up the bits that involves the host first.
      */
-    vbgdTermUnfixGuestMappings(pDevExt);
+    vgdrvTermUnfixGuestMappings(pDevExt);
     if (!RTListIsEmpty(&pDevExt->SessionList))
     {
         LogRelFunc(("session list not empty!\n"));
@@ -1174,11 +1195,11 @@ void VbgdCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt)
     }
     /* Update the host flags (mouse status etc) not to reflect this session. */
     pDevExt->fFixedEvents = 0;
-    vbgdResetEventFilterOnHost(pDevExt, 0 /*fFixedEvents*/);
-    vbgdResetCapabilitiesOnHost(pDevExt);
-    vbgdResetMouseStatusOnHost(pDevExt);
+    vgdrvResetEventFilterOnHost(pDevExt, 0 /*fFixedEvents*/);
+    vgdrvResetCapabilitiesOnHost(pDevExt);
+    vgdrvResetMouseStatusOnHost(pDevExt);
 
-    vbgdCloseMemBalloon(pDevExt, (PVBOXGUESTSESSION)NULL);
+    vgdrvCloseMemBalloon(pDevExt, (PVBOXGUESTSESSION)NULL);
 
     /*
      * Cleanup all the other resources.
@@ -1187,15 +1208,15 @@ void VbgdCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt)
     rc2 = RTSpinlockDestroy(pDevExt->SessionSpinlock); AssertRC(rc2);
     rc2 = RTSemFastMutexDestroy(pDevExt->MemBalloon.hMtx); AssertRC(rc2);
 
-    vbgdDeleteWaitList(&pDevExt->WaitList);
+    vgdrvDeleteWaitList(&pDevExt->WaitList);
 #ifdef VBOX_WITH_HGCM
-    vbgdDeleteWaitList(&pDevExt->HGCMWaitList);
+    vgdrvDeleteWaitList(&pDevExt->HGCMWaitList);
 #endif
 #ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP
-    vbgdDeleteWaitList(&pDevExt->WakeUpList);
+    vgdrvDeleteWaitList(&pDevExt->WakeUpList);
 #endif
-    vbgdDeleteWaitList(&pDevExt->WokenUpList);
-    vbgdDeleteWaitList(&pDevExt->FreeList);
+    vgdrvDeleteWaitList(&pDevExt->WokenUpList);
+    vgdrvDeleteWaitList(&pDevExt->FreeList);
 
     VbglTerminate();
 
@@ -1216,18 +1237,18 @@ void VbgdCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt)
  * Creates a VBoxGuest user session.
  *
  * The native code calls this when a ring-3 client opens the device.
- * Use VbgdCommonCreateKernelSession when a ring-0 client connects.
+ * Use VGDrvCommonCreateKernelSession when a ring-0 client connects.
  *
  * @returns VBox status code.
  * @param   pDevExt         The device extension.
  * @param   ppSession       Where to store the session on success.
  */
-int VbgdCommonCreateUserSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession)
+int VGDrvCommonCreateUserSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)RTMemAllocZ(sizeof(*pSession));
     if (RT_UNLIKELY(!pSession))
     {
-        LogRel(("VbgdCommonCreateUserSession: no memory!\n"));
+        LogRel(("VGDrvCommonCreateUserSession: no memory!\n"));
         return VERR_NO_MEMORY;
     }
 
@@ -1240,7 +1261,7 @@ int VbgdCommonCreateUserSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppS
     RTSpinlockRelease(pDevExt->SessionSpinlock);
 
     *ppSession = pSession;
-    LogFlow(("VbgdCommonCreateUserSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n",
+    LogFlow(("VGDrvCommonCreateUserSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n",
              pSession, pSession->Process, (int)pSession->Process, (uintptr_t)pSession->R0Process)); /** @todo %RTr0proc */
     return VINF_SUCCESS;
 }
@@ -1250,18 +1271,18 @@ int VbgdCommonCreateUserSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppS
  * Creates a VBoxGuest kernel session.
  *
  * The native code calls this when a ring-0 client connects to the device.
- * Use VbgdCommonCreateUserSession when a ring-3 client opens the device.
+ * Use VGDrvCommonCreateUserSession when a ring-3 client opens the device.
  *
  * @returns VBox status code.
  * @param   pDevExt         The device extension.
  * @param   ppSession       Where to store the session on success.
  */
-int VbgdCommonCreateKernelSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession)
+int VGDrvCommonCreateKernelSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)RTMemAllocZ(sizeof(*pSession));
     if (RT_UNLIKELY(!pSession))
     {
-        LogRel(("VbgdCommonCreateKernelSession: no memory!\n"));
+        LogRel(("VGDrvCommonCreateKernelSession: no memory!\n"));
         return VERR_NO_MEMORY;
     }
 
@@ -1274,7 +1295,7 @@ int VbgdCommonCreateKernelSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *p
     RTSpinlockRelease(pDevExt->SessionSpinlock);
 
     *ppSession = pSession;
-    LogFlow(("VbgdCommonCreateKernelSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n",
+    LogFlow(("VGDrvCommonCreateKernelSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n",
              pSession, pSession->Process, (int)pSession->Process, (uintptr_t)pSession->R0Process)); /** @todo %RTr0proc */
     return VINF_SUCCESS;
 }
@@ -1286,25 +1307,25 @@ int VbgdCommonCreateKernelSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *p
  * @param   pDevExt         The device extension.
  * @param   pSession        The session to close (and free).
  */
-void VbgdCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
+void VGDrvCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
 {
 #ifdef VBOX_WITH_HGCM
     unsigned i;
 #endif
-    LogFlow(("VbgdCommonCloseSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n",
+    LogFlow(("VGDrvCommonCloseSession: pSession=%p proc=%RTproc (%d) r0proc=%p\n",
              pSession, pSession->Process, (int)pSession->Process, (uintptr_t)pSession->R0Process)); /** @todo %RTr0proc */
 
     RTSpinlockAcquire(pDevExt->SessionSpinlock);
     RTListNodeRemove(&pSession->ListNode);
     pDevExt->cSessions--;
     RTSpinlockRelease(pDevExt->SessionSpinlock);
-    vbgdAcquireSessionCapabilities(pDevExt, pSession, 0, UINT32_MAX, VBOXGUESTCAPSACQUIRE_FLAGS_NONE,
+    vgdrvAcquireSessionCapabilities(pDevExt, pSession, 0, UINT32_MAX, VBOXGUESTCAPSACQUIRE_FLAGS_NONE,
                                    true /*fSessionTermination*/);
-    vbgdSetSessionCapabilities(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/);
-    vbgdSetSessionEventFilter(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/);
-    vbgdSetSessionMouseStatus(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/);
+    vgdrvSetSessionCapabilities(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/);
+    vgdrvSetSessionEventFilter(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/);
+    vgdrvSetSessionMouseStatus(pDevExt, pSession, 0 /*fOrMask*/, UINT32_MAX /*fNotMask*/, true /*fSessionTermination*/);
 
-    vbgdIoCtl_CancelAllWaitEvents(pDevExt, pSession);
+    vgdrvIoCtl_CancelAllWaitEvents(pDevExt, pSession);
 
 #ifdef VBOX_WITH_HGCM
     for (i = 0; i < RT_ELEMENTS(pSession->aHGCMClientIds); i++)
@@ -1314,15 +1335,15 @@ void VbgdCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession
             Info.result = 0;
             Info.u32ClientID = pSession->aHGCMClientIds[i];
             pSession->aHGCMClientIds[i] = 0;
-            Log(("VbgdCommonCloseSession: disconnecting client id %#RX32\n", Info.u32ClientID));
-            VbglR0HGCMInternalDisconnect(&Info, vbgdHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
+            Log(("VGDrvCommonCloseSession: disconnecting client id %#RX32\n", Info.u32ClientID));
+            VbglR0HGCMInternalDisconnect(&Info, vgdrvHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
         }
 #endif
 
     pSession->pDevExt = NULL;
     pSession->Process = NIL_RTPROCESS;
     pSession->R0Process = NIL_RTR0PROCESS;
-    vbgdCloseMemBalloon(pDevExt, pSession);
+    vgdrvCloseMemBalloon(pDevExt, pSession);
     RTMemFree(pSession);
 }
 
@@ -1334,7 +1355,7 @@ void VbgdCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession
  * @param   pDevExt         The device extension.
  * @param   pSession        The session that's allocating this. Can be NULL.
  */
-static PVBOXGUESTWAIT vbgdWaitAlloc(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
+static PVBOXGUESTWAIT vgdrvWaitAlloc(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
 {
     /*
      * Allocate it one way or the other.
@@ -1357,14 +1378,14 @@ static PVBOXGUESTWAIT vbgdWaitAlloc(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
         pWait = (PVBOXGUESTWAIT)RTMemAlloc(sizeof(*pWait));
         if (!pWait)
         {
-            LogRelMax(32, ("vbgdWaitAlloc: out-of-memory!\n"));
+            LogRelMax(32, ("vgdrvWaitAlloc: out-of-memory!\n"));
             return NULL;
         }
 
         rc = RTSemEventMultiCreate(&pWait->Event);
         if (RT_FAILURE(rc))
         {
-            LogRelMax(32, ("VbgdCommonIoCtl: RTSemEventMultiCreate failed with rc=%Rrc!\n", rc));
+            LogRelMax(32, ("vgdrvWaitAlloc: RTSemEventMultiCreate failed with rc=%Rrc!\n", rc));
             RTMemFree(pWait);
             return NULL;
         }
@@ -1400,7 +1421,7 @@ static PVBOXGUESTWAIT vbgdWaitAlloc(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
  * @param   pDevExt         The device extension.
  * @param   pWait           The wait-for-event entry to free.
  */
-static void vbgdWaitFreeLocked(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTWAIT pWait)
+static void vgdrvWaitFreeLocked(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTWAIT pWait)
 {
     pWait->fReqEvents = 0;
     pWait->fResEvents = 0;
@@ -1426,10 +1447,10 @@ static void vbgdWaitFreeLocked(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTWAIT pWait)
  * @param   pDevExt         The device extension.
  * @param   pWait           The wait-for-event entry to free.
  */
-static void vbgdWaitFreeUnlocked(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTWAIT pWait)
+static void vgdrvWaitFreeUnlocked(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTWAIT pWait)
 {
     RTSpinlockAcquire(pDevExt->EventSpinlock);
-    vbgdWaitFreeLocked(pDevExt, pWait);
+    vgdrvWaitFreeLocked(pDevExt, pWait);
     RTSpinlockRelease(pDevExt->EventSpinlock);
 }
 
@@ -1443,7 +1464,7 @@ static void vbgdWaitFreeUnlocked(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTWAIT pWait)
  *
  * @param   pDevExt         The device extension.
  */
-void VbgdCommonWaitDoWakeUps(PVBOXGUESTDEVEXT pDevExt)
+void VGDrvCommonWaitDoWakeUps(PVBOXGUESTDEVEXT pDevExt)
 {
     if (!RTListIsEmpty(&pDevExt->WakeUpList))
     {
@@ -1470,7 +1491,7 @@ void VbgdCommonWaitDoWakeUps(PVBOXGUESTDEVEXT pDevExt)
             else
             {
                 pWait->fFreeMe = false;
-                vbgdWaitFreeLocked(pDevExt, pWait);
+                vgdrvWaitFreeLocked(pDevExt, pWait);
             }
         }
         RTSpinlockRelease(pDevExt->EventSpinlock);
@@ -1489,9 +1510,9 @@ void VbgdCommonWaitDoWakeUps(PVBOXGUESTDEVEXT pDevExt)
  * @param   pDevExt     The device extension.
  * @param   pSession    The session.
  */
-int  VbgdCommonIoCtlFast(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
+int VGDrvCommonIoCtlFast(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
 {
-    LogFlow(("VbgdCommonIoCtlFast: iFunction=%#x pDevExt=%p pSession=%p\n", iFunction, pDevExt, pSession));
+    LogFlow(("VGDrvCommonIoCtlFast: iFunction=%#x pDevExt=%p pSession=%p\n", iFunction, pDevExt, pSession));
 
     NOREF(iFunction);
     NOREF(pDevExt);
@@ -1508,7 +1529,7 @@ int  VbgdCommonIoCtlFast(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUES
  * @param   pInfo           The request info.
  * @param   pcbDataReturned (out) contains the number of bytes to return.
  */
-static int vbgdIoCtl_GetVMMDevPort(PVBOXGUESTDEVEXT pDevExt, VBoxGuestPortInfo *pInfo, size_t *pcbDataReturned)
+static int vgdrvIoCtl_GetVMMDevPort(PVBOXGUESTDEVEXT pDevExt, VBoxGuestPortInfo *pInfo, size_t *pcbDataReturned)
 {
     LogFlow(("VBOXGUEST_IOCTL_GETVMMDEVPORT\n"));
 
@@ -1528,7 +1549,7 @@ static int vbgdIoCtl_GetVMMDevPort(PVBOXGUESTDEVEXT pDevExt, VBoxGuestPortInfo *
  * @param   pDevExt         The device extension.
  * @param   pNotify         The new callback information.
  */
-int vbgdIoCtl_SetMouseNotifyCallback(PVBOXGUESTDEVEXT pDevExt, VBoxGuestMouseSetNotifyCallback *pNotify)
+int vgdrvIoCtl_SetMouseNotifyCallback(PVBOXGUESTDEVEXT pDevExt, VBoxGuestMouseSetNotifyCallback *pNotify)
 {
     LogFlow(("VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK: pfnNotify=%p pvUser=%p\n", pNotify->pfnNotify, pNotify->pvUser));
 
@@ -1541,7 +1562,7 @@ int vbgdIoCtl_SetMouseNotifyCallback(PVBOXGUESTDEVEXT pDevExt, VBoxGuestMouseSet
 
 
 /**
- * Worker vbgdIoCtl_WaitEvent.
+ * Worker vgdrvIoCtl_WaitEvent.
  *
  * The caller enters the spinlock, we leave it.
  *
@@ -1552,7 +1573,7 @@ DECLINLINE(int) vbdgCheckWaitEventCondition(PVBOXGUESTDEVEXT pDevExt, PVBOXGUEST
 {
     uint32_t fMatches = pDevExt->f32PendingEvents & fReqEvents;
     if (fMatches & VBOXGUEST_ACQUIRE_STYLE_EVENTS)
-        fMatches &= vbgdGetAllowedEventMaskForSession(pDevExt, pSession);
+        fMatches &= vgdrvGetAllowedEventMaskForSession(pDevExt, pSession);
     if (fMatches || pSession->fPendingCancelWaitEvents)
     {
         ASMAtomicAndU32(&pDevExt->f32PendingEvents, ~fMatches);
@@ -1573,8 +1594,8 @@ DECLINLINE(int) vbdgCheckWaitEventCondition(PVBOXGUESTDEVEXT pDevExt, PVBOXGUEST
 }
 
 
-static int vbgdIoCtl_WaitEvent(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                               VBoxGuestWaitEventInfo *pInfo,  size_t *pcbDataReturned, bool fInterruptible)
+static int vgdrvIoCtl_WaitEvent(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                VBoxGuestWaitEventInfo *pInfo,  size_t *pcbDataReturned, bool fInterruptible)
 {
     const uint32_t  fReqEvents = pInfo->u32EventMaskIn;
     uint32_t        fResEvents;
@@ -1612,7 +1633,7 @@ static int vbgdIoCtl_WaitEvent(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSess
         return VERR_TIMEOUT;
     }
 
-    pWait = vbgdWaitAlloc(pDevExt, pSession);
+    pWait = vgdrvWaitAlloc(pDevExt, pSession);
     if (!pWait)
         return VERR_NO_MEMORY;
     pWait->fReqEvents = fReqEvents;
@@ -1627,7 +1648,7 @@ static int vbgdIoCtl_WaitEvent(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSess
     rc = vbdgCheckWaitEventCondition(pDevExt, pSession, pInfo, iEvent, fReqEvents);
     if (rc == VINF_SUCCESS)
     {
-        vbgdWaitFreeUnlocked(pDevExt, pWait);
+        vgdrvWaitFreeUnlocked(pDevExt, pWait);
         return rc;
     }
 
@@ -1651,7 +1672,7 @@ static int vbgdIoCtl_WaitEvent(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSess
      */
     RTSpinlockAcquire(pDevExt->EventSpinlock);
     fResEvents = pWait->fResEvents;
-    vbgdWaitFreeLocked(pDevExt, pWait);
+    vgdrvWaitFreeLocked(pDevExt, pWait);
     RTSpinlockRelease(pDevExt->EventSpinlock);
 
     /*
@@ -1695,7 +1716,7 @@ static int vbgdIoCtl_WaitEvent(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSess
 }
 
 
-static int vbgdIoCtl_CancelAllWaitEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
+static int vgdrvIoCtl_CancelAllWaitEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
 {
     PVBOXGUESTWAIT          pWait;
     PVBOXGUESTWAIT          pSafe;
@@ -1734,7 +1755,7 @@ static int vbgdIoCtl_CancelAllWaitEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSES
     NOREF(rc);
 
 #ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP
-    VbgdCommonWaitDoWakeUps(pDevExt);
+    VGDrvCommonWaitDoWakeUps(pDevExt);
 #endif
 
     return VINF_SUCCESS;
@@ -1745,12 +1766,13 @@ static int vbgdIoCtl_CancelAllWaitEvents(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSES
  * Checks if the VMM request is allowed in the context of the given session.
  *
  * @returns VINF_SUCCESS or VERR_PERMISSION_DENIED.
+ * @param   pDevExt             The device extension.
  * @param   pSession            The calling session.
  * @param   enmType             The request type.
  * @param   pReqHdr             The request.
  */
-static int vbgdCheckIfVmmReqIsAllowed(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VMMDevRequestType enmType,
-                                      VMMDevRequestHeader const *pReqHdr)
+static int vgdrvCheckIfVmmReqIsAllowed(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VMMDevRequestType enmType,
+                                       VMMDevRequestHeader const *pReqHdr)
 {
     /*
      * Categorize the request being made.
@@ -1894,8 +1916,8 @@ static int vbgdCheckIfVmmReqIsAllowed(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSIO
     return VERR_PERMISSION_DENIED;
 }
 
-static int vbgdIoCtl_VMMRequest(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                VMMDevRequestHeader *pReqHdr, size_t cbData, size_t *pcbDataReturned)
+static int vgdrvIoCtl_VMMRequest(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                 VMMDevRequestHeader *pReqHdr, size_t cbData, size_t *pcbDataReturned)
 {
     int                     rc;
     VMMDevRequestHeader    *pReqCopy;
@@ -1929,7 +1951,7 @@ static int vbgdIoCtl_VMMRequest(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSes
         return rc;
     }
 
-    rc = vbgdCheckIfVmmReqIsAllowed(pDevExt, pSession, enmType, pReqHdr);
+    rc = vgdrvCheckIfVmmReqIsAllowed(pDevExt, pSession, enmType, pReqHdr);
     if (RT_FAILURE(rc))
     {
         Log(("VBOXGUEST_IOCTL_VMMREQUEST: Operation not allowed! type=%#x rc=%Rrc\n", enmType, rc));
@@ -1983,9 +2005,9 @@ static int vbgdIoCtl_VMMRequest(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSes
 
 AssertCompile(RT_INDEFINITE_WAIT == (uint32_t)RT_INDEFINITE_WAIT); /* assumed by code below */
 
-/** Worker for vbgdHgcmAsyncWaitCallback*. */
-static int vbgdHgcmAsyncWaitCallbackWorker(VMMDevHGCMRequestHeader volatile *pHdr, PVBOXGUESTDEVEXT pDevExt,
-                                           bool fInterruptible, uint32_t cMillies)
+/** Worker for vgdrvHgcmAsyncWaitCallback*. */
+static int vgdrvHgcmAsyncWaitCallbackWorker(VMMDevHGCMRequestHeader volatile *pHdr, PVBOXGUESTDEVEXT pDevExt,
+                                            bool fInterruptible, uint32_t cMillies)
 {
     int rc;
 
@@ -2007,7 +2029,7 @@ static int vbgdHgcmAsyncWaitCallbackWorker(VMMDevHGCMRequestHeader volatile *pHd
         }
         RTSpinlockRelease(pDevExt->EventSpinlock);
 
-        pWait = vbgdWaitAlloc(pDevExt, NULL);
+        pWait = vgdrvWaitAlloc(pDevExt, NULL);
         if (pWait)
             break;
         if (fInterruptible)
@@ -2026,7 +2048,7 @@ static int vbgdHgcmAsyncWaitCallbackWorker(VMMDevHGCMRequestHeader volatile *pHd
     RTListAppend(&pDevExt->HGCMWaitList, &pWait->ListNode);
     if ((pHdr->fu32Flags & VBOX_HGCM_REQ_DONE) != 0)
     {
-        vbgdWaitFreeLocked(pDevExt, pWait);
+        vgdrvWaitFreeLocked(pDevExt, pWait);
         RTSpinlockRelease(pDevExt->EventSpinlock);
         return VINF_SUCCESS;
     }
@@ -2046,9 +2068,9 @@ static int vbgdHgcmAsyncWaitCallbackWorker(VMMDevHGCMRequestHeader volatile *pHd
         && rc != VERR_TIMEOUT
         && (   !fInterruptible
             || rc != VERR_INTERRUPTED))
-        LogRel(("vbgdHgcmAsyncWaitCallback: wait failed! %Rrc\n", rc));
+        LogRel(("vgdrvHgcmAsyncWaitCallback: wait failed! %Rrc\n", rc));
 
-    vbgdWaitFreeUnlocked(pDevExt, pWait);
+    vgdrvWaitFreeUnlocked(pDevExt, pWait);
     return rc;
 }
 
@@ -2056,33 +2078,33 @@ static int vbgdHgcmAsyncWaitCallbackWorker(VMMDevHGCMRequestHeader volatile *pHd
 /**
  * This is a callback for dealing with async waits.
  *
- * It operates in a manner similar to vbgdIoCtl_WaitEvent.
+ * It operates in a manner similar to vgdrvIoCtl_WaitEvent.
  */
-static DECLCALLBACK(int) vbgdHgcmAsyncWaitCallback(VMMDevHGCMRequestHeader *pHdr, void *pvUser, uint32_t u32User)
+static DECLCALLBACK(int) vgdrvHgcmAsyncWaitCallback(VMMDevHGCMRequestHeader *pHdr, void *pvUser, uint32_t u32User)
 {
     PVBOXGUESTDEVEXT pDevExt = (PVBOXGUESTDEVEXT)pvUser;
-    LogFlow(("vbgdHgcmAsyncWaitCallback: requestType=%d\n", pHdr->header.requestType));
-    return vbgdHgcmAsyncWaitCallbackWorker((VMMDevHGCMRequestHeader volatile *)pHdr, pDevExt,
-                                           false /* fInterruptible */, u32User  /* cMillies */);
+    LogFlow(("vgdrvHgcmAsyncWaitCallback: requestType=%d\n", pHdr->header.requestType));
+    return vgdrvHgcmAsyncWaitCallbackWorker((VMMDevHGCMRequestHeader volatile *)pHdr, pDevExt,
+                                            false /* fInterruptible */, u32User  /* cMillies */);
 }
 
 
 /**
  * This is a callback for dealing with async waits with a timeout.
  *
- * It operates in a manner similar to vbgdIoCtl_WaitEvent.
+ * It operates in a manner similar to vgdrvIoCtl_WaitEvent.
  */
-static DECLCALLBACK(int) vbgdHgcmAsyncWaitCallbackInterruptible(VMMDevHGCMRequestHeader *pHdr, void *pvUser, uint32_t u32User)
+static DECLCALLBACK(int) vgdrvHgcmAsyncWaitCallbackInterruptible(VMMDevHGCMRequestHeader *pHdr, void *pvUser, uint32_t u32User)
 {
     PVBOXGUESTDEVEXT pDevExt = (PVBOXGUESTDEVEXT)pvUser;
-    LogFlow(("vbgdHgcmAsyncWaitCallbackInterruptible: requestType=%d\n", pHdr->header.requestType));
-    return vbgdHgcmAsyncWaitCallbackWorker((VMMDevHGCMRequestHeader volatile *)pHdr, pDevExt,
-                                           true /* fInterruptible */, u32User /* cMillies */);
+    LogFlow(("vgdrvHgcmAsyncWaitCallbackInterruptible: requestType=%d\n", pHdr->header.requestType));
+    return vgdrvHgcmAsyncWaitCallbackWorker((VMMDevHGCMRequestHeader volatile *)pHdr, pDevExt,
+                                            true /* fInterruptible */, u32User /* cMillies */);
 }
 
 
-static int vbgdIoCtl_HGCMConnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                 VBoxGuestHGCMConnectInfo *pInfo, size_t *pcbDataReturned)
+static int vgdrvIoCtl_HGCMConnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                  VBoxGuestHGCMConnectInfo *pInfo, size_t *pcbDataReturned)
 {
     int rc;
 
@@ -2095,7 +2117,7 @@ static int vbgdIoCtl_HGCMConnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSe
          pInfo->Loc.type == VMMDevHGCMLoc_LocalHost || pInfo->Loc.type == VMMDevHGCMLoc_LocalHost_Existing
          ? pInfo->Loc.u.host.achName : "<not local host>"));
 
-    rc = VbglR0HGCMInternalConnect(pInfo, vbgdHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
+    rc = VbglR0HGCMInternalConnect(pInfo, vgdrvHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
     if (RT_SUCCESS(rc))
     {
         Log(("VBOXGUEST_IOCTL_HGCM_CONNECT: u32Client=%RX32 result=%Rrc (rc=%Rrc)\n",
@@ -2121,7 +2143,7 @@ static int vbgdIoCtl_HGCMConnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSe
                 LogRelMax(32, ("VBOXGUEST_IOCTL_HGCM_CONNECT: too many HGCMConnect calls for one session!\n"));
                 Info.result = 0;
                 Info.u32ClientID = pInfo->u32ClientID;
-                VbglR0HGCMInternalDisconnect(&Info, vbgdHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
+                VbglR0HGCMInternalDisconnect(&Info, vgdrvHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
                 return VERR_TOO_MANY_OPEN_FILES;
             }
         }
@@ -2134,8 +2156,8 @@ static int vbgdIoCtl_HGCMConnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSe
 }
 
 
-static int vbgdIoCtl_HGCMDisconnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                    VBoxGuestHGCMDisconnectInfo *pInfo, size_t *pcbDataReturned)
+static int vgdrvIoCtl_HGCMDisconnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                     VBoxGuestHGCMDisconnectInfo *pInfo, size_t *pcbDataReturned)
 {
     /*
      * Validate the client id and invalidate its entry while we're in the call.
@@ -2163,7 +2185,7 @@ static int vbgdIoCtl_HGCMDisconnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
      * to deal with cancelled requests.
      */
     Log(("VBOXGUEST_IOCTL_HGCM_DISCONNECT: u32Client=%RX32\n", pInfo->u32ClientID));
-    rc = VbglR0HGCMInternalDisconnect(pInfo, vbgdHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
+    rc = VbglR0HGCMInternalDisconnect(pInfo, vgdrvHgcmAsyncWaitCallback, pDevExt, RT_INDEFINITE_WAIT);
     if (RT_SUCCESS(rc))
     {
         LogFlow(("VBOXGUEST_IOCTL_HGCM_DISCONNECT: result=%Rrc\n", pInfo->result));
@@ -2181,9 +2203,9 @@ static int vbgdIoCtl_HGCMDisconnect(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
 }
 
 
-static int vbgdIoCtl_HGCMCall(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestHGCMCallInfo *pInfo,
-                              uint32_t cMillies, bool fInterruptible, bool f32bit, bool fUserData,
-                              size_t cbExtra, size_t cbData, size_t *pcbDataReturned)
+static int vgdrvIoCtl_HGCMCall(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestHGCMCallInfo *pInfo,
+                               uint32_t cMillies, bool fInterruptible, bool f32bit, bool fUserData,
+                               size_t cbExtra, size_t cbData, size_t *pcbDataReturned)
 {
     const uint32_t  u32ClientId = pInfo->u32ClientID;
     uint32_t        fFlags;
@@ -2241,17 +2263,17 @@ static int vbgdIoCtl_HGCMCall(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSessi
     if (f32bit)
     {
         if (fInterruptible)
-            rc = VbglR0HGCMInternalCall32(pInfo, cbInfo, fFlags, vbgdHgcmAsyncWaitCallbackInterruptible, pDevExt, cMillies);
+            rc = VbglR0HGCMInternalCall32(pInfo, cbInfo, fFlags, vgdrvHgcmAsyncWaitCallbackInterruptible, pDevExt, cMillies);
         else
-            rc = VbglR0HGCMInternalCall32(pInfo, cbInfo, fFlags, vbgdHgcmAsyncWaitCallback, pDevExt, cMillies);
+            rc = VbglR0HGCMInternalCall32(pInfo, cbInfo, fFlags, vgdrvHgcmAsyncWaitCallback, pDevExt, cMillies);
     }
     else
 #endif
     {
         if (fInterruptible)
-            rc = VbglR0HGCMInternalCall(pInfo, cbInfo, fFlags, vbgdHgcmAsyncWaitCallbackInterruptible, pDevExt, cMillies);
+            rc = VbglR0HGCMInternalCall(pInfo, cbInfo, fFlags, vgdrvHgcmAsyncWaitCallbackInterruptible, pDevExt, cMillies);
         else
-            rc = VbglR0HGCMInternalCall(pInfo, cbInfo, fFlags, vbgdHgcmAsyncWaitCallback, pDevExt, cMillies);
+            rc = VbglR0HGCMInternalCall(pInfo, cbInfo, fFlags, vgdrvHgcmAsyncWaitCallback, pDevExt, cMillies);
     }
     if (RT_SUCCESS(rc))
     {
@@ -2287,8 +2309,8 @@ static int vbgdIoCtl_HGCMCall(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSessi
  * @param   pcbDataReturned     Where to store the amount of returned data. Can
  *                              be NULL.
  */
-static int vbgdIoCtl_CheckMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                        VBoxGuestCheckBalloonInfo *pInfo, size_t *pcbDataReturned)
+static int vgdrvIoCtl_CheckMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                         VBoxGuestCheckBalloonInfo *pInfo, size_t *pcbDataReturned)
 {
     VMMDevGetMemBalloonChangeRequest *pReq;
     int rc;
@@ -2299,7 +2321,7 @@ static int vbgdIoCtl_CheckMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESS
 
     /*
      * The first user trying to query/change the balloon becomes the
-     * owner and owns it until the session is closed (vbgdCloseMemBalloon).
+     * owner and owns it until the session is closed (vgdrvCloseMemBalloon).
      */
     if (   pDevExt->MemBalloon.pOwner != pSession
         && pDevExt->MemBalloon.pOwner == NULL)
@@ -2325,7 +2347,7 @@ static int vbgdIoCtl_CheckMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESS
                 pInfo->cBalloonChunks = pReq->cBalloonChunks;
                 pInfo->fHandleInR3    = false;
 
-                rc = vbgdSetBalloonSizeKernel(pDevExt, pReq->cBalloonChunks, &pInfo->fHandleInR3);
+                rc = vgdrvSetBalloonSizeKernel(pDevExt, pReq->cBalloonChunks, &pInfo->fHandleInR3);
                 /* Ignore various out of memory failures. */
                 if (   rc == VERR_NO_MEMORY
                     || rc == VERR_NO_PHYS_MEMORY
@@ -2360,8 +2382,8 @@ static int vbgdIoCtl_CheckMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESS
  * @param   pcbDataReturned     Where to store the amount of returned data. Can
  *                              be NULL.
  */
-static int vbgdIoCtl_ChangeMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                         VBoxGuestChangeBalloonInfo *pInfo, size_t *pcbDataReturned)
+static int vgdrvIoCtl_ChangeMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                          VBoxGuestChangeBalloonInfo *pInfo, size_t *pcbDataReturned)
 {
     int rc;
     LogFlow(("VBOXGUEST_IOCTL_CHANGE_BALLOON: fInflate=%RTbool u64ChunkAddr=%#RX64\n", pInfo->fInflate, pInfo->u64ChunkAddr));
@@ -2373,7 +2395,7 @@ static int vbgdIoCtl_ChangeMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSES
     {
         /*
          * The first user trying to query/change the balloon becomes the
-         * owner and owns it until the session is closed (vbgdCloseMemBalloon).
+         * owner and owns it until the session is closed (vgdrvCloseMemBalloon).
          */
         if (   pDevExt->MemBalloon.pOwner != pSession
             && pDevExt->MemBalloon.pOwner == NULL)
@@ -2381,7 +2403,7 @@ static int vbgdIoCtl_ChangeMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSES
 
         if (pDevExt->MemBalloon.pOwner == pSession)
         {
-            rc = vbgdSetBalloonSizeFromUser(pDevExt, pSession, pInfo->u64ChunkAddr, !!pInfo->fInflate);
+            rc = vgdrvSetBalloonSizeFromUser(pDevExt, pSession, pInfo->u64ChunkAddr, !!pInfo->fInflate);
             if (pcbDataReturned)
                 *pcbDataReturned = 0;
         }
@@ -2404,7 +2426,7 @@ static int vbgdIoCtl_ChangeMemoryBalloon(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSES
  * @param pDevExt               The device extension.
  * @param pInfo                 The output buffer.
  */
-static int vbgdIoCtl_WriteCoreDump(PVBOXGUESTDEVEXT pDevExt, VBoxGuestWriteCoreDump *pInfo)
+static int vgdrvIoCtl_WriteCoreDump(PVBOXGUESTDEVEXT pDevExt, VBoxGuestWriteCoreDump *pInfo)
 {
     VMMDevReqWriteCoreDump *pReq = NULL;
     int rc;
@@ -2436,8 +2458,10 @@ static int vbgdIoCtl_WriteCoreDump(PVBOXGUESTDEVEXT pDevExt, VBoxGuestWriteCoreD
  * @param   pch                 The log message (need not be NULL terminated).
  * @param   cbData              Size of the buffer.
  * @param   pcbDataReturned     Where to store the amount of returned data. Can be NULL.
+ * @param   fUserSession        Copy of VBOXGUESTSESSION::fUserSession for the
+ *                              call.  True normal user, false root user.
  */
-static int vbgdIoCtl_Log(PVBOXGUESTDEVEXT pDevExt, const char *pch, size_t cbData, size_t *pcbDataReturned, bool fUserSession)
+static int vgdrvIoCtl_Log(PVBOXGUESTDEVEXT pDevExt, const char *pch, size_t cbData, size_t *pcbDataReturned, bool fUserSession)
 {
     if (pDevExt->fLoggingEnabled)
         RTLogBackdoorPrintf("%.*s", cbData, pch);
@@ -2460,7 +2484,7 @@ static int vbgdIoCtl_Log(PVBOXGUESTDEVEXT pDevExt, const char *pch, size_t cbDat
  *
  * @param   pTracker            The tracker to clear.
  */
-static void vbgdBitUsageTrackerClear(PVBOXGUESTBITUSAGETRACER pTracker)
+static void vgdrvBitUsageTrackerClear(PVBOXGUESTBITUSAGETRACER pTracker)
 {
     uint32_t iBit;
     AssertCompile(sizeof(pTracker->acPerBitUsage) == 32 * sizeof(uint32_t));
@@ -2480,7 +2504,7 @@ static void vbgdBitUsageTrackerClear(PVBOXGUESTBITUSAGETRACER pTracker)
  * @param   cMax                Max valid usage value.
  * @param   pszWhat             Identifies the tracker in assertions.
  */
-static void vbgdBitUsageTrackerCheckMask(PCVBOXGUESTBITUSAGETRACER pTracker, uint32_t cMax, const char *pszWhat)
+static void vgdrvBitUsageTrackerCheckMask(PCVBOXGUESTBITUSAGETRACER pTracker, uint32_t cMax, const char *pszWhat)
 {
     uint32_t fMask = 0;
     uint32_t iBit;
@@ -2510,8 +2534,8 @@ static void vbgdBitUsageTrackerCheckMask(PCVBOXGUESTBITUSAGETRACER pTracker, uin
  * @param   cMax                The max valid usage value for assertions.
  * @param   pszWhat             Identifies the tracker in assertions.
  */
-static bool vbgdBitUsageTrackerChange(PVBOXGUESTBITUSAGETRACER pTracker, uint32_t fChanged, uint32_t fPrevious,
-                                      uint32_t cMax, const char *pszWhat)
+static bool vgdrvBitUsageTrackerChange(PVBOXGUESTBITUSAGETRACER pTracker, uint32_t fChanged, uint32_t fPrevious,
+                                       uint32_t cMax, const char *pszWhat)
 {
     bool fGlobalChange = false;
     AssertCompile(sizeof(pTracker->acPerBitUsage) == 32 * sizeof(uint32_t));
@@ -2549,7 +2573,7 @@ static bool vbgdBitUsageTrackerChange(PVBOXGUESTBITUSAGETRACER pTracker, uint32_
     }
 
 #ifdef VBOX_STRICT
-    vbgdBitUsageTrackerCheckMask(pTracker, cMax, pszWhat);
+    vgdrvBitUsageTrackerCheckMask(pTracker, cMax, pszWhat);
 #endif
     NOREF(pszWhat); NOREF(cMax);
     return fGlobalChange;
@@ -2563,7 +2587,7 @@ static bool vbgdBitUsageTrackerChange(PVBOXGUESTBITUSAGETRACER pTracker, uint32_
  * @param   pDevExt         The device extension.
  * @param   fFixedEvents    Fixed events (init time).
  */
-static int vbgdResetEventFilterOnHost(PVBOXGUESTDEVEXT pDevExt, uint32_t fFixedEvents)
+static int vgdrvResetEventFilterOnHost(PVBOXGUESTDEVEXT pDevExt, uint32_t fFixedEvents)
 {
     VMMDevCtlGuestFilterMask *pReq;
     int rc = VbglGRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_CtlGuestFilterMask);
@@ -2598,8 +2622,8 @@ static int vbgdResetEventFilterOnHost(PVBOXGUESTDEVEXT pDevExt, uint32_t fFixedE
  *
  * @remarks Takes the session spinlock.
  */
-static int vbgdSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                     uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination)
+static int vgdrvSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                      uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination)
 {
     VMMDevCtlGuestFilterMask   *pReq;
     uint32_t                    fChanged;
@@ -2614,7 +2638,7 @@ static int vbgdSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
     { /* nothing */ }
     else if (!fSessionTermination)
     {
-        LogRel(("vbgdSetSessionFilterMask: VbglGRAlloc failure: %Rrc\n", rc));
+        LogRel(("vgdrvSetSessionFilterMask: VbglGRAlloc failure: %Rrc\n", rc));
         return rc;
     }
     else
@@ -2636,8 +2660,8 @@ static int vbgdSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
     fChanged = fPrevious ^ pSession->fEventFilter;
     if (fChanged)
     {
-        bool fGlobalChange = vbgdBitUsageTrackerChange(&pDevExt->EventFilterTracker, fChanged, fPrevious,
-                                                       pDevExt->cSessions, "EventFilterTracker");
+        bool fGlobalChange = vgdrvBitUsageTrackerChange(&pDevExt->EventFilterTracker, fChanged, fPrevious,
+                                                        pDevExt->cSessions, "EventFilterTracker");
 
         /*
          * If there are global changes, update the event filter on the host.
@@ -2663,8 +2687,8 @@ static int vbgdSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
                         pDevExt->fEventFilterHost = UINT32_MAX;
                         if (!fSessionTermination)
                         {
-                            vbgdBitUsageTrackerChange(&pDevExt->EventFilterTracker, fChanged, pSession->fEventFilter,
-                                                      pDevExt->cSessions, "EventFilterTracker");
+                            vgdrvBitUsageTrackerChange(&pDevExt->EventFilterTracker, fChanged, pSession->fEventFilter,
+                                                       pDevExt->cSessions, "EventFilterTracker");
                             pSession->fEventFilter = fPrevious;
                         }
                     }
@@ -2691,7 +2715,7 @@ static int vbgdSetSessionEventFilter(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
  * @param   pSession            The session.
  * @param   pInfo               The request.
  */
-static int vbgdIoCtl_CtlFilterMask(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestFilterMaskInfo *pInfo)
+static int vgdrvIoCtl_CtlFilterMask(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestFilterMaskInfo *pInfo)
 {
     LogFlow(("VBOXGUEST_IOCTL_CTL_FILTER_MASK: or=%#x not=%#x\n", pInfo->u32OrMask, pInfo->u32NotMask));
 
@@ -2701,7 +2725,7 @@ static int vbgdIoCtl_CtlFilterMask(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION p
         return VERR_INVALID_PARAMETER;
     }
 
-    return vbgdSetSessionEventFilter(pDevExt, pSession, pInfo->u32OrMask, pInfo->u32NotMask, false /*fSessionTermination*/);
+    return vgdrvSetSessionEventFilter(pDevExt, pSession, pInfo->u32OrMask, pInfo->u32NotMask, false /*fSessionTermination*/);
 }
 
 
@@ -2711,7 +2735,7 @@ static int vbgdIoCtl_CtlFilterMask(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION p
  * @returns VBox status code.
  * @param   pDevExt         The device extension.
  */
-static int vbgdResetMouseStatusOnHost(PVBOXGUESTDEVEXT pDevExt)
+static int vgdrvResetMouseStatusOnHost(PVBOXGUESTDEVEXT pDevExt)
 {
     VMMDevReqMouseStatus *pReq;
     int rc = VbglGRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_SetMouseStatus);
@@ -2747,8 +2771,8 @@ static int vbgdResetMouseStatusOnHost(PVBOXGUESTDEVEXT pDevExt)
  *
  * @remarks Takes the session spinlock.
  */
-static int vbgdSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                     uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination)
+static int vgdrvSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                      uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination)
 {
     VMMDevReqMouseStatus   *pReq;
     uint32_t                fChanged;
@@ -2763,7 +2787,7 @@ static int vbgdSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
     { /* nothing */ }
     else if (!fSessionTermination)
     {
-        LogRel(("vbgdSetSessionMouseStatus: VbglGRAlloc failure: %Rrc\n", rc));
+        LogRel(("vgdrvSetSessionMouseStatus: VbglGRAlloc failure: %Rrc\n", rc));
         return rc;
     }
     else
@@ -2785,8 +2809,8 @@ static int vbgdSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
     fChanged = fPrevious ^ pSession->fMouseStatus;
     if (fChanged)
     {
-        bool fGlobalChange = vbgdBitUsageTrackerChange(&pDevExt->MouseStatusTracker, fChanged, fPrevious,
-                                                       pDevExt->cSessions, "MouseStatusTracker");
+        bool fGlobalChange = vgdrvBitUsageTrackerChange(&pDevExt->MouseStatusTracker, fChanged, fPrevious,
+                                                        pDevExt->cSessions, "MouseStatusTracker");
 
         /*
          * If there are global changes, update the event filter on the host.
@@ -2813,8 +2837,8 @@ static int vbgdSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
                         pDevExt->fMouseStatusHost = UINT32_MAX;
                         if (!fSessionTermination)
                         {
-                            vbgdBitUsageTrackerChange(&pDevExt->MouseStatusTracker, fChanged, pSession->fMouseStatus,
-                                                      pDevExt->cSessions, "MouseStatusTracker");
+                            vgdrvBitUsageTrackerChange(&pDevExt->MouseStatusTracker, fChanged, pSession->fMouseStatus,
+                                                       pDevExt->cSessions, "MouseStatusTracker");
                             pSession->fMouseStatus = fPrevious;
                         }
                     }
@@ -2841,14 +2865,14 @@ static int vbgdSetSessionMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
  * @param   pSession            The session.
  * @param   fFeatures           New bitmap of enabled features.
  */
-static int vbgdIoCtl_SetMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, uint32_t fFeatures)
+static int vgdrvIoCtl_SetMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, uint32_t fFeatures)
 {
     LogFlow(("VBOXGUEST_IOCTL_SET_MOUSE_STATUS: features=%#x\n", fFeatures));
 
     if (fFeatures & ~VMMDEV_MOUSE_GUEST_MASK)
         return VERR_INVALID_PARAMETER;
 
-    return vbgdSetSessionMouseStatus(pDevExt, pSession, fFeatures, ~fFeatures, false /*fSessionTermination*/);
+    return vgdrvSetSessionMouseStatus(pDevExt, pSession, fFeatures, ~fFeatures, false /*fSessionTermination*/);
 }
 
 
@@ -2870,7 +2894,7 @@ static int vbgdIoCtl_SetMouseStatus(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
  * @remarks Needs only be called when dispatching events in the
  *          VBOXGUEST_ACQUIRE_STYLE_EVENTS mask.
  */
-static uint32_t vbgdGetAllowedEventMaskForSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
+static uint32_t vgdrvGetAllowedEventMaskForSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession)
 {
     uint32_t fAcquireModeGuestCaps;
     uint32_t fAcquiredGuestCaps;
@@ -2908,7 +2932,7 @@ static uint32_t vbgdGetAllowedEventMaskForSession(PVBOXGUESTDEVEXT pDevExt, PVBO
  * @returns VBox status code.
  * @param   pDevExt         The device extension.
  */
-static int vbgdResetCapabilitiesOnHost(PVBOXGUESTDEVEXT pDevExt)
+static int vgdrvResetCapabilitiesOnHost(PVBOXGUESTDEVEXT pDevExt)
 {
     VMMDevReqGuestCapabilities2 *pReq;
     int rc = VbglGRAlloc((VMMDevRequestHeader **)&pReq, sizeof(*pReq), VMMDevReq_SetGuestCapabilities);
@@ -2933,9 +2957,10 @@ static int vbgdResetCapabilitiesOnHost(PVBOXGUESTDEVEXT pDevExt)
  * we'll simply clear all bits we don't set.
  *
  * @returns VBox status code.
- * @param   fMask       The new mask.
+ * @param   pDevExt             The device extension.
+ * @param   pReq                The request.
  */
-static int vbgdUpdateCapabilitiesOnHostWithReqAndLock(PVBOXGUESTDEVEXT pDevExt, VMMDevReqGuestCapabilities2 *pReq)
+static int vgdrvUpdateCapabilitiesOnHostWithReqAndLock(PVBOXGUESTDEVEXT pDevExt, VMMDevReqGuestCapabilities2 *pReq)
 {
     int rc;
 
@@ -2981,9 +3006,9 @@ static int vbgdUpdateCapabilitiesOnHostWithReqAndLock(PVBOXGUESTDEVEXT pDevExt,
  *
  * @remarks Takes both the session and event spinlocks.
  */
-static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                          uint32_t fOrMask, uint32_t fNotMask, VBOXGUESTCAPSACQUIRE_FLAGS enmFlags,
-                                          bool fSessionTermination)
+static int vgdrvAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                           uint32_t fOrMask, uint32_t fNotMask, VBOXGUESTCAPSACQUIRE_FLAGS enmFlags,
+                                           bool fSessionTermination)
 {
     uint32_t fCurrentOwnedCaps;
     uint32_t fSessionRemovedCaps;
@@ -3000,7 +3025,7 @@ static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSE
                     | VMMDEV_GUEST_SUPPORTS_GUEST_HOST_WINDOW_MAPPING
                     | VMMDEV_GUEST_SUPPORTS_GRAPHICS ) )
     {
-        LogRel(("vbgdAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x -- invalid fOrMask\n",
+        LogRel(("vgdrvAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x -- invalid fOrMask\n",
                 pSession, fOrMask, fNotMask, enmFlags));
         return VERR_INVALID_PARAMETER;
     }
@@ -3008,7 +3033,7 @@ static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSE
     if (   enmFlags != VBOXGUESTCAPSACQUIRE_FLAGS_CONFIG_ACQUIRE_MODE
         && enmFlags != VBOXGUESTCAPSACQUIRE_FLAGS_NONE)
     {
-        LogRel(("vbgdAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: invalid enmFlags %d\n",
+        LogRel(("vgdrvAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: invalid enmFlags %d\n",
                 pSession, fOrMask, fNotMask, enmFlags));
         return VERR_INVALID_PARAMETER;
     }
@@ -3028,7 +3053,7 @@ static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSE
         { /* do nothing */ }
         else if (!fSessionTermination)
         {
-            LogRel(("vbgdAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: VbglGRAlloc failure: %Rrc\n",
+            LogRel(("vgdrvAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: VbglGRAlloc failure: %Rrc\n",
                     pSession, fOrMask, fNotMask, enmFlags, rc));
             return rc;
         }
@@ -3053,7 +3078,7 @@ static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSE
         if (pReq)
             VbglGRFree(&pReq->header);
         AssertMsgFailed(("Trying to change caps mode: %#x\n", fOrMask));
-        LogRel(("vbgdAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: calling caps acquire for set caps\n",
+        LogRel(("vgdrvAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: calling caps acquire for set caps\n",
                 pSession, fOrMask, fNotMask, enmFlags));
         return VERR_INVALID_STATE;
     }
@@ -3066,7 +3091,7 @@ static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSE
         RTSpinlockRelease(pDevExt->EventSpinlock);
 
         Assert(!pReq);
-        Log(("vbgdAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: configured acquire caps: 0x%x\n",
+        Log(("vgdrvAcquireSessionCapabilities: pSession=%p fOrMask=%#x fNotMask=%#x enmFlags=%#x: configured acquire caps: 0x%x\n",
              pSession, fOrMask, fNotMask, enmFlags));
         return VINF_SUCCESS;
     }
@@ -3106,7 +3131,7 @@ static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSE
             Assert(pReq || fSessionTermination);
             if (pReq)
             {
-                rc = vbgdUpdateCapabilitiesOnHostWithReqAndLock(pDevExt, pReq);
+                rc = vgdrvUpdateCapabilitiesOnHostWithReqAndLock(pDevExt, pReq);
                 if (RT_FAILURE(rc) && !fSessionTermination)
                 {
                     /* Failed, roll back. */
@@ -3122,7 +3147,7 @@ static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSE
                     }
 
                     RTSpinlockRelease(pDevExt->EventSpinlock);
-                    LogRel(("vbgdAcquireSessionCapabilities: vbgdUpdateCapabilitiesOnHostWithReqAndLock failed: rc=%Rrc\n", rc));
+                    LogRel(("vgdrvAcquireSessionCapabilities: vgdrvUpdateCapabilitiesOnHostWithReqAndLock failed: rc=%Rrc\n", rc));
                     VbglGRFree(&pReq->header);
                     return rc;
                 }
@@ -3133,7 +3158,7 @@ static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSE
     {
         RTSpinlockRelease(pDevExt->EventSpinlock);
 
-        Log(("vbgdAcquireSessionCapabilities: Caps %#x were busy\n", fOtherConflictingCaps));
+        Log(("vgdrvAcquireSessionCapabilities: Caps %#x were busy\n", fOtherConflictingCaps));
         VbglGRFree(&pReq->header);
         return VERR_RESOURCE_BUSY;
     }
@@ -3160,11 +3185,11 @@ static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSE
 
         RTSpinlockAcquire(pDevExt->EventSpinlock);
         if (fGenFakeEvents || pDevExt->f32PendingEvents)
-            vbgdDispatchEventsLocked(pDevExt, fGenFakeEvents);
+            vgdrvDispatchEventsLocked(pDevExt, fGenFakeEvents);
         RTSpinlockRelease(pDevExt->EventSpinlock);
 
 #ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP
-        VbgdCommonWaitDoWakeUps(pDevExt);
+        VGDrvCommonWaitDoWakeUps(pDevExt);
 #endif
     }
 
@@ -3181,16 +3206,16 @@ static int vbgdAcquireSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSE
  * @param   pSession            The session.
  * @param   pAcquire            The request.
  */
-static int vbgdIoCtl_GuestCapsAcquire(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestCapsAquire *pAcquire)
+static int vgdrvIoCtl_GuestCapsAcquire(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestCapsAquire *pAcquire)
 {
     int rc;
     LogFlow(("VBOXGUEST_IOCTL_GUEST_CAPS_ACQUIRE: or=%#x not=%#x flags=%#x\n",
              pAcquire->u32OrMask, pAcquire->u32NotMask, pAcquire->enmFlags));
 
-    rc = vbgdAcquireSessionCapabilities(pDevExt, pSession, pAcquire->u32OrMask, pAcquire->u32NotMask, pAcquire->enmFlags,
-                                        false /*fSessionTermination*/);
+    rc = vgdrvAcquireSessionCapabilities(pDevExt, pSession, pAcquire->u32OrMask, pAcquire->u32NotMask, pAcquire->enmFlags,
+                                         false /*fSessionTermination*/);
     if (RT_FAILURE(rc))
-        LogRel(("VbgdCommonIoCtl: GUEST_CAPS_ACQUIRE failed rc=%Rrc\n", rc));
+        LogRel(("VGDrvCommonIoCtl: GUEST_CAPS_ACQUIRE failed rc=%Rrc\n", rc));
     pAcquire->rc = rc;
     return VINF_SUCCESS;
 }
@@ -3211,8 +3236,8 @@ static int vbgdIoCtl_GuestCapsAcquire(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSIO
  *
  * @remarks Takes the session spinlock.
  */
-static int vbgdSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                                      uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination)
+static int vgdrvSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                                       uint32_t fOrMask, uint32_t fNotMask, bool fSessionTermination)
 {
     /*
      * Preallocate a request buffer so we can do all in one go without leaving the spinlock.
@@ -3223,7 +3248,7 @@ static int vbgdSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSIO
     { /* nothing */ }
     else if (!fSessionTermination)
     {
-        LogRel(("vbgdSetSessionCapabilities: VbglGRAlloc failure: %Rrc\n", rc));
+        LogRel(("vgdrvSetSessionCapabilities: VbglGRAlloc failure: %Rrc\n", rc));
         return rc;
     }
     else
@@ -3254,8 +3279,8 @@ static int vbgdSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSIO
         fChanged = fPrevious ^ pSession->fCapabilities;
         if (fChanged)
         {
-            bool fGlobalChange = vbgdBitUsageTrackerChange(&pDevExt->SetGuestCapsTracker, fChanged, fPrevious,
-                                                           pDevExt->cSessions, "SetGuestCapsTracker");
+            bool fGlobalChange = vgdrvBitUsageTrackerChange(&pDevExt->SetGuestCapsTracker, fChanged, fPrevious,
+                                                            pDevExt->cSessions, "SetGuestCapsTracker");
 
             /*
              * If there are global changes, update the capabilities on the host.
@@ -3265,13 +3290,13 @@ static int vbgdSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSIO
                 Assert(pReq || fSessionTermination);
                 if (pReq)
                 {
-                    rc = vbgdUpdateCapabilitiesOnHostWithReqAndLock(pDevExt, pReq);
+                    rc = vgdrvUpdateCapabilitiesOnHostWithReqAndLock(pDevExt, pReq);
 
                     /* On failure, roll back (unless it's session termination time). */
                     if (RT_FAILURE(rc) && !fSessionTermination)
                     {
-                        vbgdBitUsageTrackerChange(&pDevExt->SetGuestCapsTracker, fChanged, pSession->fCapabilities,
-                                                  pDevExt->cSessions, "SetGuestCapsTracker");
+                        vgdrvBitUsageTrackerChange(&pDevExt->SetGuestCapsTracker, fChanged, pSession->fCapabilities,
+                                                   pDevExt->cSessions, "SetGuestCapsTracker");
                         pSession->fCapabilities = fPrevious;
                     }
                 }
@@ -3299,13 +3324,13 @@ static int vbgdSetSessionCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSIO
  * @param   pSession            The session.
  * @param   pInfo               The request.
  */
-static int vbgdIoCtl_SetCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestSetCapabilitiesInfo *pInfo)
+static int vgdrvIoCtl_SetCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession, VBoxGuestSetCapabilitiesInfo *pInfo)
 {
     int rc;
     LogFlow(("VBOXGUEST_IOCTL_SET_GUEST_CAPABILITIES: or=%#x not=%#x\n", pInfo->u32OrMask, pInfo->u32NotMask));
 
     if (!((pInfo->u32OrMask | pInfo->u32NotMask) & ~VMMDEV_GUEST_CAPABILITIES_MASK))
-        rc = vbgdSetSessionCapabilities(pDevExt, pSession, pInfo->u32OrMask, pInfo->u32NotMask, false /*fSessionTermination*/);
+        rc = vgdrvSetSessionCapabilities(pDevExt, pSession, pInfo->u32OrMask, pInfo->u32NotMask, false /*fSessionTermination*/);
     else
         rc = VERR_INVALID_PARAMETER;
 
@@ -3330,11 +3355,11 @@ static int vbgdIoCtl_SetCapabilities(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION
  * @param   cbData              The max size of the data buffer.
  * @param   pcbDataReturned     Where to store the amount of returned data. Can be NULL.
  */
-int VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                    void *pvData, size_t cbData, size_t *pcbDataReturned)
+int VGDrvCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                     void *pvData, size_t cbData, size_t *pcbDataReturned)
 {
     int rc;
-    LogFlow(("VbgdCommonIoCtl: iFunction=%#x pDevExt=%p pSession=%p pvData=%p cbData=%zu\n",
+    LogFlow(("VGDrvCommonIoCtl: iFunction=%#x pDevExt=%p pSession=%p pvData=%p cbData=%zu\n",
              iFunction, pDevExt, pSession, pvData, cbData));
 
     /*
@@ -3392,7 +3417,7 @@ int VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESS
     if (VBOXGUEST_IOCTL_STRIP_SIZE(iFunction) == VBOXGUEST_IOCTL_STRIP_SIZE(VBOXGUEST_IOCTL_VMMREQUEST(0)))
     {
         CHECKRET_MIN_SIZE("VMMREQUEST", sizeof(VMMDevRequestHeader));
-        rc = vbgdIoCtl_VMMRequest(pDevExt, pSession, (VMMDevRequestHeader *)pvData, cbData, pcbDataReturned);
+        rc = vgdrvIoCtl_VMMRequest(pDevExt, pSession, (VMMDevRequestHeader *)pvData, cbData, pcbDataReturned);
     }
 #ifdef VBOX_WITH_HGCM
     /*
@@ -3402,51 +3427,51 @@ int VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESS
     {
         bool fInterruptible = pSession->R0Process != NIL_RTR0PROCESS;
         CHECKRET_MIN_SIZE("HGCM_CALL", sizeof(VBoxGuestHGCMCallInfo));
-        rc = vbgdIoCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
-                                fInterruptible, false /*f32bit*/, false /* fUserData */,
-                                0, cbData, pcbDataReturned);
+        rc = vgdrvIoCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
+                                 fInterruptible, false /*f32bit*/, false /* fUserData */,
+                                 0, cbData, pcbDataReturned);
     }
     else if (VBOXGUEST_IOCTL_STRIP_SIZE(iFunction) == VBOXGUEST_IOCTL_STRIP_SIZE(VBOXGUEST_IOCTL_HGCM_CALL_TIMED(0)))
     {
         VBoxGuestHGCMCallInfoTimed *pInfo = (VBoxGuestHGCMCallInfoTimed *)pvData;
         CHECKRET_MIN_SIZE("HGCM_CALL_TIMED", sizeof(VBoxGuestHGCMCallInfoTimed));
-        rc = vbgdIoCtl_HGCMCall(pDevExt, pSession, &pInfo->info, pInfo->u32Timeout,
-                                !!pInfo->fInterruptible || pSession->R0Process != NIL_RTR0PROCESS,
-                                false /*f32bit*/, false /* fUserData */,
-                                RT_OFFSETOF(VBoxGuestHGCMCallInfoTimed, info), cbData, pcbDataReturned);
+        rc = vgdrvIoCtl_HGCMCall(pDevExt, pSession, &pInfo->info, pInfo->u32Timeout,
+                                 !!pInfo->fInterruptible || pSession->R0Process != NIL_RTR0PROCESS,
+                                 false /*f32bit*/, false /* fUserData */,
+                                 RT_OFFSETOF(VBoxGuestHGCMCallInfoTimed, info), cbData, pcbDataReturned);
     }
     else if (VBOXGUEST_IOCTL_STRIP_SIZE(iFunction) == VBOXGUEST_IOCTL_STRIP_SIZE(VBOXGUEST_IOCTL_HGCM_CALL_USERDATA(0)))
     {
         bool fInterruptible = true;
         CHECKRET_MIN_SIZE("HGCM_CALL", sizeof(VBoxGuestHGCMCallInfo));
-        rc = vbgdIoCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
-                                fInterruptible, false /*f32bit*/, true /* fUserData */,
-                                0, cbData, pcbDataReturned);
+        rc = vgdrvIoCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
+                                 fInterruptible, false /*f32bit*/, true /* fUserData */,
+                                 0, cbData, pcbDataReturned);
     }
 # ifdef RT_ARCH_AMD64
     else if (VBOXGUEST_IOCTL_STRIP_SIZE(iFunction) == VBOXGUEST_IOCTL_STRIP_SIZE(VBOXGUEST_IOCTL_HGCM_CALL_32(0)))
     {
         bool fInterruptible = pSession->R0Process != NIL_RTR0PROCESS;
         CHECKRET_MIN_SIZE("HGCM_CALL", sizeof(VBoxGuestHGCMCallInfo));
-        rc = vbgdIoCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
-                                fInterruptible, true /*f32bit*/, false /* fUserData */,
-                                0, cbData, pcbDataReturned);
+        rc = vgdrvIoCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
+                                 fInterruptible, true /*f32bit*/, false /* fUserData */,
+                                 0, cbData, pcbDataReturned);
     }
     else if (VBOXGUEST_IOCTL_STRIP_SIZE(iFunction) == VBOXGUEST_IOCTL_STRIP_SIZE(VBOXGUEST_IOCTL_HGCM_CALL_TIMED_32(0)))
     {
         CHECKRET_MIN_SIZE("HGCM_CALL_TIMED", sizeof(VBoxGuestHGCMCallInfoTimed));
         VBoxGuestHGCMCallInfoTimed *pInfo = (VBoxGuestHGCMCallInfoTimed *)pvData;
-        rc = vbgdIoCtl_HGCMCall(pDevExt, pSession, &pInfo->info, pInfo->u32Timeout,
-                                !!pInfo->fInterruptible || pSession->R0Process != NIL_RTR0PROCESS,
-                                true /*f32bit*/, false /* fUserData */,
-                                RT_OFFSETOF(VBoxGuestHGCMCallInfoTimed, info), cbData, pcbDataReturned);
+        rc = vgdrvIoCtl_HGCMCall(pDevExt, pSession, &pInfo->info, pInfo->u32Timeout,
+                                 !!pInfo->fInterruptible || pSession->R0Process != NIL_RTR0PROCESS,
+                                 true /*f32bit*/, false /* fUserData */,
+                                 RT_OFFSETOF(VBoxGuestHGCMCallInfoTimed, info), cbData, pcbDataReturned);
     }
 # endif
 #endif /* VBOX_WITH_HGCM */
     else if (VBOXGUEST_IOCTL_STRIP_SIZE(iFunction) == VBOXGUEST_IOCTL_STRIP_SIZE(VBOXGUEST_IOCTL_LOG(0)))
     {
         CHECKRET_MIN_SIZE("LOG", 1);
-        rc = vbgdIoCtl_Log(pDevExt, (char *)pvData, cbData, pcbDataReturned, pSession->fUserSession);
+        rc = vgdrvIoCtl_Log(pDevExt, (char *)pvData, cbData, pcbDataReturned, pSession->fUserSession);
     }
     else
     {
@@ -3455,31 +3480,31 @@ int VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESS
             case VBOXGUEST_IOCTL_GETVMMDEVPORT:
                 CHECKRET_RING0("GETVMMDEVPORT");
                 CHECKRET_MIN_SIZE("GETVMMDEVPORT", sizeof(VBoxGuestPortInfo));
-                rc = vbgdIoCtl_GetVMMDevPort(pDevExt, (VBoxGuestPortInfo *)pvData, pcbDataReturned);
+                rc = vgdrvIoCtl_GetVMMDevPort(pDevExt, (VBoxGuestPortInfo *)pvData, pcbDataReturned);
                 break;
 
 #ifndef RT_OS_WINDOWS  /* Windows has its own implementation of this. */
             case VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK:
                 CHECKRET_RING0("SET_MOUSE_NOTIFY_CALLBACK");
                 CHECKRET_SIZE("SET_MOUSE_NOTIFY_CALLBACK", sizeof(VBoxGuestMouseSetNotifyCallback));
-                rc = vbgdIoCtl_SetMouseNotifyCallback(pDevExt, (VBoxGuestMouseSetNotifyCallback *)pvData);
+                rc = vgdrvIoCtl_SetMouseNotifyCallback(pDevExt, (VBoxGuestMouseSetNotifyCallback *)pvData);
                 break;
 #endif
 
             case VBOXGUEST_IOCTL_WAITEVENT:
                 CHECKRET_MIN_SIZE("WAITEVENT", sizeof(VBoxGuestWaitEventInfo));
-                rc = vbgdIoCtl_WaitEvent(pDevExt, pSession, (VBoxGuestWaitEventInfo *)pvData,
-                                                    pcbDataReturned, pSession->R0Process != NIL_RTR0PROCESS);
+                rc = vgdrvIoCtl_WaitEvent(pDevExt, pSession, (VBoxGuestWaitEventInfo *)pvData,
+                                          pcbDataReturned, pSession->R0Process != NIL_RTR0PROCESS);
                 break;
 
             case VBOXGUEST_IOCTL_CANCEL_ALL_WAITEVENTS:
                 CHECKRET_SIZE("CANCEL_ALL_WAITEVENTS", 0);
-                rc = vbgdIoCtl_CancelAllWaitEvents(pDevExt, pSession);
+                rc = vgdrvIoCtl_CancelAllWaitEvents(pDevExt, pSession);
                 break;
 
             case VBOXGUEST_IOCTL_CTL_FILTER_MASK:
                 CHECKRET_MIN_SIZE("CTL_FILTER_MASK", sizeof(VBoxGuestFilterMaskInfo));
-                rc = vbgdIoCtl_CtlFilterMask(pDevExt, pSession, (VBoxGuestFilterMaskInfo *)pvData);
+                rc = vgdrvIoCtl_CtlFilterMask(pDevExt, pSession, (VBoxGuestFilterMaskInfo *)pvData);
                 break;
 
 #ifdef VBOX_WITH_HGCM
@@ -3488,7 +3513,7 @@ int VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESS
             case VBOXGUEST_IOCTL_HGCM_CONNECT_32:
 # endif
                 CHECKRET_MIN_SIZE("HGCM_CONNECT", sizeof(VBoxGuestHGCMConnectInfo));
-                rc = vbgdIoCtl_HGCMConnect(pDevExt, pSession, (VBoxGuestHGCMConnectInfo *)pvData, pcbDataReturned);
+                rc = vgdrvIoCtl_HGCMConnect(pDevExt, pSession, (VBoxGuestHGCMConnectInfo *)pvData, pcbDataReturned);
                 break;
 
             case VBOXGUEST_IOCTL_HGCM_DISCONNECT:
@@ -3496,51 +3521,51 @@ int VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESS
             case VBOXGUEST_IOCTL_HGCM_DISCONNECT_32:
 # endif
                 CHECKRET_MIN_SIZE("HGCM_DISCONNECT", sizeof(VBoxGuestHGCMDisconnectInfo));
-                rc = vbgdIoCtl_HGCMDisconnect(pDevExt, pSession, (VBoxGuestHGCMDisconnectInfo *)pvData, pcbDataReturned);
+                rc = vgdrvIoCtl_HGCMDisconnect(pDevExt, pSession, (VBoxGuestHGCMDisconnectInfo *)pvData, pcbDataReturned);
                 break;
 #endif /* VBOX_WITH_HGCM */
 
             case VBOXGUEST_IOCTL_CHECK_BALLOON:
                 CHECKRET_MIN_SIZE("CHECK_MEMORY_BALLOON", sizeof(VBoxGuestCheckBalloonInfo));
-                rc = vbgdIoCtl_CheckMemoryBalloon(pDevExt, pSession, (VBoxGuestCheckBalloonInfo *)pvData, pcbDataReturned);
+                rc = vgdrvIoCtl_CheckMemoryBalloon(pDevExt, pSession, (VBoxGuestCheckBalloonInfo *)pvData, pcbDataReturned);
                 break;
 
             case VBOXGUEST_IOCTL_CHANGE_BALLOON:
                 CHECKRET_MIN_SIZE("CHANGE_MEMORY_BALLOON", sizeof(VBoxGuestChangeBalloonInfo));
-                rc = vbgdIoCtl_ChangeMemoryBalloon(pDevExt, pSession, (VBoxGuestChangeBalloonInfo *)pvData, pcbDataReturned);
+                rc = vgdrvIoCtl_ChangeMemoryBalloon(pDevExt, pSession, (VBoxGuestChangeBalloonInfo *)pvData, pcbDataReturned);
                 break;
 
             case VBOXGUEST_IOCTL_WRITE_CORE_DUMP:
                 CHECKRET_MIN_SIZE("WRITE_CORE_DUMP", sizeof(VBoxGuestWriteCoreDump));
-                rc = vbgdIoCtl_WriteCoreDump(pDevExt, (VBoxGuestWriteCoreDump *)pvData);
+                rc = vgdrvIoCtl_WriteCoreDump(pDevExt, (VBoxGuestWriteCoreDump *)pvData);
                 break;
 
             case VBOXGUEST_IOCTL_SET_MOUSE_STATUS:
                 CHECKRET_SIZE("SET_MOUSE_STATUS", sizeof(uint32_t));
-                rc = vbgdIoCtl_SetMouseStatus(pDevExt, pSession, *(uint32_t *)pvData);
+                rc = vgdrvIoCtl_SetMouseStatus(pDevExt, pSession, *(uint32_t *)pvData);
                 break;
 
 #ifdef VBOX_WITH_DPC_LATENCY_CHECKER
             case VBOXGUEST_IOCTL_DPC_LATENCY_CHECKER:
                 CHECKRET_SIZE("DPC_LATENCY_CHECKER", 0);
-                rc = VbgdNtIOCtl_DpcLatencyChecker();
+                rc = VGDrvNtIOCtl_DpcLatencyChecker();
                 break;
 #endif
 
             case VBOXGUEST_IOCTL_GUEST_CAPS_ACQUIRE:
                 CHECKRET_SIZE("GUEST_CAPS_ACQUIRE", sizeof(VBoxGuestCapsAquire));
-                rc = vbgdIoCtl_GuestCapsAcquire(pDevExt, pSession, (VBoxGuestCapsAquire *)pvData);
+                rc = vgdrvIoCtl_GuestCapsAcquire(pDevExt, pSession, (VBoxGuestCapsAquire *)pvData);
                 *pcbDataReturned = sizeof(VBoxGuestCapsAquire);
                 break;
 
             case VBOXGUEST_IOCTL_SET_GUEST_CAPABILITIES:
                 CHECKRET_MIN_SIZE("SET_GUEST_CAPABILITIES", sizeof(VBoxGuestSetCapabilitiesInfo));
-                rc = vbgdIoCtl_SetCapabilities(pDevExt, pSession, (VBoxGuestSetCapabilitiesInfo *)pvData);
+                rc = vgdrvIoCtl_SetCapabilities(pDevExt, pSession, (VBoxGuestSetCapabilitiesInfo *)pvData);
                 break;
 
             default:
             {
-                LogRel(("VbgdCommonIoCtl: Unknown request iFunction=%#x stripped size=%#x\n",
+                LogRel(("VGDrvCommonIoCtl: Unknown request iFunction=%#x stripped size=%#x\n",
                         iFunction, VBOXGUEST_IOCTL_STRIP_SIZE(iFunction)));
                 rc = VERR_NOT_SUPPORTED;
                 break;
@@ -3548,20 +3573,20 @@ int VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESS
         }
     }
 
-    LogFlow(("VbgdCommonIoCtl: returns %Rrc *pcbDataReturned=%zu\n", rc, pcbDataReturned ? *pcbDataReturned : 0));
+    LogFlow(("VGDrvCommonIoCtl: returns %Rrc *pcbDataReturned=%zu\n", rc, pcbDataReturned ? *pcbDataReturned : 0));
     return rc;
 }
 
 
 /**
- * Used by VbgdCommonISR as well as the acquire guest capability code.
+ * Used by VGDrvCommonISR as well as the acquire guest capability code.
  *
  * @returns VINF_SUCCESS on success. On failure, ORed together
  *          RTSemEventMultiSignal errors (completes processing despite errors).
  * @param   pDevExt             The VBoxGuest device extension.
  * @param   fEvents             The events to dispatch.
  */
-static int vbgdDispatchEventsLocked(PVBOXGUESTDEVEXT pDevExt, uint32_t fEvents)
+static int vgdrvDispatchEventsLocked(PVBOXGUESTDEVEXT pDevExt, uint32_t fEvents)
 {
     PVBOXGUESTWAIT  pWait;
     PVBOXGUESTWAIT  pSafe;
@@ -3578,7 +3603,7 @@ static int vbgdDispatchEventsLocked(PVBOXGUESTDEVEXT pDevExt, uint32_t fEvents)
             /* Does this one wait on any of the events we're dispatching?  We do a quick
                check first, then deal with VBOXGUEST_ACQUIRE_STYLE_EVENTS as applicable. */
             if (fHandledEvents & VBOXGUEST_ACQUIRE_STYLE_EVENTS)
-                fHandledEvents &= vbgdGetAllowedEventMaskForSession(pDevExt, pWait->pSession);
+                fHandledEvents &= vgdrvGetAllowedEventMaskForSession(pDevExt, pWait->pSession);
             if (fHandledEvents)
             {
                 pWait->fResEvents = pWait->fReqEvents & fEvents & fHandledEvents;
@@ -3609,7 +3634,7 @@ static int vbgdDispatchEventsLocked(PVBOXGUESTDEVEXT pDevExt, uint32_t fEvents)
  * @returns true if it was our interrupt, false if it wasn't.
  * @param   pDevExt     The VBoxGuest device extension.
  */
-bool VbgdCommonISR(PVBOXGUESTDEVEXT pDevExt)
+bool VGDrvCommonISR(PVBOXGUESTDEVEXT pDevExt)
 {
     VMMDevEvents volatile  *pReq                  = pDevExt->pIrqAckEvents;
     bool                    fMousePositionChanged = false;
@@ -3642,7 +3667,7 @@ bool VbgdCommonISR(PVBOXGUESTDEVEXT pDevExt)
         {
             uint32_t        fEvents = pReq->events;
 
-            Log3(("VbgdCommonISR: acknowledge events succeeded %#RX32\n", fEvents));
+            Log3(("VGDrvCommonISR: acknowledge events succeeded %#RX32\n", fEvents));
 
             /*
              * VMMDEV_EVENT_MOUSE_POSITION_CHANGED can only be polled for.
@@ -3686,14 +3711,14 @@ bool VbgdCommonISR(PVBOXGUESTDEVEXT pDevExt)
             /*
              * Normal FIFO waiter evaluation.
              */
-            rc |= vbgdDispatchEventsLocked(pDevExt, fEvents);
+            rc |= vgdrvDispatchEventsLocked(pDevExt, fEvents);
         }
         else /* something is serious wrong... */
-            Log(("VbgdCommonISR: acknowledge events failed rc=%Rrc (events=%#x)!!\n",
+            Log(("VGDrvCommonISR: acknowledge events failed rc=%Rrc (events=%#x)!!\n",
                  pReq->header.rc, pReq->events));
     }
     else
-        Log3(("VbgdCommonISR: not ours\n"));
+        Log3(("VGDrvCommonISR: not ours\n"));
 
     RTSpinlockRelease(pDevExt->EventSpinlock);
 
@@ -3703,7 +3728,7 @@ bool VbgdCommonISR(PVBOXGUESTDEVEXT pDevExt)
      * Note. On Windows this isn't possible at this IRQL, so a DPC will take
      *       care of it.  Same on darwin, doing it in the work loop callback.
      */
-    VbgdCommonWaitDoWakeUps(pDevExt);
+    VGDrvCommonWaitDoWakeUps(pDevExt);
 #endif
 
     /*
@@ -3713,7 +3738,7 @@ bool VbgdCommonISR(PVBOXGUESTDEVEXT pDevExt)
     if (fMousePositionChanged)
     {
         ASMAtomicIncU32(&pDevExt->u32MousePosChangedSeq);
-        VbgdNativeISRMousePollEvent(pDevExt);
+        VGDrvNativeISRMousePollEvent(pDevExt);
     }
 
     Assert(rc == 0);
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuestA-os2.asm b/src/VBox/Additions/common/VBoxGuest/VBoxGuestA-os2.asm
index 698eb7b..7e4931b 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuestA-os2.asm
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuestA-os2.asm
@@ -220,14 +220,14 @@ segment TEXT32
 extern KernThunkStackTo32
 extern KernThunkStackTo16
 
-extern NAME(VBoxGuestOS2Init)
-extern NAME(VBoxGuestOS2Open)
-extern NAME(VBoxGuestOS2Close)
-extern NAME(VBoxGuestOS2IOCtl)
-extern NAME(VBoxGuestOS2IOCtlFast)
-extern NAME(VBoxGuestOS2IDCConnect)
-extern NAME(VBoxGuestOS2IDCService)
-extern NAME(VBoxGuestOS2ISR)
+extern NAME(vgdrvOS2Init)
+extern NAME(vgdrvOS2Open)
+extern NAME(vgdrvOS2Close)
+extern NAME(vgdrvOS2IOCtl)
+extern NAME(vgdrvOS2IOCtlFast)
+extern NAME(vgdrvOS2IDCConnect)
+extern NAME(VGDrvOS2IDCService)
+extern NAME(vgdrvOS2ISR)
 
 
 segment DATA16
@@ -239,8 +239,8 @@ GLOBALNAME g_VBoxGuestHdr1
     dw  NAME(g_VBoxGuestHdr2) wrt DATA16            ; NextHeader.off
     dw  DATA16                                      ; NextHeader.sel
     dw  DEVLEV_3 | DEV_30 | DEV_CHAR_DEV | DEV_IOCTL; SDevAtt
-    dw  NAME(VBoxGuestOS2EP) wrt CODE16             ; StrategyEP
-    dw  NAME(VBoxGuestOS2IDC) wrt CODE16            ; IDCEP
+    dw  NAME(VGDrvOS2Entrypoint) wrt CODE16         ; StrategyEP
+    dw  NAME(VGDrvOS2IDC) wrt CODE16                ; IDCEP
     db  'vboxgst$'                                  ; DevName
     dw  0                                           ; SDevProtCS
     dw  0                                           ; SDevProtDS
@@ -252,7 +252,7 @@ align 4
 GLOBALNAME g_VBoxGuestHdr2
     dd  0ffffffffh                                  ; NextHeader (NIL)
     dw  DEVLEV_3 | DEV_30 | DEV_CHAR_DEV            ; SDevAtt
-    dw  NAME(VBoxGuestOS2InitEP) wrt CODE16         ; StrategyEP
+    dw  NAME(vgdrvOS2InitEntrypoint) wrt CODE16     ; StrategyEP
     dw  0                                           ; IDCEP
     db  'vboxgs1$'                                  ; DevName
     dw  0                                           ; SDevProtCS
@@ -275,7 +275,7 @@ GLOBALNAME g_fpfnDevHlp
     dd 0
 
 
-;; VBoxGuestFindAdapter Output
+;; vgdrvFindAdapter Output
 ; @{
 
 ;; The MMIO base of the VMMDev.
@@ -380,7 +380,7 @@ segment CODE16
 ;
 ; Can clobber any registers it likes except SP.
 ;
-BEGINPROC VBoxGuestOS2EP
+BEGINPROC VGDrvOS2Entrypoint
     push    ebp
     mov     ebp, esp
     push    es                                      ; bp - 2
@@ -391,23 +391,23 @@ BEGINPROC VBoxGuestOS2EP
     ; Check for the most frequent first.
     ;
     cmp     byte [es:bx + PKTHDR.cmd], 10h          ; Generic IOCtl
-    jne near VBoxGuestOS2EP_NotGenIOCtl
+    jne near vgdrvOS2EP_NotGenIOCtl
 
 
     ;
     ; Generic I/O Control Request.
     ;
-VBoxGuestOS2EP_GenIOCtl:
+vgdrvOS2EP_GenIOCtl:
 
     ; Fast IOCtl?
     cmp     byte [es:bx + PKTIOCTL.cat], VBOXGUEST_IOCTL_CATEGORY_FAST
-    jne     VBoxGuestOS2EP_GenIOCtl_Other
+    jne     vgdrvOS2EP_GenIOCtl_Other
 
     ;
     ; Fast IOCtl.
-    ;   DECLASM(int) VBoxGuestOS2IOCtlFast(uint16_t sfn, uint8_t iFunction, uint16_t *pcbParm)
+    ;   DECLASM(int) vgdrvOS2IOCtlFast(uint16_t sfn, uint8_t iFunction, uint16_t *pcbParm)
     ;
-VBoxGuestOS2EP_GenIOCtl_Fast:
+vgdrvOS2EP_GenIOCtl_Fast:
     mov     ax, [es:bx + PKTIOCTL.pData + 2]        ; LDT selector to flat address.
     shr     ax, 3
     shl     eax, 16
@@ -422,9 +422,9 @@ VBoxGuestOS2EP_GenIOCtl_Fast:
     movzx   eax, word [es:bx + PKTIOCTL.sfn]
     push    eax                                     ; 00h
 
-    JMP16TO32 VBoxGuestOS2EP_GenIOCtl_Fast_32
+    JMP16TO32 vgdrvOS2EP_GenIOCtl_Fast_32
 segment TEXT32
-GLOBALNAME VBoxGuestOS2EP_GenIOCtl_Fast_32
+GLOBALNAME vgdrvOS2EP_GenIOCtl_Fast_32
 
     ; switch stack to 32-bit.
     mov     ax, DATA32 wrt FLAT
@@ -433,20 +433,20 @@ GLOBALNAME VBoxGuestOS2EP_GenIOCtl_Fast_32
     call    KernThunkStackTo32
 
     ; call the C code (don't cleanup the stack).
-    call    NAME(VBoxGuestOS2IOCtlFast)
+    call    NAME(vgdrvOS2IOCtlFast)
 
     ; switch back the stack.
     push    eax
     call    KernThunkStackTo16
     pop     eax
 
-    JMP32TO16 VBoxGuestOS2EP_GenIOCtl_Fast_32
+    JMP32TO16 vgdrvOS2EP_GenIOCtl_Fast_32
 segment CODE16
-GLOBALNAME VBoxGuestOS2EP_GenIOCtl_Fast_16
+GLOBALNAME vgdrvOS2EP_GenIOCtl_Fast_16
 
     les     bx, [bp - 4]                            ; Reload the packet pointer.
     or      eax, eax
-    jnz near VBoxGuestOS2EP_GeneralFailure
+    jnz near vgdrvOS2EP_GeneralFailure
 
     ; setup output stuff.
     mov     edx, esp
@@ -461,7 +461,7 @@ GLOBALNAME VBoxGuestOS2EP_GenIOCtl_Fast_16
     ;
     ; Other IOCtl (slow)
     ;
-VBoxGuestOS2EP_GenIOCtl_Other:
+vgdrvOS2EP_GenIOCtl_Other:
     mov     eax, [es:bx +  PKTIOCTL.cbParm]         ; Load cbParm and cbData
     push    eax                                     ; 1eh - in/out data size.
                                                     ; 1ch - in/out parameter size.
@@ -475,7 +475,7 @@ VBoxGuestOS2EP_GenIOCtl_Other:
     movzx   esi, word [es:bx + PKTIOCTL.pData]      ; offset
     mov     dl, DevHlp_VirtToLin
     call far [NAME(g_fpfnDevHlp)]
-    jc near VBoxGuestOS2EP_GeneralFailure
+    jc near vgdrvOS2EP_GeneralFailure
     jmp     .finish_data
 .no_data:
     xor     eax, eax
@@ -489,7 +489,7 @@ VBoxGuestOS2EP_GenIOCtl_Other:
     movzx   esi, word [es:bx + PKTIOCTL.pParm]      ; offset
     mov     dl, DevHlp_VirtToLin
     call far [NAME(g_fpfnDevHlp)]
-    jc near VBoxGuestOS2EP_GeneralFailure
+    jc near vgdrvOS2EP_GeneralFailure
     jmp     .finish_parm
 .no_parm:
     xor     eax, eax
@@ -508,9 +508,9 @@ VBoxGuestOS2EP_GenIOCtl_Other:
     movzx   eax, word [es:bx + PKTIOCTL.sfn]
     push    eax                                     ; 00h
 
-    JMP16TO32 VBoxGuestOS2EP_GenIOCtl_Other_32
+    JMP16TO32 vgdrvOS2EP_GenIOCtl_Other_32
 segment TEXT32
-GLOBALNAME VBoxGuestOS2EP_GenIOCtl_Other_32
+GLOBALNAME vgdrvOS2EP_GenIOCtl_Other_32
 
     ; switch stack to 32-bit.
     mov     ax, DATA32 wrt FLAT
@@ -525,20 +525,20 @@ GLOBALNAME VBoxGuestOS2EP_GenIOCtl_Other_32
     mov     [esp + 18h], edx
 
     ; call the C code (don't cleanup the stack).
-    call    NAME(VBoxGuestOS2IOCtl)
+    call    NAME(vgdrvOS2IOCtl)
 
     ; switch back the stack.
     push    eax
     call    KernThunkStackTo16
     pop     eax
 
-    JMP32TO16 VBoxGuestOS2EP_GenIOCtl_Other_16
+    JMP32TO16 vgdrvOS2EP_GenIOCtl_Other_16
 segment CODE16
-GLOBALNAME VBoxGuestOS2EP_GenIOCtl_Other_16
+GLOBALNAME vgdrvOS2EP_GenIOCtl_Other_16
 
     les     bx, [bp - 4]                            ; Reload the packet pointer.
     or      eax, eax
-    jnz near VBoxGuestOS2EP_GeneralFailure
+    jnz near vgdrvOS2EP_GeneralFailure
 
     ; setup output stuff.
     mov     edx, esp
@@ -554,34 +554,34 @@ GLOBALNAME VBoxGuestOS2EP_GenIOCtl_Other_16
     ;
     ; Less Performance Critical Requests.
     ;
-VBoxGuestOS2EP_NotGenIOCtl:
+vgdrvOS2EP_NotGenIOCtl:
     cmp     byte [es:bx + PKTHDR.cmd], 0dh          ; Open
-    je      VBoxGuestOS2EP_Open
+    je      vgdrvOS2EP_Open
     cmp     byte [es:bx + PKTHDR.cmd], 0eh          ; Close
-    je      VBoxGuestOS2EP_Close
+    je      vgdrvOS2EP_Close
     cmp     byte [es:bx + PKTHDR.cmd], 00h          ; Init
-    je      VBoxGuestOS2EP_Init
+    je      vgdrvOS2EP_Init
 %ifdef DEBUG_READ
     cmp     byte [es:bx + PKTHDR.cmd], 04h          ; Read
-    je near VBoxGuestOS2EP_Read
+    je near vgdrvOS2EP_Read
 %endif
-    jmp near VBoxGuestOS2EP_NotSupported
+    jmp near vgdrvOS2EP_NotSupported
 
 
     ;
     ; Open Request. w/ ring-0 init.
     ;
-VBoxGuestOS2EP_Open:
+vgdrvOS2EP_Open:
     cmp     byte [NAME(g_fInitialized)], 1
-    jne     VBoxGuestOS2EP_OpenOther
+    jne     vgdrvOS2EP_OpenOther
 
     ; First argument, the system file number.
     movzx   eax, word [es:bx + PKTOPEN.sfn]
     push    eax
 
-    JMP16TO32 VBoxGuestOS2EP_Open_32
+    JMP16TO32 vgdrvOS2EP_Open_32
 segment TEXT32
-GLOBALNAME VBoxGuestOS2EP_Open_32
+GLOBALNAME vgdrvOS2EP_Open_32
 
     ; switch stack to 32-bit.
     mov     ax, DATA32 wrt FLAT
@@ -590,49 +590,49 @@ GLOBALNAME VBoxGuestOS2EP_Open_32
     call    KernThunkStackTo32
 
     ; call the C code.
-    call    NAME(VBoxGuestOS2Open)
+    call    NAME(vgdrvOS2Open)
 
     ; switch back the stack.
     push    eax
     call    KernThunkStackTo16
     pop     eax
 
-    JMP32TO16 VBoxGuestOS2EP_Open_16
+    JMP32TO16 vgdrvOS2EP_Open_16
 segment CODE16
-GLOBALNAME VBoxGuestOS2EP_Open_16
+GLOBALNAME vgdrvOS2EP_Open_16
 
     les     bx, [bp - 4]                            ; Reload the packet pointer.
     or      eax, eax
-    jnz near VBoxGuestOS2EP_GeneralFailure
+    jnz near vgdrvOS2EP_GeneralFailure
     mov     word [es:bx + PKTHDR.status], 00100h    ; done, ok.
-    jmp near VBoxGuestOS2EP_Done
+    jmp near vgdrvOS2EP_Done
 
     ; Initializing or failed init?
-VBoxGuestOS2EP_OpenOther:
+vgdrvOS2EP_OpenOther:
     cmp     byte [NAME(g_fInitialized)], 0
-    jne     VBoxGuestOS2EP_OpenFailed
+    jne     vgdrvOS2EP_OpenFailed
 
     mov     byte [NAME(g_fInitialized)], -1
-    call    NAME(VBoxGuestRing0Init)
+    call    NAME(vgdrvRing0Init)
     cmp     byte [NAME(g_fInitialized)], 1
-    je      VBoxGuestOS2EP_Open
+    je      vgdrvOS2EP_Open
 
-VBoxGuestOS2EP_OpenFailed:
+vgdrvOS2EP_OpenFailed:
     mov     word [es:bx + PKTHDR.status], 0810fh    ; error, done, init failed.
-    jmp near VBoxGuestOS2EP_Done
+    jmp near vgdrvOS2EP_Done
 
 
     ;
     ; Close Request.
     ;
-VBoxGuestOS2EP_Close:
+vgdrvOS2EP_Close:
     ; First argument, the system file number.
     movzx   eax, word [es:bx + PKTOPEN.sfn]
     push    eax
 
-    JMP16TO32 VBoxGuestOS2EP_Close_32
+    JMP16TO32 vgdrvOS2EP_Close_32
 segment TEXT32
-GLOBALNAME VBoxGuestOS2EP_Close_32
+GLOBALNAME vgdrvOS2EP_Close_32
 
     ; switch stack to 32-bit.
     mov     ax, DATA32 wrt FLAT
@@ -641,34 +641,34 @@ GLOBALNAME VBoxGuestOS2EP_Close_32
     call    KernThunkStackTo32
 
     ; call the C code.
-    call    NAME(VBoxGuestOS2Close)
+    call    NAME(vgdrvOS2Close)
 
     ; switch back the stack.
     push    eax
     call    KernThunkStackTo16
     pop     eax
 
-    JMP32TO16 VBoxGuestOS2EP_Close_16
+    JMP32TO16 vgdrvOS2EP_Close_16
 segment CODE16
-GLOBALNAME VBoxGuestOS2EP_Close_16
+GLOBALNAME vgdrvOS2EP_Close_16
 
     les     bx, [bp - 4]                            ; Reload the packet pointer.
     or      eax, eax
-    jnz near VBoxGuestOS2EP_GeneralFailure
+    jnz near vgdrvOS2EP_GeneralFailure
     mov     word [es:bx + PKTHDR.status], 00100h    ; done, ok.
-    jmp near VBoxGuestOS2EP_Done
+    jmp near vgdrvOS2EP_Done
 
 
     ;
     ; Init Request.
     ; Find the VMMDev adapter so we can unload the driver (and avoid trouble) if not found.
     ;
-VBoxGuestOS2EP_Init:
-    call    NAME(VBoxGuestFindAdapter)
+vgdrvOS2EP_Init:
+    call    NAME(vgdrvFindAdapter)
     test    ax, ax
     jz      .ok
     mov     word [es:bx + PKTHDR.status], 0810fh    ; error, done, init failed.
-    call    NAME(VBoxGuestOS2InitFlushText)
+    call    NAME(vgdrvOS2InitFlushText)
     jmp     .next
 .ok:
     mov     word [es:bx + PKTHDR.status], 00100h    ; done, ok.
@@ -677,7 +677,7 @@ VBoxGuestOS2EP_Init:
     mov     word [es:bx + PKTINITOUT.cbCode16], NAME(g_InitCodeStart) wrt CODE16
     mov     word [es:bx + PKTINITOUT.cbData16], NAME(g_InitDataStart) wrt DATA16
     mov     dword [es:bx + PKTINITOUT.fpaBPBs], 0
-    jmp near VBoxGuestOS2EP_Done
+    jmp near vgdrvOS2EP_Done
 
 
 %ifdef DEBUG_READ
@@ -685,7 +685,7 @@ VBoxGuestOS2EP_Init:
     ; Read Request.
     ; Return log data.
     ;
-VBoxGuestOS2EP_Read:
+vgdrvOS2EP_Read:
     ; Any log data available?
     xor     dx, dx
     mov     ax, [NAME(g_offLogTail)]
@@ -734,36 +734,36 @@ VBoxGuestOS2EP_Read:
     les     bx, [bp - 4]                            ; Reload the packet pointer.
     mov     word [es:bx + PKTRW.cbTrans], dx
     mov     word [es:bx + PKTHDR.status], 00100h    ; done, ok.
-    jmp near VBoxGuestOS2EP_Done
+    jmp near vgdrvOS2EP_Done
 
 .log_phystovirt_failed:
     les     bx, [bp - 4]                            ; Reload the packet pointer.
-    jmp     VBoxGuestOS2EP_GeneralFailure
+    jmp     vgdrvOS2EP_GeneralFailure
 %endif ; DEBUG_READ
 
 
     ;
     ; Return 'unknown command' error.
     ;
-VBoxGuestOS2EP_NotSupported:
+vgdrvOS2EP_NotSupported:
     mov     word [es:bx + PKTHDR.status], 08103h    ; error, done, unknown command.
-    jmp     VBoxGuestOS2EP_Done
+    jmp     vgdrvOS2EP_Done
 
     ;
     ; Return 'general failure' error.
     ;
-VBoxGuestOS2EP_GeneralFailure:
+vgdrvOS2EP_GeneralFailure:
     mov     word [es:bx + PKTHDR.status], 0810ch    ; error, done, general failure.
-    jmp     VBoxGuestOS2EP_Done
+    jmp     vgdrvOS2EP_Done
 
     ;
     ; Non-optimized return path.
     ;
-VBoxGuestOS2EP_Done:
+vgdrvOS2EP_Done:
     mov     sp, bp
     pop     ebp
     retf
-ENDPROC VBoxGuestOS2EP
+ENDPROC VGDrvOS2Entrypoint
 
 
 ;;
@@ -772,10 +772,10 @@ ENDPROC VBoxGuestOS2EP
 ; This is only used to do the DosOpen on the main driver so we can
 ; do ring-3 init and report failures.
 ;
-GLOBALNAME VBoxGuestOS2InitEP
+GLOBALNAME vgdrvOS2InitEntrypoint
     ; The only request we're servicing is the 'init' one.
     cmp     word [es:bx + PKTHDR.cmd], 0
-    je near NAME(VBoxGuestOS2InitEPServiceInitReq)
+    je near NAME(vgdrvOS2InitEntrypointServiceInitReq)
 
     ; Ok, it's not the init request, just fail it.
     mov     word [es:bx + PKTHDR.status], 08103h    ; error, done, unknown command.
@@ -788,11 +788,11 @@ GLOBALNAME VBoxGuestOS2InitEP
 ; This is only used to setup connection, the returned structure 
 ; will provide the entry points that we'll be using.
 ;
-; @cproto  void far __cdecl VBoxGuestOS2IDC(VBOXGUESTOS2IDCCONNECT far *fpConnectInfo);
+; @cproto  void far __cdecl VGDrvOS2IDC(VBOXGUESTOS2IDCCONNECT far *fpConnectInfo);
 ;
 ; @param   fpConnectInfo   [bp + 8]     Pointer to an VBOXGUESTOS2IDCCONNECT structure.
 ;
-GLOBALNAME VBoxGuestOS2IDC
+GLOBALNAME VGDrvOS2IDC
     push    ebp                         ; bp -  0h
     mov     ebp, esp                    
     ; save everything we might touch.
@@ -804,9 +804,9 @@ GLOBALNAME VBoxGuestOS2IDC
     push    edx                         ; bp - 14h
     and     sp, 0fffch
 
-    JMP16TO32 VBoxGuestOS2IDC_32
+    JMP16TO32 VGDrvOS2IDC_32
 segment TEXT32
-GLOBALNAME VBoxGuestOS2IDC_32
+GLOBALNAME VGDrvOS2IDC_32
 
     ; switch stack to 32-bit.
     mov     ax, DATA32 wrt FLAT
@@ -815,7 +815,7 @@ GLOBALNAME VBoxGuestOS2IDC_32
     call    KernThunkStackTo32
 
     ; call the C code.
-    call    NAME(VBoxGuestOS2IDCConnect)
+    call    NAME(vgdrvOS2IDCConnect)
 
     ;
     ; Load the return buffer address into ds:ebx and setup the buffer.
@@ -827,10 +827,10 @@ GLOBALNAME VBoxGuestOS2IDC_32
 
     mov     dword [ebx + VBGOS2IDC.u32Version       ], VMMDEV_VERSION
     mov     dword [ebx + VBGOS2IDC.u32Session       ], eax
-    mov     dword [ebx + VBGOS2IDC.pfnServiceEP     ], NAME(VBoxGuestOS2IDCService)
-    mov     word  [ebx + VBGOS2IDC.fpfnServiceEP    ], NAME(VBoxGuestOs2IDCService16) wrt CODE16
+    mov     dword [ebx + VBGOS2IDC.pfnServiceEP     ], NAME(VGDrvOS2IDCService)
+    mov     word  [ebx + VBGOS2IDC.fpfnServiceEP    ], NAME(VGDrvOS2IDCService16) wrt CODE16
     mov     word  [ebx + VBGOS2IDC.fpfnServiceEP + 2], CODE16
-    mov     word  [ebx + VBGOS2IDC.fpfnServiceAsmEP ], NAME(VBoxGuestOs2IDCService16Asm) wrt CODE16
+    mov     word  [ebx + VBGOS2IDC.fpfnServiceAsmEP ], NAME(VGDrvOS2IDCService16Asm) wrt CODE16
     mov     word  [ebx + VBGOS2IDC.fpfnServiceAsmEP+2],CODE16
 
     mov     ax, DATA32 wrt FLAT
@@ -839,9 +839,9 @@ GLOBALNAME VBoxGuestOS2IDC_32
     ; switch back the stack.
     call    KernThunkStackTo16
 
-    JMP32TO16 VBoxGuestOS2IDC_16
+    JMP32TO16 VGDrvOS2IDC_16
 segment CODE16
-GLOBALNAME VBoxGuestOS2IDC_16
+GLOBALNAME VGDrvOS2IDC_16
 
     ; restore.
     lea     sp, [bp - 14h]
@@ -853,7 +853,7 @@ GLOBALNAME VBoxGuestOS2IDC_16
     pop     es
     pop     ebp
     retf
-ENDPROC VBoxGuestOS2IDC
+ENDPROC VGDrvOS2IDC
 
 
 ;;
@@ -874,9 +874,9 @@ ENDPROC VBoxGuestOS2IDC
 ; @param   pcbDataReturned     bp + 14h - Where to store the amount of data that's returned.
 ;                                         This can be NULL if pvData is NULL.
 ;
-; @cproto long far __cdecl VBoxGuestOs2IDCService16(uint32_t u32Session, uint16_t iFunction, void far *fpvData, uint16_t cbData, uint16_t far *pcbDataReturned);
+; @cproto long far __cdecl VGDrvOS2IDCService16(uint32_t u32Session, uint16_t iFunction, void far *fpvData, uint16_t cbData, uint16_t far *pcbDataReturned);
 ;
-GLOBALNAME VBoxGuestOs2IDCService16
+GLOBALNAME VGDrvOS2IDCService16
     push    ebp                         ; bp -  0h
     mov     ebp, esp                    
     push    es                          ; bp -  2h
@@ -907,7 +907,7 @@ GLOBALNAME VBoxGuestOs2IDCService16
     movzx   esi, word [bp + 0eh]        ; offset
     mov     dl, DevHlp_VirtToLin
     call far [NAME(g_fpfnDevHlp)]
-    jc near VBoxGuestOs2IDCService16_InvalidPointer
+    jc near VGDrvOS2IDCService16_InvalidPointer
     jmp     .finish_data
 .no_data:
     xor     eax, eax
@@ -918,9 +918,9 @@ GLOBALNAME VBoxGuestOs2IDCService16
     mov     ecx, [bp + 08h]               
     push    ecx                         ; esp + 00h:    u32Session
 
-    JMP16TO32 VBoxGuestOs2IDCService16_32
+    JMP16TO32 VGDrvOS2IDCService16_32
 segment TEXT32
-GLOBALNAME VBoxGuestOs2IDCService16_32
+GLOBALNAME VGDrvOS2IDCService16_32
 
     ; switch stack to 32-bit.
     mov     ax, DATA32 wrt FLAT
@@ -933,16 +933,16 @@ GLOBALNAME VBoxGuestOs2IDCService16_32
     mov     [esp + 14h], eax
 
     ; call the C code (don't cleanup the stack).
-    call    NAME(VBoxGuestOS2IDCService)
+    call    NAME(VGDrvOS2IDCService)
 
     ; switch back the stack.
     push    eax
     call    KernThunkStackTo16
     pop     eax
 
-    JMP32TO16 VBoxGuestOs2IDCService16_16
+    JMP32TO16 VGDrvOS2IDCService16_16
 segment CODE16
-GLOBALNAME VBoxGuestOs2IDCService16_16
+GLOBALNAME VGDrvOS2IDCService16_16
 
     ; Set *pcbDataReturned.
     cmp     word [bp + 14h + 2], 3
@@ -954,7 +954,7 @@ GLOBALNAME VBoxGuestOs2IDCService16_16
     xchg    dx, bx
 .no_pcbDataReturned:
 
-VBoxGuestOs2IDCService16_Done:
+VGDrvOS2IDCService16_Done:
     lea     sp, [bp - 10h]
     pop     esi
     pop     edx
@@ -964,16 +964,16 @@ VBoxGuestOs2IDCService16_Done:
     pop     ebp
     retf
 
-VBoxGuestOs2IDCService16_InvalidPointer:
+VGDrvOS2IDCService16_InvalidPointer:
     mov     ax, VERR_INVALID_POINTER
-    jmp     VBoxGuestOs2IDCService16_Done
-ENDPROC VBoxGuestOs2IDCService16
+    jmp     VGDrvOS2IDCService16_Done
+ENDPROC VGDrvOS2IDCService16
 
 
 ;;
 ; The 16-bit IDC entry point, register based.
 ;
-; This is just a wrapper around VBoxGuestOs2IDCService16 to simplify
+; This is just a wrapper around VGDrvOS2IDCService16 to simplify
 ; calls from 16-bit assembly code.
 ;
 ; @returns ax: VBox status code; cx: The amount of data returned.
@@ -983,7 +983,7 @@ ENDPROC VBoxGuestOs2IDCService16
 ; @param   pvData              es:bx - The input/output data buffer.
 ; @param   cbData              cx    - The size of the data buffer.
 ;
-GLOBALNAME VBoxGuestOs2IDCService16Asm
+GLOBALNAME VGDrvOS2IDCService16Asm
     push    ebp                         ; bp - 0h
     mov     ebp, esp
     push    edx                         ; bp - 4h
@@ -1004,7 +1004,7 @@ GLOBALNAME VBoxGuestOs2IDCService16Asm
     mov     [bp - 13h], byte 0
     mov     [bp - 18h], eax             ; bp - 18h (dd): u32Session
 
-    call    NAME(VBoxGuestOs2IDCService16)
+    call    NAME(VGDrvOS2IDCService16)
 
     mov     cx, [bp - 08h]              ; cbDataReturned.
 
@@ -1012,7 +1012,7 @@ GLOBALNAME VBoxGuestOs2IDCService16Asm
     mov     esp, ebp
     pop     ebp
     retf
-ENDPROC VBoxGuestOs2IDCService16Asm
+ENDPROC VGDrvOS2IDCService16Asm
 
 
 
@@ -1026,7 +1026,7 @@ ENDPROC VBoxGuestOs2IDCService16Asm
 ; @returns  CF=0 if it's our interrupt, CF=1 it it isn't.
 ;
 ;
-GLOBALNAME VBoxGuestOS2ISR16
+GLOBALNAME vgdrvOS2ISR16
     push    ebp
     mov     ebp, esp
     pushf                               ; bp - 02h
@@ -1042,9 +1042,9 @@ GLOBALNAME VBoxGuestOS2ISR16
 
     and     sp, 0fff0h                  ; align the stack (16-bytes make GCC extremely happy).
 
-    JMP16TO32 VBoxGuestOS2ISR16_32
+    JMP16TO32 vgdrvOS2ISR16_32
 segment TEXT32
-GLOBALNAME VBoxGuestOS2ISR16_32
+GLOBALNAME vgdrvOS2ISR16_32
 
     mov     ax, DATA32 wrt FLAT
     mov     ds, ax
@@ -1052,14 +1052,14 @@ GLOBALNAME VBoxGuestOS2ISR16_32
 
     call    KernThunkStackTo32
 
-    call    NAME(VBoxGuestOS2ISR)
+    call    NAME(vgdrvOS2ISR)
     mov     ebx, eax
 
     call    KernThunkStackTo16
 
-    JMP32TO16 VBoxGuestOS2ISR16_16
+    JMP32TO16 vgdrvOS2ISR16_16
 segment CODE16
-GLOBALNAME VBoxGuestOS2ISR16_16
+GLOBALNAME vgdrvOS2ISR16_16
 
     lea     sp, [bp - 1eh]
     pop     edi
@@ -1092,7 +1092,7 @@ GLOBALNAME VBoxGuestOS2ISR16_16
     pop     ebp
     clc
     retf
-ENDPROC VBoxGuestOS2ISR16
+ENDPROC vgdrvOS2ISR16
 
 
 
@@ -1109,7 +1109,7 @@ segment TEXT32
 ; @returns  0 on success, some non-zero OS/2 error code on failure.
 ; @param    bIrq        [ebp + 8]       The IRQ number. (uint8_t)
 ;
-GLOBALNAME VBoxGuestOS2SetIRQ
+GLOBALNAME vgdrvOS2DevHlpSetIRQ
     push    ebp
     mov     ebp, esp
     push    ebx
@@ -1119,13 +1119,13 @@ GLOBALNAME VBoxGuestOS2SetIRQ
 
     movzx   ebx, byte [ebp + 8]         ; load bIrq into BX.
 
-    JMP32TO16 VBoxGuestOS2SetIRQ_16
+    JMP32TO16 vgdrvOS2DevHlpSetIRQ_16
 segment CODE16
-GLOBALNAME VBoxGuestOS2SetIRQ_16
+GLOBALNAME vgdrvOS2DevHlpSetIRQ_16
 
     mov     ax, DATA16                  ; for g_fpfnDevHlp.
     mov     ds, ax
-    mov     ax, NAME(VBoxGuestOS2ISR16) ; The devhlp assume it's relative to DS.
+    mov     ax, NAME(vgdrvOS2ISR16)     ; The devhlp assume it's relative to DS.
     mov     dh, 1                       ; 1 = shared
     mov     dl, DevHlp_SetIRQ
     call far [NAME(g_fpfnDevHlp)]
@@ -1139,9 +1139,9 @@ GLOBALNAME VBoxGuestOS2SetIRQ_16
     xor     eax, eax
 
 .go_back:
-    JMP16TO32 VBoxGuestOS2SetIRQ_32
+    JMP16TO32 vgdrvOS2DevHlpSetIRQ_32
 segment TEXT32
-GLOBALNAME VBoxGuestOS2SetIRQ_32
+GLOBALNAME vgdrvOS2DevHlpSetIRQ_32
 
     pop     ds                          ; KernThunkStackTo32 ASSUMES flat DS and ES.
 
@@ -1152,7 +1152,7 @@ GLOBALNAME VBoxGuestOS2SetIRQ_32
     pop     ebx
     pop     ebp
     ret
-ENDPROC VBoxGuestOS2SetIRQ
+ENDPROC vgdrvOS2DevHlpSetIRQ
 
 
 
@@ -1178,7 +1178,7 @@ int3
 ;;
 ; The Ring-3 init code.
 ;
-BEGINPROC VBoxGuestOS2InitEPServiceInitReq
+BEGINPROC vgdrvOS2InitEntrypointServiceInitReq
     push    ebp
     mov     ebp, esp
     push    es                                      ; bp - 2
@@ -1226,7 +1226,7 @@ BEGINPROC VBoxGuestOS2InitEPServiceInitReq
     call far DOS16OPEN
 
     push    ax                                      ; Quickly flush any text.
-    call    NAME(VBoxGuestOS2InitFlushText)
+    call    NAME(vgdrvOS2InitFlushText)
     pop     ax
 
     or      ax, ax
@@ -1274,13 +1274,13 @@ BEGINPROC VBoxGuestOS2InitEPServiceInitReq
     mov     sp, bp
     pop     ebp
     retf
-ENDPROC VBoxGuestOS2InitEPServiceInitReq
+ENDPROC vgdrvOS2InitEntrypointServiceInitReq
 
 
 ;;
 ; The Ring-0 init code.
 ;
-BEGINPROC VBoxGuestRing0Init
+BEGINPROC vgdrvRing0Init
     push    es
     push    esi
     push    ebp
@@ -1294,8 +1294,8 @@ BEGINPROC VBoxGuestRing0Init
     mov     ax, [g_fpszArgs + 2]                    ; selector
     mov     dl, DevHlp_VirtToLin
     call far [NAME(g_fpfnDevHlp)]
-    jc near VBoxGuestRing0Init_done                 ; eax is non-zero on failure (can't happen)
-    push    eax                                     ; 00h - pszArgs (for VBoxGuestOS2Init).
+    jc near vgdrvRing0Init_done                     ; eax is non-zero on failure (can't happen)
+    push    eax                                     ; 00h - pszArgs (for vgdrvOS2Init).
 
     ;
     ; Do 16-bit init?
@@ -1305,9 +1305,9 @@ BEGINPROC VBoxGuestRing0Init
     ;
     ; Do 32-bit init
     ;
-    JMP16TO32 VBoxGuestRing0Init_32
+    JMP16TO32 vgdrvRing0Init_32
 segment TEXT32
-GLOBALNAME VBoxGuestRing0Init_32
+GLOBALNAME vgdrvRing0Init_32
 
     ; switch stack to 32-bit.
     mov     ax, DATA32 wrt FLAT
@@ -1316,7 +1316,7 @@ GLOBALNAME VBoxGuestRing0Init_32
     call    KernThunkStackTo32
 
     ; call the C code.
-    call    NAME(VBoxGuestOS2Init)
+    call    NAME(vgdrvOS2Init)
 
     ; switch back the stack and reload ds.
     push    eax
@@ -1326,28 +1326,28 @@ GLOBALNAME VBoxGuestRing0Init_32
     mov     dx, seg NAME(g_fInitialized)
     mov     ds, dx
 
-    JMP32TO16 VBoxGuestRing0Init_16
+    JMP32TO16 vgdrvRing0Init_16
 segment CODE16_INIT
-GLOBALNAME VBoxGuestRing0Init_16
+GLOBALNAME vgdrvRing0Init_16
 
     ; check the result and set g_fInitialized on success.
     or      eax, eax
-    jnz     VBoxGuestRing0Init_done
+    jnz     vgdrvRing0Init_done
     mov     byte [NAME(g_fInitialized)], 1
 
-VBoxGuestRing0Init_done:
+vgdrvRing0Init_done:
     mov     sp, bp
     pop     ebp
     pop     esi
     pop     es
     ret
-ENDPROC VBoxGuestRing0Init
+ENDPROC vgdrvRing0Init
 
 
 ;;
 ; Flush any text in the text buffer.
 ;
-BEGINPROC VBoxGuestOS2InitFlushText
+BEGINPROC vgdrvOS2InitFlushText
     push    bp
     mov     bp, sp
 
@@ -1406,7 +1406,7 @@ BEGINPROC VBoxGuestOS2InitFlushText
     mov     sp, bp
     pop     bp
     ret
-ENDPROC VBoxGuestOS2InitFlushText
+ENDPROC vgdrvOS2InitFlushText
 
 
 ;; The device name for DosOpen.
@@ -1426,7 +1426,7 @@ g_szOemHlpDevName:
 ; @remark   ASSUMES DS:DATA16.
 ; @uses     nothing.
 ;
-BEGINPROC VBoxGuestFindAdapter
+BEGINPROC vgdrvFindAdapter
     push    ebx
     push    ecx
     push    edx
@@ -1600,7 +1600,7 @@ BEGINPROC VBoxGuestFindAdapter
     jnz     .bitch
 
     ;
-    ; Return to VBoxGuestOS2EP_Init.
+    ; Return to vgdrvOS2EP_Init.
     ;
 .done:
     mov     esp, ebp
@@ -1646,7 +1646,7 @@ BEGINPROC VBoxGuestFindAdapter
 
     ;
     ; Nested function which reads a PCI config register.
-    ; (This operates on the VBoxGuestFindAdapter stack frame.)
+    ; (This operates on the vgdrvFindAdapter stack frame.)
     ;
     ; Input:
     ;   al - register to read
@@ -1678,7 +1678,7 @@ BEGINPROC VBoxGuestFindAdapter
 
     ret
 
-ENDPROC VBoxGuestFindAdapter
+ENDPROC vgdrvFindAdapter
 
 
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuestIDC-unix.c.h b/src/VBox/Additions/common/VBoxGuest/VBoxGuestIDC-unix.c.h
index f6bac0f..2d2819a 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuestIDC-unix.c.h
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuestIDC-unix.c.h
@@ -1,4 +1,4 @@
-/* $Rev: 98751 $ */
+/* $Rev: 103598 $ */
 /** @file
  * VBoxGuest - Inter Driver Communication, unix implementation.
  *
@@ -68,7 +68,7 @@ DECLEXPORT(void *) VBOXCALL VBoxGuestIDCOpen(uint32_t *pu32Version)
     mutex_exit(&g_LdiMtx);
 #endif
 
-    rc = VbgdCommonCreateKernelSession(&g_DevExt, &pSession);
+    rc = VGDrvCommonCreateKernelSession(&g_DevExt, &pSession);
     if (RT_SUCCESS(rc))
     {
         *pu32Version = VMMDEV_VERSION;
@@ -88,7 +88,7 @@ DECLEXPORT(void *) VBOXCALL VBoxGuestIDCOpen(uint32_t *pu32Version)
     mutex_exit(&g_LdiMtx);
 #endif
 
-    LogRel(("VBoxGuestIDCOpen: VbgdCommonCreateKernelSession failed. rc=%d\n", rc));
+    LogRel(("VBoxGuestIDCOpen: VGDrvCommonCreateKernelSession failed. rc=%d\n", rc));
     return NULL;
 }
 
@@ -97,15 +97,15 @@ DECLEXPORT(void *) VBOXCALL VBoxGuestIDCOpen(uint32_t *pu32Version)
  * Close an IDC connection.
  *
  * @returns VBox error code.
- * @param   pvState             Opaque pointer to the session object.
+ * @param   pvSession           Opaque pointer to the session object.
  */
 DECLEXPORT(int) VBOXCALL VBoxGuestIDCClose(void *pvSession)
 {
     PVBOXGUESTSESSION pSession = (PVBOXGUESTSESSION)pvSession;
-    LogFlow(("VBoxGuestIDCClose:\n"));
+    LogFlow(("VBoxGuestIDCClose: pvSession=%p\n", pvSession));
 
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
-    VbgdCommonCloseSession(&g_DevExt, pSession);
+    VGDrvCommonCloseSession(&g_DevExt, pSession);
 
 #ifdef RT_OS_SOLARIS
     mutex_enter(&g_LdiMtx);
@@ -140,9 +140,8 @@ DECLEXPORT(int) VBOXCALL VBoxGuestIDCCall(void *pvSession, unsigned iCmd, void *
     LogFlow(("VBoxGuestIDCCall: %pvSession=%p Cmd=%u pvData=%p cbData=%d\n", pvSession, iCmd, pvData, cbData));
 
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
-    AssertMsgReturn(pSession->pDevExt == &g_DevExt,
-                    ("SC: %p != %p\n", pSession->pDevExt, &g_DevExt), VERR_INVALID_HANDLE);
+    AssertMsgReturn(pSession->pDevExt == &g_DevExt, ("SC: %p != %p\n", pSession->pDevExt, &g_DevExt), VERR_INVALID_HANDLE);
 
-    return VbgdCommonIoCtl(iCmd, &g_DevExt, pSession, pvData, cbData, pcbDataReturned);
+    return VGDrvCommonIoCtl(iCmd, &g_DevExt, pSession, pvData, cbData, pcbDataReturned);
 }
 
diff --git a/src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h b/src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h
index 0d43f38..bdbfb5a 100644
--- a/src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h
+++ b/src/VBox/Additions/common/VBoxGuest/VBoxGuestInternal.h
@@ -1,6 +1,6 @@
 /* $Id: VBoxGuestInternal.h $ */
 /** @file
- * VBoxGuest - Guest Additions Driver.
+ * VBoxGuest - Guest Additions Driver, Internal Header.
  */
 
 /*
@@ -36,7 +36,7 @@
 #include <VBox/VBoxGuest.h>
 #include <VBox/VBoxGuestLib.h>
 
-/** @def VBOXGUEST_USE_WAKE_UP_LIST
+/** @def VBOXGUEST_USE_DEFERRED_WAKE_UP
  * Defer wake-up of waiting thread when defined. */
 #if defined(RT_OS_DARWIN) || defined(RT_OS_SOLARIS) || defined(RT_OS_WINDOWS) || defined(DOXYGEN_RUNNING)
 # define VBOXGUEST_USE_DEFERRED_WAKE_UP
@@ -64,11 +64,11 @@ typedef struct VBOXGUESTWAIT
     /** The events we received. */
     uint32_t volatile           fResEvents;
 #ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP
-    /** Set by VbgdCommonWaitDoWakeUps before leaving the spinlock to call
+    /** Set by VGDrvCommonWaitDoWakeUps before leaving the spinlock to call
      *  RTSemEventMultiSignal. */
     bool volatile               fPendingWakeUp;
     /** Set by the requestor thread if it got the spinlock before the
-     * signaller.  Deals with the race in VbgdCommonWaitDoWakeUps. */
+     * signaller.  Deals with the race in VGDrvCommonWaitDoWakeUps. */
     bool volatile               fFreeMe;
 #endif
     /** The event semaphore. */
@@ -87,7 +87,7 @@ typedef struct VBOXGUESTWAIT
  */
 typedef struct VBOXGUESTMEMBALLOON
 {
-    /** Mutex protecting the members below from concurrent access.. */
+    /** Mutex protecting the members below from concurrent access. */
     RTSEMFASTMUTEX              hMtx;
     /** The current number of chunks in the balloon. */
     uint32_t                    cChunks;
@@ -313,22 +313,22 @@ typedef struct VBOXGUESTSESSION
 
 RT_C_DECLS_BEGIN
 
-int  VbgdCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase, void *pvMMIOBase, uint32_t cbMMIO,
-                          VBOXOSTYPE enmOSType, uint32_t fEvents);
-bool VbgdCommonISR(PVBOXGUESTDEVEXT pDevExt);
-void VbgdCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt);
-int  VbgdCommonReinitDevExtAfterHibernation(PVBOXGUESTDEVEXT pDevExt, VBOXOSTYPE enmOSType);
+int  VGDrvCommonInitDevExt(PVBOXGUESTDEVEXT pDevExt, uint16_t IOPortBase, void *pvMMIOBase, uint32_t cbMMIO,
+                           VBOXOSTYPE enmOSType, uint32_t fEvents);
+bool VGDrvCommonISR(PVBOXGUESTDEVEXT pDevExt);
+void VGDrvCommonDeleteDevExt(PVBOXGUESTDEVEXT pDevExt);
+int  VGDrvCommonReinitDevExtAfterHibernation(PVBOXGUESTDEVEXT pDevExt, VBOXOSTYPE enmOSType);
 #ifdef VBOXGUEST_USE_DEFERRED_WAKE_UP
-void VbgdCommonWaitDoWakeUps(PVBOXGUESTDEVEXT pDevExt);
+void VGDrvCommonWaitDoWakeUps(PVBOXGUESTDEVEXT pDevExt);
 #endif
 
-int  VbgdCommonCreateUserSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession);
-int  VbgdCommonCreateKernelSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession);
-void VbgdCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
+int  VGDrvCommonCreateUserSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession);
+int  VGDrvCommonCreateKernelSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION *ppSession);
+void VGDrvCommonCloseSession(PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
 
-int  VbgdCommonIoCtlFast(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
-int  VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
-                     void *pvData, size_t cbData, size_t *pcbDataReturned);
+int  VGDrvCommonIoCtlFast(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession);
+int  VGDrvCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSESSION pSession,
+                      void *pvData, size_t cbData, size_t *pcbDataReturned);
 
 /**
  * ISR callback for notifying threads polling for mouse events.
@@ -338,11 +338,11 @@ int  VbgdCommonIoCtl(unsigned iFunction, PVBOXGUESTDEVEXT pDevExt, PVBOXGUESTSES
  *
  * @param   pDevExt     The device extension.
  */
-void VbgdNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt);
+void VGDrvNativeISRMousePollEvent(PVBOXGUESTDEVEXT pDevExt);
 
 
 #ifdef VBOX_WITH_DPC_LATENCY_CHECKER
-int VbgdNtIOCtl_DpcLatencyChecker(void);
+int VGDrvNtIOCtl_DpcLatencyChecker(void);
 #endif
 
 RT_C_DECLS_END
diff --git a/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest b/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest
index cfdc546..d9400db 100755
--- a/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest
+++ b/src/VBox/Additions/common/VBoxGuest/freebsd/files_vboxguest
@@ -32,6 +32,7 @@ FILES_VBOXGUEST_NOBIN=" \
     ${PATH_ROOT}/include/iprt/heap.h=>include/iprt/heap.h \
     ${PATH_ROOT}/include/iprt/handletable.h=>include/iprt/handletable.h \
     ${PATH_ROOT}/include/iprt/initterm.h=>include/iprt/initterm.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/list.h=>include/iprt/list.h \
     ${PATH_ROOT}/include/iprt/lockvalidator.h=>include/iprt/lockvalidator.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
@@ -51,6 +52,7 @@ FILES_VBOXGUEST_NOBIN=" \
     ${PATH_ROOT}/include/iprt/time.h=>include/iprt/time.h \
     ${PATH_ROOT}/include/iprt/timer.h=>include/iprt/timer.h \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/iprt/uuid.h=>include/iprt/uuid.h \
     ${PATH_ROOT}/include/iprt/crc.h=>include/iprt/crc.h \
     ${PATH_ROOT}/include/iprt/net.h=>include/iprt/net.h \
diff --git a/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest b/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest
index 4a4649d..639e6a7 100755
--- a/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest
+++ b/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest
@@ -32,6 +32,7 @@ FILES_VBOXGUEST_NOBIN=" \
     ${PATH_ROOT}/include/iprt/errno.h=>include/iprt/errno.h \
     ${PATH_ROOT}/include/iprt/heap.h=>include/iprt/heap.h \
     ${PATH_ROOT}/include/iprt/initterm.h=>include/iprt/initterm.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/list.h=>include/iprt/list.h \
     ${PATH_ROOT}/include/iprt/lockvalidator.h=>include/iprt/lockvalidator.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
@@ -54,6 +55,7 @@ FILES_VBOXGUEST_NOBIN=" \
     ${PATH_ROOT}/include/iprt/timer.h=>include/iprt/timer.h \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
     ${PATH_ROOT}/include/iprt/uni.h=>include/iprt/uni.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/iprt/x86.h=>include/iprt/x86.h \
     ${PATH_ROOT}/include/VBox/cdefs.h=>include/VBox/cdefs.h \
     ${PATH_ROOT}/include/VBox/err.h=>include/VBox/err.h \
diff --git a/src/VBox/Additions/common/VBoxGuestLib/GenericRequest.cpp b/src/VBox/Additions/common/VBoxGuestLib/GenericRequest.cpp
index cc9b3bb..72359ed 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/GenericRequest.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/GenericRequest.cpp
@@ -30,17 +30,18 @@
 #include <iprt/assert.h>
 #include <iprt/string.h>
 
-DECLVBGL(int) VbglGRVerify (const VMMDevRequestHeader *pReq, size_t cbReq)
+
+DECLVBGL(int) VbglGRVerify(const VMMDevRequestHeader *pReq, size_t cbReq)
 {
     size_t cbReqExpected;
 
-    if (!pReq || cbReq < sizeof (VMMDevRequestHeader))
+    if (RT_UNLIKELY(!pReq || cbReq < sizeof(VMMDevRequestHeader)))
     {
         dprintf(("VbglGRVerify: Invalid parameter: pReq = %p, cbReq = %zu\n", pReq, cbReq));
         return VERR_INVALID_PARAMETER;
     }
 
-    if (pReq->size > cbReq)
+    if (RT_UNLIKELY(pReq->size > cbReq))
     {
         dprintf(("VbglGRVerify: request size %u > buffer size %zu\n", pReq->size, cbReq));
         return VERR_INVALID_PARAMETER;
@@ -48,8 +49,7 @@ DECLVBGL(int) VbglGRVerify (const VMMDevRequestHeader *pReq, size_t cbReq)
 
     /* The request size must correspond to the request type. */
     cbReqExpected = vmmdevGetRequestSize(pReq->requestType);
-
-    if (cbReq < cbReqExpected)
+    if (RT_UNLIKELY(cbReq < cbReqExpected))
     {
         dprintf(("VbglGRVerify: buffer size %zu < expected size %zu\n", cbReq, cbReqExpected));
         return VERR_INVALID_PARAMETER;
@@ -57,10 +57,11 @@ DECLVBGL(int) VbglGRVerify (const VMMDevRequestHeader *pReq, size_t cbReq)
 
     if (cbReqExpected == cbReq)
     {
-        /* This is most likely a fixed size request, and in this case the request size
-         * must be also equal to the expected size.
+        /*
+         * This is most likely a fixed size request, and in this case the
+         * request size must be also equal to the expected size.
          */
-        if (pReq->size != cbReqExpected)
+        if (RT_UNLIKELY(pReq->size != cbReqExpected))
         {
             dprintf(("VbglGRVerify: request size %u != expected size %zu\n", pReq->size, cbReqExpected));
             return VERR_INVALID_PARAMETER;
@@ -81,99 +82,89 @@ DECLVBGL(int) VbglGRVerify (const VMMDevRequestHeader *pReq, size_t cbReq)
         || pReq->requestType == VMMDevReq_HGCMCall64
 #else
         || pReq->requestType == VMMDevReq_HGCMCall
-#endif /* VBOX_WITH_64_BITS_GUESTS */
+#endif
         || pReq->requestType == VMMDevReq_RegisterSharedModule
         || pReq->requestType == VMMDevReq_ReportGuestUserState
         || pReq->requestType == VMMDevReq_LogString
         || pReq->requestType == VMMDevReq_SetPointerShape
         || pReq->requestType == VMMDevReq_VideoSetVisibleRegion)
     {
-        if (cbReq > VMMDEV_MAX_VMMDEVREQ_SIZE)
+        if (RT_UNLIKELY(cbReq > VMMDEV_MAX_VMMDEVREQ_SIZE))
         {
             dprintf(("VbglGRVerify: VMMDevReq_LogString: buffer size %zu too big\n", cbReq));
-            return VERR_BUFFER_OVERFLOW; /* @todo is this error code ok? */
+            return VERR_BUFFER_OVERFLOW; /** @todo is this error code ok? */
         }
     }
     else
     {
         dprintf(("VbglGRVerify: request size %u > buffer size %zu\n", pReq->size, cbReq));
-        return VERR_IO_BAD_LENGTH; /* @todo is this error code ok? */
+        return VERR_IO_BAD_LENGTH; /** @todo is this error code ok? */
     }
 
     return VINF_SUCCESS;
 }
 
-DECLVBGL(int) VbglGRAlloc (VMMDevRequestHeader **ppReq, uint32_t cbSize, VMMDevRequestType reqType)
+DECLVBGL(int) VbglGRAlloc(VMMDevRequestHeader **ppReq, size_t cbReq, VMMDevRequestType enmReqType)
 {
-    VMMDevRequestHeader *pReq;
-    int rc = vbglR0Enter ();
-
-    if (RT_FAILURE(rc))
-        return rc;
-
-    if (!ppReq || cbSize < sizeof (VMMDevRequestHeader))
-    {
-        dprintf(("VbglGRAlloc: Invalid parameter: ppReq = %p, cbSize = %u\n", ppReq, cbSize));
-        return VERR_INVALID_PARAMETER;
-    }
-
-    pReq = (VMMDevRequestHeader *)VbglPhysHeapAlloc (cbSize);
-    if (!pReq)
+    int rc = vbglR0Enter();
+    if (RT_SUCCESS(rc))
     {
-        AssertMsgFailed(("VbglGRAlloc: no memory\n"));
-        rc = VERR_NO_MEMORY;
-    }
-    else
-    {
-        memset(pReq, 0xAA, cbSize);
-
-        pReq->size        = cbSize;
-        pReq->version     = VMMDEV_REQUEST_HEADER_VERSION;
-        pReq->requestType = reqType;
-        pReq->rc          = VERR_GENERAL_FAILURE;
-        pReq->reserved1   = 0;
-        pReq->reserved2   = 0;
-
-        *ppReq = pReq;
+        if (   ppReq
+            && cbReq >= sizeof(VMMDevRequestHeader)
+            && cbReq == (uint32_t)cbReq)
+        {
+            VMMDevRequestHeader *pReq = (VMMDevRequestHeader *)VbglPhysHeapAlloc((uint32_t)cbReq);
+            AssertMsgReturn(pReq, ("VbglGRAlloc: no memory (cbReq=%u)\n", cbReq), VERR_NO_MEMORY);
+            memset(pReq, 0xAA, cbReq);
+
+            pReq->size        = (uint32_t)cbReq;
+            pReq->version     = VMMDEV_REQUEST_HEADER_VERSION;
+            pReq->requestType = enmReqType;
+            pReq->rc          = VERR_GENERAL_FAILURE;
+            pReq->reserved1   = 0;
+            pReq->reserved2   = 0;
+
+            *ppReq = pReq;
+            rc = VINF_SUCCESS;
+        }
+        else
+        {
+            dprintf(("VbglGRAlloc: Invalid parameter: ppReq=%p cbReq=%u\n", ppReq, cbReq));
+            rc = VERR_INVALID_PARAMETER;
+        }
     }
-
     return rc;
 }
 
-DECLVBGL(int) VbglGRPerform (VMMDevRequestHeader *pReq)
+DECLVBGL(int) VbglGRPerform(VMMDevRequestHeader *pReq)
 {
-    RTCCPHYS physaddr;
-    int rc = vbglR0Enter ();
-
-    if (RT_FAILURE(rc))
-        return rc;
-
-    if (!pReq)
-        return VERR_INVALID_PARAMETER;
-
-    physaddr = VbglPhysHeapGetPhysAddr (pReq);
-    if (  !physaddr
-       || (physaddr >> 32) != 0) /* Port IO is 32 bit. */
+    int rc = vbglR0Enter();
+    if (RT_SUCCESS(rc))
     {
-        rc = VERR_VBGL_INVALID_ADDR;
-    }
-    else
-    {
-        ASMOutU32(g_vbgldata.portVMMDev + VMMDEV_PORT_OFF_REQUEST, (uint32_t)physaddr);
-        /* Make the compiler aware that the host has changed memory. */
-        ASMCompilerBarrier();
-        rc = pReq->rc;
+        if (pReq)
+        {
+            RTCCPHYS PhysAddr = VbglPhysHeapGetPhysAddr(pReq);
+            if (   PhysAddr != 0
+                && PhysAddr < _4G) /* Port IO is 32 bit. */
+            {
+                ASMOutU32(g_vbgldata.portVMMDev + VMMDEV_PORT_OFF_REQUEST, (uint32_t)PhysAddr);
+                /* Make the compiler aware that the host has changed memory. */
+                ASMCompilerBarrier();
+                rc = pReq->rc;
+            }
+            else
+                rc = VERR_VBGL_INVALID_ADDR;
+        }
+        else
+            rc = VERR_INVALID_PARAMETER;
     }
     return rc;
 }
 
-DECLVBGL(void) VbglGRFree (VMMDevRequestHeader *pReq)
+DECLVBGL(void) VbglGRFree(VMMDevRequestHeader *pReq)
 {
-    int rc = vbglR0Enter ();
-
-    if (RT_FAILURE(rc))
-        return;
-
-    VbglPhysHeapFree (pReq);
+    int rc = vbglR0Enter();
+    if (RT_SUCCESS(rc))
+        VbglPhysHeapFree(pReq);
 }
 
diff --git a/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp b/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp
index fad53ff..4638758 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp
@@ -36,14 +36,14 @@
 #include <iprt/semaphore.h>
 #include <iprt/string.h>
 
-#define VBGL_HGCM_ASSERTMsg AssertReleaseMsg
+#define VBGL_HGCM_ASSERT_MSG AssertReleaseMsg
 
 /**
  * Initializes the HGCM VBGL bits.
  *
  * @return VBox status code.
  */
-int vbglR0HGCMInit (void)
+int vbglR0HGCMInit(void)
 {
     return RTSemFastMutexCreate(&g_vbgldata.mutexHGCMHandle);
 }
@@ -53,7 +53,7 @@ int vbglR0HGCMInit (void)
  *
  * @return VBox status code.
  */
-int vbglR0HGCMTerminate (void)
+int vbglR0HGCMTerminate(void)
 {
     RTSemFastMutexDestroy(g_vbgldata.mutexHGCMHandle);
     g_vbgldata.mutexHGCMHandle = NIL_RTSEMFASTMUTEX;
@@ -61,161 +61,134 @@ int vbglR0HGCMTerminate (void)
     return VINF_SUCCESS;
 }
 
-DECLINLINE(int) vbglHandleHeapEnter (void)
+DECLINLINE(int) vbglHandleHeapEnter(void)
 {
     int rc = RTSemFastMutexRequest(g_vbgldata.mutexHGCMHandle);
 
-    VBGL_HGCM_ASSERTMsg(RT_SUCCESS(rc),
-                        ("Failed to request handle heap mutex, rc = %Rrc\n", rc));
+    VBGL_HGCM_ASSERT_MSG(RT_SUCCESS(rc), ("Failed to request handle heap mutex, rc = %Rrc\n", rc));
 
     return rc;
 }
 
-DECLINLINE(void) vbglHandleHeapLeave (void)
+DECLINLINE(void) vbglHandleHeapLeave(void)
 {
     RTSemFastMutexRelease(g_vbgldata.mutexHGCMHandle);
 }
 
-struct VBGLHGCMHANDLEDATA *vbglHGCMHandleAlloc (void)
+struct VBGLHGCMHANDLEDATA *vbglHGCMHandleAlloc(void)
 {
-    struct VBGLHGCMHANDLEDATA *p;
-    int rc = vbglHandleHeapEnter ();
-    uint32_t i;
-
-    if (RT_FAILURE (rc))
-        return NULL;
-
-    p = NULL;
-
-    /** Simple linear search in array. This will be called not so often, only connect/disconnect.
-     * @todo bitmap for faster search and other obvious optimizations.
-     */
-
-    for (i = 0; i < RT_ELEMENTS(g_vbgldata.aHGCMHandleData); i++)
+    struct VBGLHGCMHANDLEDATA *p = NULL;
+    int rc = vbglHandleHeapEnter();
+    if (RT_SUCCESS(rc))
     {
-        if (!g_vbgldata.aHGCMHandleData[i].fAllocated)
+        uint32_t i;
+
+        /* Simple linear search in array. This will be called not so often, only connect/disconnect. */
+        /** @todo bitmap for faster search and other obvious optimizations. */
+        for (i = 0; i < RT_ELEMENTS(g_vbgldata.aHGCMHandleData); i++)
         {
-            p = &g_vbgldata.aHGCMHandleData[i];
-            p->fAllocated = 1;
-            break;
+            if (!g_vbgldata.aHGCMHandleData[i].fAllocated)
+            {
+                p = &g_vbgldata.aHGCMHandleData[i];
+                p->fAllocated = 1;
+                break;
+            }
         }
-    }
 
-    vbglHandleHeapLeave ();
-
-    VBGL_HGCM_ASSERTMsg(p != NULL,
-                        ("Not enough HGCM handles.\n"));
+        vbglHandleHeapLeave();
 
+        VBGL_HGCM_ASSERT_MSG(p != NULL, ("Not enough HGCM handles.\n"));
+    }
     return p;
 }
 
-void vbglHGCMHandleFree (struct VBGLHGCMHANDLEDATA *pHandle)
+void vbglHGCMHandleFree(struct VBGLHGCMHANDLEDATA *pHandle)
 {
-    int rc;
-
-    if (!pHandle)
-       return;
-
-    rc = vbglHandleHeapEnter ();
-
-    if (RT_FAILURE (rc))
-        return;
-
-    VBGL_HGCM_ASSERTMsg(pHandle->fAllocated,
-                        ("Freeing not allocated handle.\n"));
+    if (pHandle)
+    {
+        int rc = vbglHandleHeapEnter();
+        if (RT_SUCCESS(rc))
+        {
+            VBGL_HGCM_ASSERT_MSG(pHandle->fAllocated, ("Freeing not allocated handle.\n"));
 
-    memset(pHandle, 0, sizeof (struct VBGLHGCMHANDLEDATA));
-    vbglHandleHeapLeave ();
-    return;
+            RT_ZERO(*pHandle);
+            vbglHandleHeapLeave();
+        }
+    }
 }
 
-DECLVBGL(int) VbglHGCMConnect (VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData)
+DECLVBGL(int) VbglHGCMConnect(VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData)
 {
     int rc;
-    struct VBGLHGCMHANDLEDATA *pHandleData;
-
-    if (!pHandle || !pData)
-        return VERR_INVALID_PARAMETER;
-
-    pHandleData = vbglHGCMHandleAlloc();
-    if (!pHandleData)
-        rc = VERR_NO_MEMORY;
-    else
+    if (pHandle && pData)
     {
-        rc = vbglDriverOpen (&pHandleData->driver);
-        if (RT_SUCCESS(rc))
+        struct VBGLHGCMHANDLEDATA *pHandleData = vbglHGCMHandleAlloc();
+        if (pHandleData)
         {
-            rc = vbglDriverIOCtl (&pHandleData->driver, VBOXGUEST_IOCTL_HGCM_CONNECT, pData, sizeof (*pData));
-            if (RT_SUCCESS(rc))
-                rc = pData->result;
+            rc = vbglDriverOpen(&pHandleData->driver);
             if (RT_SUCCESS(rc))
             {
-                *pHandle = pHandleData;
-                return rc;
+                rc = vbglDriverIOCtl(&pHandleData->driver, VBOXGUEST_IOCTL_HGCM_CONNECT, pData, sizeof(*pData));
+                if (RT_SUCCESS(rc))
+                    rc = pData->result;
+                if (RT_SUCCESS(rc))
+                {
+                    *pHandle = pHandleData;
+                    return rc;
+                }
+
+                vbglDriverClose(&pHandleData->driver);
             }
 
-            vbglDriverClose (&pHandleData->driver);
+            vbglHGCMHandleFree(pHandleData);
         }
-
-        vbglHGCMHandleFree (pHandleData);
+        else
+            rc = VERR_NO_MEMORY;
     }
-
+    else
+        rc = VERR_INVALID_PARAMETER;
     return rc;
 }
 
-DECLVBGL(int) VbglHGCMDisconnect (VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnectInfo *pData)
+DECLVBGL(int) VbglHGCMDisconnect(VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnectInfo *pData)
 {
-    int rc = VINF_SUCCESS;
-
-    rc = vbglDriverIOCtl (&handle->driver, VBOXGUEST_IOCTL_HGCM_DISCONNECT, pData, sizeof (*pData));
+    int rc = vbglDriverIOCtl(&handle->driver, VBOXGUEST_IOCTL_HGCM_DISCONNECT, pData, sizeof(*pData));
 
-    vbglDriverClose (&handle->driver);
+    vbglDriverClose(&handle->driver);
 
-    vbglHGCMHandleFree (handle);
+    vbglHGCMHandleFree(handle);
 
     return rc;
 }
 
-DECLVBGL(int) VbglHGCMCall (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData)
+DECLVBGL(int) VbglHGCMCall(VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData)
 {
-    int rc = VINF_SUCCESS;
+    VBGL_HGCM_ASSERT_MSG(cbData >= sizeof(VBoxGuestHGCMCallInfo) + pData->cParms * sizeof(HGCMFunctionParameter),
+                         ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms,
+                          sizeof(VBoxGuestHGCMCallInfo) + pData->cParms * sizeof(VBoxGuestHGCMCallInfo)));
 
-    VBGL_HGCM_ASSERTMsg(cbData >= sizeof (VBoxGuestHGCMCallInfo) + pData->cParms * sizeof (HGCMFunctionParameter),
-                        ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms, sizeof (VBoxGuestHGCMCallInfo) + pData->cParms * sizeof (VBoxGuestHGCMCallInfo)));
-
-    rc = vbglDriverIOCtl (&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL(cbData), pData, cbData);
-
-    return rc;
+    return vbglDriverIOCtl(&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL(cbData), pData, cbData);
 }
 
 DECLVBGL(int) VbglHGCMCallUserData (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData)
 {
-    int rc = VINF_SUCCESS;
-
-    VBGL_HGCM_ASSERTMsg(cbData >= sizeof (VBoxGuestHGCMCallInfo) + pData->cParms * sizeof (HGCMFunctionParameter),
-                        ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms, sizeof (VBoxGuestHGCMCallInfo) + pData->cParms * sizeof (VBoxGuestHGCMCallInfo)));
-
-    rc = vbglDriverIOCtl (&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL_USERDATA(cbData), pData, cbData);
+    VBGL_HGCM_ASSERT_MSG(cbData >= sizeof(VBoxGuestHGCMCallInfo) + pData->cParms * sizeof(HGCMFunctionParameter),
+                         ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms,
+                          sizeof(VBoxGuestHGCMCallInfo) + pData->cParms * sizeof(VBoxGuestHGCMCallInfo)));
 
-    return rc;
+    return vbglDriverIOCtl(&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL_USERDATA(cbData), pData, cbData);
 }
 
 
-DECLVBGL(int) VbglHGCMCallTimed (VBGLHGCMHANDLE handle,
-                                 VBoxGuestHGCMCallInfoTimed *pData, uint32_t cbData)
+DECLVBGL(int) VbglHGCMCallTimed(VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfoTimed *pData, uint32_t cbData)
 {
-    int rc = VINF_SUCCESS;
-
-    uint32_t cbExpected =   sizeof (VBoxGuestHGCMCallInfoTimed)
-                          + pData->info.cParms * sizeof (HGCMFunctionParameter);
-    VBGL_HGCM_ASSERTMsg(cbData >= cbExpected,
-                        ("cbData = %d, cParms = %d (calculated size %d)\n",
-                        cbData, pData->info.cParms, cbExpected));
+    uint32_t cbExpected = sizeof(VBoxGuestHGCMCallInfoTimed)
+                        + pData->info.cParms * sizeof(HGCMFunctionParameter);
+    VBGL_HGCM_ASSERT_MSG(cbData >= cbExpected,
+                         ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->info.cParms, cbExpected));
+    NOREF(cbExpected);
 
-    rc = vbglDriverIOCtl (&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL_TIMED(cbData),
-                          pData, cbData);
-
-    return rc;
+    return vbglDriverIOCtl(&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL_TIMED(cbData), pData, cbData);
 }
 
 #endif /* !VBGL_VBOXGUEST */
diff --git a/src/VBox/Additions/common/VBoxGuestLib/HGCMInternal.cpp b/src/VBox/Additions/common/VBoxGuestLib/HGCMInternal.cpp
index 799ed84..e6fd783 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/HGCMInternal.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/HGCMInternal.cpp
@@ -486,7 +486,7 @@ static void vbglR0HGCMInternalInitCall(VMMDevHGCMCall *pHGCMCall, VBoxGuestHGCMC
     HGCMFunctionParameter const *pSrcParm = VBOXGUEST_HGCM_CALL_PARMS(pCallInfo);
     HGCMFunctionParameter       *pDstParm = VMMDEV_HGCM_CALL_PARMS(pHGCMCall);
     uint32_t    cParms   = pCallInfo->cParms;
-    uint32_t    offExtra = (uintptr_t)(pDstParm + cParms) - (uintptr_t)pHGCMCall;
+    uint32_t    offExtra = (uint32_t)((uintptr_t)(pDstParm + cParms) - (uintptr_t)pHGCMCall);
     uint32_t    iLockBuf = 0;
     uint32_t    iParm;
 
@@ -574,7 +574,7 @@ static void vbglR0HGCMInternalInitCall(VMMDevHGCMCall *pHGCMCall, VBoxGuestHGCMC
                         else
 #endif
                             pDstPgLst->offFirstPage = pSrcParm->u.Pointer.u.linearAddr & PAGE_OFFSET_MASK;
-                        pDstPgLst->cPages           = cPages; Assert(pDstPgLst->cPages == cPages);
+                        pDstPgLst->cPages           = (uint32_t)cPages; Assert(pDstPgLst->cPages == cPages);
                         for (iPage = 0; iPage < cPages; iPage++)
                         {
                             pDstPgLst->aPages[iPage] = RTR0MemObjGetPagePhysAddr(hObj, iPage);
diff --git a/src/VBox/Additions/common/VBoxGuestLib/Init.cpp b/src/VBox/Additions/common/VBoxGuestLib/Init.cpp
index 44b7940..f7ffb3f 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/Init.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/Init.cpp
@@ -112,7 +112,7 @@ static void vbglQueryDriverInfo (void)
         {
             dprintf (("port = 0x%04X, mem = %p\n", port.portAddress, port.pVMMDevMemory));
 
-            g_vbgldata.portVMMDev = port.portAddress;
+            g_vbgldata.portVMMDev = (RTIOPORT)port.portAddress;
             g_vbgldata.pVMMDevMemory = port.pVMMDevMemory;
 
             g_vbgldata.status = VbglStatusReady;
@@ -186,14 +186,14 @@ DECLVBGL(void) vbglTerminateCommon (void)
 
 #ifdef VBGL_VBOXGUEST
 
-DECLVBGL(int) VbglInit (VBGLIOPORT portVMMDev, VMMDevMemory *pVMMDevMemory)
+DECLVBGL(int) VbglInitPrimary(RTIOPORT portVMMDev, VMMDevMemory *pVMMDevMemory)
 {
     int rc = VINF_SUCCESS;
 
 # ifdef RT_OS_WINDOWS /** @todo r=bird: this doesn't make sense. Is there something special going on on windows? */
     dprintf(("vbglInit: starts g_vbgldata.status %d\n", g_vbgldata.status));
 
-    if (g_vbgldata.status == VbglStatusInitializing
+    if (   g_vbgldata.status == VbglStatusInitializing
         || g_vbgldata.status == VbglStatusReady)
     {
         /* Initialization is already in process. */
@@ -232,11 +232,11 @@ DECLVBGL(void) VbglTerminate (void)
 
 #else /* !VBGL_VBOXGUEST */
 
-DECLVBGL(int) VbglInit (void)
+DECLVBGL(int) VbglInitClient(void)
 {
     int rc = VINF_SUCCESS;
 
-    if (g_vbgldata.status == VbglStatusInitializing
+    if (   g_vbgldata.status == VbglStatusInitializing
         || g_vbgldata.status == VbglStatusReady)
     {
         /* Initialization is already in process. */
diff --git a/src/VBox/Additions/common/VBoxGuestLib/Mouse.cpp b/src/VBox/Additions/common/VBoxGuestLib/Mouse.cpp
index 85f260e..315dd41 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/Mouse.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/Mouse.cpp
@@ -40,8 +40,7 @@
  * @param   pfnNotify  the function to call back.  NULL to disable call backs.
  * @param   pvUser     user supplied data/cookie to be passed to the function.
  */
-DECLVBGL(int) VbglSetMouseNotifyCallback(PFNVBOXGUESTMOUSENOTIFY pfnNotify,
-                                         void *pvUser)
+DECLVBGL(int) VbglSetMouseNotifyCallback(PFNVBOXGUESTMOUSENOTIFY pfnNotify, void *pvUser)
 {
     VBoxGuestMouseSetNotifyCallback NotifyCallback;
     VBGLDRIVER *pDriver;
@@ -50,8 +49,7 @@ DECLVBGL(int) VbglSetMouseNotifyCallback(PFNVBOXGUESTMOUSENOTIFY pfnNotify,
         return rc;
     NotifyCallback.pfnNotify = pfnNotify;
     NotifyCallback.pvUser    = pvUser;
-    return vbglDriverIOCtl(pDriver, VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK,
-                           &NotifyCallback, sizeof(NotifyCallback));
+    return vbglDriverIOCtl(pDriver, VBOXGUEST_IOCTL_SET_MOUSE_NOTIFY_CALLBACK, &NotifyCallback, sizeof(NotifyCallback));
 }
 
 /**
@@ -64,8 +62,7 @@ DECLVBGL(int) VbglSetMouseNotifyCallback(PFNVBOXGUESTMOUSENOTIFY pfnNotify,
  * @param   px          Where to store the X co-ordinate.
  * @param   py          Where to store the Y co-ordinate.
  */
-DECLVBGL(int) VbglGetMouseStatus(uint32_t *pfFeatures, uint32_t *px,
-                                 uint32_t *py)
+DECLVBGL(int) VbglGetMouseStatus(uint32_t *pfFeatures, uint32_t *px, uint32_t *py)
 {
     VMMDevReqMouseStatus Req;
     VBGLDRIVER *pDriver;
@@ -78,8 +75,7 @@ DECLVBGL(int) VbglGetMouseStatus(uint32_t *pfFeatures, uint32_t *px,
     Req.mouseFeatures = 0;
     Req.pointerXPos = 0;
     Req.pointerYPos = 0;
-    rc = vbglDriverIOCtl(pDriver, VBOXGUEST_IOCTL_VMMREQUEST(sizeof(Req)),
-                         &Req.header, sizeof(Req));
+    rc = vbglDriverIOCtl(pDriver, VBOXGUEST_IOCTL_VMMREQUEST(sizeof(Req)), &Req.header, sizeof(Req));
     if (RT_FAILURE(rc))
         return rc;
     if (RT_FAILURE(Req.header.rc))
@@ -111,6 +107,6 @@ DECLVBGL(int) VbglSetMouseStatus(uint32_t fFeatures)
     rc = vbglGetDriver(&pDriver);
     if (RT_FAILURE(rc))
         return rc;
-    return vbglDriverIOCtl(pDriver, VBOXGUEST_IOCTL_SET_MOUSE_STATUS,
-                           &fFeatures, sizeof(fFeatures));
+    return vbglDriverIOCtl(pDriver, VBOXGUEST_IOCTL_SET_MOUSE_STATUS, &fFeatures, sizeof(fFeatures));
 }
+
diff --git a/src/VBox/Additions/common/VBoxGuestLib/PhysHeap.cpp b/src/VBox/Additions/common/VBoxGuestLib/PhysHeap.cpp
index 6261791..fc5e99e 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/PhysHeap.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/PhysHeap.cpp
@@ -512,7 +512,7 @@ DECLVBGL(uint32_t) VbglPhysHeapGetPhysAddr (void *p)
     return physAddr;
 }
 
-DECLVBGL(void) VbglPhysHeapFree (void *p)
+DECLVBGL(void) VbglPhysHeapFree(void *p)
 {
     VBGLPHYSHEAPBLOCK *pBlock;
     VBGLPHYSHEAPBLOCK *pNeighbour;
diff --git a/src/VBox/Additions/common/VBoxGuestLib/SysHlp.cpp b/src/VBox/Additions/common/VBoxGuestLib/SysHlp.cpp
index 6e5e20a..0004773 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/SysHlp.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/SysHlp.cpp
@@ -50,7 +50,7 @@
  * @param   fWriteAccess    Lock for read-write (true) or readonly (false).
  * @param   fFlags          HGCM call flags, VBGLR0_HGCM_F_XXX.
  */
-int vbglLockLinear (void **ppvCtx, void *pv, uint32_t u32Size, bool fWriteAccess, uint32_t fFlags)
+int vbglLockLinear(void **ppvCtx, void *pv, uint32_t u32Size, bool fWriteAccess, uint32_t fFlags)
 {
     int         rc      = VINF_SUCCESS;
 #ifndef RT_OS_WINDOWS
@@ -73,7 +73,7 @@ int vbglLockLinear (void **ppvCtx, void *pv, uint32_t u32Size, bool fWriteAccess
     /** @todo just use IPRT here. the extra allocation shouldn't matter much...
      *        Then we can move all this up one level even. */
 #ifdef RT_OS_WINDOWS
-    PMDL pMdl = IoAllocateMdl (pv, u32Size, FALSE, FALSE, NULL);
+    PMDL pMdl = IoAllocateMdl(pv, u32Size, FALSE, FALSE, NULL);
 
     if (pMdl == NULL)
     {
@@ -84,16 +84,16 @@ int vbglLockLinear (void **ppvCtx, void *pv, uint32_t u32Size, bool fWriteAccess
     {
         __try {
             /* Calls to MmProbeAndLockPages must be enclosed in a try/except block. */
-            MmProbeAndLockPages (pMdl,
-                                 /** @todo (fFlags & VBGLR0_HGCMCALL_F_MODE_MASK) == VBGLR0_HGCMCALL_F_USER? UserMode: KernelMode */
-                                 KernelMode,
-                                 (fWriteAccess) ? IoModifyAccess : IoReadAccess);
+            MmProbeAndLockPages(pMdl,
+                                /** @todo (fFlags & VBGLR0_HGCMCALL_F_MODE_MASK) == VBGLR0_HGCMCALL_F_USER? UserMode: KernelMode */
+                                KernelMode,
+                                (fWriteAccess) ? IoModifyAccess : IoReadAccess);
 
             *ppvCtx = pMdl;
 
         } __except(EXCEPTION_EXECUTE_HANDLER) {
 
-            IoFreeMdl (pMdl);
+            IoFreeMdl(pMdl);
             /** @todo  */
             rc = VERR_INVALID_PARAMETER;
             AssertMsgFailed(("MmProbeAndLockPages %p %x failed!!\n", pv, u32Size));
@@ -123,7 +123,7 @@ int vbglLockLinear (void **ppvCtx, void *pv, uint32_t u32Size, bool fWriteAccess
     return rc;
 }
 
-void vbglUnlockLinear (void *pvCtx, void *pv, uint32_t u32Size)
+void vbglUnlockLinear(void *pvCtx, void *pv, uint32_t u32Size)
 {
 #ifdef RT_OS_WINDOWS
     PMDL pMdl = (PMDL)pvCtx;
@@ -131,8 +131,8 @@ void vbglUnlockLinear (void *pvCtx, void *pv, uint32_t u32Size)
     Assert(pMdl);
     if (pMdl != NULL)
     {
-        MmUnlockPages (pMdl);
-        IoFreeMdl (pMdl);
+        MmUnlockPages(pMdl);
+        IoFreeMdl(pMdl);
     }
 
 #else
@@ -163,13 +163,13 @@ RT_C_DECLS_END
 # if !defined(RT_OS_OS2) \
   && !defined(RT_OS_WINDOWS)
 RT_C_DECLS_BEGIN
-extern DECLVBGL(void *) VBoxGuestIDCOpen (uint32_t *pu32Version);
-extern DECLVBGL(void)   VBoxGuestIDCClose (void *pvOpaque);
-extern DECLVBGL(int)    VBoxGuestIDCCall (void *pvOpaque, unsigned int iCmd, void *pvData, size_t cbSize, size_t *pcbReturn);
+extern DECLVBGL(void *) VBoxGuestIDCOpen(uint32_t *pu32Version);
+extern DECLVBGL(void)   VBoxGuestIDCClose(void *pvOpaque);
+extern DECLVBGL(int)    VBoxGuestIDCCall(void *pvOpaque, unsigned int iCmd, void *pvData, size_t cbSize, size_t *pcbReturn);
 RT_C_DECLS_END
 # endif
 
-bool vbglDriverIsOpened (VBGLDRIVER *pDriver)
+bool vbglDriverIsOpened(VBGLDRIVER *pDriver)
 {
 # ifdef RT_OS_WINDOWS
     return pDriver->pFileObject != NULL;
@@ -180,19 +180,17 @@ bool vbglDriverIsOpened (VBGLDRIVER *pDriver)
 # endif
 }
 
-int vbglDriverOpen (VBGLDRIVER *pDriver)
+int vbglDriverOpen(VBGLDRIVER *pDriver)
 {
 # ifdef RT_OS_WINDOWS
     UNICODE_STRING uszDeviceName;
-    RtlInitUnicodeString (&uszDeviceName, L"\\Device\\VBoxGuest");
+    RtlInitUnicodeString(&uszDeviceName, L"\\Device\\VBoxGuest");
 
     PDEVICE_OBJECT pDeviceObject = NULL;
     PFILE_OBJECT pFileObject = NULL;
 
-    NTSTATUS rc = IoGetDeviceObjectPointer (&uszDeviceName, FILE_ALL_ACCESS,
-                                            &pFileObject, &pDeviceObject);
-
-    if (NT_SUCCESS (rc))
+    NTSTATUS rc = IoGetDeviceObjectPointer(&uszDeviceName, FILE_ALL_ACCESS, &pFileObject, &pDeviceObject);
+    if (NT_SUCCESS(rc))
     {
         Log(("vbglDriverOpen VBoxGuest successful pDeviceObject=%x\n", pDeviceObject));
         pDriver->pDeviceObject = pDeviceObject;
@@ -207,9 +205,9 @@ int vbglDriverOpen (VBGLDRIVER *pDriver)
     /*
      * Just check whether the connection was made or not.
      */
-    if (    g_VBoxGuestIDC.u32Version == VMMDEV_VERSION
-        &&  VALID_PTR(g_VBoxGuestIDC.u32Session)
-        &&  VALID_PTR(g_VBoxGuestIDC.pfnServiceEP))
+    if (   g_VBoxGuestIDC.u32Version == VMMDEV_VERSION
+        && RT_VALID_PTR(g_VBoxGuestIDC.u32Session)
+        && RT_VALID_PTR(g_VBoxGuestIDC.pfnServiceEP))
     {
         pDriver->u32Session = g_VBoxGuestIDC.u32Session;
         return VINF_SUCCESS;
@@ -220,9 +218,9 @@ int vbglDriverOpen (VBGLDRIVER *pDriver)
 
 # else
     uint32_t u32VMMDevVersion;
-    pDriver->pvOpaque = VBoxGuestIDCOpen (&u32VMMDevVersion);
-    if (    pDriver->pvOpaque
-        &&  u32VMMDevVersion == VMMDEV_VERSION)
+    pDriver->pvOpaque = VBoxGuestIDCOpen(&u32VMMDevVersion);
+    if (   pDriver->pvOpaque
+        && u32VMMDevVersion == VMMDEV_VERSION)
         return VINF_SUCCESS;
 
     Log(("vbglDriverOpen: failed\n"));
@@ -231,34 +229,32 @@ int vbglDriverOpen (VBGLDRIVER *pDriver)
 }
 
 # ifdef RT_OS_WINDOWS
-static NTSTATUS vbglDriverIOCtlCompletion (IN PDEVICE_OBJECT DeviceObject,
-                                           IN PIRP Irp,
-                                           IN PVOID Context)
+static NTSTATUS vbglDriverIOCtlCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
 {
     Log(("VBGL completion %x\n", Irp));
 
     KEVENT *pEvent = (KEVENT *)Context;
-    KeSetEvent (pEvent, IO_NO_INCREMENT, FALSE);
+    KeSetEvent(pEvent, IO_NO_INCREMENT, FALSE);
 
     return STATUS_MORE_PROCESSING_REQUIRED;
 }
 # endif
 
-int vbglDriverIOCtl (VBGLDRIVER *pDriver, uint32_t u32Function, void *pvData, uint32_t cbData)
+int vbglDriverIOCtl(VBGLDRIVER *pDriver, uint32_t u32Function, void *pvData, uint32_t cbData)
 {
     Log(("vbglDriverIOCtl: pDriver: %p, Func: %x, pvData: %p, cbData: %d\n", pDriver, u32Function, pvData, cbData));
 
 # ifdef RT_OS_WINDOWS
     KEVENT Event;
 
-    KeInitializeEvent (&Event, NotificationEvent, FALSE);
+    KeInitializeEvent(&Event, NotificationEvent, FALSE);
 
     /* Have to use the IoAllocateIRP method because this code is generic and
      * must work in any thread context.
      * The IoBuildDeviceIoControlRequest, which was used here, does not work
      * when APCs are disabled, for example.
      */
-    PIRP irp = IoAllocateIrp (pDriver->pDeviceObject->StackSize, FALSE);
+    PIRP irp = IoAllocateIrp(pDriver->pDeviceObject->StackSize, FALSE);
 
     Log(("vbglDriverIOCtl: irp %p, IRQL = %d\n", irp, KeGetCurrentIrql()));
 
@@ -272,7 +268,7 @@ int vbglDriverIOCtl (VBGLDRIVER *pDriver, uint32_t u32Function, void *pvData, ui
      * Setup the IRP_MJ_DEVICE_CONTROL IRP.
      */
 
-    PIO_STACK_LOCATION nextStack = IoGetNextIrpStackLocation (irp);
+    PIO_STACK_LOCATION nextStack = IoGetNextIrpStackLocation(irp);
 
     nextStack->MajorFunction = IRP_MJ_DEVICE_CONTROL;
     nextStack->MinorFunction = 0;
@@ -286,25 +282,21 @@ int vbglDriverIOCtl (VBGLDRIVER *pDriver, uint32_t u32Function, void *pvData, ui
     irp->MdlAddress = NULL;
 
     /* A completion routine is required to signal the Event. */
-    IoSetCompletionRoutine (irp, vbglDriverIOCtlCompletion, &Event, TRUE, TRUE, TRUE);
+    IoSetCompletionRoutine(irp, vbglDriverIOCtlCompletion, &Event, TRUE, TRUE, TRUE);
 
-    NTSTATUS rc = IoCallDriver (pDriver->pDeviceObject, irp);
+    NTSTATUS rc = IoCallDriver(pDriver->pDeviceObject, irp);
 
     if (NT_SUCCESS (rc))
     {
         /* Wait the event to be signalled by the completion routine. */
-        KeWaitForSingleObject (&Event,
-                               Executive,
-                               KernelMode,
-                               FALSE,
-                               NULL);
+        KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
 
         rc = irp->IoStatus.Status;
 
         Log(("vbglDriverIOCtl: wait completed IRQL = %d\n", KeGetCurrentIrql()));
     }
 
-    IoFreeIrp (irp);
+    IoFreeIrp(irp);
 
     if (rc != STATUS_SUCCESS)
         Log(("vbglDriverIOCtl: ntstatus=%x\n", rc));
@@ -330,11 +322,11 @@ int vbglDriverIOCtl (VBGLDRIVER *pDriver, uint32_t u32Function, void *pvData, ui
 # endif
 }
 
-void vbglDriverClose (VBGLDRIVER *pDriver)
+void vbglDriverClose(VBGLDRIVER *pDriver)
 {
 # ifdef RT_OS_WINDOWS
     Log(("vbglDriverClose pDeviceObject=%x\n", pDriver->pDeviceObject));
-    ObDereferenceObject (pDriver->pFileObject);
+    ObDereferenceObject(pDriver->pFileObject);
     pDriver->pFileObject = NULL;
     pDriver->pDeviceObject = NULL;
 
@@ -342,7 +334,7 @@ void vbglDriverClose (VBGLDRIVER *pDriver)
     pDriver->u32Session = 0;
 
 # else
-    VBoxGuestIDCClose (pDriver->pvOpaque);
+    VBoxGuestIDCClose(pDriver->pvOpaque);
     pDriver->pvOpaque = NULL;
 # endif
 }
diff --git a/src/VBox/Additions/common/VBoxGuestLib/SysHlp.h b/src/VBox/Additions/common/VBoxGuestLib/SysHlp.h
index fede8b0..ee554ff 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/SysHlp.h
+++ b/src/VBox/Additions/common/VBoxGuestLib/SysHlp.h
@@ -24,8 +24,8 @@
  * terms and conditions of either the GPL or the CDDL or both.
  */
 
-#ifndef __VBoxGuestLib_SysHlp_h
-#define __VBoxGuestLib_SysHlp_h
+#ifndef ___VBoxGuestLib_SysHlp_h
+#define ___VBoxGuestLib_SysHlp_h
 
 #include <iprt/types.h>
 
@@ -55,8 +55,8 @@ RT_C_DECLS_END
 /* XP DDK #defines ExFreePool to ExFreePoolWithTag. The latter does not exist on NT4, so...
  * The same for ExAllocatePool.
  */
-#undef ExAllocatePool
-#undef ExFreePool
+# undef ExAllocatePool
+# undef ExFreePool
 #endif
 
 typedef struct _VBGLDRIVER
@@ -71,8 +71,8 @@ typedef struct _VBGLDRIVER
 #endif
 } VBGLDRIVER;
 
-int vbglLockLinear (void **ppvCtx, void *pv, uint32_t u32Size, bool fWriteAccess, uint32_t fFlags);
-void vbglUnlockLinear (void *pvCtx, void *pv, uint32_t u32Size);
+int  vbglLockLinear(void **ppvCtx, void *pv, uint32_t cb, bool fWriteAccess, uint32_t fFlags);
+void vbglUnlockLinear(void *pvCtx, void *pv, uint32_t cb);
 
 
 #ifndef VBGL_VBOXGUEST
@@ -82,9 +82,9 @@ void vbglUnlockLinear (void *pvCtx, void *pv, uint32_t u32Size);
  *
  * @param pDriver      Pointer to the driver structure.
  *
- * @return VBox error code
+ * @return VBox status code
  */
-int vbglDriverOpen (VBGLDRIVER *pDriver);
+int vbglDriverOpen(VBGLDRIVER *pDriver);
 
 /**
  * Answers whether the VBoxGuest driver is opened
@@ -93,7 +93,7 @@ int vbglDriverOpen (VBGLDRIVER *pDriver);
  *
  * @return true - if opened, false - otherwise
  */
-bool vbglDriverIsOpened (VBGLDRIVER *pDriver);
+bool vbglDriverIsOpened(VBGLDRIVER *pDriver);
 
 /**
  * Call VBoxGuest driver.
@@ -103,20 +103,20 @@ bool vbglDriverIsOpened (VBGLDRIVER *pDriver);
  * @param pvData       Pointer to supplied in/out data buffer.
  * @param cbData       Size of data buffer.
  *
- * @return VBox error code
+ * @returns VBox status code
  */
-int vbglDriverIOCtl (VBGLDRIVER *pDriver, uint32_t u32Function, void *pvData, uint32_t cbData);
+int vbglDriverIOCtl(VBGLDRIVER *pDriver, uint32_t u32Function, void *pvData, uint32_t cbData);
 
 /**
  * Close VBoxGuest driver.
  *
  * @param pDriver      Pointer to the driver structure.
  *
- * @return VBox error code
+ * @returns VBox status code
  */
-void vbglDriverClose (VBGLDRIVER *pDriver);
+void vbglDriverClose(VBGLDRIVER *pDriver);
 
 #endif
 
-#endif /* !__VBoxGuestLib_SysHlp_h */
+#endif
 
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBGLInternal.h b/src/VBox/Additions/common/VBoxGuestLib/VBGLInternal.h
index fe9b01a..e4233fb 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBGLInternal.h
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBGLInternal.h
@@ -72,11 +72,11 @@ enum VbglLibStatus
  * Global VBGL ring-0 data.
  * Lives in VbglR0Init.cpp.
  */
-typedef struct _VBGLDATA
+typedef struct VBGLDATA
 {
     enum VbglLibStatus status;
 
-    VBGLIOPORT portVMMDev;
+    RTIOPORT portVMMDev;
 
     VMMDevMemory *pVMMDevMemory;
 
@@ -154,9 +154,11 @@ int vbglR0Enter (void);
 
 #ifdef VBOX_WITH_HGCM
 # ifndef VBGL_VBOXGUEST
-int vbglR0HGCMInit (void);
-int vbglR0HGCMTerminate (void);
+int                         vbglR0HGCMInit(void);
+int                         vbglR0HGCMTerminate(void);
 # endif
+struct VBGLHGCMHANDLEDATA  *vbglHGCMHandleAlloc(void);
+void                        vbglHGCMHandleFree(struct VBGLHGCMHANDLEDATA *pHandle);
 #endif /* VBOX_WITH_HGCM */
 
 #ifndef VBGL_VBOXGUEST
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibCrOgl.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibCrOgl.cpp
index 26f1d9c..b0a0529 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibCrOgl.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibCrOgl.cpp
@@ -1,6 +1,6 @@
 /* $Id: VBoxGuestR0LibCrOgl.cpp $ */
 /** @file
- * VBoxGuestLib - Central calls header.
+ * VBoxGuestLib - Ring-3 Support Library for VirtualBox guest additions, Chromium OpenGL Service.
  */
 
 /*
@@ -28,49 +28,44 @@
 #ifdef VBGL_VBOXGUEST
 # error "VBGL_VBOXGUEST should not be defined"
 #else
-#include "VBoxGuestR0LibCrOgl.h"
 
 #include <iprt/string.h>
 
 #include "VBGLInternal.h"
 
-struct VBGLHGCMHANDLEDATA *vbglHGCMHandleAlloc (void);
-void vbglHGCMHandleFree (struct VBGLHGCMHANDLEDATA *pHandle);
 
-DECLVBGL(int) vboxCrCtlCreate(HVBOXCRCTL *phCtl)
+DECLVBGL(int) VbglR0CrCtlCreate(VBGLCRCTLHANDLE *phCtl)
 {
     int rc;
-    struct VBGLHGCMHANDLEDATA *pHandleData;
 
-    if (!phCtl)
-        return VERR_INVALID_PARAMETER;
-
-    pHandleData = vbglHGCMHandleAlloc ();
-
-    rc = VINF_SUCCESS;
-
-    if (!pHandleData)
+    if (phCtl)
     {
-        rc = VERR_NO_MEMORY;
-    }
-    else
-    {
-        rc = vbglDriverOpen (&pHandleData->driver);
+        struct VBGLHGCMHANDLEDATA *pHandleData = vbglHGCMHandleAlloc();
 
-        if (RT_SUCCESS(rc))
+        if (pHandleData)
         {
-            *phCtl = pHandleData;
-            return VINF_SUCCESS;
+            rc = vbglDriverOpen(&pHandleData->driver);
+
+            if (RT_SUCCESS(rc))
+            {
+                *phCtl = pHandleData;
+                return VINF_SUCCESS;
+            }
+
+            vbglHGCMHandleFree(pHandleData);
         }
+        else
+            rc = VERR_NO_MEMORY;
 
-        vbglHGCMHandleFree (pHandleData);
+        *phCtl = NULL;
     }
+    else
+        rc = VERR_INVALID_PARAMETER;
 
-    *phCtl = NULL;
     return rc;
 }
 
-DECLVBGL(int) vboxCrCtlDestroy(HVBOXCRCTL hCtl)
+DECLVBGL(int) VbglR0CrCtlDestroy(VBGLCRCTLHANDLE hCtl)
 {
     vbglDriverClose(&hCtl->driver);
 
@@ -79,50 +74,50 @@ DECLVBGL(int) vboxCrCtlDestroy(HVBOXCRCTL hCtl)
     return VINF_SUCCESS;
 }
 
-DECLVBGL(int) vboxCrCtlConConnect(HVBOXCRCTL hCtl, uint32_t *pu32ClientID)
+DECLVBGL(int) VbglR0CrCtlConConnect(VBGLCRCTLHANDLE hCtl, HGCMCLIENTID *pidClient)
 {
     VBoxGuestHGCMConnectInfo info;
     int rc;
 
-    if (!hCtl || !pu32ClientID)
+    if (!hCtl || !pidClient)
         return VERR_INVALID_PARAMETER;
 
-    memset(&info, 0, sizeof (info));
+    RT_ZERO(info);
     info.Loc.type = VMMDevHGCMLoc_LocalHost_Existing;
-    RTStrCopy(info.Loc.u.host.achName, sizeof (info.Loc.u.host.achName), "VBoxSharedCrOpenGL");
-    rc = vbglDriverIOCtl (&hCtl->driver, VBOXGUEST_IOCTL_HGCM_CONNECT, &info, sizeof (info));
+    RTStrCopy(info.Loc.u.host.achName, sizeof(info.Loc.u.host.achName), "VBoxSharedCrOpenGL");
+    rc = vbglDriverIOCtl(&hCtl->driver, VBOXGUEST_IOCTL_HGCM_CONNECT, &info, sizeof(info));
     if (RT_SUCCESS(rc))
     {
         rc = info.result;
         if (RT_SUCCESS(rc))
         {
             Assert(info.u32ClientID);
-            *pu32ClientID = info.u32ClientID;
+            *pidClient = info.u32ClientID;
             return rc;
         }
     }
 
-    Assert(RT_FAILURE(rc));
-    *pu32ClientID = 0;
+    AssertRC(rc);
+    *pidClient = 0;
     return rc;
 }
 
-DECLVBGL(int) vboxCrCtlConDisconnect(HVBOXCRCTL hCtl, uint32_t u32ClientID)
+DECLVBGL(int) VbglR0CrCtlConDisconnect(VBGLCRCTLHANDLE hCtl, HGCMCLIENTID idClient)
 {
     VBoxGuestHGCMDisconnectInfo info;
-    memset (&info, 0, sizeof (info));
-    info.u32ClientID = u32ClientID;
-    return vbglDriverIOCtl (&hCtl->driver, VBOXGUEST_IOCTL_HGCM_DISCONNECT, &info, sizeof (info));
+    RT_ZERO(info);
+    info.u32ClientID = idClient;
+    return vbglDriverIOCtl(&hCtl->driver, VBOXGUEST_IOCTL_HGCM_DISCONNECT, &info, sizeof(info));
 }
 
-DECLVBGL(int) vboxCrCtlConCall(HVBOXCRCTL hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo)
+DECLVBGL(int) VbglR0CrCtlConCall(VBGLCRCTLHANDLE hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo)
 {
-    return vbglDriverIOCtl (&hCtl->driver, VBOXGUEST_IOCTL_HGCM_CALL(cbCallInfo), pCallInfo, cbCallInfo);
+    return vbglDriverIOCtl(&hCtl->driver, VBOXGUEST_IOCTL_HGCM_CALL(cbCallInfo), pCallInfo, cbCallInfo);
 }
 
-DECLVBGL(int) vboxCrCtlConCallUserData(HVBOXCRCTL hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo)
+DECLVBGL(int) VbglR0CrCtlConCallUserData(VBGLCRCTLHANDLE hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo)
 {
-    return vbglDriverIOCtl (&hCtl->driver, VBOXGUEST_IOCTL_HGCM_CALL_USERDATA(cbCallInfo), pCallInfo, cbCallInfo);
+    return vbglDriverIOCtl(&hCtl->driver, VBOXGUEST_IOCTL_HGCM_CALL_USERDATA(cbCallInfo), pCallInfo, cbCallInfo);
 }
 
 #endif /* #ifndef VBGL_VBOXGUEST */
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibCrOgl.h b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibCrOgl.h
deleted file mode 100644
index d221681..0000000
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibCrOgl.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* $Id: VBoxGuestR0LibCrOgl.h $ */
-/** @file
- * VBoxGuestLib - Central calls header.
- */
-
-/*
- * Copyright (C) 2012-2015 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * 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 ___VBoxGuestR0LibCrOgl_cpp__
-#define ___VBoxGuestR0LibCrOgl_cpp__
-
-#include <VBox/VBoxGuestLib.h>
-
-typedef VBGLHGCMHANDLE HVBOXCRCTL;
-
-DECLVBGL(int) vboxCrCtlCreate(HVBOXCRCTL *phCtl);
-DECLVBGL(int) vboxCrCtlDestroy(HVBOXCRCTL hCtl);
-DECLVBGL(int) vboxCrCtlConConnect(HVBOXCRCTL hCtl, uint32_t *pu32ClientID);
-DECLVBGL(int) vboxCrCtlConDisconnect(HVBOXCRCTL hCtl, uint32_t u32ClientID);
-DECLVBGL(int) vboxCrCtlConCall(HVBOXCRCTL hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo);
-DECLVBGL(int) vboxCrCtlConCallUserData(HVBOXCRCTL hCtl, struct VBoxGuestHGCMCallInfo *pCallInfo, int cbCallInfo);
-
-#endif /* #ifndef ___VBoxGuestR0LibCrOgl_cpp__ */
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.c b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.c
index 0fd1add..b05fb92 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.c
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.c
@@ -32,11 +32,7 @@
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
 #define LOG_GROUP LOG_GROUP_SHARED_FOLDERS
-#ifdef RT_OS_LINUX
-# include "VBoxGuestR0LibSharedFolders.h"
-#else
-# include "VBoxGuestR0LibSharedFolders.h"
-#endif
+#include <VBox/VBoxGuestLibSharedFolders.h>
 #include <VBox/log.h>
 #include <iprt/time.h>
 #include <iprt/mem.h>
@@ -50,30 +46,26 @@
 #define SHFL_CPARMS_SET_UTF8 0
 #define SHFL_CPARMS_SET_SYMLINKS 0
 
-#define VBOX_INIT_CALL(a, b, c)          \
-    LogFunc(("%s, u32ClientID=%d\n", "SHFL_FN_" # b, \
-            (c)->ulClientID)); \
-    (a)->result      = VINF_SUCCESS;     \
-    (a)->u32ClientID = (c)->ulClientID;  \
-    (a)->u32Function = SHFL_FN_##b;      \
+#define VBOX_INIT_CALL(a, b, c) \
+    LogFunc(("%s, idClient=%d\n", "SHFL_FN_" # b, (c)->idClient)); \
+    (a)->result      = VINF_SUCCESS; \
+    (a)->u32ClientID = (c)->idClient; \
+    (a)->u32Function = SHFL_FN_##b; \
     (a)->cParms      = SHFL_CPARMS_##b
 
 
 
-DECLVBGL(int) vboxInit (void)
+DECLVBGL(int) VbglR0SfInit(void)
 {
-    int rc = VINF_SUCCESS;
-
-    rc = VbglInit ();
-    return rc;
+    return VbglInitClient();
 }
 
-DECLVBGL(void) vboxUninit (void)
+DECLVBGL(void) VbglR0SfTerm(void)
 {
-    VbglTerminate ();
+    VbglTerminate();
 }
 
-DECLVBGL(int) vboxConnect (PVBSFCLIENT pClient)
+DECLVBGL(int) VbglR0SfConnect(PVBGLSFCLIENT pClient)
 {
     int rc;
     VBoxGuestHGCMConnectInfo data;
@@ -85,50 +77,40 @@ DECLVBGL(int) vboxConnect (PVBSFCLIENT pClient)
     data.Loc.type = VMMDevHGCMLoc_LocalHost_Existing;
     strcpy (data.Loc.u.host.achName, "VBoxSharedFolders");
 
-    rc = VbglHGCMConnect (&pClient->handle, &data);
-
-/*    Log(("VBOXSF: VBoxSF::vboxConnect: VbglHGCMConnect rc = %#x, result = %#x\n",
-         rc, data.result));
-*/
-    if (RT_SUCCESS (rc))
-    {
+    rc = VbglHGCMConnect(&pClient->handle, &data);
+/*    Log(("VBOXSF: VbglR0SfConnect: VbglHGCMConnect rc = %#x, result = %#x\n", rc, data.result)); */
+    if (RT_SUCCESS(rc))
         rc = data.result;
-    }
-
-    if (RT_SUCCESS (rc))
+    if (RT_SUCCESS(rc))
     {
-        pClient->ulClientID = data.u32ClientID;
-        LogFunc(("u32ClientID=%d\n", pClient->ulClientID));
+        pClient->idClient = data.u32ClientID;
+        LogFunc(("idClient=%d\n", pClient->idClient));
     }
     return rc;
 }
 
-DECLVBGL(void) vboxDisconnect (PVBSFCLIENT pClient)
+DECLVBGL(void) VbglR0SfDisconnect(PVBGLSFCLIENT pClient)
 {
     int rc;
     VBoxGuestHGCMDisconnectInfo data;
 
-    LogFunc(("u32ClientID=%d\n", pClient->ulClientID));
+    LogFunc(("u32ClientID=%d\n", pClient->idClient));
     if (pClient->handle == NULL)
         return;                 /* not connected */
 
     RT_ZERO(data);
     data.result      = VINF_SUCCESS;
-    data.u32ClientID = pClient->ulClientID;
+    data.u32ClientID = pClient->idClient;
 
-    rc = VbglHGCMDisconnect (pClient->handle, &data);
+    rc = VbglHGCMDisconnect(pClient->handle, &data);
     NOREF(rc);
-/*    Log(("VBOXSF: VBoxSF::vboxDisconnect: "
-         "VbglHGCMDisconnect rc = %#x, result = %#x\n", rc, data.result));
-*/
+/*    Log(("VBOXSF: VbglR0SfDisconnect: VbglHGCMDisconnect rc = %#x, result = %#x\n", rc, data.result)); */
     return;
 }
 
-DECLVBGL(int) vboxCallQueryMappings (PVBSFCLIENT pClient, SHFLMAPPING paMappings[],
-                                     uint32_t *pcMappings)
+DECLVBGL(int) VbglR0SfQueryMappings(PVBGLSFCLIENT pClient, SHFLMAPPING paMappings[], uint32_t *pcMappings)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFQueryMappings data;
 
     VBOX_INIT_CALL(&data.callInfo, QUERY_MAPPINGS, pClient);
@@ -140,35 +122,23 @@ DECLVBGL(int) vboxCallQueryMappings (PVBSFCLIENT pClient, SHFLMAPPING paMappings
     data.numberOfMappings.u.value32      = *pcMappings;
 
     data.mappings.type                   = VMMDevHGCMParmType_LinAddr;
-    data.mappings.u.Pointer.size         = sizeof (SHFLMAPPING) * *pcMappings;
+    data.mappings.u.Pointer.size         = sizeof(SHFLMAPPING) * *pcMappings;
     data.mappings.u.Pointer.u.linearAddr = (uintptr_t)&paMappings[0];
 
-/*    Log(("VBOXSF: in ifs difference %d\n",
-         (char *)&data.flags.type - (char *)&data.callInfo.cParms));
-*/
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*
-    Log(("VBOXSF: VBoxSF::vboxCallQueryMappings: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
-    {
+/*    Log(("VBOXSF: in ifs difference %d\n", (char *)&data.flags.type - (char *)&data.callInfo.cParms)); */
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfQueryMappings: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
         rc = data.callInfo.result;
-    }
-
-    if (RT_SUCCESS (rc))
-    {
+    if (RT_SUCCESS(rc))
         *pcMappings = data.numberOfMappings.u.value32;
-    }
 
     return rc;
 }
 
-DECLVBGL(int) vboxCallQueryMapName (PVBSFCLIENT pClient, SHFLROOT root, SHFLSTRING *pString, uint32_t size)
+DECLVBGL(int) VbglR0SfQueryMapName(PVBGLSFCLIENT pClient, SHFLROOT root, SHFLSTRING *pString, uint32_t size)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFQueryMapName data;
 
     VBOX_INIT_CALL(&data.callInfo, QUERY_MAP_NAME, pClient);
@@ -180,30 +150,23 @@ DECLVBGL(int) vboxCallQueryMapName (PVBSFCLIENT pClient, SHFLROOT root, SHFLSTRI
     data.name.u.Pointer.size         = size;
     data.name.u.Pointer.u.linearAddr = (uintptr_t)pString;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallQueryMapName: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
-    {
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfQueryMapName: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
         rc = data.callInfo.result;
-    }
 
     return rc;
 }
 
-DECLVBGL(int) vboxCallMapFolder(PVBSFCLIENT pClient, PSHFLSTRING szFolderName,
-                                PVBSFMAP pMap)
+DECLVBGL(int) VbglR0SfMapFolder(PVBGLSFCLIENT pClient, PSHFLSTRING szFolderName, PVBGLSFMAP pMap)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFMapFolder data;
 
     VBOX_INIT_CALL(&data.callInfo, MAP_FOLDER, pClient);
 
     data.path.type                    = VMMDevHGCMParmType_LinAddr;
-    data.path.u.Pointer.size          = ShflStringSizeOfBuffer (szFolderName);
+    data.path.u.Pointer.size          = ShflStringSizeOfBuffer(szFolderName);
     data.path.u.Pointer.u.linearAddr  = (uintptr_t)szFolderName;
 
     data.root.type                    = VMMDevHGCMParmType_32bit;
@@ -219,12 +182,9 @@ DECLVBGL(int) vboxCallMapFolder(PVBSFCLIENT pClient, PSHFLSTRING szFolderName,
     data.fCaseSensitive.u.value32     = 1;
 #endif
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallMapFolder: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfMapFolder: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
     {
         pMap->root = data.root.u.value32;
         rc         = data.callInfo.result;
@@ -246,9 +206,8 @@ DECLVBGL(int) vboxCallMapFolder(PVBSFCLIENT pClient, PSHFLSTRING szFolderName,
         OldData.delimiter.type               = VMMDevHGCMParmType_32bit;
         OldData.delimiter.u.value32          = RTPATH_DELIMITER;
 
-        rc = VbglHGCMCall (pClient->handle, &OldData.callInfo, sizeof (OldData));
-
-        if (RT_SUCCESS (rc))
+        rc = VbglHGCMCall(pClient->handle, &OldData.callInfo, sizeof(OldData));
+        if (RT_SUCCESS(rc))
         {
             pMap->root = OldData.root.u.value32;
             rc         = OldData.callInfo.result;
@@ -257,10 +216,9 @@ DECLVBGL(int) vboxCallMapFolder(PVBSFCLIENT pClient, PSHFLSTRING szFolderName,
     return rc;
 }
 
-DECLVBGL(int) vboxCallUnmapFolder(PVBSFCLIENT pClient, PVBSFMAP pMap)
+DECLVBGL(int) VbglR0SfUnmapFolder(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFUnmapFolder data;
 
     VBOX_INIT_CALL(&data.callInfo, UNMAP_FOLDER, pClient);
@@ -268,24 +226,17 @@ DECLVBGL(int) vboxCallUnmapFolder(PVBSFCLIENT pClient, PVBSFMAP pMap)
     data.root.type                      = VMMDevHGCMParmType_32bit;
     data.root.u.value32                 = pMap->root;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallUnmapFolder: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
-    {
-        rc         = data.callInfo.result;
-    }
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfUnmapFolder: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
+        rc = data.callInfo.result;
     return rc;
 }
 
-DECLVBGL(int) vboxCallCreate (PVBSFCLIENT pClient, PVBSFMAP pMap,
-                              PSHFLSTRING pParsedPath, PSHFLCREATEPARMS pCreateParms)
+DECLVBGL(int) VbglR0SfCreate(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pParsedPath, PSHFLCREATEPARMS pCreateParms)
 {
     /** @todo copy buffers to physical or mapped memory. */
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFCreate data;
 
     VBOX_INIT_CALL(&data.callInfo, CREATE, pClient);
@@ -298,25 +249,19 @@ DECLVBGL(int) vboxCallCreate (PVBSFCLIENT pClient, PVBSFMAP pMap,
     data.path.u.Pointer.u.linearAddr  = (uintptr_t)pParsedPath;
 
     data.parms.type                   = VMMDevHGCMParmType_LinAddr;
-    data.parms.u.Pointer.size         = sizeof (SHFLCREATEPARMS);
+    data.parms.u.Pointer.size         = sizeof(SHFLCREATEPARMS);
     data.parms.u.Pointer.u.linearAddr = (uintptr_t)pCreateParms;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallCreate: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
-    {
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfCreate: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
         rc = data.callInfo.result;
-    }
     return rc;
 }
 
-DECLVBGL(int) vboxCallClose (PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE Handle)
+DECLVBGL(int) VbglR0SfClose(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE Handle)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFClose data;
 
     VBOX_INIT_CALL(&data.callInfo, CLOSE, pClient);
@@ -327,21 +272,14 @@ DECLVBGL(int) vboxCallClose (PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE Hand
     data.handle.type                    = VMMDevHGCMParmType_64bit;
     data.handle.u.value64               = Handle;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallClose: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
-    {
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfClose: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
         rc = data.callInfo.result;
-    }
-
     return rc;
 }
 
-DECLVBGL(int) vboxCallRemove (PVBSFCLIENT pClient, PVBSFMAP pMap,
-                              PSHFLSTRING pParsedPath, uint32_t flags)
+DECLVBGL(int) VbglR0SfRemove(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pParsedPath, uint32_t flags)
 {
     int rc = VINF_SUCCESS;
 
@@ -353,30 +291,22 @@ DECLVBGL(int) vboxCallRemove (PVBSFCLIENT pClient, PVBSFMAP pMap,
     data.root.u.value32                 = pMap->root;
 
     data.path.type                      = VMMDevHGCMParmType_LinAddr_In;
-    data.path.u.Pointer.size            = ShflStringSizeOfBuffer (pParsedPath);
+    data.path.u.Pointer.size            = ShflStringSizeOfBuffer(pParsedPath);
     data.path.u.Pointer.u.linearAddr    = (uintptr_t)pParsedPath;
 
     data.flags.type                     = VMMDevHGCMParmType_32bit;
     data.flags.u.value32                = flags;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallRemove: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfRemove: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
     if (RT_SUCCESS (rc))
-    {
         rc = data.callInfo.result;
-    }
-
     return rc;
 }
 
-DECLVBGL(int) vboxCallRename (PVBSFCLIENT pClient, PVBSFMAP pMap,
-                              PSHFLSTRING pSrcPath, PSHFLSTRING pDestPath, uint32_t flags)
+DECLVBGL(int) VbglR0SfRename(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pSrcPath, PSHFLSTRING pDestPath, uint32_t flags)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFRename data;
 
     VBOX_INIT_CALL(&data.callInfo, RENAME, pClient);
@@ -385,33 +315,27 @@ DECLVBGL(int) vboxCallRename (PVBSFCLIENT pClient, PVBSFMAP pMap,
     data.root.u.value32                 = pMap->root;
 
     data.src.type                       = VMMDevHGCMParmType_LinAddr_In;
-    data.src.u.Pointer.size             = ShflStringSizeOfBuffer (pSrcPath);
+    data.src.u.Pointer.size             = ShflStringSizeOfBuffer(pSrcPath);
     data.src.u.Pointer.u.linearAddr     = (uintptr_t)pSrcPath;
 
     data.dest.type                      = VMMDevHGCMParmType_LinAddr_In;
-    data.dest.u.Pointer.size            = ShflStringSizeOfBuffer (pDestPath);
+    data.dest.u.Pointer.size            = ShflStringSizeOfBuffer(pDestPath);
     data.dest.u.Pointer.u.linearAddr    = (uintptr_t)pDestPath;
 
     data.flags.type                     = VMMDevHGCMParmType_32bit;
     data.flags.u.value32                = flags;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallRename: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfRename: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
     if (RT_SUCCESS (rc))
-    {
         rc = data.callInfo.result;
-    }
     return rc;
 }
 
-DECLVBGL(int) vboxCallRead(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
+DECLVBGL(int) VbglR0SfRead(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile,
                            uint64_t offset, uint32_t *pcbBuffer, uint8_t *pBuffer, bool fLocked)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFRead data;
 
     VBOX_INIT_CALL(&data.callInfo, READ, pClient);
@@ -429,12 +353,9 @@ DECLVBGL(int) vboxCallRead(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
     data.buffer.u.Pointer.size          = *pcbBuffer;
     data.buffer.u.Pointer.u.linearAddr  = (uintptr_t)pBuffer;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallRead: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfRead: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
     {
         rc = data.callInfo.result;
         *pcbBuffer = data.cb.u.value32;
@@ -442,9 +363,8 @@ DECLVBGL(int) vboxCallRead(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
     return rc;
 }
 
-DECLVBGL(int) VbglR0SharedFolderReadPageList(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
-                                             uint64_t offset, uint32_t *pcbBuffer,
-                                             uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages)
+DECLVBGL(int) VbglR0SfReadPageList(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer,
+                                   uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages)
 {
     uint32_t            cbToRead  = *pcbBuffer;
     uint32_t            cbData    = (uint32_t)(sizeof(VBoxSFRead) + RT_UOFFSETOF(HGCMPageListInfo, aPages[cPages]));
@@ -478,7 +398,8 @@ DECLVBGL(int) VbglR0SharedFolderReadPageList(PVBSFCLIENT pClient, PVBSFMAP pMap,
         pPgLst->aPages[iPage] = paPages[iPage];
 
     rc = VbglHGCMCall(pClient->handle, &pData->callInfo, cbData);
-    if (RT_SUCCESS (rc))
+/*    Log(("VBOXSF: VbglR0SfReadPageList: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
     {
         rc = pData->callInfo.result;
         *pcbBuffer = pData->cb.u.value32;
@@ -488,11 +409,10 @@ DECLVBGL(int) VbglR0SharedFolderReadPageList(PVBSFCLIENT pClient, PVBSFMAP pMap,
     return rc;
 }
 
-DECLVBGL(int) vboxCallWrite(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
+DECLVBGL(int) VbglR0SfWrite(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile,
                             uint64_t offset, uint32_t *pcbBuffer, uint8_t *pBuffer, bool fLocked)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFWrite data;
 
     VBOX_INIT_CALL(&data.callInfo, WRITE, pClient);
@@ -506,16 +426,13 @@ DECLVBGL(int) vboxCallWrite(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile
     data.offset.u.value64               = offset;
     data.cb.type                        = VMMDevHGCMParmType_32bit;
     data.cb.u.value32                   = *pcbBuffer;
-    data.buffer.type                    = (fLocked) ? VMMDevHGCMParmType_LinAddr_Locked_In : VMMDevHGCMParmType_LinAddr_In;
+    data.buffer.type                    = fLocked ? VMMDevHGCMParmType_LinAddr_Locked_In : VMMDevHGCMParmType_LinAddr_In;
     data.buffer.u.Pointer.size          = *pcbBuffer;
     data.buffer.u.Pointer.u.linearAddr  = (uintptr_t)pBuffer;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallWrite: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfWrite: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
     {
         rc = data.callInfo.result;
         *pcbBuffer = data.cb.u.value32;
@@ -523,7 +440,8 @@ DECLVBGL(int) vboxCallWrite(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile
     return rc;
 }
 
-DECLVBGL(int) VbglR0SfWritePhysCont(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer, RTCCPHYS PhysBuffer)
+DECLVBGL(int) VbglR0SfWritePhysCont(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset,
+                                    uint32_t *pcbBuffer, RTCCPHYS PhysBuffer)
 {
     uint32_t            cbToWrite = *pcbBuffer;
     uint32_t            cPages    = RT_ALIGN_32((PhysBuffer & PAGE_OFFSET_MASK) + cbToWrite, PAGE_SIZE) >> PAGE_SHIFT;
@@ -558,8 +476,9 @@ DECLVBGL(int) VbglR0SfWritePhysCont(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHAND
     for (iPage = 0; iPage < cPages; iPage++, PhysBuffer += PAGE_SIZE)
         pPgLst->aPages[iPage] = PhysBuffer;
 
-    rc = VbglHGCMCall (pClient->handle, &pData->callInfo, cbData);
-    if (RT_SUCCESS (rc))
+    rc = VbglHGCMCall(pClient->handle, &pData->callInfo, cbData);
+/*    Log(("VBOXSF: VbglR0SfWritePhysCont: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
     {
         rc = pData->callInfo.result;
         *pcbBuffer = pData->cb.u.value32;
@@ -570,9 +489,8 @@ DECLVBGL(int) VbglR0SfWritePhysCont(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHAND
 
 }
 
-DECLVBGL(int) VbglR0SharedFolderWritePageList(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
-                                              uint64_t offset, uint32_t *pcbBuffer,
-                                              uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages)
+DECLVBGL(int) VbglR0SfWritePageList(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer,
+                                    uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages)
 {
     uint32_t            cbToWrite = *pcbBuffer;
     uint32_t            cbData    = (uint32_t)(sizeof(VBoxSFWrite) + RT_UOFFSETOF(HGCMPageListInfo, aPages[cPages]));
@@ -605,8 +523,9 @@ DECLVBGL(int) VbglR0SharedFolderWritePageList(PVBSFCLIENT pClient, PVBSFMAP pMap
     for (iPage = 0; iPage < cPages; iPage++)
         pPgLst->aPages[iPage] = paPages[iPage];
 
-    rc = VbglHGCMCall (pClient->handle, &pData->callInfo, cbData);
-    if (RT_SUCCESS (rc))
+    rc = VbglHGCMCall(pClient->handle, &pData->callInfo, cbData);
+/*    Log(("VBOXSF: VbglR0SfWritePageList: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
     {
         rc = pData->callInfo.result;
         *pcbBuffer = pData->cb.u.value32;
@@ -616,10 +535,9 @@ DECLVBGL(int) VbglR0SharedFolderWritePageList(PVBSFCLIENT pClient, PVBSFMAP pMap
     return rc;
 }
 
-DECLVBGL(int) vboxCallFlush(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile)
+DECLVBGL(int) VbglR0SfFlush(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFFlush data;
 
     VBOX_INIT_CALL(&data.callInfo, FLUSH, pClient);
@@ -630,21 +548,16 @@ DECLVBGL(int) vboxCallFlush(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile
     data.handle.type                    = VMMDevHGCMParmType_64bit;
     data.handle.u.value64               = hFile;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallFlush: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
-    {
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfFlush: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
         rc = data.callInfo.result;
-    }
     return rc;
 }
 
-DECLVBGL(int) vboxCallDirInfo (
-    PVBSFCLIENT pClient,
-    PVBSFMAP pMap,
+DECLVBGL(int) VbglR0SfDirInfo(
+    PVBGLSFCLIENT pClient,
+    PVBGLSFMAP pMap,
     SHFLHANDLE hFile,
     PSHFLSTRING ParsedPath,
     uint32_t flags,
@@ -653,8 +566,7 @@ DECLVBGL(int) vboxCallDirInfo (
     PSHFLDIRINFO pBuffer,
     uint32_t *pcFiles)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFList data;
 
     VBOX_INIT_CALL(&data.callInfo, LIST, pClient);
@@ -669,8 +581,7 @@ DECLVBGL(int) vboxCallDirInfo (
     data.cb.type                        = VMMDevHGCMParmType_32bit;
     data.cb.u.value32                   = *pcbBuffer;
     data.path.type                      = VMMDevHGCMParmType_LinAddr_In;
-    data.path.u.Pointer.size            =
-        (ParsedPath) ? ShflStringSizeOfBuffer(ParsedPath) : 0;
+    data.path.u.Pointer.size            = ParsedPath ? ShflStringSizeOfBuffer(ParsedPath) : 0;
     data.path.u.Pointer.u.linearAddr    = (uintptr_t) ParsedPath;
 
     data.buffer.type                    = VMMDevHGCMParmType_LinAddr_Out;
@@ -682,25 +593,19 @@ DECLVBGL(int) vboxCallDirInfo (
     data.cFiles.type                    = VMMDevHGCMParmType_32bit;
     data.cFiles.u.value32               = 0; /* out parameters only */
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallDirInfo: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
-    {
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfDirInfo: rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
         rc = data.callInfo.result;
-    }
     *pcbBuffer = data.cb.u.value32;
     *pcFiles   = data.cFiles.u.value32;
     return rc;
 }
 
-DECLVBGL(int) vboxCallFSInfo(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
+DECLVBGL(int) VbglR0SfFsInfo(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile,
                              uint32_t flags, uint32_t *pcbBuffer, PSHFLDIRINFO pBuffer)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFInformation data;
 
     VBOX_INIT_CALL(&data.callInfo, INFORMATION, pClient);
@@ -718,12 +623,9 @@ DECLVBGL(int) vboxCallFSInfo(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFil
     data.info.u.Pointer.size            = *pcbBuffer;
     data.info.u.Pointer.u.linearAddr    = (uintptr_t)pBuffer;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallFileInfo: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
-    if (RT_SUCCESS (rc))
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfFsInfo: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
     {
         rc = data.callInfo.result;
         *pcbBuffer = data.cb.u.value32;
@@ -731,11 +633,10 @@ DECLVBGL(int) vboxCallFSInfo(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFil
     return rc;
 }
 
-DECLVBGL(int) vboxCallLock(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
+DECLVBGL(int) VbglR0SfLock(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, SHFLHANDLE hFile,
                            uint64_t offset, uint64_t cbSize, uint32_t fLock)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFLock data;
 
     VBOX_INIT_CALL(&data.callInfo, LOCK, pClient);
@@ -753,38 +654,29 @@ DECLVBGL(int) vboxCallLock(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
     data.flags.type                     = VMMDevHGCMParmType_32bit;
     data.flags.u.value32                = fLock;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallLock: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfLock: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
     if (RT_SUCCESS (rc))
-    {
         rc = data.callInfo.result;
-    }
     return rc;
 }
 
-DECLVBGL(int) vboxCallSetUtf8 (PVBSFCLIENT pClient)
+DECLVBGL(int) VbglR0SfSetUtf8(PVBGLSFCLIENT pClient)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxGuestHGCMCallInfo callInfo;
 
-    VBOX_INIT_CALL (&callInfo, SET_UTF8, pClient);
-    rc = VbglHGCMCall (pClient->handle, &callInfo, sizeof (callInfo));
-    if (RT_SUCCESS (rc))
-    {
+    VBOX_INIT_CALL(&callInfo, SET_UTF8, pClient);
+    rc = VbglHGCMCall(pClient->handle, &callInfo, sizeof(callInfo));
+/*    Log(("VBOXSF: VbglR0SfSetUtf8: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
         rc = callInfo.result;
-    }
     return rc;
 }
 
-DECLVBGL(int) vboxReadLink (PVBSFCLIENT pClient, PVBSFMAP pMap, PSHFLSTRING pParsedPath,
-                            uint32_t cbBuffer, uint8_t *pBuffer)
+DECLVBGL(int) VbglR0SfReadLink(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pParsedPath, uint32_t cbBuffer, uint8_t *pBuffer)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFReadLink data;
 
     VBOX_INIT_CALL(&data.callInfo, READLINK, pClient);
@@ -800,23 +692,17 @@ DECLVBGL(int) vboxReadLink (PVBSFCLIENT pClient, PVBSFMAP pMap, PSHFLSTRING pPar
     data.buffer.u.Pointer.size          = cbBuffer;
     data.buffer.u.Pointer.u.linearAddr  = (uintptr_t)pBuffer;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallReadline: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfReadLink: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
     if (RT_SUCCESS (rc))
-    {
         rc = data.callInfo.result;
-    }
     return rc;
 }
 
-DECLVBGL(int) vboxCallSymlink (PVBSFCLIENT pClient, PVBSFMAP pMap, PSHFLSTRING pNewPath, PSHFLSTRING pOldPath,
-                               PSHFLFSOBJINFO pBuffer)
+DECLVBGL(int) VbglR0SfSymlink(PVBGLSFCLIENT pClient, PVBGLSFMAP pMap, PSHFLSTRING pNewPath, PSHFLSTRING pOldPath,
+                              PSHFLFSOBJINFO pBuffer)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxSFSymlink data;
 
     VBOX_INIT_CALL(&data.callInfo, SYMLINK, pClient);
@@ -836,30 +722,23 @@ DECLVBGL(int) vboxCallSymlink (PVBSFCLIENT pClient, PVBSFMAP pMap, PSHFLSTRING p
     data.info.u.Pointer.size            = sizeof(SHFLFSOBJINFO);
     data.info.u.Pointer.u.linearAddr    = (uintptr_t)pBuffer;
 
-    rc = VbglHGCMCall (pClient->handle, &data.callInfo, sizeof (data));
-
-/*    Log(("VBOXSF: VBoxSF::vboxCallSymlink: "
-         "VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result));
-*/
+    rc = VbglHGCMCall(pClient->handle, &data.callInfo, sizeof(data));
+/*    Log(("VBOXSF: VbglR0SfSymlink: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
     if (RT_SUCCESS (rc))
-    {
         rc = data.callInfo.result;
-    }
     return rc;
 }
 
-DECLVBGL(int) vboxCallSetSymlinks (PVBSFCLIENT pClient)
+DECLVBGL(int) VbglR0SfSetSymlinks(PVBGLSFCLIENT pClient)
 {
-    int rc = VINF_SUCCESS;
-
+    int rc;
     VBoxGuestHGCMCallInfo callInfo;
 
-    VBOX_INIT_CALL (&callInfo, SET_SYMLINKS, pClient);
-    rc = VbglHGCMCall (pClient->handle, &callInfo, sizeof (callInfo));
-    if (RT_SUCCESS (rc))
-    {
+    VBOX_INIT_CALL(&callInfo, SET_SYMLINKS, pClient);
+    rc = VbglHGCMCall(pClient->handle, &callInfo, sizeof(callInfo));
+/*    Log(("VBOXSF: VbglR0SfSetSymlinks: VbglHGCMCall rc = %#x, result = %#x\n", rc, data.callInfo.result)); */
+    if (RT_SUCCESS(rc))
         rc = callInfo.result;
-    }
     return rc;
 }
 
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.h b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.h
deleted file mode 100644
index 824eac5..0000000
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/* $Id: VBoxGuestR0LibSharedFolders.h $ */
-/** @file
- * VBoxGuestLib - Central calls header.
- */
-
-/*
- * 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.
- *
- * 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 ___VBoxGuestLib_VBoxGuestR0LibSharedFolders_h
-#define ___VBoxGuestLib_VBoxGuestR0LibSharedFolders_h
-
-#include <VBox/VBoxGuestLib.h>
-#ifndef _NTIFS_
-# ifdef RT_OS_WINDOWS
-#  undef PAGE_SIZE
-#  undef PAGE_SHIFT
-#  if (_MSC_VER >= 1400) && !defined(VBOX_WITH_PATCHED_DDK)
-#   include <iprt/asm.h>
-#   define _InterlockedExchange           _InterlockedExchange_StupidDDKvsCompilerCrap
-#   define _InterlockedExchangeAdd        _InterlockedExchangeAdd_StupidDDKvsCompilerCrap
-#   define _InterlockedCompareExchange    _InterlockedCompareExchange_StupidDDKvsCompilerCrap
-#   define _InterlockedAddLargeStatistic  _InterlockedAddLargeStatistic_StupidDDKvsCompilerCrap
-#   pragma warning(disable : 4163)
-    RT_C_DECLS_BEGIN
-#   include <ntddk.h>
-    RT_C_DECLS_END
-#   pragma warning(default : 4163)
-#   undef  _InterlockedExchange
-#   undef  _InterlockedExchangeAdd
-#   undef  _InterlockedCompareExchange
-#   undef  _InterlockedAddLargeStatistic
-#  else
-    RT_C_DECLS_BEGIN
-#   include <ntddk.h>
-    RT_C_DECLS_END
-#  endif
-# endif
-#endif
-
-#if defined(RT_OS_WINDOWS) && 0
-/** @todo remove this legacy and use VBox/log.h and/or iprt/log.h. */
-/* => Done.  The next person who needs logging in Windows guests will have the
- *    honour of making it work. */
-# ifdef DEBUG
-#  define LOG_ENABLED
-# endif
-# include "VBoxGuestLog.h"
-#endif
-#if defined(RT_OS_WINDOWS)
-# include <VBox/log.h>
-#endif
-
-#include <iprt/assert.h>
-#define ASSERTVBSF AssertRelease
-
-#include <VBox/shflsvc.h>
-
-typedef struct _VBSFCLIENT
-{
-    uint32_t ulClientID;
-    VBGLHGCMHANDLE handle;
-} VBSFCLIENT;
-typedef VBSFCLIENT *PVBSFCLIENT;
-
-typedef struct _VBSFMAP
-{
-    SHFLROOT root;
-} VBSFMAP, *PVBSFMAP;
-
-
-#define VBSF_DRIVE_LETTER_FIRST   L'A'
-#define VBSF_DRIVE_LETTER_LAST    L'Z'
-
-#define VBSF_MAX_DRIVES           (VBSF_DRIVE_LETTER_LAST - VBSF_DRIVE_LETTER_FIRST)
-
-/* Poller thread flags. */
-#define VBSF_TF_NONE             (0x0000)
-#define VBSF_TF_STARTED          (0x0001)
-#define VBSF_TF_TERMINATE        (0x0002)
-#define VBSF_TF_START_PROCESSING (0x0004)
-
-#define DRIVE_FLAG_WORKING         (0x1)
-#define DRIVE_FLAG_LOCKED          (0x2)
-#define DRIVE_FLAG_WRITE_PROTECTED (0x4)
-
-#ifdef RT_OS_WINDOWS
-/** Device extension structure for each drive letter we created. */
-typedef struct _VBSFDRIVE
-{
-    /*  A pointer to the Driver object we created for the drive. */
-    PDEVICE_OBJECT pDeviceObject;
-
-    /** Root handle to access the drive. */
-    SHFLROOT root;
-
-    /** Informational string - the resource name on host. */
-    WCHAR awcNameHost[256];
-
-    /** Guest drive letter. */
-    WCHAR wcDriveLetter;
-
-    /** DRIVE_FLAG_* */
-    uint32_t u32DriveFlags;
-
-    /** Head of FCB list. */
-    LIST_ENTRY FCBHead;
-
-    /* Synchronise requests directed to the drive. */
-    ERESOURCE DriveResource;
-} VBSFDRIVE;
-typedef VBSFDRIVE *PVBSFDRIVE;
-#endif /* RT_OS_WINDOWS */
-
-/* forward decl */
-struct _MRX_VBOX_DEVICE_EXTENSION;
-typedef struct _MRX_VBOX_DEVICE_EXTENSION *PMRX_VBOX_DEVICE_EXTENSION;
-
-DECLVBGL(int)  vboxInit (void);
-DECLVBGL(void) vboxUninit (void);
-DECLVBGL(int)  vboxConnect (PVBSFCLIENT pClient);
-DECLVBGL(void) vboxDisconnect (PVBSFCLIENT pClient);
-
-DECLVBGL(int) vboxCallQueryMappings (PVBSFCLIENT pClient, SHFLMAPPING paMappings[], uint32_t *pcMappings);
-
-DECLVBGL(int) vboxCallQueryMapName (PVBSFCLIENT pClient, SHFLROOT root, SHFLSTRING *pString, uint32_t size);
-
-/**
- * Create a new file or folder or open an existing one in a shared folder.  Proxies
- * to vbsfCreate in the host shared folder service.
- *
- * @returns IPRT status code, but see note below
- * @param   pClient      Host-guest communication connection
- * @param   pMap         The mapping for the shared folder in which the file
- *                       or folder is to be created
- * @param   pParsedPath  The path of the file or folder relative to the shared
- *                       folder
- * @param   pCreateParms Parameters for file/folder creation.  See the
- *                       structure description in shflsvc.h
- * @retval  pCreateParms See the structure description in shflsvc.h
- *
- * @note This function reports errors as follows.  The return value is always
- *       VINF_SUCCESS unless an exceptional condition occurs - out of
- *       memory, invalid arguments, etc.  If the file or folder could not be
- *       opened or created, pCreateParms->Handle will be set to
- *       SHFL_HANDLE_NIL on return.  In this case the value in
- *       pCreateParms->Result provides information as to why (e.g.
- *       SHFL_FILE_EXISTS).  pCreateParms->Result is also set on success
- *       as additional information.
- */
-DECLVBGL(int) vboxCallCreate (PVBSFCLIENT pClient, PVBSFMAP pMap, PSHFLSTRING pParsedPath, PSHFLCREATEPARMS pCreateParms);
-
-DECLVBGL(int) vboxCallClose (PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE Handle);
-DECLVBGL(int) vboxCallRemove (PVBSFCLIENT pClient, PVBSFMAP pMap, PSHFLSTRING pParsedPath, uint32_t flags);
-DECLVBGL(int) vboxCallRename (PVBSFCLIENT pClient, PVBSFMAP pMap, PSHFLSTRING pSrcPath, PSHFLSTRING pDestPath, uint32_t flags);
-DECLVBGL(int) vboxCallFlush (PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile);
-
-DECLVBGL(int) vboxCallRead (PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer, uint8_t *pBuffer, bool fLocked);
-DECLVBGL(int) VbglR0SharedFolderReadPageList(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
-                                             uint64_t offset, uint32_t *pcbBuffer,
-                                             uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages);
-DECLVBGL(int) vboxCallWrite (PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer, uint8_t *pBuffer, bool fLocked);
-DECLVBGL(int) VbglR0SfWritePhysCont(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint32_t *pcbBuffer, RTCCPHYS PhysBuffer);
-DECLVBGL(int) VbglR0SharedFolderWritePageList(PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,
-                                              uint64_t offset, uint32_t *pcbBuffer,
-                                              uint16_t offFirstPage, uint16_t cPages, RTGCPHYS64 *paPages);
-
-DECLVBGL(int) vboxCallLock (PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile, uint64_t offset, uint64_t cbSize, uint32_t fLock);
-
-DECLVBGL(int) vboxCallDirInfo (PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile,PSHFLSTRING ParsedPath, uint32_t flags,
-                               uint32_t index, uint32_t *pcbBuffer, PSHFLDIRINFO pBuffer, uint32_t *pcFiles);
-DECLVBGL(int) vboxCallFSInfo (PVBSFCLIENT pClient, PVBSFMAP pMap, SHFLHANDLE hFile, uint32_t flags, uint32_t *pcbBuffer, PSHFLDIRINFO pBuffer);
-
-DECLVBGL(int) vboxCallMapFolder (PVBSFCLIENT pClient, PSHFLSTRING szFolderName, PVBSFMAP pMap);
-DECLVBGL(int) vboxCallUnmapFolder (PVBSFCLIENT pClient, PVBSFMAP pMap);
-DECLVBGL(int) vboxCallSetUtf8 (PVBSFCLIENT pClient);
-
-DECLVBGL(int) vboxReadLink (PVBSFCLIENT pClient, PVBSFMAP pMap, PSHFLSTRING ParsedPath, uint32_t pcbBuffer, uint8_t *pBuffer);
-DECLVBGL(int) vboxCallSymlink (PVBSFCLIENT pClient, PVBSFMAP pMap, PSHFLSTRING pNewPath, PSHFLSTRING pOldPath, PSHFLFSOBJINFO pBuffer);
-DECLVBGL(int) vboxCallSetSymlinks (PVBSFCLIENT pClient);
-
-#endif /* !___VBoxGuestLib_VBoxGuestR0LibSharedFolders_h */
-
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAdditions.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAdditions.cpp
index 106df03..4837f6e 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAdditions.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAdditions.cpp
@@ -29,190 +29,185 @@
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
 #include <iprt/mem.h>
+#include <iprt/path.h>
 #include <iprt/string.h>
 #include <VBox/log.h>
 #include <VBox/version.h>
 #include "VBGLR3Internal.h"
 
 
-/**
- * Fallback for VbglR3GetAdditionsVersion.
- */
-static int vbglR3GetAdditionsCompileTimeVersion(char **ppszVer, char **ppszVerEx, char **ppszRev)
-{
-    int rc = VINF_SUCCESS;
-    if (ppszVer)
-        rc = RTStrDupEx(ppszVer, VBOX_VERSION_STRING_RAW);
-    if (RT_SUCCESS(rc))
-    {
-        if (ppszVerEx)
-            rc = RTStrDupEx(ppszVerEx, VBOX_VERSION_STRING);
-        if (RT_SUCCESS(rc))
-        {
-            if (ppszRev)
-            {
-#if 0
-                char szRev[64];
-                RTStrPrintf(szRev, sizeof(szRev), "%d", VBOX_SVN_REV);
-                rc = RTStrDupEx(ppszRev, szRev);
-#else
-                rc = RTStrDupEx(ppszRev, RT_XSTR(VBOX_SVN_REV));
-#endif
-            }
-            if (RT_SUCCESS(rc))
-                return VINF_SUCCESS;
-
-            /* bail out: */
-        }
-        if (ppszVerEx)
-        {
-            RTStrFree(*ppszVerEx);
-            *ppszVerEx = NULL;
-        }
-    }
-    if (ppszVer)
-    {
-        RTStrFree(*ppszVer);
-        *ppszVer = NULL;
-    }
-    return rc;
-}
 
 #ifdef RT_OS_WINDOWS
 
 /**
- * Looks up the storage path handle (registry).
+ * Opens the "VirtualBox Guest Additions" registry key.
  *
- * @returns IPRT status value
- * @param   hKey        Receives storage path handle on success.
- *                      The returned handle must be closed by vbglR3CloseAdditionsWinStoragePath().
+ * @returns IPRT status code
+ * @param   phKey       Receives key handle on success. The returned handle must
+ *                      be closed by calling vbglR3WinCloseRegKey.
  */
-static int vbglR3QueryAdditionsWinStoragePath(PHKEY phKey)
+static int vbglR3WinOpenAdditionRegisterKey(PHKEY phKey)
 {
     /*
-     * Try get the *installed* version first.
+     * Current vendor first.  We keep the older ones just for the case that
+     * the caller isn't actually installed yet (no real use case AFAIK).
      */
-    LONG r;
-
-    /* Check the built in vendor path first. */
-    char szPath[255];
-    RTStrPrintf(szPath, sizeof(szPath), "SOFTWARE\\%s\\VirtualBox Guest Additions", VBOX_VENDOR_SHORT);
-    r = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szPath, 0, KEY_READ, phKey);
-# ifdef RT_ARCH_AMD64
-    if (r != ERROR_SUCCESS)
-    {
-        /* Check Wow6432Node. */
-        RTStrPrintf(szPath, sizeof(szPath), "SOFTWARE\\Wow6432Node\\%s\\VirtualBox Guest Additions", VBOX_VENDOR_SHORT);
-        r = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szPath, 0, KEY_READ, phKey);
-    }
-# endif
-
-    /* Check the "Sun" path first. */
-    if (r != ERROR_SUCCESS)
+    static PCRTUTF16 s_apwszKeys[] =
     {
-        r = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Sun\\VirtualBox Guest Additions", 0, KEY_READ, phKey);
-# ifdef RT_ARCH_AMD64
-        if (r != ERROR_SUCCESS)
-        {
-            /* Check Wow6432Node (for new entries). */
-            r = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wow6432Node\\Sun\\VirtualBox Guest Additions", 0, KEY_READ, phKey);
-        }
-# endif
-    }
-
-    /* Still no luck? Then try the old "Sun xVM" paths ... */
-    if (r != ERROR_SUCCESS)
+        L"SOFTWARE\\" RT_LSTR(VBOX_VENDOR_SHORT) L"\\VirtualBox Guest Additions",
+#ifdef RT_ARCH_AMD64
+        L"SOFTWARE\\Wow6432Node\\" RT_LSTR(VBOX_VENDOR_SHORT) L"\\VirtualBox Guest Additions",
+#endif
+        L"SOFTWARE\\Sun\\VirtualBox Guest Additions",
+#ifdef RT_ARCH_AMD64
+        L"SOFTWARE\\Wow6432Node\\Sun\\VirtualBox Guest Additions",
+#endif
+        L"SOFTWARE\\Sun\\xVM VirtualBox Guest Additions",
+#ifdef RT_ARCH_AMD64
+        L"SOFTWARE\\Wow6432Node\\Sun\\xVM VirtualBox Guest Additions",
+#endif
+    };
+    int rc = VERR_NOT_FOUND;
+    for (uint32_t i = 0; i < RT_ELEMENTS(s_apwszKeys); i++)
     {
-        r = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Sun\\xVM VirtualBox Guest Additions", 0, KEY_READ, phKey);
-# ifdef RT_ARCH_AMD64
-        if (r != ERROR_SUCCESS)
-        {
-            /* Check Wow6432Node (for new entries). */
-            r = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wow6432Node\\Sun\\xVM VirtualBox Guest Additions", 0, KEY_READ, phKey);
-        }
-# endif
+        LSTATUS lrc = RegOpenKeyExW(HKEY_LOCAL_MACHINE, s_apwszKeys[i], 0 /* ulOptions*/, KEY_READ, phKey);
+        if (lrc == ERROR_SUCCESS)
+            return VINF_SUCCESS;
+        if (i == 0)
+            rc = RTErrConvertFromWin32(lrc);
     }
-    return RTErrConvertFromWin32(r);
+    return rc;
 }
 
 
 /**
- * Closes the storage path handle (registry).
+ * Closes the registry handle returned by vbglR3WinOpenAdditionRegisterKey().
  *
- * @returns IPRT status value
- * @param   hKey        Handle to close, retrieved by
- *                      vbglR3QueryAdditionsWinStoragePath().
+ * @returns @a rc or IPRT failure status.
+ * @param   hKey        Handle to close.
+ * @param   rc          The current IPRT status of the operation.  Error
+ *                      condition takes precedence over errors from this call.
  */
-static int vbglR3CloseAdditionsWinStoragePath(HKEY hKey)
+static int vbglR3WinCloseRegKey(HKEY hKey, int rc)
 {
-    return RTErrConvertFromWin32(RegCloseKey(hKey));
+    LSTATUS lrc = RegCloseKey(hKey);
+    if (   lrc == ERROR_SUCCESS
+        || RT_FAILURE(rc))
+        return rc;
+    return RTErrConvertFromWin32(lrc);
 }
 
-#endif /* RT_OS_WINDOWS */
 
 /**
- * Reports the Guest Additions status of a certain facility to the host.
+ * Queries a string value from a specified registry key.
  *
- * @returns IPRT status value
- * @param   enmFacility     The facility to report the status on.
- * @param   enmStatus       The new status of the facility.
- * @param   fReserved       Reserved for future use (what?).
+ * @return  IPRT status code.
+ * @param   hKey                Handle of registry key to use.
+ * @param   pwszValueName       The the name of the value to query.
+ * @param   cbHint              Size hint.
+ * @param   ppszValue           Where to return value string on success. Free
+ *                              with RTStrFree.
  */
-VBGLR3DECL(int) VbglR3ReportAdditionsStatus(VBoxGuestFacilityType enmFacility,
-                                            VBoxGuestFacilityStatus enmStatusCurrent,
-                                            uint32_t fReserved)
+static int vbglR3QueryRegistryString(HKEY hKey, PCRTUTF16 pwszValueName, uint32_t cbHint, char **ppszValue)
 {
-    VMMDevReportGuestStatus Report;
-    RT_ZERO(Report);
-    int rc = vmmdevInitRequest((VMMDevRequestHeader*)&Report, VMMDevReq_ReportGuestStatus);
-    if (RT_SUCCESS(rc))
-    {
-        Report.guestStatus.facility = enmFacility;
-        Report.guestStatus.status   = enmStatusCurrent;
-        Report.guestStatus.flags    = fReserved;
+    AssertPtr(pwszValueName);
+    AssertPtrReturn(ppszValue, VERR_INVALID_POINTER);
 
-        rc = vbglR3GRPerform(&Report.header);
+    /*
+     * First try.
+     */
+    int rc;
+    DWORD dwType;
+    DWORD cbTmp = cbHint;
+    PRTUTF16 pwszTmp = (PRTUTF16)RTMemTmpAllocZ(cbTmp + sizeof(RTUTF16));
+    if (pwszTmp)
+    {
+        LSTATUS lrc = RegQueryValueExW(hKey, pwszValueName, NULL, &dwType, (BYTE *)pwszTmp, &cbTmp);
+        if (lrc == ERROR_MORE_DATA)
+        {
+            /*
+             * Allocate larger buffer and try again.
+             */
+            RTMemTmpFree(pwszTmp);
+            cbTmp += 16;
+            pwszTmp = (PRTUTF16)RTMemTmpAllocZ(cbTmp + sizeof(RTUTF16));
+            if (!pwszTmp)
+            {
+                *ppszValue = NULL;
+                return VERR_NO_TMP_MEMORY;
+            }
+            lrc = RegQueryValueExW(hKey, pwszValueName, NULL, &dwType, (BYTE *)pwszTmp, &cbTmp);
+        }
+        if (lrc == ERROR_SUCCESS)
+        {
+            /*
+             * Check the type and convert to UTF-8.
+             */
+            if (dwType == REG_SZ)
+                rc = RTUtf16ToUtf8(pwszTmp, ppszValue);
+            else
+                rc = VERR_WRONG_TYPE;
+        }
+        else
+            rc = RTErrConvertFromWin32(lrc);
+        RTMemTmpFree(pwszTmp);
     }
+    else
+        rc = VERR_NO_TMP_MEMORY;
+    if (RT_SUCCESS(rc))
+        return rc;
+    *ppszValue = NULL;
     return rc;
 }
 
-#ifdef RT_OS_WINDOWS
+#endif /* RT_OS_WINDOWS */
+
 
 /**
- * Queries a string value from a specified registry key.
+ * Fallback for VbglR3GetAdditionsVersion.
  *
- * @return  IPRT status code.
- * @param   hKey                    Handle of registry key to use.
- * @param   pszValName              Value name to query value from.
- * @param   pszBuffer               Pointer to buffer which the queried string value gets stored into.
- * @param   cchBuffer               Size (in bytes) of buffer.
+ * @copydoc VbglR3GetAdditionsVersion
  */
-static int vbglR3QueryRegistryString(HKEY hKey, const char *pszValName, char *pszBuffer, size_t cchBuffer)
+static int vbglR3GetAdditionsCompileTimeVersion(char **ppszVer, char **ppszVerExt, char **ppszRev)
 {
-    AssertReturn(pszValName, VERR_INVALID_PARAMETER);
-    AssertReturn(pszBuffer, VERR_INVALID_POINTER);
-    AssertReturn(cchBuffer, VERR_INVALID_PARAMETER);
+    int rc = VINF_SUCCESS;
+    if (ppszVer)
+        rc = RTStrDupEx(ppszVer, VBOX_VERSION_STRING_RAW);
+    if (RT_SUCCESS(rc))
+    {
+        if (ppszVerExt)
+            rc = RTStrDupEx(ppszVerExt, VBOX_VERSION_STRING);
+        if (RT_SUCCESS(rc))
+        {
+            if (ppszRev)
+                rc = RTStrDupEx(ppszRev, RT_XSTR(VBOX_SVN_REV));
+            if (RT_SUCCESS(rc))
+                return VINF_SUCCESS;
 
-    int rc;
-    DWORD dwType;
-    DWORD dwSize = (DWORD)cchBuffer;
-    LONG lRet = RegQueryValueEx(hKey, pszValName, NULL, &dwType, (BYTE *)pszBuffer, &dwSize);
-    if (lRet == ERROR_SUCCESS)
-        rc = dwType == REG_SZ ? VINF_SUCCESS : VERR_INVALID_PARAMETER;
-    else
-        rc = RTErrConvertFromWin32(lRet);
+            /* bail out: */
+        }
+        if (ppszVerExt)
+        {
+            RTStrFree(*ppszVerExt);
+            *ppszVerExt = NULL;
+        }
+    }
+    if (ppszVer)
+    {
+        RTStrFree(*ppszVer);
+        *ppszVer = NULL;
+    }
     return rc;
 }
 
-#endif /* RT_OS_WINDOWS */
 
 /**
  * Retrieves the installed Guest Additions version and/or revision.
  *
- * @returns IPRT status value
+ * @returns IPRT status code
  * @param   ppszVer     Receives pointer of allocated raw version string
  *                      (major.minor.build). NULL is accepted. The returned
- *                      pointer must be freed using RTStrFree().*
+ *                      pointer must be freed using RTStrFree().
  * @param   ppszVerExt  Receives pointer of allocated full version string
  *                      (raw version + vendor suffix(es)). NULL is
  *                      accepted. The returned pointer must be freed using
@@ -235,62 +230,53 @@ VBGLR3DECL(int) VbglR3GetAdditionsVersion(char **ppszVer, char **ppszVerExt, cha
 
 #ifdef RT_OS_WINDOWS
     HKEY hKey;
-    int rc = vbglR3QueryAdditionsWinStoragePath(&hKey);
+    int rc = vbglR3WinOpenAdditionRegisterKey(&hKey);
     if (RT_SUCCESS(rc))
     {
         /*
          * Version.
          */
-        char szTemp[32];
         if (ppszVer)
-        {
-            rc = vbglR3QueryRegistryString(hKey, "Version", szTemp, sizeof(szTemp));
-            if (RT_SUCCESS(rc))
-                rc = RTStrDupEx(ppszVer, szTemp);
-        }
+            rc = vbglR3QueryRegistryString(hKey, L"Version", 64, ppszVer);
 
         if (   RT_SUCCESS(rc)
             && ppszVerExt)
-        {
-            rc = vbglR3QueryRegistryString(hKey, "VersionExt", szTemp, sizeof(szTemp));
-            if (RT_SUCCESS(rc))
-                rc = RTStrDupEx(ppszVerExt, szTemp);
-        }
+            rc = vbglR3QueryRegistryString(hKey, L"VersionExt", 128, ppszVerExt);
 
         /*
          * Revision.
          */
         if (   RT_SUCCESS(rc)
             && ppszRev)
-        {
-            rc = vbglR3QueryRegistryString(hKey, "Revision", szTemp, sizeof(szTemp));
-            if (RT_SUCCESS(rc))
-                rc = RTStrDupEx(ppszRev, szTemp);
-        }
+            rc = vbglR3QueryRegistryString(hKey, L"Revision", 64, ppszRev);
 
-        int rc2 = vbglR3CloseAdditionsWinStoragePath(hKey);
-        if (RT_SUCCESS(rc))
-            rc = rc2;
+        rc = vbglR3WinCloseRegKey(hKey, rc);
 
         /* Clean up allocated strings on error. */
         if (RT_FAILURE(rc))
         {
             if (ppszVer)
+            {
                 RTStrFree(*ppszVer);
+                *ppszVer = NULL;
+            }
             if (ppszVerExt)
+            {
                 RTStrFree(*ppszVerExt);
+                *ppszVerExt = NULL;
+            }
             if (ppszRev)
+            {
                 RTStrFree(*ppszRev);
+                *ppszRev = NULL;
+            }
         }
     }
+    /*
+     * No registry entries found, return the version string compiled into this binary.
+     */
     else
-    {
-        /*
-         * No registry entries found, return the version string compiled
-         * into this binary.
-         */
         rc = vbglR3GetAdditionsCompileTimeVersion(ppszVer, ppszVerExt, ppszRev);
-    }
     return rc;
 
 #else  /* !RT_OS_WINDOWS */
@@ -305,7 +291,7 @@ VBGLR3DECL(int) VbglR3GetAdditionsVersion(char **ppszVer, char **ppszVerExt, cha
 /**
  * Retrieves the installation path of Guest Additions.
  *
- * @returns IPRT status value
+ * @returns IPRT status code
  * @param   ppszPath    Receives pointer of allocated installation path string.
  *                      The returned pointer must be freed using
  *                      RTStrFree().
@@ -313,41 +299,19 @@ VBGLR3DECL(int) VbglR3GetAdditionsVersion(char **ppszVer, char **ppszVerExt, cha
 VBGLR3DECL(int) VbglR3GetAdditionsInstallationPath(char **ppszPath)
 {
     int rc;
+
 #ifdef RT_OS_WINDOWS
+    /*
+     * Get it from the registry.
+     */
     HKEY hKey;
-    rc = vbglR3QueryAdditionsWinStoragePath(&hKey);
+    rc = vbglR3WinOpenAdditionRegisterKey(&hKey);
     if (RT_SUCCESS(rc))
     {
-        /* Installation directory. */
-        DWORD dwType;
-        DWORD dwSize = _MAX_PATH * sizeof(char);
-        char *pszTmp = (char*)RTMemAlloc(dwSize + 1);
-        if (pszTmp)
-        {
-            LONG l = RegQueryValueEx(hKey, "InstallDir", NULL, &dwType, (BYTE*)(LPCTSTR)pszTmp, &dwSize);
-            if ((l != ERROR_SUCCESS) && (l != ERROR_FILE_NOT_FOUND))
-            {
-                rc = RTErrConvertFromNtStatus(l);
-            }
-            else
-            {
-                if (dwType == REG_SZ)
-                    rc = RTStrDupEx(ppszPath, pszTmp);
-                else
-                    rc = VERR_INVALID_PARAMETER;
-                if (RT_SUCCESS(rc))
-                {
-                    /* Flip slashes. */
-                    for (char *pszTmp2 = ppszPath[0]; *pszTmp2; ++pszTmp2)
-                        if (*pszTmp2 == '\\')
-                            *pszTmp2 = '/';
-                }
-            }
-            RTMemFree(pszTmp);
-        }
-        else
-            rc = VERR_NO_MEMORY;
-        rc = vbglR3CloseAdditionsWinStoragePath(hKey);
+        rc = vbglR3QueryRegistryString(hKey, L"InstallDir", _MAX_PATH * sizeof(RTUTF16), ppszPath);
+        if (RT_SUCCESS(rc))
+            RTPathChangeToUnixSlashes(*ppszPath, true /*fForce*/);
+        rc = vbglR3WinCloseRegKey(hKey, rc);
     }
 #else
     /** @todo implement me */
@@ -356,3 +320,29 @@ VBGLR3DECL(int) VbglR3GetAdditionsInstallationPath(char **ppszPath)
     return rc;
 }
 
+
+/**
+ * Reports the Guest Additions status of a certain facility to the host.
+ *
+ * @returns IPRT status code
+ * @param   enmFacility     The facility to report the status on.
+ * @param   enmStatus       The new status of the facility.
+ * @param   fReserved       Flags reserved for future hacks.
+ */
+VBGLR3DECL(int) VbglR3ReportAdditionsStatus(VBoxGuestFacilityType enmFacility, VBoxGuestFacilityStatus enmStatus,
+                                            uint32_t fReserved)
+{
+    VMMDevReportGuestStatus Report;
+    RT_ZERO(Report);
+    int rc = vmmdevInitRequest(&Report.header, VMMDevReq_ReportGuestStatus);
+    if (RT_SUCCESS(rc))
+    {
+        Report.guestStatus.facility = enmFacility;
+        Report.guestStatus.status   = enmStatus;
+        Report.guestStatus.flags    = fReserved;
+
+        rc = vbglR3GRPerform(&Report.header);
+    }
+    return rc;
+}
+
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAutoLogon.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAutoLogon.cpp
index 50a365f..923fe7f 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAutoLogon.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAutoLogon.cpp
@@ -52,8 +52,7 @@ VBGLR3DECL(int) VbglR3AutoLogonReportStatus(VBoxGuestFacilityStatus enmStatus)
     static VBoxGuestFacilityStatus s_enmLastStatus = VBoxGuestFacilityStatus_Inactive;
     if (s_enmLastStatus != VBoxGuestFacilityStatus_Failed)
     {
-        int rc = VbglR3ReportAdditionsStatus(VBoxGuestFacilityType_AutoLogon,
-                                             enmStatus, 0 /* Flags */);
+        int rc = VbglR3ReportAdditionsStatus(VBoxGuestFacilityType_AutoLogon, enmStatus, 0 /* Flags */);
         if (rc == VERR_NOT_SUPPORTED)
         {
             /*
@@ -62,8 +61,8 @@ VBGLR3DECL(int) VbglR3AutoLogonReportStatus(VBoxGuestFacilityStatus enmStatus)
              * guest property to have at least something.
              */
 #ifdef VBOX_WITH_GUEST_PROPS
-            uint32_t u32ClientId = 0;
-            rc = VbglR3GuestPropConnect(&u32ClientId);
+            HGCMCLIENTID idClient = 0;
+            rc = VbglR3GuestPropConnect(&idClient);
             if (RT_SUCCESS(rc))
             {
                 const char *pszStatus;
@@ -86,14 +85,14 @@ VBGLR3DECL(int) VbglR3AutoLogonReportStatus(VBoxGuestFacilityStatus enmStatus)
                      * (generally sufficient unless the guest misbehaves).
                      */
                     static const char s_szPath[] = "/VirtualBox/GuestInfo/OS/AutoLogonStatus";
-                    rc = VbglR3GuestPropWrite(u32ClientId, s_szPath, pszStatus, "TRANSRESET");
+                    rc = VbglR3GuestPropWrite(idClient, s_szPath, pszStatus, "TRANSRESET");
                     if (rc == VERR_PARSE_ERROR)
-                        rc = VbglR3GuestPropWrite(u32ClientId, s_szPath, pszStatus, "TRANSIENT");
+                        rc = VbglR3GuestPropWrite(idClient, s_szPath, pszStatus, "TRANSIENT");
                 }
                 else
                     rc = VERR_INVALID_PARAMETER;
 
-                VbglR3GuestPropDisconnect(u32ClientId);
+                VbglR3GuestPropDisconnect(idClient);
             }
 #endif
         }
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibBalloon.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibBalloon.cpp
index 36f4d53..e35cd5a 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibBalloon.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibBalloon.cpp
@@ -45,7 +45,7 @@ VBGLR3DECL(int) VbglR3MemBalloonRefresh(uint32_t *pcChunks, bool *pfHandleInR3)
     if (RT_SUCCESS(rc))
     {
         *pcChunks = Info.cBalloonChunks;
-        Assert(Info.fHandleInR3 == false || Info.fHandleInR3 == true ||  RT_FAILURE(rc));
+        Assert(Info.fHandleInR3 == (uint32_t)false || Info.fHandleInR3 == (uint32_t)true || RT_FAILURE(rc));
         *pfHandleInR3 = Info.fHandleInR3 != false;
     }
     return rc;
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibClipboard.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibClipboard.cpp
index 49ecad6..557d0f7 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibClipboard.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibClipboard.cpp
@@ -38,10 +38,10 @@
  * Connects to the clipboard service.
  *
  * @returns VBox status code
- * @param   pu32ClientId    Where to put the client id on success. The client id
+ * @param   pidClient       Where to put the client id on success. The client id
  *                          must be passed to all the other clipboard calls.
  */
-VBGLR3DECL(int) VbglR3ClipboardConnect(uint32_t *pu32ClientId)
+VBGLR3DECL(int) VbglR3ClipboardConnect(HGCMCLIENTID *pidClient )
 {
     VBoxGuestHGCMConnectInfo Info;
     Info.result = VERR_WRONG_ORDER;
@@ -55,7 +55,7 @@ VBGLR3DECL(int) VbglR3ClipboardConnect(uint32_t *pu32ClientId)
     {
         rc = Info.result;
         if (RT_SUCCESS(rc))
-            *pu32ClientId = Info.u32ClientID;
+            *pidClient = Info.u32ClientID;
     }
     if (rc == VERR_HGCM_SERVICE_NOT_FOUND)
         rc = VINF_PERMISSION_DENIED;
@@ -67,13 +67,13 @@ VBGLR3DECL(int) VbglR3ClipboardConnect(uint32_t *pu32ClientId)
  * Disconnect from the clipboard service.
  *
  * @returns VBox status code.
- * @param   u32ClientId     The client id returned by VbglR3ClipboardConnect().
+ * @param   idClient        The client id returned by VbglR3ClipboardConnect().
  */
-VBGLR3DECL(int) VbglR3ClipboardDisconnect(uint32_t u32ClientId)
+VBGLR3DECL(int) VbglR3ClipboardDisconnect(HGCMCLIENTID idClient)
 {
     VBoxGuestHGCMDisconnectInfo Info;
     Info.result = VERR_WRONG_ORDER;
-    Info.u32ClientID = u32ClientId;
+    Info.u32ClientID = idClient;
 
     int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_DISCONNECT, &Info, sizeof(Info));
     if (RT_SUCCESS(rc))
@@ -88,16 +88,16 @@ VBGLR3DECL(int) VbglR3ClipboardDisconnect(uint32_t u32ClientId)
  * This will block until a message becomes available.
  *
  * @returns VBox status code.
- * @param   u32ClientId     The client id returned by VbglR3ClipboardConnect().
+ * @param   idClient        The client id returned by VbglR3ClipboardConnect().
  * @param   pMsg            Where to store the message id.
  * @param   pfFormats       Where to store the format(s) the message applies to.
  */
-VBGLR3DECL(int) VbglR3ClipboardGetHostMsg(uint32_t u32ClientId, uint32_t *pMsg, uint32_t *pfFormats)
+VBGLR3DECL(int) VbglR3ClipboardGetHostMsg(HGCMCLIENTID idClient, uint32_t *pMsg, uint32_t *pfFormats)
 {
     VBoxClipboardGetHostMsg Msg;
 
     Msg.hdr.result = VERR_WRONG_ORDER;
-    Msg.hdr.u32ClientID = u32ClientId;
+    Msg.hdr.u32ClientID = idClient;
     Msg.hdr.u32Function = VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG;
     Msg.hdr.cParms = 2;
     VbglHGCMParmUInt32Set(&Msg.msg, 0);
@@ -135,18 +135,18 @@ VBGLR3DECL(int) VbglR3ClipboardGetHostMsg(uint32_t u32ClientId, uint32_t *pMsg,
  * @returns VBox status code.
  * @retval  VINF_BUFFER_OVERFLOW    If there is more data available than the caller provided buffer space for.
  *
- * @param   u32ClientId     The client id returned by VbglR3ClipboardConnect().
+ * @param   idClient        The client id returned by VbglR3ClipboardConnect().
  * @param   fFormat         The format we're requesting the data in.
  * @param   pv              Where to store the data.
  * @param   cb              The size of the buffer pointed to by pv.
  * @param   pcb             The actual size of the host clipboard data. May be larger than cb.
  */
-VBGLR3DECL(int) VbglR3ClipboardReadData(uint32_t u32ClientId, uint32_t fFormat, void *pv, uint32_t cb, uint32_t *pcb)
+VBGLR3DECL(int) VbglR3ClipboardReadData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb, uint32_t *pcb)
 {
     VBoxClipboardReadData Msg;
 
     Msg.hdr.result = VERR_WRONG_ORDER;
-    Msg.hdr.u32ClientID = u32ClientId;
+    Msg.hdr.u32ClientID = idClient;
     Msg.hdr.u32Function = VBOX_SHARED_CLIPBOARD_FN_READ_DATA;
     Msg.hdr.cParms = 3;
     VbglHGCMParmUInt32Set(&Msg.format, fFormat);
@@ -178,15 +178,15 @@ VBGLR3DECL(int) VbglR3ClipboardReadData(uint32_t u32ClientId, uint32_t fFormat,
  * Advertises guest clipboard formats to the host.
  *
  * @returns VBox status code.
- * @param   u32ClientId     The client id returned by VbglR3ClipboardConnect().
+ * @param   idClient        The client id returned by VbglR3ClipboardConnect().
  * @param   fFormats        The formats to advertise.
  */
-VBGLR3DECL(int) VbglR3ClipboardReportFormats(uint32_t u32ClientId, uint32_t fFormats)
+VBGLR3DECL(int) VbglR3ClipboardReportFormats(HGCMCLIENTID idClient, uint32_t fFormats)
 {
     VBoxClipboardFormats Msg;
 
     Msg.hdr.result = VERR_WRONG_ORDER;
-    Msg.hdr.u32ClientID = u32ClientId;
+    Msg.hdr.u32ClientID = idClient;
     Msg.hdr.u32Function = VBOX_SHARED_CLIPBOARD_FN_FORMATS;
     Msg.hdr.cParms = 1;
     VbglHGCMParmUInt32Set(&Msg.formats, fFormats);
@@ -205,16 +205,16 @@ VBGLR3DECL(int) VbglR3ClipboardReportFormats(uint32_t u32ClientId, uint32_t fFor
  * from the host.
  *
  * @returns VBox status code.
- * @param   u32ClientId     The client id returned by VbglR3ClipboardConnect().
+ * @param   idClient        The client id returned by VbglR3ClipboardConnect().
  * @param   fFormat         The format of the data.
  * @param   pv              The data.
  * @param   cb              The size of the data.
  */
-VBGLR3DECL(int) VbglR3ClipboardWriteData(uint32_t u32ClientId, uint32_t fFormat, void *pv, uint32_t cb)
+VBGLR3DECL(int) VbglR3ClipboardWriteData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb)
 {
     VBoxClipboardWriteData Msg;
     Msg.hdr.result = VERR_WRONG_ORDER;
-    Msg.hdr.u32ClientID = u32ClientId;
+    Msg.hdr.u32ClientID = idClient;
     Msg.hdr.u32Function = VBOX_SHARED_CLIPBOARD_FN_WRITE_DATA;
     Msg.hdr.cParms = 2;
     VbglHGCMParmUInt32Set(&Msg.format, fFormat);
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCpuHotPlug.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCpuHotPlug.cpp
index f0ba32e..491bda3 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCpuHotPlug.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCpuHotPlug.cpp
@@ -60,7 +60,7 @@ VBGLR3DECL(int) VbglR3CpuHotPlugInit(void)
  *
  * This will disable the CPU hot plugging events.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  */
 VBGLR3DECL(int) VbglR3CpuHotPlugTerm(void)
 {
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCredentials.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCredentials.cpp
index b229093..c3a937e 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCredentials.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibCredentials.cpp
@@ -111,7 +111,7 @@ VBGLR3DECL(int) VbglR3CredentialsRetrieve(char **ppszUser, char **ppszPassword,
  * @returns IPRT status value
  * @param   ppwszUser       Receives pointer of allocated user name string.
  *                          The returned pointer must be freed using VbglR3CredentialsDestroyUtf16().
- * @param   ppswzPassword   Receives pointer of allocated user password string.
+ * @param   ppwszPassword   Receives pointer of allocated user password string.
  *                          The returned pointer must be freed using VbglR3CredentialsDestroyUtf16().
  * @param   ppwszDomain     Receives pointer of allocated domain name string.
  *                          The returned pointer must be freed using VbglR3CredentialsDestroyUtf16().
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibDragAndDrop.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibDragAndDrop.cpp
index e4c50de..a5acceb 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibDragAndDrop.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibDragAndDrop.cpp
@@ -1482,7 +1482,7 @@ static int vbglR3DnDGHProcessURIMessages(PVBGLR3GUESTDNDCMDCTX pCtx,
         rc = vbglR3DnDGHSendDataInternal(pCtx, pvToSend, cbToSend,
                                          /* Include total bytes of all file paths,
                                           * file sizes etc. */
-                                         lstURI.TotalBytes());
+                                         (uint32_t)lstURI.TotalBytes());
     }
 
     if (RT_SUCCESS(rc))
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestCtrl.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestCtrl.cpp
index 21ca809..ee7611e 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestCtrl.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestCtrl.cpp
@@ -38,13 +38,9 @@
 
 #include "VBGLR3Internal.h"
 
-
-/*********************************************************************************************************************************
-*   Structures and Typedefs                                                                                                      *
-*********************************************************************************************************************************/
-
 using namespace guestControl;
 
+
 /**
  * Connects to the guest control service.
  *
@@ -283,9 +279,10 @@ VBGLR3DECL(int) VbglR3GuestCtrlCancelPendingWaits(uint32_t uClientId)
  *
  * @return  IPRT status code.
  * @param   pCtx                    Host context.
+ * @param   fFlags                  Some kind of flag. Figure it out yourself.
  ** @todo Docs!
  */
-VBGLR3DECL(int) VbglR3GuestCtrlSessionClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uFlags)
+VBGLR3DECL(int) VbglR3GuestCtrlSessionClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t fFlags)
 {
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
     AssertReturn(pCtx->uNumParms == 2, VERR_INVALID_PARAMETER);
@@ -298,7 +295,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlSessionClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_
     Msg.hdr.cParms      = pCtx->uNumParms;
 
     VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
-    VbglHGCMParmUInt32Set(&Msg.flags, uFlags);
+    VbglHGCMParmUInt32Set(&Msg.flags, fFlags);
 
     int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
     if (RT_SUCCESS(rc))
@@ -312,8 +309,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlSessionClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_
 }
 
 
-VBGLR3DECL(int) VbglR3GuestCtrlSessionNotify(PVBGLR3GUESTCTRLCMDCTX pCtx,
-                                             uint32_t uType, uint32_t uResult)
+VBGLR3DECL(int) VbglR3GuestCtrlSessionNotify(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t uType, uint32_t uResult)
 {
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
 
@@ -343,7 +339,6 @@ VBGLR3DECL(int) VbglR3GuestCtrlSessionNotify(PVBGLR3GUESTCTRLCMDCTX pCtx,
  * Retrieves the request to create a new guest session.
  *
  * @return  IPRT status code.
- * @param   pCtx                    Host context.
  ** @todo Docs!
  */
 VBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
@@ -351,7 +346,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
                                               char     *pszUser,     uint32_t  cbUser,
                                               char     *pszPassword, uint32_t  cbPassword,
                                               char     *pszDomain,   uint32_t  cbDomain,
-                                              uint32_t *puFlags,     uint32_t *puSessionID)
+                                              uint32_t *pfFlags,     uint32_t *pidSession)
 {
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
     AssertReturn(pCtx->uNumParms == 6, VERR_INVALID_PARAMETER);
@@ -360,7 +355,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
     AssertPtrReturn(pszUser, VERR_INVALID_POINTER);
     AssertPtrReturn(pszPassword, VERR_INVALID_POINTER);
     AssertPtrReturn(pszDomain, VERR_INVALID_POINTER);
-    AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
+    AssertPtrReturn(pfFlags, VERR_INVALID_POINTER);
 
     HGCMMsgSessionOpen Msg;
 
@@ -388,10 +383,10 @@ VBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
         {
             Msg.context.GetUInt32(&pCtx->uContextID);
             Msg.protocol.GetUInt32(puProtocol);
-            Msg.flags.GetUInt32(puFlags);
+            Msg.flags.GetUInt32(pfFlags);
 
-            if (puSessionID)
-                *puSessionID = VBOX_GUESTCTRL_CONTEXTID_GET_SESSION(pCtx->uContextID);
+            if (pidSession)
+                *pidSession = VBOX_GUESTCTRL_CONTEXTID_GET_SESSION(pCtx->uContextID);
         }
     }
 
@@ -403,15 +398,14 @@ VBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx,
  * Retrieves the request to terminate an existing guest session.
  *
  * @return  IPRT status code.
- * @param   pCtx                    Host context.
  ** @todo Docs!
  */
-VBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *puFlags, uint32_t *puSessionID)
+VBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint32_t *pfFlags, uint32_t *pidSession)
 {
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
     AssertReturn(pCtx->uNumParms == 2, VERR_INVALID_PARAMETER);
 
-    AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
+    AssertPtrReturn(pfFlags, VERR_INVALID_POINTER);
 
     HGCMMsgSessionClose Msg;
 
@@ -434,10 +428,10 @@ VBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint
         else
         {
             Msg.context.GetUInt32(&pCtx->uContextID);
-            Msg.flags.GetUInt32(puFlags);
+            Msg.flags.GetUInt32(pfFlags);
 
-            if (puSessionID)
-                *puSessionID = VBOX_GUESTCTRL_CONTEXTID_GET_SESSION(pCtx->uContextID);
+            if (pidSession)
+                *pidSession = VBOX_GUESTCTRL_CONTEXTID_GET_SESSION(pCtx->uContextID);
         }
     }
 
@@ -448,7 +442,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx, uint
 VBGLR3DECL(int) VbglR3GuestCtrlPathGetRename(PVBGLR3GUESTCTRLCMDCTX     pCtx,
                                              char     *pszSource,       uint32_t cbSource,
                                              char     *pszDest,         uint32_t cbDest,
-                                             uint32_t *puFlags)
+                                             uint32_t *pfFlags)
 {
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
     AssertReturn(pCtx->uNumParms == 4, VERR_INVALID_PARAMETER);
@@ -457,7 +451,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlPathGetRename(PVBGLR3GUESTCTRLCMDCTX     pCtx,
     AssertReturn(cbSource, VERR_INVALID_PARAMETER);
     AssertPtrReturn(pszDest, VERR_INVALID_POINTER);
     AssertReturn(cbDest, VERR_INVALID_PARAMETER);
-    AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
+    AssertPtrReturn(pfFlags, VERR_INVALID_POINTER);
 
     HGCMMsgPathRename Msg;
 
@@ -482,7 +476,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlPathGetRename(PVBGLR3GUESTCTRLCMDCTX     pCtx,
         else
         {
             Msg.context.GetUInt32(&pCtx->uContextID);
-            Msg.flags.GetUInt32(puFlags);
+            Msg.flags.GetUInt32(pfFlags);
         }
     }
     return rc;
@@ -500,7 +494,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlPathGetRename(PVBGLR3GUESTCTRLCMDCTX     pCtx,
  */
 VBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX    pCtx,
                                             char     *pszCmd,         uint32_t  cbCmd,
-                                            uint32_t *puFlags,
+                                            uint32_t *pfFlags,
                                             char     *pszArgs,        uint32_t  cbArgs,     uint32_t *pcArgs,
                                             char     *pszEnv,         uint32_t *pcbEnv,     uint32_t *pcEnvVars,
                                             char     *pszUser,        uint32_t  cbUser,
@@ -512,7 +506,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX    pCtx,
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
 
     AssertPtrReturn(pszCmd, VERR_INVALID_POINTER);
-    AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
+    AssertPtrReturn(pfFlags, VERR_INVALID_POINTER);
     AssertPtrReturn(pszArgs, VERR_INVALID_POINTER);
     AssertPtrReturn(pcArgs, VERR_INVALID_POINTER);
     AssertPtrReturn(pszEnv, VERR_INVALID_POINTER);
@@ -568,7 +562,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX    pCtx,
         else
         {
             Msg.context.GetUInt32(&pCtx->uContextID);
-            Msg.flags.GetUInt32(puFlags);
+            Msg.flags.GetUInt32(pfFlags);
             Msg.num_args.GetUInt32(pcArgs);
             Msg.num_env.GetUInt32(pcEnvVars);
             Msg.cb_env.GetUInt32(pcbEnv);
@@ -597,14 +591,14 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX    pCtx,
  ** @todo Docs!
  */
 VBGLR3DECL(int) VbglR3GuestCtrlProcGetOutput(PVBGLR3GUESTCTRLCMDCTX pCtx,
-                                             uint32_t *puPID, uint32_t *puHandle, uint32_t *puFlags)
+                                             uint32_t *puPID, uint32_t *puHandle, uint32_t *pfFlags)
 {
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
     AssertReturn(pCtx->uNumParms == 4, VERR_INVALID_PARAMETER);
 
     AssertPtrReturn(puPID, VERR_INVALID_POINTER);
     AssertPtrReturn(puHandle, VERR_INVALID_POINTER);
-    AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
+    AssertPtrReturn(pfFlags, VERR_INVALID_POINTER);
 
     HGCMMsgProcOutput Msg;
 
@@ -631,7 +625,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcGetOutput(PVBGLR3GUESTCTRLCMDCTX pCtx,
             Msg.context.GetUInt32(&pCtx->uContextID);
             Msg.pid.GetUInt32(puPID);
             Msg.handle.GetUInt32(puHandle);
-            Msg.flags.GetUInt32(puFlags);
+            Msg.flags.GetUInt32(pfFlags);
         }
     }
     return rc;
@@ -648,7 +642,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcGetOutput(PVBGLR3GUESTCTRLCMDCTX pCtx,
  ** @todo Docs!
  */
 VBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX  pCtx,
-                                            uint32_t  *puPID,       uint32_t *puFlags,
+                                            uint32_t  *puPID,       uint32_t *pfFlags,
                                             void      *pvData,      uint32_t  cbData,
                                             uint32_t  *pcbSize)
 {
@@ -656,7 +650,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX  pCtx,
     AssertReturn(pCtx->uNumParms == 5, VERR_INVALID_PARAMETER);
 
     AssertPtrReturn(puPID, VERR_INVALID_POINTER);
-    AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
+    AssertPtrReturn(pfFlags, VERR_INVALID_POINTER);
     AssertPtrReturn(pvData, VERR_INVALID_POINTER);
     AssertPtrReturn(pcbSize, VERR_INVALID_POINTER);
 
@@ -685,7 +679,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX  pCtx,
         {
             Msg.context.GetUInt32(&pCtx->uContextID);
             Msg.pid.GetUInt32(puPID);
-            Msg.flags.GetUInt32(puFlags);
+            Msg.flags.GetUInt32(pfFlags);
             Msg.size.GetUInt32(pcbSize);
         }
     }
@@ -695,14 +689,14 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX  pCtx,
 
 VBGLR3DECL(int) VbglR3GuestCtrlDirGetRemove(PVBGLR3GUESTCTRLCMDCTX     pCtx,
                                             char     *pszPath,         uint32_t cbPath,
-                                            uint32_t *puFlags)
+                                            uint32_t *pfFlags)
 {
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
     AssertReturn(pCtx->uNumParms == 3, VERR_INVALID_PARAMETER);
 
     AssertPtrReturn(pszPath, VERR_INVALID_POINTER);
     AssertReturn(cbPath, VERR_INVALID_PARAMETER);
-    AssertPtrReturn(puFlags, VERR_INVALID_POINTER);
+    AssertPtrReturn(pfFlags, VERR_INVALID_POINTER);
 
     HGCMMsgDirRemove Msg;
 
@@ -726,7 +720,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlDirGetRemove(PVBGLR3GUESTCTRLCMDCTX     pCtx,
         else
         {
             Msg.context.GetUInt32(&pCtx->uContextID);
-            Msg.flags.GetUInt32(puFlags);
+            Msg.flags.GetUInt32(pfFlags);
         }
     }
     return rc;
@@ -1347,7 +1341,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlFileCbTell(PVBGLR3GUESTCTRLCMDCTX pCtx,
  ** @todo Docs!
  */
 VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatus(PVBGLR3GUESTCTRLCMDCTX pCtx,
-                                            uint32_t uPID, uint32_t uStatus, uint32_t uFlags,
+                                            uint32_t uPID, uint32_t uStatus, uint32_t fFlags,
                                             void  *pvData, uint32_t cbData)
 {
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
@@ -1362,7 +1356,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatus(PVBGLR3GUESTCTRLCMDCTX pCtx,
     VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
     VbglHGCMParmUInt32Set(&Msg.pid, uPID);
     VbglHGCMParmUInt32Set(&Msg.status, uStatus);
-    VbglHGCMParmUInt32Set(&Msg.flags, uFlags);
+    VbglHGCMParmUInt32Set(&Msg.flags, fFlags);
     VbglHGCMParmPtrSet(&Msg.data, pvData, cbData);
 
     int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
@@ -1383,7 +1377,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatus(PVBGLR3GUESTCTRLCMDCTX pCtx,
  ** @todo Docs!
  */
 VBGLR3DECL(int) VbglR3GuestCtrlProcCbOutput(PVBGLR3GUESTCTRLCMDCTX pCtx,
-                                            uint32_t uPID,uint32_t uHandle, uint32_t uFlags,
+                                            uint32_t uPID,uint32_t uHandle, uint32_t fFlags,
                                             void *pvData, uint32_t cbData)
 {
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
@@ -1398,7 +1392,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcCbOutput(PVBGLR3GUESTCTRLCMDCTX pCtx,
     VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
     VbglHGCMParmUInt32Set(&Msg.pid, uPID);
     VbglHGCMParmUInt32Set(&Msg.handle, uHandle);
-    VbglHGCMParmUInt32Set(&Msg.flags, uFlags);
+    VbglHGCMParmUInt32Set(&Msg.flags, fFlags);
     VbglHGCMParmPtrSet(&Msg.data, pvData, cbData);
 
     int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
@@ -1420,7 +1414,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcCbOutput(PVBGLR3GUESTCTRLCMDCTX pCtx,
  */
 VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatusInput(PVBGLR3GUESTCTRLCMDCTX pCtx,
                                                  uint32_t uPID, uint32_t uStatus,
-                                                 uint32_t uFlags, uint32_t cbWritten)
+                                                 uint32_t fFlags, uint32_t cbWritten)
 {
     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
 
@@ -1434,7 +1428,7 @@ VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatusInput(PVBGLR3GUESTCTRLCMDCTX pCtx,
     VbglHGCMParmUInt32Set(&Msg.context, pCtx->uContextID);
     VbglHGCMParmUInt32Set(&Msg.pid, uPID);
     VbglHGCMParmUInt32Set(&Msg.status, uStatus);
-    VbglHGCMParmUInt32Set(&Msg.flags, uFlags);
+    VbglHGCMParmUInt32Set(&Msg.flags, fFlags);
     VbglHGCMParmUInt32Set(&Msg.written, cbWritten);
 
     int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg));
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp
index 93e0fcd..767221b 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestProp.cpp
@@ -123,10 +123,10 @@ using namespace guestProp;
  *
  * @returns VBox status code
  * @returns VERR_NOT_SUPPORTED if guest properties are not available on the host.
- * @param   pu32ClientId    Where to put the client id on success. The client id
+ * @param   pidClient       Where to put the client ID on success. The client ID
  *                          must be passed to all the other calls to the service.
  */
-VBGLR3DECL(int) VbglR3GuestPropConnect(uint32_t *pu32ClientId)
+VBGLR3DECL(int) VbglR3GuestPropConnect(HGCMCLIENTID *pidClient)
 {
     VBoxGuestHGCMConnectInfo Info;
     Info.result = VERR_WRONG_ORDER;
@@ -140,7 +140,7 @@ VBGLR3DECL(int) VbglR3GuestPropConnect(uint32_t *pu32ClientId)
     {
         rc = Info.result;
         if (RT_SUCCESS(rc))
-            *pu32ClientId = Info.u32ClientID;
+            *pidClient = Info.u32ClientID;
         if (rc == VERR_NOT_IMPLEMENTED || rc == VERR_HGCM_SERVICE_NOT_FOUND)
             rc = VERR_NOT_SUPPORTED;
     }
@@ -152,13 +152,13 @@ VBGLR3DECL(int) VbglR3GuestPropConnect(uint32_t *pu32ClientId)
  * Disconnect from the guest property service.
  *
  * @returns VBox status code.
- * @param   u32ClientId     The client id returned by VbglR3InfoSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InfoSvcConnect().
  */
-VBGLR3DECL(int) VbglR3GuestPropDisconnect(uint32_t u32ClientId)
+VBGLR3DECL(int) VbglR3GuestPropDisconnect(HGCMCLIENTID idClient)
 {
     VBoxGuestHGCMDisconnectInfo Info;
     Info.result = VERR_WRONG_ORDER;
-    Info.u32ClientID = u32ClientId;
+    Info.u32ClientID = idClient;
 
     int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_DISCONNECT, &Info, sizeof(Info));
     if (RT_SUCCESS(rc))
@@ -171,13 +171,13 @@ VBGLR3DECL(int) VbglR3GuestPropDisconnect(uint32_t u32ClientId)
  * Write a property value.
  *
  * @returns VBox status code.
- * @param   u32ClientId     The client id returned by VbglR3InvsSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InvsSvcConnect().
  * @param   pszName         The property to save to.  Utf8
  * @param   pszValue        The value to store.  Utf8.  If this is NULL then
  *                          the property will be removed.
  * @param   pszFlags        The flags for the property
  */
-VBGLR3DECL(int) VbglR3GuestPropWrite(uint32_t u32ClientId, const char *pszName, const char *pszValue, const char *pszFlags)
+VBGLR3DECL(int) VbglR3GuestPropWrite(HGCMCLIENTID idClient, const char *pszName, const char *pszValue, const char *pszFlags)
 {
     int rc;
 
@@ -186,7 +186,7 @@ VBGLR3DECL(int) VbglR3GuestPropWrite(uint32_t u32ClientId, const char *pszName,
         SetProperty Msg;
 
         Msg.hdr.result = VERR_WRONG_ORDER;
-        Msg.hdr.u32ClientID = u32ClientId;
+        Msg.hdr.u32ClientID = idClient;
         Msg.hdr.u32Function = SET_PROP_VALUE;
         Msg.hdr.cParms = 3;
         VbglHGCMParmPtrSetString(&Msg.name,  pszName);
@@ -201,7 +201,7 @@ VBGLR3DECL(int) VbglR3GuestPropWrite(uint32_t u32ClientId, const char *pszName,
         DelProperty Msg;
 
         Msg.hdr.result = VERR_WRONG_ORDER;
-        Msg.hdr.u32ClientID = u32ClientId;
+        Msg.hdr.u32ClientID = idClient;
         Msg.hdr.u32Function = DEL_PROP;
         Msg.hdr.cParms = 1;
         VbglHGCMParmPtrSetString(&Msg.name, pszName);
@@ -218,7 +218,7 @@ VBGLR3DECL(int) VbglR3GuestPropWrite(uint32_t u32ClientId, const char *pszName,
  *
  * @returns VBox status code.
  *
- * @param   u32ClientId     The client id returned by VbglR3InvsSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InvsSvcConnect().
  * @param   pszName         The property to save to.  Must be valid UTF-8.
  * @param   pszValue        The value to store.  Must be valid UTF-8.
  *                          If this is NULL then the property will be removed.
@@ -226,7 +226,7 @@ VBGLR3DECL(int) VbglR3GuestPropWrite(uint32_t u32ClientId, const char *pszName,
  * @note  if the property already exists and pszValue is not NULL then the
  *        property's flags field will be left unchanged
  */
-VBGLR3DECL(int) VbglR3GuestPropWriteValue(uint32_t u32ClientId, const char *pszName, const char *pszValue)
+VBGLR3DECL(int) VbglR3GuestPropWriteValue(HGCMCLIENTID idClient, const char *pszName, const char *pszValue)
 {
     int rc;
 
@@ -235,7 +235,7 @@ VBGLR3DECL(int) VbglR3GuestPropWriteValue(uint32_t u32ClientId, const char *pszN
         SetPropertyValue Msg;
 
         Msg.hdr.result = VERR_WRONG_ORDER;
-        Msg.hdr.u32ClientID = u32ClientId;
+        Msg.hdr.u32ClientID = idClient;
         Msg.hdr.u32Function = SET_PROP_VALUE;
         Msg.hdr.cParms = 2;
         VbglHGCMParmPtrSetString(&Msg.name, pszName);
@@ -249,7 +249,7 @@ VBGLR3DECL(int) VbglR3GuestPropWriteValue(uint32_t u32ClientId, const char *pszN
         DelProperty Msg;
 
         Msg.hdr.result = VERR_WRONG_ORDER;
-        Msg.hdr.u32ClientID = u32ClientId;
+        Msg.hdr.u32ClientID = idClient;
         Msg.hdr.u32Function = DEL_PROP;
         Msg.hdr.cParms = 1;
         VbglHGCMParmPtrSetString(&Msg.name, pszName);
@@ -266,12 +266,12 @@ VBGLR3DECL(int) VbglR3GuestPropWriteValue(uint32_t u32ClientId, const char *pszN
  *
  * @returns The same as VbglR3GuestPropWriteValue with the addition of VERR_NO_STR_MEMORY.
  *
- * @param   u32ClientId     The client ID returned by VbglR3InvsSvcConnect().
+ * @param   idClient        The client ID returned by VbglR3InvsSvcConnect().
  * @param   pszName         The property to save to.  Must be valid UTF-8.
  * @param   pszValueFormat  The value format. This must be valid UTF-8 when fully formatted.
  * @param   va              The format arguments.
  */
-VBGLR3DECL(int) VbglR3GuestPropWriteValueV(uint32_t u32ClientId, const char *pszName, const char *pszValueFormat, va_list va)
+VBGLR3DECL(int) VbglR3GuestPropWriteValueV(HGCMCLIENTID idClient, const char *pszName, const char *pszValueFormat, va_list va)
 {
     /*
      * Format the value and pass it on to the setter.
@@ -280,7 +280,7 @@ VBGLR3DECL(int) VbglR3GuestPropWriteValueV(uint32_t u32ClientId, const char *psz
     char *pszValue;
     if (RTStrAPrintfV(&pszValue, pszValueFormat, va) >= 0)
     {
-        rc = VbglR3GuestPropWriteValue(u32ClientId, pszName, pszValue);
+        rc = VbglR3GuestPropWriteValue(idClient, pszName, pszValue);
         RTStrFree(pszValue);
     }
     return rc;
@@ -292,16 +292,16 @@ VBGLR3DECL(int) VbglR3GuestPropWriteValueV(uint32_t u32ClientId, const char *psz
  *
  * @returns The same as VbglR3GuestPropWriteValue with the addition of VERR_NO_STR_MEMORY.
  *
- * @param   u32ClientId     The client ID returned by VbglR3InvsSvcConnect().
+ * @param   idClient        The client ID returned by VbglR3InvsSvcConnect().
  * @param   pszName         The property to save to.  Must be valid UTF-8.
  * @param   pszValueFormat  The value format. This must be valid UTF-8 when fully formatted.
  * @param   ...             The format arguments.
  */
-VBGLR3DECL(int) VbglR3GuestPropWriteValueF(uint32_t u32ClientId, const char *pszName, const char *pszValueFormat, ...)
+VBGLR3DECL(int) VbglR3GuestPropWriteValueF(HGCMCLIENTID idClient, const char *pszName, const char *pszValueFormat, ...)
 {
     va_list va;
     va_start(va, pszValueFormat);
-    int rc = VbglR3GuestPropWriteValueV(u32ClientId, pszName, pszValueFormat, va);
+    int rc = VbglR3GuestPropWriteValueV(idClient, pszName, pszValueFormat, va);
     va_end(va);
     return rc;
 }
@@ -318,7 +318,7 @@ VBGLR3DECL(int) VbglR3GuestPropWriteValueF(uint32_t u32ClientId, const char *psz
  *          @a pcbBufActual if it is not NULL.
  * @retval  VERR_NOT_FOUND if the key wasn't found.
  *
- * @param   u32ClientId     The client id returned by VbglR3GuestPropConnect().
+ * @param   idClient        The client id returned by VbglR3GuestPropConnect().
  * @param   pszName         The value to read.  Utf8
  * @param   pvBuf           A scratch buffer to store the data retrieved into.
  *                          The returned data is only valid for it's lifetime.
@@ -327,11 +327,11 @@ VBGLR3DECL(int) VbglR3GuestPropWriteValueF(uint32_t u32ClientId, const char *psz
  * @param   ppszValue       Where to store the pointer to the value retrieved.
  *                          Optional.
  * @param   pu64Timestamp   Where to store the timestamp.  Optional.
- * @param   pszFlags        Where to store the pointer to the flags.  Optional.
+ * @param   ppszFlags       Where to store the pointer to the flags.  Optional.
  * @param   pcbBufActual    If @a pcBuf is not large enough, the size needed.
  *                          Optional.
  */
-VBGLR3DECL(int) VbglR3GuestPropRead(uint32_t u32ClientId, const char *pszName,
+VBGLR3DECL(int) VbglR3GuestPropRead(HGCMCLIENTID idClient, const char *pszName,
                                     void *pvBuf, uint32_t cbBuf,
                                     char **ppszValue, uint64_t *pu64Timestamp,
                                     char **ppszFlags,
@@ -343,7 +343,7 @@ VBGLR3DECL(int) VbglR3GuestPropRead(uint32_t u32ClientId, const char *pszName,
     GetProperty Msg;
 
     Msg.hdr.result = VERR_WRONG_ORDER;
-    Msg.hdr.u32ClientID = u32ClientId;
+    Msg.hdr.u32ClientID = idClient;
     Msg.hdr.u32Function = GET_PROP;
     Msg.hdr.cParms = 4;
     VbglHGCMParmPtrSetString(&Msg.name, pszName);
@@ -414,15 +414,13 @@ VBGLR3DECL(int) VbglR3GuestPropRead(uint32_t u32ClientId, const char *pszName,
  *          race between our allocating space and the host changing the
  *          property value.
  *
- * @param   u32ClientId     The client id returned by VbglR3GuestPropConnect().
+ * @param   idClient        The client id returned by VbglR3GuestPropConnect().
  * @param   pszName         The value to read. Must be valid UTF-8.
  * @param   ppszValue       Where to store the pointer to the value returned.
  *                          This is always set to NULL or to the result, even
  *                          on failure.
  */
-VBGLR3DECL(int) VbglR3GuestPropReadValueAlloc(uint32_t u32ClientId,
-                                              const char *pszName,
-                                              char **ppszValue)
+VBGLR3DECL(int) VbglR3GuestPropReadValueAlloc(HGCMCLIENTID idClient, const char *pszName, char **ppszValue)
 {
     /*
      * Quick input validation.
@@ -448,7 +446,7 @@ VBGLR3DECL(int) VbglR3GuestPropReadValueAlloc(uint32_t u32ClientId,
         if (pvTmpBuf)
         {
             pvBuf = pvTmpBuf;
-            rc = VbglR3GuestPropRead(u32ClientId, pszName, pvBuf, cchBuf,
+            rc = VbglR3GuestPropRead(idClient, pszName, pvBuf, cchBuf,
                                      &pszValue, NULL, NULL, &cchBuf);
         }
         else
@@ -496,21 +494,20 @@ VBGLR3DECL(void) VbglR3GuestPropReadValueFree(char *pszValue)
  * @note    There is a race here between obtaining the size of the buffer
  *          needed to hold the value and the value being updated.
  *
- * @param   u32ClientId     The client id returned by VbglR3GuestPropConnect().
+ * @param   idClient        The client id returned by VbglR3GuestPropConnect().
  * @param   pszName         The value to read.  Utf8
  * @param   pszValue        Where to store the value retrieved.
  * @param   cchValue        The size of the buffer pointed to by @a pszValue
  * @param   pcchValueActual Where to store the size of the buffer needed if
  *                          the buffer supplied is too small.  Optional.
  */
-VBGLR3DECL(int) VbglR3GuestPropReadValue(uint32_t u32ClientId, const char *pszName,
+VBGLR3DECL(int) VbglR3GuestPropReadValue(HGCMCLIENTID idClient, const char *pszName,
                                          char *pszValue, uint32_t cchValue,
                                          uint32_t *pcchValueActual)
 {
     void *pvBuf = pszValue;
     uint32_t cchValueActual;
-    int rc = VbglR3GuestPropRead(u32ClientId, pszName, pvBuf, cchValue,
-                                 &pszValue, NULL, NULL, &cchValueActual);
+    int rc = VbglR3GuestPropRead(idClient, pszName, pvBuf, cchValue, &pszValue, NULL, NULL, &cchValueActual);
     if (pcchValueActual != NULL)
         *pcchValueActual = cchValueActual;
     return rc;
@@ -523,15 +520,15 @@ VBGLR3DECL(int) VbglR3GuestPropReadValue(uint32_t u32ClientId, const char *pszNa
  *
  * @returns VBox status code.
  * @retval  VINF_SUCCESS on success and pcBuf points to a packed array
- *          of the form <name>, <value>, <timestamp string>, <flags>,
+ *          of the form \<name\>, \<value\>, \<timestamp string\>, \<flags\>,
  *          terminated by four empty strings.  pcbBufActual will contain the
  *          total size of the array.
  * @retval  VERR_BUFFER_OVERFLOW if the buffer provided was too small.  In
  *          this case pcbBufActual will contain the size of the buffer needed.
  * @returns IPRT error code in other cases, and pchBufActual is undefined.
  *
- * @param   u32ClientId   The client ID returned by VbglR3GuestPropConnect
- * @param   paszPatterns  A packed array of zero terminated strings, terminated
+ * @param   idClient      The client ID returned by VbglR3GuestPropConnect
+ * @param   pszzPatterns  A packed array of zero terminated strings, terminated
  *                        by an empty string.
  * @param   pcBuf         The buffer to store the results to.
  * @param   cbBuf         The size of the buffer
@@ -539,7 +536,7 @@ VBGLR3DECL(int) VbglR3GuestPropReadValue(uint32_t u32ClientId, const char *pszNa
  *                        success or the buffer size needed if @a pcBuf is too
  *                        small.
  */
-VBGLR3DECL(int) VbglR3GuestPropEnumRaw(uint32_t u32ClientId,
+VBGLR3DECL(int) VbglR3GuestPropEnumRaw(HGCMCLIENTID idClient,
                                        const char *pszzPatterns,
                                        char *pcBuf,
                                        uint32_t cbBuf,
@@ -548,7 +545,7 @@ VBGLR3DECL(int) VbglR3GuestPropEnumRaw(uint32_t u32ClientId,
     EnumProperties Msg;
 
     Msg.hdr.result = VERR_WRONG_ORDER;
-    Msg.hdr.u32ClientID = u32ClientId;
+    Msg.hdr.u32ClientID = idClient;
     Msg.hdr.u32Function = ENUM_PROPS;
     Msg.hdr.cParms = 3;
     /* Get the length of the patterns array... */
@@ -592,7 +589,7 @@ VBGLR3DECL(int) VbglR3GuestPropEnumRaw(uint32_t u32ClientId,
  *          data, so retrying may help here.  Other parameters are left
  *          uninitialised
  *
- * @param   u32ClientId     The client id returned by VbglR3InfoSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InfoSvcConnect().
  * @param   papszPatterns   The patterns against which the properties are
  *                          matched.  Pass NULL if everything should be matched.
  * @param   cPatterns       The number of patterns in @a papszPatterns.  0 means
@@ -616,7 +613,7 @@ VBGLR3DECL(int) VbglR3GuestPropEnumRaw(uint32_t u32ClientId,
  * @remarks While all output parameters are optional, you need at least one to
  *          figure out when to stop.
  */
-VBGLR3DECL(int) VbglR3GuestPropEnum(uint32_t u32ClientId,
+VBGLR3DECL(int) VbglR3GuestPropEnum(HGCMCLIENTID idClient,
                                     char const * const *papszPatterns,
                                     uint32_t cPatterns,
                                     PVBGLR3GUESTPROPENUM *ppHandle,
@@ -663,7 +660,7 @@ VBGLR3DECL(int) VbglR3GuestPropEnum(uint32_t u32ClientId,
             rc = VERR_NO_MEMORY;
             break;
         }
-        rc = VbglR3GuestPropEnumRaw(u32ClientId, pszzPatterns, pchBuf, cbBuf, &cbBuf);
+        rc = VbglR3GuestPropEnumRaw(idClient, pszzPatterns, pchBuf, cbBuf, &cbBuf);
         if (rc != VERR_BUFFER_OVERFLOW)
             break;
         cbBuf += 4096;  /* Just to increase our chances */
@@ -808,17 +805,17 @@ VBGLR3DECL(void) VbglR3GuestPropEnumFree(PVBGLR3GUESTPROPENUM pHandle)
  * Deletes a guest property.
  *
  * @returns VBox status code.
- * @param   u32ClientId     The client id returned by VbglR3InvsSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InvsSvcConnect().
  * @param   pszName         The property to delete.  Utf8
  */
-VBGLR3DECL(int) VbglR3GuestPropDelete(uint32_t u32ClientId, const char *pszName)
+VBGLR3DECL(int) VbglR3GuestPropDelete(HGCMCLIENTID idClient, const char *pszName)
 {
     AssertPtrReturn(pszName,  VERR_INVALID_POINTER);
 
     DelProperty Msg;
 
     Msg.hdr.result = VERR_WRONG_ORDER;
-    Msg.hdr.u32ClientID = u32ClientId;
+    Msg.hdr.u32ClientID = idClient;
     Msg.hdr.u32Function = DEL_PROP;
     Msg.hdr.cParms = 1;
     VbglHGCMParmPtrSetString(&Msg.name, pszName);
@@ -838,20 +835,20 @@ VBGLR3DECL(int) VbglR3GuestPropDelete(uint32_t u32ClientId, const char *pszName)
  * @returns VBox status code. Stops on first failure.
  *          See also VbglR3GuestPropEnum.
  *
- * @param   u32ClientId     The client id returned by VbglR3InfoSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InfoSvcConnect().
  * @param   papszPatterns   The patterns against which the properties are
  *                          matched.  Pass NULL if everything should be matched.
  * @param   cPatterns       The number of patterns in @a papszPatterns.  0 means
  *                          match everything.
  */
-VBGLR3DECL(int) VbglR3GuestPropDelSet(uint32_t u32ClientId,
+VBGLR3DECL(int) VbglR3GuestPropDelSet(HGCMCLIENTID idClient,
                                       const char * const *papszPatterns,
                                       uint32_t cPatterns)
 {
     PVBGLR3GUESTPROPENUM pHandle;
     char const *pszName, *pszValue, *pszFlags;
     uint64_t pu64Timestamp;
-    int rc = VbglR3GuestPropEnum(u32ClientId,
+    int rc = VbglR3GuestPropEnum(idClient,
                                  (char **)papszPatterns, /** @todo fix this cast. */
                                  cPatterns,
                                  &pHandle,
@@ -862,7 +859,7 @@ VBGLR3DECL(int) VbglR3GuestPropDelSet(uint32_t u32ClientId,
 
     while (RT_SUCCESS(rc) && pszName)
     {
-        rc = VbglR3GuestPropWriteValue(u32ClientId, pszName, NULL);
+        rc = VbglR3GuestPropWriteValue(idClient, pszName, NULL);
         if (RT_FAILURE(rc))
             break;
 
@@ -894,7 +891,7 @@ VBGLR3DECL(int) VbglR3GuestPropDelSet(uint32_t u32ClientId,
  *          @a pcbBufActual if it is not NULL.
  * @retval  VERR_TIMEOUT if a timeout occurred before a notification was seen.
  *
- * @param   u32ClientId     The client id returned by VbglR3GuestPropConnect().
+ * @param   idClient        The client id returned by VbglR3GuestPropConnect().
  * @param   pszPatterns     The patterns that the property names must matchfor
  *                          the change to be reported.
  * @param   pvBuf           A scratch buffer to store the data retrieved into.
@@ -914,7 +911,7 @@ VBGLR3DECL(int) VbglR3GuestPropDelSet(uint32_t u32ClientId,
  * @param   pcbBufActual    If @a pcBuf is not large enough, the size needed.
  *                          Optional.
  */
-VBGLR3DECL(int) VbglR3GuestPropWait(uint32_t u32ClientId,
+VBGLR3DECL(int) VbglR3GuestPropWait(HGCMCLIENTID idClient,
                                     const char *pszPatterns,
                                     void *pvBuf, uint32_t cbBuf,
                                     uint64_t u64Timestamp, uint32_t cMillies,
@@ -930,7 +927,7 @@ VBGLR3DECL(int) VbglR3GuestPropWait(uint32_t u32ClientId,
     Msg.hdr.u32Timeout = cMillies;
     Msg.hdr.fInterruptible = true;
     Msg.hdr.info.result = VERR_WRONG_ORDER;
-    Msg.hdr.info.u32ClientID = u32ClientId;
+    Msg.hdr.info.u32ClientID = idClient;
     Msg.hdr.info.u32Function = GET_NOTIFICATION;
     Msg.hdr.info.cParms = 4;
     VbglHGCMParmPtrSetString(&Msg.patterns, pszPatterns);
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestUser.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestUser.cpp
index 3fac75a..ef6b0d9 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestUser.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestUser.cpp
@@ -48,30 +48,25 @@
  * @param   cbDetails       Size (in bytes) of state details. Pass 0
  *                          if puDetails is NULL.
  */
-VBGLR3DECL(int) VbglR3GuestUserReportState(const char *pszUser,
-                                           const char *pszDomain,
-                                           VBoxGuestUserState enmState,
-                                           uint8_t *puDetails,
-                                           uint32_t cbDetails)
+VBGLR3DECL(int) VbglR3GuestUserReportState(const char *pszUser, const char *pszDomain, VBoxGuestUserState enmState,
+                                           uint8_t *puDetails, uint32_t cbDetails)
 {
     AssertPtrReturn(pszUser, VERR_INVALID_POINTER);
     /* pszDomain is optional. */
     /* puDetails is optional. */
+    AssertReturn(cbDetails == 0 || puDetails != NULL, VERR_INVALID_PARAMETER);
+    AssertReturn(cbDetails < 16U*_1M, VERR_OUT_OF_RANGE);
 
-    uint32_t cbBase = sizeof(VMMDevReportGuestUserState);
-    uint32_t cbUser = strlen(pszUser) + 1; /* Include terminating zero */
-    uint32_t cbDomain = pszDomain ? strlen(pszDomain) + 1 /* Dito */ : 0;
+    uint32_t cbBase   = sizeof(VMMDevReportGuestUserState);
+    uint32_t cbUser   = (uint32_t)strlen(pszUser) + 1; /* Include terminating zero */
+    uint32_t cbDomain = pszDomain ? strlen(pszDomain) + 1 /* Ditto */ : 0;
 
     /* Allocate enough space for all fields. */
-    unsigned long cbSize =
-          cbBase
-        + cbUser
-        + cbDomain
-        + cbDetails;
-
-    AssertReturn(cbSize, VERR_BUFFER_UNDERFLOW);
-    VMMDevReportGuestUserState *pReport =
-        (VMMDevReportGuestUserState *)RTMemAllocZ(cbSize);
+    uint32_t cbSize = cbBase
+                    + cbUser
+                    + cbDomain
+                    + cbDetails;
+    VMMDevReportGuestUserState *pReport = (VMMDevReportGuestUserState *)RTMemAllocZ(cbSize);
     if (!pReport)
         return VERR_NO_MEMORY;
 
@@ -91,8 +86,7 @@ VBGLR3DECL(int) VbglR3GuestUserReportState(const char *pszUser,
          *       Therefore it's vital to *not* change the order of the struct members
          *       without altering this code. Don't try this at home.
          */
-        uint32_t cbOffDynamic =
-            RT_OFFSETOF(VBoxGuestUserStatus, szUser);
+        uint32_t cbOffDynamic = RT_OFFSETOF(VBoxGuestUserStatus, szUser);
 
         /* pDynamic marks the beginning for the dynamically allocated areas. */
         uint8_t *pDynamic = (uint8_t *)&pReport->status;
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibHostVersion.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibHostVersion.cpp
index f47fe93..960a1bb 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibHostVersion.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibHostVersion.cpp
@@ -45,7 +45,7 @@
  *
  * @returns VBox status code
  *
- * @param   u32ClientId         The client id returned by
+ * @param   idClient            The client id returned by
  *                              VbglR3InfoSvcConnect().
  * @param   pfUpdate            Receives pointer to boolean flag indicating
  *                              whether an update was found or not.
@@ -58,9 +58,9 @@
  *                              VbglR3GuestPropReadValueFree().  Always set to
  *                              NULL.
  */
-VBGLR3DECL(int) VbglR3HostVersionCheckForUpdate(uint32_t u32ClientId, bool *pfUpdate, char **ppszHostVersion, char **ppszGuestVersion)
+VBGLR3DECL(int) VbglR3HostVersionCheckForUpdate(HGCMCLIENTID idClient, bool *pfUpdate, char **ppszHostVersion, char **ppszGuestVersion)
 {
-    Assert(u32ClientId > 0);
+    Assert(idClient > 0);
     AssertPtr(pfUpdate);
     AssertPtr(ppszHostVersion);
     AssertPtr(ppszGuestVersion);
@@ -74,7 +74,7 @@ VBGLR3DECL(int) VbglR3HostVersionCheckForUpdate(uint32_t u32ClientId, bool *pfUp
 
     /* Do we need to do all this stuff? */
     char *pszCheckHostVersion;
-    int rc = VbglR3GuestPropReadValueAlloc(u32ClientId, "/VirtualBox/GuestAdd/CheckHostVersion", &pszCheckHostVersion);
+    int rc = VbglR3GuestPropReadValueAlloc(idClient, "/VirtualBox/GuestAdd/CheckHostVersion", &pszCheckHostVersion);
     if (RT_FAILURE(rc))
     {
         if (rc == VERR_NOT_FOUND)
@@ -99,7 +99,7 @@ VBGLR3DECL(int) VbglR3HostVersionCheckForUpdate(uint32_t u32ClientId, bool *pfUp
     if (RT_SUCCESS(rc) && *pfUpdate)
     {
         /* Look up host version */
-        rc = VbglR3GuestPropReadValueAlloc(u32ClientId, "/VirtualBox/HostInfo/VBoxVer", ppszHostVersion);
+        rc = VbglR3GuestPropReadValueAlloc(idClient, "/VirtualBox/HostInfo/VBoxVer", ppszHostVersion);
         if (RT_FAILURE(rc))
         {
             LogFlow(("Could not read VBox host version! rc = %Rrc\n", rc));
@@ -110,7 +110,7 @@ VBGLR3DECL(int) VbglR3HostVersionCheckForUpdate(uint32_t u32ClientId, bool *pfUp
 
             /* Get last checked host version */
             char *pszLastCheckedHostVersion;
-            rc = VbglR3HostVersionLastCheckedLoad(u32ClientId, &pszLastCheckedHostVersion);
+            rc = VbglR3HostVersionLastCheckedLoad(idClient, &pszLastCheckedHostVersion);
             if (RT_SUCCESS(rc))
             {
                 LogFlow(("Last checked host version: %s\n", pszLastCheckedHostVersion));
@@ -172,15 +172,15 @@ VBGLR3DECL(int) VbglR3HostVersionCheckForUpdate(uint32_t u32ClientId, bool *pfUp
  *
  * @returns VBox status code.
  *
- * @param   u32ClientId     The client id returned by VbglR3InfoSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InfoSvcConnect().
  * @param   ppszVer         Receives pointer of allocated version string.
  *                          The returned pointer must be freed using RTStrFree() on VINF_SUCCESS.
  */
-VBGLR3DECL(int) VbglR3HostVersionLastCheckedLoad(uint32_t u32ClientId, char **ppszVer)
+VBGLR3DECL(int) VbglR3HostVersionLastCheckedLoad(HGCMCLIENTID idClient, char **ppszVer)
 {
-    Assert(u32ClientId > 0);
+    Assert(idClient > 0);
     AssertPtr(ppszVer);
-    return VbglR3GuestPropReadValueAlloc(u32ClientId, "/VirtualBox/GuestAdd/HostVerLastChecked", ppszVer);
+    return VbglR3GuestPropReadValueAlloc(idClient, "/VirtualBox/GuestAdd/HostVerLastChecked", ppszVer);
 }
 
 
@@ -189,12 +189,13 @@ VBGLR3DECL(int) VbglR3HostVersionLastCheckedLoad(uint32_t u32ClientId, char **pp
  *
  * @returns VBox status code.
  *
- * @param   u32ClientId     The client id returned by VbglR3InfoSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InfoSvcConnect().
  * @param   pszVer          Pointer to version string to store.
  */
-VBGLR3DECL(int) VbglR3HostVersionLastCheckedStore(uint32_t u32ClientId, const char *pszVer)
+VBGLR3DECL(int) VbglR3HostVersionLastCheckedStore(HGCMCLIENTID idClient, const char *pszVer)
 {
-    Assert(u32ClientId > 0);
+    Assert(idClient > 0);
     AssertPtr(pszVer);
-    return VbglR3GuestPropWriteValue(u32ClientId, "/VirtualBox/GuestAdd/HostVerLastChecked", pszVer);
+    return VbglR3GuestPropWriteValue(idClient, "/VirtualBox/GuestAdd/HostVerLastChecked", pszVer);
 }
+
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMisc.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMisc.cpp
index 0dd7513..ee16d0b 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMisc.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMisc.cpp
@@ -37,7 +37,7 @@
  *
  * @returns IPRT status code.
  * @param   fOr     The OR mask.
- * @param   fNo     The NOT mask.
+ * @param   fNot    The NOT mask.
  */
 VBGLR3DECL(int) VbglR3CtlFilterMask(uint32_t fOr, uint32_t fNot)
 {
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMouse.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMouse.cpp
index f1f99fc..b0aa450 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMouse.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibMouse.cpp
@@ -72,7 +72,6 @@ VBGLR3DECL(int) VbglR3GetMouseStatus(uint32_t *pfFeatures, uint32_t *px, uint32_
  */
 VBGLR3DECL(int) VbglR3SetMouseStatus(uint32_t fFeatures)
 {
-    return vbglR3DoIOCtl(VBOXGUEST_IOCTL_SET_MOUSE_STATUS, &fFeatures,
-                         sizeof(fFeatures));
+    return vbglR3DoIOCtl(VBOXGUEST_IOCTL_SET_MOUSE_STATUS, &fFeatures, sizeof(fFeatures));
 }
 
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSharedFolders.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSharedFolders.cpp
index b41ee86..b835e07 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSharedFolders.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibSharedFolders.cpp
@@ -43,10 +43,10 @@
  * Connects to the shared folder service.
  *
  * @returns VBox status code
- * @param   pu32ClientId    Where to put the client id on success. The client id
+ * @param   pidClient       Where to put the client id on success. The client id
  *                          must be passed to all the other calls to the service.
  */
-VBGLR3DECL(int) VbglR3SharedFolderConnect(uint32_t *pu32ClientId)
+VBGLR3DECL(int) VbglR3SharedFolderConnect(HGCMCLIENTID *pidClient)
 {
     VBoxGuestHGCMConnectInfo Info;
     Info.result = VERR_WRONG_ORDER;
@@ -60,7 +60,7 @@ VBGLR3DECL(int) VbglR3SharedFolderConnect(uint32_t *pu32ClientId)
     {
         rc = Info.result;
         if (RT_SUCCESS(rc))
-            *pu32ClientId = Info.u32ClientID;
+            *pidClient = Info.u32ClientID;
     }
     return rc;
 }
@@ -70,13 +70,13 @@ VBGLR3DECL(int) VbglR3SharedFolderConnect(uint32_t *pu32ClientId)
  * Disconnect from the shared folder service.
  *
  * @returns VBox status code.
- * @param   u32ClientId     The client id returned by VbglR3InfoSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InfoSvcConnect().
  */
-VBGLR3DECL(int) VbglR3SharedFolderDisconnect(uint32_t u32ClientId)
+VBGLR3DECL(int) VbglR3SharedFolderDisconnect(HGCMCLIENTID idClient)
 {
     VBoxGuestHGCMDisconnectInfo Info;
     Info.result = VERR_WRONG_ORDER;
-    Info.u32ClientID = u32ClientId;
+    Info.u32ClientID = idClient;
 
     int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_DISCONNECT, &Info, sizeof(Info));
     if (RT_SUCCESS(rc))
@@ -89,10 +89,10 @@ VBGLR3DECL(int) VbglR3SharedFolderDisconnect(uint32_t u32ClientId)
  * Checks whether a shared folder share exists or not.
  *
  * @returns True if shared folder exists, false if not.
- * @param   u32ClientId     The client id returned by VbglR3InfoSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InfoSvcConnect().
  * @param   pszShareName    Shared folder name to check.
  */
-VBGLR3DECL(bool) VbglR3SharedFolderExists(uint32_t u32ClientId, const char *pszShareName)
+VBGLR3DECL(bool) VbglR3SharedFolderExists(HGCMCLIENTID idClient, const char *pszShareName)
 {
     AssertPtr(pszShareName);
 
@@ -101,14 +101,13 @@ VBGLR3DECL(bool) VbglR3SharedFolderExists(uint32_t u32ClientId, const char *pszS
 
     /** @todo Use some caching here? */
     bool fFound = false;
-    int rc = VbglR3SharedFolderGetMappings(u32ClientId, true /* Only process auto-mounted folders */,
-                                           &paMappings, &cMappings);
+    int rc = VbglR3SharedFolderGetMappings(idClient, true /* Only process auto-mounted folders */, &paMappings, &cMappings);
     if (RT_SUCCESS(rc))
     {
         for (uint32_t i = 0; i < cMappings && !fFound; i++)
         {
             char *pszName = NULL;
-            rc = VbglR3SharedFolderGetName(u32ClientId, paMappings[i].u32Root, &pszName);
+            rc = VbglR3SharedFolderGetName(idClient, paMappings[i].u32Root, &pszName);
             if (   RT_SUCCESS(rc)
                 && *pszName)
             {
@@ -127,14 +126,14 @@ VBGLR3DECL(bool) VbglR3SharedFolderExists(uint32_t u32ClientId, const char *pszS
  * Get the list of available shared folders.
  *
  * @returns VBox status code.
- * @param   u32ClientId     The client id returned by VbglR3SharedFolderConnect().
+ * @param   idClient        The client id returned by VbglR3SharedFolderConnect().
  * @param   fAutoMountOnly  Flag whether only auto-mounted shared folders
  *                          should be reported.
  * @param   ppaMappings     Allocated array which will retrieve the mapping info.  Needs
  *                          to be freed with VbglR3SharedFolderFreeMappings() later.
  * @param   pcMappings      The number of mappings returned in @a ppaMappings.
  */
-VBGLR3DECL(int) VbglR3SharedFolderGetMappings(uint32_t u32ClientId, bool fAutoMountOnly,
+VBGLR3DECL(int) VbglR3SharedFolderGetMappings(HGCMCLIENTID idClient, bool fAutoMountOnly,
                                               PVBGLR3SHAREDFOLDERMAPPING *ppaMappings, uint32_t *pcMappings)
 {
     AssertPtrReturn(pcMappings, VERR_INVALID_PARAMETER);
@@ -146,7 +145,7 @@ VBGLR3DECL(int) VbglR3SharedFolderGetMappings(uint32_t u32ClientId, bool fAutoMo
     VBoxSFQueryMappings Msg;
 
     Msg.callInfo.result = VERR_WRONG_ORDER;
-    Msg.callInfo.u32ClientID = u32ClientId;
+    Msg.callInfo.u32ClientID = idClient;
     Msg.callInfo.u32Function = SHFL_FN_QUERY_MAPPINGS;
     Msg.callInfo.cParms = 3;
 
@@ -227,19 +226,19 @@ VBGLR3DECL(void) VbglR3SharedFolderFreeMappings(PVBGLR3SHAREDFOLDERMAPPING paMap
  * Get the real name of a shared folder.
  *
  * @returns VBox status code.
- * @param   u32ClientId     The client id returned by VbglR3InvsSvcConnect().
+ * @param   idClient        The client id returned by VbglR3InvsSvcConnect().
  * @param   u32Root         Root ID of shared folder to get the name for.
  * @param   ppszName        Where to return the name string.  This shall be
  *                          freed by calling RTStrFree.
  */
-VBGLR3DECL(int) VbglR3SharedFolderGetName(uint32_t u32ClientId, uint32_t u32Root, char **ppszName)
+VBGLR3DECL(int) VbglR3SharedFolderGetName(HGCMCLIENTID idClient, uint32_t u32Root, char **ppszName)
 {
     AssertPtr(ppszName);
 
     VBoxSFQueryMapName Msg;
 
     Msg.callInfo.result = VERR_WRONG_ORDER;
-    Msg.callInfo.u32ClientID = u32ClientId;
+    Msg.callInfo.u32ClientID = idClient;
     Msg.callInfo.u32Function = SHFL_FN_QUERY_MAP_NAME;
     Msg.callInfo.cParms = 2;
 
@@ -287,18 +286,18 @@ VBGLR3DECL(int) VbglR3SharedFolderGetMountPrefix(char **ppszPrefix)
     AssertPtrReturn(ppszPrefix, VERR_INVALID_POINTER);
     int rc;
 #ifdef VBOX_WITH_GUEST_PROPS
-    uint32_t u32ClientIdGuestProp;
-    rc = VbglR3GuestPropConnect(&u32ClientIdGuestProp);
+    HGCMCLIENTID idClientGuestProp;
+    rc = VbglR3GuestPropConnect(&idClientGuestProp);
     if (RT_SUCCESS(rc))
     {
-        rc = VbglR3GuestPropReadValueAlloc(u32ClientIdGuestProp, "/VirtualBox/GuestAdd/SharedFolders/MountPrefix", ppszPrefix);
+        rc = VbglR3GuestPropReadValueAlloc(idClientGuestProp, "/VirtualBox/GuestAdd/SharedFolders/MountPrefix", ppszPrefix);
         if (rc == VERR_NOT_FOUND) /* No prefix set? Then set the default. */
         {
 #endif
             rc = RTStrDupEx(ppszPrefix, "sf_");
 #ifdef VBOX_WITH_GUEST_PROPS
         }
-        VbglR3GuestPropDisconnect(u32ClientIdGuestProp);
+        VbglR3GuestPropDisconnect(idClientGuestProp);
     }
 #endif
     return rc;
@@ -319,12 +318,12 @@ VBGLR3DECL(int) VbglR3SharedFolderGetMountDir(char **ppszDir)
     AssertPtrReturn(ppszDir, VERR_INVALID_POINTER);
     int rc;
 #ifdef VBOX_WITH_GUEST_PROPS
-    uint32_t u32ClientIdGuestProp;
-    rc = VbglR3GuestPropConnect(&u32ClientIdGuestProp);
+    HGCMCLIENTID idClientGuestProp;
+    rc = VbglR3GuestPropConnect(&idClientGuestProp);
     if (RT_SUCCESS(rc))
     {
-        rc = VbglR3GuestPropReadValueAlloc(u32ClientIdGuestProp, "/VirtualBox/GuestAdd/SharedFolders/MountDir", ppszDir);
-        VbglR3GuestPropDisconnect(u32ClientIdGuestProp);
+        rc = VbglR3GuestPropReadValueAlloc(idClientGuestProp, "/VirtualBox/GuestAdd/SharedFolders/MountDir", ppszDir);
+        VbglR3GuestPropDisconnect(idClientGuestProp);
     }
 #endif
     return rc;
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp
index 2caaf62..6ae6719 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibVideo.cpp
@@ -97,7 +97,8 @@ VBGLR3DECL(int) VbglR3VideoAccelFlush(void)
  * @param   pvImg       Pointer to the image data (can be NULL).
  * @param   cbImg       Size of the image data pointed to by pvImg.
  */
-VBGLR3DECL(int) VbglR3SetPointerShape(uint32_t fFlags, uint32_t xHot, uint32_t yHot, uint32_t cx, uint32_t cy, const void *pvImg, size_t cbImg)
+VBGLR3DECL(int) VbglR3SetPointerShape(uint32_t fFlags, uint32_t xHot, uint32_t yHot, uint32_t cx, uint32_t cy,
+                                      const void *pvImg, size_t cbImg)
 {
     VMMDevReqMousePointer *pReq;
     size_t cbReq = vmmdevGetMousePointerReqSize(cx, cy);
@@ -152,7 +153,7 @@ VBGLR3DECL(int) VbglR3SetPointerShapeReq(VMMDevReqMousePointer *pReq)
  *                      requested (a value of zero means do not change).
  * @param   pcBits      Where to store the bits per pixel requested (a value
  *                      of zero means do not change).
- * @param   iDisplay    Where to store the display number the request was for
+ * @param   piDisplay   Where to store the display number the request was for
  *                      - 0 for the primary display, 1 for the first
  *                      secondary display, etc.
  * @param   fAck        whether or not to acknowledge the newest request sent by
@@ -211,11 +212,10 @@ static int getDisplayChangeRequest2(uint32_t *pcx, uint32_t *pcy,
  *                      Optional.
  * @param   pdy         New vertical position of the secondary monitor.
  *                      Optional.
- * param    pfEnabled   Secondary monitor is enabled or not.
- *                      Optional.
- * param    pfChangeOrigin  Whether the mode hint retrieved included information
- *                      about origin/display offset inside the frame-buffer.
- *                      Optional.
+ * @param   pfEnabled   Secondary monitor is enabled or not. Optional.
+ * @param   pfChangeOrigin  Whether the mode hint retrieved included
+ *                      information about origin/display offset inside the
+ *                      frame-buffer. Optional.
  *
  */
 VBGLR3DECL(int) VbglR3GetDisplayChangeRequest(uint32_t *pcx, uint32_t *pcy,
@@ -228,6 +228,7 @@ VBGLR3DECL(int) VbglR3GetDisplayChangeRequest(uint32_t *pcx, uint32_t *pcy,
 {
     VMMDevDisplayChangeRequestEx Req;
     int rc = VINF_SUCCESS;
+
     AssertPtrReturn(pcx, VERR_INVALID_PARAMETER);
     AssertPtrReturn(pcy, VERR_INVALID_PARAMETER);
     AssertPtrReturn(pcBits, VERR_INVALID_PARAMETER);
@@ -236,6 +237,7 @@ VBGLR3DECL(int) VbglR3GetDisplayChangeRequest(uint32_t *pcx, uint32_t *pcy,
     AssertPtrReturn(piDisplay, VERR_INVALID_PARAMETER);
     AssertPtrNullReturn(pfEnabled, VERR_INVALID_PARAMETER);
     AssertPtrNullReturn(pfChangeOrigin, VERR_INVALID_PARAMETER);
+
     RT_ZERO(Req);
     rc = vmmdevInitRequest(&Req.header, VMMDevReq_GetDisplayChangeRequestEx);
     AssertRCReturn(rc, rc);
@@ -258,7 +260,9 @@ VBGLR3DECL(int) VbglR3GetDisplayChangeRequest(uint32_t *pcx, uint32_t *pcy,
             *pfEnabled = Req.fEnabled;
         if (pfChangeOrigin)
             *pfChangeOrigin = Req.fChangeOrigin;
+        return VINF_SUCCESS;
     }
+
     /* NEEDS TESTING: test below with current Additions on VBox 4.1 or older. */
     /** @todo Can we find some standard grep-able string for "NEEDS TESTING"? */
     if (rc == VERR_NOT_IMPLEMENTED)  /* Fall back to the old API. */
@@ -312,33 +316,40 @@ VBGLR3DECL(int) VbglR3VideoModeGetHighestSavedScreen(unsigned *pcScreen)
 #if defined(VBOX_WITH_GUEST_PROPS)
     using namespace guestProp;
 
-    int rc, rc2 = VERR_UNRESOLVED_ERROR;
-    uint32_t u32ClientId = 0;
-    const char *pszPattern = VIDEO_PROP_PREFIX"*";
+    int rc;
+    HGCMCLIENTID idClient = 0;
     PVBGLR3GUESTPROPENUM pHandle = NULL;
-    const char *pszName;
+    const char *pszName = NULL;
     unsigned cHighestScreen = 0;
 
+    /* Validate input. */
     AssertPtrReturn(pcScreen, VERR_INVALID_POINTER);
-    rc = VbglR3GuestPropConnect(&u32ClientId);
-    if (RT_SUCCESS(rc))
-        rc = VbglR3GuestPropEnum(u32ClientId, &pszPattern, 1, &pHandle,
-                                 &pszName, NULL, NULL, NULL);
-    if (u32ClientId != 0)
-        rc2 = VbglR3GuestPropDisconnect(u32ClientId);
+
+    /* Query the data. */
+    rc = VbglR3GuestPropConnect(&idClient);
     if (RT_SUCCESS(rc))
-        rc = rc2;
-    while (pszName != NULL && RT_SUCCESS(rc))
+    {
+        const char *pszPattern = VIDEO_PROP_PREFIX"*";
+        rc = VbglR3GuestPropEnum(idClient, &pszPattern, 1, &pHandle, &pszName, NULL, NULL, NULL);
+        int rc2 = VbglR3GuestPropDisconnect(idClient);
+        if (RT_FAILURE(rc2) && RT_SUCCESS(rc))
+            rc = rc2;
+    }
+
+    /* Process the data. */
+    while (RT_SUCCESS(rc) && pszName != NULL)
     {
         uint32_t cScreen;
 
-        rc = RTStrToUInt32Full(pszName + sizeof(VIDEO_PROP_PREFIX) - 1, 10,
-                               &cScreen);
+        rc = RTStrToUInt32Full(pszName + sizeof(VIDEO_PROP_PREFIX) - 1, 10, &cScreen);
         if (RT_SUCCESS(rc))  /* There may be similar properties with text. */
             cHighestScreen = RT_MAX(cHighestScreen, cScreen);
         rc = VbglR3GuestPropEnumNext(pHandle, &pszName, NULL, NULL, NULL);
     }
+
     VbglR3GuestPropEnumFree(pHandle);
+
+    /* Return result. */
     if (RT_SUCCESS(rc))
         *pcScreen = cHighestScreen;
     return rc;
@@ -351,7 +362,7 @@ VBGLR3DECL(int) VbglR3VideoModeGetHighestSavedScreen(unsigned *pcScreen)
  * Save video mode parameters to the guest property store.
  *
  * @returns iprt status value
- * @param   cScreen   virtual screen number
+ * @param   idScreen  The virtual screen number.
  * @param   cx        mode width
  * @param   cy        mode height
  * @param   cBits     bits per pixel for the mode
@@ -359,41 +370,39 @@ VBGLR3DECL(int) VbglR3VideoModeGetHighestSavedScreen(unsigned *pcScreen)
  * @param   y         virtual screen Y offset
  * @param   fEnabled  is this virtual screen enabled?
  */
-VBGLR3DECL(int) VbglR3SaveVideoMode(unsigned cScreen, unsigned cx, unsigned cy,
-                                    unsigned cBits, unsigned x, unsigned y,
-                                    bool fEnabled)
+VBGLR3DECL(int) VbglR3SaveVideoMode(unsigned idScreen, unsigned cx, unsigned cy, unsigned cBits,
+                                    unsigned x, unsigned y, bool fEnabled)
 {
 #if defined(VBOX_WITH_GUEST_PROPS)
     using namespace guestProp;
 
-    char szModeName[MAX_NAME_LEN];
-    char szModeParms[MAX_VALUE_LEN];
-    uint32_t u32ClientId = 0;
+    HGCMCLIENTID idClient = 0;
     unsigned cx2, cy2, cBits2, x2, y2, cHighestScreen, cHighestScreen2;
     bool fEnabled2;
-    int rc, rc2 = VERR_UNRESOLVED_ERROR;
+    int rc;
+    int rc2 = VERR_INTERNAL_ERROR;
 
     rc = VbglR3VideoModeGetHighestSavedScreen(&cHighestScreen);
-    RTStrPrintf(szModeName, sizeof(szModeName), VIDEO_PROP_PREFIX"%u", cScreen);
-    RTStrPrintf(szModeParms, sizeof(szModeParms), "%ux%ux%u,%ux%u,%u", cx, cy,
-                cBits, x, y, (unsigned) fEnabled);
     if (RT_SUCCESS(rc))
-        rc = VbglR3GuestPropConnect(&u32ClientId);
+        rc = VbglR3GuestPropConnect(&idClient);
     if (RT_SUCCESS(rc))
     {
-        rc = VbglR3GuestPropWriteValue(u32ClientId, szModeName, szModeParms);
+        char szModeName[MAX_NAME_LEN];
+        char szModeParms[MAX_VALUE_LEN];
+        RTStrPrintf(szModeName, sizeof(szModeName), VIDEO_PROP_PREFIX "%u", idScreen);
+        RTStrPrintf(szModeParms, sizeof(szModeParms), "%ux%ux%u,%ux%u,%u", cx, cy, cBits, x, y, (unsigned) fEnabled);
+
+        rc = VbglR3GuestPropWriteValue(idClient, szModeName, szModeParms);
         /* Write out the mode using the legacy name too, in case the user
          * re-installs older Additions. */
-        if (cScreen == 0)
+        if (idScreen == 0)
         {
-            RTStrPrintf(szModeParms, sizeof(szModeParms), "%ux%ux%u", cx, cy,
-                        cBits);
-            VbglR3GuestPropWriteValue(u32ClientId, VIDEO_PROP_PREFIX"SavedMode",
-                                      szModeParms);
+            RTStrPrintf(szModeParms, sizeof(szModeParms), "%ux%ux%u", cx, cy, cBits);
+            VbglR3GuestPropWriteValue(idClient, VIDEO_PROP_PREFIX "SavedMode", szModeParms);
         }
     }
-    if (u32ClientId != 0)
-        rc2 = VbglR3GuestPropDisconnect(u32ClientId);
+    if (idClient != 0)
+        rc2 = VbglR3GuestPropDisconnect(idClient);
     if (rc == VINF_PERMISSION_DENIED)
         return rc;
     if (RT_SUCCESS(rc))
@@ -402,18 +411,16 @@ VBGLR3DECL(int) VbglR3SaveVideoMode(unsigned cScreen, unsigned cx, unsigned cy,
      * changing saved settings at the same time as us. */
     if (RT_SUCCESS(rc))
     {
-        rc = VbglR3RetrieveVideoMode(cScreen, &cx2, &cy2, &cBits2, &x2, &y2,
-                                     &fEnabled2);
+        rc = VbglR3RetrieveVideoMode(idScreen, &cx2, &cy2, &cBits2, &x2, &y2, &fEnabled2);
         if (   RT_SUCCESS(rc)
-            && (   cx != cx2 || cy != cy2 || cBits != cBits2
-                || x != x2 || y != y2 || fEnabled != fEnabled2))
+            && (cx != cx2 || cy != cy2 || cBits != cBits2 || x != x2 || y != y2 || fEnabled != fEnabled2))
             rc = VERR_WRITE_ERROR;
     }
     /* Sanity check 2.  Same comment. */
     if (RT_SUCCESS(rc))
         rc = VbglR3VideoModeGetHighestSavedScreen(&cHighestScreen2);
     if (RT_SUCCESS(rc))
-        if (cHighestScreen2 != RT_MAX(cHighestScreen, cScreen))
+        if (cHighestScreen2 != RT_MAX(cHighestScreen, idScreen))
             rc = VERR_INTERNAL_ERROR;
     return rc;
 #else /* !VBOX_WITH_GUEST_PROPS */
@@ -426,7 +433,7 @@ VBGLR3DECL(int) VbglR3SaveVideoMode(unsigned cScreen, unsigned cx, unsigned cy,
  * Retrieve video mode parameters from the guest property store.
  *
  * @returns iprt status value
- * @param   cScreen    the virtual screen number
+ * @param   idScreen   The virtual screen number.
  * @param   pcx        where to store the mode width
  * @param   pcy        where to store the mode height
  * @param   pcBits     where to store the bits per pixel for the mode
@@ -434,7 +441,7 @@ VBGLR3DECL(int) VbglR3SaveVideoMode(unsigned cScreen, unsigned cx, unsigned cy,
  * @param   py         where to store the virtual screen Y offset
  * @param   pfEnabled  where to store whether this virtual screen is enabled
  */
-VBGLR3DECL(int) VbglR3RetrieveVideoMode(unsigned cScreen,
+VBGLR3DECL(int) VbglR3RetrieveVideoMode(unsigned idScreen,
                                         unsigned *pcx, unsigned *pcy,
                                         unsigned *pcBits,
                                         unsigned *px, unsigned *py,
@@ -443,15 +450,14 @@ VBGLR3DECL(int) VbglR3RetrieveVideoMode(unsigned cScreen,
 #if defined(VBOX_WITH_GUEST_PROPS)
     using namespace guestProp;
 
-/*
- * First we retrieve the video mode which is saved as a string in the
- * guest property store.
- */
+    /*
+     * First we retrieve the video mode which is saved as a string in the
+     * guest property store.
+     */
     /* The buffer for VbglR3GuestPropReadValue.  If this is too small then
      * something is wrong with the data stored in the property. */
-    char szModeName[MAX_NAME_LEN];
     char szModeParms[1024];
-    uint32_t u32ClientId = 0;
+    HGCMCLIENTID idClient = 0;
     int cMatches;
     unsigned cx, cy, cBits;
     unsigned x = 0;
@@ -460,33 +466,32 @@ VBGLR3DECL(int) VbglR3RetrieveVideoMode(unsigned cScreen,
     int rc;
     int rc2 = VERR_UNRESOLVED_ERROR;
 
-    /** @todo add a VbglR3GuestPropReadValueF/FV that does the RTStrPrintf for you. */
-    RTStrPrintf(szModeName, sizeof(szModeName), VIDEO_PROP_PREFIX"%u", cScreen);
-    rc = VbglR3GuestPropConnect(&u32ClientId);
+    rc = VbglR3GuestPropConnect(&idClient);
     if (RT_SUCCESS(rc))
     {
-        rc = VbglR3GuestPropReadValue(u32ClientId, szModeName, szModeParms,
-                                      sizeof(szModeParms), NULL);
+        /** @todo add a VbglR3GuestPropReadValueF/FV that does the RTStrPrintf for you. */
+        char szModeName[MAX_NAME_LEN];
+        RTStrPrintf(szModeName, sizeof(szModeName), VIDEO_PROP_PREFIX "%u", idScreen);
+        rc = VbglR3GuestPropReadValue(idClient, szModeName, szModeParms, sizeof(szModeParms), NULL);
         /* Try legacy single screen name. */
-        if (rc == VERR_NOT_FOUND && cScreen == 0)
-            rc = VbglR3GuestPropReadValue(u32ClientId,
+        if (rc == VERR_NOT_FOUND && idScreen == 0)
+            rc = VbglR3GuestPropReadValue(idClient,
                                           VIDEO_PROP_PREFIX"SavedMode",
                                           szModeParms, sizeof(szModeParms),
                                           NULL);
     }
-    if (u32ClientId != 0)
-        rc2 = VbglR3GuestPropDisconnect(u32ClientId);
+    if (idClient != 0)
+        rc2 = VbglR3GuestPropDisconnect(idClient);
     if (RT_SUCCESS(rc))
         rc = rc2;
 
-/*
- * Now we convert the string returned to numeric values.
- */
+    /*
+     * Now we convert the string returned to numeric values.
+     */
     if (RT_SUCCESS(rc))
     {
         char c1, c2;
-        cMatches = sscanf(szModeParms, "%5ux%5ux%2u%c%5ux%5u,%1u%c", &cx, &cy, &cBits,
-                          &c1, &x, &y, &fEnabled, &c2);
+        cMatches = sscanf(szModeParms, "%5ux%5ux%2u%c%5ux%5u,%1u%c", &cx, &cy, &cBits, &c1, &x, &y, &fEnabled, &c2);
         if ((cMatches == 7 && c1 == ',') || cMatches == 3)
             rc = VINF_SUCCESS;
         else if (cMatches < 0)
@@ -494,9 +499,10 @@ VBGLR3DECL(int) VbglR3RetrieveVideoMode(unsigned cScreen,
         else
             rc = VERR_PARSE_ERROR;
     }
-/*
- * And clean up and return the values if we successfully obtained them.
- */
+
+    /*
+     * And clean up and return the values if we successfully obtained them.
+     */
     if (RT_SUCCESS(rc))
     {
         if (pcx)
diff --git a/src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp b/src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp
index 0b532f1..a5d64c5 100644
--- a/src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp
+++ b/src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp
@@ -27,10 +27,9 @@
 #include "VBGLInternal.h"
 
 
-DECLVBGL(int) VbglQueryVMMDevMemory (VMMDevMemory **ppVMMDevMemory)
+DECLVBGL(int) VbglQueryVMMDevMemory(VMMDevMemory **ppVMMDevMemory)
 {
-    int rc = vbglR0Enter ();
-
+    int rc = vbglR0Enter();
     if (RT_FAILURE(rc))
         return rc;
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxService-os2.def b/src/VBox/Additions/common/VBoxService/VBoxService-os2.def
index 7606735..b247c69 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxService-os2.def
+++ b/src/VBox/Additions/common/VBoxService/VBoxService-os2.def
@@ -1,3 +1,4 @@
+; $Id: VBoxService-os2.def $
 ;; @file
 ; VBoxService - OS/2 definition file.
 ;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxService-win.cpp b/src/VBox/Additions/common/VBoxService/VBoxService-win.cpp
index 7fa8654..30fc5a3 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxService-win.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxService-win.cpp
@@ -33,7 +33,7 @@
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static void WINAPI vboxServiceWinMain(DWORD argc, LPTSTR *argv);
+static void WINAPI vgsvcWinMain(DWORD argc, LPTSTR *argv);
 
 
 /*********************************************************************************************************************************
@@ -46,7 +46,7 @@ static RTSEMEVENT     g_WindowsEvent = NIL_RTSEMEVENT;
 
 static SERVICE_TABLE_ENTRY const g_aServiceTable[] =
 {
-    { VBOXSERVICE_NAME, vboxServiceWinMain },
+    { VBOXSERVICE_NAME, vgsvcWinMain },
     { NULL,             NULL}
 };
 
@@ -56,7 +56,7 @@ static SERVICE_TABLE_ENTRY const g_aServiceTable[] =
  * @todo Add full unicode support.
  * @todo Add event log capabilities / check return values.
  */
-static DWORD vboxServiceWinAddAceToObjectsSecurityDescriptor(LPTSTR pszObjName,
+static DWORD vgsvcWinAddAceToObjectsSecurityDescriptor(LPTSTR pszObjName,
                                                              SE_OBJECT_TYPE ObjectType,
                                                              LPTSTR pszTrustee,
                                                              TRUSTEE_FORM TrusteeForm,
@@ -79,9 +79,9 @@ static DWORD vboxServiceWinAddAceToObjectsSecurityDescriptor(LPTSTR pszObjName,
     if (ERROR_SUCCESS != dwRes)
     {
         if (dwRes == ERROR_FILE_NOT_FOUND)
-            VBoxServiceError("AddAceToObjectsSecurityDescriptor: Object not found/installed: %s\n", pszObjName);
+            VGSvcError("AddAceToObjectsSecurityDescriptor: Object not found/installed: %s\n", pszObjName);
         else
-            VBoxServiceError("AddAceToObjectsSecurityDescriptor: GetNamedSecurityInfo: Error %u\n", dwRes);
+            VGSvcError("AddAceToObjectsSecurityDescriptor: GetNamedSecurityInfo: Error %u\n", dwRes);
         goto l_Cleanup;
     }
 
@@ -97,7 +97,7 @@ static DWORD vboxServiceWinAddAceToObjectsSecurityDescriptor(LPTSTR pszObjName,
     dwRes = SetEntriesInAcl(1, &ea, pOldDACL, &pNewDACL);
     if (ERROR_SUCCESS != dwRes)
     {
-        VBoxServiceError("AddAceToObjectsSecurityDescriptor: SetEntriesInAcl: Error %u\n", dwRes);
+        VGSvcError("AddAceToObjectsSecurityDescriptor: SetEntriesInAcl: Error %u\n", dwRes);
         goto l_Cleanup;
     }
 
@@ -107,7 +107,7 @@ static DWORD vboxServiceWinAddAceToObjectsSecurityDescriptor(LPTSTR pszObjName,
                                  NULL, NULL, pNewDACL, NULL);
     if (ERROR_SUCCESS != dwRes)
     {
-        VBoxServiceError("AddAceToObjectsSecurityDescriptor: SetNamedSecurityInfo: Error %u\n", dwRes);
+        VGSvcError("AddAceToObjectsSecurityDescriptor: SetNamedSecurityInfo: Error %u\n", dwRes);
         goto l_Cleanup;
     }
 
@@ -124,12 +124,12 @@ l_Cleanup:
 
 
 /** Reports our current status to the SCM. */
-static BOOL vboxServiceWinSetStatus(DWORD dwStatus, DWORD dwCheckPoint)
+static BOOL vgsvcWinSetStatus(DWORD dwStatus, DWORD dwCheckPoint)
 {
     if (g_hWinServiceStatus == NULL) /* Program could be in testing mode, so no service environment available. */
         return FALSE;
 
-    VBoxServiceVerbose(2, "Setting service status to: %ld\n", dwStatus);
+    VGSvcVerbose(2, "Setting service status to: %ld\n", dwStatus);
     g_dwWinServiceLastStatus = dwStatus;
 
     SERVICE_STATUS ss;
@@ -153,7 +153,7 @@ static BOOL vboxServiceWinSetStatus(DWORD dwStatus, DWORD dwCheckPoint)
                 ss.dwControlsAccepted |= SERVICE_ACCEPT_SESSIONCHANGE;
         }
         else
-            VBoxServiceError("Error determining OS version, rc=%Rrc\n", rc);
+            VGSvcError("Error determining OS version, rc=%Rrc\n", rc);
 #endif
     }
 
@@ -164,7 +164,7 @@ static BOOL vboxServiceWinSetStatus(DWORD dwStatus, DWORD dwCheckPoint)
 
     BOOL fStatusSet = SetServiceStatus(g_hWinServiceStatus, &ss);
     if (!fStatusSet)
-        VBoxServiceError("Error reporting service status=%ld (controls=%x, checkpoint=%ld) to SCM: %ld\n",
+        VGSvcError("Error reporting service status=%ld (controls=%x, checkpoint=%ld) to SCM: %ld\n",
                          dwStatus, ss.dwControlsAccepted, dwCheckPoint, GetLastError());
     return fStatusSet;
 }
@@ -175,13 +175,13 @@ static BOOL vboxServiceWinSetStatus(DWORD dwStatus, DWORD dwCheckPoint)
  *
  * @param   uCheckPoint         Some number.
  */
-void VBoxServiceWinSetStopPendingStatus(uint32_t uCheckPoint)
+void VGSvcWinSetStopPendingStatus(uint32_t uCheckPoint)
 {
-    vboxServiceWinSetStatus(SERVICE_STOP_PENDING, uCheckPoint);
+    vgsvcWinSetStatus(SERVICE_STOP_PENDING, uCheckPoint);
 }
 
 
-static RTEXITCODE vboxServiceWinSetDesc(SC_HANDLE hService)
+static RTEXITCODE vgsvcWinSetDesc(SC_HANDLE hService)
 {
 #ifndef TARGET_NT4
     /* On W2K+ there's ChangeServiceConfig2() which lets us set some fields
@@ -193,7 +193,7 @@ static RTEXITCODE vboxServiceWinSetDesc(SC_HANDLE hService)
                               SERVICE_CONFIG_DESCRIPTION, /* Service info level */
                               &desc))
     {
-        VBoxServiceError("Cannot set the service description! Error: %ld\n", GetLastError());
+        VGSvcError("Cannot set the service description! Error: %ld\n", GetLastError());
         return RTEXITCODE_FAILURE;
     }
 #endif
@@ -204,9 +204,9 @@ static RTEXITCODE vboxServiceWinSetDesc(SC_HANDLE hService)
 /**
  * Installs the service.
  */
-RTEXITCODE VBoxServiceWinInstall(void)
+RTEXITCODE VGSvcWinInstall(void)
 {
-    VBoxServiceVerbose(1, "Installing service ...\n");
+    VGSvcVerbose(1, "Installing service ...\n");
 
     TCHAR imagePath[MAX_PATH] = { 0 };
     GetModuleFileName(NULL, imagePath, sizeof(imagePath));
@@ -214,7 +214,7 @@ RTEXITCODE VBoxServiceWinInstall(void)
     SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
     if (hSCManager == NULL)
     {
-        VBoxServiceError("Could not open SCM! Error: %ld\n", GetLastError());
+        VGSvcError("Could not open SCM! Error: %ld\n", GetLastError());
         return RTEXITCODE_FAILURE;
     }
 
@@ -226,14 +226,14 @@ RTEXITCODE VBoxServiceWinInstall(void)
                                         SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
                                         imagePath, NULL, NULL, NULL, NULL, NULL);
     if (hService != NULL)
-        VBoxServiceVerbose(0, "Service successfully installed!\n");
+        VGSvcVerbose(0, "Service successfully installed!\n");
     else
     {
         DWORD dwErr = GetLastError();
         switch (dwErr)
         {
             case ERROR_SERVICE_EXISTS:
-                VBoxServiceVerbose(1, "Service already exists, just updating the service config.\n");
+                VGSvcVerbose(1, "Service already exists, just updating the service config.\n");
                 hService = OpenService(hSCManager, VBOXSERVICE_NAME, SERVICE_ALL_ACCESS);
                 if (hService)
                 {
@@ -248,22 +248,22 @@ RTEXITCODE VBoxServiceWinInstall(void)
                                              NULL,
                                              NULL,
                                              VBOXSERVICE_FRIENDLY_NAME))
-                        VBoxServiceVerbose(1, "The service config has been successfully updated.\n");
+                        VGSvcVerbose(1, "The service config has been successfully updated.\n");
                     else
-                        rc = VBoxServiceError("Could not change service config! Error: %ld\n", GetLastError());
+                        rc = VGSvcError("Could not change service config! Error: %ld\n", GetLastError());
                 }
                 else
-                    rc = VBoxServiceError("Could not open service! Error: %ld\n", GetLastError());
+                    rc = VGSvcError("Could not open service! Error: %ld\n", GetLastError());
                 break;
 
             default:
-                rc = VBoxServiceError("Could not create service! Error: %ld\n", dwErr);
+                rc = VGSvcError("Could not create service! Error: %ld\n", dwErr);
                 break;
         }
     }
 
     if (rc == RTEXITCODE_SUCCESS)
-        rc = vboxServiceWinSetDesc(hService);
+        rc = vgsvcWinSetDesc(hService);
 
     CloseServiceHandle(hService);
     CloseServiceHandle(hSCManager);
@@ -273,14 +273,14 @@ RTEXITCODE VBoxServiceWinInstall(void)
 /**
  * Uninstalls the service.
  */
-RTEXITCODE VBoxServiceWinUninstall(void)
+RTEXITCODE VGSvcWinUninstall(void)
 {
-    VBoxServiceVerbose(1, "Uninstalling service ...\n");
+    VGSvcVerbose(1, "Uninstalling service ...\n");
 
     SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
     if (hSCManager == NULL)
     {
-        VBoxServiceError("Could not open SCM! Error: %d\n", GetLastError());
+        VGSvcError("Could not open SCM! Error: %d\n", GetLastError());
         return RTEXITCODE_FAILURE;
     }
 
@@ -305,22 +305,22 @@ RTEXITCODE VBoxServiceWinUninstall(void)
                 RegCloseKey(hKey);
             }
 
-            VBoxServiceVerbose(0, "Service successfully uninstalled!\n");
+            VGSvcVerbose(0, "Service successfully uninstalled!\n");
             rcExit = RTEXITCODE_SUCCESS;
         }
         else
-            rcExit = VBoxServiceError("Could not remove service! Error: %d\n", GetLastError());
+            rcExit = VGSvcError("Could not remove service! Error: %d\n", GetLastError());
         CloseServiceHandle(hService);
     }
     else
-        rcExit = VBoxServiceError("Could not open service! Error: %d\n", GetLastError());
+        rcExit = VGSvcError("Could not open service! Error: %d\n", GetLastError());
     CloseServiceHandle(hSCManager);
 
     return rcExit;
 }
 
 
-static int vboxServiceWinStart(void)
+static int vgsvcWinStart(void)
 {
     int rc = VINF_SUCCESS;
 
@@ -338,7 +338,7 @@ static int vboxServiceWinStart(void)
     }
     else
     {
-        DWORD dwRes = vboxServiceWinAddAceToObjectsSecurityDescriptor(TEXT("\\\\.\\VBoxMiniRdrDN"),
+        DWORD dwRes = vgsvcWinAddAceToObjectsSecurityDescriptor(TEXT("\\\\.\\VBoxMiniRdrDN"),
                                                                       SE_FILE_OBJECT,
                                                                       (LPTSTR)pBuiltinUsersSID,
                                                                       TRUSTEE_IS_SID,
@@ -362,27 +362,27 @@ static int vboxServiceWinStart(void)
 
     if (RT_SUCCESS(rc))
     {
-        vboxServiceWinSetStatus(SERVICE_START_PENDING, 0);
+        vgsvcWinSetStatus(SERVICE_START_PENDING, 0);
 
-        rc = VBoxServiceStartServices();
+        rc = VGSvcStartServices();
         if (RT_SUCCESS(rc))
         {
-            vboxServiceWinSetStatus(SERVICE_RUNNING, 0);
-            VBoxServiceMainWait();
+            vgsvcWinSetStatus(SERVICE_RUNNING, 0);
+            VGSvcMainWait();
         }
         else
         {
-            vboxServiceWinSetStatus(SERVICE_STOPPED, 0);
+            vgsvcWinSetStatus(SERVICE_STOPPED, 0);
 #if 0 /** @todo r=bird: Enable this if SERVICE_CONTROL_STOP isn't triggered automatically */
-            VBoxServiceStopServices();
+            VGSvcStopServices();
 #endif
         }
     }
     else
-        vboxServiceWinSetStatus(SERVICE_STOPPED, 0);
+        vgsvcWinSetStatus(SERVICE_STOPPED, 0);
 
     if (RT_FAILURE(rc))
-        VBoxServiceError("Service failed to start with rc=%Rrc!\n", rc);
+        VGSvcError("Service failed to start with rc=%Rrc!\n", rc);
 
     return rc;
 }
@@ -397,17 +397,17 @@ static int vboxServiceWinStart(void)
  * @returns RTEXITCODE_SUCCESS on normal return after service shutdown.
  *          Something else on failure, error will have been reported.
  */
-RTEXITCODE VBoxServiceWinEnterCtrlDispatcher(void)
+RTEXITCODE VGSvcWinEnterCtrlDispatcher(void)
 {
     if (!StartServiceCtrlDispatcher(&g_aServiceTable[0]))
-        return VBoxServiceError("StartServiceCtrlDispatcher: %u. Please start %s with option -f (foreground)!\n",
+        return VGSvcError("StartServiceCtrlDispatcher: %u. Please start %s with option -f (foreground)!\n",
                                 GetLastError(), g_pszProgName);
     return RTEXITCODE_SUCCESS;
 }
 
 
 #ifndef TARGET_NT4
-static const char* vboxServiceWTSStateToString(DWORD dwEvent)
+static const char* vgsvcWTSStateToString(DWORD dwEvent)
 {
     switch (dwEvent)
     {
@@ -454,40 +454,40 @@ static const char* vboxServiceWTSStateToString(DWORD dwEvent)
 
 
 #ifdef TARGET_NT4
-static VOID WINAPI vboxServiceWinCtrlHandler(DWORD dwControl)
+static VOID WINAPI vgsvcWinCtrlHandler(DWORD dwControl)
 #else
-static DWORD WINAPI vboxServiceWinCtrlHandler(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext)
+static DWORD WINAPI vgsvcWinCtrlHandler(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext)
 #endif
 {
     DWORD rcRet = NO_ERROR;
 
 #ifdef TARGET_NT4
-    VBoxServiceVerbose(2, "Control handler: Control=%#x\n", dwControl);
+    VGSvcVerbose(2, "Control handler: Control=%#x\n", dwControl);
 #else
-    VBoxServiceVerbose(2, "Control handler: Control=%#x, EventType=%#x\n", dwControl, dwEventType);
+    VGSvcVerbose(2, "Control handler: Control=%#x, EventType=%#x\n", dwControl, dwEventType);
 #endif
 
     switch (dwControl)
     {
         case SERVICE_CONTROL_INTERROGATE:
-            vboxServiceWinSetStatus(g_dwWinServiceLastStatus, 0);
+            vgsvcWinSetStatus(g_dwWinServiceLastStatus, 0);
             break;
 
         case SERVICE_CONTROL_STOP:
         case SERVICE_CONTROL_SHUTDOWN:
         {
-            vboxServiceWinSetStatus(SERVICE_STOP_PENDING, 0);
+            vgsvcWinSetStatus(SERVICE_STOP_PENDING, 0);
 
-            int rc2 = VBoxServiceStopServices();
+            int rc2 = VGSvcStopServices();
             if (RT_FAILURE(rc2))
                 rcRet = ERROR_GEN_FAILURE;
             else
             {
-                rc2 = VBoxServiceReportStatus(VBoxGuestFacilityStatus_Terminated);
+                rc2 = VGSvcReportStatus(VBoxGuestFacilityStatus_Terminated);
                 AssertRC(rc2);
             }
 
-            vboxServiceWinSetStatus(SERVICE_STOPPED, 0);
+            vgsvcWinSetStatus(SERVICE_STOPPED, 0);
             break;
         }
 
@@ -498,19 +498,19 @@ static DWORD WINAPI vboxServiceWinCtrlHandler(DWORD dwControl, DWORD dwEventType
             PWTSSESSION_NOTIFICATION pNotify = (PWTSSESSION_NOTIFICATION)lpEventData;
             Assert(pNotify->cbSize == sizeof(WTSSESSION_NOTIFICATION));
 
-            VBoxServiceVerbose(1, "Control handler: %s (Session=%ld, Event=%#x)\n",
-                               vboxServiceWTSStateToString(dwEventType),
+            VGSvcVerbose(1, "Control handler: %s (Session=%ld, Event=%#x)\n",
+                               vgsvcWTSStateToString(dwEventType),
                                pNotify->dwSessionId, dwEventType);
 
             /* Handle all events, regardless of dwEventType. */
-            int rc2 = VBoxServiceVMInfoSignal();
+            int rc2 = VGSvcVMInfoSignal();
             AssertRC(rc2);
             break;
         }
 # endif /* !TARGET_NT4 */
 
         default:
-            VBoxServiceVerbose(1, "Control handler: Function not implemented: %#x\n", dwControl);
+            VGSvcVerbose(1, "Control handler: Function not implemented: %#x\n", dwControl);
             rcRet = ERROR_CALL_NOT_IMPLEMENTED;
             break;
     }
@@ -521,18 +521,18 @@ static DWORD WINAPI vboxServiceWinCtrlHandler(DWORD dwControl, DWORD dwEventType
 }
 
 
-static void WINAPI vboxServiceWinMain(DWORD argc, LPTSTR *argv)
+static void WINAPI vgsvcWinMain(DWORD argc, LPTSTR *argv)
 {
-    VBoxServiceVerbose(2, "Registering service control handler ...\n");
+    VGSvcVerbose(2, "Registering service control handler ...\n");
 #ifdef TARGET_NT4
-    g_hWinServiceStatus = RegisterServiceCtrlHandler(VBOXSERVICE_NAME, vboxServiceWinCtrlHandler);
+    g_hWinServiceStatus = RegisterServiceCtrlHandler(VBOXSERVICE_NAME, vgsvcWinCtrlHandler);
 #else
-    g_hWinServiceStatus = RegisterServiceCtrlHandlerEx(VBOXSERVICE_NAME, vboxServiceWinCtrlHandler, NULL);
+    g_hWinServiceStatus = RegisterServiceCtrlHandlerEx(VBOXSERVICE_NAME, vgsvcWinCtrlHandler, NULL);
 #endif
     if (g_hWinServiceStatus != NULL)
     {
-        VBoxServiceVerbose(2, "Service control handler registered.\n");
-        vboxServiceWinStart();
+        VGSvcVerbose(2, "Service control handler registered.\n");
+        vgsvcWinStart();
     }
     else
     {
@@ -540,13 +540,13 @@ static void WINAPI vboxServiceWinMain(DWORD argc, LPTSTR *argv)
         switch (dwErr)
         {
             case ERROR_INVALID_NAME:
-                VBoxServiceError("Invalid service name!\n");
+                VGSvcError("Invalid service name!\n");
                 break;
             case ERROR_SERVICE_DOES_NOT_EXIST:
-                VBoxServiceError("Service does not exist!\n");
+                VGSvcError("Service does not exist!\n");
                 break;
             default:
-                VBoxServiceError("Could not register service control handle! Error: %ld\n", dwErr);
+                VGSvcError("Could not register service control handle! Error: %ld\n", dwErr);
                 break;
         }
     }
diff --git a/src/VBox/Additions/common/VBoxService/VBoxService.cpp b/src/VBox/Additions/common/VBoxService/VBoxService.cpp
index f02054a..77741de 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxService.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxService.cpp
@@ -16,6 +16,37 @@
  */
 
 
+/** @page pg_vgsvc VBoxService
+ *
+ * VBoxService is a root daemon for implementing guest additions features.
+ *
+ * It is structured as one binary that contains many sub-services.  The reason
+ * for this is partially historical and partially practical.  The practical
+ * reason is that the VBoxService binary is typically statically linked, at
+ * least with IPRT and the guest library, so we save quite a lot of space having
+ * on single binary instead individual binaries for each sub-service and their
+ * helpers (currently up to 9 subservices and 8 helpers).  The historical is
+ * simply that it started its life on OS/2 dreaming of conquring Windows next,
+ * so it kind of felt natural to have it all in one binary.
+ *
+ * Even if it's structured as a single binary, it is possible, by using command
+ * line options, to start each subservice as an individual process.
+ *
+ * Subservices:
+ *  - @subpage pg_vgsvc_timesync    "Time Synchronization"
+ *  - @subpage pg_vgsvc_vminfo      "VM Information"
+ *  - @subpage pg_vgsvc_vmstats     "VM Statistics"
+ *  - @subpage pg_vgsvc_gstctrl     "Guest Control"
+ *  - @subpage pg_vgsvc_pagesharing "Page Sharing"
+ *  - @subpage pg_vgsvc_memballoon  "Memory Balooning"
+ *  - @subpage pg_vgsvc_cpuhotplug  "CPU Hot-Plugging"
+ *  - @subpage pg_vgsvc_automount   "Shared Folder Automounting"
+ *  - @subpage pg_vgsvc_clipboard   "Clipboard (OS/2 only)"
+ *
+ * Now, since the service predates a lot of stuff, including RTGetOpt, we're
+ * currently doing our own version of argument parsing here, which is kind of
+ * stupid.  That will hopefully be cleaned up eventually.
+ */
 
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
@@ -140,16 +171,24 @@ static struct
 #endif
 };
 
-/* Default call-backs for services which do not need special behaviour. */
 
-/** @copydoc VBOXSERVICE::pfnPreInit */
-DECLCALLBACK(int) VBoxServiceDefaultPreInit(void)
+/*
+ * Default call-backs for services which do not need special behaviour.
+ */
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnPreInit, Default Implementation}
+ */
+DECLCALLBACK(int) VGSvcDefaultPreInit(void)
 {
     return VINF_SUCCESS;
 }
 
-/** @copydoc VBOXSERVICE::pfnOption */
-DECLCALLBACK(int) VBoxServiceDefaultOption(const char **ppszShort, int argc,
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnOption, Default Implementation}
+ */
+DECLCALLBACK(int) VGSvcDefaultOption(const char **ppszShort, int argc,
                                            char **argv, int *pi)
 {
     NOREF(ppszShort);
@@ -160,27 +199,29 @@ DECLCALLBACK(int) VBoxServiceDefaultOption(const char **ppszShort, int argc,
     return -1;
 }
 
-/** @copydoc VBOXSERVICE::pfnInit */
-DECLCALLBACK(int) VBoxServiceDefaultInit(void)
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnInit, Default Implementation}
+ */
+DECLCALLBACK(int) VGSvcDefaultInit(void)
 {
     return VINF_SUCCESS;
 }
 
-/** @copydoc VBOXSERVICE::pfnTerm */
-DECLCALLBACK(void) VBoxServiceDefaultTerm(void)
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnTerm, Default Implementation}
+ */
+DECLCALLBACK(void) VGSvcDefaultTerm(void)
 {
     return;
 }
 
+
 /**
- * Release logger callback.
- *
- * @return  IPRT status code.
- * @param   pLoggerRelease
- * @param   enmPhase
- * @param   pfnLog
+ * @callback_method_impl{FNRTLOGPHASE, Release logger callback}
  */
-static DECLCALLBACK(void) VBoxServiceLogHeaderFooter(PRTLOGGER pLoggerRelease, RTLOGPHASE enmPhase, PFNRTLOGPHASEMSG pfnLog)
+static DECLCALLBACK(void) vgsvcLogHeaderFooter(PRTLOGGER pLoggerRelease, RTLOGPHASE enmPhase, PFNRTLOGPHASEMSG pfnLog)
 {
     /* Some introductory information. */
     static RTTIMESPEC s_TimeSpec;
@@ -194,7 +235,7 @@ static DECLCALLBACK(void) VBoxServiceLogHeaderFooter(PRTLOGGER pLoggerRelease, R
         case RTLOGPHASE_BEGIN:
         {
             pfnLog(pLoggerRelease,
-                   "VBoxService %s r%s (verbosity: %d) %s (%s %s) release log\n"
+                   "VBoxService %s r%s (verbosity: %u) %s (%s %s) release log\n"
                    "Log opened %s\n",
                    RTBldCfgVersion(), RTBldCfgRevisionStr(), g_cVerbosity, VBOX_BUILD_TARGET,
                    __DATE__, __TIME__, szTmp);
@@ -208,6 +249,7 @@ static DECLCALLBACK(void) VBoxServiceLogHeaderFooter(PRTLOGGER pLoggerRelease, R
             vrc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, szTmp, sizeof(szTmp));
             if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
                 pfnLog(pLoggerRelease, "OS Version: %s\n", szTmp);
+            vrc = RTSystemQueryOSInfo(RTSYSOSINFO_SERVICE_PACK, szTmp, sizeof(szTmp));
             if (RT_SUCCESS(vrc) || vrc == VERR_BUFFER_OVERFLOW)
                 pfnLog(pLoggerRelease, "OS Service Pack: %s\n", szTmp);
 
@@ -241,19 +283,21 @@ static DECLCALLBACK(void) VBoxServiceLogHeaderFooter(PRTLOGGER pLoggerRelease, R
             break;
 
         default:
-            /* nothing */;
+            /* nothing */
+            break;
     }
 }
 
 
 /**
  * Creates the default release logger outputting to the specified file.
- * Pass NULL for disabled logging.
+ *
+ * Pass NULL to disabled logging.
  *
  * @return  IPRT status code.
- * @param   pszLogFile              Filename for log output.  Optional.
+ * @param   pszLogFile      Filename for log output.  NULL disables logging.
  */
-int VBoxServiceLogCreate(const char *pszLogFile)
+int VGSvcLogCreate(const char *pszLogFile)
 {
     /* Create release logger (stdout + file). */
     static const char * const s_apszGroups[] = VBOX_LOGGROUP_NAMES;
@@ -270,7 +314,7 @@ int VBoxServiceLogCreate(const char *pszLogFile)
 #endif
                            RT_ELEMENTS(s_apszGroups), s_apszGroups,
                            RTLOGDEST_STDOUT | RTLOGDEST_USER,
-                           VBoxServiceLogHeaderFooter, g_cHistory, g_uHistoryFileSize, g_uHistoryFileTime,
+                           vgsvcLogHeaderFooter, g_cHistory, g_uHistoryFileSize, g_uHistoryFileTime,
                            szError, sizeof(szError), pszLogFile);
     if (RT_SUCCESS(rc))
     {
@@ -285,7 +329,7 @@ int VBoxServiceLogCreate(const char *pszLogFile)
 }
 
 
-void VBoxServiceLogDestroy(void)
+void VGSvcLogDestroy(void)
 {
     RTLogDestroy(RTLogRelSetDefaultInstance(NULL));
 }
@@ -308,7 +352,7 @@ int vboxServiceCreatePidFile(const char *pszPidFile)
             rc = rc2;
     }
     if (RT_FAILURE(rc))
-        VBoxServiceError("Failed to create PID file: %Rrc\n", rc);
+        VGSvcError("Failed to create PID file: %Rrc\n", rc);
     return rc;
 }
 
@@ -318,7 +362,7 @@ int vboxServiceCreatePidFile(const char *pszPidFile)
  *
  * @returns 1.
  */
-static int vboxServiceUsage(void)
+static int vgsvcUsage(void)
 {
     RTPrintf("Usage:\n"
              " %-12s [-f|--foreground] [-v|--verbose] [-l|--logfile <file>]\n"
@@ -370,7 +414,7 @@ static int vboxServiceUsage(void)
  * @param   pszFormat   The message text.
  * @param   ...         Format arguments.
  */
-RTEXITCODE VBoxServiceError(const char *pszFormat, ...)
+RTEXITCODE VGSvcError(const char *pszFormat, ...)
 {
     va_list args;
     va_start(args, pszFormat);
@@ -394,7 +438,7 @@ RTEXITCODE VBoxServiceError(const char *pszFormat, ...)
  * @param   pszFormat   The message text.
  * @param   ...         Format arguments.
  */
-void VBoxServiceVerbose(unsigned iLevel, const char *pszFormat, ...)
+void VGSvcVerbose(unsigned iLevel, const char *pszFormat, ...)
 {
     if (iLevel <= g_cVerbosity)
     {
@@ -429,20 +473,19 @@ void VBoxServiceVerbose(unsigned iLevel, const char *pszFormat, ...)
  * @return  IPRT status code.
  * @param   enmStatus               Status to report to the host.
  */
-int VBoxServiceReportStatus(VBoxGuestFacilityStatus enmStatus)
+int VGSvcReportStatus(VBoxGuestFacilityStatus enmStatus)
 {
     /*
      * VBoxGuestFacilityStatus_Failed is sticky.
      */
     static VBoxGuestFacilityStatus s_enmLastStatus = VBoxGuestFacilityStatus_Inactive;
-    VBoxServiceVerbose(4, "Setting VBoxService status to %u\n", enmStatus);
+    VGSvcVerbose(4, "Setting VBoxService status to %u\n", enmStatus);
     if (s_enmLastStatus != VBoxGuestFacilityStatus_Failed)
     {
-        int rc = VbglR3ReportAdditionsStatus(VBoxGuestFacilityType_VBoxService,
-                                             enmStatus, 0 /* Flags */);
+        int rc = VbglR3ReportAdditionsStatus(VBoxGuestFacilityType_VBoxService, enmStatus, 0 /* Flags */);
         if (RT_FAILURE(rc))
         {
-            VBoxServiceError("Could not report VBoxService status (%u), rc=%Rrc\n", enmStatus, rc);
+            VGSvcError("Could not report VBoxService status (%u), rc=%Rrc\n", enmStatus, rc);
             return rc;
         }
         s_enmLastStatus = enmStatus;
@@ -453,7 +496,7 @@ int VBoxServiceReportStatus(VBoxGuestFacilityStatus enmStatus)
 
 /**
  * Gets a 32-bit value argument.
- * @todo Get rid of this and VBoxServiceArgString() as soon as we have RTOpt handling.
+ * @todo Get rid of this and VGSvcArgString() as soon as we have RTOpt handling.
  *
  * @returns 0 on success, non-zero exit code on error.
  * @param   argc    The argument count.
@@ -464,7 +507,7 @@ int VBoxServiceReportStatus(VBoxGuestFacilityStatus enmStatus)
  * @param   u32Min  The minimum value.
  * @param   u32Max  The maximum value.
  */
-int VBoxServiceArgUInt32(int argc, char **argv, const char *psz, int *pi, uint32_t *pu32, uint32_t u32Min, uint32_t u32Max)
+int VGSvcArgUInt32(int argc, char **argv, const char *psz, int *pi, uint32_t *pu32, uint32_t u32Min, uint32_t u32Max)
 {
     if (*psz == ':' || *psz == '=')
         psz++;
@@ -485,8 +528,9 @@ int VBoxServiceArgUInt32(int argc, char **argv, const char *psz, int *pi, uint32
     return 0;
 }
 
-/** @todo Get rid of this and VBoxServiceArgUInt32() as soon as we have RTOpt handling. */
-int VBoxServiceArgString(int argc, char **argv, const char *psz, int *pi, char *pszBuf, size_t cbBuf)
+
+/** @todo Get rid of this and VGSvcArgUInt32() as soon as we have RTOpt handling. */
+static int vgsvcArgString(int argc, char **argv, const char *psz, int *pi, char *pszBuf, size_t cbBuf)
 {
     AssertPtrReturn(pszBuf, VERR_INVALID_POINTER);
     AssertPtrReturn(cbBuf, VERR_INVALID_PARAMETER);
@@ -506,7 +550,6 @@ int VBoxServiceArgString(int argc, char **argv, const char *psz, int *pi, char *
 }
 
 
-
 /**
  * The service thread.
  *
@@ -514,7 +557,7 @@ int VBoxServiceArgString(int argc, char **argv, const char *psz, int *pi, char *
  * @param   ThreadSelf      My thread handle.
  * @param   pvUser          The service index.
  */
-static DECLCALLBACK(int) vboxServiceThread(RTTHREAD ThreadSelf, void *pvUser)
+static DECLCALLBACK(int) vgsvcThread(RTTHREAD ThreadSelf, void *pvUser)
 {
     const unsigned i = (uintptr_t)pvUser;
 
@@ -539,14 +582,14 @@ static DECLCALLBACK(int) vboxServiceThread(RTTHREAD ThreadSelf, void *pvUser)
  *
  * @returns VBox status code, error message displayed.
  */
-static RTEXITCODE vboxServiceLazyPreInit(void)
+static RTEXITCODE vgsvcLazyPreInit(void)
 {
     for (unsigned j = 0; j < RT_ELEMENTS(g_aServices); j++)
         if (!g_aServices[j].fPreInited)
         {
             int rc = g_aServices[j].pDesc->pfnPreInit();
             if (RT_FAILURE(rc))
-                return VBoxServiceError("Service '%s' failed pre-init: %Rrc\n", g_aServices[j].pDesc->pszName, rc);
+                return VGSvcError("Service '%s' failed pre-init: %Rrc\n", g_aServices[j].pDesc->pszName, rc);
             g_aServices[j].fPreInited = true;
         }
     return RTEXITCODE_SUCCESS;
@@ -556,7 +599,7 @@ static RTEXITCODE vboxServiceLazyPreInit(void)
 /**
  * Count the number of enabled services.
  */
-static unsigned vboxServiceCountEnabledServices(void)
+static unsigned vgsvcCountEnabledServices(void)
 {
     unsigned cEnabled = 0;
     for (unsigned i = 0; i < RT_ELEMENTS(g_aServices); i++)
@@ -566,7 +609,16 @@ static unsigned vboxServiceCountEnabledServices(void)
 
 
 #ifdef RT_OS_WINDOWS
-static BOOL WINAPI VBoxServiceConsoleControlHandler(DWORD dwCtrlType)
+/**
+ * Console control event callback.
+ *
+ * @returns TRUE if handled, FALSE if not.
+ * @param   dwCtrlType      The control event type.
+ *
+ * @remarks This is generally called on a new thread, so we're racing every
+ *          other thread in the process.
+ */
+static BOOL WINAPI vgsvcWinConsoleControlHandler(DWORD dwCtrlType)
 {
     int rc = VINF_SUCCESS;
     bool fEventHandled = FALSE;
@@ -577,8 +629,8 @@ static BOOL WINAPI VBoxServiceConsoleControlHandler(DWORD dwCtrlType)
         case CTRL_BREAK_EVENT:
         case CTRL_CLOSE_EVENT:
         case CTRL_C_EVENT:
-            VBoxServiceVerbose(2, "ControlHandler: Received break/close event\n");
-            rc = VBoxServiceStopServices();
+            VGSvcVerbose(2, "ControlHandler: Received break/close event\n");
+            rc = VGSvcStopServices();
             fEventHandled = TRUE;
             break;
         default:
@@ -587,7 +639,7 @@ static BOOL WINAPI VBoxServiceConsoleControlHandler(DWORD dwCtrlType)
     }
 
     if (RT_FAILURE(rc))
-        VBoxServiceError("ControlHandler: Event %ld handled with error rc=%Rrc\n",
+        VGSvcError("ControlHandler: Event %ld handled with error rc=%Rrc\n",
                          dwCtrlType, rc);
     return fEventHandled;
 }
@@ -598,17 +650,19 @@ static BOOL WINAPI VBoxServiceConsoleControlHandler(DWORD dwCtrlType)
  * Starts the service.
  *
  * @returns VBox status code, errors are fully bitched.
+ *
+ * @remarks Also called from VBoxService-win.cpp, thus not static.
  */
-int VBoxServiceStartServices(void)
+int VGSvcStartServices(void)
 {
     int rc;
 
-    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Init);
+    VGSvcReportStatus(VBoxGuestFacilityStatus_Init);
 
     /*
      * Initialize the services.
      */
-    VBoxServiceVerbose(2, "Initializing services ...\n");
+    VGSvcVerbose(2, "Initializing services ...\n");
     for (unsigned j = 0; j < RT_ELEMENTS(g_aServices); j++)
         if (g_aServices[j].fEnabled)
         {
@@ -617,14 +671,12 @@ int VBoxServiceStartServices(void)
             {
                 if (rc != VERR_SERVICE_DISABLED)
                 {
-                    VBoxServiceError("Service '%s' failed to initialize: %Rrc\n",
-                                     g_aServices[j].pDesc->pszName, rc);
-                    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Failed);
+                    VGSvcError("Service '%s' failed to initialize: %Rrc\n", g_aServices[j].pDesc->pszName, rc);
+                    VGSvcReportStatus(VBoxGuestFacilityStatus_Failed);
                     return rc;
                 }
                 g_aServices[j].fEnabled = false;
-                VBoxServiceVerbose(0, "Service '%s' was disabled because of missing functionality\n",
-                                   g_aServices[j].pDesc->pszName);
+                VGSvcVerbose(0, "Service '%s' was disabled because of missing functionality\n", g_aServices[j].pDesc->pszName);
 
             }
         }
@@ -632,19 +684,19 @@ int VBoxServiceStartServices(void)
     /*
      * Start the service(s).
      */
-    VBoxServiceVerbose(2, "Starting services ...\n");
+    VGSvcVerbose(2, "Starting services ...\n");
     rc = VINF_SUCCESS;
     for (unsigned j = 0; j < RT_ELEMENTS(g_aServices); j++)
     {
         if (!g_aServices[j].fEnabled)
             continue;
 
-        VBoxServiceVerbose(2, "Starting service     '%s' ...\n", g_aServices[j].pDesc->pszName);
-        rc = RTThreadCreate(&g_aServices[j].Thread, vboxServiceThread, (void *)(uintptr_t)j, 0,
+        VGSvcVerbose(2, "Starting service     '%s' ...\n", g_aServices[j].pDesc->pszName);
+        rc = RTThreadCreate(&g_aServices[j].Thread, vgsvcThread, (void *)(uintptr_t)j, 0,
                             RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, g_aServices[j].pDesc->pszName);
         if (RT_FAILURE(rc))
         {
-            VBoxServiceError("RTThreadCreate failed, rc=%Rrc\n", rc);
+            VGSvcError("RTThreadCreate failed, rc=%Rrc\n", rc);
             break;
         }
         g_aServices[j].fStarted = true;
@@ -663,17 +715,17 @@ int VBoxServiceStartServices(void)
         RTThreadUserWait(g_aServices[j].Thread, 60 * 1000);
         if (g_aServices[j].fShutdown)
         {
-            VBoxServiceError("Service '%s' failed to start!\n", g_aServices[j].pDesc->pszName);
+            VGSvcError("Service '%s' failed to start!\n", g_aServices[j].pDesc->pszName);
             rc = VERR_GENERAL_FAILURE;
         }
     }
 
     if (RT_SUCCESS(rc))
-        VBoxServiceVerbose(1, "All services started.\n");
+        VGSvcVerbose(1, "All services started.\n");
     else
     {
-        VBoxServiceError("An error occcurred while the services!\n");
-        VBoxServiceReportStatus(VBoxGuestFacilityStatus_Failed);
+        VGSvcError("An error occcurred while the services!\n");
+        VGSvcReportStatus(VBoxGuestFacilityStatus_Failed);
     }
     return rc;
 }
@@ -684,10 +736,12 @@ int VBoxServiceStartServices(void)
  *
  * This should be called even when VBoxServiceStartServices fails so it can
  * clean up anything that we succeeded in starting.
+ *
+ * @remarks Also called from VBoxService-win.cpp, thus not static.
  */
-int VBoxServiceStopServices(void)
+int VGSvcStopServices(void)
 {
-    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Terminating);
+    VGSvcReportStatus(VBoxGuestFacilityStatus_Terminating);
 
     /*
      * Signal all the services.
@@ -701,11 +755,11 @@ int VBoxServiceStopServices(void)
     for (unsigned j = 0; j < RT_ELEMENTS(g_aServices); j++)
         if (g_aServices[j].fStarted)
         {
-            VBoxServiceVerbose(3, "Calling stop function for service '%s' ...\n", g_aServices[j].pDesc->pszName);
+            VGSvcVerbose(3, "Calling stop function for service '%s' ...\n", g_aServices[j].pDesc->pszName);
             g_aServices[j].pDesc->pfnStop();
         }
 
-    VBoxServiceVerbose(3, "All stop functions for services called\n");
+    VGSvcVerbose(3, "All stop functions for services called\n");
 
     /*
      * Wait for all the service threads to complete.
@@ -717,7 +771,7 @@ int VBoxServiceStopServices(void)
             continue;
         if (g_aServices[j].Thread != NIL_RTTHREAD)
         {
-            VBoxServiceVerbose(2, "Waiting for service '%s' to stop ...\n", g_aServices[j].pDesc->pszName);
+            VGSvcVerbose(2, "Waiting for service '%s' to stop ...\n", g_aServices[j].pDesc->pszName);
             int rc2 = VINF_SUCCESS;
             for (int i = 0; i < 30; i++) /* Wait 30 seconds in total */
             {
@@ -726,16 +780,16 @@ int VBoxServiceStopServices(void)
                     break;
 #ifdef RT_OS_WINDOWS
                 /* Notify SCM that it takes a bit longer ... */
-                VBoxServiceWinSetStopPendingStatus(i + j*32);
+                VGSvcWinSetStopPendingStatus(i + j*32);
 #endif
             }
             if (RT_FAILURE(rc2))
             {
-                VBoxServiceError("Service '%s' failed to stop. (%Rrc)\n", g_aServices[j].pDesc->pszName, rc2);
+                VGSvcError("Service '%s' failed to stop. (%Rrc)\n", g_aServices[j].pDesc->pszName, rc2);
                 rc = rc2;
             }
         }
-        VBoxServiceVerbose(3, "Terminating service '%s' (%d) ...\n", g_aServices[j].pDesc->pszName, j);
+        VGSvcVerbose(3, "Terminating service '%s' (%d) ...\n", g_aServices[j].pDesc->pszName, j);
         g_aServices[j].pDesc->pfnTerm();
     }
 
@@ -747,32 +801,34 @@ int VBoxServiceStopServices(void)
     ASMAtomicWriteBool(&g_fWindowsServiceShutdown, true);
     if (g_hEvtWindowsService != NIL_RTSEMEVENT)
     {
-        VBoxServiceVerbose(3, "Stopping the main thread...\n");
+        VGSvcVerbose(3, "Stopping the main thread...\n");
         int rc2 = RTSemEventSignal(g_hEvtWindowsService);
         AssertRC(rc2);
     }
 #endif
 
-    VBoxServiceVerbose(2, "Stopping services returning: %Rrc\n", rc);
-    VBoxServiceReportStatus(RT_SUCCESS(rc) ? VBoxGuestFacilityStatus_Paused : VBoxGuestFacilityStatus_Failed);
+    VGSvcVerbose(2, "Stopping services returning: %Rrc\n", rc);
+    VGSvcReportStatus(RT_SUCCESS(rc) ? VBoxGuestFacilityStatus_Paused : VBoxGuestFacilityStatus_Failed);
     return rc;
 }
 
 
 /**
  * Block the main thread until the service shuts down.
+ *
+ * @remarks Also called from VBoxService-win.cpp, thus not static.
  */
-void VBoxServiceMainWait(void)
+void VGSvcMainWait(void)
 {
     int rc;
 
-    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Active);
+    VGSvcReportStatus(VBoxGuestFacilityStatus_Active);
 
 #ifdef RT_OS_WINDOWS
     /*
      * Wait for the semaphore to be signalled.
      */
-    VBoxServiceVerbose(1, "Waiting in main thread\n");
+    VGSvcVerbose(1, "Waiting in main thread\n");
     rc = RTSemEventCreate(&g_hEvtWindowsService);
     AssertRC(rc);
     while (!ASMAtomicReadBool(&g_fWindowsServiceShutdown))
@@ -811,7 +867,7 @@ void VBoxServiceMainWait(void)
 # endif
           );
 
-    VBoxServiceVerbose(3, "VBoxServiceMainWait: Received signal %d (rc=%d)\n", iSignal, rc);
+    VGSvcVerbose(3, "VGSvcMainWait: Received signal %d (rc=%d)\n", iSignal, rc);
 #endif /* !RT_OS_WINDOWS */
 }
 
@@ -839,7 +895,7 @@ int main(int argc, char **argv)
      * VBoxService and shouldn't be subject to /dev/vboxguest, pid-files and
      * global mutex restrictions.
      */
-    if (VBoxServiceToolboxMain(argc, argv, &rcExit))
+    if (VGSvcToolboxMain(argc, argv, &rcExit))
         return rcExit;
 #endif
 
@@ -864,7 +920,6 @@ int main(int argc, char **argv)
         rc = VbglR3InitUser();
     else
         rc = VbglR3Init();
-
     if (RT_FAILURE(rc))
     {
         if (rc == VERR_ACCESS_DENIED)
@@ -876,11 +931,11 @@ int main(int argc, char **argv)
 #ifdef RT_OS_WINDOWS
     /*
      * Check if we're the specially spawned VBoxService.exe process that
-     * handles page fusion.  This saves an extra executable.
+     * handles page fusion.  This saves an extra statically linked executable.
      */
     if (   argc == 2
         && !RTStrICmp(argv[1], "pagefusion"))
-        return VBoxServicePageSharingWorkerChild();
+        return VGSvcPageSharingWorkerChild();
 #endif
 
 #ifdef VBOX_WITH_GUEST_CONTROL
@@ -889,7 +944,7 @@ int main(int argc, char **argv)
      * handles a guest control session.
      */
     if (fUserSession)
-        return VBoxServiceControlSessionSpawnInit(argc, argv);
+        return VGSvcGstCtrlSessionSpawnInit(argc, argv);
 #endif
 
     /*
@@ -962,7 +1017,7 @@ int main(int argc, char **argv)
 
                 if (!fFound)
                 {
-                    rcExit = vboxServiceLazyPreInit();
+                    rcExit = vgsvcLazyPreInit();
                     if (rcExit != RTEXITCODE_SUCCESS)
                         return rcExit;
                     for (unsigned j = 0; !fFound && j < RT_ELEMENTS(g_aServices); j++)
@@ -988,7 +1043,7 @@ int main(int argc, char **argv)
             switch (*psz)
             {
                 case 'i':
-                    rc = VBoxServiceArgUInt32(argc, argv, psz + 1, &i,
+                    rc = VGSvcArgUInt32(argc, argv, psz + 1, &i,
                                               &g_DefaultInterval, 1, (UINT32_MAX / 1000) - 1);
                     if (rc)
                         return rc;
@@ -1009,19 +1064,19 @@ int main(int argc, char **argv)
 
                 case 'h':
                 case '?':
-                    return vboxServiceUsage();
+                    return vgsvcUsage();
 
 #ifdef RT_OS_WINDOWS
                 case 'r':
-                    return VBoxServiceWinInstall();
+                    return VGSvcWinInstall();
 
                 case 'u':
-                    return VBoxServiceWinUninstall();
+                    return VGSvcWinUninstall();
 #endif
 
                 case 'l':
                 {
-                    rc = VBoxServiceArgString(argc, argv, psz + 1, &i,
+                    rc = vgsvcArgString(argc, argv, psz + 1, &i,
                                               g_szLogFile, sizeof(g_szLogFile));
                     if (rc)
                         return rc;
@@ -1031,7 +1086,7 @@ int main(int argc, char **argv)
 
                 case 'p':
                 {
-                    rc = VBoxServiceArgString(argc, argv, psz + 1, &i,
+                    rc = vgsvcArgString(argc, argv, psz + 1, &i,
                                               g_szPidFile, sizeof(g_szPidFile));
                     if (rc)
                         return rc;
@@ -1041,7 +1096,7 @@ int main(int argc, char **argv)
 
                 default:
                 {
-                    rcExit = vboxServiceLazyPreInit();
+                    rcExit = vgsvcLazyPreInit();
                     if (rcExit != RTEXITCODE_SUCCESS)
                         return rcExit;
 
@@ -1064,16 +1119,16 @@ int main(int argc, char **argv)
     }
 
     /* Check that at least one service is enabled. */
-    if (vboxServiceCountEnabledServices() == 0)
+    if (vgsvcCountEnabledServices() == 0)
         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "At least one service must be enabled\n");
 
-    rc = VBoxServiceLogCreate(strlen(g_szLogFile) ? g_szLogFile : NULL);
+    rc = VGSvcLogCreate(g_szLogFile[0] ? g_szLogFile : NULL);
     if (RT_FAILURE(rc))
-        return RTMsgErrorExit(RTEXITCODE_FAILURE, "Failed to create release log \"%s\", rc=%Rrc\n",
-                              strlen(g_szLogFile) ? g_szLogFile : "<None>", rc);
+        return RTMsgErrorExit(RTEXITCODE_FAILURE, "Failed to create release log '%s', rc=%Rrc\n",
+                              g_szLogFile[0] ? g_szLogFile : "<None>", rc);
 
     /* Call pre-init if we didn't do it already. */
-    rcExit = vboxServiceLazyPreInit();
+    rcExit = vgsvcLazyPreInit();
     if (rcExit != RTEXITCODE_SUCCESS)
         return rcExit;
 
@@ -1105,11 +1160,11 @@ int main(int argc, char **argv)
         if (   dwErr == ERROR_ALREADY_EXISTS
             || dwErr == ERROR_ACCESS_DENIED)
         {
-            VBoxServiceError("%s is already running! Terminating.\n", g_pszProgName);
+            VGSvcError("%s is already running! Terminating.\n", g_pszProgName);
             return RTEXITCODE_FAILURE;
         }
 
-        VBoxServiceError("CreateMutex failed with last error %u! Terminating.\n", GetLastError());
+        VGSvcError("CreateMutex failed with last error %u! Terminating.\n", GetLastError());
         return RTEXITCODE_FAILURE;
     }
 
@@ -1117,8 +1172,7 @@ int main(int argc, char **argv)
     /** @todo Add PID file creation here? */
 #endif /* !RT_OS_WINDOWS */
 
-    VBoxServiceVerbose(0, "%s r%s started. Verbose level = %d\n",
-                       RTBldCfgVersion(), RTBldCfgRevisionStr(), g_cVerbosity);
+    VGSvcVerbose(0, "%s r%s started. Verbose level = %d\n", RTBldCfgVersion(), RTBldCfgRevisionStr(), g_cVerbosity);
 
     /*
      * Daemonize if requested.
@@ -1126,14 +1180,14 @@ int main(int argc, char **argv)
     if (fDaemonize && !fDaemonized)
     {
 #ifdef RT_OS_WINDOWS
-        VBoxServiceVerbose(2, "Starting service dispatcher ...\n");
-        rcExit = VBoxServiceWinEnterCtrlDispatcher();
+        VGSvcVerbose(2, "Starting service dispatcher ...\n");
+        rcExit = VGSvcWinEnterCtrlDispatcher();
 #else
-        VBoxServiceVerbose(1, "Daemonizing...\n");
+        VGSvcVerbose(1, "Daemonizing...\n");
         rc = VbglR3Daemonize(false /* fNoChDir */, false /* fNoClose */,
                              false /* fRespawn */, NULL /* pcRespawn */);
         if (RT_FAILURE(rc))
-            return VBoxServiceError("Daemon failed: %Rrc\n", rc);
+            return VGSvcError("Daemon failed: %Rrc\n", rc);
         /* in-child */
 #endif
     }
@@ -1150,23 +1204,23 @@ int main(int argc, char **argv)
          *          and return immediately.
          */
 #ifdef RT_OS_WINDOWS
-# ifndef RT_OS_NT4
+# ifndef RT_OS_NT4 /** @todo r=bird: What's RT_OS_NT4??? */
         /* Install console control handler. */
-        if (!SetConsoleCtrlHandler((PHANDLER_ROUTINE)VBoxServiceConsoleControlHandler, TRUE /* Add handler */))
+        if (!SetConsoleCtrlHandler((PHANDLER_ROUTINE)vgsvcWinConsoleControlHandler, TRUE /* Add handler */))
         {
-            VBoxServiceError("Unable to add console control handler, error=%ld\n", GetLastError());
+            VGSvcError("Unable to add console control handler, error=%ld\n", GetLastError());
             /* Just skip this error, not critical. */
         }
 # endif /* !RT_OS_NT4 */
 #endif /* RT_OS_WINDOWS */
-        rc = VBoxServiceStartServices();
+        rc = VGSvcStartServices();
         RTFILE hPidFile = NIL_RTFILE;
         if (RT_SUCCESS(rc))
             if (g_szPidFile[0])
                 rc = VbglR3PidFile(g_szPidFile, &hPidFile);
         rcExit = RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
         if (RT_SUCCESS(rc))
-            VBoxServiceMainWait();
+            VGSvcMainWait();
         if (g_szPidFile[0] && hPidFile != NIL_RTFILE)
             VbglR3ClosePidFile(g_szPidFile, hPidFile);
 #ifdef RT_OS_WINDOWS
@@ -1174,7 +1228,7 @@ int main(int argc, char **argv)
         /* Uninstall console control handler. */
         if (!SetConsoleCtrlHandler((PHANDLER_ROUTINE)NULL, FALSE /* Remove handler */))
         {
-            VBoxServiceError("Unable to remove console control handler, error=%ld\n", GetLastError());
+            VGSvcError("Unable to remove console control handler, error=%ld\n", GetLastError());
             /* Just skip this error, not critical. */
         }
 # endif /* !RT_OS_NT4 */
@@ -1182,10 +1236,10 @@ int main(int argc, char **argv)
         /* On Windows - since we're running as a console application - we already stopped all services
          * through the console control handler. So only do the stopping of services here on other platforms
          * where the break/shutdown/whatever signal was just received. */
-        VBoxServiceStopServices();
+        VGSvcStopServices();
 #endif /* RT_OS_WINDOWS */
     }
-    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Terminated);
+    VGSvcReportStatus(VBoxGuestFacilityStatus_Terminated);
 
 #ifdef RT_OS_WINDOWS
     /*
@@ -1194,14 +1248,14 @@ int main(int argc, char **argv)
     CloseHandle(hMutexAppRunning);
 #endif
 
-    VBoxServiceVerbose(0, "Ended.\n");
+    VGSvcVerbose(0, "Ended.\n");
 
 #ifdef DEBUG
     RTCritSectDelete(&g_csLog);
     //RTMemTrackerDumpAllToStdOut();
 #endif
 
-    VBoxServiceLogDestroy();
+    VGSvcLogDestroy();
 
     return rcExit;
 }
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
index 82920be..13f370b 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
@@ -1,6 +1,6 @@
 /* $Id: VBoxServiceAutoMount.cpp $ */
 /** @file
- * VBoxService - Auto-mounting for Shared Folders.
+ * VBoxService - Auto-mounting for Shared Folders, only Linux & Solaris atm.
  */
 
 /*
@@ -16,6 +16,23 @@
  */
 
 
+/** @page pg_vgsvc_automount VBoxService - Shared Folder Automounter
+ *
+ * The Shared Folder Automounter subservice mounts shared folders upon request
+ * from the host.
+ *
+ * This retrieves shared folder automount requests from Main via the VMMDev.
+ * The current implemention only does this once, for some inexplicable reason,
+ * so the run-time addition of automounted shared folders are not heeded.
+ *
+ * This subservice is only used on linux and solaris.  On Windows the current
+ * thinking is this is better of done from VBoxTray, some one argue that for
+ * drive letter assigned shared folders it would be better to do some magic here
+ * (obviously not involving NDAddConnection).
+ *
+ */
+
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
@@ -53,11 +70,11 @@ RT_C_DECLS_END
 #endif
 
 #ifndef _PATH_MOUNTED
- #ifdef RT_OS_SOLARIS
-  #define _PATH_MOUNTED                          "/etc/mnttab"
- #else
-  #define _PATH_MOUNTED                          "/etc/mtab"
- #endif
+# ifdef RT_OS_SOLARIS
+#  define _PATH_MOUNTED                          "/etc/mnttab"
+# else
+#  define _PATH_MOUNTED                          "/etc/mtab"
+# endif
 #endif
 
 
@@ -70,10 +87,12 @@ static RTSEMEVENTMULTI  g_AutoMountEvent = NIL_RTSEMEVENTMULTI;
 static uint32_t         g_SharedFoldersSvcClientID = 0;
 
 
-/** @copydoc VBOXSERVICE::pfnInit */
-static DECLCALLBACK(int) VBoxServiceAutoMountInit(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnInit}
+ */
+static DECLCALLBACK(int) vbsvcAutoMountInit(void)
 {
-    VBoxServiceVerbose(3, "VBoxServiceAutoMountInit\n");
+    VGSvcVerbose(3, "vbsvcAutoMountInit\n");
 
     int rc = RTSemEventMultiCreate(&g_AutoMountEvent);
     AssertRCReturn(rc, rc);
@@ -81,7 +100,7 @@ static DECLCALLBACK(int) VBoxServiceAutoMountInit(void)
     rc = VbglR3SharedFolderConnect(&g_SharedFoldersSvcClientID);
     if (RT_SUCCESS(rc))
     {
-        VBoxServiceVerbose(3, "VBoxServiceAutoMountInit: Service Client ID: %#x\n", g_SharedFoldersSvcClientID);
+        VGSvcVerbose(3, "vbsvcAutoMountInit: Service Client ID: %#x\n", g_SharedFoldersSvcClientID);
     }
     else
     {
@@ -89,11 +108,11 @@ static DECLCALLBACK(int) VBoxServiceAutoMountInit(void)
            causing VBoxService to fail. */
         if (rc == VERR_HGCM_SERVICE_NOT_FOUND) /* Host service is not available. */
         {
-            VBoxServiceVerbose(0, "VBoxServiceAutoMountInit: Shared Folders service is not available\n");
+            VGSvcVerbose(0, "vbsvcAutoMountInit: Shared Folders service is not available\n");
             rc = VERR_SERVICE_DISABLED;
         }
         else
-            VBoxServiceError("Control: Failed to connect to the Shared Folders service! Error: %Rrc\n", rc);
+            VGSvcError("Control: Failed to connect to the Shared Folders service! Error: %Rrc\n", rc);
         RTSemEventMultiDestroy(g_AutoMountEvent);
         g_AutoMountEvent = NIL_RTSEMEVENTMULTI;
     }
@@ -102,24 +121,24 @@ static DECLCALLBACK(int) VBoxServiceAutoMountInit(void)
 }
 
 
-/** @todo Integrate into RTFsQueryMountpoint().  */
-static bool VBoxServiceAutoMountShareIsMounted(const char *pszShare,
-                                               char *pszMountPoint, size_t cbMountPoint)
+/**
+ * @todo Integrate into RTFsQueryMountpoint()?
+ */
+static bool vbsvcAutoMountShareIsMounted(const char *pszShare, char *pszMountPoint, size_t cbMountPoint)
 {
     AssertPtrReturn(pszShare, VERR_INVALID_PARAMETER);
     AssertPtrReturn(pszMountPoint, VERR_INVALID_PARAMETER);
     AssertReturn(cbMountPoint, VERR_INVALID_PARAMETER);
 
     bool fMounted = false;
-    /* @todo What to do if we have a relative path in mtab instead
+    /** @todo What to do if we have a relative path in mtab instead
      *       of an absolute one ("temp" vs. "/media/temp")?
      * procfs contains the full path but not the actual share name ...
      * FILE *pFh = setmntent("/proc/mounts", "r+t"); */
 #ifdef RT_OS_SOLARIS
     FILE *pFh = fopen(_PATH_MOUNTED, "r");
     if (!pFh)
-        VBoxServiceError("VBoxServiceAutoMountShareIsMounted: Could not open mount tab \"%s\"!\n",
-                         _PATH_MOUNTED);
+        VGSvcError("vbsvcAutoMountShareIsMounted: Could not open mount tab '%s'!\n", _PATH_MOUNTED);
     else
     {
         mnttab mntTab;
@@ -135,10 +154,9 @@ static bool VBoxServiceAutoMountShareIsMounted(const char *pszShare,
         fclose(pFh);
     }
 #else
-    FILE *pFh = setmntent(_PATH_MOUNTED, "r+t");
+    FILE *pFh = setmntent(_PATH_MOUNTED, "r+t"); /** @todo r=bird: why open it for writing? (the '+') */
     if (pFh == NULL)
-        VBoxServiceError("VBoxServiceAutoMountShareIsMounted: Could not open mount tab \"%s\"!\n",
-                         _PATH_MOUNTED);
+        VGSvcError("vbsvcAutoMountShareIsMounted: Could not open mount tab '%s'!\n", _PATH_MOUNTED);
     else
     {
         mntent *pMntEnt;
@@ -155,13 +173,19 @@ static bool VBoxServiceAutoMountShareIsMounted(const char *pszShare,
     }
 #endif
 
-    VBoxServiceVerbose(4, "VBoxServiceAutoMountShareIsMounted: Share \"%s\" at mount point \"%s\" = %s\n",
+    VGSvcVerbose(4, "vbsvcAutoMountShareIsMounted: Share '%s' at mount point '%s' = %s\n",
                        pszShare, fMounted ? pszMountPoint : "<None>", fMounted ? "Yes" : "No");
     return fMounted;
 }
 
 
-static int VBoxServiceAutoMountUnmount(const char *pszMountPoint)
+/**
+ * Unmounts a shared folder.
+ *
+ * @returns VBox status code
+ * @param   pszMountPoint   The shared folder mount point.
+ */
+static int vbsvcAutoMountUnmount(const char *pszMountPoint)
 {
     AssertPtrReturn(pszMountPoint, VERR_INVALID_PARAMETER);
 
@@ -173,16 +197,26 @@ static int VBoxServiceAutoMountUnmount(const char *pszMountPoint)
         r = umount(pszMountPoint);
         if (r == 0)
             break;
+/** @todo r=bird: Why do sleep 5 seconds after the final retry?
+ *  May also be a good idea to check for EINVAL or other signs that someone
+ *  else have already unmounted the share. */
         RTThreadSleep(5000); /* Wait a while ... */
     }
-    if (r == -1)
+    if (r == -1)  /** @todo r=bird: RTThreadSleep set errno.  */
         rc = RTErrConvertFromErrno(errno);
     return rc;
 }
 
 
-static int VBoxServiceAutoMountPrepareMountPoint(const char *pszMountPoint, const char *pszShareName,
-                                                 vbsf_mount_opts *pOpts)
+/**
+ * Prepares a mount point (create it, set group and mode).
+ *
+ * @returns VBox status code
+ * @param   pszMountPoint   The mount point.
+ * @param   pszShareName    Unused.
+ * @param   pOpts           For getting the group ID.
+ */
+static int vbsvcAutoMountPrepareMountPoint(const char *pszMountPoint, const char *pszShareName, vbsf_mount_opts *pOpts)
 {
     AssertPtrReturn(pOpts, VERR_INVALID_PARAMETER);
     AssertPtrReturn(pszMountPoint, VERR_INVALID_PARAMETER);
@@ -200,86 +234,92 @@ static int VBoxServiceAutoMountPrepareMountPoint(const char *pszMountPoint, cons
             {
                 if (rc == VERR_WRITE_PROTECT)
                 {
-                    VBoxServiceVerbose(3, "VBoxServiceAutoMountPrepareMountPoint: Mount directory \"%s\" already is used/mounted\n", pszMountPoint);
+                    VGSvcVerbose(3, "vbsvcAutoMountPrepareMountPoint: Mount directory '%s' already is used/mounted\n",
+                                       pszMountPoint);
                     rc = VINF_SUCCESS;
                 }
                 else
-                    VBoxServiceError("VBoxServiceAutoMountPrepareMountPoint: Could not set mode %RTfmode for mount directory \"%s\", rc = %Rrc\n",
+                    VGSvcError("vbsvcAutoMountPrepareMountPoint: Could not set mode %RTfmode for mount directory '%s', rc = %Rrc\n",
                                      fMode, pszMountPoint, rc);
             }
         }
         else
-            VBoxServiceError("VBoxServiceAutoMountPrepareMountPoint: Could not set permissions for mount directory \"%s\", rc = %Rrc\n",
+            VGSvcError("vbsvcAutoMountPrepareMountPoint: Could not set permissions for mount directory '%s', rc = %Rrc\n",
                              pszMountPoint, rc);
     }
     else
-        VBoxServiceError("VBoxServiceAutoMountPrepareMountPoint: Could not create mount directory \"%s\" with mode %RTfmode, rc = %Rrc\n",
+        VGSvcError("vbsvcAutoMountPrepareMountPoint: Could not create mount directory '%s' with mode %RTfmode, rc = %Rrc\n",
                          pszMountPoint, fMode, rc);
     return rc;
 }
 
 
-static int VBoxServiceAutoMountSharedFolder(const char *pszShareName, const char *pszMountPoint,
-                                            vbsf_mount_opts *pOpts)
+/**
+ * Mounts a shared folder.
+ *
+ * @returns VBox status code reflecting unmount and mount point preparation
+ *          results, but not actual mounting
+ *
+ * @param   pszShareName    The shared folder name.
+ * @param   pszMountPoint   The mount point.
+ * @param   pOpts           The mount options.
+ */
+static int vbsvcAutoMountSharedFolder(const char *pszShareName, const char *pszMountPoint, struct vbsf_mount_opts *pOpts)
 {
     AssertPtr(pOpts);
 
     int rc = VINF_SUCCESS;
-    char szAlreadyMountedTo[RTPATH_MAX];
     bool fSkip = false;
 
     /* Already mounted? */
-    if (VBoxServiceAutoMountShareIsMounted(pszShareName, szAlreadyMountedTo, sizeof(szAlreadyMountedTo)))
+    char szAlreadyMountedTo[RTPATH_MAX];
+    if (vbsvcAutoMountShareIsMounted(pszShareName, szAlreadyMountedTo, sizeof(szAlreadyMountedTo)))
     {
         fSkip = true;
         /* Do if it not mounted to our desired mount point */
         if (RTStrICmp(pszMountPoint, szAlreadyMountedTo))
         {
-            VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Shared folder \"%s\" already mounted to \"%s\", unmounting ...\n",
+            VGSvcVerbose(3, "vbsvcAutoMountWorker: Shared folder '%s' already mounted to '%s', unmounting ...\n",
                                pszShareName, szAlreadyMountedTo);
-            rc = VBoxServiceAutoMountUnmount(szAlreadyMountedTo);
-            if (RT_FAILURE(rc))
-                VBoxServiceError("VBoxServiceAutoMountWorker: Failed to unmount \"%s\", %s (%d)!\n",
-                                 szAlreadyMountedTo, strerror(errno), errno);
-            else
+            rc = vbsvcAutoMountUnmount(szAlreadyMountedTo);
+            if (RT_SUCCESS(rc))
                 fSkip = false;
+            else
+                VGSvcError("vbsvcAutoMountWorker: Failed to unmount '%s', %s (%d)! (rc=%Rrc)\n",
+                                 szAlreadyMountedTo, strerror(errno), errno, rc); /** @todo errno isn't reliable at this point */
         }
         if (fSkip)
-            VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Shared folder \"%s\" already mounted to \"%s\", skipping\n",
+            VGSvcVerbose(3, "vbsvcAutoMountWorker: Shared folder '%s' already mounted to '%s', skipping\n",
                                pszShareName, szAlreadyMountedTo);
     }
 
     if (!fSkip && RT_SUCCESS(rc))
-        rc = VBoxServiceAutoMountPrepareMountPoint(pszMountPoint, pszShareName, pOpts);
+        rc = vbsvcAutoMountPrepareMountPoint(pszMountPoint, pszShareName, pOpts);
     if (!fSkip && RT_SUCCESS(rc))
     {
 #ifdef RT_OS_SOLARIS
-        char achOptBuf[MAX_MNTOPT_STR] = { '\0', };
-        int flags = 0;
+        char szOptBuf[MAX_MNTOPT_STR] = { '\0', };
+        int fFlags = 0;
         if (pOpts->ronly)
-            flags |= MS_RDONLY;
-        RTStrPrintf(achOptBuf, sizeof(achOptBuf), "uid=%d,gid=%d,dmode=%0o,fmode=%0o,dmask=%0o,fmask=%0o",
+            fFlags |= MS_RDONLY;
+        RTStrPrintf(szOptBuf, sizeof(szOptBuf), "uid=%d,gid=%d,dmode=%0o,fmode=%0o,dmask=%0o,fmask=%0o",
                     pOpts->uid, pOpts->gid, pOpts->dmode, pOpts->fmode, pOpts->dmask, pOpts->fmask);
         int r = mount(pszShareName,
                       pszMountPoint,
-                      flags | MS_OPTIONSTR,
+                      fFlags | MS_OPTIONSTR,
                       "vboxfs",
                       NULL,                     /* char *dataptr */
                       0,                        /* int datalen */
-                      achOptBuf,
-                      sizeof(achOptBuf));
+                      szOptBuf,
+                      sizeof(szOptBuf));
         if (r == 0)
-        {
-            VBoxServiceVerbose(0, "VBoxServiceAutoMountWorker: Shared folder \"%s\" was mounted to \"%s\"\n", pszShareName, pszMountPoint);
-        }
-        else
-        {
-            if (errno != EBUSY) /* Share is already mounted? Then skip error msg. */
-                VBoxServiceError("VBoxServiceAutoMountWorker: Could not mount shared folder \"%s\" to \"%s\", error = %s\n",
-                                 pszShareName, pszMountPoint, strerror(errno));
-        }
-#else /* !RT_OS_SOLARIS */
-        unsigned long flags = MS_NODEV;
+            VGSvcVerbose(0, "vbsvcAutoMountWorker: Shared folder '%s' was mounted to '%s'\n", pszShareName, pszMountPoint);
+        else if (errno != EBUSY) /* Share is already mounted? Then skip error msg. */
+            VGSvcError("vbsvcAutoMountWorker: Could not mount shared folder '%s' to '%s', error = %s\n",
+                             pszShareName, pszMountPoint, strerror(errno));
+
+#elif defined(RT_OS_LINUX)
+        unsigned long fFlags = MS_NODEV;
 
         const char *szOptions = { "rw" };
         struct vbsf_mount_info_new mntinf;
@@ -304,13 +344,13 @@ static int VBoxServiceAutoMountSharedFolder(const char *pszShareName, const char
         int r = mount(NULL,
                       pszMountPoint,
                       "vboxsf",
-                      flags,
+                      fFlags,
                       &mntinf);
         if (r == 0)
         {
-            VBoxServiceVerbose(0, "VBoxServiceAutoMountWorker: Shared folder \"%s\" was mounted to \"%s\"\n", pszShareName, pszMountPoint);
+            VGSvcVerbose(0, "vbsvcAutoMountWorker: Shared folder '%s' was mounted to '%s'\n", pszShareName, pszMountPoint);
 
-            r = vbsfmount_complete(pszShareName, pszMountPoint, flags, pOpts);
+            r = vbsfmount_complete(pszShareName, pszMountPoint, fFlags, pOpts);
             switch (r)
             {
                 case 0: /* Success. */
@@ -318,20 +358,21 @@ static int VBoxServiceAutoMountSharedFolder(const char *pszShareName, const char
                     break;
 
                 case 1:
-                    VBoxServiceError("VBoxServiceAutoMountWorker: Could not update mount table (failed to create memstream): %s\n", strerror(errno));
+                    VGSvcError("vbsvcAutoMountWorker: Could not update mount table (failed to create memstream): %s\n",
+                                     strerror(errno));
                     break;
 
                 case 2:
-                    VBoxServiceError("VBoxServiceAutoMountWorker: Could not open mount table for update: %s\n", strerror(errno));
+                    VGSvcError("vbsvcAutoMountWorker: Could not open mount table for update: %s\n", strerror(errno));
                     break;
 
                 case 3:
-                    /* VBoxServiceError("VBoxServiceAutoMountWorker: Could not add an entry to the mount table: %s\n", strerror(errno)); */
+                    /* VGSvcError("vbsvcAutoMountWorker: Could not add an entry to the mount table: %s\n", strerror(errno)); */
                     errno = 0;
                     break;
 
                 default:
-                    VBoxServiceError("VBoxServiceAutoMountWorker: Unknown error while completing mount operation: %d\n", r);
+                    VGSvcError("vbsvcAutoMountWorker: Unknown error while completing mount operation: %d\n", r);
                     break;
             }
         }
@@ -339,14 +380,20 @@ static int VBoxServiceAutoMountSharedFolder(const char *pszShareName, const char
         {
             if (errno == EPROTO)
             {
-                VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Messed up share name, re-trying ...\n");
+                VGSvcVerbose(3, "vbsvcAutoMountWorker: Messed up share name, re-trying ...\n");
+
+                /** @todo r=bird: What on earth is going on here?????  Why can't you
+                 *        strcpy(mntinf.name, pszShareName) to fix it again? */
 
                 /* Sometimes the mount utility messes up the share name.  Try to
                  * un-mangle it again. */
-                char szCWD[4096];
+                char szCWD[RTPATH_MAX];
                 size_t cchCWD;
                 if (!getcwd(szCWD, sizeof(szCWD)))
-                    VBoxServiceError("VBoxServiceAutoMountWorker: Failed to get the current working directory\n");
+                {
+                    VGSvcError("vbsvcAutoMountWorker: Failed to get the current working directory\n");
+                    szCWD[0] = '\0';
+                }
                 cchCWD = strlen(szCWD);
                 if (!strncmp(pszMountPoint, szCWD, cchCWD))
                 {
@@ -355,11 +402,11 @@ static int VBoxServiceAutoMountSharedFolder(const char *pszShareName, const char
                     /* We checked before that we have enough space */
                     strcpy(mntinf.name, pszMountPoint + cchCWD);
                 }
-                r = mount(NULL, pszMountPoint, "vboxsf", flags, &mntinf);
+                r = mount(NULL, pszMountPoint, "vboxsf", fFlags, &mntinf);
             }
             if (errno == EPROTO)
             {
-                VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Re-trying with old mounting structure ...\n");
+                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. */
@@ -369,7 +416,7 @@ static int VBoxServiceAutoMountSharedFolder(const char *pszShareName, const char
                 mntinf_old.uid = mntinf.uid;
                 mntinf_old.gid = mntinf.gid;
                 mntinf_old.ttl = mntinf.ttl;
-                r = mount(NULL, pszMountPoint, "vboxsf", flags, &mntinf_old);
+                r = mount(NULL, pszMountPoint, "vboxsf", fFlags, &mntinf_old);
             }
             if (r == -1) /* Was there some error from one of the tries above? */
             {
@@ -378,7 +425,7 @@ static int VBoxServiceAutoMountSharedFolder(const char *pszShareName, const char
                     /* If we get EINVAL here, the system already has mounted the Shared Folder to another
                      * mount point. */
                     case EINVAL:
-                        VBoxServiceVerbose(0, "VBoxServiceAutoMountWorker: Shared folder \"%s\" already is mounted!\n", pszShareName);
+                        VGSvcVerbose(0, "vbsvcAutoMountWorker: Shared folder '%s' already is mounted!\n", pszShareName);
                         /* Ignore this error! */
                         break;
                     case EBUSY:
@@ -386,21 +433,34 @@ static int VBoxServiceAutoMountSharedFolder(const char *pszShareName, const char
                         break;
 
                     default:
-                        VBoxServiceError("VBoxServiceAutoMountWorker: Could not mount shared folder \"%s\" to \"%s\": %s (%d)\n",
+                        VGSvcError("vbsvcAutoMountWorker: Could not mount shared folder '%s' to '%s': %s (%d)\n",
                                          pszShareName, pszMountPoint, strerror(errno), errno);
                         rc = RTErrConvertFromErrno(errno);
                         break;
                 }
             }
         }
-#endif /* !RT_OS_SOLARIS */
+#else
+# error "PORTME"
+#endif
     }
-    VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Mounting returned with rc=%Rrc\n", rc);
+    VGSvcVerbose(3, "vbsvcAutoMountWorker: Mounting returned with rc=%Rrc\n", rc);
     return rc;
 }
 
-static int VBoxServiceAutoMountProcessMappings(PVBGLR3SHAREDFOLDERMAPPING paMappings, uint32_t cMappings,
-                                               const char *pszMountDir, const char *pszSharePrefix, uint32_t uClientID)
+
+/**
+ * Processes shared folder mappings retrieved from the host.
+ *
+ * @returns VBox status code.
+ * @param   paMappings      The mappings.
+ * @param   cMappings       The number of mappings.
+ * @param   pszMountDir     The mount directory.
+ * @param   pszSharePrefix  The share prefix.
+ * @param   uClientID       The shared folder service (HGCM) client ID.
+ */
+static int vbsvcAutoMountProcessMappings(PCVBGLR3SHAREDFOLDERMAPPING paMappings, uint32_t cMappings,
+                                         const char *pszMountDir, const char *pszSharePrefix, uint32_t uClientID)
 {
     if (cMappings == 0)
         return VINF_SUCCESS;
@@ -409,6 +469,13 @@ static int VBoxServiceAutoMountProcessMappings(PVBGLR3SHAREDFOLDERMAPPING paMapp
     AssertPtrReturn(pszSharePrefix, VERR_INVALID_PARAMETER);
     AssertReturn(uClientID > 0, VERR_INVALID_PARAMETER);
 
+    /** @todo r=bird: Why is this loop schitzoid about status codes? It quits if
+     * RTPathJoin fails (i.e. if the user specifies a very long name), but happily
+     * continues if RTStrAPrintf failes (mem alloc).
+     *
+     * It also happily continues if the 'vboxsf' group is missing, which is a waste
+     * of effort... In fact, retrieving the group ID could probably be done up
+     * front, outside the loop. */
     int rc = VINF_SUCCESS;
     for (uint32_t i = 0; i < cMappings && RT_SUCCESS(rc); i++)
     {
@@ -417,8 +484,16 @@ static int VBoxServiceAutoMountProcessMappings(PVBGLR3SHAREDFOLDERMAPPING paMapp
         if (   RT_SUCCESS(rc)
             && *pszShareName)
         {
-            VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Connecting share %u (%s) ...\n", i+1, pszShareName);
-
+            VGSvcVerbose(3, "vbsvcAutoMountWorker: Connecting share %u (%s) ...\n", i+1, pszShareName);
+
+            /** @todo r=bird: why do you copy things twice here and waste heap space?
+             * szMountPoint has a fixed size.
+             * @code
+             * char szMountPoint[RTPATH_MAX];
+             * rc = RTPathJoin(szMountPoint, sizeof(szMountPoint), pszMountDir, *pszSharePrefix ? pszSharePrefix : pszShareName);
+             * if (RT_SUCCESS(rc) && *pszSharePrefix)
+             *     rc = RTStrCat(szMountPoint, sizeof(szMountPoint), pszShareName);
+             * @endcode */
             char *pszShareNameFull = NULL;
             if (RTStrAPrintf(&pszShareNameFull, "%s%s", pszSharePrefix, pszShareName) > 0)
             {
@@ -426,7 +501,7 @@ static int VBoxServiceAutoMountProcessMappings(PVBGLR3SHAREDFOLDERMAPPING paMapp
                 rc = RTPathJoin(szMountPoint, sizeof(szMountPoint), pszMountDir, pszShareNameFull);
                 if (RT_SUCCESS(rc))
                 {
-                    VBoxServiceVerbose(4, "VBoxServiceAutoMountWorker: Processing mount point \"%s\"\n", szMountPoint);
+                    VGSvcVerbose(4, "vbsvcAutoMountWorker: Processing mount point '%s'\n", szMountPoint);
 
                     struct group *grp_vboxsf = getgrnam("vboxsf");
                     if (grp_vboxsf)
@@ -450,29 +525,31 @@ static int VBoxServiceAutoMountProcessMappings(PVBGLR3SHAREDFOLDERMAPPING paMapp
                             NULL,                  /* convertcp */
                         };
 
-                        rc = VBoxServiceAutoMountSharedFolder(pszShareName, szMountPoint, &mount_opts);
+                        rc = vbsvcAutoMountSharedFolder(pszShareName, szMountPoint, &mount_opts);
                     }
                     else
-                        VBoxServiceError("VBoxServiceAutoMountWorker: Group \"vboxsf\" does not exist\n");
+                        VGSvcError("vbsvcAutoMountWorker: Group 'vboxsf' does not exist\n");
                 }
                 else
-                    VBoxServiceError("VBoxServiceAutoMountWorker: Unable to join mount point/prefix/shrae, rc = %Rrc\n", rc);
+                    VGSvcError("vbsvcAutoMountWorker: Unable to join mount point/prefix/shrae, rc = %Rrc\n", rc);
                 RTStrFree(pszShareNameFull);
             }
             else
-                VBoxServiceError("VBoxServiceAutoMountWorker: Unable to allocate full share name\n");
+                VGSvcError("vbsvcAutoMountWorker: Unable to allocate full share name\n");
             RTStrFree(pszShareName);
         }
         else
-            VBoxServiceError("VBoxServiceAutoMountWorker: Error while getting the shared folder name for root node = %u, rc = %Rrc\n",
+            VGSvcError("vbsvcAutoMountWorker: Error while getting the shared folder name for root node = %u, rc = %Rrc\n",
                              paMappings[i].u32Root, rc);
     } /* for cMappings. */
     return rc;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnWorker */
-DECLCALLBACK(int) VBoxServiceAutoMountWorker(bool volatile *pfShutdown)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnWorker}
+ */
+static DECLCALLBACK(int) vbsvcAutoMountWorker(bool volatile *pfShutdown)
 {
     /*
      * Tell the control thread that it can continue
@@ -493,54 +570,59 @@ DECLCALLBACK(int) VBoxServiceAutoMountWorker(bool volatile *pfShutdown)
             rc = RTStrDupEx(&pszMountDir, VBOXSERVICE_AUTOMOUNT_DEFAULT_DIR);
         if (RT_SUCCESS(rc))
         {
-            VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Shared folder mount dir set to \"%s\"\n", pszMountDir);
+            VGSvcVerbose(3, "vbsvcAutoMountWorker: Shared folder mount dir set to '%s'\n", pszMountDir);
 
             char *pszSharePrefix;
             rc = VbglR3SharedFolderGetMountPrefix(&pszSharePrefix);
             if (RT_SUCCESS(rc))
             {
-                VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Shared folder mount prefix set to \"%s\"\n", pszSharePrefix);
+                VGSvcVerbose(3, "vbsvcAutoMountWorker: Shared folder mount prefix set to '%s'\n", pszSharePrefix);
 #ifdef USE_VIRTUAL_SHARES
                 /* Check for a fixed/virtual auto-mount share. */
                 if (VbglR3SharedFolderExists(g_SharedFoldersSvcClientID, "vbsfAutoMount"))
                 {
-                    VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Host supports auto-mount root\n");
+                    VGSvcVerbose(3, "vbsvcAutoMountWorker: Host supports auto-mount root\n");
                 }
                 else
                 {
 #endif
-                    VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Got %u shared folder mappings\n", cMappings);
-                    rc = VBoxServiceAutoMountProcessMappings(paMappings, cMappings, pszMountDir, pszSharePrefix, g_SharedFoldersSvcClientID);
+                    VGSvcVerbose(3, "vbsvcAutoMountWorker: Got %u shared folder mappings\n", cMappings);
+                    rc = vbsvcAutoMountProcessMappings(paMappings, cMappings, pszMountDir, pszSharePrefix, g_SharedFoldersSvcClientID);
 #ifdef USE_VIRTUAL_SHARES
                 }
 #endif
                 RTStrFree(pszSharePrefix);
             } /* Mount share prefix. */
             else
-                VBoxServiceError("VBoxServiceAutoMountWorker: Error while getting the shared folder mount prefix, rc = %Rrc\n", rc);
+                VGSvcError("vbsvcAutoMountWorker: Error while getting the shared folder mount prefix, rc = %Rrc\n", rc);
             RTStrFree(pszMountDir);
         }
         else
-            VBoxServiceError("VBoxServiceAutoMountWorker: Error while getting the shared folder directory, rc = %Rrc\n", rc);
+            VGSvcError("vbsvcAutoMountWorker: Error while getting the shared folder directory, rc = %Rrc\n", rc);
         VbglR3SharedFolderFreeMappings(paMappings);
     }
     else if (RT_FAILURE(rc))
-        VBoxServiceError("VBoxServiceAutoMountWorker: Error while getting the shared folder mappings, rc = %Rrc\n", rc);
+        VGSvcError("vbsvcAutoMountWorker: Error while getting the shared folder mappings, rc = %Rrc\n", rc);
     else
-        VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: No shared folder mappings found\n");
+        VGSvcVerbose(3, "vbsvcAutoMountWorker: No shared folder mappings found\n");
 
     /*
      * Because this thread is a one-timer at the moment we don't want to break/change
      * the semantics of the main thread's start/stop sub-threads handling.
      *
-     * This thread exits so fast while doing its own startup in VBoxServiceStartServices()
-     * that this->fShutdown flag is set to true in VBoxServiceThread() before we have the
-     * chance to check for a service failure in VBoxServiceStartServices() to indicate
+     * This thread exits so fast while doing its own startup in VGSvcStartServices()
+     * that this->fShutdown flag is set to true in VGSvcThread() before we have the
+     * chance to check for a service failure in VGSvcStartServices() to indicate
      * a VBoxService startup error.
      *
      * Therefore *no* service threads are allowed to quit themselves and need to wait
      * for the pfShutdown flag to be set by the main thread.
      */
+/** @todo r=bird: Shared folders have always been configurable at run time, so
+ * this service must be changed to check for changes and execute those changes!
+ *
+ * The 0.5sec sleep here is just soo crude and must go!
+ */
     for (;;)
     {
         /* Do we need to shutdown? */
@@ -554,14 +636,17 @@ DECLCALLBACK(int) VBoxServiceAutoMountWorker(bool volatile *pfShutdown)
     RTSemEventMultiDestroy(g_AutoMountEvent);
     g_AutoMountEvent = NIL_RTSEMEVENTMULTI;
 
-    VBoxServiceVerbose(3, "VBoxServiceAutoMountWorker: Finished with rc=%Rrc\n", rc);
+    VGSvcVerbose(3, "vbsvcAutoMountWorker: Finished with rc=%Rrc\n", rc);
     return VINF_SUCCESS;
 }
 
-/** @copydoc VBOXSERVICE::pfnTerm */
-static DECLCALLBACK(void) VBoxServiceAutoMountTerm(void)
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnTerm}
+ */
+static DECLCALLBACK(void) vbsvcAutoMountTerm(void)
 {
-    VBoxServiceVerbose(3, "VBoxServiceAutoMountTerm\n");
+    VGSvcVerbose(3, "vbsvcAutoMountTerm\n");
 
     VbglR3SharedFolderDisconnect(g_SharedFoldersSvcClientID);
     g_SharedFoldersSvcClientID = 0;
@@ -575,8 +660,10 @@ static DECLCALLBACK(void) VBoxServiceAutoMountTerm(void)
 }
 
 
-/** @copydoc VBOXSERVICE::pfnStop */
-static DECLCALLBACK(void) VBoxServiceAutoMountStop(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnStop}
+ */
+static DECLCALLBACK(void) vbsvcAutoMountStop(void)
 {
     /*
      * We need this check because at the moment our auto-mount
@@ -602,10 +689,10 @@ VBOXSERVICE g_AutoMount =
     /* pszOptions. */
     NULL,
     /* methods */
-    VBoxServiceDefaultPreInit,
-    VBoxServiceDefaultOption,
-    VBoxServiceAutoMountInit,
-    VBoxServiceAutoMountWorker,
-    VBoxServiceAutoMountStop,
-    VBoxServiceAutoMountTerm
+    VGSvcDefaultPreInit,
+    VGSvcDefaultOption,
+    vbsvcAutoMountInit,
+    vbsvcAutoMountWorker,
+    vbsvcAutoMountStop,
+    vbsvcAutoMountTerm
 };
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp
index 1ed9947..c44d3c0 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp
@@ -16,6 +16,28 @@
  */
 
 
+/** @page pg_vgsvc_memballoon VBoxService - Memory Ballooning
+ *
+ * The Memory Ballooning subservice works with VBoxGuest, PGM and GMM to
+ * dynamically reallocate memory between VMs.
+ *
+ * Memory ballooning is typically used to deal with overcomitting memory on the
+ * host.  It allowes you to borrow memory from one or more VMs and make it
+ * available to others.  In theory it could also be used to make memory
+ * available to the host system, however memory fragmentation typically makes
+ * that difficult.
+ *
+ * The memory ballooning subservices talks to PGM, GMM and Main via the VMMDev.
+ * It polls for change requests at an interval and executes them when they
+ * arrive.  There are two ways we implement the actual ballooning, either
+ * VBoxGuest allocates kernel memory and donates it to the host, or this service
+ * allocates process memory which VBoxGuest then locks down and donates to the
+ * host.  While we prefer the former method it is not practicable on all OS and
+ * we have to use the latter.
+ *
+ */
+
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
@@ -59,7 +81,7 @@ static bool g_fSysMadviseWorks;
 /**
  * Check whether madvise() works.
  */
-static void VBoxServiceBalloonInitMadvise(void)
+static void vgsvcBalloonInitMadvise(void)
 {
 #ifdef RT_OS_LINUX
     void *pv = (void*)mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
@@ -76,7 +98,7 @@ static void VBoxServiceBalloonInitMadvise(void)
  * Allocate a chunk of the balloon. Fulfil the prerequisite that we can lock this memory
  * and protect it against fork() in R0. See also suplibOsPageAlloc().
  */
-static void* VBoxServiceBalloonAllocChunk(void)
+static void *VGSvcBalloonAllocChunk(void)
 {
     size_t cb = VMMDEV_MEMORY_BALLOON_CHUNK_SIZE;
     char *pu8;
@@ -125,9 +147,9 @@ static void* VBoxServiceBalloonAllocChunk(void)
 
 
 /**
- * Free an allocated chunk undoing VBoxServiceBalloonAllocChunk().
+ * Free an allocated chunk undoing VGSvcBalloonAllocChunk().
  */
-static void VBoxServiceBalloonFreeChunk(void *pv)
+static void vgsvcBalloonFreeChunk(void *pv)
 {
     char *pu8 = (char*)pv;
     size_t cb = VMMDEV_MEMORY_BALLOON_CHUNK_SIZE;
@@ -158,12 +180,12 @@ static void VBoxServiceBalloonFreeChunk(void *pv)
  * returns IPRT status code.
  * @param   cNewChunks     The new number of 1MB chunks in the balloon.
  */
-static int VBoxServiceBalloonSetUser(uint32_t cNewChunks)
+static int vgsvcBalloonSetUser(uint32_t cNewChunks)
 {
     if (cNewChunks == g_cMemBalloonChunks)
         return VINF_SUCCESS;
 
-    VBoxServiceVerbose(3, "VBoxServiceBalloonSetUser: cNewChunks=%u g_cMemBalloonChunks=%u\n", cNewChunks, g_cMemBalloonChunks);
+    VGSvcVerbose(3, "vgsvcBalloonSetUser: cNewChunks=%u g_cMemBalloonChunks=%u\n", cNewChunks, g_cMemBalloonChunks);
     int rc = VINF_SUCCESS;
     if (cNewChunks > g_cMemBalloonChunks)
     {
@@ -172,7 +194,7 @@ static int VBoxServiceBalloonSetUser(uint32_t cNewChunks)
         uint32_t i;
         for (i = g_cMemBalloonChunks; i < cNewChunks; i++)
         {
-            void *pv = VBoxServiceBalloonAllocChunk();
+            void *pv = VGSvcBalloonAllocChunk();
             if (!pv)
                 break;
             rc = VbglR3MemBalloonChange(pv, /* inflate=*/ true);
@@ -192,11 +214,11 @@ static int VBoxServiceBalloonSetUser(uint32_t cNewChunks)
             }
             else
             {
-                VBoxServiceBalloonFreeChunk(pv);
+                vgsvcBalloonFreeChunk(pv);
                 break;
             }
         }
-        VBoxServiceVerbose(3, "VBoxServiceBalloonSetUser: inflation complete. chunks=%u rc=%d\n", i, rc);
+        VGSvcVerbose(3, "vgsvcBalloonSetUser: inflation complete. chunks=%u rc=%d\n", i, rc);
     }
     else
     {
@@ -212,13 +234,13 @@ static int VBoxServiceBalloonSetUser(uint32_t cNewChunks)
                 /* unprotect */
                 RTMemProtect(pv, VMMDEV_MEMORY_BALLOON_CHUNK_SIZE, RTMEM_PROT_READ | RTMEM_PROT_WRITE);
 #endif
-                VBoxServiceBalloonFreeChunk(pv);
+                vgsvcBalloonFreeChunk(pv);
                 g_pavBalloon[i] = NULL;
                 g_cMemBalloonChunks--;
             }
             else
                 break;
-            VBoxServiceVerbose(3, "VBoxServiceBalloonSetUser: deflation complete. chunks=%u rc=%d\n", i, rc);
+            VGSvcVerbose(3, "vgsvcBalloonSetUser: deflation complete. chunks=%u rc=%d\n", i, rc);
         }
     }
 
@@ -226,15 +248,17 @@ static int VBoxServiceBalloonSetUser(uint32_t cNewChunks)
 }
 
 
-/** @copydoc VBOXSERVICE::pfnInit */
-static DECLCALLBACK(int) VBoxServiceBalloonInit(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnInit}
+ */
+static DECLCALLBACK(int) vgsvcBalloonInit(void)
 {
-    VBoxServiceVerbose(3, "VBoxServiceBalloonInit\n");
+    VGSvcVerbose(3, "vgsvcBalloonInit\n");
 
     int rc = RTSemEventMultiCreate(&g_MemBalloonEvent);
     AssertRCReturn(rc, rc);
 
-    VBoxServiceBalloonInitMadvise();
+    vgsvcBalloonInitMadvise();
 
     g_cMemBalloonChunks = 0;
     uint32_t cNewChunks = 0;
@@ -244,10 +268,9 @@ static DECLCALLBACK(int) VBoxServiceBalloonInit(void)
     rc = VbglR3MemBalloonRefresh(&cNewChunks, &fHandleInR3);
     if (RT_SUCCESS(rc))
     {
-        VBoxServiceVerbose(3, "MemBalloon: New balloon size %d MB (%s memory)\n",
-                           cNewChunks, fHandleInR3 ? "R3" : "R0");
+        VGSvcVerbose(3, "MemBalloon: New balloon size %d MB (%s memory)\n", cNewChunks, fHandleInR3 ? "R3" : "R0");
         if (fHandleInR3)
-            rc = VBoxServiceBalloonSetUser(cNewChunks);
+            rc = vgsvcBalloonSetUser(cNewChunks);
         else
             g_cMemBalloonChunks = cNewChunks;
     }
@@ -262,12 +285,12 @@ static DECLCALLBACK(int) VBoxServiceBalloonInit(void)
 #endif
             )
         {
-            VBoxServiceVerbose(0, "MemBalloon: Memory ballooning support is not available\n");
+            VGSvcVerbose(0, "MemBalloon: Memory ballooning support is not available\n");
             rc = VERR_SERVICE_DISABLED;
         }
         else
         {
-            VBoxServiceVerbose(3, "MemBalloon: VbglR3MemBalloonRefresh failed with %Rrc\n", rc);
+            VGSvcVerbose(3, "MemBalloon: VbglR3MemBalloonRefresh failed with %Rrc\n", rc);
             rc = VERR_SERVICE_DISABLED; /** @todo Playing safe for now, figure out the exact status codes here. */
         }
         RTSemEventMultiDestroy(g_MemBalloonEvent);
@@ -284,21 +307,23 @@ static DECLCALLBACK(int) VBoxServiceBalloonInit(void)
  * @returns Number of pages.
  * @param   cbPage          The page size.
  */
-uint32_t VBoxServiceBalloonQueryPages(uint32_t cbPage)
+uint32_t VGSvcBalloonQueryPages(uint32_t cbPage)
 {
     Assert(cbPage > 0);
     return g_cMemBalloonChunks * (VMMDEV_MEMORY_BALLOON_CHUNK_SIZE / cbPage);
 }
 
 
-/** @copydoc VBOXSERVICE::pfnWorker */
-DECLCALLBACK(int) VBoxServiceBalloonWorker(bool volatile *pfShutdown)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnWorker}
+ */
+static DECLCALLBACK(int) vgsvcBalloonWorker(bool volatile *pfShutdown)
 {
     /* Start monitoring of the stat event change event. */
     int rc = VbglR3CtlFilterMask(VMMDEV_EVENT_BALLOON_CHANGE_REQUEST, 0);
     if (RT_FAILURE(rc))
     {
-        VBoxServiceVerbose(3, "VBoxServiceBalloonWorker: VbglR3CtlFilterMask failed with %Rrc\n", rc);
+        VGSvcVerbose(3, "vgsvcBalloonInit: VbglR3CtlFilterMask failed with %Rrc\n", rc);
         return rc;
     }
 
@@ -325,24 +350,23 @@ DECLCALLBACK(int) VBoxServiceBalloonWorker(bool volatile *pfShutdown)
             rc = VbglR3MemBalloonRefresh(&cNewChunks, &fHandleInR3);
             if (RT_SUCCESS(rc))
             {
-                VBoxServiceVerbose(3, "VBoxServiceBalloonWorker: new balloon size %d MB (%s memory)\n",
-                                   cNewChunks, fHandleInR3 ? "R3" : "R0");
+                VGSvcVerbose(3, "vgsvcBalloonInit: new balloon size %d MB (%s memory)\n", cNewChunks, fHandleInR3 ? "R3" : "R0");
                 if (fHandleInR3)
                 {
-                    rc = VBoxServiceBalloonSetUser(cNewChunks);
+                    rc = vgsvcBalloonSetUser(cNewChunks);
                     if (RT_FAILURE(rc))
                     {
-                        VBoxServiceVerbose(3, "VBoxServiceBalloonWorker: failed to set balloon size %d MB (%s memory)\n",
-                                    cNewChunks, fHandleInR3 ? "R3" : "R0");
+                        VGSvcVerbose(3, "vgsvcBalloonInit: failed to set balloon size %d MB (%s memory)\n",
+                                     cNewChunks, fHandleInR3 ? "R3" : "R0");
                     }
                     else
-                        VBoxServiceVerbose(3, "VBoxServiceBalloonWorker: successfully set requested balloon size %d.\n", cNewChunks);
+                        VGSvcVerbose(3, "vgsvcBalloonInit: successfully set requested balloon size %d.\n", cNewChunks);
                 }
                 else
                     g_cMemBalloonChunks = cNewChunks;
             }
             else
-                VBoxServiceVerbose(3, "VBoxServiceBalloonWorker: VbglR3MemBalloonRefresh failed with %Rrc\n", rc);
+                VGSvcVerbose(3, "vgsvcBalloonInit: VbglR3MemBalloonRefresh failed with %Rrc\n", rc);
         }
 
         /*
@@ -358,7 +382,7 @@ DECLCALLBACK(int) VBoxServiceBalloonWorker(bool volatile *pfShutdown)
             break;
         if (rc2 != VERR_TIMEOUT && RT_FAILURE(rc2))
         {
-            VBoxServiceError("VBoxServiceBalloonWorker: RTSemEventMultiWait failed; rc2=%Rrc\n", rc2);
+            VGSvcError("vgsvcBalloonInit: RTSemEventMultiWait failed; rc2=%Rrc\n", rc2);
             rc = rc2;
             break;
         }
@@ -367,17 +391,20 @@ DECLCALLBACK(int) VBoxServiceBalloonWorker(bool volatile *pfShutdown)
     /* Cancel monitoring of the memory balloon change event. */
     rc = VbglR3CtlFilterMask(0, VMMDEV_EVENT_BALLOON_CHANGE_REQUEST);
     if (RT_FAILURE(rc))
-        VBoxServiceVerbose(3, "VBoxServiceBalloonWorker: VbglR3CtlFilterMask failed with %Rrc\n", rc);
+        VGSvcVerbose(3, "vgsvcBalloonInit: VbglR3CtlFilterMask failed with %Rrc\n", rc);
 
     RTSemEventMultiDestroy(g_MemBalloonEvent);
     g_MemBalloonEvent = NIL_RTSEMEVENTMULTI;
 
-    VBoxServiceVerbose(3, "VBoxServiceBalloonWorker: finished mem balloon change request thread\n");
-    return 0;
+    VGSvcVerbose(3, "vgsvcBalloonInit: finished mem balloon change request thread\n");
+    return VINF_SUCCESS;
 }
 
-/** @copydoc VBOXSERVICE::pfnStop */
-static DECLCALLBACK(void) VBoxServiceBalloonStop(void)
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnStop}
+ */
+static DECLCALLBACK(void) vgsvcBalloonStop(void)
 {
     RTSemEventMultiSignal(g_MemBalloonEvent);
 }
@@ -397,10 +424,10 @@ VBOXSERVICE g_MemBalloon =
     /* pszOptions. */
     NULL,
     /* methods */
-    VBoxServiceDefaultPreInit,
-    VBoxServiceDefaultOption,
-    VBoxServiceBalloonInit,
-    VBoxServiceBalloonWorker,
-    VBoxServiceBalloonStop,
-    VBoxServiceDefaultTerm
+    VGSvcDefaultPreInit,
+    VGSvcDefaultOption,
+    vgsvcBalloonInit,
+    vgsvcBalloonWorker,
+    vgsvcBalloonStop,
+    VGSvcDefaultTerm
 };
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceClipboard-os2.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceClipboard-os2.cpp
index 9be9205..b732188 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceClipboard-os2.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceClipboard-os2.cpp
@@ -16,6 +16,24 @@
  */
 
 
+/** @page pg_vgsvc_clipboard VBoxService - Clipboard (OS/2)
+ *
+ * The Clipboard subservice provides clipboard sharing for OS/2 guests only.
+ *
+ * This was the second subservice that was added to VBoxService.  OS/2 is a
+ * single user system and we don't provide any VBoxTray or VBoxClient like
+ * processes. Because it's kind of simple system, it became natural to put the
+ * clipboard sharing here in VBoxService for OS/2.
+ *
+ * In addition to integrating with the native OS/2 PM clipboard formats, we also
+ * try provide the Odin32, a windows API layer for OS/2 (developed by Sander van
+ * Leeuwen and friends, later mainly InnoTek), with additional formats.
+ *
+ * Bitmaps are currently not supported, but that can easily be added should the
+ * need ever arrise.
+ */
+
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
@@ -123,15 +141,19 @@ static ATOM g_atomOdin32UnicodeText = 0;
 
 
 
-/** @copydoc VBOXSERVICE::pfnPreInit */
-static DECLCALLBACK(int) VBoxServiceClipboardOS2PreInit(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnPreInit}
+ */
+static DECLCALLBACK(int) vgsvcClipboardOs2PreInit(void)
 {
     return VINF_SUCCESS;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnOption */
-static DECLCALLBACK(int) VBoxServiceClipboardOS2Option(const char **ppszShort, int argc, char **argv, int *pi)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnOption}
+ */
+static DECLCALLBACK(int) vgsvcClipboardOs2Option(const char **ppszShort, int argc, char **argv, int *pi)
 {
     NOREF(ppszShort);
     NOREF(argc);
@@ -142,8 +164,10 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Option(const char **ppszShort, i
 }
 
 
-/** @copydoc VBOXSERVICE::pfnInit */
-static DECLCALLBACK(int) VBoxServiceClipboardOS2Init(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnInit}
+ */
+static DECLCALLBACK(int) vgsvcClipboardOs2Init(void)
 {
     int rc = VERR_GENERAL_FAILURE;
     g_ThreadCtrl = RTThreadSelf();
@@ -163,7 +187,7 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Init(void)
     g_habCtrl = WinInitialize(0);
     if (g_habCtrl  == NULLHANDLE)
     {
-        VBoxServiceError("WinInitialize(0) failed, lasterr=%lx\n", WinGetLastError(NULLHANDLE));
+        VGSvcError("WinInitialize(0) failed, lasterr=%lx\n", WinGetLastError(NULLHANDLE));
         return VERR_GENERAL_FAILURE;
     }
     g_hmqCtrl = WinCreateMsgQueue(g_habCtrl, 0);
@@ -183,7 +207,7 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Init(void)
             /*
              * Connect to the clipboard service.
              */
-            VBoxServiceVerbose(4, "clipboard: connecting\n");
+            VGSvcVerbose(4, "clipboard: connecting\n");
             rc = VbglR3ClipboardConnect(&g_u32ClientId);
             if (RT_SUCCESS(rc))
             {
@@ -195,22 +219,22 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Init(void)
                 if (g_atomOdin32UnicodeText == 0)
                     g_atomOdin32UnicodeText = WinFindAtom(WinQuerySystemAtomTable(), SZFMT_ODIN32_UNICODETEXT);
                 if (g_atomOdin32UnicodeText == 0)
-                    VBoxServiceError("WinAddAtom() failed, lasterr=%lx; WinFindAtom() failed, lasterror=%lx\n",
-                                     lLastError, WinGetLastError(g_habCtrl));
+                    VGSvcError("WinAddAtom() failed, lasterr=%lx; WinFindAtom() failed, lasterror=%lx\n",
+                               lLastError, WinGetLastError(g_habCtrl));
 
-                VBoxServiceVerbose(2, "g_u32ClientId=%RX32 g_atomNothingChanged=%#x g_atomOdin32UnicodeText=%#x\n",
-                                   g_u32ClientId, g_atomNothingChanged, g_atomOdin32UnicodeText);
+                VGSvcVerbose(2, "g_u32ClientId=%RX32 g_atomNothingChanged=%#x g_atomOdin32UnicodeText=%#x\n",
+                             g_u32ClientId, g_atomNothingChanged, g_atomOdin32UnicodeText);
                 return VINF_SUCCESS;
             }
 
-            VBoxServiceError("Failed to connect to the clipboard service, rc=%Rrc!\n", rc);
+            VGSvcError("Failed to connect to the clipboard service, rc=%Rrc!\n", rc);
         }
         else
-            VBoxServiceError("WinAddAtom() failed, lasterr=%lx; WinFindAtom() failed, lasterror=%lx\n",
-                             lLastError, WinGetLastError(g_habCtrl));
+            VGSvcError("WinAddAtom() failed, lasterr=%lx; WinFindAtom() failed, lasterror=%lx\n",
+                       lLastError, WinGetLastError(g_habCtrl));
     }
     else
-        VBoxServiceError("WinCreateMsgQueue(,0) failed, lasterr=%lx\n", WinGetLastError(g_habCtrl));
+        VGSvcError("WinCreateMsgQueue(,0) failed, lasterr=%lx\n", WinGetLastError(g_habCtrl));
     WinTerminate(g_habCtrl);
     return rc;
 }
@@ -219,7 +243,7 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Init(void)
 /**
  * Check that we're still the view / try make us the viewer.
  */
-static void VBoxServiceClipboardOS2PollViewer(void)
+static void vgsvcClipboardOs2PollViewer(void)
 {
     const int iOrgState = g_enmState;
 
@@ -241,17 +265,19 @@ static void VBoxServiceClipboardOS2PollViewer(void)
     if ((int)g_enmState != iOrgState)
     {
         if (g_enmState == kClipboardState_Viewer)
-            VBoxServiceVerbose(3, "clipboard: viewer\n");
+            VGSvcVerbose(3, "clipboard: viewer\n");
         else
-            VBoxServiceVerbose(3, "clipboard: poller\n");
+            VGSvcVerbose(3, "clipboard: poller\n");
     }
 }
 
 
 /**
  * Advertise the formats available from the host.
+ *
+ * @param   fFormats        The formats available on the host.
  */
-static void VBoxServiceClipboardOS2AdvertiseHostFormats(uint32_t fFormats)
+static void vgsvcClipboardOs2AdvertiseHostFormats(uint32_t fFormats)
 {
     /*
      * Open the clipboard and switch to 'destruction' mode.
@@ -281,10 +307,10 @@ static void VBoxServiceClipboardOS2AdvertiseHostFormats(uint32_t fFormats)
                 if (fFormats & (VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT/* | VBOX_SHARED_CLIPBOARD_FMT_HTML ?? */))
                 {
                     if (!WinSetClipbrdData(g_habWorker, 0, CF_TEXT, CFI_POINTER))
-                        VBoxServiceError("WinSetClipbrdData(,,CF_TEXT,) failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
-                    if (    g_atomOdin32UnicodeText
-                        &&  !WinSetClipbrdData(g_habWorker, 0, g_atomOdin32UnicodeText, CFI_POINTER))
-                        VBoxServiceError("WinSetClipbrdData(,,g_atomOdin32UnicodeText,) failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
+                        VGSvcError("WinSetClipbrdData(,,CF_TEXT,) failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
+                    if (   g_atomOdin32UnicodeText
+                        && !WinSetClipbrdData(g_habWorker, 0, g_atomOdin32UnicodeText, CFI_POINTER))
+                        VGSvcError("WinSetClipbrdData(,,g_atomOdin32UnicodeText,) failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
                 }
                 if (fFormats & VBOX_SHARED_CLIPBOARD_FMT_BITMAP)
                 {
@@ -293,30 +319,42 @@ static void VBoxServiceClipboardOS2AdvertiseHostFormats(uint32_t fFormats)
             }
             else
             {
-                VBoxServiceError("WinSetClipbrdOwner failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
+                VGSvcError("WinSetClipbrdOwner failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
                 g_enmState = kClipboardState_Polling;
             }
         }
         else
         {
-            VBoxServiceError("WinEmptyClipbrd failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
+            VGSvcError("WinEmptyClipbrd failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
             g_enmState = kClipboardState_Polling;
         }
 
         if (g_enmState == kClipboardState_Polling)
         {
             g_fEmptyClipboard = true;
-            VBoxServiceClipboardOS2PollViewer();
+            vgsvcClipboardOs2PollViewer();
         }
 
         WinCloseClipbrd(g_habWorker);
     }
     else
-        VBoxServiceError("VBoxServiceClipboardOS2AdvertiseHostFormats: WinOpenClipbrd failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
+        VGSvcError("vgsvcClipboardOs2AdvertiseHostFormats: WinOpenClipbrd failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
 }
 
 
-static void *VBoxServiceClipboardOs2ConvertToOdin32(uint32_t fFormat, USHORT usFmt, void *pv, uint32_t cb)
+/**
+ * Converts (render) to an Odin32 clipboard format.
+ *
+ * We ASSUME we get windows data from the host and all we've got to do here is
+ * slapping an Odin32 header on it.
+ *
+ * @returns Pointer to the data (DosFreeMem).
+ * @param   fFormat             The host format.
+ * @param   usFmt               The PM/Odin32 format.
+ * @param   pv                  The data in host formatting.
+ * @param   cb                  The size of the data.
+ */
+static void *vgsvcClipboardOs2ConvertToOdin32(uint32_t fFormat, USHORT usFmt, void *pv, uint32_t cb)
 {
     PVOID pvPM = NULL;
     APIRET rc = DosAllocSharedMem(&pvPM, NULL, cb + sizeof(CLIPHEADER), OBJ_GIVEABLE | OBJ_GETTABLE | OBJ_TILE | PAG_READ | PAG_WRITE | PAG_COMMIT);
@@ -333,14 +371,23 @@ static void *VBoxServiceClipboardOs2ConvertToOdin32(uint32_t fFormat, USHORT usF
     }
     else
     {
-        VBoxServiceError("DosAllocSharedMem(,,%#x,,) -> %ld\n", cb + sizeof(CLIPHEADER), rc);
+        VGSvcError("DosAllocSharedMem(,,%#x,,) -> %ld\n", cb + sizeof(CLIPHEADER), rc);
         pvPM = NULL;
     }
     return pvPM;
 }
 
 
-static void *VBoxServiceClipboardOs2ConvertToPM(uint32_t fFormat, USHORT usFmt, void *pv, uint32_t cb)
+/**
+ * Converts (render) to a PM clipboard format.
+ *
+ * @returns Pointer to the data (DosFreeMem).
+ * @param   fFormat             The host format.
+ * @param   usFmt               The PM/Odin32 format.
+ * @param   pv                  The data in host formatting.
+ * @param   cb                  The size of the data.
+ */
+static void *vgsvcClipboardOs2ConvertToPM(uint32_t fFormat, USHORT usFmt, void *pv, uint32_t cb)
 {
     void *pvPM = NULL;
 
@@ -353,7 +400,7 @@ static void *VBoxServiceClipboardOs2ConvertToPM(uint32_t fFormat, USHORT usFmt,
              /* || usFmt == ...*/
             )
        )
-        pvPM = VBoxServiceClipboardOs2ConvertToOdin32(fFormat, usFmt, pv, cb);
+        pvPM = vgsvcClipboardOs2ConvertToOdin32(fFormat, usFmt, pv, cb);
     else if (usFmt == CF_TEXT)
     {
         /*
@@ -378,17 +425,17 @@ static void *VBoxServiceClipboardOs2ConvertToPM(uint32_t fFormat, USHORT usFmt,
                     memcpy(pvPM, pszLocale, cbPM);
                 else
                 {
-                    VBoxServiceError("DosAllocSharedMem(,,%#x,,) -> %ld\n", cb + sizeof(CLIPHEADER), orc);
+                    VGSvcError("DosAllocSharedMem(,,%#x,,) -> %ld\n", cb + sizeof(CLIPHEADER), orc);
                     pvPM = NULL;
                 }
                 RTStrFree(pszLocale);
             }
             else
-                VBoxServiceError("RTStrUtf8ToCurrentCP() -> %Rrc\n", rc);
+                VGSvcError("RTStrUtf8ToCurrentCP() -> %Rrc\n", rc);
             RTStrFree(pszUtf8);
         }
         else
-            VBoxServiceError("RTUtf16ToUtf8() -> %Rrc\n", rc);
+            VGSvcError("RTUtf16ToUtf8() -> %Rrc\n", rc);
     }
 
     return pvPM;
@@ -403,9 +450,8 @@ static void *VBoxServiceClipboardOs2ConvertToPM(uint32_t fFormat, USHORT usFmt,
  * @remark  We must not try open the clipboard here because WM_RENDERFMT is a
  *          request send synchronously by someone who has already opened the
  *          clipboard. We would enter a deadlock trying to open it here.
- *
  */
-static void VBoxServiceClipboardOS2RenderFormat(USHORT usFmt)
+static void vgsvcClipboardOs2RenderFormat(USHORT usFmt)
 {
     bool fSucceeded = false;
 
@@ -430,7 +476,7 @@ static void VBoxServiceClipboardOS2RenderFormat(USHORT usFmt)
         void    *pv = RTMemPageAllocZ(cbAllocated);
         if (pv)
         {
-            VBoxServiceVerbose(4, "clipboard: reading host data (%#x)\n", fFormat);
+            VGSvcVerbose(4, "clipboard: reading host data (%#x)\n", fFormat);
             rc = VbglR3ClipboardReadData(g_u32ClientId, fFormat, pv, cb, &cb);
             if (rc == VINF_BUFFER_OVERFLOW)
             {
@@ -444,27 +490,27 @@ static void VBoxServiceClipboardOS2RenderFormat(USHORT usFmt)
         }
         if (RT_SUCCESS(rc))
         {
-            VBoxServiceVerbose(4, "clipboard: read %u bytes\n", cb);
+            VGSvcVerbose(4, "clipboard: read %u bytes\n", cb);
 
             /*
              * Convert the host clipboard data to PM clipboard data and set it.
              */
-            PVOID pvPM = VBoxServiceClipboardOs2ConvertToPM(fFormat, usFmt, pv, cb);
+            PVOID pvPM = vgsvcClipboardOs2ConvertToPM(fFormat, usFmt, pv, cb);
             if (pvPM)
             {
                 if (WinSetClipbrdData(g_habWorker, (ULONG)pvPM, usFmt, CFI_POINTER))
                     fSucceeded = true;
                 else
                 {
-                    VBoxServiceError("VBoxServiceClipboardOS2RenderFormat: WinSetClipbrdData(,%p,%#x, CF_POINTER) failed, lasterror=%lx\n",
-                                     pvPM, usFmt, WinGetLastError(g_habWorker));
+                    VGSvcError("vgsvcClipboardOs2RenderFormat: WinSetClipbrdData(,%p,%#x, CF_POINTER) failed, lasterror=%lx\n",
+                               pvPM, usFmt, WinGetLastError(g_habWorker));
                     DosFreeMem(pvPM);
                 }
             }
             RTMemPageFree(pv, cbAllocated);
         }
         else
-            VBoxServiceError("VBoxServiceClipboardOS2RenderFormat: Failed to query / allocate data. rc=%Rrc cb=%#RX32\n", rc, cb);
+            VGSvcError("vgsvcClipboardOs2RenderFormat: Failed to query / allocate data. rc=%Rrc cb=%#RX32\n", rc, cb);
     }
 
     /*
@@ -477,12 +523,17 @@ static void VBoxServiceClipboardOS2RenderFormat(USHORT usFmt)
         WinEmptyClipbrd(g_habWorker);
         g_enmState = kClipboardState_Polling;
         g_fEmptyClipboard = true;
-        VBoxServiceClipboardOS2PollViewer();
+        vgsvcClipboardOs2PollViewer();
     }
 }
 
 
-static void VBoxServiceClipboardOS2SendDataToHost(uint32_t fFormat)
+/**
+ * Sends data to the host.
+ *
+ * @param   fFormat     The data format the host is requesting.
+ */
+static void vgsvcClipboardOs2SendDataToHost(uint32_t fFormat)
 {
     if (WinOpenClipbrd(g_habWorker))
     {
@@ -522,12 +573,12 @@ static void VBoxServiceClipboardOS2SendDataToHost(uint32_t fFormat)
             }
         }
         if (!pv)
-            VBoxServiceError("VBoxServiceClipboardOS2SendDataToHost: couldn't find data for %#x\n", fFormat);
+            VGSvcError("vgsvcClipboardOs2SendDataToHost: couldn't find data for %#x\n", fFormat);
 
         /*
          * Now, sent whatever we've got to the host (it's waiting).
          */
-        VBoxServiceVerbose(4, "clipboard: writing %pv/%#d (fFormat=%#x)\n", pv, cb, fFormat);
+        VGSvcVerbose(4, "clipboard: writing %pv/%#d (fFormat=%#x)\n", pv, cb, fFormat);
         VbglR3ClipboardWriteData(g_u32ClientId, fFormat, pv, cb);
         RTUtf16Free(pwszFree);
 
@@ -535,8 +586,8 @@ static void VBoxServiceClipboardOS2SendDataToHost(uint32_t fFormat)
     }
     else
     {
-        VBoxServiceError("VBoxServiceClipboardOS2SendDataToHost: WinOpenClipbrd failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
-        VBoxServiceVerbose(4, "clipboard: writing NULL/0 (fFormat=%x)\n", fFormat);
+        VGSvcError("vgsvcClipboardOs2SendDataToHost: WinOpenClipbrd failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
+        VGSvcVerbose(4, "clipboard: writing NULL/0 (fFormat=%x)\n", fFormat);
         VbglR3ClipboardWriteData(g_u32ClientId, fFormat, NULL, 0);
     }
 }
@@ -545,7 +596,7 @@ static void VBoxServiceClipboardOS2SendDataToHost(uint32_t fFormat)
 /**
  * Figure out what's on the clipboard and report it to the host.
  */
-static void VBoxServiceClipboardOS2ReportFormats(void)
+static void vgsvcClipboardOs2ReportFormats(void)
 {
     uint32_t fFormats = 0;
     ULONG ulFormat = 0;
@@ -556,7 +607,7 @@ static void VBoxServiceClipboardOS2ReportFormats(void)
             fFormats |= VBOX_SHARED_CLIPBOARD_FMT_UNICODETEXT;
         /** @todo else bitmaps and stuff. */
     }
-    VBoxServiceVerbose(4, "clipboard: reporting fFormats=%#x\n", fFormats);
+    VGSvcVerbose(4, "clipboard: reporting fFormats=%#x\n", fFormats);
     VbglR3ClipboardReportFormats(g_u32ClientId, fFormats);
 }
 
@@ -568,7 +619,7 @@ static void VBoxServiceClipboardOS2ReportFormats(void)
  * falling back to polling. If something has changed it will
  * notify the host.
  */
-static void VBoxServiceClipboardOS2Poll(void)
+static void vgsvcClipboardOs2Poll(void)
 {
     if (WinOpenClipbrd(g_habWorker))
     {
@@ -582,7 +633,7 @@ static void VBoxServiceClipboardOS2Poll(void)
             if (WinEnumClipbrdFmts(g_habWorker, 0) != 0)
             {
                 g_fEmptyClipboard = false;
-                VBoxServiceClipboardOS2ReportFormats();
+                vgsvcClipboardOs2ReportFormats();
 
                 /* inject the dummy */
                 PVOID pv;
@@ -590,34 +641,34 @@ static void VBoxServiceClipboardOS2Poll(void)
                 if (rc == NO_ERROR)
                 {
                     if (WinSetClipbrdData(g_habWorker, (ULONG)pv, g_atomNothingChanged, CFI_POINTER))
-                        VBoxServiceVerbose(4, "clipboard: Added dummy item.\n");
+                        VGSvcVerbose(4, "clipboard: Added dummy item.\n");
                     else
                     {
-                        VBoxServiceError("VBoxServiceClipboardOS2Poll: WinSetClipbrdData failed, lasterr=%#lx\n", WinGetLastError(g_habWorker));
+                        VGSvcError("vgsvcClipboardOs2Poll: WinSetClipbrdData failed, lasterr=%#lx\n", WinGetLastError(g_habWorker));
                         DosFreeMem(pv);
                     }
                 }
                 else
-                    VBoxServiceError("VBoxServiceClipboardOS2Poll: DosAllocSharedMem(,,1,) -> %ld\n", rc);
+                    VGSvcError("vgsvcClipboardOs2Poll: DosAllocSharedMem(,,1,) -> %ld\n", rc);
             }
             else if (!g_fEmptyClipboard)
             {
                 g_fEmptyClipboard = true;
-                VBoxServiceVerbose(3, "Reporting empty clipboard\n");
+                VGSvcVerbose(3, "Reporting empty clipboard\n");
                 VbglR3ClipboardReportFormats(g_u32ClientId, 0);
             }
         }
         WinCloseClipbrd(g_habWorker);
     }
     else
-        VBoxServiceError("VBoxServiceClipboardOS2Poll: WinOpenClipbrd failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
+        VGSvcError("vgsvcClipboardOs2Poll: WinOpenClipbrd failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
 }
 
 
 /**
  * The clipboard we owned was destroyed by someone else.
  */
-static void VBoxServiceClipboardOS2Destroyed(void)
+static void vgsvcClipboardOs2Destroyed(void)
 {
     /* make sure we're no longer the owner. */
     if (WinQueryClipbrdOwner(g_habWorker) == g_hwndWorker)
@@ -626,10 +677,10 @@ static void VBoxServiceClipboardOS2Destroyed(void)
     /* switch to polling state and notify the host. */
     g_enmState = kClipboardState_Polling;
     g_fEmptyClipboard = true;
-    VBoxServiceVerbose(3, "Reporting empty clipboard\n");
+    VGSvcVerbose(3, "Reporting empty clipboard\n");
     VbglR3ClipboardReportFormats(g_u32ClientId, 0);
 
-    VBoxServiceClipboardOS2PollViewer();
+    vgsvcClipboardOs2PollViewer();
 }
 
 
@@ -643,10 +694,10 @@ static void VBoxServiceClipboardOS2Destroyed(void)
  * @param   mp1     Message parameter 1.
  * @param   mp2     Message parameter 2.
  */
-static MRESULT EXPENTRY VBoxServiceClipboardOS2WinProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
+static MRESULT EXPENTRY vgsvcClipboardOs2WinProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
 {
     if (msg != WM_TIMER)
-        VBoxServiceVerbose(6, "VBoxServiceClipboardOS2WinProc: hwnd=%#lx msg=%#lx mp1=%#lx mp2=%#lx\n", hwnd, msg, mp1, mp2);
+        VGSvcVerbose(6, "vgsvcClipboardOs2WinProc: hwnd=%#lx msg=%#lx mp1=%#lx mp2=%#lx\n", hwnd, msg, mp1, mp2);
 
     switch (msg)
     {
@@ -677,7 +728,7 @@ static MRESULT EXPENTRY VBoxServiceClipboardOS2WinProc(HWND hwnd, ULONG msg, MPA
             if (g_enmState == kClipboardState_SettingViewer)
                 break;
             AssertMsgBreak(g_enmState == kClipboardState_Viewer, ("g_enmState=%d\n", g_enmState));
-            VBoxServiceClipboardOS2Poll();
+            vgsvcClipboardOs2Poll();
             break;
 
         /*
@@ -688,7 +739,7 @@ static MRESULT EXPENTRY VBoxServiceClipboardOS2WinProc(HWND hwnd, ULONG msg, MPA
             if (g_enmState == kClipboardState_Destroying)
                 break; /* it's us doing the replacing, ignore. */
             AssertMsgBreak(g_enmState == kClipboardState_Owner, ("g_enmState=%d\n", g_enmState));
-            VBoxServiceClipboardOS2Destroyed();
+            vgsvcClipboardOs2Destroyed();
             break;
 
         /*
@@ -697,7 +748,7 @@ static MRESULT EXPENTRY VBoxServiceClipboardOS2WinProc(HWND hwnd, ULONG msg, MPA
          */
         case WM_RENDERFMT:
             AssertMsgBreak(g_enmState == kClipboardState_Owner, ("g_enmState=%d\n", g_enmState));
-            VBoxServiceClipboardOS2RenderFormat(SHORT1FROMMP(mp1));
+            vgsvcClipboardOs2RenderFormat(SHORT1FROMMP(mp1));
             break;
 
         /*
@@ -722,14 +773,14 @@ static MRESULT EXPENTRY VBoxServiceClipboardOS2WinProc(HWND hwnd, ULONG msg, MPA
          * Listener message - the host has new formats to offer.
          */
         case WM_USER + VBOX_SHARED_CLIPBOARD_HOST_MSG_FORMATS:
-            VBoxServiceClipboardOS2AdvertiseHostFormats(LONGFROMMP(mp1));
+            vgsvcClipboardOs2AdvertiseHostFormats(LONGFROMMP(mp1));
             break;
 
         /*
          * Listener message - the host wish to read our clipboard data.
          */
         case WM_USER + VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA:
-            VBoxServiceClipboardOS2SendDataToHost(LONGFROMMP(mp1));
+            vgsvcClipboardOs2SendDataToHost(LONGFROMMP(mp1));
             break;
 
         /*
@@ -756,8 +807,8 @@ static MRESULT EXPENTRY VBoxServiceClipboardOS2WinProc(HWND hwnd, ULONG msg, MPA
             }
 
             /* poll for changes */
-            VBoxServiceClipboardOS2Poll();
-            VBoxServiceClipboardOS2PollViewer();
+            vgsvcClipboardOs2Poll();
+            vgsvcClipboardOs2PollViewer();
             break;
 
 
@@ -800,11 +851,11 @@ static MRESULT EXPENTRY VBoxServiceClipboardOS2WinProc(HWND hwnd, ULONG msg, MPA
  * @param   ThreadSelf  Our thread handle.
  * @param   pvUser      Pointer to the clipboard service shutdown indicator.
  */
-static DECLCALLBACK(int) VBoxServiceClipboardOS2Listener(RTTHREAD ThreadSelf, void *pvUser)
+static DECLCALLBACK(int) vgsvcClipboardOs2Listener(RTTHREAD ThreadSelf, void *pvUser)
 {
     bool volatile *pfShutdown = (bool volatile *)pvUser;
     int rc = VERR_GENERAL_FAILURE;
-    VBoxServiceVerbose(3, "VBoxServiceClipboardOS2Listener: ThreadSelf=%RTthrd\n", ThreadSelf);
+    VGSvcVerbose(3, "vgsvcClipboardOs2Listener: ThreadSelf=%RTthrd\n", ThreadSelf);
 
     g_habListener = WinInitialize(0);
     if (g_habListener != NULLHANDLE)
@@ -820,7 +871,7 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Listener(RTTHREAD ThreadSelf, vo
             rc = VINF_SUCCESS;
             ASMAtomicXchgBool(&g_fListenerOkay, true);
             RTThreadUserSignal(ThreadSelf);
-            VBoxServiceVerbose(3, "VBoxServiceClipboardOS2Listener: Started successfully\n");
+            VGSvcVerbose(3, "vgsvcClipboardOs2Listener: Started successfully\n");
 
             /*
              * Loop until termination is requested.
@@ -833,7 +884,7 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Listener(RTTHREAD ThreadSelf, vo
                 rc = VbglR3ClipboardGetHostMsg(g_u32ClientId, &Msg, &fFormats);
                 if (RT_SUCCESS(rc))
                 {
-                    VBoxServiceVerbose(3, "VBoxServiceClipboardOS2Listener: Msg=%#x  fFormats=%#x\n", Msg, fFormats);
+                    VGSvcVerbose(3, "vgsvcClipboardOs2Listener: Msg=%#x  fFormats=%#x\n", Msg, fFormats);
                     switch (Msg)
                     {
                         /*
@@ -844,8 +895,8 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Listener(RTTHREAD ThreadSelf, vo
                         case VBOX_SHARED_CLIPBOARD_HOST_MSG_FORMATS:
                             if (!WinPostMsg(g_hwndWorker, WM_USER + VBOX_SHARED_CLIPBOARD_HOST_MSG_FORMATS,
                                             MPFROMLONG(fFormats), 0))
-                                VBoxServiceError("WinPostMsg(%lx, FORMATS,,) failed, lasterr=%#lx\n",
-                                                 g_hwndWorker, WinGetLastError(g_habListener));
+                                VGSvcError("WinPostMsg(%lx, FORMATS,,) failed, lasterr=%#lx\n",
+                                           g_hwndWorker, WinGetLastError(g_habListener));
                             break;
 
                         /*
@@ -854,8 +905,8 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Listener(RTTHREAD ThreadSelf, vo
                         case VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA:
                             if (!WinPostMsg(g_hwndWorker, WM_USER + VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA,
                                             MPFROMLONG(fFormats), 0))
-                                VBoxServiceError("WinPostMsg(%lx, READ_DATA,,) failed, lasterr=%#lx\n",
-                                                 g_hwndWorker, WinGetLastError(g_habListener));
+                                VGSvcError("WinPostMsg(%lx, READ_DATA,,) failed, lasterr=%#lx\n",
+                                           g_hwndWorker, WinGetLastError(g_habListener));
                             break;
 
                         /*
@@ -866,7 +917,7 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Listener(RTTHREAD ThreadSelf, vo
                             break;
 
                         default:
-                            VBoxServiceVerbose(1, "VBoxServiceClipboardOS2Listener: Unknown message %RU32\n", Msg);
+                            VGSvcVerbose(1, "vgsvcClipboardOs2Listener: Unknown message %RU32\n", Msg);
                             break;
                     }
                 }
@@ -874,7 +925,7 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Listener(RTTHREAD ThreadSelf, vo
                 {
                     if (*pfShutdown)
                         break;
-                    VBoxServiceError("VbglR3ClipboardGetHostMsg failed, rc=%Rrc\n", rc);
+                    VGSvcError("VbglR3ClipboardGetHostMsg failed, rc=%Rrc\n", rc);
                     RTThreadSleep(1000);
                 }
             } /* the loop */
@@ -887,13 +938,15 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Listener(RTTHREAD ThreadSelf, vo
 
     /* Signal our semaphore to make the worker catch on. */
     RTThreadUserSignal(ThreadSelf);
-    VBoxServiceVerbose(3, "VBoxServiceClipboardOS2Listener: terminating, rc=%Rrc\n", rc);
+    VGSvcVerbose(3, "vgsvcClipboardOs2Listener: terminating, rc=%Rrc\n", rc);
     return rc;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnWorker */
-static DECLCALLBACK(int) VBoxServiceClipboardOS2Worker(bool volatile *pfShutdown)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnWorker}
+ */
+static DECLCALLBACK(int) vgsvcClipboardOs2Worker(bool volatile *pfShutdown)
 {
     int rc = VERR_GENERAL_FAILURE;
 
@@ -912,7 +965,7 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Worker(bool volatile *pfShutdown
             /*
              * Create the object window.
              */
-            if (WinRegisterClass(g_habWorker, (PCSZ)"VBoxServiceClipboardClass", VBoxServiceClipboardOS2WinProc, 0, 0))
+            if (WinRegisterClass(g_habWorker, (PCSZ)"VBoxServiceClipboardClass", vgsvcClipboardOs2WinProc, 0, 0))
             {
                 g_hwndWorker = WinCreateWindow(HWND_OBJECT,                             /* hwndParent */
                                                (PCSZ)"VBoxServiceClipboardClass",       /* pszClass */
@@ -926,13 +979,13 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Worker(bool volatile *pfShutdown
                                                NULL);                                   /* pPresParams */
                 if (g_hwndWorker != NULLHANDLE)
                 {
-                    VBoxServiceVerbose(3, "g_hwndWorker=%#lx g_habWorker=%#lx g_hmqWorker=%#lx\n", g_hwndWorker, g_habWorker, g_hmqWorker);
+                    VGSvcVerbose(3, "g_hwndWorker=%#lx g_habWorker=%#lx g_hmqWorker=%#lx\n", g_hwndWorker, g_habWorker, g_hmqWorker);
 
                     /*
                      * Create the listener thread.
                      */
                     g_fListenerOkay = false;
-                    rc = RTThreadCreate(&g_ThreadListener, VBoxServiceClipboardOS2Listener, (void *)pfShutdown, 0,
+                    rc = RTThreadCreate(&g_ThreadListener, vgsvcClipboardOs2Listener, (void *)pfShutdown, 0,
                                         RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "CLIPLISTEN");
                     if (RT_SUCCESS(rc))
                     {
@@ -951,17 +1004,17 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Worker(bool volatile *pfShutdown
                             /*
                              * The PM event pump.
                              */
-                            VBoxServiceVerbose(2, "clipboard: Entering PM message loop.\n");
+                            VGSvcVerbose(2, "clipboard: Entering PM message loop.\n");
                             rc = VINF_SUCCESS;
                             QMSG qmsg;
                             while (WinGetMsg(g_habWorker, &qmsg, NULLHANDLE, NULLHANDLE, 0))
                             {
                                 if (qmsg.msg != WM_TIMER)
-                                    VBoxServiceVerbose(6, "WinGetMsg -> hwnd=%p msg=%#x mp1=%p mp2=%p time=%#x ptl=%d,%d rsrv=%#x\n",
-                                                       qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2, qmsg.time, qmsg.ptl.x, qmsg.ptl.y, qmsg.reserved);
+                                    VGSvcVerbose(6, "WinGetMsg -> hwnd=%p msg=%#x mp1=%p mp2=%p time=%#x ptl=%d,%d rsrv=%#x\n",
+                                                 qmsg.hwnd, qmsg.msg, qmsg.mp1, qmsg.mp2, qmsg.time, qmsg.ptl.x, qmsg.ptl.y, qmsg.reserved);
                                 WinDispatchMsg(g_habWorker, &qmsg);
                             }
-                            VBoxServiceVerbose(2, "clipboard: Exited PM message loop. *pfShutdown=%RTbool\n", *pfShutdown);
+                            VGSvcVerbose(2, "clipboard: Exited PM message loop. *pfShutdown=%RTbool\n", *pfShutdown);
 
                             RTThreadWait(g_ThreadListener, 60*1000, NULL);
                         }
@@ -978,36 +1031,38 @@ static DECLCALLBACK(int) VBoxServiceClipboardOS2Worker(bool volatile *pfShutdown
                     }
                 }
                 else
-                    VBoxServiceError("WinCreateWindow() failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
+                    VGSvcError("WinCreateWindow() failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
                 /* no class deregistration in PM.  */
             }
             else
-                VBoxServiceError("WinRegisterClass() failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
+                VGSvcError("WinRegisterClass() failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
 
             if (g_hmqCtrl != g_hmqWorker)
                 WinDestroyMsgQueue(g_hmqWorker);
             g_hmqWorker = NULLHANDLE;
         }
         else
-            VBoxServiceError("WinCreateMsgQueue(,0) failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
+            VGSvcError("WinCreateMsgQueue(,0) failed, lasterr=%lx\n", WinGetLastError(g_habWorker));
 
         if (g_habCtrl != g_habWorker)
             WinTerminate(g_habWorker);
         g_habWorker = NULLHANDLE;
     }
     else
-        VBoxServiceError("WinInitialize(0) failed, lasterr=%lx\n", WinGetLastError(NULLHANDLE));
+        VGSvcError("WinInitialize(0) failed, lasterr=%lx\n", WinGetLastError(NULLHANDLE));
 
     return rc;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnStop */
-static DECLCALLBACK(void) VBoxServiceClipboardOS2Stop(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnStop}
+ */
+static DECLCALLBACK(void) vgsvcClipboardOs2Stop(void)
 {
     if (    g_hmqWorker != NULLHANDLE
         &&  !WinPostQueueMsg(g_hmqWorker, WM_QUIT, NULL, NULL))
-        VBoxServiceError("WinPostQueueMsg(g_hmqWorker, WM_QUIT, 0,0) failed, lasterr=%lx\n", WinGetLastError(g_habCtrl));
+        VGSvcError("WinPostQueueMsg(g_hmqWorker, WM_QUIT, 0,0) failed, lasterr=%lx\n", WinGetLastError(g_habCtrl));
 
     /* Must disconnect the clipboard here otherwise the listner won't quit and
        the service shutdown will not stop. */
@@ -1016,27 +1071,29 @@ static DECLCALLBACK(void) VBoxServiceClipboardOS2Stop(void)
         if (g_hmqWorker != NULLHANDLE)
             RTThreadSleep(32);      /* fudge */
 
-        VBoxServiceVerbose(4, "clipboard: disconnecting %#x\n", g_u32ClientId);
+        VGSvcVerbose(4, "clipboard: disconnecting %#x\n", g_u32ClientId);
         int rc = VbglR3ClipboardDisconnect(g_u32ClientId);
         if (RT_SUCCESS(rc))
             g_u32ClientId = 0;
         else
-            VBoxServiceError("clipboard: VbglR3ClipboardDisconnect(%#x) -> %Rrc\n", g_u32ClientId, rc);
+            VGSvcError("clipboard: VbglR3ClipboardDisconnect(%#x) -> %Rrc\n", g_u32ClientId, rc);
     }
 }
 
 
-/** @copydoc VBOXSERVICE::pfnTerm */
-static DECLCALLBACK(void) VBoxServiceClipboardOS2Term(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnTerm}
+ */
+static DECLCALLBACK(void) vgsvcClipboardOs2Term(void)
 {
     if (g_u32ClientId != 0)
     {
-        VBoxServiceVerbose(4, "clipboard: disconnecting %#x\n", g_u32ClientId);
+        VGSvcVerbose(4, "clipboard: disconnecting %#x\n", g_u32ClientId);
         int rc = VbglR3ClipboardDisconnect(g_u32ClientId);
         if (RT_SUCCESS(rc))
             g_u32ClientId = 0;
         else
-            VBoxServiceError("clipboard: VbglR3ClipboardDisconnect(%#x) -> %Rrc\n", g_u32ClientId, rc);
+            VGSvcError("clipboard: VbglR3ClipboardDisconnect(%#x) -> %Rrc\n", g_u32ClientId, rc);
     }
     WinDestroyMsgQueue(g_hmqCtrl);
     g_hmqCtrl = NULLHANDLE;
@@ -1061,11 +1118,11 @@ VBOXSERVICE g_Clipboard =
     ""
     ,
     /* methods */
-    VBoxServiceClipboardOS2PreInit,
-    VBoxServiceClipboardOS2Option,
-    VBoxServiceClipboardOS2Init,
-    VBoxServiceClipboardOS2Worker,
-    VBoxServiceClipboardOS2Stop,
-    VBoxServiceClipboardOS2Term
+    vgsvcClipboardOs2PreInit,
+    vgsvcClipboardOs2Option,
+    vgsvcClipboardOs2Init,
+    vgsvcClipboardOs2Worker,
+    vgsvcClipboardOs2Stop,
+    vgsvcClipboardOs2Term
 };
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp
index 5cd21e7..932f8a4 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.cpp
@@ -15,6 +15,34 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+/** @page pg_vgsvc_gstctrl VBoxService - Guest Control
+ *
+ * The Guest Control subservice helps implementing the IGuest APIs.
+ *
+ * The communication between this service (and its children) and IGuest goes
+ * over the HGCM GuestControl service.
+ *
+ * The IGuest APIs provides means to manipulate (control) files, directories,
+ * symbolic links and processes within the guest.  Most of these means requires
+ * credentials of a guest OS user to operate, though some restricted ones
+ * operates directly as the VBoxService user (root / system service account).
+ *
+ * The current design is that a subprocess is spawned for handling operations as
+ * a given user.  This process is represented as IGuestSession in the API.  The
+ * subprocess will be spawned as the given use, giving up the privileges the
+ * parent subservice had.
+ *
+ * It will try handle as many of the operations directly from within the
+ * subprocess, but for more complicated things (or things that haven't yet been
+ * converted), it will spawn a helper process that does the actual work.
+ *
+ * These helpers are the typically modeled on similar unix core utilities, like
+ * mkdir, rm, rmdir, cat and so on.  The helper tools can also be launched
+ * directly from VBoxManage by the user by prepending the 'vbox_' prefix to the
+ * unix command.
+ *
+ */
+
 
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
@@ -42,7 +70,7 @@ using namespace guestControl;
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
 /** The control interval (milliseconds). */
-static uint32_t             g_uControlIntervalMS = 0;
+static uint32_t             g_msControlInterval = 0;
 /** The semaphore we're blocking our main control thread on. */
 static RTSEMEVENTMULTI      g_hControlEvent = NIL_RTSEMEVENTMULTI;
 /** The VM session ID. Changes whenever the VM is restored or reset. */
@@ -69,13 +97,15 @@ VBOXSERVICECTRLSESSION      g_Session;
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static int  gstcntlHandleSessionOpen(PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int  gstcntlHandleSessionClose(PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static void VBoxServiceControlShutdown(void);
+static int  vgsvcGstCtrlHandleSessionOpen(PVBGLR3GUESTCTRLCMDCTX pHostCtx);
+static int  vgsvcGstCtrlHandleSessionClose(PVBGLR3GUESTCTRLCMDCTX pHostCtx);
+static void vgsvcGstCtrlShutdown(void);
 
 
-/** @copydoc VBOXSERVICE::pfnPreInit */
-static DECLCALLBACK(int) VBoxServiceControlPreInit(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnPreInit}
+ */
+static DECLCALLBACK(int) vgsvcGstCtrlPreInit(void)
 {
     int rc;
 #ifdef VBOX_WITH_GUEST_PROPS
@@ -89,16 +119,14 @@ static DECLCALLBACK(int) VBoxServiceControlPreInit(void)
     {
         if (rc == VERR_HGCM_SERVICE_NOT_FOUND) /* Host service is not available. */
         {
-            VBoxServiceVerbose(0, "Guest property service is not available, skipping\n");
+            VGSvcVerbose(0, "Guest property service is not available, skipping\n");
             rc = VINF_SUCCESS;
         }
         else
-            VBoxServiceError("Failed to connect to the guest property service, rc=%Rrc\n", rc);
+            VGSvcError("Failed to connect to the guest property service, rc=%Rrc\n", rc);
     }
     else
-    {
         VbglR3GuestPropDisconnect(uGuestPropSvcClientID);
-    }
 
     if (rc == VERR_NOT_FOUND) /* If a value is not found, don't be sad! */
         rc = VINF_SUCCESS;
@@ -110,22 +138,24 @@ static DECLCALLBACK(int) VBoxServiceControlPreInit(void)
     if (RT_SUCCESS(rc))
     {
         /* Init session object. */
-        rc = GstCntlSessionInit(&g_Session, 0 /* Flags */);
+        rc = VGSvcGstCtrlSessionInit(&g_Session, 0 /* Flags */);
     }
 
     return rc;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnOption */
-static DECLCALLBACK(int) VBoxServiceControlOption(const char **ppszShort, int argc, char **argv, int *pi)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnOption}
+ */
+static DECLCALLBACK(int) vgsvcGstCtrlOption(const char **ppszShort, int argc, char **argv, int *pi)
 {
     int rc = -1;
     if (ppszShort)
         /* no short options */;
     else if (!strcmp(argv[*pi], "--control-interval"))
-        rc = VBoxServiceArgUInt32(argc, argv, "", pi,
-                                  &g_uControlIntervalMS, 1, UINT32_MAX - 1);
+        rc = VGSvcArgUInt32(argc, argv, "", pi,
+                                  &g_msControlInterval, 1, UINT32_MAX - 1);
 #ifdef DEBUG
     else if (!strcmp(argv[*pi], "--control-dump-stdout"))
     {
@@ -142,15 +172,17 @@ static DECLCALLBACK(int) VBoxServiceControlOption(const char **ppszShort, int ar
 }
 
 
-/** @copydoc VBOXSERVICE::pfnInit */
-static DECLCALLBACK(int) VBoxServiceControlInit(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnInit}
+ */
+static DECLCALLBACK(int) vgsvcGstCtrlInit(void)
 {
     /*
      * If not specified, find the right interval default.
      * Then create the event sem to block on.
      */
-    if (!g_uControlIntervalMS)
-        g_uControlIntervalMS = 1000;
+    if (!g_msControlInterval)
+        g_msControlInterval = 1000;
 
     int rc = RTSemEventMultiCreate(&g_hControlEvent);
     AssertRCReturn(rc, rc);
@@ -162,8 +194,7 @@ static DECLCALLBACK(int) VBoxServiceControlInit(void)
         rc = VbglR3GuestCtrlConnect(&g_uControlSvcClientID);
     if (RT_SUCCESS(rc))
     {
-        VBoxServiceVerbose(3, "Guest control service client ID=%RU32\n",
-                           g_uControlSvcClientID);
+        VGSvcVerbose(3, "Guest control service client ID=%RU32\n", g_uControlSvcClientID);
 
         /* Init session thread list. */
         RTListInit(&g_lstControlSessionThreads);
@@ -174,11 +205,11 @@ static DECLCALLBACK(int) VBoxServiceControlInit(void)
            causing VBoxService to fail. */
         if (rc == VERR_HGCM_SERVICE_NOT_FOUND) /* Host service is not available. */
         {
-            VBoxServiceVerbose(0, "Guest control service is not available\n");
+            VGSvcVerbose(0, "Guest control service is not available\n");
             rc = VERR_SERVICE_DISABLED;
         }
         else
-            VBoxServiceError("Failed to connect to the guest control service! Error: %Rrc\n", rc);
+            VGSvcError("Failed to connect to the guest control service! Error: %Rrc\n", rc);
         RTSemEventMultiDestroy(g_hControlEvent);
         g_hControlEvent = NIL_RTSEMEVENTMULTI;
     }
@@ -186,8 +217,10 @@ static DECLCALLBACK(int) VBoxServiceControlInit(void)
 }
 
 
-/** @copydoc VBOXSERVICE::pfnWorker */
-DECLCALLBACK(int) VBoxServiceControlWorker(bool volatile *pfShutdown)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnWorker}
+ */
+static DECLCALLBACK(int) vgsvcGstCtrlWorker(bool volatile *pfShutdown)
 {
     /*
      * Tell the control thread that it can continue
@@ -212,22 +245,22 @@ DECLCALLBACK(int) VBoxServiceControlWorker(bool volatile *pfShutdown)
     int cRetrievalFailed = 0; /* Number of failed message retrievals in a row. */
     for (;;)
     {
-        VBoxServiceVerbose(3, "Waiting for host msg ...\n");
+        VGSvcVerbose(3, "Waiting for host msg ...\n");
         uint32_t uMsg = 0;
         uint32_t cParms = 0;
         rc = VbglR3GuestCtrlMsgWaitFor(g_uControlSvcClientID, &uMsg, &cParms);
         if (rc == VERR_TOO_MUCH_DATA)
         {
 #ifdef DEBUG
-            VBoxServiceVerbose(4, "Message requires %ld parameters, but only 2 supplied -- retrying request (no error!)...\n",
-                               cParms);
+            VGSvcVerbose(4, "Message requires %ld parameters, but only 2 supplied -- retrying request (no error!)...\n",
+                         cParms);
 #endif
             rc = VINF_SUCCESS; /* Try to get "real" message in next block below. */
         }
         else if (RT_FAILURE(rc))
         {
             /* Note: VERR_GEN_IO_FAILURE seems to be normal if ran into timeout. */
-            VBoxServiceError("Getting host message failed with %Rrc\n", rc);
+            VGSvcError("Getting host message failed with %Rrc\n", rc);
 
             /* Check for VM session change. */
             uint64_t idNewSession = g_idControlSession;
@@ -235,34 +268,33 @@ DECLCALLBACK(int) VBoxServiceControlWorker(bool volatile *pfShutdown)
             if (   RT_SUCCESS(rc2)
                 && (idNewSession != g_idControlSession))
             {
-                VBoxServiceVerbose(1, "The VM session ID changed\n");
+                VGSvcVerbose(1, "The VM session ID changed\n");
                 g_idControlSession = idNewSession;
 
                 /* Close all opened guest sessions -- all context IDs, sessions etc.
                  * are now invalid. */
-                rc2 = GstCntlSessionClose(&g_Session);
+                rc2 = VGSvcGstCtrlSessionClose(&g_Session);
                 AssertRC(rc2);
 
                 /* Do a reconnect. */
-                VBoxServiceVerbose(1, "Reconnecting to HGCM service ...\n");
+                VGSvcVerbose(1, "Reconnecting to HGCM service ...\n");
                 rc2 = VbglR3GuestCtrlConnect(&g_uControlSvcClientID);
                 if (RT_SUCCESS(rc2))
                 {
-                    VBoxServiceVerbose(3, "Guest control service client ID=%RU32\n",
-                                       g_uControlSvcClientID);
+                    VGSvcVerbose(3, "Guest control service client ID=%RU32\n", g_uControlSvcClientID);
                     cRetrievalFailed = 0;
                     continue; /* Skip waiting. */
                 }
                 else
                 {
-                    VBoxServiceError("Unable to re-connect to HGCM service, rc=%Rrc, bailing out\n", rc);
+                    VGSvcError("Unable to re-connect to HGCM service, rc=%Rrc, bailing out\n", rc);
                     break;
                 }
             }
 
             if (++cRetrievalFailed > 16) /** @todo Make this configurable? */
             {
-                VBoxServiceError("Too many failed attempts in a row to get next message, bailing out\n");
+                VGSvcError("Too many failed attempts in a row to get next message, bailing out\n");
                 break;
             }
 
@@ -271,7 +303,7 @@ DECLCALLBACK(int) VBoxServiceControlWorker(bool volatile *pfShutdown)
 
         if (RT_SUCCESS(rc))
         {
-            VBoxServiceVerbose(4, "Msg=%RU32 (%RU32 parms) retrieved\n", uMsg, cParms);
+            VGSvcVerbose(4, "Msg=%RU32 (%RU32 parms) retrieved\n", uMsg, cParms);
             cRetrievalFailed = 0; /* Reset failed retrieval count. */
 
             /* Set number of parameters for current host context. */
@@ -283,27 +315,27 @@ DECLCALLBACK(int) VBoxServiceControlWorker(bool volatile *pfShutdown)
             if (   RT_SUCCESS(rc2)
                 && (idNewSession != g_idControlSession))
             {
-                VBoxServiceVerbose(1, "The VM session ID changed\n");
+                VGSvcVerbose(1, "The VM session ID changed\n");
                 g_idControlSession = idNewSession;
 
                 /* Close all opened guest sessions -- all context IDs, sessions etc.
                  * are now invalid. */
-                rc2 = GstCntlSessionClose(&g_Session);
+                rc2 = VGSvcGstCtrlSessionClose(&g_Session);
                 AssertRC(rc2);
             }
 
             switch (uMsg)
             {
                 case HOST_CANCEL_PENDING_WAITS:
-                    VBoxServiceVerbose(1, "We were asked to quit ...\n");
+                    VGSvcVerbose(1, "We were asked to quit ...\n");
                     break;
 
                 case HOST_SESSION_CREATE:
-                    rc = gstcntlHandleSessionOpen(&ctxHost);
+                    rc = vgsvcGstCtrlHandleSessionOpen(&ctxHost);
                     break;
 
                 case HOST_SESSION_CLOSE:
-                    rc = gstcntlHandleSessionClose(&ctxHost);
+                    rc = vgsvcGstCtrlHandleSessionClose(&ctxHost);
                     break;
 
                 default:
@@ -319,10 +351,7 @@ DECLCALLBACK(int) VBoxServiceControlWorker(bool volatile *pfShutdown)
                      * execution call.
                      */
                     if (ctxHost.uProtocol == 1)
-                    {
-                        rc = GstCntlSessionHandler(&g_Session, uMsg, &ctxHost,
-                                                   pvScratchBuf, cbScratchBuf, pfShutdown);
-                    }
+                        rc = VGSvcGstCtrlSessionHandler(&g_Session, uMsg, &ctxHost, pvScratchBuf, cbScratchBuf, pfShutdown);
                     else
                     {
                         /*
@@ -331,8 +360,7 @@ DECLCALLBACK(int) VBoxServiceControlWorker(bool volatile *pfShutdown)
                          * skip all not wanted messages here.
                          */
                         rc = VbglR3GuestCtrlMsgSkip(g_uControlSvcClientID);
-                        VBoxServiceVerbose(3, "Skipping uMsg=%RU32, cParms=%RU32, rc=%Rrc\n",
-                                           uMsg, cParms, rc);
+                        VGSvcVerbose(3, "Skipping uMsg=%RU32, cParms=%RU32, rc=%Rrc\n", uMsg, cParms, rc);
                     }
                     break;
                 }
@@ -350,18 +378,18 @@ DECLCALLBACK(int) VBoxServiceControlWorker(bool volatile *pfShutdown)
         RTThreadYield();
     }
 
-    VBoxServiceVerbose(0, "Guest control service stopped\n");
+    VGSvcVerbose(0, "Guest control service stopped\n");
 
     /* Delete scratch buffer. */
     if (pvScratchBuf)
         RTMemFree(pvScratchBuf);
 
-    VBoxServiceVerbose(0, "Guest control worker returned with rc=%Rrc\n", rc);
+    VGSvcVerbose(0, "Guest control worker returned with rc=%Rrc\n", rc);
     return rc;
 }
 
 
-static int gstcntlHandleSessionOpen(PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlHandleSessionOpen(PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
 
@@ -378,34 +406,32 @@ static int gstcntlHandleSessionOpen(PVBGLR3GUESTCTRLCMDCTX pHostCtx)
          * wants to use. So update the current protocol version with the one the
          * host wants to use in subsequent calls. */
         pHostCtx->uProtocol = ssInfo.uProtocol;
-        VBoxServiceVerbose(3, "Client ID=%RU32 now is using protocol %RU32\n",
-                           pHostCtx->uClientID, pHostCtx->uProtocol);
+        VGSvcVerbose(3, "Client ID=%RU32 now is using protocol %RU32\n", pHostCtx->uClientID, pHostCtx->uProtocol);
 
-        rc = GstCntlSessionThreadCreate(&g_lstControlSessionThreads,
-                                        &ssInfo, NULL /* ppSessionThread */);
+        rc = VGSvcGstCtrlSessionThreadCreate(&g_lstControlSessionThreads, &ssInfo, NULL /* ppSessionThread */);
     }
 
     if (RT_FAILURE(rc))
     {
         /* Report back on failure. On success this will be done
          * by the forked session thread. */
-        int rc2 = VbglR3GuestCtrlSessionNotify(pHostCtx,
-                                               GUEST_SESSION_NOTIFYTYPE_ERROR, rc /* uint32_t vs. int */);
+        int rc2 = VbglR3GuestCtrlSessionNotify(pHostCtx, GUEST_SESSION_NOTIFYTYPE_ERROR, rc /* uint32_t vs. int */);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Reporting session error status on open failed with rc=%Rrc\n", rc2);
+            VGSvcError("Reporting session error status on open failed with rc=%Rrc\n", rc2);
     }
 
-    VBoxServiceVerbose(3, "Opening a new guest session returned rc=%Rrc\n", rc);
+    VGSvcVerbose(3, "Opening a new guest session returned rc=%Rrc\n", rc);
     return rc;
 }
 
 
-static int gstcntlHandleSessionClose(PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlHandleSessionClose(PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
 
-    uint32_t uSessionID, uFlags;
-    int rc = VbglR3GuestCtrlSessionGetClose(pHostCtx, &uFlags, &uSessionID);
+    uint32_t uSessionID;
+    uint32_t fFlags;
+    int rc = VbglR3GuestCtrlSessionGetClose(pHostCtx, &fFlags, &uSessionID);
     if (RT_SUCCESS(rc))
     {
         rc = VERR_NOT_FOUND;
@@ -415,7 +441,7 @@ static int gstcntlHandleSessionClose(PVBGLR3GUESTCTRLCMDCTX pHostCtx)
         {
             if (pThread->StartupInfo.uSessionID == uSessionID)
             {
-                rc = GstCntlSessionThreadDestroy(pThread, uFlags);
+                rc = VGSvcGstCtrlSessionThreadDestroy(pThread, fFlags);
                 break;
             }
         }
@@ -428,26 +454,26 @@ static int gstcntlHandleSessionClose(PVBGLR3GUESTCTRLCMDCTX pHostCtx)
                                                    GUEST_SESSION_NOTIFYTYPE_ERROR, rc);
             if (RT_FAILURE(rc2))
             {
-                VBoxServiceError("Reporting session error status on close failed with rc=%Rrc\n", rc2);
+                VGSvcError("Reporting session error status on close failed with rc=%Rrc\n", rc2);
                 if (RT_SUCCESS(rc))
                     rc = rc2;
             }
         }
 #endif
-        VBoxServiceVerbose(2, "Closing guest session %RU32 returned rc=%Rrc\n",
-                           uSessionID, rc);
+        VGSvcVerbose(2, "Closing guest session %RU32 returned rc=%Rrc\n", uSessionID, rc);
     }
     else
-        VBoxServiceError("Closing guest session %RU32 failed with rc=%Rrc\n",
-                         uSessionID, rc);
+        VGSvcError("Closing guest session %RU32 failed with rc=%Rrc\n", uSessionID, rc);
     return rc;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnStop */
-static DECLCALLBACK(void) VBoxServiceControlStop(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnStop}
+ */
+static DECLCALLBACK(void) vgsvcGstCtrlStop(void)
 {
-    VBoxServiceVerbose(3, "Stopping ...\n");
+    VGSvcVerbose(3, "Stopping ...\n");
 
     /** @todo Later, figure what to do if we're in RTProcWait(). It's a very
      *        annoying call since doesn't support timeouts in the posix world. */
@@ -460,12 +486,12 @@ static DECLCALLBACK(void) VBoxServiceControlStop(void)
      */
     if (g_uControlSvcClientID)
     {
-        VBoxServiceVerbose(3, "Cancelling pending waits (client ID=%u) ...\n",
+        VGSvcVerbose(3, "Cancelling pending waits (client ID=%u) ...\n",
                            g_uControlSvcClientID);
 
         int rc = VbglR3GuestCtrlCancelPendingWaits(g_uControlSvcClientID);
         if (RT_FAILURE(rc))
-            VBoxServiceError("Cancelling pending waits failed; rc=%Rrc\n", rc);
+            VGSvcError("Cancelling pending waits failed; rc=%Rrc\n", rc);
     }
 }
 
@@ -473,32 +499,32 @@ static DECLCALLBACK(void) VBoxServiceControlStop(void)
 /**
  * Destroys all guest process threads which are still active.
  */
-static void VBoxServiceControlShutdown(void)
+static void vgsvcGstCtrlShutdown(void)
 {
-    VBoxServiceVerbose(2, "Shutting down ...\n");
+    VGSvcVerbose(2, "Shutting down ...\n");
 
-    int rc2 = GstCntlSessionThreadDestroyAll(&g_lstControlSessionThreads,
-                                             0 /* Flags */);
+    int rc2 = VGSvcGstCtrlSessionThreadDestroyAll(&g_lstControlSessionThreads, 0 /* Flags */);
     if (RT_FAILURE(rc2))
-        VBoxServiceError("Closing session threads failed with rc=%Rrc\n", rc2);
+        VGSvcError("Closing session threads failed with rc=%Rrc\n", rc2);
 
-    rc2 = GstCntlSessionClose(&g_Session);
+    rc2 = VGSvcGstCtrlSessionClose(&g_Session);
     if (RT_FAILURE(rc2))
-        VBoxServiceError("Closing session failed with rc=%Rrc\n", rc2);
+        VGSvcError("Closing session failed with rc=%Rrc\n", rc2);
 
-    VBoxServiceVerbose(2, "Shutting down complete\n");
+    VGSvcVerbose(2, "Shutting down complete\n");
 }
 
 
-/** @copydoc VBOXSERVICE::pfnTerm */
-static DECLCALLBACK(void) VBoxServiceControlTerm(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnTerm}
+ */
+static DECLCALLBACK(void) vgsvcGstCtrlTerm(void)
 {
-    VBoxServiceVerbose(3, "Terminating ...\n");
+    VGSvcVerbose(3, "Terminating ...\n");
 
-    VBoxServiceControlShutdown();
+    vgsvcGstCtrlShutdown();
 
-    VBoxServiceVerbose(3, "Disconnecting client ID=%u ...\n",
-                       g_uControlSvcClientID);
+    VGSvcVerbose(3, "Disconnecting client ID=%u ...\n", g_uControlSvcClientID);
     VbglR3GuestCtrlDisconnect(g_uControlSvcClientID);
     g_uControlSvcClientID = 0;
 
@@ -536,11 +562,11 @@ VBOXSERVICE g_Control =
     "                            new control commands. The default is 1000 ms.\n"
     ,
     /* methods */
-    VBoxServiceControlPreInit,
-    VBoxServiceControlOption,
-    VBoxServiceControlInit,
-    VBoxServiceControlWorker,
-    VBoxServiceControlStop,
-    VBoxServiceControlTerm
+    vgsvcGstCtrlPreInit,
+    vgsvcGstCtrlOption,
+    vgsvcGstCtrlInit,
+    vgsvcGstCtrlWorker,
+    vgsvcGstCtrlStop,
+    vgsvcGstCtrlTerm
 };
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h
index a3e540f..d7c0570 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h
@@ -283,43 +283,43 @@ typedef VBOXSERVICECTRLPROCESS *PVBOXSERVICECTRLPROCESS;
 
 RT_C_DECLS_BEGIN
 
-/**
- * Note on naming conventions:
- * - VBoxServiceControl* is named everything sub service module related, e.g.
- *   everything which is callable by main() and/or the service dispatcher(s).
- * - GstCntl* is named everything which declared extern and thus can be called
- *   by different guest control modules as needed.
- * - gstcntl (all lowercase) is a purely static function to split up functionality
- *   inside a module.
- */
+extern RTLISTANCHOR             g_lstControlSessionThreads;
+extern VBOXSERVICECTRLSESSION   g_Session;
 
-/* Guest session thread handling. */
-extern int                      GstCntlSessionThreadCreate(PRTLISTANCHOR pList, const PVBOXSERVICECTRLSESSIONSTARTUPINFO pSessionStartupInfo, PVBOXSERVICECTRLSESSIONTHREAD *ppSessionThread);
-extern int                      GstCntlSessionThreadDestroy(PVBOXSERVICECTRLSESSIONTHREAD pSession, uint32_t uFlags);
-extern int                      GstCntlSessionThreadDestroyAll(PRTLISTANCHOR pList, uint32_t uFlags);
-extern int                      GstCntlSessionThreadTerminate(PVBOXSERVICECTRLSESSIONTHREAD pSession);
-extern RTEXITCODE               VBoxServiceControlSessionSpawnInit(int argc, char **argv);
-/* Per-session functions. */
-extern PVBOXSERVICECTRLPROCESS  GstCntlSessionRetainProcess(PVBOXSERVICECTRLSESSION pSession, uint32_t uPID);
-extern int                      GstCntlSessionClose(PVBOXSERVICECTRLSESSION pSession);
-extern int                      GstCntlSessionDestroy(PVBOXSERVICECTRLSESSION pSession);
-extern int                      GstCntlSessionInit(PVBOXSERVICECTRLSESSION pSession, uint32_t uFlags);
-extern int                      GstCntlSessionHandler(PVBOXSERVICECTRLSESSION pSession, uint32_t uMsg, PVBGLR3GUESTCTRLCMDCTX pHostCtx, void *pvScratchBuf, size_t cbScratchBuf, volatile bool *pfShutdown);
-extern int                      GstCntlSessionProcessAdd(PVBOXSERVICECTRLSESSION pSession, PVBOXSERVICECTRLPROCESS pProcess);
-extern int                      GstCntlSessionProcessRemove(PVBOXSERVICECTRLSESSION pSession, PVBOXSERVICECTRLPROCESS pProcess);
-extern int                      GstCntlSessionProcessStartAllowed(const PVBOXSERVICECTRLSESSION pSession, bool *pbAllowed);
-extern int                      GstCntlSessionReapProcesses(PVBOXSERVICECTRLSESSION pSession);
-/* Per-guest process functions. */
-extern int                      GstCntlProcessFree(PVBOXSERVICECTRLPROCESS pProcess);
-extern int                      GstCntlProcessHandleInput(PVBOXSERVICECTRLPROCESS pProcess, PVBGLR3GUESTCTRLCMDCTX pHostCtx, bool fPendingClose, void *pvBuf, uint32_t cbBuf);
-extern int                      GstCntlProcessHandleOutput(PVBOXSERVICECTRLPROCESS pProcess, PVBGLR3GUESTCTRLCMDCTX pHostCtx, uint32_t uHandle, uint32_t cbToRead, uint32_t uFlags);
-extern int                      GstCntlProcessHandleTerm(PVBOXSERVICECTRLPROCESS pProcess);
-extern void                     GstCntlProcessRelease(PVBOXSERVICECTRLPROCESS pProcess);
-extern int                      GstCntlProcessStart(const PVBOXSERVICECTRLSESSION pSession, const PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo, uint32_t uContext);
-extern int                      GstCntlProcessStop(PVBOXSERVICECTRLPROCESS pProcess);
-extern int                      GstCntlProcessWait(const PVBOXSERVICECTRLPROCESS pProcess, RTMSINTERVAL msTimeout, int *pRc);
+
+/** @name Guest session thread handling.
+ * @{ */
+extern int                      VGSvcGstCtrlSessionThreadCreate(PRTLISTANCHOR pList, const PVBOXSERVICECTRLSESSIONSTARTUPINFO pSessionStartupInfo, PVBOXSERVICECTRLSESSIONTHREAD *ppSessionThread);
+extern int                      VGSvcGstCtrlSessionThreadDestroy(PVBOXSERVICECTRLSESSIONTHREAD pSession, uint32_t uFlags);
+extern int                      VGSvcGstCtrlSessionThreadDestroyAll(PRTLISTANCHOR pList, uint32_t uFlags);
+extern int                      VGSvcGstCtrlSessionThreadTerminate(PVBOXSERVICECTRLSESSIONTHREAD pSession);
+extern RTEXITCODE               VGSvcGstCtrlSessionSpawnInit(int argc, char **argv);
+/** @} */
+/** @name Per-session functions.
+ * @{ */
+extern PVBOXSERVICECTRLPROCESS  VGSvcGstCtrlSessionRetainProcess(PVBOXSERVICECTRLSESSION pSession, uint32_t uPID);
+extern int                      VGSvcGstCtrlSessionClose(PVBOXSERVICECTRLSESSION pSession);
+extern int                      VGSvcGstCtrlSessionDestroy(PVBOXSERVICECTRLSESSION pSession);
+extern int                      VGSvcGstCtrlSessionInit(PVBOXSERVICECTRLSESSION pSession, uint32_t uFlags);
+extern int                      VGSvcGstCtrlSessionHandler(PVBOXSERVICECTRLSESSION pSession, uint32_t uMsg, PVBGLR3GUESTCTRLCMDCTX pHostCtx, void *pvScratchBuf, size_t cbScratchBuf, volatile bool *pfShutdown);
+extern int                      VGSvcGstCtrlSessionProcessAdd(PVBOXSERVICECTRLSESSION pSession, PVBOXSERVICECTRLPROCESS pProcess);
+extern int                      VGSvcGstCtrlSessionProcessRemove(PVBOXSERVICECTRLSESSION pSession, PVBOXSERVICECTRLPROCESS pProcess);
+extern int                      VGSvcGstCtrlSessionProcessStartAllowed(const PVBOXSERVICECTRLSESSION pSession, bool *pbAllowed);
+extern int                      VGSvcGstCtrlSessionReapProcesses(PVBOXSERVICECTRLSESSION pSession);
+/** @} */
+/** @name Per-guest process functions.
+ * @{ */
+extern int                      VGSvcGstCtrlProcessFree(PVBOXSERVICECTRLPROCESS pProcess);
+extern int                      VGSvcGstCtrlProcessHandleInput(PVBOXSERVICECTRLPROCESS pProcess, PVBGLR3GUESTCTRLCMDCTX pHostCtx, bool fPendingClose, void *pvBuf, uint32_t cbBuf);
+extern int                      VGSvcGstCtrlProcessHandleOutput(PVBOXSERVICECTRLPROCESS pProcess, PVBGLR3GUESTCTRLCMDCTX pHostCtx, uint32_t uHandle, uint32_t cbToRead, uint32_t uFlags);
+extern int                      VGSvcGstCtrlProcessHandleTerm(PVBOXSERVICECTRLPROCESS pProcess);
+extern void                     VGSvcGstCtrlProcessRelease(PVBOXSERVICECTRLPROCESS pProcess);
+extern int                      VGSvcGstCtrlProcessStart(const PVBOXSERVICECTRLSESSION pSession, const PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo, uint32_t uContext);
+extern int                      VGSvcGstCtrlProcessStop(PVBOXSERVICECTRLPROCESS pProcess);
+extern int                      VGSvcGstCtrlProcessWait(const PVBOXSERVICECTRLPROCESS pProcess, RTMSINTERVAL msTimeout, int *pRc);
+/** @} */
 
 RT_C_DECLS_END
 
-#endif /* ___VBoxServiceControl_h */
+#endif
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp
index 564bccf..6b861f7 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp
@@ -46,15 +46,20 @@ using namespace guestControl;
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static int                  gstcntlProcessAssignPID(PVBOXSERVICECTRLPROCESS pThread, uint32_t uPID);
-static int                  gstcntlProcessLock(PVBOXSERVICECTRLPROCESS pProcess);
-static int                  gstcntlProcessRequest(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUESTCTRLCMDCTX pHostCtx, PFNRT pfnFunction, unsigned cArgs, ...);
-static int                  gstcntlProcessSetupPipe(const char *pszHowTo, int fd, PRTHANDLE ph, PRTHANDLE *pph, PRTPIPE phPipe);
-static int                  gstcntlProcessUnlock(PVBOXSERVICECTRLPROCESS pProcess);
+static int                  vgsvcGstCtrlProcessAssignPID(PVBOXSERVICECTRLPROCESS pThread, uint32_t uPID);
+static int                  vgsvcGstCtrlProcessLock(PVBOXSERVICECTRLPROCESS pProcess);
+static int                  vgsvcGstCtrlProcessRequest(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                                       PFNRT pfnFunction, unsigned cArgs, ...);
+static int                  vgsvcGstCtrlProcessSetupPipe(const char *pszHowTo, int fd, PRTHANDLE ph, PRTHANDLE *pph,
+                                                         PRTPIPE phPipe);
+static int                  vgsvcGstCtrlProcessUnlock(PVBOXSERVICECTRLPROCESS pProcess);
 /* Request handlers. */
-static DECLCALLBACK(int)    gstcntlProcessOnInput(PVBOXSERVICECTRLPROCESS pThis, const PVBGLR3GUESTCTRLCMDCTX pHostCtx, bool fPendingClose, void *pvBuf, uint32_t cbBuf);
-static DECLCALLBACK(int)    gstcntlProcessOnOutput(PVBOXSERVICECTRLPROCESS pThis, const PVBGLR3GUESTCTRLCMDCTX pHostCtx, uint32_t uHandle, uint32_t cbToRead, uint32_t uFlags);
-static DECLCALLBACK(int)    gstcntlProcessOnTerm(PVBOXSERVICECTRLPROCESS pThis);
+static DECLCALLBACK(int)    vgsvcGstCtrlProcessOnInput(PVBOXSERVICECTRLPROCESS pThis, const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                                       bool fPendingClose, void *pvBuf, uint32_t cbBuf);
+static DECLCALLBACK(int)    vgsvcGstCtrlProcessOnOutput(PVBOXSERVICECTRLPROCESS pThis, const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                                        uint32_t uHandle, uint32_t cbToRead, uint32_t uFlags);
+static DECLCALLBACK(int)    vgsvcGstCtrlProcessOnTerm(PVBOXSERVICECTRLPROCESS pThis);
+
 
 /**
  * Initialies the passed in thread data structure with the parameters given.
@@ -65,10 +70,10 @@ static DECLCALLBACK(int)    gstcntlProcessOnTerm(PVBOXSERVICECTRLPROCESS pThis);
  * @param   pStartupInfo                Startup information.
  * @param   u32ContextID                The context ID bound to this request / command.
  */
-static int gstcntlProcessInit(PVBOXSERVICECTRLPROCESS pProcess,
-                              const PVBOXSERVICECTRLSESSION pSession,
-                              const PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo,
-                              uint32_t u32ContextID)
+static int vgsvcGstCtrlProcessInit(PVBOXSERVICECTRLPROCESS pProcess,
+                                   const PVBOXSERVICECTRLSESSION pSession,
+                                   const PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo,
+                                   uint32_t u32ContextID)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
@@ -121,7 +126,7 @@ static int gstcntlProcessInit(PVBOXSERVICECTRLPROCESS pProcess,
         pProcess->StartupInfo.uTimeLimitMS = RT_INDEFINITE_WAIT;
 
     if (RT_FAILURE(rc)) /* Clean up on failure. */
-        GstCntlProcessFree(pProcess);
+        VGSvcGstCtrlProcessFree(pProcess);
     return rc;
 }
 
@@ -133,12 +138,11 @@ static int gstcntlProcessInit(PVBOXSERVICECTRLPROCESS pProcess,
  * @return  IPRT status code.
  * @param   pProcess                Guest process to free.
  */
-int GstCntlProcessFree(PVBOXSERVICECTRLPROCESS pProcess)
+int VGSvcGstCtrlProcessFree(PVBOXSERVICECTRLPROCESS pProcess)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
 
-    VBoxServiceVerbose(3, "[PID %RU32]: Freeing (cRefs=%RU32)...\n",
-                       pProcess->uPID, pProcess->cRefs);
+    VGSvcVerbose(3, "[PID %RU32]: Freeing (cRefs=%RU32)...\n", pProcess->uPID, pProcess->cRefs);
     Assert(pProcess->cRefs == 0);
 
     /*
@@ -154,7 +158,7 @@ int GstCntlProcessFree(PVBOXSERVICECTRLPROCESS pProcess)
      * Remove from list.
      */
     AssertPtr(pProcess->pSession);
-    rc = GstCntlSessionProcessRemove(pProcess->pSession, pProcess);
+    rc = VGSvcGstCtrlSessionProcessRemove(pProcess->pSession, pProcess);
     AssertRC(rc);
 
     /*
@@ -174,17 +178,16 @@ int GstCntlProcessFree(PVBOXSERVICECTRLPROCESS pProcess)
  * @return  IPRT status code.
  * @param   pProcess            Process to stop.
  */
-int GstCntlProcessStop(PVBOXSERVICECTRLPROCESS pProcess)
+int VGSvcGstCtrlProcessStop(PVBOXSERVICECTRLPROCESS pProcess)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
 
-    VBoxServiceVerbose(3, "[PID %RU32]: Stopping ...\n",
-                       pProcess->uPID);
+    VGSvcVerbose(3, "[PID %RU32]: Stopping ...\n", pProcess->uPID);
 
     /* Do *not* set pThread->fShutdown or other stuff here!
      * The guest thread loop will clean up itself. */
 
-    return GstCntlProcessHandleTerm(pProcess);
+    return VGSvcGstCtrlProcessHandleTerm(pProcess);
 }
 
 
@@ -193,7 +196,7 @@ int GstCntlProcessStop(PVBOXSERVICECTRLPROCESS pProcess)
  *
  * @param   pProcess            Process to unlock.
  */
-void GstCntlProcessRelease(PVBOXSERVICECTRLPROCESS pProcess)
+void VGSvcGstCtrlProcessRelease(PVBOXSERVICECTRLPROCESS pProcess)
 {
     AssertPtrReturnVoid(pProcess);
 
@@ -211,7 +214,7 @@ void GstCntlProcessRelease(PVBOXSERVICECTRLPROCESS pProcess)
     }
 
     if (fShutdown)
-        GstCntlProcessFree(pProcess);
+        VGSvcGstCtrlProcessFree(pProcess);
 }
 
 
@@ -220,20 +223,19 @@ void GstCntlProcessRelease(PVBOXSERVICECTRLPROCESS pProcess)
  *
  * @return  IPRT status code.
  * @param   pProcess            Process to wait shutting down for.
- * @param   RTMSINTERVAL        Timeout in ms to wait for shutdown.
- * @param   pRc                 Where to store the thread's return code. Optional.
+ * @param   msTimeout           Timeout in ms to wait for shutdown.
+ * @param   prc                 Where to store the thread's return code.
+ *                              Optional.
  */
-int GstCntlProcessWait(const PVBOXSERVICECTRLPROCESS pProcess,
-                       RTMSINTERVAL msTimeout, int *pRc)
+int VGSvcGstCtrlProcessWait(const PVBOXSERVICECTRLPROCESS pProcess, RTMSINTERVAL msTimeout, int *prc)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
-    /* pRc is optional. */
+    AssertPtrNullReturn(prc, VERR_INVALID_POINTER);
 
-    int rc = gstcntlProcessLock(pProcess);
+    int rc = vgsvcGstCtrlProcessLock(pProcess);
     if (RT_SUCCESS(rc))
     {
-        VBoxServiceVerbose(2, "[PID %RU32]: Waiting for shutdown (%RU32ms) ...\n",
-                           pProcess->uPID, msTimeout);
+        VGSvcVerbose(2, "[PID %RU32]: Waiting for shutdown (%RU32ms) ...\n", pProcess->uPID, msTimeout);
 
         AssertMsgReturn(pProcess->fStarted,
                         ("Tried to wait on guest process=%p (PID %RU32) which has not been started yet\n",
@@ -243,38 +245,32 @@ int GstCntlProcessWait(const PVBOXSERVICECTRLPROCESS pProcess,
         if (!pProcess->fStopped)
         {
             /* Unlock process before waiting. */
-            rc = gstcntlProcessUnlock(pProcess);
+            rc = vgsvcGstCtrlProcessUnlock(pProcess);
             AssertRC(rc);
 
             /* Do the actual waiting. */
             int rcThread;
             Assert(pProcess->Thread != NIL_RTTHREAD);
             rc = RTThreadWait(pProcess->Thread, msTimeout, &rcThread);
-            if (RT_FAILURE(rc))
+            if (RT_SUCCESS(rc))
             {
-                VBoxServiceError("[PID %RU32]: Waiting for shutting down thread returned error rc=%Rrc\n",
-                                 pProcess->uPID, rc);
+                VGSvcVerbose(3, "[PID %RU32]: Thread shutdown complete, thread rc=%Rrc\n", pProcess->uPID, rcThread);
+                if (prc)
+                    *prc = rcThread;
             }
             else
-            {
-                VBoxServiceVerbose(3, "[PID %RU32]: Thread shutdown complete, thread rc=%Rrc\n",
-                                   pProcess->uPID, rcThread);
-                if (pRc)
-                    *pRc = rcThread;
-            }
+                VGSvcError("[PID %RU32]: Waiting for shutting down thread returned error rc=%Rrc\n", pProcess->uPID, rc);
         }
         else
         {
-            VBoxServiceVerbose(3, "[PID %RU32]: Thread already shut down, no waiting needed\n",
-                               pProcess->uPID);
+            VGSvcVerbose(3, "[PID %RU32]: Thread already shut down, no waiting needed\n", pProcess->uPID);
 
-            int rc2 = gstcntlProcessUnlock(pProcess);
+            int rc2 = vgsvcGstCtrlProcessUnlock(pProcess);
             AssertRC(rc2);
         }
     }
 
-    VBoxServiceVerbose(3, "[PID %RU32]: Waiting resulted in rc=%Rrc\n",
-                       pProcess->uPID, rc);
+    VGSvcVerbose(3, "[PID %RU32]: Waiting resulted in rc=%Rrc\n", pProcess->uPID, rc);
     return rc;
 }
 
@@ -283,11 +279,10 @@ int GstCntlProcessWait(const PVBOXSERVICECTRLPROCESS pProcess,
  * Closes the stdin pipe of a guest process.
  *
  * @return  IPRT status code.
- * @param   hPollSet            The polling set.
+ * @param   pProcess            The process which input pipe we close.
  * @param   phStdInW            The standard input pipe handle.
  */
-static int gstcntlProcessPollsetCloseInput(PVBOXSERVICECTRLPROCESS pProcess,
-                                           PRTPIPE phStdInW)
+static int vgsvcGstCtrlProcessPollsetCloseInput(PVBOXSERVICECTRLPROCESS pProcess, PRTPIPE phStdInW)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
     AssertPtrReturn(phStdInW, VERR_INVALID_POINTER);
@@ -307,7 +302,13 @@ static int gstcntlProcessPollsetCloseInput(PVBOXSERVICECTRLPROCESS pProcess,
 }
 
 
-static const char* gstcntlProcessPollHandleToString(uint32_t idPollHnd)
+/**
+ * Names a poll handle ID.
+ *
+ * @returns Pointer to read-only string.
+ * @param   idPollHnd           What to name.
+ */
+static const char *vgsvcGstCtrlProcessPollHandleToString(uint32_t idPollHnd)
 {
     switch (idPollHnd)
     {
@@ -324,10 +325,8 @@ static const char* gstcntlProcessPollHandleToString(uint32_t idPollHnd)
         case VBOXSERVICECTRLPIPEID_IPC_NOTIFY:
             return "ipc_notify";
         default:
-            break;
+            return "unknown";
     }
-
-    return "unknown";
 }
 
 
@@ -339,14 +338,13 @@ static const char* gstcntlProcessPollHandleToString(uint32_t idPollHnd)
  * @param   fPollEvt            The event mask returned by RTPollNoResume.
  * @param   phStdInW            The standard input pipe handle.
  */
-static int gstcntlProcessPollsetOnInput(PVBOXSERVICECTRLPROCESS pProcess,
-                                        uint32_t fPollEvt, PRTPIPE phStdInW)
+static int vgsvcGstCtrlProcessPollsetOnInput(PVBOXSERVICECTRLPROCESS pProcess, uint32_t fPollEvt, PRTPIPE phStdInW)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
 
     NOREF(fPollEvt);
 
-    return gstcntlProcessPollsetCloseInput(pProcess, phStdInW);
+    return vgsvcGstCtrlProcessPollsetCloseInput(pProcess, phStdInW);
 }
 
 
@@ -358,10 +356,9 @@ static int gstcntlProcessPollsetOnInput(PVBOXSERVICECTRLPROCESS pProcess,
  * @param   fPollEvt            The event mask returned by RTPollNoResume.
  * @param   phPipeR             The pipe handle.
  * @param   idPollHnd           The pipe ID to handle.
- *
  */
-static int gstcntlProcessHandleOutputError(PVBOXSERVICECTRLPROCESS pProcess,
-                                           uint32_t fPollEvt, PRTPIPE phPipeR, uint32_t idPollHnd)
+static int vgsvcGstCtrlProcessHandleOutputError(PVBOXSERVICECTRLPROCESS pProcess,
+                                                uint32_t fPollEvt, PRTPIPE phPipeR, uint32_t idPollHnd)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
 
@@ -369,8 +366,8 @@ static int gstcntlProcessHandleOutputError(PVBOXSERVICECTRLPROCESS pProcess,
         return VINF_SUCCESS;
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "[PID %RU32]: Output error: idPollHnd=%s, fPollEvt=0x%x\n",
-                       pProcess->uPID, gstcntlProcessPollHandleToString(idPollHnd), fPollEvt);
+    VGSvcVerbose(4, "[PID %RU32]: Output error: idPollHnd=%s, fPollEvt=0x%x\n",
+                 pProcess->uPID, vgsvcGstCtrlProcessPollHandleToString(idPollHnd), fPollEvt);
 #endif
 
     /* Remove pipe from poll set. */
@@ -388,8 +385,8 @@ static int gstcntlProcessHandleOutputError(PVBOXSERVICECTRLPROCESS pProcess,
             && cbReadable)
         {
 #ifdef DEBUG
-            VBoxServiceVerbose(3, "[PID %RU32]: idPollHnd=%s has %zu bytes left, vetoing close\n",
-                               pProcess->uPID, gstcntlProcessPollHandleToString(idPollHnd), cbReadable);
+            VGSvcVerbose(3, "[PID %RU32]: idPollHnd=%s has %zu bytes left, vetoing close\n",
+                         pProcess->uPID, vgsvcGstCtrlProcessPollHandleToString(idPollHnd), cbReadable);
 #endif
             /* Veto closing the pipe yet because there's still stuff to read
              * from the pipe. This can happen on UNIX-y systems where on
@@ -399,8 +396,8 @@ static int gstcntlProcessHandleOutputError(PVBOXSERVICECTRLPROCESS pProcess,
     }
 #ifdef DEBUG
     else
-        VBoxServiceVerbose(3, "[PID %RU32]: idPollHnd=%s will be closed\n",
-                           pProcess->uPID, gstcntlProcessPollHandleToString(idPollHnd));
+        VGSvcVerbose(3, "[PID %RU32]: idPollHnd=%s will be closed\n",
+                     pProcess->uPID, vgsvcGstCtrlProcessPollHandleToString(idPollHnd));
 #endif
 
     if (   *phPipeR != NIL_RTPIPE
@@ -425,14 +422,14 @@ static int gstcntlProcessHandleOutputError(PVBOXSERVICECTRLPROCESS pProcess,
  * @param   idPollHnd           The pipe ID to handle.
  *
  */
-static int gstcntlProcessPollsetOnOutput(PVBOXSERVICECTRLPROCESS pProcess,
-                                         uint32_t fPollEvt, PRTPIPE phPipeR, uint32_t idPollHnd)
+static int vgsvcGstCtrlProcessPollsetOnOutput(PVBOXSERVICECTRLPROCESS pProcess,
+                                              uint32_t fPollEvt, PRTPIPE phPipeR, uint32_t idPollHnd)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "[PID %RU32]: Output event phPipeR=%p, idPollHnd=%s, fPollEvt=0x%x\n",
-                       pProcess->uPID, phPipeR, gstcntlProcessPollHandleToString(idPollHnd), fPollEvt);
+    VGSvcVerbose(4, "[PID %RU32]: Output event phPipeR=%p, idPollHnd=%s, fPollEvt=0x%x\n",
+                 pProcess->uPID, phPipeR, vgsvcGstCtrlProcessPollHandleToString(idPollHnd), fPollEvt);
 #endif
 
     if (!phPipeR)
@@ -448,8 +445,7 @@ static int gstcntlProcessPollsetOnOutput(PVBOXSERVICECTRLPROCESS pProcess,
         if (   RT_SUCCESS(rc)
             && cbReadable)
         {
-            VBoxServiceVerbose(4, "[PID %RU32]: Output event cbReadable=%zu\n",
-                               pProcess->uPID, cbReadable);
+            VGSvcVerbose(4, "[PID %RU32]: Output event cbReadable=%zu\n", pProcess->uPID, cbReadable);
         }
     }
 #endif
@@ -460,10 +456,8 @@ static int gstcntlProcessPollsetOnOutput(PVBOXSERVICECTRLPROCESS pProcess,
     {
         size_t cbRead = 0;
         uint8_t byData[_64K];
-        rc = RTPipeRead(*phPipeR,
-                        byData, sizeof(byData), &cbRead);
-        VBoxServiceVerbose(4, "GstCntlProcessHandleOutputEvent cbRead=%u, rc=%Rrc\n",
-                           cbRead, rc);
+        rc = RTPipeRead(*phPipeR, byData, sizeof(byData), &cbRead);
+        VGSvcVerbose(4, "VGSvcGstCtrlProcessHandleOutputEvent cbRead=%u, rc=%Rrc\n", cbRead, rc);
 
         /* Make sure we go another poll round in case there was too much data
            for the buffer to hold. */
@@ -472,8 +466,7 @@ static int gstcntlProcessPollsetOnOutput(PVBOXSERVICECTRLPROCESS pProcess,
 #endif
 
     if (fPollEvt & RTPOLL_EVT_ERROR)
-        rc = gstcntlProcessHandleOutputError(pProcess,
-                                             fPollEvt, phPipeR, idPollHnd);
+        rc = vgsvcGstCtrlProcessHandleOutputError(pProcess, fPollEvt, phPipeR, idPollHnd);
     return rc;
 }
 
@@ -485,7 +478,7 @@ static int gstcntlProcessPollsetOnOutput(PVBOXSERVICECTRLPROCESS pProcess,
  * @return  IPRT status code.
  * @param   pProcess                    The guest process to handle.
  */
-static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
+static int vgsvcGstCtrlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
 
@@ -506,11 +499,10 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
      * Also check if there already was a thread with the same PID and shut it down -- otherwise
      * the first (stale) entry will be found and we get really weird results!
      */
-    rc = gstcntlProcessAssignPID(pProcess, pProcess->hProcess /* Opaque PID handle */);
+    rc = vgsvcGstCtrlProcessAssignPID(pProcess, pProcess->hProcess /* Opaque PID handle */);
     if (RT_FAILURE(rc))
     {
-        VBoxServiceError("Unable to assign PID=%u, to new thread, rc=%Rrc\n",
-                         pProcess->hProcess, rc);
+        VGSvcError("Unable to assign PID=%u, to new thread, rc=%Rrc\n", pProcess->hProcess, rc);
         return rc;
     }
 
@@ -518,7 +510,7 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
      * Before entering the loop, tell the host that we've started the guest
      * and that it's now OK to send input to the process.
      */
-    VBoxServiceVerbose(2, "[PID %RU32]: Process \"%s\" started, CID=%u, User=%s, cMsTimeout=%RU32\n",
+    VGSvcVerbose(2, "[PID %RU32]: Process '%s' started, CID=%u, User=%s, cMsTimeout=%RU32\n",
                        pProcess->uPID, pProcess->StartupInfo.szCmd, pProcess->uContextID,
                        pProcess->StartupInfo.szUser, pProcess->StartupInfo.uTimeLimitMS);
     VBGLR3GUESTCTRLCMDCTX ctxStart = { pProcess->uClientID, pProcess->uContextID };
@@ -528,8 +520,7 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
     if (rc == VERR_INTERRUPTED)
         rc = VINF_SUCCESS; /* SIGCHLD send by quick childs! */
     if (RT_FAILURE(rc))
-        VBoxServiceError("[PID %RU32]: Error reporting starting status to host, rc=%Rrc\n",
-                         pProcess->uPID, rc);
+        VGSvcError("[PID %RU32]: Error reporting starting status to host, rc=%Rrc\n", pProcess->uPID, rc);
 
     /*
      * Process input, output, the test pipe and client requests.
@@ -553,50 +544,44 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
             switch (idPollHnd)
             {
                 case VBOXSERVICECTRLPIPEID_STDIN:
-                    rc = gstcntlProcessPollsetOnInput(pProcess, fPollEvt,
-                                                      &pProcess->hPipeStdInW);
+                    rc = vgsvcGstCtrlProcessPollsetOnInput(pProcess, fPollEvt, &pProcess->hPipeStdInW);
                     break;
 
                 case VBOXSERVICECTRLPIPEID_STDOUT:
-                    rc = gstcntlProcessPollsetOnOutput(pProcess, fPollEvt,
-                                                       &pProcess->hPipeStdOutR, idPollHnd);
+                    rc = vgsvcGstCtrlProcessPollsetOnOutput(pProcess, fPollEvt, &pProcess->hPipeStdOutR, idPollHnd);
                     break;
 
                 case VBOXSERVICECTRLPIPEID_STDERR:
-                    rc = gstcntlProcessPollsetOnOutput(pProcess, fPollEvt,
-                                                       &pProcess->hPipeStdOutR, idPollHnd);
+                    rc = vgsvcGstCtrlProcessPollsetOnOutput(pProcess, fPollEvt, &pProcess->hPipeStdOutR, idPollHnd);
                     break;
 
                 case VBOXSERVICECTRLPIPEID_IPC_NOTIFY:
 #ifdef DEBUG_andy
-                    VBoxServiceVerbose(4, "[PID %RU32]: IPC notify\n", pProcess->uPID);
+                    VGSvcVerbose(4, "[PID %RU32]: IPC notify\n", pProcess->uPID);
 #endif
-                    rc2 = gstcntlProcessLock(pProcess);
+                    rc2 = vgsvcGstCtrlProcessLock(pProcess);
                     if (RT_SUCCESS(rc2))
                     {
                         /* Drain the notification pipe. */
                         uint8_t abBuf[8];
                         size_t cbIgnore;
-                        rc2 = RTPipeRead(pProcess->hNotificationPipeR,
-                                         abBuf, sizeof(abBuf), &cbIgnore);
+                        rc2 = RTPipeRead(pProcess->hNotificationPipeR, abBuf, sizeof(abBuf), &cbIgnore);
                         if (RT_FAILURE(rc2))
-                            VBoxServiceError("Draining IPC notification pipe failed with rc=%Rrc\n", rc2);
+                            VGSvcError("Draining IPC notification pipe failed with rc=%Rrc\n", rc2);
 
                         /* Process all pending requests. */
-                        VBoxServiceVerbose(4, "[PID %RU32]: Processing pending requests ...\n",
-                                           pProcess->uPID);
+                        VGSvcVerbose(4, "[PID %RU32]: Processing pending requests ...\n", pProcess->uPID);
                         Assert(pProcess->hReqQueue != NIL_RTREQQUEUE);
                         rc2 = RTReqQueueProcess(pProcess->hReqQueue,
                                                 0 /* Only process all pending requests, don't wait for new ones */);
                         if (   RT_FAILURE(rc2)
                             && rc2 != VERR_TIMEOUT)
-                            VBoxServiceError("Processing requests failed with with rc=%Rrc\n", rc2);
+                            VGSvcError("Processing requests failed with with rc=%Rrc\n", rc2);
 
-                        int rc3 = gstcntlProcessUnlock(pProcess);
+                        int rc3 = vgsvcGstCtrlProcessUnlock(pProcess);
                         AssertRC(rc3);
 #ifdef DEBUG
-                        VBoxServiceVerbose(4, "[PID %RU32]: Processing pending requests done, rc=%Rrc\n",
-                                           pProcess->uPID, rc2);
+                        VGSvcVerbose(4, "[PID %RU32]: Processing pending requests done, rc=%Rrc\n", pProcess->uPID, rc2);
 #endif
                     }
 
@@ -611,12 +596,12 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
                 break; /* Abort command, or client dead or something. */
         }
 #if 0
-        VBoxServiceVerbose(4, "[PID %RU32]: Polling done, pollRc=%Rrc, pollCnt=%RU32, idPollHnd=%s, rc=%Rrc, fProcessAlive=%RTbool, fShutdown=%RTbool\n",
-                           pProcess->uPID, rc2, RTPollSetGetCount(hPollSet), gstcntlProcessPollHandleToString(idPollHnd), rc, fProcessAlive, pProcess->fShutdown);
-        VBoxServiceVerbose(4, "[PID %RU32]: stdOut=%s, stdErrR=%s\n",
-                           pProcess->uPID,
-                           *phStdOutR == NIL_RTPIPE ? "closed" : "open",
-                           *phStdErrR == NIL_RTPIPE ? "closed" : "open");
+        VGSvcVerbose(4, "[PID %RU32]: Polling done, pollRc=%Rrc, pollCnt=%RU32, idPollHnd=%s, rc=%Rrc, fProcessAlive=%RTbool, fShutdown=%RTbool\n",
+                     pProcess->uPID, rc2, RTPollSetGetCount(hPollSet), vgsvcGstCtrlProcessPollHandleToString(idPollHnd), rc, fProcessAlive, pProcess->fShutdown);
+        VGSvcVerbose(4, "[PID %RU32]: stdOut=%s, stdErrR=%s\n",
+                     pProcess->uPID,
+                     *phStdOutR == NIL_RTPIPE ? "closed" : "open",
+                     *phStdErrR == NIL_RTPIPE ? "closed" : "open");
 #endif
         if (RT_UNLIKELY(pProcess->fShutdown))
             break; /* We were asked to shutdown. */
@@ -628,8 +613,7 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
         {
             rc2 = RTProcWaitNoResume(pProcess->hProcess, RTPROCWAIT_FLAGS_NOBLOCK, &ProcessStatus);
 #if 0
-            VBoxServiceVerbose(4, "[PID %RU32]: RTProcWaitNoResume=%Rrc\n",
-                               pProcess->uPID, rc2);
+            VGSvcVerbose(4, "[PID %RU32]: RTProcWaitNoResume=%Rrc\n", pProcess->uPID, rc2);
 #endif
             if (RT_SUCCESS_NP(rc2))
             {
@@ -686,12 +670,12 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
                     if (u64Now - MsProcessKilled > 20*60*1000)
                         break; /* Give up after 20 mins. */
 
-                    VBoxServiceVerbose(3, "[PID %RU32]: Timed out (%RU64ms elapsed > %RU32ms timeout), killing ...\n",
-                                       pProcess->uPID, cMsElapsed, pProcess->StartupInfo.uTimeLimitMS);
+                    VGSvcVerbose(3, "[PID %RU32]: Timed out (%RU64ms elapsed > %RU32ms timeout), killing ...\n",
+                                 pProcess->uPID, cMsElapsed, pProcess->StartupInfo.uTimeLimitMS);
 
                     rc2 = RTProcTerminate(pProcess->hProcess);
-                    VBoxServiceVerbose(3, "[PID %RU32]: Killing process resulted in rc=%Rrc\n",
-                                       pProcess->uPID, rc2);
+                    VGSvcVerbose(3, "[PID %RU32]: Killing process resulted in rc=%Rrc\n",
+                                 pProcess->uPID, rc2);
                     MsProcessKilled = u64Now;
                     continue;
                 }
@@ -709,15 +693,15 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
             cMsPollCur = cMilliesLeft;
     }
 
-    VBoxServiceVerbose(3, "[PID %RU32]: Loop ended: rc=%Rrc, fShutdown=%RTbool, fProcessAlive=%RTbool, fProcessTimedOut=%RTbool, MsProcessKilled=%RU64\n",
-                       pProcess->uPID, rc, pProcess->fShutdown, fProcessAlive, fProcessTimedOut, MsProcessKilled, MsProcessKilled);
-    VBoxServiceVerbose(3, "[PID %RU32]: *phStdOutR=%s, *phStdErrR=%s\n",
-                       pProcess->uPID,
-                       pProcess->hPipeStdOutR == NIL_RTPIPE ? "closed" : "open",
-                       pProcess->hPipeStdErrR == NIL_RTPIPE ? "closed" : "open");
+    VGSvcVerbose(3, "[PID %RU32]: Loop ended: rc=%Rrc, fShutdown=%RTbool, fProcessAlive=%RTbool, fProcessTimedOut=%RTbool, MsProcessKilled=%RU64\n",
+                 pProcess->uPID, rc, pProcess->fShutdown, fProcessAlive, fProcessTimedOut, MsProcessKilled, MsProcessKilled);
+    VGSvcVerbose(3, "[PID %RU32]: *phStdOutR=%s, *phStdErrR=%s\n",
+                 pProcess->uPID,
+                 pProcess->hPipeStdOutR == NIL_RTPIPE ? "closed" : "open",
+                 pProcess->hPipeStdErrR == NIL_RTPIPE ? "closed" : "open");
 
     /* Signal that this thread is in progress of shutting down. */
-    ASMAtomicXchgBool(&pProcess->fShutdown, true);
+    ASMAtomicWriteBool(&pProcess->fShutdown, true);
 
     /*
      * Try killing the process if it's still alive at this point.
@@ -726,8 +710,7 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
     {
         if (MsProcessKilled == UINT64_MAX)
         {
-            VBoxServiceVerbose(2, "[PID %RU32]: Is still alive and not killed yet\n",
-                               pProcess->uPID);
+            VGSvcVerbose(2, "[PID %RU32]: Is still alive and not killed yet\n", pProcess->uPID);
 
             MsProcessKilled = RTTimeMilliTS();
             rc2 = RTProcTerminate(pProcess->hProcess);
@@ -736,38 +719,34 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
                 fProcessAlive = false;
             }
             else if (RT_FAILURE(rc2))
-                VBoxServiceError("PID %RU32]: Killing process failed with rc=%Rrc\n",
-                                 pProcess->uPID, rc2);
+                VGSvcError("PID %RU32]: Killing process failed with rc=%Rrc\n", pProcess->uPID, rc2);
             RTThreadSleep(500);
         }
 
         for (int i = 0; i < 10 && fProcessAlive; i++)
         {
-            VBoxServiceVerbose(4, "[PID %RU32]: Kill attempt %d/10: Waiting to exit ...\n",
-                               pProcess->uPID, i + 1);
+            VGSvcVerbose(4, "[PID %RU32]: Kill attempt %d/10: Waiting to exit ...\n", pProcess->uPID, i + 1);
             rc2 = RTProcWait(pProcess->hProcess, RTPROCWAIT_FLAGS_NOBLOCK, &ProcessStatus);
             if (RT_SUCCESS(rc2))
             {
-                VBoxServiceVerbose(4, "[PID %RU32]: Kill attempt %d/10: Exited\n",
-                                   pProcess->uPID, i + 1);
+                VGSvcVerbose(4, "[PID %RU32]: Kill attempt %d/10: Exited\n", pProcess->uPID, i + 1);
                 fProcessAlive = false;
                 break;
             }
             if (i >= 5)
             {
-                VBoxServiceVerbose(4, "[PID %RU32]: Kill attempt %d/10: Trying to terminate ...\n",
-                                   pProcess->uPID, i + 1);
+                VGSvcVerbose(4, "[PID %RU32]: Kill attempt %d/10: Trying to terminate ...\n", pProcess->uPID, i + 1);
                 rc2 = RTProcTerminate(pProcess->hProcess);
                 if (   RT_FAILURE(rc)
                     && rc2 != VERR_NOT_FOUND)
-                    VBoxServiceError("PID %RU32]: Killing process failed with rc=%Rrc\n",
+                    VGSvcError("PID %RU32]: Killing process failed with rc=%Rrc\n",
                                      pProcess->uPID, rc2);
             }
             RTThreadSleep(i >= 5 ? 2000 : 500);
         }
 
         if (fProcessAlive)
-            VBoxServiceError("[PID %RU32]: Could not be killed\n", pProcess->uPID);
+            VGSvcError("[PID %RU32]: Could not be killed\n", pProcess->uPID);
     }
 
     /*
@@ -782,24 +761,21 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
      *       happening to this thread, so be careful and don't mess it up.
      */
 
-    rc2 = gstcntlProcessLock(pProcess);
+    rc2 = vgsvcGstCtrlProcessLock(pProcess);
     if (RT_SUCCESS(rc2))
     {
-        VBoxServiceVerbose(3, "[PID %RU32]: Processing outstanding requests ...\n",
-                           pProcess->uPID);
+        VGSvcVerbose(3, "[PID %RU32]: Processing outstanding requests ...\n", pProcess->uPID);
 
         /* Process all pending requests (but don't wait for new ones). */
         Assert(pProcess->hReqQueue != NIL_RTREQQUEUE);
         rc2 = RTReqQueueProcess(pProcess->hReqQueue, 0 /* No timeout */);
         if (   RT_FAILURE(rc2)
             && rc2 != VERR_TIMEOUT)
-            VBoxServiceError("[PID %RU32]: Processing outstanding requests failed with with rc=%Rrc\n",
-                             pProcess->uPID, rc2);
+            VGSvcError("[PID %RU32]: Processing outstanding requests failed with with rc=%Rrc\n", pProcess->uPID, rc2);
 
-        VBoxServiceVerbose(3, "[PID %RU32]: Processing outstanding requests done, rc=%Rrc\n",
-                           pProcess->uPID, rc2);
+        VGSvcVerbose(3, "[PID %RU32]: Processing outstanding requests done, rc=%Rrc\n", pProcess->uPID, rc2);
 
-        rc2 = gstcntlProcessUnlock(pProcess);
+        rc2 = vgsvcGstCtrlProcessUnlock(pProcess);
         AssertRC(rc2);
     }
 
@@ -810,81 +786,62 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
     if (RT_SUCCESS(rc))
     {
         uint32_t uStatus = PROC_STS_UNDEFINED;
-        uint32_t uFlags = 0;
+        uint32_t fFlags = 0;
 
         if (     fProcessTimedOut  && !fProcessAlive && MsProcessKilled != UINT64_MAX)
         {
-            VBoxServiceVerbose(3, "[PID %RU32]: Timed out and got killed\n",
-                               pProcess->uPID);
+            VGSvcVerbose(3, "[PID %RU32]: Timed out and got killed\n", pProcess->uPID);
             uStatus = PROC_STS_TOK;
         }
         else if (fProcessTimedOut  &&  fProcessAlive && MsProcessKilled != UINT64_MAX)
         {
-            VBoxServiceVerbose(3, "[PID %RU32]: Timed out and did *not* get killed\n",
-                               pProcess->uPID);
+            VGSvcVerbose(3, "[PID %RU32]: Timed out and did *not* get killed\n", pProcess->uPID);
             uStatus = PROC_STS_TOA;
         }
         else if (pProcess->fShutdown && (fProcessAlive || MsProcessKilled != UINT64_MAX))
         {
-            VBoxServiceVerbose(3, "[PID %RU32]: Got terminated because system/service is about to shutdown\n",
-                               pProcess->uPID);
+            VGSvcVerbose(3, "[PID %RU32]: Got terminated because system/service is about to shutdown\n", pProcess->uPID);
             uStatus = PROC_STS_DWN; /* Service is stopping, process was killed. */
-            uFlags = pProcess->StartupInfo.uFlags; /* Return handed-in execution flags back to the host. */
+            fFlags  = pProcess->StartupInfo.uFlags; /* Return handed-in execution flags back to the host. */
         }
         else if (fProcessAlive)
-        {
-            VBoxServiceError("[PID %RU32]: Is alive when it should not!\n",
-                             pProcess->uPID);
-        }
+            VGSvcError("[PID %RU32]: Is alive when it should not!\n", pProcess->uPID);
         else if (MsProcessKilled != UINT64_MAX)
-        {
-            VBoxServiceError("[PID %RU32]: Has been killed when it should not!\n",
-                             pProcess->uPID);
-        }
+            VGSvcError("[PID %RU32]: Has been killed when it should not!\n", pProcess->uPID);
         else if (ProcessStatus.enmReason == RTPROCEXITREASON_NORMAL)
         {
-            VBoxServiceVerbose(3, "[PID %RU32]: Ended with RTPROCEXITREASON_NORMAL (Exit code: %d)\n",
-                               pProcess->uPID, ProcessStatus.iStatus);
-
+            VGSvcVerbose(3, "[PID %RU32]: Ended with RTPROCEXITREASON_NORMAL (Exit code: %d)\n",
+                         pProcess->uPID, ProcessStatus.iStatus);
             uStatus = PROC_STS_TEN;
-            uFlags = ProcessStatus.iStatus;
+            fFlags  = ProcessStatus.iStatus;
         }
         else if (ProcessStatus.enmReason == RTPROCEXITREASON_SIGNAL)
         {
-            VBoxServiceVerbose(3, "[PID %RU32]: Ended with RTPROCEXITREASON_SIGNAL (Signal: %u)\n",
-                               pProcess->uPID, ProcessStatus.iStatus);
-
+            VGSvcVerbose(3, "[PID %RU32]: Ended with RTPROCEXITREASON_SIGNAL (Signal: %u)\n",
+                         pProcess->uPID, ProcessStatus.iStatus);
             uStatus = PROC_STS_TES;
-            uFlags = ProcessStatus.iStatus;
+            fFlags  = ProcessStatus.iStatus;
         }
         else if (ProcessStatus.enmReason == RTPROCEXITREASON_ABEND)
         {
             /* ProcessStatus.iStatus will be undefined. */
-            VBoxServiceVerbose(3, "[PID %RU32]: Ended with RTPROCEXITREASON_ABEND\n",
-                               pProcess->uPID);
-
+            VGSvcVerbose(3, "[PID %RU32]: Ended with RTPROCEXITREASON_ABEND\n", pProcess->uPID);
             uStatus = PROC_STS_TEA;
-            uFlags = ProcessStatus.iStatus;
+            fFlags  = ProcessStatus.iStatus;
         }
         else
-            VBoxServiceVerbose(1, "[PID %RU32]: Handling process status %u not implemented\n",
-                               pProcess->uPID, ProcessStatus.enmReason);
-
-        VBoxServiceVerbose(2, "[PID %RU32]: Ended, ClientID=%u, CID=%u, Status=%u, Flags=0x%x\n",
-                           pProcess->uPID, pProcess->uClientID, pProcess->uContextID, uStatus, uFlags);
+            VGSvcVerbose(1, "[PID %RU32]: Handling process status %u not implemented\n", pProcess->uPID, ProcessStatus.enmReason);
+        VGSvcVerbose(2, "[PID %RU32]: Ended, ClientID=%u, CID=%u, Status=%u, Flags=0x%x\n",
+                     pProcess->uPID, pProcess->uClientID, pProcess->uContextID, uStatus, fFlags);
 
         VBGLR3GUESTCTRLCMDCTX ctxEnd = { pProcess->uClientID, pProcess->uContextID };
-        rc2 = VbglR3GuestCtrlProcCbStatus(&ctxEnd,
-                                          pProcess->uPID, uStatus, uFlags,
-                                          NULL /* pvData */, 0 /* cbData */);
+        rc2 = VbglR3GuestCtrlProcCbStatus(&ctxEnd, pProcess->uPID, uStatus, fFlags, NULL /* pvData */, 0 /* cbData */);
         if (   RT_FAILURE(rc2)
             && rc2 == VERR_NOT_FOUND)
-            VBoxServiceError("[PID %RU32]: Error reporting final status to host; rc=%Rrc\n",
-                             pProcess->uPID, rc2);
+            VGSvcError("[PID %RU32]: Error reporting final status to host; rc=%Rrc\n", pProcess->uPID, rc2);
     }
 
-    VBoxServiceVerbose(3, "[PID %RU32]: Process loop returned with rc=%Rrc\n",
-                       pProcess->uPID, rc);
+    VGSvcVerbose(3, "[PID %RU32]: Process loop returned with rc=%Rrc\n", pProcess->uPID, rc);
     return rc;
 }
 
@@ -896,7 +853,7 @@ static int gstcntlProcessProcLoop(PVBOXSERVICECTRLPROCESS pProcess)
  * @param   ph                      The pipe's handle to initialize.
  * @param   phPipe                  The pipe's object to initialize.
  */
-static int gstcntlProcessInitPipe(PRTHANDLE ph, PRTPIPE phPipe)
+static int vgsvcGstCtrlProcessInitPipe(PRTHANDLE ph, PRTPIPE phPipe)
 {
     AssertPtrReturn(ph, VERR_INVALID_PARAMETER);
     AssertPtrReturn(phPipe, VERR_INVALID_PARAMETER);
@@ -923,8 +880,7 @@ static int gstcntlProcessInitPipe(PRTHANDLE ph, PRTPIPE phPipe)
  * @param   phPipe              Where to return the end of the pipe that we
  *                              should service.
  */
-static int gstcntlProcessSetupPipe(const char *pszHowTo, int fd,
-                                   PRTHANDLE ph, PRTHANDLE *pph, PRTPIPE phPipe)
+static int vgsvcGstCtrlProcessSetupPipe(const char *pszHowTo, int fd, PRTHANDLE ph, PRTHANDLE *pph, PRTPIPE phPipe)
 {
     AssertPtrReturn(ph, VERR_INVALID_POINTER);
     AssertPtrReturn(pph, VERR_INVALID_POINTER);
@@ -949,7 +905,7 @@ static int gstcntlProcessSetupPipe(const char *pszHowTo, int fd,
             /* Connect a wrtie pipe specified by phPipe to stdin. */
             rc = RTPipeCreate(&ph->u.hPipe, phPipe, RTPIPE_C_INHERIT_READ);
         }
-        else /* stdout or stderr? */
+        else /* stdout or stderr. */
         {
             /* Connect a read pipe specified by phPipe to stdout or stderr. */
             rc = RTPipeCreate(phPipe, &ph->u.hPipe, RTPIPE_C_INHERIT_WRITE);
@@ -992,19 +948,26 @@ static int gstcntlProcessSetupPipe(const char *pszHowTo, int fd,
  * @param   pszExpanded                 Pointer to string to store the resolved path in.
  * @param   cbExpanded                  Size (in bytes) of string to store the resolved path.
  */
-static int gstcntlProcessMakeFullPath(const char *pszPath, char *pszExpanded, size_t cbExpanded)
+static int vgsvcGstCtrlProcessMakeFullPath(const char *pszPath, char *pszExpanded, size_t cbExpanded)
 {
     int rc = VINF_SUCCESS;
+/** @todo r=bird: This feature shall be made optional, i.e. require a
+ *        flag to be passed down.  Further, it shall work on the environment
+ *        block of the new process (i.e. include env changes passed down from
+ *        the caller).  I would also suggest using the unix variable expansion
+ *        syntax, not the DOS one.
+ *
+ *        Since this currently not available on non-windows guests, I suggest
+ *        we disable it until such a time as it is implemented correctly. */
 #ifdef RT_OS_WINDOWS
-    if (!ExpandEnvironmentStrings(pszPath, pszExpanded, cbExpanded))
+    if (!ExpandEnvironmentStrings(pszPath, pszExpanded, (DWORD)cbExpanded))
         rc = RTErrConvertFromWin32(GetLastError());
 #else
     /* No expansion for non-Windows yet. */
     rc = RTStrCopy(pszExpanded, cbExpanded, pszPath);
 #endif
 #ifdef DEBUG
-    VBoxServiceVerbose(3, "VBoxServiceControlExecMakeFullPath: %s -> %s\n",
-                       pszPath, pszExpanded);
+    VGSvcVerbose(3, "vgsvcGstCtrlProcessMakeFullPath: %s -> %s\n", pszPath, pszExpanded);
 #endif
     return rc;
 }
@@ -1020,8 +983,7 @@ static int gstcntlProcessMakeFullPath(const char *pszPath, char *pszExpanded, si
  * @param   pszResolved                 Pointer to a string where the resolved file name will be stored.
  * @param   cbResolved                  Size (in bytes) of resolved file name string.
  */
-static int gstcntlProcessResolveExecutable(const char *pszFileName,
-                                           char *pszResolved, size_t cbResolved)
+static int vgsvcGstCtrlProcessResolveExecutable(const char *pszFileName, char *pszResolved, size_t cbResolved)
 {
     AssertPtrReturn(pszFileName, VERR_INVALID_POINTER);
     AssertPtrReturn(pszResolved, VERR_INVALID_POINTER);
@@ -1045,15 +1007,13 @@ static int gstcntlProcessResolveExecutable(const char *pszFileName,
 
     if (RT_SUCCESS(rc))
     {
-        rc = gstcntlProcessMakeFullPath(szPathToResolve, pszResolved, cbResolved);
+        rc = vgsvcGstCtrlProcessMakeFullPath(szPathToResolve, pszResolved, cbResolved);
         if (RT_SUCCESS(rc))
-            VBoxServiceVerbose(3, "Looked up executable: %s -> %s\n",
-                               pszFileName, pszResolved);
+            VGSvcVerbose(3, "Looked up executable: %s -> %s\n", pszFileName, pszResolved);
     }
 
     if (RT_FAILURE(rc))
-        VBoxServiceError("Failed to lookup executable \"%s\" with rc=%Rrc\n",
-                         pszFileName, rc);
+        VGSvcError("Failed to lookup executable '%s' with rc=%Rrc\n", pszFileName, rc);
     return rc;
 }
 
@@ -1069,13 +1029,13 @@ static int gstcntlProcessResolveExecutable(const char *pszFileName,
  * @param  ppapszArgv       Pointer to a pointer with the new argv command line.
  *                          Needs to be freed with RTGetOptArgvFree.
  */
-static int gstcntlProcessAllocateArgv(const char *pszArgv0, const char * const *papszArgs, uint32_t fFlags,
-                                      char ***ppapszArgv)
+static int vgsvcGstCtrlProcessAllocateArgv(const char *pszArgv0, const char * const *papszArgs, uint32_t fFlags,
+                                           char ***ppapszArgv)
 {
     AssertPtrReturn(ppapszArgv, VERR_INVALID_POINTER);
 
-    VBoxServiceVerbose(3, "GstCntlProcessPrepareArgv: pszArgv0=%p, papszArgs=%p, fFlags=%#x, ppapszArgv=%p\n",
-                       pszArgv0, papszArgs, fFlags, ppapszArgv);
+    VGSvcVerbose(3, "VGSvcGstCtrlProcessPrepareArgv: pszArgv0=%p, papszArgs=%p, fFlags=%#x, ppapszArgv=%p\n",
+                 pszArgv0, papszArgs, fFlags, ppapszArgv);
 
     int rc = VINF_SUCCESS;
     uint32_t cArgs;
@@ -1086,17 +1046,15 @@ static int gstcntlProcessAllocateArgv(const char *pszArgv0, const char * const *
     }
 
     /* Allocate new argv vector (adding + 2 for argv0 + termination). */
-    size_t cbSize = (cArgs + 2) * sizeof(char*);
-    char **papszNewArgv = (char**)RTMemAlloc(cbSize);
+    size_t cbSize = (cArgs + 2) * sizeof(char *);
+    char **papszNewArgv = (char **)RTMemAlloc(cbSize);
     if (!papszNewArgv)
         return VERR_NO_MEMORY;
 
 #ifdef DEBUG
-    VBoxServiceVerbose(3, "GstCntlProcessAllocateArgv: cbSize=%RU32, cArgs=%RU32\n",
-                       cbSize, cArgs);
+    VGSvcVerbose(3, "VGSvcGstCtrlProcessAllocateArgv: cbSize=%RU32, cArgs=%RU32\n", cbSize, cArgs);
 #endif
 
-
     /* HACK ALERT! Since we still don't allow the user to really specify the first
                    argument separately from the executable image, we have to fudge
                    a little in the unquoted argument case to deal with executables
@@ -1180,7 +1138,7 @@ static int gstcntlProcessAllocateArgv(const char *pszArgv0, const char * const *
  * @param   pProcess       Process to assign PID to.
  * @param   uPID           PID to assign to the specified guest control execution thread.
  */
-int gstcntlProcessAssignPID(PVBOXSERVICECTRLPROCESS pProcess, uint32_t uPID)
+static int vgsvcGstCtrlProcessAssignPID(PVBOXSERVICECTRLPROCESS pProcess, uint32_t uPID)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
     AssertReturn(uPID, VERR_INVALID_PARAMETER);
@@ -1203,7 +1161,7 @@ int gstcntlProcessAssignPID(PVBOXSERVICECTRLPROCESS pProcess, uint32_t uPID)
                     Assert(pProcessCur != pProcess); /* can't happen */
                     uint32_t uTriedPID = uPID;
                     uPID += 391939;
-                    VBoxServiceVerbose(2, "PID %RU32 was used before (process %p), trying again with %RU32 ...\n",
+                    VGSvcVerbose(2, "PID %RU32 was used before (process %p), trying again with %RU32 ...\n",
                                        uTriedPID, pProcessCur, uPID);
                     fTryAgain = true;
                     break;
@@ -1222,7 +1180,7 @@ int gstcntlProcessAssignPID(PVBOXSERVICECTRLPROCESS pProcess, uint32_t uPID)
 }
 
 
-void gstcntlProcessFreeArgv(char **papszArgv)
+static void vgsvcGstCtrlProcessFreeArgv(char **papszArgv)
 {
     if (papszArgv)
     {
@@ -1250,9 +1208,9 @@ void gstcntlProcessFreeArgv(char **papszArgv)
  * @param   phProcess                   Pointer which will receive the process handle after
  *                                      successful process start.
  */
-static int gstcntlProcessCreateProcess(const char *pszExec, const char * const *papszArgs, RTENV hEnv, uint32_t fFlags,
-                                       PCRTHANDLE phStdIn, PCRTHANDLE phStdOut, PCRTHANDLE phStdErr, const char *pszAsUser,
-                                       const char *pszPassword, PRTPROCESS phProcess)
+static int vgsvcGstCtrlProcessCreateProcess(const char *pszExec, const char * const *papszArgs, RTENV hEnv, uint32_t fFlags,
+                                            PCRTHANDLE phStdIn, PCRTHANDLE phStdOut, PCRTHANDLE phStdErr, const char *pszAsUser,
+                                            const char *pszPassword, PRTPROCESS phProcess)
 {
     AssertPtrReturn(pszExec, VERR_INVALID_PARAMETER);
     AssertPtrReturn(papszArgs, VERR_INVALID_PARAMETER);
@@ -1296,7 +1254,7 @@ static int gstcntlProcessCreateProcess(const char *pszExec, const char * const *
             }
             if (   RT_SUCCESS(rc)
                 && RTPathExists(szSysWow64))
-                VBoxServiceVerbose(0, "Warning: This service is 32-bit; could not execute sysprep on 64-bit OS!\n");
+                VGSvcVerbose(0, "Warning: This service is 32-bit; could not execute sysprep on 64-bit OS!\n");
 #endif
             if (RT_SUCCESS(rc))
                 rc = RTPathAppend(szSysprepCmd, sizeof(szSysprepCmd), "system32\\Sysprep\\sysprep.exe");
@@ -1304,17 +1262,17 @@ static int gstcntlProcessCreateProcess(const char *pszExec, const char * const *
                 RTPathChangeToDosSlashes(szSysprepCmd, false /* No forcing necessary */);
 
             if (RT_FAILURE(rc))
-                VBoxServiceError("Failed to detect sysrep location, rc=%Rrc\n", rc);
+                VGSvcError("Failed to detect sysrep location, rc=%Rrc\n", rc);
         }
         else if (!fRet)
-            VBoxServiceError("Failed to retrieve OS information, last error=%ld\n", GetLastError());
+            VGSvcError("Failed to retrieve OS information, last error=%ld\n", GetLastError());
 
-        VBoxServiceVerbose(3, "Sysprep executable is: %s\n", szSysprepCmd);
+        VGSvcVerbose(3, "Sysprep executable is: %s\n", szSysprepCmd);
 
         if (RT_SUCCESS(rc))
         {
             char **papszArgsExp;
-            rc = gstcntlProcessAllocateArgv(szSysprepCmd /* argv0 */, papszArgs, fFlags, &papszArgsExp);
+            rc = vgsvcGstCtrlProcessAllocateArgv(szSysprepCmd /* argv0 */, papszArgs, fFlags, &papszArgsExp);
             if (RT_SUCCESS(rc))
             {
                 /* As we don't specify credentials for the sysprep process, it will
@@ -1323,12 +1281,12 @@ static int gstcntlProcessCreateProcess(const char *pszExec, const char * const *
                 rc = RTProcCreateEx(szSysprepCmd, papszArgsExp, hEnv, 0 /* fFlags */,
                                     phStdIn, phStdOut, phStdErr, NULL /* pszAsUser */,
                                     NULL /* pszPassword */, phProcess);
-                gstcntlProcessFreeArgv(papszArgsExp);
+                vgsvcGstCtrlProcessFreeArgv(papszArgsExp);
             }
         }
 
         if (RT_FAILURE(rc))
-            VBoxServiceVerbose(3, "Starting sysprep returned rc=%Rrc\n", rc);
+            VGSvcVerbose(3, "Starting sysprep returned rc=%Rrc\n", rc);
 
         return rc;
     }
@@ -1339,7 +1297,7 @@ static int gstcntlProcessCreateProcess(const char *pszExec, const char * const *
     {
         /* We want to use the internal toolbox (all internal
          * tools are starting with "vbox_" (e.g. "vbox_cat"). */
-        rc = gstcntlProcessResolveExecutable(VBOXSERVICE_NAME, szExecExp, sizeof(szExecExp));
+        rc = vgsvcGstCtrlProcessResolveExecutable(VBOXSERVICE_NAME, szExecExp, sizeof(szExecExp));
     }
     else
     {
@@ -1347,7 +1305,7 @@ static int gstcntlProcessCreateProcess(const char *pszExec, const char * const *
         /*
          * Do the environment variables expansion on executable and arguments.
          */
-        rc = gstcntlProcessResolveExecutable(pszExec, szExecExp, sizeof(szExecExp));
+        rc = vgsvcGstCtrlProcessResolveExecutable(pszExec, szExecExp, sizeof(szExecExp));
 #ifdef VBOXSERVICE_TOOLBOX
     }
 #endif
@@ -1356,13 +1314,13 @@ static int gstcntlProcessCreateProcess(const char *pszExec, const char * const *
         char **papszArgsExp;
         /** @todo r-bird: pszExec != argv[0]! When are you going to get that?!? How many
          * times does this need to be pointed out?  HOST/GUEST INTERFACE IS MISDESIGNED! */
-        rc = gstcntlProcessAllocateArgv(pszExec /* Always use the unmodified executable name as argv0. */,
-                                        papszArgs /* Append the rest of the argument vector (if any). */,
-                                        fFlags, &papszArgsExp);
+        rc = vgsvcGstCtrlProcessAllocateArgv(pszExec /* Always use the unmodified executable name as argv0. */,
+                                             papszArgs /* Append the rest of the argument vector (if any). */,
+                                             fFlags, &papszArgsExp);
         if (RT_FAILURE(rc))
         {
             /* Don't print any arguments -- may contain passwords or other sensible data! */
-            VBoxServiceError("Could not prepare arguments, rc=%Rrc\n", rc);
+            VGSvcError("Could not prepare arguments, rc=%Rrc\n", rc);
         }
         else
         {
@@ -1387,11 +1345,11 @@ static int gstcntlProcessCreateProcess(const char *pszExec, const char * const *
             if (pszAsUser && *pszAsUser)
                 uProcFlags |= RTPROC_FLAGS_SERVICE;
 #ifdef DEBUG
-            VBoxServiceVerbose(3, "Command: %s\n", szExecExp);
+            VGSvcVerbose(3, "Command: %s\n", szExecExp);
             for (size_t i = 0; papszArgsExp[i]; i++)
-                VBoxServiceVerbose(3, "\targv[%ld]: %s\n", i, papszArgsExp[i]);
+                VGSvcVerbose(3, "\targv[%ld]: %s\n", i, papszArgsExp[i]);
 #endif
-            VBoxServiceVerbose(3, "Starting process \"%s\" ...\n", szExecExp);
+            VGSvcVerbose(3, "Starting process '%s' ...\n", szExecExp);
 
             /* Do normal execution. */
             rc = RTProcCreateEx(szExecExp, papszArgsExp, hEnv, uProcFlags,
@@ -1400,10 +1358,9 @@ static int gstcntlProcessCreateProcess(const char *pszExec, const char * const *
                                 pszPassword && *pszPassword ? pszPassword : NULL,
                                 phProcess);
 
-            VBoxServiceVerbose(3, "Starting process \"%s\" returned rc=%Rrc\n",
-                               szExecExp, rc);
+            VGSvcVerbose(3, "Starting process '%s' returned rc=%Rrc\n", szExecExp, rc);
 
-            gstcntlProcessFreeArgv(papszArgsExp);
+            vgsvcGstCtrlProcessFreeArgv(papszArgsExp);
         }
     }
     return rc;
@@ -1411,7 +1368,7 @@ static int gstcntlProcessCreateProcess(const char *pszExec, const char * const *
 
 
 #ifdef DEBUG
-static int gstcntlProcessDumpToFile(const char *pszFileName, void *pvBuf, size_t cbBuf)
+static int vgsvcGstCtrlProcessDumpToFile(const char *pszFileName, void *pvBuf, size_t cbBuf)
 {
     AssertPtrReturn(pszFileName, VERR_INVALID_POINTER);
     AssertPtrReturn(pvBuf, VERR_INVALID_POINTER);
@@ -1427,7 +1384,7 @@ static int gstcntlProcessDumpToFile(const char *pszFileName, void *pvBuf, size_t
 
     if (RT_SUCCESS(rc))
     {
-        VBoxServiceVerbose(4, "Dumping %ld bytes to \"%s\"\n", cbBuf, szFile);
+        VGSvcVerbose(4, "Dumping %ld bytes to '%s'\n", cbBuf, szFile);
 
         RTFILE fh;
         rc = RTFileOpen(&fh, szFile, RTFILE_O_OPEN_CREATE | RTFILE_O_WRITE | RTFILE_O_DENY_WRITE);
@@ -1440,32 +1397,31 @@ static int gstcntlProcessDumpToFile(const char *pszFileName, void *pvBuf, size_t
 
     return rc;
 }
-#endif
+#endif /* DEBUG */
 
 
 /**
  * The actual worker routine (loop) for a started guest process.
  *
  * @return  IPRT status code.
- * @param   PVBOXSERVICECTRLPROCESS         Guest process.
+ * @param   pProcess        The process we're servicing and monitoring.
  */
-static int gstcntlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
+static int vgsvcGstCtrlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
-    VBoxServiceVerbose(3, "Thread of process pThread=0x%p = \"%s\" started\n",
-                       pProcess, pProcess->StartupInfo.szCmd);
+    VGSvcVerbose(3, "Thread of process pThread=0x%p = '%s' started\n", pProcess, pProcess->StartupInfo.szCmd);
 
     int rc = VbglR3GuestCtrlConnect(&pProcess->uClientID);
     if (RT_FAILURE(rc))
     {
-        VBoxServiceError("Process thread \"%s\" (%p) failed to connect to the guest control service, rc=%Rrc\n",
-                         pProcess->StartupInfo.szCmd, pProcess, rc);
+        VGSvcError("Process thread '%s' (%p) failed to connect to the guest control service, rc=%Rrc\n",
+                   pProcess->StartupInfo.szCmd, pProcess, rc);
         RTThreadUserSignal(RTThreadSelf());
         return rc;
     }
 
-    VBoxServiceVerbose(3, "Guest process \"%s\" got client ID=%u, flags=0x%x\n",
-                       pProcess->StartupInfo.szCmd, pProcess->uClientID, pProcess->StartupInfo.uFlags);
+    VGSvcVerbose(3, "Guest process '%s' got client ID=%u, flags=0x%x\n",
+                 pProcess->StartupInfo.szCmd, pProcess->uClientID, pProcess->StartupInfo.uFlags);
 
     /* The process thread is not interested in receiving any commands;
      * tell the host service. */
@@ -1473,15 +1429,15 @@ static int gstcntlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
                                      0 /* Filter mask to add */, 0 /* Filter mask to remove */);
     if (RT_FAILURE(rc))
     {
-        VBoxServiceError("Unable to set message filter, rc=%Rrc\n", rc);
+        VGSvcError("Unable to set message filter, rc=%Rrc\n", rc);
         /* Non-critical. */
     }
 
-    rc = GstCntlSessionProcessAdd(pProcess->pSession, pProcess);
+    rc = VGSvcGstCtrlSessionProcessAdd(pProcess->pSession, pProcess);
     if (RT_FAILURE(rc))
     {
-        VBoxServiceError("Errorwhile adding guest process \"%s\" (%p) to session process list, rc=%Rrc\n",
-                         pProcess->StartupInfo.szCmd, pProcess, rc);
+        VGSvcError("Errorwhile adding guest process '%s' (%p) to session process list, rc=%Rrc\n",
+                   pProcess->StartupInfo.szCmd, pProcess, rc);
         RTThreadUserSignal(RTThreadSelf());
         return rc;
     }
@@ -1562,13 +1518,13 @@ static int gstcntlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
             /** @todo consider supporting: gcc stuff.c >file 2>&1.  */
             RTHANDLE    hStdIn;
             PRTHANDLE   phStdIn;
-            rc = gstcntlProcessSetupPipe("|", 0 /*STDIN_FILENO*/,
+            rc = vgsvcGstCtrlProcessSetupPipe("|", 0 /*STDIN_FILENO*/,
                                          &hStdIn, &phStdIn, &pProcess->hPipeStdInW);
             if (RT_SUCCESS(rc))
             {
                 RTHANDLE    hStdOut;
                 PRTHANDLE   phStdOut;
-                rc = gstcntlProcessSetupPipe(  (pProcess->StartupInfo.uFlags & EXECUTEPROCESSFLAG_WAIT_STDOUT)
+                rc = vgsvcGstCtrlProcessSetupPipe(  (pProcess->StartupInfo.uFlags & EXECUTEPROCESSFLAG_WAIT_STDOUT)
                                              ? "|" : "/dev/null",
                                              1 /*STDOUT_FILENO*/,
                                              &hStdOut, &phStdOut, &pProcess->hPipeStdOutR);
@@ -1576,7 +1532,7 @@ static int gstcntlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
                 {
                     RTHANDLE    hStdErr;
                     PRTHANDLE   phStdErr;
-                    rc = gstcntlProcessSetupPipe(  (pProcess->StartupInfo.uFlags & EXECUTEPROCESSFLAG_WAIT_STDERR)
+                    rc = vgsvcGstCtrlProcessSetupPipe(  (pProcess->StartupInfo.uFlags & EXECUTEPROCESSFLAG_WAIT_STDERR)
                                                  ? "|" : "/dev/null",
                                                  2 /*STDERR_FILENO*/,
                                                  &hStdErr, &phStdErr, &pProcess->hPipeStdErrR);
@@ -1617,14 +1573,14 @@ static int gstcntlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
                                 AssertPtr(pProcess->pSession);
                                 bool fNeedsImpersonation = !(pProcess->pSession->fFlags & VBOXSERVICECTRLSESSION_FLAG_SPAWN);
 
-                                rc = gstcntlProcessCreateProcess(pProcess->StartupInfo.szCmd, papszArgs, hEnv,
+                                rc = vgsvcGstCtrlProcessCreateProcess(pProcess->StartupInfo.szCmd, papszArgs, hEnv,
                                                                  pProcess->StartupInfo.uFlags,
                                                                  phStdIn, phStdOut, phStdErr,
                                                                  fNeedsImpersonation ? pProcess->StartupInfo.szUser : NULL,
                                                                  fNeedsImpersonation ? pProcess->StartupInfo.szPassword : NULL,
                                                                  &pProcess->hProcess);
                                 if (RT_FAILURE(rc))
-                                    VBoxServiceError("Error starting process, rc=%Rrc\n", rc);
+                                    VGSvcError("Error starting process, rc=%Rrc\n", rc);
                                 /*
                                  * Tell the session thread that it can continue
                                  * spawning guest processes. This needs to be done after the new
@@ -1649,7 +1605,7 @@ static int gstcntlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
                                     phStdErr   = NULL;
 
                                     /* Enter the process main loop. */
-                                    rc = gstcntlProcessProcLoop(pProcess);
+                                    rc = vgsvcGstCtrlProcessProcLoop(pProcess);
 
                                     /*
                                      * The handles that are no longer in the set have
@@ -1711,14 +1667,13 @@ static int gstcntlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
                                                   NULL /* pvData */, 0 /* cbData */);
             if (   RT_FAILURE(rc2)
                 && rc2 != VERR_NOT_FOUND)
-                VBoxServiceError("[PID %RU32]: Could not report process failure error; rc=%Rrc (process error %Rrc)\n",
-                                 pProcess->uPID, rc2, rc);
+                VGSvcError("[PID %RU32]: Could not report process failure error; rc=%Rrc (process error %Rrc)\n",
+                           pProcess->uPID, rc2, rc);
         }
 
         /* Disconnect this client from the guest control service. This also cancels all
          * outstanding host requests. */
-        VBoxServiceVerbose(3, "[PID %RU32]: Disconnecting (client ID=%u) ...\n",
-                           pProcess->uPID, pProcess->uClientID);
+        VGSvcVerbose(3, "[PID %RU32]: Disconnecting (client ID=%u) ...\n", pProcess->uPID, pProcess->uClientID);
         VbglR3GuestCtrlDisconnect(pProcess->uClientID);
         pProcess->uClientID = 0;
     }
@@ -1740,8 +1695,8 @@ static int gstcntlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
     if (RT_FAILURE(rc) && !fSignalled)
         RTThreadUserSignal(RTThreadSelf());
 
-    VBoxServiceVerbose(3, "[PID %RU32]: Thread of process \"%s\" ended with rc=%Rrc\n",
-                       pProcess->uPID, pProcess->StartupInfo.szCmd, rc);
+    VGSvcVerbose(3, "[PID %RU32]: Thread of process '%s' ended with rc=%Rrc\n",
+                 pProcess->uPID, pProcess->StartupInfo.szCmd, rc);
 
     /* Finally, update stopped status. */
     ASMAtomicXchgBool(&pProcess->fStopped, true);
@@ -1750,7 +1705,7 @@ static int gstcntlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
 }
 
 
-static int gstcntlProcessLock(PVBOXSERVICECTRLPROCESS pProcess)
+static int vgsvcGstCtrlProcessLock(PVBOXSERVICECTRLPROCESS pProcess)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
     int rc = RTCritSectEnter(&pProcess->CritSect);
@@ -1763,19 +1718,19 @@ static int gstcntlProcessLock(PVBOXSERVICECTRLPROCESS pProcess)
  * Thread main routine for a started process.
  *
  * @return IPRT status code.
- * @param  RTTHREAD             Pointer to the thread's data.
- * @param  void*                User-supplied argument pointer.
+ * @param  hThreadSelf      The thread handle.
+ * @param  pvUser           Pointer to a VBOXSERVICECTRLPROCESS structure.
  *
  */
-static DECLCALLBACK(int) gstcntlProcessThread(RTTHREAD ThreadSelf, void *pvUser)
+static DECLCALLBACK(int) vgsvcGstCtrlProcessThread(RTTHREAD hThreadSelf, void *pvUser)
 {
-    PVBOXSERVICECTRLPROCESS pProcess = (VBOXSERVICECTRLPROCESS*)pvUser;
+    PVBOXSERVICECTRLPROCESS pProcess = (PVBOXSERVICECTRLPROCESS)pvUser;
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
-    return gstcntlProcessProcessWorker(pProcess);
+    return vgsvcGstCtrlProcessProcessWorker(pProcess);
 }
 
 
-static int gstcntlProcessUnlock(PVBOXSERVICECTRLPROCESS pProcess)
+static int vgsvcGstCtrlProcessUnlock(PVBOXSERVICECTRLPROCESS pProcess)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
     int rc = RTCritSectLeave(&pProcess->CritSect);
@@ -1792,11 +1747,9 @@ static int gstcntlProcessUnlock(PVBOXSERVICECTRLPROCESS pProcess)
  * @param   pSession                    Guest session.
  * @param   pStartupInfo                Startup info.
  * @param   uContextID                  Context ID to associate the process to start with.
-
  */
-int GstCntlProcessStart(const PVBOXSERVICECTRLSESSION pSession,
-                        const PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo,
-                        uint32_t uContextID)
+int VGSvcGstCtrlProcessStart(const PVBOXSERVICECTRLSESSION pSession,
+                             const PVBOXSERVICECTRLPROCSTARTUPINFO pStartupInfo, uint32_t uContextID)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pStartupInfo, VERR_INVALID_POINTER);
@@ -1808,25 +1761,25 @@ int GstCntlProcessStart(const PVBOXSERVICECTRLSESSION pSession,
     if (!pProcess)
         return VERR_NO_MEMORY;
 
-    int rc = gstcntlProcessInit(pProcess, pSession, pStartupInfo, uContextID);
+    int rc = vgsvcGstCtrlProcessInit(pProcess, pSession, pStartupInfo, uContextID);
     if (RT_SUCCESS(rc))
     {
         static uint32_t s_uCtrlExecThread = 0;
         if (s_uCtrlExecThread++ == UINT32_MAX)
             s_uCtrlExecThread = 0; /* Wrap around to not let IPRT freak out. */
-        rc = RTThreadCreateF(&pProcess->Thread, gstcntlProcessThread,
+        rc = RTThreadCreateF(&pProcess->Thread, vgsvcGstCtrlProcessThread,
                              pProcess /*pvUser*/, 0 /*cbStack*/,
                              RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "gctl%u", s_uCtrlExecThread);
         if (RT_FAILURE(rc))
         {
-            VBoxServiceError("Creating thread for guest process \"%s\" failed: rc=%Rrc, pProcess=%p\n",
-                             pStartupInfo->szCmd, rc, pProcess);
+            VGSvcError("Creating thread for guest process '%s' failed: rc=%Rrc, pProcess=%p\n",
+                       pStartupInfo->szCmd, rc, pProcess);
 
-            GstCntlProcessFree(pProcess);
+            VGSvcGstCtrlProcessFree(pProcess);
         }
         else
         {
-            VBoxServiceVerbose(4, "Waiting for thread to initialize ...\n");
+            VGSvcVerbose(4, "Waiting for thread to initialize ...\n");
 
             /* Wait for the thread to initialize. */
             rc = RTThreadUserWait(pProcess->Thread, 60 * 1000 /* 60 seconds max. */);
@@ -1834,10 +1787,8 @@ int GstCntlProcessStart(const PVBOXSERVICECTRLSESSION pSession,
             if (   ASMAtomicReadBool(&pProcess->fShutdown)
                 || RT_FAILURE(rc))
             {
-                VBoxServiceError("Thread for process \"%s\" failed to start, rc=%Rrc\n",
-                                 pStartupInfo->szCmd, rc);
-
-                GstCntlProcessFree(pProcess);
+                VGSvcError("Thread for process '%s' failed to start, rc=%Rrc\n", pStartupInfo->szCmd, rc);
+                VGSvcGstCtrlProcessFree(pProcess);
             }
             else
             {
@@ -1850,9 +1801,9 @@ int GstCntlProcessStart(const PVBOXSERVICECTRLSESSION pSession,
 }
 
 
-static DECLCALLBACK(int) gstcntlProcessOnInput(PVBOXSERVICECTRLPROCESS pThis,
-                                               const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                                               bool fPendingClose, void *pvBuf, uint32_t cbBuf)
+static DECLCALLBACK(int) vgsvcGstCtrlProcessOnInput(PVBOXSERVICECTRLPROCESS pThis,
+                                                    const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                                    bool fPendingClose, void *pvBuf, uint32_t cbBuf)
 {
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -1863,10 +1814,7 @@ static DECLCALLBACK(int) gstcntlProcessOnInput(PVBOXSERVICECTRLPROCESS pThis,
     if (pvBuf && cbBuf)
     {
         if (pThis->hPipeStdInW != NIL_RTPIPE)
-        {
-            rc = RTPipeWrite(pThis->hPipeStdInW,
-                             pvBuf, cbBuf, &cbWritten);
-        }
+            rc = RTPipeWrite(pThis->hPipeStdInW, pvBuf, cbBuf, &cbWritten);
         else
             rc = VINF_EOF;
     }
@@ -1879,19 +1827,19 @@ static DECLCALLBACK(int) gstcntlProcessOnInput(PVBOXSERVICECTRLPROCESS pThis,
      * the poll set.
      */
     if (   fPendingClose
-        && (cbBuf == cbWritten))
+        && cbBuf == cbWritten)
     {
-        int rc2 = gstcntlProcessPollsetCloseInput(pThis, &pThis->hPipeStdInW);
+        int rc2 = vgsvcGstCtrlProcessPollsetCloseInput(pThis, &pThis->hPipeStdInW);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
     uint32_t uStatus = INPUT_STS_UNDEFINED; /* Status to send back to the host. */
-    uint32_t uFlags = 0; /* No flags at the moment. */
+    uint32_t fFlags = 0; /* No flags at the moment. */
     if (RT_SUCCESS(rc))
     {
-        VBoxServiceVerbose(4, "[PID %RU32]: Written %RU32 bytes input, CID=%RU32, fPendingClose=%RTbool\n",
-                           pThis->uPID, cbWritten, pHostCtx->uContextID, fPendingClose);
+        VGSvcVerbose(4, "[PID %RU32]: Written %RU32 bytes input, CID=%RU32, fPendingClose=%RTbool\n",
+                     pThis->uPID, cbWritten, pHostCtx->uContextID, fPendingClose);
         uStatus = INPUT_STS_WRITTEN;
     }
     else
@@ -1911,29 +1859,24 @@ static DECLCALLBACK(int) gstcntlProcessOnInput(PVBOXSERVICECTRLPROCESS pThis,
         && uStatus == INPUT_STS_UNDEFINED)
     {
         uStatus = INPUT_STS_ERROR;
-        uFlags = rc;
+        fFlags = rc; /* funny thing to call a "flag"... */
     }
     Assert(uStatus > INPUT_STS_UNDEFINED);
 
-#ifdef DEBUG
-
-#endif
-    int rc2 = VbglR3GuestCtrlProcCbStatusInput(pHostCtx, pThis->uPID,
-                                               uStatus, uFlags, (uint32_t)cbWritten);
+    int rc2 = VbglR3GuestCtrlProcCbStatusInput(pHostCtx, pThis->uPID, uStatus, fFlags, (uint32_t)cbWritten);
     if (RT_SUCCESS(rc))
         rc = rc2;
 
 #ifdef DEBUG
-    VBoxServiceVerbose(3, "[PID %RU32]: gstcntlProcessOnInput returned with rc=%Rrc\n",
-                       pThis->uPID, rc);
+    VGSvcVerbose(3, "[PID %RU32]: vgsvcGstCtrlProcessOnInput returned with rc=%Rrc\n", pThis->uPID, rc);
 #endif
     return VINF_SUCCESS; /** @todo Return rc here as soon as RTReqQueue todos are fixed. */
 }
 
 
-static DECLCALLBACK(int) gstcntlProcessOnOutput(PVBOXSERVICECTRLPROCESS pThis,
-                                                const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                                                uint32_t uHandle, uint32_t cbToRead, uint32_t uFlags)
+static DECLCALLBACK(int) vgsvcGstCtrlProcessOnOutput(PVBOXSERVICECTRLPROCESS pThis,
+                                                     const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                                     uint32_t uHandle, uint32_t cbToRead, uint32_t fFlags)
 {
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -1947,9 +1890,9 @@ static DECLCALLBACK(int) gstcntlProcessOnOutput(PVBOXSERVICECTRLPROCESS pThis,
     uint8_t *pvBuf = (uint8_t *)RTMemAlloc(cbBuf);
     if (pvBuf)
     {
-        PRTPIPE phPipe =   uHandle == OUTPUT_HANDLE_ID_STDOUT
-                         ? &pThis->hPipeStdOutR
-                         : &pThis->hPipeStdErrR;
+        PRTPIPE phPipe = uHandle == OUTPUT_HANDLE_ID_STDOUT
+                       ? &pThis->hPipeStdOutR
+                       : &pThis->hPipeStdErrR;
         AssertPtr(phPipe);
 
         size_t cbRead = 0;
@@ -1977,11 +1920,12 @@ static DECLCALLBACK(int) gstcntlProcessOnOutput(PVBOXSERVICECTRLPROCESS pThis,
                     || uHandle == OUTPUT_HANDLE_ID_STDOUT_DEPRECATED)
                )
             {
+                /** @todo r=bird: vgsvcGstCtrlProcessDumpToFile(void *pvBuf, size_t cbBuf, const char *pszFileNmFmt, ...) */
                 char szDumpFile[RTPATH_MAX];
                 if (!RTStrPrintf(szDumpFile, sizeof(szDumpFile), "VBoxService_Session%RU32_PID%RU32_StdOut.txt",
                                  pSession->StartupInfo.uSessionID, pThis->uPID)) rc = VERR_BUFFER_UNDERFLOW;
                 if (RT_SUCCESS(rc))
-                    rc = gstcntlProcessDumpToFile(szDumpFile, pvBuf, cbRead);
+                    rc = vgsvcGstCtrlProcessDumpToFile(szDumpFile, pvBuf, cbRead);
                 AssertRC(rc);
             }
             else if (   pSession->fFlags & VBOXSERVICECTRLSESSION_FLAG_DUMPSTDERR
@@ -1992,7 +1936,7 @@ static DECLCALLBACK(int) gstcntlProcessOnOutput(PVBOXSERVICECTRLPROCESS pThis,
                                  pSession->StartupInfo.uSessionID, pThis->uPID))
                     rc = VERR_BUFFER_UNDERFLOW;
                 if (RT_SUCCESS(rc))
-                    rc = gstcntlProcessDumpToFile(szDumpFile, pvBuf, cbRead);
+                    rc = vgsvcGstCtrlProcessDumpToFile(szDumpFile, pvBuf, cbRead);
                 AssertRC(rc);
             }
         }
@@ -2001,8 +1945,8 @@ static DECLCALLBACK(int) gstcntlProcessOnOutput(PVBOXSERVICECTRLPROCESS pThis,
         if (RT_SUCCESS(rc))
         {
 #ifdef DEBUG
-            VBoxServiceVerbose(3, "[PID %RU32]: Read %RU32 bytes output: uHandle=%RU32, CID=%RU32, uFlags=%x\n",
-                               pThis->uPID, cbRead, uHandle, pHostCtx->uContextID, uFlags);
+            VGSvcVerbose(3, "[PID %RU32]: Read %RU32 bytes output: uHandle=%RU32, CID=%RU32, fFlags=%x\n",
+                         pThis->uPID, cbRead, uHandle, pHostCtx->uContextID, fFlags);
 #endif
             /** Note: Don't convert/touch/modify/whatever the output data here! This might be binary
              *        data which the host needs to work with -- so just pass through all data unfiltered! */
@@ -2010,8 +1954,8 @@ static DECLCALLBACK(int) gstcntlProcessOnOutput(PVBOXSERVICECTRLPROCESS pThis,
             /* Note: Since the context ID is unique the request *has* to be completed here,
              *       regardless whether we got data or not! Otherwise the waiting events
              *       on the host never will get completed! */
-            rc = VbglR3GuestCtrlProcCbOutput(pHostCtx, pThis->uPID, uHandle, uFlags,
-                                             pvBuf, cbRead);
+            Assert((uint32_t)cbRead == cbRead);
+            rc = VbglR3GuestCtrlProcCbOutput(pHostCtx, pThis->uPID, uHandle, fFlags, pvBuf, (uint32_t)cbRead);
             if (   RT_FAILURE(rc)
                 && rc == VERR_NOT_FOUND) /* Not critical if guest PID is not found on the host (anymore). */
                 rc = VINF_SUCCESS;
@@ -2023,30 +1967,25 @@ static DECLCALLBACK(int) gstcntlProcessOnOutput(PVBOXSERVICECTRLPROCESS pThis,
         rc = VERR_NO_MEMORY;
 
 #ifdef DEBUG
-    VBoxServiceVerbose(3, "[PID %RU32]: Reading output returned with rc=%Rrc\n",
-                       pThis->uPID, rc);
+    VGSvcVerbose(3, "[PID %RU32]: Reading output returned with rc=%Rrc\n", pThis->uPID, rc);
 #endif
     return VINF_SUCCESS; /** @todo Return rc here as soon as RTReqQueue todos are fixed. */
 }
 
 
-static DECLCALLBACK(int) gstcntlProcessOnTerm(PVBOXSERVICECTRLPROCESS pThis)
+static DECLCALLBACK(int) vgsvcGstCtrlProcessOnTerm(PVBOXSERVICECTRLPROCESS pThis)
 {
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
 
     if (!ASMAtomicXchgBool(&pThis->fShutdown, true))
-    {
-        VBoxServiceVerbose(3, "[PID %RU32]: Setting shutdown flag ...\n",
-                           pThis->uPID);
-    }
+        VGSvcVerbose(3, "[PID %RU32]: Setting shutdown flag ...\n", pThis->uPID);
 
     return VINF_SUCCESS; /** @todo Return rc here as soon as RTReqQueue todos are fixed. */
 }
 
 
-int gstcntlProcessRequestExV(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                             bool fAsync, RTMSINTERVAL uTimeoutMS, PRTREQ pReq, PFNRT pfnFunction,
-                             unsigned cArgs, va_list Args)
+static int vgsvcGstCtrlProcessRequestExV(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUESTCTRLCMDCTX pHostCtx, bool fAsync,
+                                         RTMSINTERVAL uTimeoutMS, PRTREQ pReq, PFNRT pfnFunction, unsigned cArgs, va_list Args)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
     /* pHostCtx is optional. */
@@ -2054,22 +1993,21 @@ int gstcntlProcessRequestExV(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUES
     if (!fAsync)
         AssertPtrReturn(pfnFunction, VERR_INVALID_POINTER);
 
-    int rc = gstcntlProcessLock(pProcess);
+    int rc = vgsvcGstCtrlProcessLock(pProcess);
     if (RT_SUCCESS(rc))
     {
 #ifdef DEBUG
-    VBoxServiceVerbose(3, "[PID %RU32]: gstcntlProcessRequestExV fAsync=%RTbool, uTimeoutMS=%RU32, cArgs=%u\n",
-                       pProcess->uPID, fAsync, uTimeoutMS, cArgs);
+        VGSvcVerbose(3, "[PID %RU32]: vgsvcGstCtrlProcessRequestExV fAsync=%RTbool, uTimeoutMS=%RU32, cArgs=%u\n",
+                     pProcess->uPID, fAsync, uTimeoutMS, cArgs);
 #endif
-        uint32_t uFlags = RTREQFLAGS_IPRT_STATUS;
+        uint32_t fFlags = RTREQFLAGS_IPRT_STATUS;
         if (fAsync)
         {
             Assert(uTimeoutMS == 0);
-            uFlags |= RTREQFLAGS_NO_WAIT;
+            fFlags |= RTREQFLAGS_NO_WAIT;
         }
 
-        rc = RTReqQueueCallV(pProcess->hReqQueue, &pReq, uTimeoutMS, uFlags,
-                             pfnFunction, cArgs, Args);
+        rc = RTReqQueueCallV(pProcess->hReqQueue, &pReq, uTimeoutMS, fFlags, pfnFunction, cArgs, Args);
         if (RT_SUCCESS(rc))
         {
             /* Wake up the process' notification pipe to get
@@ -2080,32 +2018,31 @@ int gstcntlProcessRequestExV(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUES
             if (   RT_SUCCESS(rc)
                 && cbWritten != 1)
             {
-                VBoxServiceError("[PID %RU32]: Notification pipe got %zu bytes instead of 1\n",
+                VGSvcError("[PID %RU32]: Notification pipe got %zu bytes instead of 1\n",
                                  pProcess->uPID, cbWritten);
             }
             else if (RT_UNLIKELY(RT_FAILURE(rc)))
-                VBoxServiceError("[PID %RU32]: Writing to notification pipe failed, rc=%Rrc\n",
+                VGSvcError("[PID %RU32]: Writing to notification pipe failed, rc=%Rrc\n",
                                  pProcess->uPID, rc);
         }
         else
-            VBoxServiceError("[PID %RU32]: RTReqQueueCallV failed, rc=%Rrc\n",
+            VGSvcError("[PID %RU32]: RTReqQueueCallV failed, rc=%Rrc\n",
                              pProcess->uPID, rc);
 
-        int rc2 = gstcntlProcessUnlock(pProcess);
+        int rc2 = vgsvcGstCtrlProcessUnlock(pProcess);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(3, "[PID %RU32]: gstcntlProcessRequestExV returned rc=%Rrc\n",
-                       pProcess->uPID, rc);
+    VGSvcVerbose(3, "[PID %RU32]: vgsvcGstCtrlProcessRequestExV returned rc=%Rrc\n", pProcess->uPID, rc);
 #endif
     return rc;
 }
 
 
-int gstcntlProcessRequestAsync(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                               PFNRT pfnFunction, unsigned cArgs, ...)
+static int vgsvcGstCtrlProcessRequestAsync(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                           PFNRT pfnFunction, unsigned cArgs, ...)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
     /* pHostCtx is optional. */
@@ -2113,16 +2050,17 @@ int gstcntlProcessRequestAsync(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GU
 
     va_list va;
     va_start(va, cArgs);
-    int rc = gstcntlProcessRequestExV(pProcess, pHostCtx, true /* fAsync */, 0 /* uTimeoutMS */,
-                                      NULL /* pReq */, pfnFunction, cArgs, va);
+    int rc = vgsvcGstCtrlProcessRequestExV(pProcess, pHostCtx, true /* fAsync */, 0 /* uTimeoutMS */,
+                                           NULL /* pReq */, pfnFunction, cArgs, va);
     va_end(va);
 
     return rc;
 }
 
 
-int gstcntlProcessRequestWait(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                              RTMSINTERVAL uTimeoutMS, PRTREQ pReq, PFNRT pfnFunction, unsigned cArgs, ...)
+#if 0 /* unused */
+static int vgsvcGstCtrlProcessRequestWait(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                          RTMSINTERVAL uTimeoutMS, PRTREQ pReq, PFNRT pfnFunction, unsigned cArgs, ...)
 {
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
     /* pHostCtx is optional. */
@@ -2130,42 +2068,43 @@ int gstcntlProcessRequestWait(PVBOXSERVICECTRLPROCESS pProcess, const PVBGLR3GUE
 
     va_list va;
     va_start(va, cArgs);
-    int rc = gstcntlProcessRequestExV(pProcess, pHostCtx, false /* fAsync */, uTimeoutMS,
-                                      pReq, pfnFunction, cArgs, va);
+    int rc = vgsvcGstCtrlProcessRequestExV(pProcess, pHostCtx, false /* fAsync */, uTimeoutMS,
+                                           pReq, pfnFunction, cArgs, va);
     va_end(va);
 
     return rc;
 }
+#endif
 
 
-int GstCntlProcessHandleInput(PVBOXSERVICECTRLPROCESS pProcess, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                              bool fPendingClose, void *pvBuf, uint32_t cbBuf)
+int VGSvcGstCtrlProcessHandleInput(PVBOXSERVICECTRLPROCESS pProcess, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                   bool fPendingClose, void *pvBuf, uint32_t cbBuf)
 {
     if (!ASMAtomicReadBool(&pProcess->fShutdown))
-        return gstcntlProcessRequestAsync(pProcess, pHostCtx, (PFNRT)gstcntlProcessOnInput,
-                                          5 /* cArgs */, pProcess, pHostCtx, fPendingClose, pvBuf, cbBuf);
+        return vgsvcGstCtrlProcessRequestAsync(pProcess, pHostCtx, (PFNRT)vgsvcGstCtrlProcessOnInput,
+                                               5 /* cArgs */, pProcess, pHostCtx, fPendingClose, pvBuf, cbBuf);
 
-    return gstcntlProcessOnInput(pProcess, pHostCtx, fPendingClose, pvBuf, cbBuf);
+    return vgsvcGstCtrlProcessOnInput(pProcess, pHostCtx, fPendingClose, pvBuf, cbBuf);
 }
 
 
-int GstCntlProcessHandleOutput(PVBOXSERVICECTRLPROCESS pProcess, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                               uint32_t uHandle, uint32_t cbToRead, uint32_t uFlags)
+int VGSvcGstCtrlProcessHandleOutput(PVBOXSERVICECTRLPROCESS pProcess, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                    uint32_t uHandle, uint32_t cbToRead, uint32_t fFlags)
 {
     if (!ASMAtomicReadBool(&pProcess->fShutdown))
-        return gstcntlProcessRequestAsync(pProcess, pHostCtx, (PFNRT)gstcntlProcessOnOutput,
-                                          5 /* cArgs */, pProcess, pHostCtx, uHandle, cbToRead, uFlags);
+        return vgsvcGstCtrlProcessRequestAsync(pProcess, pHostCtx, (PFNRT)vgsvcGstCtrlProcessOnOutput,
+                                               5 /* cArgs */, pProcess, pHostCtx, uHandle, cbToRead, fFlags);
 
-    return gstcntlProcessOnOutput(pProcess, pHostCtx, uHandle, cbToRead, uFlags);
+    return vgsvcGstCtrlProcessOnOutput(pProcess, pHostCtx, uHandle, cbToRead, fFlags);
 }
 
 
-int GstCntlProcessHandleTerm(PVBOXSERVICECTRLPROCESS pProcess)
+int VGSvcGstCtrlProcessHandleTerm(PVBOXSERVICECTRLPROCESS pProcess)
 {
     if (!ASMAtomicReadBool(&pProcess->fShutdown))
-        return gstcntlProcessRequestAsync(pProcess, NULL /* pHostCtx */, (PFNRT)gstcntlProcessOnTerm,
-                                          1 /* cArgs */, pProcess);
+        return vgsvcGstCtrlProcessRequestAsync(pProcess, NULL /* pHostCtx */, (PFNRT)vgsvcGstCtrlProcessOnTerm,
+                                               1 /* cArgs */, pProcess);
 
-    return gstcntlProcessOnTerm(pProcess);
+    return vgsvcGstCtrlProcessOnTerm(pProcess);
 }
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
index e8200ab..23327f8 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
@@ -41,38 +41,8 @@ using namespace guestControl;
 
 
 /*********************************************************************************************************************************
-*   Externals                                                                                                                    *
+*   Structures and Typedefs                                                                                                      *
 *********************************************************************************************************************************/
-extern RTLISTANCHOR                g_lstControlSessionThreads;
-extern VBOXSERVICECTRLSESSION      g_Session;
-
-extern int                  VBoxServiceLogCreate(const char *pszLogFile);
-extern void                 VBoxServiceLogDestroy(void);
-
-
-/*********************************************************************************************************************************
-*   Internal Functions                                                                                                           *
-*********************************************************************************************************************************/
-static int                  gstcntlSessionFileDestroy(PVBOXSERVICECTRLFILE pFile);
-static int                  gstcntlSessionFileAdd(PVBOXSERVICECTRLSESSION pSession, PVBOXSERVICECTRLFILE pFile);
-static PVBOXSERVICECTRLFILE gstcntlSessionFileGetLocked(const PVBOXSERVICECTRLSESSION pSession, uint32_t uHandle);
-static DECLCALLBACK(int)    gstcntlSessionThread(RTTHREAD ThreadSelf, void *pvUser);
-/* Host -> Guest handlers. */
-static int                  gstcntlSessionHandleDirRemove(PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int                  gstcntlSessionHandleFileOpen(PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int                  gstcntlSessionHandleFileClose(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int                  gstcntlSessionHandleFileRead(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int                  gstcntlSessionHandleFileWrite(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx, void *pvScratchBuf, size_t cbScratchBuf);
-static int                  gstcntlSessionHandleFileSeek(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int                  gstcntlSessionHandleFileTell(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int                  gstcntlSessionHandlePathRename(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int                  gstcntlSessionHandleProcExec(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int                  gstcntlSessionHandleProcInput(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx, void *pvScratchBuf, size_t cbScratchBuf);
-static int                  gstcntlSessionHandleProcOutput(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int                  gstcntlSessionHandleProcTerminate(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-static int                  gstcntlSessionHandleProcWaitFor(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx);
-
-
 /** Generic option indices for session spawn arguments. */
 enum
 {
@@ -89,7 +59,8 @@ enum
 };
 
 
-static int gstcntlSessionFileDestroy(PVBOXSERVICECTRLFILE pFile)
+
+static int vgsvcGstCtrlSessionFileDestroy(PVBOXSERVICECTRLFILE pFile)
 {
     AssertPtrReturn(pFile, VERR_INVALID_POINTER);
 
@@ -107,13 +78,12 @@ static int gstcntlSessionFileDestroy(PVBOXSERVICECTRLFILE pFile)
 
 
 /** @todo No locking done yet! */
-static PVBOXSERVICECTRLFILE gstcntlSessionFileGetLocked(const PVBOXSERVICECTRLSESSION pSession,
-                                                        uint32_t uHandle)
+static PVBOXSERVICECTRLFILE vgsvcGstCtrlSessionFileGetLocked(const PVBOXSERVICECTRLSESSION pSession, uint32_t uHandle)
 {
     AssertPtrReturn(pSession, NULL);
 
-    PVBOXSERVICECTRLFILE pFileCur = NULL;
     /** @todo Use a map later! */
+    PVBOXSERVICECTRLFILE pFileCur;
     RTListForEach(&pSession->lstFiles, pFileCur, VBOXSERVICECTRLFILE, Node)
     {
         if (pFileCur->uHandle == uHandle)
@@ -124,8 +94,7 @@ static PVBOXSERVICECTRLFILE gstcntlSessionFileGetLocked(const PVBOXSERVICECTRLSE
 }
 
 
-static int gstcntlSessionHandleDirRemove(PVBOXSERVICECTRLSESSION pSession,
-                                         PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlSessionHandleDirRemove(PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -157,25 +126,24 @@ static int gstcntlSessionHandleDirRemove(PVBOXSERVICECTRLSESSION pSession,
         else
             rc = VERR_NOT_SUPPORTED;
 
-        VBoxServiceVerbose(4, "[Dir %s]: Removing with fFlags=0x%x, rc=%Rrc\n", szDir, fFlags, rc);
+        VGSvcVerbose(4, "[Dir %s]: Removing with fFlags=0x%x, rc=%Rrc\n", szDir, fFlags, rc);
 
         /* Report back in any case. */
         int rc2 = VbglR3GuestCtrlMsgReply(pHostCtx, rc);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("[Dir %s]: Failed to report removing status, rc=%Rrc\n", szDir, rc2);
+            VGSvcError("[Dir %s]: Failed to report removing status, rc=%Rrc\n", szDir, rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Removing directory \"%s\" returned rc=%Rrc\n", szDir, rc);
+    VGSvcVerbose(4, "Removing directory '%s' returned rc=%Rrc\n", szDir, rc);
 #endif
     return rc;
 }
 
 
-static int gstcntlSessionHandleFileOpen(PVBOXSERVICECTRLSESSION pSession,
-                                        PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlSessionHandleFileOpen(PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -185,7 +153,7 @@ static int gstcntlSessionHandleFileOpen(PVBOXSERVICECTRLSESSION pSession,
     char szDisposition[64];
     char szSharing[64];
     uint32_t uCreationMode = 0;
-    uint64_t uOffset = 0;
+    uint64_t offOpen = 0;
     uint32_t uHandle = 0;
 
     int rc = VbglR3GuestCtrlFileGetOpen(pHostCtx,
@@ -200,10 +168,9 @@ static int gstcntlSessionHandleFileOpen(PVBOXSERVICECTRLSESSION pSession,
                                         /* Creation mode. */
                                         &uCreationMode,
                                         /* Offset. */
-                                        &uOffset);
-    VBoxServiceVerbose(4, "[File %s]: szAccess=%s, szDisposition=%s, szSharing=%s, uOffset=%RU64, rc=%Rrc\n",
-                       szFile, szAccess, szDisposition, szSharing, uOffset, rc);
-
+                                        &offOpen);
+    VGSvcVerbose(4, "[File %s]: szAccess=%s, szDisposition=%s, szSharing=%s, offOpen=%RU64, rc=%Rrc\n",
+                 szFile, szAccess, szDisposition, szSharing, offOpen, rc);
     if (RT_SUCCESS(rc))
     {
         PVBOXSERVICECTRLFILE pFile = (PVBOXSERVICECTRLFILE)RTMemAllocZ(sizeof(VBOXSERVICECTRLFILE));
@@ -214,27 +181,26 @@ static int gstcntlSessionHandleFileOpen(PVBOXSERVICECTRLSESSION pSession,
 
             if (RT_SUCCESS(rc))
             {
+                /** @todo r=bird: Plase, use RTStrCopy for stuff like this! */
                 RTStrPrintf(pFile->szName, sizeof(pFile->szName), "%s", szFile);
 
                 uint64_t fFlags;
-                rc = RTFileModeToFlagsEx(szAccess, szDisposition,
-                                         NULL /* pszSharing, not used yet */, &fFlags);
-                VBoxServiceVerbose(4, "[File %s]: Opening with fFlags=0x%x, rc=%Rrc\n", pFile->szName, fFlags, rc);
+                rc = RTFileModeToFlagsEx(szAccess, szDisposition, NULL /* pszSharing, not used yet */, &fFlags);
+                VGSvcVerbose(4, "[File %s]: Opening with fFlags=0x%x, rc=%Rrc\n", pFile->szName, fFlags, rc);
 
                 if (RT_SUCCESS(rc))
                     rc = RTFileOpen(&pFile->hFile, pFile->szName, fFlags);
                 if (   RT_SUCCESS(rc)
-                    && uOffset)
+                    && offOpen)
                 {
                     /* Seeking is optional. However, the whole operation
                      * will fail if we don't succeed seeking to the wanted position. */
-                    rc = RTFileSeek(pFile->hFile, (int64_t)uOffset, RTFILE_SEEK_BEGIN, NULL /* Current offset */);
+                    rc = RTFileSeek(pFile->hFile, (int64_t)offOpen, RTFILE_SEEK_BEGIN, NULL /* Current offset */);
                     if (RT_FAILURE(rc))
-                        VBoxServiceError("[File %s]: Seeking to offset %RU64 failed; rc=%Rrc\n",
-                                         pFile->szName, uOffset, rc);
+                        VGSvcError("[File %s]: Seeking to offset %RU64 failed; rc=%Rrc\n", pFile->szName, offOpen, rc);
                 }
                 else if (RT_FAILURE(rc))
-                    VBoxServiceError("[File %s]: Opening failed with rc=%Rrc\n", pFile->szName, rc);
+                    VGSvcError("[File %s]: Opening failed with rc=%Rrc\n", pFile->szName, rc);
             }
 
             if (RT_SUCCESS(rc))
@@ -242,10 +208,9 @@ static int gstcntlSessionHandleFileOpen(PVBOXSERVICECTRLSESSION pSession,
                 uHandle = VBOX_GUESTCTRL_CONTEXTID_GET_OBJECT(pHostCtx->uContextID);
                 pFile->uHandle = uHandle;
 
-                /* rc = */ RTListAppend(&pSession->lstFiles, &pFile->Node);
+                RTListAppend(&pSession->lstFiles, &pFile->Node);
 
-                VBoxServiceVerbose(3, "[File %s]: Opened (ID=%RU32)\n",
-                                   pFile->szName, pFile->uHandle);
+                VGSvcVerbose(3, "[File %s]: Opened (ID=%RU32)\n", pFile->szName, pFile->uHandle);
             }
 
             if (RT_FAILURE(rc))
@@ -261,22 +226,20 @@ static int gstcntlSessionHandleFileOpen(PVBOXSERVICECTRLSESSION pSession,
         /* Report back in any case. */
         int rc2 = VbglR3GuestCtrlFileCbOpen(pHostCtx, rc, uHandle);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("[File %s]: Failed to report file open status, rc=%Rrc\n",
-                             szFile, rc2);
+            VGSvcError("[File %s]: Failed to report file open status, rc=%Rrc\n", szFile, rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Opening file \"%s\" (open mode=\"%s\", disposition=\"%s\", creation mode=0x%x returned rc=%Rrc\n",
-                       szFile, szAccess, szDisposition, uCreationMode, rc);
+    VGSvcVerbose(4, "Opening file '%s' (open mode='%s', disposition='%s', creation mode=0x%x returned rc=%Rrc\n",
+                 szFile, szAccess, szDisposition, uCreationMode, rc);
 #endif
     return rc;
 }
 
 
-static int gstcntlSessionHandleFileClose(const PVBOXSERVICECTRLSESSION pSession,
-                                         PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlSessionHandleFileClose(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -287,33 +250,29 @@ static int gstcntlSessionHandleFileClose(const PVBOXSERVICECTRLSESSION pSession,
     int rc = VbglR3GuestCtrlFileGetClose(pHostCtx, &uHandle /* File handle to close */);
     if (RT_SUCCESS(rc))
     {
-        pFile = gstcntlSessionFileGetLocked(pSession, uHandle);
+        pFile = vgsvcGstCtrlSessionFileGetLocked(pSession, uHandle);
         if (pFile)
-        {
-            rc = gstcntlSessionFileDestroy(pFile);
-        }
+            rc = vgsvcGstCtrlSessionFileDestroy(pFile);
         else
             rc = VERR_NOT_FOUND;
 
         /* Report back in any case. */
         int rc2 = VbglR3GuestCtrlFileCbClose(pHostCtx, rc);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to report file close status, rc=%Rrc\n", rc2);
+            VGSvcError("Failed to report file close status, rc=%Rrc\n", rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Closing file \"%s\" (handle=%RU32) returned rc=%Rrc\n",
-                       pFile ? pFile->szName : "<Not found>", uHandle, rc);
+    VGSvcVerbose(4, "Closing file '%s' (handle=%RU32) returned rc=%Rrc\n", pFile ? pFile->szName : "<Not found>", uHandle, rc);
 #endif
     return rc;
 }
 
 
-static int gstcntlSessionHandleFileRead(const PVBOXSERVICECTRLSESSION pSession,
-                                        PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                                        void *pvScratchBuf, size_t cbScratchBuf)
+static int vgsvcGstCtrlSessionHandleFileRead(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                             void *pvScratchBuf, size_t cbScratchBuf)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -328,7 +287,7 @@ static int gstcntlSessionHandleFileRead(const PVBOXSERVICECTRLSESSION pSession,
         void *pvDataRead = pvScratchBuf;
         size_t cbRead = 0;
 
-        pFile = gstcntlSessionFileGetLocked(pSession, uHandle);
+        pFile = vgsvcGstCtrlSessionFileGetLocked(pSession, uHandle);
         if (pFile)
         {
             if (cbToRead)
@@ -356,22 +315,20 @@ static int gstcntlSessionHandleFileRead(const PVBOXSERVICECTRLSESSION pSession,
             RTMemFree(pvDataRead);
 
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to report file read status, rc=%Rrc\n", rc2);
+            VGSvcError("Failed to report file read status, rc=%Rrc\n", rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Reading file \"%s\" (handle=%RU32) returned rc=%Rrc\n",
-                       pFile ? pFile->szName : "<Not found>", uHandle, rc);
+    VGSvcVerbose(4, "Reading file '%s' (handle=%RU32) returned rc=%Rrc\n", pFile ? pFile->szName : "<Not found>", uHandle, rc);
 #endif
     return rc;
 }
 
 
-static int gstcntlSessionHandleFileReadAt(const PVBOXSERVICECTRLSESSION pSession,
-                                          PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                                          void *pvScratchBuf, size_t cbScratchBuf)
+static int vgsvcGstCtrlSessionHandleFileReadAt(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                               void *pvScratchBuf, size_t cbScratchBuf)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -379,16 +336,15 @@ static int gstcntlSessionHandleFileReadAt(const PVBOXSERVICECTRLSESSION pSession
     PVBOXSERVICECTRLFILE pFile = NULL;
 
     uint32_t uHandle = 0;
-    uint32_t cbToRead; int64_t iOffset;
-
-    int rc = VbglR3GuestCtrlFileGetReadAt(pHostCtx,
-                                          &uHandle, &cbToRead, (uint64_t *)&iOffset);
+    uint32_t cbToRead;
+    uint64_t offReadAt;
+    int rc = VbglR3GuestCtrlFileGetReadAt(pHostCtx, &uHandle, &cbToRead, &offReadAt);
     if (RT_SUCCESS(rc))
     {
         void *pvDataRead = pvScratchBuf;
         size_t cbRead = 0;
 
-        pFile = gstcntlSessionFileGetLocked(pSession, uHandle);
+        pFile = vgsvcGstCtrlSessionFileGetLocked(pSession, uHandle);
         if (pFile)
         {
             if (cbToRead)
@@ -400,8 +356,8 @@ static int gstcntlSessionHandleFileReadAt(const PVBOXSERVICECTRLSESSION pSession
                         rc = VERR_NO_MEMORY;
                 }
 
-                if (RT_LIKELY(RT_SUCCESS(rc)))
-                    rc = RTFileReadAt(pFile->hFile, iOffset, pvDataRead, cbToRead, &cbRead);
+                if (RT_SUCCESS(rc))
+                    rc = RTFileReadAt(pFile->hFile, (RTFOFF)offReadAt, pvDataRead, cbToRead, &cbRead);
             }
             else
                 rc = VERR_BUFFER_UNDERFLOW;
@@ -416,22 +372,21 @@ static int gstcntlSessionHandleFileReadAt(const PVBOXSERVICECTRLSESSION pSession
             RTMemFree(pvDataRead);
 
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to report file read status, rc=%Rrc\n", rc2);
+            VGSvcError("Failed to report file read status, rc=%Rrc\n", rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Reading file \"%s\" at offset (handle=%RU32) returned rc=%Rrc\n",
-                       pFile ? pFile->szName : "<Not found>", uHandle, rc);
+    VGSvcVerbose(4, "Reading file '%s' at offset (handle=%RU32) returned rc=%Rrc\n",
+                 pFile ? pFile->szName : "<Not found>", uHandle, rc);
 #endif
     return rc;
 }
 
 
-static int gstcntlSessionHandleFileWrite(const PVBOXSERVICECTRLSESSION pSession,
-                                         PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                                         void *pvScratchBuf, size_t cbScratchBuf)
+static int vgsvcGstCtrlSessionHandleFileWrite(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                              void *pvScratchBuf, size_t cbScratchBuf)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -442,19 +397,17 @@ static int gstcntlSessionHandleFileWrite(const PVBOXSERVICECTRLSESSION pSession,
 
     uint32_t uHandle = 0;
     uint32_t cbToWrite;
-
-    int rc = VbglR3GuestCtrlFileGetWrite(pHostCtx, &uHandle,
-                                         pvScratchBuf, (uint32_t)cbScratchBuf, &cbToWrite);
+    int rc = VbglR3GuestCtrlFileGetWrite(pHostCtx, &uHandle, pvScratchBuf, (uint32_t)cbScratchBuf, &cbToWrite);
     if (RT_SUCCESS(rc))
     {
         size_t cbWritten = 0;
-        pFile = gstcntlSessionFileGetLocked(pSession, uHandle);
+        pFile = vgsvcGstCtrlSessionFileGetLocked(pSession, uHandle);
         if (pFile)
         {
             rc = RTFileWrite(pFile->hFile, pvScratchBuf, cbToWrite, &cbWritten);
 #ifdef DEBUG
-            VBoxServiceVerbose(4, "[File %s]: Writing pvScratchBuf=%p, cbToWrite=%RU32, cbWritten=%zu, rc=%Rrc\n",
-                               pFile->szName, pvScratchBuf, cbToWrite, cbWritten, rc);
+            VGSvcVerbose(4, "[File %s]: Writing pvScratchBuf=%p, cbToWrite=%RU32, cbWritten=%zu, rc=%Rrc\n",
+                         pFile->szName, pvScratchBuf, cbToWrite, cbWritten, rc);
 #endif
         }
         else
@@ -463,22 +416,20 @@ static int gstcntlSessionHandleFileWrite(const PVBOXSERVICECTRLSESSION pSession,
         /* Report back in any case. */
         int rc2 = VbglR3GuestCtrlFileCbWrite(pHostCtx, rc, (uint32_t)cbWritten);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to report file write status, rc=%Rrc\n", rc2);
+            VGSvcError("Failed to report file write status, rc=%Rrc\n", rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Writing file \"%s\" (handle=%RU32) returned rc=%Rrc\n",
-                       pFile ? pFile->szName : "<Not found>", uHandle, rc);
+    VGSvcVerbose(4, "Writing file '%s' (handle=%RU32) returned rc=%Rrc\n", pFile ? pFile->szName : "<Not found>", uHandle, rc);
 #endif
     return rc;
 }
 
 
-static int gstcntlSessionHandleFileWriteAt(const PVBOXSERVICECTRLSESSION pSession,
-                                           PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                                           void *pvScratchBuf, size_t cbScratchBuf)
+static int vgsvcGstCtrlSessionHandleFileWriteAt(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                                void *pvScratchBuf, size_t cbScratchBuf)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -488,22 +439,20 @@ static int gstcntlSessionHandleFileWriteAt(const PVBOXSERVICECTRLSESSION pSessio
     PVBOXSERVICECTRLFILE pFile = NULL;
 
     uint32_t uHandle = 0;
-    uint32_t cbToWrite; int64_t iOffset;
+    uint32_t cbToWrite;
+    uint64_t offWriteAt;
 
-    int rc = VbglR3GuestCtrlFileGetWriteAt(pHostCtx, &uHandle,
-                                           pvScratchBuf, (uint32_t)cbScratchBuf,
-                                           &cbToWrite, (uint64_t *)&iOffset);
+    int rc = VbglR3GuestCtrlFileGetWriteAt(pHostCtx, &uHandle, pvScratchBuf, (uint32_t)cbScratchBuf, &cbToWrite, &offWriteAt);
     if (RT_SUCCESS(rc))
     {
         size_t cbWritten = 0;
-        pFile = gstcntlSessionFileGetLocked(pSession, uHandle);
+        pFile = vgsvcGstCtrlSessionFileGetLocked(pSession, uHandle);
         if (pFile)
         {
-            rc = RTFileWriteAt(pFile->hFile, iOffset,
-                               pvScratchBuf, cbToWrite, &cbWritten);
+            rc = RTFileWriteAt(pFile->hFile, (RTFOFF)offWriteAt, pvScratchBuf, cbToWrite, &cbWritten);
 #ifdef DEBUG
-            VBoxServiceVerbose(4, "[File %s]: Writing iOffset=%RI64, pvScratchBuf=%p, cbToWrite=%RU32, cbWritten=%zu, rc=%Rrc\n",
-                               pFile->szName, iOffset, pvScratchBuf, cbToWrite, cbWritten, rc);
+            VGSvcVerbose(4, "[File %s]: Writing offWriteAt=%RI64, pvScratchBuf=%p, cbToWrite=%RU32, cbWritten=%zu, rc=%Rrc\n",
+                         pFile->szName, offWriteAt, pvScratchBuf, cbToWrite, cbWritten, rc);
 #endif
         }
         else
@@ -512,21 +461,20 @@ static int gstcntlSessionHandleFileWriteAt(const PVBOXSERVICECTRLSESSION pSessio
         /* Report back in any case. */
         int rc2 = VbglR3GuestCtrlFileCbWrite(pHostCtx, rc, (uint32_t)cbWritten);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to report file write status, rc=%Rrc\n", rc2);
+            VGSvcError("Failed to report file write status, rc=%Rrc\n", rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Writing file \"%s\" at offset (handle=%RU32) returned rc=%Rrc\n",
-                       pFile ? pFile->szName : "<Not found>", uHandle, rc);
+    VGSvcVerbose(4, "Writing file '%s' at offset (handle=%RU32) returned rc=%Rrc\n",
+                 pFile ? pFile->szName : "<Not found>", uHandle, rc);
 #endif
     return rc;
 }
 
 
-static int gstcntlSessionHandleFileSeek(const PVBOXSERVICECTRLSESSION pSession,
-                                        PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlSessionHandleFileSeek(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -535,30 +483,27 @@ static int gstcntlSessionHandleFileSeek(const PVBOXSERVICECTRLSESSION pSession,
 
     uint32_t uHandle = 0;
     uint32_t uSeekMethod;
-    uint64_t uOffset; /* Will be converted to int64_t. */
-
-    uint64_t uOffsetActual = 0;
-
-    int rc = VbglR3GuestCtrlFileGetSeek(pHostCtx, &uHandle,
-                                        &uSeekMethod, &uOffset);
+    uint64_t offSeek; /* Will be converted to int64_t. */
+    int rc = VbglR3GuestCtrlFileGetSeek(pHostCtx, &uHandle, &uSeekMethod, &offSeek);
     if (RT_SUCCESS(rc))
     {
-        pFile = gstcntlSessionFileGetLocked(pSession, uHandle);
+        uint64_t offActual = 0;
+        pFile = vgsvcGstCtrlSessionFileGetLocked(pSession, uHandle);
         if (pFile)
         {
-            unsigned uSeekMethodIPRT;
+            unsigned uSeekMethodIprt;
             switch (uSeekMethod)
             {
                 case GUEST_FILE_SEEKTYPE_BEGIN:
-                    uSeekMethodIPRT = RTFILE_SEEK_BEGIN;
+                    uSeekMethodIprt = RTFILE_SEEK_BEGIN;
                     break;
 
                 case GUEST_FILE_SEEKTYPE_CURRENT:
-                    uSeekMethodIPRT = RTFILE_SEEK_CURRENT;
+                    uSeekMethodIprt = RTFILE_SEEK_CURRENT;
                     break;
 
                 case GUEST_FILE_SEEKTYPE_END:
-                    uSeekMethodIPRT = RTFILE_SEEK_END;
+                    uSeekMethodIprt = RTFILE_SEEK_END;
                     break;
 
                 default:
@@ -568,11 +513,10 @@ static int gstcntlSessionHandleFileSeek(const PVBOXSERVICECTRLSESSION pSession,
 
             if (RT_SUCCESS(rc))
             {
-                rc = RTFileSeek(pFile->hFile, (int64_t)uOffset,
-                                uSeekMethodIPRT, &uOffsetActual);
+                rc = RTFileSeek(pFile->hFile, (int64_t)offSeek, uSeekMethodIprt, &offActual);
 #ifdef DEBUG
-                VBoxServiceVerbose(4, "[File %s]: Seeking to iOffset=%RI64, uSeekMethodIPRT=%RU16, rc=%Rrc\n",
-                                   pFile->szName, (int64_t)uOffset, uSeekMethodIPRT, rc);
+                VGSvcVerbose(4, "[File %s]: Seeking to offSeek=%RI64, uSeekMethodIPRT=%RU16, rc=%Rrc\n",
+                             pFile->szName, offSeek, uSeekMethodIprt, rc);
 #endif
             }
         }
@@ -580,23 +524,21 @@ static int gstcntlSessionHandleFileSeek(const PVBOXSERVICECTRLSESSION pSession,
             rc = VERR_NOT_FOUND;
 
         /* Report back in any case. */
-        int rc2 = VbglR3GuestCtrlFileCbSeek(pHostCtx, rc, uOffsetActual);
+        int rc2 = VbglR3GuestCtrlFileCbSeek(pHostCtx, rc, offActual);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to report file seek status, rc=%Rrc\n", rc2);
+            VGSvcError("Failed to report file seek status, rc=%Rrc\n", rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Seeking file \"%s\" (handle=%RU32) returned rc=%Rrc\n",
-                       pFile ? pFile->szName : "<Not found>", uHandle, rc);
+    VGSvcVerbose(4, "Seeking file '%s' (handle=%RU32) returned rc=%Rrc\n", pFile ? pFile->szName : "<Not found>", uHandle, rc);
 #endif
     return rc;
 }
 
 
-static int gstcntlSessionHandleFileTell(const PVBOXSERVICECTRLSESSION pSession,
-                                        PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlSessionHandleFileTell(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -604,87 +546,82 @@ static int gstcntlSessionHandleFileTell(const PVBOXSERVICECTRLSESSION pSession,
     PVBOXSERVICECTRLFILE pFile = NULL;
 
     uint32_t uHandle = 0;
-    uint64_t uOffsetActual = 0;
-
     int rc = VbglR3GuestCtrlFileGetTell(pHostCtx, &uHandle);
     if (RT_SUCCESS(rc))
     {
-        pFile = gstcntlSessionFileGetLocked(pSession, uHandle);
+        uint64_t off = 0;
+        pFile = vgsvcGstCtrlSessionFileGetLocked(pSession, uHandle);
         if (pFile)
         {
-            uOffsetActual = RTFileTell(pFile->hFile);
+            off = RTFileTell(pFile->hFile);
 #ifdef DEBUG
-            VBoxServiceVerbose(4, "[File %s]: Telling uOffsetActual=%RU64\n",
-                               pFile->szName, uOffsetActual);
+            VGSvcVerbose(4, "[File %s]: Telling off=%RU64\n", pFile->szName, off);
 #endif
         }
         else
             rc = VERR_NOT_FOUND;
 
         /* Report back in any case. */
-        int rc2 = VbglR3GuestCtrlFileCbTell(pHostCtx, rc, uOffsetActual);
+        int rc2 = VbglR3GuestCtrlFileCbTell(pHostCtx, rc, off);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to report file tell status, rc=%Rrc\n", rc2);
+            VGSvcError("Failed to report file tell status, rc=%Rrc\n", rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Telling file \"%s\" (handle=%RU32) returned rc=%Rrc\n",
-                       pFile ? pFile->szName : "<Not found>", uHandle, rc);
+    VGSvcVerbose(4, "Telling file '%s' (handle=%RU32) returned rc=%Rrc\n", pFile ? pFile->szName : "<Not found>", uHandle, rc);
 #endif
     return rc;
 }
 
 
-static int gstcntlSessionHandlePathRename(PVBOXSERVICECTRLSESSION pSession,
-                                          PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlSessionHandlePathRename(PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
 
     char szSource[RTPATH_MAX];
     char szDest[RTPATH_MAX];
-    uint32_t uFlags = 0;
+    uint32_t fFlags = 0;
 
     int rc = VbglR3GuestCtrlPathGetRename(pHostCtx,
                                           szSource, sizeof(szSource),
                                           szDest, sizeof(szDest),
                                           /* Flags of type PATHRENAME_FLAG_. */
-                                          &uFlags);
+                                          &fFlags);
     if (RT_SUCCESS(rc))
     {
-        if (uFlags & ~PATHRENAME_FLAG_VALID_MASK)
+        if (fFlags & ~PATHRENAME_FLAG_VALID_MASK)
             rc = VERR_NOT_SUPPORTED;
 
-        VBoxServiceVerbose(4, "Renaming \"%s\" to \"%s\", uFlags=0x%x, rc=%Rrc\n",
-                           szSource, szDest, uFlags, rc);
+        VGSvcVerbose(4, "Renaming '%s' to '%s', fFlags=0x%x, rc=%Rrc\n", szSource, szDest, fFlags, rc);
 
         if (RT_SUCCESS(rc))
         {
-            if (uFlags & PATHRENAME_FLAG_NO_REPLACE)
-                uFlags |= RTPATHRENAME_FLAGS_NO_REPLACE;
+/** @todo r=bird: shouldn't you use a different variable here for the IPRT flags??? */
+            if (fFlags & PATHRENAME_FLAG_NO_REPLACE)
+                fFlags |= RTPATHRENAME_FLAGS_NO_REPLACE;
 
-            if (uFlags & PATHRENAME_FLAG_REPLACE)
-                uFlags |= RTPATHRENAME_FLAGS_REPLACE;
+            if (fFlags & PATHRENAME_FLAG_REPLACE)
+                fFlags |= RTPATHRENAME_FLAGS_REPLACE;
 
-            if (uFlags & PATHRENAME_FLAG_NO_SYMLINKS)
-                uFlags |= RTPATHRENAME_FLAGS_NO_SYMLINKS;
+            if (fFlags & PATHRENAME_FLAG_NO_SYMLINKS)
+                fFlags |= RTPATHRENAME_FLAGS_NO_SYMLINKS;
 
-            rc = RTPathRename(szSource, szDest, uFlags);
+            rc = RTPathRename(szSource, szDest, fFlags);
         }
 
         /* Report back in any case. */
         int rc2 = VbglR3GuestCtrlMsgReply(pHostCtx, rc);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to report renaming status, rc=%Rrc\n", rc2);
+            VGSvcError("Failed to report renaming status, rc=%Rrc\n", rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Renaming \"%s\" to \"%s\" returned rc=%Rrc\n",
-                       szSource, szDest, rc);
+    VGSvcVerbose(4, "Renaming '%s' to '%s' returned rc=%Rrc\n", szSource, szDest, rc);
 #endif
     return rc;
 }
@@ -693,12 +630,11 @@ static int gstcntlSessionHandlePathRename(PVBOXSERVICECTRLSESSION pSession,
 /**
  * Handles starting a guest processes.
  *
- * @returns IPRT status code.
+ * @returns VBox status code.
  * @param   pSession        Guest session.
  * @param   pHostCtx        Host context.
  */
-int gstcntlSessionHandleProcExec(PVBOXSERVICECTRLSESSION pSession,
-                                 PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlSessionHandleProcExec(PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -755,19 +691,17 @@ int gstcntlSessionHandleProcExec(PVBOXSERVICECTRLSESSION pSession,
                                          startupInfo.uAffinity,  sizeof(startupInfo.uAffinity), &startupInfo.uNumAffinity);
         if (RT_SUCCESS(rc))
         {
-            VBoxServiceVerbose(3, "Request to start process szCmd=%s, uFlags=0x%x, szArgs=%s, szEnv=%s, uTimeout=%RU32\n",
-                               startupInfo.szCmd, startupInfo.uFlags,
-                               startupInfo.uNumArgs ? startupInfo.szArgs : "<None>",
-                               startupInfo.uNumEnvVars ? startupInfo.szEnv : "<None>",
-                               startupInfo.uTimeLimitMS);
+            VGSvcVerbose(3, "Request to start process szCmd=%s, fFlags=0x%x, szArgs=%s, szEnv=%s, uTimeout=%RU32\n",
+                         startupInfo.szCmd, startupInfo.uFlags,
+                         startupInfo.uNumArgs ? startupInfo.szArgs : "<None>",
+                         startupInfo.uNumEnvVars ? startupInfo.szEnv : "<None>",
+                         startupInfo.uTimeLimitMS);
 
-            rc = GstCntlSessionProcessStartAllowed(pSession, &fStartAllowed);
+            rc = VGSvcGstCtrlSessionProcessStartAllowed(pSession, &fStartAllowed);
             if (RT_SUCCESS(rc))
             {
                 if (fStartAllowed)
-                {
-                    rc = GstCntlProcessStart(pSession, &startupInfo, pHostCtx->uContextID);
-                }
+                    rc = VGSvcGstCtrlProcessStart(pSession, &startupInfo, pHostCtx->uContextID);
                 else
                     rc = VERR_MAX_PROCS_REACHED; /* Maximum number of processes reached. */
             }
@@ -777,8 +711,8 @@ int gstcntlSessionHandleProcExec(PVBOXSERVICECTRLSESSION pSession,
     /* In case of an error we need to notify the host to not wait forever for our response. */
     if (RT_FAILURE(rc))
     {
-        VBoxServiceError("Starting process failed with rc=%Rrc, protocol=%RU32, parameters=%RU32\n",
-                         rc, pHostCtx->uProtocol, pHostCtx->uNumParms);
+        VGSvcError("Starting process failed with rc=%Rrc, protocol=%RU32, parameters=%RU32\n",
+                   rc, pHostCtx->uProtocol, pHostCtx->uNumParms);
 
         /* Don't report back if we didn't supply sufficient buffer for getting
          * the actual command -- we don't have the matching context ID. */
@@ -792,7 +726,7 @@ int gstcntlSessionHandleProcExec(PVBOXSERVICECTRLSESSION pSession,
                                                   PROC_STS_ERROR, rc,
                                                   NULL /* pvData */, 0 /* cbData */);
             if (RT_FAILURE(rc2))
-                VBoxServiceError("Error sending start process status to host, rc=%Rrc\n", rc2);
+                VGSvcError("Error sending start process status to host, rc=%Rrc\n", rc2);
         }
     }
 
@@ -803,15 +737,15 @@ int gstcntlSessionHandleProcExec(PVBOXSERVICECTRLSESSION pSession,
 /**
  * Sends stdin input to a specific guest process.
  *
- * @returns IPRT status code.
- * @param pSession            The session which is in charge.
- * @param pHostCtx            The host context to use.
- * @param pvScratchBuf        The scratch buffer.
- * @param cbScratchBuf        The scratch buffer size for retrieving the input data.
+ * @returns VBox status code.
+ * @param   pSession            The session which is in charge.
+ * @param   pHostCtx            The host context to use.
+ * @param   pvScratchBuf        The scratch buffer.
+ * @param   cbScratchBuf        The scratch buffer size for retrieving the input
+ *                              data.
  */
-int gstcntlSessionHandleProcInput(PVBOXSERVICECTRLSESSION pSession,
-                                  PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                                  void *pvScratchBuf, size_t cbScratchBuf)
+static int vgsvcGstCtrlSessionHandleProcInput(PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                                              void *pvScratchBuf, size_t cbScratchBuf)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -819,7 +753,7 @@ int gstcntlSessionHandleProcInput(PVBOXSERVICECTRLSESSION pSession,
     AssertPtrReturn(pvScratchBuf, VERR_INVALID_POINTER);
 
     uint32_t uPID;
-    uint32_t uFlags;
+    uint32_t fFlags;
     uint32_t cbSize;
 
     uint32_t uStatus = INPUT_STS_UNDEFINED; /* Status sent back to the host. */
@@ -828,17 +762,14 @@ int gstcntlSessionHandleProcInput(PVBOXSERVICECTRLSESSION pSession,
     /*
      * Ask the host for the input data.
      */
-    int rc = VbglR3GuestCtrlProcGetInput(pHostCtx, &uPID, &uFlags,
+    int rc = VbglR3GuestCtrlProcGetInput(pHostCtx, &uPID, &fFlags,
                                          pvScratchBuf, (uint32_t)cbScratchBuf, &cbSize);
     if (RT_FAILURE(rc))
-    {
-        VBoxServiceError("Failed to retrieve process input command for PID=%RU32, rc=%Rrc\n",
-                         uPID, rc);
-    }
+        VGSvcError("Failed to retrieve process input command for PID=%RU32, rc=%Rrc\n", uPID, rc);
     else if (cbSize > cbScratchBuf)
     {
-        VBoxServiceError("Too much process input received, rejecting: uPID=%RU32, cbSize=%RU32, cbScratchBuf=%RU32\n",
-                         uPID, cbSize, cbScratchBuf);
+        VGSvcError("Too much process input received, rejecting: uPID=%RU32, cbSize=%RU32, cbScratchBuf=%RU32\n",
+                   uPID, cbSize, cbScratchBuf);
         rc = VERR_TOO_MUCH_DATA;
     }
     else
@@ -847,32 +778,28 @@ int gstcntlSessionHandleProcInput(PVBOXSERVICECTRLSESSION pSession,
          * Is this the last input block we need to deliver? Then let the pipe know ...
          */
         bool fPendingClose = false;
-        if (uFlags & INPUT_FLAG_EOF)
+        if (fFlags & INPUT_FLAG_EOF)
         {
             fPendingClose = true;
 #ifdef DEBUG
-            VBoxServiceVerbose(4, "Got last process input block for PID=%RU32 (%RU32 bytes) ...\n",
-                               uPID, cbSize);
+            VGSvcVerbose(4, "Got last process input block for PID=%RU32 (%RU32 bytes) ...\n", uPID, cbSize);
 #endif
         }
 
-        PVBOXSERVICECTRLPROCESS pProcess = GstCntlSessionRetainProcess(pSession, uPID);
+        PVBOXSERVICECTRLPROCESS pProcess = VGSvcGstCtrlSessionRetainProcess(pSession, uPID);
         if (pProcess)
         {
-            rc = GstCntlProcessHandleInput(pProcess, pHostCtx, fPendingClose,
-                                           pvScratchBuf, cbSize);
+            rc = VGSvcGstCtrlProcessHandleInput(pProcess, pHostCtx, fPendingClose, pvScratchBuf, cbSize);
             if (RT_FAILURE(rc))
-                VBoxServiceError("Error handling input command for PID=%RU32, rc=%Rrc\n",
-                                 uPID, rc);
-            GstCntlProcessRelease(pProcess);
+                VGSvcError("Error handling input command for PID=%RU32, rc=%Rrc\n", uPID, rc);
+            VGSvcGstCtrlProcessRelease(pProcess);
         }
         else
             rc = VERR_NOT_FOUND;
     }
 
 #ifdef DEBUG
-    VBoxServiceVerbose(4, "Setting input for PID=%RU32 resulted in rc=%Rrc\n",
-                       uPID, rc);
+    VGSvcVerbose(4, "Setting input for PID=%RU32 resulted in rc=%Rrc\n", uPID, rc);
 #endif
     return rc;
 }
@@ -881,44 +808,40 @@ int gstcntlSessionHandleProcInput(PVBOXSERVICECTRLSESSION pSession,
 /**
  * Gets stdout/stderr output of a specific guest process.
  *
- * @return IPRT status code.
- * @param pSession            The session which is in charge.
- * @param pHostCtx            The host context to use.
+ * @returns VBox status code.
+ * @param   pSession            The session which is in charge.
+ * @param   pHostCtx            The host context to use.
  */
-int gstcntlSessionHandleProcOutput(PVBOXSERVICECTRLSESSION pSession,
-                                   PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlSessionHandleProcOutput(PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
 
     uint32_t uPID;
     uint32_t uHandleID;
-    uint32_t uFlags;
+    uint32_t fFlags;
 
-    int rc = VbglR3GuestCtrlProcGetOutput(pHostCtx, &uPID, &uHandleID, &uFlags);
+    int rc = VbglR3GuestCtrlProcGetOutput(pHostCtx, &uPID, &uHandleID, &fFlags);
 #ifdef DEBUG_andy
-    VBoxServiceVerbose(4, "Getting output for PID=%RU32, CID=%RU32, uHandleID=%RU32, uFlags=%RU32\n",
-                       uPID, pHostCtx->uContextID, uHandleID, uFlags);
+    VGSvcVerbose(4, "Getting output for PID=%RU32, CID=%RU32, uHandleID=%RU32, fFlags=%RU32\n",
+                 uPID, pHostCtx->uContextID, uHandleID, fFlags);
 #endif
     if (RT_SUCCESS(rc))
     {
-        PVBOXSERVICECTRLPROCESS pProcess = GstCntlSessionRetainProcess(pSession, uPID);
+        PVBOXSERVICECTRLPROCESS pProcess = VGSvcGstCtrlSessionRetainProcess(pSession, uPID);
         if (pProcess)
         {
-            rc = GstCntlProcessHandleOutput(pProcess, pHostCtx,
-                                            uHandleID, _64K /* cbToRead */, uFlags);
+            rc = VGSvcGstCtrlProcessHandleOutput(pProcess, pHostCtx, uHandleID, _64K /* cbToRead */, fFlags);
             if (RT_FAILURE(rc))
-                VBoxServiceError("Error getting output for PID=%RU32, rc=%Rrc\n",
-                                 uPID, rc);
-            GstCntlProcessRelease(pProcess);
+                VGSvcError("Error getting output for PID=%RU32, rc=%Rrc\n", uPID, rc);
+            VGSvcGstCtrlProcessRelease(pProcess);
         }
         else
             rc = VERR_NOT_FOUND;
     }
 
 #ifdef DEBUG_andy
-    VBoxServiceVerbose(4, "Getting output for PID=%RU32 resulted in rc=%Rrc\n",
-                       uPID, rc);
+    VGSvcVerbose(4, "Getting output for PID=%RU32 resulted in rc=%Rrc\n", uPID, rc);
 #endif
     return rc;
 }
@@ -927,12 +850,11 @@ int gstcntlSessionHandleProcOutput(PVBOXSERVICECTRLSESSION pSession,
 /**
  * Tells a guest process to terminate.
  *
- * @return  IPRT status code.
- * @param pSession            The session which is in charge.
- * @param pHostCtx            The host context to use.
+ * @returns VBox status code.
+ * @param   pSession            The session which is in charge.
+ * @param   pHostCtx            The host context to use.
  */
-int gstcntlSessionHandleProcTerminate(const PVBOXSERVICECTRLSESSION pSession,
-                                      PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlSessionHandleProcTerminate(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -941,27 +863,25 @@ int gstcntlSessionHandleProcTerminate(const PVBOXSERVICECTRLSESSION pSession,
     int rc = VbglR3GuestCtrlProcGetTerminate(pHostCtx, &uPID);
     if (RT_SUCCESS(rc))
     {
-        PVBOXSERVICECTRLPROCESS pProcess = GstCntlSessionRetainProcess(pSession, uPID);
+        PVBOXSERVICECTRLPROCESS pProcess = VGSvcGstCtrlSessionRetainProcess(pSession, uPID);
         if (pProcess)
         {
-            rc = GstCntlProcessHandleTerm(pProcess);
+            rc = VGSvcGstCtrlProcessHandleTerm(pProcess);
 
-            GstCntlProcessRelease(pProcess);
+            VGSvcGstCtrlProcessRelease(pProcess);
         }
         else
             rc = VERR_NOT_FOUND;
     }
 
 #ifdef DEBUG_andy
-    VBoxServiceVerbose(4, "Terminating PID=%RU32 resulted in rc=%Rrc\n",
-                       uPID, rc);
+    VGSvcVerbose(4, "Terminating PID=%RU32 resulted in rc=%Rrc\n", uPID, rc);
 #endif
     return rc;
 }
 
 
-int gstcntlSessionHandleProcWaitFor(const PVBOXSERVICECTRLSESSION pSession,
-                                    PVBGLR3GUESTCTRLCMDCTX pHostCtx)
+static int vgsvcGstCtrlSessionHandleProcWaitFor(const PVBOXSERVICECTRLSESSION pSession, PVBGLR3GUESTCTRLCMDCTX pHostCtx)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
@@ -972,11 +892,11 @@ int gstcntlSessionHandleProcWaitFor(const PVBOXSERVICECTRLSESSION pSession,
     int rc = VbglR3GuestCtrlProcGetWaitFor(pHostCtx, &uPID, &uWaitFlags, &uTimeoutMS);
     if (RT_SUCCESS(rc))
     {
-        PVBOXSERVICECTRLPROCESS pProcess = GstCntlSessionRetainProcess(pSession, uPID);
+        PVBOXSERVICECTRLPROCESS pProcess = VGSvcGstCtrlSessionRetainProcess(pSession, uPID);
         if (pProcess)
         {
             rc = VERR_NOT_IMPLEMENTED; /** @todo */
-            GstCntlProcessRelease(pProcess);
+            VGSvcGstCtrlProcessRelease(pProcess);
         }
         else
             rc = VERR_NOT_FOUND;
@@ -986,128 +906,129 @@ int gstcntlSessionHandleProcWaitFor(const PVBOXSERVICECTRLSESSION pSession,
 }
 
 
-int GstCntlSessionHandler(PVBOXSERVICECTRLSESSION pSession,
-                          uint32_t uMsg, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
-                          void *pvScratchBuf, size_t cbScratchBuf,
-                          volatile bool *pfShutdown)
+int VGSvcGstCtrlSessionHandler(PVBOXSERVICECTRLSESSION pSession, uint32_t uMsg, PVBGLR3GUESTCTRLCMDCTX pHostCtx,
+                               void *pvScratchBuf, size_t cbScratchBuf, volatile bool *pfShutdown)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
     AssertPtrReturn(pvScratchBuf, VERR_INVALID_POINTER);
     AssertPtrReturn(pfShutdown, VERR_INVALID_POINTER);
 
-    int rc = VINF_SUCCESS;
-    /**
+
+    /*
      * Only anonymous sessions (that is, sessions which run with local
      * service privileges) or spawned session processes can do certain
      * operations.
      */
-    bool fImpersonated = (   pSession->fFlags & VBOXSERVICECTRLSESSION_FLAG_SPAWN
-                          || pSession->fFlags & VBOXSERVICECTRLSESSION_FLAG_ANONYMOUS);
-
+    bool const fImpersonated = RT_BOOL(pSession->fFlags & (  VBOXSERVICECTRLSESSION_FLAG_SPAWN
+                                                           | VBOXSERVICECTRLSESSION_FLAG_ANONYMOUS));
+    int rc;
     switch (uMsg)
     {
         case HOST_SESSION_CLOSE:
             /* Shutdown (this spawn). */
-            rc = GstCntlSessionClose(pSession);
+            rc = VGSvcGstCtrlSessionClose(pSession);
             *pfShutdown = true; /* Shutdown in any case. */
             break;
 
         case HOST_DIR_REMOVE:
-            rc = fImpersonated
-               ? gstcntlSessionHandleDirRemove(pSession, pHostCtx)
-               : VERR_NOT_SUPPORTED;
+            if (fImpersonated)
+                rc = vgsvcGstCtrlSessionHandleDirRemove(pSession, pHostCtx);
+            else
+                rc = VERR_NOT_SUPPORTED;
             break;
 
         case HOST_EXEC_CMD:
-            rc = gstcntlSessionHandleProcExec(pSession, pHostCtx);
+            rc = vgsvcGstCtrlSessionHandleProcExec(pSession, pHostCtx);
             break;
 
         case HOST_EXEC_SET_INPUT:
-            rc = gstcntlSessionHandleProcInput(pSession, pHostCtx,
-                                               pvScratchBuf, cbScratchBuf);
+            rc = vgsvcGstCtrlSessionHandleProcInput(pSession, pHostCtx, pvScratchBuf, cbScratchBuf);
             break;
 
         case HOST_EXEC_GET_OUTPUT:
-            rc = gstcntlSessionHandleProcOutput(pSession, pHostCtx);
+            rc = vgsvcGstCtrlSessionHandleProcOutput(pSession, pHostCtx);
             break;
 
         case HOST_EXEC_TERMINATE:
-            rc = gstcntlSessionHandleProcTerminate(pSession, pHostCtx);
+            rc = vgsvcGstCtrlSessionHandleProcTerminate(pSession, pHostCtx);
             break;
 
         case HOST_EXEC_WAIT_FOR:
-            rc = gstcntlSessionHandleProcWaitFor(pSession, pHostCtx);
+            rc = vgsvcGstCtrlSessionHandleProcWaitFor(pSession, pHostCtx);
             break;
 
         case HOST_FILE_OPEN:
-            rc = fImpersonated
-               ? gstcntlSessionHandleFileOpen(pSession, pHostCtx)
-               : VERR_NOT_SUPPORTED;
+            if (fImpersonated)
+                rc = vgsvcGstCtrlSessionHandleFileOpen(pSession, pHostCtx);
+            else
+                rc = VERR_NOT_SUPPORTED;
             break;
 
         case HOST_FILE_CLOSE:
-            rc = fImpersonated
-               ? gstcntlSessionHandleFileClose(pSession, pHostCtx)
-               : VERR_NOT_SUPPORTED;
+            if (fImpersonated)
+                rc = vgsvcGstCtrlSessionHandleFileClose(pSession, pHostCtx);
+            else
+                rc = VERR_NOT_SUPPORTED;
             break;
 
         case HOST_FILE_READ:
-            rc = fImpersonated
-               ? gstcntlSessionHandleFileRead(pSession, pHostCtx,
-                                              pvScratchBuf, cbScratchBuf)
-               : VERR_NOT_SUPPORTED;
+            if (fImpersonated)
+                rc = vgsvcGstCtrlSessionHandleFileRead(pSession, pHostCtx, pvScratchBuf, cbScratchBuf);
+            else
+                rc = VERR_NOT_SUPPORTED;
             break;
 
         case HOST_FILE_READ_AT:
-            rc = fImpersonated
-               ? gstcntlSessionHandleFileReadAt(pSession, pHostCtx,
-                                                pvScratchBuf, cbScratchBuf)
-               : VERR_NOT_SUPPORTED;
+            if (fImpersonated)
+                rc = vgsvcGstCtrlSessionHandleFileReadAt(pSession, pHostCtx, pvScratchBuf, cbScratchBuf);
+            else
+                rc = VERR_NOT_SUPPORTED;
             break;
 
         case HOST_FILE_WRITE:
-            rc = fImpersonated
-               ? gstcntlSessionHandleFileWrite(pSession, pHostCtx,
-                                               pvScratchBuf, cbScratchBuf)
-               : VERR_NOT_SUPPORTED;
+            if (fImpersonated)
+                rc = vgsvcGstCtrlSessionHandleFileWrite(pSession, pHostCtx, pvScratchBuf, cbScratchBuf);
+            else
+                rc = VERR_NOT_SUPPORTED;
             break;
 
         case HOST_FILE_WRITE_AT:
-            rc = fImpersonated
-               ? gstcntlSessionHandleFileWriteAt(pSession, pHostCtx,
-                                                 pvScratchBuf, cbScratchBuf)
-               : VERR_NOT_SUPPORTED;
+            if (fImpersonated)
+                rc = vgsvcGstCtrlSessionHandleFileWriteAt(pSession, pHostCtx, pvScratchBuf, cbScratchBuf);
+            else
+                rc = VERR_NOT_SUPPORTED;
             break;
 
         case HOST_FILE_SEEK:
-            rc = fImpersonated
-               ? gstcntlSessionHandleFileSeek(pSession, pHostCtx)
-               : VERR_NOT_SUPPORTED;
+            if (fImpersonated)
+                rc = vgsvcGstCtrlSessionHandleFileSeek(pSession, pHostCtx);
+            else
+                rc = VERR_NOT_SUPPORTED;
             break;
 
         case HOST_FILE_TELL:
-            rc = fImpersonated
-               ? gstcntlSessionHandleFileTell(pSession, pHostCtx)
-               : VERR_NOT_SUPPORTED;
+            if (fImpersonated)
+                rc = vgsvcGstCtrlSessionHandleFileTell(pSession, pHostCtx);
+            else
+                rc = VERR_NOT_SUPPORTED;
             break;
 
         case HOST_PATH_RENAME:
-            rc = fImpersonated
-               ? gstcntlSessionHandlePathRename(pSession, pHostCtx)
-               : VERR_NOT_SUPPORTED;
+            if (fImpersonated)
+                rc = vgsvcGstCtrlSessionHandlePathRename(pSession, pHostCtx);
+            else
+                rc = VERR_NOT_SUPPORTED;
             break;
 
         default:
             rc = VbglR3GuestCtrlMsgSkip(pHostCtx->uClientID);
-            VBoxServiceVerbose(3, "Unsupported message (uMsg=%RU32, cParms=%RU32) from host, skipping\n",
-                               uMsg, pHostCtx->uNumParms);
+            VGSvcVerbose(3, "Unsupported message (uMsg=%RU32, cParms=%RU32) from host, skipping\n", uMsg, pHostCtx->uNumParms);
             break;
     }
 
     if (RT_FAILURE(rc))
-        VBoxServiceError("Error while handling message (uMsg=%RU32, cParms=%RU32), rc=%Rrc\n",
-                         uMsg, pHostCtx->uNumParms, rc);
+        VGSvcError("Error while handling message (uMsg=%RU32, cParms=%RU32), rc=%Rrc\n", uMsg, pHostCtx->uNumParms, rc);
 
     return rc;
 }
@@ -1117,12 +1038,12 @@ int GstCntlSessionHandler(PVBOXSERVICECTRLSESSION pSession,
  * Thread main routine for a spawned guest session process.
  * This thread runs in the main executable to control the spawned session process.
  *
- * @return IPRT status code.
- * @param  RTTHREAD             Pointer to the thread's data.
- * @param  void*                User-supplied argument pointer.
+ * @returns VBox status code.
+ * @param   hThreadSelf     Thread handle.
+ * @param   pvUser          Pointer to a VBOXSERVICECTRLSESSIONTHREAD structure.
  *
  */
-static DECLCALLBACK(int) gstcntlSessionThread(RTTHREAD ThreadSelf, void *pvUser)
+static DECLCALLBACK(int) vgsvcGstCtrlSessionThread(RTTHREAD hThreadSelf, void *pvUser)
 {
     PVBOXSERVICECTRLSESSIONTHREAD pThread = (PVBOXSERVICECTRLSESSIONTHREAD)pvUser;
     AssertPtrReturn(pThread, VERR_INVALID_POINTER);
@@ -1133,28 +1054,26 @@ static DECLCALLBACK(int) gstcntlSessionThread(RTTHREAD ThreadSelf, void *pvUser)
     int rc = VbglR3GuestCtrlConnect(&uClientID);
     if (RT_SUCCESS(rc))
     {
-        VBoxServiceVerbose(3, "Session ID=%RU32 thread running, client ID=%RU32\n",
-                           uSessionID, uClientID);
+        VGSvcVerbose(3, "Session ID=%RU32 thread running, client ID=%RU32\n", uSessionID, uClientID);
 
         /* The session thread is not interested in receiving any commands;
          * tell the host service. */
-        rc = VbglR3GuestCtrlMsgFilterSet(uClientID, 0 /* Skip all */,
-                                         0 /* Filter mask to add */, 0 /* Filter mask to remove */);
+        rc = VbglR3GuestCtrlMsgFilterSet(uClientID, 0 /* Skip all */, 0 /* Filter mask to add */, 0 /* Filter mask to remove */);
         if (RT_FAILURE(rc))
         {
-            VBoxServiceError("Unable to set message filter, rc=%Rrc\n", rc);
+            VGSvcError("Unable to set message filter, rc=%Rrc\n", rc);
             /* Non-critical. */
             rc = VINF_SUCCESS;
         }
     }
     else
-        VBoxServiceError("Error connecting to guest control service, rc=%Rrc\n", rc);
+        VGSvcError("Error connecting to guest control service, rc=%Rrc\n", rc);
 
     if (RT_FAILURE(rc))
         pThread->fShutdown = true;
 
     /* Let caller know that we're done initializing, regardless of the result. */
-    int rc2 = RTThreadUserSignal(RTThreadSelf());
+    int rc2 = RTThreadUserSignal(hThreadSelf);
     AssertRC(rc2);
 
     if (RT_FAILURE(rc))
@@ -1172,56 +1091,57 @@ static DECLCALLBACK(int) gstcntlSessionThread(RTTHREAD ThreadSelf, void *pvUser)
 
         for (;;)
         {
-            rcWait = RTProcWaitNoResume(pThread->hProcess, RTPROCWAIT_FLAGS_NOBLOCK,
-                                        &ProcessStatus);
+            rcWait = RTProcWaitNoResume(pThread->hProcess, RTPROCWAIT_FLAGS_NOBLOCK, &ProcessStatus);
             if (RT_UNLIKELY(rcWait == VERR_INTERRUPTED))
                 continue;
-            else if (   rcWait == VINF_SUCCESS
-                     || rcWait == VERR_PROCESS_NOT_FOUND)
+
+            if (   rcWait == VINF_SUCCESS
+                || rcWait == VERR_PROCESS_NOT_FOUND)
             {
                 fProcessAlive = false;
                 break;
             }
-            else
-                AssertMsgBreak(rcWait == VERR_PROCESS_RUNNING,
-                               ("Got unexpected rc=%Rrc while waiting for session process termination\n", rcWait));
+            AssertMsgBreak(rcWait == VERR_PROCESS_RUNNING,
+                           ("Got unexpected rc=%Rrc while waiting for session process termination\n", rcWait));
 
             if (ASMAtomicReadBool(&pThread->fShutdown))
             {
                 if (!u64TimeoutStart)
                 {
-                    VBoxServiceVerbose(3, "Notifying guest session process (PID=%RU32, session ID=%RU32) ...\n",
-                                       pThread->hProcess, uSessionID);
+                    VGSvcVerbose(3, "Notifying guest session process (PID=%RU32, session ID=%RU32) ...\n",
+                                 pThread->hProcess, uSessionID);
 
-                    VBGLR3GUESTCTRLCMDCTX hostCtx = { uClientID,
-                                                      VBOX_GUESTCTRL_CONTEXTID_MAKE_SESSION(uSessionID),
-                                                      pThread->StartupInfo.uProtocol, 2 /* uNumParms */ };
-                    rc = VbglR3GuestCtrlSessionClose(&hostCtx, 0 /* uFlags */);
+                    VBGLR3GUESTCTRLCMDCTX hostCtx =
+                    {
+                        /* .idClient  = */  uClientID,
+                        /* .idContext = */  VBOX_GUESTCTRL_CONTEXTID_MAKE_SESSION(uSessionID),
+                        /* .uProtocol = */  pThread->StartupInfo.uProtocol,
+                        /* .cParams   = */  2
+                    };
+                    rc = VbglR3GuestCtrlSessionClose(&hostCtx, 0 /* fFlags */);
                     if (RT_FAILURE(rc))
                     {
-                        VBoxServiceError("Unable to notify guest session process (PID=%RU32, session ID=%RU32), rc=%Rrc\n",
-                                         pThread->hProcess, uSessionID, rc);
+                        VGSvcError("Unable to notify guest session process (PID=%RU32, session ID=%RU32), rc=%Rrc\n",
+                                   pThread->hProcess, uSessionID, rc);
 
                         if (rc == VERR_NOT_SUPPORTED)
                         {
                             /* Terminate guest session process in case it's not supported by a too old host. */
                             rc = RTProcTerminate(pThread->hProcess);
-                            VBoxServiceVerbose(3, "Terminating guest session process (PID=%RU32) ended with rc=%Rrc\n",
-                                               pThread->hProcess, rc);
+                            VGSvcVerbose(3, "Terminating guest session process (PID=%RU32) ended with rc=%Rrc\n",
+                                         pThread->hProcess, rc);
                         }
                         break;
                     }
 
-                    VBoxServiceVerbose(3, "Guest session ID=%RU32 thread was asked to terminate, waiting for session process to exit (%RU32ms timeout) ...\n",
-                                       uSessionID, uTimeoutsMS);
+                    VGSvcVerbose(3, "Guest session ID=%RU32 thread was asked to terminate, waiting for session process to exit (%RU32ms timeout) ...\n",
+                                 uSessionID, uTimeoutsMS);
                     u64TimeoutStart = RTTimeMilliTS();
-
                     continue; /* Don't waste time on waiting. */
                 }
                 if (RTTimeMilliTS() - u64TimeoutStart > uTimeoutsMS)
                 {
-                     VBoxServiceVerbose(3, "Guest session ID=%RU32 process did not shut down within time\n",
-                                        uSessionID);
+                     VGSvcVerbose(3, "Guest session ID=%RU32 process did not shut down within time\n", uSessionID);
                      break;
                 }
             }
@@ -1231,14 +1151,12 @@ static DECLCALLBACK(int) gstcntlSessionThread(RTTHREAD ThreadSelf, void *pvUser)
 
         if (!fProcessAlive)
         {
-            VBoxServiceVerbose(2, "Guest session process (ID=%RU32) terminated with rc=%Rrc, reason=%ld, status=%d\n",
-                               uSessionID, rcWait,
-                               ProcessStatus.enmReason, ProcessStatus.iStatus);
+            VGSvcVerbose(2, "Guest session process (ID=%RU32) terminated with rc=%Rrc, reason=%d, status=%d\n",
+                         uSessionID, rcWait, ProcessStatus.enmReason, ProcessStatus.iStatus);
             if (ProcessStatus.iStatus == RTEXITCODE_INIT)
             {
-                VBoxServiceError("Guest session process (ID=%RU32) failed to initialize. Here some hints:\n",
-                                 uSessionID);
-                VBoxServiceError("- Is logging enabled and the output directory is read-only by the guest session user?\n");
+                VGSvcError("Guest session process (ID=%RU32) failed to initialize. Here some hints:\n", uSessionID);
+                VGSvcError("- Is logging enabled and the output directory is read-only by the guest session user?\n");
                 /** @todo Add more here. */
             }
         }
@@ -1251,82 +1169,72 @@ static DECLCALLBACK(int) gstcntlSessionThread(RTTHREAD ThreadSelf, void *pvUser)
     {
         for (int i = 0; i < 3; i++)
         {
-            VBoxServiceVerbose(2, "Guest session ID=%RU32 process still alive, killing attempt %d/3\n",
-                               uSessionID, i + 1);
+            VGSvcVerbose(2, "Guest session ID=%RU32 process still alive, killing attempt %d/3\n", uSessionID, i + 1);
 
             rc = RTProcTerminate(pThread->hProcess);
             if (RT_SUCCESS(rc))
                 break;
+            /** @todo r=bird: What's the point of sleeping 3 second after the last attempt? */
             RTThreadSleep(3000);
         }
 
-        VBoxServiceVerbose(2, "Guest session ID=%RU32 process termination resulted in rc=%Rrc\n",
-                           uSessionID, rc);
+        VGSvcVerbose(2, "Guest session ID=%RU32 process termination resulted in rc=%Rrc\n", uSessionID, rc);
 
-        uSessionStatus = RT_SUCCESS(rc)
-                       ? GUEST_SESSION_NOTIFYTYPE_TOK : GUEST_SESSION_NOTIFYTYPE_TOA;
+        uSessionStatus = RT_SUCCESS(rc) ? GUEST_SESSION_NOTIFYTYPE_TOK : GUEST_SESSION_NOTIFYTYPE_TOA;
     }
-    else
+    else if (RT_SUCCESS(rcWait))
     {
-        if (RT_SUCCESS(rcWait))
+        switch (ProcessStatus.enmReason)
         {
-            switch (ProcessStatus.enmReason)
-            {
-                case RTPROCEXITREASON_NORMAL:
-                    uSessionStatus = GUEST_SESSION_NOTIFYTYPE_TEN;
-                    break;
+            case RTPROCEXITREASON_NORMAL:
+                uSessionStatus = GUEST_SESSION_NOTIFYTYPE_TEN;
+                break;
 
-                case RTPROCEXITREASON_ABEND:
-                    uSessionStatus = GUEST_SESSION_NOTIFYTYPE_TEA;
-                    break;
+            case RTPROCEXITREASON_ABEND:
+                uSessionStatus = GUEST_SESSION_NOTIFYTYPE_TEA;
+                break;
 
-                case RTPROCEXITREASON_SIGNAL:
-                    uSessionStatus = GUEST_SESSION_NOTIFYTYPE_TES;
-                    break;
+            case RTPROCEXITREASON_SIGNAL:
+                uSessionStatus = GUEST_SESSION_NOTIFYTYPE_TES;
+                break;
 
-                default:
-                    AssertMsgFailed(("Unhandled process termination reason (%ld)\n",
-                                     ProcessStatus.enmReason));
-                    uSessionStatus = GUEST_SESSION_NOTIFYTYPE_TEA;
-                    break;
-            }
-        }
-        else
-        {
-            /* If we didn't find the guest process anymore, just assume it
-             * terminated normally. */
-            uSessionStatus = GUEST_SESSION_NOTIFYTYPE_TEN;
+            default:
+                AssertMsgFailed(("Unhandled process termination reason (%d)\n", ProcessStatus.enmReason));
+                uSessionStatus = GUEST_SESSION_NOTIFYTYPE_TEA;
+                break;
         }
     }
+    else
+    {
+        /* If we didn't find the guest process anymore, just assume it
+         * terminated normally. */
+        uSessionStatus = GUEST_SESSION_NOTIFYTYPE_TEN;
+    }
 
-    VBoxServiceVerbose(3, "Guest session ID=%RU32 thread ended with sessionStatus=%RU32, sessionRc=%Rrc\n",
-                       uSessionID, uSessionStatus, uSessionRc);
+    VGSvcVerbose(3, "Guest session ID=%RU32 thread ended with sessionStatus=%RU32, sessionRc=%Rrc\n",
+                 uSessionID, uSessionStatus, uSessionRc);
 
     /* Report final status. */
     Assert(uSessionStatus != GUEST_SESSION_NOTIFYTYPE_UNDEFINED);
     VBGLR3GUESTCTRLCMDCTX ctx = { uClientID, VBOX_GUESTCTRL_CONTEXTID_MAKE_SESSION(uSessionID) };
-    rc2 = VbglR3GuestCtrlSessionNotify(&ctx,
-                                       uSessionStatus, uSessionRc);
+    rc2 = VbglR3GuestCtrlSessionNotify(&ctx, uSessionStatus, uSessionRc);
     if (RT_FAILURE(rc2))
-        VBoxServiceError("Reporting session ID=%RU32 final status failed with rc=%Rrc\n",
-                         uSessionID, rc2);
+        VGSvcError("Reporting session ID=%RU32 final status failed with rc=%Rrc\n", uSessionID, rc2);
 
     VbglR3GuestCtrlDisconnect(uClientID);
 
-    VBoxServiceVerbose(3, "Session ID=%RU32 thread ended with rc=%Rrc\n",
-                       uSessionID, rc);
+    VGSvcVerbose(3, "Session ID=%RU32 thread ended with rc=%Rrc\n", uSessionID, rc);
     return rc;
 }
 
 
-RTEXITCODE gstcntlSessionSpawnWorker(PVBOXSERVICECTRLSESSION pSession)
+static RTEXITCODE vgsvcGstCtrlSessionSpawnWorker(PVBOXSERVICECTRLSESSION pSession)
 {
     AssertPtrReturn(pSession, RTEXITCODE_FAILURE);
 
     bool fSessionFilter = true;
 
-    VBoxServiceVerbose(0, "Hi, this is guest session ID=%RU32\n",
-                       pSession->StartupInfo.uSessionID);
+    VGSvcVerbose(0, "Hi, this is guest session ID=%RU32\n", pSession->StartupInfo.uSessionID);
 
     uint32_t uClientID;
     int rc = VbglR3GuestCtrlConnect(&uClientID);
@@ -1335,13 +1243,11 @@ RTEXITCODE gstcntlSessionSpawnWorker(PVBOXSERVICECTRLSESSION pSession)
         /* Set session filter. This prevents the guest control
          * host service to send messages which belong to another
          * session we don't want to handle. */
-        uint32_t uFilterAdd =
-            VBOX_GUESTCTRL_FILTER_BY_SESSION(pSession->StartupInfo.uSessionID);
+        uint32_t uFilterAdd = VBOX_GUESTCTRL_FILTER_BY_SESSION(pSession->StartupInfo.uSessionID);
         rc = VbglR3GuestCtrlMsgFilterSet(uClientID,
                                          VBOX_GUESTCTRL_CONTEXTID_MAKE_SESSION(pSession->StartupInfo.uSessionID),
                                          uFilterAdd, 0 /* Filter remove */);
-        VBoxServiceVerbose(3, "Setting message filterAdd=0x%x returned %Rrc\n",
-                           uFilterAdd, rc);
+        VGSvcVerbose(3, "Setting message filterAdd=0x%x returned %Rrc\n", uFilterAdd, rc);
 
         if (   RT_FAILURE(rc)
             && rc == VERR_NOT_SUPPORTED)
@@ -1352,19 +1258,17 @@ RTEXITCODE gstcntlSessionSpawnWorker(PVBOXSERVICECTRLSESSION pSession)
             rc = VINF_SUCCESS;
         }
 
-        VBoxServiceVerbose(1, "Using client ID=%RU32\n", uClientID);
+        VGSvcVerbose(1, "Using client ID=%RU32\n", uClientID);
     }
     else
-        VBoxServiceError("Error connecting to guest control service, rc=%Rrc\n", rc);
+        VGSvcError("Error connecting to guest control service, rc=%Rrc\n", rc);
 
     /* Report started status. */
     VBGLR3GUESTCTRLCMDCTX ctx = { uClientID, VBOX_GUESTCTRL_CONTEXTID_MAKE_SESSION(pSession->StartupInfo.uSessionID) };
-    int rc2 = VbglR3GuestCtrlSessionNotify(&ctx,
-                                           GUEST_SESSION_NOTIFYTYPE_STARTED, VINF_SUCCESS);
+    int rc2 = VbglR3GuestCtrlSessionNotify(&ctx, GUEST_SESSION_NOTIFYTYPE_STARTED, VINF_SUCCESS);
     if (RT_FAILURE(rc2))
     {
-        VBoxServiceError("Reporting session ID=%RU32 started status failed with rc=%Rrc\n",
-                         pSession->StartupInfo.uSessionID, rc2);
+        VGSvcError("Reporting session ID=%RU32 started status failed with rc=%Rrc\n", pSession->StartupInfo.uSessionID, rc2);
 
         /*
          * If session status cannot be posted to the host for
@@ -1391,69 +1295,71 @@ RTEXITCODE gstcntlSessionSpawnWorker(PVBOXSERVICECTRLSESSION pSession)
     {
         bool fShutdown = false;
 
-        VBGLR3GUESTCTRLCMDCTX ctxHost = { uClientID, 0 /* Context ID, zeroed */,
-                                          pSession->StartupInfo.uProtocol };
+        VBGLR3GUESTCTRLCMDCTX ctxHost = { uClientID, 0 /* Context ID */, pSession->StartupInfo.uProtocol };
         for (;;)
         {
-            VBoxServiceVerbose(3, "Waiting for host msg ...\n");
+            VGSvcVerbose(3, "Waiting for host msg ...\n");
             uint32_t uMsg = 0;
             uint32_t cParms = 0;
             rc = VbglR3GuestCtrlMsgWaitFor(uClientID, &uMsg, &cParms);
             if (rc == VERR_TOO_MUCH_DATA)
             {
 #ifdef DEBUG
-                VBoxServiceVerbose(4, "Message requires %RU32 parameters, but only 2 supplied -- retrying request (no error!)...\n", cParms);
+                VGSvcVerbose(4, "Message requires %RU32 parameters, but only 2 supplied -- retrying request (no error!)...\n",
+                             cParms);
 #endif
                 rc = VINF_SUCCESS; /* Try to get "real" message in next block below. */
             }
             else if (RT_FAILURE(rc))
-                VBoxServiceVerbose(3, "Getting host message failed with %Rrc\n", rc); /* VERR_GEN_IO_FAILURE seems to be normal if ran into timeout. */
+                VGSvcVerbose(3, "Getting host message failed with %Rrc\n", rc); /* VERR_GEN_IO_FAILURE seems to be normal if ran into timeout. */
             if (RT_SUCCESS(rc))
             {
-                VBoxServiceVerbose(4, "Msg=%RU32 (%RU32 parms) retrieved\n", uMsg, cParms);
+                VGSvcVerbose(4, "Msg=%RU32 (%RU32 parms) retrieved\n", uMsg, cParms);
 
                 /* Set number of parameters for current host context. */
                 ctxHost.uNumParms = cParms;
 
                 /* ... and pass it on to the session handler. */
-                rc = GstCntlSessionHandler(pSession, uMsg, &ctxHost,
-                                           pvScratchBuf, cbScratchBuf, &fShutdown);
+                rc = VGSvcGstCtrlSessionHandler(pSession, uMsg, &ctxHost, pvScratchBuf, cbScratchBuf, &fShutdown);
             }
 
             if (fShutdown)
                 break;
 
-            /* Let's sleep for a bit and let others run ... */
+            /* Let others run ... */
             RTThreadYield();
         }
     }
 
-    VBoxServiceVerbose(0, "Session %RU32 ended\n", pSession->StartupInfo.uSessionID);
+    VGSvcVerbose(0, "Session %RU32 ended\n", pSession->StartupInfo.uSessionID);
 
     if (pvScratchBuf)
         RTMemFree(pvScratchBuf);
 
     if (uClientID)
     {
-        VBoxServiceVerbose(3, "Disconnecting client ID=%RU32 ...\n", uClientID);
+        VGSvcVerbose(3, "Disconnecting client ID=%RU32 ...\n", uClientID);
         VbglR3GuestCtrlDisconnect(uClientID);
     }
 
-    VBoxServiceVerbose(3, "Session worker returned with rc=%Rrc\n", rc);
+    VGSvcVerbose(3, "Session worker returned with rc=%Rrc\n", rc);
     return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
 }
 
 
 /**
- * Finds a (formerly) started guest process given by its PID and increases
- * its reference count. Must be decreased by the caller with GstCntlProcessRelease().
- * Note: This does *not lock the process!
+ * Finds a (formerly) started guest process given by its PID and increases its
+ * reference count.
+ *
+ * Must be decreased by the caller with VGSvcGstCtrlProcessRelease().
+ *
+ * @returns Guest process if found, otherwise NULL.
+ * @param   pSession    Pointer to guest session where to search process in.
+ * @param   uPID        PID to search for.
  *
- * @return  PVBOXSERVICECTRLTHREAD      Guest process if found, otherwise NULL.
- * @param   PVBOXSERVICECTRLSESSION     Pointer to guest session where to search process in.
- * @param   uPID                        PID to search for.
+ * @note    This does *not lock the process!
  */
-PVBOXSERVICECTRLPROCESS GstCntlSessionRetainProcess(PVBOXSERVICECTRLSESSION pSession, uint32_t uPID)
+PVBOXSERVICECTRLPROCESS VGSvcGstCtrlSessionRetainProcess(PVBOXSERVICECTRLSESSION pSession, uint32_t uPID)
 {
     AssertPtrReturn(pSession, NULL);
 
@@ -1488,12 +1394,11 @@ PVBOXSERVICECTRLPROCESS GstCntlSessionRetainProcess(PVBOXSERVICECTRLSESSION pSes
 }
 
 
-int GstCntlSessionClose(PVBOXSERVICECTRLSESSION pSession)
+int VGSvcGstCtrlSessionClose(PVBOXSERVICECTRLSESSION pSession)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
 
-    VBoxServiceVerbose(0, "Session %RU32 is about to close ...\n",
-                       pSession->StartupInfo.uSessionID);
+    VGSvcVerbose(0, "Session %RU32 is about to close ...\n", pSession->StartupInfo.uSessionID);
 
     int rc = RTCritSectEnter(&pSession->CritSect);
     if (RT_SUCCESS(rc))
@@ -1501,18 +1406,18 @@ int GstCntlSessionClose(PVBOXSERVICECTRLSESSION pSession)
         /*
          * Close all guest processes.
          */
-        VBoxServiceVerbose(0, "Stopping all guest processes ...\n");
+        VGSvcVerbose(0, "Stopping all guest processes ...\n");
 
         /* Signal all guest processes in the active list that we want to shutdown. */
         size_t cProcesses = 0;
         PVBOXSERVICECTRLPROCESS pProcess;
         RTListForEach(&pSession->lstProcesses, pProcess, VBOXSERVICECTRLPROCESS, Node)
         {
-            GstCntlProcessStop(pProcess);
+            VGSvcGstCtrlProcessStop(pProcess);
             cProcesses++;
         }
 
-        VBoxServiceVerbose(1, "%zu guest processes were signalled to stop\n", cProcesses);
+        VGSvcVerbose(1, "%zu guest processes were signalled to stop\n", cProcesses);
 
         /* Wait for all active threads to shutdown and destroy the active thread list. */
         pProcess = RTListGetFirst(&pSession->lstProcesses, VBOXSERVICECTRLPROCESS, Node);
@@ -1524,15 +1429,13 @@ int GstCntlSessionClose(PVBOXSERVICECTRLSESSION pSession)
             int rc2 = RTCritSectLeave(&pSession->CritSect);
             AssertRC(rc2);
 
-            rc2 = GstCntlProcessWait(pProcess,
-                                     30 * 1000 /* Wait 30 seconds max. */,
-                                     NULL /* rc */);
+            rc2 = VGSvcGstCtrlProcessWait(pProcess, 30 * 1000 /* Wait 30 seconds max. */, NULL /* rc */);
 
             int rc3 = RTCritSectEnter(&pSession->CritSect);
             AssertRC(rc3);
 
             if (RT_SUCCESS(rc2))
-                GstCntlProcessFree(pProcess);
+                VGSvcGstCtrlProcessFree(pProcess);
 
             if (fLast)
                 break;
@@ -1547,8 +1450,7 @@ int GstCntlSessionClose(PVBOXSERVICECTRLSESSION pSession)
             PVBOXSERVICECTRLPROCESS pNext = RTListNodeGetNext(&pProcess->Node, VBOXSERVICECTRLPROCESS, Node);
             bool fLast = RTListNodeIsLast(&pSession->lstProcesses, &pProcess->Node);
 
-            VBoxServiceVerbose(1, "Process %p (PID %RU32) still in list\n",
-                               pProcess, pProcess->uPID);
+            VGSvcVerbose(1, "Process %p (PID %RU32) still in list\n", pProcess, pProcess->uPID);
             if (fLast)
                 break;
 
@@ -1561,7 +1463,7 @@ int GstCntlSessionClose(PVBOXSERVICECTRLSESSION pSession)
         /*
          * Close all left guest files.
          */
-        VBoxServiceVerbose(0, "Closing all guest files ...\n");
+        VGSvcVerbose(0, "Closing all guest files ...\n");
 
         PVBOXSERVICECTRLFILE pFile;
         pFile = RTListGetFirst(&pSession->lstFiles, VBOXSERVICECTRLFILE, Node);
@@ -1570,11 +1472,10 @@ int GstCntlSessionClose(PVBOXSERVICECTRLSESSION pSession)
             PVBOXSERVICECTRLFILE pNext = RTListNodeGetNext(&pFile->Node, VBOXSERVICECTRLFILE, Node);
             bool fLast = RTListNodeIsLast(&pSession->lstFiles, &pFile->Node);
 
-            int rc2 = gstcntlSessionFileDestroy(pFile);
+            int rc2 = vgsvcGstCtrlSessionFileDestroy(pFile);
             if (RT_FAILURE(rc2))
             {
-                VBoxServiceError("Unable to close file \"%s\"; rc=%Rrc\n",
-                                 pFile->szName, rc2);
+                VGSvcError("Unable to close file '%s'; rc=%Rrc\n", pFile->szName, rc2);
                 if (RT_SUCCESS(rc))
                     rc = rc2;
                 /* Keep going. */
@@ -1586,8 +1487,7 @@ int GstCntlSessionClose(PVBOXSERVICECTRLSESSION pSession)
             pFile = pNext;
         }
 
-        AssertMsg(RTListIsEmpty(&pSession->lstFiles),
-                  ("Guest file list still contains entries when it should not\n"));
+        AssertMsg(RTListIsEmpty(&pSession->lstFiles), ("Guest file list still contains entries when it should not\n"));
 
         int rc2 = RTCritSectLeave(&pSession->CritSect);
         if (RT_SUCCESS(rc))
@@ -1598,11 +1498,11 @@ int GstCntlSessionClose(PVBOXSERVICECTRLSESSION pSession)
 }
 
 
-int GstCntlSessionDestroy(PVBOXSERVICECTRLSESSION pSession)
+int VGSvcGstCtrlSessionDestroy(PVBOXSERVICECTRLSESSION pSession)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
 
-    int rc = GstCntlSessionClose(pSession);
+    int rc = VGSvcGstCtrlSessionClose(pSession);
 
     /* Destroy critical section. */
     RTCritSectDelete(&pSession->CritSect);
@@ -1611,7 +1511,7 @@ int GstCntlSessionDestroy(PVBOXSERVICECTRLSESSION pSession)
 }
 
 
-int GstCntlSessionInit(PVBOXSERVICECTRLSESSION pSession, uint32_t fFlags)
+int VGSvcGstCtrlSessionInit(PVBOXSERVICECTRLSESSION pSession, uint32_t fFlags)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
 
@@ -1631,12 +1531,11 @@ int GstCntlSessionInit(PVBOXSERVICECTRLSESSION pSession, uint32_t fFlags)
 /**
  * Adds a guest process to a session's process list.
  *
- * @return  IPRT status code.
+ * @return  VBox status code.
  * @param   pSession                Guest session to add process to.
  * @param   pProcess                Guest process to add.
  */
-int GstCntlSessionProcessAdd(PVBOXSERVICECTRLSESSION pSession,
-                             PVBOXSERVICECTRLPROCESS pProcess)
+int VGSvcGstCtrlSessionProcessAdd(PVBOXSERVICECTRLSESSION pSession, PVBOXSERVICECTRLPROCESS pProcess)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
@@ -1644,11 +1543,10 @@ int GstCntlSessionProcessAdd(PVBOXSERVICECTRLSESSION pSession,
     int rc = RTCritSectEnter(&pSession->CritSect);
     if (RT_SUCCESS(rc))
     {
-        VBoxServiceVerbose(3, "Adding process (PID %RU32) to session ID=%RU32\n",
-                           pProcess->uPID, pSession->StartupInfo.uSessionID);
+        VGSvcVerbose( 3, "Adding process (PID %RU32) to session ID=%RU32\n", pProcess->uPID, pSession->StartupInfo.uSessionID);
 
         /* Add process to session list. */
-        /* rc = */ RTListAppend(&pSession->lstProcesses, &pProcess->Node);
+        RTListAppend(&pSession->lstProcesses, &pProcess->Node);
 
         int rc2 = RTCritSectLeave(&pSession->CritSect);
         if (RT_SUCCESS(rc))
@@ -1662,12 +1560,11 @@ int GstCntlSessionProcessAdd(PVBOXSERVICECTRLSESSION pSession,
 /**
  * Removes a guest process from a session's process list.
  *
- * @return  IPRT status code.
+ * @return  VBox status code.
  * @param   pSession                Guest session to remove process from.
  * @param   pProcess                Guest process to remove.
  */
-int GstCntlSessionProcessRemove(PVBOXSERVICECTRLSESSION pSession,
-                                PVBOXSERVICECTRLPROCESS pProcess)
+int VGSvcGstCtrlSessionProcessRemove(PVBOXSERVICECTRLSESSION pSession, PVBOXSERVICECTRLPROCESS pProcess)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pProcess, VERR_INVALID_POINTER);
@@ -1675,8 +1572,7 @@ int GstCntlSessionProcessRemove(PVBOXSERVICECTRLSESSION pSession,
     int rc = RTCritSectEnter(&pSession->CritSect);
     if (RT_SUCCESS(rc))
     {
-        VBoxServiceVerbose(3, "Removing process (PID %RU32) from session ID=%RU32\n",
-                           pProcess->uPID, pSession->StartupInfo.uSessionID);
+        VGSvcVerbose(3, "Removing process (PID %RU32) from session ID=%RU32\n", pProcess->uPID, pSession->StartupInfo.uSessionID);
         Assert(pProcess->cRefs == 0);
 
         RTListNodeRemove(&pProcess->Node);
@@ -1694,12 +1590,12 @@ int GstCntlSessionProcessRemove(PVBOXSERVICECTRLSESSION pSession,
  * Determines whether starting a new guest process according to the
  * maximum number of concurrent guest processes defined is allowed or not.
  *
- * @return  IPRT status code.
+ * @return  VBox status code.
+ * @param   pSession            The guest session.
  * @param   pbAllowed           True if starting (another) guest process
  *                              is allowed, false if not.
  */
-int GstCntlSessionProcessStartAllowed(const PVBOXSERVICECTRLSESSION pSession,
-                                      bool *pbAllowed)
+int VGSvcGstCtrlSessionProcessStartAllowed(const PVBOXSERVICECTRLSESSION pSession, bool *pbAllowed)
 {
     AssertPtrReturn(pSession, VERR_INVALID_POINTER);
     AssertPtrReturn(pbAllowed, VERR_INVALID_POINTER);
@@ -1719,14 +1615,12 @@ int GstCntlSessionProcessStartAllowed(const PVBOXSERVICECTRLSESSION pSession,
             RTListForEach(&pSession->lstProcesses, pProcess, VBOXSERVICECTRLPROCESS, Node)
                 uProcsRunning++;
 
-            VBoxServiceVerbose(3, "Maximum served guest processes set to %u, running=%u\n",
-                               pSession->uProcsMaxKept, uProcsRunning);
+            VGSvcVerbose(3, "Maximum served guest processes set to %u, running=%u\n", pSession->uProcsMaxKept, uProcsRunning);
 
             int32_t iProcsLeft = (pSession->uProcsMaxKept - uProcsRunning - 1);
             if (iProcsLeft < 0)
             {
-                VBoxServiceVerbose(3, "Maximum running guest processes reached (%u)\n",
-                                   pSession->uProcsMaxKept);
+                VGSvcVerbose(3, "Maximum running guest processes reached (%u)\n", pSession->uProcsMaxKept);
                 fLimitReached = true;
             }
         }
@@ -1746,13 +1640,13 @@ int GstCntlSessionProcessStartAllowed(const PVBOXSERVICECTRLSESSION pSession,
  * Creates the process for a guest session.
  *
  *
- * @return  IPRT status code.
+ * @return  VBox status code.
  * @param   pSessionStartupInfo     Session startup info.
  * @param   pSessionThread          The session thread under construction.
  * @param   uCtrlSessionThread      The session thread debug ordinal.
  */
-static int vgsvcGstCntlSessionThreadCreateProcess(const PVBOXSERVICECTRLSESSIONSTARTUPINFO pSessionStartupInfo,
-                                                  PVBOXSERVICECTRLSESSIONTHREAD pSessionThread, uint32_t uCtrlSessionThread)
+static int vgsvcVGSvcGstCtrlSessionThreadCreateProcess(const PVBOXSERVICECTRLSESSIONSTARTUPINFO pSessionStartupInfo,
+                                                       PVBOXSERVICECTRLSESSIONTHREAD pSessionThread, uint32_t uCtrlSessionThread)
 {
     /*
      * Is this an anonymous session?  Anonymous sessions run with the same
@@ -1764,24 +1658,24 @@ static int vgsvcGstCntlSessionThreadCreateProcess(const PVBOXSERVICECTRLSESSIONS
         Assert(!strlen(pSessionThread->StartupInfo.szPassword));
         Assert(!strlen(pSessionThread->StartupInfo.szDomain));
 
-        VBoxServiceVerbose(3, "New anonymous guest session ID=%RU32 created, fFlags=%x, using protocol %RU32\n",
-                           pSessionStartupInfo->uSessionID,
-                           pSessionStartupInfo->fFlags,
-                           pSessionStartupInfo->uProtocol);
+        VGSvcVerbose(3, "New anonymous guest session ID=%RU32 created, fFlags=%x, using protocol %RU32\n",
+                     pSessionStartupInfo->uSessionID,
+                     pSessionStartupInfo->fFlags,
+                     pSessionStartupInfo->uProtocol);
     }
     else
     {
-        VBoxServiceVerbose(3, "Spawning new guest session ID=%RU32, szUser=%s, szPassword=%s, szDomain=%s, fFlags=%x, using protocol %RU32\n",
-                           pSessionStartupInfo->uSessionID,
-                           pSessionStartupInfo->szUser,
+        VGSvcVerbose(3, "Spawning new guest session ID=%RU32, szUser=%s, szPassword=%s, szDomain=%s, fFlags=%x, using protocol %RU32\n",
+                     pSessionStartupInfo->uSessionID,
+                     pSessionStartupInfo->szUser,
 #ifdef DEBUG
-                           pSessionStartupInfo->szPassword,
+                     pSessionStartupInfo->szPassword,
 #else
-                           "XXX", /* Never show passwords in release mode. */
+                     "XXX", /* Never show passwords in release mode. */
 #endif
-                           pSessionStartupInfo->szDomain,
-                           pSessionStartupInfo->fFlags,
-                           pSessionStartupInfo->uProtocol);
+                     pSessionStartupInfo->szDomain,
+                     pSessionStartupInfo->fFlags,
+                     pSessionStartupInfo->uProtocol);
     }
 
     /*
@@ -1803,7 +1697,7 @@ static int vgsvcGstCntlSessionThreadCreateProcess(const PVBOXSERVICECTRLSESSIONS
         char szParmThreadId[32];
         RTStrPrintf(szParmThreadId, sizeof(szParmThreadId), "--thread-id=%RU32", uCtrlSessionThread);
 #endif
-        int idxArg = 0; /* Next index in argument vector. */
+        unsigned    idxArg = 0; /* Next index in argument vector. */
         char const *apszArgs[24];
 
         apszArgs[idxArg++] = pszExeName;
@@ -1852,7 +1746,7 @@ static int vgsvcGstCntlSessionThreadCreateProcess(const PVBOXSERVICECTRLSESSIONS
         }
 
 #ifdef DEBUG
-        VBoxServiceVerbose(4, "Argv building rc=%Rrc, session flags=%x\n", rc, g_Session.fFlags);
+        VGSvcVerbose(4, "Argv building rc=%Rrc, session flags=%x\n", rc, g_Session.fFlags);
         if (RT_SUCCESS(rc))
         {
             if (g_Session.fFlags & VBOXSERVICECTRLSESSION_FLAG_DUMPSTDOUT)
@@ -1866,20 +1760,19 @@ static int vgsvcGstCntlSessionThreadCreateProcess(const PVBOXSERVICECTRLSESSIONS
 
         if (g_cVerbosity > 3)
         {
-            VBoxServiceVerbose(4, "Spawning parameters:\n");
+            VGSvcVerbose(4, "Spawning parameters:\n");
             for (idxArg = 0; apszArgs[idxArg]; idxArg++)
-                VBoxServiceVerbose(4, "\t%s\n", apszArgs[idxArg]);
+                VGSvcVerbose(4, "\t%s\n", apszArgs[idxArg]);
         }
 
         /*
          * Configure standard handles and finally create the process.
          */
-        uint32_t fProcCreate = RTPROC_FLAGS_SERVICE
-#ifdef RT_OS_WINDOWS    /** @todo do on unix too! */
-                             /* Make sure to also load the profile data on a Windows guest. */
-                             | RTPROC_FLAGS_PROFILE
+        uint32_t fProcCreate = RTPROC_FLAGS_PROFILE;
+#ifdef RT_OS_WINDOWS /* Windows only flags: */
+        fProcCreate         |= RTPROC_FLAGS_SERVICE
+                            |  RTPROC_FLAGS_HIDDEN;       /** @todo More flags from startup info? */
 #endif
-                             | RTPROC_FLAGS_HIDDEN;       /** @todo More flags from startup info? */
 
 #if 0 /* Pipe handling not needed (yet). */
         /* Setup pipes. */
@@ -1968,15 +1861,14 @@ static int vgsvcGstCntlSessionThreadCreateProcess(const PVBOXSERVICECTRLSESSIONS
  * which then will act as a session host. On successful open, the session will
  * be added to the given session thread list.
  *
- * @return  IPRT status code.
+ * @return  VBox status code.
  * @param   pList                   Which list to use to store the session thread in.
  * @param   pSessionStartupInfo     Session startup info.
  * @param   ppSessionThread         Returns newly created session thread on success.
  *                                  Optional.
  */
-int GstCntlSessionThreadCreate(PRTLISTANCHOR pList,
-                               const PVBOXSERVICECTRLSESSIONSTARTUPINFO pSessionStartupInfo,
-                               PVBOXSERVICECTRLSESSIONTHREAD *ppSessionThread)
+int VGSvcGstCtrlSessionThreadCreate(PRTLISTANCHOR pList, const PVBOXSERVICECTRLSESSIONSTARTUPINFO pSessionStartupInfo,
+                                    PVBOXSERVICECTRLSESSIONTHREAD *ppSessionThread)
 {
     AssertPtrReturn(pList, VERR_INVALID_POINTER);
     AssertPtrReturn(pSessionStartupInfo, VERR_INVALID_POINTER);
@@ -2020,13 +1912,13 @@ int GstCntlSessionThreadCreate(PRTLISTANCHOR pList,
             /*
              * Start the session thread.
              */
-            rc = vgsvcGstCntlSessionThreadCreateProcess(pSessionStartupInfo, pSessionThread, s_uCtrlSessionThread);
+            rc = vgsvcVGSvcGstCtrlSessionThreadCreateProcess(pSessionStartupInfo, pSessionThread, s_uCtrlSessionThread);
             if (RT_SUCCESS(rc))
             {
                 /*
                  * Start the session thread.
                  */
-                rc = RTThreadCreateF(&pSessionThread->Thread, gstcntlSessionThread,
+                rc = RTThreadCreateF(&pSessionThread->Thread, vgsvcGstCtrlSessionThread,
                                      pSessionThread /*pvUser*/, 0 /*cbStack*/,
                                      RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "sess%u", s_uCtrlSessionThread);
                 if (RT_SUCCESS(rc))
@@ -2036,12 +1928,12 @@ int GstCntlSessionThreadCreate(PRTLISTANCHOR pList,
                     if (   RT_SUCCESS(rc)
                         && !ASMAtomicReadBool(&pSessionThread->fShutdown))
                     {
-                        VBoxServiceVerbose(2, "Thread for session ID=%RU32 started\n", pSessionThread->StartupInfo.uSessionID);
+                        VGSvcVerbose(2, "Thread for session ID=%RU32 started\n", pSessionThread->StartupInfo.uSessionID);
 
                         ASMAtomicXchgBool(&pSessionThread->fStarted, true);
 
                         /* Add session to list. */
-                        /* rc = */ RTListAppend(pList, &pSessionThread->Node);
+                        RTListAppend(pList, &pSessionThread->Node);
                         if (ppSessionThread) /* Return session if wanted. */
                             *ppSessionThread = pSessionThread;
                         return VINF_SUCCESS;
@@ -2050,13 +1942,13 @@ int GstCntlSessionThreadCreate(PRTLISTANCHOR pList,
                     /*
                      * Bail out.
                      */
-                    VBoxServiceError("Thread for session ID=%RU32 failed to start, rc=%Rrc\n",
-                                     pSessionThread->StartupInfo.uSessionID, rc);
+                    VGSvcError("Thread for session ID=%RU32 failed to start, rc=%Rrc\n",
+                               pSessionThread->StartupInfo.uSessionID, rc);
                     if (RT_SUCCESS_NP(rc))
                         rc = VERR_CANT_CREATE; /** @todo Find a better rc. */
                 }
                 else
-                    VBoxServiceError("Creating session thread failed, rc=%Rrc\n", rc);
+                    VGSvcError("Creating session thread failed, rc=%Rrc\n", rc);
 
                 RTProcTerminate(pSessionThread->hProcess);
                 uint32_t cMsWait = 1;
@@ -2074,7 +1966,7 @@ int GstCntlSessionThreadCreate(PRTLISTANCHOR pList,
     else
         rc = VERR_NO_MEMORY;
 
-    VBoxServiceVerbose(3, "Spawning session thread returned returned rc=%Rrc\n", rc);
+    VGSvcVerbose(3, "Spawning session thread returned returned rc=%Rrc\n", rc);
     return rc;
 }
 
@@ -2082,23 +1974,19 @@ int GstCntlSessionThreadCreate(PRTLISTANCHOR pList,
 /**
  * Waits for a formerly opened guest session process to close.
  *
- * @return  IPRT status code.
+ * @return  VBox status code.
  * @param   pThread                 Guest session thread to wait for.
  * @param   uTimeoutMS              Waiting timeout (in ms).
- * @param   uFlags                  Closing flags.
+ * @param   fFlags                  Closing flags.
  */
-int GstCntlSessionThreadWait(PVBOXSERVICECTRLSESSIONTHREAD pThread,
-                             uint32_t uTimeoutMS, uint32_t uFlags)
+int VGSvcGstCtrlSessionThreadWait(PVBOXSERVICECTRLSESSIONTHREAD pThread, uint32_t uTimeoutMS, uint32_t fFlags)
 {
     AssertPtrReturn(pThread, VERR_INVALID_POINTER);
     /** @todo Validate closing flags. */
 
-    if (pThread->Thread == NIL_RTTHREAD)
-    {
-        AssertMsgFailed(("Guest session thread of session %p does not exist when it should\n",
-                         pThread));
-        return VERR_NOT_FOUND;
-    }
+    AssertMsgReturn(pThread->Thread != NIL_RTTHREAD,
+                    ("Guest session thread of session %p does not exist when it should\n", pThread),
+                    VERR_NOT_FOUND);
 
     int rc = VINF_SUCCESS;
 
@@ -2111,19 +1999,15 @@ int GstCntlSessionThreadWait(PVBOXSERVICECTRLSESSIONTHREAD pThread,
         /* Ask the thread to shutdown. */
         ASMAtomicXchgBool(&pThread->fShutdown, true);
 
-        VBoxServiceVerbose(3, "Waiting for session thread ID=%RU32 to close (%RU32ms) ...\n",
-                           pThread->StartupInfo.uSessionID, uTimeoutMS);
+        VGSvcVerbose(3, "Waiting for session thread ID=%RU32 to close (%RU32ms) ...\n",
+                     pThread->StartupInfo.uSessionID, uTimeoutMS);
 
         int rcThread;
         rc = RTThreadWait(pThread->Thread, uTimeoutMS, &rcThread);
-        if (RT_FAILURE(rc))
-        {
-            VBoxServiceError("Waiting for session thread ID=%RU32 to close failed with rc=%Rrc\n",
-                             pThread->StartupInfo.uSessionID, rc);
-        }
+        if (RT_SUCCESS(rc))
+            VGSvcVerbose(3, "Session thread ID=%RU32 ended with rc=%Rrc\n", pThread->StartupInfo.uSessionID, rcThread);
         else
-            VBoxServiceVerbose(3, "Session thread ID=%RU32 ended with rc=%Rrc\n",
-                               pThread->StartupInfo.uSessionID, rcThread);
+            VGSvcError("Waiting for session thread ID=%RU32 to close failed with rc=%Rrc\n", pThread->StartupInfo.uSessionID, rc);
     }
 
     return rc;
@@ -2133,16 +2017,15 @@ int GstCntlSessionThreadWait(PVBOXSERVICECTRLSESSIONTHREAD pThread,
  * Waits for the specified session thread to end and remove
  * it from the session thread list.
  *
- * @return  IPRT status code.
+ * @return  VBox status code.
  * @param   pThread                 Session thread to destroy.
- * @param   uFlags                  Closing flags.
+ * @param   fFlags                  Closing flags.
  */
-int GstCntlSessionThreadDestroy(PVBOXSERVICECTRLSESSIONTHREAD pThread, uint32_t uFlags)
+int VGSvcGstCtrlSessionThreadDestroy(PVBOXSERVICECTRLSESSIONTHREAD pThread, uint32_t fFlags)
 {
     AssertPtrReturn(pThread, VERR_INVALID_POINTER);
 
-    int rc = GstCntlSessionThreadWait(pThread,
-                                      5 * 60 * 1000 /* 5 minutes timeout */, uFlags);
+    int rc = VGSvcGstCtrlSessionThreadWait(pThread, 5 * 60 * 1000 /* 5 minutes timeout */, fFlags);
 
     /* Remove session from list and destroy object. */
     RTListNodeRemove(&pThread->Node);
@@ -2158,11 +2041,11 @@ int GstCntlSessionThreadDestroy(PVBOXSERVICECTRLSESSIONTHREAD pThread, uint32_t
  *
  * @note    Caller is responsible for locking!
  *
- * @return  IPRT status code.
+ * @return  VBox status code.
  * @param   pList                   Which list to close the session threads for.
- * @param   uFlags                  Closing flags.
+ * @param   fFlags                  Closing flags.
  */
-int GstCntlSessionThreadDestroyAll(PRTLISTANCHOR pList, uint32_t uFlags)
+int VGSvcGstCtrlSessionThreadDestroyAll(PRTLISTANCHOR pList, uint32_t fFlags)
 {
     AssertPtrReturn(pList, VERR_INVALID_POINTER);
 
@@ -2170,27 +2053,35 @@ int GstCntlSessionThreadDestroyAll(PRTLISTANCHOR pList, uint32_t uFlags)
 
     /*int rc = VbglR3GuestCtrlClose
         if (RT_FAILURE(rc))
-            VBoxServiceError("Cancelling pending waits failed; rc=%Rrc\n", rc);*/
+            VGSvcError("Cancelling pending waits failed; rc=%Rrc\n", rc);*/
 
     PVBOXSERVICECTRLSESSIONTHREAD pSessIt;
     PVBOXSERVICECTRLSESSIONTHREAD pSessItNext;
     RTListForEachSafe(pList, pSessIt, pSessItNext, VBOXSERVICECTRLSESSIONTHREAD, Node)
     {
-        int rc2 = GstCntlSessionThreadDestroy(pSessIt, uFlags);
+        int rc2 = VGSvcGstCtrlSessionThreadDestroy(pSessIt, fFlags);
         if (RT_FAILURE(rc2))
         {
-            VBoxServiceError("Closing session thread '%s' failed with rc=%Rrc\n", RTThreadGetName(pSessIt->Thread), rc2);
+            VGSvcError("Closing session thread '%s' failed with rc=%Rrc\n", RTThreadGetName(pSessIt->Thread), rc2);
             if (RT_SUCCESS(rc))
                 rc = rc2;
             /* Keep going. */
         }
     }
 
-    VBoxServiceVerbose(4, "Destroying guest session threads ended with %Rrc\n", rc);
+    VGSvcVerbose(4, "Destroying guest session threads ended with %Rrc\n", rc);
     return rc;
 }
 
-RTEXITCODE VBoxServiceControlSessionSpawnInit(int argc, char **argv)
+
+/**
+ * Main function for the session process.
+ *
+ * @returns exit code.
+ * @param   argc        Argument count.
+ * @param   argv        Argument vector (UTF-8).
+ */
+RTEXITCODE VGSvcGstCtrlSessionSpawnInit(int argc, char **argv)
 {
     static const RTGETOPTDEF s_aOptions[] =
     {
@@ -2215,7 +2106,7 @@ RTEXITCODE VBoxServiceControlSessionSpawnInit(int argc, char **argv)
                  s_aOptions, RT_ELEMENTS(s_aOptions),
                  1 /*iFirst*/, RTGETOPTINIT_FLAGS_OPTS_FIRST);
 
-    uint32_t uSessionFlags = VBOXSERVICECTRLSESSION_FLAG_SPAWN;
+    uint32_t fSession = VBOXSERVICECTRLSESSION_FLAG_SPAWN;
 
     /* Protocol and session ID must be specified explicitly. */
     g_Session.StartupInfo.uProtocol  = UINT32_MAX;
@@ -2235,11 +2126,11 @@ RTEXITCODE VBoxServiceControlSessionSpawnInit(int argc, char **argv)
             }
 #ifdef DEBUG
             case VBOXSERVICESESSIONOPT_DUMP_STDOUT:
-                uSessionFlags |= VBOXSERVICECTRLSESSION_FLAG_DUMPSTDOUT;
+                fSession |= VBOXSERVICECTRLSESSION_FLAG_DUMPSTDOUT;
                 break;
 
             case VBOXSERVICESESSIONOPT_DUMP_STDERR:
-                uSessionFlags |= VBOXSERVICECTRLSESSION_FLAG_DUMPSTDERR;
+                fSession |= VBOXSERVICECTRLSESSION_FLAG_DUMPSTDERR;
                 break;
 #endif
             case VBOXSERVICESESSIONOPT_USERNAME:
@@ -2283,18 +2174,18 @@ RTEXITCODE VBoxServiceControlSessionSpawnInit(int argc, char **argv)
         return RTMsgErrorExit(RTEXITCODE_SYNTAX, "No session ID specified");
 
     /* Init the session object. */
-    int rc = GstCntlSessionInit(&g_Session, uSessionFlags);
+    int rc = VGSvcGstCtrlSessionInit(&g_Session, fSession);
     if (RT_FAILURE(rc))
         return RTMsgErrorExit(RTEXITCODE_INIT, "Failed to initialize session object, rc=%Rrc\n", rc);
 
-    rc = VBoxServiceLogCreate(g_szLogFile[0] ? g_szLogFile : NULL);
+    rc = VGSvcLogCreate(g_szLogFile[0] ? g_szLogFile : NULL);
     if (RT_FAILURE(rc))
-        return RTMsgErrorExit(RTEXITCODE_INIT, "Failed to create log file \"%s\", rc=%Rrc\n",
+        return RTMsgErrorExit(RTEXITCODE_INIT, "Failed to create log file '%s', rc=%Rrc\n",
                               g_szLogFile[0] ? g_szLogFile : "<None>", rc);
 
-    RTEXITCODE rcExit = gstcntlSessionSpawnWorker(&g_Session);
+    RTEXITCODE rcExit = vgsvcGstCtrlSessionSpawnWorker(&g_Session);
 
-    VBoxServiceLogDestroy();
+    VGSvcLogDestroy();
     return rcExit;
 }
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceCpuHotPlug.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceCpuHotPlug.cpp
index 1333e6a..07cedbc 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceCpuHotPlug.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceCpuHotPlug.cpp
@@ -1,6 +1,6 @@
 /* $Id: VBoxServiceCpuHotPlug.cpp $ */
 /** @file
- * VBoxService - Guest Additions CPU Hot Plugging Service.
+ * VBoxService - Guest Additions CPU Hot-Plugging Service.
  */
 
 /*
@@ -15,6 +15,17 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+/** @page pg_vgsvc_cpuhotplug VBoxService - CPU Hot-Plugging
+ *
+ * The CPU Hot-Plugging subservice helps execute and coordinate CPU hot-plugging
+ * between the guest OS and the VMM.
+ *
+ * CPU Hot-Plugging is useful for reallocating CPU resources from one VM to
+ * other VMs or/and the host.  It talks to the VMM via VMMDev, new hot-plugging
+ * events being signalled with an interrupt (no polling).
+ *
+ * Currently only supported for linux guests.
+ */
 
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
@@ -39,6 +50,7 @@
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
 #ifdef RT_OS_LINUX
+
 /** @name Paths to access the CPU device
  * @{
  */
@@ -75,51 +87,57 @@ typedef struct SYSFSCPUPATH
 } SYSFSCPUPATH, *PSYSFSCPUPATH;
 
 /** Content of uId if the path wasn't probed yet. */
-#define ACPI_CPU_PATH_NOT_PROBED UINT32_MAX
+# define ACPI_CPU_PATH_NOT_PROBED UINT32_MAX
+#endif /* RT_OS_LINUX*/
+
 
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+#ifdef RT_OS_LINUX
 /** Possible combinations of all path components for level 1. */
-const SYSFSCPUPATHCOMP g_aAcpiCpuPathLvl1[] =
+static const SYSFSCPUPATHCOMP g_aAcpiCpuPathLvl1[] =
 {
     /** LNXSYSTEM:<id> */
-    {true, "LNXSYSTM:*"}
+    { true, "LNXSYSTM:*" }
 };
 
 /** Possible combinations of all path components for level 2. */
-const SYSFSCPUPATHCOMP g_aAcpiCpuPathLvl2[] =
+static const SYSFSCPUPATHCOMP g_aAcpiCpuPathLvl2[] =
 {
     /** device:<id> */
-    {true, "device:*"},
+    { true, "device:*" },
     /** LNXSYBUS:<id> */
-    {true, "LNXSYBUS:*"}
+    { true, "LNXSYBUS:*" }
 };
 
 /** Possible combinations of all path components for level 3 */
-const SYSFSCPUPATHCOMP g_aAcpiCpuPathLvl3[] =
+static const SYSFSCPUPATHCOMP g_aAcpiCpuPathLvl3[] =
 {
     /** ACPI0004:<id> */
-    {true, "ACPI0004:*"}
+    { true, "ACPI0004:*" }
 };
 
 /** Possible combinations of all path components for level 4 */
-const SYSFSCPUPATHCOMP g_aAcpiCpuPathLvl4[] =
+static const SYSFSCPUPATHCOMP g_aAcpiCpuPathLvl4[] =
 {
     /** LNXCPU:<id> */
-    {true, "LNXCPU:*"},
+    { true, "LNXCPU:*" },
     /** ACPI_CPU:<id> */
-    {true, "ACPI_CPU:*"}
+    { true, "ACPI_CPU:*" }
 };
 
 /** All possible combinations. */
-SYSFSCPUPATH g_aAcpiCpuPath[] =
+static SYSFSCPUPATH g_aAcpiCpuPath[] =
 {
     /** Level 1 */
-    {ACPI_CPU_PATH_NOT_PROBED, g_aAcpiCpuPathLvl1, RT_ELEMENTS(g_aAcpiCpuPathLvl1), NULL, NULL},
+    { ACPI_CPU_PATH_NOT_PROBED, g_aAcpiCpuPathLvl1, RT_ELEMENTS(g_aAcpiCpuPathLvl1), NULL, NULL },
     /** Level 2 */
-    {ACPI_CPU_PATH_NOT_PROBED, g_aAcpiCpuPathLvl2, RT_ELEMENTS(g_aAcpiCpuPathLvl2), NULL, NULL},
+    { ACPI_CPU_PATH_NOT_PROBED, g_aAcpiCpuPathLvl2, RT_ELEMENTS(g_aAcpiCpuPathLvl2), NULL, NULL },
     /** Level 3 */
-    {ACPI_CPU_PATH_NOT_PROBED, g_aAcpiCpuPathLvl3, RT_ELEMENTS(g_aAcpiCpuPathLvl3), NULL, NULL},
+    { ACPI_CPU_PATH_NOT_PROBED, g_aAcpiCpuPathLvl3, RT_ELEMENTS(g_aAcpiCpuPathLvl3), NULL, NULL },
     /** Level 4 */
-    {ACPI_CPU_PATH_NOT_PROBED, g_aAcpiCpuPathLvl4, RT_ELEMENTS(g_aAcpiCpuPathLvl4), NULL, NULL},
+    { ACPI_CPU_PATH_NOT_PROBED, g_aAcpiCpuPathLvl4, RT_ELEMENTS(g_aAcpiCpuPathLvl4), NULL, NULL },
 };
 
 /**
@@ -128,21 +146,24 @@ SYSFSCPUPATH g_aAcpiCpuPath[] =
  * @remark: This is not part of the path above because the eject file is not in one of the directories
  *          below and would make the hot unplug code fail.
  */
-const char *g_apszTopologyPath[] =
+static const char *g_apszTopologyPath[] =
 {
     "sysdev",
     "physical_node"
 };
-#endif
+
+#endif /* RT_OS_LINUX*/
+
 
 #ifdef RT_OS_LINUX
+
 /**
  * Probes for the correct path to the ACPI CPU object in sysfs for the
  * various different kernel versions and distro's.
  *
  * @returns VBox status code.
  */
-static int VBoxServiceCpuHotPlugProbePath(void)
+static int vgsvcCpuHotPlugProbePath(void)
 {
     int rc = VINF_SUCCESS;
 
@@ -220,13 +241,14 @@ static int VBoxServiceCpuHotPlugProbePath(void)
                 break;
         } /* For every level */
 
-        VBoxServiceVerbose(1, "Final path after probing %s rc=%Rrc\n", pszPath, rc);
+        VGSvcVerbose(1, "Final path after probing %s rc=%Rrc\n", pszPath, rc);
         RTStrFree(pszPath);
     }
 
     return rc;
 }
 
+
 /**
  * Returns the path of the ACPI CPU device with the given core and package ID.
  *
@@ -235,13 +257,13 @@ static int VBoxServiceCpuHotPlugProbePath(void)
  * @param   idCpuCore    The core ID of the CPU.
  * @param   idCpuPackage The package ID of the CPU.
  */
-static int VBoxServiceCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCpuCore, uint32_t idCpuPackage)
+static int vgsvcCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCpuCore, uint32_t idCpuPackage)
 {
     int rc = VINF_SUCCESS;
 
     AssertPtrReturn(ppszPath, VERR_INVALID_PARAMETER);
 
-    rc = VBoxServiceCpuHotPlugProbePath();
+    rc = vgsvcCpuHotPlugProbePath();
     if (RT_SUCCESS(rc))
     {
         /* Build the path from all components. */
@@ -315,14 +337,14 @@ static int VBoxServiceCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCp
                             /* Return the path */
                             pszPath = pszPathCurr;
                             fFound = true;
-                            VBoxServiceVerbose(3, "CPU found\n");
+                            VGSvcVerbose(3, "CPU found\n");
                             break;
                         }
                         else
                         {
                             /* Get the next directory. */
                             RTStrFree(pszPathCurr);
-                            VBoxServiceVerbose(3, "CPU doesn't match, next directory\n");
+                            VGSvcVerbose(3, "CPU doesn't match, next directory\n");
                         }
                     }
                     else
@@ -330,7 +352,7 @@ static int VBoxServiceCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCp
                         /* Go deeper */
                         iLvlCurr++;
 
-                        VBoxServiceVerbose(3, "Going deeper (iLvlCurr=%u)\n", iLvlCurr);
+                        VGSvcVerbose(3, "Going deeper (iLvlCurr=%u)\n", iLvlCurr);
 
                         pAcpiCpuPathLvl = &g_aAcpiCpuPath[iLvlCurr];
 
@@ -348,7 +370,7 @@ static int VBoxServiceCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCp
                             break;
                         }
 
-                        VBoxServiceVerbose(3, "New path %s\n", pszPathDir);
+                        VGSvcVerbose(3, "New path %s\n", pszPathDir);
 
                         /* Open the directory */
                         rc = RTDirOpenFiltered(&pAcpiCpuPathLvl->pDir, pszPathDir, RTDIRFILTER_WINNT, 0);
@@ -368,7 +390,7 @@ static int VBoxServiceCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCp
 
                     iLvlCurr--;
                     pAcpiCpuPathLvl = &g_aAcpiCpuPath[iLvlCurr];
-                    VBoxServiceVerbose(3, "Directory not found, going back (iLvlCurr=%u)\n", iLvlCurr);
+                    VGSvcVerbose(3, "Directory not found, going back (iLvlCurr=%u)\n", iLvlCurr);
                 }
             } /* while not found */
         } /* Successful init */
@@ -394,8 +416,8 @@ static int VBoxServiceCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCp
 
     return rc;
 }
-#endif /* RT_OS_LINUX */
 
+#endif /* RT_OS_LINUX */
 
 /**
  * Handles VMMDevCpuEventType_Plug.
@@ -403,7 +425,7 @@ static int VBoxServiceCpuHotPlugGetACPIDevicePath(char **ppszPath, uint32_t idCp
  * @param   idCpuCore       The CPU core ID.
  * @param   idCpuPackage    The CPU package ID.
  */
-static void VBoxServiceCpuHotPlugHandlePlugEvent(uint32_t idCpuCore, uint32_t idCpuPackage)
+static void vgsvcCpuHotPlugHandlePlugEvent(uint32_t idCpuCore, uint32_t idCpuPackage)
 {
 #ifdef RT_OS_LINUX
     /*
@@ -412,8 +434,8 @@ static void VBoxServiceCpuHotPlugHandlePlugEvent(uint32_t idCpuCore, uint32_t id
      * and enable every CPU which is not online already.
      * Because the directory might not be available immediately we try a few times.
      *
-     * @todo: Maybe use udev to monitor hot-add events from the kernel
      */
+    /** @todo Maybe use udev to monitor hot-add events from the kernel */
     bool fCpuOnline = false;
     unsigned cTries = 5;
 
@@ -456,20 +478,20 @@ static void VBoxServiceCpuHotPlugHandlePlugEvent(uint32_t idCpuCore, uint32_t id
                         RTFileClose(hFileCpuOnline);
                         if (RT_SUCCESS(rc))
                         {
-                            VBoxServiceVerbose(1, "CpuHotPlug: CPU %u/%u was brought online\n", idCpuPackage, idCpuCore);
+                            VGSvcVerbose(1, "CpuHotPlug: CPU %u/%u was brought online\n", idCpuPackage, idCpuCore);
                             fCpuOnline = true;
                             break;
                         }
                         /* Error means CPU not present or online already  */
                     }
                     else
-                        VBoxServiceError("CpuHotPlug: Failed to open \"%s/%s/online\" rc=%Rrc\n",
-                                         SYSFS_CPU_PATH, DirFolderContent.szName, rc);
+                        VGSvcError("CpuHotPlug: Failed to open '%s/%s/online' rc=%Rrc\n",
+                                   SYSFS_CPU_PATH, DirFolderContent.szName, rc);
                 }
             }
         }
         else
-            VBoxServiceError("CpuHotPlug: Failed to open path %s rc=%Rrc\n", SYSFS_CPU_PATH, rc);
+            VGSvcError("CpuHotPlug: Failed to open path %s rc=%Rrc\n", SYSFS_CPU_PATH, rc);
 
         /* Sleep a bit */
         if (!fCpuOnline)
@@ -489,41 +511,40 @@ static void VBoxServiceCpuHotPlugHandlePlugEvent(uint32_t idCpuCore, uint32_t id
  * @param   idCpuCore       The CPU core ID.
  * @param   idCpuPackage    The CPU package ID.
  */
-static void VBoxServiceCpuHotPlugHandleUnplugEvent(uint32_t idCpuCore, uint32_t idCpuPackage)
+static void vgsvcCpuHotPlugHandleUnplugEvent(uint32_t idCpuCore, uint32_t idCpuPackage)
 {
 #ifdef RT_OS_LINUX
     char *pszCpuDevicePath = NULL;
-    int rc = VBoxServiceCpuHotPlugGetACPIDevicePath(&pszCpuDevicePath, idCpuCore, idCpuPackage);
+    int rc = vgsvcCpuHotPlugGetACPIDevicePath(&pszCpuDevicePath, idCpuCore, idCpuPackage);
     if (RT_SUCCESS(rc))
     {
         RTFILE hFileCpuEject;
-        rc = RTFileOpenF(&hFileCpuEject, RTFILE_O_WRITE | RTFILE_O_OPEN | RTFILE_O_DENY_NONE,
-                         "%s/eject", pszCpuDevicePath);
+        rc = RTFileOpenF(&hFileCpuEject, RTFILE_O_WRITE | RTFILE_O_OPEN | RTFILE_O_DENY_NONE, "%s/eject", pszCpuDevicePath);
         if (RT_SUCCESS(rc))
         {
             /* Write a 1 to eject the CPU */
             rc = RTFileWrite(hFileCpuEject, "1", 1, NULL);
             if (RT_SUCCESS(rc))
-                VBoxServiceVerbose(1, "CpuHotPlug: CPU %u/%u was ejected\n", idCpuPackage, idCpuCore);
+                VGSvcVerbose(1, "CpuHotPlug: CPU %u/%u was ejected\n", idCpuPackage, idCpuCore);
             else
-                VBoxServiceError("CpuHotPlug: Failed to eject CPU %u/%u rc=%Rrc\n", idCpuPackage, idCpuCore, rc);
+                VGSvcError("CpuHotPlug: Failed to eject CPU %u/%u rc=%Rrc\n", idCpuPackage, idCpuCore, rc);
 
             RTFileClose(hFileCpuEject);
         }
         else
-            VBoxServiceError("CpuHotPlug: Failed to open \"%s/eject\" rc=%Rrc\n", pszCpuDevicePath, rc);
+            VGSvcError("CpuHotPlug: Failed to open '%s/eject' rc=%Rrc\n", pszCpuDevicePath, rc);
         RTStrFree(pszCpuDevicePath);
     }
     else
-        VBoxServiceError("CpuHotPlug: Failed to get CPU device path rc=%Rrc\n", rc);
+        VGSvcError("CpuHotPlug: Failed to get CPU device path rc=%Rrc\n", rc);
 #else
 # error "Port me"
 #endif
 }
 
 
-/** @copydoc VBOXSERVICE::pfnWorker */
-DECLCALLBACK(int) VBoxServiceCpuHotPlugWorker(bool volatile *pfShutdown)
+/** @interface_method_impl{VBOXSERVICE,pfnWorker} */
+static DECLCALLBACK(int) vgsvcCpuHotPlugWorker(bool volatile *pfShutdown)
 {
     /*
      * Tell the control thread that it can continue spawning services.
@@ -542,38 +563,38 @@ DECLCALLBACK(int) VBoxServiceCpuHotPlugWorker(bool volatile *pfShutdown)
      */
     for (;;)
     {
-        /* Wait for CPU hot plugging event. */
+        /* Wait for CPU hot-plugging event. */
         uint32_t            idCpuCore;
         uint32_t            idCpuPackage;
         VMMDevCpuEventType  enmEventType;
         rc = VbglR3CpuHotPlugWaitForEvent(&enmEventType, &idCpuCore, &idCpuPackage);
         if (RT_SUCCESS(rc))
         {
-            VBoxServiceVerbose(3, "CpuHotPlug: Event happened idCpuCore=%u idCpuPackage=%u enmEventType=%d\n",
-                               idCpuCore, idCpuPackage, enmEventType);
+            VGSvcVerbose(3, "CpuHotPlug: Event happened idCpuCore=%u idCpuPackage=%u enmEventType=%d\n",
+                         idCpuCore, idCpuPackage, enmEventType);
             switch (enmEventType)
             {
                 case VMMDevCpuEventType_Plug:
-                    VBoxServiceCpuHotPlugHandlePlugEvent(idCpuCore, idCpuPackage);
+                    vgsvcCpuHotPlugHandlePlugEvent(idCpuCore, idCpuPackage);
                     break;
 
                 case VMMDevCpuEventType_Unplug:
-                    VBoxServiceCpuHotPlugHandleUnplugEvent(idCpuCore, idCpuPackage);
+                    vgsvcCpuHotPlugHandleUnplugEvent(idCpuCore, idCpuPackage);
                     break;
 
                 default:
                 {
                     static uint32_t s_iErrors = 0;
                     if (s_iErrors++ < 10)
-                        VBoxServiceError("CpuHotPlug: Unknown event: idCpuCore=%u idCpuPackage=%u enmEventType=%d\n",
-                                         idCpuCore, idCpuPackage, enmEventType);
+                        VGSvcError("CpuHotPlug: Unknown event: idCpuCore=%u idCpuPackage=%u enmEventType=%d\n",
+                                   idCpuCore, idCpuPackage, enmEventType);
                     break;
                 }
             }
         }
         else if (rc != VERR_INTERRUPTED && rc != VERR_TRY_AGAIN)
         {
-            VBoxServiceError("CpuHotPlug: VbglR3CpuHotPlugWaitForEvent returned %Rrc\n", rc);
+            VGSvcError("CpuHotPlug: VbglR3CpuHotPlugWaitForEvent returned %Rrc\n", rc);
             break;
         }
 
@@ -586,8 +607,8 @@ DECLCALLBACK(int) VBoxServiceCpuHotPlugWorker(bool volatile *pfShutdown)
 }
 
 
-/** @copydoc VBOXSERVICE::pfnStop */
-static DECLCALLBACK(void) VBoxServiceCpuHotPlugStop(void)
+/** @interface_method_impl{VBOXSERVICE,pfnStop} */
+static DECLCALLBACK(void) vgsvcCpuHotPlugStop(void)
 {
     VbglR3InterruptEventWaits();
     return;
@@ -602,17 +623,17 @@ VBOXSERVICE g_CpuHotPlug =
     /* pszName. */
     "cpuhotplug",
     /* pszDescription. */
-    "CPU hot plugging monitor",
+    "CPU hot-plugging monitor",
     /* pszUsage. */
     NULL,
     /* pszOptions. */
     NULL,
     /* methods */
-    VBoxServiceDefaultPreInit,
-    VBoxServiceDefaultOption,
-    VBoxServiceDefaultInit,
-    VBoxServiceCpuHotPlugWorker,
-    VBoxServiceCpuHotPlugStop,
-    VBoxServiceDefaultTerm
+    VGSvcDefaultPreInit,
+    VGSvcDefaultOption,
+    VGSvcDefaultInit,
+    vgsvcCpuHotPlugWorker,
+    vgsvcCpuHotPlugStop,
+    VGSvcDefaultTerm
 };
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h b/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h
index 6851e0c..88a0468 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceInternal.h
@@ -95,11 +95,10 @@ typedef VBOXSERVICE *PVBOXSERVICE;
 typedef VBOXSERVICE const *PCVBOXSERVICE;
 
 /* Default call-backs for services which do not need special behaviour. */
-DECLCALLBACK(int) VBoxServiceDefaultPreInit(void);
-DECLCALLBACK(int) VBoxServiceDefaultOption(const char **ppszShort, int argc,
-                                           char **argv, int *pi);
-DECLCALLBACK(int) VBoxServiceDefaultInit(void);
-DECLCALLBACK(void) VBoxServiceDefaultTerm(void);
+DECLCALLBACK(int)  VGSvcDefaultPreInit(void);
+DECLCALLBACK(int)  VGSvcDefaultOption(const char **ppszShort, int argc, char **argv, int *pi);
+DECLCALLBACK(int)  VGSvcDefaultInit(void);
+DECLCALLBACK(void) VGSvcDefaultTerm(void);
 
 /** The service name.
  * @note Used on windows to name the service as well as the global mutex. */
@@ -180,40 +179,44 @@ extern VBOXSERVICE  g_AutoMount;
 extern RTCRITSECT   g_csLog; /* For guest process stdout dumping. */
 #endif
 
-extern RTEXITCODE               VBoxServiceSyntax(const char *pszFormat, ...);
-extern RTEXITCODE               VBoxServiceError(const char *pszFormat, ...);
-extern void                     VBoxServiceVerbose(unsigned iLevel, const char *pszFormat, ...);
-extern int                      VBoxServiceArgUInt32(int argc, char **argv, const char *psz, int *pi, uint32_t *pu32,
-                                                     uint32_t u32Min, uint32_t u32Max);
-extern int                      VBoxServiceStartServices(void);
-extern int                      VBoxServiceStopServices(void);
-extern void                     VBoxServiceMainWait(void);
-extern int                      VBoxServiceReportStatus(VBoxGuestFacilityStatus enmStatus);
+extern RTEXITCODE               VGSvcSyntax(const char *pszFormat, ...);
+extern RTEXITCODE               VGSvcError(const char *pszFormat, ...);
+extern void                     VGSvcVerbose(unsigned iLevel, const char *pszFormat, ...);
+extern int                      VGSvcLogCreate(const char *pszLogFile);
+extern void                     VGSvcLogDestroy(void);
+extern int                      VGSvcArgUInt32(int argc, char **argv, const char *psz, int *pi, uint32_t *pu32,
+                                               uint32_t u32Min, uint32_t u32Max);
+
+/* Exposing the following bits because of windows: */
+extern int                      VGSvcStartServices(void);
+extern int                      VGSvcStopServices(void);
+extern void                     VGSvcMainWait(void);
+extern int                      VGSvcReportStatus(VBoxGuestFacilityStatus enmStatus);
 #ifdef RT_OS_WINDOWS
-extern RTEXITCODE               VBoxServiceWinInstall(void);
-extern RTEXITCODE               VBoxServiceWinUninstall(void);
-extern RTEXITCODE               VBoxServiceWinEnterCtrlDispatcher(void);
-extern void                     VBoxServiceWinSetStopPendingStatus(uint32_t uCheckPoint);
+extern RTEXITCODE               VGSvcWinInstall(void);
+extern RTEXITCODE               VGSvcWinUninstall(void);
+extern RTEXITCODE               VGSvcWinEnterCtrlDispatcher(void);
+extern void                     VGSvcWinSetStopPendingStatus(uint32_t uCheckPoint);
 #endif
 
 #ifdef VBOXSERVICE_TOOLBOX
-extern bool                     VBoxServiceToolboxMain(int argc, char **argv, RTEXITCODE *prcExit);
+extern bool                     VGSvcToolboxMain(int argc, char **argv, RTEXITCODE *prcExit);
 #endif
 
 #ifdef RT_OS_WINDOWS
 # ifdef VBOX_WITH_GUEST_PROPS
-extern int                      VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache, char **ppszUserList, uint32_t *pcUsersInList);
-extern int                      VBoxServiceWinGetComponentVersions(uint32_t uiClientID);
+extern int                      VGSvcVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache, char **ppszUserList, uint32_t *pcUsersInList);
+extern int                      VGSvcVMInfoWinGetComponentVersions(uint32_t uClientID);
 # endif /* VBOX_WITH_GUEST_PROPS */
 #endif /* RT_OS_WINDOWS */
 
 #ifdef VBOXSERVICE_MANAGEMENT
-extern uint32_t                 VBoxServiceBalloonQueryPages(uint32_t cbPage);
+extern uint32_t                 VGSvcBalloonQueryPages(uint32_t cbPage);
 #endif
 #if defined(VBOXSERVICE_PAGE_SHARING)
-extern RTEXITCODE               VBoxServicePageSharingWorkerChild(void);
+extern RTEXITCODE               VGSvcPageSharingWorkerChild(void);
 #endif
-extern int                      VBoxServiceVMInfoSignal(void);
+extern int                      VGSvcVMInfoSignal(void);
 
 RT_C_DECLS_END
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp b/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp
index 0130c82..107a269 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp
@@ -16,6 +16,31 @@
  */
 
 
+/** @page pg_vgsvc_pagesharing VBoxService - Page Sharing
+ *
+ * The Page Sharing subservice is responsible for finding memory mappings
+ * suitable page fusions.
+ *
+ * It is the driving force behind the Page Fusion feature in VirtualBox.
+ * Working with PGM and GMM (ring-0) thru the VMMDev interface.  Every so often
+ * it reenumerates the memory mappings (executables and shared libraries) of the
+ * guest OS and reports additions and removals to GMM.  For each mapping there
+ * is a filename and version as well as and address range and subsections.  GMM
+ * will match the mapping with mapping with the same name and version from other
+ * VMs and see if there are any identical pages between the two.
+ *
+ * To increase the hit rate and reduce the volatility, the service launches a
+ * child process which loads all the Windows system DLLs it can.  The child
+ * process is necessary as the DLLs are loaded without running the init code,
+ * and therefore not actually callable for other VBoxService code (may crash).
+ *
+ * This is currently only implemented on Windows.  There is no technical reason
+ * for it not to be doable for all the other guests too, it's just a matter of
+ * customer demand and engineering time.
+ *
+ */
+
+
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
@@ -37,28 +62,32 @@
 #include "VBoxServiceInternal.h"
 #include "VBoxServiceUtils.h"
 
+#if defined(RT_OS_WINDOWS) && !defined(TARGET_NT4)
+# include <tlhelp32.h>
+# include <psapi.h>
+# include <winternl.h>
+#endif
+
 
 /*********************************************************************************************************************************
-*   Global Variables                                                                                                             *
+*   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
-
-/** The semaphore we're blocking on. */
-static RTSEMEVENTMULTI  g_PageSharingEvent = NIL_RTSEMEVENTMULTI;
-
-#if defined(RT_OS_WINDOWS) && !defined(TARGET_NT4)
-#include <tlhelp32.h>
-#include <psapi.h>
-#include <winternl.h>
-
 typedef struct
 {
     AVLPVNODECORE   Core;
+#ifdef RT_OS_WINDOWS
     HMODULE         hModule;
     char            szFileVersion[16];
+# ifndef TARGET_NT4
     MODULEENTRY32   Info;
-} KNOWN_MODULE, *PKNOWN_MODULE;
+# endif
+#endif /* RT_OS_WINDOWS */
+} VGSVCPGSHKNOWNMOD, *PVGSVCPGSHKNOWNMOD;
 
-#define SystemModuleInformation     11
+
+#ifdef RT_OS_WINDOWS
+/* NTDLL API we want to use: */
+# define SystemModuleInformation 11
 
 typedef struct _RTL_PROCESS_MODULE_INFORMATION
 {
@@ -81,20 +110,38 @@ typedef struct _RTL_PROCESS_MODULES
 } RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;
 
 typedef NTSTATUS (WINAPI *PFNZWQUERYSYSTEMINFORMATION)(ULONG, PVOID, ULONG, PULONG);
-static PFNZWQUERYSYSTEMINFORMATION g_pfnZwQuerySystemInformation = NULL;
 
+#endif /* RT_OS_WINDOWS */
 
-static DECLCALLBACK(int) VBoxServicePageSharingEmptyTreeCallback(PAVLPVNODECORE pNode, void *pvUser);
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+#ifdef RT_OS_WINDOWS
+static PFNZWQUERYSYSTEMINFORMATION g_pfnZwQuerySystemInformation = NULL;
+#endif
+
+/** The semaphore we're blocking on. */
+static RTSEMEVENTMULTI  g_PageSharingEvent = NIL_RTSEMEVENTMULTI;
 
 static PAVLPVNODECORE   g_pKnownModuleTree = NULL;
 static uint64_t         g_idSession = 0;
 
+
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
+static DECLCALLBACK(int) vgsvcPageSharingEmptyTreeCallback(PAVLPVNODECORE pNode, void *pvUser);
+
+
+#if defined(RT_OS_WINDOWS) && !defined(TARGET_NT4)
+
 /**
  * Registers a new module with the VMM
  * @param   pModule         Module ptr
  * @param   fValidateMemory Validate/touch memory pages or not
  */
-void VBoxServicePageSharingRegisterModule(PKNOWN_MODULE pModule, bool fValidateMemory)
+static void vgsvcPageSharingRegisterModule(PVGSVCPGSHKNOWNMOD pModule, bool fValidateMemory)
 {
     VMMDEVSHAREDREGIONDESC   aRegions[VMMDEVSHAREDREGIONDESC_MAX];
     DWORD                    dwModuleSize = pModule->Info.modBaseSize;
@@ -102,12 +149,12 @@ void VBoxServicePageSharingRegisterModule(PKNOWN_MODULE pModule, bool fValidateM
     DWORD                    cbVersionSize, dummy;
     BYTE                    *pVersionInfo;
 
-    VBoxServiceVerbose(3, "VBoxServicePageSharingRegisterModule\n");
+    VGSvcVerbose(3, "vgsvcPageSharingRegisterModule\n");
 
     cbVersionSize = GetFileVersionInfoSize(pModule->Info.szExePath, &dummy);
     if (!cbVersionSize)
     {
-        VBoxServiceVerbose(3, "VBoxServicePageSharingRegisterModule: GetFileVersionInfoSize failed with %d\n", GetLastError());
+        VGSvcVerbose(3, "vgsvcPageSharingRegisterModule: GetFileVersionInfoSize failed with %d\n", GetLastError());
         return;
     }
     pVersionInfo = (BYTE *)RTMemAlloc(cbVersionSize);
@@ -116,22 +163,23 @@ void VBoxServicePageSharingRegisterModule(PKNOWN_MODULE pModule, bool fValidateM
 
     if (!GetFileVersionInfo(pModule->Info.szExePath, 0, cbVersionSize, pVersionInfo))
     {
-        VBoxServiceVerbose(3, "VBoxServicePageSharingRegisterModule: GetFileVersionInfo failed with %d\n", GetLastError());
+        VGSvcVerbose(3, "vgsvcPageSharingRegisterModule: GetFileVersionInfo failed with %d\n", GetLastError());
         goto end;
     }
 
     /* Fetch default code page. */
-    struct LANGANDCODEPAGE {
+    struct LANGANDCODEPAGE
+    {
         WORD wLanguage;
         WORD wCodePage;
     } *lpTranslate;
 
     UINT   cbTranslate;
-    BOOL ret = VerQueryValue(pVersionInfo, TEXT("\\VarFileInfo\\Translation"), (LPVOID *)&lpTranslate, &cbTranslate);
-    if (    !ret
-        ||  cbTranslate < 4)
+    BOOL fRet = VerQueryValue(pVersionInfo, TEXT("\\VarFileInfo\\Translation"), (LPVOID *)&lpTranslate, &cbTranslate);
+    if (   !fRet
+        || cbTranslate < 4)
     {
-        VBoxServiceVerbose(3, "VBoxServicePageSharingRegisterModule: VerQueryValue failed with %d (cb=%d)\n", GetLastError(), cbTranslate);
+        VGSvcVerbose(3, "vgsvcPageSharingRegisterModule: VerQueryValue failed with %d (cb=%d)\n", GetLastError(), cbTranslate);
         goto end;
     }
 
@@ -146,13 +194,13 @@ void VBoxServicePageSharingRegisterModule(PKNOWN_MODULE pModule, bool fValidateM
         char   szFileVersionLocation[256];
 
         sprintf(szFileVersionLocation, TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"), lpTranslate[i].wLanguage, lpTranslate[i].wCodePage);
-        ret = VerQueryValue(pVersionInfo, szFileVersionLocation, (LPVOID *)&lpszFileVersion, &cbFileVersion);
-        if (ret)
+        fRet = VerQueryValue(pVersionInfo, szFileVersionLocation, (LPVOID *)&lpszFileVersion, &cbFileVersion);
+        if (fRet)
             break;
     }
     if (i == cTranslationBlocks)
     {
-        VBoxServiceVerbose(3, "VBoxServicePageSharingRegisterModule: no file version found!\n");
+        VGSvcVerbose(3, "vgsvcPageSharingRegisterModule: no file version found!\n");
         goto end;
     }
 
@@ -166,58 +214,55 @@ void VBoxServicePageSharingRegisterModule(PKNOWN_MODULE pModule, bool fValidateM
         do
         {
             MEMORY_BASIC_INFORMATION MemInfo;
-
-            SIZE_T ret = VirtualQuery(pBaseAddress, &MemInfo, sizeof(MemInfo));
-            Assert(ret);
-            if (!ret)
+            SIZE_T cbRet = VirtualQuery(pBaseAddress, &MemInfo, sizeof(MemInfo));
+            Assert(cbRet);
+            if (!cbRet)
             {
-                VBoxServiceVerbose(3, "VBoxServicePageSharingRegisterModule: VirtualQueryEx failed with %d\n", GetLastError());
+                VGSvcVerbose(3, "vgsvcPageSharingRegisterModule: VirtualQueryEx failed with %d\n", GetLastError());
                 break;
             }
 
-            if (    MemInfo.State == MEM_COMMIT
-                &&  MemInfo.Type == MEM_IMAGE)
+            if (   MemInfo.State == MEM_COMMIT
+                && MemInfo.Type  == MEM_IMAGE)
             {
                 switch (MemInfo.Protect)
                 {
-                case PAGE_EXECUTE:
-                case PAGE_EXECUTE_READ:
-                case PAGE_READONLY:
-                {
-                    char *pRegion = (char *)MemInfo.BaseAddress;
-
-                    /* Skip the first region as it only contains the image file header. */
-                    if (pRegion != (char *)pModule->Info.modBaseAddr)
+                    case PAGE_EXECUTE:
+                    case PAGE_EXECUTE_READ:
+                    case PAGE_READONLY:
                     {
-                        /* Touch all pages. */
-                        while (pRegion < (char *)MemInfo.BaseAddress + MemInfo.RegionSize)
+                        char *pRegion = (char *)MemInfo.BaseAddress;
+
+                        /* Skip the first region as it only contains the image file header. */
+                        if (pRegion != (char *)pModule->Info.modBaseAddr)
                         {
-                            /* Try to trick the optimizer to leave the page touching code in place. */
-                            ASMProbeReadByte(pRegion);
-                            pRegion += PAGE_SIZE;
+                            /* Touch all pages. */
+                            while ((uintptr_t)pRegion < (uintptr_t)MemInfo.BaseAddress + MemInfo.RegionSize)
+                            {
+                                /* Try to trick the optimizer to leave the page touching code in place. */
+                                ASMProbeReadByte(pRegion);
+                                pRegion += PAGE_SIZE;
+                            }
                         }
-                    }
 #ifdef RT_ARCH_X86
-                    aRegions[idxRegion].GCRegionAddr = (RTGCPTR32)MemInfo.BaseAddress;
+                        aRegions[idxRegion].GCRegionAddr = (RTGCPTR32)MemInfo.BaseAddress;
 #else
-                    aRegions[idxRegion].GCRegionAddr = (RTGCPTR64)MemInfo.BaseAddress;
+                        aRegions[idxRegion].GCRegionAddr = (RTGCPTR64)MemInfo.BaseAddress;
 #endif
-                    aRegions[idxRegion].cbRegion     = MemInfo.RegionSize;
-                    idxRegion++;
+                        aRegions[idxRegion].cbRegion     = MemInfo.RegionSize;
+                        idxRegion++;
 
-                    break;
-                }
+                        break;
+                    }
 
-                default:
-                    break; /* ignore */
+                    default:
+                        break; /* ignore */
                 }
             }
 
             pBaseAddress = (BYTE *)MemInfo.BaseAddress + MemInfo.RegionSize;
             if (dwModuleSize > MemInfo.RegionSize)
-            {
                 dwModuleSize -= MemInfo.RegionSize;
-            }
             else
             {
                 dwModuleSize = 0;
@@ -240,43 +285,45 @@ void VBoxServicePageSharingRegisterModule(PKNOWN_MODULE pModule, bool fValidateM
         aRegions[idxRegion].cbRegion     = dwModuleSize;
         idxRegion++;
     }
-    VBoxServiceVerbose(3, "VBoxServicePageSharingRegisterModule: VbglR3RegisterSharedModule %s %s base=%p size=%x cregions=%d\n", pModule->Info.szModule, pModule->szFileVersion, pModule->Info.modBaseAddr, pModule->Info.modBaseSize, idxRegion);
+    VGSvcVerbose(3, "vgsvcPageSharingRegisterModule: VbglR3RegisterSharedModule %s %s base=%p size=%x cregions=%d\n", pModule->Info.szModule, pModule->szFileVersion, pModule->Info.modBaseAddr, pModule->Info.modBaseSize, idxRegion);
     int rc = VbglR3RegisterSharedModule(pModule->Info.szModule, pModule->szFileVersion, (uintptr_t)pModule->Info.modBaseAddr,
                                         pModule->Info.modBaseSize, idxRegion, aRegions);
     if (RT_FAILURE(rc))
-        VBoxServiceVerbose(3, "VBoxServicePageSharingRegisterModule: VbglR3RegisterSharedModule failed with %Rrc\n", rc);
+        VGSvcVerbose(3, "vgsvcPageSharingRegisterModule: VbglR3RegisterSharedModule failed with %Rrc\n", rc);
 
 end:
     RTMemFree(pVersionInfo);
     return;
 }
 
+
 /**
  * Inspect all loaded modules for the specified process
+ *
  * @param   dwProcessId     Process id
+ * @param   ppNewTree       The module tree we're assembling from modules found
+ *                          in this process.  Modules found are moved from
+ *                          g_pKnownModuleTree or created new.
  */
-void VBoxServicePageSharingInspectModules(DWORD dwProcessId, PAVLPVNODECORE *ppNewTree)
+static void vgsvcPageSharingInspectModules(DWORD dwProcessId, PAVLPVNODECORE *ppNewTree)
 {
-    HANDLE hProcess, hSnapshot;
-
     /* Get a list of all the modules in this process. */
-    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION,
-                           FALSE /* no child process handle inheritance */, dwProcessId);
+    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE /* no child process handle inheritance */, dwProcessId);
     if (hProcess == NULL)
     {
-        VBoxServiceVerbose(3, "VBoxServicePageSharingInspectModules: OpenProcess %x failed with %d\n", dwProcessId, GetLastError());
+        VGSvcVerbose(3, "vgsvcPageSharingInspectModules: OpenProcess %x failed with %d\n", dwProcessId, GetLastError());
         return;
     }
 
-    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
+    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
     if (hSnapshot == INVALID_HANDLE_VALUE)
     {
-        VBoxServiceVerbose(3, "VBoxServicePageSharingInspectModules: CreateToolhelp32Snapshot failed with %d\n", GetLastError());
+        VGSvcVerbose(3, "vgsvcPageSharingInspectModules: CreateToolhelp32Snapshot failed with %d\n", GetLastError());
         CloseHandle(hProcess);
         return;
     }
 
-    VBoxServiceVerbose(3, "VBoxServicePageSharingInspectModules\n");
+    VGSvcVerbose(3, "vgsvcPageSharingInspectModules\n");
 
     MODULEENTRY32 ModuleInfo;
     BOOL          bRet;
@@ -299,7 +346,7 @@ void VBoxServicePageSharingInspectModules(DWORD dwProcessId, PAVLPVNODECORE *ppN
             if (!pRec)
             {
                 /* New module; register it. */
-                PKNOWN_MODULE pModule = (PKNOWN_MODULE)RTMemAllocZ(sizeof(*pModule));
+                PVGSVCPGSHKNOWNMOD pModule = (PVGSVCPGSHKNOWNMOD)RTMemAllocZ(sizeof(*pModule));
                 Assert(pModule);
                 if (!pModule)
                     break;
@@ -308,43 +355,43 @@ void VBoxServicePageSharingInspectModules(DWORD dwProcessId, PAVLPVNODECORE *ppN
                 pModule->Core.Key = ModuleInfo.modBaseAddr;
                 pModule->hModule  = LoadLibraryEx(ModuleInfo.szExePath, 0, DONT_RESOLVE_DLL_REFERENCES);
                 if (pModule->hModule)
-                    VBoxServicePageSharingRegisterModule(pModule, true /* validate pages */);
+                    vgsvcPageSharingRegisterModule(pModule, true /* validate pages */);
 
-                VBoxServiceVerbose(3, "\n\n     MODULE NAME:     %s",           ModuleInfo.szModule );
-                VBoxServiceVerbose(3, "\n     executable     = %s",             ModuleInfo.szExePath );
-                VBoxServiceVerbose(3, "\n     process ID     = 0x%08X",         ModuleInfo.th32ProcessID );
-                VBoxServiceVerbose(3, "\n     base address   = 0x%08X", (DWORD) ModuleInfo.modBaseAddr );
-                VBoxServiceVerbose(3, "\n     base size      = %d",             ModuleInfo.modBaseSize );
+                VGSvcVerbose(3, "\n\n     MODULE NAME:     %s",           ModuleInfo.szModule );
+                VGSvcVerbose(3, "\n     executable     = %s",             ModuleInfo.szExePath );
+                VGSvcVerbose(3, "\n     process ID     = 0x%08X",         ModuleInfo.th32ProcessID );
+                VGSvcVerbose(3, "\n     base address   = 0x%08X", (DWORD) ModuleInfo.modBaseAddr );
+                VGSvcVerbose(3, "\n     base size      = %d",             ModuleInfo.modBaseSize );
 
                 pRec = &pModule->Core;
             }
             bool ret = RTAvlPVInsert(ppNewTree, pRec);
             Assert(ret); NOREF(ret);
         }
-    }
-    while (Module32Next(hSnapshot, &ModuleInfo));
+    } while (Module32Next(hSnapshot, &ModuleInfo));
 
     CloseHandle(hSnapshot);
     CloseHandle(hProcess);
 }
 
+
 /**
  * Inspect all running processes for executables and dlls that might be worth sharing
  * with other VMs.
  *
  */
-static void VBoxServicePageSharingInspectGuest(void)
+static void vgsvcPageSharingInspectGuest(void)
 {
     HANDLE hSnapshot;
     PAVLPVNODECORE pNewTree = NULL;
     DWORD dwProcessId = GetCurrentProcessId();
 
-    VBoxServiceVerbose(3, "VBoxServicePageSharingInspectGuest\n");
+    VGSvcVerbose(3, "vgsvcPageSharingInspectGuest\n");
 
     hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     if (hSnapshot == INVALID_HANDLE_VALUE)
     {
-        VBoxServiceVerbose(3, "VBoxServicePageSharingInspectGuest: CreateToolhelp32Snapshot failed with %d\n", GetLastError());
+        VGSvcVerbose(3, "vgsvcPageSharingInspectGuest: CreateToolhelp32Snapshot failed with %d\n", GetLastError());
         return;
     }
 
@@ -358,7 +405,7 @@ static void VBoxServicePageSharingInspectGuest(void)
     {
         /* Skip our own process. */
         if (ProcessInfo.th32ProcessID != dwProcessId)
-            VBoxServicePageSharingInspectModules(ProcessInfo.th32ProcessID, &pNewTree);
+            vgsvcPageSharingInspectModules(ProcessInfo.th32ProcessID, &pNewTree);
     }
     while (Process32Next(hSnapshot, &ProcessInfo));
 
@@ -374,7 +421,7 @@ static void VBoxServicePageSharingInspectGuest(void)
         NTSTATUS ret = g_pfnZwQuerySystemInformation(SystemModuleInformation, (PVOID)&cbBuffer, 0, &cbBuffer);
         if (!cbBuffer)
         {
-            VBoxServiceVerbose(1, "ZwQuerySystemInformation returned length 0\n");
+            VGSvcVerbose(1, "ZwQuerySystemInformation returned length 0\n");
             goto skipkernelmodules;
         }
 
@@ -385,16 +432,16 @@ static void VBoxServicePageSharingInspectGuest(void)
         ret = g_pfnZwQuerySystemInformation(SystemModuleInformation, pBuffer, cbBuffer, &cbBuffer);
         if (ret != STATUS_SUCCESS)
         {
-            VBoxServiceVerbose(1, "ZwQuerySystemInformation returned %x (1)\n", ret);
+            VGSvcVerbose(1, "ZwQuerySystemInformation returned %x (1)\n", ret);
             goto skipkernelmodules;
         }
 
         pSystemModules = (PRTL_PROCESS_MODULES)pBuffer;
         for (unsigned i = 0; i < pSystemModules->NumberOfModules; i++)
         {
-            VBoxServiceVerbose(4, "\n\n   KERNEL  MODULE NAME:     %s",     pSystemModules->Modules[i].FullPathName[pSystemModules->Modules[i].OffsetToFileName] );
-            VBoxServiceVerbose(4, "\n     executable     = %s",             pSystemModules->Modules[i].FullPathName );
-            VBoxServiceVerbose(4, "\n     flags          = 0x%08X\n",       pSystemModules->Modules[i].Flags);
+            VGSvcVerbose(4, "\n\n   KERNEL  MODULE NAME:     %s", pSystemModules->Modules[i].FullPathName[pSystemModules->Modules[i].OffsetToFileName] );
+            VGSvcVerbose(4, "\n     executable     = %s",         pSystemModules->Modules[i].FullPathName );
+            VGSvcVerbose(4, "\n     flags          = 0x%08X\n",   pSystemModules->Modules[i].Flags);
 
             /* User-mode modules seem to have no flags set; skip them as we detected them above. */
             if (pSystemModules->Modules[i].Flags == 0)
@@ -408,12 +455,13 @@ static void VBoxServicePageSharingInspectGuest(void)
                 if (!pRec)
                 {
                     /* New module; register it. */
-                    char          szFullFilePath[512];
-                    PKNOWN_MODULE pModule = (PKNOWN_MODULE)RTMemAllocZ(sizeof(*pModule));
+                    char szFullFilePath[512];
+                    PVGSVCPGSHKNOWNMOD pModule = (PVGSVCPGSHKNOWNMOD)RTMemAllocZ(sizeof(*pModule));
                     Assert(pModule);
                     if (!pModule)
                         break;
 
+/** @todo Use unicode APIs! */
                     strcpy(pModule->Info.szModule, &pSystemModules->Modules[i].FullPathName[pSystemModules->Modules[i].OffsetToFileName]);
                     GetSystemDirectoryA(szFullFilePath, sizeof(szFullFilePath));
 
@@ -424,16 +472,16 @@ static void VBoxServicePageSharingInspectGuest(void)
                         /* Seen just file names in XP; try to locate the file in the system32 and system32\drivers directories. */
                         strcat(szFullFilePath, "\\");
                         strcat(szFullFilePath, pSystemModules->Modules[i].FullPathName);
-                        VBoxServiceVerbose(3, "Unexpected kernel module name try %s\n", szFullFilePath);
+                        VGSvcVerbose(3, "Unexpected kernel module name try %s\n", szFullFilePath);
                         if (RTFileExists(szFullFilePath) == false)
                         {
                             GetSystemDirectoryA(szFullFilePath, sizeof(szFullFilePath));
                             strcat(szFullFilePath, "\\drivers\\");
                             strcat(szFullFilePath, pSystemModules->Modules[i].FullPathName);
-                            VBoxServiceVerbose(3, "Unexpected kernel module name try %s\n", szFullFilePath);
+                            VGSvcVerbose(3, "Unexpected kernel module name try %s\n", szFullFilePath);
                             if (RTFileExists(szFullFilePath) == false)
                             {
-                                VBoxServiceVerbose(1, "Unexpected kernel module name %s\n", pSystemModules->Modules[i].FullPathName);
+                                VGSvcVerbose(1, "Unexpected kernel module name %s\n", pSystemModules->Modules[i].FullPathName);
                                 RTMemFree(pModule);
                                 continue;
                             }
@@ -444,7 +492,7 @@ static void VBoxServicePageSharingInspectGuest(void)
                         lpPath = strchr(lpPath+1, '\\');
                         if (!lpPath)
                         {
-                            VBoxServiceVerbose(1, "Unexpected kernel module name %s (2)\n", pSystemModules->Modules[i].FullPathName);
+                            VGSvcVerbose(1, "Unexpected kernel module name %s (2)\n", pSystemModules->Modules[i].FullPathName);
                             RTMemFree(pModule);
                             continue;
                         }
@@ -457,13 +505,13 @@ static void VBoxServicePageSharingInspectGuest(void)
                     pModule->Info.modBaseSize = pSystemModules->Modules[i].ImageSize;
 
                     pModule->Core.Key = pSystemModules->Modules[i].ImageBase;
-                    VBoxServicePageSharingRegisterModule(pModule, false /* don't check memory pages */);
+                    vgsvcPageSharingRegisterModule(pModule, false /* don't check memory pages */);
 
-                    VBoxServiceVerbose(3, "\n\n   KERNEL  MODULE NAME:     %s",     pModule->Info.szModule );
-                    VBoxServiceVerbose(3, "\n     executable     = %s",             pModule->Info.szExePath );
-                    VBoxServiceVerbose(3, "\n     base address   = 0x%08X", (DWORD) pModule->Info.modBaseAddr );
-                    VBoxServiceVerbose(3, "\n     flags          = 0x%08X",         pSystemModules->Modules[i].Flags);
-                    VBoxServiceVerbose(3, "\n     base size      = %d",             pModule->Info.modBaseSize );
+                    VGSvcVerbose(3, "\n\n   KERNEL  MODULE NAME:     %s",     pModule->Info.szModule );
+                    VGSvcVerbose(3, "\n     executable     = %s",             pModule->Info.szExePath );
+                    VGSvcVerbose(3, "\n     base address   = 0x%08X", (DWORD) pModule->Info.modBaseAddr );
+                    VGSvcVerbose(3, "\n     flags          = 0x%08X",         pSystemModules->Modules[i].Flags);
+                    VGSvcVerbose(3, "\n     base size      = %d",             pModule->Info.modBaseSize );
 
                     pRec = &pModule->Core;
                 }
@@ -477,7 +525,7 @@ skipkernelmodules:
     }
 
     /* Delete leftover modules in the old tree. */
-    RTAvlPVDestroy(&g_pKnownModuleTree, VBoxServicePageSharingEmptyTreeCallback, NULL);
+    RTAvlPVDestroy(&g_pKnownModuleTree, vgsvcPageSharingEmptyTreeCallback, NULL);
 
     /* Check all registered modules. */
     VbglR3CheckSharedModules();
@@ -486,15 +534,16 @@ skipkernelmodules:
     g_pKnownModuleTree = pNewTree;
 }
 
+
 /**
  * RTAvlPVDestroy callback.
  */
-static DECLCALLBACK(int) VBoxServicePageSharingEmptyTreeCallback(PAVLPVNODECORE pNode, void *pvUser)
+static DECLCALLBACK(int) vgsvcPageSharingEmptyTreeCallback(PAVLPVNODECORE pNode, void *pvUser)
 {
-    PKNOWN_MODULE pModule = (PKNOWN_MODULE)pNode;
+    PVGSVCPGSHKNOWNMOD pModule = (PVGSVCPGSHKNOWNMOD)pNode;
     bool *pfUnregister = (bool *)pvUser;
 
-    VBoxServiceVerbose(3, "VBoxServicePageSharingEmptyTreeCallback %s %s\n", pModule->Info.szModule, pModule->szFileVersion);
+    VGSvcVerbose(3, "vgsvcPageSharingEmptyTreeCallback %s %s\n", pModule->Info.szModule, pModule->szFileVersion);
 
     /* Dereference module in the hypervisor. */
     if (   !pfUnregister
@@ -513,21 +562,25 @@ static DECLCALLBACK(int) VBoxServicePageSharingEmptyTreeCallback(PAVLPVNODECORE
 
 
 #elif TARGET_NT4
-static void VBoxServicePageSharingInspectGuest(void)
+
+static void vgsvcPageSharingInspectGuest(void)
 {
     /* not implemented */
 }
+
 #else
-static void VBoxServicePageSharingInspectGuest(void)
+
+static void vgsvcPageSharingInspectGuest(void)
 {
     /** @todo other platforms */
 }
+
 #endif
 
-/** @copydoc VBOXSERVICE::pfnInit */
-static DECLCALLBACK(int) VBoxServicePageSharingInit(void)
+/** @interface_method_impl{VBOXSERVICE,pfnInit} */
+static DECLCALLBACK(int) vgsvcPageSharingInit(void)
 {
-    VBoxServiceVerbose(3, "VBoxServicePageSharingInit\n");
+    VGSvcVerbose(3, "vgsvcPageSharingInit\n");
 
     int rc = RTSemEventMultiCreate(&g_PageSharingEvent);
     AssertRCReturn(rc, rc);
@@ -539,9 +592,9 @@ static DECLCALLBACK(int) VBoxServicePageSharingInit(void)
     if (RT_FAILURE(rc))
     {
         if (rc == VERR_IO_GEN_FAILURE)
-            VBoxServiceVerbose(0, "PageSharing: Page sharing support is not available by the host\n");
+            VGSvcVerbose(0, "PageSharing: Page sharing support is not available by the host\n");
         else
-            VBoxServiceError("VBoxServicePageSharingInit: Failed with rc=%Rrc\n", rc);
+            VGSvcError("vgsvcPageSharingInit: Failed with rc=%Rrc\n", rc);
 
         rc = VERR_SERVICE_DISABLED;
 
@@ -554,8 +607,11 @@ static DECLCALLBACK(int) VBoxServicePageSharingInit(void)
     return rc;
 }
 
-/** @copydoc VBOXSERVICE::pfnWorker */
-DECLCALLBACK(int) VBoxServicePageSharingWorker(bool volatile *pfShutdown)
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnWorker}
+ */
+static DECLCALLBACK(int) vgsvcPageSharingWorker(bool volatile *pfShutdown)
 {
     /*
      * Tell the control thread that it can continue
@@ -568,12 +624,11 @@ DECLCALLBACK(int) VBoxServicePageSharingWorker(bool volatile *pfShutdown)
      */
     for (;;)
     {
-        BOOL fEnabled = VbglR3PageSharingIsEnabled();
-
-        VBoxServiceVerbose(3, "VBoxServicePageSharingWorker: enabled=%d\n", fEnabled);
+        bool fEnabled = VbglR3PageSharingIsEnabled();
+        VGSvcVerbose(3, "vgsvcPageSharingWorker: enabled=%d\n", fEnabled);
 
         if (fEnabled)
-            VBoxServicePageSharingInspectGuest();
+            vgsvcPageSharingInspectGuest();
 
         /*
          * Block for a minute.
@@ -588,7 +643,7 @@ DECLCALLBACK(int) VBoxServicePageSharingWorker(bool volatile *pfShutdown)
             break;
         if (rc != VERR_TIMEOUT && RT_FAILURE(rc))
         {
-            VBoxServiceError("VBoxServicePageSharingWorker: RTSemEventMultiWait failed; rc=%Rrc\n", rc);
+            VGSvcError("vgsvcPageSharingWorker: RTSemEventMultiWait failed; rc=%Rrc\n", rc);
             break;
         }
 #if defined(RT_OS_WINDOWS) && !defined(TARGET_NT4)
@@ -600,9 +655,9 @@ DECLCALLBACK(int) VBoxServicePageSharingWorker(bool volatile *pfShutdown)
         {
             bool fUnregister = false;
 
-            VBoxServiceVerbose(3, "VBoxServicePageSharingWorker: VM was restored!!\n");
+            VGSvcVerbose(3, "vgsvcPageSharingWorker: VM was restored!!\n");
             /* The VM was restored, so reregister all modules the next time. */
-            RTAvlPVDestroy(&g_pKnownModuleTree, VBoxServicePageSharingEmptyTreeCallback, &fUnregister);
+            RTAvlPVDestroy(&g_pKnownModuleTree, vgsvcPageSharingEmptyTreeCallback, &fUnregister);
             g_pKnownModuleTree = NULL;
 
             g_idSession = idNewSession;
@@ -613,7 +668,7 @@ DECLCALLBACK(int) VBoxServicePageSharingWorker(bool volatile *pfShutdown)
     RTSemEventMultiDestroy(g_PageSharingEvent);
     g_PageSharingEvent = NIL_RTSEMEVENTMULTI;
 
-    VBoxServiceVerbose(3, "VBoxServicePageSharingWorker: finished thread\n");
+    VGSvcVerbose(3, "vgsvcPageSharingWorker: finished thread\n");
     return 0;
 }
 
@@ -621,26 +676,29 @@ DECLCALLBACK(int) VBoxServicePageSharingWorker(bool volatile *pfShutdown)
 
 /**
  * This gets control when VBoxService is launched with "pagefusion" by
- * VBoxServicePageSharingWorkerProcess().
+ * vgsvcPageSharingWorkerProcess().
  *
  * @returns RTEXITCODE_SUCCESS.
  *
  * @remarks It won't normally return since the parent drops the shutdown hint
  *          via RTProcTerminate().
  */
-RTEXITCODE VBoxServicePageSharingWorkerChild(void)
+RTEXITCODE VGSvcPageSharingWorkerChild(void)
 {
-    VBoxServiceVerbose(3, "VBoxServicePageSharingInitFork\n");
+    VGSvcVerbose(3, "vgsvcPageSharingInitFork\n");
 
     bool fShutdown = false;
-    VBoxServicePageSharingInit();
-    VBoxServicePageSharingWorker(&fShutdown);
+    vgsvcPageSharingInit();
+    vgsvcPageSharingWorker(&fShutdown);
 
     return RTEXITCODE_SUCCESS;
 }
 
-/** @copydoc VBOXSERVICE::pfnWorker */
-DECLCALLBACK(int) VBoxServicePageSharingWorkerProcess(bool volatile *pfShutdown)
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnWorker}
+ */
+static DECLCALLBACK(int) vgsvcPageSharingWorkerProcess(bool volatile *pfShutdown)
 {
     RTPROCESS hProcess = NIL_RTPROCESS;
     int rc;
@@ -656,8 +714,8 @@ DECLCALLBACK(int) VBoxServicePageSharingWorkerProcess(bool volatile *pfShutdown)
      */
     for (;;)
     {
-        BOOL fEnabled = VbglR3PageSharingIsEnabled();
-        VBoxServiceVerbose(3, "VBoxServicePageSharingWorkerProcess: enabled=%d\n", fEnabled);
+        bool fEnabled = VbglR3PageSharingIsEnabled();
+        VGSvcVerbose(3, "vgsvcPageSharingWorkerProcess: enabled=%d\n", fEnabled);
 
         /*
          * Start a 2nd VBoxService process to deal with page fusion as we do
@@ -677,7 +735,7 @@ DECLCALLBACK(int) VBoxServicePageSharingWorkerProcess(bool volatile *pfShutdown)
                 papszArgs[2] = NULL;
                 rc = RTProcCreate(pszExeName, papszArgs, RTENV_DEFAULT, 0 /* normal child */, &hProcess);
                 if (RT_FAILURE(rc))
-                    VBoxServiceError("VBoxServicePageSharingWorkerProcess: RTProcCreate %s failed; rc=%Rrc\n", pszExeName, rc);
+                    VGSvcError("vgsvcPageSharingWorkerProcess: RTProcCreate %s failed; rc=%Rrc\n", pszExeName, rc);
             }
         }
 
@@ -694,7 +752,7 @@ DECLCALLBACK(int) VBoxServicePageSharingWorkerProcess(bool volatile *pfShutdown)
             break;
         if (rc != VERR_TIMEOUT && RT_FAILURE(rc))
         {
-            VBoxServiceError("VBoxServicePageSharingWorkerProcess: RTSemEventMultiWait failed; rc=%Rrc\n", rc);
+            VGSvcError("vgsvcPageSharingWorkerProcess: RTSemEventMultiWait failed; rc=%Rrc\n", rc);
             break;
         }
     }
@@ -705,14 +763,16 @@ DECLCALLBACK(int) VBoxServicePageSharingWorkerProcess(bool volatile *pfShutdown)
     RTSemEventMultiDestroy(g_PageSharingEvent);
     g_PageSharingEvent = NIL_RTSEMEVENTMULTI;
 
-    VBoxServiceVerbose(3, "VBoxServicePageSharingWorkerProcess: finished thread\n");
+    VGSvcVerbose(3, "vgsvcPageSharingWorkerProcess: finished thread\n");
     return 0;
 }
 
 #endif /* RT_OS_WINDOWS */
 
-/** @copydoc VBOXSERVICE::pfnStop */
-static DECLCALLBACK(void) VBoxServicePageSharingStop(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnStop}
+ */
+static DECLCALLBACK(void) vgsvcPageSharingStop(void)
 {
     RTSemEventMultiSignal(g_PageSharingEvent);
 }
@@ -732,14 +792,15 @@ VBOXSERVICE g_PageSharing =
     /* pszOptions. */
     NULL,
     /* methods */
-    VBoxServiceDefaultPreInit,
-    VBoxServiceDefaultOption,
-    VBoxServicePageSharingInit,
+    VGSvcDefaultPreInit,
+    VGSvcDefaultOption,
+    vgsvcPageSharingInit,
 #ifdef RT_OS_WINDOWS
-    VBoxServicePageSharingWorkerProcess,
+    vgsvcPageSharingWorkerProcess,
 #else
-    VBoxServicePageSharingWorker,
+    vgsvcPageSharingWorker,
 #endif
-    VBoxServicePageSharingStop,
-    VBoxServiceDefaultTerm
+    vgsvcPageSharingStop,
+    VGSvcDefaultTerm
 };
+
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.cpp b/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.cpp
index 877ed94..7e36a2b 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.cpp
@@ -30,13 +30,10 @@
 #include "VBoxServicePropCache.h"
 
 
-/** Internal functions, not for public use. */
-PVBOXSERVICEVEPROPCACHEENTRY vboxServicePropCacheFindInternal(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName, uint32_t uFlags);
-PVBOXSERVICEVEPROPCACHEENTRY vboxServicePropCacheInsertEntryInternal(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName);
-
 
 /** @todo Docs */
-PVBOXSERVICEVEPROPCACHEENTRY vboxServicePropCacheFindInternal(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName, uint32_t uFlags)
+static PVBOXSERVICEVEPROPCACHEENTRY vgsvcPropCacheFindInternal(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName,
+                                                               uint32_t fFlags)
 {
     AssertPtrReturn(pCache, NULL);
     AssertPtrReturn(pszName, NULL);
@@ -64,7 +61,7 @@ PVBOXSERVICEVEPROPCACHEENTRY vboxServicePropCacheFindInternal(PVBOXSERVICEVEPROP
 
 
 /** @todo Docs */
-PVBOXSERVICEVEPROPCACHEENTRY vboxServicePropCacheInsertEntryInternal(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName)
+static PVBOXSERVICEVEPROPCACHEENTRY vgsvcPropCacheInsertEntryInternal(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName)
 {
     AssertPtrReturn(pCache, NULL);
     AssertPtrReturn(pszName, NULL);
@@ -85,7 +82,7 @@ PVBOXSERVICEVEPROPCACHEENTRY vboxServicePropCacheInsertEntryInternal(PVBOXSERVIC
         int rc = RTCritSectEnter(&pCache->CritSect);
         if (RT_SUCCESS(rc))
         {
-            /*rc =*/ RTListAppend(&pCache->NodeHead, &pNode->NodeSucc);
+            RTListAppend(&pCache->NodeHead, &pNode->NodeSucc);
             rc = RTCritSectLeave(&pCache->CritSect);
         }
     }
@@ -94,7 +91,7 @@ PVBOXSERVICEVEPROPCACHEENTRY vboxServicePropCacheInsertEntryInternal(PVBOXSERVIC
 
 
 /** @todo Docs */
-int vboxServicePropCacheWritePropF(uint32_t u32ClientId, const char *pszName, uint32_t fFlags, const char *pszValueFormat, ...)
+static int vgsvcPropCacheWritePropF(uint32_t u32ClientId, const char *pszName, uint32_t fFlags, const char *pszValueFormat, ...)
 {
     AssertPtrReturn(pszName, VERR_INVALID_POINTER);
 
@@ -107,7 +104,7 @@ int vboxServicePropCacheWritePropF(uint32_t u32ClientId, const char *pszName, ui
         char *pszValue;
         if (RTStrAPrintfV(&pszValue, pszValueFormat, va) >= 0)
         {
-            if (fFlags & VBOXSERVICEPROPCACHEFLAG_TRANSIENT)
+            if (fFlags & VGSVCPROPCACHE_FLAGS_TRANSIENT)
             {
                 /*
                  * Because a value can be temporary we have to make sure it also
@@ -134,9 +131,7 @@ int vboxServicePropCacheWritePropF(uint32_t u32ClientId, const char *pszName, ui
         va_end(va);
     }
     else
-    {
         rc = VbglR3GuestPropWriteValue(u32ClientId, pszName, NULL);
-    }
     return rc;
 }
 
@@ -148,7 +143,7 @@ int vboxServicePropCacheWritePropF(uint32_t u32ClientId, const char *pszName, ui
  * @param   pCache          Pointer to the cache.
  * @param   uClientId       The HGCM handle of to the guest property service.
  */
-int VBoxServicePropCacheCreate(PVBOXSERVICEVEPROPCACHE pCache, uint32_t uClientId)
+int VGSvcPropCacheCreate(PVBOXSERVICEVEPROPCACHE pCache, uint32_t uClientId)
 {
     AssertPtrReturn(pCache, VERR_INVALID_POINTER);
     /** @todo Prevent init the cache twice!
@@ -161,6 +156,7 @@ int VBoxServicePropCacheCreate(PVBOXSERVICEVEPROPCACHE pCache, uint32_t uClientI
 
 /**
  * Updates a cache entry without submitting any changes to the host.
+ *
  * This is handy for defining default values/flags.
  *
  * @returns VBox status code.
@@ -170,14 +166,13 @@ int VBoxServicePropCacheCreate(PVBOXSERVICEVEPROPCACHE pCache, uint32_t uClientI
  * @param   fFlags          The property flags to set.
  * @param   pszValueReset   The property reset value.
  */
-int VBoxServicePropCacheUpdateEntry(PVBOXSERVICEVEPROPCACHE pCache,
-                                    const char *pszName, uint32_t fFlags, const char *pszValueReset)
+int VGSvcPropCacheUpdateEntry(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName, uint32_t fFlags, const char *pszValueReset)
 {
     AssertPtrReturn(pCache, VERR_INVALID_POINTER);
     AssertPtrReturn(pszName, VERR_INVALID_POINTER);
-    PVBOXSERVICEVEPROPCACHEENTRY pNode = vboxServicePropCacheFindInternal(pCache, pszName, 0);
+    PVBOXSERVICEVEPROPCACHEENTRY pNode = vgsvcPropCacheFindInternal(pCache, pszName, 0);
     if (pNode == NULL)
-        pNode = vboxServicePropCacheInsertEntryInternal(pCache, pszName);
+        pNode = vgsvcPropCacheInsertEntryInternal(pCache, pszName);
 
     int rc;
     if (pNode != NULL)
@@ -213,7 +208,7 @@ int VBoxServicePropCacheUpdateEntry(PVBOXSERVICEVEPROPCACHE pCache,
  *                          the property will be deleted (if possible).
  * @param   ...             Format arguments.
  */
-int VBoxServicePropCacheUpdate(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName, const char *pszValueFormat, ...)
+int VGSvcPropCacheUpdate(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName, const char *pszValueFormat, ...)
 {
     AssertPtrReturn(pCache, VERR_INVALID_POINTER);
     AssertPtrReturn(pszName, VERR_INVALID_POINTER);
@@ -234,21 +229,21 @@ int VBoxServicePropCacheUpdate(PVBOXSERVICEVEPROPCACHE pCache, const char *pszNa
             return VERR_NO_STR_MEMORY;
     }
 
-    PVBOXSERVICEVEPROPCACHEENTRY pNode = vboxServicePropCacheFindInternal(pCache, pszName, 0);
+    PVBOXSERVICEVEPROPCACHEENTRY pNode = vgsvcPropCacheFindInternal(pCache, pszName, 0);
 
     /* Lock the cache. */
     int rc = RTCritSectEnter(&pCache->CritSect);
     if (RT_SUCCESS(rc))
     {
         if (pNode == NULL)
-            pNode = vboxServicePropCacheInsertEntryInternal(pCache, pszName);
+            pNode = vgsvcPropCacheInsertEntryInternal(pCache, pszName);
 
         AssertPtr(pNode);
         if (pszValue) /* Do we have a value to check for? */
         {
             bool fUpdate = false;
             /* Always update this property, no matter what? */
-            if (pNode->fFlags & VBOXSERVICEPROPCACHEFLAG_ALWAYS_UPDATE)
+            if (pNode->fFlags & VGSVCPROPCACHE_FLAGS_ALWAYS_UPDATE)
                 fUpdate = true;
             /* Did the value change so we have to update? */
             else if (pNode->pszValue && strcmp(pNode->pszValue, pszValue) != 0)
@@ -260,8 +255,8 @@ int VBoxServicePropCacheUpdate(PVBOXSERVICEVEPROPCACHE pCache, const char *pszNa
             if (fUpdate)
             {
                 /* Write the update. */
-                rc = vboxServicePropCacheWritePropF(pCache->uClientID, pNode->pszName, pNode->fFlags, pszValue);
-                VBoxServiceVerbose(4, "[PropCache %p]: Written \"%s\"=\"%s\" (flags: %x), rc=%Rrc\n",
+                rc = vgsvcPropCacheWritePropF(pCache->uClientID, pNode->pszName, pNode->fFlags, pszValue);
+                VGSvcVerbose(4, "[PropCache %p]: Written '%s'='%s' (flags: %x), rc=%Rrc\n",
                                    pCache, pNode->pszName, pszValue, pNode->fFlags, rc);
                 if (RT_SUCCESS(rc)) /* Only update the node's value on successful write. */
                 {
@@ -279,9 +274,9 @@ int VBoxServicePropCacheUpdate(PVBOXSERVICEVEPROPCACHE pCache, const char *pszNa
             /* No value specified. Deletion (or no action required). */
             if (pNode->pszValue) /* Did we have a value before? Then the value needs to be deleted. */
             {
-                rc = vboxServicePropCacheWritePropF(pCache->uClientID, pNode->pszName,
+                rc = vgsvcPropCacheWritePropF(pCache->uClientID, pNode->pszName,
                                                     0, /* Flags */ NULL /* Value */);
-                VBoxServiceVerbose(4, "[PropCache %p]: Deleted \"%s\"=\"%s\" (flags: %x), rc=%Rrc\n",
+                VGSvcVerbose(4, "[PropCache %p]: Deleted '%s'='%s' (flags: %x), rc=%Rrc\n",
                                    pCache, pNode->pszName, pNode->pszValue, pNode->fFlags, rc);
                 if (RT_SUCCESS(rc)) /* Only delete property value on successful Vbgl deletion. */
                 {
@@ -298,8 +293,7 @@ int VBoxServicePropCacheUpdate(PVBOXSERVICEVEPROPCACHE pCache, const char *pszNa
         RTCritSectLeave(&pCache->CritSect);
     }
 
-    VBoxServiceVerbose(4, "[PropCache %p]: Updating \"%s\" resulted in rc=%Rrc\n",
-                       pCache, pszName, rc);
+    VGSvcVerbose(4, "[PropCache %p]: Updating '%s' resulted in rc=%Rrc\n", pCache, pszName, rc);
 
     /* Delete temp stuff. */
     RTStrFree(pszValue);
@@ -319,7 +313,8 @@ int VBoxServicePropCacheUpdate(PVBOXSERVICEVEPROPCACHE pCache, const char *pszNa
  *                          to be an absolute path.
  * @param   ...             Format arguments.
  */
-int VBoxServicePropCacheUpdateByPath(PVBOXSERVICEVEPROPCACHE pCache, const char *pszValue, uint32_t fFlags, const char *pszPathFormat, ...)
+int VGSvcPropCacheUpdateByPath(PVBOXSERVICEVEPROPCACHE pCache, const char *pszValue, uint32_t fFlags,
+                               const char *pszPathFormat, ...)
 {
     AssertPtrReturn(pCache, VERR_INVALID_POINTER);
     AssertPtrReturn(pszPathFormat, VERR_INVALID_POINTER);
@@ -348,7 +343,7 @@ int VBoxServicePropCacheUpdateByPath(PVBOXSERVICEVEPROPCACHE pCache, const char
                 if (RTStrStr(pNodeIt->pszName, pszPath) == pNodeIt->pszName)
                 {
                     /** @todo Use some internal function to update the node directly, this is slow atm. */
-                    rc = VBoxServicePropCacheUpdate(pCache, pNodeIt->pszName, pszValue);
+                    rc = VGSvcPropCacheUpdate(pCache, pNodeIt->pszName, pszValue);
                 }
                 if (RT_FAILURE(rc))
                     break;
@@ -366,7 +361,7 @@ int VBoxServicePropCacheUpdateByPath(PVBOXSERVICEVEPROPCACHE pCache, const char
  *
  * @param   pCache          The property cache.
  */
-int VBoxServicePropCacheFlush(PVBOXSERVICEVEPROPCACHE pCache)
+int VGSvcPropCacheFlush(PVBOXSERVICEVEPROPCACHE pCache)
 {
     AssertPtrReturn(pCache, VERR_INVALID_POINTER);
 
@@ -376,8 +371,7 @@ int VBoxServicePropCacheFlush(PVBOXSERVICEVEPROPCACHE pCache)
     {
         RTListForEach(&pCache->NodeHead, pNodeIt, VBOXSERVICEVEPROPCACHEENTRY, NodeSucc)
         {
-            rc = vboxServicePropCacheWritePropF(pCache->uClientID, pNodeIt->pszName,
-                                                pNodeIt->fFlags, pNodeIt->pszValue);
+            rc = vgsvcPropCacheWritePropF(pCache->uClientID, pNodeIt->pszName, pNodeIt->fFlags, pNodeIt->pszValue);
             if (RT_FAILURE(rc))
                 break;
         }
@@ -392,7 +386,7 @@ int VBoxServicePropCacheFlush(PVBOXSERVICEVEPROPCACHE pCache)
  *
  * @param   pCache          The property cache.
  */
-void VBoxServicePropCacheDestroy(PVBOXSERVICEVEPROPCACHE pCache)
+void VGSvcPropCacheDestroy(PVBOXSERVICEVEPROPCACHE pCache)
 {
     AssertPtrReturnVoid(pCache);
     Assert(pCache->uClientID);
@@ -410,11 +404,8 @@ void VBoxServicePropCacheDestroy(PVBOXSERVICEVEPROPCACHE pCache)
                                                                                       VBOXSERVICEVEPROPCACHEENTRY, NodeSucc);
             RTListNodeRemove(&pNode->NodeSucc);
 
-            if (pNode->fFlags & VBOXSERVICEPROPCACHEFLAG_TEMPORARY)
-            {
-                rc = vboxServicePropCacheWritePropF(pCache->uClientID, pNode->pszName,
-                                                    pNode->fFlags, pNode->pszValueReset);
-            }
+            if (pNode->fFlags & VGSVCPROPCACHE_FLAGS_TEMPORARY)
+                rc = vgsvcPropCacheWritePropF(pCache->uClientID, pNode->pszName, pNode->fFlags, pNode->pszValueReset);
 
             AssertPtr(pNode->pszName);
             RTStrFree(pNode->pszName);
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.h b/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.h
index 833462e..f6006b0 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServicePropCache.h
@@ -20,30 +20,34 @@
 
 #include "VBoxServiceInternal.h"
 
-# ifdef VBOX_WITH_GUEST_PROPS
+#ifdef VBOX_WITH_GUEST_PROPS
 
+/** @name VGSVCPROPCACHE_FLAG_XXX - Guest Property Cache Flags.
+ * @{ */
 /** Indicates wheter a guest property is temporary and either should
  *  - a) get a "reset" value assigned (via VBoxServicePropCacheUpdateEntry)
  *       as soon as the property cache gets destroyed, or
  *  - b) get deleted when no reset value is specified.
  */
-#define VBOXSERVICEPROPCACHEFLAG_TEMPORARY              RT_BIT(1)
+# define VGSVCPROPCACHE_FLAGS_TEMPORARY             RT_BIT(1)
 /** Indicates whether a property every time needs to be updated, regardless
  *  if its real value changed or not. */
-#define VBOXSERVICEPROPCACHEFLAG_ALWAYS_UPDATE          RT_BIT(2)
+# define VGSVCPROPCACHE_FLAGS_ALWAYS_UPDATE         RT_BIT(2)
 /** The guest property gets deleted when
  *  - a) the property cache gets destroyed, or
  *  - b) the VM gets reset / shutdown / destroyed.
  */
-#define VBOXSERVICEPROPCACHEFLAG_TRANSIENT              RT_BIT(3)
-
-int VBoxServicePropCacheCreate(PVBOXSERVICEVEPROPCACHE pCache, uint32_t uClientId);
-int VBoxServicePropCacheUpdateEntry(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName, uint32_t fFlags, const char *pszValueReset);
-int VBoxServicePropCacheUpdate(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName, const char *pszValueFormat, ...);
-int VBoxServicePropCacheUpdateByPath(PVBOXSERVICEVEPROPCACHE pCache, const char *pszValue, uint32_t fFlags, const char *pszPathFormat, ...);
-int VBoxServicePropCacheFlush(PVBOXSERVICEVEPROPCACHE pCache);
-void VBoxServicePropCacheDestroy(PVBOXSERVICEVEPROPCACHE pCache);
-# endif /* VBOX_WITH_GUEST_PROPS */
-
-#endif  /* ___VBoxServicePropCache_h */
+# define VGSVCPROPCACHE_FLAGS_TRANSIENT             RT_BIT(3)
+/** @}  */
+
+int  VGSvcPropCacheCreate(PVBOXSERVICEVEPROPCACHE pCache, uint32_t uClientId);
+int  VGSvcPropCacheUpdateEntry(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName, uint32_t fFlags, const char *pszValueReset);
+int  VGSvcPropCacheUpdate(PVBOXSERVICEVEPROPCACHE pCache, const char *pszName, const char *pszValueFormat, ...);
+int  VGSvcPropCacheUpdateByPath(PVBOXSERVICEVEPROPCACHE pCache, const char *pszValue, uint32_t fFlags,
+                                const char *pszPathFormat, ...);
+int  VGSvcPropCacheFlush(PVBOXSERVICEVEPROPCACHE pCache);
+void VGSvcPropCacheDestroy(PVBOXSERVICEVEPROPCACHE pCache);
+#endif /* VBOX_WITH_GUEST_PROPS */
+
+#endif
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp
index e48529a..45bd28b 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp
@@ -15,6 +15,14 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+/** @page pg_vgsvc_vmstats VBoxService - VM Statistics
+ *
+ * The VM statistics subservice helps out the performance collector API on the
+ * host side by providing metrics from inside the guest.
+ *
+ * See IPerformanceCollector, CollectorGuest and the "Guest/" submetrics that
+ * gets registered by Machine::i_registerMetrics in Main.
+ */
 
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
@@ -61,15 +69,16 @@
 *********************************************************************************************************************************/
 typedef struct _VBOXSTATSCONTEXT
 {
-    RTMSINTERVAL          cMsStatInterval;
+    RTMSINTERVAL    cMsStatInterval;
 
-    uint64_t              au64LastCpuLoad_Idle[VMM_MAX_CPU_COUNT];
-    uint64_t              au64LastCpuLoad_Kernel[VMM_MAX_CPU_COUNT];
-    uint64_t              au64LastCpuLoad_User[VMM_MAX_CPU_COUNT];
-    uint64_t              au64LastCpuLoad_Nice[VMM_MAX_CPU_COUNT];
+    uint64_t        au64LastCpuLoad_Idle[VMM_MAX_CPU_COUNT];
+    uint64_t        au64LastCpuLoad_Kernel[VMM_MAX_CPU_COUNT];
+    uint64_t        au64LastCpuLoad_User[VMM_MAX_CPU_COUNT];
+    uint64_t        au64LastCpuLoad_Nice[VMM_MAX_CPU_COUNT];
 
 #ifdef RT_OS_WINDOWS
-    NTSTATUS (WINAPI *pfnNtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength);
+    NTSTATUS (WINAPI *pfnNtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS SystemInformationClass, PVOID SystemInformation,
+                                                   ULONG SystemInformationLength, PULONG ReturnLength);
     void     (WINAPI *pfnGlobalMemoryStatusEx)(LPMEMORYSTATUSEX lpBuffer);
     BOOL     (WINAPI *pfnGetPerformanceInfo)(PPERFORMANCE_INFORMATION pPerformanceInformation, DWORD cb);
 #endif
@@ -79,59 +88,62 @@ typedef struct _VBOXSTATSCONTEXT
 /*********************************************************************************************************************************
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
-static VBOXSTATSCONTEXT gCtx = {0};
+/** Global data. */
+static VBOXSTATSCONTEXT g_VMStat = {0};
 
 /** The semaphore we're blocking on. */
 static RTSEMEVENTMULTI  g_VMStatEvent = NIL_RTSEMEVENTMULTI;
 
 
-/** @copydoc VBOXSERVICE::pfnInit */
-static DECLCALLBACK(int) VBoxServiceVMStatsInit(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnInit}
+ */
+static DECLCALLBACK(int) vgsvcVMStatsInit(void)
 {
-    VBoxServiceVerbose(3, "VBoxServiceVMStatsInit\n");
+    VGSvcVerbose(3, "vgsvcVMStatsInit\n");
 
     int rc = RTSemEventMultiCreate(&g_VMStatEvent);
     AssertRCReturn(rc, rc);
 
-    gCtx.cMsStatInterval        = 0;     /* default; update disabled */
-    RT_ZERO(gCtx.au64LastCpuLoad_Idle);
-    RT_ZERO(gCtx.au64LastCpuLoad_Kernel);
-    RT_ZERO(gCtx.au64LastCpuLoad_User);
-    RT_ZERO(gCtx.au64LastCpuLoad_Nice);
+    g_VMStat.cMsStatInterval        = 0;     /* default; update disabled */
+    RT_ZERO(g_VMStat.au64LastCpuLoad_Idle);
+    RT_ZERO(g_VMStat.au64LastCpuLoad_Kernel);
+    RT_ZERO(g_VMStat.au64LastCpuLoad_User);
+    RT_ZERO(g_VMStat.au64LastCpuLoad_Nice);
 
-    rc = VbglR3StatQueryInterval(&gCtx.cMsStatInterval);
+    rc = VbglR3StatQueryInterval(&g_VMStat.cMsStatInterval);
     if (RT_SUCCESS(rc))
-        VBoxServiceVerbose(3, "VBoxStatsInit: New statistics interval %u seconds\n", gCtx.cMsStatInterval);
+        VGSvcVerbose(3, "vgsvcVMStatsInit: New statistics interval %u seconds\n", g_VMStat.cMsStatInterval);
     else
-        VBoxServiceVerbose(3, "VBoxStatsInit: DeviceIoControl failed with %d\n", rc);
+        VGSvcVerbose(3, "vgsvcVMStatsInit: DeviceIoControl failed with %d\n", rc);
 
 #ifdef RT_OS_WINDOWS
     /* NtQuerySystemInformation might be dropped in future releases, so load
        it dynamically as per Microsoft's recommendation. */
-    *(void **)&gCtx.pfnNtQuerySystemInformation = RTLdrGetSystemSymbol("ntdll.dll", "NtQuerySystemInformation");
-    if (gCtx.pfnNtQuerySystemInformation)
-        VBoxServiceVerbose(3, "VBoxStatsInit: gCtx.pfnNtQuerySystemInformation = %x\n", gCtx.pfnNtQuerySystemInformation);
+    *(void **)&g_VMStat.pfnNtQuerySystemInformation = RTLdrGetSystemSymbol("ntdll.dll", "NtQuerySystemInformation");
+    if (g_VMStat.pfnNtQuerySystemInformation)
+        VGSvcVerbose(3, "vgsvcVMStatsInit: g_VMStat.pfnNtQuerySystemInformation = %x\n", g_VMStat.pfnNtQuerySystemInformation);
     else
     {
-        VBoxServiceVerbose(3, "VBoxStatsInit: ntdll.NtQuerySystemInformation not found!\n");
+        VGSvcVerbose(3, "vgsvcVMStatsInit: ntdll.NtQuerySystemInformation not found!\n");
         return VERR_SERVICE_DISABLED;
     }
 
     /* GlobalMemoryStatus is win2k and up, so load it dynamically */
-    *(void **)&gCtx.pfnGlobalMemoryStatusEx = RTLdrGetSystemSymbol("kernel32.dll", "GlobalMemoryStatusEx");
-    if (gCtx.pfnGlobalMemoryStatusEx)
-        VBoxServiceVerbose(3, "VBoxStatsInit: gCtx.GlobalMemoryStatusEx = %x\n", gCtx.pfnGlobalMemoryStatusEx);
+    *(void **)&g_VMStat.pfnGlobalMemoryStatusEx = RTLdrGetSystemSymbol("kernel32.dll", "GlobalMemoryStatusEx");
+    if (g_VMStat.pfnGlobalMemoryStatusEx)
+        VGSvcVerbose(3, "vgsvcVMStatsInit: g_VMStat.GlobalMemoryStatusEx = %x\n", g_VMStat.pfnGlobalMemoryStatusEx);
     else
     {
         /** @todo Now fails in NT4; do we care? */
-        VBoxServiceVerbose(3, "VBoxStatsInit: kernel32.GlobalMemoryStatusEx not found!\n");
+        VGSvcVerbose(3, "vgsvcVMStatsInit: kernel32.GlobalMemoryStatusEx not found!\n");
         return VERR_SERVICE_DISABLED;
     }
 
     /* GetPerformanceInfo is xp and up, so load it dynamically */
-    *(void **)&gCtx.pfnGetPerformanceInfo = RTLdrGetSystemSymbol("psapi.dll", "GetPerformanceInfo");
-    if (gCtx.pfnGetPerformanceInfo)
-        VBoxServiceVerbose(3, "VBoxStatsInit: gCtx.pfnGetPerformanceInfo= %x\n", gCtx.pfnGetPerformanceInfo);
+    *(void **)&g_VMStat.pfnGetPerformanceInfo = RTLdrGetSystemSymbol("psapi.dll", "GetPerformanceInfo");
+    if (g_VMStat.pfnGetPerformanceInfo)
+        VGSvcVerbose(3, "vgsvcVMStatsInit: g_VMStat.pfnGetPerformanceInfo= %x\n", g_VMStat.pfnGetPerformanceInfo);
 #endif /* RT_OS_WINDOWS */
 
     return VINF_SUCCESS;
@@ -141,18 +153,12 @@ static DECLCALLBACK(int) VBoxServiceVMStatsInit(void)
 /**
  * Gathers VM statistics and reports them to the host.
  */
-static void VBoxServiceVMStatsReport(void)
+static void vgsvcVMStatsReport(void)
 {
 #if defined(RT_OS_WINDOWS)
-    SYSTEM_INFO systemInfo;
-    PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION pProcInfo;
-    MEMORYSTATUSEX memStatus;
-    uint32_t cbStruct;
-    DWORD    cbReturned;
-
-    Assert(gCtx.pfnGlobalMemoryStatusEx && gCtx.pfnNtQuerySystemInformation);
-    if (    !gCtx.pfnGlobalMemoryStatusEx
-        ||  !gCtx.pfnNtQuerySystemInformation)
+    Assert(g_VMStat.pfnGlobalMemoryStatusEx && g_VMStat.pfnNtQuerySystemInformation);
+    if (   !g_VMStat.pfnGlobalMemoryStatusEx
+        || !g_VMStat.pfnNtQuerySystemInformation)
         return;
 
     /* Clear the report so we don't report garbage should NtQuerySystemInformation
@@ -161,10 +167,12 @@ static void VBoxServiceVMStatsReport(void)
     RT_ZERO(req);
 
     /* Query and report guest statistics */
+    SYSTEM_INFO systemInfo;
     GetSystemInfo(&systemInfo);
 
+    MEMORYSTATUSEX memStatus;
     memStatus.dwLength = sizeof(memStatus);
-    gCtx.pfnGlobalMemoryStatusEx(&memStatus);
+    g_VMStat.pfnGlobalMemoryStatusEx(&memStatus);
 
     req.guestStats.u32PageSize          = systemInfo.dwPageSize;
     req.guestStats.u32PhysMemTotal      = (uint32_t)(memStatus.ullTotalPhys / _4K);
@@ -177,18 +185,18 @@ static void VBoxServiceVMStatsReport(void)
                                         | VBOX_GUEST_STAT_PHYS_MEM_AVAIL
                                         | VBOX_GUEST_STAT_PAGE_FILE_SIZE
                                         | VBOX_GUEST_STAT_MEMORY_LOAD;
-#ifdef VBOX_WITH_MEMBALLOON
-    req.guestStats.u32PhysMemBalloon    = VBoxServiceBalloonQueryPages(_4K);
+# ifdef VBOX_WITH_MEMBALLOON
+    req.guestStats.u32PhysMemBalloon    = VGSvcBalloonQueryPages(_4K);
     req.guestStats.u32StatCaps         |= VBOX_GUEST_STAT_PHYS_MEM_BALLOON;
-#else
+# else
     req.guestStats.u32PhysMemBalloon    = 0;
-#endif
+# endif
 
-    if (gCtx.pfnGetPerformanceInfo)
+    if (g_VMStat.pfnGetPerformanceInfo)
     {
         PERFORMANCE_INFORMATION perfInfo;
 
-        if (gCtx.pfnGetPerformanceInfo(&perfInfo, sizeof(perfInfo)))
+        if (g_VMStat.pfnGetPerformanceInfo(&perfInfo, sizeof(perfInfo)))
         {
             req.guestStats.u32Processes         = perfInfo.ProcessCount;
             req.guestStats.u32Threads           = perfInfo.ThreadCount;
@@ -199,23 +207,25 @@ static void VBoxServiceVMStatsReport(void)
             req.guestStats.u32MemKernelNonPaged = perfInfo.KernelNonpaged;  /* already in pages */
             req.guestStats.u32MemSystemCache    = perfInfo.SystemCache;     /* already in pages */
             req.guestStats.u32StatCaps |= VBOX_GUEST_STAT_PROCESSES | VBOX_GUEST_STAT_THREADS | VBOX_GUEST_STAT_HANDLES
-                                        | VBOX_GUEST_STAT_MEM_COMMIT_TOTAL | VBOX_GUEST_STAT_MEM_KERNEL_TOTAL
-                                        | VBOX_GUEST_STAT_MEM_KERNEL_PAGED | VBOX_GUEST_STAT_MEM_KERNEL_NONPAGED
-                                        | VBOX_GUEST_STAT_MEM_SYSTEM_CACHE;
+                                       |  VBOX_GUEST_STAT_MEM_COMMIT_TOTAL | VBOX_GUEST_STAT_MEM_KERNEL_TOTAL
+                                       |  VBOX_GUEST_STAT_MEM_KERNEL_PAGED | VBOX_GUEST_STAT_MEM_KERNEL_NONPAGED
+                                       |  VBOX_GUEST_STAT_MEM_SYSTEM_CACHE;
         }
         else
-            VBoxServiceVerbose(3, "VBoxServiceVMStatsReport: GetPerformanceInfo failed with %d\n", GetLastError());
+            VGSvcVerbose(3, "vgsvcVMStatsReport: GetPerformanceInfo failed with %d\n", GetLastError());
     }
 
     /* Query CPU load information */
-    cbStruct = systemInfo.dwNumberOfProcessors * sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION);
+    uint32_t cbStruct = systemInfo.dwNumberOfProcessors * sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION);
+    PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION pProcInfo;
     pProcInfo = (PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)RTMemAlloc(cbStruct);
     if (!pProcInfo)
         return;
 
     /* Unfortunately GetSystemTimes is XP SP1 and up only, so we need to use the semi-undocumented NtQuerySystemInformation */
-    bool fCpuInfoAvail = false;
-    NTSTATUS rc = gCtx.pfnNtQuerySystemInformation(SystemProcessorPerformanceInformation, pProcInfo, cbStruct, &cbReturned);
+    bool  fCpuInfoAvail = false;
+    DWORD cbReturned;
+    NTSTATUS rc = g_VMStat.pfnNtQuerySystemInformation(SystemProcessorPerformanceInformation, pProcInfo, cbStruct, &cbReturned);
     if (    !rc
         &&  cbReturned == cbStruct)
     {
@@ -223,58 +233,59 @@ static void VBoxServiceVMStatsReport(void)
         {
             if (i >= VMM_MAX_CPU_COUNT)
             {
-                VBoxServiceVerbose(3, "VBoxStatsReportStatistics: skipping information for CPU%u\n", i);
-                continue;
+                VGSvcVerbose(3, "vgsvcVMStatsReport: skipping information for CPUs %u..%u\n", i, systemInfo.dwNumberOfProcessors);
+                break;
             }
 
-            if (gCtx.au64LastCpuLoad_Kernel[i] == 0)
+            if (g_VMStat.au64LastCpuLoad_Kernel[i] == 0)
             {
                 /* first time */
-                gCtx.au64LastCpuLoad_Idle[i]    = pProcInfo[i].IdleTime.QuadPart;
-                gCtx.au64LastCpuLoad_Kernel[i]  = pProcInfo[i].KernelTime.QuadPart;
-                gCtx.au64LastCpuLoad_User[i]    = pProcInfo[i].UserTime.QuadPart;
+                g_VMStat.au64LastCpuLoad_Idle[i]    = pProcInfo[i].IdleTime.QuadPart;
+                g_VMStat.au64LastCpuLoad_Kernel[i]  = pProcInfo[i].KernelTime.QuadPart;
+                g_VMStat.au64LastCpuLoad_User[i]    = pProcInfo[i].UserTime.QuadPart;
 
                 Sleep(250);
 
-                rc = gCtx.pfnNtQuerySystemInformation(SystemProcessorPerformanceInformation, pProcInfo, cbStruct, &cbReturned);
+                rc = g_VMStat.pfnNtQuerySystemInformation(SystemProcessorPerformanceInformation, pProcInfo, cbStruct, &cbReturned);
                 Assert(!rc);
             }
 
-            uint64_t deltaIdle    = (pProcInfo[i].IdleTime.QuadPart   - gCtx.au64LastCpuLoad_Idle[i]);
-            uint64_t deltaKernel  = (pProcInfo[i].KernelTime.QuadPart - gCtx.au64LastCpuLoad_Kernel[i]);
-            uint64_t deltaUser    = (pProcInfo[i].UserTime.QuadPart   - gCtx.au64LastCpuLoad_User[i]);
+            uint64_t deltaIdle    = (pProcInfo[i].IdleTime.QuadPart   - g_VMStat.au64LastCpuLoad_Idle[i]);
+            uint64_t deltaKernel  = (pProcInfo[i].KernelTime.QuadPart - g_VMStat.au64LastCpuLoad_Kernel[i]);
+            uint64_t deltaUser    = (pProcInfo[i].UserTime.QuadPart   - g_VMStat.au64LastCpuLoad_User[i]);
             deltaKernel          -= deltaIdle;  /* idle time is added to kernel time */
             uint64_t ullTotalTime = deltaIdle + deltaKernel + deltaUser;
             if (ullTotalTime == 0) /* Prevent division through zero. */
                 ullTotalTime = 1;
 
-            req.guestStats.u32CpuLoad_Idle      = (uint32_t)(deltaIdle  * 100 / ullTotalTime);
-            req.guestStats.u32CpuLoad_Kernel    = (uint32_t)(deltaKernel* 100 / ullTotalTime);
-            req.guestStats.u32CpuLoad_User      = (uint32_t)(deltaUser  * 100 / ullTotalTime);
+            req.guestStats.u32CpuLoad_Idle   = (uint32_t)(deltaIdle  * 100 / ullTotalTime);
+            req.guestStats.u32CpuLoad_Kernel = (uint32_t)(deltaKernel* 100 / ullTotalTime);
+            req.guestStats.u32CpuLoad_User   = (uint32_t)(deltaUser  * 100 / ullTotalTime);
 
-            req.guestStats.u32StatCaps |= VBOX_GUEST_STAT_CPU_LOAD_IDLE | VBOX_GUEST_STAT_CPU_LOAD_KERNEL | VBOX_GUEST_STAT_CPU_LOAD_USER;
-            req.guestStats.u32CpuId = i;
+            req.guestStats.u32StatCaps      |= VBOX_GUEST_STAT_CPU_LOAD_IDLE | VBOX_GUEST_STAT_CPU_LOAD_KERNEL
+                                            |  VBOX_GUEST_STAT_CPU_LOAD_USER;
+            req.guestStats.u32CpuId          = i;
             rc = VbglR3StatReport(&req);
             if (RT_SUCCESS(rc))
-                VBoxServiceVerbose(3, "VBoxStatsReportStatistics: new statistics (CPU %u) reported successfully!\n", i);
+                VGSvcVerbose(3, "vgsvcVMStatsReport: new statistics (CPU %u) reported successfully!\n", i);
             else
-                VBoxServiceVerbose(3, "VBoxStatsReportStatistics: DeviceIoControl (stats report) failed with %d\n", GetLastError());
+                VGSvcVerbose(3, "vgsvcVMStatsReport: VbglR3StatReport failed with rc=%Rrc\n", rc);
 
-            gCtx.au64LastCpuLoad_Idle[i]   = pProcInfo[i].IdleTime.QuadPart;
-            gCtx.au64LastCpuLoad_Kernel[i] = pProcInfo[i].KernelTime.QuadPart;
-            gCtx.au64LastCpuLoad_User[i]   = pProcInfo[i].UserTime.QuadPart;
+            g_VMStat.au64LastCpuLoad_Idle[i]    = pProcInfo[i].IdleTime.QuadPart;
+            g_VMStat.au64LastCpuLoad_Kernel[i]  = pProcInfo[i].KernelTime.QuadPart;
+            g_VMStat.au64LastCpuLoad_User[i]    = pProcInfo[i].UserTime.QuadPart;
         }
     }
     RTMemFree(pProcInfo);
 
     if (!fCpuInfoAvail)
     {
-        VBoxServiceVerbose(3, "VBoxStatsReportStatistics: CPU info not available!\n");
+        VGSvcVerbose(3, "vgsvcVMStatsReport: CPU info not available!\n");
         rc = VbglR3StatReport(&req);
         if (RT_SUCCESS(rc))
-            VBoxServiceVerbose(3, "VBoxStatsReportStatistics: new statistics reported successfully!\n");
+            VGSvcVerbose(3, "vgsvcVMStatsReport: new statistics reported successfully!\n");
         else
-            VBoxServiceVerbose(3, "VBoxStatsReportStatistics: stats report failed with rc=%Rrc\n", rc);
+            VGSvcVerbose(3, "vgsvcVMStatsReport: stats report failed with rc=%Rrc\n", rc);
     }
 
 #elif defined(RT_OS_LINUX)
@@ -332,19 +343,19 @@ static void VBoxServiceVMStatsReport(void)
         RTStrmClose(pStrm);
     }
     else
-        VBoxServiceVerbose(3, "VBoxStatsReportStatistics: memory info not available!\n");
+        VGSvcVerbose(3, "vgsvcVMStatsReport: memory info not available!\n");
 
     req.guestStats.u32PageSize = getpagesize();
     req.guestStats.u32StatCaps  = VBOX_GUEST_STAT_PHYS_MEM_TOTAL
                                 | VBOX_GUEST_STAT_PHYS_MEM_AVAIL
                                 | VBOX_GUEST_STAT_MEM_SYSTEM_CACHE
                                 | VBOX_GUEST_STAT_PAGE_FILE_SIZE;
-#ifdef VBOX_WITH_MEMBALLOON
-    req.guestStats.u32PhysMemBalloon  = VBoxServiceBalloonQueryPages(_4K);
+# ifdef VBOX_WITH_MEMBALLOON
+    req.guestStats.u32PhysMemBalloon  = VGSvcBalloonQueryPages(_4K);
     req.guestStats.u32StatCaps       |= VBOX_GUEST_STAT_PHYS_MEM_BALLOON;
-#else
+# else
     req.guestStats.u32PhysMemBalloon  = 0;
-#endif
+# endif
 
 
     /** @todo req.guestStats.u32Threads */
@@ -389,10 +400,10 @@ static void VBoxServiceVMStatsReport(void)
                     if (RT_SUCCESS(rc))
                         rc = RTStrToUInt64Ex(RTStrStripL(psz), &psz, 0, &u64Idle);
 
-                    uint64_t u64DeltaIdle   = u64Idle   - gCtx.au64LastCpuLoad_Idle[u32CpuId];
-                    uint64_t u64DeltaSystem = u64System - gCtx.au64LastCpuLoad_Kernel[u32CpuId];
-                    uint64_t u64DeltaUser   = u64User   - gCtx.au64LastCpuLoad_User[u32CpuId];
-                    uint64_t u64DeltaNice   = u64Nice   - gCtx.au64LastCpuLoad_Nice[u32CpuId];
+                    uint64_t u64DeltaIdle   = u64Idle   - g_VMStat.au64LastCpuLoad_Idle[u32CpuId];
+                    uint64_t u64DeltaSystem = u64System - g_VMStat.au64LastCpuLoad_Kernel[u32CpuId];
+                    uint64_t u64DeltaUser   = u64User   - g_VMStat.au64LastCpuLoad_User[u32CpuId];
+                    uint64_t u64DeltaNice   = u64Nice   - g_VMStat.au64LastCpuLoad_Nice[u32CpuId];
 
                     uint64_t u64DeltaAll    = u64DeltaIdle
                                             + u64DeltaSystem
@@ -401,10 +412,10 @@ static void VBoxServiceVMStatsReport(void)
                     if (u64DeltaAll == 0) /* Prevent division through zero. */
                         u64DeltaAll = 1;
 
-                    gCtx.au64LastCpuLoad_Idle[u32CpuId]   = u64Idle;
-                    gCtx.au64LastCpuLoad_Kernel[u32CpuId] = u64System;
-                    gCtx.au64LastCpuLoad_User[u32CpuId]   = u64User;
-                    gCtx.au64LastCpuLoad_Nice[u32CpuId]   = u64Nice;
+                    g_VMStat.au64LastCpuLoad_Idle[u32CpuId]   = u64Idle;
+                    g_VMStat.au64LastCpuLoad_Kernel[u32CpuId] = u64System;
+                    g_VMStat.au64LastCpuLoad_User[u32CpuId]   = u64User;
+                    g_VMStat.au64LastCpuLoad_Nice[u32CpuId]   = u64Nice;
 
                     req.guestStats.u32CpuId = u32CpuId;
                     req.guestStats.u32CpuLoad_Idle   = (uint32_t)(u64DeltaIdle   * 100 / u64DeltaAll);
@@ -417,24 +428,24 @@ static void VBoxServiceVMStatsReport(void)
                     fCpuInfoAvail = true;
                     rc = VbglR3StatReport(&req);
                     if (RT_SUCCESS(rc))
-                        VBoxServiceVerbose(3, "VBoxStatsReportStatistics: new statistics (CPU %u) reported successfully!\n", u32CpuId);
+                        VGSvcVerbose(3, "vgsvcVMStatsReport: new statistics (CPU %u) reported successfully!\n", u32CpuId);
                     else
-                        VBoxServiceVerbose(3, "VBoxStatsReportStatistics: stats report failed with rc=%Rrc\n", rc);
+                        VGSvcVerbose(3, "vgsvcVMStatsReport: stats report failed with rc=%Rrc\n", rc);
                 }
                 else
-                    VBoxServiceVerbose(3, "VBoxStatsReportStatistics: skipping information for CPU%u\n", u32CpuId);
+                    VGSvcVerbose(3, "vgsvcVMStatsReport: skipping information for CPU%u\n", u32CpuId);
             }
         }
         RTStrmClose(pStrm);
     }
     if (!fCpuInfoAvail)
     {
-        VBoxServiceVerbose(3, "VBoxStatsReportStatistics: CPU info not available!\n");
+        VGSvcVerbose(3, "vgsvcVMStatsReport: CPU info not available!\n");
         rc = VbglR3StatReport(&req);
         if (RT_SUCCESS(rc))
-            VBoxServiceVerbose(3, "VBoxStatsReportStatistics: new statistics reported successfully!\n");
+            VGSvcVerbose(3, "vgsvcVMStatsReport: new statistics reported successfully!\n");
         else
-            VBoxServiceVerbose(3, "VBoxStatsReportStatistics: stats report failed with rc=%Rrc\n", rc);
+            VGSvcVerbose(3, "vgsvcVMStatsReport: stats report failed with rc=%Rrc\n", rc);
     }
 
 #elif defined(RT_OS_SOLARIS)
@@ -521,7 +532,7 @@ static void VBoxServiceVMStatsReport(void)
                                    | VBOX_GUEST_STAT_MEM_SYSTEM_CACHE
                                    | VBOX_GUEST_STAT_PAGE_FILE_SIZE;
 #ifdef VBOX_WITH_MEMBALLOON
-        req.guestStats.u32PhysMemBalloon  = VBoxServiceBalloonQueryPages(_4K);
+        req.guestStats.u32PhysMemBalloon  = VGSvcBalloonQueryPages(_4K);
         req.guestStats.u32StatCaps       |= VBOX_GUEST_STAT_PHYS_MEM_BALLOON;
 #else
         req.guestStats.u32PhysMemBalloon  = 0;
@@ -543,25 +554,23 @@ static void VBoxServiceVMStatsReport(void)
                 if (rc == -1)
                     break;
 
-                if (cCPUs >= VMM_MAX_CPU_COUNT)
-                    VBoxServiceVerbose(3, "VBoxStatsReportStatistics: skipping information for CPU%u\n", cCPUs);
-                else
+                if (cCPUs < VMM_MAX_CPU_COUNT)
                 {
                     uint64_t u64Idle   = StatCPU.cpu_sysinfo.cpu[CPU_IDLE];
                     uint64_t u64User   = StatCPU.cpu_sysinfo.cpu[CPU_USER];
                     uint64_t u64System = StatCPU.cpu_sysinfo.cpu[CPU_KERNEL];
 
-                    uint64_t u64DeltaIdle   = u64Idle   - gCtx.au64LastCpuLoad_Idle[cCPUs];
-                    uint64_t u64DeltaSystem = u64System - gCtx.au64LastCpuLoad_Kernel[cCPUs];
-                    uint64_t u64DeltaUser   = u64User   - gCtx.au64LastCpuLoad_User[cCPUs];
+                    uint64_t u64DeltaIdle   = u64Idle   - g_VMStat.au64LastCpuLoad_Idle[cCPUs];
+                    uint64_t u64DeltaSystem = u64System - g_VMStat.au64LastCpuLoad_Kernel[cCPUs];
+                    uint64_t u64DeltaUser   = u64User   - g_VMStat.au64LastCpuLoad_User[cCPUs];
 
                     uint64_t u64DeltaAll    = u64DeltaIdle + u64DeltaSystem + u64DeltaUser;
                     if (u64DeltaAll == 0) /* Prevent division through zero. */
                         u64DeltaAll = 1;
 
-                    gCtx.au64LastCpuLoad_Idle[cCPUs]   = u64Idle;
-                    gCtx.au64LastCpuLoad_Kernel[cCPUs] = u64System;
-                    gCtx.au64LastCpuLoad_User[cCPUs]   = u64User;
+                    g_VMStat.au64LastCpuLoad_Idle[cCPUs]   = u64Idle;
+                    g_VMStat.au64LastCpuLoad_Kernel[cCPUs] = u64System;
+                    g_VMStat.au64LastCpuLoad_User[cCPUs]   = u64User;
 
                     req.guestStats.u32CpuId = cCPUs;
                     req.guestStats.u32CpuLoad_Idle   = (uint32_t)(u64DeltaIdle   * 100 / u64DeltaAll);
@@ -575,11 +584,13 @@ static void VBoxServiceVMStatsReport(void)
 
                     rc = VbglR3StatReport(&req);
                     if (RT_SUCCESS(rc))
-                        VBoxServiceVerbose(3, "VBoxStatsReportStatistics: new statistics (CPU %u) reported successfully!\n", cCPUs);
+                        VGSvcVerbose(3, "vgsvcVMStatsReport: new statistics (CPU %u) reported successfully!\n", cCPUs);
                     else
-                        VBoxServiceVerbose(3, "VBoxStatsReportStatistics: stats report failed with rc=%Rrc\n", rc);
+                        VGSvcVerbose(3, "vgsvcVMStatsReport: stats report failed with rc=%Rrc\n", rc);
                     cCPUs++;
                 }
+                else
+                    VGSvcVerbose(3, "vgsvcVMStatsReport: skipping information for CPU%u\n", cCPUs);
             }
         }
 
@@ -588,12 +599,12 @@ static void VBoxServiceVMStatsReport(void)
          */
         if (!fCpuInfoAvail)
         {
-            VBoxServiceVerbose(3, "VBoxStatsReportStatistics: CPU info not available!\n");
+            VGSvcVerbose(3, "vgsvcVMStatsReport: CPU info not available!\n");
             rc = VbglR3StatReport(&req);
             if (RT_SUCCESS(rc))
-                VBoxServiceVerbose(3, "VBoxStatsReportStatistics: new statistics reported successfully!\n");
+                VGSvcVerbose(3, "vgsvcVMStatsReport: new statistics reported successfully!\n");
             else
-                VBoxServiceVerbose(3, "VBoxStatsReportStatistics: stats report failed with rc=%Rrc\n", rc);
+                VGSvcVerbose(3, "vgsvcVMStatsReport: stats report failed with rc=%Rrc\n", rc);
         }
 
         kstat_close(pStatKern);
@@ -605,8 +616,11 @@ static void VBoxServiceVMStatsReport(void)
 #endif
 }
 
-/** @copydoc VBOXSERVICE::pfnWorker */
-DECLCALLBACK(int) VBoxServiceVMStatsWorker(bool volatile *pfShutdown)
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnWorker}
+ */
+DECLCALLBACK(int) vgsvcVMStatsWorker(bool volatile *pfShutdown)
 {
     int rc = VINF_SUCCESS;
 
@@ -614,7 +628,7 @@ DECLCALLBACK(int) VBoxServiceVMStatsWorker(bool volatile *pfShutdown)
     rc = VbglR3CtlFilterMask(VMMDEV_EVENT_STATISTICS_INTERVAL_CHANGE_REQUEST, 0);
     if (RT_FAILURE(rc))
     {
-        VBoxServiceVerbose(3, "VBoxServiceVMStatsWorker: VbglR3CtlFilterMask failed with %d\n", rc);
+        VGSvcVerbose(3, "vgsvcVMStatsWorker: VbglR3CtlFilterMask failed with %d\n", rc);
         return rc;
     }
 
@@ -636,14 +650,12 @@ DECLCALLBACK(int) VBoxServiceVMStatsWorker(bool volatile *pfShutdown)
         rc = VbglR3WaitEvent(VMMDEV_EVENT_STATISTICS_INTERVAL_CHANGE_REQUEST, 0 /* no wait */, &fEvents);
         if (    RT_SUCCESS(rc)
             &&  (fEvents & VMMDEV_EVENT_STATISTICS_INTERVAL_CHANGE_REQUEST))
-        {
-            VbglR3StatQueryInterval(&gCtx.cMsStatInterval);
-        }
+            VbglR3StatQueryInterval(&g_VMStat.cMsStatInterval);
 
-        if (gCtx.cMsStatInterval)
+        if (g_VMStat.cMsStatInterval)
         {
-            VBoxServiceVMStatsReport();
-            cWaitMillies = gCtx.cMsStatInterval;
+            vgsvcVMStatsReport();
+            cWaitMillies = g_VMStat.cMsStatInterval;
         }
         else
             cWaitMillies = 3000;
@@ -661,7 +673,7 @@ DECLCALLBACK(int) VBoxServiceVMStatsWorker(bool volatile *pfShutdown)
             break;
         if (rc2 != VERR_TIMEOUT && RT_FAILURE(rc2))
         {
-            VBoxServiceError("VBoxServiceVMStatsWorker: RTSemEventMultiWait failed; rc2=%Rrc\n", rc2);
+            VGSvcError("vgsvcVMStatsWorker: RTSemEventMultiWait failed; rc2=%Rrc\n", rc2);
             rc = rc2;
             break;
         }
@@ -670,18 +682,20 @@ DECLCALLBACK(int) VBoxServiceVMStatsWorker(bool volatile *pfShutdown)
     /* Cancel monitoring of the stat event change event. */
     rc = VbglR3CtlFilterMask(0, VMMDEV_EVENT_STATISTICS_INTERVAL_CHANGE_REQUEST);
     if (RT_FAILURE(rc))
-        VBoxServiceVerbose(3, "VBoxServiceVMStatsWorker: VbglR3CtlFilterMask failed with %d\n", rc);
+        VGSvcVerbose(3, "vgsvcVMStatsWorker: VbglR3CtlFilterMask failed with %d\n", rc);
 
     RTSemEventMultiDestroy(g_VMStatEvent);
     g_VMStatEvent = NIL_RTSEMEVENTMULTI;
 
-    VBoxServiceVerbose(3, "VBoxStatsThread: finished statistics change request thread\n");
+    VGSvcVerbose(3, "VBoxStatsThread: finished statistics change request thread\n");
     return 0;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnStop */
-static DECLCALLBACK(void) VBoxServiceVMStatsStop(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnStop}
+ */
+static DECLCALLBACK(void) vgsvcVMStatsStop(void)
 {
     RTSemEventMultiSignal(g_VMStatEvent);
 }
@@ -701,11 +715,11 @@ VBOXSERVICE g_VMStatistics =
     /* pszOptions. */
     NULL,
     /* methods */
-    VBoxServiceDefaultPreInit,
-    VBoxServiceDefaultOption,
-    VBoxServiceVMStatsInit,
-    VBoxServiceVMStatsWorker,
-    VBoxServiceVMStatsStop,
-    VBoxServiceDefaultTerm
+    VGSvcDefaultPreInit,
+    VGSvcDefaultOption,
+    vgsvcVMStatsInit,
+    vgsvcVMStatsWorker,
+    vgsvcVMStatsStop,
+    VGSvcDefaultTerm
 };
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp
index 00cafa1..92276bb 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceTimeSync.cpp
@@ -16,12 +16,15 @@
  */
 
 
-/** @page pg_vboxservice_timesync       The Time Sync Service
+/** @page pg_vgsvc_timesync     VBoxService - The Time Sync Service
+ *
+ * The time sync subservice synchronizes the guest OS walltime with the host.
  *
  * The time sync service plays along with the Time Manager (TM) in the VMM
  * to keep the guest time accurate using the host machine as reference.
- * TM will try its best to make sure all timer ticks gets delivered so that
- * there isn't normally any need to adjust the guest time.
+ * Communication is facilitated by VMMDev.  TM will try its best to make sure
+ * all timer ticks gets delivered so that there isn't normally any need to
+ * adjust the guest time.
  *
  * There are three normal (= acceptable) cases:
  *      -# When the service starts up. This is because ticks and such might
@@ -67,10 +70,10 @@
  * the drift is noticeable.
  *
  * It now boils down to these three (configuration) factors:
- *  -# g_TimesyncMinAdjust - The minimum drift we will ever bother with.
- *  -# g_TimesyncLatencyFactor - The factor we multiply the latency by to
+ *  -# g_TimeSyncMinAdjust - The minimum drift we will ever bother with.
+ *  -# g_TimeSyncLatencyFactor - The factor we multiply the latency by to
  *     calculate the dynamic minimum adjust factor.
- *  -# g_TimesyncMaxLatency - When to start discarding the data as utterly
+ *  -# g_TimeSyncMaxLatency - When to start discarding the data as utterly
  *     useless and take a rest (someone is too busy to give us good data).
  *  -# g_TimeSyncSetThreshold - The threshold at which we will just set the time
  *     instead of trying to adjust it (milliseconds).
@@ -82,7 +85,6 @@
 *********************************************************************************************************************************/
 #ifdef RT_OS_WINDOWS
 # include <Windows.h>
-# include <winbase.h> /** @todo r=bird: Why is this here? Windows.h should include winbase.h... */
 #else
 # include <unistd.h>
 # include <errno.h>
@@ -104,57 +106,59 @@
 *   Global Variables                                                                                                             *
 *********************************************************************************************************************************/
 /** The timesync interval (milliseconds). */
-uint32_t g_TimeSyncInterval = 0;
+static uint32_t         g_TimeSyncInterval = 0;
 /**
  * @see pg_vboxservice_timesync
  *
  * @remark  OS/2: There is either a 1 second resolution on the DosSetDateTime
- *                API or a but in the settimeofday implementation. Thus, don't
+ *                API or a bug in my settimeofday implementation.  Thus, don't
  *                bother unless there is at least a 1 second drift.
  */
 #ifdef RT_OS_OS2
-static uint32_t g_TimeSyncMinAdjust = 1000;
+static uint32_t         g_TimeSyncMinAdjust = 1000;
 #else
-static uint32_t g_TimeSyncMinAdjust = 100;
+static uint32_t         g_TimeSyncMinAdjust = 100;
 #endif
 /** @see pg_vboxservice_timesync */
-static uint32_t g_TimeSyncLatencyFactor = 8;
+static uint32_t         g_TimeSyncLatencyFactor = 8;
 /** @see pg_vboxservice_timesync */
-static uint32_t g_TimeSyncMaxLatency = 250;
+static uint32_t         g_TimeSyncMaxLatency = 250;
 /** @see pg_vboxservice_timesync */
-static uint32_t g_TimeSyncSetThreshold = 20*60*1000;
+static uint32_t         g_TimeSyncSetThreshold = 20*60*1000;
 /** Whether the next adjustment should just set the time instead of trying to
  * adjust it. This is used to implement --timesync-set-start.  */
-static bool volatile g_fTimeSyncSetNext = false;
+static bool volatile    g_fTimeSyncSetNext = false;
 /** Whether to set the time when the VM was restored. */
-static bool g_fTimeSyncSetOnRestore = true;
+static bool             g_fTimeSyncSetOnRestore = true;
 
 /** Current error count. Used to knowing when to bitch and when not to. */
-static uint32_t g_cTimeSyncErrors = 0;
+static uint32_t         g_cTimeSyncErrors = 0;
 
 /** The semaphore we're blocking on. */
-static RTSEMEVENTMULTI g_TimeSyncEvent = NIL_RTSEMEVENTMULTI;
+static RTSEMEVENTMULTI  g_TimeSyncEvent = NIL_RTSEMEVENTMULTI;
 
 /** The VM session ID. Changes whenever the VM is restored or reset. */
-static uint64_t g_idTimeSyncSession;
+static uint64_t         g_idTimeSyncSession;
 
 #ifdef RT_OS_WINDOWS
 /** Process token. */
-static HANDLE g_hTokenProcess = NULL;
+static HANDLE           g_hTokenProcess = NULL;
 /** Old token privileges. */
 static TOKEN_PRIVILEGES g_TkOldPrivileges;
 /** Backup values for time adjustment. */
-static DWORD g_dwWinTimeAdjustment;
-static DWORD g_dwWinTimeIncrement;
-static BOOL g_bWinTimeAdjustmentDisabled;
+static DWORD            g_dwWinTimeAdjustment;
+static DWORD            g_dwWinTimeIncrement;
+static BOOL             g_bWinTimeAdjustmentDisabled;
 #endif
 
 
-/** @copydoc VBOXSERVICE::pfnPreInit */
-static DECLCALLBACK(int) VBoxServiceTimeSyncPreInit(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnPreInit}
+ */
+static DECLCALLBACK(int) vgsvcTimeSyncPreInit(void)
 {
 #ifdef VBOX_WITH_GUEST_PROPS
-    /** @todo Merge this function with VBoxServiceTimeSyncOption() to generalize
+    /** @todo Merge this function with vgsvcTimeSyncOption() to generalize
      *        the "command line args override guest property values" behavior. */
 
     /*
@@ -167,46 +171,38 @@ static DECLCALLBACK(int) VBoxServiceTimeSyncPreInit(void)
     {
         if (rc == VERR_HGCM_SERVICE_NOT_FOUND) /* Host service is not available. */
         {
-            VBoxServiceVerbose(0, "VMInfo: Guest property service is not available, skipping\n");
+            VGSvcVerbose(0, "VMInfo: Guest property service is not available, skipping\n");
             rc = VINF_SUCCESS;
         }
         else
-            VBoxServiceError("Failed to connect to the guest property service! Error: %Rrc\n", rc);
+            VGSvcError("Failed to connect to the guest property service! Error: %Rrc\n", rc);
     }
     else
     {
-        rc = VBoxServiceReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-interval",
-                                       &g_TimeSyncInterval, 50, UINT32_MAX - 1);
+        rc = VGSvcReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-interval",
+                                 &g_TimeSyncInterval, 50, UINT32_MAX - 1);
         if (   RT_SUCCESS(rc)
             || rc == VERR_NOT_FOUND)
-        {
-            rc = VBoxServiceReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-min-adjust",
-                                           &g_TimeSyncMinAdjust, 0, 3600000);
-        }
+            rc = VGSvcReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-min-adjust",
+                                     &g_TimeSyncMinAdjust, 0, 3600000);
         if (   RT_SUCCESS(rc)
             || rc == VERR_NOT_FOUND)
-        {
-            rc = VBoxServiceReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-latency-factor",
-                                           &g_TimeSyncLatencyFactor, 1, 1024);
-        }
+            rc = VGSvcReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-latency-factor",
+                                     &g_TimeSyncLatencyFactor, 1, 1024);
         if (   RT_SUCCESS(rc)
             || rc == VERR_NOT_FOUND)
-        {
-            rc = VBoxServiceReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-max-latency",
-                                           &g_TimeSyncMaxLatency, 1, 3600000);
-        }
+            rc = VGSvcReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-max-latency",
+                                     &g_TimeSyncMaxLatency, 1, 3600000);
         if (   RT_SUCCESS(rc)
             || rc == VERR_NOT_FOUND)
-        {
-            rc = VBoxServiceReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold",
-                                           &g_TimeSyncSetThreshold, 0, 7*24*60*60*1000 /* a week */);
-        }
+            rc = VGSvcReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold",
+                                     &g_TimeSyncSetThreshold, 0, 7*24*60*60*1000 /* a week */);
         if (   RT_SUCCESS(rc)
             || rc == VERR_NOT_FOUND)
         {
             char *pszValue;
-            rc = VBoxServiceReadProp(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-start",
-                                     &pszValue, NULL /* ppszFlags */, NULL /* puTimestamp */);
+            rc = VGSvcReadProp(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-start",
+                               &pszValue, NULL /* ppszFlags */, NULL /* puTimestamp */);
             if (RT_SUCCESS(rc))
             {
                 g_fTimeSyncSetNext = true;
@@ -217,8 +213,8 @@ static DECLCALLBACK(int) VBoxServiceTimeSyncPreInit(void)
             || rc == VERR_NOT_FOUND)
         {
             uint32_t value;
-            rc = VBoxServiceReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-on-restore",
-                                           &value, 1, 1);
+            rc = VGSvcReadPropUInt32(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-on-restore",
+                                     &value, 1, 1);
             if (RT_SUCCESS(rc))
                 g_fTimeSyncSetOnRestore = !!value;
         }
@@ -236,28 +232,25 @@ static DECLCALLBACK(int) VBoxServiceTimeSyncPreInit(void)
 }
 
 
-/** @copydoc VBOXSERVICE::pfnOption */
-static DECLCALLBACK(int) VBoxServiceTimeSyncOption(const char **ppszShort, int argc, char **argv, int *pi)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnOption}
+ */
+static DECLCALLBACK(int) vgsvcTimeSyncOption(const char **ppszShort, int argc, char **argv, int *pi)
 {
     int rc = -1;
     uint32_t value;
     if (ppszShort)
         /* no short options */;
     else if (!strcmp(argv[*pi], "--timesync-interval"))
-        rc = VBoxServiceArgUInt32(argc, argv, "", pi,
-                                  &g_TimeSyncInterval, 50, UINT32_MAX - 1);
+        rc = VGSvcArgUInt32(argc, argv, "", pi, &g_TimeSyncInterval, 50, UINT32_MAX - 1);
     else if (!strcmp(argv[*pi], "--timesync-min-adjust"))
-        rc = VBoxServiceArgUInt32(argc, argv, "", pi,
-                                  &g_TimeSyncMinAdjust, 0, 3600000);
+        rc = VGSvcArgUInt32(argc, argv, "", pi, &g_TimeSyncMinAdjust, 0, 3600000);
     else if (!strcmp(argv[*pi], "--timesync-latency-factor"))
-        rc = VBoxServiceArgUInt32(argc, argv, "", pi,
-                                  &g_TimeSyncLatencyFactor, 1, 1024);
+        rc = VGSvcArgUInt32(argc, argv, "", pi, &g_TimeSyncLatencyFactor, 1, 1024);
     else if (!strcmp(argv[*pi], "--timesync-max-latency"))
-        rc = VBoxServiceArgUInt32(argc, argv, "", pi,
-                                  &g_TimeSyncMaxLatency, 1, 3600000);
+        rc = VGSvcArgUInt32(argc, argv, "", pi, &g_TimeSyncMaxLatency, 1, 3600000);
     else if (!strcmp(argv[*pi], "--timesync-set-threshold"))
-        rc = VBoxServiceArgUInt32(argc, argv, "", pi,
-                                  &g_TimeSyncSetThreshold, 0, 7*24*60*60*1000); /* a week */
+        rc = VGSvcArgUInt32(argc, argv, "", pi, &g_TimeSyncSetThreshold, 0, 7*24*60*60*1000); /* a week */
     else if (!strcmp(argv[*pi], "--timesync-set-start"))
     {
         g_fTimeSyncSetNext = true;
@@ -265,7 +258,7 @@ static DECLCALLBACK(int) VBoxServiceTimeSyncOption(const char **ppszShort, int a
     }
     else if (!strcmp(argv[*pi], "--timesync-set-on-restore"))
     {
-        rc = VBoxServiceArgUInt32(argc, argv, "", pi, &value, 1, 1);
+        rc = VGSvcArgUInt32(argc, argv, "", pi, &value, 1, 1);
         if (RT_SUCCESS(rc))
             g_fTimeSyncSetOnRestore = !!value;
     }
@@ -274,8 +267,10 @@ static DECLCALLBACK(int) VBoxServiceTimeSyncOption(const char **ppszShort, int a
 }
 
 
-/** @copydoc VBOXSERVICE::pfnInit */
-static DECLCALLBACK(int) VBoxServiceTimeSyncInit(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnInit}
+ */
+static DECLCALLBACK(int) vgsvcTimeSyncInit(void)
 {
     /*
      * If not specified, find the right interval default.
@@ -312,14 +307,16 @@ static DECLCALLBACK(int) VBoxServiceTimeSyncInit(void)
                 {
                     DWORD dwErr = GetLastError();
                     rc = RTErrConvertFromWin32(dwErr);
-                    VBoxServiceError("VBoxServiceTimeSyncInit: Adjusting token privileges (SE_SYSTEMTIME_NAME) failed with status code %u/%Rrc!\n", dwErr, rc);
+                    VGSvcError("vgsvcTimeSyncInit: Adjusting token privileges (SE_SYSTEMTIME_NAME) failed with status code %u/%Rrc!\n",
+                               dwErr, rc);
                 }
             }
             else
             {
                 DWORD dwErr = GetLastError();
                 rc = RTErrConvertFromWin32(dwErr);
-                VBoxServiceError("VBoxServiceTimeSyncInit: Looking up token privileges (SE_SYSTEMTIME_NAME) failed with status code %u/%Rrc!\n", dwErr, rc);
+                VGSvcError("vgsvcTimeSyncInit: Looking up token privileges (SE_SYSTEMTIME_NAME) failed with status code %u/%Rrc!\n",
+                           dwErr, rc);
             }
             if (RT_FAILURE(rc))
             {
@@ -331,19 +328,20 @@ static DECLCALLBACK(int) VBoxServiceTimeSyncInit(void)
         {
             DWORD dwErr = GetLastError();
             rc = RTErrConvertFromWin32(dwErr);
-            VBoxServiceError("VBoxServiceTimeSyncInit: Opening process token (SE_SYSTEMTIME_NAME) failed with status code %u/%Rrc!\n", dwErr, rc);
+            VGSvcError("vgsvcTimeSyncInit: Opening process token (SE_SYSTEMTIME_NAME) failed with status code %u/%Rrc!\n",
+                       dwErr, rc);
             g_hTokenProcess = NULL;
         }
     }
 
     if (GetSystemTimeAdjustment(&g_dwWinTimeAdjustment, &g_dwWinTimeIncrement, &g_bWinTimeAdjustmentDisabled))
-        VBoxServiceVerbose(3, "VBoxServiceTimeSyncInit: Initially %ld (100ns) units per %ld (100 ns) units interval, disabled=%d\n",
-                           g_dwWinTimeAdjustment, g_dwWinTimeIncrement, g_bWinTimeAdjustmentDisabled ? 1 : 0);
+        VGSvcVerbose(3, "vgsvcTimeSyncInit: Initially %ld (100ns) units per %ld (100 ns) units interval, disabled=%d\n",
+                     g_dwWinTimeAdjustment, g_dwWinTimeIncrement, g_bWinTimeAdjustmentDisabled ? 1 : 0);
     else
     {
         DWORD dwErr = GetLastError();
         rc = RTErrConvertFromWin32(dwErr);
-        VBoxServiceError("VBoxServiceTimeSyncInit: Could not get time adjustment values! Last error: %ld!\n", dwErr);
+        VGSvcError("vgsvcTimeSyncInit: Could not get time adjustment values! Last error: %ld!\n", dwErr);
     }
 #endif /* RT_OS_WINDOWS */
 
@@ -358,14 +356,13 @@ static DECLCALLBACK(int) VBoxServiceTimeSyncInit(void)
  *
  * @param   pDrift          The time adjustment.
  */
-static bool VBoxServiceTimeSyncAdjust(PCRTTIMESPEC pDrift)
+static bool vgsvcTimeSyncAdjust(PCRTTIMESPEC pDrift)
 {
 #ifdef RT_OS_WINDOWS
-/** @todo r=bird: NT4 doesn't have GetSystemTimeAdjustment according to MSDN. */
 /** @todo r=bird: g_hTokenProcess cannot be NULL here.
- *        VBoxServiceTimeSyncInit will fail and the service will not be
- *        started with it being NULL.  VBoxServiceTimeSyncInit OTOH will *NOT*
- *        be called until the service thread has terminated.  If anything
+ *        vgsvcTimeSyncInit will fail and the service will not be started with
+ *        it being NULL.  vgsvcTimeSyncInit OTOH will *NOT* be called until the
+ *        service thread has terminated.  If anything
  *        else is the case, there is buggy code somewhere.*/
     if (g_hTokenProcess == NULL) /* Is the token already closed when shutting down? */
         return false;
@@ -396,9 +393,9 @@ static bool VBoxServiceTimeSyncAdjust(PCRTTIMESPEC pDrift)
             }
         }
 
-        VBoxServiceVerbose(3, "VBoxServiceTimeSyncAdjust: Drift=%lldms\n", RTTimeSpecGetMilli(pDrift));
-        VBoxServiceVerbose(3, "VBoxServiceTimeSyncAdjust: OrgTA=%ld, CurTA=%ld, NewTA=%ld, DiffNew=%ld, DiffMax=%ld\n",
-                           g_dwWinTimeAdjustment, dwWinTimeAdjustment, dwWinNewTimeAdjustment, dwDiffNew, dwDiffMax);
+        VGSvcVerbose(3, "vgsvcTimeSyncAdjust: Drift=%lldms\n", RTTimeSpecGetMilli(pDrift));
+        VGSvcVerbose(3, "vgsvcTimeSyncAdjust: OrgTA=%ld, CurTA=%ld, NewTA=%ld, DiffNew=%ld, DiffMax=%ld\n",
+                     g_dwWinTimeAdjustment, dwWinTimeAdjustment, dwWinNewTimeAdjustment, dwDiffNew, dwDiffMax);
         if (SetSystemTimeAdjustment(dwWinNewTimeAdjustment, FALSE /* Periodic adjustments enabled. */))
         {
             g_cTimeSyncErrors = 0;
@@ -406,10 +403,10 @@ static bool VBoxServiceTimeSyncAdjust(PCRTTIMESPEC pDrift)
         }
 
         if (g_cTimeSyncErrors++ < 10)
-             VBoxServiceError("VBoxServiceTimeSyncAdjust: SetSystemTimeAdjustment failed, error=%u\n", GetLastError());
+             VGSvcError("vgsvcTimeSyncAdjust: SetSystemTimeAdjustment failed, error=%u\n", GetLastError());
     }
     else if (g_cTimeSyncErrors++ < 10)
-        VBoxServiceError("VBoxServiceTimeSyncAdjust: GetSystemTimeAdjustment failed, error=%ld\n", GetLastError());
+        VGSvcError("vgsvcTimeSyncAdjust: GetSystemTimeAdjustment failed, error=%ld\n", GetLastError());
 
 #elif defined(RT_OS_OS2) || defined(RT_OS_HAIKU)
     /* No API for doing gradual time adjustments. */
@@ -423,7 +420,7 @@ static bool VBoxServiceTimeSyncAdjust(PCRTTIMESPEC pDrift)
     if (adjtime(&tv, NULL) == 0)
     {
         if (g_cVerbosity >= 1)
-            VBoxServiceVerbose(1, "VBoxServiceTimeSyncAdjust: adjtime by %RDtimespec\n", pDrift);
+            VGSvcVerbose(1, "vgsvcTimeSyncAdjust: adjtime by %RDtimespec\n", pDrift);
         g_cTimeSyncErrors = 0;
         return true;
     }
@@ -437,19 +434,19 @@ static bool VBoxServiceTimeSyncAdjust(PCRTTIMESPEC pDrift)
 /**
  * Cancels any pending time adjustment.
  *
- * Called when we've caught up and before calls to VBoxServiceTimeSyncSet.
+ * Called when we've caught up and before calls to vgsvcTimeSyncSet.
  */
-static void VBoxServiceTimeSyncCancelAdjust(void)
+static void vgsvcTimeSyncCancelAdjust(void)
 {
 #ifdef RT_OS_WINDOWS
 /** @todo r=bird: g_hTokenProcess cannot be NULL here.  See argumentation in
- *        VBoxServiceTimeSyncAdjust.  */
+ *        vgsvcTimeSyncAdjust.  */
     if (g_hTokenProcess == NULL) /* No process token (anymore)? */
         return;
     if (SetSystemTimeAdjustment(0, TRUE /* Periodic adjustments disabled. */))
-        VBoxServiceVerbose(3, "VBoxServiceTimeSyncCancelAdjust: Windows Time Adjustment is now disabled.\n");
+        VGSvcVerbose(3, "vgsvcTimeSyncCancelAdjust: Windows Time Adjustment is now disabled.\n");
     else if (g_cTimeSyncErrors++ < 10)
-        VBoxServiceError("VBoxServiceTimeSyncCancelAdjust: SetSystemTimeAdjustment(,disable) failed, error=%u\n", GetLastError());
+        VGSvcError("vgsvcTimeSyncCancelAdjust: SetSystemTimeAdjustment(,disable) failed, error=%u\n", GetLastError());
 #endif /* !RT_OS_WINDOWS */
 }
 
@@ -461,7 +458,7 @@ static void VBoxServiceTimeSyncCancelAdjust(void)
  *
  * @param   pDrift              The time adjustment.
  */
-static void VBoxServiceTimeSyncSet(PCRTTIMESPEC pDrift)
+static void vgsvcTimeSyncSet(PCRTTIMESPEC pDrift)
 {
     /*
      * Query the current time, adjust it by adding the drift and set it.
@@ -477,23 +474,23 @@ static void VBoxServiceTimeSyncSet(PCRTTIMESPEC pDrift)
         {
             char        sz[64];
             RTTIME      Time;
-            VBoxServiceVerbose(1, "time set to %s\n",
-                               RTTimeToString(RTTimeExplode(&Time, &NewGuestTime), sz, sizeof(sz)));
+            VGSvcVerbose(1, "time set to %s\n", RTTimeToString(RTTimeExplode(&Time, &NewGuestTime), sz, sizeof(sz)));
 #ifdef DEBUG
             RTTIMESPEC  Tmp;
             if (g_cVerbosity >= 3)
-                VBoxServiceVerbose(3, "        now %s\n",
-                                   RTTimeToString(RTTimeExplode(&Time, RTTimeNow(&Tmp)), sz, sizeof(sz)));
+                VGSvcVerbose(3, "        now %s\n", RTTimeToString(RTTimeExplode(&Time, RTTimeNow(&Tmp)), sz, sizeof(sz)));
 #endif
         }
     }
     else if (g_cTimeSyncErrors++ < 10)
-        VBoxServiceError("VBoxServiceTimeSyncSet: RTTimeSet(%RDtimespec) failed: %Rrc\n", &NewGuestTime, rc);
+        VGSvcError("vgsvcTimeSyncSet: RTTimeSet(%RDtimespec) failed: %Rrc\n", &NewGuestTime, rc);
 }
 
 
-/** @copydoc VBOXSERVICE::pfnWorker */
-DECLCALLBACK(int) VBoxServiceTimeSyncWorker(bool volatile *pfShutdown)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnWorker}
+ */
+DECLCALLBACK(int) vgsvcTimeSyncWorker(bool volatile *pfShutdown)
 {
     RTTIME Time;
     char sz[64];
@@ -522,7 +519,7 @@ DECLCALLBACK(int) VBoxServiceTimeSyncWorker(bool volatile *pfShutdown)
             if (RT_FAILURE(rc2))
             {
                 if (g_cTimeSyncErrors++ < 10)
-                    VBoxServiceError("VBoxServiceTimeSyncWorker: VbglR3GetHostTime failed; rc2=%Rrc\n", rc2);
+                    VGSvcError("vgsvcTimeSyncWorker: VbglR3GetHostTime failed; rc2=%Rrc\n", rc2);
                 break;
             }
             RTTimeNow(&GuestNow);
@@ -543,7 +540,7 @@ DECLCALLBACK(int) VBoxServiceTimeSyncWorker(bool volatile *pfShutdown)
                     VbglR3GetSessionId(&idNewSession);
                     if (idNewSession != g_idTimeSyncSession)
                     {
-                        VBoxServiceVerbose(3, "VBoxServiceTimeSyncWorker: The VM session ID changed, forcing resync.\n");
+                        VGSvcVerbose(3, "vgsvcTimeSyncWorker: The VM session ID changed, forcing resync.\n");
                         TimeSyncSetThreshold = 0;
                         g_idTimeSyncSession  = idNewSession;
                     }
@@ -565,11 +562,10 @@ DECLCALLBACK(int) VBoxServiceTimeSyncWorker(bool volatile *pfShutdown)
                 RTTimeSpecAbsolute(&AbsDrift);
                 if (g_cVerbosity >= 3)
                 {
-                    VBoxServiceVerbose(3, "VBoxServiceTimeSyncWorker: Host:    %s    (MinAdjust: %RU32 ms)\n",
-                                       RTTimeToString(RTTimeExplode(&Time, &HostNow), sz, sizeof(sz)), MinAdjust);
-                    VBoxServiceVerbose(3, "VBoxServiceTimeSyncWorker: Guest: - %s => %RDtimespec drift\n",
-                                       RTTimeToString(RTTimeExplode(&Time, &GuestNow), sz, sizeof(sz)),
-                                       &Drift);
+                    VGSvcVerbose(3, "vgsvcTimeSyncWorker: Host:    %s    (MinAdjust: %RU32 ms)\n",
+                                 RTTimeToString(RTTimeExplode(&Time, &HostNow), sz, sizeof(sz)), MinAdjust);
+                    VGSvcVerbose(3, "vgsvcTimeSyncWorker: Guest: - %s => %RDtimespec drift\n",
+                                 RTTimeToString(RTTimeExplode(&Time, &GuestNow), sz, sizeof(sz)), &Drift);
                 }
 
                 uint32_t AbsDriftMilli = RTTimeSpecGetMilli(&AbsDrift);
@@ -584,17 +580,17 @@ DECLCALLBACK(int) VBoxServiceTimeSyncWorker(bool volatile *pfShutdown)
 
                     if (    AbsDriftMilli > TimeSyncSetThreshold
                         ||  g_fTimeSyncSetNext
-                        ||  !VBoxServiceTimeSyncAdjust(&Drift))
+                        ||  !vgsvcTimeSyncAdjust(&Drift))
                     {
-                        VBoxServiceTimeSyncCancelAdjust();
-                        VBoxServiceTimeSyncSet(&Drift);
+                        vgsvcTimeSyncCancelAdjust();
+                        vgsvcTimeSyncSet(&Drift);
                     }
                 }
                 else
-                    VBoxServiceTimeSyncCancelAdjust();
+                    vgsvcTimeSyncCancelAdjust();
                 break;
             }
-            VBoxServiceVerbose(3, "VBoxServiceTimeSyncWorker: %RDtimespec: latency too high (%RDtimespec) sleeping 1s\n", GuestElapsed);
+            VGSvcVerbose(3, "vgsvcTimeSyncWorker: %RDtimespec: latency too high (%RDtimespec) sleeping 1s\n", GuestElapsed);
             RTThreadSleep(1000);
         } while (--cTries > 0);
 
@@ -614,28 +610,32 @@ DECLCALLBACK(int) VBoxServiceTimeSyncWorker(bool volatile *pfShutdown)
             break;
         if (rc2 != VERR_TIMEOUT && RT_FAILURE(rc2))
         {
-            VBoxServiceError("VBoxServiceTimeSyncWorker: RTSemEventMultiWait failed; rc2=%Rrc\n", rc2);
+            VGSvcError("vgsvcTimeSyncWorker: RTSemEventMultiWait failed; rc2=%Rrc\n", rc2);
             rc = rc2;
             break;
         }
     }
 
-    VBoxServiceTimeSyncCancelAdjust();
+    vgsvcTimeSyncCancelAdjust();
     RTSemEventMultiDestroy(g_TimeSyncEvent);
     g_TimeSyncEvent = NIL_RTSEMEVENTMULTI;
     return rc;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnStop */
-static DECLCALLBACK(void) VBoxServiceTimeSyncStop(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnStop}
+ */
+static DECLCALLBACK(void) vgsvcTimeSyncStop(void)
 {
     RTSemEventMultiSignal(g_TimeSyncEvent);
 }
 
 
-/** @copydoc VBOXSERVICE::pfnTerm */
-static DECLCALLBACK(void) VBoxServiceTimeSyncTerm(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnTerm}
+ */
+static DECLCALLBACK(void) vgsvcTimeSyncTerm(void)
 {
 #ifdef RT_OS_WINDOWS
     /*
@@ -646,7 +646,7 @@ static DECLCALLBACK(void) VBoxServiceTimeSyncTerm(void)
         if (!AdjustTokenPrivileges(g_hTokenProcess, FALSE, &g_TkOldPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
         {
             DWORD dwErr = GetLastError();
-            VBoxServiceError("VBoxServiceTimeSyncTerm: Restoring token privileges (SE_SYSTEMTIME_NAME) failed with code %u!\n", dwErr);
+            VGSvcError("vgsvcTimeSyncTerm: Restoring token privileges (SE_SYSTEMTIME_NAME) failed with code %u!\n", dwErr);
         }
         CloseHandle(g_hTokenProcess);
         g_hTokenProcess = NULL;
@@ -698,11 +698,11 @@ VBOXSERVICE g_TimeSync =
     "                            1 = set (default), 0 = don't set.\n"
     ,
     /* methods */
-    VBoxServiceTimeSyncPreInit,
-    VBoxServiceTimeSyncOption,
-    VBoxServiceTimeSyncInit,
-    VBoxServiceTimeSyncWorker,
-    VBoxServiceTimeSyncStop,
-    VBoxServiceTimeSyncTerm
+    vgsvcTimeSyncPreInit,
+    vgsvcTimeSyncOption,
+    vgsvcTimeSyncInit,
+    vgsvcTimeSyncWorker,
+    vgsvcTimeSyncStop,
+    vgsvcTimeSyncTerm
 };
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.cpp
index 5ecec49..758d75b 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceToolBox.cpp
@@ -105,10 +105,12 @@ typedef struct VBOXSERVICETOOLBOXDIRENTRY
 } VBOXSERVICETOOLBOXDIRENTRY, *PVBOXSERVICETOOLBOXDIRENTRY;
 
 
+
+
 /**
  * Displays a common header for all help text to stdout.
  */
-static void VBoxServiceToolboxShowUsageHeader(void)
+static void vgsvcToolboxShowUsageHeader(void)
 {
     RTPrintf(VBOX_PRODUCT " Guest Toolbox Version "
              VBOX_VERSION_STRING "\n"
@@ -122,9 +124,9 @@ static void VBoxServiceToolboxShowUsageHeader(void)
 /**
  * Displays a help text to stdout.
  */
-static void VBoxServiceToolboxShowUsage(void)
+static void vgsvcToolboxShowUsage(void)
 {
-    VBoxServiceToolboxShowUsageHeader();
+    vgsvcToolboxShowUsageHeader();
     RTPrintf("  VBoxService [--use-toolbox] vbox_<command> [<general options>] <parameters>\n\n"
              "General options:\n\n"
              "  --machinereadable          produce all output in machine-readable form\n"
@@ -150,7 +152,7 @@ static void VBoxServiceToolboxShowUsage(void)
 /**
  * Displays the program's version number.
  */
-static void VBoxServiceToolboxShowVersion(void)
+static void vgsvcToolboxShowVersion(void)
 {
     RTPrintf("%sr%d\n", VBOX_VERSION_STRING, RTBldCfgRevision());
 }
@@ -161,7 +163,7 @@ static void VBoxServiceToolboxShowVersion(void)
  *
  * @return  IPRT status code.
  */
-static int VBoxServiceToolboxStrmInit(void)
+static int vgsvcToolboxStrmInit(void)
 {
     /* Set stdout's mode to binary. This is required for outputting all the machine-readable
      * data correctly. */
@@ -181,7 +183,7 @@ static int VBoxServiceToolboxStrmInit(void)
  * @param   uVersion                Stream version name. Handy for distinguishing
  *                                  different stream versions later.
  */
-static void VBoxServiceToolboxPrintStrmHeader(const char *pszToolName, uint32_t uVersion)
+static void vgsvcToolboxPrintStrmHeader(const char *pszToolName, uint32_t uVersion)
 {
     AssertPtrReturnVoid(pszToolName);
     RTPrintf("hdr_id=%s%chdr_ver=%u%c", pszToolName, 0, uVersion, 0);
@@ -193,7 +195,7 @@ static void VBoxServiceToolboxPrintStrmHeader(const char *pszToolName, uint32_t
  * parseable stream just ended.
  *
  */
-static void VBoxServiceToolboxPrintStrmTermination()
+static void vgsvcToolboxPrintStrmTermination()
 {
     RTPrintf("%c%c%c%c", 0, 0, 0, 0);
 }
@@ -203,12 +205,11 @@ static void VBoxServiceToolboxPrintStrmTermination()
  * Parse a file mode string from the command line (currently octal only)
  * and print an error message and return an error if necessary.
  */
-static int vboxServiceToolboxParseMode(const char *pcszMode, RTFMODE *pfMode)
+static int vgsvcToolboxParseMode(const char *pcszMode, RTFMODE *pfMode)
 {
     int rc = RTStrToUInt32Ex(pcszMode, NULL, 8 /* Base */, pfMode);
     if (RT_FAILURE(rc)) /* Only octet based values supported right now! */
-        RTMsgError("Mode flag strings not implemented yet! Use octal numbers instead. (%s)\n",
-                   pcszMode);
+        RTMsgError("Mode flag strings not implemented yet! Use octal numbers instead. (%s)\n", pcszMode);
     return rc;
 }
 
@@ -219,7 +220,7 @@ static int vboxServiceToolboxParseMode(const char *pcszMode, RTFMODE *pfMode)
  * @return  IPRT status code.
  * @param   pList                   Pointer to list to destroy.
  */
-static void VBoxServiceToolboxPathBufDestroy(PRTLISTNODE pList)
+static void vgsvcToolboxPathBufDestroy(PRTLISTNODE pList)
 {
     AssertPtr(pList);
     /** @todo use RTListForEachSafe */
@@ -246,7 +247,7 @@ static void VBoxServiceToolboxPathBufDestroy(PRTLISTNODE pList)
  * @param   pList                   Pointer to list to add entry to.
  * @param   pszName                 Name of entry to add.
  */
-static int VBoxServiceToolboxPathBufAddPathEntry(PRTLISTNODE pList, const char *pszName)
+static int vgsvcToolboxPathBufAddPathEntry(PRTLISTNODE pList, const char *pszName)
 {
     AssertPtrReturn(pList, VERR_INVALID_PARAMETER);
 
@@ -257,7 +258,7 @@ static int VBoxServiceToolboxPathBufAddPathEntry(PRTLISTNODE pList, const char *
         pNode->pszName = RTStrDup(pszName);
         AssertPtr(pNode->pszName);
 
-        /*rc =*/ RTListAppend(pList, &pNode->Node);
+        RTListAppend(pList, &pNode->Node);
     }
     else
         rc = VERR_NO_MEMORY;
@@ -274,7 +275,7 @@ static int VBoxServiceToolboxPathBufAddPathEntry(PRTLISTNODE pList, const char *
  * @param   hOutput                 Handle of output file (if any) to use;
  *                                  else stdout will be used.
  */
-static int VBoxServiceToolboxCatOutput(RTFILE hInput, RTFILE hOutput)
+static int vgsvcToolboxCatOutput(RTFILE hInput, RTFILE hOutput)
 {
     int rc = VINF_SUCCESS;
     if (hInput == NIL_RTFILE)
@@ -335,7 +336,7 @@ static char g_paszCatHelp[] =
  * @param   argc                    Number of arguments.
  * @param   argv                    Pointer to argument array.
  */
-static RTEXITCODE VBoxServiceToolboxCat(int argc, char **argv)
+static RTEXITCODE vgsvcToolboxCat(int argc, char **argv)
 {
     static const RTGETOPTDEF s_aOptions[] =
     {
@@ -359,9 +360,7 @@ static RTEXITCODE VBoxServiceToolboxCat(int argc, char **argv)
     RTGETOPTUNION ValueUnion;
     RTGETOPTSTATE GetState;
 
-    RTGetOptInit(&GetState, argc, argv,
-                 s_aOptions, RT_ELEMENTS(s_aOptions),
-                 1 /*iFirst*/, 0 /*fFlags*/);
+    RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1 /*iFirst*/, 0 /*fFlags*/);
 
     int rc = VINF_SUCCESS;
     bool fUsageOK = true;
@@ -369,8 +368,8 @@ static RTEXITCODE VBoxServiceToolboxCat(int argc, char **argv)
     const char *pszOutput = NULL;
     RTFILE hOutput = NIL_RTFILE;
     uint32_t fFlags = RTFILE_O_CREATE_REPLACE /* Output file flags. */
-                      | RTFILE_O_WRITE
-                      | RTFILE_O_DENY_WRITE;
+                    | RTFILE_O_WRITE
+                    | RTFILE_O_DENY_WRITE;
 
     /* Init directory list. */
     RTLISTANCHOR inputList;
@@ -397,7 +396,7 @@ static RTEXITCODE VBoxServiceToolboxCat(int argc, char **argv)
                 break;
 
             case 'h':
-                VBoxServiceToolboxShowUsageHeader();
+                vgsvcToolboxShowUsageHeader();
                 RTPrintf("%s", g_paszCatHelp);
                 return RTEXITCODE_SUCCESS;
 
@@ -410,7 +409,7 @@ static RTEXITCODE VBoxServiceToolboxCat(int argc, char **argv)
                 break;
 
             case 'V':
-                VBoxServiceToolboxShowVersion();
+                vgsvcToolboxShowVersion();
                 return RTEXITCODE_SUCCESS;
 
             case VBOXSERVICETOOLBOXCATOPT_NO_CONTENT_INDEXED:
@@ -418,16 +417,14 @@ static RTEXITCODE VBoxServiceToolboxCat(int argc, char **argv)
                 break;
 
             case VINF_GETOPT_NOT_OPTION:
-                {
-                    /* Add file(s) to buffer. This enables processing multiple paths
-                     * at once.
-                     *
-                     * Since the non-options (RTGETOPTINIT_FLAGS_OPTS_FIRST) come last when
-                     * processing this loop it's safe to immediately exit on syntax errors
-                     * or showing the help text (see above). */
-                    rc = VBoxServiceToolboxPathBufAddPathEntry(&inputList, ValueUnion.psz);
-                    break;
-                }
+                /* Add file(s) to buffer. This enables processing multiple paths
+                 * at once.
+                 *
+                 * Since the non-options (RTGETOPTINIT_FLAGS_OPTS_FIRST) come last when
+                 * processing this loop it's safe to immediately exit on syntax errors
+                 * or showing the help text (see above). */
+                rc = vgsvcToolboxPathBufAddPathEntry(&inputList, ValueUnion.psz);
+                break;
 
             default:
                 return RTGetOptPrintError(ch, &ValueUnion);
@@ -440,8 +437,7 @@ static RTEXITCODE VBoxServiceToolboxCat(int argc, char **argv)
         {
             rc = RTFileOpen(&hOutput, pszOutput, fFlags);
             if (RT_FAILURE(rc))
-                RTMsgError("Could not create output file '%s', rc=%Rrc\n",
-                           pszOutput, rc);
+                RTMsgError("Could not create output file '%s', rc=%Rrc\n", pszOutput, rc);
         }
 
         if (RT_SUCCESS(rc))
@@ -455,15 +451,14 @@ static RTEXITCODE VBoxServiceToolboxCat(int argc, char **argv)
                                 RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_WRITE);
                 if (RT_SUCCESS(rc))
                 {
-                    rc = VBoxServiceToolboxCatOutput(hInput, hOutput);
+                    rc = vgsvcToolboxCatOutput(hInput, hOutput);
                     RTFileClose(hInput);
                 }
                 else
                 {
                     PCRTSTATUSMSG pMsg = RTErrGet(rc);
                     if (pMsg)
-                        RTMsgError("Could not open input file '%s': %s\n",
-                                   pNodeIt->pszName, pMsg->pszMsgFull);
+                        RTMsgError("Could not open input file '%s': %s\n", pNodeIt->pszName, pMsg->pszMsgFull);
                     else
                         RTMsgError("Could not open input file '%s', rc=%Rrc\n", pNodeIt->pszName, rc);
                 }
@@ -474,13 +469,13 @@ static RTEXITCODE VBoxServiceToolboxCat(int argc, char **argv)
 
             /* If not input files were defined, process stdin. */
             if (RTListNodeIsFirst(&inputList, &inputList))
-                rc = VBoxServiceToolboxCatOutput(hInput, hOutput);
+                rc = vgsvcToolboxCatOutput(hInput, hOutput);
         }
     }
 
     if (hOutput != NIL_RTFILE)
         RTFileClose(hOutput);
-    VBoxServiceToolboxPathBufDestroy(&inputList);
+    vgsvcToolboxPathBufDestroy(&inputList);
 
     return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
 }
@@ -490,14 +485,13 @@ static RTEXITCODE VBoxServiceToolboxCat(int argc, char **argv)
  * to stdout.
  *
  * @return  IPRT status code.
- * @param   pszName                     Object name.
- * @param   cbName                      Size of object name.
- * @param   uOutputFlags                Output / handling flags of type VBOXSERVICETOOLBOXOUTPUTFLAG.
- * @param   pObjInfo                    Pointer to object information.
+ * @param   pszName         Object name.
+ * @param   cbName          Size of object name.
+ * @param   fOutputFlags    Output / handling flags of type
+ *                          VBOXSERVICETOOLBOXOUTPUTFLAG.
+ * @param   pObjInfo        Pointer to object information.
  */
-static int VBoxServiceToolboxPrintFsInfo(const char *pszName, uint16_t cbName,
-                                         uint32_t uOutputFlags,
-                                         PRTFSOBJINFO pObjInfo)
+static int vgsvcToolboxPrintFsInfo(const char *pszName, size_t cbName, uint32_t fOutputFlags, PRTFSOBJINFO pObjInfo)
 {
     AssertPtrReturn(pszName, VERR_INVALID_POINTER);
     AssertReturn(cbName, VERR_INVALID_PARAMETER);
@@ -519,25 +513,25 @@ static int VBoxServiceToolboxPrintFsInfo(const char *pszName, uint16_t cbName,
     }
     /** @todo sticy bits++ */
 
-    if (!(uOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_LONG))
+    if (!(fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_LONG))
     {
-        if (uOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE)
+        if (fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE)
         {
             /** @todo Skip node_id if not present/available! */
-            RTPrintf("ftype=%c%cnode_id=%RU64%cname_len=%RU16%cname=%s%c",
+            RTPrintf("ftype=%c%cnode_id=%RU64%cname_len=%zu%cname=%s%c",
                      chFileType, 0, (uint64_t)pObjInfo->Attr.u.Unix.INodeId, 0,
                      cbName, 0, pszName, 0);
         }
         else
-            RTPrintf("%c %#18llx %3d %s\n",
+            RTPrintf("%c %#18llx %3zu %s\n",
                      chFileType, (uint64_t)pObjInfo->Attr.u.Unix.INodeId, cbName, pszName);
 
-        if (uOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE) /* End of data block. */
+        if (fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE) /* End of data block. */
             RTPrintf("%c%c", 0, 0);
     }
     else
     {
-        if (uOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE)
+        if (fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE)
         {
             RTPrintf("ftype=%c%c", chFileType, 0);
             /** @todo Skip node_id if not present/available! */
@@ -590,7 +584,7 @@ static int VBoxServiceToolboxPrintFsInfo(const char *pszName, uint16_t cbName,
                      szTimeChange, 0,
                      szTimeModification, 0,
                      szTimeAccess, 0);
-            RTPrintf("cname_len=%RU16%cname=%s%c",
+            RTPrintf("cname_len=%zu%cname=%s%c",
                      cbName, 0, pszName, 0);
 
             /* End of data block. */
@@ -636,7 +630,7 @@ static int VBoxServiceToolboxPrintFsInfo(const char *pszName, uint16_t cbName,
                      RTTimeSpecGetNano(&pObjInfo->ChangeTime), /** @todo really ns? */
                      RTTimeSpecGetNano(&pObjInfo->ModificationTime), /** @todo really ns? */
                      RTTimeSpecGetNano(&pObjInfo->AccessTime)); /** @todo really ns? */
-            RTPrintf(" %2d %s\n", cbName, pszName);
+            RTPrintf(" %2zu %s\n", cbName, pszName);
         }
     }
 
@@ -650,24 +644,23 @@ static int VBoxServiceToolboxPrintFsInfo(const char *pszName, uint16_t cbName,
  *
  * @return  IPRT status code.
  * @param   pszDir                  Directory (path) to ouptut.
- * @param   uFlags                  Flags of type VBOXSERVICETOOLBOXLSFLAG.
- * @param   uOutputFlags            Flags of type  VBOXSERVICETOOLBOXOUTPUTFLAG.
+ * @param   fFlags                  Flags of type VBOXSERVICETOOLBOXLSFLAG.
+ * @param   fOutputFlags            Flags of type  VBOXSERVICETOOLBOXOUTPUTFLAG.
  */
-static int VBoxServiceToolboxLsHandleDir(const char *pszDir,
-                                         uint32_t uFlags, uint32_t uOutputFlags)
+static int vgsvcToolboxLsHandleDir(const char *pszDir, uint32_t fFlags, uint32_t fOutputFlags)
 {
     AssertPtrReturn(pszDir, VERR_INVALID_PARAMETER);
 
-    if (uFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE)
+    if (fFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE)
         RTPrintf("dname=%s%c", pszDir, 0);
-    else if (uFlags & VBOXSERVICETOOLBOXLSFLAG_RECURSIVE)
+    else if (fFlags & VBOXSERVICETOOLBOXLSFLAG_RECURSIVE)
         RTPrintf("%s:\n", pszDir);
 
     char szPathAbs[RTPATH_MAX + 1];
     int rc = RTPathAbs(pszDir, szPathAbs, sizeof(szPathAbs));
     if (RT_FAILURE(rc))
     {
-        if (!(uOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE))
+        if (!(fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE))
             RTMsgError("Failed to retrieve absolute path of '%s', rc=%Rrc\n", pszDir, rc);
         return rc;
     }
@@ -676,7 +669,7 @@ static int VBoxServiceToolboxLsHandleDir(const char *pszDir,
     rc = RTDirOpen(&pDir, szPathAbs);
     if (RT_FAILURE(rc))
     {
-        if (!(uOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE))
+        if (!(fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE))
             RTMsgError("Failed to open directory '%s', rc=%Rrc\n", szPathAbs, rc);
         return rc;
     }
@@ -698,7 +691,7 @@ static int VBoxServiceToolboxLsHandleDir(const char *pszDir,
             if (pNode)
             {
                 memcpy(&pNode->dirEntry, &DirEntry, sizeof(RTDIRENTRYEX));
-                /*rc =*/ RTListAppend(&dirList, &pNode->Node);
+                RTListAppend(&dirList, &pNode->Node);
             }
             else
                 rc = VERR_NO_MEMORY;
@@ -711,9 +704,8 @@ static int VBoxServiceToolboxLsHandleDir(const char *pszDir,
     int rc2 = RTDirClose(pDir);
     if (RT_FAILURE(rc2))
     {
-        if (!(uOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE))
-            RTMsgError("Failed to close dir '%s', rc=%Rrc\n",
-                       pszDir, rc2);
+        if (!(fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE))
+            RTMsgError("Failed to close dir '%s', rc=%Rrc\n", pszDir, rc2);
         if (RT_SUCCESS(rc))
             rc = rc2;
     }
@@ -723,16 +715,15 @@ static int VBoxServiceToolboxLsHandleDir(const char *pszDir,
         PVBOXSERVICETOOLBOXDIRENTRY pNodeIt;
         RTListForEach(&dirList, pNodeIt, VBOXSERVICETOOLBOXDIRENTRY, Node)
         {
-            rc = VBoxServiceToolboxPrintFsInfo(pNodeIt->dirEntry.szName, pNodeIt->dirEntry.cbName,
-                                               uOutputFlags,
-                                               &pNodeIt->dirEntry.Info);
+            rc = vgsvcToolboxPrintFsInfo(pNodeIt->dirEntry.szName, pNodeIt->dirEntry.cbName,
+                                         fOutputFlags, &pNodeIt->dirEntry.Info);
             if (RT_FAILURE(rc))
                 break;
         }
 
         /* If everything went fine we do the second run (if needed) ... */
         if (   RT_SUCCESS(rc)
-            && (uFlags & VBOXSERVICETOOLBOXLSFLAG_RECURSIVE))
+            && (fFlags & VBOXSERVICETOOLBOXLSFLAG_RECURSIVE))
         {
             /* Process all sub-directories. */
             RTListForEach(&dirList, pNodeIt, VBOXSERVICETOOLBOXDIRENTRY, Node)
@@ -741,27 +732,25 @@ static int VBoxServiceToolboxLsHandleDir(const char *pszDir,
                 switch (fMode & RTFS_TYPE_MASK)
                 {
                     case RTFS_TYPE_SYMLINK:
-                        if (!(uFlags & VBOXSERVICETOOLBOXLSFLAG_SYMLINKS))
+                        if (!(fFlags & VBOXSERVICETOOLBOXLSFLAG_SYMLINKS))
                             break;
                         /* Fall through is intentional. */
                     case RTFS_TYPE_DIRECTORY:
+                    {
+                        const char *pszName = pNodeIt->dirEntry.szName;
+                        if (   !RTStrICmp(pszName, ".")
+                            || !RTStrICmp(pszName, ".."))
                         {
-                            const char *pszName = pNodeIt->dirEntry.szName;
-                            if (   !RTStrICmp(pszName, ".")
-                                || !RTStrICmp(pszName, ".."))
-                            {
-                                /* Skip dot directories. */
-                                continue;
-                            }
-
-                            char szPath[RTPATH_MAX];
-                            rc = RTPathJoin(szPath, sizeof(szPath),
-                                            pszDir, pNodeIt->dirEntry.szName);
-                            if (RT_SUCCESS(rc))
-                                rc = VBoxServiceToolboxLsHandleDir(szPath,
-                                                                   uFlags, uOutputFlags);
+                            /* Skip dot directories. */
+                            continue;
                         }
+
+                        char szPath[RTPATH_MAX];
+                        rc = RTPathJoin(szPath, sizeof(szPath), pszDir, pNodeIt->dirEntry.szName);
+                        if (RT_SUCCESS(rc))
+                            rc = vgsvcToolboxLsHandleDir(szPath, fFlags, fOutputFlags);
                         break;
+                    }
 
                     default: /* Ignore the rest. */
                         break;
@@ -803,22 +792,21 @@ static char g_paszLsHelp[] =
  * @param   argc                    Number of arguments.
  * @param   argv                    Pointer to argument array.
  */
-static RTEXITCODE VBoxServiceToolboxLs(int argc, char **argv)
+static RTEXITCODE vgsvcToolboxLs(int argc, char **argv)
 {
     static const RTGETOPTDEF s_aOptions[] =
     {
         { "--machinereadable", VBOXSERVICETOOLBOXOPT_MACHINE_READABLE,      RTGETOPT_REQ_NOTHING },
-        { "--dereference",     'L',                                           RTGETOPT_REQ_NOTHING },
-        { NULL,                'l',                                           RTGETOPT_REQ_NOTHING },
-        { NULL,                'R',                                           RTGETOPT_REQ_NOTHING },
+        { "--dereference",     'L',                                         RTGETOPT_REQ_NOTHING },
+        { NULL,                'l',                                         RTGETOPT_REQ_NOTHING },
+        { NULL,                'R',                                         RTGETOPT_REQ_NOTHING },
         { "--verbose",         VBOXSERVICETOOLBOXOPT_VERBOSE,               RTGETOPT_REQ_NOTHING}
     };
 
     int ch;
     RTGETOPTUNION ValueUnion;
     RTGETOPTSTATE GetState;
-    int rc = RTGetOptInit(&GetState, argc, argv,
-                          s_aOptions, RT_ELEMENTS(s_aOptions),
+    int rc = RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions),
                           1 /*iFirst*/, RTGETOPTINIT_FLAGS_OPTS_FIRST);
     AssertRCReturn(rc, RTEXITCODE_INIT);
 
@@ -831,13 +819,13 @@ static RTEXITCODE VBoxServiceToolboxLs(int argc, char **argv)
     RTListInit(&fileList);
 
     while (   (ch = RTGetOpt(&GetState, &ValueUnion))
-              && RT_SUCCESS(rc))
+           && RT_SUCCESS(rc))
     {
         /* For options that require an argument, ValueUnion has received the value. */
         switch (ch)
         {
             case 'h':
-                VBoxServiceToolboxShowUsageHeader();
+                vgsvcToolboxShowUsageHeader();
                 RTPrintf("%s", g_paszLsHelp);
                 return RTEXITCODE_SUCCESS;
 
@@ -862,7 +850,7 @@ static RTEXITCODE VBoxServiceToolboxLs(int argc, char **argv)
                 break;
 
             case 'V':
-                VBoxServiceToolboxShowVersion();
+                vgsvcToolboxShowVersion();
                 return RTEXITCODE_SUCCESS;
 
             case VINF_GETOPT_NOT_OPTION:
@@ -872,7 +860,7 @@ static RTEXITCODE VBoxServiceToolboxLs(int argc, char **argv)
                  * Since the non-options (RTGETOPTINIT_FLAGS_OPTS_FIRST) come last when
                  * processing this loop it's safe to immediately exit on syntax errors
                  * or showing the help text (see above). */
-                rc = VBoxServiceToolboxPathBufAddPathEntry(&fileList, ValueUnion.psz);
+                rc = vgsvcToolboxPathBufAddPathEntry(&fileList, ValueUnion.psz);
                 /** @todo r=bird: Nit: creating a list here is not really
                  *        necessary since you've got one in argv that's
                  *        accessible via RTGetOpt. */
@@ -892,7 +880,7 @@ static RTEXITCODE VBoxServiceToolboxLs(int argc, char **argv)
             rc = RTPathGetCurrent(szDirCur, sizeof(szDirCur));
             if (RT_SUCCESS(rc))
             {
-                rc = VBoxServiceToolboxPathBufAddPathEntry(&fileList, szDirCur);
+                rc = vgsvcToolboxPathBufAddPathEntry(&fileList, szDirCur);
                 if (RT_FAILURE(rc))
                     RTMsgError("Adding current directory failed, rc=%Rrc\n", rc);
             }
@@ -903,10 +891,10 @@ static RTEXITCODE VBoxServiceToolboxLs(int argc, char **argv)
         /* Print magic/version. */
         if (fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE)
         {
-            rc = VBoxServiceToolboxStrmInit();
+            rc = vgsvcToolboxStrmInit();
             if (RT_FAILURE(rc))
                 RTMsgError("Error while initializing parseable streams, rc=%Rrc\n", rc);
-            VBoxServiceToolboxPrintStrmHeader("vbt_ls", 1 /* Stream version */);
+            vgsvcToolboxPrintStrmHeader("vbt_ls", 1 /* Stream version */);
         }
 
         PVBOXSERVICETOOLBOXPATHENTRY pNodeIt;
@@ -916,48 +904,46 @@ static RTEXITCODE VBoxServiceToolboxLs(int argc, char **argv)
             {
                 RTFSOBJINFO objInfo;
                 int rc2 = RTPathQueryInfoEx(pNodeIt->pszName, &objInfo,
-                                            RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK /* @todo Follow link? */);
+                                            RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK /** @todo Follow link? */);
                 if (RT_FAILURE(rc2))
                 {
                     if (!(fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE))
-                        RTMsgError("Cannot access '%s': No such file or directory\n",
-                                   pNodeIt->pszName);
+                        RTMsgError("Cannot access '%s': No such file or directory\n", pNodeIt->pszName);
                     rc = VERR_FILE_NOT_FOUND;
                     /* Do not break here -- process every element in the list
                      * and keep failing rc. */
                 }
                 else
                 {
-                    rc2 = VBoxServiceToolboxPrintFsInfo(pNodeIt->pszName,
-                                                        strlen(pNodeIt->pszName) /* cbName */,
-                                                        fOutputFlags,
-                                                        &objInfo);
+                    rc2 = vgsvcToolboxPrintFsInfo(pNodeIt->pszName,
+                                                  strlen(pNodeIt->pszName) /* cbName */,
+                                                  fOutputFlags,
+                                                  &objInfo);
                     if (RT_FAILURE(rc2))
                         rc = rc2;
                 }
             }
             else
             {
-                int rc2 = VBoxServiceToolboxLsHandleDir(pNodeIt->pszName,
-                                                        fFlags, fOutputFlags);
+                int rc2 = vgsvcToolboxLsHandleDir(pNodeIt->pszName, fFlags, fOutputFlags);
                 if (RT_FAILURE(rc2))
                     rc = rc2;
             }
         }
 
         if (fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE) /* Output termination. */
-            VBoxServiceToolboxPrintStrmTermination();
+            vgsvcToolboxPrintStrmTermination();
     }
     else if (fVerbose)
         RTMsgError("Failed with rc=%Rrc\n", rc);
 
-    VBoxServiceToolboxPathBufDestroy(&fileList);
+    vgsvcToolboxPathBufDestroy(&fileList);
     return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
 }
 
 
 /* Try using RTPathRmCmd. */
-static RTEXITCODE VBoxServiceToolboxRm(int argc, char **argv)
+static RTEXITCODE vgsvcToolboxRm(int argc, char **argv)
 {
     return RTPathRmCmd(argc, argv);
 }
@@ -980,16 +966,17 @@ static char g_paszMkTempHelp[] =
 
 
 /**
- * Report the result of a vbox_mktemp operation - either errors to stderr (not
- * machine-readable) or everything to stdout as <name>\0<rc>\0 (machine-
- * readable format).  The message may optionally contain a '%s' for the file
- * name and an %Rrc for the result code in that order.  In future a "verbose"
- * flag may be added, without which nothing will be output in non-machine-
- * readable mode.  Sets prc if rc is a non-success code.
+ * Report the result of a vbox_mktemp operation.
+ *
+ * Either errors to stderr (not machine-readable) or everything to stdout as
+ * {name}\0{rc}\0 (machine- readable format).  The message may optionally
+ * contain a '%s' for the file name and an %Rrc for the result code in that
+ * order.  In future a "verbose" flag may be added, without which nothing will
+ * be output in non-machine- readable mode.  Sets prc if rc is a non-success
+ * code.
  */
 static void toolboxMkTempReport(const char *pcszMessage, const char *pcszFile,
-                                bool fActive, int rc, uint32_t fOutputFlags,
-                                int *prc)
+                                bool fActive, int rc, uint32_t fOutputFlags, int *prc)
 {
     if (!fActive)
         return;
@@ -1012,7 +999,7 @@ static void toolboxMkTempReport(const char *pcszMessage, const char *pcszFile,
  * @param   argc                    Number of arguments.
  * @param   argv                    Pointer to argument array.
  */
-static RTEXITCODE VBoxServiceToolboxMkTemp(int argc, char **argv)
+static RTEXITCODE vgsvcToolboxMkTemp(int argc, char **argv)
 {
     static const RTGETOPTDEF s_aOptions[] =
     {
@@ -1038,9 +1025,7 @@ static RTEXITCODE VBoxServiceToolboxMkTemp(int argc, char **argv)
     int ch, rc;
     RTGETOPTUNION ValueUnion;
     RTGETOPTSTATE GetState;
-    rc = RTGetOptInit(&GetState, argc, argv, s_aOptions,
-                      RT_ELEMENTS(s_aOptions), 1 /*iFirst*/,
-                      RTGETOPTINIT_FLAGS_OPTS_FIRST);
+    rc = RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1 /*iFirst*/, RTGETOPTINIT_FLAGS_OPTS_FIRST);
     AssertRCReturn(rc, RTEXITCODE_INIT);
 
     bool        fVerbose     = false;
@@ -1060,12 +1045,12 @@ static RTEXITCODE VBoxServiceToolboxMkTemp(int argc, char **argv)
         switch (ch)
         {
             case 'h':
-                VBoxServiceToolboxShowUsageHeader();
+                vgsvcToolboxShowUsageHeader();
                 RTPrintf("%s", g_paszMkTempHelp);
                 return RTEXITCODE_SUCCESS;
 
             case 'V':
-                VBoxServiceToolboxShowVersion();
+                vgsvcToolboxShowVersion();
                 return RTEXITCODE_SUCCESS;
 
             case VBOXSERVICETOOLBOXOPT_MACHINE_READABLE:
@@ -1077,7 +1062,7 @@ static RTEXITCODE VBoxServiceToolboxMkTemp(int argc, char **argv)
                 break;
 
             case 'm':
-                rc = vboxServiceToolboxParseMode(ValueUnion.psz, &fMode);
+                rc = vgsvcToolboxParseMode(ValueUnion.psz, &fMode);
                 if (RT_FAILURE(rc))
                     return RTEXITCODE_SYNTAX;
                 fModeSet = true;
@@ -1103,13 +1088,14 @@ static RTEXITCODE VBoxServiceToolboxMkTemp(int argc, char **argv)
                 return RTGetOptPrintError(ch, &ValueUnion);
         }
     }
+
     /* Print magic/version. */
     if (fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE)
     {
-        rc = VBoxServiceToolboxStrmInit();
+        rc = vgsvcToolboxStrmInit();
         if (RT_FAILURE(rc))
             RTMsgError("Error while initializing parseable streams, rc=%Rrc\n", rc);
-        VBoxServiceToolboxPrintStrmHeader("vbt_mktemp", 1 /* Stream version */);
+        vgsvcToolboxPrintStrmHeader("vbt_mktemp", 1 /* Stream version */);
     }
 
     if (fFlags & VBOXSERVICETOOLBOXMKTEMPFLAG_SECURE && fModeSet)
@@ -1118,39 +1104,35 @@ static RTEXITCODE VBoxServiceToolboxMkTemp(int argc, char **argv)
                             true, VERR_INVALID_PARAMETER, fOutputFlags, &rc);
         return RTEXITCODE_SYNTAX;
     }
+
     /* We need exactly one template, containing at least one 'X'. */
     if (cNonOptions != 1)
     {
-        toolboxMkTempReport("Please specify exactly one template.\n", "",
-                            true, VERR_INVALID_PARAMETER, fOutputFlags, &rc);
+        toolboxMkTempReport("Please specify exactly one template.\n", "", true, VERR_INVALID_PARAMETER, fOutputFlags, &rc);
         return RTEXITCODE_SYNTAX;
     }
     pcszTemplate = argv[argc - 1];
+
     /* Validate that the template is as IPRT requires (asserted by IPRT). */
     if (   RTPathHasPath(pcszTemplate)
         || (   !strstr(pcszTemplate, "XXX")
             && pcszTemplate[strlen(pcszTemplate) - 1] != 'X'))
     {
         toolboxMkTempReport("Template '%s' should contain a file name with no path and at least three consecutive 'X' characters or ending in 'X'.\n",
-                            pcszTemplate, true, VERR_INVALID_PARAMETER,
-                            fOutputFlags, &rc);
+                            pcszTemplate, true, VERR_INVALID_PARAMETER, fOutputFlags, &rc);
         return RTEXITCODE_FAILURE;
     }
     if (pcszPath && !RTPathStartsWithRoot(pcszPath))
     {
-        toolboxMkTempReport("Path '%s' should be absolute.\n",
-                            pcszPath, true, VERR_INVALID_PARAMETER,
-                            fOutputFlags, &rc);
+        toolboxMkTempReport("Path '%s' should be absolute.\n", pcszPath, true, VERR_INVALID_PARAMETER, fOutputFlags, &rc);
         return RTEXITCODE_FAILURE;
     }
     if (pcszPath)
     {
-        rc = RTStrCopy(szTemplateWithPath, sizeof(szTemplateWithPath),
-                       pcszPath);
+        rc = RTStrCopy(szTemplateWithPath, sizeof(szTemplateWithPath), pcszPath);
         if (RT_FAILURE(rc))
         {
-            toolboxMkTempReport("Path '%s' too long.\n", pcszPath, true,
-                                VERR_INVALID_PARAMETER, fOutputFlags, &rc);
+            toolboxMkTempReport("Path '%s' too long.\n", pcszPath, true, VERR_INVALID_PARAMETER, fOutputFlags, &rc);
             return RTEXITCODE_FAILURE;
         }
     }
@@ -1159,50 +1141,43 @@ static RTEXITCODE VBoxServiceToolboxMkTemp(int argc, char **argv)
         rc = RTPathTemp(szTemplateWithPath, sizeof(szTemplateWithPath));
         if (RT_FAILURE(rc))
         {
-            toolboxMkTempReport("Failed to get the temporary directory.\n",
-                                "", true, VERR_INVALID_PARAMETER,
-                                fOutputFlags, &rc);
+            toolboxMkTempReport("Failed to get the temporary directory.\n", "", true, VERR_INVALID_PARAMETER, fOutputFlags, &rc);
             return RTEXITCODE_FAILURE;
         }
     }
-    rc = RTPathAppend(szTemplateWithPath, sizeof(szTemplateWithPath),
-                      pcszTemplate);
+    rc = RTPathAppend(szTemplateWithPath, sizeof(szTemplateWithPath), pcszTemplate);
     if (RT_FAILURE(rc))
     {
-        toolboxMkTempReport("Template '%s' too long for path.\n",
-                            pcszTemplate, true, VERR_INVALID_PARAMETER,
-                            fOutputFlags, &rc);
+        toolboxMkTempReport("Template '%s' too long for path.\n", pcszTemplate, true, VERR_INVALID_PARAMETER, fOutputFlags, &rc);
         return RTEXITCODE_FAILURE;
     }
 
     if (fFlags & VBOXSERVICETOOLBOXMKTEMPFLAG_DIRECTORY)
     {
-        rc =   fFlags & VBOXSERVICETOOLBOXMKTEMPFLAG_SECURE
-             ? RTDirCreateTempSecure(szTemplateWithPath)
-             : RTDirCreateTemp(szTemplateWithPath, fMode);
+        rc = fFlags & VBOXSERVICETOOLBOXMKTEMPFLAG_SECURE
+           ? RTDirCreateTempSecure(szTemplateWithPath)
+           : RTDirCreateTemp(szTemplateWithPath, fMode);
         toolboxMkTempReport("Created temporary directory '%s'.\n",
                             szTemplateWithPath, RT_SUCCESS(rc), rc,
                             fOutputFlags, NULL);
         /* RTDirCreateTemp[Secure] sets the template to "" on failure. */
         toolboxMkTempReport("The following error occurred while creating a temporary directory from template '%s': %Rrc.\n",
-                            pcszTemplate, RT_FAILURE(rc), rc, fOutputFlags,
-                            NULL);
+                            pcszTemplate, RT_FAILURE(rc), rc, fOutputFlags, NULL /*prc*/);
     }
     else
     {
-        rc =   fFlags & VBOXSERVICETOOLBOXMKTEMPFLAG_SECURE
-             ? RTFileCreateTempSecure(szTemplateWithPath)
-             : RTFileCreateTemp(szTemplateWithPath, fMode);
+        rc = fFlags & VBOXSERVICETOOLBOXMKTEMPFLAG_SECURE
+           ? RTFileCreateTempSecure(szTemplateWithPath)
+           : RTFileCreateTemp(szTemplateWithPath, fMode);
         toolboxMkTempReport("Created temporary file '%s'.\n",
                             szTemplateWithPath, RT_SUCCESS(rc), rc,
                             fOutputFlags, NULL);
         /* RTFileCreateTemp[Secure] sets the template to "" on failure. */
         toolboxMkTempReport("The following error occurred while creating a temporary file from template '%s': %Rrc.\n",
-                            pcszTemplate, RT_FAILURE(rc), rc, fOutputFlags,
-                            NULL);
+                            pcszTemplate, RT_FAILURE(rc), rc, fOutputFlags, NULL /*prc*/);
     }
     if (fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE) /* Output termination. */
-        VBoxServiceToolboxPrintStrmTermination();
+        vgsvcToolboxPrintStrmTermination();
     return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
 }
 
@@ -1227,7 +1202,7 @@ static char g_paszMkDirHelp[] =
  * @param   argc                    Number of arguments.
  * @param   argv                    Pointer to argument array.
  */
-static RTEXITCODE VBoxServiceToolboxMkDir(int argc, char **argv)
+static RTEXITCODE vgsvcToolboxMkDir(int argc, char **argv)
 {
     static const RTGETOPTDEF s_aOptions[] =
     {
@@ -1239,8 +1214,7 @@ static RTEXITCODE VBoxServiceToolboxMkDir(int argc, char **argv)
     int ch;
     RTGETOPTUNION ValueUnion;
     RTGETOPTSTATE GetState;
-    int rc = RTGetOptInit(&GetState, argc, argv,
-                          s_aOptions, RT_ELEMENTS(s_aOptions),
+    int rc = RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions),
                           1 /*iFirst*/, RTGETOPTINIT_FLAGS_OPTS_FIRST);
     AssertRCReturn(rc, RTEXITCODE_INIT);
 
@@ -1259,7 +1233,7 @@ static RTEXITCODE VBoxServiceToolboxMkDir(int argc, char **argv)
                 break;
 
             case 'm':
-                rc = vboxServiceToolboxParseMode(ValueUnion.psz, &fDirMode);
+                rc = vgsvcToolboxParseMode(ValueUnion.psz, &fDirMode);
                 if (RT_FAILURE(rc))
                     return RTEXITCODE_SYNTAX;
 #ifndef RT_OS_WINDOWS
@@ -1272,12 +1246,12 @@ static RTEXITCODE VBoxServiceToolboxMkDir(int argc, char **argv)
                 break;
 
             case 'h':
-                VBoxServiceToolboxShowUsageHeader();
+                vgsvcToolboxShowUsageHeader();
                 RTPrintf("%s", g_paszMkDirHelp);
                 return RTEXITCODE_SUCCESS;
 
             case 'V':
-                VBoxServiceToolboxShowVersion();
+                vgsvcToolboxShowVersion();
                 return RTEXITCODE_SUCCESS;
 
             case VINF_GETOPT_NOT_OPTION:
@@ -1331,7 +1305,7 @@ static char g_paszStatHelp[] =
  * @param   argc                    Number of arguments.
  * @param   argv                    Pointer to argument array.
  */
-static RTEXITCODE VBoxServiceToolboxStat(int argc, char **argv)
+static RTEXITCODE vgsvcToolboxStat(int argc, char **argv)
 {
     static const RTGETOPTDEF s_aOptions[] =
     {
@@ -1345,9 +1319,7 @@ static RTEXITCODE VBoxServiceToolboxStat(int argc, char **argv)
     int ch;
     RTGETOPTUNION ValueUnion;
     RTGETOPTSTATE GetState;
-    RTGetOptInit(&GetState, argc, argv,
-                 s_aOptions, RT_ELEMENTS(s_aOptions),
-                 1 /*iFirst*/, RTGETOPTINIT_FLAGS_OPTS_FIRST);
+    RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1 /*iFirst*/, RTGETOPTINIT_FLAGS_OPTS_FIRST);
 
     int rc = VINF_SUCCESS;
     bool fVerbose = false;
@@ -1383,30 +1355,30 @@ static RTEXITCODE VBoxServiceToolboxStat(int argc, char **argv)
                 break;
 
             case 'h':
-                VBoxServiceToolboxShowUsageHeader();
+                vgsvcToolboxShowUsageHeader();
                 RTPrintf("%s", g_paszStatHelp);
                 return RTEXITCODE_SUCCESS;
 
             case 'V':
-                VBoxServiceToolboxShowVersion();
+                vgsvcToolboxShowVersion();
                 return RTEXITCODE_SUCCESS;
 
             case VINF_GETOPT_NOT_OPTION:
-                {
+            {
 /** @todo r=bird: The whole fileList is unecessary because you're using
  * RTGETOPTINIT_FLAGS_OPTS_FIRST.  You can obviously do the processing right
  * here, but you could also just drop down and rewind GetState.iNext by one and
  * continue there. */
 
-                    /* Add file(s) to buffer. This enables processing multiple files
-                     * at once.
-                     *
-                     * Since the non-options (RTGETOPTINIT_FLAGS_OPTS_FIRST) come last when
-                     * processing this loop it's safe to immediately exit on syntax errors
-                     * or showing the help text (see above). */
-                    rc = VBoxServiceToolboxPathBufAddPathEntry(&fileList, ValueUnion.psz);
-                    break;
-                }
+                /* Add file(s) to buffer. This enables processing multiple files
+                 * at once.
+                 *
+                 * Since the non-options (RTGETOPTINIT_FLAGS_OPTS_FIRST) come last when
+                 * processing this loop it's safe to immediately exit on syntax errors
+                 * or showing the help text (see above). */
+                rc = vgsvcToolboxPathBufAddPathEntry(&fileList, ValueUnion.psz);
+                break;
+            }
 
             default:
                 return RTGetOptPrintError(ch, &ValueUnion);
@@ -1417,10 +1389,10 @@ static RTEXITCODE VBoxServiceToolboxStat(int argc, char **argv)
     {
         if (fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE) /* Output termination. */
         {
-            rc = VBoxServiceToolboxStrmInit();
+            rc = vgsvcToolboxStrmInit();
             if (RT_FAILURE(rc))
                 RTMsgError("Error while initializing parseable streams, rc=%Rrc\n", rc);
-            VBoxServiceToolboxPrintStrmHeader("vbt_stat", 1 /* Stream version */);
+            vgsvcToolboxPrintStrmHeader("vbt_stat", 1 /* Stream version */);
         }
 
         PVBOXSERVICETOOLBOXPATHENTRY pNodeIt;
@@ -1432,25 +1404,24 @@ static RTEXITCODE VBoxServiceToolboxStat(int argc, char **argv)
             {
 /** @todo r=bird: You can get a number of other errors here, like access denied. */
                 if (!(fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE))
-                    RTMsgError("Cannot stat for '%s': No such file or directory (%Rrc)\n",
-                               pNodeIt->pszName, rc);
+                    RTMsgError("Cannot stat for '%s': No such file or directory (%Rrc)\n", pNodeIt->pszName, rc);
                 rc = VERR_FILE_NOT_FOUND;
                 /* Do not break here -- process every element in the list
                  * and keep failing rc. */
             }
             else
             {
-                rc2 = VBoxServiceToolboxPrintFsInfo(pNodeIt->pszName,
-                                                    strlen(pNodeIt->pszName) /* cbName */,
-                                                    fOutputFlags,
-                                                    &objInfo);
+                rc2 = vgsvcToolboxPrintFsInfo(pNodeIt->pszName,
+                                              strlen(pNodeIt->pszName) /* cbName */,
+                                              fOutputFlags,
+                                              &objInfo);
                 if (RT_FAILURE(rc2))
                     rc = rc2;
             }
         }
 
         if (fOutputFlags & VBOXSERVICETOOLBOXOUTPUTFLAG_PARSEABLE) /* Output termination. */
-            VBoxServiceToolboxPrintStrmTermination();
+            vgsvcToolboxPrintStrmTermination();
 
         /* At this point the overall result (success/failure) should be in rc. */
 
@@ -1460,7 +1431,7 @@ static RTEXITCODE VBoxServiceToolboxStat(int argc, char **argv)
     else if (fVerbose)
         RTMsgError("Failed with rc=%Rrc\n", rc);
 
-    VBoxServiceToolboxPathBufDestroy(&fileList);
+    vgsvcToolboxPathBufDestroy(&fileList);
     return RT_SUCCESS(rc) ? RTEXITCODE_SUCCESS : RTEXITCODE_FAILURE;
 }
 
@@ -1472,7 +1443,7 @@ static RTEXITCODE VBoxServiceToolboxStat(int argc, char **argv)
  * @returns Pointer to handler function.  NULL if not found.
  * @param   pszTool     The name of the tool.
  */
-static PFNHANDLER vboxServiceToolboxLookUpHandler(const char *pszTool)
+static PFNHANDLER vgsvcToolboxLookUpHandler(const char *pszTool)
 {
     static struct
     {
@@ -1481,12 +1452,12 @@ static PFNHANDLER vboxServiceToolboxLookUpHandler(const char *pszTool)
     }
     const s_aTools[] =
     {
-        { "cat",    VBoxServiceToolboxCat    },
-        { "ls",     VBoxServiceToolboxLs     },
-        { "rm",     VBoxServiceToolboxRm     },
-        { "mktemp", VBoxServiceToolboxMkTemp },
-        { "mkdir",  VBoxServiceToolboxMkDir  },
-        { "stat",   VBoxServiceToolboxStat   },
+        { "cat",    vgsvcToolboxCat    },
+        { "ls",     vgsvcToolboxLs     },
+        { "rm",     vgsvcToolboxRm     },
+        { "mktemp", vgsvcToolboxMkTemp },
+        { "mkdir",  vgsvcToolboxMkDir  },
+        { "stat",   vgsvcToolboxStat   },
     };
 
     /* Skip optional 'vbox_' prefix. */
@@ -1515,7 +1486,7 @@ static PFNHANDLER vboxServiceToolboxLookUpHandler(const char *pszTool)
  * @param   prcExit                 Where to store the exit code when an
  *                                  internal toolbox command was handled.
  */
-bool VBoxServiceToolboxMain(int argc, char **argv, RTEXITCODE *prcExit)
+bool VGSvcToolboxMain(int argc, char **argv, RTEXITCODE *prcExit)
 {
 
     /*
@@ -1523,7 +1494,7 @@ bool VBoxServiceToolboxMain(int argc, char **argv, RTEXITCODE *prcExit)
      */
     AssertReturn(argc > 0, false);
     const char *pszTool    = RTPathFilename(argv[0]);
-    PFNHANDLER  pfnHandler = vboxServiceToolboxLookUpHandler(pszTool);
+    PFNHANDLER  pfnHandler = vgsvcToolboxLookUpHandler(pszTool);
     if (!pfnHandler)
     {
         /*
@@ -1535,19 +1506,19 @@ bool VBoxServiceToolboxMain(int argc, char **argv, RTEXITCODE *prcExit)
         argc -= 2;
         argv += 2;
         pszTool = argv[0];
-        pfnHandler = vboxServiceToolboxLookUpHandler(pszTool);
+        pfnHandler = vgsvcToolboxLookUpHandler(pszTool);
         if (!pfnHandler)
         {
            *prcExit = RTEXITCODE_SUCCESS;
            if (!strcmp(pszTool, "-V"))
            {
-               VBoxServiceToolboxShowVersion();
+               vgsvcToolboxShowVersion();
                return true;
            }
            if (   (strcmp(pszTool, "help")) && (strcmp(pszTool, "--help"))
                && (strcmp(pszTool, "-h")))
                *prcExit = RTEXITCODE_SYNTAX;
-           VBoxServiceToolboxShowUsage();
+           vgsvcToolboxShowUsage();
            return true;
         }
     }
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp
index 9d0b3dd..bffe30d 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.cpp
@@ -31,6 +31,7 @@
 #include <VBox/VBoxGuestLib.h>
 #include "VBoxServiceInternal.h"
 
+
 #ifdef VBOX_WITH_GUEST_PROPS
 
 /**
@@ -47,8 +48,7 @@
  * @param   puTimestamp         Where to return the timestamp.  This is only set
  *                              on success.  Optional.
  */
-int VBoxServiceReadProp(uint32_t u32ClientId, const char *pszPropName,
-                        char **ppszValue, char **ppszFlags, uint64_t *puTimestamp)
+int VGSvcReadProp(uint32_t u32ClientId, const char *pszPropName, char **ppszValue, char **ppszFlags, uint64_t *puTimestamp)
 {
     AssertPtrReturn(pszPropName, VERR_INVALID_POINTER);
     AssertPtrReturn(ppszValue, VERR_INVALID_POINTER);
@@ -68,16 +68,14 @@ int VBoxServiceReadProp(uint32_t u32ClientId, const char *pszPropName,
         pvBuf = RTMemAlloc(cbBuf);
         if (!pvBuf)
         {
-            VBoxServiceError("Guest Property: Failed to allocate %zu bytes\n", cbBuf);
+            VGSvcError("Guest Property: Failed to allocate %zu bytes\n", cbBuf);
             rc = VERR_NO_MEMORY;
             break;
         }
         char    *pszValue;
         char    *pszFlags;
         uint64_t uTimestamp;
-        rc = VbglR3GuestPropRead(u32ClientId, pszPropName,
-                                 pvBuf, cbBuf,
-                                 &pszValue, &uTimestamp, &pszFlags, NULL);
+        rc = VbglR3GuestPropRead(u32ClientId, pszPropName, pvBuf, cbBuf, &pszValue, &uTimestamp, &pszFlags, NULL);
         if (RT_FAILURE(rc))
         {
             if (rc == VERR_BUFFER_OVERFLOW)
@@ -87,18 +85,17 @@ int VBoxServiceReadProp(uint32_t u32ClientId, const char *pszPropName,
                 continue;
             }
             if (rc == VERR_NOT_FOUND)
-                VBoxServiceVerbose(2, "Guest Property: %s not found\n", pszPropName);
+                VGSvcVerbose(2, "Guest Property: %s not found\n", pszPropName);
             else
-                VBoxServiceError("Guest Property: Failed to query \"%s\": %Rrc\n", pszPropName, rc);
+                VGSvcError("Guest Property: Failed to query '%s': %Rrc\n", pszPropName, rc);
             break;
         }
 
-        VBoxServiceVerbose(2, "Guest Property: Read \"%s\" = \"%s\", timestamp %RU64n\n",
-                           pszPropName, pszValue, uTimestamp);
+        VGSvcVerbose(2, "Guest Property: Read '%s' = '%s', timestamp %RU64n\n", pszPropName, pszValue, uTimestamp);
         *ppszValue = RTStrDup(pszValue);
         if (!*ppszValue)
         {
-            VBoxServiceError("Guest Property: RTStrDup failed for \"%s\"\n", pszValue);
+            VGSvcError("Guest Property: RTStrDup failed for '%s'\n", pszValue);
             rc = VERR_NO_MEMORY;
             break;
         }
@@ -126,22 +123,18 @@ int VBoxServiceReadProp(uint32_t u32ClientId, const char *pszPropName,
  * @param   pu32                Where to store the 32-bit value.
  *
  */
-int VBoxServiceReadPropUInt32(uint32_t u32ClientId, const char *pszPropName,
-                              uint32_t *pu32, uint32_t u32Min, uint32_t u32Max)
+int VGSvcReadPropUInt32(uint32_t u32ClientId, const char *pszPropName, uint32_t *pu32, uint32_t u32Min, uint32_t u32Max)
 {
     char *pszValue;
-    int rc = VBoxServiceReadProp(u32ClientId, pszPropName, &pszValue,
-                                 NULL /* ppszFlags */, NULL /* puTimestamp */);
+    int rc = VGSvcReadProp(u32ClientId, pszPropName, &pszValue, NULL /* ppszFlags */, NULL /* puTimestamp */);
     if (RT_SUCCESS(rc))
     {
         char *pszNext;
         rc = RTStrToUInt32Ex(pszValue, &pszNext, 0, pu32);
         if (   RT_SUCCESS(rc)
             && (*pu32 < u32Min || *pu32 > u32Max))
-        {
-            rc = VBoxServiceError("The guest property value %s = %RU32 is out of range [%RU32..%RU32].\n",
-                                  pszPropName, *pu32, u32Min, u32Max);
-        }
+            rc = VGSvcError("The guest property value %s = %RU32 is out of range [%RU32..%RU32].\n",
+                            pszPropName, *pu32, u32Min, u32Max);
         RTStrFree(pszValue);
     }
     return rc;
@@ -164,14 +157,14 @@ int VBoxServiceReadPropUInt32(uint32_t u32ClientId, const char *pszPropName,
  * @param   puTimestamp         Where to return the timestamp.  This is only set
  *                              on success.  Optional.
  */
-int VBoxServiceReadHostProp(uint32_t u32ClientId, const char *pszPropName, bool fReadOnly,
-                            char **ppszValue, char **ppszFlags, uint64_t *puTimestamp)
+int VGSvcReadHostProp(uint32_t u32ClientId, const char *pszPropName, bool fReadOnly,
+                      char **ppszValue, char **ppszFlags, uint64_t *puTimestamp)
 {
     AssertPtrReturn(ppszValue, VERR_INVALID_PARAMETER);
 
     char *pszValue = NULL;
     char *pszFlags = NULL;
-    int rc = VBoxServiceReadProp(u32ClientId, pszPropName, &pszValue, &pszFlags, puTimestamp);
+    int rc = VGSvcReadProp(u32ClientId, pszPropName, &pszValue, &pszFlags, puTimestamp);
     if (RT_SUCCESS(rc))
     {
         /* Check security bits. */
@@ -217,7 +210,7 @@ int VBoxServiceReadHostProp(uint32_t u32ClientId, const char *pszPropName, bool
  *                          the property will be deleted (if possible).
  * @param   ...             Format arguments.
  */
-int VBoxServiceWritePropF(uint32_t u32ClientId, const char *pszName, const char *pszValueFormat, ...)
+int VGSvcWritePropF(uint32_t u32ClientId, const char *pszName, const char *pszValueFormat, ...)
 {
     AssertPtr(pszName);
     int rc;
@@ -225,7 +218,7 @@ int VBoxServiceWritePropF(uint32_t u32ClientId, const char *pszName, const char
     {
         va_list va;
         va_start(va, pszValueFormat);
-        VBoxServiceVerbose(3, "Writing guest property \"%s\" = \"%N\"\n", pszName, pszValueFormat, &va);
+        VGSvcVerbose(3, "Writing guest property '%s' = '%N'\n", pszName, pszValueFormat, &va);
         va_end(va);
 
         va_start(va, pszValueFormat);
@@ -233,14 +226,14 @@ int VBoxServiceWritePropF(uint32_t u32ClientId, const char *pszName, const char
         va_end(va);
 
         if (RT_FAILURE(rc))
-             VBoxServiceError("Error writing guest property \"%s\" (rc=%Rrc)\n", pszName, rc);
+             VGSvcError("Error writing guest property '%s' (rc=%Rrc)\n", pszName, rc);
     }
     else
     {
-        VBoxServiceVerbose(3, "Deleting guest property \"%s\"\n", pszName);
+        VGSvcVerbose(3, "Deleting guest property '%s'\n", pszName);
         rc = VbglR3GuestPropWriteValue(u32ClientId, pszName, NULL);
         if (RT_FAILURE(rc))
-            VBoxServiceError("Error deleting guest property \"%s\" (rc=%Rrc)\n", pszName, rc);
+            VGSvcError("Error deleting guest property '%s' (rc=%Rrc)\n", pszName, rc);
     }
     return rc;
 }
@@ -249,16 +242,13 @@ int VBoxServiceWritePropF(uint32_t u32ClientId, const char *pszName, const char
 #ifdef RT_OS_WINDOWS
 
 /**
- * Helper for VBoxServiceGetFileVersion and attempts to read and parse
+ * Helper for vgsvcUtilGetFileVersion and attempts to read and parse
  * FileVersion.
  *
  * @returns Success indicator.
  */
-static bool VBoxServiceGetFileVersionOwn(LPSTR pVerData,
-                                         PDWORD pdwMajor,
-                                         PDWORD pdwMinor,
-                                         PDWORD pdwBuildNumber,
-                                         PDWORD pdwRevisionNumber)
+static bool vgsvcUtilGetFileVersionOwn(LPSTR pVerData, PDWORD pdwMajor, PDWORD pdwMinor, PDWORD pdwBuildNumber,
+                                       PDWORD pdwRevisionNumber)
 {
     UINT    cchStrValue = 0;
     LPTSTR  pStrValue   = NULL;
@@ -274,16 +264,17 @@ static bool VBoxServiceGetFileVersionOwn(LPSTR pVerData,
 
 
 /**
- * Worker for VBoxServiceGetFileVersionString.
+ * Worker for VGSvcUtilWinGetFileVersionString.
  *
  * @returns VBox status code.
  * @param   pszFilename         ASCII & ANSI & UTF-8 compliant name.
+ * @param   pdwMajor            Where to return the major version number.
+ * @param   pdwMinor            Where to return the minor version number.
+ * @param   pdwBuildNumber      Where to return the build number.
+ * @param   pdwRevisionNumber   Where to return the revision number.
  */
-static int VBoxServiceGetFileVersion(const char *pszFilename,
-                                     PDWORD pdwMajor,
-                                     PDWORD pdwMinor,
-                                     PDWORD pdwBuildNumber,
-                                     PDWORD pdwRevisionNumber)
+static int vgsvcUtilGetFileVersion(const char *pszFilename, PDWORD pdwMajor, PDWORD pdwMinor, PDWORD pdwBuildNumber,
+                                   PDWORD pdwRevisionNumber)
 {
     int rc;
 
@@ -306,7 +297,7 @@ static int VBoxServiceGetFileVersion(const char *pszFilename,
                  * since this will give us the correct revision number when
                  * it goes beyond the range of an uint16_t / WORD.
                  */
-                if (VBoxServiceGetFileVersionOwn(pVerData, pdwMajor, pdwMinor, pdwBuildNumber, pdwRevisionNumber))
+                if (vgsvcUtilGetFileVersionOwn(pVerData, pdwMajor, pdwMinor, pdwBuildNumber, pdwRevisionNumber))
                     rc = VINF_SUCCESS;
                 else
                 {
@@ -324,29 +315,29 @@ static int VBoxServiceGetFileVersion(const char *pszFilename,
                     else
                     {
                         rc = RTErrConvertFromWin32(GetLastError());
-                        VBoxServiceVerbose(3, "No file version value for file \"%s\" available! (%d / rc=%Rrc)\n",
-                                           pszFilename,  GetLastError(), rc);
+                        VGSvcVerbose(3, "No file version value for file '%s' available! (%d / rc=%Rrc)\n",
+                                     pszFilename,  GetLastError(), rc);
                     }
                 }
             }
             else
             {
                 rc = RTErrConvertFromWin32(GetLastError());
-                VBoxServiceVerbose(0, "GetFileVersionInfo(%s) -> %u / %Rrc\n", pszFilename, GetLastError(), rc);
+                VGSvcVerbose(0, "GetFileVersionInfo(%s) -> %u / %Rrc\n", pszFilename, GetLastError(), rc);
             }
 
             RTMemTmpFree(pVerData);
         }
         else
         {
-            VBoxServiceVerbose(0, "Failed to allocate %u byte for file version info for '%s'\n", cbVerData, pszFilename);
+            VGSvcVerbose(0, "Failed to allocate %u byte for file version info for '%s'\n", cbVerData, pszFilename);
             rc = VERR_NO_TMP_MEMORY;
         }
     }
     else
     {
         rc = RTErrConvertFromWin32(GetLastError());
-        VBoxServiceVerbose(3, "GetFileVersionInfoSize(%s) -> %u / %Rrc\n", pszFilename, GetLastError(), rc);
+        VGSvcVerbose(3, "GetFileVersionInfoSize(%s) -> %u / %Rrc\n", pszFilename, GetLastError(), rc);
     }
     return rc;
 }
@@ -359,13 +350,12 @@ static int VBoxServiceGetFileVersion(const char *pszFilename,
  *          code can safely be ignored.
  *
  * @param   pszPath         The base path.
- * @param   pszFilaname     The filename.
+ * @param   pszFilename     The filename.
  * @param   pszVersion      Where to return the version string.
  * @param   cbVersion       The size of the version string buffer. This MUST be
  *                          at least 2 bytes!
  */
-int VBoxServiceGetFileVersionString(const char *pszPath, const char *pszFilename,
-                                    char *pszVersion, size_t cbVersion)
+int VGSvcUtilWinGetFileVersionString(const char *pszPath, const char *pszFilename, char *pszVersion, size_t cbVersion)
 {
     /*
      * We will ALWAYS return with a valid output buffer.
@@ -382,7 +372,7 @@ int VBoxServiceGetFileVersionString(const char *pszPath, const char *pszFilename
     if (RT_SUCCESS(rc))
     {
         DWORD dwMajor, dwMinor, dwBuild, dwRev;
-        rc = VBoxServiceGetFileVersion(szFullPath, &dwMajor, &dwMinor, &dwBuild, &dwRev);
+        rc = vgsvcUtilGetFileVersion(szFullPath, &dwMajor, &dwMinor, &dwBuild, &dwRev);
         if (RT_SUCCESS(rc))
             RTStrPrintf(pszVersion, cbVersion, "%u.%u.%ur%u", dwMajor, dwMinor, dwBuild, dwRev);
     }
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.h b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.h
index aab0528..e8f0f48 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceUtils.h
@@ -21,14 +21,15 @@
 #include "VBoxServiceInternal.h"
 
 #ifdef VBOX_WITH_GUEST_PROPS
-int VBoxServiceReadProp(uint32_t u32ClientId, const char *pszPropName, char **ppszValue, char **ppszFlags, uint64_t *puTimestamp);
-int VBoxServiceReadPropUInt32(uint32_t u32ClientId, const char *pszPropName, uint32_t *pu32, uint32_t u32Min, uint32_t u32Max);
-int VBoxServiceReadHostProp(uint32_t u32ClientId, const char *pszPropName, bool fReadOnly, char **ppszValue, char **ppszFlags, uint64_t *puTimestamp);
-int VBoxServiceWritePropF(uint32_t u32ClientId, const char *pszName, const char *pszValueFormat, ...);
+int VGSvcReadProp(uint32_t u32ClientId, const char *pszPropName, char **ppszValue, char **ppszFlags, uint64_t *puTimestamp);
+int VGSvcReadPropUInt32(uint32_t u32ClientId, const char *pszPropName, uint32_t *pu32, uint32_t u32Min, uint32_t u32Max);
+int VGSvcReadHostProp(uint32_t u32ClientId, const char *pszPropName, bool fReadOnly, char **ppszValue, char **ppszFlags,
+                      uint64_t *puTimestamp);
+int VGSvcWritePropF(uint32_t u32ClientId, const char *pszName, const char *pszValueFormat, ...);
 #endif
 
 #ifdef RT_OS_WINDOWS
-int VBoxServiceGetFileVersionString(const char *pszPath, const char *pszFileName, char *pszVersion, size_t cbVersion);
+int VGSvcUtilWinGetFileVersionString(const char *pszPath, const char *pszFileName, char *pszVersion, size_t cbVersion);
 #endif
 
 #endif
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
index ceeaf24..bf3d549 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
@@ -19,9 +19,9 @@
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
-#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0502
+#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600
 # undef  _WIN32_WINNT
-# define _WIN32_WINNT 0x0502 /* CachedRemoteInteractive in recent SDKs. */
+# define _WIN32_WINNT 0x0600 /* QueryFullProcessImageNameW in recent SDKs. */
 #endif
 #include <Windows.h>
 #include <wtsapi32.h>        /* For WTS* calls. */
@@ -32,11 +32,13 @@
 #include <iprt/ldr.h>
 #include <iprt/localipc.h>
 #include <iprt/mem.h>
-#include <iprt/thread.h>
+#include <iprt/once.h>
 #include <iprt/string.h>
 #include <iprt/semaphore.h>
 #include <iprt/system.h>
 #include <iprt/time.h>
+#include <iprt/thread.h>
+
 #include <VBox/VBoxGuestLib.h>
 #include "VBoxServiceInternal.h"
 #include "VBoxServiceUtils.h"
@@ -89,78 +91,175 @@ typedef struct VBOXSERVICEVMINFOPROC
 } VBOXSERVICEVMINFOPROC, *PVBOXSERVICEVMINFOPROC;
 
 
-/*******************************************************************************
-*   Prototypes
-*******************************************************************************/
-uint32_t VBoxServiceVMInfoWinSessionHasProcesses(PLUID pSession, PVBOXSERVICEVMINFOPROC const paProcs, DWORD cProcs);
-bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER a_pUserInfo, PLUID a_pSession);
-int  VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppProc, DWORD *pdwCount);
-void VBoxServiceVMInfoWinProcessesFree(DWORD cProcs, PVBOXSERVICEVMINFOPROC paProcs);
-int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser, const char *pszDomain);
+/*********************************************************************************************************************************
+*   Internal Functions                                                                                                           *
+*********************************************************************************************************************************/
+static uint32_t vgsvcVMInfoWinSessionHasProcesses(PLUID pSession, PVBOXSERVICEVMINFOPROC const paProcs, DWORD cProcs);
+static bool vgsvcVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER a_pUserInfo, PLUID a_pSession);
+static int  vgsvcVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppProc, DWORD *pdwCount);
+static void vgsvcVMInfoWinProcessesFree(DWORD cProcs, PVBOXSERVICEVMINFOPROC paProcs);
+static int  vgsvcVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser, const char *pszDomain);
+
+
+/*********************************************************************************************************************************
+*   Global Variables                                                                                                             *
+*********************************************************************************************************************************/
+static RTONCE                                   g_vgsvcWinVmInitOnce = RTONCE_INITIALIZER;
+
+/** @name Secur32.dll imports are dynamically resolved because of NT4.
+ * @{ */
+static decltype(LsaGetLogonSessionData)        *g_pfnLsaGetLogonSessionData = NULL;
+static decltype(LsaEnumerateLogonSessions)     *g_pfnLsaEnumerateLogonSessions = NULL;
+static decltype(LsaFreeReturnBuffer)           *g_pfnLsaFreeReturnBuffer = NULL;
+/** @} */
+
+/** @name WtsApi32.dll imports are dynamically resolved because of NT4.
+ * @{ */
+static decltype(WTSFreeMemory)                 *g_pfnWTSFreeMemory = NULL;
+static decltype(WTSQuerySessionInformationA)   *g_pfnWTSQuerySessionInformationA = NULL;
+/** @} */
 
-typedef BOOL WINAPI FNQUERYFULLPROCESSIMAGENAME(HANDLE,  DWORD, LPWSTR, PDWORD);
-typedef FNQUERYFULLPROCESSIMAGENAME *PFNQUERYFULLPROCESSIMAGENAME;
+/** @name PsApi.dll imports are dynamically resolved because of NT4.
+ * @{ */
+static decltype(EnumProcesses)                 *g_pfnEnumProcesses = NULL;
+static decltype(GetModuleFileNameExW)          *g_pfnGetModuleFileNameExW = NULL;
+/** @} */
 
+/** @name New Kernel32.dll APIs we may use when present.
+ * @{  */
+static decltype(QueryFullProcessImageNameW)    *g_pfnQueryFullProcessImageNameW = NULL;
 
-#ifndef TARGET_NT4
+/** @} */
 
-static bool vboxServiceVMInfoSession0Separation(void)
+/** Windows version.  */
+static OSVERSIONINFOEXA                         g_WinVersion;
+
+
+/**
+ * An RTOnce callback function.
+ */
+static DECLCALLBACK(int) vgsvcWinVmInfoInitOnce(void *pvIgnored)
 {
-    /** @todo Only do this once. Later. */
-    OSVERSIONINFOEX OSInfoEx;
-    RT_ZERO(OSInfoEx);
-    OSInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
-    if (   !GetVersionEx((LPOSVERSIONINFO) &OSInfoEx)
-        || OSInfoEx.dwPlatformId != VER_PLATFORM_WIN32_NT)
+    /* SECUR32 */
+    RTLDRMOD hLdrMod;
+    int rc = RTLdrLoadSystem("secur32.dll", true, &hLdrMod);
+    if (RT_SUCCESS(rc))
     {
-        /* Platform other than NT (e.g. Win9x) not supported. */
-        return false;
+        rc = RTLdrGetSymbol(hLdrMod, "LsaGetLogonSessionData", (void **)&g_pfnLsaGetLogonSessionData);
+        if (RT_SUCCESS(rc))
+            rc = RTLdrGetSymbol(hLdrMod, "LsaEnumerateLogonSessions", (void **)&g_pfnLsaEnumerateLogonSessions);
+        if (RT_SUCCESS(rc))
+            rc = RTLdrGetSymbol(hLdrMod, "LsaFreeReturnBuffer", (void **)&g_pfnLsaFreeReturnBuffer);
+        AssertRC(rc);
+        RTLdrClose(hLdrMod);
+    }
+    if (RT_FAILURE(rc))
+    {
+        VGSvcVerbose(1, "Secur32.dll APIs are not availble (%Rrc)\n", rc);
+        g_pfnLsaGetLogonSessionData = NULL;
+        g_pfnLsaEnumerateLogonSessions = NULL;
+        g_pfnLsaFreeReturnBuffer = NULL;
+        Assert(g_WinVersion.dwMajorVersion < 5);
     }
 
-    if (   OSInfoEx.dwMajorVersion >= 6
-        && OSInfoEx.dwMinorVersion >= 0)
+    /* WTSAPI32 */
+    rc = RTLdrLoadSystem("wtsapi32.dll", true, &hLdrMod);
+    if (RT_SUCCESS(rc))
+    {
+        rc = RTLdrGetSymbol(hLdrMod, "WTSFreeMemory", (void **)&g_pfnWTSFreeMemory);
+        if (RT_SUCCESS(rc))
+            rc = RTLdrGetSymbol(hLdrMod, "WTSQuerySessionInformationA", (void **)&g_pfnWTSQuerySessionInformationA);
+        AssertRC(rc);
+        RTLdrClose(hLdrMod);
+    }
+    if (RT_FAILURE(rc))
     {
-        return true;
+        VGSvcVerbose(1, "WtsApi32.dll APIs are not availble (%Rrc)\n", rc);
+        g_pfnWTSFreeMemory = NULL;
+        g_pfnWTSQuerySessionInformationA = NULL;
+        Assert(g_WinVersion.dwMajorVersion < 5);
     }
 
-    return false;
+    /* PSAPI */
+    rc = RTLdrLoadSystem("psapi.dll", true, &hLdrMod);
+    if (RT_SUCCESS(rc))
+    {
+        rc = RTLdrGetSymbol(hLdrMod, "EnumProcesses", (void **)&g_pfnEnumProcesses);
+        if (RT_SUCCESS(rc))
+            rc = RTLdrGetSymbol(hLdrMod, "GetModuleFileNameExW", (void **)&g_pfnGetModuleFileNameExW);
+        AssertRC(rc);
+        RTLdrClose(hLdrMod);
+    }
+    if (RT_FAILURE(rc))
+    {
+        VGSvcVerbose(1, "psapi.dll APIs are not availble (%Rrc)\n", rc);
+        g_pfnEnumProcesses = NULL;
+        g_pfnGetModuleFileNameExW = NULL;
+        Assert(g_WinVersion.dwMajorVersion < 5);
+    }
+
+    /* Kernel32: */
+    rc = RTLdrLoadSystem("kerne32.dll", true, &hLdrMod);
+    AssertRCReturn(rc, rc);
+    rc = RTLdrGetSymbol(hLdrMod, "QueryFullProcessImageNameW", (void **)&g_pfnQueryFullProcessImageNameW);
+    if (RT_FAILURE(rc))
+    {
+        Assert(g_WinVersion.dwMajorVersion < 6);
+        g_pfnQueryFullProcessImageNameW = NULL;
+    }
+    RTLdrClose(hLdrMod);
+
+    /*
+     * Get the extended windows version once and for all.
+     */
+    g_WinVersion.dwOSVersionInfoSize = sizeof(g_WinVersion);
+    if (!GetVersionExA((OSVERSIONINFO *)&g_WinVersion))
+    {
+        AssertFailed();
+        RT_ZERO(g_WinVersion);
+        g_WinVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+        if (!GetVersionExA((OSVERSIONINFO *)&g_WinVersion))
+            RT_ZERO(g_WinVersion);
+    }
+
+    return VINF_SUCCESS;
 }
 
+
+static bool vgsvcVMInfoSession0Separation(void)
+{
+    return g_WinVersion.dwPlatformId == VER_PLATFORM_WIN32_NT
+        && g_WinVersion.dwMajorVersion >= 6; /* Vista = 6.0 */
+}
+
+
 /**
  * Retrieves the module name of a given process.
  *
  * @return  IPRT status code.
  */
-static int VBoxServiceVMInfoWinProcessesGetModuleNameA(PVBOXSERVICEVMINFOPROC const pProc,
-                                                       PRTUTF16 *ppszName)
+static int vgsvcVMInfoWinProcessesGetModuleNameA(PVBOXSERVICEVMINFOPROC const pProc, PRTUTF16 *ppszName)
 {
     AssertPtrReturn(pProc, VERR_INVALID_POINTER);
     AssertPtrReturn(ppszName, VERR_INVALID_POINTER);
 
     /** @todo Only do this once. Later. */
-    OSVERSIONINFOEX OSInfoEx;
-    RT_ZERO(OSInfoEx);
-    OSInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
-    if (   !GetVersionEx((LPOSVERSIONINFO) &OSInfoEx)
-        || OSInfoEx.dwPlatformId != VER_PLATFORM_WIN32_NT)
-    {
-        /* Platform other than NT (e.g. Win9x) not supported. */
+    /* Platform other than NT (e.g. Win9x) not supported. */
+    if (g_WinVersion.dwPlatformId != VER_PLATFORM_WIN32_NT)
         return VERR_NOT_SUPPORTED;
-    }
 
     int rc = VINF_SUCCESS;
 
     DWORD dwFlags = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
-    if (OSInfoEx.dwMajorVersion >= 6 /* Vista or later */)
-        dwFlags = 0x1000; /* = PROCESS_QUERY_LIMITED_INFORMATION; less privileges needed. */
+    if (g_WinVersion.dwMajorVersion >= 6 /* Vista or later */)
+        dwFlags = PROCESS_QUERY_LIMITED_INFORMATION; /* possible to do on more processes */
 
     HANDLE h = OpenProcess(dwFlags, FALSE, pProc->id);
     if (h == NULL)
     {
         DWORD dwErr = GetLastError();
         if (g_cVerbosity)
-            VBoxServiceError("Unable to open process with PID=%ld, error=%ld\n",
-                             pProc->id, dwErr);
+            VGSvcError("Unable to open process with PID=%u, error=%u\n", pProc->id, dwErr);
         rc = RTErrConvertFromWin32(dwErr);
     }
     else
@@ -168,34 +267,20 @@ static int VBoxServiceVMInfoWinProcessesGetModuleNameA(PVBOXSERVICEVMINFOPROC co
         /* Since GetModuleFileNameEx has trouble with cross-bitness stuff (32-bit apps cannot query 64-bit
            apps and vice verse) we have to use a different code path for Vista and up. */
         WCHAR wszName[_1K];
-        DWORD dwLen = sizeof(wszName);
+        DWORD dwLen = sizeof(wszName); /** @todo r=bird: wrong? */
 
-        /* Note: For 2000 + NT4 we might just use GetModuleFileNameW() instead. */
-        if (OSInfoEx.dwMajorVersion >= 6 /* Vista or later */)
-        {
-            /* Loading the module and getting the symbol for each and every process is expensive
-             * -- since this function (at the moment) only is used for debugging purposes it's okay. */
-            PFNQUERYFULLPROCESSIMAGENAME pfnQueryFullProcessImageName;
-            pfnQueryFullProcessImageName = (PFNQUERYFULLPROCESSIMAGENAME)
-                RTLdrGetSystemSymbol("kernel32.dll", "QueryFullProcessImageNameW");
-            if (pfnQueryFullProcessImageName)
-            {
-                if (!pfnQueryFullProcessImageName(h, 0 /*PROCESS_NAME_NATIVE*/, wszName, &dwLen))
-                    rc = VERR_ACCESS_DENIED;
-            }
-        }
-        else
+        /* Use QueryFullProcessImageNameW if available (Vista+). */
+        if (g_pfnQueryFullProcessImageNameW)
         {
-            if (!GetModuleFileNameExW(h, NULL /* Get main executable */, wszName, dwLen))
+            if (!g_pfnQueryFullProcessImageNameW(h, 0 /*PROCESS_NAME_NATIVE*/, wszName, &dwLen))
                 rc = VERR_ACCESS_DENIED;
         }
+        else if (!g_pfnGetModuleFileNameExW(h, NULL /* Get main executable */, wszName, dwLen))
+            rc = VERR_ACCESS_DENIED;
 
         if (   RT_FAILURE(rc)
             && g_cVerbosity > 3)
-        {
-           VBoxServiceError("Unable to retrieve process name for PID=%ld, error=%ld\n",
-                             pProc->id, GetLastError());
-        }
+           VGSvcError("Unable to retrieve process name for PID=%u, error=%u\n", pProc->id, GetLastError());
         else
         {
             PRTUTF16 pszName = RTUtf16Dup(wszName);
@@ -219,8 +304,7 @@ static int VBoxServiceVMInfoWinProcessesGetModuleNameA(PVBOXSERVICEVMINFOPROC co
  * @param   pProc           The process structure to fill data into.
  * @param   tkClass         The kind of token information to get.
  */
-static int VBoxServiceVMInfoWinProcessesGetTokenInfo(PVBOXSERVICEVMINFOPROC pProc,
-                                                     TOKEN_INFORMATION_CLASS tkClass)
+static int vgsvcVMInfoWinProcessesGetTokenInfo(PVBOXSERVICEVMINFOPROC pProc, TOKEN_INFORMATION_CLASS tkClass)
 {
     AssertPtrReturn(pProc, VERR_INVALID_POINTER);
 
@@ -230,8 +314,7 @@ static int VBoxServiceVMInfoWinProcessesGetTokenInfo(PVBOXSERVICEVMINFOPROC pPro
     {
         dwErr = GetLastError();
         if (g_cVerbosity > 4)
-            VBoxServiceError("Unable to open process with PID=%ld, error=%ld\n",
-                             pProc->id, dwErr);
+            VGSvcError("Unable to open process with PID=%u, error=%u\n", pProc->id, dwErr);
         return RTErrConvertFromWin32(dwErr);
     }
 
@@ -244,9 +327,11 @@ static int VBoxServiceVMInfoWinProcessesGetTokenInfo(PVBOXSERVICEVMINFOPROC pPro
         switch (tkClass)
         {
             case TokenStatistics:
+                /** @todo r=bird: Someone has been reading too many MSDN examples. You shall
+                 *        use RTMemAlloc here!  There is absolutely not reason for
+                 *        complicating things uncessarily by using HeapAlloc! */
                 dwTokenInfoSize = sizeof(TOKEN_STATISTICS);
-                pvTokenInfo = HeapAlloc(GetProcessHeap(),
-                                        HEAP_ZERO_MEMORY, dwTokenInfoSize);
+                pvTokenInfo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwTokenInfoSize);
                 AssertPtr(pvTokenInfo);
                 break;
 
@@ -261,7 +346,7 @@ static int VBoxServiceVMInfoWinProcessesGetTokenInfo(PVBOXSERVICEVMINFOPROC pPro
                 break;
 
             default:
-                VBoxServiceError("Token class not implemented: %ld\n", tkClass);
+                VGSvcError("Token class not implemented: %d\n", tkClass);
                 rc = VERR_NOT_IMPLEMENTED;
                 break;
         }
@@ -279,16 +364,14 @@ static int VBoxServiceVMInfoWinProcessesGetTokenInfo(PVBOXSERVICEVMINFOPROC pPro
                     switch (tkClass)
                     {
                         case TokenGroups:
-                            pvTokenInfo = (PTOKEN_GROUPS)HeapAlloc(GetProcessHeap(),
-                                                                   HEAP_ZERO_MEMORY, dwRetLength);
+                            pvTokenInfo = (PTOKEN_GROUPS)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwRetLength);
                             if (!pvTokenInfo)
                                 dwErr = GetLastError();
                             dwTokenInfoSize = dwRetLength;
                             break;
 
                         case TokenUser:
-                            pvTokenInfo = (PTOKEN_USER)HeapAlloc(GetProcessHeap(),
-                                                                 HEAP_ZERO_MEMORY, dwRetLength);
+                            pvTokenInfo = (PTOKEN_USER)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwRetLength);
                             if (!pvTokenInfo)
                                 dwErr = GetLastError();
                             dwTokenInfoSize = dwRetLength;
@@ -387,8 +470,7 @@ static int VBoxServiceVMInfoWinProcessesGetTokenInfo(PVBOXSERVICEVMINFOPROC pPro
 
                         if (dwErr != ERROR_SUCCESS)
                         {
-                            VBoxServiceError("Error retrieving SID of process PID=%ld: %ld\n",
-                                             pProc->id, dwErr);
+                            VGSvcError("Error retrieving SID of process PID=%u: %u\n", pProc->id, dwErr);
                             if (pProc->pSid)
                             {
                                 HeapFree(GetProcessHeap(), 0 /* Flags */, pProc->pSid);
@@ -415,8 +497,7 @@ static int VBoxServiceVMInfoWinProcessesGetTokenInfo(PVBOXSERVICEVMINFOPROC pPro
     if (dwErr != ERROR_SUCCESS)
     {
         if (g_cVerbosity)
-            VBoxServiceError("Unable to query token information for PID=%ld, error=%ld\n",
-                             pProc->id, dwErr);
+            VGSvcError("Unable to query token information for PID=%u, error=%u\n", pProc->id, dwErr);
         rc = RTErrConvertFromWin32(dwErr);
     }
 
@@ -431,15 +512,18 @@ static int VBoxServiceVMInfoWinProcessesGetTokenInfo(PVBOXSERVICEVMINFOPROC pPro
  *
  * @returns VBox status code.
  * @param   ppaProcs    Where to return the process snapshot.  This must be
- *                      freed by calling VBoxServiceVMInfoWinProcessesFree.
+ *                      freed by calling vgsvcVMInfoWinProcessesFree.
  *
  * @param   pcProcs     Where to store the returned process count.
  */
-int VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppaProcs, PDWORD pcProcs)
+static int vgsvcVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppaProcs, PDWORD pcProcs)
 {
     AssertPtr(ppaProcs);
     AssertPtr(pcProcs);
 
+    if (!g_pfnEnumProcesses)
+        return VERR_NOT_SUPPORTED;
+
     /*
      * Call EnumProcesses with an increasingly larger buffer until it all fits
      * or we think something is screwed up.
@@ -461,7 +545,7 @@ int VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppaProcs, PDW
 
         /* Query the processes. Not the cbRet == buffer size means there could be more work to be done. */
         DWORD cbRet;
-        if (!EnumProcesses(paPID, cProcesses * sizeof(DWORD), &cbRet))
+        if (!g_pfnEnumProcesses(paPID, cProcesses * sizeof(DWORD), &cbRet))
         {
             rc = RTErrConvertFromWin32(GetLastError());
             break;
@@ -488,20 +572,17 @@ int VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppaProcs, PDW
                 paProcs[i].id = paPID[i];
                 paProcs[i].pSid = NULL;
 
-                int rc2 = VBoxServiceVMInfoWinProcessesGetTokenInfo(&paProcs[i], TokenUser);
+                int rc2 = vgsvcVMInfoWinProcessesGetTokenInfo(&paProcs[i], TokenUser);
                 if (RT_FAILURE(rc2) && g_cVerbosity)
-                    VBoxServiceError("Get token class \"user\" for process %ld failed, rc=%Rrc\n",
-                                     paProcs[i].id, rc2);
+                    VGSvcError("Get token class 'user' for process %u failed, rc=%Rrc\n", paProcs[i].id, rc2);
 
-                rc2 = VBoxServiceVMInfoWinProcessesGetTokenInfo(&paProcs[i], TokenGroups);
+                rc2 = vgsvcVMInfoWinProcessesGetTokenInfo(&paProcs[i], TokenGroups);
                 if (RT_FAILURE(rc2) && g_cVerbosity)
-                    VBoxServiceError("Get token class \"groups\" for process %ld failed, rc=%Rrc\n",
-                                     paProcs[i].id, rc2);
+                    VGSvcError("Get token class 'groups' for process %u failed, rc=%Rrc\n", paProcs[i].id, rc2);
 
-                rc2 = VBoxServiceVMInfoWinProcessesGetTokenInfo(&paProcs[i], TokenStatistics);
+                rc2 = vgsvcVMInfoWinProcessesGetTokenInfo(&paProcs[i], TokenStatistics);
                 if (RT_FAILURE(rc2) && g_cVerbosity)
-                    VBoxServiceError("Get token class \"statistics\" for process %ld failed, rc=%Rrc\n",
-                                     paProcs[i].id, rc2);
+                    VGSvcError("Get token class 'statistics' for process %u failed, rc=%Rrc\n", paProcs[i].id, rc2);
             }
 
             /* Save number of processes */
@@ -511,7 +592,7 @@ int VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppaProcs, PDW
                 *ppaProcs = paProcs;
             }
             else
-                VBoxServiceVMInfoWinProcessesFree(cProcesses, paProcs);
+                vgsvcVMInfoWinProcessesFree(cProcesses, paProcs);
         }
         else
             rc = VERR_NO_MEMORY;
@@ -523,21 +604,19 @@ int VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppaProcs, PDW
 
 /**
  * Frees the process structures returned by
- * VBoxServiceVMInfoWinProcessesEnumerate() before.
+ * vgsvcVMInfoWinProcessesEnumerate() before.
  *
- * @param   paProcs     What
+ * @param   cProcs      Number of processes in paProcs.
+ * @param   paProcs     The process array.
  */
-void VBoxServiceVMInfoWinProcessesFree(DWORD cProcs, PVBOXSERVICEVMINFOPROC paProcs)
+static void vgsvcVMInfoWinProcessesFree(DWORD cProcs, PVBOXSERVICEVMINFOPROC paProcs)
 {
     for (DWORD i = 0; i < cProcs; i++)
-    {
         if (paProcs[i].pSid)
         {
             HeapFree(GetProcessHeap(), 0 /* Flags */, paProcs[i].pSid);
             paProcs[i].pSid = NULL;
         }
-
-    }
     RTMemFree(paProcs);
 }
 
@@ -545,46 +624,47 @@ void VBoxServiceVMInfoWinProcessesFree(DWORD cProcs, PVBOXSERVICEVMINFOPROC paPr
  * Determines whether the specified session has processes on the system.
  *
  * @returns Number of processes found for a specified session.
- * @param   pSession        The current user's SID.
- * @param   paProcs         The process snapshot.
- * @param   cProcs          The number of processes in the snaphot.
- * @param   puSession       Looked up session number.  Optional.
+ * @param   pSession            The current user's SID.
+ * @param   paProcs             The process snapshot.
+ * @param   cProcs              The number of processes in the snaphot.
+ * @param   puTerminalSession   Where to return terminal session number.
+ *                              Optional.
  */
-uint32_t VBoxServiceVMInfoWinSessionHasProcesses(PLUID pSession,
-                                                 PVBOXSERVICEVMINFOPROC const paProcs, DWORD cProcs,
-                                                 PULONG puTerminalSession)
+static uint32_t vgsvcVMInfoWinSessionHasProcesses(PLUID pSession, PVBOXSERVICEVMINFOPROC const paProcs, DWORD cProcs,
+                                                  PULONG puTerminalSession)
 {
     if (!pSession)
     {
-        VBoxServiceVerbose(1, "Session became invalid while enumerating!\n");
+        VGSvcVerbose(1, "Session became invalid while enumerating!\n");
         return 0;
     }
+    if (!g_pfnLsaGetLogonSessionData)
+        return VERR_NOT_SUPPORTED;
 
     PSECURITY_LOGON_SESSION_DATA pSessionData = NULL;
-    NTSTATUS rcNt = LsaGetLogonSessionData(pSession, &pSessionData);
+    NTSTATUS rcNt = g_pfnLsaGetLogonSessionData(pSession, &pSessionData);
     if (rcNt != STATUS_SUCCESS)
     {
-        VBoxServiceError("Could not get logon session data! rcNt=%#x\n", rcNt);
+        VGSvcError("Could not get logon session data! rcNt=%#x\n", rcNt);
         return 0;
     }
 
     if (!IsValidSid(pSessionData->Sid))
     {
-       VBoxServiceError("User SID=%p is not valid\n", pSessionData->Sid);
+       VGSvcError("User SID=%p is not valid\n", pSessionData->Sid);
        if (pSessionData)
-           LsaFreeReturnBuffer(pSessionData);
+           g_pfnLsaFreeReturnBuffer(pSessionData);
        return 0;
     }
 
-    int rc = VINF_SUCCESS;
 
     /*
      * Even if a user seems to be logged in, it could be a stale/orphaned logon
      * session. So check if we have some processes bound to it by comparing the
      * session <-> process LUIDs.
      */
-    uint32_t cNumProcs = 0;
-
+    int rc = VINF_SUCCESS;
+    uint32_t cProcessesFound = 0;
     for (DWORD i = 0; i < cProcs; i++)
     {
         PSID pProcSID = paProcs[i].pSid;
@@ -597,17 +677,17 @@ uint32_t VBoxServiceVMInfoWinSessionHasProcesses(PLUID pSession,
                 if (g_cVerbosity)
                 {
                     PRTUTF16 pszName;
-                    int rc2 = VBoxServiceVMInfoWinProcessesGetModuleNameA(&paProcs[i], &pszName);
-                    VBoxServiceVerbose(4, "Session %RU32: PID=%ld (fInt=%RTbool): %ls\n",
-                                       pSessionData->Session, paProcs[i].id, paProcs[i].fInteractive,
-                                       RT_SUCCESS(rc2) ? pszName : L"<Unknown>");
+                    int rc2 = vgsvcVMInfoWinProcessesGetModuleNameA(&paProcs[i], &pszName);
+                    VGSvcVerbose(4, "Session %RU32: PID=%u (fInt=%RTbool): %ls\n",
+                                 pSessionData->Session, paProcs[i].id, paProcs[i].fInteractive,
+                                 RT_SUCCESS(rc2) ? pszName : L"<Unknown>");
                     if (RT_SUCCESS(rc2))
                         RTUtf16Free(pszName);
                 }
 
                 if (paProcs[i].fInteractive)
                 {
-                    cNumProcs++;
+                    cProcessesFound++;
                     if (!g_cVerbosity) /* We want a bit more info on higher verbosity. */
                         break;
                 }
@@ -618,9 +698,9 @@ uint32_t VBoxServiceVMInfoWinSessionHasProcesses(PLUID pSession,
     if (puTerminalSession)
         *puTerminalSession = pSessionData->Session;
 
-    LsaFreeReturnBuffer(pSessionData);
+    g_pfnLsaFreeReturnBuffer(pSessionData);
 
-    return cNumProcs;
+    return cProcessesFound;
 }
 
 
@@ -632,15 +712,14 @@ uint32_t VBoxServiceVMInfoWinSessionHasProcesses(PLUID pSession,
  * @param   pSrc                Source string.
  * @param   pszWhat             What this is. For the log.
  */
-static void VBoxServiceVMInfoWinSafeCopy(PWCHAR pwszDst, size_t cbDst, LSA_UNICODE_STRING const *pSrc, const char *pszWhat)
+static void vgsvcVMInfoWinSafeCopy(PWCHAR pwszDst, size_t cbDst, LSA_UNICODE_STRING const *pSrc, const char *pszWhat)
 {
     Assert(RT_ALIGN(cbDst, sizeof(WCHAR)) == cbDst);
 
     size_t cbCopy = pSrc->Length;
     if (cbCopy + sizeof(WCHAR) > cbDst)
     {
-        VBoxServiceVerbose(0, "%s is too long - %u bytes, buffer %u bytes! It will be truncated.\n",
-                           pszWhat, cbCopy, cbDst);
+        VGSvcVerbose(0, "%s is too long - %u bytes, buffer %u bytes! It will be truncated.\n", pszWhat, cbCopy, cbDst);
         cbCopy = cbDst - sizeof(WCHAR);
     }
     if (cbCopy)
@@ -656,14 +735,16 @@ static void VBoxServiceVMInfoWinSafeCopy(PWCHAR pwszDst, size_t cbDst, LSA_UNICO
  * @param   pUserInfo           Where to return the user information.
  * @param   pSession            The session to check.
  */
-bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSession)
+static bool vgsvcVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSession)
 {
     AssertPtrReturn(pUserInfo, false);
     if (!pSession)
         return false;
+    if (!g_pfnLsaGetLogonSessionData)
+        return false;
 
     PSECURITY_LOGON_SESSION_DATA pSessionData = NULL;
-    NTSTATUS rcNt = LsaGetLogonSessionData(pSession, &pSessionData);
+    NTSTATUS rcNt = g_pfnLsaGetLogonSessionData(pSession, &pSessionData);
     if (rcNt != STATUS_SUCCESS)
     {
         ULONG ulError = LsaNtStatusToWinError(rcNt);
@@ -672,7 +753,7 @@ bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSes
             case ERROR_NOT_ENOUGH_MEMORY:
                 /* If we don't have enough memory it's hard to judge whether the specified user
                  * is logged in or not, so just assume he/she's not. */
-                VBoxServiceVerbose(3, "Not enough memory to retrieve logon session data!\n");
+                VGSvcVerbose(3, "Not enough memory to retrieve logon session data!\n");
                 break;
 
             case ERROR_NO_SUCH_LOGON_SESSION:
@@ -681,34 +762,32 @@ bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSes
                 break;
 
             default:
-                VBoxServiceError("LsaGetLogonSessionData failed with error %u\n", ulError);
+                VGSvcError("LsaGetLogonSessionData failed with error %u\n", ulError);
                 break;
         }
         if (pSessionData)
-            LsaFreeReturnBuffer(pSessionData);
+            g_pfnLsaFreeReturnBuffer(pSessionData);
         return false;
     }
     if (!pSessionData)
     {
-        VBoxServiceError("Invalid logon session data!\n");
+        VGSvcError("Invalid logon session data!\n");
         return false;
     }
 
-    VBoxServiceVerbose(3, "Session data: Name=%ls, SessionID=%RU32, LogonID=%ld,%ld, LogonType=%ld\n",
-                       pSessionData->UserName.Buffer,
-                       pSessionData->Session,
-                       pSessionData->LogonId.HighPart, pSessionData->LogonId.LowPart,
-                       pSessionData->LogonType);
+    VGSvcVerbose(3, "Session data: Name=%ls, SessionID=%RU32, LogonID=%d,%u, LogonType=%u\n",
+                 pSessionData->UserName.Buffer, pSessionData->Session,
+                 pSessionData->LogonId.HighPart, pSessionData->LogonId.LowPart, pSessionData->LogonType);
 
-    if (vboxServiceVMInfoSession0Separation())
+    if (vgsvcVMInfoSession0Separation())
     {
         /* Starting at Windows Vista user sessions begin with session 1, so
          * ignore (stale) session 0 users. */
         if (   pSessionData->Session == 0
-        /* Also check the logon time. */
+            /* Also check the logon time. */
             || pSessionData->LogonTime.QuadPart == 0)
         {
-            LsaFreeReturnBuffer(pSessionData);
+            g_pfnLsaFreeReturnBuffer(pSessionData);
             return false;
         }
     }
@@ -726,18 +805,16 @@ bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSes
              *       or just wants to reuse them! */
             || (SECURITY_LOGON_TYPE)pSessionData->LogonType == CachedInteractive))
     {
-        VBoxServiceVerbose(3, "Session LogonType=%ld is supported -- looking up SID + type ...\n",
-                           pSessionData->LogonType);
+        VGSvcVerbose(3, "Session LogonType=%u is supported -- looking up SID + type ...\n", pSessionData->LogonType);
 
         /*
          * Copy out relevant data.
          */
-        VBoxServiceVMInfoWinSafeCopy(pUserInfo->wszUser, sizeof(pUserInfo->wszUser),
-                                     &pSessionData->UserName, "User name");
-        VBoxServiceVMInfoWinSafeCopy(pUserInfo->wszAuthenticationPackage, sizeof(pUserInfo->wszAuthenticationPackage),
-                                     &pSessionData->AuthenticationPackage, "Authentication pkg name");
-        VBoxServiceVMInfoWinSafeCopy(pUserInfo->wszLogonDomain, sizeof(pUserInfo->wszLogonDomain),
-                                     &pSessionData->LogonDomain, "Logon domain name");
+        vgsvcVMInfoWinSafeCopy(pUserInfo->wszUser, sizeof(pUserInfo->wszUser), &pSessionData->UserName, "User name");
+        vgsvcVMInfoWinSafeCopy(pUserInfo->wszAuthenticationPackage, sizeof(pUserInfo->wszAuthenticationPackage),
+                               &pSessionData->AuthenticationPackage, "Authentication pkg name");
+        vgsvcVMInfoWinSafeCopy(pUserInfo->wszLogonDomain, sizeof(pUserInfo->wszLogonDomain),
+                               &pSessionData->LogonDomain, "Logon domain name");
 
         TCHAR           szOwnerName[_MAX_PATH]  = { 0 };
         DWORD           dwOwnerNameSize         = sizeof(szOwnerName);
@@ -760,17 +837,15 @@ bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSes
              * here that we just skip.
              */
             if (dwErr != ERROR_NONE_MAPPED)
-                VBoxServiceError("Failed looking up account info for user=%ls, error=$ld!\n",
-                                 pUserInfo->wszUser, dwErr);
+                VGSvcError("Failed looking up account info for user=%ls, error=$ld!\n", pUserInfo->wszUser, dwErr);
         }
         else
         {
             if (enmOwnerType == SidTypeUser) /* Only recognize users; we don't care about the rest! */
             {
-                VBoxServiceVerbose(3, "Account User=%ls, Session=%ld, LogonID=%ld,%ld, AuthPkg=%ls, Domain=%ls\n",
-                                   pUserInfo->wszUser, pSessionData->Session, pSessionData->LogonId.HighPart,
-                                   pSessionData->LogonId.LowPart, pUserInfo->wszAuthenticationPackage,
-                                   pUserInfo->wszLogonDomain);
+                VGSvcVerbose(3, "Account User=%ls, Session=%u, LogonID=%d,%u, AuthPkg=%ls, Domain=%ls\n",
+                             pUserInfo->wszUser, pSessionData->Session, pSessionData->LogonId.HighPart,
+                             pSessionData->LogonId.LowPart, pUserInfo->wszAuthenticationPackage, pUserInfo->wszLogonDomain);
 
                 /**
                  * Note: On certain Windows OSes WTSQuerySessionInformation leaks memory when used
@@ -780,58 +855,54 @@ bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSes
                  */
                 if (!s_fSkipRDPDetection)
                 {
-                    /** @todo Only do this once. Later. */
-                    OSVERSIONINFOEX OSInfoEx;
-                    RT_ZERO(OSInfoEx);
-                    OSInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
-
                     /* Skip RDP detection on non-NT systems. */
-                    if (   !GetVersionEx((LPOSVERSIONINFO) &OSInfoEx)
-                        || OSInfoEx.dwPlatformId != VER_PLATFORM_WIN32_NT)
-                    {
+                    if (g_WinVersion.dwPlatformId != VER_PLATFORM_WIN32_NT)
                         s_fSkipRDPDetection = true;
-                    }
+
                     /* Skip RDP detection on Windows 2000.
                      * For Windows 2000 however we don't have any hotfixes, so just skip the
                      * RDP detection in any case. */
-                    if (   OSInfoEx.dwMajorVersion == 5
-                        && OSInfoEx.dwMinorVersion == 0)
-                    {
+                    if (   g_WinVersion.dwMajorVersion == 5
+                        && g_WinVersion.dwMinorVersion == 0)
+                        s_fSkipRDPDetection = true;
+
+                    /* Skip if we don't have the WTS API. */
+                    if (!g_pfnWTSQuerySessionInformationA)
                         s_fSkipRDPDetection = true;
-                    }
 
                     if (s_fSkipRDPDetection)
-                        VBoxServiceVerbose(0, "Detection of logged-in users via RDP is disabled\n");
+                        VGSvcVerbose(0, "Detection of logged-in users via RDP is disabled\n");
                 }
 
                 if (!s_fSkipRDPDetection)
                 {
+                    Assert(g_pfnWTSQuerySessionInformationA);
+                    Assert(g_pfnWTSFreeMemory);
+
                     /* Detect RDP sessions as well. */
                     LPTSTR  pBuffer = NULL;
                     DWORD   cbRet   = 0;
                     int     iState  = -1;
-                    if (WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,
-                                                   pSessionData->Session,
-                                                   WTSConnectState,
-                                                   &pBuffer,
-                                                   &cbRet))
+                    if (g_pfnWTSQuerySessionInformationA(WTS_CURRENT_SERVER_HANDLE,
+                                                         pSessionData->Session,
+                                                         WTSConnectState,
+                                                         &pBuffer,
+                                                         &cbRet))
                     {
                         if (cbRet)
                             iState = *pBuffer;
-                        VBoxServiceVerbose(3, "Account User=%ls, WTSConnectState=%d (%ld)\n",
-                                           pUserInfo->wszUser, iState, cbRet);
+                        VGSvcVerbose(3, "Account User=%ls, WTSConnectState=%d (%u)\n", pUserInfo->wszUser, iState, cbRet);
                         if (    iState == WTSActive           /* User logged on to WinStation. */
                              || iState == WTSShadow           /* Shadowing another WinStation. */
                              || iState == WTSDisconnected)    /* WinStation logged on without client. */
                         {
                             /** @todo On Vista and W2K, always "old" user name are still
                              *        there. Filter out the old one! */
-                            VBoxServiceVerbose(3, "Account User=%ls using TCS/RDP, state=%d \n",
-                                               pUserInfo->wszUser, iState);
+                            VGSvcVerbose(3, "Account User=%ls using TCS/RDP, state=%d \n", pUserInfo->wszUser, iState);
                             fFoundUser = true;
                         }
                         if (pBuffer)
-                            WTSFreeMemory(pBuffer);
+                            g_pfnWTSFreeMemory(pBuffer);
                     }
                     else
                     {
@@ -844,13 +915,12 @@ bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSes
                              * fast user switching page!
                              */
                             case ERROR_CTX_WINSTATION_NOT_FOUND:
-                                VBoxServiceVerbose(3, "No WinStation found for user=%ls\n",
-                                                   pUserInfo->wszUser);
+                                VGSvcVerbose(3, "No WinStation found for user=%ls\n", pUserInfo->wszUser);
                                 break;
 
                             default:
-                                VBoxServiceVerbose(3, "Cannot query WTS connection state for user=%ls, error=%ld\n",
-                                                   pUserInfo->wszUser, dwLastErr);
+                                VGSvcVerbose(3, "Cannot query WTS connection state for user=%ls, error=%u\n",
+                                             pUserInfo->wszUser, dwLastErr);
                                 break;
                         }
 
@@ -859,24 +929,21 @@ bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSes
                 }
             }
             else
-                VBoxServiceVerbose(3, "SID owner type=%d not handled, skipping\n",
-                                   enmOwnerType);
+                VGSvcVerbose(3, "SID owner type=%d not handled, skipping\n", enmOwnerType);
         }
 
-        VBoxServiceVerbose(3, "Account User=%ls %s logged in\n",
-                           pUserInfo->wszUser, fFoundUser ? "is" : "is not");
+        VGSvcVerbose(3, "Account User=%ls %s logged in\n", pUserInfo->wszUser, fFoundUser ? "is" : "is not");
     }
 
     if (fFoundUser)
         pUserInfo->ulLastSession = pSessionData->Session;
 
-    LsaFreeReturnBuffer(pSessionData);
+    g_pfnLsaFreeReturnBuffer(pSessionData);
     return fFoundUser;
 }
 
 
-static int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache,
-                                              const char *pszUser, const char *pszDomain)
+static int vgsvcVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser, const char *pszDomain)
 {
     AssertPtrReturn(pCache, VERR_INVALID_POINTER);
     AssertPtrReturn(pszUser, VERR_INVALID_POINTER);
@@ -885,8 +952,8 @@ static int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache,
     int rc = VINF_SUCCESS;
 
     char szPipeName[255];
-    if (RTStrPrintf(szPipeName, sizeof(szPipeName), "%s%s",
-                    VBOXTRAY_IPC_PIPE_PREFIX, pszUser))
+/** @todo r=bird:  Pointless if.  */
+    if (RTStrPrintf(szPipeName, sizeof(szPipeName), "%s%s", VBOXTRAY_IPC_PIPE_PREFIX, pszUser))
     {
         bool fReportToHost = false;
         VBoxGuestUserState userState = VBoxGuestUserState_Unknown;
@@ -895,15 +962,19 @@ static int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache,
         rc = RTLocalIpcSessionConnect(&hSession, szPipeName, 0 /* Flags */);
         if (RT_SUCCESS(rc))
         {
-            VBOXTRAYIPCHEADER ipcHdr = { VBOXTRAY_IPC_HDR_MAGIC, 0 /* Header version */,
-                                         VBOXTRAYIPCMSGTYPE_USERLASTINPUT, 0 /* No msg */ };
+            VBOXTRAYIPCHEADER ipcHdr =
+            {
+                /* .uMagic      = */ VBOXTRAY_IPC_HDR_MAGIC,
+                /* .uHdrVersion = */ 0,
+                /* .uMsgType    = */ VBOXTRAYIPCMSGTYPE_USERLASTINPUT,
+                /* .cbMsgData   = */ 0 /* No msg */
+            };
 
             rc = RTLocalIpcSessionWrite(hSession, &ipcHdr, sizeof(ipcHdr));
 
             VBOXTRAYIPCRES_USERLASTINPUT ipcRes;
             if (RT_SUCCESS(rc))
-                rc = RTLocalIpcSessionRead(hSession, &ipcRes, sizeof(ipcRes),
-                                           NULL /* Exact read */);
+                rc = RTLocalIpcSessionRead(hSession, &ipcRes, sizeof(ipcRes), NULL /* Exact read */);
             if (   RT_SUCCESS(rc)
                 /* If uLastInput is set to UINT32_MAX VBoxTray was not able to retrieve the
                  * user's last input time. This might happen when running on Windows NT4 or older. */
@@ -913,9 +984,8 @@ static int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache,
                           ? VBoxGuestUserState_InUse
                           : VBoxGuestUserState_Idle;
 
-                rc = vboxServiceUserUpdateF(pCache, pszUser, pszDomain, "UsageState",
-                                              userState == VBoxGuestUserState_InUse
-                                            ? "InUse" : "Idle");
+                rc = VGSvcUserUpdateF(pCache, pszUser, pszDomain, "UsageState",
+                                      userState == VBoxGuestUserState_InUse ? "InUse" : "Idle");
 
                 /*
                  * Note: vboxServiceUserUpdateF can return VINF_NO_CHANGE in case there wasn't anything
@@ -923,28 +993,24 @@ static int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache,
                  *       new.
                  */
                 fReportToHost = rc == VINF_SUCCESS;
-                VBoxServiceVerbose(4, "User \"%s\" (domain \"%s\") is idle for %RU32, fReportToHost=%RTbool\n",
-                                   pszUser, pszDomain ? pszDomain : "<None>", ipcRes.uLastInput, fReportToHost);
+                VGSvcVerbose(4, "User '%s' (domain '%s') is idle for %RU32, fReportToHost=%RTbool\n",
+                             pszUser, pszDomain ? pszDomain : "<None>", ipcRes.uLastInput, fReportToHost);
 
 #if 0 /* Do we want to write the idle time as well? */
                     /* Also write the user's current idle time, if there is any. */
                     if (userState == VBoxGuestUserState_Idle)
-                        rc = vboxServiceUserUpdateF(pCache, pszUser, pszDomain, "IdleTimeMs",
-                                                    "%RU32", ipcRes.uLastInputMs);
+                        rc = vgsvcUserUpdateF(pCache, pszUser, pszDomain, "IdleTimeMs", "%RU32", ipcRes.uLastInputMs);
                     else
-                        rc = vboxServiceUserUpdateF(pCache, pszUser, pszDomain, "IdleTimeMs",
-                                                    NULL /* Delete property */);
+                        rc = vgsvcUserUpdateF(pCache, pszUser, pszDomain, "IdleTimeMs", NULL /* Delete property */);
 
                     if (RT_SUCCESS(rc))
 #endif
             }
 #ifdef DEBUG
             else if (ipcRes.uLastInput == UINT32_MAX)
-                VBoxServiceVerbose(4, "Last input for user \"%s\" is not supported, skipping\n",
-                                   pszUser, rc);
+                VGSvcVerbose(4, "Last input for user '%s' is not supported, skipping\n", pszUser, rc);
 
-            VBoxServiceVerbose(4, "Getting last input for user \"%s\" ended with rc=%Rrc\n",
-                               pszUser, rc);
+            VGSvcVerbose(4, "Getting last input for user '%s' ended with rc=%Rrc\n", pszUser, rc);
 #endif
             int rc2 = RTLocalIpcSessionClose(hSession);
             if (RT_SUCCESS(rc))
@@ -958,12 +1024,10 @@ static int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache,
                 {
                     /* No VBoxTray (or too old version which does not support IPC) running
                        for the given user. Not much we can do then. */
-                    VBoxServiceVerbose(4, "VBoxTray for user \"%s\" not running (anymore), no last input available\n",
-                                       pszUser);
+                    VGSvcVerbose(4, "VBoxTray for user '%s' not running (anymore), no last input available\n", pszUser);
 
                     /* Overwrite rc from above. */
-                    rc = vboxServiceUserUpdateF(pCache, pszUser, pszDomain,
-                                                "UsageState", "Idle");
+                    rc = VGSvcUserUpdateF(pCache, pszUser, pszDomain, "UsageState", "Idle");
 
                     fReportToHost = rc == VINF_SUCCESS;
                     if (fReportToHost)
@@ -972,8 +1036,7 @@ static int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache,
                 }
 
                 default:
-                    VBoxServiceError("Error querying last input for user \"%s\", rc=%Rrc\n",
-                                     pszUser, rc);
+                    VGSvcError("Error querying last input for user '%s', rc=%Rrc\n", pszUser, rc);
                     break;
             }
         }
@@ -981,12 +1044,9 @@ static int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache,
         if (fReportToHost)
         {
             Assert(userState != VBoxGuestUserState_Unknown);
-            int rc2 = VbglR3GuestUserReportState(pszUser, pszDomain, userState,
-                                                 NULL /* No details */, 0);
+            int rc2 = VbglR3GuestUserReportState(pszUser, pszDomain, userState, NULL /* No details */, 0);
             if (RT_FAILURE(rc2))
-                VBoxServiceError("Error reporting usage state %ld for user \"%s\" to host, rc=%Rrc\n",
-                                 userState, pszUser, rc2);
-
+                VGSvcError("Error reporting usage state %d for user '%s' to host, rc=%Rrc\n", userState, pszUser, rc2);
             if (RT_SUCCESS(rc))
                 rc = rc2;
         }
@@ -1001,21 +1061,26 @@ static int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache,
  * user count.
  *
  * @returns VBox status code.
- * @param   pCachce         Property cache to use for storing some of the lookup
+ * @param   pCache          Property cache to use for storing some of the lookup
  *                          data in between calls.
  * @param   ppszUserList    Where to store the user list (separated by commas).
  *                          Must be freed with RTStrFree().
  * @param   pcUsersInList   Where to store the number of users in the list.
  */
-int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
-                                   char **ppszUserList, uint32_t *pcUsersInList)
+int VGSvcVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache, char **ppszUserList, uint32_t *pcUsersInList)
 {
     AssertPtrReturn(pCache, VERR_INVALID_POINTER);
     AssertPtrReturn(ppszUserList, VERR_INVALID_POINTER);
     AssertPtrReturn(pcUsersInList, VERR_INVALID_POINTER);
 
-    int rc2 = VbglR3GuestPropConnect(&s_uDebugGuestPropClientID);
-    AssertRC(rc2);
+    int rc = RTOnce(&g_vgsvcWinVmInitOnce, vgsvcWinVmInfoInitOnce, NULL);
+    if (RT_FAILURE(rc))
+        return rc;
+    if (!g_pfnLsaEnumerateLogonSessions || !g_pfnEnumProcesses)
+        return VERR_NOT_SUPPORTED;
+
+    rc = VbglR3GuestPropConnect(&s_uDebugGuestPropClientID);
+    AssertRC(rc);
 
     char *pszUserList = NULL;
     uint32_t cUsersInList = 0;
@@ -1024,72 +1089,72 @@ int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
        of already logged off users (especially in Windows 2000). */
     PLUID    paSessions = NULL;
     ULONG    cSessions = 0;
-    NTSTATUS rcNt = LsaEnumerateLogonSessions(&cSessions, &paSessions);
+    NTSTATUS rcNt = g_pfnLsaEnumerateLogonSessions(&cSessions, &paSessions);
     if (rcNt != STATUS_SUCCESS)
     {
-        ULONG ulError = LsaNtStatusToWinError(rcNt);
-        switch (ulError)
+        ULONG uError = LsaNtStatusToWinError(rcNt);
+        switch (uError)
         {
             case ERROR_NOT_ENOUGH_MEMORY:
-                VBoxServiceError("Not enough memory to enumerate logon sessions!\n");
+                VGSvcError("Not enough memory to enumerate logon sessions!\n");
                 break;
 
             case ERROR_SHUTDOWN_IN_PROGRESS:
                 /* If we're about to shutdown when we were in the middle of enumerating the logon
                  * sessions, skip the error to not confuse the user with an unnecessary log message. */
-                VBoxServiceVerbose(3, "Shutdown in progress ...\n");
-                ulError = ERROR_SUCCESS;
+                VGSvcVerbose(3, "Shutdown in progress ...\n");
+                uError = ERROR_SUCCESS;
                 break;
 
             default:
-                VBoxServiceError("LsaEnumerate failed with error %RU32\n", ulError);
+                VGSvcError("LsaEnumerate failed with error %RU32\n", uError);
                 break;
         }
 
         if (paSessions)
-            LsaFreeReturnBuffer(paSessions);
+            g_pfnLsaFreeReturnBuffer(paSessions);
 
-        return RTErrConvertFromWin32(ulError);
+        return RTErrConvertFromWin32(uError);
     }
-    VBoxServiceVerbose(3, "Found %ld sessions\n", cSessions);
+    VGSvcVerbose(3, "Found %u sessions\n", cSessions);
 
     PVBOXSERVICEVMINFOPROC  paProcs;
     DWORD                   cProcs;
-    int rc = VBoxServiceVMInfoWinProcessesEnumerate(&paProcs, &cProcs);
+    rc = vgsvcVMInfoWinProcessesEnumerate(&paProcs, &cProcs);
     if (RT_FAILURE(rc))
     {
         if (rc == VERR_NO_MEMORY)
-            VBoxServiceError("Not enough memory to enumerate processes\n");
+            VGSvcError("Not enough memory to enumerate processes\n");
         else
-            VBoxServiceError("Failed to enumerate processes, rc=%Rrc\n", rc);
+            VGSvcError("Failed to enumerate processes, rc=%Rrc\n", rc);
     }
     else
     {
         PVBOXSERVICEVMINFOUSER pUserInfo;
         pUserInfo = (PVBOXSERVICEVMINFOUSER)RTMemAllocZ(cSessions * sizeof(VBOXSERVICEVMINFOUSER) + 1);
         if (!pUserInfo)
-            VBoxServiceError("Not enough memory to store enumerated users!\n");
+            VGSvcError("Not enough memory to store enumerated users!\n");
         else
         {
             ULONG cUniqueUsers = 0;
 
-            /**
+            /*
              * Note: The cSessions loop variable does *not* correlate with
              *       the Windows session ID!
              */
             for (ULONG i = 0; i < cSessions; i++)
             {
-                VBoxServiceVerbose(3, "Handling session %RU32 (of %RU32)\n", i + 1, cSessions);
+                VGSvcVerbose(3, "Handling session %RU32 (of %RU32)\n", i + 1, cSessions);
 
                 VBOXSERVICEVMINFOUSER userSession;
-                if (VBoxServiceVMInfoWinIsLoggedIn(&userSession, &paSessions[i]))
+                if (vgsvcVMInfoWinIsLoggedIn(&userSession, &paSessions[i]))
                 {
-                    VBoxServiceVerbose(4, "Handling user=%ls, domain=%ls, package=%ls, session=%RU32\n",
-                                       userSession.wszUser, userSession.wszLogonDomain, userSession.wszAuthenticationPackage,
-                                       userSession.ulLastSession);
+                    VGSvcVerbose(4, "Handling user=%ls, domain=%ls, package=%ls, session=%RU32\n",
+                                 userSession.wszUser, userSession.wszLogonDomain, userSession.wszAuthenticationPackage,
+                                 userSession.ulLastSession);
 
                     /* Retrieve assigned processes of current session. */
-                    uint32_t cCurSessionProcs = VBoxServiceVMInfoWinSessionHasProcesses(&paSessions[i], paProcs, cProcs,
+                    uint32_t cCurSessionProcs = vgsvcVMInfoWinSessionHasProcesses(&paSessions[i], paProcs, cProcs,
                                                                                         NULL /* Terminal session ID */);
                     /* Don't return here when current session does not have assigned processes
                      * anymore -- in that case we have to search through the unique users list below
@@ -1097,10 +1162,12 @@ int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
 
                     if (g_cVerbosity > 3)
                     {
-                        char szDebugSessionPath[255]; RTStrPrintf(szDebugSessionPath,  sizeof(szDebugSessionPath), "/VirtualBox/GuestInfo/Debug/LSA/Session/%RU32",
-                                                                  userSession.ulLastSession);
-                        VBoxServiceWritePropF(s_uDebugGuestPropClientID, szDebugSessionPath,
-                                              "#%RU32: cSessionProcs=%RU32 (of %RU32 procs total)", s_uDebugIter, cCurSessionProcs, cProcs);
+                        char szDebugSessionPath[255];
+                        RTStrPrintf(szDebugSessionPath,  sizeof(szDebugSessionPath),
+                                    "/VirtualBox/GuestInfo/Debug/LSA/Session/%RU32", userSession.ulLastSession);
+                        VGSvcWritePropF(s_uDebugGuestPropClientID, szDebugSessionPath,
+                                        "#%RU32: cSessionProcs=%RU32 (of %RU32 procs total)",
+                                        s_uDebugIter, cCurSessionProcs, cProcs);
                     }
 
                     bool fFoundUser = false;
@@ -1118,14 +1185,13 @@ int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
                              */
                             if (userSession.ulLastSession > pCurUser->ulLastSession)
                             {
-                                VBoxServiceVerbose(4, "Updating user=%ls to %u processes (last used session: %RU32)\n",
+                                VGSvcVerbose(4, "Updating user=%ls to %u processes (last used session: %RU32)\n",
                                                    pCurUser->wszUser, cCurSessionProcs, userSession.ulLastSession);
 
                                 if (!cCurSessionProcs)
-                                    VBoxServiceVerbose(3, "Stale session for user=%ls detected! Processes: %RU32 -> %RU32, Session: %RU32 -> %RU32\n",
-                                                       pCurUser->wszUser,
-                                                       pCurUser->ulNumProcs, cCurSessionProcs,
-                                                       pCurUser->ulLastSession, userSession.ulLastSession);
+                                    VGSvcVerbose(3, "Stale session for user=%ls detected! Processes: %RU32 -> %RU32, Session: %RU32 -> %RU32\n",
+                                                 pCurUser->wszUser, pCurUser->ulNumProcs, cCurSessionProcs,
+                                                 pCurUser->ulLastSession, userSession.ulLastSession);
 
                                 pCurUser->ulNumProcs = cCurSessionProcs;
                                 pCurUser->ulLastSession  = userSession.ulLastSession;
@@ -1135,8 +1201,8 @@ int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
                              * processes to it. */
                             else if (pCurUser->ulLastSession == userSession.ulLastSession)
                             {
-                                VBoxServiceVerbose(4, "Updating processes for user=%ls (old procs=%RU32, new procs=%RU32, session=%RU32)\n",
-                                                   pCurUser->wszUser, pCurUser->ulNumProcs, cCurSessionProcs, pCurUser->ulLastSession);
+                                VGSvcVerbose(4, "Updating processes for user=%ls (old procs=%RU32, new procs=%RU32, session=%RU32)\n",
+                                             pCurUser->wszUser, pCurUser->ulNumProcs, cCurSessionProcs, pCurUser->ulLastSession);
 
                                 pCurUser->ulNumProcs = cCurSessionProcs;
                             }
@@ -1148,8 +1214,8 @@ int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
 
                     if (!fFoundUser)
                     {
-                        VBoxServiceVerbose(4, "Adding new user=%ls (session=%RU32) with %RU32 processes\n",
-                                           userSession.wszUser, userSession.ulLastSession, cCurSessionProcs);
+                        VGSvcVerbose(4, "Adding new user=%ls (session=%RU32) with %RU32 processes\n",
+                                     userSession.wszUser, userSession.ulLastSession, cCurSessionProcs);
 
                         memcpy(&pUserInfo[cUniqueUsers], &userSession, sizeof(VBOXSERVICEVMINFOUSER));
                         pUserInfo[cUniqueUsers].ulNumProcs = cCurSessionProcs;
@@ -1160,21 +1226,20 @@ int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
             }
 
             if (g_cVerbosity > 3)
-                VBoxServiceWritePropF(s_uDebugGuestPropClientID, "/VirtualBox/GuestInfo/Debug/LSA",
-                                      "#%RU32: cSessions=%RU32, cProcs=%RU32, cUniqueUsers=%RU32",
-                                      s_uDebugIter, cSessions, cProcs, cUniqueUsers);
+                VGSvcWritePropF(s_uDebugGuestPropClientID, "/VirtualBox/GuestInfo/Debug/LSA",
+                                "#%RU32: cSessions=%RU32, cProcs=%RU32, cUniqueUsers=%RU32",
+                                s_uDebugIter, cSessions, cProcs, cUniqueUsers);
 
-            VBoxServiceVerbose(3, "Found %u unique logged-in user(s)\n",
-                               cUniqueUsers);
+            VGSvcVerbose(3, "Found %u unique logged-in user(s)\n", cUniqueUsers);
 
             for (ULONG i = 0; i < cUniqueUsers; i++)
             {
                 if (g_cVerbosity > 3)
                 {
                     char szDebugUserPath[255]; RTStrPrintf(szDebugUserPath,  sizeof(szDebugUserPath), "/VirtualBox/GuestInfo/Debug/LSA/User/%RU32", i);
-                    VBoxServiceWritePropF(s_uDebugGuestPropClientID, szDebugUserPath,
-                                          "#%RU32: szName=%ls, sessionID=%RU32, cProcs=%RU32",
-                                          s_uDebugIter, pUserInfo[i].wszUser, pUserInfo[i].ulLastSession, pUserInfo[i].ulNumProcs);
+                    VGSvcWritePropF(s_uDebugGuestPropClientID, szDebugUserPath,
+                                    "#%RU32: szName=%ls, sessionID=%RU32, cProcs=%RU32",
+                                    s_uDebugIter, pUserInfo[i].wszUser, pUserInfo[i].ulLastSession, pUserInfo[i].ulNumProcs);
                 }
 
                 bool fAddUser = false;
@@ -1183,8 +1248,8 @@ int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
 
                 if (fAddUser)
                 {
-                    VBoxServiceVerbose(3, "User \"%ls\" has %RU32 interactive processes (session=%RU32)\n",
-                                       pUserInfo[i].wszUser, pUserInfo[i].ulNumProcs, pUserInfo[i].ulLastSession);
+                    VGSvcVerbose(3, "User '%ls' has %RU32 interactive processes (session=%RU32)\n",
+                                 pUserInfo[i].wszUser, pUserInfo[i].ulNumProcs, pUserInfo[i].ulLastSession);
 
                     if (cUsersInList > 0)
                     {
@@ -1207,7 +1272,7 @@ int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
 
                         /* Do idle detection. */
                         if (RT_SUCCESS(rc))
-                            rc = vboxServiceVMInfoWinWriteLastInput(pCache, pszUser, pszDomain);
+                            rc = vgsvcVMInfoWinWriteLastInput(pCache, pszUser, pszDomain);
                     }
                     else
                         rc = RTStrAAppend(&pszUserList, "<string-conversion-error>");
@@ -1221,10 +1286,10 @@ int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
 
             RTMemFree(pUserInfo);
         }
-        VBoxServiceVMInfoWinProcessesFree(cProcs, paProcs);
+        vgsvcVMInfoWinProcessesFree(cProcs, paProcs);
     }
     if (paSessions)
-        LsaFreeReturnBuffer(paSessions);
+        g_pfnLsaFreeReturnBuffer(paSessions);
 
     if (RT_SUCCESS(rc))
     {
@@ -1238,9 +1303,8 @@ int VBoxServiceVMInfoWinWriteUsers(PVBOXSERVICEVEPROPCACHE pCache,
     return rc;
 }
 
-#endif /* TARGET_NT4 */
 
-int VBoxServiceWinGetComponentVersions(uint32_t uClientID)
+int VGSvcVMInfoWinGetComponentVersions(uint32_t uClientID)
 {
     int rc;
     char szSysDir[_MAX_PATH] = {0};
@@ -1257,21 +1321,24 @@ int VBoxServiceWinGetComponentVersions(uint32_t uClientID)
 #endif
 
     /* The file information table. */
-#ifndef TARGET_NT4
     const VBOXSERVICEVMINFOFILE aVBoxFiles[] =
     {
         { szSysDir, "VBoxControl.exe" },
         { szSysDir, "VBoxHook.dll" },
         { szSysDir, "VBoxDisp.dll" },
-        { szSysDir, "VBoxMRXNP.dll" },
-        { szSysDir, "VBoxService.exe" },
         { szSysDir, "VBoxTray.exe" },
+#ifdef TARGET_NT4
+        { szSysDir, "VBoxServiceNT.exe" },
+#else
+        { szSysDir, "VBoxService.exe" },
+        { szSysDir, "VBoxMRXNP.dll" },
         { szSysDir, "VBoxGINA.dll" },
         { szSysDir, "VBoxCredProv.dll" },
+#endif
 
  /* On 64-bit we don't yet have the OpenGL DLLs in native format.
     So just enumerate the 32-bit files in the SYSWOW directory. */
-# ifdef RT_ARCH_AMD64
+#ifdef RT_ARCH_AMD64
         { szSysWowDir, "VBoxOGLarrayspu.dll" },
         { szSysWowDir, "VBoxOGLcrutil.dll" },
         { szSysWowDir, "VBoxOGLerrorspu.dll" },
@@ -1279,7 +1346,8 @@ int VBoxServiceWinGetComponentVersions(uint32_t uClientID)
         { szSysWowDir, "VBoxOGLpassthroughspu.dll" },
         { szSysWowDir, "VBoxOGLfeedbackspu.dll" },
         { szSysWowDir, "VBoxOGL.dll" },
-# else  /* !RT_ARCH_AMD64 */
+#else  /* !RT_ARCH_AMD64 */
+# ifdef TARGET_NT4
         { szSysDir, "VBoxOGLarrayspu.dll" },
         { szSysDir, "VBoxOGLcrutil.dll" },
         { szSysDir, "VBoxOGLerrorspu.dll" },
@@ -1287,36 +1355,27 @@ int VBoxServiceWinGetComponentVersions(uint32_t uClientID)
         { szSysDir, "VBoxOGLpassthroughspu.dll" },
         { szSysDir, "VBoxOGLfeedbackspu.dll" },
         { szSysDir, "VBoxOGL.dll" },
-# endif /* !RT_ARCH_AMD64 */
+# endif
+#endif /* !RT_ARCH_AMD64 */
 
+#ifdef TARGET_NT4
+        { szDriversDir, "VBoxGuestNT.sys" },
+        { szDriversDir, "VBoxMouseNT.sys" },
+#else
         { szDriversDir, "VBoxGuest.sys" },
         { szDriversDir, "VBoxMouse.sys" },
         { szDriversDir, "VBoxSF.sys"    },
+#endif
         { szDriversDir, "VBoxVideo.sys" },
     };
 
-#else  /* TARGET_NT4 */
-    const VBOXSERVICEVMINFOFILE aVBoxFiles[] =
-    {
-        { szSysDir, "VBoxControl.exe" },
-        { szSysDir, "VBoxHook.dll" },
-        { szSysDir, "VBoxDisp.dll" },
-        { szSysDir, "VBoxServiceNT.exe" },
-        { szSysDir, "VBoxTray.exe" },
-
-        { szDriversDir, "VBoxGuestNT.sys" },
-        { szDriversDir, "VBoxMouseNT.sys" },
-        { szDriversDir, "VBoxVideo.sys" },
-    };
-#endif /* TARGET_NT4 */
-
     for (unsigned i = 0; i < RT_ELEMENTS(aVBoxFiles); i++)
     {
         char szVer[128];
-        VBoxServiceGetFileVersionString(aVBoxFiles[i].pszFilePath, aVBoxFiles[i].pszFileName, szVer, sizeof(szVer));
+        VGSvcUtilWinGetFileVersionString(aVBoxFiles[i].pszFilePath, aVBoxFiles[i].pszFileName, szVer, sizeof(szVer));
         char szPropPath[256];
         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestAdd/Components/%s", aVBoxFiles[i].pszFileName);
-        rc = VBoxServiceWritePropF(uClientID, szPropPath, "%s", szVer);
+        rc = VGSvcWritePropF(uClientID, szPropPath, "%s", szVer);
     }
 
     return VINF_SUCCESS;
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp
index 1ff1160..5205e36 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.cpp
@@ -15,6 +15,37 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+/** @page pg_vgsvc_vminfo VBoxService - VM Information
+ *
+ * The VM Information subservice provides heaps of useful information about the
+ * VM via guest properties.
+ *
+ * Guest properties is a limited database maintained by the HGCM GuestProperties
+ * service in cooperation with the Main API (VBoxSVC).  Properties have a name
+ * (ours are path like), a string value, and a nanosecond timestamp (unix
+ * epoch).  The timestamp lets the user see how recent the information is.  As
+ * an laternative to polling on changes, it is also possible to wait on changes
+ * via the Main API or VBoxManage on the host side and VBoxControl in the guest.
+ *
+ * The namespace "/VirtualBox/" is reserved for value provided by VirtualBox.
+ * This service provides all the information under "/VirtualBox/GuestInfo/".
+ *
+ *
+ * @section sec_vgsvc_vminfo_beacons    Beacons
+ *
+ * The subservice does not write properties unless there are changes.  So, in
+ * order for the host side to know that information is up to date despite an
+ * oldish timestamp we define a couple of values that are always updated and can
+ * reliably used to figure how old the information actually is.
+ *
+ * For the networking part "/VirtualBox/GuestInfo/Net/Count" is the value to
+ * watch out for.
+ *
+ * For the login part, it's possible that we intended to use
+ * "/VirtualBox/GuestInfo/OS/LoggedInUsers" for this, however it is not defined
+ * correctly and current does NOT work as a beacon.
+ *
+ */
 
 
 /*********************************************************************************************************************************
@@ -124,15 +155,16 @@ uint32_t                        g_uVMInfoUserIdleThresholdMS = 5 * 1000;
 static const char *g_pszLAActiveClient = "/VirtualBox/HostInfo/VRDP/ActiveClient";
 
 #ifdef VBOX_WITH_DBUS
-/** ConsoleKit defines (taken from 0.4.5). */
-#define CK_NAME      "org.freedesktop.ConsoleKit"
-#define CK_PATH      "/org/freedesktop/ConsoleKit"
-#define CK_INTERFACE "org.freedesktop.ConsoleKit"
-
-#define CK_MANAGER_PATH      "/org/freedesktop/ConsoleKit/Manager"
-#define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager"
-#define CK_SEAT_INTERFACE    "org.freedesktop.ConsoleKit.Seat"
-#define CK_SESSION_INTERFACE "org.freedesktop.ConsoleKit.Session"
+/** @name ConsoleKit defines (taken from 0.4.5).
+ * @{ */
+# define CK_NAME                "org.freedesktop.ConsoleKit"
+# define CK_PATH                "/org/freedesktop/ConsoleKit"
+# define CK_INTERFACE           "org.freedesktop.ConsoleKit"
+# define CK_MANAGER_PATH        "/org/freedesktop/ConsoleKit/Manager"
+# define CK_MANAGER_INTERFACE   "org.freedesktop.ConsoleKit.Manager"
+# define CK_SEAT_INTERFACE      "org.freedesktop.ConsoleKit.Seat"
+# define CK_SESSION_INTERFACE   "org.freedesktop.ConsoleKit.Session"
+/** @} */
 #endif
 
 
@@ -143,7 +175,7 @@ static const char *g_pszLAActiveClient = "/VirtualBox/HostInfo/VRDP/ActiveClient
  *
  * @return  IPRT status code.
  */
-int VBoxServiceVMInfoSignal(void)
+int VGSvcVMInfoSignal(void)
 {
     /* Trigger a re-enumeration of all logged-in users by unblocking
      * the multi event semaphore of the VMInfo thread. */
@@ -154,15 +186,19 @@ int VBoxServiceVMInfoSignal(void)
 }
 
 
-/** @copydoc VBOXSERVICE::pfnPreInit */
-static DECLCALLBACK(int) VBoxServiceVMInfoPreInit(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnPreInit}
+ */
+static DECLCALLBACK(int) vbsvcVMInfoPreInit(void)
 {
     return VINF_SUCCESS;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnOption */
-static DECLCALLBACK(int) VBoxServiceVMInfoOption(const char **ppszShort, int argc, char **argv, int *pi)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnOption}
+ */
+static DECLCALLBACK(int) vbsvcVMInfoOption(const char **ppszShort, int argc, char **argv, int *pi)
 {
     /** @todo Use RTGetOpt here. */
 
@@ -170,17 +206,17 @@ static DECLCALLBACK(int) VBoxServiceVMInfoOption(const char **ppszShort, int arg
     if (ppszShort)
         /* no short options */;
     else if (!strcmp(argv[*pi], "--vminfo-interval"))
-        rc = VBoxServiceArgUInt32(argc, argv, "", pi,
-                                  &g_cMsVMInfoInterval, 1, UINT32_MAX - 1);
+        rc = VGSvcArgUInt32(argc, argv, "", pi, &g_cMsVMInfoInterval, 1, UINT32_MAX - 1);
     else if (!strcmp(argv[*pi], "--vminfo-user-idle-threshold"))
-        rc = VBoxServiceArgUInt32(argc, argv, "", pi,
-                                  &g_uVMInfoUserIdleThresholdMS, 1, UINT32_MAX - 1);
+        rc = VGSvcArgUInt32(argc, argv, "", pi, &g_uVMInfoUserIdleThresholdMS, 1, UINT32_MAX - 1);
     return rc;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnInit */
-static DECLCALLBACK(int) VBoxServiceVMInfoInit(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnInit}
+ */
+static DECLCALLBACK(int) vbsvcVMInfoInit(void)
 {
     /*
      * If not specified, find the right interval default.
@@ -205,56 +241,58 @@ static DECLCALLBACK(int) VBoxServiceVMInfoInit(void)
 
     rc = VbglR3GuestPropConnect(&g_uVMInfoGuestPropSvcClientID);
     if (RT_SUCCESS(rc))
-        VBoxServiceVerbose(3, "Property Service Client ID: %#x\n", g_uVMInfoGuestPropSvcClientID);
+        VGSvcVerbose(3, "Property Service Client ID: %#x\n", g_uVMInfoGuestPropSvcClientID);
     else
     {
         /* If the service was not found, we disable this service without
            causing VBoxService to fail. */
         if (rc == VERR_HGCM_SERVICE_NOT_FOUND) /* Host service is not available. */
         {
-            VBoxServiceVerbose(0, "Guest property service is not available, disabling the service\n");
+            VGSvcVerbose(0, "Guest property service is not available, disabling the service\n");
             rc = VERR_SERVICE_DISABLED;
         }
         else
-            VBoxServiceError("Failed to connect to the guest property service! Error: %Rrc\n", rc);
+            VGSvcError("Failed to connect to the guest property service! Error: %Rrc\n", rc);
         RTSemEventMultiDestroy(g_hVMInfoEvent);
         g_hVMInfoEvent = NIL_RTSEMEVENTMULTI;
     }
 
     if (RT_SUCCESS(rc))
     {
-        VBoxServicePropCacheCreate(&g_VMInfoPropCache, g_uVMInfoGuestPropSvcClientID);
+        VGSvcPropCacheCreate(&g_VMInfoPropCache, g_uVMInfoGuestPropSvcClientID);
 
         /*
          * Declare some guest properties with flags and reset values.
          */
-        int rc2 = VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsersList,
-                                                  VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_TRANSIENT, NULL /* Delete on exit */);
+        int rc2 = VGSvcPropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsersList,
+                                            VGSVCPROPCACHE_FLAGS_TEMPORARY | VGSVCPROPCACHE_FLAGS_TRANSIENT,
+                                            NULL /* Delete on exit */);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to init property cache value \"%s\", rc=%Rrc\n", g_pszPropCacheValLoggedInUsersList, rc2);
+            VGSvcError("Failed to init property cache value '%s', rc=%Rrc\n", g_pszPropCacheValLoggedInUsersList, rc2);
 
-        rc2 = VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsers,
-                                              VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_TRANSIENT, "0");
+        rc2 = VGSvcPropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsers,
+                                        VGSVCPROPCACHE_FLAGS_TEMPORARY | VGSVCPROPCACHE_FLAGS_TRANSIENT, "0");
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to init property cache value \"%s\", rc=%Rrc\n", g_pszPropCacheValLoggedInUsers, rc2);
+            VGSvcError("Failed to init property cache value '%s', rc=%Rrc\n", g_pszPropCacheValLoggedInUsers, rc2);
 
-        rc2 = VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValNoLoggedInUsers,
-                                              VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_TRANSIENT, "true");
+        rc2 = VGSvcPropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValNoLoggedInUsers,
+                                        VGSVCPROPCACHE_FLAGS_TEMPORARY | VGSVCPROPCACHE_FLAGS_TRANSIENT, "true");
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to init property cache value \"%s\", rc=%Rrc\n", g_pszPropCacheValNoLoggedInUsers, rc2);
+            VGSvcError("Failed to init property cache value '%s', rc=%Rrc\n", g_pszPropCacheValNoLoggedInUsers, rc2);
 
-        rc2 = VBoxServicePropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValNetCount,
-                                              VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_ALWAYS_UPDATE, NULL /* Delete on exit */);
+        rc2 = VGSvcPropCacheUpdateEntry(&g_VMInfoPropCache, g_pszPropCacheValNetCount,
+                                        VGSVCPROPCACHE_FLAGS_TEMPORARY | VGSVCPROPCACHE_FLAGS_ALWAYS_UPDATE,
+                                        NULL /* Delete on exit */);
         if (RT_FAILURE(rc2))
-            VBoxServiceError("Failed to init property cache value \"%s\", rc=%Rrc\n", g_pszPropCacheValNetCount, rc2);
+            VGSvcError("Failed to init property cache value '%s', rc=%Rrc\n", g_pszPropCacheValNetCount, rc2);
 
         /*
          * Get configuration guest properties from the host.
          * Note: All properties should have sensible defaults in case the lookup here fails.
          */
         char *pszValue;
-        rc2 = VBoxServiceReadHostProp(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--vminfo-user-idle-threshold", true /* Read only */,
-                                      &pszValue, NULL /* Flags */, NULL /* Timestamp */);
+        rc2 = VGSvcReadHostProp(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/VBoxService/--vminfo-user-idle-threshold",
+                                true /* Read only */, &pszValue, NULL /* Flags */, NULL /* Timestamp */);
         if (RT_SUCCESS(rc2))
         {
             AssertPtr(pszValue);
@@ -275,8 +313,7 @@ static DECLCALLBACK(int) VBoxServiceVMInfoInit(void)
  * @param   ppszValue               Where to store value of property.
  * @param   puTimestamp             Timestamp of property to retrieve. Optional.
  */
-static int vboxServiceGetLAClientValue(uint32_t uClientID, const char *pszProperty,
-                                       char **ppszValue, uint64_t *puTimestamp)
+static int vgsvcGetLAClientValue(uint32_t uClientID, const char *pszProperty, char **ppszValue, uint64_t *puTimestamp)
 {
     AssertReturn(uClientID, VERR_INVALID_PARAMETER);
     AssertPtrReturn(pszProperty, VERR_INVALID_POINTER);
@@ -284,11 +321,12 @@ static int vboxServiceGetLAClientValue(uint32_t uClientID, const char *pszProper
     int rc;
 
     char pszClientPath[255];
+/** @todo r=bird: Another pointless RTStrPrintf test with wrong status code to boot. */
     if (RTStrPrintf(pszClientPath, sizeof(pszClientPath),
                     "/VirtualBox/HostInfo/VRDP/Client/%RU32/%s", uClientID, pszProperty))
     {
-        rc = VBoxServiceReadHostProp(g_uVMInfoGuestPropSvcClientID, pszClientPath, true /* Read only */,
-                                     ppszValue, NULL /* Flags */, puTimestamp);
+        rc = VGSvcReadHostProp(g_uVMInfoGuestPropSvcClientID, pszClientPath, true /* Read only */,
+                               ppszValue, NULL /* Flags */, puTimestamp);
     }
     else
         rc = VERR_NO_MEMORY;
@@ -305,32 +343,29 @@ static int vboxServiceGetLAClientValue(uint32_t uClientID, const char *pszProper
  * @param   uClientID               Client ID to retrieve information for.
  * @param   pClient                 Pointer where to store the client information.
  */
-static int vboxServiceGetLAClientInfo(uint32_t uClientID, PVBOXSERVICELACLIENTINFO pClient)
+static int vgsvcGetLAClientInfo(uint32_t uClientID, PVBOXSERVICELACLIENTINFO pClient)
 {
     AssertReturn(uClientID, VERR_INVALID_PARAMETER);
     AssertPtrReturn(pClient, VERR_INVALID_POINTER);
 
-    int rc = vboxServiceGetLAClientValue(uClientID, "Name", &pClient->pszName,
+    int rc = vgsvcGetLAClientValue(uClientID, "Name", &pClient->pszName,
                                          NULL /* Timestamp */);
     if (RT_SUCCESS(rc))
     {
         char *pszAttach;
-        rc = vboxServiceGetLAClientValue(uClientID, "Attach", &pszAttach,
-                                         &pClient->uAttachedTS);
+        rc = vgsvcGetLAClientValue(uClientID, "Attach", &pszAttach, &pClient->uAttachedTS);
         if (RT_SUCCESS(rc))
         {
             AssertPtr(pszAttach);
-            pClient->fAttached = !RTStrICmp(pszAttach, "1") ? true : false;
+            pClient->fAttached = RTStrICmp(pszAttach, "1") == 0;
 
             RTStrFree(pszAttach);
         }
     }
     if (RT_SUCCESS(rc))
-        rc = vboxServiceGetLAClientValue(uClientID, "Location", &pClient->pszLocation,
-                                         NULL /* Timestamp */);
+        rc = vgsvcGetLAClientValue(uClientID, "Location", &pClient->pszLocation, NULL /* Timestamp */);
     if (RT_SUCCESS(rc))
-        rc = vboxServiceGetLAClientValue(uClientID, "Domain", &pClient->pszDomain,
-                                         NULL /* Timestamp */);
+        rc = vgsvcGetLAClientValue(uClientID, "Domain", &pClient->pszDomain, NULL /* Timestamp */);
     if (RT_SUCCESS(rc))
         pClient->uID = uClientID;
 
@@ -343,7 +378,7 @@ static int vboxServiceGetLAClientInfo(uint32_t uClientID, PVBOXSERVICELACLIENTIN
  *
  * @param   pClient                 Pointer to client information structure to free.
  */
-static void vboxServiceFreeLAClientInfo(PVBOXSERVICELACLIENTINFO pClient)
+static void vgsvcFreeLAClientInfo(PVBOXSERVICELACLIENTINFO pClient)
 {
     if (pClient)
     {
@@ -377,8 +412,8 @@ static void vboxServiceFreeLAClientInfo(PVBOXSERVICELACLIENTINFO pClient)
  * @param   pszValueFormat          Guest property value to set. Pass NULL for deleting
  *                                  the property.
  */
-int vboxServiceUserUpdateF(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser, const char *pszDomain,
-                           const char *pszKey, const char *pszValueFormat, ...)
+int VGSvcUserUpdateF(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser, const char *pszDomain,
+                     const char *pszKey, const char *pszValueFormat, ...)
 {
     AssertPtrReturn(pCache, VERR_INVALID_POINTER);
     AssertPtrReturn(pszUser, VERR_INVALID_POINTER);
@@ -391,11 +426,14 @@ int vboxServiceUserUpdateF(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser,
     char *pszName;
     if (pszDomain)
     {
+/** @todo r=bird: RTStrAPrintf returns -1, not zero on failure!   */
         if (!RTStrAPrintf(&pszName, "%s%s@%s/%s", g_pszPropCacheValUser, pszUser, pszDomain, pszKey))
             rc = VERR_NO_MEMORY;
     }
     else
     {
+/** @todo r=bird: RTStrAPrintf returns -1, not zero on failure! You got it
+ *        right 5 lines further down... */
         if (!RTStrAPrintf(&pszName, "%s%s/%s", g_pszPropCacheValUser, pszUser, pszKey))
             rc = VERR_NO_MEMORY;
     }
@@ -415,13 +453,13 @@ int vboxServiceUserUpdateF(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser,
     }
 
     if (RT_SUCCESS(rc))
-        rc = VBoxServicePropCacheUpdate(pCache, pszName, pszValue);
-    if (rc == VINF_SUCCESS) /* VBoxServicePropCacheUpdate will also return VINF_NO_CHANGE. */
+        rc = VGSvcPropCacheUpdate(pCache, pszName, pszValue);
+    if (rc == VINF_SUCCESS) /* VGSvcPropCacheUpdate will also return VINF_NO_CHANGE. */
     {
         /** @todo Combine updating flags w/ updating the actual value. */
-        rc = VBoxServicePropCacheUpdateEntry(pCache, pszName,
-                                             VBOXSERVICEPROPCACHEFLAG_TEMPORARY | VBOXSERVICEPROPCACHEFLAG_TRANSIENT,
-                                             NULL /* Delete on exit */);
+        rc = VGSvcPropCacheUpdateEntry(pCache, pszName,
+                                       VGSVCPROPCACHE_FLAGS_TEMPORARY | VGSVCPROPCACHE_FLAGS_TRANSIENT,
+                                       NULL /* Delete on exit */);
     }
 
     RTStrFree(pszValue);
@@ -435,27 +473,27 @@ int vboxServiceUserUpdateF(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser,
  *
  * Errors are ignored.
  */
-static void vboxserviceVMInfoWriteFixedProperties(void)
+static void vgsvcVMInfoWriteFixedProperties(void)
 {
     /*
      * First get OS information that won't change.
      */
     char szInfo[256];
     int rc = RTSystemQueryOSInfo(RTSYSOSINFO_PRODUCT, szInfo, sizeof(szInfo));
-    VBoxServiceWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestInfo/OS/Product",
-                          "%s", RT_FAILURE(rc) ? "" : szInfo);
+    VGSvcWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestInfo/OS/Product",
+                    "%s", RT_FAILURE(rc) ? "" : szInfo);
 
     rc = RTSystemQueryOSInfo(RTSYSOSINFO_RELEASE, szInfo, sizeof(szInfo));
-    VBoxServiceWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestInfo/OS/Release",
-                          "%s", RT_FAILURE(rc) ? "" : szInfo);
+    VGSvcWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestInfo/OS/Release",
+                    "%s", RT_FAILURE(rc) ? "" : szInfo);
 
     rc = RTSystemQueryOSInfo(RTSYSOSINFO_VERSION, szInfo, sizeof(szInfo));
-    VBoxServiceWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestInfo/OS/Version",
-                          "%s", RT_FAILURE(rc) ? "" : szInfo);
+    VGSvcWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestInfo/OS/Version",
+                    "%s", RT_FAILURE(rc) ? "" : szInfo);
 
     rc = RTSystemQueryOSInfo(RTSYSOSINFO_SERVICE_PACK, szInfo, sizeof(szInfo));
-    VBoxServiceWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestInfo/OS/ServicePack",
-                          "%s", RT_FAILURE(rc) ? "" : szInfo);
+    VGSvcWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestInfo/OS/ServicePack",
+                    "%s", RT_FAILURE(rc) ? "" : szInfo);
 
     /*
      * Retrieve version information about Guest Additions and installed files (components).
@@ -464,12 +502,12 @@ static void vboxserviceVMInfoWriteFixedProperties(void)
     char *pszAddVerExt;
     char *pszAddRev;
     rc = VbglR3GetAdditionsVersion(&pszAddVer, &pszAddVerExt, &pszAddRev);
-    VBoxServiceWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/Version",
-                          "%s", RT_FAILURE(rc) ? "" : pszAddVer);
-    VBoxServiceWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/VersionExt",
-                          "%s", RT_FAILURE(rc) ? "" : pszAddVerExt);
-    VBoxServiceWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/Revision",
-                          "%s", RT_FAILURE(rc) ? "" : pszAddRev);
+    VGSvcWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/Version",
+                    "%s", RT_FAILURE(rc) ? "" : pszAddVer);
+    VGSvcWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/VersionExt",
+                    "%s", RT_FAILURE(rc) ? "" : pszAddVerExt);
+    VGSvcWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/Revision",
+                    "%s", RT_FAILURE(rc) ? "" : pszAddRev);
     if (RT_SUCCESS(rc))
     {
         RTStrFree(pszAddVer);
@@ -483,46 +521,43 @@ static void vboxserviceVMInfoWriteFixedProperties(void)
      */
     char *pszInstDir;
     rc = VbglR3GetAdditionsInstallationPath(&pszInstDir);
-    VBoxServiceWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/InstallDir",
-                          "%s", RT_FAILURE(rc) ? "" :  pszInstDir);
+    VGSvcWritePropF(g_uVMInfoGuestPropSvcClientID, "/VirtualBox/GuestAdd/InstallDir",
+                    "%s", RT_FAILURE(rc) ? "" :  pszInstDir);
     if (RT_SUCCESS(rc))
         RTStrFree(pszInstDir);
 
-    VBoxServiceWinGetComponentVersions(g_uVMInfoGuestPropSvcClientID);
+    VGSvcVMInfoWinGetComponentVersions(g_uVMInfoGuestPropSvcClientID);
 #endif
 }
 
+
 #if defined(VBOX_WITH_DBUS) && defined(RT_OS_LINUX) /* Not yet for Solaris/FreeBSB. */
 /*
  * Simple wrapper to work around compiler-specific va_list madness.
  */
-static dbus_bool_t vboxService_dbus_message_get_args(DBusMessage *message,
-                                                     DBusError   *error,
-                                                     int first_arg_type,
-                                                     ...)
+static dbus_bool_t vboxService_dbus_message_get_args(DBusMessage *message, DBusError *error, int first_arg_type, ...)
 {
     va_list va;
     va_start(va, first_arg_type);
-    dbus_bool_t ret = dbus_message_get_args_valist(message, error,
-                                                   first_arg_type, va);
+    dbus_bool_t ret = dbus_message_get_args_valist(message, error, first_arg_type, va);
     va_end(va);
     return ret;
 }
 #endif
 
+
 /**
  * Provide information about active users.
  */
-static int vboxserviceVMInfoWriteUsers(void)
+static int vgsvcVMInfoWriteUsers(void)
 {
-    int rc = VINF_SUCCESS;
+    int rc;
     char *pszUserList = NULL;
     uint32_t cUsersInList = 0;
 
 #ifdef RT_OS_WINDOWS
 # ifndef TARGET_NT4
-    rc = VBoxServiceVMInfoWinWriteUsers(&g_VMInfoPropCache,
-                                        &pszUserList, &cUsersInList);
+    rc = VGSvcVMInfoWinWriteUsers(&g_VMInfoPropCache, &pszUserList, &cUsersInList);
 # else
     rc = VERR_NOT_IMPLEMENTED;
 # endif
@@ -548,7 +583,9 @@ static int vboxserviceVMInfoWriteUsers(void)
 
     /* Allocate a first array to hold 32 users max. */
     char **papszUsers = (char **)RTMemAllocZ(cListSize * sizeof(char *));
-    if (!papszUsers)
+    if (papszUsers)
+        rc = VINF_SUCCESS;
+    else
         rc = VERR_NO_MEMORY;
 
     /* Process all entries in the utmp file.
@@ -557,11 +594,10 @@ static int vboxserviceVMInfoWriteUsers(void)
            && RT_SUCCESS(rc))
     {
 # ifdef RT_OS_DARWIN /* No ut_user->ut_session on Darwin */
-        VBoxServiceVerbose(4, "Found entry \"%s\" (type: %d, PID: %RU32)\n",
-                           ut_user->ut_user, ut_user->ut_type, ut_user->ut_pid);
+        VGSvcVerbose(4, "Found entry '%s' (type: %d, PID: %RU32)\n", ut_user->ut_user, ut_user->ut_type, ut_user->ut_pid);
 # else
-        VBoxServiceVerbose(4, "Found entry \"%s\" (type: %d, PID: %RU32, session: %RU32)\n",
-                           ut_user->ut_user, ut_user->ut_type, ut_user->ut_pid, ut_user->ut_session);
+        VGSvcVerbose(4, "Found entry '%s' (type: %d, PID: %RU32, session: %RU32)\n",
+                     ut_user->ut_user, ut_user->ut_type, ut_user->ut_pid, ut_user->ut_session);
 # endif
         if (cUsersInList > cListSize)
         {
@@ -581,8 +617,7 @@ static int vboxserviceVMInfoWriteUsers(void)
 
             if (!fFound)
             {
-                VBoxServiceVerbose(4, "Adding user \"%s\" (type: %d) to list\n",
-                                   ut_user->ut_user, ut_user->ut_type);
+                VGSvcVerbose(4, "Adding user '%s' (type: %d) to list\n", ut_user->ut_user, ut_user->ut_type);
 
                 rc = RTStrDupEx(&papszUsers[cUsersInList], (const char *)ut_user->ut_user);
                 if (RT_FAILURE(rc))
@@ -601,7 +636,7 @@ static int vboxserviceVMInfoWriteUsers(void)
     if (RT_SUCCESS(rc2))
     {
         /* Handle desktop sessions using ConsoleKit. */
-        VBoxServiceVerbose(4, "Checking ConsoleKit sessions ...\n");
+        VGSvcVerbose(4, "Checking ConsoleKit sessions ...\n");
         fHaveLibDbus = true;
         dbus_error_init(&dbErr);
         pConnection = dbus_bus_get(DBUS_BUS_SYSTEM, &dbErr);
@@ -611,12 +646,13 @@ static int vboxserviceVMInfoWriteUsers(void)
         && !dbus_error_is_set(&dbErr))
     {
         /* Get all available sessions. */
+/** @todo r=bird: What's the point of hardcoding things here when we've taken the pain of defining CK_XXX constants at the top of the file (or vice versa)? */
         DBusMessage *pMsgSessions = dbus_message_new_method_call("org.freedesktop.ConsoleKit",
                                                                  "/org/freedesktop/ConsoleKit/Manager",
                                                                  "org.freedesktop.ConsoleKit.Manager",
                                                                  "GetSessions");
         if (   pMsgSessions
-            && (dbus_message_get_type(pMsgSessions) == DBUS_MESSAGE_TYPE_METHOD_CALL))
+            && dbus_message_get_type(pMsgSessions) == DBUS_MESSAGE_TYPE_METHOD_CALL)
         {
             DBusMessage *pReplySessions = dbus_connection_send_with_reply_and_block(pConnection,
                                                                                     pMsgSessions, 30 * 1000 /* 30s timeout */,
@@ -624,19 +660,19 @@ static int vboxserviceVMInfoWriteUsers(void)
             if (   pReplySessions
                 && !dbus_error_is_set(&dbErr))
             {
-                char **ppszSessions; int cSessions;
-                if (   (dbus_message_get_type(pMsgSessions) == DBUS_MESSAGE_TYPE_METHOD_CALL)
+                char **ppszSessions;
+                int cSessions;
+                if (   dbus_message_get_type(pMsgSessions) == DBUS_MESSAGE_TYPE_METHOD_CALL
                     && vboxService_dbus_message_get_args(pReplySessions, &dbErr, DBUS_TYPE_ARRAY,
                                                          DBUS_TYPE_OBJECT_PATH, &ppszSessions, &cSessions,
                                                          DBUS_TYPE_INVALID /* Termination */))
                 {
-                    VBoxServiceVerbose(4, "ConsoleKit: retrieved %RU16 session(s)\n", cSessions);
+                    VGSvcVerbose(4, "ConsoleKit: retrieved %RU16 session(s)\n", cSessions);
 
                     char **ppszCurSession = ppszSessions;
-                    for (ppszCurSession;
-                         ppszCurSession && *ppszCurSession; ppszCurSession++)
+                    for (ppszCurSession; ppszCurSession && *ppszCurSession; ppszCurSession++)
                     {
-                        VBoxServiceVerbose(4, "ConsoleKit: processing session '%s' ...\n", *ppszCurSession);
+                        VGSvcVerbose(4, "ConsoleKit: processing session '%s' ...\n", *ppszCurSession);
 
                         /* Only respect active sessions .*/
                         bool fActive = false;
@@ -648,7 +684,8 @@ static int vboxserviceVMInfoWriteUsers(void)
                             && dbus_message_get_type(pMsgSessionActive) == DBUS_MESSAGE_TYPE_METHOD_CALL)
                         {
                             DBusMessage *pReplySessionActive = dbus_connection_send_with_reply_and_block(pConnection,
-                                                                                                         pMsgSessionActive, 30 * 1000 /* 30s timeout */,
+                                                                                                         pMsgSessionActive,
+                                                                                                         30 * 1000 /*sec*/,
                                                                                                          &dbErr);
                             if (   pReplySessionActive
                                 && !dbus_error_is_set(&dbErr))
@@ -671,7 +708,7 @@ static int vboxserviceVMInfoWriteUsers(void)
                                 dbus_message_unref(pMsgSessionActive);
                         }
 
-                        VBoxServiceVerbose(4, "ConsoleKit: session '%s' is %s\n",
+                        VGSvcVerbose(4, "ConsoleKit: session '%s' is %s\n",
                                            *ppszCurSession, fActive ? "active" : "not active");
 
                         /* *ppszCurSession now contains the object path
@@ -685,7 +722,8 @@ static int vboxserviceVMInfoWriteUsers(void)
                             && dbus_message_get_type(pMsgUnixUser) == DBUS_MESSAGE_TYPE_METHOD_CALL)
                         {
                             DBusMessage *pReplyUnixUser = dbus_connection_send_with_reply_and_block(pConnection,
-                                                                                                    pMsgUnixUser, 30 * 1000 /* 30s timeout */,
+                                                                                                    pMsgUnixUser,
+                                                                                                    30 * 1000 /* 30s timeout */,
                                                                                                     &dbErr);
                             if (   pReplyUnixUser
                                 && !dbus_error_is_set(&dbErr))
@@ -710,8 +748,8 @@ static int vboxserviceVMInfoWriteUsers(void)
                                     {
                                         if (ppwEntry->pw_uid >= uid_min /* Only respect users, not daemons etc. */)
                                         {
-                                            VBoxServiceVerbose(4, "ConsoleKit: session '%s' -> %s (uid: %RU32)\n",
-                                                               *ppszCurSession, ppwEntry->pw_name, uid);
+                                            VGSvcVerbose(4, "ConsoleKit: session '%s' -> %s (uid: %RU32)\n",
+                                                         *ppszCurSession, ppwEntry->pw_name, uid);
 
                                             bool fFound = false;
                                             for (uint32_t i = 0; i < cUsersInList && !fFound; i++)
@@ -719,8 +757,7 @@ static int vboxserviceVMInfoWriteUsers(void)
 
                                             if (!fFound)
                                             {
-                                                VBoxServiceVerbose(4, "ConsoleKit: adding user \"%s\" to list\n",
-                                                                   ppwEntry->pw_name);
+                                                VGSvcVerbose(4, "ConsoleKit: adding user '%s' to list\n", ppwEntry->pw_name);
 
                                                 rc = RTStrDupEx(&papszUsers[cUsersInList], (const char *)ppwEntry->pw_name);
                                                 if (RT_FAILURE(rc))
@@ -731,7 +768,7 @@ static int vboxserviceVMInfoWriteUsers(void)
                                         /* else silently ignore the user */
                                     }
                                     else
-                                        VBoxServiceError("ConsoleKit: unable to lookup user name for uid=%RU32\n", uid);
+                                        VGSvcError("ConsoleKit: unable to lookup user name for uid=%RU32\n", uid);
                                 }
                                 else
                                     AssertMsgFailed(("ConsoleKit: GetUnixUser returned a wrong argument type\n"));
@@ -746,9 +783,9 @@ static int vboxserviceVMInfoWriteUsers(void)
                             if (s_iBitchedAboutConsoleKit < 1)
                             {
                                 s_iBitchedAboutConsoleKit++;
-                                VBoxServiceError("ConsoleKit: unable to retrieve user for session '%s' (msg type=%d): %s\n",
-                                                 *ppszCurSession, dbus_message_get_type(pMsgUnixUser),
-                                                 dbus_error_is_set(&dbErr) ? dbErr.message : "No error information available");
+                                VGSvcError("ConsoleKit: unable to retrieve user for session '%s' (msg type=%d): %s\n",
+                                           *ppszCurSession, dbus_message_get_type(pMsgUnixUser),
+                                           dbus_error_is_set(&dbErr) ? dbErr.message : "No error information available");
                             }
                         }
 
@@ -759,11 +796,9 @@ static int vboxserviceVMInfoWriteUsers(void)
                     dbus_free_string_array(ppszSessions);
                 }
                 else
-                {
-                    VBoxServiceError("ConsoleKit: unable to retrieve session parameters (msg type=%d): %s\n",
-                                     dbus_message_get_type(pMsgSessions),
-                                     dbus_error_is_set(&dbErr) ? dbErr.message : "No error information available");
-                }
+                    VGSvcError("ConsoleKit: unable to retrieve session parameters (msg type=%d): %s\n",
+                               dbus_message_get_type(pMsgSessions),
+                               dbus_error_is_set(&dbErr) ? dbErr.message : "No error information available");
                 dbus_message_unref(pReplySessions);
             }
 
@@ -779,9 +814,9 @@ static int vboxserviceVMInfoWriteUsers(void)
             if (s_iBitchedAboutConsoleKit < 3)
             {
                 s_iBitchedAboutConsoleKit++;
-                VBoxServiceError("Unable to invoke ConsoleKit (%d/3) -- maybe not installed / used? Error: %s\n",
-                                 s_iBitchedAboutConsoleKit,
-                                 dbus_error_is_set(&dbErr) ? dbErr.message : "No error information available");
+                VGSvcError("Unable to invoke ConsoleKit (%d/3) -- maybe not installed / used? Error: %s\n",
+                           s_iBitchedAboutConsoleKit,
+                           dbus_error_is_set(&dbErr) ? dbErr.message : "No error information available");
             }
         }
 
@@ -794,8 +829,8 @@ static int vboxserviceVMInfoWriteUsers(void)
         if (s_iBitchedAboutDBus < 3)
         {
             s_iBitchedAboutDBus++;
-            VBoxServiceError("Unable to connect to system D-Bus (%d/3): %s\n", s_iBitchedAboutDBus,
-                             fHaveLibDbus && dbus_error_is_set(&dbErr) ? dbErr.message : "D-Bus not installed");
+            VGSvcError("Unable to connect to system D-Bus (%d/3): %s\n", s_iBitchedAboutDBus,
+                       fHaveLibDbus && dbus_error_is_set(&dbErr) ? dbErr.message : "D-Bus not installed");
         }
     }
 
@@ -810,10 +845,8 @@ static int vboxserviceVMInfoWriteUsers(void)
     /* Calc the string length. */
     size_t cchUserList = 0;
     if (RT_SUCCESS(rc))
-    {
         for (uint32_t i = 0; i < cUsersInList; i++)
             cchUserList += (i != 0) + strlen(papszUsers[i]);
-    }
 
     /* Build the user list. */
     if (cchUserList > 0)
@@ -845,18 +878,20 @@ static int vboxserviceVMInfoWriteUsers(void)
 
     Assert(RT_FAILURE(rc) || cUsersInList == 0 || (pszUserList && *pszUserList));
 
-    /* If the user enumeration above failed, reset the user count to 0 except
+    /*
+     * If the user enumeration above failed, reset the user count to 0 except
      * we didn't have enough memory anymore. In that case we want to preserve
      * the previous user count in order to not confuse third party tools which
-     * rely on that count. */
+     * rely on that count.
+     */
     if (RT_FAILURE(rc))
     {
         if (rc == VERR_NO_MEMORY)
         {
             static int s_iVMInfoBitchedOOM = 0;
             if (s_iVMInfoBitchedOOM++ < 3)
-                VBoxServiceVerbose(0, "Warning: Not enough memory available to enumerate users! Keeping old value (%RU32)\n",
-                                   g_cVMInfoLoggedInUsers);
+                VGSvcVerbose(0, "Warning: Not enough memory available to enumerate users! Keeping old value (%RU32)\n",
+                             g_cVMInfoLoggedInUsers);
             cUsersInList = g_cVMInfoLoggedInUsers;
         }
         else
@@ -865,32 +900,32 @@ static int vboxserviceVMInfoWriteUsers(void)
     else /* Preserve logged in users count. */
         g_cVMInfoLoggedInUsers = cUsersInList;
 
-    VBoxServiceVerbose(4, "cUsersInList=%RU32, pszUserList=%s, rc=%Rrc\n",
-                       cUsersInList, pszUserList ? pszUserList : "<NULL>", rc);
+    VGSvcVerbose(4, "cUsersInList=%RU32, pszUserList=%s, rc=%Rrc\n", cUsersInList, pszUserList ? pszUserList : "<NULL>", rc);
 
     if (pszUserList)
     {
         AssertMsg(cUsersInList, ("pszUserList contains users whereas cUsersInList is 0\n"));
-        rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsersList, "%s", pszUserList);
+        rc = VGSvcPropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsersList, "%s", pszUserList);
     }
     else
-        rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsersList, NULL);
+        rc = VGSvcPropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsersList, NULL);
     if (RT_FAILURE(rc))
-        VBoxServiceError("Error writing logged in users list, rc=%Rrc\n", rc);
+        VGSvcError("Error writing logged in users list, rc=%Rrc\n", rc);
 
-    rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsers, "%RU32", cUsersInList);
+    rc = VGSvcPropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValLoggedInUsers, "%RU32", cUsersInList);
     if (RT_FAILURE(rc))
-        VBoxServiceError("Error writing logged in users count, rc=%Rrc\n", rc);
+        VGSvcError("Error writing logged in users count, rc=%Rrc\n", rc);
 
-    rc = VBoxServicePropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValNoLoggedInUsers,
-                                    cUsersInList == 0 ? "true" : "false");
+/** @todo r=bird: What's this 'beacon' nonsense here?  It's _not_ defined with
+ *        the VGSVCPROPCACHE_FLAGS_ALWAYS_UPDATE flag set!!  */
+    rc = VGSvcPropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValNoLoggedInUsers, cUsersInList == 0 ? "true" : "false");
     if (RT_FAILURE(rc))
-        VBoxServiceError("Error writing no logged in users beacon, rc=%Rrc\n", rc);
+        VGSvcError("Error writing no logged in users beacon, rc=%Rrc\n", rc);
 
     if (pszUserList)
         RTStrFree(pszUserList);
 
-    VBoxServiceVerbose(4, "Writing users returned with rc=%Rrc\n", rc);
+    VGSvcVerbose(4, "Writing users returned with rc=%Rrc\n", rc);
     return rc;
 }
 
@@ -898,7 +933,7 @@ static int vboxserviceVMInfoWriteUsers(void)
 /**
  * Provide information about the guest network.
  */
-static int vboxserviceVMInfoWriteNetwork(void)
+static int vgsvcVMInfoWriteNetwork(void)
 {
     int         rc = VINF_SUCCESS;
     uint32_t    cIfsReported = 0;
@@ -912,7 +947,7 @@ static int vboxserviceVMInfoWriteNetwork(void)
     pAdpInfo = (IP_ADAPTER_INFO *)RTMemAlloc(cbAdpInfo);
     if (!pAdpInfo)
     {
-        VBoxServiceError("VMInfo/Network: Failed to allocate IP_ADAPTER_INFO\n");
+        VGSvcError("VMInfo/Network: Failed to allocate IP_ADAPTER_INFO\n");
         return VERR_NO_MEMORY;
     }
     DWORD dwRet = GetAdaptersInfo(pAdpInfo, &cbAdpInfo);
@@ -927,7 +962,7 @@ static int vboxserviceVMInfoWriteNetwork(void)
     }
     else if (dwRet == ERROR_NO_DATA)
     {
-        VBoxServiceVerbose(3, "VMInfo/Network: No network adapters available\n");
+        VGSvcVerbose(3, "VMInfo/Network: No network adapters available\n");
 
         /* If no network adapters available / present in the
          * system we pretend success to not bail out too early. */
@@ -938,7 +973,7 @@ static int vboxserviceVMInfoWriteNetwork(void)
     {
         if (pAdpInfo)
             RTMemFree(pAdpInfo);
-        VBoxServiceError("VMInfo/Network: Failed to get adapter info: Error %d\n", dwRet);
+        VGSvcError("VMInfo/Network: Failed to get adapter info: Error %d\n", dwRet);
         return RTErrConvertFromWin32(dwRet);
     }
 # endif /* !TARGET_NT4 */
@@ -951,11 +986,11 @@ static int vboxserviceVMInfoWriteNetwork(void)
          * on NT4 due to start up when not connected shares dialogs pop up. */
         if (WSAENETDOWN == wsaErr)
         {
-            VBoxServiceVerbose(0, "VMInfo/Network: Network is not up yet.\n");
+            VGSvcVerbose(0, "VMInfo/Network: Network is not up yet.\n");
             wsaErr = VINF_SUCCESS;
         }
         else
-            VBoxServiceError("VMInfo/Network: Failed to get a socket: Error %d\n", wsaErr);
+            VGSvcError("VMInfo/Network: Failed to get a socket: Error %d\n", wsaErr);
         if (pAdpInfo)
             RTMemFree(pAdpInfo);
         return RTErrConvertFromWin32(wsaErr);
@@ -992,7 +1027,7 @@ static int vboxserviceVMInfoWriteNetwork(void)
                     NULL)                /* pCompletionRoutine */
         == SOCKET_ERROR)
     {
-        VBoxServiceError("VMInfo/Network: Failed to WSAIoctl() on socket: Error: %d\n", WSAGetLastError());
+        VGSvcError("VMInfo/Network: Failed to WSAIoctl() on socket: Error: %d\n", WSAGetLastError());
         if (pAdpInfo)
             RTMemFree(pAdpInfo);
         return RTErrConvertFromWin32(WSAGetLastError());
@@ -1012,18 +1047,18 @@ static int vboxserviceVMInfoWriteNetwork(void)
         char szIp[32];
         RTStrPrintf(szIp, sizeof(szIp), "%s", inet_ntoa(pAddress->sin_addr));
         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/IP", cIfsReported);
-        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szIp);
+        VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szIp);
 
         pAddress = (sockaddr_in *) & (aInterfaces[i].iiBroadcastAddress);
         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/Broadcast", cIfsReported);
-        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
+        VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
 
         pAddress = (sockaddr_in *)&(aInterfaces[i].iiNetmask);
         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/Netmask", cIfsReported);
-        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
+        VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
 
         RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/Status", cIfsReported);
-        VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, nFlags & IFF_UP ? "Up" : "Down");
+        VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, nFlags & IFF_UP ? "Up" : "Down");
 
 # ifndef TARGET_NT4
         IP_ADAPTER_INFO *pAdp;
@@ -1038,10 +1073,10 @@ static int vboxserviceVMInfoWriteNetwork(void)
             RTStrPrintf(szMac, sizeof(szMac), "%02X%02X%02X%02X%02X%02X",
                         pAdp->Address[0], pAdp->Address[1], pAdp->Address[2],
                         pAdp->Address[3], pAdp->Address[4], pAdp->Address[5]);
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szMac);
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szMac);
         }
         else
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, NULL);
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, NULL);
 # endif /* !TARGET_NT4 */
 
         cIfsReported++;
@@ -1063,7 +1098,7 @@ static int vboxserviceVMInfoWriteNetwork(void)
     if (rc < 0)
     {
         rc = RTErrConvertFromErrno(errno);
-        VBoxServiceError("VMInfo/Network: Failed to get all interfaces: Error %Rrc\n");
+        VGSvcError("VMInfo/Network: Failed to get all interfaces: Error %Rrc\n");
         return rc;
     }
 
@@ -1083,19 +1118,19 @@ static int vboxserviceVMInfoWriteNetwork(void)
             getnameinfo(pIfCurr->ifa_addr, sizeof(struct sockaddr_in),
                         szInetAddr, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
             RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/IP", cIfsReported);
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szInetAddr);
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szInetAddr);
 
             memset(szInetAddr, 0, NI_MAXHOST);
             getnameinfo(pIfCurr->ifa_broadaddr, sizeof(struct sockaddr_in),
                         szInetAddr, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
             RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/Broadcast", cIfsReported);
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szInetAddr);
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szInetAddr);
 
             memset(szInetAddr, 0, NI_MAXHOST);
             getnameinfo(pIfCurr->ifa_netmask, sizeof(struct sockaddr_in),
                         szInetAddr, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
             RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/V4/Netmask", cIfsReported);
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szInetAddr);
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szInetAddr);
 
             /* Search for the AF_LINK interface of the current AF_INET one and get the mac. */
             for (struct ifaddrs *pIfLinkCurr = pIfHead; pIfLinkCurr; pIfLinkCurr = pIfLinkCurr->ifa_next)
@@ -1112,13 +1147,13 @@ static int vboxserviceVMInfoWriteNetwork(void)
                     RTStrPrintf(szMac, sizeof(szMac), "%02X%02X%02X%02X%02X%02X",
                                 pu8Mac[0], pu8Mac[1], pu8Mac[2], pu8Mac[3],  pu8Mac[4], pu8Mac[5]);
                     RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/MAC", cIfsReported);
-                    VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szMac);
+                    VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", szMac);
                     break;
                 }
             }
 
             RTStrPrintf(szPropPath, sizeof(szPropPath), "/VirtualBox/GuestInfo/Net/%RU32/Status", cIfsReported);
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, pIfCurr->ifa_flags & IFF_UP ? "Up" : "Down");
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, pIfCurr->ifa_flags & IFF_UP ? "Up" : "Down");
 
             cIfsReported++;
         }
@@ -1138,7 +1173,7 @@ static int vboxserviceVMInfoWriteNetwork(void)
     if (sd < 0)
     {
         rc = RTErrConvertFromErrno(errno);
-        VBoxServiceError("VMInfo/Network: Failed to get a socket: Error %Rrc\n", rc);
+        VGSvcError("VMInfo/Network: Failed to get a socket: Error %Rrc\n", rc);
         return rc;
     }
 
@@ -1181,7 +1216,7 @@ static int vboxserviceVMInfoWriteNetwork(void)
     {
         close(sd);
         RTMemTmpFree(pchBuf);
-        VBoxServiceError("VMInfo/Network: Error doing SIOCGIFCONF (cbBuf=%d): %Rrc\n", cbBuf, rc);
+        VGSvcError("VMInfo/Network: Error doing SIOCGIFCONF (cbBuf=%d): %Rrc\n", cbBuf, rc);
         return rc;
     }
 
@@ -1236,7 +1271,7 @@ static int vboxserviceVMInfoWriteNetwork(void)
             if (ioctl(sd, SIOCGIFFLAGS, &IfReqTmp) < 0)
             {
                 rc = RTErrConvertFromErrno(errno);
-                VBoxServiceError("VMInfo/Network: Failed to ioctl(SIOCGIFFLAGS,%s) on socket: Error %Rrc\n", pCur->ifr_name, rc);
+                VGSvcError("VMInfo/Network: Failed to ioctl(SIOCGIFFLAGS,%s) on socket: Error %Rrc\n", pCur->ifr_name, rc);
                 break;
             }
             fIfUp = !!(IfReqTmp.ifr_flags & IFF_UP);
@@ -1249,26 +1284,26 @@ static int vboxserviceVMInfoWriteNetwork(void)
 
             sockaddr_in *pAddress = (sockaddr_in *)&pCur->ifr_addr;
             strcpy(&szPropPath[offSubProp], "/V4/IP");
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
 
             /* Get the broadcast address. */
             IfReqTmp = *pCur;
             if (ioctl(sd, SIOCGIFBRDADDR, &IfReqTmp) < 0)
             {
                 rc = RTErrConvertFromErrno(errno);
-                VBoxServiceError("VMInfo/Network: Failed to ioctl(SIOCGIFBRDADDR) on socket: Error %Rrc\n", rc);
+                VGSvcError("VMInfo/Network: Failed to ioctl(SIOCGIFBRDADDR) on socket: Error %Rrc\n", rc);
                 break;
             }
             pAddress = (sockaddr_in *)&IfReqTmp.ifr_broadaddr;
             strcpy(&szPropPath[offSubProp], "/V4/Broadcast");
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
 
             /* Get the net mask. */
             IfReqTmp = *pCur;
             if (ioctl(sd, SIOCGIFNETMASK, &IfReqTmp) < 0)
             {
                 rc = RTErrConvertFromErrno(errno);
-                VBoxServiceError("VMInfo/Network: Failed to ioctl(SIOCGIFNETMASK) on socket: Error %Rrc\n", rc);
+                VGSvcError("VMInfo/Network: Failed to ioctl(SIOCGIFNETMASK) on socket: Error %Rrc\n", rc);
                 break;
             }
 # if defined(RT_OS_OS2) || defined(RT_OS_SOLARIS)
@@ -1277,7 +1312,7 @@ static int vboxserviceVMInfoWriteNetwork(void)
             pAddress = (sockaddr_in *)&IfReqTmp.ifr_netmask;
 # endif
             strcpy(&szPropPath[offSubProp], "/V4/Netmask");
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%s", inet_ntoa(pAddress->sin_addr));
 
 # if defined(RT_OS_SOLARIS)
             /*
@@ -1303,13 +1338,13 @@ static int vboxserviceVMInfoWriteNetwork(void)
                 else
                 {
                     rc = RTErrConvertFromErrno(errno);
-                    VBoxServiceError("VMInfo/Network: failed to ioctl(SIOCGARP) on socket: Error %Rrc\n", rc);
+                    VGSvcError("VMInfo/Network: failed to ioctl(SIOCGARP) on socket: Error %Rrc\n", rc);
                     break;
                 }
             }
             else
             {
-                VBoxServiceVerbose(2, "VMInfo/Network: Interface \"%s\" has no assigned IP address, skipping ...\n", pCur->ifr_name);
+                VGSvcVerbose(2, "VMInfo/Network: Interface '%s' has no assigned IP address, skipping ...\n", pCur->ifr_name);
                 continue;
             }
 # elif defined(RT_OS_OS2)
@@ -1326,24 +1361,24 @@ static int vboxserviceVMInfoWriteNetwork(void)
             if (ioctl(sd, SIOCGIFHWADDR, &IfReqTmp) < 0)
             {
                 rc = RTErrConvertFromErrno(errno);
-                VBoxServiceError("VMInfo/Network: Failed to ioctl(SIOCGIFHWADDR) on socket: Error %Rrc\n", rc);
+                VGSvcError("VMInfo/Network: Failed to ioctl(SIOCGIFHWADDR) on socket: Error %Rrc\n", rc);
                 break;
             }
             RTMAC IfMac = *(PRTMAC)&IfReqTmp.ifr_hwaddr.sa_data[0];
 # endif
             strcpy(&szPropPath[offSubProp], "/MAC");
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%02X%02X%02X%02X%02X%02X",
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%02X%02X%02X%02X%02X%02X",
                                        IfMac.au8[0], IfMac.au8[1], IfMac.au8[2], IfMac.au8[3], IfMac.au8[4], IfMac.au8[5]);
 
             strcpy(&szPropPath[offSubProp], "/Status");
-            VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, fIfUp ? "Up" : "Down");
+            VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, fIfUp ? "Up" : "Down");
 
             /* The name. */
             int rc2 = RTStrValidateEncodingEx(pCur->ifr_name, sizeof(pCur->ifr_name), 0);
             if (RT_SUCCESS(rc2))
             {
                 strcpy(&szPropPath[offSubProp], "/Name");
-                VBoxServicePropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%.*s", sizeof(pCur->ifr_name), pCur->ifr_name);
+                VGSvcPropCacheUpdate(&g_VMInfoPropCache, szPropPath, "%.*s", sizeof(pCur->ifr_name), pCur->ifr_name);
             }
 
             cIfsReported++;
@@ -1359,7 +1394,7 @@ static int vboxserviceVMInfoWriteNetwork(void)
     RTMemTmpFree(pchBuf);
     close(sd);
     if (RT_FAILURE(rc))
-        VBoxServiceError("VMInfo/Network: Network enumeration for interface %RU32 failed with error %Rrc\n", cIfsReported, rc);
+        VGSvcError("VMInfo/Network: Network enumeration for interface %RU32 failed with error %Rrc\n", cIfsReported, rc);
 
 #endif /* !RT_OS_WINDOWS */
 
@@ -1371,25 +1406,25 @@ static int vboxserviceVMInfoWriteNetwork(void)
 
     /* Get former count. */
     uint32_t cIfsReportedOld;
-    rc = VBoxServiceReadPropUInt32(g_uVMInfoGuestPropSvcClientID, g_pszPropCacheValNetCount, &cIfsReportedOld,
-                                   0 /* Min */, UINT32_MAX /* Max */);
+    rc = VGSvcReadPropUInt32(g_uVMInfoGuestPropSvcClientID, g_pszPropCacheValNetCount, &cIfsReportedOld,
+                             0 /* Min */, UINT32_MAX /* Max */);
     if (   RT_SUCCESS(rc)
         && cIfsReportedOld > cIfsReported) /* Are some ifaces not around anymore? */
     {
-        VBoxServiceVerbose(3, "VMInfo/Network: Stale interface data detected (%RU32 old vs. %RU32 current)\n",
-                           cIfsReportedOld, cIfsReported);
+        VGSvcVerbose(3, "VMInfo/Network: Stale interface data detected (%RU32 old vs. %RU32 current)\n",
+                     cIfsReportedOld, cIfsReported);
 
         uint32_t uIfaceDeleteIdx = cIfsReported;
         do
         {
-            VBoxServiceVerbose(3, "VMInfo/Network: Deleting stale data of interface %d ...\n", uIfaceDeleteIdx);
-            rc = VBoxServicePropCacheUpdateByPath(&g_VMInfoPropCache, NULL /* Value, delete */, 0 /* Flags */, "/VirtualBox/GuestInfo/Net/%RU32", uIfaceDeleteIdx++);
+            VGSvcVerbose(3, "VMInfo/Network: Deleting stale data of interface %d ...\n", uIfaceDeleteIdx);
+            rc = VGSvcPropCacheUpdateByPath(&g_VMInfoPropCache, NULL /* Value, delete */, 0 /* Flags */, "/VirtualBox/GuestInfo/Net/%RU32", uIfaceDeleteIdx++);
         } while (RT_SUCCESS(rc));
     }
     else if (   RT_FAILURE(rc)
              && rc != VERR_NOT_FOUND)
     {
-        VBoxServiceError("VMInfo/Network: Failed retrieving old network interfaces count with error %Rrc\n", rc);
+        VGSvcError("VMInfo/Network: Failed retrieving old network interfaces count with error %Rrc\n", rc);
     }
 #endif
 
@@ -1398,16 +1433,17 @@ static int vboxserviceVMInfoWriteNetwork(void)
      * does not change. If this property is missing, the host assumes that all other GuestInfo
      * properties are no longer valid.
      */
-    VBoxServicePropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValNetCount, "%RU32",
-                               cIfsReported);
+    VGSvcPropCacheUpdate(&g_VMInfoPropCache, g_pszPropCacheValNetCount, "%RU32", cIfsReported);
 
     /* Don't fail here; just report everything we got. */
     return VINF_SUCCESS;
 }
 
 
-/** @copydoc VBOXSERVICE::pfnWorker */
-DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnWorker}
+ */
+static DECLCALLBACK(int) vbsvcVMInfoWorker(bool volatile *pfShutdown)
 {
     int rc;
 
@@ -1421,24 +1457,24 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown)
     /* Required for network information (must be called per thread). */
     WSADATA wsaData;
     if (WSAStartup(MAKEWORD(2, 2), &wsaData))
-        VBoxServiceError("VMInfo/Network: WSAStartup failed! Error: %Rrc\n", RTErrConvertFromWin32(WSAGetLastError()));
+        VGSvcError("VMInfo/Network: WSAStartup failed! Error: %Rrc\n", RTErrConvertFromWin32(WSAGetLastError()));
 #endif /* RT_OS_WINDOWS */
 
     /*
      * Write the fixed properties first.
      */
-    vboxserviceVMInfoWriteFixedProperties();
+    vgsvcVMInfoWriteFixedProperties();
 
     /*
      * Now enter the loop retrieving runtime data continuously.
      */
     for (;;)
     {
-        rc = vboxserviceVMInfoWriteUsers();
+        rc = vgsvcVMInfoWriteUsers();
         if (RT_FAILURE(rc))
             break;
 
-        rc = vboxserviceVMInfoWriteNetwork();
+        rc = vgsvcVMInfoWriteNetwork();
         if (RT_FAILURE(rc))
             break;
 
@@ -1450,7 +1486,7 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown)
 
         /* Check for new connection. */
         char *pszLAClientID = NULL;
-        int rc2 = VBoxServiceReadHostProp(g_uVMInfoGuestPropSvcClientID, g_pszLAActiveClient, true /* Read only */,
+        int rc2 = VGSvcReadHostProp(g_uVMInfoGuestPropSvcClientID, g_pszLAActiveClient, true /* Read only */,
                                           &pszLAClientID, NULL /* Flags */, NULL /* Timestamp */);
         if (RT_SUCCESS(rc2))
         {
@@ -1462,25 +1498,25 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown)
 
                 /* Peek at "Attach" value to figure out if hotdesking happened. */
                 char *pszAttach = NULL;
-                rc2 = vboxServiceGetLAClientValue(uLAClientID, "Attach", &pszAttach,
+                rc2 = vgsvcGetLAClientValue(uLAClientID, "Attach", &pszAttach,
                                                  &uLAClientAttachedTS);
 
                 if (   RT_SUCCESS(rc2)
                     && (   !g_LAClientAttachedTS
                         || (g_LAClientAttachedTS != uLAClientAttachedTS)))
                 {
-                    vboxServiceFreeLAClientInfo(&g_LAClientInfo);
+                    vgsvcFreeLAClientInfo(&g_LAClientInfo);
 
                     /* Note: There is a race between setting the guest properties by the host and getting them by
                      *       the guest. */
-                    rc2 = vboxServiceGetLAClientInfo(uLAClientID, &g_LAClientInfo);
+                    rc2 = vgsvcGetLAClientInfo(uLAClientID, &g_LAClientInfo);
                     if (RT_SUCCESS(rc2))
                     {
-                        VBoxServiceVerbose(1, "VRDP: Hotdesk client %s with ID=%RU32, Name=%s, Domain=%s\n",
-                                           /* If g_LAClientAttachedTS is 0 this means there already was an active
-                                            * hotdesk session when VBoxService started. */
-                                           !g_LAClientAttachedTS ? "already active" : g_LAClientInfo.fAttached ? "connected" : "disconnected",
-                                           uLAClientID, g_LAClientInfo.pszName, g_LAClientInfo.pszDomain);
+                        VGSvcVerbose(1, "VRDP: Hotdesk client %s with ID=%RU32, Name=%s, Domain=%s\n",
+                                     /* If g_LAClientAttachedTS is 0 this means there already was an active
+                                      * hotdesk session when VBoxService started. */
+                                     !g_LAClientAttachedTS ? "already active" : g_LAClientInfo.fAttached ? "connected" : "disconnected",
+                                     uLAClientID, g_LAClientInfo.pszName, g_LAClientInfo.pszDomain);
 
                         g_LAClientAttachedTS = g_LAClientInfo.uAttachedTS;
 
@@ -1494,20 +1530,19 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown)
                         if (s_iBitchedAboutLAClientInfo < 10)
                         {
                             s_iBitchedAboutLAClientInfo++;
-                            VBoxServiceError("Error getting active location awareness client info, rc=%Rrc\n", rc2);
+                            VGSvcError("Error getting active location awareness client info, rc=%Rrc\n", rc2);
                         }
                     }
                 }
                 else if (RT_FAILURE(rc2))
-                     VBoxServiceError("Error getting attached value of location awareness client %RU32, rc=%Rrc\n",
-                                      uLAClientID, rc2);
+                     VGSvcError("Error getting attached value of location awareness client %RU32, rc=%Rrc\n", uLAClientID, rc2);
                 if (pszAttach)
                     RTStrFree(pszAttach);
             }
             else
             {
-                VBoxServiceVerbose(1, "VRDP: UTTSC disconnected from VRDP server\n");
-                vboxServiceFreeLAClientInfo(&g_LAClientInfo);
+                VGSvcVerbose(1, "VRDP: UTTSC disconnected from VRDP server\n");
+                vgsvcFreeLAClientInfo(&g_LAClientInfo);
             }
 
             RTStrFree(pszLAClientID);
@@ -1519,11 +1554,11 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown)
                 && s_iBitchedAboutLAClient < 3)
             {
                 s_iBitchedAboutLAClient++;
-                VBoxServiceError("VRDP: Querying connected location awareness client failed with rc=%Rrc\n", rc2);
+                VGSvcError("VRDP: Querying connected location awareness client failed with rc=%Rrc\n", rc2);
             }
         }
 
-        VBoxServiceVerbose(3, "VRDP: Handling location awareness done\n");
+        VGSvcVerbose(3, "VRDP: Handling location awareness done\n");
 
         /*
          * Flush all properties if we were restored.
@@ -1532,9 +1567,9 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown)
         VbglR3GetSessionId(&idNewSession);
         if (idNewSession != g_idVMInfoSession)
         {
-            VBoxServiceVerbose(3, "The VM session ID changed, flushing all properties\n");
-            vboxserviceVMInfoWriteFixedProperties();
-            VBoxServicePropCacheFlush(&g_VMInfoPropCache);
+            VGSvcVerbose(3, "The VM session ID changed, flushing all properties\n");
+            vgsvcVMInfoWriteFixedProperties();
+            VGSvcPropCacheFlush(&g_VMInfoPropCache);
             g_idVMInfoSession = idNewSession;
         }
 
@@ -1552,7 +1587,7 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown)
             break;
         if (rc2 != VERR_TIMEOUT && RT_FAILURE(rc2))
         {
-            VBoxServiceError("RTSemEventMultiWait failed; rc2=%Rrc\n", rc2);
+            VGSvcError("RTSemEventMultiWait failed; rc2=%Rrc\n", rc2);
             rc = rc2;
             break;
         }
@@ -1561,7 +1596,7 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown)
             /* Reset event semaphore if it got triggered. */
             rc2 = RTSemEventMultiReset(g_hVMInfoEvent);
             if (RT_FAILURE(rc2))
-                rc2 = VBoxServiceError("RTSemEventMultiReset failed; rc2=%Rrc\n", rc2);
+                rc2 = VGSvcError("RTSemEventMultiReset failed; rc2=%Rrc\n", rc2);
         }
     }
 
@@ -1573,15 +1608,19 @@ DECLCALLBACK(int) VBoxServiceVMInfoWorker(bool volatile *pfShutdown)
 }
 
 
-/** @copydoc VBOXSERVICE::pfnStop */
-static DECLCALLBACK(void) VBoxServiceVMInfoStop(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnStop}
+ */
+static DECLCALLBACK(void) vbsvcVMInfoStop(void)
 {
     RTSemEventMultiSignal(g_hVMInfoEvent);
 }
 
 
-/** @copydoc VBOXSERVICE::pfnTerm */
-static DECLCALLBACK(void) VBoxServiceVMInfoTerm(void)
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnTerm}
+ */
+static DECLCALLBACK(void) vbsvcVMInfoTerm(void)
 {
     if (g_hVMInfoEvent != NIL_RTSEMEVENTMULTI)
     {
@@ -1601,15 +1640,15 @@ static DECLCALLBACK(void) VBoxServiceVMInfoTerm(void)
         int rc = VbglR3GuestPropDelSet(g_uVMInfoGuestPropSvcClientID, &apszPat[0], RT_ELEMENTS(apszPat));
 
         /* Destroy LA client info. */
-        vboxServiceFreeLAClientInfo(&g_LAClientInfo);
+        vgsvcFreeLAClientInfo(&g_LAClientInfo);
 
         /* Destroy property cache. */
-        VBoxServicePropCacheDestroy(&g_VMInfoPropCache);
+        VGSvcPropCacheDestroy(&g_VMInfoPropCache);
 
         /* Disconnect from guest properties service. */
         rc = VbglR3GuestPropDisconnect(g_uVMInfoGuestPropSvcClientID);
         if (RT_FAILURE(rc))
-            VBoxServiceError("Failed to disconnect from guest property service! Error: %Rrc\n", rc);
+            VGSvcError("Failed to disconnect from guest property service! Error: %Rrc\n", rc);
         g_uVMInfoGuestPropSvcClientID = 0;
 
         RTSemEventMultiDestroy(g_hVMInfoEvent);
@@ -1639,11 +1678,11 @@ VBOXSERVICE g_VMInfo =
     "                            is 5000 (5 seconds).\n"
     ,
     /* methods */
-    VBoxServiceVMInfoPreInit,
-    VBoxServiceVMInfoOption,
-    VBoxServiceVMInfoInit,
-    VBoxServiceVMInfoWorker,
-    VBoxServiceVMInfoStop,
-    VBoxServiceVMInfoTerm
+    vbsvcVMInfoPreInit,
+    vbsvcVMInfoOption,
+    vbsvcVMInfoInit,
+    vbsvcVMInfoWorker,
+    vbsvcVMInfoStop,
+    vbsvcVMInfoTerm
 };
 
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.h b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.h
index 286c6b6..b3e125a 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo.h
@@ -18,14 +18,12 @@
 #ifndef ___VBoxServiceVMInfo_h
 #define ___VBoxServiceVMInfo_h
 
-//RT_C_DECLS_BEGIN
 
-extern int vboxServiceUserUpdateF(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser, const char *pszDomain,
-                                  const char *pszKey, const char *pszValueFormat, ...);
+extern int VGSvcUserUpdateF(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser, const char *pszDomain,
+                            const char *pszKey, const char *pszValueFormat, ...);
 
-//RT_C_DECLS_END
 
 extern uint32_t g_uVMInfoUserIdleThresholdMS;
 
-#endif /* ___VBoxServiceVMInfo_h */
+#endif
 
diff --git a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VFSOps.cpp b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VFSOps.cpp
index 3cea005..582f8e0 100644
--- a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VFSOps.cpp
+++ b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VFSOps.cpp
@@ -285,7 +285,7 @@ vboxvfs_mount(struct mount *mp, vnode_t pDev, user_addr_t pUserData, vfs_context
     pMount = vboxvfs_alloc_internal_data(mp, pUserData);
     if (pMount)
     {
-        rc = vboxCallMapFolder(&g_vboxSFClient, pMount->pShareName, &pMount->pMap);
+        rc = VbglR0SfMapFolder(&g_vboxSFClient, pMount->pShareName, &pMount->pMap);
         if (RT_SUCCESS(rc))
         {
             /* Private data should be set before vboxvfs_create_vnode_internal() call
@@ -301,9 +301,8 @@ vboxvfs_mount(struct mount *mp, vnode_t pDev, user_addr_t pUserData, vfs_context
 
             return 0;
         }
-        else
-            PDEBUG("Unable to map shared folder");
 
+        PDEBUG("Unable to map shared folder");
         vboxvfs_destroy_internal_data(&pMount);
     }
     else
@@ -353,18 +352,16 @@ vboxvfs_unmount(struct mount *mp, int fFlags, vfs_context_t pContext)
             {
                 vfs_setfsprivate(mp, NULL);
 
-                rc = vboxCallUnmapFolder(&g_vboxSFClient, &pMount->pMap);
+                rc = VbglR0SfUnmapFolder(&g_vboxSFClient, &pMount->pMap);
                 if (RT_SUCCESS(rc))
                 {
                     vboxvfs_destroy_internal_data(&pMount);
                     PDEBUG("A shared folder has been successfully unmounted");
                     return 0;
                 }
-                else
-                {
-                     PDEBUG("Unable to unmount shared folder");
-                     rc = EPROTO;
-                }
+
+                PDEBUG("Unable to unmount shared folder");
+                rc = EPROTO;
             }
             else
                 PDEBUG("Unable to flush filesystem before unmount, some data might be lost");
@@ -517,8 +514,8 @@ vboxvfs_getattr(struct mount *mp, struct vfs_attr *pAttr, vfs_context_t pContext
     AssertReturn(pMount, EINVAL);
     AssertReturn(pMount->pShareName, EINVAL);
 
-    rc = vboxCallFSInfo(&g_vboxSFClient, &pMount->pMap, 0, SHFL_INFO_GET | SHFL_INFO_VOLUME,
-                            &cbBuffer, (PSHFLDIRINFO)&SHFLVolumeInfo);
+    rc = VbglR0SfFsInfo(&g_vboxSFClient, &pMount->pMap, 0, SHFL_INFO_GET | SHFL_INFO_VOLUME,
+                        &cbBuffer, (PSHFLDIRINFO)&SHFLVolumeInfo);
     AssertReturn(rc == 0, EPROTO);
 
     u32bsize  = (uint32_t)SHFLVolumeInfo.ulBytesPerAllocationUnit;
diff --git a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VNODEOps.cpp b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VNODEOps.cpp
index 6500677..d41e43c 100644
--- a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VNODEOps.cpp
+++ b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-VNODEOps.cpp
@@ -555,7 +555,7 @@ vboxvfs_vnode_readdir(struct vnop_readdir_args *args)
 
     PDEBUG("Exploring VBoxVFS directory (%s), handle (0x%.8X), offset (0x%X), count (%d)", (char *)pVnodeData->pPath->String.utf8, (int)pVnodeData->pHandle, index, uio_iovcnt(uio));
 
-    /* Currently, there is a problem when vboxCallDirInfo() is not able to
+    /* Currently, there is a problem when VbglR0SfDirInfo() is not able to
      * continue retrieve directory content if the same VBoxVFS handle is used.
      * This macro forces to use a new handle in readdir() callback. If enabled,
      * the original handle (obtained in open() callback is ignored). */
@@ -574,18 +574,19 @@ vboxvfs_vnode_readdir(struct vnop_readdir_args *args)
     }
 
 #if 0
-    rc = vboxCallDirInfo(&g_vboxSFClient, &pMount->pMap, Handle, 0, 0, index, &cbInfo, (PSHFLDIRINFO)Info, &cFiles);
+    rc = VbglR0SfDirInfo(&g_vboxSFClient, &pMount->pMap, Handle, 0, 0, index, &cbInfo, (PSHFLDIRINFO)Info, &cFiles);
 #else
     SHFLSTRING *pMask = vboxvfs_construct_shflstring("*", strlen("*"));
     if (pMask)
     {
         for (uint32_t cSkip = 0; (cSkip < index + 1) && (rc == VINF_SUCCESS); cSkip++)
         {
-            //rc = vboxCallDirInfo(&g_vboxSFClient, &pMount->pMap, Handle, 0 /* pMask */, 0 /* SHFL_LIST_RETURN_ONE */, 0, &cbInfo, (PSHFLDIRINFO)Info, &cFiles);
+            //rc = VbglR0SfDirInfo(&g_vboxSFClient, &pMount->pMap, Handle, 0 /* pMask */, 0 /* SHFL_LIST_RETURN_ONE */, 0, &cbInfo, (PSHFLDIRINFO)Info, &cFiles);
 
             uint32_t cbReturned = cbInfo;
-            //rc = vboxCallDirInfo(&g_vboxSFClient, &pMount->pMap, Handle, pMask, SHFL_LIST_RETURN_ONE, 0, &cbReturned, (PSHFLDIRINFO)Info, &cFiles);
-            rc = vboxCallDirInfo(&g_vboxSFClient, &pMount->pMap, Handle, 0, SHFL_LIST_RETURN_ONE, 0, &cbReturned, (PSHFLDIRINFO)Info, &cFiles);
+            //rc = VbglR0SfDirInfo(&g_vboxSFClient, &pMount->pMap, Handle, pMask, SHFL_LIST_RETURN_ONE, 0, &cbReturned, (PSHFLDIRINFO)Info, &cFiles);
+            rc = VbglR0SfDirInfo(&g_vboxSFClient, &pMount->pMap, Handle, 0, SHFL_LIST_RETURN_ONE, 0,
+                                 &cbReturned, (PSHFLDIRINFO)Info, &cFiles);
 
         }
 
@@ -623,7 +624,7 @@ vboxvfs_vnode_readdir(struct vnop_readdir_args *args)
 
         default:
         {
-            PDEBUG("vboxCallDirInfo() for item #%d has failed: %d", (int)index, (int)rc);
+            PDEBUG("VbglR0SfDirInfo() for item #%d has failed: %d", (int)index, (int)rc);
             rc = EINVAL;
             break;
         }
diff --git a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-utils.cpp b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-utils.cpp
index f151d9d..78cab21 100644
--- a/src/VBox/Additions/darwin/vboxfs/VBoxVFS-utils.cpp
+++ b/src/VBox/Additions/darwin/vboxfs/VBoxVFS-utils.cpp
@@ -399,7 +399,7 @@ vboxvfs_open_internal(vboxvfs_mount_t *pMount, PSHFLSTRING pPath, uint32_t fFlag
     parms.Info.cbObject = 0;
     parms.CreateFlags   = fFlags;
 
-    rc = vboxCallCreate(&g_vboxSFClient, &pMount->pMap, pPath, &parms);
+    rc = VbglR0SfCreate(&g_vboxSFClient, &pMount->pMap, pPath, &parms);
     if (RT_SUCCESS(rc))
     {
         *pHandle = parms.Handle;
@@ -424,7 +424,7 @@ int
 vboxvfs_close_internal(vboxvfs_mount_t *pMount, SHFLHANDLE pHandle)
 {
     AssertReturn(pMount, EINVAL);
-    return vboxCallClose(&g_vboxSFClient, &pMount->pMap, pHandle);
+    return VbglR0SfClose(&g_vboxSFClient, &pMount->pMap, pHandle);
 }
 
 /**
@@ -454,11 +454,9 @@ vboxvfs_get_info_internal(mount_t mp, PSHFLSTRING pSHFLDPath, PSHFLFSOBJINFO Inf
     parms.Info.cbObject = 0;
     parms.CreateFlags = SHFL_CF_LOOKUP | SHFL_CF_ACT_FAIL_IF_NEW;
 
-    rc = vboxCallCreate(&g_vboxSFClient, &pMount->pMap, pSHFLDPath, &parms);
+    rc = VbglR0SfCreate(&g_vboxSFClient, &pMount->pMap, pSHFLDPath, &parms);
     if (rc == 0)
-    {
         *Info = parms.Info;
-    }
 
     return rc;
 }
diff --git a/src/VBox/Additions/darwin/vboxfs/VBoxVFS.cpp b/src/VBox/Additions/darwin/vboxfs/VBoxVFS.cpp
index c9bb212..3f37ea5 100644
--- a/src/VBox/Additions/darwin/vboxfs/VBoxVFS.cpp
+++ b/src/VBox/Additions/darwin/vboxfs/VBoxVFS.cpp
@@ -90,7 +90,7 @@ RT_C_DECLS_END
 /** The number of IOService class instances. */
 static bool volatile        g_fInstantiated = 0;
 /* Global connection to the host service */
-VBSFCLIENT                  g_vboxSFClient;
+VBGLSFCLIENT                  g_vboxSFClient;
 /* VBoxVFS filesystem handle. Needed for FS unregistering. */
 static vfstable_t           g_oVBoxVFSHandle;
 
@@ -104,7 +104,7 @@ static kern_return_t VBoxVFSModuleLoad(struct kmod_info *pKModInfo, void *pvData
 
     /* Initialize the R0 guest library. */
 #if 0
-    rc = vboxInit();
+    rc = VbglR0SfInit();
     if (RT_FAILURE(rc))
         return KERN_FAILURE;
 #endif
@@ -124,11 +124,10 @@ static kern_return_t VBoxVFSModuleUnLoad(struct kmod_info *pKModInfo, void *pvDa
     int rc;
 
 #if 0
-    vboxUninit();
+   VbglR0SfTerminate();
 #endif
 
-    PINFO("VirtualBox " VBOX_VERSION_STRING " shared folders "
-          "driver is unloaded");
+    PINFO("VirtualBox " VBOX_VERSION_STRING " shared folders driver is unloaded");
 
     return KERN_SUCCESS;
 }
@@ -219,15 +218,15 @@ bool org_virtualbox_VBoxVFS::start(IOService *pProvider)
     coreService = waitForCoreService();
     if (coreService)
     {
-        rc = vboxInit();
+        rc = VbglR0SfInit();
         if (RT_SUCCESS(rc))
         {
             /* Connect to the host service. */
-            rc = vboxConnect(&g_vboxSFClient);
+            rc = VbglR0SfConnect(&g_vboxSFClient);
             if (RT_SUCCESS(rc))
             {
                 PINFO("VBox client connected");
-                rc = vboxCallSetUtf8(&g_vboxSFClient);
+                rc = VbglR0SfSetUtf8(&g_vboxSFClient);
                 if (RT_SUCCESS(rc))
                 {
                     rc = VBoxVFSRegisterFilesystem();
@@ -241,15 +240,15 @@ bool org_virtualbox_VBoxVFS::start(IOService *pProvider)
                 }
                 else
                 {
-                    PERROR("vboxCallSetUtf8 failed: rc=%d", rc);
+                    PERROR("VbglR0SfSetUtf8 failed: rc=%d", rc);
                 }
-                vboxDisconnect(&g_vboxSFClient);
+                VbglR0SfDisconnect(&g_vboxSFClient);
             }
             else
             {
                 PERROR("Failed to get connection to host: rc=%d", rc);
             }
-            vboxUninit();
+            VbglR0SfUninit();
         }
         else
         {
@@ -285,10 +284,10 @@ void org_virtualbox_VBoxVFS::stop(IOService *pProvider)
                "shares are unmounted (%d)", rc);
     }
 
-    vboxDisconnect(&g_vboxSFClient);
+    VbglR0SfDisconnect(&g_vboxSFClient);
     PINFO("VBox client disconnected");
 
-    vboxUninit();
+    VbglR0SfTerminate();
     PINFO("Low level uninit done");
 
     coreService->release();
diff --git a/src/VBox/Additions/darwin/vboxfs/vboxvfs.h b/src/VBox/Additions/darwin/vboxfs/vboxvfs.h
index 8cbc7cd..2da3bc0 100644
--- a/src/VBox/Additions/darwin/vboxfs/vboxvfs.h
+++ b/src/VBox/Additions/darwin/vboxfs/vboxvfs.h
@@ -45,20 +45,13 @@
 
 #include <iprt/types.h>
 #undef PVM
-RT_C_DECLS_BEGIN
-#if defined(__cplusplus)
-# undef __cplusplus
-# include "../../common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.h"
-# define __cplusplus
-#else
-# include "../../common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.h"
-#endif
-RT_C_DECLS_END
-
 #include <sys/vnode.h>
 
+#include <VBox/VBoxGuestLibSharedFolders.h>
+
+
 /** Global refernce to host service connection */
-extern VBSFCLIENT g_vboxSFClient;
+extern VBGLSFCLIENT g_vboxSFClient;
 
 /** Private data assigned to each mounted shared folder. Assigned to mp structure. */
 typedef struct vboxvfs_mount_data
diff --git a/src/VBox/Additions/freebsd/vboxvfs/vboxvfs.h b/src/VBox/Additions/freebsd/vboxvfs/vboxvfs.h
index 7c9b8f4..513416f 100644
--- a/src/VBox/Additions/freebsd/vboxvfs/vboxvfs.h
+++ b/src/VBox/Additions/freebsd/vboxvfs/vboxvfs.h
@@ -34,7 +34,7 @@ struct vboxvfs_mount_info {
 
 #ifdef _KERNEL
 
-#include "../../common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.h"
+#include <VBox/VBoxGuestLibSharedFolders.h>
 #include <sys/mount.h>
 #include <sys/vnode.h>
 
@@ -53,7 +53,7 @@ struct vboxvfsmount {
 
 /* structs - stolen from the linux shared module code */
 struct sf_glob_info {
-    VBSFMAP map;
+    VBGLSFMAP map;
 /*    struct nls_table *nls;*/
     int ttl;
     int uid;
diff --git a/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vfsops.c b/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vfsops.c
index 3536f82..6060e36 100644
--- a/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vfsops.c
+++ b/src/VBox/Additions/freebsd/vboxvfs/vboxvfs_vfsops.c
@@ -39,7 +39,7 @@ SYSCTL_NODE(_vfs, OID_AUTO, vboxvfs, CTLFLAG_RW, 0, "VirtualBox shared filesyste
 SYSCTL_INT(_vfs_vboxvfs, OID_AUTO, version, CTLFLAG_RD, &vboxvfs_version, 0, "");
 
 /* global connection to the host service. */
-static VBSFCLIENT g_vboxSFClient;
+static VBGLSFCLIENT g_vboxSFClient;
 
 static vfs_init_t       vboxvfs_init;
 static vfs_uninit_t     vboxvfs_uninit;
@@ -138,13 +138,13 @@ static int vboxvfs_mount(struct mount *mp, struct thread *td)
     pShFlShareName->u16Size   = cbShare + 1;
     memcpy (pShFlShareName->String.utf8, pszShare, cbShare + 1);
 
-    rc = vboxCallMapFolder (&g_vboxSFClient, pShFlShareName, &pShFlGlobalInfo->map);
+    rc = VbglR0SfMapFolder (&g_vboxSFClient, pShFlShareName, &pShFlGlobalInfo->map);
     RTMemFree(pShFlShareName);
 
     if (RT_FAILURE (rc))
     {
         RTMemFree(pShFlGlobalInfo);
-        printf("vboxCallMapFolder failed rc=%d\n", rc);
+        printf("VbglR0SfMapFolder failed rc=%d\n", rc);
         return EPROTO;
     }
 
@@ -169,7 +169,7 @@ static int vboxvfs_unmount(struct mount *mp, int mntflags, struct thread *td)
     int rc;
     int flags = 0;
 
-    rc = vboxCallUnmapFolder(&g_vboxSFClient, &pShFlGlobalInfo->map);
+    rc = VbglR0SfUnmapFolder(&g_vboxSFClient, &pShFlGlobalInfo->map);
     if (RT_FAILURE(rc))
         printf("Failed to unmap shared folder\n");
 
@@ -217,25 +217,25 @@ int vboxvfs_init(struct vfsconf *vfsp)
     int rc;
 
     /* Initialize the R0 guest library. */
-    rc = vboxInit();
+    rc = VbglR0SfInit();
     if (RT_FAILURE(rc))
         return ENXIO;
 
     /* Connect to the host service. */
-    rc = vboxConnect(&g_vboxSFClient);
+    rc = VbglR0SfConnect(&g_vboxSFClient);
     if (RT_FAILURE(rc))
     {
         printf("Failed to get connection to host! rc=%d\n", rc);
-        vboxUninit();
+        VbglR0SfTerm();
         return ENXIO;
     }
 
-    rc = vboxCallSetUtf8 (&g_vboxSFClient);
+    rc = VbglR0SfSetUtf8(&g_vboxSFClient);
     if (RT_FAILURE (rc))
     {
-        printf("vboxCallSetUtf8 failed, rc=%d\n", rc);
-        vboxDisconnect(&g_vboxSFClient);
-        vboxUninit();
+        printf("VbglR0SfSetUtf8 failed, rc=%d\n", rc);
+        VbglR0SfDisconnect(&g_vboxSFClient);
+        VbglR0SfTerm();
         return EPROTO;
     }
 
@@ -246,8 +246,8 @@ int vboxvfs_init(struct vfsconf *vfsp)
 
 int vboxvfs_uninit(struct vfsconf *vfsp)
 {
-    vboxDisconnect(&g_vboxSFClient);
-    vboxUninit();
+    VbglR0SfDisconnect(&g_vboxSFClient);
+    VbglR0SfTerm();
 
     return 0;
 }
diff --git a/src/VBox/Additions/haiku/SharedFolders/Makefile.kmk b/src/VBox/Additions/haiku/SharedFolders/Makefile.kmk
index ad29553..c05f3fb 100644
--- a/src/VBox/Additions/haiku/SharedFolders/Makefile.kmk
+++ b/src/VBox/Additions/haiku/SharedFolders/Makefile.kmk
@@ -66,7 +66,6 @@ vboxsf_DEFS            = \
 	KBUILD_MODNAME=KBUILD_STR\(vboxsf\) \
         KBUILD_BASENAME=KBUILD_STR\(vboxsf\)
 vboxsf_INCS            = \
-	$(PATH_ROOT)/src/VBox/Additions/common/VBoxGuestLib \
 	$(PATH_ROOT)/src/VBox/Additions/common/VBoxGuest \
 	$(PATH_ROOT)/src/VBox/Runtime/r0drv/haiku
 vboxsf_SOURCES         = \
diff --git a/src/VBox/Additions/haiku/SharedFolders/vboxsf.c b/src/VBox/Additions/haiku/SharedFolders/vboxsf.c
index edffcba..a372b8b 100644
--- a/src/VBox/Additions/haiku/SharedFolders/vboxsf.c
+++ b/src/VBox/Additions/haiku/SharedFolders/vboxsf.c
@@ -49,7 +49,7 @@
 #define FS_NAME         "vboxsf"
 #define FS_PRETTY_NAME  "VirtualBox Shared Folders"
 
-VBSFCLIENT g_clientHandle;
+VBGLSFCLIENT g_clientHandle;
 static fs_volume_ops vboxsf_volume_ops;
 static fs_vnode_ops vboxsf_vnode_ops;
 
@@ -60,34 +60,34 @@ status_t init_module(void)
     int rc = get_module(VBOXGUEST_MODULE_NAME, (module_info **)&g_VBoxGuest);
     if (RT_LIKELY(rc == B_OK)
     {
-        rc = vboxInit();
+        rc = VbglR0SfInit();
         if (RT_SUCCESS(rc))
         {
-            rc = vboxConnect(&g_clientHandle);
+            rc = VbglR0SfConnect(&g_clientHandle);
             if (RT_SUCCESS(rc))
             {
-                rc = vboxCallSetUtf8(&g_clientHandle);
+                rc = VbglR0SfSetUtf8(&g_clientHandle);
                 if (RT_SUCCESS(rc))
                 {
-                    rc = vboxCallSetSymlinks(&g_clientHandle);
+                    rc = VbglR0SfSetSymlinks(&g_clientHandle);
                     if (RT_FAILURE(rc))
-                        LogRel((FS_NAME ":Warning! vboxCallSetSymlinks failed (rc=%d) - symlink will appear as copies.\n", rc));
+                        LogRel((FS_NAME ": Warning! VbglR0SfSetSymlinks failed (rc=%d) - symlink will appear as copies.\n", rc));
 
                     mutex_init(&g_vnodeCacheLock, "vboxsf vnode cache lock");
-                    Log((FS_NAME ":init_module succeeded.\n");
+                    Log((FS_NAME ": init_module succeeded.\n");
                     return B_OK;
                 }
                 else
-                    LogRel((FS_NAME ":vboxCallSetUtf8 failed. rc=%d\n", rc));
+                    LogRel((FS_NAME ": VbglR0SfSetUtf8 failed. rc=%d\n", rc));
             }
             else
-                LogRel((FS_NAME ":vboxConnect failed. rc=%d\n", rc));
+                LogRel((FS_NAME ": VbglR0SfConnect failed. rc=%d\n", rc));
         }
         else
-            LogRel((FS_NAME ":vboxInit failed. rc=%d\n", rc));
+            LogRel((FS_NAME ": VbglR0SfInit failed. rc=%d\n", rc));
     }
     else
-        LogRel((FS_NAME ":get_module failed for '%s'. rc=%d\n", VBOXGUEST_MODULE_NAME, rc));
+        LogRel((FS_NAME ": get_module failed for '%s'. rc=%d\n", VBOXGUEST_MODULE_NAME, rc));
 
     return B_ERROR;
 #endif
@@ -98,27 +98,27 @@ status_t init_module(void)
         return B_ERROR;
     }
 
-    if (RT_FAILURE(vboxInit()))
+    if (RT_FAILURE(VbglR0SfInit()))
     {
-        dprintf("vboxInit failed\n");
+        dprintf("VbglR0SfInit failed\n");
         return B_ERROR;
     }
 
-    if (RT_FAILURE(vboxConnect(&g_clientHandle)))
+    if (RT_FAILURE(VbglR0SfConnect(&g_clientHandle)))
     {
-        dprintf("vboxConnect failed\n");
+        dprintf("VbglR0SfConnect failed\n");
         return B_ERROR;
     }
 
-    if (RT_FAILURE(vboxCallSetUtf8(&g_clientHandle)))
+    if (RT_FAILURE(VbglR0SfSetUtf8(&g_clientHandle)))
     {
-        dprintf("vboxCallSetUtf8 failed\n");
+        dprintf("VbglR0SfSetUtf8 failed\n");
         return B_ERROR;
     }
 
-    if (RT_FAILURE(vboxCallSetSymlinks(&g_clientHandle)))
+    if (RT_FAILURE(VbglR0SfSetSymlinks(&g_clientHandle)))
     {
-        dprintf("warning: vboxCallSetSymlinks failed (old vbox?) - symlinks will appear as copies\n");
+        dprintf("warning: VbglR0SfSetSymlinks failed (old vbox?) - symlinks will appear as copies\n");
     }
 
     mutex_init(&g_vnodeCacheLock, "vboxsf vnode cache lock");
@@ -226,7 +226,7 @@ status_t mount(fs_volume *volume, const char *device, uint32 flags, const char *
 
     vboxsf_volume* vbsfvolume = malloc(sizeof(vboxsf_volume));
     volume->private_volume = vbsfvolume;
-    int rv = vboxCallMapFolder(&g_clientHandle, sharename, &(vbsfvolume->map));
+    int rv = VbglR0SfMapFolder(&g_clientHandle, sharename, &(vbsfvolume->map));
     free(sharename);
 
     if (rv == 0)
@@ -257,7 +257,7 @@ status_t mount(fs_volume *volume, const char *device, uint32 flags, const char *
     }
     else
     {
-        dprintf(FS_NAME ": vboxCallMapFolder failed (%d)\n", rv);
+        dprintf(FS_NAME ": VbglR0SfMapFolder failed (%d)\n", rv);
         free(volume->private_volume);
         return vbox_err_to_haiku_err(rv);
     }
@@ -267,7 +267,7 @@ status_t mount(fs_volume *volume, const char *device, uint32 flags, const char *
 status_t unmount(fs_volume *volume)
 {
     dprintf(FS_NAME ": unmount\n");
-    vboxCallUnmapFolder(&g_clientHandle, volume->private_volume);
+    VbglR0SfUnmapFolder(&g_clientHandle, volume->private_volume);
     return B_OK;
 }
 
@@ -283,8 +283,8 @@ status_t vboxsf_read_stat(fs_volume* _volume, fs_vnode* _vnode, struct stat* st)
 
     params.Handle = SHFL_HANDLE_NIL;
     params.CreateFlags = SHFL_CF_LOOKUP | SHFL_CF_ACT_FAIL_IF_NEW;
-    dprintf("sf_stat: calling vboxCallCreate, file %s, flags %x\n", vnode->path->String.utf8, params.CreateFlags);
-    rc = vboxCallCreate(&g_clientHandle, &volume->map, vnode->path, &params);
+    dprintf("sf_stat: calling VbglR0SfCreate, file %s, flags %x\n", vnode->path->String.utf8, params.CreateFlags);
+    rc = VbglR0SfCreate(&g_clientHandle, &volume->map, vnode->path, &params);
     if (rc == VERR_INVALID_NAME)
     {
         /* this can happen for names like 'foo*' on a Windows host */
@@ -292,12 +292,12 @@ status_t vboxsf_read_stat(fs_volume* _volume, fs_vnode* _vnode, struct stat* st)
     }
     if (RT_FAILURE(rc))
     {
-        dprintf("vboxCallCreate: %d\n", params.Result);
+        dprintf("VbglR0SfCreate: %d\n", params.Result);
         return vbox_err_to_haiku_err(params.Result);
     }
     if (params.Result != SHFL_FILE_EXISTS)
     {
-        dprintf("vboxCallCreate: %d\n", params.Result);
+        dprintf("VbglR0SfCreate: %d\n", params.Result);
         return B_ENTRY_NOT_FOUND;
     }
 
@@ -328,7 +328,7 @@ status_t vboxsf_open_dir(fs_volume* _volume, fs_vnode* _vnode, void** _cookie)
     params.Handle = SHFL_HANDLE_NIL;
     params.CreateFlags = SHFL_CF_DIRECTORY | SHFL_CF_ACT_OPEN_IF_EXISTS | SHFL_CF_ACT_FAIL_IF_NEW | SHFL_CF_ACCESS_READ;
 
-    int rc = vboxCallCreate(&g_clientHandle, &volume->map, vnode->path, &params);
+    int rc = VbglR0SfCreate(&g_clientHandle, &volume->map, vnode->path, &params);
     if (RT_SUCCESS(rc))
     {
         if (params.Result == SHFL_FILE_EXISTS && params.Handle != SHFL_HANDLE_NIL)
@@ -348,7 +348,7 @@ status_t vboxsf_open_dir(fs_volume* _volume, fs_vnode* _vnode, void** _cookie)
     }
     else
     {
-        dprintf(FS_NAME ": vboxCallCreate: %d\n", rc);
+        dprintf(FS_NAME ": VbglR0SfCreate: %d\n", rc);
         return vbox_err_to_haiku_err(rc);
     }
 }
@@ -367,12 +367,12 @@ status_t vboxsf_read_dir_1(vboxsf_volume* volume, vboxsf_vnode* vnode, vboxsf_di
         cookie->buffer_length = 16384;
         cookie->buffer_start = cookie->buffer = malloc(cookie->buffer_length);
 
-        int rc = vboxCallDirInfo(&g_clientHandle, &volume->map, cookie->handle, cookie->path, 0, cookie->index,
+        int rc = VbglR0SfDirInfo(&g_clientHandle, &volume->map, cookie->handle, cookie->path, 0, cookie->index,
                                  &cookie->buffer_length, cookie->buffer, &cookie->num_files);
 
         if (rc != 0 && rc != VERR_NO_MORE_FILES)
         {
-            dprintf(FS_NAME ": vboxCallDirInfo failed: %d\n", rc);
+            dprintf(FS_NAME ": VbglR0SfDirInfo failed: %d\n", rc);
             free(cookie->buffer_start);
             cookie->buffer_start = NULL;
             return vbox_err_to_haiku_err(rc);
@@ -461,7 +461,7 @@ status_t vboxsf_free_dir_cookie(fs_volume* _volume, fs_vnode* vnode, void* _cook
     vboxsf_volume* volume = _volume->private_volume;
     vboxsf_dir_cookie* cookie = _cookie;
 
-    vboxCallClose(&g_clientHandle, &volume->map, cookie->handle);
+    VbglR0SfClose(&g_clientHandle, &volume->map, cookie->handle);
     free(cookie->path);
     free(cookie);
 
@@ -476,12 +476,11 @@ status_t vboxsf_read_fs_info(fs_volume* _volume, struct fs_info* info)
     SHFLVOLINFO volume_info;
     uint32_t bytes = sizeof(SHFLVOLINFO);
 
-    int rc = vboxCallFSInfo(&g_clientHandle, &volume->map, 0,
-        (SHFL_INFO_GET | SHFL_INFO_VOLUME), &bytes, (PSHFLDIRINFO)&volume_info);
-
+    int rc = VbglR0SfFsInfo(&g_clientHandle, &volume->map, 0, SHFL_INFO_GET | SHFL_INFO_VOLUME,
+                            &bytes, (PSHFLDIRINFO)&volume_info);
     if (RT_FAILURE(rc))
     {
-        dprintf(FS_NAME ": vboxCallFSInfo failed (%d)\n", rc);
+        dprintf(FS_NAME ": VbglR0SfFsInfo failed (%d)\n", rc);
         return vbox_err_to_haiku_err(rc);
     }
 
@@ -519,7 +518,7 @@ status_t vboxsf_lookup(fs_volume* _volume, fs_vnode* dir, const char* name, ino_
         return B_NO_MEMORY;
     }
 
-    int rc = vboxCallCreate(&g_clientHandle, &volume->map, path, &params);
+    int rc = VbglR0SfCreate(&g_clientHandle, &volume->map, path, &params);
     if (RT_SUCCESS(rc))
     {
         if (params.Result == SHFL_FILE_EXISTS)
@@ -542,7 +541,7 @@ status_t vboxsf_lookup(fs_volume* _volume, fs_vnode* dir, const char* name, ino_
     else
     {
         free(path);
-        dprintf(FS_NAME ": vboxCallCreate: %d\n", rc);
+        dprintf(FS_NAME ": VbglR0SfCreate: %d\n", rc);
         return vbox_err_to_haiku_err(rc);
     }
 }
@@ -637,10 +636,10 @@ status_t vboxsf_open(fs_volume* _volume, fs_vnode* _vnode, int openMode, void**
             params.CreateFlags |= SHFL_CF_ACT_OPEN_IF_EXISTS;
     }
 
-    int rc = vboxCallCreate(&g_clientHandle, &volume->map, vnode->path, &params);
+    int rc = VbglR0SfCreate(&g_clientHandle, &volume->map, vnode->path, &params);
     if (!RT_SUCCESS(rc))
     {
-        dprintf("vboxCallCreate returned %d\n", rc);
+        dprintf("VbglR0SfCreate returned %d\n", rc);
         return vbox_err_to_haiku_err(rc);
     }
 
@@ -699,11 +698,11 @@ status_t vboxsf_create(fs_volume* _volume, fs_vnode* _dir, const char *name, int
     }
 
     PSHFLSTRING path = build_path(_dir->private_node, name);
-    int rc = vboxCallCreate(&g_clientHandle, &volume->map, path, &params);
+    int rc = VbglR0SfCreate(&g_clientHandle, &volume->map, path, &params);
 
     if (!RT_SUCCESS(rc))
     {
-        dprintf("vboxCallCreate returned %d\n", rc);
+        dprintf("VbglR0SfCreate returned %d\n", rc);
         free(path);
         return vbox_err_to_haiku_err(rc);
     }
@@ -729,8 +728,8 @@ status_t vboxsf_close(fs_volume* _volume, fs_vnode* _vnode, void* _cookie)
     vboxsf_volume* volume = _volume->private_volume;
     vboxsf_file_cookie* cookie = _cookie;
 
-    int rc = vboxCallClose(&g_clientHandle, &volume->map, cookie->handle);
-    dprintf("vboxCallClose returned %d\n", rc);
+    int rc = VbglR0SfClose(&g_clientHandle, &volume->map, cookie->handle);
+    dprintf("VbglR0SfClose returned %d\n", rc);
     return vbox_err_to_haiku_err(rc);
 }
 
@@ -767,11 +766,11 @@ status_t vboxsf_read(fs_volume* _volume, fs_vnode* _vnode, void* _cookie, off_t
 
     uint32_t l = *length;
     void* other_buffer = malloc(l);  /* @todo map the user memory into kernel space here for efficiency */
-    int rc = vboxCallRead(&g_clientHandle, &volume->map, cookie->handle, pos, &l, other_buffer, false);
+    int rc = VbglR0SfRead(&g_clientHandle, &volume->map, cookie->handle, pos, &l, other_buffer, false /*fLocked*/);
     memcpy(buffer, other_buffer, l);
     free(other_buffer);
 
-    dprintf("vboxCallRead returned %d\n", rc);
+    dprintf("VbglR0SfRead returned %d\n", rc);
     *length = l;
     return vbox_err_to_haiku_err(rc);
 }
@@ -789,7 +788,7 @@ status_t vboxsf_write(fs_volume* _volume, fs_vnode* _vnode, void* _cookie, off_t
     uint32_t l = *length;
     void* other_buffer = malloc(l);  /* @todo map the user memory into kernel space here for efficiency */
     memcpy(other_buffer, buffer, l);
-    int rc = vboxCallWrite(&g_clientHandle, &volume->map, cookie->handle, pos, &l, other_buffer, false);
+    int rc = VbglR0SfWrite(&g_clientHandle, &volume->map, cookie->handle, pos, &l, other_buffer, false /*fLocked*/);
     free(other_buffer);
 
     *length = l;
@@ -815,17 +814,14 @@ status_t vboxsf_create_dir(fs_volume *_volume, fs_vnode *parent, const char *nam
         SHFL_CF_ACT_FAIL_IF_EXISTS | SHFL_CF_ACCESS_READ;
 
     PSHFLSTRING path = build_path(parent->private_node, name);
-    int rc = vboxCallCreate(&g_clientHandle, &volume->map, path, &params);
+    int rc = VbglR0SfCreate(&g_clientHandle, &volume->map, path, &params);
     free(path);
     /** @todo r=ramshankar: we should perhaps also check rc here and change
      *        Handle initialization from 0 to SHFL_HANDLE_NIL. */
     if (params.Handle == SHFL_HANDLE_NIL)
         return vbox_err_to_haiku_err(rc);
-    else
-    {
-        vboxCallClose(&g_clientHandle, &volume->map, params.Handle);
-        return B_OK;
-    }
+    VbglR0SfClose(&g_clientHandle, &volume->map, params.Handle);
+    return B_OK;
 }
 
 
@@ -834,7 +830,7 @@ status_t vboxsf_remove_dir(fs_volume *_volume, fs_vnode *parent, const char *nam
     vboxsf_volume* volume = _volume->private_volume;
 
     PSHFLSTRING path = build_path(parent->private_node, name);
-    int rc = vboxCallRemove(&g_clientHandle, &volume->map, path, SHFL_REMOVE_DIR);
+    int rc = VbglR0SfRemove(&g_clientHandle, &volume->map, path, SHFL_REMOVE_DIR);
     free(path);
 
     return vbox_err_to_haiku_err(rc);
@@ -846,7 +842,7 @@ status_t vboxsf_unlink(fs_volume *_volume, fs_vnode *parent, const char *name)
     vboxsf_volume* volume = _volume->private_volume;
 
     PSHFLSTRING path = build_path(parent->private_node, name);
-    int rc = vboxCallRemove(&g_clientHandle, &volume->map, path, SHFL_REMOVE_FILE);
+    int rc = VbglR0SfRemove(&g_clientHandle, &volume->map, path, SHFL_REMOVE_FILE);
     free(path);
 
     return vbox_err_to_haiku_err(rc);
@@ -864,7 +860,7 @@ status_t vboxsf_rename(fs_volume* _volume, fs_vnode* fromDir, const char* fromNa
 
     PSHFLSTRING oldpath = build_path(fromDir->private_node, fromName);
     PSHFLSTRING newpath = build_path(toDir->private_node, toName);
-    int rc = vboxCallRename(&g_clientHandle, &volume->map, oldpath, newpath, SHFL_RENAME_FILE | SHFL_RENAME_REPLACE_IF_EXISTS);
+    int rc = VbglR0SfRename(&g_clientHandle, &volume->map, oldpath, newpath, SHFL_RENAME_FILE | SHFL_RENAME_REPLACE_IF_EXISTS);
     free(oldpath);
     free(newpath);
 
@@ -881,7 +877,7 @@ status_t vboxsf_create_symlink(fs_volume* _volume, fs_vnode* dir, const char* na
     SHFLFSOBJINFO stuff;
     RT_ZERO(stuff);
 
-    int rc = vboxCallSymlink(&g_clientHandle, &volume->map, linkpath, target, &stuff);
+    int rc = VbglR0SfSymlink(&g_clientHandle, &volume->map, linkpath, target, &stuff);
 
     free(target);
     free(linkpath);
@@ -895,7 +891,7 @@ status_t vboxsf_read_symlink(fs_volume* _volume, fs_vnode* link, char* buffer, s
     vboxsf_volume* volume = _volume->private_volume;
     vboxsf_vnode* vnode = link->private_node;
 
-    int rc = vboxReadLink(&g_clientHandle, &volume->map, vnode->path, *_bufferSize, buffer);
+    int rc = VbglR0SfReadLink(&g_clientHandle, &volume->map, vnode->path, *_bufferSize, buffer);
     *_bufferSize = strlen(buffer);
 
     return vbox_err_to_haiku_err(rc);
diff --git a/src/VBox/Additions/haiku/SharedFolders/vboxsf.h b/src/VBox/Additions/haiku/SharedFolders/vboxsf.h
index 3aac8ae..634654b 100644
--- a/src/VBox/Additions/haiku/SharedFolders/vboxsf.h
+++ b/src/VBox/Additions/haiku/SharedFolders/vboxsf.h
@@ -53,18 +53,18 @@
 #include <fs_interface.h>
 #include <KernelExport.h>
 #include <VBoxGuest-haiku.h>
-#include <VBoxGuestR0LibSharedFolders.h>
+#include <VBox/VBoxGuestLibSharedFolders.h>
 #include "lock.h"
 
 typedef struct vboxsf_volume
 {
-    VBSFMAP map;
+    VBGLSFMAP map;
     ino_t rootid;
 } vboxsf_volume;
 
 typedef struct vboxsf_vnode
 {
-    PVBSFMAP map;
+    PVBGLSFMAP map;
     PSHFLSTRING name;
     PSHFLSTRING path;
     ino_t vnode;
@@ -91,7 +91,7 @@ typedef struct vboxsf_file_cookie
 extern "C" {
 #endif
 
-status_t vboxsf_new_vnode(PVBSFMAP map, PSHFLSTRING path, PSHFLSTRING name, vboxsf_vnode** p);
+status_t vboxsf_new_vnode(PVBGLSFMAP map, PSHFLSTRING path, PSHFLSTRING name, vboxsf_vnode** p);
 status_t vboxsf_get_vnode(fs_volume* volume, ino_t id, fs_vnode* vnode, int* _type, uint32* _flags, bool reenter);
 status_t vboxsf_put_vnode(fs_volume* volume, fs_vnode* vnode, bool reenter);
 PSHFLSTRING make_shflstring(const char* const s);
diff --git a/src/VBox/Additions/linux/drm/Makefile.module b/src/VBox/Additions/linux/drm/Makefile.module
index d0025ae..d9fa000 100644
--- a/src/VBox/Additions/linux/drm/Makefile.module
+++ b/src/VBox/Additions/linux/drm/Makefile.module
@@ -1,8 +1,11 @@
-#
+# $Id: Makefile.module $
+## @file
 # VirtualBox Guest Additions Module Makefile.
 #
 # (For 2.6.x this file must be 'Makefile'!)
 #
+
+#
 # Copyright (C) 2006-2011 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
@@ -50,3 +53,4 @@ endif
 MOD_CLEAN  = . linux r0drv r0drv/linux
 
 include $(obj)/Makefile.include.footer
+
diff --git a/src/VBox/Additions/linux/drm/Makefile.module.kms b/src/VBox/Additions/linux/drm/Makefile.module.kms
index c09ef61..b4752e7 100644
--- a/src/VBox/Additions/linux/drm/Makefile.module.kms
+++ b/src/VBox/Additions/linux/drm/Makefile.module.kms
@@ -1,8 +1,11 @@
-#
+# $Id: Makefile.module.kms $
+## @file
 # VirtualBox Guest Additions Module Makefile.
 #
 # (For 2.6.x this file must be 'Makefile'!)
 #
+
+#
 # Copyright (C) 2006-2010 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
diff --git a/src/VBox/Additions/linux/drm/files_vboxvideo_drv b/src/VBox/Additions/linux/drm/files_vboxvideo_drv
index 8d81597..c5636c5 100755
--- a/src/VBox/Additions/linux/drm/files_vboxvideo_drv
+++ b/src/VBox/Additions/linux/drm/files_vboxvideo_drv
@@ -25,6 +25,7 @@ FILES_VBOXVIDEO_DRM_NOBIN=" \
     ${PATH_ROOT}/include/iprt/cdefs.h=>include/iprt/cdefs.h \
     ${PATH_ROOT}/include/iprt/err.h=>include/iprt/err.h \
     ${PATH_ROOT}/include/iprt/heap.h=>include/iprt/heap.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/list.h=>include/iprt/list.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
     ${PATH_ROOT}/include/iprt/param.h=>include/iprt/param.h \
@@ -32,6 +33,7 @@ FILES_VBOXVIDEO_DRM_NOBIN=" \
     ${PATH_ROOT}/include/iprt/stdint.h=>include/iprt/stdint.h \
     ${PATH_ROOT}/include/iprt/string.h=>include/iprt/string.h \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/iprt/mangling.h=>include/iprt/mangling.h \
     ${PATH_ROOT}/include/VBox/cdefs.h=>include/VBox/cdefs.h \
     ${PATH_ROOT}/include/VBox/err.h=>include/VBox/err.h \
diff --git a/src/VBox/Additions/linux/drm/vbox_drv.c b/src/VBox/Additions/linux/drm/vbox_drv.c
index 33a0df3..a53f7a8 100644
--- a/src/VBox/Additions/linux/drm/vbox_drv.c
+++ b/src/VBox/Additions/linux/drm/vbox_drv.c
@@ -1,5 +1,5 @@
-/** @file $Id: vbox_drv.c $
- *
+/*  $Id: vbox_drv.c $ */
+/** @file
  * VirtualBox Additions Linux kernel video driver
  */
 
diff --git a/src/VBox/Additions/linux/drm/vbox_drv.h b/src/VBox/Additions/linux/drm/vbox_drv.h
index 332a5fd..08b15cb 100644
--- a/src/VBox/Additions/linux/drm/vbox_drv.h
+++ b/src/VBox/Additions/linux/drm/vbox_drv.h
@@ -1,5 +1,5 @@
-/** @file $Id: vbox_drv.h $
- *
+/* $Id: vbox_drv.h $ */
+/** @file
  * VirtualBox Additions Linux kernel video driver
  */
 
diff --git a/src/VBox/Additions/linux/drm/vbox_fb.c b/src/VBox/Additions/linux/drm/vbox_fb.c
index 4fef87f..47ea56d 100644
--- a/src/VBox/Additions/linux/drm/vbox_fb.c
+++ b/src/VBox/Additions/linux/drm/vbox_fb.c
@@ -1,5 +1,5 @@
-/** @file $Id: vbox_fb.c $
- *
+/* $Id: vbox_fb.c $ */
+/** @file
  * VirtualBox Additions Linux kernel video driver
  */
 
diff --git a/src/VBox/Additions/linux/drm/vbox_main.c b/src/VBox/Additions/linux/drm/vbox_main.c
index 705ebb3..8b6b4cb 100644
--- a/src/VBox/Additions/linux/drm/vbox_main.c
+++ b/src/VBox/Additions/linux/drm/vbox_main.c
@@ -1,5 +1,5 @@
-/** @file $Id: vbox_main.c $
- *
+/* $Id: vbox_main.c $ */
+/** @file
  * VirtualBox Additions Linux kernel video driver
  */
 
diff --git a/src/VBox/Additions/linux/drm/vbox_mode.c b/src/VBox/Additions/linux/drm/vbox_mode.c
index 79df250..2f25a0f 100644
--- a/src/VBox/Additions/linux/drm/vbox_mode.c
+++ b/src/VBox/Additions/linux/drm/vbox_mode.c
@@ -1,5 +1,5 @@
-/** @file $Id: vbox_mode.c $
- *
+/* $Id: vbox_mode.c $ */
+/** @file
  * VirtualBox Additions Linux kernel video driver
  */
 
diff --git a/src/VBox/Additions/linux/drm/vbox_ttm.c b/src/VBox/Additions/linux/drm/vbox_ttm.c
index 3056048..14a2139 100644
--- a/src/VBox/Additions/linux/drm/vbox_ttm.c
+++ b/src/VBox/Additions/linux/drm/vbox_ttm.c
@@ -1,5 +1,5 @@
-/** @file $Id: vbox_ttm.c $
- *
+/* $Id: vbox_ttm.c $ */
+/** @file
  * VirtualBox Additions Linux kernel video driver
  */
 
diff --git a/src/VBox/Additions/linux/drm/vboxvideo_drm.c b/src/VBox/Additions/linux/drm/vboxvideo_drm.c
index e29ff17..0b1b45c 100644
--- a/src/VBox/Additions/linux/drm/vboxvideo_drm.c
+++ b/src/VBox/Additions/linux/drm/vboxvideo_drm.c
@@ -1,5 +1,5 @@
-/** @file $Id: vboxvideo_drm.c $
- *
+/* $Id: vboxvideo_drm.c $ */
+/** @file
  * VirtualBox Additions Linux kernel driver, DRM support
  */
 
diff --git a/src/VBox/Additions/linux/drm/vboxvideo_drm.h b/src/VBox/Additions/linux/drm/vboxvideo_drm.h
index 11407e9..d6a43a4 100644
--- a/src/VBox/Additions/linux/drm/vboxvideo_drm.h
+++ b/src/VBox/Additions/linux/drm/vboxvideo_drm.h
@@ -1,5 +1,5 @@
-/** @file $Id: vboxvideo_drm.h $
- *
+/* $Id: vboxvideo_drm.h $ */
+/** @file
  * VirtualBox Additions Linux kernel driver, DRM support
  */
 
diff --git a/src/VBox/Additions/linux/installer/vboxadd-service.sh b/src/VBox/Additions/linux/installer/vboxadd-service.sh
index fd4675b..7b78791 100755
--- a/src/VBox/Additions/linux/installer/vboxadd-service.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd-service.sh
@@ -40,12 +40,6 @@ elif [ -f /etc/debian_version ]; then
 elif [ -f /etc/gentoo-release ]; then
     system=gentoo
     PIDFILE="/var/run/vboxadd-service"
-elif [ -f /etc/slackware-version ]; then
-    system=slackware
-    PIDFILE="/var/run/vboxadd-service"
-elif [ -f /etc/lfs-release ]; then
-    system=lfs
-    PIDFILE="/var/run/vboxadd-service.pid"
 else
     system=other
     if [ -d /var/run -a -w /var/run ]; then
@@ -144,14 +138,19 @@ if [ "$system" = "gentoo" ]; then
     fi
 fi
 
-if [ "$system" = "slackware" -o "$system" = "other" ]; then
+if [ "$system" = "other" ]; then
     daemon() {
         $1 $2 $3
     }
 
     killproc() {
-        killall $1
-        rm -f $PIDFILE
+        kp_binary="${1##*/}"
+        pkill "${kp_binary}" || return 0
+        sleep 1
+        pkill "${kp_binary}" || return 0
+        sleep 1
+        pkill -9 "${kp_binary}"
+        return 0
     }
 
     fail_msg() {
@@ -168,29 +167,6 @@ if [ "$system" = "slackware" -o "$system" = "other" ]; then
 
 fi
 
-if [ "$system" = "lfs" ]; then
-    . /etc/rc.d/init.d/functions
-    daemon() {
-        loadproc $1 $2 $3
-    }
-
-    fail_msg() {
-        echo_failure
-    }
-
-    succ_msg() {
-        echo_ok
-    }
-
-    begin() {
-        echo $1
-    }
-
-    status() {
-        statusproc $1
-    }
-fi
-
 binary=/usr/sbin/VBoxService
 
 testbinary() {
diff --git a/src/VBox/Additions/linux/installer/vboxadd-x11.sh b/src/VBox/Additions/linux/installer/vboxadd-x11.sh
index 8f16660..485e4e2 100755
--- a/src/VBox/Additions/linux/installer/vboxadd-x11.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd-x11.sh
@@ -1,6 +1,6 @@
 #! /bin/sh
 #
-# Linux Additions X11 setup init script ($Revision: 101523 $)
+# Linux Additions X11 setup init script ($Revision: 104057 $)
 #
 
 #
@@ -76,8 +76,6 @@ elif [ -f /etc/SuSE-release ]; then
     system=suse
 elif [ -f /etc/gentoo-release ]; then
     system=gentoo
-elif [ -f /etc/lfs-release -a -d /etc/rc.d/init.d ]; then
-    system=lfs
 else
     system=other
 fi
@@ -132,19 +130,6 @@ if [ "$system" = "gentoo" ]; then
     fi
 fi
 
-if [ "$system" = "lfs" ]; then
-    . /etc/rc.d/init.d/functions
-    fail_msg() {
-        echo_failure
-    }
-    succ_msg() {
-        echo_ok
-    }
-    begin() {
-        echo $1
-    }
-fi
-
 if [ "$system" = "debian" -o "$system" = "other" ]; then
     fail_msg() {
         echo " ...fail!"
@@ -323,6 +308,20 @@ setup()
         esac
     fi
     case $x_version in
+        1.17.99.902* )
+            # special case for Fedora 23 :-/
+            x_version_short="1.18"
+            xserver_version="X.Org Server ${x_version_short}"
+            vboxvideo_src=vboxvideo_drv_`echo ${x_version_short} | sed 's/\.//'`.so
+            setupxorgconf=""
+            test -f "${lib_dir}/${vboxvideo_src}" ||
+            {
+                echo "Warning: unknown version of the X Window System installed.  Not installing"
+                echo "X Window System drivers."
+                dox11config=""
+                vboxvideo_src=""
+            }
+            ;;
         1.*.99.* )
             echo "Warning: unsupported pre-release version of X.Org Server installed.  Not"
             echo "installing the X.Org drivers."
diff --git a/src/VBox/Additions/linux/installer/vboxadd.sh b/src/VBox/Additions/linux/installer/vboxadd.sh
index d2647ad..188fa73 100755
--- a/src/VBox/Additions/linux/installer/vboxadd.sh
+++ b/src/VBox/Additions/linux/installer/vboxadd.sh
@@ -1,6 +1,6 @@
 #! /bin/sh
 #
-# Linux Additions kernel module init script ($Revision: 102425 $)
+# Linux Additions kernel module init script ($Revision: 104011 $)
 #
 
 #
@@ -63,8 +63,6 @@ elif [ -f /etc/SuSE-release ]; then
     system=suse
 elif [ -f /etc/gentoo-release ]; then
     system=gentoo
-elif [ -f /etc/lfs-release -a -d /etc/rc.d/init.d ]; then
-    system=lfs
 else
     system=other
 fi
@@ -119,19 +117,6 @@ if [ "$system" = "gentoo" ]; then
     fi
 fi
 
-if [ "$system" = "lfs" ]; then
-    . /etc/rc.d/init.d/functions
-    fail_msg() {
-        echo_failure
-    }
-    succ_msg() {
-        echo_ok
-    }
-    begin() {
-        echo $1
-    }
-fi
-
 if [ "$system" = "other" ]; then
     fail_msg() {
         echo " ...fail!"
diff --git a/src/VBox/Additions/linux/sharedfolders/Makefile.kmk b/src/VBox/Additions/linux/sharedfolders/Makefile.kmk
index deaf206..df78ef0 100644
--- a/src/VBox/Additions/linux/sharedfolders/Makefile.kmk
+++ b/src/VBox/Additions/linux/sharedfolders/Makefile.kmk
@@ -59,7 +59,6 @@ ifdef VBOX_WITH_ADDITION_DRIVERS
  		               then echo yes; fi),KERNEL_FC6,),))
 
  vboxsf_INCS            = \
- 	$(PATH_ROOT)/src/VBox/Additions/common/VBoxGuestLib \
  	$(PATH_ROOT)/src/VBox/Runtime/r0drv/linux
  vboxsf_SOURCES         = \
  	vfsmod.c \
diff --git a/src/VBox/Additions/linux/sharedfolders/dirops.c b/src/VBox/Additions/linux/sharedfolders/dirops.c
index 8f2077d..c0c9a5c 100644
--- a/src/VBox/Additions/linux/sharedfolders/dirops.c
+++ b/src/VBox/Additions/linux/sharedfolders/dirops.c
@@ -62,9 +62,9 @@ static int sf_dir_open(struct inode *inode, struct file *file)
                        | SHFL_CF_ACCESS_READ
                        ;
 
-    LogFunc(("sf_dir_open(): calling vboxCallCreate, folder %s, flags %#x\n",
+    LogFunc(("sf_dir_open(): calling VbglR0SfCreate, folder %s, flags %#x\n",
              sf_i->path->String.utf8, params.CreateFlags));
-    rc = vboxCallCreate(&client_handle, &sf_g->map, sf_i->path, &params);
+    rc = VbglR0SfCreate(&client_handle, &sf_g->map, sf_i->path, &params);
     if (RT_SUCCESS(rc))
     {
         if (params.Result == SHFL_FILE_EXISTS)
@@ -76,9 +76,9 @@ static int sf_dir_open(struct inode *inode, struct file *file)
         else
             err = -ENOENT;
 
-        rc = vboxCallClose(&client_handle, &sf_g->map, params.Handle);
+        rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle);
         if (RT_FAILURE(rc))
-            LogFunc(("sf_dir_open(): vboxCallClose(%s) after err=%d failed rc=%Rrc\n",
+            LogFunc(("sf_dir_open(): VbglR0SfClose(%s) after err=%d failed rc=%Rrc\n",
                      sf_i->path->String.utf8, err, rc));
     }
     else
@@ -173,12 +173,12 @@ static int sf_getdent(struct file *dir, char d_name[NAME_MAX], int *d_type)
                            | SHFL_CF_ACCESS_READ
                            ;
 
-        LogFunc(("sf_getdent: calling vboxCallCreate, folder %s, flags %#x\n",
+        LogFunc(("sf_getdent: calling VbglR0SfCreate, folder %s, flags %#x\n",
                   sf_i->path->String.utf8, params.CreateFlags));
-        rc = vboxCallCreate(&client_handle, &sf_g->map, sf_i->path, &params);
+        rc = VbglR0SfCreate(&client_handle, &sf_g->map, sf_i->path, &params);
         if (RT_FAILURE(rc))
         {
-            LogFunc(("vboxCallCreate(%s) failed rc=%Rrc\n",
+            LogFunc(("VbglR0SfCreate(%s) failed rc=%Rrc\n",
                         sf_i->path->String.utf8, rc));
             return -EPERM;
         }
@@ -192,9 +192,9 @@ static int sf_getdent(struct file *dir, char d_name[NAME_MAX], int *d_type)
 
         sf_dir_info_empty(sf_d);
         err = sf_dir_read_all(sf_g, sf_i, sf_d, params.Handle);
-        rc = vboxCallClose(&client_handle, &sf_g->map, params.Handle);
+        rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle);
         if (RT_FAILURE(rc))
-            LogFunc(("vboxCallClose(%s) failed rc=%Rrc\n", sf_i->path->String.utf8, rc));
+            LogFunc(("VbglR0SfClose(%s) failed rc=%Rrc\n", sf_i->path->String.utf8, rc));
         if (err)
             return err;
 
@@ -561,9 +561,9 @@ static int sf_create_aux(struct inode *parent, struct dentry *dentry,
                            ;
     params.Info.Attr.enmAdditional = RTFSOBJATTRADD_NOTHING;
 
-    LogFunc(("sf_create_aux: calling vboxCallCreate, folder %s, flags %#x\n",
+    LogFunc(("sf_create_aux: calling VbglR0SfCreate, folder %s, flags %#x\n",
               path->String.utf8, params.CreateFlags));
-    rc = vboxCallCreate(&client_handle, &sf_g->map, path, &params);
+    rc = VbglR0SfCreate(&client_handle, &sf_g->map, path, &params);
     if (RT_FAILURE(rc))
     {
         if (rc == VERR_WRITE_PROTECT)
@@ -572,7 +572,7 @@ static int sf_create_aux(struct inode *parent, struct dentry *dentry,
             goto fail1;
         }
         err = -EPROTO;
-        LogFunc(("(%d): vboxCallCreate(%s) failed rc=%Rrc\n",
+        LogFunc(("(%d): VbglR0SfCreate(%s) failed rc=%Rrc\n",
                     fDirectory, sf_i->path->String.utf8, rc));
         goto fail1;
     }
@@ -601,18 +601,18 @@ static int sf_create_aux(struct inode *parent, struct dentry *dentry,
      */
     if (fDirectory)
     {
-        rc = vboxCallClose(&client_handle, &sf_g->map, params.Handle);
+        rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle);
         if (RT_FAILURE(rc))
-            LogFunc(("(%d): vboxCallClose failed rc=%Rrc\n", fDirectory, rc));
+            LogFunc(("(%d): VbglR0SfClose failed rc=%Rrc\n", fDirectory, rc));
     }
 
     sf_i->force_restat = 1;
     return 0;
 
 fail2:
-    rc = vboxCallClose(&client_handle, &sf_g->map, params.Handle);
+    rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle);
     if (RT_FAILURE(rc))
-        LogFunc(("(%d): vboxCallClose failed rc=%Rrc\n", fDirectory, rc));
+        LogFunc(("(%d): VbglR0SfClose failed rc=%Rrc\n", fDirectory, rc));
 
 fail1:
     kfree(path);
@@ -627,9 +627,10 @@ fail0:
  * @param parent        inode of the directory
  * @param dentry        directory cache entry
  * @param mode          file mode
+ * @param excl          Possible O_EXCL...
  * @returns 0 on success, Linux error code otherwise
  */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) || defined(DOXYGEN_RUNNING)
 static int sf_create(struct inode *parent, struct dentry *dentry, umode_t mode, bool excl)
 #elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 3, 0)
 static int sf_create(struct inode *parent, struct dentry *dentry, umode_t mode, struct nameidata *nd)
@@ -689,11 +690,10 @@ static int sf_unlink_aux(struct inode *parent, struct dentry *dentry, int fDirec
         && dentry->d_inode
         && ((dentry->d_inode->i_mode & S_IFLNK) == S_IFLNK))
         fFlags |= SHFL_REMOVE_SYMLINK;
-    rc = vboxCallRemove(&client_handle, &sf_g->map, path, fFlags);
+    rc = VbglR0SfRemove(&client_handle, &sf_g->map, path, fFlags);
     if (RT_FAILURE(rc))
     {
-        LogFunc(("(%d): vboxCallRemove(%s) failed rc=%Rrc\n", fDirectory,
-                    path->String.utf8, rc));
+        LogFunc(("(%d): VbglR0SfRemove(%s) failed rc=%Rrc\n", fDirectory, path->String.utf8, rc));
         err = -RTErrConvertToErrno(rc);
         goto fail1;
     }
@@ -783,7 +783,7 @@ static int sf_rename(struct inode *old_parent, struct dentry *old_dentry,
         {
             int fDir = ((old_dentry->d_inode->i_mode & S_IFDIR) != 0);
 
-            rc = vboxCallRename(&client_handle, &sf_g->map, old_path,
+            rc = VbglR0SfRename(&client_handle, &sf_g->map, old_path,
                                 new_path, fDir ? 0 : SHFL_RENAME_FILE | SHFL_RENAME_REPLACE_IF_EXISTS);
             if (RT_SUCCESS(rc))
             {
@@ -795,7 +795,7 @@ static int sf_rename(struct inode *old_parent, struct dentry *old_dentry,
             }
             else
             {
-                LogFunc(("vboxCallRename failed rc=%Rrc\n", rc));
+                LogFunc(("VbglR0SfRename failed rc=%Rrc\n", rc));
                 err = -RTErrConvertToErrno(rc);
                 kfree(new_path);
             }
@@ -838,7 +838,7 @@ static int sf_symlink(struct inode *parent, struct dentry *dentry, const char *s
     ssymname->u16Size = symname_len;
     memcpy(ssymname->String.utf8, symname, symname_len);
 
-    rc = vboxCallSymlink(&client_handle, &sf_g->map, path, ssymname, &info);
+    rc = VbglR0SfSymlink(&client_handle, &sf_g->map, path, ssymname, &info);
     kfree(ssymname);
 
     if (RT_FAILURE(rc))
@@ -848,7 +848,7 @@ static int sf_symlink(struct inode *parent, struct dentry *dentry, const char *s
             err = -EROFS;
             goto fail1;
         }
-        LogFunc(("vboxCallSymlink(%s) failed rc=%Rrc\n",
+        LogFunc(("VbglR0SfSymlink(%s) failed rc=%Rrc\n",
                     sf_i->path->String.utf8, rc));
         err = -EPROTO;
         goto fail1;
diff --git a/src/VBox/Additions/linux/sharedfolders/files_vboxsf b/src/VBox/Additions/linux/sharedfolders/files_vboxsf
index 6ad29a6..ba97287 100755
--- a/src/VBox/Additions/linux/sharedfolders/files_vboxsf
+++ b/src/VBox/Additions/linux/sharedfolders/files_vboxsf
@@ -26,6 +26,7 @@ FILES_VBOXSF_NOBIN=" \
     ${PATH_ROOT}/include/iprt/cdefs.h=>include/iprt/cdefs.h \
     ${PATH_ROOT}/include/iprt/err.h=>include/iprt/err.h \
     ${PATH_ROOT}/include/iprt/fs.h=>include/iprt/fs.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
     ${PATH_ROOT}/include/iprt/mangling.h=>include/iprt/mangling.h \
     ${PATH_ROOT}/include/iprt/mem.h=>include/iprt/mem.h \
@@ -38,6 +39,7 @@ FILES_VBOXSF_NOBIN=" \
     ${PATH_ROOT}/include/iprt/time.h=>include/iprt/time.h \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
     ${PATH_ROOT}/include/iprt/uni.h=>include/iprt/uni.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/VBox/cdefs.h=>include/VBox/cdefs.h \
     ${PATH_ROOT}/include/VBox/err.h=>include/VBox/err.h \
     ${PATH_ROOT}/include/VBox/hgcmsvc.h=>include/VBox/hgcmsvc.h \
@@ -49,6 +51,7 @@ FILES_VBOXSF_NOBIN=" \
     ${PATH_ROOT}/include/VBox/VBoxGuest.h=>include/VBox/VBoxGuest.h \
     ${PATH_ROOT}/include/VBox/VBoxGuest2.h=>include/VBox/VBoxGuest2.h \
     ${PATH_ROOT}/include/VBox/VBoxGuestLib.h=>include/VBox/VBoxGuestLib.h \
+    ${PATH_ROOT}/include/VBox/VBoxGuestLibSharedFolders.h=>include/VBox/VBoxGuestLibSharedFolders.h \
     ${PATH_ROOT}/include/VBox/VBoxGuestMangling.h=>include/VBox/VBoxGuestMangling.h \
     ${PATH_ROOT}/include/VBox/VMMDev.h=>include/VBox/VMMDev.h \
     ${PATH_ROOT}/include/VBox/VMMDev2.h=>include/VBox/VMMDev2.h \
@@ -60,7 +63,6 @@ FILES_VBOXSF_NOBIN=" \
     ${PATH_ROOT}/src/VBox/Additions/common/VBoxGuestLib/SysHlp.h=>SysHlp.h \
     ${PATH_ROOT}/src/VBox/Additions/common/VBoxGuestLib/VBGLInternal.h=>VBGLInternal.h \
     ${PATH_ROOT}/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.c=>VBoxGuestR0LibSharedFolders.c \
-    ${PATH_ROOT}/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.h=>VBoxGuestR0LibSharedFolders.h \
     ${PATH_ROOT}/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestLog.h=>VBoxGuestLog.h \
     ${PATH_ROOT}/src/VBox/Additions/common/VBoxGuestLib/VMMDev.cpp=>VMMDev.c \
     ${PATH_ROOT}/src/VBox/Additions/common/VBoxGuestLib/VbglR0CanUsePhysPageList.cpp=>VbglR0CanUsePhysPageList.c \
diff --git a/src/VBox/Additions/linux/sharedfolders/lnkops.c b/src/VBox/Additions/linux/sharedfolders/lnkops.c
index 9ac005f..bbc18e9 100644
--- a/src/VBox/Additions/linux/sharedfolders/lnkops.c
+++ b/src/VBox/Additions/linux/sharedfolders/lnkops.c
@@ -36,10 +36,10 @@ static void *sf_follow_link(struct dentry *dentry, struct nameidata *nd)
     if (path)
     {
         error = 0;
-        rc = vboxReadLink(&client_handle, &sf_g->map, sf_i->path, PATH_MAX, path);
+        rc = VbglR0SfReadLink(&client_handle, &sf_g->map, sf_i->path, PATH_MAX, path);
         if (RT_FAILURE(rc))
         {
-            LogFunc(("vboxReadLink failed, caller=%s, rc=%Rrc\n", __func__, rc));
+            LogFunc(("VbglR0SfReadLink failed, caller=%s, rc=%Rrc\n", __func__, rc));
             free_page((unsigned long)path);
             error = -EPROTO;
         }
diff --git a/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c b/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c
index b95f474..75027a4 100644
--- a/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c
+++ b/src/VBox/Additions/linux/sharedfolders/mount.vboxsf.c
@@ -1,5 +1,6 @@
+/* $Id: mount.vboxsf.c $ */
 /** @file
- * vboxsf -- VirtualBox Guest Additions for Linux: mount(8) helper
+ * VirtualBox Guest Additions for Linux - mount(8) helper.
  *
  * Parses options provided by mount (or user directly)
  * Packs them into struct vbsfmount and passes to mount(2)
@@ -7,7 +8,7 @@
  */
 
 /*
- * Copyright (C) 2006-2012 Oracle Corporation
+ * 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;
@@ -20,11 +21,10 @@
 
 
 #ifndef _GNU_SOURCE
-#define _GNU_SOURCE
+# define _GNU_SOURCE
 #endif
 
 /* #define DEBUG */
-#define DBG if (0)
 #include <errno.h>
 #include <fcntl.h>
 #include <ctype.h>
@@ -45,12 +45,8 @@
 
 #include "vbsfmount.h"
 
-/* Compile-time assertion.  If a == 0, we get two identical switch cases, which is not
-   allowed. */
-#define CT_ASSERT(a) \
-    do { \
-        switch(0) { case 0: case (a): ; } \
-    } while (0)
+#include <iprt/assert.h>
+
 
 #define PANIC_ATTR __attribute ((noreturn, __format__ (__printf__, 1, 2)))
 
@@ -128,8 +124,7 @@ process_mount_opts(const char *s, struct vbsf_mount_opts *opts)
         handler_opt opt;
         int has_arg;
         const char *desc;
-    } handlers[]
-    =
+    } handlers[] =
     {
         {"rw",        HORW,        0, "mount read write (default)"},
         {"ro",        HORO,        0, "mount read only"},
@@ -336,9 +331,10 @@ convertcp(char *in_codeset, char *host_name, struct vbsf_mount_info_new *info)
 /**
   * Print out a usage message and exit.
   *
-  * @param name The name of the application
+  * @returns 1
+  * @param   argv0      The name of the application
   */
-static void __attribute ((noreturn)) usage(char *name)
+static int usage(char *argv0)
 {
     printf("Usage: %s [OPTIONS] NAME MOUNTPOINT\n"
            "Mount the VirtualBox shared folder NAME from the host system to MOUNTPOINT.\n"
@@ -348,7 +344,7 @@ static void __attribute ((noreturn)) usage(char *name)
            "  -n                    do not create an mtab entry\n"
            "  -s                    sloppy parsing, ignore unrecognized mount options\n"
            "  -o OPTION[,OPTION...] use the mount options specified\n"
-           "\n", name);
+           "\n", argv0);
     printf("Available mount options are:\n"
            "     rw                 mount writable (the default)\n"
            "     ro                 mount read only\n"
@@ -366,11 +362,11 @@ static void __attribute ((noreturn)) usage(char *name)
            "\n");
     printf("Less common used options:\n"
            "     noexec,exec,nodev,dev,nosuid,suid\n");
-    exit(1);
+    return EXIT_FAILURE;
 }
 
 int
-main (int argc, char **argv)
+main(int argc, char **argv)
 {
     int c;
     int err;
@@ -397,6 +393,8 @@ main (int argc, char **argv)
         "\0",  /* nls_name */
         NULL,  /* convertcp */
     };
+    AssertCompile(sizeof(uid_t) == sizeof(int));
+    AssertCompile(sizeof(gid_t) == sizeof(int));
 
     mntinf.nullchar = '\0';
     mntinf.signature[0] = VBSF_MOUNT_SIGNATURE_BYTE_0;
@@ -410,10 +408,6 @@ main (int argc, char **argv)
     if (!argv[0])
         argv[0] = "mount.vboxsf";
 
-    /* Compile-time assertions */
-    CT_ASSERT(sizeof(uid_t) == sizeof(int));
-    CT_ASSERT(sizeof(gid_t) == sizeof(int));
-
     while ((c = getopt(argc, argv, "rwsno:h")) != -1)
     {
         switch (c)
@@ -422,7 +416,7 @@ main (int argc, char **argv)
                 fprintf(stderr, "unknown option `%c:%#x'\n", c, c);
             case '?':
             case 'h':
-                usage(argv[0]);
+                return usage(argv[0]);
 
             case 'r':
                 opts.ronly = 1;
@@ -446,7 +440,7 @@ main (int argc, char **argv)
     }
 
     if (argc - optind < 2)
-        usage(argv[0]);
+        return usage(argv[0]);
 
     host_name = argv[optind];
     mount_point = argv[optind + 1];
@@ -550,3 +544,4 @@ main (int argc, char **argv)
 
     exit(EXIT_SUCCESS);
 }
+
diff --git a/src/VBox/Additions/linux/sharedfolders/regops.c b/src/VBox/Additions/linux/sharedfolders/regops.c
index 4a3aa36..b590734 100644
--- a/src/VBox/Additions/linux/sharedfolders/regops.c
+++ b/src/VBox/Additions/linux/sharedfolders/regops.c
@@ -63,11 +63,11 @@ static int sf_reg_read_aux(const char *caller, struct sf_glob_info *sf_g,
     /** @todo bird: yes, kmap() and kmalloc() input only. Since the buffer is
      *        contiguous in physical memory (kmalloc or single page), we should
      *        use a physical address here to speed things up. */
-    int rc = vboxCallRead(&client_handle, &sf_g->map, sf_r->handle,
+    int rc = VbglR0SfRead(&client_handle, &sf_g->map, sf_r->handle,
                           pos, nread, buf, false /* already locked? */);
     if (RT_FAILURE(rc))
     {
-        LogFunc(("vboxCallRead failed. caller=%s, rc=%Rrc\n", caller, rc));
+        LogFunc(("VbglR0SfRead failed. caller=%s, rc=%Rrc\n", caller, rc));
         return -EPROTO;
     }
     return 0;
@@ -80,11 +80,11 @@ static int sf_reg_write_aux(const char *caller, struct sf_glob_info *sf_g,
     /** @todo bird: yes, kmap() and kmalloc() input only. Since the buffer is
      *        contiguous in physical memory (kmalloc or single page), we should
      *        use a physical address here to speed things up. */
-    int rc = vboxCallWrite(&client_handle, &sf_g->map, sf_r->handle,
+    int rc = VbglR0SfWrite(&client_handle, &sf_g->map, sf_r->handle,
                            pos, nwritten, buf, false /* already locked? */);
     if (RT_FAILURE(rc))
     {
-        LogFunc(("vboxCallWrite failed. caller=%s, rc=%Rrc\n",
+        LogFunc(("VbglR0SfWrite failed. caller=%s, rc=%Rrc\n",
                     caller, rc));
         return -EPROTO;
     }
@@ -373,12 +373,12 @@ static int sf_reg_open(struct inode *inode, struct file *file)
     }
 
     params.Info.Attr.fMode = inode->i_mode;
-    LogFunc(("sf_reg_open: calling vboxCallCreate, file %s, flags=%#x, %#x\n",
+    LogFunc(("sf_reg_open: calling VbglR0SfCreate, file %s, flags=%#x, %#x\n",
               sf_i->path->String.utf8 , file->f_flags, params.CreateFlags));
-    rc = vboxCallCreate(&client_handle, &sf_g->map, sf_i->path, &params);
+    rc = VbglR0SfCreate(&client_handle, &sf_g->map, sf_i->path, &params);
     if (RT_FAILURE(rc))
     {
-        LogFunc(("vboxCallCreate failed flags=%d,%#x rc=%Rrc\n",
+        LogFunc(("VbglR0SfCreate failed flags=%d,%#x rc=%Rrc\n",
                   file->f_flags, params.CreateFlags, rc));
         kfree(sf_r);
         return -RTErrConvertToErrno(rc);
@@ -438,9 +438,9 @@ static int sf_reg_release(struct inode *inode, struct file *file)
         && filemap_fdatawrite(inode->i_mapping) != -EIO)
         filemap_fdatawait(inode->i_mapping);
 #endif
-    rc = vboxCallClose(&client_handle, &sf_g->map, sf_r->handle);
+    rc = VbglR0SfClose(&client_handle, &sf_g->map, sf_r->handle);
     if (RT_FAILURE(rc))
-        LogFunc(("vboxCallClose failed rc=%Rrc\n", rc));
+        LogFunc(("VbglR0SfClose failed rc=%Rrc\n", rc));
 
     kfree(sf_r);
     sf_i->file = NULL;
@@ -481,7 +481,7 @@ static struct page *sf_reg_nopage(struct vm_area_struct *vma, unsigned long vadd
     }
 #endif
 
-    /* Don't use GFP_HIGHUSER as long as sf_reg_read_aux() calls vboxCallRead()
+    /* Don't use GFP_HIGHUSER as long as sf_reg_read_aux() calls VbglR0SfRead()
      * which works on virtual addresses. On Linux cannot reliably determine the
      * physical address for high memory, see rtR0MemObjNativeLockKernel(). */
     page = alloc_page(GFP_USER);
diff --git a/src/VBox/Additions/linux/sharedfolders/utils.c b/src/VBox/Additions/linux/sharedfolders/utils.c
index 1b72bd0..44cd908 100644
--- a/src/VBox/Additions/linux/sharedfolders/utils.c
+++ b/src/VBox/Additions/linux/sharedfolders/utils.c
@@ -182,9 +182,9 @@ int sf_stat(const char *caller, struct sf_glob_info *sf_g,
     RT_ZERO(params);
     params.Handle = SHFL_HANDLE_NIL;
     params.CreateFlags = SHFL_CF_LOOKUP | SHFL_CF_ACT_FAIL_IF_NEW;
-    LogFunc(("sf_stat: calling vboxCallCreate, file %s, flags %#x\n",
+    LogFunc(("sf_stat: calling VbglR0SfCreate, file %s, flags %#x\n",
              path->String.utf8, params.CreateFlags));
-    rc = vboxCallCreate(&client_handle, &sf_g->map, path, &params);
+    rc = VbglR0SfCreate(&client_handle, &sf_g->map, path, &params);
     if (rc == VERR_INVALID_NAME)
     {
         /* this can happen for names like 'foo*' on a Windows host */
@@ -192,14 +192,14 @@ int sf_stat(const char *caller, struct sf_glob_info *sf_g,
     }
     if (RT_FAILURE(rc))
     {
-        LogFunc(("vboxCallCreate(%s) failed.  caller=%s, rc=%Rrc\n",
+        LogFunc(("VbglR0SfCreate(%s) failed.  caller=%s, rc=%Rrc\n",
                     path->String.utf8, rc, caller));
         return -EPROTO;
     }
     if (params.Result != SHFL_FILE_EXISTS)
     {
         if (!ok_to_fail)
-            LogFunc(("vboxCallCreate(%s) file does not exist.  caller=%s, result=%d\n",
+            LogFunc(("VbglR0SfCreate(%s) file does not exist.  caller=%s, result=%d\n",
                         path->String.utf8, params.Result, caller));
         return -ENOENT;
     }
@@ -328,10 +328,10 @@ int sf_setattr(struct dentry *dentry, struct iattr *iattr)
     if (iattr->ia_valid & ATTR_SIZE)
         params.CreateFlags |= SHFL_CF_ACCESS_WRITE;
 
-    rc = vboxCallCreate(&client_handle, &sf_g->map, sf_i->path, &params);
+    rc = VbglR0SfCreate(&client_handle, &sf_g->map, sf_i->path, &params);
     if (RT_FAILURE(rc))
     {
-        LogFunc(("vboxCallCreate(%s) failed rc=%Rrc\n",
+        LogFunc(("VbglR0SfCreate(%s) failed rc=%Rrc\n",
                  sf_i->path->String.utf8, rc));
         err = -RTErrConvertToErrno(rc);
         goto fail2;
@@ -378,12 +378,12 @@ int sf_setattr(struct dentry *dentry, struct iattr *iattr)
         /* ignore ctime (inode change time) as it can't be set from userland anyway */
 
         cbBuffer = sizeof(info);
-        rc = vboxCallFSInfo(&client_handle, &sf_g->map, params.Handle,
-                SHFL_INFO_SET | SHFL_INFO_FILE, &cbBuffer,
-                (PSHFLDIRINFO)&info);
+        rc = VbglR0SfFsInfo(&client_handle, &sf_g->map, params.Handle,
+                            SHFL_INFO_SET | SHFL_INFO_FILE, &cbBuffer,
+                            (PSHFLDIRINFO)&info);
         if (RT_FAILURE(rc))
         {
-            LogFunc(("vboxCallFSInfo(%s, FILE) failed rc=%Rrc\n",
+            LogFunc(("VbglR0SfFsInfo(%s, FILE) failed rc=%Rrc\n",
                         sf_i->path->String.utf8, rc));
             err = -RTErrConvertToErrno(rc);
             goto fail1;
@@ -395,28 +395,28 @@ int sf_setattr(struct dentry *dentry, struct iattr *iattr)
         RT_ZERO(info);
         info.cbObject = iattr->ia_size;
         cbBuffer = sizeof(info);
-        rc = vboxCallFSInfo(&client_handle, &sf_g->map, params.Handle,
+        rc = VbglR0SfFsInfo(&client_handle, &sf_g->map, params.Handle,
                             SHFL_INFO_SET | SHFL_INFO_SIZE, &cbBuffer,
                             (PSHFLDIRINFO)&info);
         if (RT_FAILURE(rc))
         {
-            LogFunc(("vboxCallFSInfo(%s, SIZE) failed rc=%Rrc\n",
+            LogFunc(("VbglR0SfFsInfo(%s, SIZE) failed rc=%Rrc\n",
                         sf_i->path->String.utf8, rc));
             err = -RTErrConvertToErrno(rc);
             goto fail1;
         }
     }
 
-    rc = vboxCallClose(&client_handle, &sf_g->map, params.Handle);
+    rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle);
     if (RT_FAILURE(rc))
-        LogFunc(("vboxCallClose(%s) failed rc=%Rrc\n", sf_i->path->String.utf8, rc));
+        LogFunc(("VbglR0SfClose(%s) failed rc=%Rrc\n", sf_i->path->String.utf8, rc));
 
     return sf_inode_revalidate(dentry);
 
 fail1:
-    rc = vboxCallClose(&client_handle, &sf_g->map, params.Handle);
+    rc = VbglR0SfClose(&client_handle, &sf_g->map, params.Handle);
     if (RT_FAILURE(rc))
-        LogFunc(("vboxCallClose(%s) failed rc=%Rrc\n", sf_i->path->String.utf8, rc));
+        LogFunc(("VbglR0SfClose(%s) failed rc=%Rrc\n", sf_i->path->String.utf8, rc));
 
 fail2:
     return err;
@@ -793,7 +793,7 @@ int sf_dir_read_all(struct sf_glob_info *sf_g, struct sf_inode_info *sf_i,
         buf = b->buf;
         cbSize = b->cbFree;
 
-        rc = vboxCallDirInfo(&client_handle, &sf_g->map, handle, mask,
+        rc = VbglR0SfDirInfo(&client_handle, &sf_g->map, handle, mask,
                              0, 0, &cbSize, buf, &cEntries);
         switch (rc)
         {
@@ -807,7 +807,7 @@ int sf_dir_read_all(struct sf_glob_info *sf_g, struct sf_inode_info *sf_i,
                 break;
             default:
                 err = -RTErrConvertToErrno(rc);
-                LogFunc(("vboxCallDirInfo failed rc=%Rrc\n", rc));
+                LogFunc(("VbglR0SfDirInfo failed rc=%Rrc\n", rc));
                 goto fail1;
         }
 
@@ -836,7 +836,7 @@ int sf_get_volume_info(struct super_block *sb, STRUCT_STATFS *stat)
 
     sf_g = GET_GLOB_INFO(sb);
     cbBuffer = sizeof(SHFLVolumeInfo);
-    rc = vboxCallFSInfo(&client_handle, &sf_g->map, 0, SHFL_INFO_GET | SHFL_INFO_VOLUME,
+    rc = VbglR0SfFsInfo(&client_handle, &sf_g->map, 0, SHFL_INFO_GET | SHFL_INFO_VOLUME,
                         &cbBuffer, (PSHFLDIRINFO)&SHFLVolumeInfo);
     if (RT_FAILURE(rc))
         return -RTErrConvertToErrno(rc);
diff --git a/src/VBox/Additions/linux/sharedfolders/vfsmod.c b/src/VBox/Additions/linux/sharedfolders/vfsmod.c
index b465a29..a3cd550 100644
--- a/src/VBox/Additions/linux/sharedfolders/vfsmod.c
+++ b/src/VBox/Additions/linux/sharedfolders/vfsmod.c
@@ -38,7 +38,7 @@ MODULE_VERSION(VBOX_VERSION_STRING " (interface " RT_XSTR(VMMDEV_VERSION) ")");
 #endif
 
 /* globals */
-VBSFCLIENT client_handle;
+VBGLSFCLIENT client_handle;
 
 /* forward declarations */
 static struct super_operations sf_super_ops;
@@ -144,13 +144,13 @@ static int sf_glob_alloc(struct vbsf_mount_info_new *info, struct sf_glob_info *
 #undef _IS_EMPTY
     }
 
-    rc = vboxCallMapFolder(&client_handle, str_name, &sf_g->map);
+    rc = VbglR0SfMapFolder(&client_handle, str_name, &sf_g->map);
     kfree(str_name);
 
     if (RT_FAILURE(rc))
     {
         err = -EPROTO;
-        LogFunc(("vboxCallMapFolder failed rc=%d\n", rc));
+        LogFunc(("VbglR0SfMapFolder failed rc=%d\n", rc));
         goto fail2;
     }
 
@@ -193,9 +193,9 @@ sf_glob_free(struct sf_glob_info *sf_g)
     int rc;
 
     TRACE();
-    rc = vboxCallUnmapFolder(&client_handle, &sf_g->map);
+    rc = VbglR0SfUnmapFolder(&client_handle, &sf_g->map);
     if (RT_FAILURE(rc))
-        LogFunc(("vboxCallUnmapFolder failed rc=%d\n", rc));
+        LogFunc(("VbglR0SfUnmapFolder failed rc=%d\n", rc));
 
     if (sf_g->nls)
         unload_nls(sf_g->nls);
@@ -594,26 +594,26 @@ static int __init init(void)
         return err;
     }
 
-    rcVBox = vboxInit();
+    rcVBox = VbglR0SfInit();
     if (RT_FAILURE(rcVBox))
     {
-        LogRelFunc(("vboxInit failed, rc=%d\n", rcVBox));
+        LogRelFunc(("VbglR0SfInit failed, rc=%d\n", rcVBox));
         rcRet = -EPROTO;
         goto fail0;
     }
 
-    rcVBox = vboxConnect(&client_handle);
+    rcVBox = VbglR0SfConnect(&client_handle);
     if (RT_FAILURE(rcVBox))
     {
-        LogRelFunc(("vboxConnect failed, rc=%d\n", rcVBox));
+        LogRelFunc(("VbglR0SfConnect failed, rc=%d\n", rcVBox));
         rcRet = -EPROTO;
         goto fail1;
     }
 
-    rcVBox = vboxCallSetUtf8(&client_handle);
+    rcVBox = VbglR0SfSetUtf8(&client_handle);
     if (RT_FAILURE(rcVBox))
     {
-        LogRelFunc(("vboxCallSetUtf8 failed, rc=%d\n", rcVBox));
+        LogRelFunc(("VbglR0SfSetUtf8 failed, rc=%d\n", rcVBox));
         rcRet = -EPROTO;
         goto fail2;
     }
@@ -621,7 +621,7 @@ static int __init init(void)
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
     if (!follow_symlinks)
     {
-        rcVBox = vboxCallSetSymlinks(&client_handle);
+        rcVBox = VbglR0SfSetSymlinks(&client_handle);
         if (RT_FAILURE(rcVBox))
         {
             printk(KERN_WARNING
@@ -638,10 +638,10 @@ static int __init init(void)
     return 0;
 
 fail2:
-    vboxDisconnect(&client_handle);
+    VbglR0SfDisconnect(&client_handle);
 
 fail1:
-    vboxUninit();
+    VbglR0SfTerm();
 
 fail0:
     unregister_filesystem(&vboxsf_fs_type);
@@ -652,8 +652,8 @@ static void __exit fini(void)
 {
     TRACE();
 
-    vboxDisconnect(&client_handle);
-    vboxUninit();
+    VbglR0SfDisconnect(&client_handle);
+    VbglR0SfTerm();
     unregister_filesystem(&vboxsf_fs_type);
 }
 
diff --git a/src/VBox/Additions/linux/sharedfolders/vfsmod.h b/src/VBox/Additions/linux/sharedfolders/vfsmod.h
index b310a42..482a848 100644
--- a/src/VBox/Additions/linux/sharedfolders/vfsmod.h
+++ b/src/VBox/Additions/linux/sharedfolders/vfsmod.h
@@ -27,7 +27,7 @@
 # include <linux/backing-dev.h>
 #endif
 
-#include "VBoxGuestR0LibSharedFolders.h"
+#include <VBox/VBoxGuestLibSharedFolders.h>
 #include "vbsfmount.h"
 
 #define DIR_BUFFER_SIZE (16*_1K)
@@ -35,7 +35,7 @@
 /* per-shared folder information */
 struct sf_glob_info
 {
-    VBSFMAP map;
+    VBGLSFMAP map;
     struct nls_table *nls;
     int ttl;
     int uid;
@@ -85,7 +85,7 @@ struct sf_reg_info
 };
 
 /* globals */
-extern VBSFCLIENT client_handle;
+extern VBGLSFCLIENT client_handle;
 
 /* forward declarations */
 extern struct inode_operations         sf_dir_iops;
diff --git a/src/VBox/Additions/solaris/Mouse/testcase/solaris.h b/src/VBox/Additions/solaris/Mouse/testcase/solaris.h
index facc2ed..118ba91 100644
--- a/src/VBox/Additions/solaris/Mouse/testcase/solaris.h
+++ b/src/VBox/Additions/solaris/Mouse/testcase/solaris.h
@@ -350,7 +350,7 @@ extern int vboxguestSolarisInfo(struct modinfo *pModInfo);
 #define VbglGRPerform(...) VINF_SUCCESS
 #define VbglGRFree(...) do {} while(0)
 #endif
-#define VbglInit(...) VINF_SUCCESS
+#define VbglInitClient(...) VINF_SUCCESS
 #define vbglDriverOpen(...) VINF_SUCCESS
 #define vbglDriverClose(...) do {} while(0)
 #define vbglDriverIOCtl(...) VINF_SUCCESS
diff --git a/src/VBox/Additions/solaris/Mouse/vboxms.c b/src/VBox/Additions/solaris/Mouse/vboxms.c
index 4dbb0bf..be43aec 100644
--- a/src/VBox/Additions/solaris/Mouse/vboxms.c
+++ b/src/VBox/Additions/solaris/Mouse/vboxms.c
@@ -470,7 +470,7 @@ int vbmsSolOpen(queue_t *pReadQueue, dev_t *pDev, int fFlag, int fMode,
          * Initialize IPRT R0 driver, which internally calls OS-specific r0
          * init, and create a new session.
          */
-        rc = VbglInit();
+        rc = VbglInitClient();
         if (RT_SUCCESS(rc))
         {
             rc = VbglGRAlloc((VMMDevRequestHeader **)
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs.h b/src/VBox/Additions/solaris/SharedFolders/vboxfs.h
index 1e15e92..fbc7d3f 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs.h
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs.h
@@ -41,7 +41,7 @@ extern "C" {
 
 #ifdef _KERNEL
 
-#include "../../common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.h"
+#include <VBox/VBoxGuestLibSharedFolders.h>
 #include <sys/vfs.h>
 
 /** VNode for VBoxVFS */
@@ -57,7 +57,7 @@ typedef struct vboxvfs_vnode
 /** Per-file system mount instance data. */
 typedef struct vboxvfs_globinfo
 {
-    VBSFMAP         Map;
+    VBGLSFMAP       Map;
     int             Ttl;
     int             Uid;
     int             Gid;
@@ -68,13 +68,13 @@ typedef struct vboxvfs_globinfo
 
 extern struct vnodeops *g_pVBoxVFS_vnodeops;
 extern const fs_operation_def_t g_VBoxVFS_vnodeops_template[];
-extern VBSFCLIENT g_VBoxVFSClient;
+extern VBGLSFCLIENT g_VBoxVFSClient;
 
 /** Helper functions */
 extern int vboxvfs_Stat(const char *pszCaller, vboxvfs_globinfo_t *pVBoxVFSGlobalInfo, SHFLSTRING *pPath,
-            PSHFLFSOBJINFO pResult, boolean_t fAllowFailure);
+                        PSHFLFSOBJINFO pResult, boolean_t fAllowFailure);
 extern void vboxvfs_InitVNode(vboxvfs_globinfo_t *pVBoxVFSGlobalInfo, vboxvfs_vnode_t *pVBoxVNode,
-            PSHFLFSOBJINFO pFSInfo);
+                              PSHFLFSOBJINFO pFSInfo);
 
 
 /** Helper macros */
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c b/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c
index 1128686..9fd1c2a 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c
@@ -45,11 +45,10 @@
 #ifdef u
 #undef u
 #endif
-#include "../../common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.h"
 
 #define	SFPROV_VERSION	1
 
-static VBSFCLIENT vbox_client;
+static VBGLSFCLIENT vbox_client;
 
 static int sfprov_vbox2errno(int rc)
 {
@@ -89,28 +88,28 @@ sfprov_connect(int version)
 		cmn_err(CE_WARN, "sfprov_connect: wrong version. version=%d expected=%d\n", version, SFPROV_VERSION);
 		return NULL;
 	}
-	rc = vboxInit();
+	rc = VbglR0SfInit();
 	if (RT_SUCCESS(rc))
 	{
-		rc = vboxConnect(&vbox_client);
+		rc = VbglR0SfConnect(&vbox_client);
 		if (RT_SUCCESS(rc))
 		{
-			rc = vboxCallSetUtf8(&vbox_client);
+			rc = VbglR0SfSetUtf8(&vbox_client);
 			if (RT_SUCCESS(rc))
 			{
 				return ((sfp_connection_t *)&vbox_client);
 			}
 			else
-				cmn_err(CE_WARN, "sfprov_connect: vboxCallSetUtf8() failed\n");
+				cmn_err(CE_WARN, "sfprov_connect: VbglR0SfSetUtf8() failed\n");
 
-			vboxDisconnect(&vbox_client);
+			VbglR0SfDisconnect(&vbox_client);
 		}
 		else
-			cmn_err(CE_WARN, "sfprov_connect: vboxConnect() failed rc=%d\n", rc);
-		vboxUninit();
+			cmn_err(CE_WARN, "sfprov_connect: VbglR0SfConnect() failed rc=%d\n", rc);
+		VbglR0SfTerm();
 	}
 	else
-		cmn_err(CE_WARN, "sfprov_connect: vboxInit() failed rc=%d\n", rc);
+		cmn_err(CE_WARN, "sfprov_connect: VbglR0SfInit() failed rc=%d\n", rc);
 	return (NULL);
 }
 
@@ -119,8 +118,8 @@ sfprov_disconnect(sfp_connection_t *conn)
 {
 	if (conn != (sfp_connection_t *)&vbox_client)
 		cmn_err(CE_WARN, "sfprov_disconnect: bad argument\n");
-	vboxDisconnect(&vbox_client);
-	vboxUninit();
+	VbglR0SfDisconnect(&vbox_client);
+	VbglR0SfTerm();
 }
 
 
@@ -134,9 +133,9 @@ sfprov_mount(sfp_connection_t *conn, char *path, sfp_mount_t **mnt)
 
 	m = kmem_zalloc(sizeof (*m), KM_SLEEP);
 	str = sfprov_string(path, &size);
-	rc = vboxCallMapFolder(&vbox_client, str, &m->map);
+	rc = VbglR0SfMapFolder(&vbox_client, str, &m->map);
 	if (RT_FAILURE(rc)) {
-		cmn_err(CE_WARN, "sfprov_mount: vboxCallMapFolder() failed. path=%s rc=%d\n", path, rc);
+		cmn_err(CE_WARN, "sfprov_mount: VbglR0SfMapFolder() failed. path=%s rc=%d\n", path, rc);
 		kmem_free(m, sizeof (*m));
 		*mnt = NULL;
 		rc = EINVAL;
@@ -153,9 +152,9 @@ sfprov_unmount(sfp_mount_t *mnt)
 {
 	int rc;
 
-	rc = vboxCallUnmapFolder(&vbox_client, &mnt->map);
+	rc = VbglR0SfUnmapFolder(&vbox_client, &mnt->map);
 	if (RT_FAILURE(rc)) {
-		cmn_err(CE_WARN, "sfprov_mount: vboxCallUnmapFolder() failed rc=%d\n", rc);
+		cmn_err(CE_WARN, "sfprov_mount: VbglR0SfUnmapFolder() failed rc=%d\n", rc);
 		rc = EINVAL;
 	} else {
 		rc = 0;
@@ -174,8 +173,8 @@ sfprov_get_fsinfo(sfp_mount_t *mnt, sffs_fsinfo_t *fsinfo)
 	SHFLVOLINFO info;
 	uint32_t bytes = sizeof(SHFLVOLINFO);
 
-	rc = vboxCallFSInfo(&vbox_client, &mnt->map, 0,
-	    (SHFL_INFO_GET | SHFL_INFO_VOLUME), &bytes, (SHFLDIRINFO *)&info);
+	rc = VbglR0SfFsInfo(&vbox_client, &mnt->map, 0, SHFL_INFO_GET | SHFL_INFO_VOLUME,
+			    &bytes, (SHFLDIRINFO *)&info);
 	if (RT_FAILURE(rc))
 		return (EINVAL);
 
@@ -311,7 +310,7 @@ sfprov_stat_from_info(sfp_mount_t *mnt, sffs_stat_t *stat, SHFLFSOBJINFO *info)
  */
 struct sfp_file {
 	SHFLHANDLE handle;
-	VBSFMAP map;	/* need this again for the close operation */
+	VBGLSFMAP map;	/**< need this again for the close operation */
 };
 
 int
@@ -335,13 +334,13 @@ sfprov_create(
 	sfprov_fmode_from_mode(&parms.Info.Attr.fMode, mode);
 	parms.CreateFlags = SHFL_CF_ACT_CREATE_IF_NEW |
 	    SHFL_CF_ACT_REPLACE_IF_EXISTS | SHFL_CF_ACCESS_READWRITE;
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	rc = VbglR0SfCreate(&vbox_client, &mnt->map, str, &parms);
 	kmem_free(str, size);
 
 	if (RT_FAILURE(rc))
 	{
 		if (rc != VERR_ACCESS_DENIED && rc != VERR_WRITE_PROTECT)
-			cmn_err(CE_WARN, "sfprov_create: vboxCallCreate failed! path=%s rc=%d\n", path, rc);
+			cmn_err(CE_WARN, "sfprov_create: VbglR0SfCreate failed! path=%s rc=%d\n", path, rc);
 		return (sfprov_vbox2errno(rc));
 	}
 	if (parms.Handle == SHFL_HANDLE_NIL) {
@@ -378,7 +377,7 @@ sfprov_diropen(sfp_mount_t *mnt, char *path, sfp_file_t **fp)
 	/*
 	 * Open the host directory.
 	 */
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	rc = VbglR0SfCreate(&vbox_client, &mnt->map, str, &parms);
 
 	/*
 	 * Our VBoxFS interface here isn't very clear regarding failure and informational status.
@@ -438,7 +437,7 @@ sfprov_open(sfp_mount_t *mnt, char *path, sfp_file_t **fp, int flag)
 	/*
 	 * Open/create the host file.
 	 */
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	rc = VbglR0SfCreate(&vbox_client, &mnt->map, str, &parms);
 
 	/*
 	 * Our VBoxFS interface here isn't very clear regarding failure and informational status.
@@ -466,7 +465,7 @@ sfprov_close(sfp_file_t *fp)
 {
 	int rc;
 
-	rc = vboxCallClose(&vbox_client, &fp->map, fp->handle);
+	rc = VbglR0SfClose(&vbox_client, &fp->map, fp->handle);
 	kmem_free(fp, sizeof(sfp_file_t));
 	return (0);
 }
@@ -476,8 +475,8 @@ sfprov_read(sfp_file_t *fp, char *buffer, uint64_t offset, uint32_t *numbytes)
 {
 	int rc;
 
-	rc = vboxCallRead(&vbox_client, &fp->map, fp->handle, offset,
-	    numbytes, (uint8_t *)buffer, 0);	/* what is that last arg? */
+	rc = VbglR0SfRead(&vbox_client, &fp->map, fp->handle, offset,
+			  numbytes, (uint8_t *)buffer, 0 /*fLocked*/);
 	if (RT_FAILURE(rc))
 		return (EINVAL);
 	return (0);
@@ -488,8 +487,8 @@ sfprov_write(sfp_file_t *fp, char *buffer, uint64_t offset, uint32_t *numbytes)
 {
 	int rc;
 
-	rc = vboxCallWrite(&vbox_client, &fp->map, fp->handle, offset,
-	    numbytes, (uint8_t *)buffer, 0);	/* what is that last arg? */
+	rc = VbglR0SfWrite(&vbox_client, &fp->map, fp->handle, offset,
+			   numbytes, (uint8_t *)buffer, 0 /*fLocked*/);
 	if (RT_FAILURE(rc))
 		return (EINVAL);
 	return (0);
@@ -500,7 +499,7 @@ sfprov_fsync(sfp_file_t *fp)
 {
 	int rc;
 
-	rc = vboxCallFlush(&vbox_client, &fp->map, fp->handle);
+	rc = VbglR0SfFlush(&vbox_client, &fp->map, fp->handle);
 	if (RT_FAILURE(rc))
 		return (EIO);
 	return (0);
@@ -519,7 +518,7 @@ sfprov_getinfo(sfp_mount_t *mnt, char *path, PSHFLFSOBJINFO info)
 	parms.Handle = 0;
 	parms.Info.cbObject = 0;
 	parms.CreateFlags = SHFL_CF_LOOKUP | SHFL_CF_ACT_FAIL_IF_NEW;
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	rc = VbglR0SfCreate(&vbox_client, &mnt->map, str, &parms);
 	kmem_free(str, size);
 
 	if (RT_FAILURE(rc))
@@ -643,10 +642,10 @@ sfprov_set_attr(
 			  | SHFL_CF_ACT_FAIL_IF_NEW
 			  | SHFL_CF_ACCESS_ATTR_WRITE;
 
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	rc = VbglR0SfCreate(&vbox_client, &mnt->map, str, &parms);
 
 	if (RT_FAILURE(rc)) {
-		cmn_err(CE_WARN, "sfprov_set_attr: vboxCallCreate(%s) failed rc=%d\n",
+		cmn_err(CE_WARN, "sfprov_set_attr: VbglR0SfCreate(%s) failed rc=%d\n",
 		    path, rc);
 		err = EINVAL;
 		goto fail2;
@@ -667,12 +666,12 @@ sfprov_set_attr(
 		sfprov_timespec_from_ftime(&info.ChangeTime, ctime);
 
 	bytes = sizeof(info);
-	rc = vboxCallFSInfo(&vbox_client, &mnt->map, parms.Handle,
-	    (SHFL_INFO_SET | SHFL_INFO_FILE), &bytes, (SHFLDIRINFO *)&info);
+	rc = VbglR0SfFsInfo(&vbox_client, &mnt->map, parms.Handle, SHFL_INFO_SET | SHFL_INFO_FILE,
+			    &bytes, (SHFLDIRINFO *)&info);
 	if (RT_FAILURE(rc)) {
 		if (rc != VERR_ACCESS_DENIED && rc != VERR_WRITE_PROTECT)
 		{
-			cmn_err(CE_WARN, "sfprov_set_attr: vboxCallFSInfo(%s, FILE) failed rc=%d\n",
+			cmn_err(CE_WARN, "sfprov_set_attr: VbglR0SfFsInfo(%s, FILE) failed rc=%d\n",
 		    path, rc);
 		}
 		err = sfprov_vbox2errno(rc);
@@ -682,9 +681,9 @@ sfprov_set_attr(
 	err = 0;
 
 fail1:
-	rc = vboxCallClose(&vbox_client, &mnt->map, parms.Handle);
+	rc = VbglR0SfClose(&vbox_client, &mnt->map, parms.Handle);
 	if (RT_FAILURE(rc)) {
-		cmn_err(CE_WARN, "sfprov_set_attr: vboxCallClose(%s) failed rc=%d\n",
+		cmn_err(CE_WARN, "sfprov_set_attr: VbglR0SfClose(%s) failed rc=%d\n",
 		    path, rc);
 	}
 fail2:
@@ -709,10 +708,10 @@ sfprov_set_size(sfp_mount_t *mnt, char *path, uint64_t size)
 			  | SHFL_CF_ACT_FAIL_IF_NEW
 			  | SHFL_CF_ACCESS_WRITE;
 
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	rc = VbglR0SfCreate(&vbox_client, &mnt->map, str, &parms);
 
 	if (RT_FAILURE(rc)) {
-		cmn_err(CE_WARN, "sfprov_set_size: vboxCallCreate(%s) failed rc=%d\n",
+		cmn_err(CE_WARN, "sfprov_set_size: VbglR0SfCreate(%s) failed rc=%d\n",
 		    path, rc);
 		err = EINVAL;
 		goto fail2;
@@ -725,10 +724,10 @@ sfprov_set_size(sfp_mount_t *mnt, char *path, uint64_t size)
 	RT_ZERO(info);
 	info.cbObject = size;
 	bytes = sizeof(info);
-	rc = vboxCallFSInfo(&vbox_client, &mnt->map, parms.Handle,
-	    (SHFL_INFO_SET | SHFL_INFO_SIZE), &bytes, (SHFLDIRINFO *)&info);
+	rc = VbglR0SfFsInfo(&vbox_client, &mnt->map, parms.Handle, SHFL_INFO_SET | SHFL_INFO_SIZE,
+			    &bytes, (SHFLDIRINFO *)&info);
 	if (RT_FAILURE(rc)) {
-		cmn_err(CE_WARN, "sfprov_set_size: vboxCallFSInfo(%s, SIZE) failed rc=%d\n",
+		cmn_err(CE_WARN, "sfprov_set_size: VbglR0SfFsInfo(%s, SIZE) failed rc=%d\n",
 		    path, rc);
 		err = sfprov_vbox2errno(rc);
 		goto fail1;
@@ -737,9 +736,9 @@ sfprov_set_size(sfp_mount_t *mnt, char *path, uint64_t size)
 	err = 0;
 
 fail1:
-	rc = vboxCallClose(&vbox_client, &mnt->map, parms.Handle);
+	rc = VbglR0SfClose(&vbox_client, &mnt->map, parms.Handle);
 	if (RT_FAILURE(rc)) {
-		cmn_err(CE_WARN, "sfprov_set_size: vboxCallClose(%s) failed rc=%d\n",
+		cmn_err(CE_WARN, "sfprov_set_size: VbglR0SfClose(%s) failed rc=%d\n",
 		    path, rc);
 	}
 fail2:
@@ -770,7 +769,7 @@ sfprov_mkdir(
 	sfprov_fmode_from_mode(&parms.Info.Attr.fMode, mode);
 	parms.CreateFlags = SHFL_CF_DIRECTORY | SHFL_CF_ACT_CREATE_IF_NEW |
 	    SHFL_CF_ACT_FAIL_IF_EXISTS | SHFL_CF_ACCESS_READ;
-	rc = vboxCallCreate(&vbox_client, &mnt->map, str, &parms);
+	rc = VbglR0SfCreate(&vbox_client, &mnt->map, str, &parms);
 	kmem_free(str, size);
 
 	if (RT_FAILURE(rc))
@@ -793,7 +792,7 @@ sfprov_set_show_symlinks(void)
 {
 	int rc;
 
-	rc = vboxCallSetSymlinks(&vbox_client);
+	rc = VbglR0SfSetSymlinks(&vbox_client);
 	if (RT_FAILURE(rc))
 		return (sfprov_vbox2errno(rc));
 
@@ -808,8 +807,8 @@ sfprov_remove(sfp_mount_t *mnt, char *path, uint_t is_link)
 	int size;
 
 	str = sfprov_string(path, &size);
-	rc = vboxCallRemove(&vbox_client, &mnt->map, str,
-		SHFL_REMOVE_FILE | (is_link ? SHFL_REMOVE_SYMLINK : 0));
+	rc = VbglR0SfRemove(&vbox_client, &mnt->map, str,
+			    SHFL_REMOVE_FILE | (is_link ? SHFL_REMOVE_SYMLINK : 0));
 	kmem_free(str, size);
 	if (RT_FAILURE(rc))
 		return (sfprov_vbox2errno(rc));
@@ -829,7 +828,7 @@ sfprov_readlink(
 
 	str = sfprov_string(path, &size);
 
-	rc = vboxReadLink(&vbox_client, &mnt->map, str, (uint32_t) tgt_size,
+	rc = VbglR0SfReadLink(&vbox_client, &mnt->map, str, (uint32_t) tgt_size,
 	    target);
 	if (RT_FAILURE(rc))
 		rc = sfprov_vbox2errno(rc);
@@ -853,7 +852,7 @@ sfprov_symlink(
 	lnk = sfprov_string(linkname, &lnk_size);
 	tgt = sfprov_string(target, &tgt_size);
 
-	rc = vboxCallSymlink(&vbox_client, &mnt->map, lnk, tgt, &info);
+	rc = VbglR0SfSymlink(&vbox_client, &mnt->map, lnk, tgt, &info);
 	if (RT_FAILURE(rc)) {
 		rc = sfprov_vbox2errno(rc);
 		goto done;
@@ -877,7 +876,7 @@ sfprov_rmdir(sfp_mount_t *mnt, char *path)
 	int size;
 
 	str = sfprov_string(path, &size);
-	rc = vboxCallRemove(&vbox_client, &mnt->map, str, SHFL_REMOVE_DIR);
+	rc = VbglR0SfRemove(&vbox_client, &mnt->map, str, SHFL_REMOVE_DIR);
 	kmem_free(str, size);
 	if (RT_FAILURE(rc))
 		return (sfprov_vbox2errno(rc));
@@ -893,9 +892,8 @@ sfprov_rename(sfp_mount_t *mnt, char *from, char *to, uint_t is_dir)
 
 	old = sfprov_string(from, &old_size);
 	new = sfprov_string(to, &new_size);
-	rc = vboxCallRename(&vbox_client, &mnt->map, old, new,
-	    (is_dir ? SHFL_RENAME_DIR : SHFL_RENAME_FILE) |
-	    SHFL_RENAME_REPLACE_IF_EXISTS);
+	rc = VbglR0SfRename(&vbox_client, &mnt->map, old, new,
+			    (is_dir ? SHFL_RENAME_DIR : SHFL_RENAME_FILE) | SHFL_RENAME_REPLACE_IF_EXISTS);
 	kmem_free(old, old_size);
 	kmem_free(new, new_size);
 	if (RT_FAILURE(rc))
@@ -973,7 +971,7 @@ sfprov_readdir(
 	kmem_free(cp, len);
 
 	/*
-	 * Now loop using vboxCallDirInfo
+	 * Now loop using VbglR0SfDirInfo
 	 */
 	infobuff = kmem_alloc(infobuff_alloc, KM_SLEEP);
 	if (infobuff == NULL) {
@@ -984,8 +982,8 @@ sfprov_readdir(
 	offset = 0;
 	for (;;) {
 		numbytes = infobuff_alloc;
-		error = vboxCallDirInfo(&vbox_client, &fp->map, fp->handle,
-		    mask_str, 0, 0, &numbytes, infobuff, &nents);
+		error = VbglR0SfDirInfo(&vbox_client, &fp->map, fp->handle,
+					mask_str, 0, 0, &numbytes, infobuff, &nents);
 		switch (error) {
 
 		case VINF_SUCCESS:
diff --git a/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h b/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h
index 6596a3a..c005d52 100644
--- a/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h
+++ b/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h
@@ -28,12 +28,12 @@
 #ifndef	___VBoxFS_prov_Solaris_h
 #define	___VBoxFS_prov_Solaris_h
 
+#include <VBox/VBoxGuestLibSharedFolders.h>
+
 #ifdef	__cplusplus
 extern "C" {
 #endif
 
-#include "../../common/VBoxGuestLib/VBoxGuestR0LibSharedFolders.h"
-
 
 /*
  * These are the provider interfaces used by sffs to access the underlying
@@ -69,13 +69,13 @@ extern void sfprov_disconnect(sfp_connection_t *);
  * spf_mount_t is the representation of an active mount point.
  */
 typedef struct spf_mount_t {
-	VBSFMAP		map;		/* guest<->host mapping */
-	uid_t		sf_uid;		/* owner of the mount point */
-	gid_t		sf_gid;		/* group of the mount point */
-	mode_t		sf_dmode;   /* mode of all directories if != ~0U */
-	mode_t		sf_fmode;   /* mode of all files if != ~0U */
-	mode_t		sf_dmask;   /* mask of all directories */
-	mode_t		sf_fmask;   /* mask of all files */
+	VBGLSFMAP	map;		/**< guest<->host mapping */
+	uid_t		sf_uid;		/**< owner of the mount point */
+	gid_t		sf_gid;		/**< group of the mount point */
+	mode_t		sf_dmode;   /**< mode of all directories if != ~0U */
+	mode_t		sf_fmode;   /**< mode of all files if != ~0U */
+	mode_t		sf_dmask;   /**< mask of all directories */
+	mode_t		sf_fmask;   /**< mask of all files */
 } sfp_mount_t;
 
 extern int sfprov_mount(sfp_connection_t *, char *, sfp_mount_t **);
diff --git a/src/VBox/Additions/x11/undefined_xorg b/src/VBox/Additions/x11/undefined_xorg
index 4949a71..f6e579f 100644
--- a/src/VBox/Additions/x11/undefined_xorg
+++ b/src/VBox/Additions/x11/undefined_xorg
@@ -178,4 +178,5 @@ xf86SetDesiredModes
 xf86SetModeDefaultName
 xf86SetSingleMode
 xf86UpdateDesktopDimensions
+XNFcallocarray
 __xstat64
diff --git a/src/VBox/Additions/x11/vboxvideo/Makefile.kmk b/src/VBox/Additions/x11/vboxvideo/Makefile.kmk
index f3f5dae..248e54f 100644
--- a/src/VBox/Additions/x11/vboxvideo/Makefile.kmk
+++ b/src/VBox/Additions/x11/vboxvideo/Makefile.kmk
@@ -19,7 +19,7 @@ SUB_DEPTH = ../../../../..
 include $(KBUILD_PATH)/subheader.kmk
 
 vboxvideo_70_DEFS := \
-	IN_MODULE XORG_7X RENDER=1 IN_RT_STATIC
+	IN_MODULE XORG_7X RENDER=1 IN_RT_STATIC X_BYTE_ORDER=X_LITTLE_ENDIAN
 ifeq ($(KBUILD_TARGET),solaris) # don't use .solaris or anything here.
  vboxvideo_70_DEFS += __EXTENSIONS__  ## @todo Why this?
 endif
@@ -383,6 +383,20 @@ vboxvideo_drv_117_INCS = \
 vboxvideo_drv_117_INCS += $(PATH_ROOT)/src/VBox/Runtime/include
 vboxvideo_drv_117_SOURCES := $(vboxvideo_drv_17_SOURCES)
 
+
+#
+# vboxvideo_drv_118
+#
+DLLS += vboxvideo_drv_118
+vboxvideo_drv_118_TEMPLATE = VBOXGUESTR3XORGMOD
+vboxvideo_drv_118_CFLAGS := $(vboxvideo_drv_70_CFLAGS)
+vboxvideo_drv_118_DEFS := $(vboxvideo_15_DEFS) XORG_VERSION_CURRENT=11800000
+vboxvideo_drv_118_INCS = \
+	$(vboxvideo_xorg_INCS) \
+	$(VBOX_PATH_X11_ROOT)/xorg-server-1.18.0
+vboxvideo_drv_118_INCS += $(PATH_ROOT)/src/VBox/Runtime/include
+vboxvideo_drv_118_SOURCES := $(vboxvideo_drv_17_SOURCES)
+
 ifdef VBOX_USE_SYSTEM_XORG_HEADERS
  # Build using local X.Org headers.  We assume X.Org Server 1.7 or later.
  DLLS    := $(filter-out vboxvideo_drv_%,$(DLLS)) vboxvideo_drv_system
@@ -436,7 +450,7 @@ $$(vboxvideo_drv_0_OUTDIR)/tstvboxvideo68.run: $$(vboxvideo_drv_1_STAGE_TARGET)
 	$$(QUIET)$$(APPEND) -t "$$@" "done"
     endef
 
-    $(foreach ver, _70 _71 _13 _14 _15 _16 _17 _18 _19 _110 _111 _112 _113 _114 _115 _116 _117, $(eval $(def_vboxvideo_test)))
+    $(foreach ver, _70 _71 _13 _14 _15 _16 _17 _18 _19 _110 _111 _112 _113 _114 _115 _116 _117 _118, $(eval $(def_vboxvideo_test)))
 
     endif # ! VBOX_ONLY_SDK
    endif # eq ($(KBUILD_HOST_ARCH),$(KBUILD_TARGET_ARCH))
diff --git a/src/VBox/Additions/x11/vboxvideo/setmode.c b/src/VBox/Additions/x11/vboxvideo/setmode.c
index b940cca..c190331 100644
--- a/src/VBox/Additions/x11/vboxvideo/setmode.c
+++ b/src/VBox/Additions/x11/vboxvideo/setmode.c
@@ -1,6 +1,5 @@
 /* $Id: setmode.c $ */
 /** @file
- *
  * Linux Additions X11 graphics driver, mode setting
  */
 
diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo.c b/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
index 0d5bc42..f5059ae 100644
--- a/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
+++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
@@ -1,6 +1,5 @@
 /* $Id: vboxvideo.c $ */
 /** @file
- *
  * Linux Additions X11 graphics driver
  */
 
diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo.h b/src/VBox/Additions/x11/vboxvideo/vboxvideo.h
index f93092b..ce462ea 100644
--- a/src/VBox/Additions/x11/vboxvideo/vboxvideo.h
+++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo.h
@@ -1,6 +1,5 @@
 /* $Id: vboxvideo.h $ */
 /** @file
- *
  * VirtualBox X11 Additions graphics driver
  */
 
diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo_dri.c b/src/VBox/Additions/x11/vboxvideo/vboxvideo_dri.c
index 33abb17..9a13394 100644
--- a/src/VBox/Additions/x11/vboxvideo/vboxvideo_dri.c
+++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo_dri.c
@@ -1,5 +1,5 @@
-/** @file $Id: vboxvideo_dri.c $
- *
+/*  $Id: vboxvideo_dri.c $ */
+/** @file
  * VirtualBox X11 Additions graphics driver, DRI support
  */
 
diff --git a/src/VBox/Additions/x11/vboxvideo/vboxvideo_dri2.c b/src/VBox/Additions/x11/vboxvideo/vboxvideo_dri2.c
index 639113e..d809518 100644
--- a/src/VBox/Additions/x11/vboxvideo/vboxvideo_dri2.c
+++ b/src/VBox/Additions/x11/vboxvideo/vboxvideo_dri2.c
@@ -1,5 +1,5 @@
-/** @file $Id: vboxvideo_dri2.c $
- *
+/*  $Id: vboxvideo_dri2.c $ */
+/** @file
  * VirtualBox X11 Additions graphics driver, DRI2 support
  */
 
diff --git a/src/VBox/Debugger/DBGCCmdHlp.cpp b/src/VBox/Debugger/DBGCCmdHlp.cpp
index 5400d33..9f23a7a 100644
--- a/src/VBox/Debugger/DBGCCmdHlp.cpp
+++ b/src/VBox/Debugger/DBGCCmdHlp.cpp
@@ -621,7 +621,7 @@ static DECLCALLBACK(int) dbgcHlpMemWrite(PDBGCCMDHLP pCmdHlp, const void *pvBuff
 
 
 /**
- * @interface_method_impl{DBGCCMDHLP,pfnHlpExec}
+ * @interface_method_impl{DBGCCMDHLP,pfnExec}
  */
 static DECLCALLBACK(int) dbgcHlpExec(PDBGCCMDHLP pCmdHlp, const char *pszExpr, ...)
 {
@@ -657,7 +657,7 @@ static DECLCALLBACK(int) dbgcHlpExec(PDBGCCMDHLP pCmdHlp, const char *pszExpr, .
 
 
 /**
- * @copydoc DBGCCMDHLP::pfnEvalV
+ * @interface_method_impl{DBGCCMDHLP,pfnEvalV}
  */
 static DECLCALLBACK(int) dbgcHlpEvalV(PDBGCCMDHLP pCmdHlp, PDBGCVAR pResult, const char *pszExpr, va_list va)
 {
@@ -675,7 +675,7 @@ static DECLCALLBACK(int) dbgcHlpEvalV(PDBGCCMDHLP pCmdHlp, PDBGCVAR pResult, con
 
 
 /**
- * @copydoc DBGCCMDHLP::pfnFailV
+ * @interface_method_impl{DBGCCMDHLP,pfnFailV}
  */
 static DECLCALLBACK(int) dbgcHlpFailV(PDBGCCMDHLP pCmdHlp, PCDBGCCMD pCmd, const char *pszFormat, va_list va)
 {
@@ -698,7 +698,7 @@ static DECLCALLBACK(int) dbgcHlpFailV(PDBGCCMDHLP pCmdHlp, PCDBGCCMD pCmd, const
 
 
 /**
- * @copydoc DBGCCMDHLP::pfnFailV
+ * @interface_method_impl{DBGCCMDHLP,pfnFailV}
  */
 static DECLCALLBACK(int) dbgcHlpFailRcV(PDBGCCMDHLP pCmdHlp, PCDBGCCMD pCmd, int rc, const char *pszFormat, va_list va)
 {
@@ -723,7 +723,7 @@ static DECLCALLBACK(int) dbgcHlpFailRcV(PDBGCCMDHLP pCmdHlp, PCDBGCCMD pCmd, int
 
 
 /**
- * @copydoc DBGCCMDHLP::pfnParserError
+ * @interface_method_impl{DBGCCMDHLP,pfnParserError}
  */
 static DECLCALLBACK(int) dbgcHlpParserError(PDBGCCMDHLP pCmdHlp, PCDBGCCMD pCmd, int iArg, const char *pszExpr, unsigned iLine)
 {
diff --git a/src/VBox/Debugger/DBGCCommands.cpp b/src/VBox/Debugger/DBGCCommands.cpp
index 911ee1f..80f5ebe 100644
--- a/src/VBox/Debugger/DBGCCommands.cpp
+++ b/src/VBox/Debugger/DBGCCommands.cpp
@@ -337,7 +337,7 @@ PCDBGCCMD dbgcCommandLookup(PDBGC pDbgc, const char *pachName, size_t cchName, b
 /**
  * Register one or more external commands.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   paCommands      Pointer to an array of command descriptors.
  *                          The commands must be unique. It's not possible
  *                          to register the same commands more than once.
@@ -385,7 +385,7 @@ DBGDECL(int)    DBGCRegisterCommands(PCDBGCCMD paCommands, unsigned cCommands)
  * Deregister one or more external commands previously registered by
  * DBGCRegisterCommands().
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   paCommands      Pointer to an array of command descriptors
  *                          as given to DBGCRegisterCommands().
  * @param   cCommands       Number of commands.
@@ -725,7 +725,7 @@ static void dbgcCmdHelpSummary(PDBGC pDbgc, PDBGCCMDHLP pCmdHlp, uint32_t *pcHit
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'help' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'help' command.}
  */
 static DECLCALLBACK(int) dbgcCmdHelp(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -839,7 +839,7 @@ static DECLCALLBACK(int) dbgcCmdHelp(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM p
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'quit', 'exit' and 'bye' commands. }
+ * @callback_method_impl{FNDBGCCMD, The 'quit'\, 'exit' and 'bye' commands. }
  */
 static DECLCALLBACK(int) dbgcCmdQuit(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -853,7 +853,7 @@ static DECLCALLBACK(int) dbgcCmdQuit(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM p
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'stop' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'stop' command.}
  */
 static DECLCALLBACK(int) dbgcCmdStop(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -878,7 +878,7 @@ static DECLCALLBACK(int) dbgcCmdStop(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM p
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'echo' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'echo' command.}
  */
 static DECLCALLBACK(int) dbgcCmdEcho(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -899,7 +899,7 @@ static DECLCALLBACK(int) dbgcCmdEcho(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM p
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'runscript' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'runscript' command.}
  */
 static DECLCALLBACK(int) dbgcCmdRunScript(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -980,7 +980,7 @@ static DECLCALLBACK(int) dbgcCmdRunScript(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, P
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'detect' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'detect' command.}
  */
 static DECLCALLBACK(int) dbgcCmdDetect(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1011,7 +1011,7 @@ static DECLCALLBACK(int) dbgcCmdDetect(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'dmesg' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'dmesg' command.}
  */
 static DECLCALLBACK(int) dbgcCmdDmesg(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1071,7 +1071,7 @@ static DECLCALLBACK(int) dbgcCmdDmesg(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'cpu' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'cpu' command.}
  */
 static DECLCALLBACK(int) dbgcCmdCpu(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1105,7 +1105,7 @@ static DECLCALLBACK(int) dbgcCmdCpu(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'info' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'info' command.}
  */
 static DECLCALLBACK(int) dbgcCmdInfo(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1137,7 +1137,7 @@ static DECLCALLBACK(int) dbgcCmdInfo(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM p
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'log' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'log' command.}
  */
 static DECLCALLBACK(int) dbgcCmdLog(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1162,7 +1162,7 @@ static DECLCALLBACK(int) dbgcCmdLog(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'logdest' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'logdest' command.}
  */
 static DECLCALLBACK(int) dbgcCmdLogDest(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1187,7 +1187,7 @@ static DECLCALLBACK(int) dbgcCmdLogDest(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUV
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'logflags' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'logflags' command.}
  */
 static DECLCALLBACK(int) dbgcCmdLogFlags(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1213,7 +1213,7 @@ static DECLCALLBACK(int) dbgcCmdLogFlags(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'logflush' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'logflush' command.}
  */
 static DECLCALLBACK(int) dbgcCmdLogFlush(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1228,7 +1228,7 @@ static DECLCALLBACK(int) dbgcCmdLogFlush(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'format' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'format' command.}
  */
 static DECLCALLBACK(int) dbgcCmdFormat(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1355,7 +1355,7 @@ static DECLCALLBACK(int) dbgcCmdFormat(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'loadimage' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'loadimage' command.}
  */
 static DECLCALLBACK(int) dbgcCmdLoadImage(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1406,7 +1406,7 @@ static DECLCALLBACK(int) dbgcCmdLoadImage(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, P
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'loadmap' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'loadmap' command.}
  */
 static DECLCALLBACK(int) dbgcCmdLoadMap(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1466,7 +1466,7 @@ static DECLCALLBACK(int) dbgcCmdLoadMap(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUV
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'loadseg' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'loadseg' command.}
  */
 static DECLCALLBACK(int) dbgcCmdLoadSeg(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1515,7 +1515,7 @@ static DECLCALLBACK(int) dbgcCmdLoadSeg(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUV
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'unload' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'unload' command.}
  */
 static DECLCALLBACK(int) dbgcCmdUnload(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1543,7 +1543,7 @@ static DECLCALLBACK(int) dbgcCmdUnload(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'set' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'set' command.}
  */
 static DECLCALLBACK(int) dbgcCmdSet(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1632,7 +1632,7 @@ static DECLCALLBACK(int) dbgcCmdSet(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'unset' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'unset' command.}
  */
 static DECLCALLBACK(int) dbgcCmdUnset(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1675,7 +1675,7 @@ static DECLCALLBACK(int) dbgcCmdUnset(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'loadvars' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'loadvars' command.}
  */
 static DECLCALLBACK(int) dbgcCmdLoadVars(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1725,7 +1725,7 @@ static DECLCALLBACK(int) dbgcCmdLoadVars(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'showvars' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'showvars' command.}
  */
 static DECLCALLBACK(int) dbgcCmdShowVars(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1746,7 +1746,7 @@ static DECLCALLBACK(int) dbgcCmdShowVars(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'loadplugin' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'loadplugin' command.}
  */
 static DECLCALLBACK(int) dbgcCmdLoadPlugIn(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1778,7 +1778,7 @@ static DECLCALLBACK(int) dbgcCmdLoadPlugIn(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp,
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'unload' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'unload' command.}
  */
 static DECLCALLBACK(int) dbgcCmdUnloadPlugIn(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1803,7 +1803,7 @@ static DECLCALLBACK(int) dbgcCmdUnloadPlugIn(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'harakiri' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'harakiri' command.}
  */
 static DECLCALLBACK(int) dbgcCmdHarakiri(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1815,7 +1815,7 @@ static DECLCALLBACK(int) dbgcCmdHarakiri(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'writecore' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'writecore' command.}
  */
 static DECLCALLBACK(int) dbgcCmdWriteCore(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1845,7 +1845,7 @@ static DECLCALLBACK(int) dbgcCmdWriteCore(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, P
 
 
 /**
- * @callback_method_impl{The randu32() function implementation.}
+ * @callback_method_impl{FNDBGCFUNC, The randu32() function implementation.}
  */
 static DECLCALLBACK(int) dbgcFuncRandU32(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PVM pUVM, PCDBGCVAR paArgs, uint32_t cArgs,
                                          PDBGCVAR pResult)
diff --git a/src/VBox/Debugger/DBGCEmulateCodeView.cpp b/src/VBox/Debugger/DBGCEmulateCodeView.cpp
index d99badd..7006f37 100644
--- a/src/VBox/Debugger/DBGCEmulateCodeView.cpp
+++ b/src/VBox/Debugger/DBGCEmulateCodeView.cpp
@@ -377,7 +377,7 @@ const uint32_t g_cCmdsCodeView = RT_ELEMENTS(g_aCmdsCodeView);
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'go' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'go' command.}
  */
 static DECLCALLBACK(int) dbgcCmdGo(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -399,7 +399,7 @@ static DECLCALLBACK(int) dbgcCmdGo(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUV
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'ba' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'ba' command.}
  */
 static DECLCALLBACK(int) dbgcCmdBrkAccess(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -496,7 +496,7 @@ static DECLCALLBACK(int) dbgcCmdBrkAccess(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, P
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'bc' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'bc' command.}
  */
 static DECLCALLBACK(int) dbgcCmdBrkClear(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -548,7 +548,7 @@ static DECLCALLBACK(int) dbgcCmdBrkClear(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'bd' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'bd' command.}
  */
 static DECLCALLBACK(int) dbgcCmdBrkDisable(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -590,7 +590,7 @@ static DECLCALLBACK(int) dbgcCmdBrkDisable(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp,
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'be' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'be' command.}
  */
 static DECLCALLBACK(int) dbgcCmdBrkEnable(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -720,7 +720,7 @@ static DECLCALLBACK(int) dbgcEnumBreakpointsCallback(PUVM pUVM, void *pvUser, PC
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'bl' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'bl' command.}
  */
 static DECLCALLBACK(int) dbgcCmdBrkList(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -740,7 +740,7 @@ static DECLCALLBACK(int) dbgcCmdBrkList(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUV
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'bp' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'bp' command.}
  */
 static DECLCALLBACK(int) dbgcCmdBrkSet(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -800,7 +800,7 @@ static DECLCALLBACK(int) dbgcCmdBrkSet(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'br' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'br' command.}
  */
 static DECLCALLBACK(int) dbgcCmdBrkREM(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -901,7 +901,7 @@ static void dbgcCmdUnassambleHelpListNear(PUVM pUVM, PDBGCCMDHLP pCmdHlp, RTDBGA
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'u' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'u' command.}
  */
 static DECLCALLBACK(int) dbgcCmdUnassemble(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1124,7 +1124,7 @@ static DECLCALLBACK(int) dbgcCmdUnassemble(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp,
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'ls' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'ls' command.}
  */
 static DECLCALLBACK(int) dbgcCmdListSource(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1313,7 +1313,7 @@ static DECLCALLBACK(int) dbgcCmdListSource(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp,
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'r' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'r' command.}
  */
 static DECLCALLBACK(int) dbgcCmdReg(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1325,7 +1325,7 @@ static DECLCALLBACK(int) dbgcCmdReg(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, Common worker for the dbgcCmdReg*()
+ * @callback_method_impl{FNDBGCCMD, Common worker for the dbgcCmdReg*()
  *                       commands.}
  */
 static DECLCALLBACK(int) dbgcCmdRegCommon(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs,
@@ -1433,8 +1433,8 @@ static DECLCALLBACK(int) dbgcCmdRegCommon(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, P
 
 
 /**
- * @interface_method_impl{FNDBCCMD,
- * The 'rg', 'rg64' and 'rg32' commands, worker for 'r'.}
+ * @callback_method_impl{FNDBGCCMD,
+ *      The 'rg'\, 'rg64' and 'rg32' commands\, worker for 'r'.}
  */
 static DECLCALLBACK(int) dbgcCmdRegGuest(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1534,7 +1534,7 @@ static DECLCALLBACK(int) dbgcCmdRegGuest(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'rh' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'rh' command.}
  */
 static DECLCALLBACK(int) dbgcCmdRegHyper(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1584,7 +1584,7 @@ static DECLCALLBACK(int) dbgcCmdRegHyper(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'rt' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'rt' command.}
  */
 static DECLCALLBACK(int) dbgcCmdRegTerse(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1597,7 +1597,7 @@ static DECLCALLBACK(int) dbgcCmdRegTerse(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PU
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 't' command.}
+ * @callback_method_impl{FNDBGCCMD, The 't' command.}
  */
 static DECLCALLBACK(int) dbgcCmdTrace(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -1615,7 +1615,7 @@ static DECLCALLBACK(int) dbgcCmdTrace(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'k', 'kg' and 'kh' commands.}
+ * @callback_method_impl{FNDBGCCMD, The 'k'\, 'kg' and 'kh' commands.}
  */
 static DECLCALLBACK(int) dbgcCmdStack(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -2010,7 +2010,7 @@ static int dbgcCmdDumpDTWorker32(PDBGCCMDHLP pCmdHlp, PCX86DESC pDesc, unsigned
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'dg', 'dga', 'dl' and 'dla' commands.}
+ * @callback_method_impl{FNDBGCCMD, The 'dg'\, 'dga'\, 'dl' and 'dla' commands.}
  */
 static DECLCALLBACK(int) dbgcCmdDumpDT(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -2123,7 +2123,7 @@ static DECLCALLBACK(int) dbgcCmdDumpDT(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'di' and 'dia' commands.}
+ * @callback_method_impl{FNDBGCCMD, The 'di' and 'dia' commands.}
  */
 static DECLCALLBACK(int) dbgcCmdDumpIDT(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -2237,8 +2237,8 @@ static DECLCALLBACK(int) dbgcCmdDumpIDT(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUV
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'da', 'dq', 'dd', 'dw' and 'db'
- *                       commands.}
+ * @callback_method_impl{FNDBGCCMD,
+ *      The 'da'\, 'dq'\, 'dd'\, 'dw' and 'db' commands.}
  */
 static DECLCALLBACK(int) dbgcCmdDumpMem(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -2498,8 +2498,8 @@ static RTHCPHYS dbgcGetShadowPageMode(PDBGC pDbgc, bool *pfPAE, bool *pfLME, boo
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'dpd', 'dpda', 'dpdb', 'dpdg' and 'dpdh'
- *                       commands.}
+ * @callback_method_impl{FNDBGCCMD,
+ *      The 'dpd'\, 'dpda'\, 'dpdb'\, 'dpdg' and 'dpdh' commands.}
  */
 static DECLCALLBACK(int) dbgcCmdDumpPageDir(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -2752,7 +2752,7 @@ static DECLCALLBACK(int) dbgcCmdDumpPageDir(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp,
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'dpdb' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'dpdb' command.}
  */
 static DECLCALLBACK(int) dbgcCmdDumpPageDirBoth(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -2767,7 +2767,7 @@ static DECLCALLBACK(int) dbgcCmdDumpPageDirBoth(PCDBGCCMD pCmd, PDBGCCMDHLP pCmd
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'dph*' commands and main part of 'm'.}
+ * @callback_method_impl{FNDBGCCMD, The 'dph*' commands and main part of 'm'.}
  */
 static DECLCALLBACK(int) dbgcCmdDumpPageHierarchy(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -2883,7 +2883,7 @@ static DECLCALLBACK(int) dbgcCmdDumpPageHierarchy(PCDBGCCMD pCmd, PDBGCCMDHLP pC
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'dpg*' commands.}
+ * @callback_method_impl{FNDBGCCMD, The 'dpg*' commands.}
  */
 static DECLCALLBACK(int) dbgcCmdDumpPageTable(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -3104,7 +3104,7 @@ static DECLCALLBACK(int) dbgcCmdDumpPageTable(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHl
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'dptb' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'dptb' command.}
  */
 static DECLCALLBACK(int) dbgcCmdDumpPageTableBoth(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -3119,7 +3119,7 @@ static DECLCALLBACK(int) dbgcCmdDumpPageTableBoth(PCDBGCCMD pCmd, PDBGCCMDHLP pC
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'dt' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'dt' command.}
  */
 static DECLCALLBACK(int) dbgcCmdDumpTSS(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -3445,7 +3445,7 @@ static DECLCALLBACK(int) dbgcCmdDumpTSS(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUV
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'm' command.}
+ * @callback_method_impl{FNDBGCCMD, The 'm' command.}
  */
 static DECLCALLBACK(int) dbgcCmdMemoryInfo(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -3593,7 +3593,7 @@ int dbgcVarsToBytes(PDBGCCMDHLP pCmdHlp, void *pvBuf, uint32_t *pcbBuf, size_t c
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'eb', 'ew', 'ed' and 'eq' commands.}
+ * @callback_method_impl{FNDBGCCMD, The 'eb'\, 'ew'\, 'ed' and 'eq' commands.}
  */
 static DECLCALLBACK(int) dbgcCmdEditMem(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -3780,7 +3780,7 @@ static int dbgcCmdWorkerSearchMemResume(PDBGCCMDHLP pCmdHlp, PUVM pUVM, PDBGCVAR
 /**
  * Search memory, worker for the 's' and 's?' functions.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pCmdHlp     Pointer to the command helper functions.
  * @param   pUVM        The user mode VM handle.
  * @param   pAddress    Where to start searching. If no range, search till end of address space.
@@ -3856,7 +3856,7 @@ static int dbgcCmdWorkerSearchMem(PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR pAdd
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 's' command.}
+ * @callback_method_impl{FNDBGCCMD, The 's' command.}
  */
 static DECLCALLBACK(int) dbgcCmdSearchMem(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -3880,7 +3880,7 @@ static DECLCALLBACK(int) dbgcCmdSearchMem(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, P
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 's?' command.}
+ * @callback_method_impl{FNDBGCCMD, The 's?' command.}
  */
 static DECLCALLBACK(int) dbgcCmdSearchMemType(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -3949,7 +3949,7 @@ static int dbgcDoListNear(PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR pArg)
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'ln' (listnear) command.}
+ * @callback_method_impl{FNDBGCCMD, The 'ln' (listnear) command.}
  */
 static DECLCALLBACK(int) dbgcCmdListNear(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -4001,7 +4001,7 @@ static bool dbgcCmdListModuleMatch(const char *pszName, PCDBGCVAR paArgs, unsign
 
 
 /**
- * @interface_method_impl{FNDBCCMD, The 'ln' (list near) command.}
+ * @callback_method_impl{FNDBGCCMD, The 'ln' (list near) command.}
  */
 static DECLCALLBACK(int) dbgcCmdListModules(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -4137,7 +4137,7 @@ static DECLCALLBACK(int) dbgcCmdListModules(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp,
 
 
 /**
- * @callback_method_impl{Reads a unsigned 8-bit value.}
+ * @callback_method_impl{FNDBGCFUNC, Reads a unsigned 8-bit value.}
  */
 static DECLCALLBACK(int) dbgcFuncReadU8(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, uint32_t cArgs,
                                         PDBGCVAR pResult)
@@ -4158,7 +4158,7 @@ static DECLCALLBACK(int) dbgcFuncReadU8(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, P
 
 
 /**
- * @callback_method_impl{Reads a unsigned 16-bit value.}
+ * @callback_method_impl{FNDBGCFUNC, Reads a unsigned 16-bit value.}
  */
 static DECLCALLBACK(int) dbgcFuncReadU16(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, uint32_t cArgs,
                                          PDBGCVAR pResult)
@@ -4179,7 +4179,7 @@ static DECLCALLBACK(int) dbgcFuncReadU16(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp,
 
 
 /**
- * @callback_method_impl{Reads a unsigned 32-bit value.}
+ * @callback_method_impl{FNDBGCFUNC, Reads a unsigned 32-bit value.}
  */
 static DECLCALLBACK(int) dbgcFuncReadU32(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, uint32_t cArgs,
                                          PDBGCVAR pResult)
@@ -4200,7 +4200,7 @@ static DECLCALLBACK(int) dbgcFuncReadU32(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp,
 
 
 /**
- * @callback_method_impl{Reads a unsigned 64-bit value.}
+ * @callback_method_impl{FNDBGCFUNC, Reads a unsigned 64-bit value.}
  */
 static DECLCALLBACK(int) dbgcFuncReadU64(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, uint32_t cArgs,
                                          PDBGCVAR pResult)
@@ -4221,7 +4221,7 @@ static DECLCALLBACK(int) dbgcFuncReadU64(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp,
 
 
 /**
- * @callback_method_impl{Reads a unsigned pointer-sized value.}
+ * @callback_method_impl{FNDBGCFUNC, Reads a unsigned pointer-sized value.}
  */
 static DECLCALLBACK(int) dbgcFuncReadPtr(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, uint32_t cArgs,
                                          PDBGCVAR pResult)
@@ -4238,7 +4238,7 @@ static DECLCALLBACK(int) dbgcFuncReadPtr(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp,
 
 
 /**
- * @callback_method_impl{The hi(value) function implementation.}
+ * @callback_method_impl{FNDBGCFUNC, The hi(value) function implementation.}
  */
 static DECLCALLBACK(int) dbgcFuncHi(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, uint32_t cArgs,
                                     PDBGCVAR pResult)
@@ -4266,7 +4266,7 @@ static DECLCALLBACK(int) dbgcFuncHi(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM
 
 
 /**
- * @callback_method_impl{The low(value) function implementation.}
+ * @callback_method_impl{FNDBGCFUNC, The low(value) function implementation.}
  */
 static DECLCALLBACK(int) dbgcFuncLow(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, uint32_t cArgs,
                                      PDBGCVAR pResult)
@@ -4294,7 +4294,7 @@ static DECLCALLBACK(int) dbgcFuncLow(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM
 
 
 /**
- * @callback_method_impl{The low(value) function implementation.}
+ * @callback_method_impl{FNDBGCFUNC,The low(value) function implementation.}
  */
 static DECLCALLBACK(int) dbgcFuncNot(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, uint32_t cArgs,
                                      PDBGCVAR pResult)
diff --git a/src/VBox/Debugger/DBGCFunctions.cpp b/src/VBox/Debugger/DBGCFunctions.cpp
index a0f8a98..473b439 100644
--- a/src/VBox/Debugger/DBGCFunctions.cpp
+++ b/src/VBox/Debugger/DBGCFunctions.cpp
@@ -43,7 +43,7 @@ static PDBGCEXTFUNCS    g_pExtFuncsHead;
 
 
 /**
- * @callback_method_impl{The randu32() function implementation.}
+ * @callback_method_impl{FNDBGCFUNC, The randu32() function implementation.}
  */
 static DECLCALLBACK(int) dbgcFuncRandU32(PCDBGCFUNC pFunc, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, uint32_t cArgs,
                                          PDBGCVAR pResult)
diff --git a/src/VBox/Debugger/DBGCOps.cpp b/src/VBox/Debugger/DBGCOps.cpp
index 39cb501..c4aa2ed 100644
--- a/src/VBox/Debugger/DBGCOps.cpp
+++ b/src/VBox/Debugger/DBGCOps.cpp
@@ -236,14 +236,7 @@ static int dbgcOpHelperGetNumber(PDBGC pDbgc, PCDBGCVAR pArg, uint64_t *pu64Ret)
 
 
 /**
- * Minus (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Negate (unary).}
  */
 static DECLCALLBACK(int) dbgcOpMinus(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult)
 {
@@ -281,14 +274,7 @@ static DECLCALLBACK(int) dbgcOpMinus(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enm
 
 
 /**
- * Plus (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Plus (unary).}
  */
 static DECLCALLBACK(int) dbgcOpPluss(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult)
 {
@@ -315,14 +301,7 @@ static DECLCALLBACK(int) dbgcOpPluss(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enm
 
 
 /**
- * Boolean not (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Boolean not (unary).}
  */
 static DECLCALLBACK(int) dbgcOpBooleanNot(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult)
 {
@@ -364,14 +343,7 @@ static DECLCALLBACK(int) dbgcOpBooleanNot(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCA
 
 
 /**
- * Bitwise not (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Bitwise not (unary).}
  */
 static DECLCALLBACK(int) dbgcOpBitwiseNot(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult)
 {
@@ -409,14 +381,7 @@ static DECLCALLBACK(int) dbgcOpBitwiseNot(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCA
 
 
 /**
- * Reference variable (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Reference variable (unary).}
  */
 static DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult)
 {
@@ -441,14 +406,7 @@ static DECLCALLBACK(int) dbgcOpVar(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCa
 
 
 /**
- * Reference register (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Reference register (unary).}
  */
 DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult)
 {
@@ -530,14 +488,7 @@ DECLCALLBACK(int) dbgcOpRegister(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat,
 
 
 /**
- * Flat address (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Flat address (unary).}
  */
 DECLCALLBACK(int) dbgcOpAddrFlat(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult)
 {
@@ -548,14 +499,7 @@ DECLCALLBACK(int) dbgcOpAddrFlat(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat,
 
 
 /**
- * Physical address (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Physical address (unary).}
  */
 DECLCALLBACK(int) dbgcOpAddrPhys(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult)
 {
@@ -566,14 +510,7 @@ DECLCALLBACK(int) dbgcOpAddrPhys(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat,
 
 
 /**
- * Physical host address (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Physical host address (unary).}
  */
 DECLCALLBACK(int) dbgcOpAddrHostPhys(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult)
 {
@@ -583,14 +520,7 @@ DECLCALLBACK(int) dbgcOpAddrHostPhys(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enm
 
 
 /**
- * Host address (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Host address (unary).}
  */
 DECLCALLBACK(int) dbgcOpAddrHost(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat, PDBGCVAR pResult)
 {
@@ -600,14 +530,7 @@ DECLCALLBACK(int) dbgcOpAddrHost(PDBGC pDbgc, PCDBGCVAR pArg, DBGCVARCAT enmCat,
 
 
 /**
- * Bitwise not (unary).
- *
- * @returns VINF_SUCCESS on success.
- * @returns VBox evaluation / parsing error code on failure.
- *          The caller does the bitching.
- * @param   pDbgc       Debugger console instance data.
- * @param   pArg        The argument.
- * @param   pResult     Where to store the result.
+ * @callback_method_impl{FNDBGCOPUNARY, Far address (unary).}
  */
 static DECLCALLBACK(int) dbgcOpAddrFar(PDBGC pDbgc, PCDBGCVAR pArg1, PCDBGCVAR pArg2, PDBGCVAR pResult)
 {
diff --git a/src/VBox/Debugger/DBGCTcp.cpp b/src/VBox/Debugger/DBGCTcp.cpp
index 3231f2d..2be023e 100644
--- a/src/VBox/Debugger/DBGCTcp.cpp
+++ b/src/VBox/Debugger/DBGCTcp.cpp
@@ -179,7 +179,7 @@ static DECLCALLBACK(void) dbgcTcpBackSetReady(PDBGCBACK pBack, bool fBusy)
 /**
  * Serve a TCP Server connection.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @returns VERR_TCP_SERVER_STOP to terminate the server loop forcing
  *          the RTTcpCreateServer() call to return.
  * @param   Sock        The socket which the client is connected to.
@@ -209,7 +209,7 @@ static DECLCALLBACK(int) dbgcTcpConnection(RTSOCKET Sock, void *pvUser)
 /**
  * Spawns a new thread with a TCP based debugging console service.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM        The user mode VM handle.
  * @param   ppvData     Where to store a pointer to the instance data.
  */
@@ -272,7 +272,7 @@ DBGDECL(int)    DBGCTcpCreate(PUVM pUVM, void **ppvData)
 /**
  * Terminates any running TCP base debugger console service.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM            The user mode VM handle.
  * @param   pvData          The data returned by DBGCTcpCreate.
  */
diff --git a/src/VBox/Debugger/DBGConsole.cpp b/src/VBox/Debugger/DBGConsole.cpp
index 48ec175..d69c2fc 100644
--- a/src/VBox/Debugger/DBGConsole.cpp
+++ b/src/VBox/Debugger/DBGConsole.cpp
@@ -385,7 +385,7 @@ static int dbgcProcessCommands(PDBGC pDbgc, bool fNoExecute)
  *
  * Will read any available input looking for a '\n' to reset the buffer on.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDbgc   Debugger console instance data.
  */
 static int dbgcInputOverflow(PDBGC pDbgc)
@@ -429,7 +429,7 @@ static int dbgcInputOverflow(PDBGC pDbgc)
 /**
  * Read input and do some preprocessing.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *          In addition to the iWrite and achInput, cInputLines is maintained.
  *          In case of an input overflow the fInputOverflow flag will be set.
  * @param   pDbgc   Debugger console instance data.
@@ -530,7 +530,7 @@ static int dbgcInputRead(PDBGC pDbgc)
 /**
  * Reads input, parses it and executes commands on '\n'.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDbgc       Debugger console instance data.
  * @param   fNoExecute  Indicates that no commands should actually be executed.
  */
@@ -603,7 +603,7 @@ static const char *dbgcGetEventCtx(DBGFEVENTCTX enmCtx)
 /**
  * Processes debugger events.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDbgc   DBGC Instance data.
  * @param   pEvent  Pointer to event data.
  */
@@ -783,7 +783,7 @@ static int dbgcProcessEvent(PDBGC pDbgc, PCDBGFEVENT pEvent)
  *
  * The caller must not call function this unless pDbgc->fLog is set.
  *
- * @returns VBox status. (output related)
+ * @returns VBox status code. (output related)
  * @param   pDbgc   Debugger console instance data.
  */
 static int dbgcProcessLog(PDBGC pDbgc)
@@ -806,7 +806,7 @@ static DECLCALLBACK(void) dbgcDbgCfgLogCallback(RTDBGCFG hDbgCfg, uint32_t iLeve
 /**
  * Run the debugger console.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDbgc   Pointer to the debugger console instance data.
  */
 int dbgcRun(PDBGC pDbgc)
diff --git a/src/VBox/Devices/Audio/AudioMixer.cpp b/src/VBox/Devices/Audio/AudioMixer.cpp
index 4370176..2293d93 100644
--- a/src/VBox/Devices/Audio/AudioMixer.cpp
+++ b/src/VBox/Devices/Audio/AudioMixer.cpp
@@ -106,6 +106,10 @@ int AudioMixerAddStreamIn(PAUDMIXSINK pSink, PPDMIAUDIOCONNECTOR pConnector, PPD
         LogFlowFunc(("%s: pStream=%p, cStreams=%RU8\n",
                      pSink->pszName, pMixStream, pSink->cStreams));
 
+        /* Increase the stream's reference count to let others know
+         * we're reyling on it to be around now. */
+        pStream->State.cRefs++;
+
         if (ppStream)
             *ppStream = pMixStream;
 
@@ -144,6 +148,10 @@ int AudioMixerAddStreamOut(PAUDMIXSINK pSink, PPDMIAUDIOCONNECTOR pConnector, PP
         LogFlowFunc(("%s: pStream=%p, cStreams=%RU8\n",
                      pSink->pszName, pMixStream, pSink->cStreams));
 
+        /* Increase the stream's reference count to let others know
+         * we're reyling on it to be around now. */
+        pStream->State.cRefs++;
+
         if (ppStream)
             *ppStream = pMixStream;
 
@@ -200,30 +208,24 @@ int AudioMixerCreate(const char *pszName, uint32_t uFlags, PAUDIOMIXER *ppMixer)
 
 void AudioMixerDestroy(PAUDIOMIXER pMixer)
 {
-    if (pMixer)
-    {
-        LogFlowFunc(("Destroying %s ...\n", pMixer->pszName));
-
-        PAUDMIXSINK pSink = RTListGetFirst(&pMixer->lstSinks, AUDMIXSINK, Node);
-        while (pSink)
-        {
-            PAUDMIXSINK pNext = RTListNodeGetNext(&pSink->Node, AUDMIXSINK, Node);
-            bool fLast = RTListNodeIsLast(&pMixer->lstSinks, &pSink->Node);
-
-            AudioMixerRemoveSink(pMixer, pSink);
+    if (!pMixer)
+        return;
 
-            if (fLast)
-                break;
+    LogFlowFunc(("Destroying %s ...\n", pMixer->pszName));
 
-            pSink = pNext;
-        }
+    PAUDMIXSINK pSink, pSinkNext;
+    RTListForEachSafe(&pMixer->lstSinks, pSink, pSinkNext, AUDMIXSINK, Node)
+        AudioMixerRemoveSink(pMixer, pSink);
 
-        Assert(pMixer->cSinks == 0);
+    Assert(pMixer->cSinks == 0);
 
+    if (pMixer->pszName)
+    {
         RTStrFree(pMixer->pszName);
-
-        RTMemFree(pMixer);
+        pMixer->pszName = NULL;
     }
+
+    RTMemFree(pMixer);
 }
 
 static void audioMixerDestroySink(PAUDMIXSINK pSink)
@@ -232,7 +234,8 @@ static void audioMixerDestroySink(PAUDMIXSINK pSink)
     if (!pSink)
         return;
 
-    RTStrFree(pSink->pszName);
+    if (pSink->pszName)
+        RTStrFree(pSink->pszName);
 
     RTMemFree(pSink);
 }
@@ -368,7 +371,7 @@ void AudioMixerRemoveSink(PAUDIOMIXER pMixer, PAUDMIXSINK pSink)
     Assert(pMixer->cSinks);
     pMixer->cSinks--;
 
-    LogFlowFunc(("%s: pSink=%s, cSinks=%RU8\n",
+    LogRel(("%s: pSink=%s, cSinks=%RU8\n",
                  pMixer->pszName, pSink->pszName, pMixer->cSinks));
 
     audioMixerDestroySink(pSink);
@@ -387,9 +390,31 @@ void AudioMixerRemoveStream(PAUDMIXSINK pSink, PAUDMIXSTREAM pStream)
     const char *pszStream = pSink->enmDir == AUDMIXSINKDIR_INPUT
                           ? pStream->pIn->MixBuf.pszName : pStream->pOut->MixBuf.pszName;
 
-    LogFlowFunc(("%s: pStream=%s, cStreams=%RU8\n",
+    LogRel(("%s: pStream=%s, cStreams=%RU8\n",
                  pSink->pszName, pszStream, pSink->cStreams));
 
+    /* Decrease the reference count again. */
+    switch (pSink->enmDir)
+    {
+        case AUDMIXSINKDIR_INPUT:
+        {
+            Assert(pStream->pIn->State.cRefs);
+            pStream->pIn->State.cRefs--;
+            break;
+        }
+
+        case AUDMIXSINKDIR_OUTPUT:
+        {
+            Assert(pStream->pOut->State.cRefs);
+            pStream->pOut->State.cRefs--;
+            break;
+        }
+
+        default:
+            AssertMsgFailed(("Not implemented\n"));
+            break;
+    }
+
     audioMixerDestroyStream(pStream);
 }
 
diff --git a/src/VBox/Devices/Audio/DevIchAc97.cpp b/src/VBox/Devices/Audio/DevIchAc97.cpp
index f6e5cce..f4b49b2 100644
--- a/src/VBox/Devices/Audio/DevIchAc97.cpp
+++ b/src/VBox/Devices/Audio/DevIchAc97.cpp
@@ -165,10 +165,21 @@ enum
     AC97_6Ch_Vol_C_LFE_Mute        = 0x36,
     AC97_6Ch_Vol_L_R_Surround_Mute = 0x38,
     AC97_Vendor_Reserved           = 0x58,
+    AC97_AD_Misc                   = 0x76,
     AC97_Vendor_ID1                = 0x7c,
     AC97_Vendor_ID2                = 0x7e
 };
 
+/* Codec models. */
+enum {
+    Codec_STAC9700 = 0,     /* SigmaTel STAC9700 */
+    Codec_AD1980,           /* Analog Devices AD1980 */
+    Codec_AD1981B           /* Analog Devices AD1981B */
+};
+
+/* Analog Devices miscellaneous regiter bits used in AD1980. */
+#define AD_MISC_LOSEL       RT_BIT(5)   /* Surround (rear) goes to line out outputs. */
+#define AD_MISC_HPSEL       RT_BIT(10)  /* PCM (front) goes to headphone outputs. */
 
 /*********************************************************************************************************************************
 *   Structures and Typedefs                                                                                                      *
@@ -301,6 +312,8 @@ typedef struct AC97STATE
     R3PTRTYPE(uint8_t *)    pvReadWriteBuf;
     /** Size of the temporary scratch read/write buffer. */
     uint32_t                cbReadWriteBuf;
+    /** Codec model. */
+    uint32_t                uCodecModel;
 } AC97STATE;
 /** Pointer to the AC97 device state. */
 typedef AC97STATE *PAC97STATE;
@@ -500,7 +513,7 @@ static uint16_t ichac97MixerLoad(PAC97STATE pThis, uint32_t i)
 
     if (i + 2 > sizeof(pThis->mixer_data))
     {
-        LogFlowFunc(("mixer_store: index %d out of bounds %d\n", i, sizeof(pThis->mixer_data)));
+        LogFlowFunc(("mixer_load: index %d out of bounds %d\n", i, sizeof(pThis->mixer_data)));
         val = 0xffff;
     }
     else
@@ -541,9 +554,9 @@ static void ichac97OpenStream(PAC97STATE pThis, int index, uint16_t freq)
                         break;
                     }
 
-                    rc = pDrv->pConnector->pfnOpenIn(pDrv->pConnector,
-                                                     pszDesc, PDMAUDIORECSOURCE_LINE_IN, &streamCfg, &pDrv->LineIn.pStrmIn);
-                    LogFlowFunc(("LUN#%RU8: Opened line input with rc=%Rrc\n", uLUN, rc));
+                    rc = pDrv->pConnector->pfnCreateIn(pDrv->pConnector,
+                                                       pszDesc, PDMAUDIORECSOURCE_LINE_IN, &streamCfg, &pDrv->LineIn.pStrmIn);
+                    LogFlowFunc(("LUN#%RU8: Created line input with rc=%Rrc\n", uLUN, rc));
                     if (rc == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
                     {
                         AudioMixerRemoveStream(pThis->pSinkLineIn, pDrv->LineIn.phStrmIn);
@@ -569,8 +582,8 @@ static void ichac97OpenStream(PAC97STATE pThis, int index, uint16_t freq)
                         break;
                     }
 
-                    rc = pDrv->pConnector->pfnOpenOut(pDrv->pConnector, pszDesc, &streamCfg, &pDrv->Out.pStrmOut);
-                    LogFlowFunc(("LUN#%RU8: Opened output with rc=%Rrc\n", uLUN, rc));
+                    rc = pDrv->pConnector->pfnCreateOut(pDrv->pConnector, pszDesc, &streamCfg, &pDrv->Out.pStrmOut);
+                    LogFlowFunc(("LUN#%RU8: Created output with rc=%Rrc\n", uLUN, rc));
                     if (rc == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
                     {
                         AudioMixerRemoveStream(pThis->pSinkOutput, pDrv->Out.phStrmOut);
@@ -596,9 +609,9 @@ static void ichac97OpenStream(PAC97STATE pThis, int index, uint16_t freq)
                         break;
                     }
 
-                    rc = pDrv->pConnector->pfnOpenIn(pDrv->pConnector,
-                                                     pszDesc, PDMAUDIORECSOURCE_MIC, &streamCfg, &pDrv->MicIn.pStrmIn);
-                    LogFlowFunc(("LUN#%RU8: Opened mic input with rc=%Rrc\n", uLUN, rc));
+                    rc = pDrv->pConnector->pfnCreateIn(pDrv->pConnector,
+                                                       pszDesc, PDMAUDIORECSOURCE_MIC, &streamCfg, &pDrv->MicIn.pStrmIn);
+                    LogFlowFunc(("LUN#%RU8: Created mic input with rc=%Rrc\n", uLUN, rc));
                     if (rc == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
                     {
                         AudioMixerRemoveStream(pThis->pSinkMicIn, pDrv->MicIn.phStrmIn);
@@ -628,7 +641,7 @@ static void ichac97OpenStream(PAC97STATE pThis, int index, uint16_t freq)
             {
                 RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
                 {
-                    pDrv->pConnector->pfnCloseIn(pDrv->pConnector, pDrv->LineIn.pStrmIn);
+                    pDrv->pConnector->pfnDestroyIn(pDrv->pConnector, pDrv->LineIn.pStrmIn);
                     AudioMixerRemoveStream(pThis->pSinkLineIn, pDrv->LineIn.phStrmIn);
 
                     pDrv->LineIn.pStrmIn  = NULL;
@@ -643,7 +656,7 @@ static void ichac97OpenStream(PAC97STATE pThis, int index, uint16_t freq)
             {
                 RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
                 {
-                    pDrv->pConnector->pfnCloseOut(pDrv->pConnector, pDrv->Out.pStrmOut);
+                    pDrv->pConnector->pfnDestroyOut(pDrv->pConnector, pDrv->Out.pStrmOut);
                     AudioMixerRemoveStream(pThis->pSinkOutput, pDrv->Out.phStrmOut);
 
                     pDrv->Out.pStrmOut  = NULL;
@@ -658,7 +671,7 @@ static void ichac97OpenStream(PAC97STATE pThis, int index, uint16_t freq)
             {
                 RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
                 {
-                    pDrv->pConnector->pfnCloseIn(pDrv->pConnector, pDrv->MicIn.pStrmIn);
+                    pDrv->pConnector->pfnDestroyIn(pDrv->pConnector, pDrv->MicIn.pStrmIn);
                     AudioMixerRemoveStream(pThis->pSinkMicIn, pDrv->MicIn.phStrmIn);
 
                     pDrv->MicIn.pStrmIn  = NULL;
@@ -830,32 +843,48 @@ static void ichac97RecordSelect(PAC97STATE pThis, uint32_t val)
     ichac97MixerStore(pThis, AC97_Record_Select, rs | (ls << 8));
 }
 
-static void ichac97MixerReset(PAC97STATE pThis)
+static int ichac97MixerReset(PAC97STATE pThis)
 {
+    AssertPtrReturn(pThis, VERR_INVALID_PARAMETER);
+
     LogFlowFuncEnter();
 
     RT_ZERO(pThis->mixer_data);
 
-    PAC97DRIVER pDrv;
-    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
+    /*
+     * Tear down mixer and streams.
+     */
+    if (pThis->pMixer)
     {
-        pDrv->Out.phStrmOut   = NULL;
-        pDrv->LineIn.phStrmIn = NULL;
-        pDrv->MicIn.phStrmIn  = NULL;
+        AudioMixerDestroy(pThis->pMixer);
+        pThis->pMixer = NULL;
     }
 
-    pThis->pSinkOutput = NULL;
     pThis->pSinkLineIn = NULL;
     pThis->pSinkMicIn  = NULL;
+    pThis->pSinkOutput = NULL;
 
-    if (pThis->pMixer)
+    PAC97DRIVER pDrv;
+    RTListForEach(&pThis->lstDrv, pDrv, AC97DRIVER, Node)
     {
-        AudioMixerDestroy(pThis->pMixer);
-        pThis->pMixer = NULL;
+        pDrv->pConnector->pfnDestroyIn (pDrv->pConnector, pDrv->LineIn.pStrmIn);
+        RT_ZERO(pDrv->LineIn);
+
+        pDrv->pConnector->pfnDestroyIn (pDrv->pConnector, pDrv->MicIn.pStrmIn);
+        RT_ZERO(pDrv->MicIn);
+
+        pDrv->pConnector->pfnDestroyOut(pDrv->pConnector, pDrv->Out.pStrmOut);
+        RT_ZERO(pDrv->Out);
     }
 
-    int rc2 = AudioMixerCreate("AC'97 Mixer", 0 /* uFlags */, &pThis->pMixer);
-    if (RT_SUCCESS(rc2))
+    /*
+     * (Re-)Create the mixer. The streams will be created on demand later.
+     */
+    int rc = AudioMixerCreate("AC'97 Mixer", 0 /* uFlags */, &pThis->pMixer);
+    if (RT_FAILURE(rc))
+        return rc;
+
+    do
     {
         /* Set a default audio format for our mixer. */
         PDMAUDIOSTREAMCFG streamCfg;
@@ -864,22 +893,26 @@ static void ichac97MixerReset(PAC97STATE pThis)
         streamCfg.enmFormat     = AUD_FMT_S16;
         streamCfg.enmEndianness = PDMAUDIOHOSTENDIANNESS;
 
-        rc2 = AudioMixerSetDeviceFormat(pThis->pMixer, &streamCfg);
-        AssertRC(rc2);
+        rc = AudioMixerSetDeviceFormat(pThis->pMixer, &streamCfg);
+        if (RT_FAILURE(rc))
+            break;
 
         /* Add all required audio sinks. */
-        rc2 = AudioMixerAddSink(pThis->pMixer, "[Playback] PCM Output",
-                               AUDMIXSINKDIR_OUTPUT, &pThis->pSinkOutput);
-        AssertRC(rc2);
+        rc = AudioMixerAddSink(pThis->pMixer, "[Playback] PCM Output", AUDMIXSINKDIR_OUTPUT, &pThis->pSinkOutput);
+        if (RT_FAILURE(rc))
+            break;
 
-        rc2 = AudioMixerAddSink(pThis->pMixer, "[Recording] Line In",
-                                AUDMIXSINKDIR_INPUT, &pThis->pSinkLineIn);
-        AssertRC(rc2);
+        rc = AudioMixerAddSink(pThis->pMixer, "[Recording] Line In", AUDMIXSINKDIR_INPUT, &pThis->pSinkLineIn);
+        if (RT_FAILURE(rc))
+            break;
 
-        rc2 = AudioMixerAddSink(pThis->pMixer, "[Recording] Microphone In",
-                                AUDMIXSINKDIR_INPUT, &pThis->pSinkMicIn);
-        AssertRC(rc2);
-    }
+        rc = AudioMixerAddSink(pThis->pMixer, "[Recording] Microphone In", AUDMIXSINKDIR_INPUT, &pThis->pSinkMicIn);
+        if (RT_FAILURE(rc))
+            break;
+
+    } while (0);
+
+    /* Note: Make sure to reset all registers first before bailing out on error. */
 
     ichac97MixerStore(pThis, AC97_Reset                   , 0x0000); /* 6940 */
     ichac97MixerStore(pThis, AC97_Master_Volume_Mono_Mute , 0x8000);
@@ -902,11 +935,19 @@ static void ichac97MixerReset(PAC97STATE pThis)
     ichac97MixerStore(pThis, AC97_PCM_LR_ADC_Rate         , 0xbb80);
     ichac97MixerStore(pThis, AC97_MIC_ADC_Rate            , 0xbb80);
 
-    if (PCIDevGetSubSystemVendorId(&pThis->PciDev) == 0x1028)
+    if (pThis->uCodecModel == Codec_AD1980)
     {
         /* Analog Devices 1980 (AD1980) */
+        ichac97MixerStore(pThis, AC97_Reset                   , 0x0010);    /* Headphones. */
         ichac97MixerStore(pThis, AC97_Vendor_ID1              , 0x4144);
         ichac97MixerStore(pThis, AC97_Vendor_ID2              , 0x5370);
+        ichac97MixerStore(pThis, AC97_Headphone_Volume_Mute   , 0x8000);
+    }
+    else if (pThis->uCodecModel == Codec_AD1981B)
+    {
+        /* Analog Devices 1981B (AD1981B) */
+        ichac97MixerStore(pThis, AC97_Vendor_ID1              , 0x4144);
+        ichac97MixerStore(pThis, AC97_Vendor_ID2              , 0x5374);
     }
     else
     {
@@ -923,6 +964,8 @@ static void ichac97MixerReset(PAC97STATE pThis)
     /* Reset all streams. */
     uint8_t active[LAST_INDEX] = { 0 };
     ichac97ResetStreams(pThis, active);
+
+    return rc;
 }
 
 /**
@@ -1705,8 +1748,17 @@ static DECLCALLBACK(int) ichac97IOPortNAMWrite(PPDMDEVINS pDevIns,
                     ichac97MixerStore(pThis, index, u32);
                     break;
                 case AC97_Master_Volume_Mute:
+                    if (pThis->uCodecModel == Codec_AD1980)
+                        if (ichac97MixerLoad(pThis, AC97_AD_Misc) & AD_MISC_LOSEL)
+                            break;  /* Register controls surround (rear), do nothing. */
                     ichac97SetVolume(pThis, index, PDMAUDIOMIXERCTL_VOLUME, u32);
                     break;
+                case AC97_Headphone_Volume_Mute:
+                    if (pThis->uCodecModel == Codec_AD1980)
+                        if (ichac97MixerLoad(pThis, AC97_AD_Misc) & AD_MISC_HPSEL)
+                            /* Register controls PCM (front) outputs. */
+                            ichac97SetVolume(pThis, index, PDMAUDIOMIXERCTL_VOLUME, u32);
+                    break;
                 case AC97_PCM_Out_Volume_Mute:
                     ichac97SetVolume(pThis, index, PDMAUDIOMIXERCTL_PCM, u32);
                     break;
@@ -1907,6 +1959,11 @@ static DECLCALLBACK(int) ichac97LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, ui
     V_(AC97_PCM_Out_Volume_Mute, PDMAUDIOMIXERCTL_PCM);
     V_(AC97_Line_In_Volume_Mute, PDMAUDIOMIXERCTL_LINE_IN);
 # undef V_
+    if (pThis->uCodecModel == Codec_AD1980)
+        if (ichac97MixerLoad(pThis, AC97_AD_Misc) & AD_MISC_HPSEL)
+            ichac97SetVolume(pThis, AC97_Headphone_Volume_Mute, PDMAUDIOMIXERCTL_VOLUME,
+                             ichac97MixerLoad(pThis, AC97_Headphone_Volume_Mute));
+
     ichac97ResetStreams(pThis, active);
 
     pThis->bup_flag = 0;
@@ -2096,13 +2153,15 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
     /*
      * The AD1980 codec (with corresponding PCI subsystem vendor ID) is whitelisted
      * in the Linux kernel; Linux makes no attempt to measure the data rate and assumes
-     * 48 kHz rate, which is exactly what we need.
+     * 48 kHz rate, which is exactly what we need. Same goes for AD1981B.
      */
     bool fChipAD1980 = false;
     if (!strcmp(szCodec, "STAC9700"))
-        fChipAD1980 = false;
+        pThis->uCodecModel = Codec_STAC9700;
     else if (!strcmp(szCodec, "AD1980"))
-        fChipAD1980 = true;
+        pThis->uCodecModel = Codec_AD1980;
+    else if (!strcmp(szCodec, "AD1981B"))
+        pThis->uCodecModel = Codec_AD1981B;
     else
     {
         return PDMDevHlpVMSetError(pDevIns, VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES, RT_SRC_POS,
@@ -2134,11 +2193,16 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
     PCIDevSetInterruptLine    (&pThis->PciDev, 0x00);   /* 3c rw. */                       Assert(pThis->PciDev.config[0x3c] == 0x00);
     PCIDevSetInterruptPin     (&pThis->PciDev, 0x01);   /* 3d ro - INTA#. */               Assert(pThis->PciDev.config[0x3d] == 0x01);
 
-    if (fChipAD1980)
+    if (pThis->uCodecModel == Codec_AD1980)
     {
         PCIDevSetSubSystemVendorId(&pThis->PciDev, 0x1028); /* 2c ro - Dell.) */
         PCIDevSetSubSystemId      (&pThis->PciDev, 0x0177); /* 2e ro. */
     }
+    else if (pThis->uCodecModel == Codec_AD1981B)
+    {
+        PCIDevSetSubSystemVendorId(&pThis->PciDev, 0x1028); /* 2c ro - Dell.) */
+        PCIDevSetSubSystemId      (&pThis->PciDev, 0x01ad); /* 2e ro. */
+    }
     else
     {
         PCIDevSetSubSystemVendorId(&pThis->PciDev, 0x8086); /* 2c ro - Intel.) */
@@ -2213,31 +2277,24 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
         PPDMIAUDIOCONNECTOR pCon = pDrv->pConnector;
         AssertPtr(pCon);
         if (   !pCon->pfnIsInputOK (pCon, pDrv->LineIn.pStrmIn)
-            && !pCon->pfnIsOutputOK(pCon, pDrv->Out.pStrmOut)
-            && !pCon->pfnIsInputOK (pCon, pDrv->MicIn.pStrmIn))
+            && !pCon->pfnIsInputOK (pCon, pDrv->MicIn.pStrmIn)
+            && !pCon->pfnIsOutputOK(pCon, pDrv->Out.pStrmOut))
         {
-            LogRel(("AC97: Falling back to NULL driver\n"));
+            LogRel(("AC97: Falling back to NULL driver (no sound audible)\n"));
+
+            ac97Reset(pDevIns);
 
             /* Was not able initialize *any* stream.
              * Select the NULL audio driver instead. */
-            pCon->pfnCloseIn (pCon, pDrv->LineIn.pStrmIn);
-            pCon->pfnCloseOut(pCon, pDrv->Out.pStrmOut);
-            pCon->pfnCloseIn (pCon, pDrv->MicIn.pStrmIn);
-
-            pDrv->Out.pStrmOut = NULL;
-            pDrv->LineIn.pStrmIn = NULL;
-            pDrv->MicIn.pStrmIn = NULL;
-
             pCon->pfnInitNull(pCon);
-            ac97Reset(pDevIns);
 
             PDMDevHlpVMSetRuntimeError(pDevIns, 0 /*fFlags*/, "HostAudioNotResponding",
                 N_("No audio devices could be opened. Selecting the NULL audio backend "
                    "with the consequence that no sound is audible"));
         }
         else if (   !pCon->pfnIsInputOK (pCon, pDrv->LineIn.pStrmIn)
-                 || !pCon->pfnIsOutputOK(pCon, pDrv->Out.pStrmOut)
-                 || !pCon->pfnIsInputOK (pCon, pDrv->MicIn.pStrmIn))
+                 || !pCon->pfnIsInputOK (pCon, pDrv->MicIn.pStrmIn)
+                 || !pCon->pfnIsOutputOK(pCon, pDrv->Out.pStrmOut))
         {
             char   szMissingStreams[255];
             size_t len = 0;
diff --git a/src/VBox/Devices/Audio/DevIchHda.cpp b/src/VBox/Devices/Audio/DevIchHda.cpp
index 0922707..c905c31 100644
--- a/src/VBox/Devices/Audio/DevIchHda.cpp
+++ b/src/VBox/Devices/Audio/DevIchHda.cpp
@@ -597,7 +597,7 @@ typedef struct HDADRIVER
     HDAINPUTSTREAM                     MicIn;
     /** Stream for output. */
     HDAOUTPUTSTREAM                    Out;
-} HDADRIVER, *PHDADRIVER;
+} HDADRIVER;
 
 /**
  * ICH Intel HD Audio Controller state.
@@ -2302,22 +2302,22 @@ DECLINLINE(void) hdaInitTransferDescriptor(PHDASTATE pThis, PHDABDLEDESC pBdle,
 #endif
 }
 
-static DECLCALLBACK(void) hdaCloseIn(PHDASTATE pThis, PDMAUDIORECSOURCE enmRecSource)
+static DECLCALLBACK(void) hdaDestroyIn(PHDASTATE pThis, PDMAUDIORECSOURCE enmRecSource)
 {
     NOREF(pThis);
     NOREF(enmRecSource);
     LogFlowFuncEnter();
 }
 
-static DECLCALLBACK(void) hdaCloseOut(PHDASTATE pThis)
+static DECLCALLBACK(void) hdaDestroyOut(PHDASTATE pThis)
 {
     NOREF(pThis);
     LogFlowFuncEnter();
 }
 
-static DECLCALLBACK(int) hdaOpenIn(PHDASTATE pThis,
-                                   const char *pszName, PDMAUDIORECSOURCE enmRecSource,
-                                   PPDMAUDIOSTREAMCFG pCfg)
+static DECLCALLBACK(int) hdaCreateIn(PHDASTATE pThis,
+                                     const char *pszName, PDMAUDIORECSOURCE enmRecSource,
+                                     PPDMAUDIOSTREAMCFG pCfg)
 {
     PAUDMIXSINK pSink;
 
@@ -2348,8 +2348,8 @@ static DECLCALLBACK(int) hdaOpenIn(PHDASTATE pThis,
             break;
         }
 
-        rc = pDrv->pConnector->pfnOpenIn(pDrv->pConnector, pszDesc, enmRecSource, pCfg, &pDrv->LineIn.pStrmIn);
-        LogFlowFunc(("LUN#%RU8: Opened input \"%s\", with rc=%Rrc\n", pDrv->uLUN, pszDesc, rc));
+        rc = pDrv->pConnector->pfnCreateIn(pDrv->pConnector, pszDesc, enmRecSource, pCfg, &pDrv->LineIn.pStrmIn);
+        LogFlowFunc(("LUN#%RU8: Created input \"%s\", with rc=%Rrc\n", pDrv->uLUN, pszDesc, rc));
         if (rc == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
         {
             AudioMixerRemoveStream(pSink, pDrv->LineIn.phStrmIn);
@@ -2365,8 +2365,8 @@ static DECLCALLBACK(int) hdaOpenIn(PHDASTATE pThis,
     return rc;
 }
 
-static DECLCALLBACK(int) hdaOpenOut(PHDASTATE pThis,
-                                    const char *pszName, PPDMAUDIOSTREAMCFG pCfg)
+static DECLCALLBACK(int) hdaCreateOut(PHDASTATE pThis,
+                                      const char *pszName, PPDMAUDIOSTREAMCFG pCfg)
 {
     int rc = VINF_SUCCESS;
     char *pszDesc;
@@ -2380,8 +2380,8 @@ static DECLCALLBACK(int) hdaOpenOut(PHDASTATE pThis,
             break;
         }
 
-        rc = pDrv->pConnector->pfnOpenOut(pDrv->pConnector, pszDesc, pCfg, &pDrv->Out.pStrmOut);
-        LogFlowFunc(("LUN#%RU8: Opened output \"%s\", with rc=%Rrc\n", pDrv->uLUN, pszDesc, rc));
+        rc = pDrv->pConnector->pfnCreateOut(pDrv->pConnector, pszDesc, pCfg, &pDrv->Out.pStrmOut);
+        LogFlowFunc(("LUN#%RU8: Created output \"%s\", with rc=%Rrc\n", pDrv->uLUN, pszDesc, rc));
         if (rc == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
         {
             AudioMixerRemoveStream(pThis->pSinkOutput, pDrv->Out.phStrmOut);
@@ -3356,7 +3356,7 @@ static DECLCALLBACK(void *) hdaQueryInterface(struct PDMIBASE *pInterface, const
 /**
  * Reset notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  *
  * @remark  The original sources didn't install a reset handler, but it seems to
@@ -3760,12 +3760,12 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
             return PDMDEV_SET_ERROR(pDevIns, VERR_NO_MEMORY, N_("Out of memory allocating HDA codec state"));
 
         /* Audio driver callbacks for multiplexing. */
-        pThis->pCodec->pfnCloseIn   = hdaCloseIn;
-        pThis->pCodec->pfnCloseOut  = hdaCloseOut;
-        pThis->pCodec->pfnOpenIn    = hdaOpenIn;
-        pThis->pCodec->pfnOpenOut   = hdaOpenOut;
-        pThis->pCodec->pfnReset     = hdaCodecReset;
-        pThis->pCodec->pfnSetVolume = hdaSetVolume;
+        pThis->pCodec->pfnDestroyIn  = hdaDestroyIn;
+        pThis->pCodec->pfnDestroyOut = hdaDestroyOut;
+        pThis->pCodec->pfnCreateIn   = hdaCreateIn;
+        pThis->pCodec->pfnCreateOut  = hdaCreateOut;
+        pThis->pCodec->pfnReset      = hdaCodecReset;
+        pThis->pCodec->pfnSetVolume  = hdaSetVolume;
 
         pThis->pCodec->pHDAState = pThis; /* Assign HDA controller state to codec. */
 
diff --git a/src/VBox/Devices/Audio/DevIchHdaCodec.cpp b/src/VBox/Devices/Audio/DevIchHdaCodec.cpp
index 44da663..1d5dc24 100644
--- a/src/VBox/Devices/Audio/DevIchHdaCodec.cpp
+++ b/src/VBox/Devices/Audio/DevIchHdaCodec.cpp
@@ -2610,16 +2610,16 @@ int hdaCodecOpenStream(PHDACODEC pThis, ENMSOUNDSOURCE enmSoundSource, PPDMAUDIO
     switch (enmSoundSource)
     {
         case PI_INDEX:
-            rc = pThis->pfnOpenIn(pThis->pHDAState, "hda.in", PDMAUDIORECSOURCE_LINE_IN, pCfg);
+            rc = pThis->pfnCreateIn(pThis->pHDAState, "hda.in", PDMAUDIORECSOURCE_LINE_IN, pCfg);
             break;
 
         case PO_INDEX:
-            rc = pThis->pfnOpenOut(pThis->pHDAState, "hda.out", pCfg);
+            rc = pThis->pfnCreateOut(pThis->pHDAState, "hda.out", pCfg);
             break;
 
 #ifdef VBOX_WITH_HDA_MIC_IN
         case MC_INDEX:
-            rc = pThis->pfnOpenIn(pThis->pHDAState, "hda.mc", PDMAUDIORECSOURCE_MIC, pCfg);
+            rc = pThis->pfnCreateIn(pThis->pHDAState, "hda.mc", PDMAUDIORECSOURCE_MIC, pCfg);
             break;
 #endif
         default:
diff --git a/src/VBox/Devices/Audio/DevIchHdaCodec.h b/src/VBox/Devices/Audio/DevIchHdaCodec.h
index c75041a..e2b189a 100644
--- a/src/VBox/Devices/Audio/DevIchHdaCodec.h
+++ b/src/VBox/Devices/Audio/DevIchHdaCodec.h
@@ -21,9 +21,9 @@
 /** The ICH HDA (Intel) controller. */
 typedef struct HDASTATE *PHDASTATE;
 /** The ICH HDA (Intel) codec state. */
-typedef struct HDACODEC HDACODEC, *PHDACODEC;
+typedef struct HDACODEC *PHDACODEC;
 /** The HDA host driver backend. */
-typedef struct HDADRIVER HDADRIVER, *PHDADRIVER;
+typedef struct HDADRIVER *PHDADRIVER;
 typedef struct PDMIAUDIOCONNECTOR *PPDMIAUDIOCONNECTOR;
 typedef struct PDMAUDIOGSTSTRMOUT *PPDMAUDIOGSTSTRMOUT;
 typedef struct PDMAUDIOGSTSTRMIN  *PPDMAUDIOGSTSTRMIN;
@@ -43,7 +43,7 @@ typedef FNHDACODECVERBPROCESSOR **PPFNHDACODECVERBPROCESSOR;
 typedef struct CODECVERB
 {
     uint32_t verb;
-    /* operation bitness mask */
+    /** operation bitness mask */
     uint32_t mask;
     PFNHDACODECVERBPROCESSOR pfn;
 } CODECVERB;
@@ -62,9 +62,9 @@ typedef TYPE CODECNODE *PCODECNODE;
 
 typedef enum
 {
-    PI_INDEX = 0,    /* PCM in */
-    PO_INDEX,        /* PCM out */
-    MC_INDEX,        /* Mic in */
+    PI_INDEX = 0,    /**< PCM in */
+    PO_INDEX,        /**< PCM out */
+    MC_INDEX,        /**< Mic in */
     LAST_INDEX
 } ENMSOUNDSOURCE;
 
@@ -75,7 +75,7 @@ typedef struct HDACODEC
     uint16_t                u16DeviceId;
     uint8_t                 u8BSKU;
     uint8_t                 u8AssemblyId;
-    /* List of assigned HDA drivers to this codec.
+    /** List of assigned HDA drivers to this codec.
      * A driver only can be assigned to one codec
      * at a time. */
     RTLISTANCHOR            lstDrv;
@@ -110,10 +110,10 @@ typedef struct HDACODEC
     const uint8_t           u8DacLineOut;
 #endif
     /** Callbacks to the HDA controller, mostly used for multiplexing to the various host backends. */
-    DECLR3CALLBACKMEMBER(void, pfnCloseIn, (PHDASTATE pThis, PDMAUDIORECSOURCE enmRecSource));
-    DECLR3CALLBACKMEMBER(void, pfnCloseOut, (PHDASTATE pThis));
-    DECLR3CALLBACKMEMBER(int, pfnOpenIn, (PHDASTATE pThis, const char *pszName, PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg));
-    DECLR3CALLBACKMEMBER(int, pfnOpenOut, (PHDASTATE pThis, const char *pszName, PPDMAUDIOSTREAMCFG pCfg));
+    DECLR3CALLBACKMEMBER(void, pfnDestroyIn, (PHDASTATE pThis, PDMAUDIORECSOURCE enmRecSource));
+    DECLR3CALLBACKMEMBER(void, pfnDestroyOut, (PHDASTATE pThis));
+    DECLR3CALLBACKMEMBER(int, pfnCreateIn, (PHDASTATE pThis, const char *pszName, PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg));
+    DECLR3CALLBACKMEMBER(int, pfnCreateOut, (PHDASTATE pThis, const char *pszName, PPDMAUDIOSTREAMCFG pCfg));
     DECLR3CALLBACKMEMBER(int, pfnSetVolume, (PHDASTATE pThis, ENMSOUNDSOURCE enmSource, bool fMute, uint8_t uVolLeft, uint8_t uVolRight));
     /** Callbacks by codec implementation. */
     DECLR3CALLBACKMEMBER(int, pfnLookup, (PHDACODEC pThis, uint32_t verb, PPFNHDACODECVERBPROCESSOR));
@@ -122,7 +122,7 @@ typedef struct HDACODEC
     /** These callbacks are set by codec implementation to answer debugger requests. */
     DECLR3CALLBACKMEMBER(void, pfnDbgListNodes, (PHDACODEC pThis, PCDBGFINFOHLP pHlp, const char *pszArgs));
     DECLR3CALLBACKMEMBER(void, pfnDbgSelector, (PHDACODEC pThis, PCDBGFINFOHLP pHlp, const char *pszArgs));
-} CODECState;
+} HDACODEC;
 
 int hdaCodecConstruct(PPDMDEVINS pDevIns, PHDACODEC pThis, uint16_t uLUN, PCFGMNODE pCfg);
 int hdaCodecDestruct(PHDACODEC pThis);
diff --git a/src/VBox/Devices/Audio/DevSB16.cpp b/src/VBox/Devices/Audio/DevSB16.cpp
index eef92d7..cdffe3a 100644
--- a/src/VBox/Devices/Audio/DevSB16.cpp
+++ b/src/VBox/Devices/Audio/DevSB16.cpp
@@ -1945,8 +1945,8 @@ static int sb16OpenOut(PSB16STATE pThis, PPDMAUDIOSTREAMCFG pCfg)
             break;
         }
 
-        int rc2 = pDrv->pConnector->pfnOpenOut(pDrv->pConnector, pszDesc, pCfg, &pDrv->Out.pStrmOut);
-        LogFlowFunc(("LUN#%RU8: Opened output with rc=%Rrc\n", uLUN, rc));
+        int rc2 = pDrv->pConnector->pfnCreateOut(pDrv->pConnector, pszDesc, pCfg, &pDrv->Out.pStrmOut);
+        LogFlowFunc(("LUN#%RU8: Created output with rc=%Rrc\n", uLUN, rc));
         if (rc2 == VINF_SUCCESS) /* Note: Could return VWRN_ALREADY_EXISTS. */
         {
             AudioMixerRemoveStream(pThis->pSinkOutput, pDrv->Out.phStrmOut);
@@ -2192,7 +2192,7 @@ static DECLCALLBACK(int) sb16Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMN
 
             LogRel(("SB16: Warning: Unable to enable/use output for LUN#%RU8\n", uLUN));
 
-            pCon->pfnCloseOut(pCon, pDrv->Out.pStrmOut);
+            pCon->pfnDestroyOut(pCon, pDrv->Out.pStrmOut);
             pDrv->Out.pStrmOut = NULL;
 
             pThis->pDrv->pfnInitNull(pThis->pDrv);
diff --git a/src/VBox/Devices/Audio/DrvAudio.cpp b/src/VBox/Devices/Audio/DrvAudio.cpp
index e7fe66a..f128d68 100644
--- a/src/VBox/Devices/Audio/DrvAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvAudio.cpp
@@ -197,7 +197,7 @@ static int drvAudioProcessOptions(PCFGMNODE pCfgHandle, const char *pszPrefix, s
        /* If its audio general setting, need to traverse to one child node.
         * /Devices/ichac97/0/LUN#0/Config/Audio
         */
-       if(!strncmp(pszPrefix, "AUDIO", 5)) /** @todo Use a #define */
+       if(!strncmp(pszPrefix, "AUDIO", 5)) /** @todo Use a \#define */
        {
             pCfgChildHandle = CFGMR3GetFirstChild(pCfgHandle);
             if(pCfgChildHandle)
@@ -370,8 +370,7 @@ void drvAudioClearBuf(PPDMPCMPROPS pPCMInfo, void *pvBuf, size_t cbBuf)
     }
 }
 
-static int drvAudioControlHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHstStrmIn, PDMAUDIOSTREAMCMD enmStreamCmd,
-                                uint32_t uFlags)
+static int drvAudioControlHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHstStrmIn, PDMAUDIOSTREAMCMD enmStreamCmd)
 {
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
     AssertPtrReturn(pHstStrmIn, VERR_INVALID_POINTER);
@@ -382,12 +381,12 @@ static int drvAudioControlHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHstStrmIn,
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
         {
-            if (!pHstStrmIn->fEnabled)
+            if (!(pHstStrmIn->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED))
             {
                 rc = pThis->pHostDrvAudio->pfnControlIn(pThis->pHostDrvAudio, pHstStrmIn, PDMAUDIOSTREAMCMD_ENABLE);
                 if (RT_SUCCESS(rc))
                 {
-                    pHstStrmIn->fEnabled = true;
+                    pHstStrmIn->fStatus |= PDMAUDIOSTRMSTS_FLAG_ENABLED;
                 }
                 else
                     LogFlowFunc(("Backend reported an error when opening input stream, rc=%Rrc\n", rc));
@@ -400,12 +399,12 @@ static int drvAudioControlHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHstStrmIn,
 
         case PDMAUDIOSTREAMCMD_DISABLE:
         {
-            if (pHstStrmIn->fEnabled)
+            if (pHstStrmIn->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED)
             {
                 rc = pThis->pHostDrvAudio->pfnControlIn(pThis->pHostDrvAudio, pHstStrmIn, PDMAUDIOSTREAMCMD_DISABLE);
                 if (RT_SUCCESS(rc))
                 {
-                    pHstStrmIn->fEnabled = false;
+                    pHstStrmIn->fStatus = PDMAUDIOSTRMSTS_FLAG_NONE; /* Clear all. */
                     AudioMixBufClear(&pHstStrmIn->MixBuf);
                 }
                 else
@@ -426,8 +425,7 @@ static int drvAudioControlHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHstStrmIn,
     return rc;
 }
 
-static int drvAudioControlHstOut(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMOUT pHstStrmOut, PDMAUDIOSTREAMCMD enmStreamCmd,
-                                 uint32_t uFlags)
+static int drvAudioControlHstOut(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMOUT pHstStrmOut, PDMAUDIOSTREAMCMD enmStreamCmd)
 {
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
     AssertPtrReturn(pHstStrmOut, VERR_INVALID_POINTER);
@@ -438,17 +436,17 @@ static int drvAudioControlHstOut(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMOUT pHstStrmOu
     {
         case PDMAUDIOSTREAMCMD_ENABLE:
         {
-            if (!pHstStrmOut->fEnabled)
+            if (!(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED))
             {
                 rc = pThis->pHostDrvAudio->pfnControlOut(pThis->pHostDrvAudio, pHstStrmOut, PDMAUDIOSTREAMCMD_ENABLE);
                 if (RT_SUCCESS(rc))
                 {
-                    Assert(!pHstStrmOut->fPendingDisable);
-                    pHstStrmOut->fEnabled = true;
+                    Assert(!(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE));
+                    pHstStrmOut->fStatus |= PDMAUDIOSTRMSTS_FLAG_ENABLED;
                     LogFunc(("[%s] Enabled stream\n", pHstStrmOut->MixBuf.pszName));
                 }
                 else
-                    LogFlowFunc(("[%s] Backend reported an error when opening output stream, rc=%Rrc\n",
+                    LogFlowFunc(("[%s] Backend reported an error when enabling output stream, rc=%Rrc\n",
                                  pHstStrmOut->MixBuf.pszName, rc));
             }
             else
@@ -459,19 +457,58 @@ static int drvAudioControlHstOut(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMOUT pHstStrmOu
 
         case PDMAUDIOSTREAMCMD_DISABLE:
         {
-            if (pHstStrmOut->fEnabled)
+            if (pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED)
             {
                 rc = pThis->pHostDrvAudio->pfnControlOut(pThis->pHostDrvAudio, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE);
                 if (RT_SUCCESS(rc))
                 {
-                    pHstStrmOut->fEnabled        = false;
-                    pHstStrmOut->fPendingDisable = false;
+                    pHstStrmOut->fStatus = PDMAUDIOSTRMSTS_FLAG_NONE; /* Clear all. */
                     AudioMixBufClear(&pHstStrmOut->MixBuf);
 
                     LogFunc(("[%s] Disabled stream\n", pHstStrmOut->MixBuf.pszName));
                 }
                 else
-                    LogFlowFunc(("[%s] Backend vetoed closing output stream, rc=%Rrc\n", pHstStrmOut->MixBuf.pszName, rc));
+                    LogFlowFunc(("[%s] Backend vetoed disabling output stream, rc=%Rrc\n", pHstStrmOut->MixBuf.pszName, rc));
+            }
+            else
+                rc = VINF_SUCCESS;
+
+            break;
+        }
+
+        case PDMAUDIOSTREAMCMD_PAUSE:
+        {
+            if (!(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED))
+            {
+                Assert(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED);
+                rc = pThis->pHostDrvAudio->pfnControlOut(pThis->pHostDrvAudio, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE);
+                if (RT_SUCCESS(rc))
+                {
+                    pHstStrmOut->fStatus |= PDMAUDIOSTRMSTS_FLAG_PAUSED;
+                    LogFunc(("[%s] Pausing stream\n", pHstStrmOut->MixBuf.pszName));
+                }
+                else
+                    LogFlowFunc(("[%s] Backend vetoed pausing output stream, rc=%Rrc\n", pHstStrmOut->MixBuf.pszName, rc));
+            }
+            else
+                rc = VINF_SUCCESS;
+
+            break;
+        }
+
+        case PDMAUDIOSTREAMCMD_RESUME:
+        {
+            if (pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_PAUSED)
+            {
+                Assert(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED);
+                rc = pThis->pHostDrvAudio->pfnControlOut(pThis->pHostDrvAudio, pHstStrmOut, PDMAUDIOSTREAMCMD_ENABLE);
+                if (RT_SUCCESS(rc))
+                {
+                    pHstStrmOut->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_PAUSED;
+                    LogFunc(("[%s] Resumed stream\n", pHstStrmOut->MixBuf.pszName));
+                }
+                else
+                    LogFlowFunc(("[%s] Backend vetoed resuming output stream, rc=%Rrc\n", pHstStrmOut->MixBuf.pszName, rc));
             }
             else
                 rc = VINF_SUCCESS;
@@ -524,24 +561,27 @@ int drvAudioDestroyGstOut(PDRVAUDIO pThis, PPDMAUDIOGSTSTRMOUT pGstStrmOut)
 {
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
 
-    if (pGstStrmOut)
-    {
-        drvAudioGstOutFreeRes(pGstStrmOut);
+    if (!pGstStrmOut)
+        return VINF_SUCCESS;
 
-        if (pGstStrmOut->pHstStrmOut)
-        {
-            /* Unregister from parent first. */
-            RTListNodeRemove(&pGstStrmOut->Node);
+    if (pGstStrmOut->State.cRefs > 1) /* Do other objects still have a reference to it? Bail out. */
+        return VERR_WRONG_ORDER;
 
-            /* Try destroying the associated host output stream. This could
-             * be skipped if there are other guest output streams with this
-             * host stream. */
-            drvAudioDestroyHstOut(pThis, pGstStrmOut->pHstStrmOut);
-        }
+    drvAudioGstOutFreeRes(pGstStrmOut);
 
-        RTMemFree(pGstStrmOut);
+    if (pGstStrmOut->pHstStrmOut)
+    {
+        /* Unregister from parent first. */
+        RTListNodeRemove(&pGstStrmOut->Node);
+
+        /* Try destroying the associated host output stream. This could
+         * be skipped if there are other guest output streams with this
+         * host stream. */
+        drvAudioDestroyHstOut(pThis, pGstStrmOut->pHstStrmOut);
     }
 
+    RTMemFree(pGstStrmOut);
+
     return VINF_SUCCESS;
 }
 
@@ -561,7 +601,7 @@ PPDMAUDIOHSTSTRMIN drvAudioFindNextHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHs
 PPDMAUDIOHSTSTRMIN drvAudioFindNextEnabledHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHstStrmIn)
 {
     while ((pHstStrmIn = drvAudioFindNextHstIn(pThis, pHstStrmIn)))
-        if (pHstStrmIn->fEnabled)
+        if (pHstStrmIn->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED)
             return pHstStrmIn;
 
     return NULL;
@@ -616,6 +656,7 @@ int drvAudioGstOutInit(PPDMAUDIOGSTSTRMOUT pGstStrmOut, PPDMAUDIOHSTSTRMOUT pHos
 
         if (RT_SUCCESS(rc))
         {
+            pGstStrmOut->State.cRefs   = 1;
             pGstStrmOut->State.fActive = false;
             pGstStrmOut->State.fEmpty  = true;
 
@@ -871,6 +912,7 @@ int drvAudioGstInInit(PPDMAUDIOGSTSTRMIN pGstStrmIn, PPDMAUDIOHSTSTRMIN pHstStrm
 #ifdef DEBUG
             drvAudioStreamCfgPrint(pCfg);
 #endif
+            pGstStrmIn->State.cRefs   = 1;
             pGstStrmIn->State.fActive = false;
             pGstStrmIn->State.fEmpty  = true;
 
@@ -994,7 +1036,7 @@ static DECLCALLBACK(int) drvAudioWrite(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIO
     PPDMAUDIOHSTSTRMOUT pHstStrmOut = pGstStrmOut->pHstStrmOut;
     AssertPtrReturn(pHstStrmOut, VERR_INVALID_POINTER);
 
-    AssertMsg(pGstStrmOut->pHstStrmOut->fEnabled,
+    AssertMsg(pGstStrmOut->pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED,
               ("Writing to disabled host output stream \"%s\" not possible\n",
               pHstStrmOut->MixBuf.pszName));
 
@@ -1052,7 +1094,7 @@ PPDMAUDIOHSTSTRMOUT drvAudioHstFindAnyEnabledOut(PDRVAUDIO pThis, PPDMAUDIOHSTST
 {
     while ((pHostStrmOut = drvAudioFindAnyHstOut(pThis, pHostStrmOut)))
     {
-        if (pHostStrmOut->fEnabled)
+        if (pHostStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED)
             return pHostStrmOut;
     }
 
@@ -1108,24 +1150,27 @@ static int drvAudioDestroyGstIn(PDRVAUDIO pThis, PPDMAUDIOGSTSTRMIN pGstStrmIn)
 
     LogFlowFunc(("%s\n", pGstStrmIn->MixBuf.pszName));
 
-    if (pGstStrmIn)
-    {
-        drvAudioGstInFreeRes(pGstStrmIn);
+    if (!pGstStrmIn)
+        return VINF_SUCCESS;
 
-        if (pGstStrmIn->pHstStrmIn)
-        {
-            /* Unlink child. */
-            pGstStrmIn->pHstStrmIn->pGstStrmIn = NULL;
+    if (pGstStrmIn->State.cRefs > 1) /* Do other objects still have a reference to it? Bail out. */
+        return VERR_WRONG_ORDER;
 
-            /* Try destroying the associated host input stream. This could
-             * be skipped if there are other guest input streams with this
-             * host stream. */
-            drvAudioDestroyHstIn(pThis, pGstStrmIn->pHstStrmIn);
-        }
+    drvAudioGstInFreeRes(pGstStrmIn);
 
-        RTMemFree(pGstStrmIn);
+    if (pGstStrmIn->pHstStrmIn)
+    {
+        /* Unlink child. */
+        pGstStrmIn->pHstStrmIn->pGstStrmIn = NULL;
+
+        /* Try destroying the associated host input stream. This could
+         * be skipped if there are other guest input streams with this
+         * host stream. */
+        drvAudioDestroyHstIn(pThis, pGstStrmIn->pHstStrmIn);
     }
 
+    RTMemFree(pGstStrmIn);
+
     return VINF_SUCCESS;
 }
 
@@ -1158,14 +1203,14 @@ static DECLCALLBACK(int) drvAudioQueryStatus(PPDMIAUDIOCONNECTOR pInterface,
 
         /* Has this stream marked as disabled but there still were guest streams relying
          * on it? Check if this stream now can be closed and do so, if possible. */
-        if (   pHstStrmOut->fPendingDisable
+        if (   (pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE)
             && !cSamplesLive)
         {
             /* Stop playing the current (pending) stream. */
-            int rc2 = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE, 0 /* Flags */);
+            int rc2 = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE);
             if (RT_SUCCESS(rc2))
             {
-                pHstStrmOut->fPendingDisable = false;
+                pHstStrmOut->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE;
 
                 LogFunc(("[%s] Disabling stream\n", pHstStrmOut->MixBuf.pszName));
             }
@@ -1401,6 +1446,7 @@ static int drvAudioHostInit(PCFGMNODE pCfgHandle, PDRVAUDIO pThis)
 
 static void drvAudioStateHandler(PPDMDRVINS pDrvIns, PDMAUDIOSTREAMCMD enmCmd)
 {
+    PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
     PDRVAUDIO pThis = PDMINS_2_DATA(pDrvIns, PDRVAUDIO);
 
     LogFlowFunc(("enmCmd=%ld\n", enmCmd));
@@ -1410,11 +1456,11 @@ static void drvAudioStateHandler(PPDMDRVINS pDrvIns, PDMAUDIOSTREAMCMD enmCmd)
 
     PPDMAUDIOHSTSTRMOUT pHstStrmOut = NULL;
     while ((pHstStrmOut = drvAudioHstFindAnyEnabledOut(pThis, pHstStrmOut)))
-        drvAudioControlHstOut(pThis, pHstStrmOut, enmCmd, 0 /* Flags */);
+        drvAudioControlHstOut(pThis, pHstStrmOut, enmCmd);
 
     PPDMAUDIOHSTSTRMIN pHstStrmIn = NULL;
     while ((pHstStrmIn = drvAudioFindNextEnabledHstIn(pThis, pHstStrmIn)))
-        drvAudioControlHstIn(pThis, pHstStrmIn, enmCmd, 0 /* Flags */);
+        drvAudioControlHstIn(pThis, pHstStrmIn, enmCmd);
 }
 
 static struct audio_option audio_options[] =
@@ -1536,7 +1582,7 @@ static DECLCALLBACK(int) drvAudioRead(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOG
     PPDMAUDIOHSTSTRMIN pHstStrmIn = pGstStrmIn->pHstStrmIn;
     AssertPtrReturn(pHstStrmIn, VERR_INVALID_POINTER);
 
-    AssertMsg(pGstStrmIn->pHstStrmIn->fEnabled,
+    AssertMsg(pGstStrmIn->pHstStrmIn->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED,
               ("Reading from disabled host input stream \"%s\" not possible\n", pGstStrmIn->MixBuf.pszName));
 
     /*
@@ -1578,13 +1624,13 @@ static DECLCALLBACK(int) drvAudioEnableOut(PPDMIAUDIOCONNECTOR pInterface,
         {
             if (fEnable)
             {
-                pHstStrmOut->fPendingDisable = false;
-                if (!pHstStrmOut->fEnabled)
-                    rc = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_ENABLE, 0 /* Flags */);
+                pHstStrmOut->fStatus &= ~PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE;
+                if (!(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED))
+                    rc = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_ENABLE);
             }
             else /* Disable */
             {
-                if (pHstStrmOut->fEnabled)
+                if (pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_ENABLED)
                 {
                     uint32_t cGstStrmsActive = 0;
 
@@ -1606,19 +1652,20 @@ static DECLCALLBACK(int) drvAudioEnableOut(PPDMIAUDIOCONNECTOR pInterface,
                     }
 
                     /* Do we need to defer closing the host stream? */
-                    pHstStrmOut->fPendingDisable = cGstStrmsActive >= 1;
+                    if (cGstStrmsActive >= 1)
+                        pHstStrmOut->fStatus |= PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE;
 
                     /* Can we close the host stream now instead of deferring it? */
-                    if (!pHstStrmOut->fPendingDisable)
-                        rc = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE, 0 /* Flags */);
+                    if (!(pHstStrmOut->fStatus & PDMAUDIOSTRMSTS_FLAG_PENDING_DISABLE))
+                        rc = drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE);
                 }
             }
 
             if (RT_SUCCESS(rc))
                 pGstStrmOut->State.fActive = fEnable;
 
-            LogFlowFunc(("%s: fEnable=%RTbool, fPendingDisable=%RTbool, rc=%Rrc\n",
-                         pGstStrmOut->MixBuf.pszName, fEnable, pHstStrmOut->fPendingDisable, rc));
+            LogFlowFunc(("%s: fEnable=%RTbool, fStatus=0x%x, rc=%Rrc\n",
+                         pGstStrmOut->MixBuf.pszName, fEnable, pHstStrmOut->fStatus, rc));
         }
     }
 
@@ -1645,7 +1692,7 @@ static DECLCALLBACK(int) drvAudioEnableIn(PPDMIAUDIOCONNECTOR pInterface,
         if (pGstStrmIn->State.fActive != fEnable) /* Only process real state changes. */
         {
             rc = drvAudioControlHstIn(pThis, pHstStrmIn,
-                                      fEnable ? PDMAUDIOSTREAMCMD_ENABLE : PDMAUDIOSTREAMCMD_DISABLE, 0 /* Flags */);
+                                      fEnable ? PDMAUDIOSTREAMCMD_ENABLE : PDMAUDIOSTREAMCMD_DISABLE);
             if (RT_SUCCESS(rc))
                 pGstStrmIn->State.fActive = fEnable;
 
@@ -1668,9 +1715,9 @@ static DECLCALLBACK(bool) drvAudioIsOutputOK(PPDMIAUDIOCONNECTOR pInterface,
     return (pGstStrmOut != NULL);
 }
 
-static DECLCALLBACK(int) drvAudioOpenIn(PPDMIAUDIOCONNECTOR pInterface, const char *pszName,
-                                        PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg,
-                                        PPDMAUDIOGSTSTRMIN *ppGstStrmIn)
+static DECLCALLBACK(int) drvAudioCreateIn(PPDMIAUDIOCONNECTOR pInterface, const char *pszName,
+                                          PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg,
+                                          PPDMAUDIOGSTSTRMIN *ppGstStrmIn)
 {
     AssertPtrReturn(pInterface, VERR_INVALID_POINTER);
     AssertPtrReturn(ppGstStrmIn, VERR_INVALID_POINTER);
@@ -1734,8 +1781,8 @@ static DECLCALLBACK(int) drvAudioOpenIn(PPDMIAUDIOCONNECTOR pInterface, const ch
     return rc;
 }
 
-static DECLCALLBACK(int) drvAudioOpenOut(PPDMIAUDIOCONNECTOR pInterface, const char *pszName,
-                                         PPDMAUDIOSTREAMCFG pCfg, PPDMAUDIOGSTSTRMOUT *ppGstStrmOut)
+static DECLCALLBACK(int) drvAudioCreateOut(PPDMIAUDIOCONNECTOR pInterface, const char *pszName,
+                                           PPDMAUDIOSTREAMCFG pCfg, PPDMAUDIOGSTSTRMOUT *ppGstStrmOut)
 {
     AssertPtrReturn(pInterface, VERR_INVALID_POINTER);
     AssertPtrReturn(pszName, VERR_INVALID_POINTER);
@@ -1839,14 +1886,14 @@ static DECLCALLBACK(bool) drvAudioIsActiveOut(PPDMIAUDIOCONNECTOR pInterface, PP
     return pGstStrmOut ? pGstStrmOut->State.fActive : false;
 }
 
-static DECLCALLBACK(void) drvAudioCloseIn(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn)
+static DECLCALLBACK(void) drvAudioDestroyIn(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn)
 {
     PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
     if (pGstStrmIn)
         drvAudioDestroyGstIn(pThis, pGstStrmIn);
 }
 
-static DECLCALLBACK(void) drvAudioCloseOut(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut)
+static DECLCALLBACK(void) drvAudioDestroyOut(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut)
 {
     PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
     if (pGstStrmOut)
@@ -1890,7 +1937,7 @@ static DECLCALLBACK(void) drvAudioPowerOff(PPDMDRVINS pDrvIns)
     PPDMAUDIOHSTSTRMOUT pHstStrmOut = NULL;
     while ((pHstStrmOut = drvAudioFindAnyHstOut(pThis, pHstStrmOut)))
     {
-        drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE, 0 /* Flags */);
+        drvAudioControlHstOut(pThis, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE);
         pThis->pHostDrvAudio->pfnFiniOut(pThis->pHostDrvAudio, pHstStrmOut);
     }
 
@@ -1898,7 +1945,7 @@ static DECLCALLBACK(void) drvAudioPowerOff(PPDMDRVINS pDrvIns)
     PPDMAUDIOHSTSTRMIN pHstStrmIn = NULL;
     while ((pHstStrmIn = drvAudioFindNextHstIn(pThis, pHstStrmIn)))
     {
-        drvAudioControlHstIn(pThis, pHstStrmIn, PDMAUDIOSTREAMCMD_DISABLE, 0 /* Flags */);
+        drvAudioControlHstIn(pThis, pHstStrmIn, PDMAUDIOSTREAMCMD_DISABLE);
         pThis->pHostDrvAudio->pfnFiniIn(pThis->pHostDrvAudio, pHstStrmIn);
     }
 
@@ -1930,18 +1977,18 @@ static DECLCALLBACK(int) drvAudioConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHan
     pThis->IAudioConnector.pfnQueryStatus            = drvAudioQueryStatus;
     pThis->IAudioConnector.pfnRead                   = drvAudioRead;
     pThis->IAudioConnector.pfnWrite                  = drvAudioWrite;
+    pThis->IAudioConnector.pfnIsActiveIn             = drvAudioIsActiveIn;
+    pThis->IAudioConnector.pfnIsActiveOut            = drvAudioIsActiveOut;
     pThis->IAudioConnector.pfnIsInputOK              = drvAudioIsInputOK;
     pThis->IAudioConnector.pfnIsOutputOK             = drvAudioIsOutputOK;
     pThis->IAudioConnector.pfnInitNull               = drvAudioInitNull;
     pThis->IAudioConnector.pfnEnableOut              = drvAudioEnableOut;
     pThis->IAudioConnector.pfnEnableIn               = drvAudioEnableIn;
-    pThis->IAudioConnector.pfnCloseIn                = drvAudioCloseIn;
-    pThis->IAudioConnector.pfnCloseOut               = drvAudioCloseOut;
-    pThis->IAudioConnector.pfnOpenIn                 = drvAudioOpenIn;
-    pThis->IAudioConnector.pfnOpenOut                = drvAudioOpenOut;
+    pThis->IAudioConnector.pfnDestroyIn              = drvAudioDestroyIn;
+    pThis->IAudioConnector.pfnDestroyOut             = drvAudioDestroyOut;
+    pThis->IAudioConnector.pfnCreateIn               = drvAudioCreateIn;
+    pThis->IAudioConnector.pfnCreateOut              = drvAudioCreateOut;
     pThis->IAudioConnector.pfnPlayOut                = drvAudioPlayOut;
-    pThis->IAudioConnector.pfnIsActiveIn             = drvAudioIsActiveIn;
-    pThis->IAudioConnector.pfnIsActiveOut            = drvAudioIsActiveOut;
 
     /*
      * Attach driver below and query its connector interface.
@@ -1985,7 +2032,7 @@ static DECLCALLBACK(int) drvAudioConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHan
  */
 static DECLCALLBACK(void) drvAudioSuspend(PPDMDRVINS pDrvIns)
 {
-    drvAudioStateHandler(pDrvIns, PDMAUDIOSTREAMCMD_DISABLE);
+    drvAudioStateHandler(pDrvIns, PDMAUDIOSTREAMCMD_PAUSE);
 }
 
 /**
@@ -1995,7 +2042,7 @@ static DECLCALLBACK(void) drvAudioSuspend(PPDMDRVINS pDrvIns)
  */
 static DECLCALLBACK(void) drvAudioResume(PPDMDRVINS pDrvIns)
 {
-    drvAudioStateHandler(pDrvIns, PDMAUDIOSTREAMCMD_ENABLE);
+    drvAudioStateHandler(pDrvIns, PDMAUDIOSTREAMCMD_RESUME);
 }
 
 /**
diff --git a/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp b/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp
index 62cdf29..7f079d0 100644
--- a/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp
@@ -57,6 +57,7 @@ RT_C_DECLS_END
  */
 static struct pa_threaded_mainloop *g_pMainLoop;
 static struct pa_context           *g_pContext;
+static volatile bool                g_fAbortMainLoop;
 
 /**
  * Host Pulse audio driver instance data.
@@ -129,6 +130,16 @@ static PULSEAUDIOCFG s_pulseCfg =
 static int  drvHostPulseAudioError(PDRVHOSTPULSEAUDIO pThis, const char *szMsg);
 static void drvHostPulseAudioCbSuccess(pa_stream *pStream, int fSuccess, void *pvContext);
 
+/**
+ * Signal the main loop to abort. Just signalling isn't sufficient as the
+ * mainloop might not have been entered yet.
+ */
+static void drvHostPulseAudioAbortMainLoop(void)
+{
+    g_fAbortMainLoop = true;
+    pa_threaded_mainloop_signal(g_pMainLoop, 0);
+}
+
 static pa_sample_format_t drvHostPulseAudioFmtToPulse(PDMAUDIOFMT fmt)
 {
     switch (fmt)
@@ -204,13 +215,13 @@ static int drvHostPulseAudioWaitFor(pa_operation *pOP, RTMSINTERVAL cMsTimeout)
     if (pOP)
     {
         uint64_t u64StartMs = RTTimeMilliTS();
-        uint64_t u64ElapsedMs;
-
         while (pa_operation_get_state(pOP) == PA_OPERATION_RUNNING)
         {
-            pa_threaded_mainloop_wait(g_pMainLoop);
+            if (!g_fAbortMainLoop)
+                pa_threaded_mainloop_wait(g_pMainLoop);
+            g_fAbortMainLoop = false;
 
-            u64ElapsedMs = RTTimeMilliTS() - u64StartMs;
+            uint64_t u64ElapsedMs = RTTimeMilliTS() - u64StartMs;
             if (u64ElapsedMs >= cMsTimeout)
             {
                 rc = VERR_TIMEOUT;
@@ -227,23 +238,21 @@ static int drvHostPulseAudioWaitFor(pa_operation *pOP, RTMSINTERVAL cMsTimeout)
 /**
  * Context status changed.
  */
-static void drvHostPulseAudioCbCtxState(pa_context *pContext, void *pvContext)
+static void drvHostPulseAudioCbCtxState(pa_context *pContext, void *pvUser)
 {
     AssertPtrReturnVoid(pContext);
-
-    PPULSEAUDIOSTREAM pStrm = (PPULSEAUDIOSTREAM)pvContext;
-    NOREF(pStrm);
+    NOREF(pvUser);
 
     switch (pa_context_get_state(pContext))
     {
         case PA_CONTEXT_READY:
         case PA_CONTEXT_TERMINATED:
-            pa_threaded_mainloop_signal(g_pMainLoop, 0);
+            drvHostPulseAudioAbortMainLoop();
             break;
 
         case PA_CONTEXT_FAILED:
             LogRel(("PulseAudio: Audio input/output stopped!\n"));
-            pa_threaded_mainloop_signal(g_pMainLoop, 0);
+            drvHostPulseAudioAbortMainLoop();
             break;
 
         default:
@@ -287,7 +296,7 @@ static void drvHostPulseAudioCbStreamState(pa_stream *pStream, void *pvContext)
         case PA_STREAM_READY:
         case PA_STREAM_FAILED:
         case PA_STREAM_TERMINATED:
-            pa_threaded_mainloop_signal(g_pMainLoop, 0 /* fWait */);
+            drvHostPulseAudioAbortMainLoop();
             break;
 
         default:
@@ -305,11 +314,9 @@ static void drvHostPulseAudioCbSuccess(pa_stream *pStream, int fSuccess, void *p
     pStrm->fOpSuccess = fSuccess;
 
     if (fSuccess)
-    {
-        pa_threaded_mainloop_signal(g_pMainLoop, 0 /* fWait */);
-    }
+        drvHostPulseAudioAbortMainLoop();
     else
-         drvHostPulseAudioError(pStrm->pDrv, "Failed to finish stream operation");
+        drvHostPulseAudioError(pStrm->pDrv, "Failed to finish stream operation");
 }
 
 static int drvHostPulseAudioOpen(bool fIn, const char *pszName,
@@ -392,12 +399,13 @@ static int drvHostPulseAudioOpen(bool fIn, const char *pszName,
         }
 
         /* Wait until the stream is ready. */
-        pa_stream_state_t sstate;
         for (;;)
         {
-            pa_threaded_mainloop_wait(g_pMainLoop);
+            if (!g_fAbortMainLoop)
+                pa_threaded_mainloop_wait(g_pMainLoop);
+            g_fAbortMainLoop = false;
 
-            sstate = pa_stream_get_state(pStream);
+            pa_stream_state_t sstate = pa_stream_get_state(pStream);
             if (sstate == PA_STREAM_READY)
                 break;
             else if (   sstate == PA_STREAM_FAILED
@@ -424,17 +432,17 @@ static int drvHostPulseAudioOpen(bool fIn, const char *pszName,
             LogFunc(("Obtained playback buffer attributes: maxlength=%d, tlength=%d, prebuf=%d, minreq=%d\n",
                      pBufAttr->maxlength, pBufAttr->tlength, pBufAttr->prebuf, pBufAttr->minreq));
 
-        pa_threaded_mainloop_unlock(g_pMainLoop);
     }
     while (0);
 
-    if (RT_FAILURE(rc))
-    {
-        if (pStream)
-            pa_stream_disconnect(pStream);
+    if (   RT_FAILURE(rc)
+        && pStream)
+        pa_stream_disconnect(pStream);
 
-        pa_threaded_mainloop_unlock(g_pMainLoop);
+    pa_threaded_mainloop_unlock(g_pMainLoop);
 
+    if (RT_FAILURE(rc))
+    {
         if (pStream)
             pa_stream_unref(pStream);
     }
@@ -486,6 +494,7 @@ static DECLCALLBACK(int) drvHostPulseAudioInit(PPDMIHOSTAUDIO pInterface)
             break;
         }
 
+        g_fAbortMainLoop = false;
         pa_context_set_state_callback(g_pContext, drvHostPulseAudioCbCtxState, NULL);
         pa_threaded_mainloop_lock(g_pMainLoop);
         fLocked = true;
@@ -502,10 +511,11 @@ static DECLCALLBACK(int) drvHostPulseAudioInit(PPDMIHOSTAUDIO pInterface)
         /* Wait until the g_pContext is ready */
         for (;;)
         {
-            pa_context_state_t cstate;
-            pa_threaded_mainloop_wait(g_pMainLoop);
+            if (!g_fAbortMainLoop)
+                pa_threaded_mainloop_wait(g_pMainLoop);
+            g_fAbortMainLoop = false;
 
-            cstate = pa_context_get_state(g_pContext);
+            pa_context_state_t cstate = pa_context_get_state(g_pContext);
             if (cstate == PA_CONTEXT_READY)
                 break;
             else if (   cstate == PA_CONTEXT_TERMINATED
@@ -516,21 +526,16 @@ static DECLCALLBACK(int) drvHostPulseAudioInit(PPDMIHOSTAUDIO pInterface)
                 break;
             }
         }
-
-        pa_threaded_mainloop_unlock(g_pMainLoop);
     }
     while (0);
 
+    if (fLocked)
+        pa_threaded_mainloop_unlock(g_pMainLoop);
+
     if (RT_FAILURE(rc))
     {
         if (g_pMainLoop)
-        {
-            if (fLocked)
-                pa_threaded_mainloop_unlock(g_pMainLoop);
-
-            if (g_pMainLoop)
-                pa_threaded_mainloop_stop(g_pMainLoop);
-        }
+            pa_threaded_mainloop_stop(g_pMainLoop);
 
         if (g_pContext)
         {
diff --git a/src/VBox/Devices/Bus/DevPCI.cpp b/src/VBox/Devices/Bus/DevPCI.cpp
index bd1c1ab..5b656d7 100644
--- a/src/VBox/Devices/Bus/DevPCI.cpp
+++ b/src/VBox/Devices/Bus/DevPCI.cpp
@@ -747,7 +747,7 @@ static void pciSetIrqInternal(PPCIGLOBALS pGlobals, uint8_t uDevFn, PPCIDEVICE p
 
 
 /**
- * @interface_method_impl{PDMPCIBUSREG,pfnSetIrq}
+ * @interface_method_impl{PDMPCIBUSREG,pfnSetIrqR3}
  */
 PDMBOTHCBDECL(void) pciSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel, uint32_t uTagSrc)
 {
@@ -1747,7 +1747,7 @@ static int pciR3RegisterDeviceInternal(PPCIBUS pBus, int iDev, PPCIDEVICE pPciDe
 
 
 /**
- * @interface_method_impl{PDMPCIBUSREG,pfnRegister}
+ * @interface_method_impl{PDMPCIBUSREG,pfnRegisterR3}
  */
 static DECLCALLBACK(int) pciR3Register(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, const char *pszName, int iDev)
 {
@@ -2308,7 +2308,7 @@ const PDMDEVREG g_DevicePCI =
 /* -=-=-=-=-=- The PCI bridge specific bits -=-=-=-=-=- */
 
 /**
- * @interface_method_impl{PDMPCIBUSREG,pfnSetIrq}
+ * @interface_method_impl{PDMPCIBUSREG,pfnSetIrqR3}
  */
 PDMBOTHCBDECL(void) pcibridgeSetIrq(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel, uint32_t uTagSrc)
 {
@@ -2431,7 +2431,7 @@ static DECLCALLBACK(int) pcibridgeR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM
 
 
 /**
- * @interface_method_impl{PDMPCIBUSREG,pfnRegister}
+ * @interface_method_impl{PDMPCIBUSREG,pfnRegisterR3}
  */
 static DECLCALLBACK(int) pcibridgeR3RegisterDevice(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, const char *pszName, int iDev)
 {
@@ -2456,7 +2456,7 @@ static DECLCALLBACK(int) pcibridgeR3RegisterDevice(PPDMDEVINS pDevIns, PPCIDEVIC
 
 
 /**
- * @interface_method_impl{PDMDEVREG, pfnReset}
+ * @interface_method_impl{PDMDEVREG,pfnReset}
  */
 static DECLCALLBACK(void) pcibridgeR3Reset(PPDMDEVINS pDevIns)
 {
@@ -2470,7 +2470,7 @@ static DECLCALLBACK(void) pcibridgeR3Reset(PPDMDEVINS pDevIns)
 
 
 /**
- * @interface_method_impl{PDMDEVREG, pfnRelocate}
+ * @interface_method_impl{PDMDEVREG,pfnRelocate}
  */
 static DECLCALLBACK(void) pcibridgeR3Relocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
 {
diff --git a/src/VBox/Devices/EFI/DevEFI.cpp b/src/VBox/Devices/EFI/DevEFI.cpp
index a332de4..c3490f0 100644
--- a/src/VBox/Devices/EFI/DevEFI.cpp
+++ b/src/VBox/Devices/EFI/DevEFI.cpp
@@ -1898,7 +1898,7 @@ efiFwVolFindFileByType(EFI_FFS_FILE_HEADER const *pFfsFile, uint8_t const *pbEnd
 /**
  * Parse EFI ROM headers and find entry points.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pThis    The device instance data.
  */
 static int efiParseFirmware(PDEVEFI pThis)
@@ -1934,7 +1934,7 @@ static int efiParseFirmware(PDEVEFI pThis)
 /**
  * Load EFI ROM file into the memory.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pThis       The device instance data.
  * @param   pCfg        Configuration node handle for the device.
  */
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
index b56010c..1f5c5a7 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
@@ -1651,7 +1651,7 @@ vga_read_char_attr_:                         ; 0xc0acb LB 0xa8
     call 02f5ah                               ; e8 3a 24
     movzx bx, ch                              ; 0f b6 dd
     sal bx, 003h                              ; c1 e3 03
-    cmp byte [bx+0462fh], 000h                ; 80 bf 2f 46 00
+    cmp byte [bx+04630h], 000h                ; 80 bf 30 46 00
     jne short 00b5ah                          ; 75 2d
     mov dx, ax                                ; 89 c2
     imul dx, di                               ; 0f af d7
@@ -1667,7 +1667,7 @@ vga_read_char_attr_:                         ; 0xc0acb LB 0xa8
     add ax, ax                                ; 01 c0
     mov dx, cx                                ; 89 ca
     add dx, ax                                ; 01 c2
-    mov ax, word [bx+04632h]                  ; 8b 87 32 46
+    mov ax, word [bx+04633h]                  ; 8b 87 33 46
     call 02f5ah                               ; e8 03 24
     mov word [ss:si], ax                      ; 36 89 04
     lea sp, [bp-008h]                         ; 8d 66 f8
@@ -1733,18 +1733,18 @@ vga_get_font_info_:                          ; 0xc0b73 LB 0x82
     retn 00002h                               ; c2 02 00
     mov dx, 0010ch                            ; ba 0c 01
     jmp short 00b91h                          ; eb bf
-    mov ax, 05bech                            ; b8 ec 5b
+    mov ax, 05bedh                            ; b8 ed 5b
     mov dx, 0c000h                            ; ba 00 c0
     jmp short 00b96h                          ; eb bc
-    mov ax, 053ech                            ; b8 ec 53
+    mov ax, 053edh                            ; b8 ed 53
     jmp short 00bd5h                          ; eb f6
-    mov ax, 057ech                            ; b8 ec 57
+    mov ax, 057edh                            ; b8 ed 57
     jmp short 00bd5h                          ; eb f1
-    mov ax, 079ech                            ; b8 ec 79
+    mov ax, 079edh                            ; b8 ed 79
     jmp short 00bd5h                          ; eb ec
-    mov ax, 069ech                            ; b8 ec 69
+    mov ax, 069edh                            ; b8 ed 69
     jmp short 00bd5h                          ; eb e7
-    mov ax, 07b19h                            ; b8 19 7b
+    mov ax, 07b1ah                            ; b8 1a 7b
     jmp short 00bd5h                          ; eb e2
     jmp short 00bc4h                          ; eb cf
 vga_read_pixel_:                             ; 0xc0bf5 LB 0x139
@@ -1766,9 +1766,9 @@ vga_read_pixel_:                             ; 0xc0bf5 LB 0x139
     je near 00d27h                            ; 0f 84 0d 01
     movzx bx, al                              ; 0f b6 d8
     sal bx, 003h                              ; c1 e3 03
-    cmp byte [bx+0462fh], 000h                ; 80 bf 2f 46 00
+    cmp byte [bx+04630h], 000h                ; 80 bf 30 46 00
     je near 00d27h                            ; 0f 84 fe 00
-    mov bl, byte [bx+04630h]                  ; 8a 9f 30 46
+    mov bl, byte [bx+04631h]                  ; 8a 9f 31 46
     cmp bl, 003h                              ; 80 fb 03
     jc short 00c43h                           ; 72 11
     jbe short 00c4bh                          ; 76 17
@@ -1827,7 +1827,7 @@ vga_read_pixel_:                             ; 0xc0bf5 LB 0x139
     call 02f3eh                               ; e8 7b 22
     movzx bx, cl                              ; 0f b6 d9
     sal bx, 003h                              ; c1 e3 03
-    cmp byte [bx+04631h], 002h                ; 80 bf 31 46 02
+    cmp byte [bx+04632h], 002h                ; 80 bf 32 46 02
     jne short 00cebh                          ; 75 1b
     mov cx, si                                ; 89 f1
     xor ch, ch                                ; 30 ed
@@ -2128,7 +2128,7 @@ biosfn_set_active_page_:                     ; 0xc0f00 LB 0xdc
     movzx bx, ch                              ; 0f b6 dd
     mov si, bx                                ; 89 de
     sal si, 003h                              ; c1 e6 03
-    cmp byte [si+0462fh], 000h                ; 80 bc 2f 46 00
+    cmp byte [si+04630h], 000h                ; 80 bc 30 46 00
     jne short 00f83h                          ; 75 40
     mov dx, strict word 0004ah                ; ba 4a 00
     mov ax, strict word 00040h                ; b8 40 00
@@ -2155,10 +2155,10 @@ biosfn_set_active_page_:                     ; 0xc0f00 LB 0xdc
     lea bx, [si+001h]                         ; 8d 5c 01
     imul bx, di                               ; 0f af df
     jmp short 00f95h                          ; eb 12
-    movzx bx, byte [bx+046aeh]                ; 0f b6 9f ae 46
+    movzx bx, byte [bx+046afh]                ; 0f b6 9f af 46
     sal bx, 006h                              ; c1 e3 06
     movzx ax, cl                              ; 0f b6 c1
-    mov bx, word [bx+046c5h]                  ; 8b 9f c5 46
+    mov bx, word [bx+046c6h]                  ; 8b 9f c6 46
     imul bx, ax                               ; 0f af d8
     mov dx, strict word 00063h                ; ba 63 00
     mov ax, strict word 00040h                ; b8 40 00
@@ -2226,15 +2226,15 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     cmp AL, strict byte 0ffh                  ; 3c ff
     je near 01363h                            ; 0f 84 43 03
     movzx si, al                              ; 0f b6 f0
-    mov al, byte [si+046aeh]                  ; 8a 84 ae 46
+    mov al, byte [si+046afh]                  ; 8a 84 af 46
     mov byte [bp-00eh], al                    ; 88 46 f2
     movzx bx, al                              ; 0f b6 d8
     sal bx, 006h                              ; c1 e3 06
-    movzx ax, byte [bx+046c2h]                ; 0f b6 87 c2 46
-    mov word [bp-018h], ax                    ; 89 46 e8
     movzx ax, byte [bx+046c3h]                ; 0f b6 87 c3 46
-    mov word [bp-016h], ax                    ; 89 46 ea
+    mov word [bp-018h], ax                    ; 89 46 e8
     movzx ax, byte [bx+046c4h]                ; 0f b6 87 c4 46
+    mov word [bp-016h], ax                    ; 89 46 ea
+    movzx ax, byte [bx+046c5h]                ; 0f b6 87 c5 46
     mov word [bp-014h], ax                    ; 89 46 ec
     mov dx, 00087h                            ; ba 87 00
     mov ax, strict word 00040h                ; b8 40 00
@@ -2250,13 +2250,13 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     jne near 010f5h                           ; 0f 85 8a 00
     mov bx, si                                ; 89 f3
     sal bx, 003h                              ; c1 e3 03
-    mov al, byte [bx+04634h]                  ; 8a 87 34 46
+    mov al, byte [bx+04635h]                  ; 8a 87 35 46
     mov dx, 003c6h                            ; ba c6 03
     out DX, AL                                ; ee
     xor al, al                                ; 30 c0
     mov dx, 003c8h                            ; ba c8 03
     out DX, AL                                ; ee
-    mov bl, byte [bx+04635h]                  ; 8a 9f 35 46
+    mov bl, byte [bx+04636h]                  ; 8a 9f 36 46
     cmp bl, 001h                              ; 80 fb 01
     jc short 01095h                           ; 72 0e
     jbe short 0109eh                          ; 76 15
@@ -2267,13 +2267,13 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     jmp short 010abh                          ; eb 16
     test bl, bl                               ; 84 db
     jne short 010abh                          ; 75 12
-    mov di, 04e42h                            ; bf 42 4e
+    mov di, 04e43h                            ; bf 43 4e
     jmp short 010abh                          ; eb 0d
-    mov di, 04f02h                            ; bf 02 4f
+    mov di, 04f03h                            ; bf 03 4f
     jmp short 010abh                          ; eb 08
-    mov di, 04fc2h                            ; bf c2 4f
+    mov di, 04fc3h                            ; bf c3 4f
     jmp short 010abh                          ; eb 03
-    mov di, 05082h                            ; bf 82 50
+    mov di, 05083h                            ; bf 83 50
     xor bx, bx                                ; 31 db
     jmp short 010beh                          ; eb 0f
     xor al, al                                ; 30 c0
@@ -2286,8 +2286,8 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     jnc short 010e8h                          ; 73 2a
     movzx si, byte [bp-012h]                  ; 0f b6 76 ee
     sal si, 003h                              ; c1 e6 03
-    movzx si, byte [si+04635h]                ; 0f b6 b4 35 46
-    movzx dx, byte [si+046beh]                ; 0f b6 94 be 46
+    movzx si, byte [si+04636h]                ; 0f b6 b4 36 46
+    movzx dx, byte [si+046bfh]                ; 0f b6 94 bf 46
     cmp bx, dx                                ; 39 d3
     jnbe short 010afh                         ; 77 dc
     imul si, bx, strict byte 00003h           ; 6b f3 03
@@ -2319,7 +2319,7 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     movzx si, byte [bp-00eh]                  ; 0f b6 76 f2
     sal si, 006h                              ; c1 e6 06
     add si, bx                                ; 01 de
-    mov al, byte [si+046e5h]                  ; 8a 84 e5 46
+    mov al, byte [si+046e6h]                  ; 8a 84 e6 46
     out DX, AL                                ; ee
     inc bx                                    ; 43
     jmp short 010ffh                          ; eb e4
@@ -2343,7 +2343,7 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     movzx si, byte [bp-00eh]                  ; 0f b6 76 f2
     sal si, 006h                              ; c1 e6 06
     add si, bx                                ; 01 de
-    mov al, byte [si+046c6h]                  ; 8a 84 c6 46
+    mov al, byte [si+046c7h]                  ; 8a 84 c7 46
     mov dx, 003c5h                            ; ba c5 03
     out DX, AL                                ; ee
     inc bx                                    ; 43
@@ -2358,14 +2358,14 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     movzx si, byte [bp-00eh]                  ; 0f b6 76 f2
     sal si, 006h                              ; c1 e6 06
     add si, bx                                ; 01 de
-    mov al, byte [si+046f9h]                  ; 8a 84 f9 46
+    mov al, byte [si+046fah]                  ; 8a 84 fa 46
     mov dx, 003cfh                            ; ba cf 03
     out DX, AL                                ; ee
     inc bx                                    ; 43
     jmp short 01156h                          ; eb e1
     movzx bx, byte [bp-012h]                  ; 0f b6 5e ee
     sal bx, 003h                              ; c1 e3 03
-    cmp byte [bx+04630h], 001h                ; 80 bf 30 46 01
+    cmp byte [bx+04631h], 001h                ; 80 bf 31 46 01
     jne short 01188h                          ; 75 05
     mov dx, 003b4h                            ; ba b4 03
     jmp short 0118bh                          ; eb 03
@@ -2385,12 +2385,12 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     mov di, cx                                ; 89 cf
     add di, bx                                ; 01 df
     lea dx, [si+001h]                         ; 8d 54 01
-    mov al, byte [di+046cch]                  ; 8a 85 cc 46
+    mov al, byte [di+046cdh]                  ; 8a 85 cd 46
     out DX, AL                                ; ee
     inc bx                                    ; 43
     jmp short 01195h                          ; eb e0
     mov bx, cx                                ; 89 cb
-    mov al, byte [bx+046cbh]                  ; 8a 87 cb 46
+    mov al, byte [bx+046cch]                  ; 8a 87 cc 46
     mov dx, 003c2h                            ; ba c2 03
     out DX, AL                                ; ee
     mov AL, strict byte 020h                  ; b0 20
@@ -2404,9 +2404,9 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     jne short 01230h                          ; 75 5f
     movzx bx, byte [bp-012h]                  ; 0f b6 5e ee
     sal bx, 003h                              ; c1 e3 03
-    cmp byte [bx+0462fh], 000h                ; 80 bf 2f 46 00
+    cmp byte [bx+04630h], 000h                ; 80 bf 30 46 00
     jne short 011f2h                          ; 75 13
-    mov es, [bx+04632h]                       ; 8e 87 32 46
+    mov es, [bx+04633h]                       ; 8e 87 33 46
     mov cx, 04000h                            ; b9 00 40
     mov ax, 00720h                            ; b8 20 07
     xor di, di                                ; 31 ff
@@ -2416,7 +2416,7 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     jmp short 01230h                          ; eb 3e
     cmp byte [bp-00ch], 00dh                  ; 80 7e f4 0d
     jnc short 0120ah                          ; 73 12
-    mov es, [bx+04632h]                       ; 8e 87 32 46
+    mov es, [bx+04633h]                       ; 8e 87 33 46
     mov cx, 04000h                            ; b9 00 40
     xor ax, ax                                ; 31 c0
     xor di, di                                ; 31 ff
@@ -2434,7 +2434,7 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     mov word [bp-01ah], ax                    ; 89 46 e6
     mov AL, strict byte 00fh                  ; b0 0f
     out DX, AL                                ; ee
-    mov es, [bx+04632h]                       ; 8e 87 32 46
+    mov es, [bx+04633h]                       ; 8e 87 33 46
     mov cx, 08000h                            ; b9 00 80
     xor ax, ax                                ; 31 c0
     xor di, di                                ; 31 ff
@@ -2453,7 +2453,7 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     call 02f68h                               ; e8 1f 1d
     movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
     sal bx, 006h                              ; c1 e3 06
-    mov bx, word [bx+046c5h]                  ; 8b 9f c5 46
+    mov bx, word [bx+046c6h]                  ; 8b 9f c6 46
     mov dx, strict word 0004ch                ; ba 4c 00
     mov ax, strict word 00040h                ; b8 40 00
     call 02f68h                               ; e8 0b 1d
@@ -2492,7 +2492,7 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     mov ax, strict word 00040h                ; b8 40 00
     call 02f4ch                               ; e8 8b 1c
     mov cx, ds                                ; 8c d9
-    mov bx, 053d0h                            ; bb d0 53
+    mov bx, 053d1h                            ; bb d1 53
     mov dx, 000a8h                            ; ba a8 00
     mov ax, strict word 00040h                ; b8 40 00
     call 02f88h                               ; e8 b9 1c
@@ -2506,7 +2506,7 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     call 02f4ch                               ; e8 67 1c
     movzx bx, byte [bp-012h]                  ; 0f b6 5e ee
     sal bx, 003h                              ; c1 e3 03
-    cmp byte [bx+0462fh], 000h                ; 80 bf 2f 46 00
+    cmp byte [bx+04630h], 000h                ; 80 bf 30 46 00
     jne short 012fch                          ; 75 09
     mov dx, strict word 00007h                ; ba 07 00
     mov ax, strict word 00006h                ; b8 06 00
@@ -2524,7 +2524,7 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     call 00f00h                               ; e8 eb fb
     movzx bx, byte [bp-012h]                  ; 0f b6 5e ee
     sal bx, 003h                              ; c1 e3 03
-    cmp byte [bx+0462fh], 000h                ; 80 bf 2f 46 00
+    cmp byte [bx+04630h], 000h                ; 80 bf 30 46 00
     jne short 01333h                          ; 75 10
     xor bl, bl                                ; 30 db
     mov AL, strict byte 004h                  ; b0 04
@@ -2534,7 +2534,7 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     mov AL, strict byte 003h                  ; b0 03
     mov AH, strict byte 011h                  ; b4 11
     int 010h                                  ; cd 10
-    mov dx, 057ech                            ; ba ec 57
+    mov dx, 057edh                            ; ba ed 57
     mov ax, strict word 0001fh                ; b8 1f 00
     call 00a00h                               ; e8 c4 f6
     mov ax, word [bp-014h]                    ; 8b 46 ec
@@ -2544,13 +2544,13 @@ biosfn_set_video_mode_:                      ; 0xc0fdc LB 0x391
     je short 01359h                           ; 74 10
     cmp ax, strict word 00008h                ; 3d 08 00
     jne short 01363h                          ; 75 15
-    mov dx, 053ech                            ; ba ec 53
+    mov dx, 053edh                            ; ba ed 53
     mov ax, strict word 00043h                ; b8 43 00
     call 00a00h                               ; e8 a9 f6
     jmp short 01363h                          ; eb 0a
-    mov dx, 05bech                            ; ba ec 5b
+    mov dx, 05bedh                            ; ba ed 5b
     jmp short 01351h                          ; eb f3
-    mov dx, 069ech                            ; ba ec 69
+    mov dx, 069edh                            ; ba ed 69
     jmp short 01351h                          ; eb ee
     lea sp, [bp-00ah]                         ; 8d 66 f6
     pop di                                    ; 5f
@@ -2860,7 +2860,7 @@ biosfn_scroll_:                              ; 0xc1572 LB 0x506
     mov word [bp-01ah], ax                    ; 89 46 e6
     mov ax, word [bp-016h]                    ; 8b 46 ea
     imul ax, cx                               ; 0f af c1
-    cmp byte [di+0462fh], 000h                ; 80 bd 2f 46 00
+    cmp byte [di+04630h], 000h                ; 80 bd 30 46 00
     jne near 017d1h                           ; 0f 85 9f 01
     mov dx, ax                                ; 89 c2
     add dx, ax                                ; 01 c2
@@ -2883,7 +2883,7 @@ biosfn_scroll_:                              ; 0xc1572 LB 0x506
     movzx dx, byte [bp-00ch]                  ; 0f b6 56 f4
     sal dx, 008h                              ; c1 e2 08
     add dx, strict byte 00020h                ; 83 c2 20
-    mov es, [di+04632h]                       ; 8e 85 32 46
+    mov es, [di+04633h]                       ; 8e 85 33 46
     mov cx, ax                                ; 89 c1
     mov ax, dx                                ; 89 d0
     mov di, bx                                ; 89 df
@@ -2917,7 +2917,7 @@ biosfn_scroll_:                              ; 0xc1572 LB 0x506
     add di, dx                                ; 01 d7
     movzx si, byte [bp-00eh]                  ; 0f b6 76 f2
     sal si, 003h                              ; c1 e6 03
-    mov es, [si+04632h]                       ; 8e 84 32 46
+    mov es, [si+04633h]                       ; 8e 84 33 46
     cld                                       ; fc
     jcxz 016ddh                               ; e3 02
     rep stosw                                 ; f3 ab
@@ -2931,7 +2931,7 @@ biosfn_scroll_:                              ; 0xc1572 LB 0x506
     add dx, dx                                ; 01 d2
     movzx si, byte [bp-00eh]                  ; 0f b6 76 f2
     sal si, 003h                              ; c1 e6 03
-    mov ax, word [si+04632h]                  ; 8b 84 32 46
+    mov ax, word [si+04633h]                  ; 8b 84 33 46
     mov si, word [bp-014h]                    ; 8b 76 ec
     imul si, word [bp-016h]                   ; 0f af 76 ea
     add cx, si                                ; 01 f1
@@ -2975,7 +2975,7 @@ biosfn_scroll_:                              ; 0xc1572 LB 0x506
     add di, dx                                ; 01 d7
     movzx si, byte [bp-00eh]                  ; 0f b6 76 f2
     sal si, 003h                              ; c1 e6 03
-    mov es, [si+04632h]                       ; 8e 84 32 46
+    mov es, [si+04633h]                       ; 8e 84 33 46
     cld                                       ; fc
     jcxz 0177eh                               ; e3 02
     rep stosw                                 ; f3 ab
@@ -2990,7 +2990,7 @@ biosfn_scroll_:                              ; 0xc1572 LB 0x506
     add dx, dx                                ; 01 d2
     movzx si, byte [bp-00eh]                  ; 0f b6 76 f2
     sal si, 003h                              ; c1 e6 03
-    mov ax, word [si+04632h]                  ; 8b 84 32 46
+    mov ax, word [si+04633h]                  ; 8b 84 33 46
     mov si, word [bp-014h]                    ; 8b 76 ec
     imul si, word [bp-016h]                   ; 0f af 76 ea
     add di, si                                ; 01 f7
@@ -3010,11 +3010,11 @@ biosfn_scroll_:                              ; 0xc1572 LB 0x506
     jc near 01a6fh                            ; 0f 82 a4 02
     dec word [bp-014h]                        ; ff 4e ec
     jmp near 0172dh                           ; e9 5c ff
-    movzx bx, byte [si+046aeh]                ; 0f b6 9c ae 46
+    movzx bx, byte [si+046afh]                ; 0f b6 9c af 46
     sal bx, 006h                              ; c1 e3 06
-    mov dl, byte [bx+046c4h]                  ; 8a 97 c4 46
+    mov dl, byte [bx+046c5h]                  ; 8a 97 c5 46
     mov byte [bp-00ah], dl                    ; 88 56 f6
-    mov bl, byte [di+04630h]                  ; 8a 9d 30 46
+    mov bl, byte [di+04631h]                  ; 8a 9d 31 46
     cmp bl, 004h                              ; 80 fb 04
     je short 017f8h                           ; 74 0f
     cmp bl, 003h                              ; 80 fb 03
@@ -3047,7 +3047,7 @@ biosfn_scroll_:                              ; 0xc1572 LB 0x506
     movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
     movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
     sal bx, 003h                              ; c1 e3 03
-    mov es, [bx+04632h]                       ; 8e 87 32 46
+    mov es, [bx+04633h]                       ; 8e 87 33 46
     xor di, di                                ; 31 ff
     cld                                       ; fc
     jcxz 01849h                               ; e3 02
@@ -3129,7 +3129,7 @@ biosfn_scroll_:                              ; 0xc1572 LB 0x506
     jc near 01a6fh                            ; 0f 82 3d 01
     dec word [bp-014h]                        ; ff 4e ec
     jmp short 018c6h                          ; eb 8f
-    mov dl, byte [di+04631h]                  ; 8a 95 31 46
+    mov dl, byte [di+04632h]                  ; 8a 95 32 46
     cmp byte [bp-010h], 000h                  ; 80 7e f0 00
     jne short 0197eh                          ; 75 3d
     cmp byte [bp-008h], 000h                  ; 80 7e f8 00
@@ -3147,7 +3147,7 @@ biosfn_scroll_:                              ; 0xc1572 LB 0x506
     movzx cx, dl                              ; 0f b6 ca
     imul cx, ax                               ; 0f af c8
     movzx ax, byte [bp-00ch]                  ; 0f b6 46 f4
-    mov es, [di+04632h]                       ; 8e 85 32 46
+    mov es, [di+04633h]                       ; 8e 85 33 46
     xor di, di                                ; 31 ff
     cld                                       ; fc
     jcxz 0197bh                               ; e3 02
@@ -3249,11 +3249,11 @@ write_gfx_char_pl4_:                         ; 0xc1a78 LB 0xeb
     je short 01a96h                           ; 74 0b
     cmp byte [bp+006h], 00eh                  ; 80 7e 06 0e
     jne short 01a9bh                          ; 75 0a
-    mov di, 05bech                            ; bf ec 5b
+    mov di, 05bedh                            ; bf ed 5b
     jmp short 01a9eh                          ; eb 08
-    mov di, 069ech                            ; bf ec 69
+    mov di, 069edh                            ; bf ed 69
     jmp short 01a9eh                          ; eb 03
-    mov di, 053ech                            ; bf ec 53
+    mov di, 053edh                            ; bf ed 53
     movzx si, cl                              ; 0f b6 f1
     movzx bx, byte [bp+006h]                  ; 0f b6 5e 06
     imul si, bx                               ; 0f af f3
@@ -3340,7 +3340,7 @@ write_gfx_char_cga_:                         ; 0xc1b63 LB 0x11e
     push di                                   ; 57
     sub sp, strict byte 00008h                ; 83 ec 08
     mov byte [bp-008h], dl                    ; 88 56 f8
-    mov si, 053ech                            ; be ec 53
+    mov si, 053edh                            ; be ed 53
     xor bh, bh                                ; 30 ff
     movzx di, byte [bp+006h]                  ; 0f b6 7e 06
     imul di, bx                               ; 0f af fb
@@ -3454,7 +3454,7 @@ write_gfx_char_lin_:                         ; 0xc1c81 LB 0x91
     push di                                   ; 57
     sub sp, strict byte 00008h                ; 83 ec 08
     mov byte [bp-006h], dl                    ; 88 56 fa
-    mov di, 053ech                            ; bf ec 53
+    mov di, 053edh                            ; bf ed 53
     movzx dx, cl                              ; 0f b6 d1
     movzx cx, byte [bp+004h]                  ; 0f b6 4e 04
     imul cx, dx                               ; 0f af ca
@@ -3549,7 +3549,7 @@ biosfn_write_char_attr_:                     ; 0xc1d12 LB 0x168
     movzx bx, cl                              ; 0f b6 d9
     mov di, bx                                ; 89 df
     sal di, 003h                              ; c1 e7 03
-    cmp byte [di+0462fh], 000h                ; 80 bd 2f 46 00
+    cmp byte [di+04630h], 000h                ; 80 bd 30 46 00
     jne short 01dcdh                          ; 75 47
     mov bx, word [bp-018h]                    ; 8b 5e e8
     imul bx, ax                               ; 0f af d8
@@ -3570,18 +3570,18 @@ biosfn_write_char_attr_:                     ; 0xc1d12 LB 0x168
     add ax, bx                                ; 01 d8
     mov word [bp-01ah], ax                    ; 89 46 e6
     mov ax, word [bp-01ah]                    ; 8b 46 e6
-    mov es, [di+04632h]                       ; 8e 85 32 46
+    mov es, [di+04633h]                       ; 8e 85 33 46
     mov cx, si                                ; 89 f1
     mov di, dx                                ; 89 d7
     cld                                       ; fc
     jcxz 01dcah                               ; e3 02
     rep stosw                                 ; f3 ab
     jmp near 01e73h                           ; e9 a6 00
-    movzx bx, byte [bx+046aeh]                ; 0f b6 9f ae 46
+    movzx bx, byte [bx+046afh]                ; 0f b6 9f af 46
     sal bx, 006h                              ; c1 e3 06
-    mov al, byte [bx+046c4h]                  ; 8a 87 c4 46
+    mov al, byte [bx+046c5h]                  ; 8a 87 c5 46
     mov byte [bp-008h], al                    ; 88 46 f8
-    mov al, byte [di+04631h]                  ; 8a 85 31 46
+    mov al, byte [di+04632h]                  ; 8a 85 32 46
     mov byte [bp-014h], al                    ; 88 46 ec
     dec si                                    ; 4e
     cmp si, strict byte 0ffffh                ; 83 fe ff
@@ -3591,7 +3591,7 @@ biosfn_write_char_attr_:                     ; 0xc1d12 LB 0x168
     jnc near 01e73h                           ; 0f 83 7d 00
     movzx bx, byte [bp-006h]                  ; 0f b6 5e fa
     sal bx, 003h                              ; c1 e3 03
-    mov al, byte [bx+04630h]                  ; 8a 87 30 46
+    mov al, byte [bx+04631h]                  ; 8a 87 31 46
     cmp AL, strict byte 003h                  ; 3c 03
     jc short 01e11h                           ; 72 0c
     jbe short 01e17h                          ; 76 10
@@ -3679,7 +3679,7 @@ biosfn_write_char_only_:                     ; 0xc1e7a LB 0x16f
     movzx di, cl                              ; 0f b6 f9
     mov bx, di                                ; 89 fb
     sal bx, 003h                              ; c1 e3 03
-    cmp byte [bx+0462fh], 000h                ; 80 bf 2f 46 00
+    cmp byte [bx+04630h], 000h                ; 80 bf 30 46 00
     jne short 01f38h                          ; 75 4a
     mov dx, word [bp-018h]                    ; 8b 56 e8
     imul dx, ax                               ; 0f af d0
@@ -3701,7 +3701,7 @@ biosfn_write_char_only_:                     ; 0xc1e7a LB 0x16f
     movzx ax, byte [bp-012h]                  ; 0f b6 46 ee
     movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
     sal bx, 003h                              ; c1 e3 03
-    mov di, word [bx+04632h]                  ; 8b bf 32 46
+    mov di, word [bx+04633h]                  ; 8b bf 33 46
     mov bx, ax                                ; 89 c3
     mov dx, cx                                ; 89 ca
     mov ax, di                                ; 89 f8
@@ -3709,11 +3709,11 @@ biosfn_write_char_only_:                     ; 0xc1e7a LB 0x16f
     inc cx                                    ; 41
     inc cx                                    ; 41
     jmp short 01f14h                          ; eb dc
-    movzx di, byte [di+046aeh]                ; 0f b6 bd ae 46
+    movzx di, byte [di+046afh]                ; 0f b6 bd af 46
     sal di, 006h                              ; c1 e7 06
-    mov al, byte [di+046c4h]                  ; 8a 85 c4 46
+    mov al, byte [di+046c5h]                  ; 8a 85 c5 46
     mov byte [bp-00ah], al                    ; 88 46 f6
-    mov al, byte [bx+04631h]                  ; 8a 87 31 46
+    mov al, byte [bx+04632h]                  ; 8a 87 32 46
     mov byte [bp-008h], al                    ; 88 46 f8
     dec si                                    ; 4e
     cmp si, strict byte 0ffffh                ; 83 fe ff
@@ -3723,7 +3723,7 @@ biosfn_write_char_only_:                     ; 0xc1e7a LB 0x16f
     jnc near 01fe2h                           ; 0f 83 81 00
     movzx bx, byte [bp-00eh]                  ; 0f b6 5e f2
     sal bx, 003h                              ; c1 e3 03
-    mov bl, byte [bx+04630h]                  ; 8a 9f 30 46
+    mov bl, byte [bx+04631h]                  ; 8a 9f 31 46
     cmp bl, 003h                              ; 80 fb 03
     jc short 01f7fh                           ; 72 0e
     jbe short 01f86h                          ; 76 13
@@ -3786,9 +3786,9 @@ biosfn_write_pixel_:                         ; 0xc1fe9 LB 0x16a
     je near 0212bh                            ; 0f 84 1e 01
     movzx bx, al                              ; 0f b6 d8
     sal bx, 003h                              ; c1 e3 03
-    cmp byte [bx+0462fh], 000h                ; 80 bf 2f 46 00
+    cmp byte [bx+04630h], 000h                ; 80 bf 30 46 00
     je near 0212bh                            ; 0f 84 0f 01
-    mov al, byte [bx+04630h]                  ; 8a 87 30 46
+    mov al, byte [bx+04631h]                  ; 8a 87 31 46
     cmp AL, strict byte 003h                  ; 3c 03
     jc short 02033h                           ; 72 0f
     jbe short 0203ah                          ; 76 14
@@ -3842,7 +3842,7 @@ biosfn_write_pixel_:                         ; 0xc1fe9 LB 0x16a
     mov ax, cx                                ; 89 c8
     shr ax, 1                                 ; d1 e8
     imul ax, ax, strict byte 00050h           ; 6b c0 50
-    cmp byte [bx+04631h], 002h                ; 80 bf 31 46 02
+    cmp byte [bx+04632h], 002h                ; 80 bf 32 46 02
     jne short 020b5h                          ; 75 08
     mov bx, word [bp-00ah]                    ; 8b 5e f6
     shr bx, 002h                              ; c1 eb 02
@@ -3860,7 +3860,7 @@ biosfn_write_pixel_:                         ; 0xc1fe9 LB 0x16a
     mov bl, al                                ; 88 c3
     movzx si, byte [bp-004h]                  ; 0f b6 76 fc
     sal si, 003h                              ; c1 e6 03
-    cmp byte [si+04631h], 002h                ; 80 bc 31 46 02
+    cmp byte [si+04632h], 002h                ; 80 bc 32 46 02
     jne short 020fbh                          ; 75 19
     mov al, byte [bp-00ah]                    ; 8a 46 f6
     and AL, strict byte 003h                  ; 24 03
@@ -3973,7 +3973,7 @@ biosfn_write_teletype_:                      ; 0xc2153 LB 0x241
     movzx bx, byte [bp-010h]                  ; 0f b6 5e f0
     mov si, bx                                ; 89 de
     sal si, 003h                              ; c1 e6 03
-    cmp byte [si+0462fh], 000h                ; 80 bc 2f 46 00
+    cmp byte [si+04630h], 000h                ; 80 bc 30 46 00
     jne short 02256h                          ; 75 4d
     mov ax, word [bp-012h]                    ; 8b 46 ee
     imul ax, word [bp-014h]                   ; 0f af 46 ec
@@ -3990,7 +3990,7 @@ biosfn_write_teletype_:                      ; 0xc2153 LB 0x241
     add ax, ax                                ; 01 c0
     add cx, ax                                ; 01 c1
     movzx bx, byte [bp-00ch]                  ; 0f b6 5e f4
-    mov ax, word [si+04632h]                  ; 8b 84 32 46
+    mov ax, word [si+04633h]                  ; 8b 84 33 46
     mov dx, cx                                ; 89 ca
     call 02f4ch                               ; e8 0f 0d
     cmp byte [bp-00eh], 003h                  ; 80 7e f2 03
@@ -3998,14 +3998,14 @@ biosfn_write_teletype_:                      ; 0xc2153 LB 0x241
     movzx bx, byte [bp-004h]                  ; 0f b6 5e fc
     mov dx, cx                                ; 89 ca
     inc dx                                    ; 42
-    mov ax, word [si+04632h]                  ; 8b 84 32 46
+    mov ax, word [si+04633h]                  ; 8b 84 33 46
     call 02f4ch                               ; e8 f9 0c
     jmp near 022d4h                           ; e9 7e 00
-    movzx bx, byte [bx+046aeh]                ; 0f b6 9f ae 46
+    movzx bx, byte [bx+046afh]                ; 0f b6 9f af 46
     sal bx, 006h                              ; c1 e3 06
-    mov ah, byte [bx+046c4h]                  ; 8a a7 c4 46
-    mov dl, byte [si+04631h]                  ; 8a 94 31 46
-    mov al, byte [si+04630h]                  ; 8a 84 30 46
+    mov ah, byte [bx+046c5h]                  ; 8a a7 c5 46
+    mov dl, byte [si+04632h]                  ; 8a 94 32 46
+    mov al, byte [si+04631h]                  ; 8a 84 31 46
     cmp AL, strict byte 003h                  ; 3c 03
     jc short 0227ah                           ; 72 0c
     jbe short 02280h                          ; 76 10
@@ -4061,7 +4061,7 @@ biosfn_write_teletype_:                      ; 0xc2153 LB 0x241
     mov bl, byte [bp-012h]                    ; 8a 5e ee
     db  0feh, 0cbh
     ; dec bl                                    ; fe cb
-    cmp byte [si+0462fh], 000h                ; 80 bc 2f 46 00
+    cmp byte [si+04630h], 000h                ; 80 bc 30 46 00
     jne short 02354h                          ; 75 4a
     mov ax, word [bp-012h]                    ; 8b 46 ee
     imul ax, word [bp-014h]                   ; 0f af 46 ec
@@ -4080,7 +4080,7 @@ biosfn_write_teletype_:                      ; 0xc2153 LB 0x241
     mov dx, cx                                ; 89 ca
     add dx, ax                                ; 01 c2
     inc dx                                    ; 42
-    mov ax, word [si+04632h]                  ; 8b 84 32 46
+    mov ax, word [si+04633h]                  ; 8b 84 33 46
     call 02f3eh                               ; e8 02 0c
     push strict byte 00001h                   ; 6a 01
     movzx dx, byte [bp-006h]                  ; 0f b6 56 fa
@@ -4355,7 +4355,7 @@ biosfn_load_text_8_14_pat_:                  ; 0xc2538 LB 0x70
     mov di, bx                                ; 89 df
     sal di, 005h                              ; c1 e7 05
     add di, word [bp-00ch]                    ; 03 7e f4
-    add si, 05bech                            ; 81 c6 ec 5b
+    add si, 05bedh                            ; 81 c6 ed 5b
     mov cx, strict word 0000eh                ; b9 0e 00
     mov dx, 0c000h                            ; ba 00 c0
     mov ax, 0a000h                            ; b8 00 a0
@@ -4411,7 +4411,7 @@ biosfn_load_text_8_8_pat_:                   ; 0xc25a8 LB 0x72
     mov di, bx                                ; 89 df
     sal di, 005h                              ; c1 e7 05
     add di, word [bp-00ch]                    ; 03 7e f4
-    add si, 053ech                            ; 81 c6 ec 53
+    add si, 053edh                            ; 81 c6 ed 53
     mov cx, strict word 00008h                ; b9 08 00
     mov dx, 0c000h                            ; ba 00 c0
     mov ax, 0a000h                            ; b8 00 a0
@@ -4467,7 +4467,7 @@ biosfn_load_text_8_16_pat_:                  ; 0xc261a LB 0x72
     mov di, bx                                ; 89 df
     sal di, 005h                              ; c1 e7 05
     add di, word [bp-00ch]                    ; 03 7e f4
-    add si, 069ech                            ; 81 c6 ec 69
+    add si, 069edh                            ; 81 c6 ed 69
     mov cx, strict word 00010h                ; b9 10 00
     mov dx, 0c000h                            ; ba 00 c0
     mov ax, 0a000h                            ; b8 00 a0
@@ -4601,7 +4601,7 @@ biosfn_read_state_info_:                     ; 0xc2752 LB 0x101
     push dx                                   ; 52
     push bx                                   ; 53
     mov cx, ds                                ; 8c d9
-    mov bx, 05382h                            ; bb 82 53
+    mov bx, 05383h                            ; bb 83 53
     mov dx, word [bp-00ah]                    ; 8b 56 f6
     mov ax, word [bp-008h]                    ; 8b 46 f8
     call 02f88h                               ; e8 20 08
@@ -5501,7 +5501,7 @@ find_vga_entry_:                             ; 0xc2f17 LB 0x27
     jnbe short 02f38h                         ; 77 0e
     movzx bx, al                              ; 0f b6 d8
     sal bx, 003h                              ; c1 e3 03
-    cmp dl, byte [bx+0462eh]                  ; 3a 97 2e 46
+    cmp dl, byte [bx+0462fh]                  ; 3a 97 2f 46
     jne short 02f24h                          ; 75 ee
     mov ah, al                                ; 88 c4
     mov al, ah                                ; 88 e0
@@ -6767,10 +6767,10 @@ vesa_pm_end:                                 ; 0xc4514 LB 0x1
   ; Padding 0xeb bytes at 0xc4515
   times 235 db 0
 
-section _DATA progbits vstart=0x4600 align=1 ; size=0x371e class=DATA group=DGROUP
-_msg_vga_init:                               ; 0xc4600 LB 0x2e
-    db  'Oracle VM VirtualBox Version 5.0.8 VGA BIOS', 00dh, 00ah, 000h
-_vga_modes:                                  ; 0xc462e LB 0x80
+section _DATA progbits vstart=0x4600 align=1 ; size=0x371f class=DATA group=DGROUP
+_msg_vga_init:                               ; 0xc4600 LB 0x2f
+    db  'Oracle VM VirtualBox Version 5.0.10 VGA BIOS', 00dh, 00ah, 000h
+_vga_modes:                                  ; 0xc462f LB 0x80
     db  000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
     db  002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
     db  004h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h, 005h, 001h, 002h, 002h, 000h, 0b8h, 0ffh, 001h
@@ -6779,11 +6779,11 @@ _vga_modes:                                  ; 0xc462e LB 0x80
     db  00fh, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 000h, 010h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
     db  011h, 001h, 003h, 001h, 000h, 0a0h, 0ffh, 002h, 012h, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
     db  013h, 001h, 005h, 008h, 000h, 0a0h, 0ffh, 003h, 06ah, 001h, 004h, 004h, 000h, 0a0h, 0ffh, 002h
-_line_to_vpti:                               ; 0xc46ae LB 0x10
+_line_to_vpti:                               ; 0xc46af LB 0x10
     db  017h, 017h, 018h, 018h, 004h, 005h, 006h, 007h, 00dh, 00eh, 011h, 012h, 01ah, 01bh, 01ch, 01dh
-_dac_regs:                                   ; 0xc46be LB 0x4
+_dac_regs:                                   ; 0xc46bf LB 0x4
     dd  0ff3f3f3fh
-_video_param_table:                          ; 0xc46c2 LB 0x780
+_video_param_table:                          ; 0xc46c3 LB 0x780
     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
@@ -6904,7 +6904,7 @@ _video_param_table:                          ; 0xc46c2 LB 0x780
     db  072h, 0f0h, 000h, 060h, 000h, 000h, 000h, 000h, 000h, 000h, 059h, 08dh, 057h, 032h, 000h, 057h
     db  073h, 0e3h, 0ffh, 000h, 001h, 002h, 003h, 004h, 005h, 014h, 007h, 038h, 039h, 03ah, 03bh, 03ch
     db  03dh, 03eh, 03fh, 001h, 000h, 00fh, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 005h, 00fh, 0ffh
-_palette0:                                   ; 0xc4e42 LB 0xc0
+_palette0:                                   ; 0xc4e43 LB 0xc0
     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, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
     db  02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
@@ -6917,7 +6917,7 @@ _palette0:                                   ; 0xc4e42 LB 0xc0
     db  02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah
     db  02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 02ah, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
     db  03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh, 03fh
-_palette1:                                   ; 0xc4f02 LB 0xc0
+_palette1:                                   ; 0xc4f03 LB 0xc0
     db  000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
     db  000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah
     db  000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah, 000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah
@@ -6930,7 +6930,7 @@ _palette1:                                   ; 0xc4f02 LB 0xc0
     db  015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh, 015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh
     db  015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
     db  015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
-_palette2:                                   ; 0xc4fc2 LB 0xc0
+_palette2:                                   ; 0xc4fc3 LB 0xc0
     db  000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
     db  000h, 02ah, 02ah, 02ah, 000h, 02ah, 02ah, 02ah, 000h, 000h, 015h, 000h, 000h, 03fh, 000h, 02ah
     db  015h, 000h, 02ah, 03fh, 02ah, 000h, 015h, 02ah, 000h, 03fh, 02ah, 02ah, 015h, 02ah, 02ah, 03fh
@@ -6943,7 +6943,7 @@ _palette2:                                   ; 0xc4fc2 LB 0xc0
     db  015h, 015h, 000h, 015h, 015h, 02ah, 015h, 03fh, 000h, 015h, 03fh, 02ah, 03fh, 015h, 000h, 03fh
     db  015h, 02ah, 03fh, 03fh, 000h, 03fh, 03fh, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
     db  015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
-_palette3:                                   ; 0xc5082 LB 0x300
+_palette3:                                   ; 0xc5083 LB 0x300
     db  000h, 000h, 000h, 000h, 000h, 02ah, 000h, 02ah, 000h, 000h, 02ah, 02ah, 02ah, 000h, 000h, 02ah
     db  000h, 02ah, 02ah, 015h, 000h, 02ah, 02ah, 02ah, 015h, 015h, 015h, 015h, 015h, 03fh, 015h, 03fh
     db  015h, 015h, 03fh, 03fh, 03fh, 015h, 015h, 03fh, 015h, 03fh, 03fh, 03fh, 015h, 03fh, 03fh, 03fh
@@ -6992,19 +6992,19 @@ _palette3:                                   ; 0xc5082 LB 0x300
     db  00bh, 010h, 00bh, 00bh, 010h, 00ch, 00bh, 010h, 00dh, 00bh, 010h, 00fh, 00bh, 010h, 010h, 00bh
     db  00fh, 010h, 00bh, 00dh, 010h, 00bh, 00ch, 010h, 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
-_static_functionality:                       ; 0xc5382 LB 0x10
+_static_functionality:                       ; 0xc5383 LB 0x10
     db  0ffh, 0e0h, 00fh, 000h, 000h, 000h, 000h, 007h, 002h, 008h, 0e7h, 00ch, 000h, 000h, 000h, 000h
-_dcc_table:                                  ; 0xc5392 LB 0x24
+_dcc_table:                                  ; 0xc5393 LB 0x24
     db  010h, 001h, 007h, 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
-_secondary_save_area:                        ; 0xc53b6 LB 0x1a
-    db  01ah, 000h, 092h, 053h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+_secondary_save_area:                        ; 0xc53b7 LB 0x1a
+    db  01ah, 000h, 093h, 053h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_video_save_pointer_table:                   ; 0xc53d0 LB 0x1c
-    db  0c2h, 046h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-    db  0b6h, 053h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_vgafont8:                                   ; 0xc53ec LB 0x800
+_video_save_pointer_table:                   ; 0xc53d1 LB 0x1c
+    db  0c3h, 046h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+    db  0b7h, 053h, 000h, 0c0h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+_vgafont8:                                   ; 0xc53ed LB 0x800
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07eh, 081h, 0a5h, 081h, 0bdh, 099h, 081h, 07eh
     db  07eh, 0ffh, 0dbh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 06ch, 0feh, 0feh, 0feh, 07ch, 038h, 010h, 000h
     db  010h, 038h, 07ch, 0feh, 07ch, 038h, 010h, 000h, 038h, 07ch, 038h, 0feh, 0feh, 07ch, 038h, 07ch
@@ -7133,7 +7133,7 @@ _vgafont8:                                   ; 0xc53ec LB 0x800
     db  000h, 000h, 000h, 000h, 018h, 000h, 000h, 000h, 00fh, 00ch, 00ch, 00ch, 0ech, 06ch, 03ch, 01ch
     db  078h, 06ch, 06ch, 06ch, 06ch, 000h, 000h, 000h, 070h, 018h, 030h, 060h, 078h, 000h, 000h, 000h
     db  000h, 000h, 03ch, 03ch, 03ch, 03ch, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_vgafont14:                                  ; 0xc5bec LB 0xe00
+_vgafont14:                                  ; 0xc5bed LB 0xe00
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 07eh, 000h, 000h, 000h, 000h, 000h, 07eh, 0ffh
     db  0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 07eh, 000h, 000h, 000h, 000h, 000h, 000h, 06ch, 0feh, 0feh
@@ -7358,7 +7358,7 @@ _vgafont14:                                  ; 0xc5bec LB 0xe00
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_vgafont16:                                  ; 0xc69ec LB 0x1000
+_vgafont16:                                  ; 0xc69ed LB 0x1000
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 07eh, 081h, 0a5h, 081h, 081h, 0bdh, 099h, 081h, 081h, 07eh, 000h, 000h, 000h, 000h
     db  000h, 000h, 07eh, 0ffh, 0dbh, 0ffh, 0ffh, 0c3h, 0e7h, 0ffh, 0ffh, 07eh, 000h, 000h, 000h, 000h
@@ -7615,7 +7615,7 @@ _vgafont16:                                  ; 0xc69ec LB 0x1000
     db  000h, 070h, 0d8h, 030h, 060h, 0c8h, 0f8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 07ch, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-_vgafont14alt:                               ; 0xc79ec LB 0x12d
+_vgafont14alt:                               ; 0xc79ed LB 0x12d
     db  01dh, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h, 022h
     db  000h, 063h, 063h, 063h, 022h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 02bh, 000h
     db  000h, 000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 000h, 000h, 000h, 02dh, 000h, 000h
@@ -7635,7 +7635,7 @@ _vgafont14alt:                               ; 0xc79ec LB 0x12d
     db  000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 0f3h, 000h, 000h, 000h, 0f1h, 000h
     db  000h, 018h, 018h, 018h, 0ffh, 018h, 018h, 018h, 000h, 0ffh, 000h, 000h, 000h, 0f6h, 000h, 000h
     db  018h, 018h, 000h, 000h, 0ffh, 000h, 000h, 018h, 018h, 000h, 000h, 000h, 000h
-_vgafont16alt:                               ; 0xc7b19 LB 0x145
+_vgafont16alt:                               ; 0xc7b1a LB 0x144
     db  01dh, 000h, 000h, 000h, 000h, 000h, 024h, 066h, 0ffh, 066h, 024h, 000h, 000h, 000h, 000h, 000h
     db  000h, 030h, 000h, 000h, 03ch, 066h, 0c3h, 0c3h, 0dbh, 0dbh, 0c3h, 0c3h, 066h, 03ch, 000h, 000h
     db  000h, 000h, 04dh, 000h, 000h, 0c3h, 0e7h, 0ffh, 0ffh, 0dbh, 0c3h, 0c3h, 0c3h, 0c3h, 0c3h, 000h
@@ -7656,32 +7656,34 @@ _vgafont16alt:                               ; 0xc7b19 LB 0x145
     db  09eh, 000h, 0fch, 066h, 066h, 07ch, 062h, 066h, 06fh, 066h, 066h, 066h, 0f3h, 000h, 000h, 000h
     db  000h, 0abh, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 060h, 0ceh, 09bh, 006h, 00ch, 01fh
     db  000h, 000h, 0ach, 000h, 0c0h, 0c0h, 0c2h, 0c6h, 0cch, 018h, 030h, 066h, 0ceh, 096h, 03eh, 006h
-    db  006h, 000h, 000h, 000h, 000h
+    db  006h, 000h, 000h, 000h
 _vbebios_copyright:                          ; 0xc7c5e LB 0x15
     db  'VirtualBox VESA BIOS', 000h
 _vbebios_vendor_name:                        ; 0xc7c73 LB 0x13
     db  'Oracle Corporation', 000h
 _vbebios_product_name:                       ; 0xc7c86 LB 0x21
     db  'Oracle VM VirtualBox VBE Adapter', 000h
-_vbebios_product_revision:                   ; 0xc7ca7 LB 0x23
-    db  'Oracle VM VirtualBox Version 5.0.8', 000h
-_vbebios_info_string:                        ; 0xc7cca LB 0x2b
+_vbebios_product_revision:                   ; 0xc7ca7 LB 0x24
+    db  'Oracle VM VirtualBox Version 5.0.10', 000h
+_vbebios_info_string:                        ; 0xc7ccb LB 0x2b
     db  'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
-_no_vbebios_info_string:                     ; 0xc7cf5 LB 0x29
+_no_vbebios_info_string:                     ; 0xc7cf6 LB 0x29
     db  'No VirtualBox VBE support available!', 00dh, 00ah, 00dh, 00ah, 000h
 
-section CONST progbits vstart=0x7d1e align=1 ; size=0x0 class=DATA group=DGROUP
+  ; Padding 0x1 bytes at 0xc7d1f
+    db  001h
 
-section CONST2 progbits vstart=0x7d1e align=1 ; size=0x0 class=DATA group=DGROUP
+section CONST progbits vstart=0x7d20 align=1 ; size=0x0 class=DATA group=DGROUP
 
-  ; Padding 0x2e2 bytes at 0xc7d1e
-    db  001h, 000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh
-    db  065h, 02fh, 066h, 06dh, 033h, 02fh, 073h, 072h, 063h, 02fh, 076h, 062h, 06fh, 078h, 02dh, 035h
-    db  02eh, 030h, 02fh, 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h
-    db  036h, 034h, 02fh, 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h
-    db  042h, 06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 02fh, 056h, 042h, 06fh, 078h, 056h
-    db  067h, 061h, 042h, 069h, 06fh, 073h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h
-    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
+section CONST2 progbits vstart=0x7d20 align=1 ; size=0x0 class=DATA group=DGROUP
+
+  ; Padding 0x2e0 bytes at 0xc7d20
+    db  000h, 000h, 000h, 000h, 001h, 000h, 000h, 000h, 000h, 000h, 000h, 02fh, 068h, 06fh, 06dh, 065h
+    db  02fh, 066h, 06dh, 033h, 02fh, 073h, 072h, 063h, 02fh, 076h, 062h, 06fh, 078h, 02dh, 035h, 02eh
+    db  030h, 02fh, 06fh, 075h, 074h, 02fh, 06ch, 069h, 06eh, 075h, 078h, 02eh, 061h, 06dh, 064h, 036h
+    db  034h, 02fh, 072h, 065h, 06ch, 065h, 061h, 073h, 065h, 02fh, 06fh, 062h, 06ah, 02fh, 056h, 042h
+    db  06fh, 078h, 056h, 067h, 061h, 042h, 069h, 06fh, 073h, 02fh, 056h, 042h, 06fh, 078h, 056h, 067h
+    db  061h, 042h, 069h, 06fh, 073h, 02eh, 073h, 079h, 06dh, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
@@ -7721,4 +7723,4 @@ section CONST2 progbits vstart=0x7d1e 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, 0b2h
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 002h
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
index 6a89a7d..d872bc5 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
@@ -1 +1 @@
-7ee6649e1d9a2261f5c493df22b001c9 *VBoxVgaBios.rom
+2ba27a4a460badfb91c4defb54aa8471 *VBoxVgaBios.rom
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
index 247f7e3..fb28a1e 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
@@ -536,7 +536,7 @@ static const char *vmsvgaFIFOCmdToString(uint32_t u32Cmd)
 
 #ifdef IN_RING3
 /**
- * @interface_method_impl{PDMIDISPLAYPORT::pfnSetViewport}
+ * @interface_method_impl{PDMIDISPLAYPORT,pfnSetViewport}
  */
 DECLCALLBACK(void) vmsvgaPortSetViewport(PPDMIDISPLAYPORT pInterface, uint32_t uScreenId, uint32_t x, uint32_t y, uint32_t cx, uint32_t cy)
 {
@@ -2544,14 +2544,16 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
             offCurrentCmd = ~UINT32_C(3);
         }
 
-/**
+/** @def VMSVGAFIFO_GET_CMD_BUFFER_BREAK
  * Macro for shortening calls to vmsvgaFIFOGetCmdPayload.
  *
  * Will break out of the switch on failure.
  * Will restart and quit the loop if the thread was requested to stop.
  *
+ * @param   a_PtrVar        Request variable pointer.
+ * @param   a_Type          Request typedef (not pointer) for casting.
  * @param   a_cbPayloadReq  How much payload to fetch.
- * @remarks Access a bunch of variables in the current scope!
+ * @remarks Accesses a bunch of variables in the current scope!
  */
 # define VMSVGAFIFO_GET_CMD_BUFFER_BREAK(a_PtrVar, a_Type, a_cbPayloadReq) \
             if (1) { \
@@ -2559,12 +2561,16 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
                                                                pbBounceBuf, &cbPayload, pThread, pThis, pSVGAState); \
                 if (RT_UNLIKELY((uintptr_t)(a_PtrVar) < 2)) { if ((uintptr_t)(a_PtrVar) == 1) continue; break; } \
             } else do {} while (0)
-/**
+/** @def VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK
  * Macro for shortening calls to vmsvgaFIFOGetCmdPayload for refetching the
  * buffer after figuring out the actual command size.
+ *
  * Will break out of the switch on failure.
+ *
+ * @param   a_PtrVar        Request variable pointer.
+ * @param   a_Type          Request typedef (not pointer) for casting.
  * @param   a_cbPayloadReq  How much payload to fetch.
- * @remarks Access a bunch of variables in the current scope!
+ * @remarks Accesses a bunch of variables in the current scope!
  */
 # define VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(a_PtrVar, a_Type, a_cbPayloadReq) \
             if (1) { \
@@ -4438,7 +4444,7 @@ static const char * const g_apszVmSvgaDevCapNames[] =
 /**
  * Power On notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  *
  * @remarks Caller enters the device critical section.
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
index d569d54..e3069cf 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
@@ -511,7 +511,7 @@ static int vmsvga3dGatherExtensions(char **ppszExtensions, float fGLProfileVersi
 }
 
 /**
- * @interface_method_impl{VBOXVMSVGASHADERIF, pfnSwitchInitProfile}
+ * @interface_method_impl{VBOXVMSVGASHADERIF,pfnSwitchInitProfile}
  */
 static DECLCALLBACK(void) vmsvga3dShaderIfSwitchInitProfile(PVBOXVMSVGASHADERIF pThis, bool fOtherProfile)
 {
@@ -526,7 +526,7 @@ static DECLCALLBACK(void) vmsvga3dShaderIfSwitchInitProfile(PVBOXVMSVGASHADERIF
 
 
 /**
- * @interface_method_impl{VBOXVMSVGASHADERIF, pfnGetNextExtension}
+ * @interface_method_impl{VBOXVMSVGASHADERIF,pfnGetNextExtension}
  */
 static DECLCALLBACK(bool) vmsvga3dShaderIfGetNextExtension(PVBOXVMSVGASHADERIF pThis, void **ppvEnumCtx,
                                                            char *pszBuf, size_t cbBuf, bool fOtherProfile)
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp
index b53119c..d3e01da 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp
@@ -401,7 +401,7 @@ int vmsvga3dSurfaceStretchBlt(PVGASTATE pThis, SVGA3dSurfaceImageId const *pDstS
         AssertRCReturn(rc, rc);
     }
 
-    if (VMSVGA3DSURFACE_HAS_HW_SURFACE(pDstSurface))
+    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));
diff --git a/src/VBox/Devices/Graphics/DevVGA.cpp b/src/VBox/Devices/Graphics/DevVGA.cpp
index b829cd1..fbf3a44 100644
--- a/src/VBox/Devices/Graphics/DevVGA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA.cpp
@@ -3347,7 +3347,7 @@ static int vgaInternalMMIOFill(PVGASTATE pThis, void *pvUser, RTGCPHYS GCPhysAdd
 
 /**
  * @callback_method_impl{FNIOMMMIOFILL,
- * Legacy VGA memory (0xa0000 - 0xbffff) write hook, to be called from IOM and
+ * Legacy VGA memory (0xa0000 - 0xbffff) write hook\, to be called from IOM and
  * from the inside of VGADeviceGC.cpp. This is the advanced version of
  * vga_mem_writeb function.}
  */
@@ -3363,7 +3363,7 @@ PDMBOTHCBDECL(int) vgaMMIOFill(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhys
 
 /**
  * @callback_method_impl{FNIOMMMIOREAD, Legacy VGA memory (0xa0000 - 0xbffff)
- *                      read hook, to be called from IOM.}
+ *                      read hook\, to be called from IOM.}
  */
 PDMBOTHCBDECL(int) vgaMMIORead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, void *pv, unsigned cb)
 {
@@ -3418,7 +3418,7 @@ PDMBOTHCBDECL(int) vgaMMIORead(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhys
 
 /**
  * @callback_method_impl{FNIOMMMIOWRITE, Legacy VGA memory (0xa0000 - 0xbffff)
- *                      write hook, to be called from IOM.}
+ *                      write hook\, to be called from IOM.}
  */
 PDMBOTHCBDECL(int) vgaMMIOWrite(PPDMDEVINS pDevIns, void *pvUser, RTGCPHYS GCPhysAddr, void const *pv, unsigned cb)
 {
@@ -4286,8 +4286,8 @@ static void vgaInfoTextWorker(PVGASTATE pThis, PCDBGFINFOHLP pHlp,
 
 /**
  * @callback_method_impl{FNDBGFHANDLERDEV,
- *      Dumps VGA memory formatted as ASCII text, no attributes. Only looks at the
- *      first page.}
+ *      Dumps VGA memory formatted as ASCII text\, no attributes. Only looks at
+ *      the first page.}
  */
 static DECLCALLBACK(void) vgaInfoText(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
 {
diff --git a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
index 3cc07e3..5863e78 100644
--- a/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
@@ -314,9 +314,7 @@ static bool vbvaFetchCmd(VBVADATA *pVBVAData, VBVACMDHDR **ppHdr, uint32_t *pcbC
             /* The command does not cross buffer boundary. Return address in the buffer. */
             *ppHdr = (VBVACMDHDR *)pu8Src;
 
-            /* Advance data offset and sync with guest. */
-            pVBVAData->off32Data = (pVBVAData->off32Data + cbRecord) % pVBVAData->cbData;
-            pVBVAData->guest.pVBVA->off32Data = pVBVAData->off32Data;
+            /* The data offset will be updated in vbvaReleaseCmd. */
         }
         else
         {
@@ -352,17 +350,19 @@ static bool vbvaFetchCmd(VBVADATA *pVBVAData, VBVACMDHDR **ppHdr, uint32_t *pcbC
 static void vbvaReleaseCmd(VBVADATA *pVBVAData, VBVACMDHDR *pHdr, uint32_t cbCmd)
 {
     VBVAPARTIALRECORD *pPartialRecord = &pVBVAData->partialRecord;
-    uint8_t *au8RingBuffer = pVBVAData->guest.pu8Data;
+    const uint8_t *au8RingBuffer = pVBVAData->guest.pu8Data;
 
-    if (   (uint8_t *)pHdr >= au8RingBuffer
-        && (uint8_t *)pHdr < &au8RingBuffer[pVBVAData->cbData])
+    if (   (uintptr_t)pHdr >= (uintptr_t)au8RingBuffer
+        && (uintptr_t)pHdr < (uintptr_t)&au8RingBuffer[pVBVAData->cbData])
     {
         /* The pointer is inside ring buffer. Must be continuous chunk. */
-        Assert(pVBVAData->cbData - ((uint8_t *)pHdr - au8RingBuffer) >= cbCmd);
+        Assert(pVBVAData->cbData - (uint32_t)((uint8_t *)pHdr - au8RingBuffer) >= cbCmd);
 
-        /* Do nothing. */
+        /* Advance data offset and sync with guest. */
+        pVBVAData->off32Data = (pVBVAData->off32Data + cbCmd) % pVBVAData->cbData;
+        pVBVAData->guest.pVBVA->off32Data = pVBVAData->off32Data;
 
-        Assert (!pPartialRecord->pu8 && pPartialRecord->cb == 0);
+        Assert(!pPartialRecord->pu8 && pPartialRecord->cb == 0);
     }
     else
     {
@@ -2424,7 +2424,7 @@ static DECLCALLBACK(void) vbvaNotifyGuest (void *pvCallback)
 
 /** The guest submitted a command buffer. Verify the buffer size and invoke corresponding handler.
  *
- * @return VBox status.
+ * @return VBox status code.
  * @param pvHandler      The VBVA channel context.
  * @param u16ChannelInfo Command code.
  * @param pvBuffer       HGSMI buffer with command data.
diff --git a/src/VBox/Devices/Input/DevPS2.cpp b/src/VBox/Devices/Input/DevPS2.cpp
index 783759f..dec6d58 100644
--- a/src/VBox/Devices/Input/DevPS2.cpp
+++ b/src/VBox/Devices/Input/DevPS2.cpp
@@ -1498,7 +1498,7 @@ static DECLCALLBACK(int) kbdLoadDone(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 /**
  * Reset notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  */
 static DECLCALLBACK(void)  kbdReset(PPDMDEVINS pDevIns)
@@ -1531,7 +1531,7 @@ static DECLCALLBACK(void *)  kbdMouseQueryInterface(PPDMIBASE pInterface, const
 /* -=-=-=-=-=- Mouse: IMousePort  -=-=-=-=-=- */
 
 /**
- * @interface_method_impl{PDMIMOUSEPORT, pfnPutEvent}
+ * @interface_method_impl{PDMIMOUSEPORT,pfnPutEvent}
  */
 static DECLCALLBACK(int) kbdMousePutEvent(PPDMIMOUSEPORT pInterface, int32_t dx,
                                           int32_t dy, int32_t dz, int32_t dw,
@@ -1548,7 +1548,7 @@ static DECLCALLBACK(int) kbdMousePutEvent(PPDMIMOUSEPORT pInterface, int32_t dx,
 }
 
 /**
- * @interface_method_impl{PDMIMOUSEPORT, pfnPutEventAbs}
+ * @interface_method_impl{PDMIMOUSEPORT,pfnPutEventAbs}
  */
 static DECLCALLBACK(int) kbdMousePutEventAbs(PPDMIMOUSEPORT pInterface,
                                              uint32_t x, uint32_t y, int32_t dz,
@@ -1559,7 +1559,7 @@ static DECLCALLBACK(int) kbdMousePutEventAbs(PPDMIMOUSEPORT pInterface,
 }
 
 /**
- * @interface_method_impl{PDMIMOUSEPORT, pfnPutEventMultiTouch}
+ * @interface_method_impl{PDMIMOUSEPORT,pfnPutEventMultiTouch}
  */
 static DECLCALLBACK(int) kbdMousePutEventMultiTouch(PPDMIMOUSEPORT pInterface,
                                                     uint8_t cContacts,
diff --git a/src/VBox/Devices/Input/DrvKeyboardQueue.cpp b/src/VBox/Devices/Input/DrvKeyboardQueue.cpp
index a7d0fd0..a7d4729 100644
--- a/src/VBox/Devices/Input/DrvKeyboardQueue.cpp
+++ b/src/VBox/Devices/Input/DrvKeyboardQueue.cpp
@@ -330,7 +330,7 @@ static DECLCALLBACK(bool) drvKbdQueueConsumer(PPDMDRVINS pDrvIns, PPDMQUEUEITEMC
 /**
  * Power On notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The drive instance data.
  */
 static DECLCALLBACK(void) drvKbdQueuePowerOn(PPDMDRVINS pDrvIns)
@@ -343,7 +343,7 @@ static DECLCALLBACK(void) drvKbdQueuePowerOn(PPDMDRVINS pDrvIns)
 /**
  * Reset notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The drive instance data.
  */
 static DECLCALLBACK(void)  drvKbdQueueReset(PPDMDRVINS pDrvIns)
@@ -356,7 +356,7 @@ static DECLCALLBACK(void)  drvKbdQueueReset(PPDMDRVINS pDrvIns)
 /**
  * Suspend notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The drive instance data.
  */
 static DECLCALLBACK(void)  drvKbdQueueSuspend(PPDMDRVINS pDrvIns)
@@ -369,7 +369,7 @@ static DECLCALLBACK(void)  drvKbdQueueSuspend(PPDMDRVINS pDrvIns)
 /**
  * Resume notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The drive instance data.
  */
 static DECLCALLBACK(void)  drvKbdQueueResume(PPDMDRVINS pDrvIns)
diff --git a/src/VBox/Devices/Input/DrvMouseQueue.cpp b/src/VBox/Devices/Input/DrvMouseQueue.cpp
index f8e9c66..689864f 100644
--- a/src/VBox/Devices/Input/DrvMouseQueue.cpp
+++ b/src/VBox/Devices/Input/DrvMouseQueue.cpp
@@ -258,7 +258,7 @@ static DECLCALLBACK(bool) drvMouseQueueConsumer(PPDMDRVINS pDrvIns, PPDMQUEUEITE
 /**
  * Power On notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The drive instance data.
  */
 static DECLCALLBACK(void) drvMouseQueuePowerOn(PPDMDRVINS pDrvIns)
@@ -271,7 +271,7 @@ static DECLCALLBACK(void) drvMouseQueuePowerOn(PPDMDRVINS pDrvIns)
 /**
  * Reset notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The drive instance data.
  */
 static DECLCALLBACK(void)  drvMouseQueueReset(PPDMDRVINS pDrvIns)
@@ -284,7 +284,7 @@ static DECLCALLBACK(void)  drvMouseQueueReset(PPDMDRVINS pDrvIns)
 /**
  * Suspend notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The drive instance data.
  */
 static DECLCALLBACK(void)  drvMouseQueueSuspend(PPDMDRVINS pDrvIns)
@@ -297,7 +297,7 @@ static DECLCALLBACK(void)  drvMouseQueueSuspend(PPDMDRVINS pDrvIns)
 /**
  * Resume notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The drive instance data.
  */
 static DECLCALLBACK(void)  drvMouseQueueResume(PPDMDRVINS pDrvIns)
diff --git a/src/VBox/Devices/Input/PS2M.cpp b/src/VBox/Devices/Input/PS2M.cpp
index 2a06ffd..3345c8d 100644
--- a/src/VBox/Devices/Input/PS2M.cpp
+++ b/src/VBox/Devices/Input/PS2M.cpp
@@ -989,7 +989,7 @@ static int ps2mPutEventWorker(PPS2M pThis, int32_t dx, int32_t dy,
 /* -=-=-=-=-=- Mouse: IMousePort  -=-=-=-=-=- */
 
 /**
- * @interface_method_impl{PDMIMOUSEPORT, pfnPutEvent}
+ * @interface_method_impl{PDMIMOUSEPORT,pfnPutEvent}
  */
 static DECLCALLBACK(int) ps2mPutEvent(PPDMIMOUSEPORT pInterface, int32_t dx, int32_t dy,
                                       int32_t dz, int32_t dw, uint32_t fButtons)
@@ -1007,7 +1007,7 @@ static DECLCALLBACK(int) ps2mPutEvent(PPDMIMOUSEPORT pInterface, int32_t dx, int
 }
 
 /**
- * @interface_method_impl{PDMIMOUSEPORT, pfnPutEventAbs}
+ * @interface_method_impl{PDMIMOUSEPORT,pfnPutEventAbs}
  */
 static DECLCALLBACK(int) ps2mPutEventAbs(PPDMIMOUSEPORT pInterface, uint32_t x, uint32_t y,
                                          int32_t dz, int32_t dw, uint32_t fButtons)
@@ -1017,7 +1017,7 @@ static DECLCALLBACK(int) ps2mPutEventAbs(PPDMIMOUSEPORT pInterface, uint32_t x,
 }
 
 /**
- * @interface_method_impl{PDMIMOUSEPORT, pfnPutEventMultiTouch}
+ * @interface_method_impl{PDMIMOUSEPORT,pfnPutEventMultiTouch}
  */
 static DECLCALLBACK(int) ps2mPutEventMT(PPDMIMOUSEPORT pInterface, uint8_t cContacts,
                                         const uint64_t *pau64Contacts, uint32_t u32ScanTime)
diff --git a/src/VBox/Devices/Network/DevE1000.cpp b/src/VBox/Devices/Network/DevE1000.cpp
index 9388c4f..b5248e8 100644
--- a/src/VBox/Devices/Network/DevE1000.cpp
+++ b/src/VBox/Devices/Network/DevE1000.cpp
@@ -7311,7 +7311,7 @@ static DECLCALLBACK(void) e1kR3Relocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
  *
  * We need to free non-VM resources only.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  * @thread  EMT
  */
diff --git a/src/VBox/Devices/Network/DevINIP.cpp b/src/VBox/Devices/Network/DevINIP.cpp
index 26e05d9..a7fce41 100644
--- a/src/VBox/Devices/Network/DevINIP.cpp
+++ b/src/VBox/Devices/Network/DevINIP.cpp
@@ -574,7 +574,7 @@ static DECLCALLBACK(void *) devINIPQueryInterface(PPDMIBASE pInterface,
  * Most VM resources are freed by the VM. This callback is provided so that any non-VM
  * resources can be freed correctly.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  */
 static DECLCALLBACK(int) devINIPDestruct(PPDMDEVINS pDevIns)
diff --git a/src/VBox/Devices/Network/slirp/tcp_subr.c b/src/VBox/Devices/Network/slirp/tcp_subr.c
index 96d88e9..8851404 100644
--- a/src/VBox/Devices/Network/slirp/tcp_subr.c
+++ b/src/VBox/Devices/Network/slirp/tcp_subr.c
@@ -425,6 +425,22 @@ int tcp_fconnect(PNATState pData, struct socket *so)
             switch(RT_N2H_U32(so->so_faddr.s_addr) & ~pData->netmask)
             {
                 case CTL_DNS:
+                    /*
+                     * TCP DNS proxy.  We only support "forwarding" to
+                     * single server.  We don't have infrastructure in
+                     * place to re-try connections to other servers.
+                     */
+                    if (   pData->fUseDnsProxy
+                        && so->so_fport == RT_H2N_U16_C(53))
+                    {
+                        struct dns_entry *ns = TAILQ_LAST(&pData->pDnsList, dns_list_head);
+                        if (ns != NULL)
+                        {
+                            addr.sin_addr = ns->de_addr;
+                            break;
+                        }
+                    }
+                    /* FALLTHROUGH */
                 case CTL_ALIAS:
                 default:
                     addr.sin_addr = loopback_addr;
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
index a0a6c58..5adc7d9 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
@@ -983,7 +983,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xce0 class=DATA group=DGROUP
 
 section CONST2 progbits vstart=0xd90 align=1 ; size=0x3fa class=DATA group=DGROUP
 _bios_cvs_version_string:                    ; 0xf0d90 LB 0x12
-    db  'VirtualBox 5.0.8', 000h, 000h
+    db  'VirtualBox 5.0.10', 000h
 _bios_prefix_string:                         ; 0xf0da2 LB 0x8
     db  'BIOS: ', 000h, 000h
 _isotag:                                     ; 0xf0daa LB 0x6
@@ -16348,4 +16348,4 @@ dummy_iret:                                  ; 0xfff53 LB 0x9d
     db  'XM'
 cpu_reset:                                   ; 0xffff0 LB 0x10
     jmp far 0f000h:0e05bh                     ; ea 5b e0 00 f0
-    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 081h
+    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 058h
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
index 596c4f0..edc149c 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
@@ -1 +1 @@
-ff0f1df243d9a6de4dd592f50b428d95 *VBoxPcBios.rom
+9aa652a74769c1118ad5a74e4c98bf7f *VBoxPcBios.rom
diff --git a/src/VBox/Devices/PC/DevACPI.cpp b/src/VBox/Devices/PC/DevACPI.cpp
index 6c7deaf..f4025d9 100644
--- a/src/VBox/Devices/PC/DevACPI.cpp
+++ b/src/VBox/Devices/PC/DevACPI.cpp
@@ -2010,16 +2010,16 @@ static const SSMFIELD g_AcpiSavedStateFields7[] =
 /**
  * @callback_method_impl{FNSSMDEVSAVEEXEC}
  */
-static DECLCALLBACK(int) acpiR3SaveState(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle)
+static DECLCALLBACK(int) acpiR3SaveState(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 {
     ACPIState *pThis = PDMINS_2_DATA(pDevIns, ACPIState *);
-    return SSMR3PutStruct(pSSMHandle, pThis, &g_AcpiSavedStateFields7[0]);
+    return SSMR3PutStruct(pSSM, pThis, &g_AcpiSavedStateFields7[0]);
 }
 
 /**
  * @callback_method_impl{FNSSMDEVLOADEXEC}
  */
-static DECLCALLBACK(int) acpiR3LoadState(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle, uint32_t uVersion, uint32_t uPass)
+static DECLCALLBACK(int) acpiR3LoadState(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
     ACPIState *pThis = PDMINS_2_DATA(pDevIns, ACPIState *);
     Assert(uPass == SSM_PASS_FINAL); NOREF(uPass);
@@ -2035,16 +2035,16 @@ static DECLCALLBACK(int) acpiR3LoadState(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHand
     switch (uVersion)
     {
         case 4:
-            rc = SSMR3GetStruct(pSSMHandle, pThis, &g_AcpiSavedStateFields4[0]);
+            rc = SSMR3GetStruct(pSSM, pThis, &g_AcpiSavedStateFields4[0]);
             break;
         case 5:
-            rc = SSMR3GetStruct(pSSMHandle, pThis, &g_AcpiSavedStateFields5[0]);
+            rc = SSMR3GetStruct(pSSM, pThis, &g_AcpiSavedStateFields5[0]);
             break;
         case 6:
-            rc = SSMR3GetStruct(pSSMHandle, pThis, &g_AcpiSavedStateFields6[0]);
+            rc = SSMR3GetStruct(pSSM, pThis, &g_AcpiSavedStateFields6[0]);
             break;
         case 7:
-            rc = SSMR3GetStruct(pSSMHandle, pThis, &g_AcpiSavedStateFields7[0]);
+            rc = SSMR3GetStruct(pSSM, pThis, &g_AcpiSavedStateFields7[0]);
             break;
         default:
             rc = VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
@@ -2997,7 +2997,7 @@ static DECLCALLBACK(void) acpiR3Relocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta
 }
 
 /**
- * @interface_methid_impl{PDMDEVREG,pfnDestruct}
+ * @interface_method_impl{PDMDEVREG,pfnDestruct}
  */
 static DECLCALLBACK(int) acpiR3Destruct(PPDMDEVINS pDevIns)
 {
diff --git a/src/VBox/Devices/PC/DevDMA.cpp b/src/VBox/Devices/PC/DevDMA.cpp
index 6f74e18..4e38708 100644
--- a/src/VBox/Devices/PC/DevDMA.cpp
+++ b/src/VBox/Devices/PC/DevDMA.cpp
@@ -826,52 +826,52 @@ static void dmaIORegister(PPDMDEVINS pDevIns, bool fHighPage)
     }
 }
 
-static void dmaSaveController(PSSMHANDLE pSSMHandle, DMAControl *dc)
+static void dmaSaveController(PSSMHANDLE pSSM, DMAControl *dc)
 {
     int         chidx;
 
     /* Save controller state... */
-    SSMR3PutU8(pSSMHandle, dc->u8Command);
-    SSMR3PutU8(pSSMHandle, dc->u8Mask);
-    SSMR3PutU8(pSSMHandle, dc->fHiByte);
-    SSMR3PutU32(pSSMHandle, dc->is16bit);
-    SSMR3PutU8(pSSMHandle, dc->u8Status);
-    SSMR3PutU8(pSSMHandle, dc->u8Temp);
-    SSMR3PutU8(pSSMHandle, dc->u8ModeCtr);
-    SSMR3PutMem(pSSMHandle, &dc->au8Page, sizeof(dc->au8Page));
-    SSMR3PutMem(pSSMHandle, &dc->au8PageHi, sizeof(dc->au8PageHi));
+    SSMR3PutU8(pSSM, dc->u8Command);
+    SSMR3PutU8(pSSM, dc->u8Mask);
+    SSMR3PutU8(pSSM, dc->fHiByte);
+    SSMR3PutU32(pSSM, dc->is16bit);
+    SSMR3PutU8(pSSM, dc->u8Status);
+    SSMR3PutU8(pSSM, dc->u8Temp);
+    SSMR3PutU8(pSSM, dc->u8ModeCtr);
+    SSMR3PutMem(pSSM, &dc->au8Page, sizeof(dc->au8Page));
+    SSMR3PutMem(pSSM, &dc->au8PageHi, sizeof(dc->au8PageHi));
 
     /* ...and all four of its channels. */
     for (chidx = 0; chidx < 4; ++chidx)
     {
         DMAChannel  *ch = &dc->ChState[chidx];
 
-        SSMR3PutU16(pSSMHandle, ch->u16CurAddr);
-        SSMR3PutU16(pSSMHandle, ch->u16CurCount);
-        SSMR3PutU16(pSSMHandle, ch->u16BaseAddr);
-        SSMR3PutU16(pSSMHandle, ch->u16BaseCount);
-        SSMR3PutU8(pSSMHandle, ch->u8Mode);
+        SSMR3PutU16(pSSM, ch->u16CurAddr);
+        SSMR3PutU16(pSSM, ch->u16CurCount);
+        SSMR3PutU16(pSSM, ch->u16BaseAddr);
+        SSMR3PutU16(pSSM, ch->u16BaseCount);
+        SSMR3PutU8(pSSM, ch->u8Mode);
     }
 }
 
-static int dmaLoadController(PSSMHANDLE pSSMHandle, DMAControl *dc, int version)
+static int dmaLoadController(PSSMHANDLE pSSM, DMAControl *dc, int version)
 {
     uint8_t     u8val;
     uint32_t    u32val;
     int         chidx;
 
-    SSMR3GetU8(pSSMHandle, &dc->u8Command);
-    SSMR3GetU8(pSSMHandle, &dc->u8Mask);
-    SSMR3GetU8(pSSMHandle, &u8val);
+    SSMR3GetU8(pSSM, &dc->u8Command);
+    SSMR3GetU8(pSSM, &dc->u8Mask);
+    SSMR3GetU8(pSSM, &u8val);
     dc->fHiByte = !!u8val;
-    SSMR3GetU32(pSSMHandle, &dc->is16bit);
+    SSMR3GetU32(pSSM, &dc->is16bit);
     if (version > DMA_SAVESTATE_OLD)
     {
-        SSMR3GetU8(pSSMHandle, &dc->u8Status);
-        SSMR3GetU8(pSSMHandle, &dc->u8Temp);
-        SSMR3GetU8(pSSMHandle, &dc->u8ModeCtr);
-        SSMR3GetMem(pSSMHandle, &dc->au8Page, sizeof(dc->au8Page));
-        SSMR3GetMem(pSSMHandle, &dc->au8PageHi, sizeof(dc->au8PageHi));
+        SSMR3GetU8(pSSM, &dc->u8Status);
+        SSMR3GetU8(pSSM, &dc->u8Temp);
+        SSMR3GetU8(pSSM, &dc->u8ModeCtr);
+        SSMR3GetMem(pSSM, &dc->au8Page, sizeof(dc->au8Page));
+        SSMR3GetMem(pSSM, &dc->au8PageHi, sizeof(dc->au8PageHi));
     }
 
     for (chidx = 0; chidx < 4; ++chidx)
@@ -881,55 +881,55 @@ static int dmaLoadController(PSSMHANDLE pSSMHandle, DMAControl *dc, int version)
         if (version == DMA_SAVESTATE_OLD)
         {
             /* Convert from 17-bit to 16-bit format. */
-            SSMR3GetU32(pSSMHandle, &u32val);
+            SSMR3GetU32(pSSM, &u32val);
             ch->u16CurAddr = u32val >> dc->is16bit;
-            SSMR3GetU32(pSSMHandle, &u32val);
+            SSMR3GetU32(pSSM, &u32val);
             ch->u16CurCount = u32val >> dc->is16bit;
         }
         else
         {
-            SSMR3GetU16(pSSMHandle, &ch->u16CurAddr);
-            SSMR3GetU16(pSSMHandle, &ch->u16CurCount);
+            SSMR3GetU16(pSSM, &ch->u16CurAddr);
+            SSMR3GetU16(pSSM, &ch->u16CurCount);
         }
-        SSMR3GetU16(pSSMHandle, &ch->u16BaseAddr);
-        SSMR3GetU16(pSSMHandle, &ch->u16BaseCount);
-        SSMR3GetU8(pSSMHandle, &ch->u8Mode);
+        SSMR3GetU16(pSSM, &ch->u16BaseAddr);
+        SSMR3GetU16(pSSM, &ch->u16BaseCount);
+        SSMR3GetU8(pSSM, &ch->u8Mode);
         /* Convert from old save state. */
         if (version == DMA_SAVESTATE_OLD)
         {
             /* Remap page register contents. */
-            SSMR3GetU8(pSSMHandle, &u8val);
+            SSMR3GetU8(pSSM, &u8val);
             dc->au8Page[DMACX2PG(chidx)] = u8val;
-            SSMR3GetU8(pSSMHandle, &u8val);
+            SSMR3GetU8(pSSM, &u8val);
             dc->au8PageHi[DMACX2PG(chidx)] = u8val;
             /* Throw away dack, eop. */
-            SSMR3GetU8(pSSMHandle, &u8val);
-            SSMR3GetU8(pSSMHandle, &u8val);
+            SSMR3GetU8(pSSM, &u8val);
+            SSMR3GetU8(pSSM, &u8val);
         }
     }
     return 0;
 }
 
 /** @callback_method_impl{FNSSMDEVSAVEEXEC}  */
-static DECLCALLBACK(int) dmaSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle)
+static DECLCALLBACK(int) dmaSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 {
     DMAState *pThis = PDMINS_2_DATA(pDevIns, DMAState *);
 
-    dmaSaveController(pSSMHandle, &pThis->DMAC[0]);
-    dmaSaveController(pSSMHandle, &pThis->DMAC[1]);
+    dmaSaveController(pSSM, &pThis->DMAC[0]);
+    dmaSaveController(pSSM, &pThis->DMAC[1]);
     return VINF_SUCCESS;
 }
 
 /** @callback_method_impl{FNSSMDEVLOADEXEC}  */
-static DECLCALLBACK(int) dmaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle, uint32_t uVersion, uint32_t uPass)
+static DECLCALLBACK(int) dmaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
     DMAState *pThis = PDMINS_2_DATA(pDevIns, DMAState *);
 
     AssertMsgReturn(uVersion <= DMA_SAVESTATE_CURRENT, ("%d\n", uVersion), VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION);
     Assert(uPass == SSM_PASS_FINAL); NOREF(uPass);
 
-    dmaLoadController(pSSMHandle, &pThis->DMAC[0], uVersion);
-    return dmaLoadController(pSSMHandle, &pThis->DMAC[1], uVersion);
+    dmaLoadController(pSSM, &pThis->DMAC[0], uVersion);
+    return dmaLoadController(pSSM, &pThis->DMAC[1], uVersion);
 }
 
 /**
diff --git a/src/VBox/Devices/PC/DevPIC.cpp b/src/VBox/Devices/PC/DevPIC.cpp
index 13d6755..82f551f 100644
--- a/src/VBox/Devices/PC/DevPIC.cpp
+++ b/src/VBox/Devices/PC/DevPIC.cpp
@@ -766,7 +766,7 @@ PDMBOTHCBDECL(int) picIOPortElcrWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT
 #ifdef IN_RING3
 
 /**
- * @callback_method_impl{FNDBGFINFOHANDLERDEV}
+ * @callback_method_impl{FNDBGFHANDLERDEV}
  */
 static DECLCALLBACK(void) picInfo(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp, const char *pszArgs)
 {
diff --git a/src/VBox/Devices/PC/vbox-cpuhotplug.dsl b/src/VBox/Devices/PC/vbox-cpuhotplug.dsl
index 996a3d3..5032d7a 100644
--- a/src/VBox/Devices/PC/vbox-cpuhotplug.dsl
+++ b/src/VBox/Devices/PC/vbox-cpuhotplug.dsl
@@ -27,6 +27,18 @@ DefinitionBlock ("SSDT-cpuhotplug.aml", "SSDT", 1, "VBOX  ", "VBOXCPUT", 2)
         Return(LEqual(CPUL, 0x01))
     }
 
+    // Method to notify the VMM that a CPU is not
+    // in use anymore and can be safely removed.
+    // Using the extra method here because the CPUL
+    // register identifer clashes with the CPUL object defined
+    // below making iasl starting with version 20150930 fail.
+    //
+    // Think of CPLO as "CPU Lock Open"
+    Method(CPLO, 1)
+    {
+        Store(Arg0, CPUL)
+    }
+
     Scope (\_SB)
     {
 
@@ -73,7 +85,7 @@ DefinitionBlock ("SSDT-cpuhotplug.aml", "SSDT", 1, "VBOX  ", "VBOXCPUT", 2)
             }                                                              \
             Method(_EJ0, 1)                                                \
             {                                                              \
-                Store(id, CPUL) /* Unlock the CPU */                       \
+                CPLO(id) /* Unlock the CPU */                              \
                 Return                                                     \
             }                                                              \
         }                                                                  \
diff --git a/src/VBox/Devices/Parallel/DevParallel.cpp b/src/VBox/Devices/Parallel/DevParallel.cpp
index a510baf..39b10c4 100644
--- a/src/VBox/Devices/Parallel/DevParallel.cpp
+++ b/src/VBox/Devices/Parallel/DevParallel.cpp
@@ -300,7 +300,7 @@ static uint32_t parallel_ioport_read_ecp(void *opaque, uint32_t addr, int *pRC)
 
 #ifdef IN_RING3
 /**
- * @interface_methods_impl{PDMIHOSTPARALLELPORT,pfnNotifyInterrupt}
+ * @interface_method_impl{PDMIHOSTPARALLELPORT,pfnNotifyInterrupt}
  */
 static DECLCALLBACK(int) parallelR3NotifyInterrupt(PPDMIHOSTPARALLELPORT pInterface)
 {
diff --git a/src/VBox/Devices/Parallel/DrvHostParallel.cpp b/src/VBox/Devices/Parallel/DrvHostParallel.cpp
index f11d1f5..5d57a8a 100644
--- a/src/VBox/Devices/Parallel/DrvHostParallel.cpp
+++ b/src/VBox/Devices/Parallel/DrvHostParallel.cpp
@@ -588,7 +588,9 @@ static DECLCALLBACK(void *) drvHostParallelQueryInterface(PPDMIBASE pInterface,
 
 /* -=-=-=-=- IHostDeviceConnector -=-=-=-=- */
 
-/** @copydoc PDMICHARCONNECTOR::pfnWrite */
+/**
+ * @interface_method_impl{PDMIHOSTPARALLELCONNECTOR,pfnWrite}
+ */
 static DECLCALLBACK(int) drvHostParallelWrite(PPDMIHOSTPARALLELCONNECTOR pInterface, const void *pvBuf, size_t cbWrite, PDMPARALLELPORTMODE enmMode)
 {
     PPDMDRVINS          pDrvIns = PDMIBASE_2_PDMDRV(pInterface);
@@ -631,7 +633,7 @@ static DECLCALLBACK(int) drvHostParallelWrite(PPDMIHOSTPARALLELCONNECTOR pInterf
 }
 
 /**
- * @interface_method_impl{PDMIBASE,pfnRead}
+ * @interface_method_impl{PDMIHOSTPARALLELCONNECTOR,pfnRead}
  */
 static DECLCALLBACK(int) drvHostParallelRead(PPDMIHOSTPARALLELCONNECTOR pInterface, void *pvBuf, size_t cbRead, PDMPARALLELPORTMODE enmMode)
 {
@@ -674,6 +676,9 @@ static DECLCALLBACK(int) drvHostParallelRead(PPDMIHOSTPARALLELCONNECTOR pInterfa
     return rc;
 }
 
+/**
+ * @interface_method_impl{PDMIHOSTPARALLELCONNECTOR,pfnSetPortDirection}
+ */
 static DECLCALLBACK(int) drvHostParallelSetPortDirection(PPDMIHOSTPARALLELCONNECTOR pInterface, bool fForward)
 {
     PDRVHOSTPARALLEL    pThis   = RT_FROM_MEMBER(pInterface, DRVHOSTPARALLEL, CTX_SUFF(IHostParallelConnector));
@@ -700,7 +705,7 @@ static DECLCALLBACK(int) drvHostParallelSetPortDirection(PPDMIHOSTPARALLELCONNEC
 }
 
 /**
- * @interface_method_impl{PDMIBASE,pfnWriteControl}
+ * @interface_method_impl{PDMIHOSTPARALLELCONNECTOR,pfnWriteControl}
  */
 static DECLCALLBACK(int) drvHostParallelWriteControl(PPDMIHOSTPARALLELCONNECTOR pInterface, uint8_t fReg)
 {
@@ -728,7 +733,7 @@ static DECLCALLBACK(int) drvHostParallelWriteControl(PPDMIHOSTPARALLELCONNECTOR
 
 
 /**
- * @interface_method_impl{PDMIBASE,pfnReadControl}
+ * @interface_method_impl{PDMIHOSTPARALLELCONNECTOR,pfnReadControl}
  */
 static DECLCALLBACK(int) drvHostParallelReadControl(PPDMIHOSTPARALLELCONNECTOR pInterface, uint8_t *pfReg)
 {
@@ -760,7 +765,7 @@ static DECLCALLBACK(int) drvHostParallelReadControl(PPDMIHOSTPARALLELCONNECTOR p
 }
 
 /**
- * @interface_method_impl{PDMIBASE,pfnReadStatus}
+ * @interface_method_impl{PDMIHOSTPARALLELCONNECTOR,pfnReadStatus}
  */
 static DECLCALLBACK(int) drvHostParallelReadStatus(PPDMIHOSTPARALLELCONNECTOR pInterface, uint8_t *pfReg)
 {
diff --git a/src/VBox/Devices/Serial/DevSerial.cpp b/src/VBox/Devices/Serial/DevSerial.cpp
index 493011f..804dde2 100644
--- a/src/VBox/Devices/Serial/DevSerial.cpp
+++ b/src/VBox/Devices/Serial/DevSerial.cpp
@@ -821,7 +821,7 @@ static DECLCALLBACK(int) serialNotifyBreak(PPDMICHARPORT pInterface)
 /* -=-=-=-=-=-=-=-=- Timer callbacks -=-=-=-=-=-=-=-=- */
 
 /**
- * @callback_method_tmpl{FNTMTIMERDEV, Fifo timer function.}
+ * @callback_method_impl{FNTMTIMERDEV, Fifo timer function.}
  */
 static DECLCALLBACK(void) serialFifoTimer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)
 {
@@ -835,7 +835,7 @@ static DECLCALLBACK(void) serialFifoTimer(PPDMDEVINS pDevIns, PTMTIMER pTimer, v
 }
 
 /**
- * @callback_method_tmpl{FNTMTIMERDEV, Transmit timer function.}
+ * @callback_method_impl{FNTMTIMERDEV, Transmit timer function.}
  *
  * Just retry to transmit a character.
  */
@@ -899,7 +899,7 @@ PDMBOTHCBDECL(int) serialIOPortRead(PPDMDEVINS pDevIns, void *pvUser, RTIOPORT P
 /* -=-=-=-=-=-=-=-=- Saved State -=-=-=-=-=-=-=-=- */
 
 /**
- * @callback_method_tmpl{FNSSMDEVLIVEEXEC}
+ * @callback_method_impl{FNSSMDEVLIVEEXEC}
  */
 static DECLCALLBACK(int) serialLiveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uPass)
 {
@@ -911,7 +911,7 @@ static DECLCALLBACK(int) serialLiveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uin
 
 
 /**
- * @callback_method_tmpl{FNSSMDEVSAVEEXEC}
+ * @callback_method_impl{FNSSMDEVSAVEEXEC}
  */
 static DECLCALLBACK(int) serialSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 {
@@ -953,7 +953,7 @@ static DECLCALLBACK(int) serialSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 
 
 /**
- * @callback_method_tmpl{FNSSMDEVLOADEXEC}
+ * @callback_method_impl{FNSSMDEVLOADEXEC}
  */
 static DECLCALLBACK(int) serialLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
@@ -1074,7 +1074,7 @@ static DECLCALLBACK(int) serialIOPortRegionMap(PPCIDEVICE pPciDev, int iRegion,
 /* -=-=-=-=-=-=-=-=- PDMIBASE on LUN#1 -=-=-=-=-=-=-=-=- */
 
 /**
- * @interface_method_impl{PDMIBASE, pfnQueryInterface}
+ * @interface_method_impl{PDMIBASE,pfnQueryInterface}
  */
 static DECLCALLBACK(void *) serialQueryInterface(PPDMIBASE pInterface, const char *pszIID)
 {
@@ -1088,7 +1088,7 @@ static DECLCALLBACK(void *) serialQueryInterface(PPDMIBASE pInterface, const cha
 /* -=-=-=-=-=-=-=-=- PDMDEVREG -=-=-=-=-=-=-=-=- */
 
 /**
- * @interface_method_impl{PDMDEVREG, pfnRelocate}
+ * @interface_method_impl{PDMDEVREG,pfnRelocate}
  */
 static DECLCALLBACK(void) serialRelocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta)
 {
@@ -1099,7 +1099,7 @@ static DECLCALLBACK(void) serialRelocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta
 
 
 /**
- * @interface_method_impl{PDMDEVREG, pfnReset}
+ * @interface_method_impl{PDMDEVREG,pfnReset}
  */
 static DECLCALLBACK(void) serialReset(PPDMDEVINS pDevIns)
 {
@@ -1134,7 +1134,7 @@ static DECLCALLBACK(void) serialReset(PPDMDEVINS pDevIns)
 
 
 /**
- * @interface_method_impl{PDMDEVREG, pfnDestruct}
+ * @interface_method_impl{PDMDEVREG,pfnDestruct}
  */
 static DECLCALLBACK(int) serialDestruct(PPDMDEVINS pDevIns)
 {
@@ -1150,7 +1150,7 @@ static DECLCALLBACK(int) serialDestruct(PPDMDEVINS pDevIns)
 
 
 /**
- * @interface_method_impl{PDMDEVREG, pfnConstruct}
+ * @interface_method_impl{PDMDEVREG,pfnConstruct}
  */
 static DECLCALLBACK(int) serialConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNODE pCfg)
 {
diff --git a/src/VBox/Devices/Storage/DevAHCI.cpp b/src/VBox/Devices/Storage/DevAHCI.cpp
index d899234..88d2932 100644
--- a/src/VBox/Devices/Storage/DevAHCI.cpp
+++ b/src/VBox/Devices/Storage/DevAHCI.cpp
@@ -232,7 +232,7 @@ typedef struct AHCIREQ *PAHCIREQ;
 /**
  * Data processing callback
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pAhciReq    The task state.
  * @param   ppvProc     Where to store the pointer to the buffer holding the processed data on success.
  *                      Must be freed with RTMemFree().
@@ -7132,7 +7132,7 @@ static bool ahciR3AllAsyncIOIsFinished(PPDMDEVINS pDevIns)
 /* -=-=-=-=- Saved State -=-=-=-=- */
 
 /**
- * @copydoc FNDEVSSMSAVEPREP
+ * @callback_method_impl{FNSSMDEVSAVEPREP}
  */
 static DECLCALLBACK(int) ahciR3SavePrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 {
@@ -7141,7 +7141,7 @@ static DECLCALLBACK(int) ahciR3SavePrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 }
 
 /**
- * @copydoc FNDEVSSMLOADPREP
+ * @callback_method_impl{FNSSMDEVLOADPREP}
  */
 static DECLCALLBACK(int) ahciR3LoadPrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 {
@@ -7150,7 +7150,7 @@ static DECLCALLBACK(int) ahciR3LoadPrep(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 }
 
 /**
- * @copydoc FNDEVSSMLIVEEXEC
+ * @callback_method_impl{FNSSMDEVLIVEEXEC}
  */
 static DECLCALLBACK(int) ahciR3LiveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uPass)
 {
@@ -7180,7 +7180,7 @@ static DECLCALLBACK(int) ahciR3LiveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uin
 }
 
 /**
- * @copydoc FNDEVSSMSAVEEXEC
+ * @callback_method_impl{FNSSMDEVSAVEEXEC}
  */
 static DECLCALLBACK(int) ahciR3SaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
 {
@@ -7318,13 +7318,7 @@ static int ahciR3LoadLegacyEmulationState(PSSMHANDLE pSSM)
 }
 
 /**
- * Loads a saved AHCI device state.
- *
- * @returns VBox status code.
- * @param   pDevIns     The device instance.
- * @param   pSSM  The handle to the saved state.
- * @param   uVersion  The data unit version number.
- * @param   uPass           The data pass.
+ * @callback_method_impl{FNSSMDEVLOADEXEC}
  */
 static DECLCALLBACK(int) ahciR3LoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
diff --git a/src/VBox/Devices/Storage/DevATA.cpp b/src/VBox/Devices/Storage/DevATA.cpp
index 4469284..8f559cb 100644
--- a/src/VBox/Devices/Storage/DevATA.cpp
+++ b/src/VBox/Devices/Storage/DevATA.cpp
@@ -3825,7 +3825,7 @@ static void ataR3MediumInserted(ATADevState *s)
 
 
 /**
- * @interface_method_impl{PDMIMOUNTNOTIFY, pfnMountNotify}
+ * @interface_method_impl{PDMIMOUNTNOTIFY,pfnMountNotify}
  */
 static DECLCALLBACK(void) ataR3MountNotify(PPDMIMOUNTNOTIFY pInterface)
 {
@@ -3851,7 +3851,7 @@ static DECLCALLBACK(void) ataR3MountNotify(PPDMIMOUNTNOTIFY pInterface)
 }
 
 /**
- * @interface_method_impl{PDMIMOUNTNOTIFY, pfnUnmountNotify}
+ * @interface_method_impl{PDMIMOUNTNOTIFY,pfnUnmountNotify}
  */
 static DECLCALLBACK(void) ataR3UnmountNotify(PPDMIMOUNTNOTIFY pInterface)
 {
@@ -6604,7 +6604,7 @@ static DECLCALLBACK(int)  ataR3Attach(PPDMDEVINS pDevIns, unsigned iLUN, uint32_
 /**
  * Resume notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  */
 static DECLCALLBACK(void) ataR3Resume(PPDMDEVINS pDevIns)
@@ -7036,7 +7036,7 @@ static void ataR3SuspendOrPowerOff(PPDMDEVINS pDevIns)
 /**
  * Power Off notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  */
 static DECLCALLBACK(void) ataR3PowerOff(PPDMDEVINS pDevIns)
@@ -7049,7 +7049,7 @@ static DECLCALLBACK(void) ataR3PowerOff(PPDMDEVINS pDevIns)
 /**
  * Suspend notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  */
 static DECLCALLBACK(void) ataR3Suspend(PPDMDEVINS pDevIns)
@@ -7086,7 +7086,7 @@ static DECLCALLBACK(bool) ataR3IsAsyncResetDone(PPDMDEVINS pDevIns)
 /**
  * Common reset worker for ataR3Reset and ataR3Construct.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  * @param   fConstruct  Indicates who is calling.
  */
diff --git a/src/VBox/Devices/Storage/DrvBlock.cpp b/src/VBox/Devices/Storage/DrvBlock.cpp
index 9f0af1e..307f9a0 100644
--- a/src/VBox/Devices/Storage/DrvBlock.cpp
+++ b/src/VBox/Devices/Storage/DrvBlock.cpp
@@ -817,7 +817,9 @@ static DECLCALLBACK(void *)  drvblockQueryInterface(PPDMIBASE pInterface, const
 
 /* -=-=-=-=- driver interface -=-=-=-=- */
 
-/** @copydoc FNPDMDRVDETACH. */
+/**
+ * @callback_method_impl{FNPDMDRVDETACH}
+ */
 static DECLCALLBACK(void)  drvblockDetach(PPDMDRVINS pDrvIns, uint32_t fFlags)
 {
     PDRVBLOCK pThis = PDMINS_2_DATA(pDrvIns, PDRVBLOCK);
@@ -830,7 +832,7 @@ static DECLCALLBACK(void)  drvblockDetach(PPDMDRVINS pDrvIns, uint32_t fFlags)
 /**
  * Reset notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The driver instance data.
  */
 static DECLCALLBACK(void)  drvblockReset(PPDMDRVINS pDrvIns)
diff --git a/src/VBox/Devices/Storage/DrvSCSI.cpp b/src/VBox/Devices/Storage/DrvSCSI.cpp
index 690fc65..4aa5802 100644
--- a/src/VBox/Devices/Storage/DrvSCSI.cpp
+++ b/src/VBox/Devices/Storage/DrvSCSI.cpp
@@ -618,7 +618,7 @@ static void drvscsiDumpScsiRequest(PPDMSCSIREQUEST pRequest)
 }
 #endif
 
-/** @copydoc PDMISCSICONNECTOR::pfnSCSIRequestSend. */
+/** @interface_method_impl{PDMISCSICONNECTOR,pfnSCSIRequestSend} */
 static DECLCALLBACK(int) drvscsiRequestSend(PPDMISCSICONNECTOR pInterface, PPDMSCSIREQUEST pSCSIRequest)
 {
     int rc;
@@ -648,7 +648,7 @@ static DECLCALLBACK(int) drvscsiRequestSend(PPDMISCSICONNECTOR pInterface, PPDMS
     return rc;
 }
 
-/** @copydoc PDMISCSICONNECTOR::pfnQueryLUNType. */
+/** @interface_method_impl{PDMISCSICONNECTOR,pfnQueryLUNType} */
 static DECLCALLBACK(int) drvscsiQueryLUNType(PPDMISCSICONNECTOR pInterface, uint32_t iLun, PPDMSCSILUNTYPE pLunType)
 {
     int rc;
diff --git a/src/VBox/Devices/Storage/DrvVD.cpp b/src/VBox/Devices/Storage/DrvVD.cpp
index 98e4e61..600f7fa 100644
--- a/src/VBox/Devices/Storage/DrvVD.cpp
+++ b/src/VBox/Devices/Storage/DrvVD.cpp
@@ -755,7 +755,7 @@ typedef struct INIPSOCKET
 
 static DECLCALLBACK(int) drvvdINIPFlush(VDSOCKET Sock);
 
-/** @copydoc VDINTERFACETCPNET::pfnSocketCreate */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSocketCreate} */
 static DECLCALLBACK(int) drvvdINIPSocketCreate(uint32_t fFlags, PVDSOCKET pSock)
 {
     PINIPSOCKET pSocketInt = NULL;
@@ -778,7 +778,7 @@ static DECLCALLBACK(int) drvvdINIPSocketCreate(uint32_t fFlags, PVDSOCKET pSock)
     return VERR_NO_MEMORY;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSocketCreate */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSocketCreate} */
 static DECLCALLBACK(int) drvvdINIPSocketDestroy(VDSOCKET Sock)
 {
     PINIPSOCKET pSocketInt = (PINIPSOCKET)Sock;
@@ -787,7 +787,7 @@ static DECLCALLBACK(int) drvvdINIPSocketDestroy(VDSOCKET Sock)
     return VINF_SUCCESS;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnClientConnect */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnClientConnect} */
 static DECLCALLBACK(int) drvvdINIPClientConnect(VDSOCKET Sock, const char *pszAddress, uint32_t uPort,
                                                 RTMSINTERVAL cMillies)
 {
@@ -860,7 +860,7 @@ static DECLCALLBACK(int) drvvdINIPClientConnect(VDSOCKET Sock, const char *pszAd
     return rc;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnClientClose */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnClientClose} */
 static DECLCALLBACK(int) drvvdINIPClientClose(VDSOCKET Sock)
 {
     PINIPSOCKET pSocketInt = (PINIPSOCKET)Sock;
@@ -870,7 +870,7 @@ static DECLCALLBACK(int) drvvdINIPClientClose(VDSOCKET Sock)
     return VINF_SUCCESS; /** @todo real solution needed */
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnIsClientConnected */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnIsClientConnected} */
 static DECLCALLBACK(bool) drvvdINIPIsClientConnected(VDSOCKET Sock)
 {
     PINIPSOCKET pSocketInt = (PINIPSOCKET)Sock;
@@ -878,7 +878,7 @@ static DECLCALLBACK(bool) drvvdINIPIsClientConnected(VDSOCKET Sock)
     return pSocketInt->hSock != INT32_MAX;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSelectOne */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSelectOne} */
 static DECLCALLBACK(int) drvvdINIPSelectOne(VDSOCKET Sock, RTMSINTERVAL cMillies)
 {
     PINIPSOCKET pSocketInt = (PINIPSOCKET)Sock;
@@ -904,7 +904,7 @@ static DECLCALLBACK(int) drvvdINIPSelectOne(VDSOCKET Sock, RTMSINTERVAL cMillies
     return VERR_NET_CONNECTION_REFUSED; /** @todo real solution needed */
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnRead */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnRead} */
 static DECLCALLBACK(int) drvvdINIPRead(VDSOCKET Sock, void *pvBuffer, size_t cbBuffer, size_t *pcbRead)
 {
     PINIPSOCKET pSocketInt = (PINIPSOCKET)Sock;
@@ -952,7 +952,7 @@ static DECLCALLBACK(int) drvvdINIPRead(VDSOCKET Sock, void *pvBuffer, size_t cbB
     return VINF_SUCCESS;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnWrite */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnWrite} */
 static DECLCALLBACK(int) drvvdINIPWrite(VDSOCKET Sock, const void *pvBuffer, size_t cbBuffer)
 {
     PINIPSOCKET pSocketInt = (PINIPSOCKET)Sock;
@@ -976,7 +976,7 @@ static DECLCALLBACK(int) drvvdINIPWrite(VDSOCKET Sock, const void *pvBuffer, siz
     return VINF_SUCCESS;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSgWrite */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSgWrite} */
 static DECLCALLBACK(int) drvvdINIPSgWrite(VDSOCKET Sock, PCRTSGBUF pSgBuf)
 {
     int rc = VINF_SUCCESS;
@@ -996,7 +996,7 @@ static DECLCALLBACK(int) drvvdINIPSgWrite(VDSOCKET Sock, PCRTSGBUF pSgBuf)
     return rc;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnFlush */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnFlush} */
 static DECLCALLBACK(int) drvvdINIPFlush(VDSOCKET Sock)
 {
     PINIPSOCKET pSocketInt = (PINIPSOCKET)Sock;
@@ -1010,7 +1010,7 @@ static DECLCALLBACK(int) drvvdINIPFlush(VDSOCKET Sock)
     return VINF_SUCCESS;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSetSendCoalescing */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSetSendCoalescing} */
 static DECLCALLBACK(int) drvvdINIPSetSendCoalescing(VDSOCKET Sock, bool fEnable)
 {
     PINIPSOCKET pSocketInt = (PINIPSOCKET)Sock;
@@ -1021,7 +1021,7 @@ static DECLCALLBACK(int) drvvdINIPSetSendCoalescing(VDSOCKET Sock, bool fEnable)
     return VINF_SUCCESS;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnGetLocalAddress */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnGetLocalAddress} */
 static DECLCALLBACK(int) drvvdINIPGetLocalAddress(VDSOCKET Sock, PRTNETADDR pAddr)
 {
     PINIPSOCKET pSocketInt = (PINIPSOCKET)Sock;
@@ -1058,7 +1058,7 @@ static DECLCALLBACK(int) drvvdINIPGetLocalAddress(VDSOCKET Sock, PRTNETADDR pAdd
     return VERR_NET_OPERATION_NOT_SUPPORTED;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnGetPeerAddress */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnGetPeerAddress} */
 static DECLCALLBACK(int) drvvdINIPGetPeerAddress(VDSOCKET Sock, PRTNETADDR pAddr)
 {
     PINIPSOCKET pSocketInt = (PINIPSOCKET)Sock;
@@ -1095,14 +1095,14 @@ static DECLCALLBACK(int) drvvdINIPGetPeerAddress(VDSOCKET Sock, PRTNETADDR pAddr
     return VERR_NET_OPERATION_NOT_SUPPORTED;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSelectOneEx */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSelectOneEx} */
 static DECLCALLBACK(int) drvvdINIPSelectOneEx(VDSOCKET Sock, uint32_t fEvents, uint32_t *pfEvents, RTMSINTERVAL cMillies)
 {
     AssertMsgFailed(("Not supported!\n"));
     return VERR_NOT_SUPPORTED;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnPoke */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnPoke} */
 static DECLCALLBACK(int) drvvdINIPPoke(VDSOCKET Sock)
 {
     AssertMsgFailed(("Not supported!\n"));
@@ -1142,7 +1142,7 @@ typedef struct VDSOCKETINT
 /** Pollset id of the pipe. */
 #define VDSOCKET_POLL_ID_PIPE   1
 
-/** @copydoc VDINTERFACETCPNET::pfnSocketCreate */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSocketCreate} */
 static DECLCALLBACK(int) drvvdTcpSocketCreate(uint32_t fFlags, PVDSOCKET pSock)
 {
     int rc = VINF_SUCCESS;
@@ -1199,7 +1199,7 @@ static DECLCALLBACK(int) drvvdTcpSocketCreate(uint32_t fFlags, PVDSOCKET pSock)
     return rc;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSocketDestroy */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSocketDestroy} */
 static DECLCALLBACK(int) drvvdTcpSocketDestroy(VDSOCKET Sock)
 {
     int rc = VINF_SUCCESS;
@@ -1231,7 +1231,7 @@ static DECLCALLBACK(int) drvvdTcpSocketDestroy(VDSOCKET Sock)
     return rc;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnClientConnect */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnClientConnect} */
 static DECLCALLBACK(int) drvvdTcpClientConnect(VDSOCKET Sock, const char *pszAddress, uint32_t uPort,
                                                RTMSINTERVAL cMillies)
 {
@@ -1259,7 +1259,7 @@ static DECLCALLBACK(int) drvvdTcpClientConnect(VDSOCKET Sock, const char *pszAdd
     return rc;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnClientClose */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnClientClose} */
 static DECLCALLBACK(int) drvvdTcpClientClose(VDSOCKET Sock)
 {
     int rc = VINF_SUCCESS;
@@ -1277,7 +1277,7 @@ static DECLCALLBACK(int) drvvdTcpClientClose(VDSOCKET Sock)
     return rc;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnIsClientConnected */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnIsClientConnected} */
 static DECLCALLBACK(bool) drvvdTcpIsClientConnected(VDSOCKET Sock)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1285,7 +1285,7 @@ static DECLCALLBACK(bool) drvvdTcpIsClientConnected(VDSOCKET Sock)
     return pSockInt->hSocket != NIL_RTSOCKET;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSelectOne */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSelectOne} */
 static DECLCALLBACK(int) drvvdTcpSelectOne(VDSOCKET Sock, RTMSINTERVAL cMillies)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1293,7 +1293,7 @@ static DECLCALLBACK(int) drvvdTcpSelectOne(VDSOCKET Sock, RTMSINTERVAL cMillies)
     return RTTcpSelectOne(pSockInt->hSocket, cMillies);
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnRead */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnRead} */
 static DECLCALLBACK(int) drvvdTcpRead(VDSOCKET Sock, void *pvBuffer, size_t cbBuffer, size_t *pcbRead)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1301,7 +1301,7 @@ static DECLCALLBACK(int) drvvdTcpRead(VDSOCKET Sock, void *pvBuffer, size_t cbBu
     return RTTcpRead(pSockInt->hSocket, pvBuffer, cbBuffer, pcbRead);
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnWrite */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnWrite} */
 static DECLCALLBACK(int) drvvdTcpWrite(VDSOCKET Sock, const void *pvBuffer, size_t cbBuffer)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1309,7 +1309,7 @@ static DECLCALLBACK(int) drvvdTcpWrite(VDSOCKET Sock, const void *pvBuffer, size
     return RTTcpWrite(pSockInt->hSocket, pvBuffer, cbBuffer);
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSgWrite */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSgWrite} */
 static DECLCALLBACK(int) drvvdTcpSgWrite(VDSOCKET Sock, PCRTSGBUF pSgBuf)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1317,7 +1317,7 @@ static DECLCALLBACK(int) drvvdTcpSgWrite(VDSOCKET Sock, PCRTSGBUF pSgBuf)
     return RTTcpSgWrite(pSockInt->hSocket, pSgBuf);
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnReadNB */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnReadNB} */
 static DECLCALLBACK(int) drvvdTcpReadNB(VDSOCKET Sock, void *pvBuffer, size_t cbBuffer, size_t *pcbRead)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1325,7 +1325,7 @@ static DECLCALLBACK(int) drvvdTcpReadNB(VDSOCKET Sock, void *pvBuffer, size_t cb
     return RTTcpReadNB(pSockInt->hSocket, pvBuffer, cbBuffer, pcbRead);
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnWriteNB */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnWriteNB} */
 static DECLCALLBACK(int) drvvdTcpWriteNB(VDSOCKET Sock, const void *pvBuffer, size_t cbBuffer, size_t *pcbWritten)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1333,7 +1333,7 @@ static DECLCALLBACK(int) drvvdTcpWriteNB(VDSOCKET Sock, const void *pvBuffer, si
     return RTTcpWriteNB(pSockInt->hSocket, pvBuffer, cbBuffer, pcbWritten);
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSgWriteNB */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSgWriteNB} */
 static DECLCALLBACK(int) drvvdTcpSgWriteNB(VDSOCKET Sock, PRTSGBUF pSgBuf, size_t *pcbWritten)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1341,7 +1341,7 @@ static DECLCALLBACK(int) drvvdTcpSgWriteNB(VDSOCKET Sock, PRTSGBUF pSgBuf, size_
     return RTTcpSgWriteNB(pSockInt->hSocket, pSgBuf, pcbWritten);
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnFlush */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnFlush} */
 static DECLCALLBACK(int) drvvdTcpFlush(VDSOCKET Sock)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1349,7 +1349,7 @@ static DECLCALLBACK(int) drvvdTcpFlush(VDSOCKET Sock)
     return RTTcpFlush(pSockInt->hSocket);
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSetSendCoalescing */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSetSendCoalescing} */
 static DECLCALLBACK(int) drvvdTcpSetSendCoalescing(VDSOCKET Sock, bool fEnable)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1357,7 +1357,7 @@ static DECLCALLBACK(int) drvvdTcpSetSendCoalescing(VDSOCKET Sock, bool fEnable)
     return RTTcpSetSendCoalescing(pSockInt->hSocket, fEnable);
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnGetLocalAddress */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnGetLocalAddress} */
 static DECLCALLBACK(int) drvvdTcpGetLocalAddress(VDSOCKET Sock, PRTNETADDR pAddr)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1365,7 +1365,7 @@ static DECLCALLBACK(int) drvvdTcpGetLocalAddress(VDSOCKET Sock, PRTNETADDR pAddr
     return RTTcpGetLocalAddress(pSockInt->hSocket, pAddr);
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnGetPeerAddress */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnGetPeerAddress} */
 static DECLCALLBACK(int) drvvdTcpGetPeerAddress(VDSOCKET Sock, PRTNETADDR pAddr)
 {
     PVDSOCKETINT pSockInt = (PVDSOCKETINT)Sock;
@@ -1447,7 +1447,7 @@ static DECLCALLBACK(int) drvvdTcpSelectOneExPoll(VDSOCKET Sock, uint32_t fEvents
     return rc;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnSelectOneEx */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnSelectOneEx} */
 static DECLCALLBACK(int) drvvdTcpSelectOneExNoPoll(VDSOCKET Sock, uint32_t fEvents,
                                                    uint32_t *pfEvents, RTMSINTERVAL cMillies)
 {
@@ -1587,7 +1587,7 @@ static DECLCALLBACK(int) drvvdTcpSelectOneExNoPoll(VDSOCKET Sock, uint32_t fEven
     return rc;
 }
 
-/** @copydoc VDINTERFACETCPNET::pfnPoke */
+/** @interface_method_impl{VDINTERFACETCPNET,pfnPoke} */
 static DECLCALLBACK(int) drvvdTcpPoke(VDSOCKET Sock)
 {
     int rc = VINF_SUCCESS;
@@ -1633,7 +1633,7 @@ static int drvvdKeyCheckPrereqs(PVBOXDISK pThis)
 *   Media interface methods                                                                                                      *
 *********************************************************************************************************************************/
 
-/** @copydoc PDMIMEDIA::pfnRead */
+/** @interface_method_impl{PDMIMEDIA,pfnRead} */
 static DECLCALLBACK(int) drvvdRead(PPDMIMEDIA pInterface,
                                    uint64_t off, void *pvBuf, size_t cbRead)
 {
@@ -1687,7 +1687,7 @@ static DECLCALLBACK(int) drvvdRead(PPDMIMEDIA pInterface,
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnRead */
+/** @interface_method_impl{PDMIMEDIA,pfnRead} */
 static DECLCALLBACK(int) drvvdReadPcBios(PPDMIMEDIA pInterface,
                                          uint64_t off, void *pvBuf, size_t cbRead)
 {
@@ -1742,7 +1742,7 @@ static DECLCALLBACK(int) drvvdReadPcBios(PPDMIMEDIA pInterface,
 }
 
 
-/** @copydoc PDMIMEDIA::pfnWrite */
+/** @interface_method_impl{PDMIMEDIA,pfnWrite} */
 static DECLCALLBACK(int) drvvdWrite(PPDMIMEDIA pInterface,
                                     uint64_t off, const void *pvBuf,
                                     size_t cbWrite)
@@ -1768,7 +1768,7 @@ static DECLCALLBACK(int) drvvdWrite(PPDMIMEDIA pInterface,
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnFlush */
+/** @interface_method_impl{PDMIMEDIA,pfnFlush} */
 static DECLCALLBACK(int) drvvdFlush(PPDMIMEDIA pInterface)
 {
     LogFlowFunc(("\n"));
@@ -1778,7 +1778,7 @@ static DECLCALLBACK(int) drvvdFlush(PPDMIMEDIA pInterface)
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnMerge */
+/** @interface_method_impl{PDMIMEDIA,pfnMerge} */
 static DECLCALLBACK(int) drvvdMerge(PPDMIMEDIA pInterface,
                                     PFNSIMPLEPROGRESS pfnProgress,
                                     void *pvUser)
@@ -1813,7 +1813,7 @@ static DECLCALLBACK(int) drvvdMerge(PPDMIMEDIA pInterface,
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnSetKey */
+/** @interface_method_impl{PDMIMEDIA,pfnSetSecKeyIf} */
 static DECLCALLBACK(int) drvvdSetSecKeyIf(PPDMIMEDIA pInterface, PPDMISECKEY pIfSecKey, PPDMISECKEYHLP pIfSecKeyHlp)
 {
     LogFlowFunc(("\n"));
@@ -1862,7 +1862,7 @@ static DECLCALLBACK(int) drvvdSetSecKeyIf(PPDMIMEDIA pInterface, PPDMISECKEY pIf
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnGetSize */
+/** @interface_method_impl{PDMIMEDIA,pfnGetSize} */
 static DECLCALLBACK(uint64_t) drvvdGetSize(PPDMIMEDIA pInterface)
 {
     LogFlowFunc(("\n"));
@@ -1872,7 +1872,7 @@ static DECLCALLBACK(uint64_t) drvvdGetSize(PPDMIMEDIA pInterface)
     return cb;
 }
 
-/** @copydoc PDMIMEDIA::pfnGetSectorSize */
+/** @interface_method_impl{PDMIMEDIA,pfnGetSectorSize} */
 static DECLCALLBACK(uint32_t) drvvdGetSectorSize(PPDMIMEDIA pInterface)
 {
     LogFlowFunc(("\n"));
@@ -1882,7 +1882,7 @@ static DECLCALLBACK(uint32_t) drvvdGetSectorSize(PPDMIMEDIA pInterface)
     return cb;
 }
 
-/** @copydoc PDMIMEDIA::pfnIsReadOnly */
+/** @interface_method_impl{PDMIMEDIA,pfnIsReadOnly} */
 static DECLCALLBACK(bool) drvvdIsReadOnly(PPDMIMEDIA pInterface)
 {
     LogFlowFunc(("\n"));
@@ -1892,7 +1892,7 @@ static DECLCALLBACK(bool) drvvdIsReadOnly(PPDMIMEDIA pInterface)
     return f;
 }
 
-/** @copydoc PDMIMEDIA::pfnBiosGetPCHSGeometry */
+/** @interface_method_impl{PDMIMEDIA,pfnBiosGetPCHSGeometry} */
 static DECLCALLBACK(int) drvvdBiosGetPCHSGeometry(PPDMIMEDIA pInterface,
                                                   PPDMMEDIAGEOMETRY pPCHSGeometry)
 {
@@ -1916,7 +1916,7 @@ static DECLCALLBACK(int) drvvdBiosGetPCHSGeometry(PPDMIMEDIA pInterface,
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnBiosSetPCHSGeometry */
+/** @interface_method_impl{PDMIMEDIA,pfnBiosSetPCHSGeometry} */
 static DECLCALLBACK(int) drvvdBiosSetPCHSGeometry(PPDMIMEDIA pInterface,
                                                   PCPDMMEDIAGEOMETRY pPCHSGeometry)
 {
@@ -1934,7 +1934,7 @@ static DECLCALLBACK(int) drvvdBiosSetPCHSGeometry(PPDMIMEDIA pInterface,
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnBiosGetLCHSGeometry */
+/** @interface_method_impl{PDMIMEDIA,pfnBiosGetLCHSGeometry} */
 static DECLCALLBACK(int) drvvdBiosGetLCHSGeometry(PPDMIMEDIA pInterface,
                                                   PPDMMEDIAGEOMETRY pLCHSGeometry)
 {
@@ -1958,7 +1958,7 @@ static DECLCALLBACK(int) drvvdBiosGetLCHSGeometry(PPDMIMEDIA pInterface,
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnBiosSetLCHSGeometry */
+/** @interface_method_impl{PDMIMEDIA,pfnBiosSetLCHSGeometry} */
 static DECLCALLBACK(int) drvvdBiosSetLCHSGeometry(PPDMIMEDIA pInterface,
                                                   PCPDMMEDIAGEOMETRY pLCHSGeometry)
 {
@@ -1976,7 +1976,7 @@ static DECLCALLBACK(int) drvvdBiosSetLCHSGeometry(PPDMIMEDIA pInterface,
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnGetUuid */
+/** @interface_method_impl{PDMIMEDIA,pfnGetUuid} */
 static DECLCALLBACK(int) drvvdGetUuid(PPDMIMEDIA pInterface, PRTUUID pUuid)
 {
     LogFlowFunc(("\n"));
@@ -1996,7 +1996,7 @@ static DECLCALLBACK(int) drvvdDiscard(PPDMIMEDIA pInterface, PCRTRANGE paRanges,
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnIoBufAlloc */
+/** @interface_method_impl{PDMIMEDIA,pfnIoBufAlloc} */
 static DECLCALLBACK(int) drvvdIoBufAlloc(PPDMIMEDIA pInterface, size_t cb, void **ppvNew)
 {
     LogFlowFunc(("\n"));
@@ -2023,7 +2023,7 @@ static DECLCALLBACK(int) drvvdIoBufAlloc(PPDMIMEDIA pInterface, size_t cb, void
     return rc;
 }
 
-/** @copydoc PDMIMEDIA::pfnIoBufFree */
+/** @interface_method_impl{PDMIMEDIA,pfnIoBufFree} */
 static DECLCALLBACK(int) drvvdIoBufFree(PPDMIMEDIA pInterface, void *pv, size_t cb)
 {
     LogFlowFunc(("\n"));
diff --git a/src/VBox/Devices/Storage/UsbMsd.cpp b/src/VBox/Devices/Storage/UsbMsd.cpp
index 6753614..7a73308 100644
--- a/src/VBox/Devices/Storage/UsbMsd.cpp
+++ b/src/VBox/Devices/Storage/UsbMsd.cpp
@@ -1221,7 +1221,7 @@ static void usbMsdSuspendOrPowerOff(PPDMUSBINS pUsbIns)
 /* -=-=-=-=- Saved State -=-=-=-=- */
 
 /**
- * @copydoc FNUSBSSMSAVEPREP
+ * @callback_method_impl{FNSSMUSBSAVEPREP}
  */
 static DECLCALLBACK(int) usbMsdSavePrep(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM)
 {
@@ -1234,7 +1234,7 @@ static DECLCALLBACK(int) usbMsdSavePrep(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM)
 }
 
 /**
- * @copydoc FNUSBSSMLOADPREP
+ * @callback_method_impl{FNSSMUSBLOADPREP}
  */
 static DECLCALLBACK(int) usbMsdLoadPrep(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM)
 {
@@ -1247,7 +1247,7 @@ static DECLCALLBACK(int) usbMsdLoadPrep(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM)
 }
 
 /**
- * @copydoc FNUSBSSMLIVEEXEC
+ * @callback_method_impl{FNSSMUSBLIVEEXEC}
  */
 static DECLCALLBACK(int) usbMsdLiveExec(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM, uint32_t uPass)
 {
@@ -1259,7 +1259,7 @@ static DECLCALLBACK(int) usbMsdLiveExec(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM, uin
 }
 
 /**
- * @copydoc FNUSBSSMSAVEEXEC
+ * @callback_method_impl{FNSSMUSBSAVEEXEC}
  */
 static DECLCALLBACK(int) usbMsdSaveExec(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM)
 {
@@ -1302,7 +1302,7 @@ static DECLCALLBACK(int) usbMsdSaveExec(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM)
 }
 
 /**
- * @copydoc FNUSBSSMLOADEXEC
+ * @callback_method_impl{FNSSMUSBLOADEXEC}
  */
 static DECLCALLBACK(int) usbMsdLoadExec(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
@@ -1399,7 +1399,7 @@ static DECLCALLBACK(int) usbMsdLoadExec(PPDMUSBINS pUsbIns, PSSMHANDLE pSSM, uin
 
 
 /**
- * @copydoc PDMUSBREG::pfnUrbReap
+ * @interface_method_impl{PDMUSBREG,pfnUrbReap}
  */
 static DECLCALLBACK(PVUSBURB) usbMsdUrbReap(PPDMUSBINS pUsbIns, RTMSINTERVAL cMillies)
 {
@@ -1432,7 +1432,7 @@ static DECLCALLBACK(PVUSBURB) usbMsdUrbReap(PPDMUSBINS pUsbIns, RTMSINTERVAL cMi
 
 
 /**
- * @copydoc PDMUSBREG::pfnWakeup
+ * @interface_method_impl{PDMUSBREG,pfnWakeup}
  */
 static DECLCALLBACK(int) usbMsdWakeup(PPDMUSBINS pUsbIns)
 {
@@ -1444,7 +1444,7 @@ static DECLCALLBACK(int) usbMsdWakeup(PPDMUSBINS pUsbIns)
 
 
 /**
- * @copydoc PDMUSBREG::pfnUrbCancel
+ * @interface_method_impl{PDMUSBREG,pfnUrbCancel}
  */
 static DECLCALLBACK(int) usbMsdUrbCancel(PPDMUSBINS pUsbIns, PVUSBURB pUrb)
 {
@@ -1992,7 +1992,7 @@ static int usbMsdHandleDefaultPipe(PUSBMSD pThis, PUSBMSDEP pEp, PVUSBURB pUrb)
 
 
 /**
- * @copydoc PDMUSBREG::pfnQueue
+ * @interface_method_impl{PDMUSBREG,pfnQueue}
  */
 static DECLCALLBACK(int) usbMsdQueue(PPDMUSBINS pUsbIns, PVUSBURB pUrb)
 {
@@ -2032,7 +2032,7 @@ static DECLCALLBACK(int) usbMsdQueue(PPDMUSBINS pUsbIns, PVUSBURB pUrb)
 
 
 /**
- * @copydoc PDMUSBREG::pfnUsbClearHaltedEndpoint
+ * @interface_method_impl{PDMUSBREG,pfnUsbClearHaltedEndpoint}
  */
 static DECLCALLBACK(int) usbMsdUsbClearHaltedEndpoint(PPDMUSBINS pUsbIns, unsigned uEndpoint)
 {
@@ -2051,7 +2051,7 @@ static DECLCALLBACK(int) usbMsdUsbClearHaltedEndpoint(PPDMUSBINS pUsbIns, unsign
 
 
 /**
- * @copydoc PDMUSBREG::pfnUsbSetInterface
+ * @interface_method_impl{PDMUSBREG,pfnUsbSetInterface}
  */
 static DECLCALLBACK(int) usbMsdUsbSetInterface(PPDMUSBINS pUsbIns, uint8_t bInterfaceNumber, uint8_t bAlternateSetting)
 {
@@ -2062,7 +2062,7 @@ static DECLCALLBACK(int) usbMsdUsbSetInterface(PPDMUSBINS pUsbIns, uint8_t bInte
 
 
 /**
- * @copydoc PDMUSBREG::pfnUsbSetConfiguration
+ * @interface_method_impl{PDMUSBREG,pfnUsbSetConfiguration}
  */
 static DECLCALLBACK(int) usbMsdUsbSetConfiguration(PPDMUSBINS pUsbIns, uint8_t bConfigurationValue,
                                                    const void *pvOldCfgDesc, const void *pvOldIfState, const void *pvNewCfgDesc)
@@ -2085,7 +2085,7 @@ static DECLCALLBACK(int) usbMsdUsbSetConfiguration(PPDMUSBINS pUsbIns, uint8_t b
 
 
 /**
- * @copydoc PDMUSBREG::pfnUsbGetDescriptorCache
+ * @interface_method_impl{PDMUSBREG,pfnUsbGetDescriptorCache}
  */
 static DECLCALLBACK(PCPDMUSBDESCCACHE) usbMsdUsbGetDescriptorCache(PPDMUSBINS pUsbIns)
 {
@@ -2101,7 +2101,7 @@ static DECLCALLBACK(PCPDMUSBDESCCACHE) usbMsdUsbGetDescriptorCache(PPDMUSBINS pU
 
 
 /**
- * @copydoc PDMUSBREG::pfnUsbReset
+ * @interface_method_impl{PDMUSBREG,pfnUsbReset}
  */
 static DECLCALLBACK(int) usbMsdUsbReset(PPDMUSBINS pUsbIns, bool fResetOnLinux)
 {
@@ -2117,7 +2117,7 @@ static DECLCALLBACK(int) usbMsdUsbReset(PPDMUSBINS pUsbIns, bool fResetOnLinux)
 
 
 /**
- * @copydoc PDMUSBREG::pfnVMSuspend
+ * @interface_method_impl{PDMUSBREG,pfnVMSuspend}
  */
 static DECLCALLBACK(void) usbMsdVMSuspend(PPDMUSBINS pUsbIns)
 {
@@ -2127,7 +2127,7 @@ static DECLCALLBACK(void) usbMsdVMSuspend(PPDMUSBINS pUsbIns)
 
 
 /**
- * @copydoc PDMUSBREG::pfnVMSuspend
+ * @interface_method_impl{PDMUSBREG,pfnVMSuspend}
  */
 static DECLCALLBACK(void) usbMsdVMPowerOff(PPDMUSBINS pUsbIns)
 {
@@ -2137,7 +2137,7 @@ static DECLCALLBACK(void) usbMsdVMPowerOff(PPDMUSBINS pUsbIns)
 
 
 /**
- * @copydoc PDMUSBREG::pfnDriverAttach
+ * @interface_method_impl{PDMUSBREG,pfnDriverAttach}
  */
 static DECLCALLBACK(int) usbMsdDriverAttach(PPDMUSBINS pUsbIns, unsigned iLUN, uint32_t fFlags)
 {
@@ -2192,7 +2192,7 @@ static DECLCALLBACK(int) usbMsdDriverAttach(PPDMUSBINS pUsbIns, unsigned iLUN, u
 
 
 /**
- * @copydoc PDMUSBREG::pfnDriverDetach
+ * @interface_method_impl{PDMUSBREG,pfnDriverDetach}
  */
 static DECLCALLBACK(void) usbMsdDriverDetach(PPDMUSBINS pUsbIns, unsigned iLUN, uint32_t fFlags)
 {
@@ -2249,7 +2249,7 @@ static DECLCALLBACK(void) usbMsdVMReset(PPDMUSBINS pUsbIns)
 
 
 /**
- * @copydoc PDMUSBREG::pfnDestruct
+ * @interface_method_impl{PDMUSBREG,pfnDestruct}
  */
 static DECLCALLBACK(void) usbMsdDestruct(PPDMUSBINS pUsbIns)
 {
@@ -2284,7 +2284,7 @@ static DECLCALLBACK(void) usbMsdDestruct(PPDMUSBINS pUsbIns)
 
 
 /**
- * @copydoc PDMUSBREG::pfnConstruct
+ * @interface_method_impl{PDMUSBREG,pfnConstruct}
  */
 static DECLCALLBACK(int) usbMsdConstruct(PPDMUSBINS pUsbIns, int iInstance, PCFGMNODE pCfg, PCFGMNODE pCfgGlobal)
 {
diff --git a/src/VBox/Devices/USB/DevOHCI.cpp b/src/VBox/Devices/USB/DevOHCI.cpp
index 36d7569..e7609a7 100644
--- a/src/VBox/Devices/USB/DevOHCI.cpp
+++ b/src/VBox/Devices/USB/DevOHCI.cpp
@@ -5624,7 +5624,7 @@ static DECLCALLBACK(void) ohciR3LoadReattachDevices(PPDMDEVINS pDevIns, PTMTIMER
 /**
  * Reset notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  */
 static DECLCALLBACK(void) ohciR3Reset(PPDMDEVINS pDevIns)
@@ -5647,7 +5647,7 @@ static DECLCALLBACK(void) ohciR3Reset(PPDMDEVINS pDevIns)
 /**
  * Resume notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  */
 static DECLCALLBACK(void) ohciR3Resume(PPDMDEVINS pDevIns)
@@ -5727,7 +5727,7 @@ static DECLCALLBACK(void) ohciR3InfoRegs(PPDMDEVINS pDevIns, PCDBGFINFOHLP pHlp,
 /**
  * Relocate device instance data.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  * @param   offDelta    The relocation delta.
  */
@@ -5745,7 +5745,7 @@ static DECLCALLBACK(void) ohciR3Relocate(PPDMDEVINS pDevIns, RTGCINTPTR offDelta
  * Most VM resources are freed by the VM. This callback is provided so that any non-VM
  * resources can be freed correctly.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  */
 static DECLCALLBACK(int) ohciR3Destruct(PPDMDEVINS pDevIns)
diff --git a/src/VBox/Devices/USB/USBProxyDevice.cpp b/src/VBox/Devices/USB/USBProxyDevice.cpp
index 378966e..3fc870c 100644
--- a/src/VBox/Devices/USB/USBProxyDevice.cpp
+++ b/src/VBox/Devices/USB/USBProxyDevice.cpp
@@ -46,6 +46,9 @@ static char g_szDummyName[] = "proxy xxxx:yyyy";
  */
 static void *GetStdDescSync(PUSBPROXYDEV pProxyDev, uint8_t iDescType, uint8_t iIdx, uint16_t LangId, uint16_t cbHint)
 {
+#define VUSBSTATUS_DNR_RETRIES 5
+    int cRetries = 0;
+
     LogFlow(("GetStdDescSync: pProxyDev=%s\n", pProxyDev->pUsbIns->pszName));
     for (;;)
     {
@@ -104,6 +107,17 @@ static void *GetStdDescSync(PUSBPROXYDEV pProxyDev, uint8_t iDescType, uint8_t i
         if (Urb.enmStatus != VUSBSTATUS_OK)
         {
             Log(("GetStdDescSync: Urb.enmStatus=%d\n", Urb.enmStatus));
+
+            if (Urb.enmStatus == VUSBSTATUS_DNR)
+            {
+                cRetries++;
+                if (cRetries < VUSBSTATUS_DNR_RETRIES)
+                {
+                    Log(("GetStdDescSync: Retrying %u/%u\n", cRetries, VUSBSTATUS_DNR_RETRIES));
+                    continue;
+                }
+            }
+
             break;
         }
 
diff --git a/src/VBox/Devices/USB/USBProxyDevice.h b/src/VBox/Devices/USB/USBProxyDevice.h
index 4c786bc..1a186aa 100644
--- a/src/VBox/Devices/USB/USBProxyDevice.h
+++ b/src/VBox/Devices/USB/USBProxyDevice.h
@@ -187,18 +187,6 @@ typedef struct VUSBDEV
  */
 typedef struct USBPROXYDEV
 {
-#ifdef RDESKTOP
-    /** The VUSB device structure - must be the first structure member. */
-    VUSBDEV             Dev;
-    /** The next device in rdesktop-vrdp's linked list */
-    PUSBPROXYDEV        pNext;
-    /** The previous device in rdesktop-vrdp's linked list */
-    PUSBPROXYDEV        pPrev;
-    /** The vrdp device ID */
-    uint32_t            devid;
-    /** Linked list of in-flight URBs */
-    PVUSBURB            pUrbs;
-#endif
     /** The device descriptor. */
     VUSBDESCDEVICE      DevDesc;
     /** The configuration descriptor array. */
@@ -234,7 +222,23 @@ typedef struct USBPROXYDEV
      * This is hack for making PDMUSBREG::pfnUsbQueue return the right status code. */
     bool                fDetached;
     /** Backend specific data, the size is stored in pOps::cbBackend. */
-    void                *pvInstanceDataR3;
+    void               *pvInstanceDataR3;
+
+#ifdef RDESKTOP
+    /** @name VRDP client (rdesktop) related members.
+     * @{ */
+    /** The vrdp device ID. */
+    uint32_t            idVrdp;
+    /** The VUSB device structure - must be the first structure member. */
+    VUSBDEV             Dev;
+    /** The next device in rdesktop-vrdp's linked list. */
+    PUSBPROXYDEV        pNext;
+    /** The previous device in rdesktop-vrdp's linked list. */
+    PUSBPROXYDEV        pPrev;
+    /** Linked list of in-flight URBs */
+    PVUSBURB            pUrbs;
+    /** @} */
+#endif
 } USBPROXYDEV;
 
 /** @def USBPROXYDEV_2_DATA
@@ -242,7 +246,8 @@ typedef struct USBPROXYDEV
  */
 #define USBPROXYDEV_2_DATA(a_pProxyDev, a_Type)   ( (a_Type)(a_pProxyDev)->pvInstanceDataR3 )
 
-static inline char *usbProxyGetName(PUSBPROXYDEV pProxyDev)
+
+DECLINLINE(const char *) usbProxyGetName(PUSBPROXYDEV pProxyDev)
 {
 #ifndef RDESKTOP
     return pProxyDev->pUsbIns->pszName;
@@ -252,9 +257,9 @@ static inline char *usbProxyGetName(PUSBPROXYDEV pProxyDev)
 }
 
 #ifdef RDESKTOP
-static inline PUSBPROXYDEV usbProxyFromVusbDev(PVUSBDEV pDev)
+DECLINLINE(PUSBPROXYDEV) usbProxyFromVusbDev(PVUSBDEV pDev)
 {
-    return (PUSBPROXYDEV)pDev;
+    return RT_FROM_MEMBER(pDev, USBPROXYDEV, Dev);
 }
 #endif
 
diff --git a/src/VBox/Devices/USB/VUSBDevice.cpp b/src/VBox/Devices/USB/VUSBDevice.cpp
index 40962ac..b3ece75 100644
--- a/src/VBox/Devices/USB/VUSBDevice.cpp
+++ b/src/VBox/Devices/USB/VUSBDevice.cpp
@@ -1356,11 +1356,13 @@ static DECLCALLBACK(void) vusbDevResetDoneTimer(PPDMUSBINS pUsbIns, PTMTIMER pTi
     PVUSBRESETARGS  pArgs = (PVUSBRESETARGS)pDev->pvArgs;
     Assert(pDev->pUsbIns == pUsbIns);
 
+    AssertPtr(pArgs);
+
     /*
      * Reset-done processing and cleanup.
      */
-    vusbDevResetDone(pDev, pArgs->rc, pArgs->pfnDone, pArgs->pvUser);
     pDev->pvArgs = NULL;
+    vusbDevResetDone(pDev, pArgs->rc, pArgs->pfnDone, pArgs->pvUser);
     RTMemFree(pArgs);
 }
 
@@ -1378,6 +1380,12 @@ static int vusbDevResetWorker(PVUSBDEV pDev, bool fResetOnLinux, bool fUseTimer,
     if (pDev->pUsbIns->pReg->pfnUsbReset)
         rc = pDev->pUsbIns->pReg->pfnUsbReset(pDev->pUsbIns, fResetOnLinux);
 
+    if (pArgs)
+    {
+        pArgs->rc = rc;
+        rc = VINF_SUCCESS;
+    }
+
     if (fUseTimer)
     {
         /*
@@ -1389,12 +1397,6 @@ static int vusbDevResetWorker(PVUSBDEV pDev, bool fResetOnLinux, bool fUseTimer,
         AssertReleaseRC(rc2);
     }
 
-    if (pArgs)
-    {
-        pArgs->rc = rc;
-        rc = VINF_SUCCESS;
-    }
-
     LogFlow(("vusbDevResetWorker: %s: returns %Rrc\n", pDev->pUsbIns->pszName, rc));
     return rc;
 }
@@ -1459,6 +1461,7 @@ static DECLCALLBACK(int) vusbIDeviceReset(PVUSBIDEVICE pDevice, bool fResetOnLin
             pArgs->pfnDone = pfnDone;
             pArgs->pvUser  = pvUser;
             pArgs->rc      = VINF_SUCCESS;
+            AssertPtrNull(pDev->pvArgs);
             pDev->pvArgs   = pArgs;
             int rc = vusbDevIoThreadExec(pDev, 0 /* fFlags */, (PFNRT)vusbDevResetWorker, 4, pDev, fResetOnLinux, true, pArgs);
             if (RT_SUCCESS(rc))
diff --git a/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp b/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp
index 86fe495..63d6bfb 100644
--- a/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp
+++ b/src/VBox/Devices/USB/darwin/USBProxyDevice-darwin.cpp
@@ -161,6 +161,8 @@ typedef struct USBPROXYPIPEOSX
     uint8_t                 u8Direction;
     /** The endpoint interval. (interrupt) */
     uint8_t                 u8Interval;
+    /** Full-speed device indicator (isochronous pipes only). */
+    bool                    fIsFullSpeed;
     /** The max packet size. */
     uint16_t                u16MaxPacketSize;
     /** The next frame number (isochronous pipes only). */
@@ -731,6 +733,8 @@ static int usbProxyDarwinGetPipeProperties(PUSBPROXYDEVOSX pDevOsX, PUSBPROXYIFO
      * Get the pipe (endpoint) count (it might have changed - even on open).
      */
     int rc = VINF_SUCCESS;
+    bool fFullSpeed;
+    UInt32 u32UsecInFrame;
     UInt8 cPipes;
     IOReturn irc = (*pIf->ppIfI)->GetNumEndpoints(pIf->ppIfI, &cPipes);
     if (irc != kIOReturnSuccess)
@@ -745,12 +749,26 @@ static int usbProxyDarwinGetPipeProperties(PUSBPROXYDEVOSX pDevOsX, PUSBPROXYIFO
     AssertRelease(cPipes < RT_ELEMENTS(pIf->aPipes));
     pIf->cPipes = cPipes + 1;
 
+    /* Find out if this is a full-speed interface (needed for isochronous support). */
+    irc = (*pIf->ppIfI)->GetFrameListTime(pIf->ppIfI, &u32UsecInFrame);
+    if (irc != kIOReturnSuccess)
+    {
+        pIf->cPipes = 0;
+        if (irc == kIOReturnNoDevice)
+            rc = VERR_VUSB_DEVICE_NOT_ATTACHED;
+        else
+            rc = RTErrConvertFromDarwin(irc);
+        return rc;
+    }
+    fFullSpeed = u32UsecInFrame == kUSBFullSpeedMicrosecondsInFrame;
+
     /*
      * Get the properties of each pipe.
      */
     for (unsigned i = 0; i < pIf->cPipes; i++)
     {
         pIf->aPipes[i].u8PipeRef = i;
+        pIf->aPipes[i].fIsFullSpeed = fFullSpeed;
         pIf->aPipes[i].u64NextFrameNo = 0;
         irc = (*pIf->ppIfI)->GetPipeProperties(pIf->ppIfI, i,
                                                &pIf->aPipes[i].u8Direction,
@@ -1741,7 +1759,12 @@ static DECLCALLBACK(int) usbProxyDarwinUrbQueue(PUSBPROXYDEV pProxyDev, PVUSBURB
                     Log(("%s: usbProxyDarwinUrbQueue: isoc: u64NextFrameNo=%RX64 FrameNo=%RX64 #Frames=%d j=%d (pipe=%d)\n",
                          pUrb->pszDesc, pPipe->u64NextFrameNo, FrameNo, pUrb->cIsocPkts, j, u8PipeRef));
                     if (irc == kIOReturnSuccess)
-                        pPipe->u64NextFrameNo = FrameNo + pUrb->cIsocPkts;
+                    {
+                        if (pPipe->fIsFullSpeed)
+                            pPipe->u64NextFrameNo = FrameNo + pUrb->cIsocPkts;
+                        else
+                            pPipe->u64NextFrameNo = FrameNo + 1;
+                    }
                     break;
                 }
 
diff --git a/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp b/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp
index 904b393..cb7785c 100644
--- a/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp
+++ b/src/VBox/Devices/USB/linux/USBProxyDevice-linux.cpp
@@ -1427,7 +1427,6 @@ static int usbProxyLinuxUrbQueueSplit(PUSBPROXYDEV pProxyDev, PUSBPROXYURBLNX pU
             rc = usbProxyLinuxSubmitURB(pProxyDev, pCur, pUrb, &fUnplugged);
             if (RT_FAILURE(rc))
                 break;
-            usbProxyLinuxUrbLinkInFlight(USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVLNX), pCur);
         }
     }
 
@@ -1615,8 +1614,9 @@ static VUSBSTATUS vusbProxyLinuxStatusToVUsbStatus(int iStatus)
         //case -ENOSR:
         //    return VUSBSTATUS_BUFFER_UNDERRUN;
 
-        //case -EPROTO:
-        //    return VUSBSTATUS_BIT_STUFFING;
+        case -EPROTO:
+            Log(("vusbProxyLinuxStatusToVUsbStatus: DNR/EPPROTO!!\n"));
+            return VUSBSTATUS_DNR;
 
         case -EPIPE:
             Log(("vusbProxyLinuxStatusToVUsbStatus: STALL/EPIPE!!\n"));
diff --git a/src/VBox/Devices/USB/usbip/USBProxyDevice-usbip.cpp b/src/VBox/Devices/USB/usbip/USBProxyDevice-usbip.cpp
index 01e08a6..4ddbd31 100644
--- a/src/VBox/Devices/USB/usbip/USBProxyDevice-usbip.cpp
+++ b/src/VBox/Devices/USB/usbip/USBProxyDevice-usbip.cpp
@@ -726,7 +726,7 @@ static int usbProxyUsbIpParseAddress(PUSBPROXYDEVUSBIP pProxyDevUsbIp, const cha
 /**
  * Connects to the USB/IP host and claims the device given in the proxy device data.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pProxyDevUsbIp    The USB/IP proxy device data.
  */
 static int usbProxyUsbIpConnect(PUSBPROXYDEVUSBIP pProxyDevUsbIp)
diff --git a/src/VBox/Devices/VMMDev/VMMDev.cpp b/src/VBox/Devices/VMMDev/VMMDev.cpp
index 1099d62..c8f0630 100644
--- a/src/VBox/Devices/VMMDev/VMMDev.cpp
+++ b/src/VBox/Devices/VMMDev/VMMDev.cpp
@@ -15,6 +15,67 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
+/** @page pg_vmmdev   The VMM Device.
+ *
+ * The VMM device is a custom hardware device emulation for communicating with
+ * the guest additions.
+ *
+ * Whenever host wants to inform guest about something an IRQ notification will
+ * be raised.
+ *
+ * VMMDev PDM interface will contain the guest notification method.
+ *
+ * There is a 32 bit event mask which will be read by guest on an interrupt.  A
+ * non zero bit in the mask means that the specific event occurred and requires
+ * processing on guest side.
+ *
+ * After reading the event mask guest must issue a generic request
+ * AcknowlegdeEvents.
+ *
+ * IRQ line is set to 1 (request) if there are unprocessed events, that is the
+ * event mask is not zero.
+ *
+ * After receiving an interrupt and checking event mask, the guest must process
+ * events using the event specific mechanism.
+ *
+ * That is if mouse capabilities were changed, guest will use
+ * VMMDev_GetMouseStatus generic request.
+ *
+ * Event mask is only a set of flags indicating that guest must proceed with a
+ * procedure.
+ *
+ * Unsupported events are therefore ignored. The guest additions must inform
+ * host which events they want to receive, to avoid unnecessary IRQ processing.
+ * By default no events are signalled to guest.
+ *
+ * This seems to be fast method. It requires only one context switch for an
+ * event processing.
+ *
+ *
+ * @section sec_vmmdev_heartbeat    Heartbeat
+ *
+ * The heartbeat is a feature to monitor whether the guest OS is hung or not.
+ *
+ * The main kernel component of the guest additions, VBoxGuest, sets up a timer
+ * at a frequency returned by VMMDevReq_HeartbeatConfigure
+ * (VMMDevReqHeartbeat::cNsInterval, VMMDEV::cNsHeartbeatInterval) and performs
+ * a VMMDevReq_GuestHeartbeat request every time the timer ticks.
+ *
+ * The host side (VMMDev) arms a timer with a more distant deadline
+ * (VMMDEV::cNsHeartbeatTimeout), twice cNsHeartbeatInterval by default.  Each
+ * time a VMMDevReq_GuestHeartbeat request comes in, the timer is rearmed with
+ * the same relative deadline.  So, as long as VMMDevReq_GuestHeartbeat comes
+ * when they should, the host timer will never fire.
+ *
+ * When the timer fires, we consider the guest as hung / flatlined / dead.
+ * Currently we only LogRel that, but it's easy to extend this with an event in
+ * Main API.
+ *
+ * Should the guest reawaken at some later point, we LogRel that event and
+ * continue as normal.  Again something which would merit an API event.
+ *
+ */
+
 
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
@@ -59,29 +120,33 @@
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
-#define VBOX_GUEST_INTERFACE_VERSION_1_03(s) \
+#define VMMDEV_INTERFACE_VERSION_IS_1_03(s) \
     (   RT_HIWORD((s)->guestInfo.interfaceVersion) == 1 \
      && RT_LOWORD((s)->guestInfo.interfaceVersion) == 3 )
 
-#define VBOX_GUEST_INTERFACE_VERSION_OK(additionsVersion) \
+#define VMMDEV_INTERFACE_VERSION_IS_OK(additionsVersion) \
       (   RT_HIWORD(additionsVersion) == RT_HIWORD(VMMDEV_VERSION) \
        && RT_LOWORD(additionsVersion) <= RT_LOWORD(VMMDEV_VERSION) )
 
-#define VBOX_GUEST_INTERFACE_VERSION_OLD(additionsVersion) \
+#define VMMDEV_INTERFACE_VERSION_IS_OLD(additionsVersion) \
       (   (RT_HIWORD(additionsVersion) < RT_HIWORD(VMMDEV_VERSION) \
        || (   RT_HIWORD(additionsVersion) == RT_HIWORD(VMMDEV_VERSION) \
            && RT_LOWORD(additionsVersion) <= RT_LOWORD(VMMDEV_VERSION) ) )
 
-#define VBOX_GUEST_INTERFACE_VERSION_TOO_OLD(additionsVersion) \
+#define VMMDEV_INTERFACE_VERSION_IS_TOO_OLD(additionsVersion) \
       ( RT_HIWORD(additionsVersion) < RT_HIWORD(VMMDEV_VERSION) )
 
-#define VBOX_GUEST_INTERFACE_VERSION_NEW(additionsVersion) \
+#define VMMDEV_INTERFACE_VERSION_IS_NEW(additionsVersion) \
       (   RT_HIWORD(additionsVersion) > RT_HIWORD(VMMDEV_VERSION) \
        || (   RT_HIWORD(additionsVersion) == RT_HIWORD(VMMDEV_VERSION) \
            && RT_LOWORD(additionsVersion) >  RT_LOWORD(VMMDEV_VERSION) ) )
 
 /** The saved state version. */
-#define VMMDEV_SAVED_STATE_VERSION                              15
+#define VMMDEV_SAVED_STATE_VERSION                              VMMDEV_SAVED_STATE_VERSION_HEARTBEAT
+/** The saved state version with heartbeat state. */
+#define VMMDEV_SAVED_STATE_VERSION_HEARTBEAT                    16
+/** The saved state version without heartbeat state. */
+#define VMMDEV_SAVED_STATE_VERSION_NO_HEARTBEAT                 15
 /** The saved state version which is missing the guest facility statuses. */
 #define VMMDEV_SAVED_STATE_VERSION_MISSING_FACILITY_STATUSES    14
 /** The saved state version which is missing the guestInfo2 bits. */
@@ -92,47 +157,11 @@
 /** Default interval in nanoseconds between guest heartbeats.
  *  Used when no HeartbeatInterval is set in CFGM and for setting
  *  HB check timer if the guest's heartbeat frequency is less than 1Hz. */
-#define HEARTBEAT_DEFAULT_INTERVAL            UINT64_C(2000000000)
+#define VMMDEV_HEARTBEAT_DEFAULT_INTERVAL                       (2U*RT_NS_1SEC_64)
 
 
 #ifndef VBOX_DEVICE_STRUCT_TESTCASE
 
-/** @page pg_vmmdev   VMMDev
- *
- * Whenever host wants to inform guest about something an IRQ notification will
- * be raised.
- *
- * VMMDev PDM interface will contain the guest notification method.
- *
- * There is a 32 bit event mask which will be read by guest on an interrupt.  A
- * non zero bit in the mask means that the specific event occurred and requires
- * processing on guest side.
- *
- * After reading the event mask guest must issue a generic request
- * AcknowlegdeEvents.
- *
- * IRQ line is set to 1 (request) if there are unprocessed events, that is the
- * event mask is not zero.
- *
- * After receiving an interrupt and checking event mask, the guest must process
- * events using the event specific mechanism.
- *
- * That is if mouse capabilities were changed, guest will use
- * VMMDev_GetMouseStatus generic request.
- *
- * Event mask is only a set of flags indicating that guest must proceed with a
- * procedure.
- *
- * Unsupported events are therefore ignored. The guest additions must inform
- * host which events they want to receive, to avoid unnecessary IRQ processing.
- * By default no events are signalled to guest.
- *
- * This seems to be fast method. It requires only one context switch for an
- * event processing.
- *
- */
-
-
 /* -=-=-=-=- Misc Helpers -=-=-=-=- */
 
 /**
@@ -142,67 +171,67 @@
  */
 static void vmmdevLogGuestOsInfo(VBoxGuestInfo *pGuestInfo)
 {
-    const char *pcszOs;
+    const char *pszOs;
     switch (pGuestInfo->osType & ~VBOXOSTYPE_x64)
     {
-        case VBOXOSTYPE_DOS:                              pcszOs = "DOS";            break;
-        case VBOXOSTYPE_Win31:                            pcszOs = "Windows 3.1";    break;
-        case VBOXOSTYPE_Win9x:                            pcszOs = "Windows 9x";     break;
-        case VBOXOSTYPE_Win95:                            pcszOs = "Windows 95";     break;
-        case VBOXOSTYPE_Win98:                            pcszOs = "Windows 98";     break;
-        case VBOXOSTYPE_WinMe:                            pcszOs = "Windows Me";     break;
-        case VBOXOSTYPE_WinNT:                            pcszOs = "Windows NT";     break;
-        case VBOXOSTYPE_WinNT4:                           pcszOs = "Windows NT4";    break;
-        case VBOXOSTYPE_Win2k:                            pcszOs = "Windows 2k";     break;
-        case VBOXOSTYPE_WinXP:                            pcszOs = "Windows XP";     break;
-        case VBOXOSTYPE_Win2k3:                           pcszOs = "Windows 2k3";    break;
-        case VBOXOSTYPE_WinVista:                         pcszOs = "Windows Vista";  break;
-        case VBOXOSTYPE_Win2k8:                           pcszOs = "Windows 2k8";    break;
-        case VBOXOSTYPE_Win7:                             pcszOs = "Windows 7";      break;
-        case VBOXOSTYPE_Win8:                             pcszOs = "Windows 8";      break;
-        case VBOXOSTYPE_Win2k12_x64 & ~VBOXOSTYPE_x64:    pcszOs = "Windows 2k12";   break;
-        case VBOXOSTYPE_Win81:                            pcszOs = "Windows 8.1";    break;
-        case VBOXOSTYPE_Win10:                            pcszOs = "Windows 10";     break;
-        case VBOXOSTYPE_OS2:                              pcszOs = "OS/2";           break;
-        case VBOXOSTYPE_OS2Warp3:                         pcszOs = "OS/2 Warp 3";    break;
-        case VBOXOSTYPE_OS2Warp4:                         pcszOs = "OS/2 Warp 4";    break;
-        case VBOXOSTYPE_OS2Warp45:                        pcszOs = "OS/2 Warp 4.5";  break;
-        case VBOXOSTYPE_ECS:                              pcszOs = "OS/2 ECS";       break;
-        case VBOXOSTYPE_OS21x:                            pcszOs = "OS/2 2.1x";      break;
-        case VBOXOSTYPE_Linux:                            pcszOs = "Linux";          break;
-        case VBOXOSTYPE_Linux22:                          pcszOs = "Linux 2.2";      break;
-        case VBOXOSTYPE_Linux24:                          pcszOs = "Linux 2.4";      break;
-        case VBOXOSTYPE_Linux26:                          pcszOs = "Linux >= 2.6";   break;
-        case VBOXOSTYPE_ArchLinux:                        pcszOs = "ArchLinux";      break;
-        case VBOXOSTYPE_Debian:                           pcszOs = "Debian";         break;
-        case VBOXOSTYPE_OpenSUSE:                         pcszOs = "openSUSE";       break;
-        case VBOXOSTYPE_FedoraCore:                       pcszOs = "Fedora";         break;
-        case VBOXOSTYPE_Gentoo:                           pcszOs = "Gentoo";         break;
-        case VBOXOSTYPE_Mandriva:                         pcszOs = "Mandriva";       break;
-        case VBOXOSTYPE_RedHat:                           pcszOs = "RedHat";         break;
-        case VBOXOSTYPE_Turbolinux:                       pcszOs = "TurboLinux";     break;
-        case VBOXOSTYPE_Ubuntu:                           pcszOs = "Ubuntu";         break;
-        case VBOXOSTYPE_Xandros:                          pcszOs = "Xandros";        break;
-        case VBOXOSTYPE_Oracle:                           pcszOs = "Oracle Linux";   break;
-        case VBOXOSTYPE_FreeBSD:                          pcszOs = "FreeBSD";        break;
-        case VBOXOSTYPE_OpenBSD:                          pcszOs = "OpenBSD";        break;
-        case VBOXOSTYPE_NetBSD:                           pcszOs = "NetBSD";         break;
-        case VBOXOSTYPE_Netware:                          pcszOs = "Netware";        break;
-        case VBOXOSTYPE_Solaris:                          pcszOs = "Solaris";        break;
-        case VBOXOSTYPE_OpenSolaris:                      pcszOs = "OpenSolaris";    break;
-        case VBOXOSTYPE_Solaris11_x64 & ~VBOXOSTYPE_x64:  pcszOs = "Solaris 11";     break;
-        case VBOXOSTYPE_MacOS:                            pcszOs = "Mac OS X";       break;
-        case VBOXOSTYPE_MacOS106:                         pcszOs = "Mac OS X 10.6";  break;
-        case VBOXOSTYPE_MacOS107_x64 & ~VBOXOSTYPE_x64:   pcszOs = "Mac OS X 10.7";  break;
-        case VBOXOSTYPE_MacOS108_x64 & ~VBOXOSTYPE_x64:   pcszOs = "Mac OS X 10.8";  break;
-        case VBOXOSTYPE_MacOS109_x64 & ~VBOXOSTYPE_x64:   pcszOs = "Mac OS X 10.9";  break;
-        case VBOXOSTYPE_MacOS1010_x64 & ~VBOXOSTYPE_x64:  pcszOs = "Mac OS X 10.10"; break;
-        case VBOXOSTYPE_MacOS1011_x64 & ~VBOXOSTYPE_x64:  pcszOs = "Mac OS X 10.11"; break;
-        case VBOXOSTYPE_Haiku:                            pcszOs = "Haiku";          break;
-        default:                                          pcszOs = "unknown";        break;
+        case VBOXOSTYPE_DOS:                              pszOs = "DOS";            break;
+        case VBOXOSTYPE_Win31:                            pszOs = "Windows 3.1";    break;
+        case VBOXOSTYPE_Win9x:                            pszOs = "Windows 9x";     break;
+        case VBOXOSTYPE_Win95:                            pszOs = "Windows 95";     break;
+        case VBOXOSTYPE_Win98:                            pszOs = "Windows 98";     break;
+        case VBOXOSTYPE_WinMe:                            pszOs = "Windows Me";     break;
+        case VBOXOSTYPE_WinNT:                            pszOs = "Windows NT";     break;
+        case VBOXOSTYPE_WinNT4:                           pszOs = "Windows NT4";    break;
+        case VBOXOSTYPE_Win2k:                            pszOs = "Windows 2k";     break;
+        case VBOXOSTYPE_WinXP:                            pszOs = "Windows XP";     break;
+        case VBOXOSTYPE_Win2k3:                           pszOs = "Windows 2k3";    break;
+        case VBOXOSTYPE_WinVista:                         pszOs = "Windows Vista";  break;
+        case VBOXOSTYPE_Win2k8:                           pszOs = "Windows 2k8";    break;
+        case VBOXOSTYPE_Win7:                             pszOs = "Windows 7";      break;
+        case VBOXOSTYPE_Win8:                             pszOs = "Windows 8";      break;
+        case VBOXOSTYPE_Win2k12_x64 & ~VBOXOSTYPE_x64:    pszOs = "Windows 2k12";   break;
+        case VBOXOSTYPE_Win81:                            pszOs = "Windows 8.1";    break;
+        case VBOXOSTYPE_Win10:                            pszOs = "Windows 10";     break;
+        case VBOXOSTYPE_OS2:                              pszOs = "OS/2";           break;
+        case VBOXOSTYPE_OS2Warp3:                         pszOs = "OS/2 Warp 3";    break;
+        case VBOXOSTYPE_OS2Warp4:                         pszOs = "OS/2 Warp 4";    break;
+        case VBOXOSTYPE_OS2Warp45:                        pszOs = "OS/2 Warp 4.5";  break;
+        case VBOXOSTYPE_ECS:                              pszOs = "OS/2 ECS";       break;
+        case VBOXOSTYPE_OS21x:                            pszOs = "OS/2 2.1x";      break;
+        case VBOXOSTYPE_Linux:                            pszOs = "Linux";          break;
+        case VBOXOSTYPE_Linux22:                          pszOs = "Linux 2.2";      break;
+        case VBOXOSTYPE_Linux24:                          pszOs = "Linux 2.4";      break;
+        case VBOXOSTYPE_Linux26:                          pszOs = "Linux >= 2.6";   break;
+        case VBOXOSTYPE_ArchLinux:                        pszOs = "ArchLinux";      break;
+        case VBOXOSTYPE_Debian:                           pszOs = "Debian";         break;
+        case VBOXOSTYPE_OpenSUSE:                         pszOs = "openSUSE";       break;
+        case VBOXOSTYPE_FedoraCore:                       pszOs = "Fedora";         break;
+        case VBOXOSTYPE_Gentoo:                           pszOs = "Gentoo";         break;
+        case VBOXOSTYPE_Mandriva:                         pszOs = "Mandriva";       break;
+        case VBOXOSTYPE_RedHat:                           pszOs = "RedHat";         break;
+        case VBOXOSTYPE_Turbolinux:                       pszOs = "TurboLinux";     break;
+        case VBOXOSTYPE_Ubuntu:                           pszOs = "Ubuntu";         break;
+        case VBOXOSTYPE_Xandros:                          pszOs = "Xandros";        break;
+        case VBOXOSTYPE_Oracle:                           pszOs = "Oracle Linux";   break;
+        case VBOXOSTYPE_FreeBSD:                          pszOs = "FreeBSD";        break;
+        case VBOXOSTYPE_OpenBSD:                          pszOs = "OpenBSD";        break;
+        case VBOXOSTYPE_NetBSD:                           pszOs = "NetBSD";         break;
+        case VBOXOSTYPE_Netware:                          pszOs = "Netware";        break;
+        case VBOXOSTYPE_Solaris:                          pszOs = "Solaris";        break;
+        case VBOXOSTYPE_OpenSolaris:                      pszOs = "OpenSolaris";    break;
+        case VBOXOSTYPE_Solaris11_x64 & ~VBOXOSTYPE_x64:  pszOs = "Solaris 11";     break;
+        case VBOXOSTYPE_MacOS:                            pszOs = "Mac OS X";       break;
+        case VBOXOSTYPE_MacOS106:                         pszOs = "Mac OS X 10.6";  break;
+        case VBOXOSTYPE_MacOS107_x64 & ~VBOXOSTYPE_x64:   pszOs = "Mac OS X 10.7";  break;
+        case VBOXOSTYPE_MacOS108_x64 & ~VBOXOSTYPE_x64:   pszOs = "Mac OS X 10.8";  break;
+        case VBOXOSTYPE_MacOS109_x64 & ~VBOXOSTYPE_x64:   pszOs = "Mac OS X 10.9";  break;
+        case VBOXOSTYPE_MacOS1010_x64 & ~VBOXOSTYPE_x64:  pszOs = "Mac OS X 10.10"; break;
+        case VBOXOSTYPE_MacOS1011_x64 & ~VBOXOSTYPE_x64:  pszOs = "Mac OS X 10.11"; break;
+        case VBOXOSTYPE_Haiku:                            pszOs = "Haiku";          break;
+        default:                                          pszOs = "unknown";        break;
     }
     LogRel(("VMMDev: Guest Additions information report: Interface = 0x%08X osType = 0x%08X (%s, %u-bit)\n",
-            pGuestInfo->interfaceVersion, pGuestInfo->osType, pcszOs,
+            pGuestInfo->interfaceVersion, pGuestInfo->osType, pszOs,
             pGuestInfo->osType & VBOXOSTYPE_x64 ? 64 : 32));
 }
 
@@ -215,36 +244,33 @@ static void vmmdevLogGuestOsInfo(VBoxGuestInfo *pGuestInfo)
  */
 static void vmmdevSetIRQ_Legacy(PVMMDEV pThis)
 {
-    if (!pThis->fu32AdditionsOk)
+    if (pThis->fu32AdditionsOk)
     {
-        Log(("vmmdevSetIRQ: IRQ is not generated, guest has not yet reported to us.\n"));
-        return;
-    }
+        /* Filter unsupported events */
+        uint32_t fEvents = pThis->u32HostEventFlags & pThis->pVMMDevRAMR3->V.V1_03.u32GuestEventMask;
 
-    /* Filter unsupported events */
-    uint32_t u32EventFlags = pThis->u32HostEventFlags
-                           & pThis->pVMMDevRAMR3->V.V1_03.u32GuestEventMask;
+        Log(("vmmdevSetIRQ: fEvents=%#010x, u32HostEventFlags=%#010x, u32GuestEventMask=%#010x.\n",
+             fEvents, pThis->u32HostEventFlags, pThis->pVMMDevRAMR3->V.V1_03.u32GuestEventMask));
 
-    Log(("vmmdevSetIRQ: u32EventFlags=%#010x, u32HostEventFlags=%#010x, u32GuestEventMask=%#010x.\n",
-         u32EventFlags, pThis->u32HostEventFlags, pThis->pVMMDevRAMR3->V.V1_03.u32GuestEventMask));
+        /* Move event flags to VMMDev RAM */
+        pThis->pVMMDevRAMR3->V.V1_03.u32HostEvents = fEvents;
 
-    /* Move event flags to VMMDev RAM */
-    pThis->pVMMDevRAMR3->V.V1_03.u32HostEvents = u32EventFlags;
+        uint32_t uIRQLevel = 0;
+        if (fEvents)
+        {
+            /* Clear host flags which will be delivered to guest. */
+            pThis->u32HostEventFlags &= ~fEvents;
+            Log(("vmmdevSetIRQ: u32HostEventFlags=%#010x\n", pThis->u32HostEventFlags));
+            uIRQLevel = 1;
+        }
 
-    uint32_t u32IRQLevel = 0;
-    if (u32EventFlags)
-    {
-        /* Clear host flags which will be delivered to guest. */
-        pThis->u32HostEventFlags &= ~u32EventFlags;
-        Log(("vmmdevSetIRQ: u32HostEventFlags=%#010x\n", pThis->u32HostEventFlags));
-        u32IRQLevel = 1;
+        /* Set IRQ level for pin 0 (see NoWait comment in vmmdevMaybeSetIRQ). */
+        /** @todo make IRQ pin configurable, at least a symbolic constant */
+        PDMDevHlpPCISetIrqNoWait(pThis->pDevIns, 0, uIRQLevel);
+        Log(("vmmdevSetIRQ: IRQ set %d\n", uIRQLevel));
     }
-
-    /* Set IRQ level for pin 0 (see NoWait comment in vmmdevMaybeSetIRQ). */
-    /** @todo make IRQ pin configurable, at least a symbolic constant */
-    PPDMDEVINS pDevIns = pThis->pDevIns;
-    PDMDevHlpPCISetIrqNoWait(pDevIns, 0, u32IRQLevel);
-    Log(("vmmdevSetIRQ: IRQ set %d\n", u32IRQLevel));
+    else
+        Log(("vmmdevSetIRQ: IRQ is not generated, guest has not yet reported to us.\n"));
 }
 
 /**
@@ -285,33 +311,34 @@ static void vmmdevNotifyGuestWorker(PVMMDEV pThis, uint32_t fAddEvents)
     Log3(("vmmdevNotifyGuestWorker: fAddEvents=%#010x.\n", fAddEvents));
     Assert(PDMCritSectIsOwner(&pThis->CritSect));
 
-    if (VBOX_GUEST_INTERFACE_VERSION_1_03(pThis))
-    {
-        Log3(("vmmdevNotifyGuestWorker: Old additions detected.\n"));
-
-        pThis->u32HostEventFlags |= fAddEvents;
-        vmmdevSetIRQ_Legacy(pThis);
-    }
-    else
+    if (!VMMDEV_INTERFACE_VERSION_IS_1_03(pThis))
     {
         Log3(("vmmdevNotifyGuestWorker: New additions detected.\n"));
 
-        if (!pThis->fu32AdditionsOk)
+        if (pThis->fu32AdditionsOk)
+        {
+            const bool fHadEvents = (pThis->u32HostEventFlags & pThis->u32GuestFilterMask) != 0;
+
+            Log3(("vmmdevNotifyGuestWorker: fHadEvents=%d, u32HostEventFlags=%#010x, u32GuestFilterMask=%#010x.\n",
+                  fHadEvents, pThis->u32HostEventFlags, pThis->u32GuestFilterMask));
+
+            pThis->u32HostEventFlags |= fAddEvents;
+
+            if (!fHadEvents)
+                vmmdevMaybeSetIRQ(pThis);
+        }
+        else
         {
             pThis->u32HostEventFlags |= fAddEvents;
             Log(("vmmdevNotifyGuestWorker: IRQ is not generated, guest has not yet reported to us.\n"));
-            return;
         }
-
-        const bool fHadEvents = (pThis->u32HostEventFlags & pThis->u32GuestFilterMask) != 0;
-
-        Log3(("vmmdevNotifyGuestWorker: fHadEvents=%d, u32HostEventFlags=%#010x, u32GuestFilterMask=%#010x.\n",
-              fHadEvents, pThis->u32HostEventFlags, pThis->u32GuestFilterMask));
+    }
+    else
+    {
+        Log3(("vmmdevNotifyGuestWorker: Old additions detected.\n"));
 
         pThis->u32HostEventFlags |= fAddEvents;
-
-        if (!fHadEvents)
-            vmmdevMaybeSetIRQ(pThis);
+        vmmdevSetIRQ_Legacy(pThis);
     }
 }
 
@@ -333,16 +360,19 @@ void VMMDevNotifyGuest(PVMMDEV pThis, uint32_t fAddEvents)
     Log3(("VMMDevNotifyGuest: fAddEvents=%#010x\n", fAddEvents));
 
     /*
-     * Drop notifications if the VM is not running yet/anymore.
+     * Only notify the VM when it's running.
      */
     VMSTATE enmVMState = PDMDevHlpVMState(pThis->pDevIns);
-    if (    enmVMState != VMSTATE_RUNNING
-        &&  enmVMState != VMSTATE_RUNNING_LS)
-        return;
-
-    PDMCritSectEnter(&pThis->CritSect, VERR_IGNORED);
-    vmmdevNotifyGuestWorker(pThis, fAddEvents);
-    PDMCritSectLeave(&pThis->CritSect);
+/** @todo r=bird: Shouldn't there be more states here?  Wouldn't we drop
+ *        notifications now when we're in the process of suspending or
+ *        similar? */
+    if (   enmVMState == VMSTATE_RUNNING
+        || enmVMState == VMSTATE_RUNNING_LS)
+    {
+        PDMCritSectEnter(&pThis->CritSect, VERR_IGNORED);
+        vmmdevNotifyGuestWorker(pThis, fAddEvents);
+        PDMCritSectLeave(&pThis->CritSect);
+    }
 }
 
 /**
@@ -407,7 +437,7 @@ static int vmmdevReqHandler_ReportGuestInfo(PVMMDEV pThis, VMMDevRequestHeader *
         pThis->guestInfo = *pInfo;
 
         /* Check additions interface version. */
-        pThis->fu32AdditionsOk = VBOX_GUEST_INTERFACE_VERSION_OK(pThis->guestInfo.interfaceVersion);
+        pThis->fu32AdditionsOk = VMMDEV_INTERFACE_VERSION_IS_OK(pThis->guestInfo.interfaceVersion);
 
         vmmdevLogGuestOsInfo(&pThis->guestInfo);
 
@@ -426,21 +456,6 @@ static int vmmdevReqHandler_ReportGuestInfo(PVMMDEV pThis, VMMDevRequestHeader *
 
 
 /**
- * Resets heartbeat timer.
- *
- * @param   pThis           The VMMDev state.
- * @returns VBox status code.
- */
-static int vmmDevHeartbeatTimerReset(PVMMDEV pThis)
-{
-    if (pThis->fHBCheckEnabled)
-        return TMTimerSetNano(pThis->pHBCheckTimer, pThis->u64HeartbeatTimeout);
-
-    return VINF_SUCCESS;
-}
-
-
-/**
  * Handles VMMDevReq_GuestHeartbeat.
  *
  * @returns VBox status code that the guest should see.
@@ -448,37 +463,45 @@ static int vmmDevHeartbeatTimerReset(PVMMDEV pThis)
  */
 static int vmmDevReqHandler_GuestHeartbeat(PVMMDEV pThis)
 {
-    int rc = VINF_SUCCESS;
-
-    if (pThis->fHBCheckEnabled)
+    int rc;
+    if (pThis->fHeartbeatActive)
     {
-        ASMAtomicWriteU64(&pThis->uLastHBTime, TMTimerGetNano(pThis->pHBCheckTimer));
-        if (pThis->fHasMissedHB)
+        uint64_t const nsNowTS = TMTimerGetNano(pThis->pFlatlinedTimer);
+        if (!pThis->fFlatlined)
+        { /* likely */ }
+        else
         {
-            LogRel(("VMMDev: GuestHeartBeat: Guest is alive\n"));
-            ASMAtomicWriteBool(&pThis->fHasMissedHB, false);
+            LogRel(("VMMDev: GuestHeartBeat: Guest is alive (gone %'llu ns)\n", nsNowTS - pThis->nsLastHeartbeatTS));
+            ASMAtomicWriteBool(&pThis->fFlatlined, false);
         }
-        rc = vmmDevHeartbeatTimerReset(pThis);
+        ASMAtomicWriteU64(&pThis->nsLastHeartbeatTS, nsNowTS);
+
+        /* Postpone (or restart if we missed a beat) the timeout timer. */
+        rc = TMTimerSetNano(pThis->pFlatlinedTimer, pThis->cNsHeartbeatTimeout);
     }
+    else
+        rc = VINF_SUCCESS;
     return rc;
 }
 
 
 /**
- * Guest heartbeat check timer. Fires if there are no heartbeats for certain time.
- * Timer is set in vmmDevHeartbeatTimerReset.
+ * Timer that fires when where have been no heartbeats for a given time.
+ *
+ * @remarks Does not take the VMMDev critsect.
  */
-static DECLCALLBACK(void) vmmDevHeartBeatCheckTimer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)
+static DECLCALLBACK(void) vmmDevHeartbeatFlatlinedTimer(PPDMDEVINS pDevIns, PTMTIMER pTimer, void *pvUser)
 {
-    PVMMDEV pThis = (PVMMDEV) pvUser;
-    if (pThis->fHBCheckEnabled)
+    PVMMDEV pThis = (PVMMDEV)pvUser;
+    if (pThis->fHeartbeatActive)
     {
-        uint64_t uIntervalNs = TMTimerGetNano(pTimer) - pThis->uLastHBTime;
-        if (!pThis->fHasMissedHB && uIntervalNs >= pThis->u64HeartbeatInterval)
+        uint64_t cNsElapsed = TMTimerGetNano(pTimer) - pThis->nsLastHeartbeatTS;
+        if (   !pThis->fFlatlined
+            && cNsElapsed >= pThis->cNsHeartbeatInterval)
         {
-            LogRel(("VMMDev: HeartBeatCheckTimer: Guest seems to be unresponsive. Last heartbeat received %RU64 seconds ago\n",
-                    uIntervalNs / RT_NS_1SEC_64));
-            ASMAtomicWriteBool(&pThis->fHasMissedHB, true);
+            LogRel(("VMMDev: vmmDevHeartbeatFlatlinedTimer: Guest seems to be unresponsive. Last heartbeat received %RU64 seconds ago\n",
+                    cNsElapsed / RT_NS_1SEC));
+            ASMAtomicWriteBool(&pThis->fFlatlined, true);
         }
     }
 }
@@ -497,30 +520,35 @@ static int vmmDevReqHandler_HeartbeatConfigure(PVMMDEV pThis, VMMDevRequestHeade
     VMMDevReqHeartbeat *pReq = (VMMDevReqHeartbeat *)pReqHdr;
     int rc;
 
-    pReq->cNsInterval = pThis->u64HeartbeatInterval;
+    pReq->cNsInterval = pThis->cNsHeartbeatInterval;
 
-    if (pReq->fEnabled != pThis->fHBCheckEnabled)
+    if (pReq->fEnabled != pThis->fHeartbeatActive)
     {
-        ASMAtomicWriteBool(&pThis->fHBCheckEnabled, pReq->fEnabled);
+        ASMAtomicWriteBool(&pThis->fHeartbeatActive, pReq->fEnabled);
         if (pReq->fEnabled)
         {
-            /* set first timer explicitly */
-            rc = vmmDevHeartbeatTimerReset(pThis);
+            /*
+             * Activate the heartbeat monitor.
+             */
+            pThis->nsLastHeartbeatTS = TMTimerGetNano(pThis->pFlatlinedTimer);
+            rc = TMTimerSetNano(pThis->pFlatlinedTimer, pThis->cNsHeartbeatTimeout);
             if (RT_SUCCESS(rc))
-                LogRel(("VMMDev: Heartbeat checking timer set to trigger every %RU64 milliseconds\n",
-                        pThis->u64HeartbeatTimeout / RT_NS_1MS));
+                LogRel(("VMMDev: Heartbeat flatline timer set to trigger after %'RU64 ns\n", pThis->cNsHeartbeatTimeout));
             else
-                LogRel(("VMMDev: Cannot create heartbeat check timer, rc=%Rrc\n", rc));
+                LogRel(("VMMDev: Error starting flatline timer (heartbeat): %Rrc\n", rc));
         }
         else
         {
-            rc = TMTimerStop(pThis->pHBCheckTimer);
-            LogRel(("VMMDev: Heartbeat checking timer has been stopped, rc=%Rrc\n", rc));
+            /*
+             * Deactivate the heartbeat monitor.
+             */
+            rc = TMTimerStop(pThis->pFlatlinedTimer);
+            LogRel(("VMMDev: Heartbeat checking timer has been stopped (rc=%Rrc)\n", rc));
         }
     }
     else
     {
-        LogRel(("VMMDev: vmmDevReqHandler_HeartbeatConfigure: fHBCheckEnabled=%RTbool\n", pThis->fHBCheckEnabled));
+        LogRel(("VMMDev: vmmDevReqHandler_HeartbeatConfigure: No change (fHeartbeatActive=%RTbool).\n", pThis->fHeartbeatActive));
         rc = VINF_SUCCESS;
     }
 
@@ -611,7 +639,7 @@ static int vmmdevReqHandler_ReportGuestInfo2(PVMMDEV pThis, VMMDevRequestHeader
      * Be less strict towards older additions (< v4.1.50).
      */
     AssertCompile(sizeof(pThis->guestInfo2.szName) == sizeof(pInfo2->szName));
-    AssertReturn(memchr(pInfo2->szName, '\0', sizeof(pInfo2->szName)) != NULL, VERR_INVALID_PARAMETER);
+    AssertReturn(RTStrEnd(pInfo2->szName, sizeof(pInfo2->szName)) != NULL, VERR_INVALID_PARAMETER);
     const char *pszName = pInfo2->szName;
 
     /* The version number which shouldn't be there. */
@@ -673,7 +701,7 @@ static int vmmdevReqHandler_ReportGuestInfo2(PVMMDEV pThis, VMMDevRequestHeader
         pThis->pDrv->pfnUpdateGuestInfo2(pThis->pDrv, uFullVersion, pszName, pInfo2->additionsRevision, pInfo2->additionsFeatures);
 
     /* Clear our IRQ in case it was high for whatever reason. */
-    PDMDevHlpPCISetIrqNoWait (pThis->pDevIns, 0, 0);
+    PDMDevHlpPCISetIrqNoWait(pThis->pDevIns, 0, 0);
 
     return VINF_SUCCESS;
 }
@@ -685,13 +713,13 @@ static int vmmdevReqHandler_ReportGuestInfo2(PVMMDEV pThis, VMMDevRequestHeader
  * @returns Pointer to a facility status entry on success, NULL on failure
  *          (table full).
  * @param   pThis           The VMMDev instance data.
- * @param   uFacility       The facility type code - VBoxGuestFacilityType.
+ * @param   enmFacility     The facility type code.
  * @param   fFixed          This is set when allocating the standard entries
  *                          from the constructor.
  * @param   pTimeSpecNow    Optionally giving the entry timestamp to use (ctor).
  */
 static PVMMDEVFACILITYSTATUSENTRY
-vmmdevAllocFacilityStatusEntry(PVMMDEV pThis, uint32_t uFacility, bool fFixed, PCRTTIMESPEC pTimeSpecNow)
+vmmdevAllocFacilityStatusEntry(PVMMDEV pThis, VBoxGuestFacilityType enmFacility, bool fFixed, PCRTTIMESPEC pTimeSpecNow)
 {
     /* If full, expunge one inactive entry. */
     if (pThis->cFacilityStatuses == RT_ELEMENTS(pThis->aFacilityStatuses))
@@ -699,7 +727,7 @@ vmmdevAllocFacilityStatusEntry(PVMMDEV pThis, uint32_t uFacility, bool fFixed, P
         uint32_t i = pThis->cFacilityStatuses;
         while (i-- > 0)
         {
-            if (   pThis->aFacilityStatuses[i].uStatus == VBoxGuestFacilityStatus_Inactive
+            if (   pThis->aFacilityStatuses[i].enmStatus == VBoxGuestFacilityStatus_Inactive
                 && !pThis->aFacilityStatuses[i].fFixed)
             {
                 pThis->cFacilityStatuses--;
@@ -719,7 +747,7 @@ vmmdevAllocFacilityStatusEntry(PVMMDEV pThis, uint32_t uFacility, bool fFixed, P
     /* Find location in array (it's sorted). */
     uint32_t i = pThis->cFacilityStatuses;
     while (i-- > 0)
-        if (pThis->aFacilityStatuses[i].uFacility < uFacility)
+        if ((uint32_t)pThis->aFacilityStatuses[i].enmFacility < (uint32_t)enmFacility)
             break;
     i++;
 
@@ -731,12 +759,13 @@ vmmdevAllocFacilityStatusEntry(PVMMDEV pThis, uint32_t uFacility, bool fFixed, P
     pThis->cFacilityStatuses++;
 
     /* Initialize. */
-    pThis->aFacilityStatuses[i].uFacility   = uFacility;
-    pThis->aFacilityStatuses[i].uStatus     = VBoxGuestFacilityStatus_Inactive;
-    pThis->aFacilityStatuses[i].fFixed      = fFixed;
-    pThis->aFacilityStatuses[i].fPadding    = 0;
-    pThis->aFacilityStatuses[i].fFlags      = 0;
-    pThis->aFacilityStatuses[i].uPadding    = 0;
+    pThis->aFacilityStatuses[i].enmFacility  = enmFacility;
+    pThis->aFacilityStatuses[i].enmStatus    = VBoxGuestFacilityStatus_Inactive;
+    pThis->aFacilityStatuses[i].fFixed       = fFixed;
+    pThis->aFacilityStatuses[i].afPadding[0] = 0;
+    pThis->aFacilityStatuses[i].afPadding[1] = 0;
+    pThis->aFacilityStatuses[i].afPadding[2] = 0;
+    pThis->aFacilityStatuses[i].fFlags       = 0;
     if (pTimeSpecNow)
         pThis->aFacilityStatuses[i].TimeSpecTS = *pTimeSpecNow;
     else
@@ -752,20 +781,20 @@ vmmdevAllocFacilityStatusEntry(PVMMDEV pThis, uint32_t uFacility, bool fFixed, P
  * @returns Pointer to a facility status entry on success, NULL on failure
  *          (table full).
  * @param   pThis           The VMMDev instance data.
- * @param   uFacility       The facility type code - VBoxGuestFacilityType.
+ * @param   enmFacility     The facility type code.
  */
-static PVMMDEVFACILITYSTATUSENTRY vmmdevGetFacilityStatusEntry(PVMMDEV pThis, uint32_t uFacility)
+static PVMMDEVFACILITYSTATUSENTRY vmmdevGetFacilityStatusEntry(PVMMDEV pThis, VBoxGuestFacilityType enmFacility)
 {
     /** @todo change to binary search. */
     uint32_t i = pThis->cFacilityStatuses;
     while (i-- > 0)
     {
-        if (pThis->aFacilityStatuses[i].uFacility == uFacility)
+        if (pThis->aFacilityStatuses[i].enmFacility == enmFacility)
             return &pThis->aFacilityStatuses[i];
-        if (pThis->aFacilityStatuses[i].uFacility < uFacility)
+        if ((uint32_t)pThis->aFacilityStatuses[i].enmFacility < (uint32_t)enmFacility)
             break;
     }
-    return vmmdevAllocFacilityStatusEntry(pThis, uFacility, false /*fFixed*/, NULL);
+    return vmmdevAllocFacilityStatusEntry(pThis, enmFacility, false /*fFixed*/, NULL);
 }
 
 
@@ -802,7 +831,7 @@ static int vmmdevReqHandler_ReportGuestStatus(PVMMDEV pThis, VMMDevRequestHeader
         while (i-- > 0)
         {
             pThis->aFacilityStatuses[i].TimeSpecTS = Now;
-            pThis->aFacilityStatuses[i].uStatus    = (uint16_t)pStatus->status;
+            pThis->aFacilityStatuses[i].enmStatus  = pStatus->status;
             pThis->aFacilityStatuses[i].fFlags     = pStatus->flags;
         }
     }
@@ -816,7 +845,7 @@ static int vmmdevReqHandler_ReportGuestStatus(PVMMDEV pThis, VMMDevRequestHeader
         }
 
         pEntry->TimeSpecTS = Now;
-        pEntry->uStatus    = (uint16_t)pStatus->status; /** @todo r=andy uint16_t vs. 32-bit enum. */
+        pEntry->enmStatus  = pStatus->status;
         pEntry->fFlags     = pStatus->flags;
     }
 
@@ -1053,9 +1082,9 @@ static int vmmdevReqHandler_SetPointerShape(PVMMDEV pThis, VMMDevRequestHeader *
         return VERR_INVALID_PARAMETER;
     }
 
-    bool fVisible = (pReq->fFlags & VBOX_MOUSE_POINTER_VISIBLE) != 0;
-    bool fAlpha = (pReq->fFlags & VBOX_MOUSE_POINTER_ALPHA) != 0;
-    bool fShape = (pReq->fFlags & VBOX_MOUSE_POINTER_SHAPE) != 0;
+    bool fVisible = RT_BOOL(pReq->fFlags & VBOX_MOUSE_POINTER_VISIBLE);
+    bool fAlpha   = RT_BOOL(pReq->fFlags & VBOX_MOUSE_POINTER_ALPHA);
+    bool fShape   = RT_BOOL(pReq->fFlags & VBOX_MOUSE_POINTER_SHAPE);
 
     Log(("VMMDevReq_SetPointerShape: visible: %d, alpha: %d, shape = %d, width: %d, height: %d\n",
          fVisible, fAlpha, fShape, pReq->width, pReq->height));
@@ -1107,12 +1136,13 @@ static int vmmdevReqHandler_GetHostTime(PVMMDEV pThis, VMMDevRequestHeader *pReq
     VMMDevReqHostTime *pReq = (VMMDevReqHostTime *)pReqHdr;
     AssertMsgReturn(pReq->header.size == sizeof(*pReq), ("%u\n", pReq->header.size), VERR_INVALID_PARAMETER);
 
-    if (RT_UNLIKELY(pThis->fGetHostTimeDisabled))
-        return VERR_NOT_SUPPORTED;
-
-    RTTIMESPEC now;
-    pReq->time = RTTimeSpecGetMilli(PDMDevHlpTMUtcNow(pThis->pDevIns, &now));
-    return VINF_SUCCESS;
+    if (RT_LIKELY(!pThis->fGetHostTimeDisabled))
+    {
+        RTTIMESPEC now;
+        pReq->time = RTTimeSpecGetMilli(PDMDevHlpTMUtcNow(pThis->pDevIns, &now));
+        return VINF_SUCCESS;
+    }
+    return VERR_NOT_SUPPORTED;
 }
 
 
@@ -1157,8 +1187,8 @@ static int vmmdevReqHandler_SetHypervisorInfo(PVMMDEV pThis, VMMDevRequestHeader
         {
             /* new reservation */
             rc = PGMR3MappingsFix(pVM, pReq->hypervisorStart, pReq->hypervisorSize);
-            LogRel(("VMMDev: Guest reported fixed hypervisor window at 0%010x (size = %#x, rc = %Rrc)\n", pReq->hypervisorStart,
-                    pReq->hypervisorSize, rc));
+            LogRel(("VMMDev: Guest reported fixed hypervisor window at 0%010x LB %#x (rc=%Rrc)\n",
+                    pReq->hypervisorStart, pReq->hypervisorSize, rc));
         }
         else if (RT_FAILURE(rc))
             rc = VERR_TRY_AGAIN;
@@ -1258,11 +1288,10 @@ static int vmmdevReqHandler_GetDisplayChangeRequest(PVMMDEV pThis, VMMDevRequest
 
 /**
  * @todo It looks like a multi-monitor guest which only uses
- *        @a VMMDevReq_GetDisplayChangeRequest (not the *2 version)
- *        will get into a @a VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST event
- *        loop if it tries to acknowlege host requests for additional
- *        monitors.  Should the loop which checks for those requests
- *        be removed?
+ *        @c VMMDevReq_GetDisplayChangeRequest (not the *2 version) will get
+ *        into a @c VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST event loop if it tries
+ *        to acknowlege host requests for additional monitors.  Should the loop
+ *        which checks for those requests be removed?
  */
 
     DISPLAYCHANGEREQUEST *pDispRequest = &pThis->displayChangeData.aRequests[0];
@@ -1575,11 +1604,7 @@ static int vmmdevReqHandler_AcknowledgeEvents(PVMMDEV pThis, VMMDevRequestHeader
     VMMDevEvents *pReq = (VMMDevEvents *)pReqHdr;
     AssertMsgReturn(pReq->header.size == sizeof(*pReq), ("%u\n", pReq->header.size), VERR_INVALID_PARAMETER);
 
-    if (VBOX_GUEST_INTERFACE_VERSION_1_03(pThis))
-    {
-        vmmdevSetIRQ_Legacy(pThis);
-    }
-    else
+    if (!VMMDEV_INTERFACE_VERSION_IS_1_03(pThis))
     {
         if (pThis->fNewGuestFilterMask)
         {
@@ -1593,6 +1618,8 @@ static int vmmdevReqHandler_AcknowledgeEvents(PVMMDEV pThis, VMMDevRequestHeader
         pThis->pVMMDevRAMR3->V.V1_04.fHaveEvents = false;
         PDMDevHlpPCISetIrqNoWait(pThis->pDevIns, 0, 0);
     }
+    else
+        vmmdevSetIRQ_Legacy(pThis);
     return VINF_SUCCESS;
 }
 
@@ -1633,14 +1660,14 @@ static int vmmdevReqHandler_HGCMConnect(PVMMDEV pThis, VMMDevRequestHeader *pReq
     VMMDevHGCMConnect *pReq = (VMMDevHGCMConnect *)pReqHdr;
     AssertMsgReturn(pReq->header.header.size >= sizeof(*pReq), ("%u\n", pReq->header.header.size), VERR_INVALID_PARAMETER); /** @todo Not sure why this is >= ... */
 
-    if (!pThis->pHGCMDrv)
+    if (pThis->pHGCMDrv)
     {
-        Log(("VMMDevReq_HGCMConnect: HGCM Connector is NULL!\n"));
-        return VERR_NOT_SUPPORTED;
+        Log(("VMMDevReq_HGCMConnect\n"));
+        return vmmdevHGCMConnect(pThis, pReq, GCPhysReqHdr);
     }
 
-    Log(("VMMDevReq_HGCMConnect\n"));
-    return vmmdevHGCMConnect(pThis, pReq, GCPhysReqHdr);
+    Log(("VMMDevReq_HGCMConnect: HGCM Connector is NULL!\n"));
+    return VERR_NOT_SUPPORTED;
 }
 
 
@@ -1657,14 +1684,14 @@ static int vmmdevReqHandler_HGCMDisconnect(PVMMDEV pThis, VMMDevRequestHeader *p
     VMMDevHGCMDisconnect *pReq = (VMMDevHGCMDisconnect *)pReqHdr;
     AssertMsgReturn(pReq->header.header.size >= sizeof(*pReq), ("%u\n", pReq->header.header.size), VERR_INVALID_PARAMETER);  /** @todo Not sure why this >= ... */
 
-    if (!pThis->pHGCMDrv)
+    if (pThis->pHGCMDrv)
     {
-        Log(("VMMDevReq_VMMDevHGCMDisconnect: HGCM Connector is NULL!\n"));
-        return VERR_NOT_SUPPORTED;
+        Log(("VMMDevReq_VMMDevHGCMDisconnect\n"));
+        return vmmdevHGCMDisconnect(pThis, pReq, GCPhysReqHdr);
     }
 
-    Log(("VMMDevReq_VMMDevHGCMDisconnect\n"));
-    return vmmdevHGCMDisconnect(pThis, pReq, GCPhysReqHdr);
+    Log(("VMMDevReq_VMMDevHGCMDisconnect: HGCM Connector is NULL!\n"));
+    return VERR_NOT_SUPPORTED;
 }
 
 
@@ -1681,22 +1708,22 @@ static int vmmdevReqHandler_HGCMCall(PVMMDEV pThis, VMMDevRequestHeader *pReqHdr
     VMMDevHGCMCall *pReq = (VMMDevHGCMCall *)pReqHdr;
     AssertMsgReturn(pReq->header.header.size >= sizeof(*pReq), ("%u\n", pReq->header.header.size), VERR_INVALID_PARAMETER);
 
-    if (!pThis->pHGCMDrv)
+    if (pThis->pHGCMDrv)
     {
-        Log(("VMMDevReq_HGCMCall: HGCM Connector is NULL!\n"));
-        return VERR_NOT_SUPPORTED;
-    }
-
-    Log2(("VMMDevReq_HGCMCall: sizeof(VMMDevHGCMRequest) = %04X\n", sizeof(VMMDevHGCMCall)));
-    Log2(("%.*Rhxd\n", pReq->header.header.size, pReq));
+        Log2(("VMMDevReq_HGCMCall: sizeof(VMMDevHGCMRequest) = %04X\n", sizeof(VMMDevHGCMCall)));
+        Log2(("%.*Rhxd\n", pReq->header.header.size, pReq));
 
 #ifdef VBOX_WITH_64_BITS_GUESTS
-    bool f64Bits = (pReq->header.header.requestType == VMMDevReq_HGCMCall64);
+        bool f64Bits = (pReq->header.header.requestType == VMMDevReq_HGCMCall64);
 #else
-    bool f64Bits = false;
+        bool f64Bits = false;
 #endif /* VBOX_WITH_64_BITS_GUESTS */
 
-    return vmmdevHGCMCall(pThis, pReq, pReq->header.header.size, GCPhysReqHdr, f64Bits);
+        return vmmdevHGCMCall(pThis, pReq, pReq->header.header.size, GCPhysReqHdr, f64Bits);
+    }
+
+    Log(("VMMDevReq_HGCMCall: HGCM Connector is NULL!\n"));
+    return VERR_NOT_SUPPORTED;
 }
 
 /**
@@ -1712,14 +1739,14 @@ static int vmmdevReqHandler_HGCMCancel(PVMMDEV pThis, VMMDevRequestHeader *pReqH
     VMMDevHGCMCancel *pReq = (VMMDevHGCMCancel *)pReqHdr;
     AssertMsgReturn(pReq->header.header.size >= sizeof(*pReq), ("%u\n", pReq->header.header.size), VERR_INVALID_PARAMETER);  /** @todo Not sure why this >= ... */
 
-    if (!pThis->pHGCMDrv)
+    if (pThis->pHGCMDrv)
     {
-        Log(("VMMDevReq_VMMDevHGCMCancel: HGCM Connector is NULL!\n"));
-        return VERR_NOT_SUPPORTED;
+        Log(("VMMDevReq_VMMDevHGCMCancel\n"));
+        return vmmdevHGCMCancel(pThis, pReq, GCPhysReqHdr);
     }
 
-    Log(("VMMDevReq_VMMDevHGCMCancel\n"));
-    return vmmdevHGCMCancel(pThis, pReq, GCPhysReqHdr);
+    Log(("VMMDevReq_VMMDevHGCMCancel: HGCM Connector is NULL!\n"));
+    return VERR_NOT_SUPPORTED;
 }
 
 
@@ -1735,14 +1762,14 @@ static int vmmdevReqHandler_HGCMCancel2(PVMMDEV pThis, VMMDevRequestHeader *pReq
     VMMDevHGCMCancel2 *pReq = (VMMDevHGCMCancel2 *)pReqHdr;
     AssertMsgReturn(pReq->header.size >= sizeof(*pReq), ("%u\n", pReq->header.size), VERR_INVALID_PARAMETER);  /** @todo Not sure why this >= ... */
 
-    if (!pThis->pHGCMDrv)
+    if (pThis->pHGCMDrv)
     {
-        Log(("VMMDevReq_HGCMConnect2: HGCM Connector is NULL!\n"));
-        return VERR_NOT_SUPPORTED;
+        Log(("VMMDevReq_HGCMCancel2\n"));
+        return vmmdevHGCMCancel2(pThis, pReq->physReqToCancel);
     }
 
-    Log(("VMMDevReq_VMMDevHGCMCancel\n"));
-    return vmmdevHGCMCancel2(pThis, pReq->physReqToCancel);
+    Log(("VMMDevReq_HGCMConnect2: HGCM Connector is NULL!\n"));
+    return VERR_NOT_SUPPORTED;
 }
 
 #endif /* VBOX_WITH_HGCM */
@@ -1762,14 +1789,14 @@ static int vmmdevReqHandler_VideoAccelEnable(PVMMDEV pThis, VMMDevRequestHeader
 
     if (!pThis->pDrv)
     {
-        Log(("VMMDevReq_VideoAccelEnable Connector is NULL!!!\n"));
+        Log(("VMMDevReq_VideoAccelEnable Connector is NULL!!\n"));
         return VERR_NOT_SUPPORTED;
     }
 
     if (pReq->cbRingBuffer != VBVA_RING_BUFFER_SIZE)
     {
-        /* The guest driver seems compiled with another headers. */
-        Log(("VMMDevReq_VideoAccelEnable guest ring buffer size %d, should be %d!!!\n", pReq->cbRingBuffer, VBVA_RING_BUFFER_SIZE));
+        /* The guest driver seems compiled with different headers. */
+        LogRelMax(16,("VMMDevReq_VideoAccelEnable guest ring buffer size %#x, should be %#x!!\n", pReq->cbRingBuffer, VBVA_RING_BUFFER_SIZE));
         return VERR_INVALID_PARAMETER;
     }
 
@@ -2300,8 +2327,12 @@ static int vmmdevReqHandler_RegisterSharedModule(PVMMDEV pThis, VMMDevRequestHea
     AssertMsgReturn(pReq->header.size == RT_UOFFSETOF(VMMDevSharedModuleRegistrationRequest, aRegions[pReq->cRegions]),
                     ("%u cRegions=%u\n", pReq->header.size, pReq->cRegions), VERR_INVALID_PARAMETER);
 
-    AssertReturn(memchr(pReq->szName, '\0', sizeof(pReq->szName)), VERR_INVALID_PARAMETER);
-    AssertReturn(memchr(pReq->szVersion, '\0', sizeof(pReq->szVersion)), VERR_INVALID_PARAMETER);
+    AssertReturn(RTStrEnd(pReq->szName, sizeof(pReq->szName)), VERR_INVALID_PARAMETER);
+    AssertReturn(RTStrEnd(pReq->szVersion, sizeof(pReq->szVersion)), VERR_INVALID_PARAMETER);
+    int rc = RTStrValidateEncoding(pReq->szName);
+    AssertRCReturn(rc, rc);
+    rc = RTStrValidateEncoding(pReq->szVersion);
+    AssertRCReturn(rc, rc);
 
     /*
      * Forward the request to the VMM.
@@ -2326,8 +2357,12 @@ static int vmmdevReqHandler_UnregisterSharedModule(PVMMDEV pThis, VMMDevRequestH
     AssertMsgReturn(pReq->header.size == sizeof(VMMDevSharedModuleUnregistrationRequest),
                     ("%u\n", pReq->header.size), VERR_INVALID_PARAMETER);
 
-    AssertReturn(memchr(pReq->szName, '\0', sizeof(pReq->szName)), VERR_INVALID_PARAMETER);
-    AssertReturn(memchr(pReq->szVersion, '\0', sizeof(pReq->szVersion)), VERR_INVALID_PARAMETER);
+    AssertReturn(RTStrEnd(pReq->szName, sizeof(pReq->szName)), VERR_INVALID_PARAMETER);
+    AssertReturn(RTStrEnd(pReq->szVersion, sizeof(pReq->szVersion)), VERR_INVALID_PARAMETER);
+    int rc = RTStrValidateEncoding(pReq->szName);
+    AssertRCReturn(rc, rc);
+    rc = RTStrValidateEncoding(pReq->szVersion);
+    AssertRCReturn(rc, rc);
 
     /*
      * Forward the request to the VMM.
@@ -2839,7 +2874,7 @@ static DECLCALLBACK(int) vmmdevRequestHandler(PPDMDEVINS pDevIns, void *pvUser,
 
 
 /**
- * @interface_method_impl{FNPCIIOREGIONMAP, MMIO/MMIO2 regions}
+ * @callback_method_impl{FNPCIIOREGIONMAP,MMIO/MMIO2 regions}
  */
 static DECLCALLBACK(int)
 vmmdevIORAMRegionMap(PPCIDEVICE pPciDev, int iRegion, RTGCPHYS GCPhysAddress, uint32_t cb, PCIADDRESSSPACE enmType)
@@ -2906,7 +2941,7 @@ vmmdevIORAMRegionMap(PPCIDEVICE pPciDev, int iRegion, RTGCPHYS GCPhysAddress, ui
 
 
 /**
- * @interface_method_impl{FNPCIIOREGIONMAP, I/O Port Region}
+ * @callback_method_impl{FNPCIIOREGIONMAP,I/O Port Region}
  */
 static DECLCALLBACK(int)
 vmmdevIOPortRegionMap(PPCIDEVICE pPciDev, int iRegion, RTGCPHYS GCPhysAddress, uint32_t cb, PCIADDRESSSPACE enmType)
@@ -3077,7 +3112,7 @@ static DECLCALLBACK(int) vmmdevQueryStatusLed(PPDMILEDPORTS pInterface, unsigned
 /* -=-=-=-=-=- PDMIVMMDEVPORT (VMMDEV::IPort) -=-=-=-=-=- */
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnQueryAbsoluteMouse}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnQueryAbsoluteMouse}
  */
 static DECLCALLBACK(int) vmmdevIPort_QueryAbsoluteMouse(PPDMIVMMDEVPORT pInterface, int32_t *pxAbs, int32_t *pyAbs)
 {
@@ -3096,7 +3131,7 @@ static DECLCALLBACK(int) vmmdevIPort_QueryAbsoluteMouse(PPDMIVMMDEVPORT pInterfa
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnSetAbsoluteMouse}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnSetAbsoluteMouse}
  */
 static DECLCALLBACK(int) vmmdevIPort_SetAbsoluteMouse(PPDMIVMMDEVPORT pInterface, int32_t xAbs, int32_t yAbs)
 {
@@ -3117,7 +3152,7 @@ static DECLCALLBACK(int) vmmdevIPort_SetAbsoluteMouse(PPDMIVMMDEVPORT pInterface
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnQueryMouseCapabilities}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnQueryMouseCapabilities}
  */
 static DECLCALLBACK(int) vmmdevIPort_QueryMouseCapabilities(PPDMIVMMDEVPORT pInterface, uint32_t *pfCapabilities)
 {
@@ -3129,7 +3164,7 @@ static DECLCALLBACK(int) vmmdevIPort_QueryMouseCapabilities(PPDMIVMMDEVPORT pInt
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnUpdateMouseCapabilities}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnUpdateMouseCapabilities}
  */
 static DECLCALLBACK(int)
 vmmdevIPort_UpdateMouseCapabilities(PPDMIVMMDEVPORT pInterface, uint32_t fCapsAdded, uint32_t fCapsRemoved)
@@ -3154,7 +3189,7 @@ vmmdevIPort_UpdateMouseCapabilities(PPDMIVMMDEVPORT pInterface, uint32_t fCapsAd
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnRequestDisplayChange}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnRequestDisplayChange}
  */
 static DECLCALLBACK(int)
 vmmdevIPort_RequestDisplayChange(PPDMIVMMDEVPORT pInterface, uint32_t cx, uint32_t cy, uint32_t cBits, uint32_t idxDisplay,
@@ -3218,7 +3253,7 @@ vmmdevIPort_RequestDisplayChange(PPDMIVMMDEVPORT pInterface, uint32_t cx, uint32
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnRequestSeamlessChange}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnRequestSeamlessChange}
  */
 static DECLCALLBACK(int) vmmdevIPort_RequestSeamlessChange(PPDMIVMMDEVPORT pInterface, bool fEnabled)
 {
@@ -3244,7 +3279,7 @@ static DECLCALLBACK(int) vmmdevIPort_RequestSeamlessChange(PPDMIVMMDEVPORT pInte
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnSetMemoryBalloon}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnSetMemoryBalloon}
  */
 static DECLCALLBACK(int) vmmdevIPort_SetMemoryBalloon(PPDMIVMMDEVPORT pInterface, uint32_t cMbBalloon)
 {
@@ -3267,7 +3302,7 @@ static DECLCALLBACK(int) vmmdevIPort_SetMemoryBalloon(PPDMIVMMDEVPORT pInterface
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnVRDPChange}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnVRDPChange}
  */
 static DECLCALLBACK(int) vmmdevIPort_VRDPChange(PPDMIVMMDEVPORT pInterface, bool fVRDPEnabled, uint32_t uVRDPExperienceLevel)
 {
@@ -3291,7 +3326,7 @@ static DECLCALLBACK(int) vmmdevIPort_VRDPChange(PPDMIVMMDEVPORT pInterface, bool
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnSetStatisticsInterval}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnSetStatisticsInterval}
  */
 static DECLCALLBACK(int) vmmdevIPort_SetStatisticsInterval(PPDMIVMMDEVPORT pInterface, uint32_t cSecsStatInterval)
 {
@@ -3317,7 +3352,7 @@ static DECLCALLBACK(int) vmmdevIPort_SetStatisticsInterval(PPDMIVMMDEVPORT pInte
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnSetCredentials}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnSetCredentials}
  */
 static DECLCALLBACK(int) vmmdevIPort_SetCredentials(PPDMIVMMDEVPORT pInterface, const char *pszUsername,
                                                     const char *pszPassword, const char *pszDomain, uint32_t fFlags)
@@ -3356,7 +3391,7 @@ static DECLCALLBACK(int) vmmdevIPort_SetCredentials(PPDMIVMMDEVPORT pInterface,
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnVBVAChange}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnVBVAChange}
  *
  * Notification from the Display.  Especially useful when acceleration is
  * disabled after a video mode change.
@@ -3371,7 +3406,7 @@ static DECLCALLBACK(void) vmmdevIPort_VBVAChange(PPDMIVMMDEVPORT pInterface, boo
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnCpuHotUnplug}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnCpuHotUnplug}
  */
 static DECLCALLBACK(int) vmmdevIPort_CpuHotUnplug(PPDMIVMMDEVPORT pInterface, uint32_t idCpuCore, uint32_t idCpuPackage)
 {
@@ -3397,7 +3432,7 @@ static DECLCALLBACK(int) vmmdevIPort_CpuHotUnplug(PPDMIVMMDEVPORT pInterface, ui
 }
 
 /**
- * @interface_method_impl{PDMIVMMDEVPORT, pfnCpuHotPlug}
+ * @interface_method_impl{PDMIVMMDEVPORT,pfnCpuHotPlug}
  */
 static DECLCALLBACK(int) vmmdevIPort_CpuHotPlug(PPDMIVMMDEVPORT pInterface, uint32_t idCpuCore, uint32_t idCpuPackage)
 {
@@ -3426,7 +3461,7 @@ static DECLCALLBACK(int) vmmdevIPort_CpuHotPlug(PPDMIVMMDEVPORT pInterface, uint
 /* -=-=-=-=-=- Saved State -=-=-=-=-=- */
 
 /**
- * @callback_method_impl{NSSMDEVLIVEEXEC}
+ * @callback_method_impl{FNSSMDEVLIVEEXEC}
  */
 static DECLCALLBACK(int) vmmdevLiveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32_t uPass)
 {
@@ -3483,12 +3518,18 @@ static DECLCALLBACK(int) vmmdevSaveExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM)
     SSMR3PutU32(pSSM, pThis->cFacilityStatuses);
     for (uint32_t i = 0; i < pThis->cFacilityStatuses; i++)
     {
-        SSMR3PutU32(pSSM, pThis->aFacilityStatuses[i].uFacility);
+        SSMR3PutU32(pSSM, pThis->aFacilityStatuses[i].enmFacility);
         SSMR3PutU32(pSSM, pThis->aFacilityStatuses[i].fFlags);
-        SSMR3PutU16(pSSM, pThis->aFacilityStatuses[i].uStatus);
+        SSMR3PutU16(pSSM, (uint16_t)pThis->aFacilityStatuses[i].enmStatus);
         SSMR3PutS64(pSSM, RTTimeSpecGetNano(&pThis->aFacilityStatuses[i].TimeSpecTS));
     }
 
+    /* Heartbeat: */
+    SSMR3PutBool(pSSM, pThis->fHeartbeatActive);
+    SSMR3PutBool(pSSM, pThis->fFlatlined);
+    SSMR3PutU64(pSSM, pThis->nsLastHeartbeatTS);
+    TMR3TimerSave(pThis->pFlatlinedTimer, pSSM);
+
     PDMCritSectLeave(&pThis->CritSect);
     return VINF_SUCCESS;
 }
@@ -3600,16 +3641,30 @@ static DECLCALLBACK(int) vmmdevLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uin
             rc = SSMR3GetS64(pSSM, &iTimeStampNano);
             AssertRCReturn(rc, rc);
 
-            PVMMDEVFACILITYSTATUSENTRY pEntry = vmmdevGetFacilityStatusEntry(pThis, uFacility);
+            PVMMDEVFACILITYSTATUSENTRY pEntry = vmmdevGetFacilityStatusEntry(pThis, (VBoxGuestFacilityType)uFacility);
             AssertLogRelMsgReturn(pEntry,
                                   ("VMMDev: Ran out of entries restoring the guest facility statuses. Saved state has %u.\n", cFacilityStatuses),
                                   VERR_OUT_OF_RESOURCES);
-            pEntry->uStatus = uStatus;
-            pEntry->fFlags  = fFlags;
+            pEntry->enmStatus = (VBoxGuestFacilityStatus)uStatus;
+            pEntry->fFlags    = fFlags;
             RTTimeSpecSetNano(&pEntry->TimeSpecTS, iTimeStampNano);
         }
     }
 
+    /*
+     * Heartbeat.
+     */
+    if (uVersion >= VMMDEV_SAVED_STATE_VERSION_HEARTBEAT)
+    {
+        SSMR3GetBool(pSSM, (bool *)&pThis->fHeartbeatActive);
+        SSMR3GetBool(pSSM, (bool *)&pThis->fFlatlined);
+        SSMR3GetU64(pSSM, (uint64_t *)&pThis->nsLastHeartbeatTS);
+        rc = TMR3TimerLoad(pThis->pFlatlinedTimer, pSSM);
+        AssertRCReturn(rc, rc);
+        if (pThis->fFlatlined)
+            LogRel(("vmmdevLoadState: Guest has flatlined. Last heartbeat %'RU64 ns before state was saved.\n",
+                    TMTimerGetNano(pThis->pFlatlinedTimer) - pThis->nsLastHeartbeatTS));
+    }
 
     /*
      * On a resume, we send the capabilities changed message so
@@ -3642,11 +3697,11 @@ static DECLCALLBACK(int) vmmdevLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uin
             if (pThis->pDrv->pfnUpdateGuestStatus)
             {
                 for (uint32_t i = 0; i < pThis->cFacilityStatuses; i++) /* ascending order! */
-                    if (   pThis->aFacilityStatuses[i].uStatus != VBoxGuestFacilityStatus_Inactive
+                    if (   pThis->aFacilityStatuses[i].enmStatus != VBoxGuestFacilityStatus_Inactive
                         || !pThis->aFacilityStatuses[i].fFixed)
                         pThis->pDrv->pfnUpdateGuestStatus(pThis->pDrv,
-                                                          pThis->aFacilityStatuses[i].uFacility,
-                                                          pThis->aFacilityStatuses[i].uStatus,
+                                                          pThis->aFacilityStatuses[i].enmFacility,
+                                                          (uint16_t)pThis->aFacilityStatuses[i].enmStatus,
                                                           pThis->aFacilityStatuses[i].fFlags,
                                                           &pThis->aFacilityStatuses[i].TimeSpecTS);
             }
@@ -3759,7 +3814,7 @@ static DECLCALLBACK(void) vmmdevReset(PPDMDEVINS pDevIns)
     uint32_t iFacility = pThis->cFacilityStatuses;
     while (iFacility-- > 0)
     {
-        pThis->aFacilityStatuses[iFacility].uStatus    = VBoxGuestFacilityStatus_Inactive;
+        pThis->aFacilityStatuses[iFacility].enmStatus  = VBoxGuestFacilityStatus_Inactive;
         pThis->aFacilityStatuses[iFacility].TimeSpecTS = TimeStampNow;
     }
 
@@ -3787,6 +3842,16 @@ static DECLCALLBACK(void) vmmdevReset(PPDMDEVINS pDevIns)
 #endif
 
     /*
+     * Deactive heartbeat.
+     */
+    if (pThis->fHeartbeatActive)
+    {
+        TMTimerStop(pThis->pFlatlinedTimer);
+        pThis->fFlatlined       = false;
+        pThis->fHeartbeatActive = true;
+    }
+
+    /*
      * Clear the event variables.
      *
      * XXX By design we should NOT clear pThis->u32HostEventFlags because it is designed
@@ -3807,7 +3872,8 @@ static DECLCALLBACK(void) vmmdevReset(PPDMDEVINS pDevIns)
     if (fCapsChanged && pThis->pDrv && pThis->pDrv->pfnUpdateGuestCapabilities)
         pThis->pDrv->pfnUpdateGuestCapabilities(pThis->pDrv, pThis->guestCaps);
 
-    /* Generate a unique session id for this VM; it will be changed for each start, reset or restore.
+    /*
+     * Generate a unique session id for this VM; it will be changed for each start, reset or restore.
      * This can be used for restore detection inside the guest.
      */
     pThis->idSession = ASMReadTSC();
@@ -4003,21 +4069,25 @@ static DECLCALLBACK(int) vmmdevConstruct(PPDMDEVINS pDevIns, int iInstance, PCFG
         return PDMDEV_SET_ERROR(pDevIns, rc,
                                 N_("Configuration error: Failed querying \"GuestCoreDumpCount\" as a 32-bit unsigned integer"));
 
-    rc = CFGMR3QueryU64Def(pCfg, "HeartbeatInterval", &pThis->u64HeartbeatInterval, HEARTBEAT_DEFAULT_INTERVAL);
+    rc = CFGMR3QueryU64Def(pCfg, "HeartbeatInterval", &pThis->cNsHeartbeatInterval, VMMDEV_HEARTBEAT_DEFAULT_INTERVAL);
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc,
                                 N_("Configuration error: Failed querying \"HeartbeatInterval\" as a 64-bit unsigned integer"));
-    if (pThis->u64HeartbeatInterval < RT_NS_100MS/2)
+    if (pThis->cNsHeartbeatInterval < RT_NS_100MS / 2)
         return PDMDEV_SET_ERROR(pDevIns, rc,
                                 N_("Configuration error: Heartbeat interval \"HeartbeatInterval\" too small"));
 
-    rc = CFGMR3QueryU64Def(pCfg, "HeartbeatTimeout", &pThis->u64HeartbeatTimeout, pThis->u64HeartbeatInterval * 2);
+    rc = CFGMR3QueryU64Def(pCfg, "HeartbeatTimeout", &pThis->cNsHeartbeatTimeout, pThis->cNsHeartbeatInterval * 2);
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc,
                                 N_("Configuration error: Failed querying \"HeartbeatTimeout\" as a 64-bit unsigned integer"));
-    if (pThis->u64HeartbeatTimeout < RT_NS_100MS)
+    if (pThis->cNsHeartbeatTimeout < RT_NS_100MS)
         return PDMDEV_SET_ERROR(pDevIns, rc,
-                                N_("Configuration error: Heartbeat timeout timer interval \"HeartbeatTimeout\" too small"));
+                                N_("Configuration error: Heartbeat timeout \"HeartbeatTimeout\" too small"));
+    if (pThis->cNsHeartbeatTimeout <= pThis->cNsHeartbeatInterval + RT_NS_10MS)
+        return PDMDevHlpVMSetError(pDevIns, rc, RT_SRC_POS,
+                                   N_("Configuration error: Heartbeat timeout \"HeartbeatTimeout\" value (%'ull ns) is too close to the interval (%'ull ns)"),
+                                   pThis->cNsHeartbeatTimeout, pThis->cNsHeartbeatInterval);
 
 #ifndef VBOX_WITHOUT_TESTING_FEATURES
     rc = CFGMR3QueryBoolDef(pCfg, "TestingEnabled", &pThis->fTestingEnabled, false);
@@ -4168,8 +4238,8 @@ static DECLCALLBACK(int) vmmdevConstruct(PPDMDEVINS pDevIns, int iInstance, PCFG
     /*
      * Create heartbeat checking timer.
      */
-    rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, vmmDevHeartBeatCheckTimer, pThis,
-                        TMTIMER_FLAGS_NO_CRIT_SECT, "HB Check Timer", &pThis->pHBCheckTimer);
+    rc = PDMDevHlpTMTimerCreate(pDevIns, TMCLOCK_VIRTUAL, vmmDevHeartbeatFlatlinedTimer, pThis,
+                                TMTIMER_FLAGS_NO_CRIT_SECT, "Heartbeat flatlined", &pThis->pFlatlinedTimer);
     AssertRCReturn(rc, rc);
 
 #ifdef VBOX_WITH_HGCM
diff --git a/src/VBox/Devices/VMMDev/VMMDevState.h b/src/VBox/Devices/VMMDev/VMMDevState.h
index 851e7f9..e5c913d 100644
--- a/src/VBox/Devices/VMMDev/VMMDevState.h
+++ b/src/VBox/Devices/VMMDev/VMMDevState.h
@@ -92,21 +92,18 @@ typedef struct VMMDEVCREDS
  */
 typedef struct VMMDEVFACILITYSTATUSENTRY
 {
-    /** The facility, see VBoxGuestFacilityType. */
-    uint32_t    uFacility;
-    /** The status, see VBoxGuestFacilityStatus. */
-    /** @todo r=andy uint16_t vs. uint32_t (VBoxGuestFacilityStatus enum). */
-    uint16_t    uStatus;
+    /** The facility (may contain values other than the defined ones). */
+    VBoxGuestFacilityType       enmFacility;
+    /** The status (may contain values other than the defined ones). */
+    VBoxGuestFacilityStatus     enmStatus;
     /** Whether this entry is fixed and cannot be reused when inactive. */
-    bool        fFixed;
+    bool                        fFixed;
     /** Explicit alignment padding / reserved for future use. MBZ. */
-    bool        fPadding;
+    bool                        afPadding[3];
     /** The facility flags (yet to be defined). */
-    uint32_t    fFlags;
-    /** Explicit alignment padding / reserved for future use. MBZ. */
-    uint32_t    uPadding;
+    uint32_t                    fFlags;
     /** Last update timestamp. */
-    RTTIMESPEC  TimeSpecTS;
+    RTTIMESPEC                  TimeSpecTS;
 } VMMDEVFACILITYSTATUSENTRY;
 /** Pointer to a facility status entry. */
 typedef VMMDEVFACILITYSTATUSENTRY *PVMMDEVFACILITYSTATUSENTRY;
@@ -359,20 +356,25 @@ typedef struct VMMDevState
     RTTEST                  hTestingTest;
 #endif /* !VBOX_WITHOUT_TESTING_FEATURES */
 
+    /** @name Heartbeat
+     * @{ */
     /** Timestamp of the last heartbeat from guest in nanosec. */
-    uint64_t volatile   uLastHBTime;
+    uint64_t volatile   nsLastHeartbeatTS;
     /** Indicates whether we missed HB from guest on last check. */
-    bool volatile       fHasMissedHB;
+    bool volatile       fFlatlined;
     /** Indicates whether heartbeat check is active. */
-    bool volatile       fHBCheckEnabled;
+    bool volatile       fHeartbeatActive;
     /** Alignment padding. */
     bool                afAlignment8[6];
-    /** Guest heartbeat interval in nanoseconds. */
-    uint64_t            u64HeartbeatInterval;
-    /** Guest heartbeat timeout in nanoseconds. */
-    uint64_t            u64HeartbeatTimeout;
-    /** Timer for checking guest heart beat. */
-    PTMTIMERR3          pHBCheckTimer;
+    /** Guest heartbeat interval in nanoseconds.
+     * This is the interval the guest is told to produce heartbeats at. */
+    uint64_t            cNsHeartbeatInterval;
+    /** The amount of time without a heartbeat (nanoseconds) before we
+     * conclude the guest is doing a Dixie Flatline (Neuromancer) impression. */
+    uint64_t            cNsHeartbeatTimeout;
+    /** Timer for signalling a flatlined guest. */
+    PTMTIMERR3          pFlatlinedTimer;
+    /** @} */
 } VMMDevState;
 typedef VMMDevState VMMDEV;
 /** Pointer to the VMM device state. */
diff --git a/src/VBox/Devices/VirtIO/Virtio.cpp b/src/VBox/Devices/VirtIO/Virtio.cpp
index 873c539..439b6b8 100644
--- a/src/VBox/Devices/VirtIO/Virtio.cpp
+++ b/src/VBox/Devices/VirtIO/Virtio.cpp
@@ -882,7 +882,7 @@ int vpciConstruct(PPDMDEVINS pDevIns, VPCISTATE *pState,
  *
  * We need to free non-VM resources only.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pState      The device state structure.
  */
 int vpciDestruct(VPCISTATE* pState)
diff --git a/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp b/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
index bd022f1..766b85c 100644
--- a/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
+++ b/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
@@ -1665,12 +1665,12 @@ int main()
     GEN_CHECK_OFF(VMMDEV, TestingData.Value.u64Value);
     GEN_CHECK_OFF(VMMDEV, TestingData.Value.u32Unit);
     GEN_CHECK_OFF(VMMDEV, TestingData.Value.szName);
-    GEN_CHECK_OFF(VMMDEV, uLastHBTime);
-    GEN_CHECK_OFF(VMMDEV, fHasMissedHB);
-    GEN_CHECK_OFF(VMMDEV, fHBCheckEnabled);
-    GEN_CHECK_OFF(VMMDEV, u64HeartbeatInterval);
-    GEN_CHECK_OFF(VMMDEV, u64HeartbeatTimeout);
-    GEN_CHECK_OFF(VMMDEV, pHBCheckTimer);
+    GEN_CHECK_OFF(VMMDEV, nsLastHeartbeatTS);
+    GEN_CHECK_OFF(VMMDEV, fFlatlined);
+    GEN_CHECK_OFF(VMMDEV, fHeartbeatActive);
+    GEN_CHECK_OFF(VMMDEV, cNsHeartbeatInterval);
+    GEN_CHECK_OFF(VMMDEV, cNsHeartbeatTimeout);
+    GEN_CHECK_OFF(VMMDEV, pFlatlinedTimer);
 
 #ifdef VBOX_WITH_BUSLOGIC
     GEN_CHECK_SIZE(BUSLOGICDEVICE);
diff --git a/src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp b/src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp
index 55536b3..686b6e7 100644
--- a/src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp
+++ b/src/VBox/ExtPacks/BusMouseSample/BusMouse.cpp
@@ -550,7 +550,7 @@ static DECLCALLBACK(int) mouLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSMHandle,
 /**
  * Reset notification.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDevIns     The device instance data.
  */
 static DECLCALLBACK(void) mouReset(PPDMDEVINS pDevIns)
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp
index df94c02..df1d845 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp
@@ -1683,15 +1683,20 @@ RTEXITCODE handleControlVM(HandlerArg *a)
                 break;
             }
 
-            if (   strcmp(a->argv[4], "--removeonsuspend")
-                || (   strcmp(a->argv[5], "yes")
-                    && strcmp(a->argv[5], "no")))
+            BOOL fRemoveOnSuspend = FALSE;
+            if (a->argc == 6)
             {
-                errorSyntax(USAGE_CONTROLVM, "Invalid parameters");
-                break;
+                if (   strcmp(a->argv[4], "--removeonsuspend")
+                    || (   strcmp(a->argv[5], "yes")
+                        && strcmp(a->argv[5], "no")))
+                {
+                    errorSyntax(USAGE_CONTROLVM, "Invalid parameters");
+                    break;
+                }
+                if (!strcmp(a->argv[5], "yes"))
+                    fRemoveOnSuspend = TRUE;
             }
 
-            BOOL fRemoveOnSuspend = FALSE;
             Bstr bstrPwId(a->argv[2]);
             Utf8Str strPassword;
 
@@ -1712,10 +1717,6 @@ RTEXITCODE handleControlVM(HandlerArg *a)
                 }
             }
 
-            if (   a->argc == 6
-                && !strcmp(a->argv[5], "yes"))
-                fRemoveOnSuspend = TRUE;
-
             CHECK_ERROR_BREAK(console, AddDiskEncryptionPassword(bstrPwId.raw(), Bstr(strPassword).raw(), fRemoveOnSuspend));
         }
         else if (!strcmp(a->argv[1], "removeencpassword"))
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp
index f300c19..c5dd751 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageSnapshot.cpp
@@ -501,6 +501,11 @@ RTEXITCODE handleSnapshot(HandlerArg *a)
             if (fRestoreCurrent)
             {
                 CHECK_ERROR_BREAK(sessionMachine, COMGETTER(CurrentSnapshot)(pSnapshot.asOutParam()));
+                if (pSnapshot.isNull())
+                {
+                    RTPrintf("This machine does not have any snapshots\n");
+                    return RTEXITCODE_FAILURE;
+                }
             }
             else
             {
@@ -541,6 +546,11 @@ RTEXITCODE handleSnapshot(HandlerArg *a)
                 || !strcmp(a->argv[2], "-current"))
             {
                 CHECK_ERROR_BREAK(sessionMachine, COMGETTER(CurrentSnapshot)(pSnapshot.asOutParam()));
+                if (pSnapshot.isNull())
+                {
+                    RTPrintf("This machine does not have any snapshots\n");
+                    return RTEXITCODE_FAILURE;
+                }
             }
             else
             {
diff --git a/src/VBox/Frontends/VirtualBox/Makefile.kmk b/src/VBox/Frontends/VirtualBox/Makefile.kmk
index b38c702..927297a 100644
--- a/src/VBox/Frontends/VirtualBox/Makefile.kmk
+++ b/src/VBox/Frontends/VirtualBox/Makefile.kmk
@@ -836,7 +836,7 @@ endif
 
 # The Qt modules we're using.
 # (The include directory and lib/framework for each module will be added by the Qt4 unit.)
-VirtualBox_QT_MODULES = Core Gui Network
+VirtualBox_QT_MODULES = Core Gui
 if defined(VBOX_WITH_VIDEOHWACCEL) || defined(VBOX_GUI_USE_QGL)
  VirtualBox_QT_MODULES += OpenGL
 endif
diff --git a/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk b/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
index 2fe28dd..d967d5e 100644
--- a/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
+++ b/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
@@ -18,10 +18,7 @@
 # The list of approved GUI languages.
 VBOX_APPROVED_GUI_LANGUAGES := \
 	bg    \
-	ca    \
-	ca_VA \
 	cs    \
-	da    \
 	de    \
 	en    \
 	es    \
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
index f9175b0..a7ff8be 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_bg.ts
@@ -4650,11 +4650,11 @@ p, li { white-space: pre-wrap; </style></head><body style="
     <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>Когато е избрано, VirtualBox ще използва настройките за прокси за задачи като изтегляне на Виртуални Добавки от мрежата или проверка за обновления.</translation>
+        <translation type="obsolete">Когато е избрано, VirtualBox ще използва настройките за прокси за задачи като изтегляне на Виртуални Добавки от мрежата или проверка за обновления.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>По&зволяване на прокси</translation>
+        <translation type="obsolete">По&зволяване на прокси</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4712,6 +4712,30 @@ p, li { white-space: pre-wrap; </style></head><body style="
         <source>Holds the proxy port.</source>
         <translation>Задава порта на проксито.</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10027,6 +10051,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation>Криптиращата парола за <nobr>ID = '%1'</nobr> е невалидна.</translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation>Текущите правила за пренасочване на портове са невалидни. Всички стойности на адреси за реалната и виртуалната машини трябва да са валидни или празни.</translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation>Текущите правила за пренасочване на портове са невалидни. Никоя от стойностите на адреси на виртуалната машина не може да е празна.</translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -10226,6 +10258,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>Непозната причина</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation>%1: %2</translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation>Неуспешно инициализиране на HTTP библиотека</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>Връзката е отказана</translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation>Съдържанието е преместено</translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation>Проксито не е намерено</translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation>По време на конфигурацията на прокси</translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation>По време на изтегляне на сертификат</translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation>По време на мрежова заявка</translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts
index f127a42..3997785 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca.ts
@@ -4595,11 +4595,11 @@ p, li { white-space: pre-wrap; }
     <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>Quan estigui marcat, el VirtualBox farà servir els paràmetres de servidor intermediari proveïts per a tasques com la baixada de les Guest Additions o la comprovació d'actualitzacions.</translation>
+        <translation type="obsolete">Quan estigui marcat, el VirtualBox farà servir els paràmetres de servidor intermediari proveïts per a tasques com la baixada de les Guest Additions o la comprovació d'actualitzacions.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>Habilita &el servidor intermediari</translation>
+        <translation type="obsolete">Habilita &el servidor intermediari</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4657,6 +4657,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10206,6 +10230,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -10398,6 +10430,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>Es desconeix la raó</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts
index 81d7eae..66b7657 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ca_VA.ts
@@ -4600,11 +4600,11 @@ p, li { white-space: pre-wrap; }
     <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>Quan estiga marcat, el VirtualBox farà servir els paràmetres de servidor intermediari proveïts per a tasques com la baixada de les Guest Additions o la comprovació d'actualitzacions.</translation>
+        <translation type="obsolete">Quan estiga marcat, el VirtualBox farà servir els paràmetres de servidor intermediari proveïts per a tasques com la baixada de les Guest Additions o la comprovació d'actualitzacions.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>Habilita &el servidor intermediari</translation>
+        <translation type="obsolete">Habilita &el servidor intermediari</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4662,6 +4662,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10211,6 +10235,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -10403,6 +10435,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>Es desconeix la raó</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts
index 1736feb..67d157f 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_cs.ts
@@ -300,7 +300,7 @@
     </message>
     <message>
         <source>Seam&less Mode</source>
-        <translation type="unfinished">&Bezešvý režim</translation>
+        <translation>&Bezešvý režim</translation>
     </message>
     <message>
         <source>Switch to seamless desktop integration mode</source>
@@ -460,7 +460,7 @@
     </message>
     <message>
         <source>&Insert Guest Additions CD image...</source>
-        <translation type="unfinished">&Instalovat Přídavky pro hosta...</translation>
+        <translation>V&ložit obraz CD disku s Přídavky pro hosta...</translation>
     </message>
     <message>
         <source>Insert the Guest Additions disk file into the virtual drive</source>
@@ -633,7 +633,7 @@
     </message>
     <message>
         <source>Re&fresh</source>
-        <translation type="unfinished">&Aktualizovat</translation>
+        <translation>&Aktualizovat</translation>
     </message>
     <message>
         <source>&Virtual Media Manager...</source>
@@ -1013,7 +1013,7 @@
     </message>
     <message>
         <source>&Webcams</source>
-        <translation type="unfinished"></translation>
+        <translation>&Webové kamery</translation>
     </message>
     <message>
         <source>Network</source>
@@ -1021,442 +1021,442 @@
     </message>
     <message>
         <source>&VirtualBox</source>
-        <translation type="unfinished"></translation>
+        <translation>&VirtualBox</translation>
     </message>
     <message>
         <source>&File</source>
-        <translation type="unfinished">&Soubor</translation>
+        <translation>&Soubor</translation>
     </message>
     <message>
         <source>&Window</source>
-        <translation type="unfinished"></translation>
+        <translation>&Okno</translation>
     </message>
     <message>
         <source>&Minimize</source>
-        <translation type="unfinished"></translation>
+        <translation>&Minimalizovat</translation>
     </message>
     <message>
         <source>Minimize active window</source>
-        <translation type="unfinished"></translation>
+        <translation>Minimalizuje aktivní okno</translation>
     </message>
     <message>
         <source>Display the Network Operations Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno Správce síťových operací</translation>
     </message>
     <message>
         <source>Display a window with product information</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno s informacemi pro produktu</translation>
     </message>
     <message>
         <source>&Preferences...</source>
         <comment>global preferences window</comment>
-        <translation type="unfinished">&Předvolby...</translation>
+        <translation>&Předvolby...</translation>
     </message>
     <message>
         <source>Display the global preferences window</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno s globalním nastavením</translation>
     </message>
     <message>
         <source>Display the virtual machine settings window</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno s nastavením pro virtuální počítač</translation>
     </message>
     <message>
         <source>Display the virtual machine session information window</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno s informacemi o sezení pro virtuální počítač</translation>
     </message>
     <message>
         <source>&Save State</source>
-        <translation type="unfinished"></translation>
+        <translation>&Uložit stav</translation>
     </message>
     <message>
         <source>Save the state of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Uloží stav virtuálního počítače</translation>
     </message>
     <message>
         <source>Send the ACPI Shutdown signal to the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Pošle ACPI událost stisku tlačítka vypnutí virtuálnímu počítači</translation>
     </message>
     <message>
         <source>&Full-screen Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Celoo&brazovkový režim</translation>
     </message>
     <message>
         <source>Switch between normal and full-screen mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Přepíná mezi klasickým režimem a režimem celé obrazovky</translation>
     </message>
     <message>
         <source>S&caled Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Z&menšený režim</translation>
     </message>
     <message>
         <source>&Minimize Window</source>
-        <translation type="unfinished"></translation>
+        <translation>&Minimalizovat okno</translation>
     </message>
     <message>
         <source>Automatically resize the guest display when the window is resized</source>
-        <translation type="unfinished"></translation>
+        <translation>Automaticky přizpůsobuje velikost hostované obrazovky podle velikosti okna</translation>
     </message>
     <message>
         <source>Take guest display screenshot</source>
-        <translation type="unfinished"></translation>
+        <translation>Sejme obrazovku hostovaného počítače</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure video capture</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno virtuálního počítače pro nastavení zachytávání videa</translation>
     </message>
     <message>
         <source>Enable guest display video capture</source>
-        <translation type="unfinished"></translation>
+        <translation>Povolí zachytávání videa pro hostovaný počítač</translation>
     </message>
     <message>
         <source>Allow remote desktop (RDP) connections to this machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Povolí připojení vzdálené plochy (RDP) na tento počítač</translation>
     </message>
     <message>
         <source>&Menu Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>&Nabídková lišta</translation>
     </message>
     <message>
         <source>&Menu Bar Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nas&tavení nabídkové lišty...</translation>
     </message>
     <message>
         <source>Display window to configure menu-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno s nastavením nabídkové lišty</translation>
     </message>
     <message>
         <source>Show Menu &Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazit nabídkovou &lištu</translation>
     </message>
     <message>
         <source>Enable menu-bar</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <source>&Status Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>&Stavová lišta</translation>
     </message>
     <message>
         <source>&Status Bar Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavení sta&vové lišty...</translation>
     </message>
     <message>
         <source>Display window to configure status-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno s nastavením stavové lišty</translation>
     </message>
     <message>
         <source>Show Status &Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>&Zobrazit stavovou lištu</translation>
     </message>
     <message>
         <source>Enable status-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Povolit stavovou lištu</translation>
     </message>
     <message>
         <source>S&cale Factor</source>
-        <translation type="unfinished"></translation>
+        <translation>&Faktor změny</translation>
     </message>
     <message>
         <source>&Input</source>
-        <translation type="unfinished"></translation>
+        <translation>&Vstup</translation>
     </message>
     <message>
         <source>&Keyboard</source>
-        <translation type="unfinished">&Klávesnice</translation>
+        <translation>&Klávesnice</translation>
     </message>
     <message>
         <source>&Keyboard Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavení k&lávesnice...</translation>
     </message>
     <message>
         <source>Display global preferences window to configure keyboard shortcuts</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno pro nastavení globálních klávesových zkratek</translation>
     </message>
     <message>
         <source>&Insert %1</source>
         <comment>that means send the %1 key sequence to the virtual machine</comment>
-        <translation type="unfinished"></translation>
+        <translation>&Poslat %1</translation>
     </message>
     <message>
         <source>Send the %1 sequence to the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Pošle virtuálnímu počítači sekvenci %1</translation>
     </message>
     <message>
         <source>&Mouse</source>
-        <translation type="unfinished"></translation>
+        <translation>&Myš</translation>
     </message>
     <message>
         <source>&Mouse Integration</source>
-        <translation type="unfinished"></translation>
+        <translation>Inte&grace myši</translation>
     </message>
     <message>
         <source>Enable host mouse pointer integration</source>
-        <translation type="unfinished"></translation>
+        <translation>Povolí integraci kurzoru hostitelské myši</translation>
     </message>
     <message>
         <source>&Hard Disks</source>
-        <translation type="unfinished">&Pevné disky</translation>
+        <translation>&Pevné disky</translation>
     </message>
     <message>
         <source>&Hard Disk Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavení &pevných disků...</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure hard disks</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno virtuálního počítače pro nastavení pevných disků</translation>
     </message>
     <message>
         <source>&Optical Drives</source>
-        <translation type="unfinished"></translation>
+        <translation>&Optické mechaniky</translation>
     </message>
     <message>
         <source>&Floppy Drives</source>
-        <translation type="unfinished"></translation>
+        <translation>&Disketové mechaniky</translation>
     </message>
     <message>
         <source>&Network</source>
-        <translation type="unfinished"></translation>
+        <translation>&Síť</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure network adapters</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno virtuálního počítače pro nastavení síťových adaptérů</translation>
     </message>
     <message>
         <source>&USB</source>
-        <translation type="unfinished"></translation>
+        <translation>&USB</translation>
     </message>
     <message>
         <source>&USB Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Nas&tavení USB...</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure USB devices</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno virtuálního počítače pro nastavení USB zařízení</translation>
     </message>
     <message>
         <source>&Drag and Drop</source>
-        <translation type="unfinished"></translation>
+        <translation>&Táhni a pusť</translation>
     </message>
     <message>
         <source>&Shared Folders</source>
-        <translation type="unfinished"></translation>
+        <translation>S&dílené složky</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure shared folders</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno virtuálního počítače pro nastavení sdílených složek</translation>
     </message>
     <message>
         <source>Insert the Guest Additions disk file into the virtual optical drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Připojí obraz s instalací Přídavků pro hosta do virtuální optické mechaniky</translation>
     </message>
     <message>
         <source>&Logging</source>
         <comment>debug action</comment>
-        <translation type="unfinished"></translation>
+        <translation>&Logování</translation>
     </message>
     <message>
         <source>Show &Log...</source>
         <comment>debug action</comment>
-        <translation type="unfinished">Zobrazit &záznam...</translation>
+        <translation>Zobrazit &záznam...</translation>
     </message>
     <message>
         <source>%1%</source>
         <comment>scale-factor</comment>
-        <translation type="unfinished">%1%</translation>
+        <translation>%1%</translation>
     </message>
     <message>
         <source>Enable</source>
         <comment>Virtual Screen</comment>
-        <translation type="unfinished">Zapnout</translation>
+        <translation>Povolena</translation>
     </message>
     <message>
         <source>Resize to %1x%2</source>
         <comment>Virtual Screen</comment>
-        <translation type="unfinished"></translation>
+        <translation>Změnit rozlišení na %1x%2 </translation>
     </message>
     <message>
         <source>Preview Monitor %1</source>
-        <translation type="unfinished">Monitor pro náhled %1</translation>
+        <translation>Monitor pro náhled %1</translation>
     </message>
     <message>
         <source>&Connect Network Adapter</source>
-        <translation type="unfinished"></translation>
+        <translation>&Připojit síťovou kartu</translation>
     </message>
     <message>
         <source>Connect Network Adapter &%1</source>
-        <translation type="unfinished"></translation>
+        <translation>Připojit síťovou kartu &%1</translation>
     </message>
     <message>
         <source>No USB Devices Connected</source>
-        <translation type="unfinished">Není připojené žádné USB zařízení</translation>
+        <translation>Není připojené žádné USB zařízení</translation>
     </message>
     <message>
         <source>No supported devices connected to the host PC</source>
-        <translation type="unfinished">K hostitelskému PC není připojeno žádné podporované zařízení</translation>
+        <translation>K hostitelskému PC není připojeno žádné podporované zařízení</translation>
     </message>
     <message>
         <source>No Webcams Connected</source>
-        <translation type="unfinished"></translation>
+        <translation>Není připojena žádná webová kamera</translation>
     </message>
     <message>
         <source>No supported webcams connected to the host PC</source>
-        <translation type="unfinished"></translation>
+        <translation>K hostitelskému PC není připojeno žádná webová kamera</translation>
     </message>
     <message>
         <source>E&xtra Data Manager...</source>
-        <translation type="unfinished"></translation>
+        <translation>Správce e&xtra dat...</translation>
     </message>
     <message>
         <source>Display the Extra Data Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí okno správce extra dat</translation>
     </message>
     <message>
         <source>Create new virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Vytvoření nového virtuálního počítače</translation>
     </message>
     <message>
         <source>Add existing virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá existující virtuální počítač</translation>
     </message>
     <message>
         <source>Rename selected virtual machine group</source>
-        <translation type="unfinished"></translation>
+        <translation>Přejmenuje vybranou skupinu virtuálních počítačů</translation>
     </message>
     <message>
         <source>&Ungroup</source>
-        <translation type="unfinished"></translation>
+        <translation>&Rozdělit skupinu</translation>
     </message>
     <message>
         <source>Ungroup items of selected virtual machine group</source>
-        <translation type="unfinished"></translation>
+        <translation>Rozdělí položky vybrané skupiny virtuálních počítačů</translation>
     </message>
     <message>
         <source>&Sort</source>
-        <translation type="unfinished"></translation>
+        <translation>&Setřídit</translation>
     </message>
     <message>
         <source>Sort items of selected virtual machine group alphabetically</source>
-        <translation type="unfinished"></translation>
+        <translation>Setřídí položky vybraného virtuálního počítače podle abecedy</translation>
     </message>
     <message>
         <source>Add new group based on selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá novou skupinu založenou na vybraných virtuálních počítačích</translation>
     </message>
     <message>
         <source>Clone selected virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Naklonuje vybraný virtuální počítač</translation>
     </message>
     <message>
         <source>Remove selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Odstraní vybraný virtuální počítač</translation>
     </message>
     <message>
         <source>Start selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Spustí vybraný virtuální počítač</translation>
     </message>
     <message>
         <source>Switch to the windows of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Přepne do oken vybraných virtuálních počítačů</translation>
     </message>
     <message>
         <source>&Normal Start</source>
-        <translation type="unfinished"></translation>
+        <translation>&Normální spuštění</translation>
     </message>
     <message>
         <source>&Headless Start</source>
-        <translation type="unfinished"></translation>
+        <translation>Spuštění &bez výstupu</translation>
     </message>
     <message>
         <source>Start selected virtual machines in the background</source>
-        <translation type="unfinished"></translation>
+        <translation>Spustí vybrané virtuální počítače na pozadí</translation>
     </message>
     <message>
         <source>&Detachable Start</source>
-        <translation type="unfinished"></translation>
+        <translation>&Odložené spuštění</translation>
     </message>
     <message>
         <source>Start selected virtual machines with option of continuing in background</source>
-        <translation type="unfinished"></translation>
+        <translation>Spustí vybrané virtuální počítače s možností pokračovat na pozadí</translation>
     </message>
     <message>
         <source>Suspend execution of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Pozastaví chod vybraného virtuálního počítače</translation>
     </message>
     <message>
         <source>Reset selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Ŕesetuje vybrané virtuální počítače</translation>
     </message>
     <message>
         <source>D&iscard Saved State...</source>
-        <translation type="unfinished"></translation>
+        <translation>&Zahodit uložený stav...</translation>
     </message>
     <message>
         <source>Discard saved state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Zahodí uložený stav vybraných virtuálních počítačů</translation>
     </message>
     <message>
         <source>Show log files of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí soubory se záznamy vybraného virtuálního počítače</translation>
     </message>
     <message>
         <source>Refresh accessibility state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Obnoví stav dostupnosti vybraného virtuálního počítače</translation>
     </message>
     <message>
         <source>S&how in Finder</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazit ve &Finderu</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in Finder</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí konfigurační soubory virtuálního počítače ve Finderu</translation>
     </message>
     <message>
         <source>S&how in Explorer</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazit v &průzkumníkovi</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in Explorer</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí definici pro virtuální počítač v průzkumníkovi</translation>
     </message>
     <message>
         <source>S&how in File Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazit ve &správci souborů</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in the File Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí konfigurační soubor pro virtuální počítač ve správci souborů</translation>
     </message>
     <message>
         <source>Cr&eate Alias on Desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Vytvořit &alias na ploše</translation>
     </message>
     <message>
         <source>Create alias files to the VirtualBox Machine Definition files on your desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Vytvoří alias pro definici virtuálního počítače na vaší ploše</translation>
     </message>
     <message>
         <source>Cr&eate Shortcut on Desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Vytvořit &zástupce na ploše</translation>
     </message>
     <message>
         <source>Create shortcut files to the VirtualBox Machine Definition files on your desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Pro konfigurační soubory virtuálního počítače.vytvoří zástupce na pracovní ploše</translation>
     </message>
     <message>
         <source>Sort group of first selected virtual machine alphabetically</source>
-        <translation type="unfinished"></translation>
+        <translation>Setřídí skupinu prvního vybraného virtuálního počítače podle abecedy</translation>
     </message>
     <message>
         <source>Save state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Uloží stav vybraných virtuálních počítačů</translation>
     </message>
     <message>
         <source>Send ACPI Shutdown signal to selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Pošle ACPI událost stisku tlačítka vypnutí vybraným virtuálním počítačům</translation>
     </message>
     <message>
         <source>Power off selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Vypne vybrané virtuální počítače</translation>
     </message>
 </context>
 <context>
@@ -1471,33 +1471,33 @@
     <message>
         <source>ID</source>
         <comment>password table field</comment>
-        <translation type="unfinished"></translation>
+        <translation>ID</translation>
     </message>
     <message>
         <source>Password</source>
         <comment>password table field</comment>
-        <translation type="unfinished"></translation>
+        <translation>Heslo</translation>
     </message>
     <message numerus="yes">
         <source><nobr>Used by the following %n hard disk(s):</nobr><br>%1</source>
         <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many hard drives are in the tool-tip and doesn't need to be told).</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform><nobr>Použito u následujícího pevného disku:</nobr><br>%1</numerusform>
+            <numerusform><nobr>Použito u následujících %n pevných disků:</nobr><br>%1</numerusform>
+            <numerusform><nobr>Použito u následujících %n pevných disků:</nobr><br>%1</numerusform>
         </translation>
     </message>
     <message>
         <source>%1 - Disk Encryption</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 - Šifrování disku</translation>
     </message>
     <message numerus="yes">
         <source>This virtual machine is password protected. Please enter the %n encryption password(s) below.</source>
         <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many passwords are in the list and doesn't need to be told).</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>Virtuální počítač je chráněn heslem. Zadejte šifrovací heslo níže.</numerusform>
+            <numerusform>Virtuální počítač je chráněn heslem. Zadejte %n šifrovací hesla níže.</numerusform>
+            <numerusform>Virtuální počítač je chráněn heslem. Zadejte %n šifrovacích hesel níže.</numerusform>
         </translation>
     </message>
 </context>
@@ -1631,19 +1631,19 @@
     </message>
     <message>
         <source>Storage Controller (IDE)</source>
-        <translation type="unfinished"></translation>
+        <translation>Řadič pro úložiště (IDE)</translation>
     </message>
     <message>
         <source>Storage Controller (SATA)</source>
-        <translation type="unfinished"></translation>
+        <translation>Řadič pro úložiště (SATA)</translation>
     </message>
     <message>
         <source>Storage Controller (SCSI)</source>
-        <translation type="unfinished"></translation>
+        <translation>Řadič pro úložiště (SCSI)</translation>
     </message>
     <message>
         <source>Storage Controller (SAS)</source>
-        <translation type="unfinished"></translation>
+        <translation>Řadič pro úložiště (SAS)</translation>
     </message>
 </context>
 <context>
@@ -2304,7 +2304,7 @@
     </message>
     <message>
         <source>Retrieving data ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Načítám data...</translation>
     </message>
 </context>
 <context>
@@ -3328,102 +3328,102 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>Minimal Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Minimální paravirtualizace</translation>
     </message>
     <message>
         <source>Hyper-V Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Hyper-V paravirtualizace</translation>
     </message>
     <message>
         <source>KVM Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>KVM paravirtualizace</translation>
     </message>
     <message>
         <source>Scale-factor</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Faktor změny</translation>
     </message>
     <message>
         <source>Unscaled HiDPI Video Output</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nezměněný HiDPI video výstup</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (display/Unscaled HiDPI Video Output)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Povolen</translation>
     </message>
     <message>
         <source>[Optical Drive]</source>
         <comment>details (storage)</comment>
-        <translation type="unfinished"></translation>
+        <translation>[Optický disk]</translation>
     </message>
     <message>
         <source>Generic Driver, '%1' { %2 }</source>
         <comment>details (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Obecný ovladač, '%1' { %2 }</translation>
     </message>
     <message>
         <source>USB Controller</source>
         <comment>details (usb)</comment>
-        <translation type="unfinished"></translation>
+        <translation>USB řadič</translation>
     </message>
     <message>
         <source>Menu-bar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nabídková lišta</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (user interface/menu-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Povolena</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/menu-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Zakázána</translation>
     </message>
     <message>
         <source>Status-bar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Stavová lišta</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (user interface/status-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Povolena</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/status-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Zakázána</translation>
     </message>
     <message>
         <source>Mini-toolbar Position</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Pozice mini nástrojové lišty</translation>
     </message>
     <message>
         <source>Top</source>
         <comment>details (user interface/mini-toolbar position)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nahoře</translation>
     </message>
     <message>
         <source>Bottom</source>
         <comment>details (user interface/mini-toolbar position)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Dole</translation>
     </message>
     <message>
         <source>Mini-toolbar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Mini nástrojová lišta</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/mini-toolbar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Zakázána</translation>
     </message>
 </context>
 <context>
@@ -3739,23 +3739,23 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Machine Windows:</source>
-        <translation type="unfinished"></translation>
+        <translation>Okna s počítači:</translation>
     </message>
     <message>
         <source>&Raise Window Under Mouse</source>
-        <translation type="unfinished"></translation>
+        <translation>&Zvýraznit okno pod myší</translation>
     </message>
     <message>
         <source>Holds the maximum width which we would like the guest to use.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hodnota maximální šířky kterou může hostovaný počítač použít.</translation>
     </message>
     <message>
         <source>Holds the maximum height which we would like the guest to use.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hodnota maximální výšky kterou může hostovaný počítač použít.</translation>
     </message>
     <message>
         <source>When checked, machine windows will be raised when the mouse pointer moves over them.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, budou se okna virtuálních počítačů při přejezdu myší dostávat do popředí.</translation>
     </message>
 </context>
 <context>
@@ -3806,19 +3806,19 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Add Package</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá balíček</translation>
     </message>
     <message>
         <source>Remove Package</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebere balíček</translation>
     </message>
     <message>
         <source>Adds new package.</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá nový balíček.</translation>
     </message>
     <message>
         <source>Removes selected package.</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebere vybraný balíček</translation>
     </message>
 </context>
 <context>
@@ -3905,11 +3905,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Host Screensaver:</source>
-        <translation type="unfinished"></translation>
+        <translation>Spořič obrazovky hotitele:</translation>
     </message>
     <message>
         <source>&Disable When Running Virtual Machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Za&kázat při běhu virtuálních počítačů</translation>
     </message>
 </context>
 <context>
@@ -3972,11 +3972,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Lists all available shortcuts which can be configured.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vypíše všechny dostupné klávesové zkratky které lze nastavit.</translation>
     </message>
     <message>
         <source>Holds a sequence to filter the shortcut list.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zadejte sekvenci k vyfiltrování seznamu klávesových zkratek.</translation>
     </message>
 </context>
 <context>
@@ -4317,51 +4317,51 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Add NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidat NAT síť</translation>
     </message>
     <message>
         <source>Remove NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebrat NAT síť </translation>
     </message>
     <message>
         <source>Edit NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravit NAT síť</translation>
     </message>
     <message>
         <source>Adds new NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá novou NAT síť.</translation>
     </message>
     <message>
         <source>Removes selected NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebere vybranou NAT síť.</translation>
     </message>
     <message>
         <source>Edits selected NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Upraví vybranou NAT síť.</translation>
     </message>
     <message>
         <source>Add Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidat síť pouze mezi hostem</translation>
     </message>
     <message>
         <source>Remove Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebrat síť mezi hostem</translation>
     </message>
     <message>
         <source>Edit Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravit síť mezi hostem</translation>
     </message>
     <message>
         <source>Adds new host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá síť pouze mezi hostem.</translation>
     </message>
     <message>
         <source>Removes selected host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebere síť mezi hostem.</translation>
     </message>
     <message>
         <source>Edits selected host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravit vybranou síť mezi hostem.</translation>
     </message>
 </context>
 <context>
@@ -4555,11 +4555,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When checked, manual configuration will be used for this network adapter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, bude pro tuto síťovou kartu použito ruční nastavení.</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>Je-li zatrženo, bude pro tuto síťovou kartu při startu počítače povoleno DHCP.</translation>
     </message>
 </context>
 <context>
@@ -4630,23 +4630,23 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When checked, this network will be enabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, tato síť bude povolena.</translation>
     </message>
     <message>
         <source>When checked, this network will support DHCP.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, tato síť bude podporovat DHCP.</translation>
     </message>
     <message>
         <source>When checked, this network will support IPv6.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, tato síť bude podporovat IPv6.</translation>
     </message>
     <message>
         <source>When checked, this network will be advertised as the default IPv6 route.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, tato síť bude vysílána jako výchozí pro routování IPv6.</translation>
     </message>
     <message>
         <source>Displays a window to configure port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Otevře dialog pro správu pravidel předávaných portů.</translation>
     </message>
 </context>
 <context>
@@ -4668,11 +4668,11 @@ p, li { white-space: pre-wrap; }
     <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>Je-li zatrženo, aplikace Virtualbox bude pro potřeby stahování např. přídavků pro hosta nebo kontroly nových verzí používat proxy.</translation>
+        <translation type="obsolete">Je-li zatrženo, aplikace Virtualbox bude pro potřeby stahování např. přídavků pro hosta nebo kontroly nových verzí používat proxy.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>&Povolit proxy</translation>
+        <translation type="obsolete">&Povolit proxy</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4724,10 +4724,34 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Holds the proxy host.</source>
-        <translation type="unfinished"></translation>
+        <translation>Obsahuje název proxy serveru.</translation>
     </message>
     <message>
         <source>Holds the proxy port.</source>
+        <translation>Obsahuje port proxy serveru.</translation>
+    </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -4783,7 +4807,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Selects how often the new version check should be performed. Note that if you want to completely disable this check, just clear the above check box.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zvolte, jak často se bude kontrolovat nová verze. Pokud chcete kontrolu verzí kompletně zakázat, odškrtněte políčko výše.</translation>
     </message>
 </context>
 <context>
@@ -5200,21 +5224,21 @@ p, li { white-space: pre-wrap; }
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the hard disks:</nobr>%1</p></source>
         <comment>HDD tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Indikuje aktivitu virtuálních pevných disků:</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the optical drives:</nobr>%1</p></source>
         <comment>CD tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Indikuje aktivitu optických mechanik:</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the floppy drives:</nobr>%1</p></source>
         <comment>FD tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Indikuje aktivitu disketových mechanik:</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the display:</nobr>%1</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Indikuje aktivitu obrazovky:</nobr>%1</p></translation>
     </message>
     <message>
         <source>Indicates whether the host keyboard is captured by the guest OS:<br><nobr><img src=:/hostkey_16px.png/>&nbsp;&nbsp;keyboard is not captured</nobr><br><nobr><img src=:/hostkey_captured_16px.png/>&nbsp;&nbsp;keyboard is captured</nobr></source>
@@ -5319,7 +5343,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Selects the audio output driver. The <b>Null Audio Driver</b> makes the guest see an audio card, however every access to it will be ignored.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zvolte ovladač virtuální zvukové karty. Při volbě <b>Nulový audio ovladač</b> uvidí síťovou kartu hostitelský počítač ale všechny přístupy k ní budou ignorovány.</translation>
     </message>
 </context>
 <context>
@@ -5577,23 +5601,23 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>&Screen</source>
-        <translation type="unfinished"></translation>
+        <translation>&Obrazovka</translation>
     </message>
     <message>
         <source>Scale Factor:</source>
-        <translation type="unfinished"></translation>
+        <translation>Faktor změny:</translation>
     </message>
     <message>
         <source>Controls the guest screen scale factor.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavuje faktor změny obrazovky hosta.</translation>
     </message>
     <message>
         <source>%</source>
-        <translation type="unfinished"></translation>
+        <translation>%</translation>
     </message>
     <message>
         <source>HiDPI Support:</source>
-        <translation type="unfinished"></translation>
+        <translation>Podpora HiDPI:</translation>
     </message>
     <message>
         <source>When checked, guest screen contents will not be scaled up to compensate for high host screen resolutions.</source>
@@ -5601,83 +5625,83 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Use &Unscaled HiDPI Output</source>
-        <translation type="unfinished"></translation>
+        <translation>Použít &nezměněný HiDPI výstup</translation>
     </message>
     <message>
         <source>Acceleration:</source>
-        <translation type="unfinished"></translation>
+        <translation>Akcelerace:</translation>
     </message>
     <message>
         <source>Holds the VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazuje číslo portu pro VRDP server. Můžete uvést <tt>0</tt> (nulu) pro nastavení čísla portu na standardní hodnotu 3389.</translation>
     </message>
     <message>
         <source>Selects the VRDP authentication method.</source>
-        <translation type="unfinished"></translation>
+        <translation>Určuje autentizační metodu pro VRDP.</translation>
     </message>
     <message>
         <source>Holds the timeout for guest authentication, in milliseconds.</source>
-        <translation type="unfinished"></translation>
+        <translation>Určuje čas vypršení autentizace hosta v milisekundách.</translation>
     </message>
     <message>
         <source>When checked, multiple simultaneous connections to the VM are permitted.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, budou možná vícenásobná připojení k virtuálnímu počítači.</translation>
     </message>
     <message>
         <source>Holds the filename VirtualBox uses to save the recorded content.</source>
-        <translation type="unfinished"></translation>
+        <translation>Toto nastavení obsahuje název soubor kam VirtualBox bude ukládat nahraný obsah.</translation>
     </message>
     <message>
         <source>Selects the resolution (frame size) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Udává nastavení pro rozlišení (velikost obrazu) pro ukládané video.</translation>
     </message>
     <message>
         <source>Holds the <b>horizontal</b> resolution (frame width) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Udává nastavení pro <b>horizontalní</b>rozlišení (šířku obrazu) pro ukládané video.</translation>
     </message>
     <message>
         <source>Holds the <b>vertical</b> resolution (frame height) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Udává nastavení pro <b>vertikální</b>rozlišení (výšku obrazu) pro ukládané video.</translation>
     </message>
     <message>
         <source>Controls the maximum number of <b>frames per second</b>. Additional frames will be skipped. Reducing this value will increase the number of skipped frames and reduce the file size.</source>
-        <translation type="unfinished"></translation>
+        <translation>Udává maximální počet <b>snímků za sekundu</b>. Další rámce budou přeskočeny. Snížení této hodnoty znamená přeskočení snímků a tím zmenšení velikosti velikosti souboru.</translation>
     </message>
     <message>
         <source>Controls the <b>quality</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
-        <translation type="unfinished"></translation>
+        <translation>Udává <b>kvalitu</b>. Zvýšení této hodnoty zmanená lepší kvalitu videa na úkor zvýšené velikosti souboru.</translation>
     </message>
     <message>
         <source>Holds the bitrate in <b>kilobits per second</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nastavení udává bitrate v <b>kilobitech zasekundu</b>. Zvýšení této hodnoty zmanená lepší videa ale zvětšuje také velikosti souboru.</translation>
     </message>
     <message>
         <source>The virtual machine is currently assigned less than <b>%1</b> of video memory which is the minimum amount required to switch to full-screen or seamless mode.</source>
-        <translation type="unfinished"></translation>
+        <translation>Virtuální počítač má aktuálně přiřazeno méně než <b>%1</b> video paměti, což je minimum vyžadované pro přepnutí do celoobrazovkového nebo bezešvého režimu.</translation>
     </message>
     <message>
         <source>The virtual machine is set up to use hardware graphics acceleration and the operating system hint is set to Windows Vista or later. For best performance you should set the machine's video memory to at least <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Virtuální počítač je nastaven aby používal grafickou akceleraci je nainstalován operační systém Vindows Vista nebo pozdější. Pro lepší výkon je potřeba virtuálnímu počítači přiřadit minimálně <b>%1</b> video paměti.</translation>
     </message>
     <message>
         <source>Remote Display is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site as otherwise your VM will be started with Remote Display disabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>Pro tento virtuální počítač je povolena vzdálená obrazovka. Je ale potřeba doinstalovat <b>%1</b>. Prosíme doinstalujte rozšíření z webových stránek aplikace VirtualBox. Vzdálená obrazovka je nyní do změny nastavení zakázána, po instalaci ji bude možno použít.</translation>
     </message>
     <message>
         <source>%1 MB</source>
-        <translation type="unfinished">%1 MB</translation>
+        <translation>%1 MB</translation>
     </message>
     <message>
         <source>%1%</source>
-        <translation type="unfinished">%1%</translation>
+        <translation>%1%</translation>
     </message>
     <message>
         <source><i>About %1MB per 5 minute video</i></source>
-        <translation type="unfinished"></translation>
+        <translation><i>Okolo %1MB pro 5 minut videa</i></translation>
     </message>
     <message>
         <source>When checked, enables video recording for screen %1.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, povolí nahrávání videa pro obrazovku %1.</translation>
     </message>
 </context>
 <context>
@@ -5944,111 +5968,111 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Basi&c</source>
-        <translation type="unfinished"></translation>
+        <translation>&Základ</translation>
     </message>
     <message>
         <source>A&dvanced</source>
-        <translation type="unfinished">&Pokročilé</translation>
+        <translation>&Pokročilé</translation>
     </message>
     <message>
         <source>D&rag'n'Drop:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Táhni a pusť:</translation>
     </message>
     <message>
         <source>D&escription</source>
-        <translation type="unfinished">&Popis</translation>
+        <translation>&Popis</translation>
     </message>
     <message>
         <source>Enc&ryption</source>
-        <translation type="unfinished"></translation>
+        <translation>Ši&frování</translation>
     </message>
     <message>
         <source>When checked, enables encryption for this virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, povolí zašifrování tohoto virtuálního počítače.</translation>
     </message>
     <message>
         <source>En&able Encryption</source>
-        <translation type="unfinished"></translation>
+        <translation>Povoli&t šifrování</translation>
     </message>
     <message>
         <source>Encryption C&ipher:</source>
-        <translation type="unfinished"></translation>
+        <translation>Ši&fra:</translation>
     </message>
     <message>
         <source>Selects the cipher to be used for encrypting the virtual machine disks.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zvolte šifru, která bude použita pro zašifrování disků virtuální počítače.</translation>
     </message>
     <message>
         <source>E&nter New Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>Zadejte &nové heslo:</translation>
     </message>
     <message>
         <source>Holds the password to be assigned to the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Obsahuje heslo pro tento virtuální počítač.</translation>
     </message>
     <message>
         <source>C&onfirm New Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Potvrdit nové heslo:</translation>
     </message>
     <message>
         <source>Confirms the password to be assigned to the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Potvrzení nového hesla pro tento virtuální počítač.</translation>
     </message>
     <message>
         <source>You are trying to encrypt this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site.</source>
-        <translation type="unfinished"></translation>
+        <translation>Chystáte se šifrovat virtuální počítač. Pro tento krok je vyžadována instalace <i>%1</i>. Nainstalujte prosím rozšíření stažením ze stránek VirtualBox.</translation>
     </message>
     <message>
         <source>Encryption cipher type not specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nebyla zadána šifra pro šifrování.</translation>
     </message>
     <message>
         <source>Encryption password empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>Heslo pro šifrování je prázdné.</translation>
     </message>
     <message>
         <source>Encryption passwords do not match.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hesla pro šifrování se neshodují.</translation>
     </message>
     <message>
         <source>Holds the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of storage space.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazuje cestu, kam jsou ukládány snímky virtuálního počítače. Snímky můžou zabrat velké množství diskového prostoru.</translation>
     </message>
     <message>
         <source>Leave Unchanged</source>
         <comment>cipher type</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nechat beze změny</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsInterface</name>
     <message>
         <source>Allows to modify VM menu-bar contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Dovoluje změnit obsah nabídky pro VM.</translation>
     </message>
     <message>
         <source>Mini ToolBar:</source>
-        <translation type="unfinished">Mini nástrojová lišta:</translation>
+        <translation>Malá nástrojová lišta:</translation>
     </message>
     <message>
         <source>When checked, show the Mini ToolBar in full-screen and seamless modes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, bude se v celoobrazovkovém a bezešvém režimu zobrazovat malá nástrojová lišta.</translation>
     </message>
     <message>
         <source>Show in &Full-screen/Seamless</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazit v &celoobrazovkovém/bezešvém režimu</translation>
     </message>
     <message>
         <source>When checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, bude se malái nastrojová lišta zobrazovat nahoře na obrazovce místo na výchozí pozici dole na obrazovce.</translation>
     </message>
     <message>
         <source>Show at &Top of Screen</source>
-        <translation type="unfinished">Zobrazit na&hoře na obrazovce</translation>
+        <translation>Zobrazit na&hoře na obrazovce</translation>
     </message>
     <message>
         <source>Allows to modify VM status-bar contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Dovoluje změnit obsah stavové lišty pro VM.</translation>
     </message>
 </context>
 <context>
@@ -6263,7 +6287,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Selects the promiscuous mode policy of the network adapter when attached to an internal network, host only network or a bridge.</source>
-        <translation type="unfinished"></translation>
+        <translation>Obsahuje politiku pro promiskuitní režim síťové karty pro interní síť, síť pouze s hotem nebo pro režim síťovém mostu.</translation>
     </message>
     <message>
         <source>Generic Properties:</source>
@@ -6335,23 +6359,23 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Selects how this virtual adapter is attached to the real network of the Host OS.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ovládá způsob, jakým bude virtuální karta připojena k reálné síti hostitelského OS.</translation>
     </message>
     <message>
         <source>Shows additional network adapter options.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí nebo skryje další možnosti síťové karty.</translation>
     </message>
     <message>
         <source>Holds the configuration settings for the network attachment driver. The settings should be of the form <b>name=value</b> and will depend on the driver. Use <b>shift-enter</b> to add a new entry.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zde zadejte nastavení pro síťový ovladač, který používáte. Nastavení by mělo být ve formátu <b>název=hodnota</b> a je závislé na použitém ovladači. Pro zadání další položky použijte <b>shift-enter</>b>.</translation>
     </message>
     <message>
         <source>When checked, the virtual network cable is plugged in.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, bude ke kartě připojen virtuální síťový kabel.</translation>
     </message>
     <message>
         <source>Displays a window to configure port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Otevře dialog pro správu pravidel předávaných portů.</translation>
     </message>
 </context>
 <context>
@@ -6513,23 +6537,23 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>No IRQ is currently specified.</source>
-        <translation type="unfinished">Nyní není zadáno žádné IRQ.</translation>
+        <translation>Nyní není zadáno žádné IRQ.</translation>
     </message>
     <message>
         <source>No I/O port is currently specified.</source>
-        <translation type="unfinished">Nyní není zadán žádný I/O port.</translation>
+        <translation>Nyní není zadán žádný I/O port.</translation>
     </message>
     <message>
         <source>Two or more ports have the same settings.</source>
-        <translation type="unfinished">Dva nebo více portů mají stejné nastavení.</translation>
+        <translation>Dva nebo více portů mají stejné nastavení.</translation>
     </message>
     <message>
         <source>No port path is currently specified.</source>
-        <translation type="unfinished">Není zadána cesta k portu.</translation>
+        <translation>Není zadána cesta k portu.</translation>
     </message>
     <message>
         <source>There are currently duplicate port paths specified.</source>
-        <translation type="unfinished">Existují duplicitní cesty pro nastavené porty.</translation>
+        <translation>Existují duplicitní cesty pro nastavené porty.</translation>
     </message>
 </context>
 <context>
@@ -6686,27 +6710,27 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Add Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidat sdílenou složku</translation>
     </message>
     <message>
         <source>Edit Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravit sdílenou složku</translation>
     </message>
     <message>
         <source>Remove Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebrat sdílenou složku</translation>
     </message>
     <message>
         <source>Adds new shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá novou sdílenou složku.</translation>
     </message>
     <message>
         <source>Edits selected shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Upraví vybranou sdílenou složku.</translation>
     </message>
     <message>
         <source>Removes selected shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebere vybranou sdílenou složku.</translation>
     </message>
 </context>
 <context>
@@ -6761,7 +6785,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When checked, this shared folder will be permanent.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, sdílená složka bude připojena stále.</translation>
     </message>
 </context>
 <context>
@@ -6841,19 +6865,19 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Selects the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ovládá pracovní režim tohoto sériového portu. Pokud zvolíte <b>Odpojen</b>, hostovaný OS najde sériový port, ale nebude schopen ho ovládat.</translation>
     </message>
     <message>
         <source>When checked, the virtual machine will assume that the pipe or socket specified in the <b>Path/Address</b> field exists and try to use it. Otherwise, the pipe or socket will be created by the virtual machine when it starts.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, virtuální počítač bude předpokládat, že roura nebo soket uvedené v políčku <b>Cesta/Adresa</b> existuje a pokusí se je použít. Jinak se virtuální počítač při startu rouru nebo soket pokusí vytvořit.</translation>
     </message>
     <message>
         <source>&Connect to existing pipe/socket</source>
-        <translation type="unfinished"></translation>
+        <translation>&Připojit k existující rouře/soketu</translation>
     </message>
     <message>
         <source>&Path/Address:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Cesta/Adresa:</translation>
     </message>
     <message>
         <source><p>In <b>Host Pipe</b> mode: Holds the path to the serial port's pipe on the host. Examples: "\\.\pipe\myvbox" or "/tmp/myvbox", for Windows and UNIX-like systems respectively.</p><p>In <b>Host Device</b> mode: Holds the host serial device name. Examples: "COM1" or "/dev/ttyS0".</p><p>In <b>Raw File</b> mode: Holds the file-path on the host system, where the seri [...]
@@ -6861,23 +6885,23 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>No IRQ is currently specified.</source>
-        <translation type="unfinished">Nyní není zadáno žádné IRQ.</translation>
+        <translation>Nyní není zadáno žádné IRQ.</translation>
     </message>
     <message>
         <source>No I/O port is currently specified.</source>
-        <translation type="unfinished">Nyní není zadán žádný I/O port.</translation>
+        <translation>Nyní není zadán žádný I/O port.</translation>
     </message>
     <message>
         <source>Two or more ports have the same settings.</source>
-        <translation type="unfinished">Dva nebo více portů mají stejné nastavení.</translation>
+        <translation>Dva nebo více portů mají stejné nastavení.</translation>
     </message>
     <message>
         <source>No port path is currently specified.</source>
-        <translation type="unfinished">Není zadána cesta k portu.</translation>
+        <translation>Není zadána cesta k portu.</translation>
     </message>
     <message>
         <source>There are currently duplicate port paths specified.</source>
-        <translation type="unfinished">Existují duplicitní cesty pro nastavené porty.</translation>
+        <translation>Existují duplicitní cesty pro nastavené porty.</translation>
     </message>
 </context>
 <context>
@@ -7365,117 +7389,117 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Lists all storage controllers for this machine and the virtual images and host drives attached to them.</source>
-        <translation type="unfinished"></translation>
+        <translation>Obsahuje všechny řadiče na tomto počítači a k nim připojené disky jednotlivých virtuálních počítačů.</translation>
     </message>
     <message>
         <source>Holds the name of the storage controller currently selected in the Storage Tree.</source>
-        <translation type="unfinished"></translation>
+        <translation>Obsahuje název aktuálně vybraného řadiče ve stromu pro úložiště.</translation>
     </message>
     <message>
         <source>When checked, allows to use host I/O caching capabilities.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, dovoluje využít možnosti I/O cache pro hostitele.</translation>
     </message>
     <message>
         <source>When checked, the virtual disk will not be removed when the guest system ejects it.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, nebude virtuální disk při vysunutí v hostovaném systému odpojen.</translation>
     </message>
     <message>
         <source>When checked, the guest system will see the virtual disk as a solid-state device.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, bude virtuální disk v hostovaném operačním systému vidět jako solid state disk.</translation>
     </message>
     <message>
         <source>When checked, the guest system will see the virtual disk as a hot-pluggable device.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, bude virtuální disk v hostovaném operačním systému vidět jako za běhu vyměnitelný disk.</translation>
     </message>
     <message>
         <source>&Hot-pluggable</source>
-        <translation type="unfinished"></translation>
+        <translation>&Vyměnitelné za běhu</translation>
     </message>
     <message>
         <source>Encrypted with key:</source>
-        <translation type="unfinished"></translation>
+        <translation>Zašifrováno klíčem:</translation>
     </message>
     <message>
         <source>Choose disk image...</source>
         <comment>This is used for hard disks, optical media and floppies</comment>
-        <translation type="unfinished"></translation>
+        <translation>Vyberte obraz disku...</translation>
     </message>
     <message>
         <source>Image</source>
         <comment>storage image</comment>
-        <translation type="unfinished">Obraz</translation>
+        <translation>Obraz</translation>
     </message>
     <message>
         <source><nobr>Expands/Collapses&nbsp;item.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Rozbalit/Sbalit&nbsp;položku</nobr></translation>
     </message>
     <message>
         <source><nobr>Adds&nbsp;hard&nbsp;disk.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Přidat&nbsp;pevný&nbsp;disk</nobr></translation>
     </message>
     <message>
         <source><nobr>Adds&nbsp;optical&nbsp;drive.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Přidat&nbsp;optickou&nbsp;mechaniku</nobr></translation>
     </message>
     <message>
         <source><nobr>Adds&nbsp;floppy&nbsp;drive.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Přidat&nbsp;disketovou&nbsp;mechaniku</nobr></translation>
     </message>
     <message>
         <source>Add USB Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidat USB řadič</translation>
     </message>
     <message>
         <source>Add Optical Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá optickou mechaniku</translation>
     </message>
     <message>
         <source>Add Floppy Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá disketovou mechaniku</translation>
     </message>
     <message>
         <source>Adds new storage controller.</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá nový řadič úložiště.</translation>
     </message>
     <message>
         <source>Removes selected storage controller.</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebere vybraný řadič úložiště.</translation>
     </message>
     <message>
         <source>Adds new storage attachment.</source>
-        <translation type="unfinished"></translation>
+        <translation>Připojí k úložišti nové zařízení.</translation>
     </message>
     <message>
         <source>Removes selected storage attachment.</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebere vybrané zařízení od řadiče.</translation>
     </message>
     <message>
         <source>Optical &Drive:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Optická mechanika:</translation>
     </message>
     <message>
         <source>Choose a virtual optical disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Výběr virtuálního optického disku nebo fyzického zařízení pro virtuální počítač. Virtuální počítač uvidí obsah disku vloženého do této fyzické jednotky nebo v tomto souboru jako data a soubory.</translation>
     </message>
     <message>
         <source>Create New Hard Disk...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vytvořit nový pevný disk...</translation>
     </message>
     <message>
         <source>Choose Virtual Hard Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vyberte soubor s obrazem virtuálního disku...</translation>
     </message>
     <message>
         <source>Choose Virtual Optical Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vybrat soubor s obrazem virtuální optické mechaniky...</translation>
     </message>
     <message>
         <source>Remove Disk from Virtual Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebere disk z virtuální mechaniky</translation>
     </message>
     <message>
         <source>Choose Virtual Floppy Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vybrat soubor s obrazem virtuální diskety...</translation>
     </message>
 </context>
 <context>
@@ -7743,53 +7767,53 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source>
-        <translation type="unfinished"></translation>
+        <translation>Pokud je zatrženo, bude RTC zařízení ukazovat čas v UTC, jinak bude v lokálním formátu. Operační systém Unix obvykle očekává čas ve formátu UTC.</translation>
     </message>
     <message>
         <source>%</source>
-        <translation type="unfinished"></translation>
+        <translation>%</translation>
     </message>
     <message>
         <source>&Paravirtualization Interface:</source>
-        <translation type="unfinished"></translation>
+        <translation>Rozhraní &paravirtualizace:</translation>
     </message>
     <message>
         <source>Selects the paravirtualization guest interface provider to be used by this virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zvolte poskytovatele paravirtualizačního rozhraní pro tento virtuální  počítač.</translation>
     </message>
     <message>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support a chip set of type ICH9 you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktuálně není povolena vlastnost I/O APIC na záložce Systém v sekci Základní deska. Ta je nutná pro podporu čipové sady typu ICH9. Po potvrzení změny bude podpora automaticky povolena.</translation>
     </message>
     <message>
         <source>USB controller emulation is not currently enabled on the USB page. This is needed to support an emulated USB input device you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktuálně není povolena emulace USB řadiče. Ta je nutná pro podporu emulovaných USB vstupních zařízení. Po potvrzení změny bude podpora automaticky povolena.</translation>
     </message>
     <message>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktuálně není povolena vlastnost I/O APIC na záložce Systém v sekci Základní deska. Ta je nutná pro podporu více virtuálních procesorů. Po potvrzení změny bude podpora automaticky povolena.</translation>
     </message>
     <message>
         <source>Hardware virtualization is not currently enabled in the Acceleration section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktuálně není povolena hardwarová virtualizace na záložce Systém v sekci Akcelerace. Ta je nutná pro podporu více virtuálních procesorů. Podpora bude po potvrzení změn automaticky povolena.</translation>
     </message>
     <message>
         <source>%1 MB</source>
-        <translation type="unfinished">%1 MB</translation>
+        <translation>%1 MB</translation>
     </message>
     <message>
         <source>%1 CPU</source>
         <comment>%1 is 1 for now</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 CPU</translation>
     </message>
     <message>
         <source>%1 CPUs</source>
         <comment>%1 is host cpu count * 2 for now</comment>
-        <translation type="unfinished"></translation>
+        <translation>Počet CPU: %1</translation>
     </message>
     <message>
         <source>%1%</source>
-        <translation type="unfinished">%1%</translation>
+        <translation>%1%</translation>
     </message>
 </context>
 <context>
@@ -7925,79 +7949,79 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>When chosen, enables the virtual USB OHCI controller of this machine. The USB OHCI controller provides USB 1.0 support.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, povolí virtuální USB OHCI řadič tomuto počítači. USB OHCI řadič poskytuje podporu pro USB 1.0.</translation>
     </message>
     <message>
         <source>USB &1.1 (OHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>USB &1.1 (OHCI) řadič</translation>
     </message>
     <message>
         <source>When chosen, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, povolí virtuální USB EHCI řadič tomuto počítači. USB EHCI řadič poskytuje podporu pro USB 2.0.</translation>
     </message>
     <message>
         <source>USB &2.0 (EHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>USB &2.0 (EHCI) řadič</translation>
     </message>
     <message>
         <source>When chosen, enables the virtual USB xHCI controller of this machine. The USB xHCI controller provides USB 3.0 support.</source>
-        <translation type="unfinished"></translation>
+        <translation>Je-li zatrženo, povolí virtuální USB xHCI řadič tomuto počítači. USB xHCI řadič poskytuje podporu pro USB 3.0.</translation>
     </message>
     <message>
         <source>USB &3.0 (xHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>USB &3.0 (xHCI) řadič</translation>
     </message>
     <message>
         <source>USB 2.0/3.0 is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site or disable USB 2.0/3.0 to be able to start the machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Pro tento virtuální počítač je povolena podpora USB 2.0/3,0. Je ale potřeba doinstalovat <b>%1</b>. Prosíme doinstalujte rozšíření z webových stránek aplikace VirtualBox. Po instalaci bude možno použít podporu pro USB 2.0/3.0, která je nyní do změny nastavení zakázána.</translation>
     </message>
     <message>
         <source>Add Empty Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidat prázdný filtr</translation>
     </message>
     <message>
         <source>Add Filter From Device</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidat filtr ze zařízení</translation>
     </message>
     <message>
         <source>Edit Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Upravit filtr</translation>
     </message>
     <message>
         <source>Remove Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebrat filtr</translation>
     </message>
     <message>
         <source>Move Filter Up</source>
-        <translation type="unfinished"></translation>
+        <translation>Posunout filtr nahoru</translation>
     </message>
     <message>
         <source>Move Filter Down</source>
-        <translation type="unfinished"></translation>
+        <translation>Posunout filtr dolů</translation>
     </message>
     <message>
         <source>Adds new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá filtr pro USB s hodnotami nastavenými na prázdné. Poznámka: takový filtr bude odpovídat všem připojeným USB zařízením.</translation>
     </message>
     <message>
         <source>Adds new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá nový USB filtr se všemi políčky nastavenými na hodnoty vybraného USB zařízení připojeného k hostitelskému PC.</translation>
     </message>
     <message>
         <source>Edits selected USB filter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Upraví vybraný USB filter.</translation>
     </message>
     <message>
         <source>Removes selected USB filter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Odstraní vybraný USB filtr.</translation>
     </message>
     <message>
         <source>Moves selected USB filter up.</source>
-        <translation type="unfinished"></translation>
+        <translation>Posune vybraný USB filtr nahoru.</translation>
     </message>
     <message>
         <source>Moves selected USB filter down.</source>
-        <translation type="unfinished"></translation>
+        <translation>Posune vybraný USB filtr dolů.</translation>
     </message>
 </context>
 <context>
@@ -8103,35 +8127,35 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Holds the vendor ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Definuje filtr pro ID dodavatele. Řetězec <i>přesné shody</i> má formát <tt>XXXX</tt> kde <tt>X</tt> je hexadecimální číslice. Prázdný řetězec značí jakoukoliv shodu.</translation>
     </message>
     <message>
         <source>Holds the product ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Definuje filtr pro ID produktu. Řetězec <i>přesné shody</i> má formát <tt>XXXX</tt> kde <tt>X</tt> je hexadecimální číslice. Prázdný řetězec značí jakoukoliv shodu.</translation>
     </message>
     <message>
         <source>Holds the revision number filter. The <i>exact match</i> string format is <tt>IIFF</tt> where <tt>I</tt> is a decimal digit of the integer part and <tt>F</tt> is a decimal digit of the fractional part. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Definuje filtr čísla revize. Formát pro <i>přesnou shodu</i> řetězce je <tt>IIFF</tt> kde <tt>I</tt> je desítková číslice celočíselné části a <tt>F</tt> je desítková číslice desetiné části. Prázdný řetězec zahrne jakoukoliv hodnotu.</translation>
     </message>
     <message>
         <source>Holds the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Definuje filtr výrobce jako <i>přesnou shodu</i> řetězců. Prázdný řetězec značí jakoukoliv shodu.</translation>
     </message>
     <message>
         <source>Holds the product name filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Definuje filtr pro název produktu jako <i>přesnou shodu</i> řetězců. Prázdný řetězec značí jakoukoliv shodu.</translation>
     </message>
     <message>
         <source>Holds the serial number filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Definuje filtr podle sériového čísla jako <i>přesnou shodu</i> řetězců. Prázdný řetězec značí jakoukoliv shodu.</translation>
     </message>
     <message>
         <source>Holds the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Definuje filtr podle čísla USB portu jako <i>přesnou shodu</i> řetězců. Prázdný řetězec značí jakoukoliv shodu.</translation>
     </message>
     <message>
         <source>Holds whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source>
-        <translation type="unfinished"></translation>
+        <translation>Definuje, zda bude tento filtr aplikován na USB zařízení připojené k lokálnímu počítači (<i>Ne</i>), na VRDP klienty (<i>Ano</i>) nebo na oboje (<i>Jakýkoliv</i>).</translation>
     </message>
 </context>
 <context>
@@ -8172,11 +8196,11 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Removing medium...</source>
-        <translation type="unfinished"></translation>
+        <translation>Odstraňuji médium...</translation>
     </message>
     <message>
         <source>&Hard disks</source>
-        <translation type="unfinished"></translation>
+        <translation>&Pevné disky</translation>
     </message>
 </context>
 <context>
@@ -8198,23 +8222,23 @@ p, li { white-space: pre-wrap; }
     <name>UIMenuBarEditorWidget</name>
     <message>
         <source>Virtual Screen Resize</source>
-        <translation type="unfinished"></translation>
+        <translation>Změna velikosti virtuální obrazovky</translation>
     </message>
     <message>
         <source>Virtual Screen Mapping</source>
-        <translation type="unfinished"></translation>
+        <translation>Mapování virtuální obrazovky</translation>
     </message>
     <message>
         <source>Switch</source>
-        <translation type="unfinished">Přepnout</translation>
+        <translation>Přepnout</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Zavřít</translation>
+        <translation>Zavřít</translation>
     </message>
     <message>
         <source>Enable Menu Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Povolit nabídkou lištu</translation>
     </message>
 </context>
 <context>
@@ -8730,7 +8754,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <source>Insert</source>
         <comment>additions</comment>
-        <translation type="unfinished">Připojit</translation>
+        <translation>Připojit</translation>
     </message>
     <message>
         <source><p>The host key is currently defined as <b>%1</b>.</p></source>
@@ -9469,7 +9493,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully starte [...]
-        <translation type="unfinished"><p>Pro tento virtuální počítač nejsou dostupné přídavky pro hosta a sdílené složky nelze bez tohoto přídavku použít. Pokud chcete používat sdílené složky, nainstalujte přídavky pro hosta, případně je reinstalujte pokud nepracují správně zvolením položky <b>Instalovat přídavky pro hosta</b> z nabídky <b>Zařízení</b>. Sdílené složky budou přístupné až bude virtuální počítač plně spuštěn.</p></translation>
+        <translation><p>Pro tento virtuální počítač nejsou dostupné Přídavky pro hosta a sdílené složky nelze bez tohoto přídavku použít. Pokud chcete používat sdílené složky, nainstalujte Přídavky pro hosta, případně je reinstalujte pokud nepracují správně zvolením položky <b>Vložit CD obraz s Přídavky pro hosta</b> z nabídky <b>Zařízení</b>. Sdílené složky budou po nainstalování přístupné až bude virtuální počítač plně spuštěn.</p></translation>
     </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>
@@ -9985,7 +10009,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source><p>Are you sure you want to download the <b>VirtualBox User Manual</b> from <nobr><a href="%1">%1</a></nobr> (size %2 bytes)?</p></source>
-        <translation type="unfinished"><p>Opravdu chcete stáhnout uživatelský manuál pro VirtualBox z <nobr><a href="%1">%1</a></nobr> (velikost %2 bytů)?</p></translation>
+        <translation><p>Opravdu chcete stáhnout <b>uživatelský manuál pro VirtualBox</b> z <nobr><a href="%1">%1</a></nobr> (velikost %2 bytů)?</p></translation>
     </message>
     <message>
         <source><p>The VirtualBox User Manual 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>
@@ -10023,99 +10047,99 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Failed to attach the webcam <b>%1</b> to the virtual machine <b>%2</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se připojit webkameru <b>%1</b> k virtuálnímu počítači <b>%2</b>.</translation>
     </message>
     <message>
         <source>Failed to detach the webcam <b>%1</b> from the virtual machine <b>%2</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se odpojit webkameru <b>%1</b> od virtuálního počítače <b>%2</b>.</translation>
     </message>
     <message>
         <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 type="unfinished"></translation>
+        <translation><p>Virtuální obrazovka je nyní nastavena na <b>%1&nbsp;bitový</b>barevný režim. Pro lepší odezvu ho prosím změňte na <b>%2&nbsp;bitový</b>. Lze to provést ze sekce <b>Obrazovka</b> v Ovládacím panelu v nastavení pro virtuální počítač.</p></translation>
     </message>
     <message>
         <source><p>Failed to create the VirtualBoxClient COM object.</p><p>The application will now terminate.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Nepodařilo se vytvořit COM objekt VirtualBoxu.</p><p>Aplikace bude ukončena.</p></translation>
     </message>
     <message>
         <source>Failed to set the global VirtualBox extra data for key <i>%1</i> to value <i>{%2}</i>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nelze uložit globální extra data VirtualBoxu pro klíč <i>%1</i> na hodnotu  <i>{%2}</i>.</translation>
     </message>
     <message>
         <source>Failed to set the extra data for key <i>%1</i> of machine <i>%2</i> to value <i>{%3}</i>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nelze uložit extra data pro virtuální počítač <i>%2</i> pro klíč <i>%1</i> na hodnotu <i>{%3}</i>.</translation>
     </message>
     <message>
         <source><p>One or more disk image files are not currently accessible. As a result, you will not be able to operate virtual machines that use these files until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see which files are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Jeden nebo více souborů s obrazy virtuálních pevných disků je momentálně nedostupný. Nebudete tak moci použít virtuální počítače, které je používají, dokud nebudou opět dostupné.</p><p>Stiskněte <b>Zkontrolovat</b> pro otevření okna Správce virtuálních médií a podívejte se, která média jsou nedostupná, nebo stiskněte <b>Ignorovat</b> a ignorujte tuto zprávu.</p></translation>
     </message>
     <message>
         <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and storage data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Smazáním snímku budou také odstraněny informace o stavu a uložená data na discích, která byla použita ve snímku a ta budou spojena do jednoho souboru. To může být zdlouhavý proces a informace o snímku již potom nelze obnovit.</p><p>Opravdu chcete smazat vybraný snímek <b>%1</b>?</p></translation>
     </message>
     <message>
         <source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Smazání snímku %1 vyžaduje dočasně více diskového prostoru. V nejhorším případě velikost obrazu %2 naroste až na %3, ale na souborovém systému je pouze %4 volného místa.</p><p>Pokud během operace dojde místo na disku, může to vést k poškození obrazu a nastavení pro virtuální počítač. </p><p>Můžete pokračovat v mazání na vlastní riziko.</p></translation>
     </message>
     <message>
         <source>Failed to save the settings.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se uložit nastavení.</translation>
     </message>
     <message>
         <source><p>You are about to add a new optical drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual optical disk to put in the drive or to leave it empty for now?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Chystáte se přidat novou optickou mechaniku k řadiči <b>%1</b>. </p><p>Chcete vybrat virtuální obraz optického disku a vložit ho do mechaniky nebo nechat mechaniku prázdnou?</p></translation>
     </message>
     <message>
         <source><p>Are you sure you want to delete the optical drive?</p><p>You will not be able to insert any optical disks or ISO images or install the Guest Additions without it!</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Opravdu chcete smazat optické zařízení?</p><p>Bez něj nebudete moci připojit žádný optický disk nebo ISO obraz a ani nainstalovat přídavky pro hosta!</p></translation>
     </message>
     <message>
         <source>Failed to attach the optical drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se připojit optickou mechaniku (<nobr><b>%1</b></nobr>) ke slotu zařízení <i>%2</i> počítače <b>%3</b>.</translation>
     </message>
     <message>
         <source>Failed to attach the floppy drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se připojit disketovou mechaniku (<nobr><b>%1</b></nobr>) ke slotu zařízení <i>%2</i> počítače <b>%3</b>.</translation>
     </message>
     <message>
         <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktuální pravidla pro předávání portů nejsou platná. Název každého pravidla musí být vždy unikátní.</translation>
     </message>
     <message>
         <source>The current port forwarding rules are not valid. Few rules have same host ports and conflicting IP addresses.</source>
-        <translation type="unfinished"></translation>
+        <translation>Aktuální pravidla pro předávání portů nejsou platná. Několik pravidel má stejné porty hosta a kolidující IP adresy.</translation>
     </message>
     <message>
         <source><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Jste si jistí, že chcete uvolnit virtuální pevný disk <nobr><b>%1</b></nobr>?</p><p>Disk bude odpojen od tohoto virtuálního počítače(čů): <b>%2</b>.</p></translation>
     </message>
     <message>
         <source><p>Do you want to delete the storage unit of the virtual hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which mak [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Chcete smazat úložiště pevného disku <nobr><b>%1</b>?</nobr></p><p>Pokud zvolíte <b>Smazat</b>, bude obraz po odhlášení trvale smazán. Tuto operaci nelze vrátit.</p><p>Pokud zvolíte <b>Ponechat</b>, bude virtuální pevný disk odstraněn ze seznamu, ale obraz bude ponechán na vašem fyzickém disku a lze jej opět později do seznamu přidat.</p></translation>
     </message>
     <message>
         <source>Failed to detach the optical drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se odpojit optickou mechaniku (<nobr><b>%1</b></nobr>) ze slotu zařízení <i>%2</i> počítače <b>%3</b>.</translation>
     </message>
     <message>
         <source>Failed to detach the floppy drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se odpojit disketovou mechaniku (<nobr><b>%1</b></nobr>) ze slotu zařízení <i>%2</i> počítače <b>%3</b>.</translation>
     </message>
     <message>
         <source>Failed to open the disk image file <nobr><b>%1</b></nobr>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se otevřít obraz virtuálního pevného disku <nobr><b>%1</b></nobr>.</translation>
     </message>
     <message>
         <source>Failed to close the disk image file <nobr><b>%1</b></nobr>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se zavřít soubor s obrazem virtuálního pevného disku <nobr><b>%1</b></nobr>.</translation>
     </message>
     <message>
         <source>You are about to create a new virtual machine without a hard disk. You will not be able to install an operating system on the machine until you add one. In the mean time you will only be able to start the machine using a virtual optical disk or from the network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vytváříte nový virtuální počítač bez pevného disku. Pokud do něj nějaký pevný disk nepřidáte, nebude možné nainstalovat operační systém. Bude možné spustit virtuální počítač pouze pomocí virtuálního optického disku nebo ze sítě.</translation>
     </message>
     <message>
         <source>Bad password or authentication failure.</source>
-        <translation type="unfinished"></translation>
+        <translation>Špatné heslo nebo autentizace selhala.</translation>
     </message>
     <message>
         <source><p>A critical error has occurred while running the virtual machine and the machine execution should be stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt>, which you can find in the virtual machine log directory, as well as a description of what you were doing when this  [...]
@@ -10123,42 +10147,50 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source><p>The virtual machine window will be now switched to <b>full-screen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in full-screen mode. You can access it by pressing <b>Host+Home</b>.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Okno virtuálního počítače bude přepnuto do režimu <b>celé obrazovky</b>. Můžete přejít zpět do režimu okna stiskem <b>%1</b>. Upozorňujeme, že <i>Host</i> klávesa je právě nastavena na <b>%2</b>.</p><p>Upozorňujeme, že panel hlavní nabídky je v režimu celé obrazovky skrytý. Můžete ho zpřístupnit stiskem <b>Host+Home</b>.</p></translation>
     </message>
     <message>
         <source><p>Could not switch the guest display to full-screen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to full-screen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Nepodařilo se přejít do celobrazovkového režimu kvůli nedostatečné video paměti hosta.</p><p>Nastavte virtuální počítač tak, aby měl alespoň <b>%1</b> video paměti.</p><p>Stiskněte tlačítko<b>Ignorovat</b> pro přepnutí do celoobrazovkého režimu nebo <b>Zrušit</b>pro zrušení této oprace.</p></translation>
     </message>
     <message>
         <source>Failed to connect the network adapter cable of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se připojit kabel k síťové kartě virtuálního počítače <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to disconnect the network adapter cable of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nepodařilo se odpojit kabel od síťové karty virtuálního počítače <b>%1</b>.</translation>
     </message>
     <message>
         <source><p>Could not insert the <b>VirtualBox Guest Additions</b> disk image file into the virtual machine <b>%1</b>, as the machine has no optical drives. Please add a drive using the storage page of the virtual machine settings window.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Nepodařilo se připojit soubor s obrazem <b>Přídavků pro hosta</b>aplikace VirtualBox do virtuálního počítače <b>%1</b> protože nemá optickou mechaniku. Přidejte prosím mechaniku na záložce úložiště ve vlastnostech virtuálního počítače.</p></translation>
     </message>
     <message>
         <source><p>The <b>VirtualBox Guest Additions</b> disk image file has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>.</nobr></p><p>Do you wish to register this disk image file and insert it into the virtual optical drive?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Obraz s <b>Přídavky pro hosta</b> byl úspěšně stažen z <nobr><a href="%1">%1</a></nobr> a uložen lokálně jako <nobr><b>%2</b>.</nobr></p><p>Chcete zaregistrovat tento soubor s obrazem a připojit ho do virtuální optické mechaniky?</p></translation>
     </message>
     <message>
         <source>Drag and drop operation from host to guest failed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Operace Táhni a pusť mezi hostitelem a hostem selhala.</translation>
     </message>
     <message>
         <source>Unable to cancel host to guest drag and drop operation.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nelze přerušit operaci táhni a pusť mezi hostem a hostitelem.</translation>
     </message>
     <message>
         <source>Drag and drop operation from guest to host failed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Operace Táhni a pusť mezi hostem a hostitelem selhala.</translation>
     </message>
     <message>
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
+        <translation>Heslo pro šifrování <nobr>ID = '%1'</nobr> je neplatné.</translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </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>
     </message>
 </context>
@@ -10276,7 +10308,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>N&ame:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Název:</translation>
     </message>
 </context>
 <context>
@@ -10399,6 +10431,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>Neznámý důvod</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
@@ -11296,55 +11364,55 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     <name>UIPortForwardingTable</name>
     <message>
         <source>Name</source>
-        <translation type="unfinished"></translation>
+        <translation>Název</translation>
     </message>
     <message>
         <source>Protocol</source>
-        <translation type="unfinished">Protokol</translation>
+        <translation>Protokol</translation>
     </message>
     <message>
         <source>Host IP</source>
-        <translation type="unfinished">IP adresa hostitele</translation>
+        <translation>IP adresa hostitele</translation>
     </message>
     <message>
         <source>Host Port</source>
-        <translation type="unfinished">Port hostitele</translation>
+        <translation>Port hostitele</translation>
     </message>
     <message>
         <source>Guest IP</source>
-        <translation type="unfinished">IP adresa hosta</translation>
+        <translation>IP adresa hosta</translation>
     </message>
     <message>
         <source>Guest Port</source>
-        <translation type="unfinished">Port hosta</translation>
+        <translation>Port hosta</translation>
     </message>
     <message>
         <source>Contains a list of port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tabulka obsahuje seznam pravidel pro přesměrování portů.</translation>
     </message>
     <message>
         <source>Add New Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Vložit nové pravidlo</translation>
     </message>
     <message>
         <source>Copy Selected Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Zkopírovat vybrané pravidlo</translation>
     </message>
     <message>
         <source>Remove Selected Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebrat vybrané pravidlo</translation>
     </message>
     <message>
         <source>Adds new port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Přidá nové pravidlo pro přesměrování portů.</translation>
     </message>
     <message>
         <source>Copies selected port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zkopíruje vybrané pravidlo pro přesměrování portů.</translation>
     </message>
     <message>
         <source>Removes selected port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Odebere vybrané pravidlo pro přesměrování portů.</translation>
     </message>
 </context>
 <context>
@@ -11546,7 +11614,7 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     </message>
     <message>
         <source>Preferences</source>
-        <translation type="unfinished"></translation>
+        <translation>Předvolby</translation>
     </message>
 </context>
 <context>
@@ -11625,37 +11693,37 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     </message>
     <message>
         <source>User Interface</source>
-        <translation type="unfinished"></translation>
+        <translation>Uživatelské rozhraní</translation>
     </message>
     <message>
         <source>Settings</source>
-        <translation type="unfinished">Nastavení</translation>
+        <translation>Nastavení</translation>
     </message>
 </context>
 <context>
     <name>UISettingsSerializerProgress</name>
     <message>
         <source>Loading Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Načítám nastavení...</translation>
     </message>
     <message>
         <source>Saving Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ukládám nastavení...</translation>
     </message>
 </context>
 <context>
     <name>UIStatusBarEditorWidget</name>
     <message>
         <source><nobr><b>Click</b> to toggle indicator presence.</nobr><br><nobr><b>Drag&Drop</b> to change indicator position.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr><b>Klepnutím</b> změňte přítomnost indikátoru.</nobr><br><nobr>Pomocí <b>Táhni a pusť </b> změníte pozici indikátoru.</nobr></translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Zavřít</translation>
+        <translation>Zavřít</translation>
     </message>
     <message>
         <source>Enable Status Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Povolit stavovou lištu</translation>
     </message>
 </context>
 <context>
@@ -11839,11 +11907,11 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     </message>
     <message>
         <source>&Continue running in the background</source>
-        <translation type="unfinished"></translation>
+        <translation>Povolit běh na poza&dí</translation>
     </message>
     <message>
         <source><p>Close the virtual machine windows but keep the virtual machine running.</p><p>You can use the VirtualBox Manager to return to running the virtual machine in a window.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Zavře okno s virtuálním počítačem ale ten bude stále běžet.</p><p>Pokud se chcete vrátit k běhu virtuálního počítače v okně využijte k tomu Správce VirtualBox.</p></translation>
     </message>
 </context>
 <context>
@@ -11861,98 +11929,98 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     <name>UIVMInfoDialog</name>
     <message>
         <source>%1 - Session Information</source>
-        <translation type="unfinished">%1 - Informace o sezení</translation>
+        <translation>%1 - Informace o sezení</translation>
     </message>
     <message>
         <source>Configuration &Details</source>
-        <translation type="unfinished">Detaily &nastavení</translation>
+        <translation>Detaily &nastavení</translation>
     </message>
     <message>
         <source>&Runtime Information</source>
-        <translation type="unfinished">&Informace o běhu</translation>
+        <translation>&Informace o běhu</translation>
     </message>
     <message>
         <source>DMA Transfers</source>
-        <translation type="unfinished">DMA přenosy</translation>
+        <translation>DMA přenosy</translation>
     </message>
     <message>
         <source>PIO Transfers</source>
-        <translation type="unfinished">PIO přenosy</translation>
+        <translation>PIO přenosy</translation>
     </message>
     <message>
         <source>Data Read</source>
-        <translation type="unfinished">Přečteno dat</translation>
+        <translation>Přečteno dat</translation>
     </message>
     <message>
         <source>Data Written</source>
-        <translation type="unfinished">Zapsáno dat</translation>
+        <translation>Zapsáno dat</translation>
     </message>
     <message>
         <source>Data Transmitted</source>
-        <translation type="unfinished">Přeneseno dat</translation>
+        <translation>Přeneseno dat</translation>
     </message>
     <message>
         <source>Data Received</source>
-        <translation type="unfinished">Přijato dat</translation>
+        <translation>Přijato dat</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest additions</comment>
-        <translation type="unfinished">Nedetekováno</translation>
+        <translation>Nedetekováno</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest os type</comment>
-        <translation type="unfinished">Nedetekováno</translation>
+        <translation>Nedetekován</translation>
     </message>
     <message>
         <source>Not Available</source>
         <comment>details report (VRDE server port)</comment>
-        <translation type="unfinished">Nedostupný</translation>
+        <translation>Nedostupný</translation>
     </message>
     <message>
         <source>Runtime Attributes</source>
-        <translation type="unfinished">Parametry při spuštění</translation>
+        <translation>Parametry při spuštění</translation>
     </message>
     <message>
         <source>Screen Resolution</source>
-        <translation type="unfinished">Rozlišení obrazovky</translation>
+        <translation>Rozlišení obrazovky</translation>
     </message>
     <message>
         <source>VM Uptime</source>
-        <translation type="unfinished"></translation>
+        <translation>Doba běhu počítače</translation>
     </message>
     <message>
         <source>Clipboard Mode</source>
-        <translation type="unfinished">Režim se schránkou</translation>
+        <translation>Režim se schránkou</translation>
     </message>
     <message>
         <source>Drag and Drop Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Režim Táhni a pusť</translation>
     </message>
     <message>
         <source>Guest Additions</source>
-        <translation type="unfinished">Přídavky pro hosta</translation>
+        <translation>Přídavky pro hosta</translation>
     </message>
     <message>
         <source>Guest OS Type</source>
-        <translation type="unfinished">OS hosta</translation>
+        <translation>Typ OS hosta</translation>
     </message>
     <message>
         <source>Storage Statistics</source>
-        <translation type="unfinished">Statistiky o úložištích</translation>
+        <translation>Statistiky o úložištích</translation>
     </message>
     <message>
         <source>No Storage Devices</source>
-        <translation type="unfinished">Bez zařízení pro úložiště</translation>
+        <translation>Bez zařízení pro úložiště</translation>
     </message>
     <message>
         <source>Network Statistics</source>
-        <translation type="unfinished">Statistiky síťových rozhraní</translation>
+        <translation>Statistiky síťových rozhraní</translation>
     </message>
     <message>
         <source>No Network Adapters</source>
-        <translation type="unfinished">Bez síťových adaptérů</translation>
+        <translation>Bez síťových adaptérů</translation>
     </message>
 </context>
 <context>
@@ -12126,19 +12194,19 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     </message>
     <message>
         <source>&Expert Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>&Expertní režim</translation>
     </message>
     <message>
         <source>Switch to <nobr><b>Expert Mode</b></nobr>, a one-page dialog for experienced users.</source>
-        <translation type="unfinished"></translation>
+        <translation>Přepnout do <nobr>Expertního režimu</b></nobr>, zobrazení na jednu stránku pro zkušené uživatele.</translation>
     </message>
     <message>
         <source>&Guided Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Režim &průvodce</translation>
     </message>
     <message>
         <source>Switch to <nobr><b>Guided Mode</b></nobr>, a step-by-step dialog with detailed explanations.</source>
-        <translation type="unfinished"></translation>
+        <translation>Přepnout do <nobr>režimu Průvodce</b></nobr>, dialogu zobrazeného krok za krokem s detailním vysvětlením.</translation>
     </message>
 </context>
 <context>
@@ -12234,75 +12302,75 @@ 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 type="unfinished"></translation>
+        <translation>Kopírování virtuálního pevného disku</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vyberte soubor s virtuálním pevným diskem...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Úložiště na fyzickém pevném disku</translation>
     </message>
     <message>
         <source>Please choose whether the new virtual hard disk file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source><p>A <b>fixed size</b> hard disk file may take longer to create on some systems but is often faster to use.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation type="unfinished"></translation>
+        <translation>Zvolte umístění nového souboru s virtuálním pevným diskem...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Pevný disk pro &kopírování</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation type="unfinished"></translation>
+        <translation>&Vytvořit nový pevný disk</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation type="unfinished"></translation>
+        <translation>&Typ souboru pro virtuální disk</translation>
     </message>
 </context>
 <context>
@@ -12405,7 +12473,7 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     </message>
     <message>
         <source><p>Please choose the type of clone you wish to create.</p><p>If you choose <b>Full clone</b>, an exact copy (including all virtual hard disk files) of the original virtual machine will be created.</p><p>If you choose <b>Linked clone</b>, a new machine will be created, but the virtual hard disk files will be tied to the virtual hard disk files of original machine and you will not be able to move the new virtual machine  [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Prosím zvolte typ klonu, který chcete vytvořit.</p><p>Pokud zvolíte <b>Plný klon</b> bude vytvořena kompletní kopie původního virtuálního počítače (včetně všech virtuálních pevných disků).</p><p>Pokud zvolíte <b>Propojený klon</b> bude nově vytvořený počítač mít propojeny disky s původním virtuálním počítačem a nebude tak možné přesunout nový virtuální počítač na jiný hostitelský počítač bez přesunu původního v [...]
     </message>
 </context>
 <context>
@@ -12763,51 +12831,51 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     </message>
     <message>
         <source>Create Virtual Hard Disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Vytvoření virtuálního pevného disku</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Úložiště na fyzickém pevném disku</translation>
     </message>
     <message>
         <source>Please choose whether the new virtual hard disk file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source><p>A <b>fixed size</b> hard disk file may take longer to create on some systems but is often faster to use.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Please type the name of the new virtual hard disk file into the box below or click on the folder icon to select a different folder to create the file in.</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <translation>Zvolte umístění nového souboru s virtuálním pevným diskem...</translation>
     </message>
     <message>
         <source>Select the size of the virtual hard disk in megabytes. This size is the limit on the amount of file data that a virtual machine will be able to store on the hard disk.</source>
-        <translation type="unfinished"></translation>
+        <translation>Zvolte velikost virtuálního pevného disku v megabytech. Velikost je limitována velikostí souboru, který je virtuální počítač schopen uložit na pevném disku.</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation type="unfinished"></translation>
+        <translation>&Typ souboru pro virtuální disk</translation>
     </message>
 </context>
 <context>
@@ -12898,27 +12966,27 @@ krok a připojit pevné disky později použitím dialogu Nastavení VM.</p&g
     </message>
     <message>
         <source>Hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Pevný disk</translation>
     </message>
     <message>
         <source><p>If you wish you can add a virtual hard disk to the new machine. You can either create a new hard disk file or select one from the list or from another location using the folder icon.</p><p>If you need a more complex storage set-up you can skip this step and make the changes to the machine settings once the machine is created.</p><p>The recommended size of the hard disk is <b>%1</b>.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Zde se do virtuálního počítače přidává virtuální pevný disk. Můžete ho buď vytvořit, vybrat ze seznamu již existujících nebo vybrat složku, kde je uložen. </p><p>Pokud potřebujete detailněji nastavit úložiště, můžete tento krok přeskočit a změny provést až bude virtuální počítač vytvořen.</p><p>Doporučená velikost virtuálního pevného disku je <b>%1</b>.</p></translation>
     </message>
     <message>
         <source>&Do not add a virtual hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>&Nepřidávat vituální pevný disk</translation>
     </message>
     <message>
         <source>&Create a virtual hard disk now</source>
-        <translation type="unfinished"></translation>
+        <translation>&Vytvořit nyní virtuální pevný disk</translation>
     </message>
     <message>
         <source>&Use an existing virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>&Použít existující soubor s virtuálním pevným diskem</translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file...</source>
-        <translation type="unfinished"></translation>
+        <translation>Vyberte virtuální obraz disku...</translation>
     </message>
 </context>
 <context>
@@ -14040,7 +14108,7 @@ Verze %1</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">Aktuální výchozí cesta bude zobrazena pro akceptování změn a novém otevření tohoto dialogu.</translation>
+        <translation>Aktuální výchozí cesta bude zobrazena pro akceptování změn a novém otevření tohoto dialogu.</translation>
     </message>
     <message>
         <source><not selected></source>
@@ -14093,19 +14161,19 @@ Verze %1</translation>
     </message>
     <message>
         <source>Displays a window to select a different folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Otevře dialog pro výběr jiné složky.</translation>
     </message>
     <message>
         <source>Displays a window to select a different file.</source>
-        <translation type="unfinished"></translation>
+        <translation>Otevře dialog pro výběr jiného souboru.</translation>
     </message>
     <message>
         <source>Holds the folder path.</source>
-        <translation type="unfinished"></translation>
+        <translation>Obsahuje cestu ke složce.</translation>
     </message>
     <message>
         <source>Holds the file path.</source>
-        <translation type="unfinished"></translation>
+        <translation>Obsahuje cestu k souboru.</translation>
     </message>
 </context>
 <context>
@@ -15936,7 +16004,7 @@ Verze %1</translation>
     <message>
         <source>Unrestricted Execution</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Neomezené provádění</translation>
     </message>
     <message>
         <source>PS/2 Mouse</source>
@@ -15965,7 +16033,7 @@ Verze %1</translation>
     </message>
     <message>
         <source>Unrestricted Execution</source>
-        <translation type="unfinished"></translation>
+        <translation>Neomezené provádění</translation>
     </message>
     <message>
         <source>USB Tablet</source>
@@ -15994,153 +16062,153 @@ Verze %1</translation>
     <message>
         <source>USB</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished">USB</translation>
+        <translation>USB</translation>
     </message>
     <message>
         <source>off</source>
         <comment>guest monitor status</comment>
-        <translation type="unfinished"></translation>
+        <translation>vypnuto</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (VT-x/AMD-V)</comment>
-        <translation type="unfinished">Aktivní</translation>
+        <translation>Aktivní</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (VT-x/AMD-V)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Neaktivní</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (Nested Paging)</comment>
-        <translation type="unfinished">Aktivní</translation>
+        <translation>Aktivní</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (Nested Paging)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Neaktivní</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (Unrestricted Execution)</comment>
-        <translation type="unfinished">Aktivní</translation>
+        <translation>Aktivní</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (Unrestricted Execution)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Neaktivní</translation>
     </message>
     <message>
         <source>Paravirtualization Interface</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Rozhraní paravirtualizace</translation>
     </message>
     <message>
         <source>Taking Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Sejmout snímek</translation>
     </message>
     <message>
         <source>Taking Online Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Provést živé sejmutí stavu</translation>
     </message>
     <message>
         <source>None</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Žádné</translation>
     </message>
     <message>
         <source>Default</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished">Výchozí</translation>
+        <translation>Výchozí</translation>
     </message>
     <message>
         <source>Legacy</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Zastaralé</translation>
     </message>
     <message>
         <source>Minimal</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Minimální</translation>
     </message>
     <message>
         <source>Hyper-V</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Hyper-V</translation>
     </message>
     <message>
         <source>KVM</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>KVM</translation>
     </message>
     <message>
         <source>Optical</source>
         <comment>DeviceType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Optické</translation>
     </message>
     <message>
         <source>New dynamically allocated storage</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nově dynamicky alokované úložiště</translation>
     </message>
     <message>
         <source>TCP</source>
         <comment>PortMode</comment>
-        <translation type="unfinished">TCP</translation>
+        <translation>TCP</translation>
     </message>
     <message>
         <source>OHCI</source>
         <comment>USBControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>OHCI</translation>
     </message>
     <message>
         <source>EHCI</source>
         <comment>USBControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>EHCI</translation>
     </message>
     <message>
         <source>xHCI</source>
         <comment>USBControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>xHCI</translation>
     </message>
     <message>
         <source>USB Port %1</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>USB port %1</translation>
     </message>
     <message>
         <source>User interface</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Uživatelské rozhraní</translation>
     </message>
     <message>
         <source>(Optical Drive)</source>
-        <translation type="unfinished"></translation>
+        <translation>(Optická mechanika)</translation>
     </message>
     <message>
         <source>Please choose a virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Vyberte soubor s virtuálním pevným diskem</translation>
     </message>
     <message>
         <source>All virtual hard disk files (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Všechny soubory s virtuálními pevnými disky (%1)</translation>
     </message>
     <message>
         <source>Encrypted</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Zašifrováno</translation>
     </message>
     <message>
         <source>Some of the files in this hard disk chain are inaccessible. Please use the Virtual Medium Manager to inspect these files.</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Některé části souboru s diskem jsou nedostupné. Použijte prosím Správce virtuálních medií pro zjištění souvislostí.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Zvolte prosím umístění pro soubor s novým vituálním pevným diskem</translation>
     </message>
 </context>
 <context>
@@ -16713,15 +16781,15 @@ na výchozí jazyk systému.</qt>
     </message>
     <message>
         <source><i>Not&nbsp;Encrypted</i></source>
-        <translation type="unfinished"></translation>
+        <translation><i>Nešifrováno</i></translation>
     </message>
     <message>
         <source>Encrypted with key:</source>
-        <translation type="unfinished"></translation>
+        <translation>Zašifrováno s klíčem:</translation>
     </message>
     <message>
         <source>UUID:</source>
-        <translation type="unfinished"></translation>
+        <translation>UUID:</translation>
     </message>
 </context>
 <context>
@@ -17664,19 +17732,19 @@ pro přístup z Linuxových OS. Tato funkce vyžaduje Přídavky pro hosta.</
     </message>
     <message>
         <source>Restore selected snapshot of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Obnoví vybraný snímek virtuálního počítače</translation>
     </message>
     <message>
         <source>Delete selected snapshot of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Smaže vybraný snímek virtuálního počítače</translation>
     </message>
     <message>
         <source>Display a window with selected snapshot details</source>
-        <translation type="unfinished"></translation>
+        <translation>Zobrazí detaily vybraného snímku</translation>
     </message>
     <message>
         <source>Clone selected virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Naklonuje vybraný virtuální počítač</translation>
     </message>
 </context>
 <context>
@@ -17722,7 +17790,7 @@ pro přístup z Linuxových OS. Tato funkce vyžaduje Přídavky pro hosta.</
     </message>
     <message>
         <source>Snapshot %1</source>
-        <translation type="unfinished">Snímek %1</translation>
+        <translation>Snímek %1</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 ac58ce0..d3f5b42 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_da.ts
@@ -4521,11 +4521,11 @@ p, li { white-space: pre-wrap; }
     <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>Hvis markeret, vil VirtualBox bruge proxy-indstillingerne til at hente Gæstetilføjelserne eller kontrollere om en nyere udgave er tilgængelig.</translation>
+        <translation type="obsolete">Hvis markeret, vil VirtualBox bruge proxy-indstillingerne til at hente Gæstetilføjelserne eller kontrollere om en nyere udgave er tilgængelig.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>Anv&end proxy</translation>
+        <translation type="obsolete">Anv&end proxy</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4583,6 +4583,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -9606,6 +9630,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -9809,6 +9841,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>Ukendt årsag</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
index ced71fb..278181f 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_de.ts
@@ -909,11 +909,6 @@
         </translation>
     </message>
     <message>
-        <source>Status</source>
-        <comment>password table field</comment>
-        <translation type="obsolete">Status</translation>
-    </message>
-    <message>
         <source>ID</source>
         <comment>password table field</comment>
         <translation>ID</translation>
@@ -2238,14 +2233,6 @@
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-        <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation>Durch Aktivieren dieser Einstellung benutzt VirtualBox einen HTTP-Proxy für Aufgaben wie beispielsweise den Test auf neue VirtualBox-Versionen oder das Herunterladen der Gasterweiterungen.</translation>
-    </message>
-    <message>
-        <source>&Enable Proxy</source>
-        <translation>Proxy &aktivieren</translation>
-    </message>
-    <message>
         <source>Ho&st:</source>
         <translation>Ho&st:</translation>
     </message>
@@ -2269,6 +2256,30 @@
         <source>Holds the proxy port.</source>
         <translation>Legt den Proxy-Port fest.</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation>Versucht, die Proxy-Einstellungen des Hosts für den Test auf eine neue VirtualBox-Version oder für das Herunterladen der Gasterweiterungen automatisch zu erkennen.</translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation>&Automatische Erkennung der Proxy-Einstellungen</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>Kein Proxy wird für das Herunterladen der Gasterweiterungen oder für den Test auf eine neue VirtualBox-Version verwendet.</translation>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation>&Direkte Internetverbindung</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>Die gewählten Proxy-Einstellungen werden für das Herunterladen der Gasterweiterungen oder für die Überprüfung auf eine neue VirtualBox-Version verwendet.</translation>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation>&Manuelle Proxy-Konfiguration</translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -5255,6 +5266,14 @@
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation>Das Passwort für <nobr>ID = '%1'</nobr> ist falsch.</translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation>Die Regeln für die Port-Weiterleitung enthalten momentan Fehler. Alle Host- oder Gast-Adressen müssen entweder gültig oder leer sein.</translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation>Die Regeln für die Port-Weiterleitung enthalten momentan Fehler. Keine der Gast-Adressen darf leer sein.</translation>
+    </message>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -5394,6 +5413,42 @@
         <source>Unknown reason</source>
         <translation>Unbekannte Ursache</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation>Die HTTP-Bibliothek kann nicht initialisiert werden</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>Verbindung abgewiesen</translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation>Inhalt verschoben</translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation>Proxy nicht gefunden</translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation>während der Konfiguration des Proxy</translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation>während das Zertifikat heruntergeladen wurde</translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation>während der Netzwerkzugriffs</translation>
+    </message>
 </context>
 <context>
     <name>UIPopupCenter</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
index f949a8f..340e8c8 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_es.ts
@@ -3773,7 +3773,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <source>Machine Windows:</source>
-        <translation>Vetanas de máquina:</translation>
+        <translation>Ventanas de máquina:</translation>
     </message>
     <message>
         <source>&Raise Window Under Mouse</source>
@@ -4714,11 +4714,11 @@ p, li { white-space: pre-wrap; }
     <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>Seleccionado, VirtualBox usará la configuración proporcionada para tareas como descargar las «Guest Additions» de la red o comprobar las actualizaciones.</translation>
+        <translation type="obsolete">Seleccionado, VirtualBox usará la configuración proporcionada para tareas como descargar las «Guest Additions» de la red o comprobar las actualizaciones.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>&Habilitar proxy</translation>
+        <translation type="obsolete">&Habilitar proxy</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4776,6 +4776,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation>Contiene el puerto anfitrión de «proxy».</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10331,6 +10355,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -10542,6 +10574,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>Razón desconocida</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
index 6c531af..e3526eb 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="+2094"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+2125"/>
         <source>English</source>
         <comment>Native language name</comment>
         <translation>Euskara</translation>
@@ -37,7 +37,7 @@
 <context>
     <name>QApplication</name>
     <message>
-        <location filename="../src/main.cpp" line="+437"/>
+        <location filename="../src/main.cpp" line="+447"/>
         <source>Executable <b>%1</b> requires Qt %2.x, found Qt %3.</source>
         <translation>Exekutagarria <b>%1</b> behar du Qt %2.x, aurkituta Qt %3.</translation>
     </message>
@@ -47,17 +47,17 @@
         <translation>Bateraezintasun Qt Liburutegi Akatsa</translation>
     </message>
     <message>
-        <location line="+199"/>
+        <location line="+262"/>
         <source>VirtualBox - Error In %1</source>
         <translation>VirtualBox - Akatsa Hemen %1</translation>
     </message>
     <message>
-        <location line="+4"/>
+        <location line="-54"/>
         <source><html><b>%1 (rc=%2)</b><br/><br/></source>
         <translation><html><b>%1 (rc=%2)</b><br/><br/></translation>
     </message>
     <message>
-        <location line="-533"/>
+        <location line="-527"/>
         <source>Please try reinstalling VirtualBox.</source>
         <translation>Mesedez ezarri berriro VirtualBox.</translation>
     </message>
@@ -67,7 +67,7 @@
         <translation>Zihurtu kernel moduloa ongi gertatu dela.</translation>
     </message>
     <message>
-        <location line="+473"/>
+        <location line="+423"/>
         <source>VirtualBox - Runtime Error</source>
         <translation>VirtualBox - Jarduera Akatsa</translation>
     </message>
@@ -87,7 +87,7 @@
         <translation>Kernel gidagailua ez dago eskuragarri</translation>
     </message>
     <message>
-        <location line="-508"/>
+        <location line="-458"/>
         <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source>
         <translation>VirtualBox kernel moduloak ez datoz bat VirtualBox-en bertsio honekin. VirtualBox-en ezarpenak dirudienez ez da ongi egin. Mesedez saiatu osorik kentzen eta VirtualBox berriro ezartzen.</translation>
     </message>
@@ -145,8 +145,8 @@
 <context>
     <name>QIMessageBox</name>
     <message>
-        <location filename="../src/extensions/QIMessageBox.cpp" line="+274"/>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="+1744"/>
+        <location filename="../src/extensions/QIMessageBox.cpp" line="+298"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="+1787"/>
         <location filename="../src/widgets/UIPopupPaneButtonPane.cpp" line="+180"/>
         <source>OK</source>
         <translation>Ongi</translation>
@@ -184,12 +184,12 @@
         <translation>&Xehetasunak (%1 -> %2-tik)</translation>
     </message>
     <message>
-        <location filename="../src/extensions/QIMessageBox.cpp" line="-21"/>
+        <location filename="../src/extensions/QIMessageBox.cpp" line="-45"/>
         <source>Copy all errors to the clipboard</source>
         <translation>Kopiatu akats guztiak gakora</translation>
     </message>
     <message>
-        <location line="+24"/>
+        <location line="+48"/>
         <source>Copy</source>
         <translation>Kopiatu</translation>
     </message>
@@ -283,7 +283,7 @@
     </message>
     <message>
         <location line="+36"/>
-        <location filename="../src/selector/UIActionPoolSelector.cpp" line="+203"/>
+        <location filename="../src/selector/UIActionPoolSelector.cpp" line="+205"/>
         <source>&Pause</source>
         <translation>&Pausatu</translation>
     </message>
@@ -318,7 +318,7 @@
         <translation type="obsolete">Bidali ACPI Indar Botoi sakatze gertaera makina birtualera</translation>
     </message>
     <message>
-        <location filename="../src/globals/UIActionPool.cpp" line="+472"/>
+        <location filename="../src/globals/UIActionPool.cpp" line="+477"/>
         <source>&Close...</source>
         <translation>It&xi...</translation>
     </message>
@@ -526,13 +526,13 @@
         <translation>Erakutsi O&harra...</translation>
     </message>
     <message>
-        <location line="+849"/>
+        <location line="+850"/>
         <source>%1%</source>
         <comment>scale-factor</comment>
         <translation>%1%</translation>
     </message>
     <message>
-        <location line="+51"/>
+        <location line="+52"/>
         <source>Enable</source>
         <comment>Virtual Screen</comment>
         <translation>Gaitu</translation>
@@ -556,7 +556,7 @@
         <translation type="obsolete">&USB Gailuak</translation>
     </message>
     <message>
-        <location line="-1197"/>
+        <location line="-1199"/>
         <source>&Webcams</source>
         <translation>&Webkamerak</translation>
     </message>
@@ -752,7 +752,7 @@
     </message>
     <message>
         <location line="-501"/>
-        <location filename="../src/selector/UIActionPoolSelector.cpp" line="-479"/>
+        <location filename="../src/selector/UIActionPoolSelector.cpp" line="-481"/>
         <source>&Settings...</source>
         <translation>E&zarpenak...</translation>
     </message>
@@ -766,7 +766,7 @@
         <translation>Saio &Argibideak...</translation>
     </message>
     <message>
-        <location filename="../src/globals/UIActionPool.cpp" line="-124"/>
+        <location filename="../src/globals/UIActionPool.cpp" line="-129"/>
         <source>&VirtualBox</source>
         <translation>&VirtualBox</translation>
     </message>
@@ -776,7 +776,7 @@
         <translation>&Agiria</translation>
     </message>
     <message>
-        <location line="+64"/>
+        <location line="+69"/>
         <source>&Window</source>
         <translation>&Leihoa</translation>
     </message>
@@ -861,7 +861,7 @@
     </message>
     <message>
         <location line="+137"/>
-        <location filename="../src/selector/UIActionPoolSelector.cpp" line="+451"/>
+        <location filename="../src/selector/UIActionPoolSelector.cpp" line="+453"/>
         <source>&Save State</source>
         <translation>&Gorde Egoera</translation>
     </message>
@@ -919,7 +919,7 @@
         <translation type="obsolete">T&xertatu Ctrl-Alt-Atzera</translation>
     </message>
     <message>
-        <location filename="../src/selector/UIActionPoolSelector.cpp" line="-887"/>
+        <location filename="../src/selector/UIActionPoolSelector.cpp" line="-889"/>
         <source>&File</source>
         <comment>Mac OS X version</comment>
         <translation>&Agiria</translation>
@@ -992,12 +992,12 @@
     </message>
     <message>
         <location line="+22"/>
-        <location line="+539"/>
+        <location line="+541"/>
         <source>&Sort</source>
         <translation>A&ntolatu</translation>
     </message>
     <message>
-        <location line="-538"/>
+        <location line="-540"/>
         <source>Sort items of selected virtual machine group alphabetically</source>
         <translation>Antolatu hautaturiko makina birtual taldeko gaiak alfabetikoki</translation>
     </message>
@@ -1012,7 +1012,7 @@
         <translation>Klonatu hautaturiko makina birtuala</translation>
     </message>
     <message>
-        <location line="+232"/>
+        <location line="+234"/>
         <source>D&iscard Saved State...</source>
         <translation>Baztert&u Gordetako Egoera...</translation>
     </message>
@@ -1116,7 +1116,7 @@
         <translation type="obsolete">Erakutsi ezarpen orokor elkarrizketa</translation>
     </message>
     <message>
-        <location line="-797"/>
+        <location line="-799"/>
         <source>E&xit</source>
         <translation>I&rten</translation>
     </message>
@@ -1255,7 +1255,7 @@
         <translation>Abiarazi hautaturiko makina birtuala barreneko itxurapen aukerarekin</translation>
     </message>
     <message>
-        <location line="+28"/>
+        <location line="+30"/>
         <source>Suspend execution of selected virtual machines</source>
         <translation>Utzi hautaturiko makina birtualaren exekuzioa</translation>
     </message>
@@ -1304,7 +1304,7 @@
         <translation>&Egiaztatu Eguneraketarik dagoen...</translation>
     </message>
     <message>
-        <location filename="../src/selector/UIActionPoolSelector.cpp" line="-483"/>
+        <location filename="../src/selector/UIActionPoolSelector.cpp" line="-485"/>
         <source>Rena&me Group...</source>
         <translation>Berrizendatu &Taldea...</translation>
     </message>
@@ -1374,7 +1374,7 @@
     </message>
     <message>
         <location filename="../src/runtime/UIActionPoolRuntime.cpp" line="-295"/>
-        <location filename="../src/selector/UIActionPoolSelector.cpp" line="+692"/>
+        <location filename="../src/selector/UIActionPoolSelector.cpp" line="+694"/>
         <source>Po&wer Off</source>
         <translation>&Itzali</translation>
     </message>
@@ -1387,7 +1387,7 @@
         <translation type="obsolete">Erakutsi hautaturiko makina birtualen ohar agiriak</translation>
     </message>
     <message>
-        <location filename="../src/selector/UIActionPoolSelector.cpp" line="-750"/>
+        <location filename="../src/selector/UIActionPoolSelector.cpp" line="-752"/>
         <source>&New Machine...</source>
         <translation>&Makina Berria...</translation>
     </message>
@@ -1442,18 +1442,18 @@
         <translation>Itzali makina birtuala</translation>
     </message>
     <message>
-        <location filename="../src/globals/UIShortcutPool.cpp" line="+243"/>
-        <location line="+7"/>
+        <location filename="../src/globals/UIShortcutPool.cpp" line="+251"/>
+        <location line="+23"/>
         <source>Popup Menu</source>
         <translation>Oharleiho Menua</translation>
     </message>
     <message>
-        <location filename="../src/runtime/UIMachineLogic.cpp" line="+874"/>
+        <location filename="../src/runtime/UIMachineLogic.cpp" line="+872"/>
         <source>Preview Monitor %1</source>
         <translation>Aurreikuspen Monitorea %1</translation>
     </message>
     <message>
-        <location line="+1386"/>
+        <location line="+1413"/>
         <source>&Connect Network Adapter</source>
         <translation>&Elkarketatu Sare Egokitzailea</translation>
     </message>
@@ -1997,12 +1997,12 @@
 <context>
     <name>UIDnDHandler</name>
     <message>
-        <location filename="../src/runtime/UIDnDHandler.cpp" line="+220"/>
+        <location filename="../src/runtime/UIDnDHandler.cpp" line="+230"/>
         <source>Dropping data ...</source>
         <translation>Datuak erortzen...</translation>
     </message>
     <message>
-        <location line="+314"/>
+        <location line="+441"/>
         <source>Retrieving data ...</source>
         <translation>Datuak eskuratzen...</translation>
     </message>
@@ -2017,12 +2017,12 @@
 <context>
     <name>UIDownloader</name>
     <message>
-        <location filename="../src/net/UIDownloader.cpp" line="+50"/>
+        <location filename="../src/net/UIDownloader.cpp" line="+73"/>
         <source>Looking for %1...</source>
         <translation>Bilatzen %1...</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <location line="+1"/>
         <source>Downloading %1...</source>
         <translation>Jeisten %1...</translation>
     </message>
@@ -2030,12 +2030,12 @@
 <context>
     <name>UIDownloaderAdditions</name>
     <message>
-        <location filename="../src/net/UIDownloaderAdditions.cpp" line="+112"/>
+        <location filename="../src/net/UIDownloaderAdditions.cpp" line="+115"/>
         <source>Select folder to save Guest Additions image to</source>
         <translation>Hautatu Gonbidatu Gehigarri irudia gordetzeko agiritegia</translation>
     </message>
     <message>
-        <location line="-51"/>
+        <location line="-35"/>
         <source>VirtualBox Guest Additions</source>
         <translation>VirtualBox Gonbidatu Gehigarriak</translation>
     </message>
@@ -2043,12 +2043,12 @@
 <context>
     <name>UIDownloaderExtensionPack</name>
     <message>
-        <location filename="../src/net/UIDownloaderExtensionPack.cpp" line="+130"/>
+        <location filename="../src/net/UIDownloaderExtensionPack.cpp" line="+133"/>
         <source>Select folder to save %1 to</source>
         <translation>Hautatu %1 gordetzeko agiritegia</translation>
     </message>
     <message>
-        <location line="-67"/>
+        <location line="-45"/>
         <source>VirtualBox Extension Pack</source>
         <translation>VirtualBox Hedapen Paketea</translation>
     </message>
@@ -2056,12 +2056,12 @@
 <context>
     <name>UIDownloaderUserManual</name>
     <message>
-        <location filename="../src/net/UIDownloaderUserManual.cpp" line="+116"/>
+        <location filename="../src/net/UIDownloaderUserManual.cpp" line="+119"/>
         <source>Select folder to save User Manual to</source>
         <translation>Hautatu Erabiltzaile Eskuliburua gordetzeko agiritegia</translation>
     </message>
     <message>
-        <location line="-55"/>
+        <location line="-36"/>
         <source>VirtualBox User Manual</source>
         <translation>VirtualBox Erabiltzaile Eskuliburua</translation>
     </message>
@@ -2151,7 +2151,7 @@
 <context>
     <name>UIGDetails</name>
     <message>
-        <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+127"/>
+        <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="+258"/>
         <source>Name</source>
         <comment>details (general)</comment>
         <translation>Izena</translation>
@@ -2163,14 +2163,14 @@
         <translation>Taldeak</translation>
     </message>
     <message>
-        <location line="+162"/>
-        <location line="+107"/>
+        <location line="+26"/>
+        <location line="+77"/>
         <source>%1 MB</source>
         <comment>details</comment>
         <translation>%1 MB</translation>
     </message>
     <message>
-        <location line="-102"/>
+        <location line="-72"/>
         <source>Processors</source>
         <comment>details (system)</comment>
         <translation>Prozesagailuak</translation>
@@ -2218,7 +2218,7 @@
         <translation>Bizkorpena</translation>
     </message>
     <message>
-        <location line="+62"/>
+        <location line="+32"/>
         <source>Screens</source>
         <comment>details (display)</comment>
         <translation>Ikusleihoak</translation>
@@ -2294,7 +2294,7 @@
         <translation type="obsolete">[CD/DVD]</translation>
     </message>
     <message>
-        <location line="+166"/>
+        <location line="+112"/>
         <source>Controller</source>
         <comment>details (audio)</comment>
         <translation>Kontrolatzailea</translation>
@@ -2306,7 +2306,7 @@
         <translation>Ezgaituta</translation>
     </message>
     <message>
-        <location line="+88"/>
+        <location line="+61"/>
         <source>Generic Driver, '%1' { %2 }</source>
         <comment>details (network)</comment>
         <translation>Gidagailu generikoa, '%1' { %2 }</translation>
@@ -2330,7 +2330,7 @@
         <translation>Ezgaituta</translation>
     </message>
     <message>
-        <location line="+81"/>
+        <location line="+54"/>
         <source>Port %1</source>
         <comment>details (serial)</comment>
         <translation>Ataka %1</translation>
@@ -2342,7 +2342,7 @@
         <translation>Ezgaituta</translation>
     </message>
     <message>
-        <location line="+60"/>
+        <location line="+33"/>
         <source>Port %1</source>
         <comment>details (parallel)</comment>
         <translation>Ataka %1</translation>
@@ -2354,7 +2354,7 @@
         <translation>Ezgaituta</translation>
     </message>
     <message>
-        <location line="+63"/>
+        <location line="+36"/>
         <source>USB Controller</source>
         <comment>details (usb)</comment>
         <translation>USB Kontrolatzailea</translation>
@@ -2372,13 +2372,13 @@
         <translation>Ezgaituta</translation>
     </message>
     <message>
-        <location line="+58"/>
+        <location line="+31"/>
         <source>None</source>
         <comment>details (shared folders)</comment>
         <translation>Ezer ez</translation>
     </message>
     <message>
-        <location line="+63"/>
+        <location line="+33"/>
         <source>Menu-bar</source>
         <comment>details (user interface)</comment>
         <translation>Menu-barra</translation>
@@ -2445,36 +2445,36 @@
         <translation>Ezgaituta</translation>
     </message>
     <message>
-        <location line="+57"/>
+        <location line="+30"/>
         <source>None</source>
         <comment>details (description)</comment>
         <translation>Ezer ez</translation>
     </message>
     <message>
-        <location line="-1102"/>
+        <location line="-690"/>
         <source>Operating System</source>
         <comment>details (general)</comment>
         <translation>Sistema Eragilea</translation>
     </message>
     <message>
         <location line="+23"/>
-        <location line="+212"/>
-        <location line="+134"/>
-        <location line="+107"/>
-        <location line="+63"/>
-        <location line="+108"/>
-        <location line="+86"/>
-        <location line="+65"/>
-        <location line="+78"/>
-        <location line="+55"/>
-        <location line="+119"/>
-        <location line="+55"/>
+        <location line="+76"/>
+        <location line="+104"/>
+        <location line="+80"/>
+        <location line="+36"/>
+        <location line="+81"/>
+        <location line="+59"/>
+        <location line="+38"/>
+        <location line="+51"/>
+        <location line="+28"/>
+        <location line="+89"/>
+        <location line="+28"/>
         <source>Information Inaccessible</source>
         <comment>details</comment>
         <translation>Argibideak eskuraezin</translation>
     </message>
     <message>
-        <location line="-925"/>
+        <location line="-649"/>
         <source>Base Memory</source>
         <comment>details (system)</comment>
         <translation>Ohinarri Oroimena</translation>
@@ -2498,7 +2498,7 @@
         <translation>Nested Orrialdeztapena</translation>
     </message>
     <message>
-        <location line="+69"/>
+        <location line="+39"/>
         <source>Video Memory</source>
         <comment>details (display)</comment>
         <translation>Bideo Oroimena</translation>
@@ -2522,7 +2522,7 @@
         <translation>Hurruneko Mahaigain Zerbitzaria</translation>
     </message>
     <message>
-        <location line="+98"/>
+        <location line="+71"/>
         <source>[Optical Drive]</source>
         <comment>details (storage)</comment>
         <translation>[Diska Optikoa]</translation>
@@ -2534,13 +2534,13 @@
         <translation>Erantsi gabe</translation>
     </message>
     <message>
-        <location line="+54"/>
+        <location line="+27"/>
         <source>Host Driver</source>
         <comment>details (audio)</comment>
         <translation>Hostalari Gidagailua</translation>
     </message>
     <message>
-        <location line="+75"/>
+        <location line="+48"/>
         <source>Bridged Adapter, %1</source>
         <comment>details (network)</comment>
         <translation>Zubi egokitzailea, %1</translation>
@@ -2569,7 +2569,7 @@
         <translation type="obsolete">Gidagailu generikoa, '%1' {&nbsp;%2&nbsp;}</translation>
     </message>
     <message>
-        <location line="+244"/>
+        <location line="+163"/>
         <source>Device Filters</source>
         <comment>details (usb)</comment>
         <translation>Gailu Iragazkiak</translation>
@@ -2581,7 +2581,7 @@
         <translation>USB Kontrolatzailea Eskuraezina</translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+26"/>
         <source>Shared Folders</source>
         <comment>details (shared folders)</comment>
         <translation>Elkarbanatutako Agiritegiak</translation>
@@ -3044,7 +3044,7 @@
         <translation type="obsolete"><b>%1</b>-ren DHCP goi helbide muga okerra da</translation>
     </message>
     <message>
-        <location filename="../src/settings/global/UIGlobalSettingsNetwork.cpp" line="+137"/>
+        <location filename="../src/settings/global/UIGlobalSettingsNetwork.cpp" line="+135"/>
         <source>No new name specified for the NAT network previously called <b>%1</b>.</source>
         <translation>Ez da izen berririk adierazi NAT sarerako, lehengo izena: <b>%1</b> da.</translation>
     </message>
@@ -3686,7 +3686,7 @@
 <context>
     <name>UIGlobalSettingsPortForwardingDlg</name>
     <message>
-        <location filename="../src/settings/global/UIGlobalSettingsPortForwardingDlg.cpp" line="+108"/>
+        <location filename="../src/settings/global/UIGlobalSettingsPortForwardingDlg.cpp" line="+109"/>
         <source>Port Forwarding Rules</source>
         <translation>Bidalketa Ataka Arauak</translation>
     </message>
@@ -3704,18 +3704,46 @@
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-        <location filename="../src/settings/global/UIGlobalSettingsProxy.ui" line="+24"/>
         <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>Hautatutakoan, VirtualBox-ek proxy ezarpenak erabiliko ditu Gonbidatu Gehigarriak saretik jeisteko edo eguneraketak egiaztatzeko bezalako eginkizunetarako.</translation>
+        <translation type="obsolete">Hautatutakoan, VirtualBox-ek proxy ezarpenak erabiliko ditu Gonbidatu Gehigarriak saretik jeisteko edo eguneraketak egiaztatzeko bezalako eginkizunetarako.</translation>
     </message>
     <message>
         <source>&Enable proxy</source>
         <translation type="obsolete">&Gaitu proxya</translation>
     </message>
     <message>
-        <location line="+3"/>
         <source>&Enable Proxy</source>
-        <translation>&Gaitu Proxya</translation>
+        <translation type="obsolete">&Gaitu Proxya</translation>
+    </message>
+    <message>
+        <location filename="../src/settings/global/UIGlobalSettingsProxy.ui" line="+24"/>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>When chosen, VirtualBox will use direct Internet connection for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>When chosen, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+3"/>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location line="+35"/>
@@ -3766,7 +3794,7 @@
         <translation type="obsolete">Egiaztapenerako erabilitako sarhitza aldatzen du.</translation>
     </message>
     <message>
-        <location filename="../src/settings/global/UIGlobalSettingsProxy.cpp" line="+126"/>
+        <location filename="../src/settings/global/UIGlobalSettingsProxy.cpp" line="+137"/>
         <source>No proxy host is currently specified.</source>
         <translation>Ez dago proxy hostalaririk adierazita.</translation>
     </message>
@@ -4288,7 +4316,7 @@
         <translation type="obsolete">Sostengu gabeko gailuak elkartuta hostalari PG-ra</translation>
     </message>
     <message>
-        <location filename="../src/runtime/UIMachineLogic.cpp" line="-636"/>
+        <location filename="../src/runtime/UIMachineLogic.cpp" line="-653"/>
         <source>Select a filename for the screenshot ...</source>
         <translation>Hautatu ikusleiho-argazkiarentzako agirizen bat...</translation>
     </message>
@@ -4329,7 +4357,7 @@
 <context>
     <name>UIMachineSettingsDisplay</name>
     <message>
-        <location filename="../src/settings/machine/UIMachineSettingsDisplay.cpp" line="+344"/>
+        <location filename="../src/settings/machine/UIMachineSettingsDisplay.cpp" line="+341"/>
         <source>The virtual machine is set up to use hardware graphics acceleration. However the host system does not currently provide this, so you will not be able to start the machine.</source>
         <translation>Makina birtual hau hardware bizkorpena erabiltzeko ezarrita dago Horrela ere hostalari sistemak ezin du oraingoz hau hornitu, hortaz ez zara makina abiarazeko gai izango.</translation>
     </message>
@@ -4391,12 +4419,12 @@
     <message>
         <location line="+76"/>
         <location line="+1"/>
-        <location line="+482"/>
+        <location line="+483"/>
         <source>%1 MB</source>
         <translation>%1 MB</translation>
     </message>
     <message>
-        <location line="-479"/>
+        <location line="-480"/>
         <location line="+1"/>
         <source>%1%</source>
         <translation>%1%</translation>
@@ -4420,12 +4448,12 @@
         <translation>handia</translation>
     </message>
     <message>
-        <location line="+512"/>
+        <location line="+513"/>
         <source><i>About %1MB per 5 minute video</i></source>
         <translation><i>%1MB 5 minutuko bideo inguru</i></translation>
     </message>
     <message>
-        <location line="-518"/>
+        <location line="-519"/>
         <source>kbps</source>
         <translation>kbs-ko</translation>
     </message>
@@ -5292,7 +5320,7 @@
 <context>
     <name>UIMachineSettingsPortForwardingDlg</name>
     <message>
-        <location filename="../src/settings/machine/UIMachineSettingsPortForwardingDlg.cpp" line="+92"/>
+        <location filename="../src/settings/machine/UIMachineSettingsPortForwardingDlg.cpp" line="+93"/>
         <source>Port Forwarding Rules</source>
         <translation>Bidalketa Ataka Arauak</translation>
     </message>
@@ -6180,8 +6208,8 @@
     </message>
     <message>
         <location filename="../src/UIVMInfoDialog.cpp" line="+707"/>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="-742"/>
-        <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="-505"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="-708"/>
+        <location filename="../src/selector/graphics/details/UIGDetailsElements.cpp" line="-343"/>
         <location filename="../src/settings/machine/UIMachineSettingsStorage.cpp" line="-1720"/>
         <source>Controller: %1</source>
         <translation>Kontrolatzailea: %1</translation>
@@ -6911,7 +6939,7 @@
         <translation>Medioak kentzen...</translation>
     </message>
     <message>
-        <location line="+1405"/>
+        <location line="+1396"/>
         <source>&Hard disks</source>
         <translation>Diska &gogorrak</translation>
     </message>
@@ -6983,42 +7011,42 @@
 <context>
     <name>UIMessageCenter</name>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="-1474"/>
-        <location line="+2557"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="-1508"/>
+        <location line="+2601"/>
         <source>VirtualBox - Information</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - Argibideak</translation>
     </message>
     <message>
-        <location line="-2553"/>
-        <location line="+2557"/>
+        <location line="-2597"/>
+        <location line="+2601"/>
         <source>VirtualBox - Question</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - Galdera</translation>
     </message>
     <message>
-        <location line="-2553"/>
-        <location line="+2557"/>
+        <location line="-2597"/>
+        <location line="+2601"/>
         <source>VirtualBox - Warning</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - Ohartarazpena</translation>
     </message>
     <message>
-        <location line="-2553"/>
-        <location line="+2557"/>
+        <location line="-2597"/>
+        <location line="+2601"/>
         <source>VirtualBox - Error</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - Akatsa</translation>
     </message>
     <message>
-        <location line="-2553"/>
-        <location line="+2557"/>
+        <location line="-2597"/>
+        <location line="+2601"/>
         <source>VirtualBox - Critical Error</source>
         <comment>msg box title</comment>
         <translation>VirtualBox - Akats Larria</translation>
     </message>
     <message>
-        <location line="-2416"/>
+        <location line="-2460"/>
         <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>
@@ -7038,7 +7066,7 @@
         <translation>Enkriptaketa sarhitza <nobr>ID = '%1'</nobr>-rako baliogabea da.</translation>
     </message>
     <message>
-        <location line="+162"/>
+        <location line="+164"/>
         <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>Diska irudi agiri bat edo gehiago ez daude eskuragarri. Ondorioz, ezingo duzu agiri hauek erabiltzen dituzten makina birtualekin jardun geroago eskuragarri egon arte.</p><p>Sakatu <b>Egiaztatu</b> Media Birtual Kudeatzailea leihoa irekitzeko eta agiri eskuragarriak ikusteko edo sakatu <b>Ezikusi</b> mezu hau ezikusteko.</p></translation>
     </message>
@@ -7048,12 +7076,12 @@
         <translation><p>Berehalakoa ezabatzeak bertan gordetako egoera argibideak galtzea eragingo du, eta VirtualBox-ek berehalakoarekin batera sortu dituen irudi agiri ugarietan dauden biltegiratze datu barreiatuak agiri batean batuko dira. Hau prozesu luzea izan daiteke, eta berehalakoan dauden argibideak ezingo dira berreskuratu. </p></p>Zihur zaude hautaturiko <b>%1</b> berehalakoa ezabatzea nahi duzula?</p></translation>
     </message>
     <message>
-        <location line="+15"/>
+        <location line="+17"/>
         <source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
         <translation><p>%1 berehalako ezabatzeak biltegiratze toki gehiago beharko du aldibaterako. Kasu okerrenean %2 irudiaren neurria %3 haziko da, horrela ere agiri-sistema honek %4 besterik ez ditu aske.</p><p>Batze eragiketan zehar biltegiratze tokirik gabe gelditzeak irudiaren eta MB-ren itxurapena hondatzea eragin dezake, adib. MB eta bere datuak galtzea.</p><p>Berehalakoaren ezabatzearekin jarraitu dezakezu zeure arriskupean.</p></translation>
     </message>
     <message>
-        <location line="+62"/>
+        <location line="+64"/>
         <source>Failed to save the settings.</source>
         <translation>Hutsegitea ezarpenak gordetzerakoan.</translation>
     </message>
@@ -7063,7 +7091,7 @@
         <translation><p>Kentzea nahi duzu <nobr><b>%1</b> NAT sarea?</nobr></p><p>Sare hau makina birtual sare egokitzaile batek edo gehiagok erabiltzen badute egokitzaile hauek ez dira erabilgarriak izango beren ezarpenak zuzentzen dituzun arte sare izen edo egokitzaile eranspen mota ezberdin bat hautatuz.</p></translation>
     </message>
     <message>
-        <location line="+30"/>
+        <location line="+34"/>
         <source>Failed to create NAT network.</source>
         <translation>Hutsegitea NAT sarea sortzerakoan.</translation>
     </message>
@@ -7116,7 +7144,17 @@
         <translation>&Hautatu diska</translation>
     </message>
     <message>
-        <location line="+127"/>
+        <location line="+58"/>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+8"/>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+83"/>
         <source><p>Error changing disk image mode from <b>%1</b> to <b>%2</b>.</p></source>
         <translation><p>Akatsa diska irudi modua <b>%1</b>-tik <b>%2</b>-ra aldatzerakoan.</p></translation>
     </message>
@@ -7141,7 +7179,7 @@
         <translation><p>Zihur zaude <nobr><b>%1</b></nobr> diskete birtuala kentzea nahi duzula diska irudi agiri ezagunen zerrendatik?</p></translation>
     </message>
     <message>
-        <location line="+91"/>
+        <location line="+93"/>
         <source><p>Unable to insert the virtual optical disk <nobr><b>%1</b></nobr> into the machine <b>%2</b>.</p></source>
         <translation><p>Ezinezkoa <nobr><b>%1</b></nobr> diska optiko birtuala <b>%2</b> makinan txertatzea.</p></translation>
     </message>
@@ -7285,13 +7323,13 @@
         <translation><p>VirtualBox Erabiltzaile Eskuliburua ongi jeitsi da hemendik, <nobr><a href="%1">%1</a></nobr> eta tokian bertan gorde da honela <nobr><b>%2</b>.</nobr></p></translation>
     </message>
     <message>
-        <location line="+710"/>
+        <location line="+720"/>
         <source>Do not show this message again</source>
         <comment>msg box flag</comment>
         <translation>Ez erakutsi mezu hau berriro</translation>
     </message>
     <message>
-        <location line="-2342"/>
+        <location line="-2386"/>
         <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>
@@ -7305,7 +7343,7 @@
         <translation type="obsolete"><p>Hutsegitea VirtualBox COM objetua sortzerakoan.</p><p>Orain aplikazioak amaitu egingo du.</p></translation>
     </message>
     <message>
-        <location line="+608"/>
+        <location line="+618"/>
         <source>Failed to set global VirtualBox properties.</source>
         <translation>Hutsegitea VirtualBox ezaugarri orokorrak ezartzerakoan.</translation>
     </message>
@@ -7315,7 +7353,7 @@
         <translation>Hutsegitea USB azpisistemara sartzerakoan.</translation>
     </message>
     <message>
-        <location line="+410"/>
+        <location line="+434"/>
         <source>Failed to create a new virtual machine.</source>
         <translation>Hutsegitea makina birtual berri bat sortzerakoan.</translation>
     </message>
@@ -7334,7 +7372,7 @@
         <translation>Hutsegitea <b>%1</b> makina birtuala abiarazterakoan.</translation>
     </message>
     <message>
-        <location line="-1061"/>
+        <location line="-1093"/>
         <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>
@@ -7350,13 +7388,13 @@
         <translation>Hutsegitea <b>%1</b> makina birtualaren egoera gordetzerakoan.</translation>
     </message>
     <message>
-        <location line="+84"/>
+        <location line="+88"/>
         <location line="+8"/>
         <source>Failed to create a snapshot of the virtual machine <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> makina birtualaren berehalako bat sortzerakoan.</translation>
     </message>
     <message>
-        <location line="-76"/>
+        <location line="-80"/>
         <location line="+8"/>
         <source>Failed to stop the virtual machine <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> makina birtuala gelditzerakoan.</translation>
@@ -7373,7 +7411,7 @@
         <translation>Hutsegitea <b>%1</b> makina birtualaren gordetako egoera baztertzerakoan.</translation>
     </message>
     <message>
-        <location line="-306"/>
+        <location line="-308"/>
         <source>There is no virtual machine named <b>%1</b>.</source>
         <translation>Ez dago <b>%1</b> izena duen makina birtualik.</translation>
     </message>
@@ -7389,7 +7427,7 @@
         <translation>Hutsegitea <b>%1</b> makina birtualerako saio bat irekitzerakoan.</translation>
     </message>
     <message>
-        <location line="+506"/>
+        <location line="+516"/>
         <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>
@@ -7400,7 +7438,7 @@
         <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>
     <message>
-        <location line="+22"/>
+        <location line="+24"/>
         <source>Failed to attach the optical drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation>Hutsegitea (<nobr><b>%1</b></nobr>) diska optikoa <b>%3</b> makinaren <i>%2</i> eslotera eranstearakoan.</translation>
     </message>
@@ -7410,7 +7448,7 @@
         <translation>Hutsegitea (<nobr><b>%1</b></nobr>) disketea <b>%3</b> makinaren <i>%2</i> eslotera eranstearakoan.</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location line="+38"/>
         <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
         <translation>Oraingo berbidalketa ataka arauak ez dira baliozkoak. Arau izenak bakarrak izan behar dira.</translation>
     </message>
@@ -7420,12 +7458,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="+82"/>
+        <location line="+86"/>
         <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="+61"/>
+        <location line="+63"/>
         <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>
@@ -7488,7 +7526,7 @@
         <translation>Hutsegitea <b>%1</b> USB gailua <b>%2</b>makina birtualetik deseransterakoan.</translation>
     </message>
     <message>
-        <location line="-785"/>
+        <location line="-787"/>
         <location line="+9"/>
         <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>Hutsegitea <b>%1</b> agiritegi elkarbanatua sortzerakoan (zuzentzen <nobr><b>%2</b></nobr>-ra) <b>%3</b> makina birtualerako.</translation>
@@ -7527,7 +7565,7 @@
         <translation type="obsolete"><p>Ezin da VirtualBox<i>MB Hautatzailea</i>n moduan ekin tokiko murrizpenengaitik.</p><p>Orain aplikazioa amaitu egingo da.</p></translation>
     </message>
     <message>
-        <location filename="../src/globals/UIMessageCenter.cpp" line="+469"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="+471"/>
         <source><nobr>Fatal Error</nobr></source>
         <comment>runtime error info</comment>
         <translation><nobr>Akats Larria</nobr></translation>
@@ -7592,7 +7630,7 @@
         <translation><p><b>VirtualBox Gonbidatu Gehigarriak</b> diska irudi agiria ongi jeitsi da <nobr><a href="%1">%1</a></nobr>-tik eta tokian bertan gorde da <nobr><b>%2</b> bezala.</nobr></p><p>Nahi duzu diska irudi agiria erregistratzea eta gidagailu optiko birtualean txertatzea?</p></translation>
     </message>
     <message>
-        <location line="+242"/>
+        <location line="+244"/>
         <location line="+7"/>
         <source>Drag and drop operation from host to guest failed.</source>
         <translation>Hutsegitea hostalaritik gonbidaturako arrastatu eta askatu eragiketan.</translation>
@@ -7609,7 +7647,7 @@
         <translation>Hutsegitea hostalaritik gonbidaturako arrastatu eta askatu eragiketan.</translation>
     </message>
     <message>
-        <location line="+152"/>
+        <location line="+160"/>
         <location line="+221"/>
         <source>Result&nbsp;Code: </source>
         <comment>error info</comment>
@@ -7648,7 +7686,7 @@
         <translation type="obsolete"><p>Ezin da <b><nobr>%1</nobr></b> hizkuntza agiria gertatu. <p>Hizkuntza aldibaterako Ingeleran (barne-eraikita) berrezarriko da. Mesedez joan <b>Hobespenak</b> elkarrizketara VirtualBox leihoko <b>Agiria</b> menutik ireki dezakezuna, eta hautatu <b>Hizkuntza</b> orrialdean dauden hizkuntzetako bat.</p></translation>
     </message>
     <message>
-        <location line="-1581"/>
+        <location line="-1593"/>
         <location line="+11"/>
         <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><p>Hutsegitea <b>%1</b> elkarbanatutako agiritegia kentzerakoan (hona zuzentzeno <nobr><b>%2</b></nobr>) <b>%3</b> makina birtutaletik.</p><p>Mesedez itxi elkarbanatutako agiritegi hau erabiltzen egon daitezkeen SE gonbidatuko programa guztiak eta saiatu berriro.</p></translation>
@@ -7662,12 +7700,12 @@
         <translation type="obsolete">Hutsegitea baimen agiriak aurkitzerakoan, <nobr><b>%1</b></nobr>.</translation>
     </message>
     <message>
-        <location line="+1174"/>
+        <location line="+1178"/>
         <source>Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions.</source>
         <translation>Hutsegitea <nobr><b>%1</b></nobr> baimen agiria irekitzerakoan. Egiaztatu agiri baimenak.</translation>
     </message>
     <message>
-        <location line="-1577"/>
+        <location line="-1611"/>
         <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>
@@ -7676,7 +7714,7 @@
         <translation type="obsolete"><p>Zorionak! Ongi erregistratu zara VirtualBox erabiltzaile bezala.</p><p>Mila esker erregistrazio galdekizuna betetzeko astia aurkitzeagaitik!</p></translation>
     </message>
     <message>
-        <location line="-348"/>
+        <location line="-350"/>
         <source><p>Failed to load the global GUI configuration from <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source>
         <translation><p>Hutsegitea EIG itxurapen orokorra <b><nobr>%1</nobr></b>-tik gertatzerakoan.</p><p>Orain aplikazioak amaitu egingo du.</p></translation>
     </message>
@@ -7686,7 +7724,7 @@
         <translation><p>Hutsegitea EIG itxurapen orokorra <b><nobr>%1</nobr></b>-an gordetzerakoan.</p><p>Orain aplikazioak amaitu egingo du.</p></translation>
     </message>
     <message>
-        <location line="+753"/>
+        <location line="+785"/>
         <source>Failed to save the settings of the virtual machine <b>%1</b> to <b><nobr>%2</nobr></b>.</source>
         <translation>Hutsegitea <b>%1</b> makina birtualaren ezarpenak<b><nobr>%2</nobr></b>-an gordetzerakoan.</translation>
     </message>
@@ -7695,7 +7733,7 @@
         <translation type="obsolete">Hutsegitea <b>%1</b> makina birtualaren ezarpenak<b><nobr>%2</nobr></b>-tik gertatzerakoan.</translation>
     </message>
     <message>
-        <location line="-492"/>
+        <location line="-522"/>
         <source>Discard</source>
         <comment>saved state</comment>
         <translation>Baztertu</translation>
@@ -7711,7 +7749,7 @@
         <translation type="obsolete">Osatu</translation>
     </message>
     <message>
-        <location line="+1116"/>
+        <location line="+1148"/>
         <location filename="../src/globals/UIPopupCenter.cpp" line="-49"/>
         <source><p>The host key is currently defined as <b>%1</b>.</p></source>
         <comment>additional message box paragraph</comment>
@@ -7724,7 +7762,7 @@
         <translation>Harpena</translation>
     </message>
     <message>
-        <location line="-1134"/>
+        <location line="-1166"/>
         <source>Check</source>
         <comment>inaccessible media message box</comment>
         <translation>Egiaztatu</translation>
@@ -7746,7 +7784,7 @@
         <translation>Berrezarri</translation>
     </message>
     <message>
-        <location line="+707"/>
+        <location line="+739"/>
         <source>Continue</source>
         <comment>no hard disk attached</comment>
         <translation>Jarraitu</translation>
@@ -7788,7 +7826,7 @@
         <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="-801"/>
+        <location line="-803"/>
         <source>Release</source>
         <comment>detach medium</comment>
         <translation>Argitaratu</translation>
@@ -7804,7 +7842,7 @@
         <translation>Kendu</translation>
     </message>
     <message>
-        <location line="+182"/>
+        <location line="+184"/>
         <source><p>The hard disk storage unit at location <b>%1</b> already exists. You cannot create a new virtual hard disk that uses this location because it can be already used by another virtual hard disk.</p><p>Please specify a different location.</p></source>
         <translation><p>Jadanik badago <b>%1</b> diska gogor biltegi unitate kokalekua. Ezin duzu diska gogor birtual berri bat sortu kokaleku hau erabiliz jadanik beste diska gogor birtual batek erabili ahal dezakeelako.</p><p>Mesedez adierazi beste kokaleku bat.</p></translation>
     </message>
@@ -7851,12 +7889,12 @@
         <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>
     <message>
-        <location line="+675"/>
+        <location line="+681"/>
         <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>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="-2007"/>
+        <location line="-2047"/>
         <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>
@@ -7866,7 +7904,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="+1379"/>
+        <location filename="../src/globals/UIMessageCenter.cpp" line="+1413"/>
         <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>
@@ -7889,7 +7927,7 @@
         <translation>Jarraitu</translation>
     </message>
     <message>
-        <location line="-962"/>
+        <location line="-994"/>
         <location line="+9"/>
         <location filename="../src/globals/UIPopupCenter.cpp" line="-167"/>
         <source>Cancel</source>
@@ -7904,7 +7942,7 @@
         <translation type="obsolete">Hutsegitea makina birtuala irekitzerakoan.</translation>
     </message>
     <message>
-        <location line="+704"/>
+        <location line="+736"/>
         <source>Failed to open/interpret appliance <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> gailua ireki/interpretatzerakoan.</translation>
     </message>
@@ -7933,17 +7971,17 @@
         <translation>Hutsegitea makina birtuala esportatzerakoan <b>%1</b>.</translation>
     </message>
     <message>
-        <location line="-660"/>
+        <location line="-686"/>
         <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="+1437"/>
+        <location line="+1465"/>
         <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>
     <message>
-        <location line="-598"/>
+        <location line="-600"/>
         <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Certain guests (e.g. OS/2 and QNX) require this feature.</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. Zenbait gonbidatuk (adib. OS/2 eta QNX) ezaugarri hau behar dute.</p><p>Mesedez zihurtatu VT-x/AMD-V egoki gaituta duzula zure hostalari ordenagailuaren BIOS-ean.</p></translation>
     </message>
@@ -7966,7 +8004,7 @@
         <translation>Hutsegitea agiria kentzerakoan.</translation>
     </message>
     <message>
-        <location line="-1197"/>
+        <location line="-1231"/>
         <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>
@@ -8001,27 +8039,27 @@
         <translation>Hutsegitea disk irudi agirira sartzerakoan, <nobr><b>%1</b></nobr>.</translation>
     </message>
     <message>
-        <location line="+201"/>
-        <location line="+1032"/>
+        <location line="+203"/>
+        <location line="+1064"/>
         <location line="+156"/>
         <location line="+21"/>
         <source>Ignore</source>
         <translation>Ezikusi</translation>
     </message>
     <message>
-        <location line="-1085"/>
+        <location line="-1117"/>
         <location line="+9"/>
         <source>Restore</source>
         <translation>Leheneratu</translation>
     </message>
     <message>
         <location line="+12"/>
-        <location line="+15"/>
+        <location line="+17"/>
         <source>Delete</source>
         <translation>Ezabatu</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location line="+24"/>
         <location line="+9"/>
         <source>Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
         <translation>Hutsegitea <b>%2</b> makina birtualaren <b>%1</b> berehalakoa leheneratzerakoan.</translation>
@@ -8041,7 +8079,7 @@
         <translation type="obsolete">Ezinezkoa %1 osatzea <nobr><b>%2</b></nobr> <b>%3</b> makinatik.</translation>
     </message>
     <message>
-        <location line="+493"/>
+        <location line="+521"/>
         <source>Force Unmount</source>
         <translation>Behartu Demuntatzea</translation>
     </message>
@@ -8080,13 +8118,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="-306"/>
+        <location line="-330"/>
         <source>&Remove</source>
         <comment>medium</comment>
         <translation>&Kendu</translation>
     </message>
     <message>
-        <location line="+671"/>
+        <location line="+695"/>
         <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>
@@ -8118,7 +8156,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="-1366"/>
+        <location line="-1400"/>
         <source>Failed to open virtual machine located in %1.</source>
         <translation>Hutsegitea %1 kokalekuan dagoen makina birtuala irekitzerakoan.</translation>
     </message>
@@ -8128,7 +8166,7 @@
         <translation>Hutsegitea <i>%2</i> kokalekuan dagoen <b>%1</b> makina birtuala gehitzerakoan jadanik badagoelako.</translation>
     </message>
     <message>
-        <location line="+124"/>
+        <location line="+126"/>
         <source>Delete all files</source>
         <translation>Ezabatu agiri guztiak</translation>
     </message>
@@ -8138,15 +8176,15 @@
         <translation>Kendu bakarrik</translation>
     </message>
     <message>
-        <location line="-81"/>
-        <location line="+73"/>
-        <location line="+268"/>
-        <location line="+16"/>
+        <location line="-83"/>
+        <location line="+75"/>
+        <location line="+272"/>
+        <location line="+18"/>
         <source>Remove</source>
         <translation>Kendu</translation>
     </message>
     <message>
-        <location line="+112"/>
+        <location line="+114"/>
         <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>
@@ -8176,12 +8214,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="+251"/>
+        <location line="+275"/>
         <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="+960"/>
+        <location line="+962"/>
         <location line="+8"/>
         <source>Failed to install the Extension Pack <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> Hedapen Paketea ezartzerakoan.</translation>
@@ -8193,33 +8231,33 @@
         <translation>Hutsegitea <b>%1</b> Hedapen Paketea kentzerakoan.</translation>
     </message>
     <message>
-        <location line="-44"/>
+        <location line="-46"/>
         <source>&Remove</source>
         <translation>&Kendu</translation>
     </message>
     <message>
-        <location line="-1138"/>
+        <location line="-1160"/>
         <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>
     <message>
-        <location line="+24"/>
+        <location line="+40"/>
         <source><p>There are unsaved changes in the port forwarding configuration.</p><p>If you proceed your changes will be discarded.</p></source>
         <translation><p>Gorde gabeko aldaketak daude berbidalketa ataka itxurapenean.</p><p>Jarraitzen baduzu aldaketak baztertu egingo dira.</p></translation>
     </message>
     <message>
-        <location line="-50"/>
+        <location line="-66"/>
         <source>Failed to attach the hard disk (<nobr><b>%1</b></nobr>) to 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> eslotera eranstearakoan.</translation>
     </message>
     <message>
-        <location line="+160"/>
+        <location line="+180"/>
         <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="+582"/>
+        <location line="+584"/>
         <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>
@@ -8229,13 +8267,13 @@
         <translation type="obsolete">Aldatu</translation>
     </message>
     <message>
-        <location line="+420"/>
+        <location line="+422"/>
         <location line="+7"/>
         <source>Failed to open the Extension Pack <b>%1</b>.</source>
         <translation><b>%1</b> Hedapen Paketea irekitzerakoan.</translation>
     </message>
     <message>
-        <location line="-92"/>
+        <location line="-94"/>
         <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=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1< [...]
         <translation><p>VirtualBox hedapen pakete bat ezartzear zaude. Hedapen paketeek VirtualBox-en eginkizunak osatzen dituzte eta zure sistemarentzat potentzialki kaltergarria izan daitekeen sistema mailako softwarea eduki dezakete. Mesedez berrikusi azpiko azalpena eta jarraitu hedapen paketea iturri fidagarri batetik lortu baduzu bakarrik.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Name:&nbsp;&nbsp;</b></td>< [...]
     </message>
@@ -8284,12 +8322,12 @@
         <translation><p>VirtualBox <b>%1</b> hedapen paketea kentzear zaude.</p><p>Zihur zaude jarraitzea nahi duzula?</p></translation>
     </message>
     <message>
-        <location line="+56"/>
+        <location line="+58"/>
         <source>The extension pack <br><nobr><b>%1</b><nobr><br> was installed successfully.</source>
         <translation><br><nobr><b>%1</b><nobr><br> hedapen paketea ongi ezarri da.</translation>
     </message>
     <message>
-        <location line="-803"/>
+        <location line="-805"/>
         <source><p>Cannot create the machine folder <b>%1</b> in the parent folder <nobr><b>%2</b>.</nobr></p><p>Please check that the parent really exists and that you have permissions to create the machine folder.</p></source>
         <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>
@@ -8299,7 +8337,7 @@
         <translation><b>%1</b> makina birtutala erregistratzerakoan.</translation>
     </message>
     <message>
-        <location line="-395"/>
+        <location line="-419"/>
         <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>
@@ -8319,13 +8357,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="+413"/>
+        <location line="+437"/>
         <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="-641"/>
+        <location line="-673"/>
         <source>Create a snapshot of the current machine state</source>
         <translation>Sortu makinaren oraingo egoeraren berehalako bat</translation>
     </message>
@@ -8334,7 +8372,7 @@
         <translation type="obsolete">Barkatu, zenbati akats generiko gertatu dira.</translation>
     </message>
     <message>
-        <location line="+1861"/>
+        <location line="+1903"/>
         <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>
@@ -8359,7 +8397,7 @@
         <translation>Ezin da Hostalari USB Proxy zerbitzua gertatu</translation>
     </message>
     <message>
-        <location line="-1079"/>
+        <location line="-1089"/>
         <source>Can't find snapshot named <b>%1</b>.</source>
         <translation>Ezin da<b>%1</b> izeneko berehalakoa aurkitu.</translation>
     </message>
@@ -8410,7 +8448,7 @@
         <translation type="obsolete">Ongi</translation>
     </message>
     <message>
-        <location line="-1658"/>
+        <location line="-1692"/>
         <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>
@@ -8420,7 +8458,7 @@
         <translation><p>Hurrengo makina birtual gaiak kentzear zaude makinaren zerrendatik:</p><p><b>%1</b></p><p>Jarraitzea nahi duzu?</p></translation>
     </message>
     <message>
-        <location line="+53"/>
+        <location line="+55"/>
         <source><p>You are about to remove following inaccessible virtual machines from the machine list:</p><p>%1</p><p>Do you wish to proceed?</p></source>
         <translation><p>Hurrengo sarbiderik gabeko makina birtuala kentzear zaude makinaren zerrendatik:</p><p><b>%1</b></p><p>Jarraitzea nahi duzu?</p></translation>
     </message>
@@ -8435,12 +8473,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="+1380"/>
+        <location line="+1412"/>
         <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="-1297"/>
+        <location line="-1329"/>
         <source>ACPI Shutdown</source>
         <comment>machine</comment>
         <translation>ACPI Itzalketa</translation>
@@ -8452,7 +8490,7 @@
         <translation>Itzali</translation>
     </message>
     <message>
-        <location line="+758"/>
+        <location line="+790"/>
         <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>
@@ -8462,7 +8500,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="-805"/>
+        <location line="-837"/>
         <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>
@@ -8482,7 +8520,7 @@
         <translation><p>Egitan nahi duzu hurrengo makina birtualak itzaltzea?</p><p><b>%1</b></p><p>Honek barnean lanean dauden aplikazioen gorde gabeko datuak galtzea eragingo du.</p></translation>
     </message>
     <message>
-        <location line="-186"/>
+        <location line="-188"/>
         <source><p>You are trying to move machine <nobr><b>%1</b></nobr> to group <nobr><b>%2</b></nobr> which already have sub-group <nobr><b>%1</b></nobr>.</p><p>Please resolve this name-conflict and try again.</p></source>
         <translation><p><nobr><b>%1</b></nobr> makina <nobr><b>%2</b></nobr>-ra mugitzen saiatzen ari zara jadanik <nobr><b>%1</b></nobr> azpi-taldea duena.</p><p>Mesedez konpondu izen-gatazka hau eta saiatu berriro.</p></translation>
     </message>
@@ -8497,7 +8535,7 @@
         <translation>Berrizendatu</translation>
     </message>
     <message>
-        <location line="+248"/>
+        <location line="+250"/>
         <source><p>You are about to restore snapshot <nobr><b>%1</b></nobr>.</p><p>You can create a snapshot of the current state of the virtual machine first by checking the box below; if you do not do this the current state will be permanently lost. Do you wish to proceed?</p></source>
         <translation><p><nobr><b>%1</b></nobr> berehalakoa leheneratzear zaude.</p><p>Makina birtualaren oraingo egoeraren berehalako bat sortu dezakezu lehenik azpiko kutxatila hautatuz; ez baduzu hau egiten oraingo egoera betirako galduko da. Jarraitzea nahi duzu?</p></translation>
     </message>
@@ -8507,12 +8545,12 @@
         <translation><p>Zihur zaude <nobr><b>%1</b></nobr> berehalakoa leheneratzea nahi duzula?</p></translation>
     </message>
     <message>
-        <location line="-248"/>
+        <location line="-250"/>
         <source>Failed to set groups of the virtual machine <b>%1</b>.</source>
         <translation>Hutsegitea <b>%1</b> makina birtualaren taldeak ezartzerakoan.</translation>
     </message>
     <message>
-        <location line="+1214"/>
+        <location line="+1248"/>
         <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>
@@ -8534,7 +8572,7 @@
 <context>
     <name>UIMiniToolBar</name>
     <message>
-        <location filename="../src/widgets/UIMiniToolBar.cpp" line="+288"/>
+        <location filename="../src/widgets/UIMiniToolBar.cpp" line="+287"/>
         <source>Always show the toolbar</source>
         <translation>Betik erakutsi tresnabarra</translation>
     </message>
@@ -8557,14 +8595,14 @@
 <context>
     <name>UIMultiScreenLayout</name>
     <message>
-        <location filename="../src/runtime/UIActionPoolRuntime.cpp" line="+2104"/>
+        <location filename="../src/runtime/UIActionPoolRuntime.cpp" line="+2105"/>
         <location line="+15"/>
         <location line="+47"/>
         <source>Virtual Screen %1</source>
         <translation>Ikusleiho Birtuala %1</translation>
     </message>
     <message>
-        <location line="+220"/>
+        <location line="+221"/>
         <source>Use Host Screen %1</source>
         <translation>Erabili Hostalari Ikusleihoa %1</translation>
     </message>
@@ -8645,12 +8683,12 @@
         <translation type="obsolete">Akatsa: %1.</translation>
     </message>
     <message>
-        <location filename="../src/net/UINetworkRequestWidget.cpp" line="+184"/>
+        <location filename="../src/net/UINetworkRequestWidget.cpp" line="+226"/>
         <source>The network operation failed with the following error: %1.</source>
         <translation>Sare eragiketak huts egin du hurrengo akatsarekin: %1.</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location line="-39"/>
         <source>Network Operation</source>
         <translation>Sare Eragiketa</translation>
     </message>
@@ -8692,37 +8730,82 @@
 <context>
     <name>UINetworkReplyPrivate</name>
     <message>
-        <location filename="../src/net/UINetworkReply.cpp" line="+648"/>
+        <location filename="../src/net/UINetworkReply.cpp" line="+952"/>
         <source>Host not found</source>
         <translation>Hostalaria ez da aurkitu</translation>
     </message>
     <message>
-        <location line="+2"/>
+        <location line="+1"/>
         <source>Content access denied</source>
         <translation>Edukirako sarbidea ukatuta</translation>
     </message>
     <message>
-        <location line="+2"/>
+        <location line="+1"/>
         <source>Protocol failure</source>
         <translation>Protokolo hutsegitea</translation>
     </message>
     <message>
+        <location line="+1"/>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location line="+2"/>
         <source>Wrong SSL certificate format</source>
         <translation>SSL egiaztagiri heuskarri okerra</translation>
     </message>
     <message>
-        <location line="+2"/>
+        <location line="-1"/>
         <source>SSL authentication failed</source>
         <translation>SSL egiaztapen hutsegitea</translation>
     </message>
     <message>
-        <location line="+2"/>
+        <location line="-30"/>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+25"/>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+1"/>
         <source>Unknown reason</source>
         <translation>Zergaiti ezezaguna</translation>
     </message>
 </context>
 <context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <location line="-575"/>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+33"/>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location line="+85"/>
+        <location line="+13"/>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>UIPopupCenter</name>
     <message>
         <location filename="../src/widgets/UIPopupPane.cpp" line="+278"/>
@@ -8761,7 +8844,7 @@
 <context>
     <name>UIPortForwardingTable</name>
     <message>
-        <location filename="../src/widgets/UIPortForwardingTable.cpp" line="+429"/>
+        <location filename="../src/widgets/UIPortForwardingTable.cpp" line="+444"/>
         <source>Name</source>
         <translation>Izena</translation>
     </message>
@@ -8791,7 +8874,7 @@
         <translation>Gonbidatu Ataka</translation>
     </message>
     <message>
-        <location line="+391"/>
+        <location line="+390"/>
         <source>Contains a list of port forwarding rules.</source>
         <translation>Berbidalketa ataka arauen zerrenda bat du.</translation>
     </message>
@@ -8864,7 +8947,7 @@
 <context>
     <name>UISelectorWindow</name>
     <message>
-        <location filename="../src/selector/UISelectorWindow.cpp" line="+228"/>
+        <location filename="../src/selector/UISelectorWindow.cpp" line="+137"/>
         <source>Show Toolbar</source>
         <translation>Erakutsi Tresnabarra</translation>
     </message>
@@ -8874,7 +8957,7 @@
         <translation>Erakutsi Egoerabarra</translation>
     </message>
     <message>
-        <location line="+122"/>
+        <location line="+330"/>
         <source>Select a virtual machine file</source>
         <translation>Hautatu makina birtual agiria</translation>
     </message>
@@ -8884,12 +8967,12 @@
         <translation>Makina birtual agiriak (%1)</translation>
     </message>
     <message>
-        <location line="+579"/>
+        <location line="-223"/>
         <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is  a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></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 [...]
         <translation><h3>Ongi etorri VirtualBox-era!</h3><p>Leiho honetako ezker aldea zure ordenagailuko makina birtualen zerrenda bat da. Zerrenda orain hutsik dago oraindik ez duzulako makina birtualik sortu.<img src=:/welcome.png align=right/></p><p>Makina birtual berri bat sortzeko, sakatu <b>Berria</b> botoia leihoaren goialdeko tresna barra nagusian.</p><p><b>%1</b> tekla sakatu dezakezu berehalako laguntza lo [...]
     </message>
     <message>
-        <location line="+80"/>
+        <location line="+751"/>
         <source>Manager</source>
         <comment>Note: main window title which is pretended by the product name.</comment>
         <translation>Kudeatzailea</translation>
@@ -9188,7 +9271,7 @@
 <context>
     <name>UIUpdateStepVirtualBox</name>
     <message>
-        <location filename="../src/net/UIUpdateManager.cpp" line="+195"/>
+        <location filename="../src/net/UIUpdateManager.cpp" line="+169"/>
         <source>Checking for a new VirtualBox version...</source>
         <translation>VirtualBox bertsio berririk dagoen egiaztatzen...</translation>
     </message>
@@ -9425,18 +9508,18 @@
 <context>
     <name>UIVMLogViewer</name>
     <message>
-        <location filename="../src/UIVMLogViewer.cpp" line="+171"/>
+        <location filename="../src/UIVMLogViewer.cpp" line="+173"/>
         <source>Close the search panel</source>
         <translation>Itxi bilaketa panela</translation>
     </message>
     <message>
         <location line="+2"/>
-        <location line="+370"/>
+        <location line="+388"/>
         <source>&Find</source>
         <translation>&Bilatu</translation>
     </message>
     <message>
-        <location line="-369"/>
+        <location line="-387"/>
         <source>Enter a search string here</source>
         <translation>Sartu bilaketa kate bat hemen</translation>
     </message>
@@ -9476,7 +9559,7 @@
         <translation>Katea ez da aurkitu</translation>
     </message>
     <message>
-        <location line="+309"/>
+        <location line="+327"/>
         <source><p>No log files found. Press the <b>Refresh</b> button to rescan the log folder <nobr><b>%1</b></nobr>.</p></source>
         <translation><p>Ez da ohar agiririk aurkitu. Sakatu <b>Berritu</b> botoia <nobr><b>%1</b></nobr> ohar agiritegia berriro mihatzeko.</p></translation>
     </message>
@@ -10418,7 +10501,7 @@
         <translation>Sortu</translation>
     </message>
     <message>
-        <location filename="../src/wizards/newvm/UIWizardNewVMPageBasic1.cpp" line="+300"/>
+        <location filename="../src/wizards/newvm/UIWizardNewVMPageBasic1.cpp" line="+302"/>
         <location filename="../src/wizards/newvm/UIWizardNewVMPageExpert.cpp" line="+227"/>
         <source>Name and operating system</source>
         <translation>Izena eta sistema eragilea</translation>
@@ -10506,7 +10589,7 @@
 <context>
     <name>VBoxAboutDlg</name>
     <message>
-        <location filename="../src/VBoxAboutDlg.cpp" line="+110"/>
+        <location filename="../src/VBoxAboutDlg.cpp" line="+70"/>
         <source>VirtualBox - About</source>
         <translation>VirtualBox - Honi buruz</translation>
     </message>
@@ -11168,14 +11251,14 @@
         <translation>Hostalari Gailua</translation>
     </message>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="+707"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+673"/>
         <source>User-defined</source>
         <comment>serial port</comment>
         <translation>Erabiltzaileak-zehaztuta</translation>
     </message>
     <message>
         <location filename="../src/UIVMInfoDialog.cpp" line="-176"/>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="-1074"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="-1040"/>
         <location filename="../src/runtime/UIIndicatorsPool.cpp" line="-9"/>
         <source>VT-x/AMD-V</source>
         <comment>details report</comment>
@@ -11439,14 +11522,14 @@
         <translation>Ezarrita</translation>
     </message>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="+1036"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+1002"/>
         <source>Differencing</source>
         <comment>DiskType</comment>
         <translation>Bereizlea</translation>
     </message>
     <message>
         <location filename="../src/UIVMInfoDialog.cpp" line="-1"/>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="-1071"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="-1037"/>
         <source>Nested Paging</source>
         <comment>details report</comment>
         <translation>Nested Orrialdeztapena</translation>
@@ -11790,7 +11873,7 @@
         <translation>Ohinarriko diska gogor hau zeharka erantsita dago hurrengo ezberdinketa diska gogorra erabiliz:</translation>
     </message>
     <message numerus="yes">
-        <location filename="../src/globals/VBoxGlobal.h" line="+223"/>
+        <location filename="../src/globals/VBoxGlobal.h" line="+269"/>
         <source>%n year(s)</source>
         <translation>
             <numerusform>%n urte</numerusform>
@@ -11864,7 +11947,7 @@
     <message>
         <location filename="../src/converter/UIConverterBackendGlobal.cpp" line="+76"/>
         <location line="+19"/>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="+1621"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+1587"/>
         <location line="+32"/>
         <source>B</source>
         <comment>size suffix Bytes</comment>
@@ -11944,7 +12027,7 @@
         <translation>Mugagabeko Exekuzioa</translation>
     </message>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="-1950"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="-1916"/>
         <source>Unknown device</source>
         <comment>USB device details</comment>
         <translation>Gailu ezezaguna</translation>
@@ -11969,7 +12052,7 @@
         <translation>Ezgaituta</translation>
     </message>
     <message>
-        <location line="+445"/>
+        <location line="+411"/>
         <source>Please choose a virtual hard disk file</source>
         <translation>Mesedez hautatu diska gogor agiri birtual bat</translation>
     </message>
@@ -12054,7 +12137,7 @@
         <translation>ICH9</translation>
     </message>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="-571"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="-537"/>
         <location filename="../src/runtime/UIIndicatorsPool.cpp" line="+1"/>
         <source>Execution Cap</source>
         <comment>details report</comment>
@@ -12485,7 +12568,7 @@
         <translation type="obsolete">Diska gogor birtual agiri guztiak (%1)</translation>
     </message>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="+321"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+287"/>
         <source>Please choose a virtual optical disk file</source>
         <translation>Mesedez hautatu diska optiko birtual agiri bat</translation>
     </message>
@@ -12505,7 +12588,7 @@
         <translation>Disketa birtual agiri guztiak (%1)</translation>
     </message>
     <message>
-        <location line="+2051"/>
+        <location line="+2052"/>
         <source>VDI (VirtualBox Disk Image)</source>
         <translation>VDI (VirtualBox Diska Irudia)</translation>
     </message>
@@ -12620,14 +12703,14 @@
         <translation type="obsolete">Agiri guztiak (*)</translation>
     </message>
     <message>
-        <location line="-235"/>
+        <location line="-234"/>
         <location line="+44"/>
         <location line="+33"/>
         <source><i>Not&nbsp;Attached</i></source>
         <translation><i>Ez&nbsp;Erantsita</i></translation>
     </message>
     <message>
-        <location line="+649"/>
+        <location line="+648"/>
         <source>--</source>
         <comment>no info</comment>
         <translation>--</translation>
@@ -12638,12 +12721,12 @@
         <translation>Multimedia Birtual Kudeatzailea</translation>
     </message>
     <message>
-        <location line="-114"/>
+        <location line="-113"/>
         <source><i>Not&nbsp;Encrypted</i></source>
         <translation><i>Ez&nbsp;Enkriptatuta</i></translation>
     </message>
     <message>
-        <location line="+125"/>
+        <location line="+124"/>
         <source>Copy an existing disk image file</source>
         <translation>Kopiatu dagoen diska irudi agiri bat</translation>
     </message>
@@ -12993,7 +13076,7 @@
         </translation>
     </message>
     <message>
-        <location filename="../src/runtime/UIMachineLogic.cpp" line="-221"/>
+        <location filename="../src/runtime/UIMachineLogic.cpp" line="-231"/>
         <source>Snapshot %1</source>
         <translation>Berehalakoa %1</translation>
     </message>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa_IR.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa_IR.ts
index 765be5b..4ef80a2 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa_IR.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fa_IR.ts
@@ -1,11146 +1,11222 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
 <TS version="2.0" language="fa_IR">
-  <context>
+<context>
     <name>@@@</name>
     <message>
-      <source>English</source>
-      <comment>Native language name</comment>
-      <translation>فارسی</translation>
+        <source>English</source>
+        <comment>Native language name</comment>
+        <translation>فارسی</translation>
     </message>
     <message>
-      <source>--</source>
-      <comment>Native language country name (empty if this language is for all countries)</comment>
-      <translation>Farsi</translation>
+        <source>--</source>
+        <comment>Native language country name (empty if this language is for all countries)</comment>
+        <translation>Farsi</translation>
     </message>
     <message>
-      <source>English</source>
-      <comment>Language name, in English</comment>
-      <translation>Farsi</translation>
+        <source>English</source>
+        <comment>Language name, in English</comment>
+        <translation>Farsi</translation>
     </message>
     <message>
-      <source>--</source>
-      <comment>Language country name, in English (empty if native country name is empty)</comment>
-      <translation>فارسی</translation>
+        <source>--</source>
+        <comment>Language country name, in English (empty if native country name is empty)</comment>
+        <translation>فارسی</translation>
     </message>
     <message>
-      <source>Oracle Corporation</source>
-      <comment>Comma-separated list of translators</comment>
-      <translation>حسام محمدی</translation>
+        <source>Oracle Corporation</source>
+        <comment>Comma-separated list of translators</comment>
+        <translation>حسام محمدی</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>QApplication</name>
     <message>
-      <source>Executable <b>%1</b> requires Qt %2.x, found Qt %3.</source>
-      <translation>فایل اِجرایی <b>%1</b> نیاز به کیو تی %2.x، دارد کیو تی %3 رایافت.</translation>
+        <source>Executable <b>%1</b> requires Qt %2.x, found Qt %3.</source>
+        <translation>فایل اِجرایی <b>%1</b> نیاز به کیو تی %2.x، دارد کیو تی %3 رایافت.</translation>
     </message>
     <message>
-      <source>Incompatible Qt Library Error</source>
-      <translation>خطای ناسازگاری کتابخانه کیوتی</translation>
+        <source>Incompatible Qt Library Error</source>
+        <translation>خطای ناسازگاری کتابخانه کیوتی</translation>
     </message>
     <message>
-      <source>VirtualBox - Error In %1</source>
-      <translation>ويرچوال باکس - خطا در %1</translation>
+        <source>VirtualBox - Error In %1</source>
+        <translation>ويرچوال باکس - خطا در %1</translation>
     </message>
     <message>
-      <source><html><b>%1 (rc=%2)</b><br/><br/></source>
-      <translation><html><b>%1 (rc=%2)</b><br/><br/></translation>
+        <source><html><b>%1 (rc=%2)</b><br/><br/></source>
+        <translation><html><b>%1 (rc=%2)</b><br/><br/></translation>
     </message>
     <message>
-      <source>Please try reinstalling VirtualBox.</source>
-      <translation>لطفا ویرچوال باکس را مجددا نصب کنید.</translation>
+        <source>Please try reinstalling VirtualBox.</source>
+        <translation>لطفا ویرچوال باکس را مجددا نصب کنید.</translation>
     </message>
     <message>
-      <source>Make sure the kernel module has been loaded successfully.</source>
-      <translation>مطمئن شوید مدل هسته با موفقیت بارگیری شده است.</translation>
+        <source>Make sure the kernel module has been loaded successfully.</source>
+        <translation>مطمئن شوید مدل هسته با موفقیت بارگیری شده است.</translation>
     </message>
     <message>
-      <source>VirtualBox - Runtime Error</source>
-      <translation>ويرچوال باکس - خطای زمان اِجرا</translation>
+        <source>VirtualBox - Runtime Error</source>
+        <translation>ويرچوال باکس - خطای زمان اِجرا</translation>
     </message>
     <message>
-      <source><b>Cannot access the kernel driver!</b><br/><br/></source>
-      <translation><b>به هسته درایور نمیتوان دسترسی داشت!</b><br/><br/></translation>
+        <source><b>Cannot access the kernel driver!</b><br/><br/></source>
+        <translation><b>به هسته درایور نمیتوان دسترسی داشت!</b><br/><br/></translation>
     </message>
     <message>
-      <source>Unknown error %2 during initialization of the Runtime</source>
-      <translation>خطای ناشناخته %2 حین مقداردهی زمان اِجرا رخ داد</translation>
+        <source>Unknown error %2 during initialization of the Runtime</source>
+        <translation>خطای ناشناخته %2 حین مقداردهی زمان اِجرا رخ داد</translation>
     </message>
     <message>
-      <source>Kernel driver not accessible</source>
-      <translation>هسته درایور قابل دسترسی نیست</translation>
+        <source>Kernel driver not accessible</source>
+        <translation>هسته درایور قابل دسترسی نیست</translation>
     </message>
     <message>
-      <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source>
-      <translation>مدل هسته ويرچوال باکس با این نسخه از مدل هسته ويرچوال باکس تطبیق ندارد. نصب ويرچوال باکس ظاهرا موفقیت آمیز نبوده است. لطفا برنامه را کاملا حذف کرده و مجددا نصب نمایید.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source>
+        <translation>مدل هسته ويرچوال باکس با این نسخه از مدل هسته ويرچوال باکس تطبیق ندارد. نصب ويرچوال باکس ظاهرا موفقیت آمیز نبوده است. لطفا برنامه را کاملا حذف کرده و مجددا نصب نمایید.</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>'/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>مدل هسته ويرچوال باکس با این نسخه از ويرچوال باکس تطبیق ندارد. نصب ويرچوال باکس ظاهرا موفقیت آمیز نبوده است. اِجرای راه انداز<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>شاید این را درست کند. مطمئن شوید شما نسخه اُ اِس ای و نسخه پی یو ای اِل ویرچوال باکس را میکس نکرده باشید.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation type="obsolete">مدل هسته ويرچوال باکس با این نسخه از ويرچوال باکس تطبیق ندارد. نصب ويرچوال باکس ظاهرا موفقیت آمیز نبوده است. اِجرای راه انداز<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>
-      <translation>این خطا این معنی را دارد که هسته درایو قادر به اختصاص حافظه کافی نیست یا برخی از عملکردهای مسیردهی موفق نشده است.</translation>
+        <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
+        <translation>این خطا این معنی را دارد که هسته درایو قادر به اختصاص حافظه کافی نیست یا برخی از عملکردهای مسیردهی موفق نشده است.</translation>
     </message>
     <message>
-      <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessar [...]
-      <translation>درایور هسته لینوکس ويرچوال باکس (vboxdrv) بارگیری نشده است یا مشکلی با سطح دسترسی /dev/vboxdrv دارد. لطفا مدل هسته را با اِجرای راه انداز<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>بعنوان ریشه مجددا نصب نمایید. اگر آن در توزیع شما موجود باشد، شما اول باید بسته دی کی اِم اِس را نصب کنید. این بسته تغییرات هسته لینوکس را ردگیری و ذخیره میکند و مدل هسته  vboxdrv در صورت نیاز مجددا کامپایل میکند.</tr [...]
+        <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 در صورت نیاز مجددا  [...]
     </message>
-  </context>
-  <context>
+    <message>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>QIArrowSplitter</name>
     <message>
-      <source>&Back</source>
-      <translation>قب&لی</translation>
+        <source>&Back</source>
+        <translation>قب&لی</translation>
     </message>
     <message>
-      <source>&Next</source>
-      <translation>بعد&ی</translation>
+        <source>&Next</source>
+        <translation>بعد&ی</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>QIFileDialog</name>
     <message>
-      <source>Select a directory</source>
-      <translation>یک دایرکتوری انتخاب کنید</translation>
+        <source>Select a directory</source>
+        <translation>یک دایرکتوری انتخاب کنید</translation>
     </message>
     <message>
-      <source>Select a file</source>
-      <translation>یک فایل انتخاب کنید</translation>
+        <source>Select a file</source>
+        <translation>یک فایل انتخاب کنید</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>QILabel</name>
     <message>
-      <source>&Copy</source>
-      <translation>ک&پی</translation>
+        <source>&Copy</source>
+        <translation>ک&پی</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>QIMessageBox</name>
     <message>
-      <source>OK</source>
-      <translation>تأیید</translation>
+        <source>OK</source>
+        <translation>تأیید</translation>
     </message>
     <message>
-      <source>Yes</source>
-      <translation>بله</translation>
+        <source>Yes</source>
+        <translation>بله</translation>
     </message>
     <message>
-      <source>No</source>
-      <translation>خیر</translation>
+        <source>No</source>
+        <translation>خیر</translation>
     </message>
     <message>
-      <source>Cancel</source>
-      <translation>لغو</translation>
+        <source>Cancel</source>
+        <translation>لغو</translation>
     </message>
     <message>
-      <source>Ignore</source>
-      <translation>چشمپوشی</translation>
+        <source>Ignore</source>
+        <translation type="obsolete">چشمپوشی</translation>
     </message>
     <message>
-      <source>&Details</source>
-      <translation>جزئی&ات</translation>
+        <source>&Details</source>
+        <translation>جزئی&ات</translation>
     </message>
     <message>
-      <source>&Details (%1 of %2)</source>
-      <translation>جزئیا&ت (%1 از %2)</translation>
+        <source>&Details (%1 of %2)</source>
+        <translation>جزئیا&ت (%1 از %2)</translation>
     </message>
     <message>
-      <source>Copy all errors to the clipboard</source>
-      <translation>کپی همه خطاها به کلیپ برد</translation>
+        <source>Copy all errors to the clipboard</source>
+        <translation>کپی همه خطاها به کلیپ برد</translation>
     </message>
     <message>
-      <source>Copy</source>
-      <translation>کپی</translation>
+        <source>Copy</source>
+        <translation>کپی</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>QIWidgetValidator</name>
     <message>
-      <source>not complete</source>
-      <comment>value state</comment>
-      <translation>کامل نیست</translation>
+        <source>not complete</source>
+        <comment>value state</comment>
+        <translation type="obsolete">کامل نیست</translation>
     </message>
     <message>
-      <source>invalid</source>
-      <comment>value state</comment>
-      <translation>نامعتبر</translation>
+        <source>invalid</source>
+        <comment>value state</comment>
+        <translation type="obsolete">نامعتبر</translation>
     </message>
     <message>
-      <source><qt>The value of the <b>%1</b> field on the <b>%2</b> page is %3.</qt></source>
-      <translation><qt>مقدار فیلد <b>%1</b> در صفحه <b>%2</b>  %3 .</qt> </translation>
+        <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>
     </message>
     <message>
-      <source><qt>One of the values on the <b>%1</b> page is %2.</qt></source>
-      <translation><qt>یکی از مقادیر در صفحه  <b>%1</b>  %2 .</qt></translation>
+        <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>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIActionPool</name>
     <message>
-      <source>&Machine</source>
-      <translation>ماش&ین</translation>
+        <source>&Machine</source>
+        <translation>ماش&ین</translation>
     </message>
     <message>
-      <source>Automatically resize the guest display when the window is resized (requires Guest Additions)</source>
-      <translation>تغییر اندازه خودکار صفحه مهمان وقتی پنجره تغییر اندازه داده شد (به افزونه مهمان نیازدارد)</translation>
+        <source>Automatically resize the guest display when the window is resized (requires Guest Additions)</source>
+        <translation type="obsolete">تغییر اندازه خودکار صفحه مهمان وقتی پنجره تغییر اندازه داده شد (به افزونه مهمان نیازدارد)</translation>
     </message>
     <message>
-      <source>&Adjust Window Size</source>
-      <translation>&تنظیم اندازه پنجره</translation>
+        <source>&Adjust Window Size</source>
+        <translation>&تنظیم اندازه پنجره</translation>
     </message>
     <message>
-      <source>Adjust window size and position to best fit the guest display</source>
-      <translation>تنظیم اندازه پنجره و موقعیت به بهترین تناسب نمایش مهمان</translation>
+        <source>Adjust window size and position to best fit the guest display</source>
+        <translation>تنظیم اندازه پنجره و موقعیت به بهترین تناسب نمایش مهمان</translation>
     </message>
     <message>
-      <source>Disable &Mouse Integration</source>
-      <translation>غیرفعال سازی یکپارچگ&ی ماوس</translation>
+        <source>Disable &Mouse Integration</source>
+        <translation type="obsolete">غیرفعال سازی یکپارچگ&ی ماوس</translation>
     </message>
     <message>
-      <source>Temporarily disable host mouse pointer integration</source>
-      <translation>غیرفعالسازی موقت یکپارچگی نشانگر ماوس میزبان</translation>
+        <source>Temporarily disable host mouse pointer integration</source>
+        <translation type="obsolete">غیرفعالسازی موقت یکپارچگی نشانگر ماوس میزبان</translation>
     </message>
     <message>
-      <source>&Insert Ctrl-Alt-Del</source>
-      <translation>&فشاردادن Ctrl-Alt-Del</translation>
+        <source>&Insert Ctrl-Alt-Del</source>
+        <translation type="obsolete">&فشاردادن Ctrl-Alt-Del</translation>
     </message>
     <message>
-      <source>Send the Ctrl-Alt-Del sequence to the virtual machine</source>
-      <translation>ارسال توالی Ctrl-Alt-Del به ماشین مجازی</translation>
+        <source>Send the Ctrl-Alt-Del sequence to the virtual machine</source>
+        <translation type="obsolete">ارسال توالی Ctrl-Alt-Del به ماشین مجازی</translation>
     </message>
     <message>
-      <source>Send the Ctrl-Alt-Backspace sequence to the virtual machine</source>
-      <translation>ارسال توالی Ctrl-Alt-Backspace به ماشین مجازی</translation>
+        <source>Send the Ctrl-Alt-Backspace sequence to the virtual machine</source>
+        <translation type="obsolete">ارسال توالی Ctrl-Alt-Backspace به ماشین مجازی</translation>
     </message>
     <message>
-      <source>Take a snapshot of the virtual machine</source>
-      <translation>ایجاد یک ضبط وضعیت ماشین مجازی</translation>
+        <source>Take a snapshot of the virtual machine</source>
+        <translation>ایجاد یک ضبط وضعیت ماشین مجازی</translation>
     </message>
     <message>
-      <source>Show Session Information Window</source>
-      <translation>نمایش پنجره اطلاعات جلسه</translation>
+        <source>Show Session Information Window</source>
+        <translation type="obsolete">نمایش پنجره اطلاعات جلسه</translation>
     </message>
     <message>
-      <source>&Pause</source>
-      <translation>وقف&ه</translation>
+        <source>&Pause</source>
+        <translation>وقف&ه</translation>
     </message>
     <message>
-      <source>Suspend the execution of the virtual machine</source>
-      <translation>تعلیق اِجرای ماشین مجازی</translation>
+        <source>Suspend the execution of the virtual machine</source>
+        <translation>تعلیق اِجرای ماشین مجازی</translation>
     </message>
     <message>
-      <source>&Reset</source>
-      <translation>&ریست</translation>
+        <source>&Reset</source>
+        <translation>&ریست</translation>
     </message>
     <message>
-      <source>Reset the virtual machine</source>
-      <translation>ریست ماشین مجازی</translation>
+        <source>Reset the virtual machine</source>
+        <translation>ریست ماشین مجازی</translation>
     </message>
     <message>
-      <source>ACPI Sh&utdown</source>
-      <translation>خامو&ش کردن اِی سی پی آی</translation>
+        <source>ACPI Sh&utdown</source>
+        <translation>خامو&ش کردن اِی سی پی آی</translation>
     </message>
     <message>
-      <source>Send the ACPI Power Button press event to the virtual machine</source>
-      <translation>اِرسال رویداد فشار دکمه برق اِی سی پی آی به ماشین مجازی</translation>
+        <source>Send the ACPI Power Button press event to the virtual machine</source>
+        <translation type="obsolete">اِرسال رویداد فشار دکمه برق اِی سی پی آی به ماشین مجازی</translation>
     </message>
     <message>
-      <source>&Close...</source>
-      <translation>&بستن...</translation>
+        <source>&Close...</source>
+        <translation>&بستن...</translation>
     </message>
     <message>
-      <source>Close the virtual machine</source>
-      <translation>بستن ماشین مجازی</translation>
+        <source>Close the virtual machine</source>
+        <translation>بستن ماشین مجازی</translation>
     </message>
     <message>
-      <source>&View</source>
-      <translation>مشاه&ده</translation>
+        <source>&View</source>
+        <translation>مشاه&ده</translation>
     </message>
     <message>
-      <source>&Devices</source>
-      <translation>&دستگاه</translation>
+        <source>&Devices</source>
+        <translation>&دستگاه</translation>
     </message>
     <message>
-      <source>&CD/DVD Devices</source>
-      <translation>&دستگاه سی دی/دی وی دی</translation>
+        <source>&CD/DVD Devices</source>
+        <translation type="obsolete">&دستگاه سی دی/دی وی دی</translation>
     </message>
     <message>
-      <source>&Floppy Devices</source>
-      <translation>دست&گاه فلاپی</translation>
+        <source>&Floppy Devices</source>
+        <translation type="obsolete">دست&گاه فلاپی</translation>
     </message>
     <message>
-      <source>&USB Devices</source>
-      <translation>دستگاه یو& اِس بی</translation>
+        <source>&USB Devices</source>
+        <translation type="obsolete">دستگاه یو& اِس بی</translation>
     </message>
     <message>
-      <source>&Network Adapters...</source>
-      <translation>&آداپتورهای شبکه...</translation>
+        <source>&Network Adapters...</source>
+        <translation type="obsolete">&آداپتورهای شبکه...</translation>
     </message>
     <message>
-      <source>Change the settings of network adapters</source>
-      <translation>تغییر تنظیمات آداپتورهای شبکه</translation>
+        <source>Change the settings of network adapters</source>
+        <translation type="obsolete">تغییر تنظیمات آداپتورهای شبکه</translation>
     </message>
     <message>
-      <source>&Shared Folders...</source>
-      <translation>پوشه ه&ای اشتراکی...</translation>
+        <source>&Shared Folders...</source>
+        <translation type="obsolete">پوشه ه&ای اشتراکی...</translation>
     </message>
     <message>
-      <source>Create or modify shared folders</source>
-      <translation>ایجاد یا ویرایش پوشه های اشتراکی</translation>
+        <source>Create or modify shared folders</source>
+        <translation type="obsolete">ایجاد یا ویرایش پوشه های اشتراکی</translation>
     </message>
     <message>
-      <source>&Insert Guest Additions CD image...</source>
-      <translation>نصب افزون&ه مهمان...</translation>
+        <source>&Insert Guest Additions CD image...</source>
+        <translation>نصب افزون&ه مهمان...</translation>
     </message>
     <message>
-      <source>Insert the Guest Additions disk file into the virtual drive</source>
-      <translation>بارگیری ایمیج نصب افزونه مهمان</translation>
+        <source>Insert the Guest Additions disk file into the virtual drive</source>
+        <translation type="obsolete">بارگیری ایمیج نصب افزونه مهمان</translation>
     </message>
     <message>
-      <source>De&bug</source>
-      <translation>اشکال یاب&ی</translation>
+        <source>De&bug</source>
+        <translation>اشکال یاب&ی</translation>
     </message>
     <message>
-      <source>&Statistics...</source>
-      <comment>debug action</comment>
-      <translation>آما&ر...</translation>
+        <source>&Statistics...</source>
+        <comment>debug action</comment>
+        <translation>آما&ر...</translation>
     </message>
     <message>
-      <source>&Command Line...</source>
-      <comment>debug action</comment>
-      <translation>&فرمان خطی...</translation>
+        <source>&Command Line...</source>
+        <comment>debug action</comment>
+        <translation>&فرمان خطی...</translation>
     </message>
     <message>
-      <source>&Help</source>
-      <translation>را&هنما</translation>
+        <source>&Help</source>
+        <translation>را&هنما</translation>
     </message>
     <message>
-      <source>Dock Icon</source>
-      <translation>دوک آیکون</translation>
+        <source>Dock Icon</source>
+        <translation>دوک آیکون</translation>
     </message>
     <message>
-      <source>Show Monitor Preview</source>
-      <translation>نمایش پیشنمایش مانیتور</translation>
+        <source>Show Monitor Preview</source>
+        <translation>نمایش پیشنمایش مانیتور</translation>
     </message>
     <message>
-      <source>Show Application Icon</source>
-      <translation>نمایش آیکون برنامه</translation>
+        <source>Show Application Icon</source>
+        <translation>نمایش آیکون برنامه</translation>
     </message>
     <message>
-      <source>Enable remote desktop (RDP) connections to this machine</source>
-      <translation>فعالسازی ارتباطات ریموت دسکتاپ (RDP) به این ماشین</translation>
+        <source>Enable remote desktop (RDP) connections to this machine</source>
+        <translation type="obsolete">فعالسازی ارتباطات ریموت دسکتاپ (RDP) به این ماشین</translation>
     </message>
     <message>
-      <source>Enable &Logging...</source>
-      <comment>debug action</comment>
-      <translation>فعالسازی &وقایع نگاری...</translation>
+        <source>Enable &Logging...</source>
+        <comment>debug action</comment>
+        <translation type="obsolete">فعالسازی &وقایع نگاری...</translation>
     </message>
     <message>
-      <source>Switch to &Fullscreen</source>
-      <translation>رفتن به حالت تما&م صفحه</translation>
+        <source>Switch to &Fullscreen</source>
+        <translation type="obsolete">رفتن به حالت تما&م صفحه</translation>
     </message>
     <message>
-      <source>Switch between normal and fullscreen mode</source>
-      <translation>تعویض بین حالت معمولی و تمام صفحه</translation>
+        <source>Switch between normal and fullscreen mode</source>
+        <translation type="obsolete">تعویض بین حالت معمولی و تمام صفحه</translation>
     </message>
     <message>
-      <source>Switch to Seam&less Mode</source>
-      <translation>رفتن &به حالت یکپارچه</translation>
+        <source>Switch to Seam&less Mode</source>
+        <translation type="obsolete">رفتن &به حالت یکپارچه</translation>
     </message>
     <message>
-      <source>Switch between normal and seamless desktop integration mode</source>
-      <translation>تعویض بین حالت معمولی و حالت یکپارچگی دسکتاپ</translation>
+        <source>Switch between normal and seamless desktop integration mode</source>
+        <translation>تعویض بین حالت معمولی و حالت یکپارچگی دسکتاپ</translation>
     </message>
     <message>
-      <source>Switch to &Scaled Mode</source>
-      <translation>رفتن به &حالت مقیاس</translation>
+        <source>Switch to &Scaled Mode</source>
+        <translation type="obsolete">رفتن به &حالت مقیاس</translation>
     </message>
     <message>
-      <source>Switch between normal and scaled mode</source>
-      <translation>تعویض بین حالت معمولی و مقیاس</translation>
+        <source>Switch between normal and scaled mode</source>
+        <translation>تعویض بین حالت معمولی و مقیاس</translation>
     </message>
     <message>
-      <source>Auto-resize &Guest Display</source>
-      <translation>تغییراندازه &خودکار نمایش مهمان</translation>
+        <source>Auto-resize &Guest Display</source>
+        <translation>تغییراندازه &خودکار نمایش مهمان</translation>
     </message>
     <message>
-      <source>Enable R&emote Display</source>
-      <translation>&فعالسازی نمایش ریموت</translation>
+        <source>Enable R&emote Display</source>
+        <translation type="obsolete">&فعالسازی نمایش ریموت</translation>
     </message>
     <message>
-      <source>&Settings...</source>
-      <translation>تنظی&مات...</translation>
+        <source>&Settings...</source>
+        <translation>تنظی&مات...</translation>
     </message>
     <message>
-      <source>Manage the virtual machine settings</source>
-      <translation>مدیریت تنظیمات ماشین مجازی</translation>
+        <source>Manage the virtual machine settings</source>
+        <translation type="obsolete">مدیریت تنظیمات ماشین مجازی</translation>
     </message>
     <message>
-      <source>Session I&nformation...</source>
-      <translation>اطلاعات &جلسه...</translation>
+        <source>Session I&nformation...</source>
+        <translation>اطلاعات &جلسه...</translation>
     </message>
     <message>
-      <source>&Contents...</source>
-      <translation>محتو&یات...</translation>
+        <source>&Contents...</source>
+        <translation>محتو&یات...</translation>
     </message>
     <message>
-      <source>Show help contents</source>
-      <translation>محتویات راهنما را نشان میدهد</translation>
+        <source>Show help contents</source>
+        <translation>محتویات راهنما را نشان میدهد</translation>
     </message>
     <message>
-      <source>Open the browser and go to the VirtualBox product web site</source>
-      <translation>بازکردن مرورگر و رفتن به وبسایت محصول ویرچوال باکس</translation>
+        <source>Open the browser and go to the VirtualBox product web site</source>
+        <translation>بازکردن مرورگر و رفتن به وبسایت محصول ویرچوال باکس</translation>
     </message>
     <message>
-      <source>Go back to showing all suppressed warnings and messages</source>
-      <translation>برگشت به همه هشدارها و پیام های موقوف شده</translation>
+        <source>Go back to showing all suppressed warnings and messages</source>
+        <translation>برگشت به همه هشدارها و پیام های موقوف شده</translation>
     </message>
     <message>
-      <source>&Network Operations Manager...</source>
-      <translation>&مدیر عملکردهای شبکه...</translation>
+        <source>&Network Operations Manager...</source>
+        <translation>&مدیر عملکردهای شبکه...</translation>
     </message>
     <message>
-      <source>Show Network Operations Manager</source>
-      <translation>مدیر عملکردهای شبکه را نشان میدهد</translation>
+        <source>Show Network Operations Manager</source>
+        <translation type="obsolete">مدیر عملکردهای شبکه را نشان میدهد</translation>
     </message>
     <message>
-      <source>Check for a new VirtualBox version</source>
-      <translation>برسی نسخه جدید ویرچوال باکس</translation>
+        <source>Check for a new VirtualBox version</source>
+        <translation>برسی نسخه جدید ویرچوال باکس</translation>
     </message>
     <message>
-      <source>&About VirtualBox...</source>
-      <translation>درباره &برنامه...</translation>
+        <source>&About VirtualBox...</source>
+        <translation>درباره &برنامه...</translation>
     </message>
     <message>
-      <source>Show a window with product information</source>
-      <translation>پنجره اطلاعات محصول را نشان میدهد</translation>
+        <source>Show a window with product information</source>
+        <translation type="obsolete">پنجره اطلاعات محصول را نشان میدهد</translation>
     </message>
     <message>
-      <source>Take Sn&apshot...</source>
-      <translation>ایجاد ضب&ط وضعیت...</translation>
+        <source>Take Sn&apshot...</source>
+        <translation>ایجاد ضب&ط وضعیت...</translation>
     </message>
     <message>
-      <source>Take Screensh&ot...</source>
-      <translation>ایجاد &اِسکرین شات...</translation>
+        <source>Take Screensh&ot...</source>
+        <translation>ایجاد &اِسکرین شات...</translation>
     </message>
     <message>
-      <source>Take a screenshot of the virtual machine</source>
-      <translation>ایجاد یک ضبط وضعیت ماشین مجازی</translation>
+        <source>Take a screenshot of the virtual machine</source>
+        <translation type="obsolete">ایجاد یک ضبط وضعیت ماشین مجازی</translation>
     </message>
     <message>
-      <source>Ins&ert Ctrl-Alt-Backspace</source>
-      <translation>&قراردادن Ctrl-Alt-Backspace</translation>
+        <source>Ins&ert Ctrl-Alt-Backspace</source>
+        <translation type="obsolete">&قراردادن Ctrl-Alt-Backspace</translation>
     </message>
     <message>
-      <source>&File</source>
-      <comment>Mac OS X version</comment>
-      <translation>&فایل</translation>
+        <source>&File</source>
+        <comment>Mac OS X version</comment>
+        <translation>&فایل</translation>
     </message>
     <message>
-      <source>&File</source>
-      <comment>Non Mac OS X version</comment>
-      <translation>&فایل</translation>
+        <source>&File</source>
+        <comment>Non Mac OS X version</comment>
+        <translation>&فایل</translation>
     </message>
     <message>
-      <source>&Virtual Media Manager...</source>
-      <translation>مدیر رسانه مجاز&ی...</translation>
+        <source>&Virtual Media Manager...</source>
+        <translation>مدیر رسانه مجاز&ی...</translation>
     </message>
     <message>
-      <source>Display the Virtual Media Manager window</source>
-      <translation>نمایش پنجره مدیر رسانه مجازی</translation>
+        <source>Display the Virtual Media Manager window</source>
+        <translation>نمایش پنجره مدیر رسانه مجازی</translation>
     </message>
     <message>
-      <source>&Import Appliance...</source>
-      <translation>واردکردن& وسیله...</translation>
+        <source>&Import Appliance...</source>
+        <translation>واردکردن& وسیله...</translation>
     </message>
     <message>
-      <source>Import an appliance into VirtualBox</source>
-      <translation>واردکردن یک وسیله داخل ویرچوال باکس</translation>
+        <source>Import an appliance into VirtualBox</source>
+        <translation>واردکردن یک وسیله داخل ویرچوال باکس</translation>
     </message>
     <message>
-      <source>&Export Appliance...</source>
-      <translation>&خروجیگیری وسیله...</translation>
+        <source>&Export Appliance...</source>
+        <translation>&خروجیگیری وسیله...</translation>
     </message>
     <message>
-      <source>Export one or more VirtualBox virtual machines as an appliance</source>
-      <translation>خروجیگیری یک یا تعداد بیشتری ماشین مجازی ویرچوال باکس بعنوان وسیله</translation>
+        <source>Export one or more VirtualBox virtual machines as an appliance</source>
+        <translation>خروجیگیری یک یا تعداد بیشتری ماشین مجازی ویرچوال باکس بعنوان وسیله</translation>
     </message>
     <message>
-      <source>&Preferences...</source>
-      <comment>global settings</comment>
-      <translation>اولو&یت ها...</translation>
+        <source>&Preferences...</source>
+        <comment>global settings</comment>
+        <translation type="obsolete">اولو&یت ها...</translation>
     </message>
     <message>
-      <source>Display the global settings window</source>
-      <translation>پنجره تنظیمات سراسری را نشان میدهد</translation>
+        <source>Display the global settings window</source>
+        <translation type="obsolete">پنجره تنظیمات سراسری را نشان میدهد</translation>
     </message>
     <message>
-      <source>E&xit</source>
-      <translation>خر&وج</translation>
+        <source>E&xit</source>
+        <translation>خر&وج</translation>
     </message>
     <message>
-      <source>Close application</source>
-      <translation>بستن برنامه</translation>
+        <source>Close application</source>
+        <translation>بستن برنامه</translation>
     </message>
     <message>
-      <source>&Group</source>
-      <translation>&گروه</translation>
+        <source>&Group</source>
+        <translation>&گروه</translation>
     </message>
     <message>
-      <source>Create a new virtual machine</source>
-      <translation>ایجاد یک ماشین مجازی جدید</translation>
+        <source>Create a new virtual machine</source>
+        <translation type="obsolete">ایجاد یک ماشین مجازی جدید</translation>
     </message>
     <message>
-      <source>Add an existing virtual machine</source>
-      <translation>افزودن یک ماشین موجود</translation>
+        <source>Add an existing virtual machine</source>
+        <translation type="obsolete">افزودن یک ماشین موجود</translation>
     </message>
     <message>
-      <source>Rename the selected virtual machine group</source>
-      <translation>ماشین مجازی انتخاب شده را تغییرنام میدهد</translation>
+        <source>Rename the selected virtual machine group</source>
+        <translation type="obsolete">ماشین مجازی انتخاب شده را تغییرنام میدهد</translation>
     </message>
     <message>
-      <source>S&tart</source>
-      <translation>ش&روع</translation>
+        <source>S&tart</source>
+        <translation>ش&روع</translation>
     </message>
     <message>
-      <source>S&how</source>
-      <translation>نما&یش</translation>
+        <source>S&how</source>
+        <translation>نما&یش</translation>
     </message>
     <message>
-      <source>Re&fresh...</source>
-      <translation>تازه& کردن...</translation>
+        <source>Re&fresh...</source>
+        <translation type="obsolete">تازه& کردن...</translation>
     </message>
     <message>
-      <source>Refresh the accessibility state of the selected virtual machine</source>
-      <translation>تازه کردن وضعیت دسترسی پذیری ماشین مجازی انتخاب شده</translation>
+        <source>Refresh the accessibility state of the selected virtual machine</source>
+        <translation type="obsolete">تازه کردن وضعیت دسترسی پذیری ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Show in Finder</source>
-      <translation>نمایش در یابنده</translation>
+        <source>Show in Finder</source>
+        <translation type="obsolete">نمایش در یابنده</translation>
     </message>
     <message>
-      <source>Show in Explorer</source>
-      <translation>نمایش در اکسپلورر</translation>
+        <source>Show in Explorer</source>
+        <translation type="obsolete">نمایش در اکسپلورر</translation>
     </message>
     <message>
-      <source>Show in File Manager</source>
-      <translation>نمایش در مدیرفایل</translation>
+        <source>Show in File Manager</source>
+        <translation type="obsolete">نمایش در مدیرفایل</translation>
     </message>
     <message>
-      <source>Show the VirtualBox Machine Definition file in the File Manager</source>
-      <translation>ماشین ویرچوال باکس را در مدیرفایل نشان میدهد</translation>
+        <source>Show the VirtualBox Machine Definition file in the File Manager</source>
+        <translation type="obsolete">ماشین ویرچوال باکس را در مدیرفایل نشان میدهد</translation>
     </message>
     <message>
-      <source>&New...</source>
-      <translation>جد&ید...</translation>
+        <source>&New...</source>
+        <translation>جد&ید...</translation>
     </message>
     <message>
-      <source>&Add...</source>
-      <translation>&افزودن...</translation>
+        <source>&Add...</source>
+        <translation>&افزودن...</translation>
     </message>
     <message>
-      <source>Add a new group based on the items selected</source>
-      <translation>افزودن یک گروه جدید مبتنی بر آیتم انتخاب شده</translation>
+        <source>Add a new group based on the items selected</source>
+        <translation type="obsolete">افزودن یک گروه جدید مبتنی بر آیتم انتخاب شده</translation>
     </message>
     <message>
-      <source>Cl&one...</source>
-      <translation>شبیه &سازی...</translation>
+        <source>Cl&one...</source>
+        <translation>شبیه &سازی...</translation>
     </message>
     <message>
-      <source>Clone the selected virtual machine</source>
-      <translation>شبیه سازی ماشین مجازی انتخاب شده</translation>
+        <source>Clone the selected virtual machine</source>
+        <translation type="obsolete">شبیه سازی ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>&Remove...</source>
-      <translation>ح&ذف...</translation>
+        <source>&Remove...</source>
+        <translation>ح&ذف...</translation>
     </message>
     <message>
-      <source>Discard</source>
-      <translation>لغو کن</translation>
+        <source>Discard</source>
+        <translation>لغو کن</translation>
     </message>
     <message>
-      <source>D&iscard saved state...</source>
-      <translation>لغو وضعیت ذخیره& شده...</translation>
+        <source>D&iscard saved state...</source>
+        <translation type="obsolete">لغو وضعیت ذخیره& شده...</translation>
     </message>
     <message>
-      <source>&Close</source>
-      <translation>&بستن</translation>
+        <source>&Close</source>
+        <translation>&بستن</translation>
     </message>
     <message>
-      <source>Show &Log...</source>
-      <translation>نمایش و&قایع...</translation>
+        <source>Show &Log...</source>
+        <translation>نمایش و&قایع...</translation>
     </message>
     <message>
-      <source>&VirtualBox Web Site...</source>
-      <translation>وبسایت &برنامه...</translation>
+        <source>&VirtualBox Web Site...</source>
+        <translation>وبسایت &برنامه...</translation>
     </message>
     <message>
-      <source>&Reset All Warnings</source>
-      <translation>ریست &هشدارها</translation>
+        <source>&Reset All Warnings</source>
+        <translation>ریست &هشدارها</translation>
     </message>
     <message>
-      <source>C&heck for Updates...</source>
-      <translation>بررسی برای &بروزرسانی...</translation>
+        <source>C&heck for Updates...</source>
+        <translation>بررسی برای &بروزرسانی...</translation>
     </message>
     <message>
-      <source>Rena&me Group...</source>
-      <translation>تغییر&نام گروه...</translation>
+        <source>Rena&me Group...</source>
+        <translation>تغییر&نام گروه...</translation>
     </message>
     <message>
-      <source>Sort the items of the selected virtual machine group alphabetically</source>
-      <translation>مرتبسازی الفبایی آیتم های گروه ماشین مجازی انتخاب شده</translation>
+        <source>Sort the items of the selected virtual machine group alphabetically</source>
+        <translation type="obsolete">مرتبسازی الفبایی آیتم های گروه ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Remove the selected virtual machines</source>
-      <translation>ماشین مجازی انتخاب شده را حذف میکند</translation>
+        <source>Remove the selected virtual machines</source>
+        <translation type="obsolete">ماشین مجازی انتخاب شده را حذف میکند</translation>
     </message>
     <message>
-      <source>Start the selected virtual machines</source>
-      <translation>شروع ماشین مجازی انتخاب شده</translation>
+        <source>Start the selected virtual machines</source>
+        <translation type="obsolete">شروع ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Switch to the windows of the selected virtual machines</source>
-      <translation>رفتن به پنجره انتخاب شده ماشین مجازی</translation>
+        <source>Switch to the windows of the selected virtual machines</source>
+        <translation type="obsolete">رفتن به پنجره انتخاب شده ماشین مجازی</translation>
     </message>
     <message>
-      <source>Suspend the execution of the selected virtual machines</source>
-      <translation>تعلیق اِجرای ماشین مجازی انتخاب شده</translation>
+        <source>Suspend the execution of the selected virtual machines</source>
+        <translation type="obsolete">تعلیق اِجرای ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Reset the selected virtual machines</source>
-      <translation>ماشین مجازی انتخاب شده را ریست میکند</translation>
+        <source>Reset the selected virtual machines</source>
+        <translation type="obsolete">ماشین مجازی انتخاب شده را ریست میکند</translation>
     </message>
     <message>
-      <source>Discard the saved state of the selected virtual machines</source>
-      <translation>لغو وضعیت ذخیره شده ماشین مجازی انتخاب شده</translation>
+        <source>Discard the saved state of the selected virtual machines</source>
+        <translation type="obsolete">لغو وضعیت ذخیره شده ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Show the VirtualBox Machine Definition file in Finder</source>
-      <translation>ماشین ویرچوال باکس را در یابنده نشان میدهد</translation>
+        <source>Show the VirtualBox Machine Definition file in Finder</source>
+        <translation type="obsolete">ماشین ویرچوال باکس را در یابنده نشان میدهد</translation>
     </message>
     <message>
-      <source>Show the VirtualBox Machine Definition file in Explorer</source>
-      <translation>ماشین ویرچوال باکس را در اکسپلورر نشان میدهد</translation>
+        <source>Show the VirtualBox Machine Definition file in Explorer</source>
+        <translation type="obsolete">ماشین ویرچوال باکس را در اکسپلورر نشان میدهد</translation>
     </message>
     <message>
-      <source>Create Alias on Desktop</source>
-      <translation>ایجاد میانبر روی دسکتاپ</translation>
+        <source>Create Alias on Desktop</source>
+        <translation type="obsolete">ایجاد میانبر روی دسکتاپ</translation>
     </message>
     <message>
-      <source>Creates an alias file to the VirtualBox Machine Definition file on your desktop</source>
-      <translation>ایجاد یک فایل نماد از ماشین مجازی در دسکتاپ شما</translation>
+        <source>Creates an alias file to the VirtualBox Machine Definition file on your desktop</source>
+        <translation type="obsolete">ایجاد یک فایل نماد از ماشین مجازی در دسکتاپ شما</translation>
     </message>
     <message>
-      <source>Create Shortcut on Desktop</source>
-      <translation>ایجاد میانبر در دسکتاپ</translation>
+        <source>Create Shortcut on Desktop</source>
+        <translation type="obsolete">ایجاد میانبر در دسکتاپ</translation>
     </message>
     <message>
-      <source>Creates an shortcut file to the VirtualBox Machine Definition file on your desktop</source>
-      <translation>ایجاد یک فایل میانبر از ماشین مجازی در دسکتاپ شما</translation>
+        <source>Creates an shortcut file to the VirtualBox Machine Definition file on your desktop</source>
+        <translation type="obsolete">ایجاد یک فایل میانبر از ماشین مجازی در دسکتاپ شما</translation>
     </message>
     <message>
-      <source>Save State</source>
-      <translation>ذخیره وضعیت</translation>
+        <source>Save State</source>
+        <translation type="obsolete">ذخیره وضعیت</translation>
     </message>
     <message>
-      <source>Save the machine state of the selected virtual machines</source>
-      <translation>ذخیره وضعیت ماشین،ماشین مجازی انتخاب شده</translation>
+        <source>Save the machine state of the selected virtual machines</source>
+        <translation type="obsolete">ذخیره وضعیت ماشین،ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Send the ACPI Power Button press event to the selected virtual machines</source>
-      <translation>اِرسال رویداد فشار دکمه برق اِی سی پی آی به ماشین مجازی انتخاب شده</translation>
+        <source>Send the ACPI Power Button press event to the selected virtual machines</source>
+        <translation type="obsolete">اِرسال رویداد فشار دکمه برق اِی سی پی آی به ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Po&wer Off</source>
-      <translation>قطع &برق</translation>
+        <source>Po&wer Off</source>
+        <translation>قطع &برق</translation>
     </message>
     <message>
-      <source>Power off the selected virtual machines</source>
-      <translation>برق ماشین مجازی انتخاب شده را قطع میکند</translation>
+        <source>Power off the selected virtual machines</source>
+        <translation type="obsolete">برق ماشین مجازی انتخاب شده را قطع میکند</translation>
     </message>
     <message>
-      <source>Show the log files of the selected virtual machine</source>
-      <translation>نمایش فایل وقایع ماشین مجازی انتخاب شده</translation>
+        <source>Show the log files of the selected virtual machine</source>
+        <translation type="obsolete">نمایش فایل وقایع ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>&New Machine...</source>
-      <translation>ماشین &جدید...</translation>
+        <source>&New Machine...</source>
+        <translation>ماشین &جدید...</translation>
     </message>
     <message>
-      <source>&Add Machine...</source>
-      <translation>&افزودن ماشین...</translation>
+        <source>&Add Machine...</source>
+        <translation>&افزودن ماشین...</translation>
     </message>
     <message>
-      <source>&Ungroup...</source>
-      <translation>&خروج از گروه...</translation>
+        <source>&Ungroup...</source>
+        <translation type="obsolete">&خروج از گروه...</translation>
     </message>
     <message>
-      <source>Ungroup items of the selected virtual machine group</source>
-      <translation>خروج از گروه آیتم های گروه ماشین مجازی انتخاب شده</translation>
+        <source>Ungroup items of the selected virtual machine group</source>
+        <translation type="obsolete">خروج از گروه آیتم های گروه ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Sort</source>
-      <translation>مرتبسازی</translation>
+        <source>Sort</source>
+        <translation type="obsolete">مرتبسازی</translation>
     </message>
     <message>
-      <source>Gro&up</source>
-      <translation>گرو&ه</translation>
+        <source>Gro&up</source>
+        <translation>گرو&ه</translation>
     </message>
     <message>
-      <source>Sort the group of the first selected machine alphabetically</source>
-      <translation>مرتبسازی الفبایی گروه اولین ماشین انتخاب شده</translation>
+        <source>Sort the group of the first selected machine alphabetically</source>
+        <translation type="obsolete">مرتبسازی الفبایی گروه اولین ماشین انتخاب شده</translation>
     </message>
     <message>
-      <source>Shared &Clipboard</source>
-      <translation>کلیپ برد مشتر&ک</translation>
+        <source>Shared &Clipboard</source>
+        <translation>کلیپ برد مشتر&ک</translation>
     </message>
     <message>
-      <source>Drag'n'Drop</source>
-      <translation>کشیدن 'و' رهاکردن</translation>
+        <source>Drag'n'Drop</source>
+        <translation type="obsolete">کشیدن 'و' رهاکردن</translation>
     </message>
     <message>
-      <source>Save the machine state of the virtual machine</source>
-      <translation>ذخیره وضعیت ماشین ِ،ماشین مجازی</translation>
+        <source>Save the machine state of the virtual machine</source>
+        <translation type="obsolete">ذخیره وضعیت ماشین ِ،ماشین مجازی</translation>
     </message>
     <message>
-      <source>Power off the virtual machine</source>
-      <translation>قطع برق ماشین مجازی</translation>
+        <source>Power off the virtual machine</source>
+        <translation>قطع برق ماشین مجازی</translation>
     </message>
     <message>
-      <source>&Network Settings...</source>
-      <translation>&تنظیمات شبکه...</translation>
+        <source>&Network Settings...</source>
+        <translation>&تنظیمات شبکه...</translation>
     </message>
     <message>
-      <source>&Shared Folders Settings...</source>
-      <translation>تنظیمات پوشه های &اشتراکی...</translation>
+        <source>&Shared Folders Settings...</source>
+        <translation>تنظیمات پوشه های &اشتراکی...</translation>
     </message>
     <message>
-      <source>R&emote Display</source>
-      <translation>&نمایش ریموت</translation>
+        <source>R&emote Display</source>
+        <translation>&نمایش ریموت</translation>
     </message>
     <message>
-      <source>Toggle remote desktop (RDP) connections to this machine</source>
-      <translation>ضامن ارتباطات ریموت دسکتاپ (RDP) به این ماشین</translation>
+        <source>Toggle remote desktop (RDP) connections to this machine</source>
+        <translation type="obsolete">ضامن ارتباطات ریموت دسکتاپ (RDP) به این ماشین</translation>
     </message>
     <message>
-      <source>&Video Capture</source>
-      <translation>&ضبط ویدئو</translation>
+        <source>&Video Capture</source>
+        <translation>&ضبط ویدئو</translation>
     </message>
     <message>
-      <source>Toggle video capture</source>
-      <translation>ضامن ضبط ویدیو</translation>
+        <source>Toggle video capture</source>
+        <translation type="obsolete">ضامن ضبط ویدیو</translation>
     </message>
     <message>
-      <source>&Video Capture Settings...</source>
-      <translation>&تنظیمات ضبط ویدئو...</translation>
+        <source>&Video Capture Settings...</source>
+        <translation>&تنظیمات ضبط ویدئو...</translation>
     </message>
     <message>
-      <source>Configure video capture settings</source>
-      <translation>پیکربندی تنظیمات ضبط ویدئو</translation>
+        <source>Configure video capture settings</source>
+        <translation type="obsolete">پیکربندی تنظیمات ضبط ویدئو</translation>
     </message>
     <message>
-      <source>&Logging...</source>
-      <comment>debug action</comment>
-      <translation>&وقایع نگاری...</translation>
+        <source>&Logging...</source>
+        <comment>debug action</comment>
+        <translation type="obsolete">&وقایع نگاری...</translation>
     </message>
     <message>
-      <source>Popup Menu</source>
-      <translation>منوی پرشی</translation>
+        <source>Popup Menu</source>
+        <translation>منوی پرشی</translation>
     </message>
     <message>
-      <source>&Insert Guest Additions CD image...</source>
-      <comment>new</comment>
-      <translation>نصب افزون&ه مهمان...</translation>
+        <source>&Insert Guest Additions CD image...</source>
+        <comment>new</comment>
+        <translation type="obsolete">نصب افزون&ه مهمان...</translation>
     </message>
     <message>
-      <source>Insert the Guest Additions disk file into the virtual drive</source>
-      <comment>new</comment>
-      <translation>بارگیری ایمیج نصب افزونه مهمان</translation>
+        <source>Insert the Guest Additions disk file into the virtual drive</source>
+        <comment>new</comment>
+        <translation type="obsolete">بارگیری ایمیج نصب افزونه مهمان</translation>
     </message>
     <message>
-      <source>&Webcams</source>
-      <translation>&وب کم ها</translation>
+        <source>&Webcams</source>
+        <translation>&وب کم ها</translation>
     </message>
     <message>
-      <source>Network</source>
-      <translation>شبکه</translation>
+        <source>Network</source>
+        <translation type="obsolete">شبکه</translation>
     </message>
     <message>
-      <source>&VirtualBox</source>
-      <translation>ویرچوال باکس&</translation>
+        <source>&VirtualBox</source>
+        <translation>ویرچوال باکس&</translation>
     </message>
     <message>
-      <source>&File</source>
-      <translation>&فایل</translation>
+        <source>&File</source>
+        <translation>&فایل</translation>
     </message>
     <message>
-      <source>&Window</source>
-      <translation>&پنجره</translation>
+        <source>&Window</source>
+        <translation>&پنجره</translation>
     </message>
     <message>
-      <source>&Minimize</source>
-      <translation>کمینه&</translation>
+        <source>&Minimize</source>
+        <translation>کمینه&</translation>
     </message>
     <message>
-      <source>Minimize active window</source>
-      <translation>کمینه کردن پنجره فعال</translation>
+        <source>Minimize active window</source>
+        <translation>کمینه کردن پنجره فعال</translation>
     </message>
     <message>
-      <source>Display the Network Operations Manager window</source>
-      <translation>پنجره مدیریت عملکرد شبکه را نشان می دهد</translation>
+        <source>Display the Network Operations Manager window</source>
+        <translation>پنجره مدیریت عملکرد شبکه را نشان می دهد</translation>
     </message>
     <message>
-      <source>Display a window with product information</source>
-      <translation>نمایش پنجره اطلاعات محصول</translation>
+        <source>Display a window with product information</source>
+        <translation>نمایش پنجره اطلاعات محصول</translation>
     </message>
     <message>
-      <source>&Preferences...</source>
-      <comment>global preferences window</comment>
-      <translation>اولو&یت ها...</translation>
+        <source>&Preferences...</source>
+        <comment>global preferences window</comment>
+        <translation>اولو&یت ها...</translation>
     </message>
     <message>
-      <source>Display the global preferences window</source>
-      <translation>پنجره تنظیمات سراسری را نشان میدهد</translation>
+        <source>Display the global preferences window</source>
+        <translation>پنجره تنظیمات سراسری را نشان میدهد</translation>
     </message>
     <message>
-      <source>Display the virtual machine settings window</source>
-      <translation>پنجره تنظیمات ماشین مجازی را نشان میدهد</translation>
+        <source>Display the virtual machine settings window</source>
+        <translation>پنجره تنظیمات ماشین مجازی را نشان میدهد</translation>
     </message>
     <message>
-      <source>Display the virtual machine session information window</source>
-      <translation>پنجره اطلاعات جلسه ماشین مجازی را نشان میدهد</translation>
+        <source>Display the virtual machine session information window</source>
+        <translation>پنجره اطلاعات جلسه ماشین مجازی را نشان میدهد</translation>
     </message>
     <message>
-      <source>&Save State</source>
-      <translation>&ذخیره وضعیت</translation>
+        <source>&Save State</source>
+        <translation>&ذخیره وضعیت</translation>
     </message>
     <message>
-      <source>Save the state of the virtual machine</source>
-      <translation>ذخیره وضعیت ماشین مجازی انتخاب شده</translation>
+        <source>Save the state of the virtual machine</source>
+        <translation>ذخیره وضعیت ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Send the ACPI Shutdown signal to the virtual machine</source>
-      <translation>اِرسال سیگنال شات دان اِی سی پی آی به ماشین مجازی</translation>
+        <source>Send the ACPI Shutdown signal to the virtual machine</source>
+        <translation>اِرسال سیگنال شات دان اِی سی پی آی به ماشین مجازی</translation>
     </message>
     <message>
-      <source>&Full-screen Mode</source>
-      <translation>حالت تمام صفحه&</translation>
+        <source>&Full-screen Mode</source>
+        <translation>حالت تمام صفحه&</translation>
     </message>
     <message>
-      <source>Switch between normal and full-screen mode</source>
-      <translation>تعویض بین حالت معمولی و تمام صفحه</translation>
+        <source>Switch between normal and full-screen mode</source>
+        <translation>تعویض بین حالت معمولی و تمام صفحه</translation>
     </message>
     <message>
-      <source>Seam&less Mode</source>
-      <translation>حالت یکپارچه&</translation>
+        <source>Seam&less Mode</source>
+        <translation>حالت یکپارچه&</translation>
     </message>
     <message>
-      <source>S&caled Mode</source>
-      <translation>حالت مقیاسی&</translation>
+        <source>S&caled Mode</source>
+        <translation>حالت مقیاسی&</translation>
     </message>
     <message>
-      <source>&Minimize Window</source>
-      <translation>&کمینه پنجره</translation>
+        <source>&Minimize Window</source>
+        <translation>&کمینه پنجره</translation>
     </message>
     <message>
-      <source>Automatically resize the guest display when the window is resized</source>
-      <translation>تغییر اندازه خودکار نمایشگر مهمان وقتیکه پنجره تغییر اندازه داده شد</translation>
+        <source>Automatically resize the guest display when the window is resized</source>
+        <translation>تغییر اندازه خودکار نمایشگر مهمان وقتیکه پنجره تغییر اندازه داده شد</translation>
     </message>
     <message>
-      <source>Take guest display screenshot</source>
-      <translation>گرفتن اِسکرین شات از نمایشگر مهمان</translation>
+        <source>Take guest display screenshot</source>
+        <translation>گرفتن اِسکرین شات از نمایشگر مهمان</translation>
     </message>
     <message>
-      <source>Display virtual machine settings window to configure video capture</source>
-      <translation>پنجره تنظیمات ماشین مجازی را برای پیکربندی ضبط ویدیو نشان میدهد</translation>
+        <source>Display virtual machine settings window to configure video capture</source>
+        <translation>پنجره تنظیمات ماشین مجازی را برای پیکربندی ضبط ویدیو نشان میدهد</translation>
     </message>
     <message>
-      <source>Enable guest display video capture</source>
-      <translation>فعالسازی ضبط ویدیو نمایشگر مهمان</translation>
+        <source>Enable guest display video capture</source>
+        <translation>فعالسازی ضبط ویدیو نمایشگر مهمان</translation>
     </message>
     <message>
-      <source>Allow remote desktop (RDP) connections to this machine</source>
-      <translation>اجازه ارتباطات ریموت دسکتاپ (RDP) به این ماشین</translation>
+        <source>Allow remote desktop (RDP) connections to this machine</source>
+        <translation>اجازه ارتباطات ریموت دسکتاپ (RDP) به این ماشین</translation>
     </message>
     <message>
-      <source>&Menu Bar</source>
-      <translation>نوار منو&</translation>
+        <source>&Menu Bar</source>
+        <translation>نوار منو&</translation>
     </message>
     <message>
-      <source>&Menu Bar Settings...</source>
-      <translation>تنظیمات نوار منو&...</translation>
+        <source>&Menu Bar Settings...</source>
+        <translation>تنظیمات نوار منو&...</translation>
     </message>
     <message>
-      <source>Display window to configure menu-bar</source>
-      <translation>پنجره ای برای پیکربندی نوار منو را نشان میدهد</translation>
+        <source>Display window to configure menu-bar</source>
+        <translation>پنجره ای برای پیکربندی نوار منو را نشان میدهد</translation>
     </message>
     <message>
-      <source>Show Menu &Bar</source>
-      <translation>نمایش& نوار منو</translation>
+        <source>Show Menu &Bar</source>
+        <translation>نمایش& نوار منو</translation>
     </message>
     <message>
-      <source>Enable menu-bar</source>
-      <translation>فعالسازی نوار-منو</translation>
+        <source>Enable menu-bar</source>
+        <translation>فعالسازی نوار-منو</translation>
     </message>
     <message>
-      <source>&Status Bar</source>
-      <translation>&نوار وضعیت</translation>
+        <source>&Status Bar</source>
+        <translation>&نوار وضعیت</translation>
     </message>
     <message>
-      <source>&Status Bar Settings...</source>
-      <translation>تنظیمات &نوار وضعیت...</translation>
+        <source>&Status Bar Settings...</source>
+        <translation>تنظیمات &نوار وضعیت...</translation>
     </message>
     <message>
-      <source>Display window to configure status-bar</source>
-      <translation>پنجره ای برای پیکربندی نوار وضعیت را نشان میدهد</translation>
+        <source>Display window to configure status-bar</source>
+        <translation>پنجره ای برای پیکربندی نوار وضعیت را نشان میدهد</translation>
     </message>
     <message>
-      <source>Show Status &Bar</source>
-      <translation>نمایش& نوار وضعیت</translation>
+        <source>Show Status &Bar</source>
+        <translation>نمایش& نوار وضعیت</translation>
     </message>
     <message>
-      <source>Enable status-bar</source>
-      <translation>فعالسازی نوار-وضعیت</translation>
+        <source>Enable status-bar</source>
+        <translation>فعالسازی نوار-وضعیت</translation>
     </message>
     <message>
-      <source>S&cale Factor</source>
-      <translation>ضریب مقیاس&</translation>
+        <source>S&cale Factor</source>
+        <translation>ضریب مقیاس&</translation>
     </message>
     <message>
-      <source>&Input</source>
-      <translation>&ورودی</translation>
+        <source>&Input</source>
+        <translation>&ورودی</translation>
     </message>
     <message>
-      <source>&Keyboard</source>
-      <translation>&صفحه کلید</translation>
+        <source>&Keyboard</source>
+        <translation>&صفحه کلید</translation>
     </message>
     <message>
-      <source>&Keyboard Settings...</source>
-      <translation>تنظیمات &صفحه کلید</translation>
+        <source>&Keyboard Settings...</source>
+        <translation>تنظیمات &صفحه کلید</translation>
     </message>
     <message>
-      <source>Display global preferences window to configure keyboard shortcuts</source>
-      <translation>پنجره تنظیمات سراسری برای پیکربندی میانبرهای صفحه کلید را نشان میدهد</translation>
+        <source>Display global preferences window to configure keyboard shortcuts</source>
+        <translation>پنجره تنظیمات سراسری برای پیکربندی میانبرهای صفحه کلید را نشان میدهد</translation>
     </message>
     <message>
-      <source>&Insert %1</source>
-      <comment>that means send the %1 key sequence to the virtual machine</comment>
-      <translation>قرار دادن& %1</translation>
+        <source>&Insert %1</source>
+        <comment>that means send the %1 key sequence to the virtual machine</comment>
+        <translation>قرار دادن& %1</translation>
     </message>
     <message>
-      <source>Send the %1 sequence to the virtual machine</source>
-      <translation>ارسال %1 توالی به ماشین مجازی</translation>
+        <source>Send the %1 sequence to the virtual machine</source>
+        <translation>ارسال %1 توالی به ماشین مجازی</translation>
     </message>
     <message>
-      <source>&Mouse</source>
-      <translation>ماوس&</translation>
+        <source>&Mouse</source>
+        <translation>ماوس&</translation>
     </message>
     <message>
-      <source>&Mouse Integration</source>
-      <translation>یکپارچه سازی ماوس&</translation>
+        <source>&Mouse Integration</source>
+        <translation>یکپارچه سازی ماوس&</translation>
     </message>
     <message>
-      <source>Enable host mouse pointer integration</source>
-      <translation>فعالسازی یکپارچه سازی ماوس میزبان</translation>
+        <source>Enable host mouse pointer integration</source>
+        <translation>فعالسازی یکپارچه سازی ماوس میزبان</translation>
     </message>
     <message>
-      <source>&Hard Disks</source>
-      <translation>دیسک سخت&</translation>
+        <source>&Hard Disks</source>
+        <translation>دیسک سخت&</translation>
     </message>
     <message>
-      <source>&Hard Disk Settings...</source>
-      <translation>تنظیمات دیسک سخت&</translation>
+        <source>&Hard Disk Settings...</source>
+        <translation>تنظیمات دیسک سخت&</translation>
     </message>
     <message>
-      <source>Display virtual machine settings window to configure hard disks</source>
-      <translation>پنجره تنظیمات ماشین مجازی را برای پیکربندی دیسک سخت نشان میدهد</translation>
+        <source>Display virtual machine settings window to configure hard disks</source>
+        <translation>پنجره تنظیمات ماشین مجازی را برای پیکربندی دیسک سخت نشان میدهد</translation>
     </message>
     <message>
-      <source>&Optical Drives</source>
-      <translation>درایو نوری&</translation>
+        <source>&Optical Drives</source>
+        <translation>درایو نوری&</translation>
     </message>
     <message>
-      <source>&Floppy Drives</source>
-      <translation>فلاپی درایو&</translation>
+        <source>&Floppy Drives</source>
+        <translation>فلاپی درایو&</translation>
     </message>
     <message>
-      <source>&Network</source>
-      <translation>شبکه&</translation>
+        <source>&Network</source>
+        <translation>شبکه&</translation>
     </message>
     <message>
-      <source>Display virtual machine settings window to configure network adapters</source>
-      <translation>پنجره تنظیمات ماشین مجازی برای پیکربندی آداپتور شبکه را نشان میدهد</translation>
+        <source>Display virtual machine settings window to configure network adapters</source>
+        <translation>پنجره تنظیمات ماشین مجازی برای پیکربندی آداپتور شبکه را نشان میدهد</translation>
     </message>
     <message>
-      <source>&USB</source>
-      <translation>&یو اِس بی</translation>
+        <source>&USB</source>
+        <translation>&یو اِس بی</translation>
     </message>
     <message>
-      <source>&USB Settings...</source>
-      <translation>تنظیمات یو اِس بی&</translation>
+        <source>&USB Settings...</source>
+        <translation>تنظیمات یو اِس بی&</translation>
     </message>
     <message>
-      <source>Display virtual machine settings window to configure USB devices</source>
-      <translation>پنجره تنظیمات ماشین مجازی را برای پیکربندی دستگاه یو اِس بی نشان میدهد</translation>
+        <source>Display virtual machine settings window to configure USB devices</source>
+        <translation>پنجره تنظیمات ماشین مجازی را برای پیکربندی دستگاه یو اِس بی نشان میدهد</translation>
     </message>
     <message>
-      <source>&Drag and Drop</source>
-      <translation>&مشیدن و رها کردن</translation>
+        <source>&Drag and Drop</source>
+        <translation>&مشیدن و رها کردن</translation>
     </message>
     <message>
-      <source>&Shared Folders</source>
-      <translation>پوشه ه&ای اشتراکی</translation>
+        <source>&Shared Folders</source>
+        <translation>پوشه ه&ای اشتراکی</translation>
     </message>
     <message>
-      <source>Display virtual machine settings window to configure shared folders</source>
-      <translation>پنجره تنظیمات ماشین مجازی را برای پیکربندی پوشه اشتراکی نشان میدهد</translation>
+        <source>Display virtual machine settings window to configure shared folders</source>
+        <translation>پنجره تنظیمات ماشین مجازی را برای پیکربندی پوشه اشتراکی نشان میدهد</translation>
     </message>
     <message>
-      <source>Insert the Guest Additions disk file into the virtual optical drive</source>
-      <translation>فایل دیسک افزونه مهمان را داخل درایو نوری قرار دهید</translation>
+        <source>Insert the Guest Additions disk file into the virtual optical drive</source>
+        <translation>فایل دیسک افزونه مهمان را داخل درایو نوری قرار دهید</translation>
     </message>
     <message>
-      <source>&Logging</source>
-      <comment>debug action</comment>
-      <translation>&وقایع نگاری</translation>
+        <source>&Logging</source>
+        <comment>debug action</comment>
+        <translation>&وقایع نگاری</translation>
     </message>
     <message>
-      <source>Show &Log...</source>
-      <comment>debug action</comment>
-      <translation>نمایش و&قایع...</translation>
+        <source>Show &Log...</source>
+        <comment>debug action</comment>
+        <translation>نمایش و&قایع...</translation>
     </message>
     <message>
-      <source>%1%</source>
-      <comment>scale-factor</comment>
-      <translation>%1%</translation>
+        <source>%1%</source>
+        <comment>scale-factor</comment>
+        <translation>%1%</translation>
     </message>
     <message>
-      <source>Enable</source>
-      <comment>Virtual Screen</comment>
-      <translation>فعالسازی</translation>
+        <source>Enable</source>
+        <comment>Virtual Screen</comment>
+        <translation>فعالسازی</translation>
     </message>
     <message>
-      <source>Resize to %1x%2</source>
-      <comment>Virtual Screen</comment>
-      <translation>تغییر اندازه به %1*%2</translation>
+        <source>Resize to %1x%2</source>
+        <comment>Virtual Screen</comment>
+        <translation>تغییر اندازه به %1*%2</translation>
     </message>
     <message>
-      <source>Preview Monitor %1</source>
-      <translation>پیشنمایش مانیتور %1</translation>
+        <source>Preview Monitor %1</source>
+        <translation>پیشنمایش مانیتور %1</translation>
     </message>
     <message>
-      <source>&Connect Network Adapter</source>
-      <translation>&اتصال به آداپتور شبکه</translation>
+        <source>&Connect Network Adapter</source>
+        <translation>&اتصال به آداپتور شبکه</translation>
     </message>
     <message>
-      <source>Connect Network Adapter &%1</source>
-      <translation>اتصال به آداپتور شبکه &%1</translation>
+        <source>Connect Network Adapter &%1</source>
+        <translation>اتصال به آداپتور شبکه &%1</translation>
     </message>
     <message>
-      <source>No USB Devices Connected</source>
-      <translation>دستگاه یو اِس بی متصل نشده است</translation>
+        <source>No USB Devices Connected</source>
+        <translation>دستگاه یو اِس بی متصل نشده است</translation>
     </message>
     <message>
-      <source>No supported devices connected to the host PC</source>
-      <translation>دستگاه پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
+        <source>No supported devices connected to the host PC</source>
+        <translation>دستگاه پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
     </message>
     <message>
-      <source>No Webcams Connected</source>
-      <translation>وب کمی متصل نشده است</translation>
+        <source>No Webcams Connected</source>
+        <translation>وب کمی متصل نشده است</translation>
     </message>
     <message>
-      <source>No supported webcams connected to the host PC</source>
-      <translation>وب کم پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
+        <source>No supported webcams connected to the host PC</source>
+        <translation>وب کم پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
     </message>
     <message>
-      <source>E&xtra Data Manager...</source>
-      <translation>مدیریت داده اضافه&...</translation>
+        <source>E&xtra Data Manager...</source>
+        <translation>مدیریت داده اضافه&...</translation>
     </message>
     <message>
-      <source>Display the Extra Data Manager window</source>
-      <translation>پنجره مدیریت داده اضافه را نشان می دهد</translation>
+        <source>Display the Extra Data Manager window</source>
+        <translation>پنجره مدیریت داده اضافه را نشان می دهد</translation>
     </message>
     <message>
-      <source>Create new virtual machine</source>
-      <translation>ایجاد یک ماشین مجازی جدید</translation>
+        <source>Create new virtual machine</source>
+        <translation>ایجاد یک ماشین مجازی جدید</translation>
     </message>
     <message>
-      <source>Add existing virtual machine</source>
-      <translation>افزودن یک ماشین مجازی موجود</translation>
+        <source>Add existing virtual machine</source>
+        <translation>افزودن یک ماشین مجازی موجود</translation>
     </message>
     <message>
-      <source>Rename selected virtual machine group</source>
-      <translation>حذف گروه ماشین مجازی انتخاب شده</translation>
+        <source>Rename selected virtual machine group</source>
+        <translation>حذف گروه ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>&Ungroup</source>
-      <translation>&خروج از گروه</translation>
+        <source>&Ungroup</source>
+        <translation>&خروج از گروه</translation>
     </message>
     <message>
-      <source>Ungroup items of selected virtual machine group</source>
-      <translation>از گروه خارج کردن موارد گروه ماشین مجازی انتخاب شده</translation>
+        <source>Ungroup items of selected virtual machine group</source>
+        <translation>از گروه خارج کردن موارد گروه ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>&Sort</source>
-      <translation>&مرتبسازی</translation>
+        <source>&Sort</source>
+        <translation>&مرتبسازی</translation>
     </message>
     <message>
-      <source>Sort items of selected virtual machine group alphabetically</source>
-      <translation>مرتبسازی موارد گروه ماشین مجازی انتخاب شده بطور الفبایی</translation>
+        <source>Sort items of selected virtual machine group alphabetically</source>
+        <translation>مرتبسازی موارد گروه ماشین مجازی انتخاب شده بطور الفبایی</translation>
     </message>
     <message>
-      <source>Add new group based on selected virtual machines</source>
-      <translation>افزودن گروه مبتنی بر ماشین مجازی انتخاب شده</translation>
+        <source>Add new group based on selected virtual machines</source>
+        <translation>افزودن گروه مبتنی بر ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Clone selected virtual machine</source>
-      <translation>شبیه سازی ماشین مجازی انتخاب شده</translation>
+        <source>Clone selected virtual machine</source>
+        <translation>شبیه سازی ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Remove selected virtual machines</source>
-      <translation>حذف ماشین مجازی انتخاب شده</translation>
+        <source>Remove selected virtual machines</source>
+        <translation>حذف ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Start selected virtual machines</source>
-      <translation>شروه ماشین مجازی انتخاب شده</translation>
+        <source>Start selected virtual machines</source>
+        <translation>شروه ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Switch to the windows of selected virtual machines</source>
-      <translation>رفتن به پنجره انتخاب شده ماشین مجازی</translation>
+        <source>Switch to the windows of selected virtual machines</source>
+        <translation>رفتن به پنجره انتخاب شده ماشین مجازی</translation>
     </message>
     <message>
-      <source>&Normal Start</source>
-      <translation>شروع عادی&</translation>
+        <source>&Normal Start</source>
+        <translation>شروع عادی&</translation>
     </message>
     <message>
-      <source>&Headless Start</source>
-      <translation>شروع بی سر&</translation>
+        <source>&Headless Start</source>
+        <translation>شروع بی سر&</translation>
     </message>
     <message>
-      <source>Start selected virtual machines in the background</source>
-      <translation>شروع ماشین مجازی انتخاب شده در پس زمینه</translation>
+        <source>Start selected virtual machines in the background</source>
+        <translation>شروع ماشین مجازی انتخاب شده در پس زمینه</translation>
     </message>
     <message>
-      <source>&Detachable Start</source>
-      <translation>شروع قابل تفکیک&</translation>
+        <source>&Detachable Start</source>
+        <translation>شروع قابل تفکیک&</translation>
     </message>
     <message>
-      <source>Start selected virtual machines with option of continuing in background</source>
-      <translation>اِجرای ماشین مجازی با گزینه ادامه اِجرا در پس زمینه</translation>
+        <source>Start selected virtual machines with option of continuing in background</source>
+        <translation>اِجرای ماشین مجازی با گزینه ادامه اِجرا در پس زمینه</translation>
     </message>
     <message>
-      <source>Suspend execution of selected virtual machines</source>
-      <translation>تعلیق اِجرای ماشین مجازی انتخاب شده</translation>
+        <source>Suspend execution of selected virtual machines</source>
+        <translation>تعلیق اِجرای ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Reset selected virtual machines</source>
-      <translation>ریست ماشین مجازی انتخاب شده</translation>
+        <source>Reset selected virtual machines</source>
+        <translation>ریست ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>D&iscard Saved State...</source>
-      <translation>لغو وضعیت ذخیره& شده...</translation>
+        <source>D&iscard Saved State...</source>
+        <translation>لغو وضعیت ذخیره& شده...</translation>
     </message>
     <message>
-      <source>Discard saved state of selected virtual machines</source>
-      <translation>لغو وضعیت ذخیره شده ماشین مجازی انتخاب شده</translation>
+        <source>Discard saved state of selected virtual machines</source>
+        <translation>لغو وضعیت ذخیره شده ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Show log files of selected virtual machines</source>
-      <translation>فایل های وقایع ماشین مجازی انتخاب شده را نشان میدهد</translation>
+        <source>Show log files of selected virtual machines</source>
+        <translation>فایل های وقایع ماشین مجازی انتخاب شده را نشان میدهد</translation>
     </message>
     <message>
-      <source>Re&fresh</source>
-      <translation>تازه& کردن</translation>
+        <source>Re&fresh</source>
+        <translation>تازه& کردن</translation>
     </message>
     <message>
-      <source>Refresh accessibility state of selected virtual machines</source>
-      <translation>تازه سازی وضعیت دسترسی پذیری ماشین مجازی انتخاب شده</translation>
+        <source>Refresh accessibility state of selected virtual machines</source>
+        <translation>تازه سازی وضعیت دسترسی پذیری ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>S&how in Finder</source>
-      <translation>نمایش در یابنده&</translation>
+        <source>S&how in Finder</source>
+        <translation>نمایش در یابنده&</translation>
     </message>
     <message>
-      <source>Show the VirtualBox Machine Definition files in Finder</source>
-      <translation>ماشین ویرچوال باکس را در یابنده نشان میدهد</translation>
+        <source>Show the VirtualBox Machine Definition files in Finder</source>
+        <translation>ماشین ویرچوال باکس را در یابنده نشان میدهد</translation>
     </message>
     <message>
-      <source>S&how in Explorer</source>
-      <translation>نمایش در اکسپلورر&</translation>
+        <source>S&how in Explorer</source>
+        <translation>نمایش در اکسپلورر&</translation>
     </message>
     <message>
-      <source>Show the VirtualBox Machine Definition files in Explorer</source>
-      <translation>ماشین ویرچوال باکس را در اکسپلورر نشان میدهد</translation>
+        <source>Show the VirtualBox Machine Definition files in Explorer</source>
+        <translation>ماشین ویرچوال باکس را در اکسپلورر نشان میدهد</translation>
     </message>
     <message>
-      <source>S&how in File Manager</source>
-      <translation>نمایش در مدیر فایل&</translation>
+        <source>S&how in File Manager</source>
+        <translation>نمایش در مدیر فایل&</translation>
     </message>
     <message>
-      <source>Show the VirtualBox Machine Definition files in the File Manager</source>
-      <translation>ماشین ویرچوال باکس را در مدیر فایل نشان میدهد</translation>
+        <source>Show the VirtualBox Machine Definition files in the File Manager</source>
+        <translation>ماشین ویرچوال باکس را در مدیر فایل نشان میدهد</translation>
     </message>
     <message>
-      <source>Cr&eate Alias on Desktop</source>
-      <translation>ایجاد میانبر در دسکتاپ</translation>
+        <source>Cr&eate Alias on Desktop</source>
+        <translation>ایجاد میانبر در دسکتاپ</translation>
     </message>
     <message>
-      <source>Create alias files to the VirtualBox Machine Definition files on your desktop</source>
-      <translation>ایجاد یک فایل میانبر از ماشین مجازی در دسکتاپ شما</translation>
+        <source>Create alias files to the VirtualBox Machine Definition files on your desktop</source>
+        <translation>ایجاد یک فایل میانبر از ماشین مجازی در دسکتاپ شما</translation>
     </message>
     <message>
-      <source>Cr&eate Shortcut on Desktop</source>
-      <translation>ایجاد میانبر &در دسکتاپ</translation>
+        <source>Cr&eate Shortcut on Desktop</source>
+        <translation>ایجاد میانبر &در دسکتاپ</translation>
     </message>
     <message>
-      <source>Create shortcut files to the VirtualBox Machine Definition files on your desktop</source>
-      <translation>ایجاد یک فایل میانبر از ماشین مجازی در دسکتاپ شما</translation>
+        <source>Create shortcut files to the VirtualBox Machine Definition files on your desktop</source>
+        <translation>ایجاد یک فایل میانبر از ماشین مجازی در دسکتاپ شما</translation>
     </message>
     <message>
-      <source>Sort group of first selected virtual machine alphabetically</source>
-      <translation>مرتبسازی گروهی اولین ماشین انتخاب شده بطور الفبایی</translation>
+        <source>Sort group of first selected virtual machine alphabetically</source>
+        <translation>مرتبسازی گروهی اولین ماشین انتخاب شده بطور الفبایی</translation>
     </message>
     <message>
-      <source>Save state of selected virtual machines</source>
-      <translation>ذخیره وضعیت ماشین مجازی انتخاب شده</translation>
+        <source>Save state of selected virtual machines</source>
+        <translation>ذخیره وضعیت ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Send ACPI Shutdown signal to selected virtual machines</source>
-      <translation>اِرسال سیگنال شات دان اِی سی پی آی به ماشین مجازی انتخاب شده</translation>
+        <source>Send ACPI Shutdown signal to selected virtual machines</source>
+        <translation>اِرسال سیگنال شات دان اِی سی پی آی به ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Power off selected virtual machines</source>
-      <translation>برق ماشین مجازی انتخاب شده را قطع میکند</translation>
+        <source>Power off selected virtual machines</source>
+        <translation>برق ماشین مجازی انتخاب شده را قطع میکند</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIAddDiskEncryptionPasswordDialog</name>
     <message>
-      <source>ID</source>
-      <comment>password table field</comment>
-      <translation>شناسه</translation>
+        <source>ID</source>
+        <comment>password table field</comment>
+        <translation>شناسه</translation>
     </message>
     <message>
-      <source>Password</source>
-      <comment>password table field</comment>
-      <translation>رمزعبور</translation>
+        <source>Password</source>
+        <comment>password table field</comment>
+        <translation>رمزعبور</translation>
     </message>
     <message numerus="yes">
-      <source><nobr>Used by the following %n hard disk(s):</nobr><br>%1</source>
-      <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many hard drives are in the tool-tip and doesn't need to be told).</comment>
-      <translation>
-        <numerusform><nobr>با %n دیسک سخت بکار رفته است:</nobr><br>%1</numerusform>
-      </translation>
+        <source><nobr>Used by the following %n hard disk(s):</nobr><br>%1</source>
+        <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many hard drives are in the tool-tip and doesn't need to be told).</comment>
+        <translation>
+            <numerusform><nobr>با %n دیسک سخت بکار رفته است:</nobr><br>%1</numerusform>
+        </translation>
     </message>
     <message>
-      <source>%1 - Disk Encryption</source>
-      <translation>%1 - رمز گذاری دیسک</translation>
+        <source>%1 - Disk Encryption</source>
+        <translation>%1 - رمز گذاری دیسک</translation>
     </message>
     <message numerus="yes">
-      <source>This virtual machine is password protected. Please enter the %n encryption password(s) below.</source>
-      <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many passwords are in the list and doesn't need to be told).</comment>
-      <translation>
-        <numerusform>ماشین مجازی توسط رمزعبور حفاظت میشود. لطفا %n رمزعبور رمزگذاری را در زیر وارد کنید</numerusform>
-      </translation>
-    </message>
-  </context>
-  <context>
+        <source>This virtual machine is password protected. Please enter the %n encryption password(s) below.</source>
+        <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many passwords are in the list and doesn't need to be told).</comment>
+        <translation>
+            <numerusform>ماشین مجازی توسط رمزعبور حفاظت میشود. لطفا %n رمزعبور رمزگذاری را در زیر وارد کنید</numerusform>
+        </translation>
+    </message>
+</context>
+<context>
     <name>UIApplianceEditorWidget</name>
     <message>
-      <source>Virtual System %1</source>
-      <translation>سیستم مجازی %1</translation>
+        <source>Virtual System %1</source>
+        <translation>سیستم مجازی %1</translation>
     </message>
     <message>
-      <source>Name</source>
-      <translation>نام</translation>
+        <source>Name</source>
+        <translation>نام</translation>
     </message>
     <message>
-      <source>Product</source>
-      <translation>محصول</translation>
+        <source>Product</source>
+        <translation>محصول</translation>
     </message>
     <message>
-      <source>Product-URL</source>
-      <translation>آدرس محصول</translation>
+        <source>Product-URL</source>
+        <translation>آدرس محصول</translation>
     </message>
     <message>
-      <source>Vendor</source>
-      <translation>فروشنده</translation>
+        <source>Vendor</source>
+        <translation>فروشنده</translation>
     </message>
     <message>
-      <source>Vendor-URL</source>
-      <translation>آدرس فروشنده</translation>
+        <source>Vendor-URL</source>
+        <translation>آدرس فروشنده</translation>
     </message>
     <message>
-      <source>Version</source>
-      <translation>نسخه</translation>
+        <source>Version</source>
+        <translation>نسخه</translation>
     </message>
     <message>
-      <source>Description</source>
-      <translation>توضیحات</translation>
+        <source>Description</source>
+        <translation>توضیحات</translation>
     </message>
     <message>
-      <source>License</source>
-      <translation>مجوز</translation>
+        <source>License</source>
+        <translation>مجوز</translation>
     </message>
     <message>
-      <source>Guest OS Type</source>
-      <translation>نوع سیستم عامل مهمان</translation>
+        <source>Guest OS Type</source>
+        <translation>نوع سیستم عامل مهمان</translation>
     </message>
     <message>
-      <source>CPU</source>
-      <translation>پردازنده</translation>
+        <source>CPU</source>
+        <translation>پردازنده</translation>
     </message>
     <message>
-      <source>RAM</source>
-      <translation>حافظه</translation>
+        <source>RAM</source>
+        <translation>حافظه</translation>
     </message>
     <message>
-      <source>Hard Disk Controller (IDE)</source>
-      <translation>کنترلر هارد دیسک (IDE)</translation>
+        <source>Hard Disk Controller (IDE)</source>
+        <translation type="obsolete">کنترلر هارد دیسک (IDE)</translation>
     </message>
     <message>
-      <source>Hard Disk Controller (SATA)</source>
-      <translation>کنترلر هارد دیسک (SATA)</translation>
+        <source>Hard Disk Controller (SATA)</source>
+        <translation type="obsolete">کنترلر هارد دیسک (SATA)</translation>
     </message>
     <message>
-      <source>Hard Disk Controller (SCSI)</source>
-      <translation>کنترلر هارد دیسک (SCSI)</translation>
+        <source>Hard Disk Controller (SCSI)</source>
+        <translation type="obsolete">کنترلر هارد دیسک (SCSI)</translation>
     </message>
     <message>
-      <source>DVD</source>
-      <translation>دی وی دی</translation>
+        <source>DVD</source>
+        <translation>دی وی دی</translation>
     </message>
     <message>
-      <source>Floppy</source>
-      <translation>فلاپی</translation>
+        <source>Floppy</source>
+        <translation>فلاپی</translation>
     </message>
     <message>
-      <source>Network Adapter</source>
-      <translation>آداپتور شبکه</translation>
+        <source>Network Adapter</source>
+        <translation>آداپتور شبکه</translation>
     </message>
     <message>
-      <source>USB Controller</source>
-      <translation>کنترلر یو اِس بی</translation>
+        <source>USB Controller</source>
+        <translation>کنترلر یو اِس بی</translation>
     </message>
     <message>
-      <source>Sound Card</source>
-      <translation>کارت صدا</translation>
+        <source>Sound Card</source>
+        <translation>کارت صدا</translation>
     </message>
     <message>
-      <source>Virtual Disk Image</source>
-      <translation>ایمیج دیسک مجازی</translation>
+        <source>Virtual Disk Image</source>
+        <translation>ایمیج دیسک مجازی</translation>
     </message>
     <message>
-      <source>Unknown Hardware Item</source>
-      <translation>آیتم ناشناخته سخت افزار</translation>
+        <source>Unknown Hardware Item</source>
+        <translation>آیتم ناشناخته سخت افزار</translation>
     </message>
     <message>
-      <source><b>Original Value:</b> %1</source>
-      <translation><b>مقدار اصلی:</b> %1</translation>
+        <source><b>Original Value:</b> %1</source>
+        <translation><b>مقدار اصلی:</b> %1</translation>
     </message>
     <message>
-      <source>Configuration</source>
-      <translation>پیکربندی</translation>
+        <source>Configuration</source>
+        <translation>پیکربندی</translation>
     </message>
     <message>
-      <source>Warnings:</source>
-      <translation>هشدار:</translation>
+        <source>Warnings:</source>
+        <translation>هشدار:</translation>
     </message>
     <message>
-      <source>Hard Disk Controller (SAS)</source>
-      <translation>کنترلر هارد دیسک (SAS)</translation>
+        <source>Hard Disk Controller (SAS)</source>
+        <translation type="obsolete">کنترلر هارد دیسک (SAS)</translation>
     </message>
     <message>
-      <source>When checked a new unique MAC address will assigned to all configured network cards.</source>
-      <translation>وقتیکه انتخاب شده یک آدرس مَک جدید منحصر بفرد به همه کارت های شبکه پیکربندی شده اختصاص داده خواهد شد.</translation>
+        <source>When checked a new unique MAC address will assigned to all configured network cards.</source>
+        <translation>وقتیکه انتخاب شده یک آدرس مَک جدید منحصر بفرد به همه کارت های شبکه پیکربندی شده اختصاص داده خواهد شد.</translation>
     </message>
     <message>
-      <source>&Reinitialize the MAC address of all network cards</source>
-      <translation>مقداردهی مجدد &آدرس مک همه کارت های شبکه</translation>
+        <source>&Reinitialize the MAC address of all network cards</source>
+        <translation>مقداردهی مجدد &آدرس مک همه کارت های شبکه</translation>
     </message>
     <message>
-      <source>Storage Controller (IDE)</source>
-      <translation>کنترلر ذخیره ساز (IDE)</translation>
+        <source>Storage Controller (IDE)</source>
+        <translation>کنترلر ذخیره ساز (IDE)</translation>
     </message>
     <message>
-      <source>Storage Controller (SATA)</source>
-      <translation>کنترلر ذخیره ساز (SATA)</translation>
+        <source>Storage Controller (SATA)</source>
+        <translation>کنترلر ذخیره ساز (SATA)</translation>
     </message>
     <message>
-      <source>Storage Controller (SCSI)</source>
-      <translation>کنترلر ذخیره ساز (SCSI)</translation>
+        <source>Storage Controller (SCSI)</source>
+        <translation>کنترلر ذخیره ساز (SCSI)</translation>
     </message>
     <message>
-      <source>Storage Controller (SAS)</source>
-      <translation>کنترلر ذخیره ساز (SAS)</translation>
+        <source>Storage Controller (SAS)</source>
+        <translation>کنترلر ذخیره ساز (SAS)</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIApplianceImportEditorWidget</name>
     <message>
-      <source>Importing Appliance ...</source>
-      <translation>واردکردن وسیله...</translation>
+        <source>Importing Appliance ...</source>
+        <translation>واردکردن وسیله...</translation>
     </message>
     <message>
-      <source>Reading Appliance ...</source>
-      <translation>خواندن وسیله...</translation>
+        <source>Reading Appliance ...</source>
+        <translation>خواندن وسیله...</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIDescriptionPagePrivate</name>
     <message>
-      <source>No description. Press the Edit button below to add it.</source>
-      <translation>توضیحی ندارد.دکمه ویرایش در پایین را برای افزودن فشار دهید.</translation>
+        <source>No description. Press the Edit button below to add it.</source>
+        <translation type="obsolete">توضیحی ندارد.دکمه ویرایش در پایین را برای افزودن فشار دهید.</translation>
     </message>
     <message>
-      <source>Edit</source>
-      <translation>ویرایش</translation>
+        <source>Edit</source>
+        <translation type="obsolete">ویرایش</translation>
     </message>
     <message>
-      <source>Edit (Ctrl+E)</source>
-      <translation>ویرایش (Ctrl+E)</translation>
+        <source>Edit (Ctrl+E)</source>
+        <translation type="obsolete">ویرایش (Ctrl+E)</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIDetailsBlock</name>
     <message>
-      <source>Name</source>
-      <comment>details report</comment>
-      <translation>نام</translation>
+        <source>Name</source>
+        <comment>details report</comment>
+        <translation type="obsolete">نام</translation>
     </message>
     <message>
-      <source>OS Type</source>
-      <comment>details report</comment>
-      <translation>نوع سیستم عامل</translation>
+        <source>OS Type</source>
+        <comment>details report</comment>
+        <translation type="obsolete">نوع سیستم عامل</translation>
     </message>
     <message>
-      <source>Information inaccessible</source>
-      <comment>details report</comment>
-      <translation>اطلاعات قابل دسترسی نیست</translation>
+        <source>Information inaccessible</source>
+        <comment>details report</comment>
+        <translation type="obsolete">اطلاعات قابل دسترسی نیست</translation>
     </message>
     <message>
-      <source>Base Memory</source>
-      <comment>details report</comment>
-      <translation>حافظه پایه</translation>
+        <source>Base Memory</source>
+        <comment>details report</comment>
+        <translation type="obsolete">حافظه پایه</translation>
     </message>
     <message>
-      <source><nobr>%1 MB</nobr></source>
-      <comment>details report</comment>
-      <translation><nobr>%1 مگابایت</nobr></translation>
+        <source><nobr>%1 MB</nobr></source>
+        <comment>details report</comment>
+        <translation type="obsolete"><nobr>%1 مگابایت</nobr></translation>
     </message>
     <message>
-      <source>Processors</source>
-      <comment>details report</comment>
-      <translation>پردازنده ها</translation>
+        <source>Processors</source>
+        <comment>details report</comment>
+        <translation type="obsolete">پردازنده ها</translation>
     </message>
     <message>
-      <source><nobr>%1</nobr></source>
-      <comment>details report</comment>
-      <translation><nobr>%1</nobr></translation>
+        <source><nobr>%1</nobr></source>
+        <comment>details report</comment>
+        <translation type="obsolete"><nobr>%1</nobr></translation>
     </message>
     <message>
-      <source>Execution Cap</source>
-      <comment>details report</comment>
-      <translation>درپوش اِجرا</translation>
+        <source>Execution Cap</source>
+        <comment>details report</comment>
+        <translation type="obsolete">درپوش اِجرا</translation>
     </message>
     <message>
-      <source><nobr>%1%</nobr></source>
-      <comment>details report</comment>
-      <translation><nobr>%1%</nobr></translation>
+        <source><nobr>%1%</nobr></source>
+        <comment>details report</comment>
+        <translation type="obsolete"><nobr>%1%</nobr></translation>
     </message>
     <message>
-      <source>Boot Order</source>
-      <comment>details report</comment>
-      <translation>ترتیب بوت</translation>
+        <source>Boot Order</source>
+        <comment>details report</comment>
+        <translation type="obsolete">ترتیب بوت</translation>
     </message>
     <message>
-      <source>ACPI</source>
-      <comment>details report</comment>
-      <translation>ACPI</translation>
+        <source>ACPI</source>
+        <comment>details report</comment>
+        <translation type="obsolete">ACPI</translation>
     </message>
     <message>
-      <source>I/O APIC</source>
-      <comment>details report</comment>
-      <translation>I/O APIC</translation>
+        <source>I/O APIC</source>
+        <comment>details report</comment>
+        <translation type="obsolete">I/O APIC</translation>
     </message>
     <message>
-      <source>BIOS</source>
-      <comment>details report</comment>
-      <translation>بایوس</translation>
+        <source>BIOS</source>
+        <comment>details report</comment>
+        <translation type="obsolete">بایوس</translation>
     </message>
     <message>
-      <source>VT-x/AMD-V</source>
-      <comment>details report</comment>
-      <translation>VT-x/AMD-V</translation>
+        <source>VT-x/AMD-V</source>
+        <comment>details report</comment>
+        <translation type="obsolete">VT-x/AMD-V</translation>
     </message>
     <message>
-      <source>Nested Paging</source>
-      <comment>details report</comment>
-      <translation>صفحه بندی تودرتو</translation>
+        <source>Nested Paging</source>
+        <comment>details report</comment>
+        <translation type="obsolete">صفحه بندی تودرتو</translation>
     </message>
     <message>
-      <source>PAE/NX</source>
-      <comment>details report</comment>
-      <translation>PAE/NX</translation>
+        <source>PAE/NX</source>
+        <comment>details report</comment>
+        <translation type="obsolete">PAE/NX</translation>
     </message>
     <message>
-      <source>Acceleration</source>
-      <comment>details report</comment>
-      <translation>شتاب دهنده</translation>
+        <source>Acceleration</source>
+        <comment>details report</comment>
+        <translation type="obsolete">شتاب دهنده</translation>
     </message>
     <message>
-      <source>Video Memory</source>
-      <comment>details report</comment>
-      <translation>حافظه ویدیو</translation>
+        <source>Video Memory</source>
+        <comment>details report</comment>
+        <translation type="obsolete">حافظه ویدیو</translation>
     </message>
     <message>
-      <source>Screens</source>
-      <comment>details report</comment>
-      <translation>نمایشگر</translation>
+        <source>Screens</source>
+        <comment>details report</comment>
+        <translation type="obsolete">نمایشگر</translation>
     </message>
     <message>
-      <source>2D Video</source>
-      <comment>details report</comment>
-      <translation>ویدیو دو بعدی</translation>
+        <source>2D Video</source>
+        <comment>details report</comment>
+        <translation type="obsolete">ویدیو دو بعدی</translation>
     </message>
     <message>
-      <source>3D</source>
-      <comment>details report</comment>
-      <translation>سه بعدی</translation>
+        <source>3D</source>
+        <comment>details report</comment>
+        <translation type="obsolete">سه بعدی</translation>
     </message>
     <message>
-      <source>Remote Desktop Server Port</source>
-      <comment>details report (VRDE Server)</comment>
-      <translation>پورت سرور ریموت دسکتاپ</translation>
+        <source>Remote Desktop Server Port</source>
+        <comment>details report (VRDE Server)</comment>
+        <translation type="obsolete">پورت سرور ریموت دسکتاپ</translation>
     </message>
     <message>
-      <source>Remote Desktop Server</source>
-      <comment>details report (VRDE Server)</comment>
-      <translation>سرور ریموت دسکتاپ</translation>
+        <source>Remote Desktop Server</source>
+        <comment>details report (VRDE Server)</comment>
+        <translation type="obsolete">سرور ریموت دسکتاپ</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (VRDE Server)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (VRDE Server)</comment>
+        <translation type="obsolete">غیرفعال شده</translation>
     </message>
     <message>
-      <source>(CD/DVD)</source>
-      <translation>(سی دی/دی وی دی)</translation>
+        <source>(CD/DVD)</source>
+        <translation type="obsolete">(سی دی/دی وی دی)</translation>
     </message>
     <message>
-      <source>Not Attached</source>
-      <comment>details report (Storage)</comment>
-      <translation>ضمیمه نشده است</translation>
+        <source>Not Attached</source>
+        <comment>details report (Storage)</comment>
+        <translation type="obsolete">ضمیمه نشده است</translation>
     </message>
     <message>
-      <source>Host Driver</source>
-      <comment>details report (audio)</comment>
-      <translation>درایور میزبان</translation>
+        <source>Host Driver</source>
+        <comment>details report (audio)</comment>
+        <translation type="obsolete">درایور میزبان</translation>
     </message>
     <message>
-      <source>Controller</source>
-      <comment>details report (audio)</comment>
-      <translation>کنترلر</translation>
+        <source>Controller</source>
+        <comment>details report (audio)</comment>
+        <translation type="obsolete">کنترلر</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (audio)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (audio)</comment>
+        <translation type="obsolete">غیرفعال شده</translation>
     </message>
     <message>
-      <source>Bridged adapter, %1</source>
-      <comment>details report (network)</comment>
-      <translation>آداپتور پل شده، %1</translation>
+        <source>Bridged adapter, %1</source>
+        <comment>details report (network)</comment>
+        <translation type="obsolete">آداپتور پل شده، %1</translation>
     </message>
     <message>
-      <source>Internal network, '%1'</source>
-      <comment>details report (network)</comment>
-      <translation>شبه داخلی, '%1'</translation>
+        <source>Internal network, '%1'</source>
+        <comment>details report (network)</comment>
+        <translation type="obsolete">شبه داخلی, '%1'</translation>
     </message>
     <message>
-      <source>Host-only adapter, '%1'</source>
-      <comment>details report (network)</comment>
-      <translation>آداپتور فقط-میزبان '%1'</translation>
+        <source>Host-only adapter, '%1'</source>
+        <comment>details report (network)</comment>
+        <translation type="obsolete">آداپتور فقط-میزبان '%1'</translation>
     </message>
     <message>
-      <source>Generic driver, '%1'</source>
-      <comment>details report (network)</comment>
-      <translation>درایور کلی، '%1'</translation>
+        <source>Generic driver, '%1'</source>
+        <comment>details report (network)</comment>
+        <translation type="obsolete">درایور کلی، '%1'</translation>
     </message>
     <message>
-      <source>Generic driver, '%1' {&nbsp;%2&nbsp;}</source>
-      <comment>details report (network)</comment>
-      <translation>درایور کلی، '%1' {&nbsp;%2&nbsp;}</translation>
+        <source>Generic driver, '%1' {&nbsp;%2&nbsp;}</source>
+        <comment>details report (network)</comment>
+        <translation type="obsolete">درایور کلی، '%1' {&nbsp;%2&nbsp;}</translation>
     </message>
     <message>
-      <source>Adapter %1</source>
-      <comment>details report (network)</comment>
-      <translation>آداپتور %1</translation>
+        <source>Adapter %1</source>
+        <comment>details report (network)</comment>
+        <translation type="obsolete">آداپتور %1</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (network)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (network)</comment>
+        <translation type="obsolete">غیرفعال شده</translation>
     </message>
     <message>
-      <source>Port %1</source>
-      <comment>details report (serial ports)</comment>
-      <translation>پورت %1</translation>
+        <source>Port %1</source>
+        <comment>details report (serial ports)</comment>
+        <translation type="obsolete">پورت %1</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (serial ports)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (serial ports)</comment>
+        <translation type="obsolete">غیرفعال شده</translation>
     </message>
     <message>
-      <source>Port %1</source>
-      <comment>details report (parallel ports)</comment>
-      <translation>پورت %1</translation>
+        <source>Port %1</source>
+        <comment>details report (parallel ports)</comment>
+        <translation type="obsolete">پورت %1</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (parallel ports)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (parallel ports)</comment>
+        <translation type="obsolete">غیرفعال شده</translation>
     </message>
     <message>
-      <source>Device Filters</source>
-      <comment>details report (USB)</comment>
-      <translation>فیلترهای دستگاه</translation>
+        <source>Device Filters</source>
+        <comment>details report (USB)</comment>
+        <translation type="obsolete">فیلترهای دستگاه</translation>
     </message>
     <message>
-      <source>%1 (%2 active)</source>
-      <comment>details report (USB)</comment>
-      <translation>%1 (%2 فعال)</translation>
+        <source>%1 (%2 active)</source>
+        <comment>details report (USB)</comment>
+        <translation type="obsolete">%1 (%2 فعال)</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (USB)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (USB)</comment>
+        <translation type="obsolete">غیرفعال شده</translation>
     </message>
     <message>
-      <source>Shared Folders</source>
-      <comment>details report (shared folders)</comment>
-      <translation>پوشه های اشتراکی</translation>
+        <source>Shared Folders</source>
+        <comment>details report (shared folders)</comment>
+        <translation type="obsolete">پوشه های اشتراکی</translation>
     </message>
     <message>
-      <source>None</source>
-      <comment>details report (shared folders)</comment>
-      <translation>ندارد</translation>
+        <source>None</source>
+        <comment>details report (shared folders)</comment>
+        <translation type="obsolete">ندارد</translation>
     </message>
     <message>
-      <source>None</source>
-      <comment>details report (description)</comment>
-      <translation>هیچیک</translation>
+        <source>None</source>
+        <comment>details report (description)</comment>
+        <translation type="obsolete">هیچیک</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIDetailsPagePrivate</name>
     <message>
-      <source>The selected virtual machine is <i>inaccessible</i>. Please inspect the error message shown below and press the <b>Refresh</b> button if you want to repeat the accessibility check:</source>
-      <translation>ماشین مجازی انتخاب شده <i>غیرقابل دسترسی</i> است. لطفا به پیام خطای زیر رسیدگی کنید و دکمه <b>تازه کردن</b> را اگر میخواهید دسترسی پذیری دوباره بررسی شود فشار دهید:</translation>
+        <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>ماشین مجازی انتخاب شده <i>غیرقابل دسترسی</i> است. لطفا به پیام خطای زیر رسیدگی کنید و دکمه <b>تازه کردن</b> را اگر میخواهید دسترسی پذیری دوباره بررسی شود فشار دهید:</translation>
     </message>
     <message>
-      <source>General</source>
-      <comment>details report</comment>
-      <translation>عمومی</translation>
+        <source>General</source>
+        <comment>details report</comment>
+        <translation type="obsolete">عمومی</translation>
     </message>
     <message>
-      <source>System</source>
-      <comment>details report</comment>
-      <translation>سیستم</translation>
+        <source>System</source>
+        <comment>details report</comment>
+        <translation type="obsolete">سیستم</translation>
     </message>
     <message>
-      <source>Preview</source>
-      <comment>details report</comment>
-      <translation>پیشنمایش</translation>
+        <source>Preview</source>
+        <comment>details report</comment>
+        <translation type="obsolete">پیشنمایش</translation>
     </message>
     <message>
-      <source>Display</source>
-      <comment>details report</comment>
-      <translation>نمایش</translation>
+        <source>Display</source>
+        <comment>details report</comment>
+        <translation type="obsolete">نمایش</translation>
     </message>
     <message>
-      <source>Storage</source>
-      <comment>details report</comment>
-      <translation>ذخیره ساز</translation>
+        <source>Storage</source>
+        <comment>details report</comment>
+        <translation type="obsolete">ذخیره ساز</translation>
     </message>
     <message>
-      <source>Audio</source>
-      <comment>details report</comment>
-      <translation>صدا</translation>
+        <source>Audio</source>
+        <comment>details report</comment>
+        <translation type="obsolete">صدا</translation>
     </message>
     <message>
-      <source>Network</source>
-      <comment>details report</comment>
-      <translation>شبکه</translation>
+        <source>Network</source>
+        <comment>details report</comment>
+        <translation type="obsolete">شبکه</translation>
     </message>
     <message>
-      <source>Serial Ports</source>
-      <comment>details report</comment>
-      <translation>پورت سریال</translation>
+        <source>Serial Ports</source>
+        <comment>details report</comment>
+        <translation type="obsolete">پورت سریال</translation>
     </message>
     <message>
-      <source>Parallel Ports</source>
-      <comment>details report</comment>
-      <translation>پورت پارالل</translation>
+        <source>Parallel Ports</source>
+        <comment>details report</comment>
+        <translation type="obsolete">پورت پارالل</translation>
     </message>
     <message>
-      <source>USB</source>
-      <comment>details report</comment>
-      <translation>یو اِس بی</translation>
+        <source>USB</source>
+        <comment>details report</comment>
+        <translation type="obsolete">یو اِس بی</translation>
     </message>
     <message>
-      <source>Shared Folders</source>
-      <comment>details report</comment>
-      <translation>پوشه های اشتراکی</translation>
+        <source>Shared Folders</source>
+        <comment>details report</comment>
+        <translation type="obsolete">پوشه های اشتراکی</translation>
     </message>
     <message>
-      <source>Description</source>
-      <comment>details report</comment>
-      <translation>توضیحات</translation>
+        <source>Description</source>
+        <comment>details report</comment>
+        <translation type="obsolete">توضیحات</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIDnDHandler</name>
     <message>
-      <source>Dropping data ...</source>
-      <translation>رهاکردن داده ...</translation>
+        <source>Dropping data ...</source>
+        <translation>رهاکردن داده ...</translation>
     </message>
     <message>
-      <source>Retrieving data ...</source>
-      <translation>بازیابی داده....</translation>
+        <source>Retrieving data ...</source>
+        <translation>بازیابی داده....</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIDnDMimeData</name>
     <message>
-      <source>Dropping data ...</source>
-      <translation>رهاکردن داده ...</translation>
+        <source>Dropping data ...</source>
+        <translation type="obsolete">رهاکردن داده ...</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIDownloader</name>
     <message>
-      <source>Looking for %1...</source>
-      <translation>جستجو برای %1...</translation>
+        <source>Looking for %1...</source>
+        <translation>جستجو برای %1...</translation>
     </message>
     <message>
-      <source>Downloading %1...</source>
-      <translation>درحال دانلود %1...</translation>
+        <source>Downloading %1...</source>
+        <translation>درحال دانلود %1...</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIDownloaderAdditions</name>
     <message>
-      <source>Select folder to save Guest Additions image to</source>
-      <translation>پوشه ای انتخاب کنید برای ذخیره ایمیج افزونه مهمان در</translation>
+        <source>Select folder to save Guest Additions image to</source>
+        <translation>پوشه ای انتخاب کنید برای ذخیره ایمیج افزونه مهمان در</translation>
     </message>
     <message>
-      <source>VirtualBox Guest Additions</source>
-      <translation>افزونه مهمان ویرچوال باکس</translation>
+        <source>VirtualBox Guest Additions</source>
+        <translation>افزونه مهمان ویرچوال باکس</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIDownloaderExtensionPack</name>
     <message>
-      <source>Select folder to save %1 to</source>
-      <translation>انتخاب پوشه ای برای ذخیره %1 در</translation>
+        <source>Select folder to save %1 to</source>
+        <translation>انتخاب پوشه ای برای ذخیره %1 در</translation>
     </message>
     <message>
-      <source>VirtualBox Extension Pack</source>
-      <translation>بسته افزونه ویرچوال باکس</translation>
+        <source>VirtualBox Extension Pack</source>
+        <translation>بسته افزونه ویرچوال باکس</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIDownloaderUserManual</name>
     <message>
-      <source>Select folder to save User Manual to</source>
-      <translation>پوشه ای انتخاب کنید برای ذخیره راهنمای کاربر در</translation>
+        <source>Select folder to save User Manual to</source>
+        <translation>پوشه ای انتخاب کنید برای ذخیره راهنمای کاربر در</translation>
     </message>
     <message>
-      <source>VirtualBox User Manual</source>
-      <translation>راهنمای کاربر ویرچوال باکس</translation>
+        <source>VirtualBox User Manual</source>
+        <translation>راهنمای کاربر ویرچوال باکس</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGChooserItemGroup</name>
     <message>
-      <source><b>%1</b></source>
-      <comment>Group item tool-tip / Group name</comment>
-      <translation><b>%1</b></translation>
+        <source><b>%1</b></source>
+        <comment>Group item tool-tip / Group name</comment>
+        <translation><b>%1</b></translation>
     </message>
     <message numerus="yes">
-      <source>%n group(s)</source>
-      <comment>Group item tool-tip / Group info</comment>
-      <translation>
-        <numerusform>%n گروه(ها)</numerusform>
-      </translation>
+        <source>%n group(s)</source>
+        <comment>Group item tool-tip / Group info</comment>
+        <translation>
+            <numerusform>%n گروه(ها)</numerusform>
+        </translation>
     </message>
     <message>
-      <source><nobr>%1</nobr></source>
-      <comment>Group item tool-tip / Group info wrapper</comment>
-      <translation><nobr>%1</nobr></translation>
+        <source><nobr>%1</nobr></source>
+        <comment>Group item tool-tip / Group info wrapper</comment>
+        <translation><nobr>%1</nobr></translation>
     </message>
     <message numerus="yes">
-      <source>%n machine(s)</source>
-      <comment>Group item tool-tip / Machine info</comment>
-      <translation>
-        <numerusform>%n ماشین(ها)</numerusform>
-      </translation>
+        <source>%n machine(s)</source>
+        <comment>Group item tool-tip / Machine info</comment>
+        <translation>
+            <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>
-      </translation>
+        <source>(%n running)</source>
+        <comment>Group item tool-tip / Running machine info</comment>
+        <translation>
+            <numerusform>%n درحال اِجرای</numerusform>
+        </translation>
     </message>
     <message>
-      <source><nobr>%1</nobr></source>
-      <comment>Group item tool-tip / Machine info wrapper</comment>
-      <translation><nobr>%1</nobr></translation>
+        <source><nobr>%1</nobr></source>
+        <comment>Group item tool-tip / Machine info wrapper</comment>
+        <translation><nobr>%1</nobr></translation>
     </message>
     <message>
-      <source><nobr>%1 %2</nobr></source>
-      <comment>Group item tool-tip / Machine info wrapper, including running</comment>
-      <translation><nobr>%1</nobr> {1 %2<?}</translation>
+        <source><nobr>%1 %2</nobr></source>
+        <comment>Group item tool-tip / Machine info wrapper, including running</comment>
+        <translation><nobr>%1</nobr> {1 %2<?}</translation>
     </message>
     <message>
-      <source>Collapse group</source>
-      <translation>بستن گروه</translation>
+        <source>Collapse group</source>
+        <translation>بستن گروه</translation>
     </message>
     <message>
-      <source>Expand group</source>
-      <translation>بازکردن گروه</translation>
+        <source>Expand group</source>
+        <translation>بازکردن گروه</translation>
     </message>
     <message>
-      <source>Enter group</source>
-      <translation>ورود به گروه</translation>
+        <source>Enter group</source>
+        <translation>ورود به گروه</translation>
     </message>
     <message>
-      <source>Exit group</source>
-      <translation>خروج از گروه</translation>
+        <source>Exit group</source>
+        <translation>خروج از گروه</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGChooserModel</name>
     <message>
-      <source>New group</source>
-      <translation>گروه جدید</translation>
+        <source>New group</source>
+        <translation>گروه جدید</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGDetails</name>
     <message>
-      <source>Name</source>
-      <comment>details (general)</comment>
-      <translation>نام</translation>
+        <source>Name</source>
+        <comment>details (general)</comment>
+        <translation>نام</translation>
     </message>
     <message>
-      <source>Groups</source>
-      <comment>details (general)</comment>
-      <translation>گروه ها</translation>
+        <source>Groups</source>
+        <comment>details (general)</comment>
+        <translation>گروه ها</translation>
     </message>
     <message>
-      <source>%1 MB</source>
-      <comment>details</comment>
-      <translation>%1 مگابایت</translation>
+        <source>%1 MB</source>
+        <comment>details</comment>
+        <translation>%1 مگابایت</translation>
     </message>
     <message>
-      <source>Processors</source>
-      <comment>details (system)</comment>
-      <translation>پردازنده ها</translation>
+        <source>Processors</source>
+        <comment>details (system)</comment>
+        <translation>پردازنده ها</translation>
     </message>
     <message>
-      <source>%1%</source>
-      <comment>details</comment>
-      <translation>%1%</translation>
+        <source>%1%</source>
+        <comment>details</comment>
+        <translation>%1%</translation>
     </message>
     <message>
-      <source>VT-x/AMD-V</source>
-      <comment>details (system)</comment>
-      <translation>VT-x/AMD-V</translation>
+        <source>VT-x/AMD-V</source>
+        <comment>details (system)</comment>
+        <translation>VT-x/AMD-V</translation>
     </message>
     <message>
-      <source>PAE/NX</source>
-      <comment>details (system)</comment>
-      <translation>PAE/NX</translation>
+        <source>PAE/NX</source>
+        <comment>details (system)</comment>
+        <translation>PAE/NX</translation>
     </message>
     <message>
-      <source>Acceleration</source>
-      <comment>details (system)</comment>
-      <translation>شتاب دهنده</translation>
+        <source>Acceleration</source>
+        <comment>details (system)</comment>
+        <translation>شتاب دهنده</translation>
     </message>
     <message>
-      <source>Screens</source>
-      <comment>details (display)</comment>
-      <translation>نمایشگر</translation>
+        <source>Screens</source>
+        <comment>details (display)</comment>
+        <translation>نمایشگر</translation>
     </message>
     <message>
-      <source>3D</source>
-      <comment>details (display)</comment>
-      <translation>سه بعدی</translation>
+        <source>3D</source>
+        <comment>details (display)</comment>
+        <translation>سه بعدی</translation>
     </message>
     <message>
-      <source>Acceleration</source>
-      <comment>details (display)</comment>
-      <translation>شتاب دهنده</translation>
+        <source>Acceleration</source>
+        <comment>details (display)</comment>
+        <translation>شتاب دهنده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details (display/vrde/VRDE server)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details (display/vrde/VRDE server)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>[CD/DVD]</source>
-      <comment>details (storage)</comment>
-      <translation>[سی دی/دی وی دی]</translation>
+        <source>[CD/DVD]</source>
+        <comment>details (storage)</comment>
+        <translation type="obsolete">[سی دی/دی وی دی]</translation>
     </message>
     <message>
-      <source>Controller</source>
-      <comment>details (audio)</comment>
-      <translation>کنترلر</translation>
+        <source>Controller</source>
+        <comment>details (audio)</comment>
+        <translation>کنترلر</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details (audio)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details (audio)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Adapter %1</source>
-      <comment>details (network)</comment>
-      <translation>آداپتور %1</translation>
+        <source>Adapter %1</source>
+        <comment>details (network)</comment>
+        <translation>آداپتور %1</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details (network/adapter)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details (network/adapter)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Port %1</source>
-      <comment>details (serial)</comment>
-      <translation>پورت %1</translation>
+        <source>Port %1</source>
+        <comment>details (serial)</comment>
+        <translation>پورت %1</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details (serial)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details (serial)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Port %1</source>
-      <comment>details (parallel)</comment>
-      <translation>پورت %1</translation>
+        <source>Port %1</source>
+        <comment>details (parallel)</comment>
+        <translation>پورت %1</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details (parallel)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details (parallel)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>%1 (%2 active)</source>
-      <comment>details (usb)</comment>
-      <translation>%1 (%2 فعال)</translation>
+        <source>%1 (%2 active)</source>
+        <comment>details (usb)</comment>
+        <translation>%1 (%2 فعال)</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details (usb)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details (usb)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>None</source>
-      <comment>details (shared folders)</comment>
-      <translation>ندارد</translation>
+        <source>None</source>
+        <comment>details (shared folders)</comment>
+        <translation>ندارد</translation>
     </message>
     <message>
-      <source>None</source>
-      <comment>details (description)</comment>
-      <translation>ندارد</translation>
+        <source>None</source>
+        <comment>details (description)</comment>
+        <translation>ندارد</translation>
     </message>
     <message>
-      <source>Operating System</source>
-      <comment>details (general)</comment>
-      <translation>سیستم عامل</translation>
+        <source>Operating System</source>
+        <comment>details (general)</comment>
+        <translation>سیستم عامل</translation>
     </message>
     <message>
-      <source>Information Inaccessible</source>
-      <comment>details</comment>
-      <translation>اطلاعات قابل دسترسی نیست</translation>
+        <source>Information Inaccessible</source>
+        <comment>details</comment>
+        <translation>اطلاعات قابل دسترسی نیست</translation>
     </message>
     <message>
-      <source>Base Memory</source>
-      <comment>details (system)</comment>
-      <translation>حافظه پایه</translation>
+        <source>Base Memory</source>
+        <comment>details (system)</comment>
+        <translation>حافظه پایه</translation>
     </message>
     <message>
-      <source>Execution Cap</source>
-      <comment>details (system)</comment>
-      <translation>درپوش اِجرا</translation>
+        <source>Execution Cap</source>
+        <comment>details (system)</comment>
+        <translation>درپوش اِجرا</translation>
     </message>
     <message>
-      <source>Boot Order</source>
-      <comment>details (system)</comment>
-      <translation>ترتیب بوت</translation>
+        <source>Boot Order</source>
+        <comment>details (system)</comment>
+        <translation>ترتیب بوت</translation>
     </message>
     <message>
-      <source>Nested Paging</source>
-      <comment>details (system)</comment>
-      <translation>صفحه بندی تودرتو</translation>
+        <source>Nested Paging</source>
+        <comment>details (system)</comment>
+        <translation>صفحه بندی تودرتو</translation>
     </message>
     <message>
-      <source>Video Memory</source>
-      <comment>details (display)</comment>
-      <translation>حافظه ویدیو</translation>
+        <source>Video Memory</source>
+        <comment>details (display)</comment>
+        <translation>حافظه ویدیو</translation>
     </message>
     <message>
-      <source>2D Video</source>
-      <comment>details (display)</comment>
-      <translation>ویدیو دو بعدی</translation>
+        <source>2D Video</source>
+        <comment>details (display)</comment>
+        <translation>ویدیو دو بعدی</translation>
     </message>
     <message>
-      <source>Remote Desktop Server Port</source>
-      <comment>details (display/vrde)</comment>
-      <translation>پورت سرور ریموت دسکتاپ</translation>
+        <source>Remote Desktop Server Port</source>
+        <comment>details (display/vrde)</comment>
+        <translation>پورت سرور ریموت دسکتاپ</translation>
     </message>
     <message>
-      <source>Remote Desktop Server</source>
-      <comment>details (display/vrde)</comment>
-      <translation>سرور ریموت دسکتاپ</translation>
+        <source>Remote Desktop Server</source>
+        <comment>details (display/vrde)</comment>
+        <translation>سرور ریموت دسکتاپ</translation>
     </message>
     <message>
-      <source>Not Attached</source>
-      <comment>details (storage)</comment>
-      <translation>ضمیمه نشده است</translation>
+        <source>Not Attached</source>
+        <comment>details (storage)</comment>
+        <translation>ضمیمه نشده است</translation>
     </message>
     <message>
-      <source>Host Driver</source>
-      <comment>details (audio)</comment>
-      <translation>درایور میزبان</translation>
+        <source>Host Driver</source>
+        <comment>details (audio)</comment>
+        <translation>درایور میزبان</translation>
     </message>
     <message>
-      <source>Bridged Adapter, %1</source>
-      <comment>details (network)</comment>
-      <translation>آداپتور پل شده، %1</translation>
+        <source>Bridged Adapter, %1</source>
+        <comment>details (network)</comment>
+        <translation>آداپتور پل شده، %1</translation>
     </message>
     <message>
-      <source>Internal Network, '%1'</source>
-      <comment>details (network)</comment>
-      <translation>شبه داخلی, '%1'</translation>
+        <source>Internal Network, '%1'</source>
+        <comment>details (network)</comment>
+        <translation>شبه داخلی, '%1'</translation>
     </message>
     <message>
-      <source>Host-only Adapter, '%1'</source>
-      <comment>details (network)</comment>
-      <translation>آداپتور فقط-میزبان '%1'</translation>
+        <source>Host-only Adapter, '%1'</source>
+        <comment>details (network)</comment>
+        <translation>آداپتور فقط-میزبان '%1'</translation>
     </message>
     <message>
-      <source>Generic Driver, '%1'</source>
-      <comment>details (network)</comment>
-      <translation>درایور کلی، '%1'</translation>
+        <source>Generic Driver, '%1'</source>
+        <comment>details (network)</comment>
+        <translation>درایور کلی، '%1'</translation>
     </message>
     <message>
-      <source>Generic Driver, '%1' {&nbsp;%2&nbsp;}</source>
-      <comment>details (network)</comment>
-      <translation>درایور کلی، '%1' {&nbsp;%2&nbsp;}</translation>
+        <source>Generic Driver, '%1' {&nbsp;%2&nbsp;}</source>
+        <comment>details (network)</comment>
+        <translation type="obsolete">درایور کلی، '%1' {&nbsp;%2&nbsp;}</translation>
     </message>
     <message>
-      <source>Device Filters</source>
-      <comment>details (usb)</comment>
-      <translation>فیلترهای دستگاه</translation>
+        <source>Device Filters</source>
+        <comment>details (usb)</comment>
+        <translation>فیلترهای دستگاه</translation>
     </message>
     <message>
-      <source>USB Controller Inaccessible</source>
-      <comment>details (usb)</comment>
-      <translation>کنترلر یو اِس بی قابل دسترسی نیست</translation>
+        <source>USB Controller Inaccessible</source>
+        <comment>details (usb)</comment>
+        <translation>کنترلر یو اِس بی قابل دسترسی نیست</translation>
     </message>
     <message>
-      <source>Shared Folders</source>
-      <comment>details (shared folders)</comment>
-      <translation>پوشه های اشتراکی</translation>
+        <source>Shared Folders</source>
+        <comment>details (shared folders)</comment>
+        <translation>پوشه های اشتراکی</translation>
     </message>
     <message>
-      <source>Video Capture File</source>
-      <comment>details (display/video capture)</comment>
-      <translation>فیل ضبط ویدیو</translation>
+        <source>Video Capture File</source>
+        <comment>details (display/video capture)</comment>
+        <translation>فیل ضبط ویدیو</translation>
     </message>
     <message>
-      <source>Video Capture Attributes</source>
-      <comment>details (display/video capture)</comment>
-      <translation>صفات ضبط ویدیو</translation>
+        <source>Video Capture Attributes</source>
+        <comment>details (display/video capture)</comment>
+        <translation>صفات ضبط ویدیو</translation>
     </message>
     <message>
-      <source>Video Capture</source>
-      <comment>details (display/video capture)</comment>
-      <translation>ضبط ویدیو</translation>
+        <source>Video Capture</source>
+        <comment>details (display/video capture)</comment>
+        <translation>ضبط ویدیو</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details (display/video capture)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details (display/video capture)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>NAT Network, '%1'</source>
-      <comment>details (network)</comment>
-      <translation>شبکه NAT، '%1'</translation>
+        <source>NAT Network, '%1'</source>
+        <comment>details (network)</comment>
+        <translation>شبکه NAT، '%1'</translation>
     </message>
     <message>
-      <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
-      <translation>اندازه فریم: %1x%2, نرخ فریم: %3فریم بر ثانیه, نرخ بیت: %4کیلوبایت بر ثانیه</translation>
+        <source>Frame Size: %1x%2, Frame Rate: %3fps, Bit Rate: %4kbps</source>
+        <translation>اندازه فریم: %1x%2, نرخ فریم: %3فریم بر ثانیه, نرخ بیت: %4کیلوبایت بر ثانیه</translation>
     </message>
     <message>
-      <source>Minimal Paravirtualization</source>
-      <comment>details (system)</comment>
-      <translation>حداقل پارا مجازی سازی</translation>
+        <source>Minimal Paravirtualization</source>
+        <comment>details (system)</comment>
+        <translation>حداقل پارا مجازی سازی</translation>
     </message>
     <message>
-      <source>Hyper-V Paravirtualization</source>
-      <comment>details (system)</comment>
-      <translation>Hyper-V پارا مجازی سازی</translation>
+        <source>Hyper-V Paravirtualization</source>
+        <comment>details (system)</comment>
+        <translation>Hyper-V پارا مجازی سازی</translation>
     </message>
     <message>
-      <source>KVM Paravirtualization</source>
-      <comment>details (system)</comment>
-      <translation>KVM پارا مجازی سازی</translation>
+        <source>KVM Paravirtualization</source>
+        <comment>details (system)</comment>
+        <translation>KVM پارا مجازی سازی</translation>
     </message>
     <message>
-      <source>Scale-factor</source>
-      <comment>details (display)</comment>
-      <translation>ضریب-مقیاس</translation>
+        <source>Scale-factor</source>
+        <comment>details (display)</comment>
+        <translation>ضریب-مقیاس</translation>
     </message>
     <message>
-      <source>Unscaled HiDPI Video Output</source>
-      <comment>details (display)</comment>
-      <translation>خروجی ویدیو HiDPI مقیاس بندی نشده</translation>
+        <source>Unscaled HiDPI Video Output</source>
+        <comment>details (display)</comment>
+        <translation>خروجی ویدیو HiDPI مقیاس بندی نشده</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details (display/Unscaled HiDPI Video Output)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details (display/Unscaled HiDPI Video Output)</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>[Optical Drive]</source>
-      <comment>details (storage)</comment>
-      <translation>[درایو نوری]</translation>
+        <source>[Optical Drive]</source>
+        <comment>details (storage)</comment>
+        <translation>[درایو نوری]</translation>
     </message>
     <message>
-      <source>Generic Driver, '%1' { %2 }</source>
-      <comment>details (network)</comment>
-      <translation>درایور کلی، '%1' { %2 }</translation>
+        <source>Generic Driver, '%1' { %2 }</source>
+        <comment>details (network)</comment>
+        <translation>درایور کلی، '%1' { %2 }</translation>
     </message>
     <message>
-      <source>USB Controller</source>
-      <comment>details (usb)</comment>
-      <translation>کنترلر یو اِس بی</translation>
+        <source>USB Controller</source>
+        <comment>details (usb)</comment>
+        <translation>کنترلر یو اِس بی</translation>
     </message>
     <message>
-      <source>Menu-bar</source>
-      <comment>details (user interface)</comment>
-      <translation>نوار-منو</translation>
+        <source>Menu-bar</source>
+        <comment>details (user interface)</comment>
+        <translation>نوار-منو</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details (user interface/menu-bar)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details (user interface/menu-bar)</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details (user interface/menu-bar)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details (user interface/menu-bar)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Status-bar</source>
-      <comment>details (user interface)</comment>
-      <translation>نوار-وضعیت</translation>
+        <source>Status-bar</source>
+        <comment>details (user interface)</comment>
+        <translation>نوار-وضعیت</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details (user interface/status-bar)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details (user interface/status-bar)</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details (user interface/status-bar)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details (user interface/status-bar)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Mini-toolbar Position</source>
-      <comment>details (user interface)</comment>
-      <translation>موقعیت نوار ابزار کوچک</translation>
+        <source>Mini-toolbar Position</source>
+        <comment>details (user interface)</comment>
+        <translation>موقعیت نوار ابزار کوچک</translation>
     </message>
     <message>
-      <source>Top</source>
-      <comment>details (user interface/mini-toolbar position)</comment>
-      <translation>بالا</translation>
+        <source>Top</source>
+        <comment>details (user interface/mini-toolbar position)</comment>
+        <translation>بالا</translation>
     </message>
     <message>
-      <source>Bottom</source>
-      <comment>details (user interface/mini-toolbar position)</comment>
-      <translation>پایین</translation>
+        <source>Bottom</source>
+        <comment>details (user interface/mini-toolbar position)</comment>
+        <translation>پایین</translation>
     </message>
     <message>
-      <source>Mini-toolbar</source>
-      <comment>details (user interface)</comment>
-      <translation>نوار ابزار کوچک</translation>
+        <source>Mini-toolbar</source>
+        <comment>details (user interface)</comment>
+        <translation>نوار ابزار کوچک</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details (user interface/mini-toolbar)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details (user interface/mini-toolbar)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGMachinePreview</name>
     <message>
-      <source>Every 0.5 s</source>
-      <translation>هر 0.5 ثانیه</translation>
+        <source>Every 0.5 s</source>
+        <translation>هر 0.5 ثانیه</translation>
     </message>
     <message>
-      <source>Every 1 s</source>
-      <translation>هر 1 ثانیه</translation>
+        <source>Every 1 s</source>
+        <translation>هر 1 ثانیه</translation>
     </message>
     <message>
-      <source>Every 2 s</source>
-      <translation>هر 2 ثانیه</translation>
+        <source>Every 2 s</source>
+        <translation>هر 2 ثانیه</translation>
     </message>
     <message>
-      <source>Every 5 s</source>
-      <translation>هر 5 ثانیه</translation>
+        <source>Every 5 s</source>
+        <translation>هر 5 ثانیه</translation>
     </message>
     <message>
-      <source>Every 10 s</source>
-      <translation>هر 10 ثانیه</translation>
+        <source>Every 10 s</source>
+        <translation>هر 10 ثانیه</translation>
     </message>
     <message>
-      <source>Update disabled</source>
-      <translation>بروزرسانی غیرفعال شده</translation>
+        <source>Update disabled</source>
+        <translation>بروزرسانی غیرفعال شده</translation>
     </message>
     <message>
-      <source>No preview</source>
-      <translation>پیشنمایش ندارد</translation>
+        <source>No preview</source>
+        <translation>پیشنمایش ندارد</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsDisplay</name>
     <message>
-      <source>Maximum Guest Screen &Size:</source>
-      <translation>حداکثر اندازه &صفحه مهمان:</translation>
+        <source>Maximum Guest Screen &Size:</source>
+        <translation>حداکثر اندازه &صفحه مهمان:</translation>
     </message>
     <message>
-      <source>&Width:</source>
-      <translation>ع&رض:</translation>
+        <source>&Width:</source>
+        <translation>ع&رض:</translation>
     </message>
     <message>
-      <source>Specifies the maximum width which we would like the guest to use.</source>
-      <translation>حداکثر عرضی را که ما دوست داریم مهمان استفاده کند را مشخص میکند.</translation>
+        <source>Specifies the maximum width which we would like the guest to use.</source>
+        <translation type="obsolete">حداکثر عرضی را که ما دوست داریم مهمان استفاده کند را مشخص میکند.</translation>
     </message>
     <message>
-      <source>&Height:</source>
-      <translation>ار&تفاع:</translation>
+        <source>&Height:</source>
+        <translation>ار&تفاع:</translation>
     </message>
     <message>
-      <source>Specifies the maximum height which we would like the guest to use.</source>
-      <translation>حداکثر ارتفاعی را که ما دوست داریم مهمان استفاده کند را مشخص میکند.</translation>
+        <source>Specifies the maximum height which we would like the guest to use.</source>
+        <translation type="obsolete">حداکثر ارتفاعی را که ما دوست داریم مهمان استفاده کند را مشخص میکند.</translation>
     </message>
     <message>
-      <source>Automatic</source>
-      <comment>Maximum Guest Screen Size</comment>
-      <translation>خودکار</translation>
+        <source>Automatic</source>
+        <comment>Maximum Guest Screen Size</comment>
+        <translation>خودکار</translation>
     </message>
     <message>
-      <source>Suggest a reasonable maximum screen size to the guest. The guest will only see this suggestion when guest additions are installed.</source>
-      <translation>حداکثر اندازه معقول صفحه را به مهمان پیشنهاد میکند.مهمان فقط زمانی این پیشنهاد را میبیند که افزونه مهمان نصب شده باشد.</translation>
+        <source>Suggest a reasonable maximum screen size to the guest. The guest will only see this suggestion when guest additions are installed.</source>
+        <translation>حداکثر اندازه معقول صفحه را به مهمان پیشنهاد میکند.مهمان فقط زمانی این پیشنهاد را میبیند که افزونه مهمان نصب شده باشد.</translation>
     </message>
     <message>
-      <source>None</source>
-      <comment>Maximum Guest Screen Size</comment>
-      <translation>هیچیک</translation>
+        <source>None</source>
+        <comment>Maximum Guest Screen Size</comment>
+        <translation>هیچیک</translation>
     </message>
     <message>
-      <source>Do not attempt to limit the size of the guest screen.</source>
-      <translation>تلاشی برای محدودسازی اندازه صفحه مهمان نکن.</translation>
+        <source>Do not attempt to limit the size of the guest screen.</source>
+        <translation>تلاشی برای محدودسازی اندازه صفحه مهمان نکن.</translation>
     </message>
     <message>
-      <source>Hint</source>
-      <comment>Maximum Guest Screen Size</comment>
-      <translation>راهنما</translation>
+        <source>Hint</source>
+        <comment>Maximum Guest Screen Size</comment>
+        <translation>راهنما</translation>
     </message>
     <message>
-      <source>Suggest a maximum screen size to the guest. The guest will only see this suggestion when guest additions are installed.</source>
-      <translation>حداکثر اندازه صفحه را به مهمان پیشنهاد میکند.مهمان فقط زمانی این پیشنهاد را میبیند که افزونه مهمان نصب شده باشد.</translation>
+        <source>Suggest a maximum screen size to the guest. The guest will only see this suggestion when guest additions are installed.</source>
+        <translation>حداکثر اندازه صفحه را به مهمان پیشنهاد میکند.مهمان فقط زمانی این پیشنهاد را میبیند که افزونه مهمان نصب شده باشد.</translation>
     </message>
     <message>
-      <source>Machine Windows:</source>
-      <translation>پنجره های ماشین:</translation>
+        <source>Machine Windows:</source>
+        <translation>پنجره های ماشین:</translation>
     </message>
     <message>
-      <source>&Raise Window Under Mouse</source>
-      <translation>بالا بردن پنجره زیر ماوس&</translation>
+        <source>&Raise Window Under Mouse</source>
+        <translation>بالا بردن پنجره زیر ماوس&</translation>
     </message>
     <message>
-      <source>Holds the maximum width which we would like the guest to use.</source>
-      <translation>حداکثر عرضی را که می توانیم برای مهمان استفاده کنیم را حفظ میکند</translation>
+        <source>Holds the maximum width which we would like the guest to use.</source>
+        <translation>حداکثر عرضی را که می توانیم برای مهمان استفاده کنیم را حفظ میکند</translation>
     </message>
     <message>
-      <source>Holds the maximum height which we would like the guest to use.</source>
-      <translation>حداکثر ارتفاعی را که می توانیم برای مهمان استفاده کنیم را حفظ میکند</translation>
+        <source>Holds the maximum height which we would like the guest to use.</source>
+        <translation>حداکثر ارتفاعی را که می توانیم برای مهمان استفاده کنیم را حفظ میکند</translation>
     </message>
     <message>
-      <source>When checked, machine windows will be raised when the mouse pointer moves over them.</source>
-      <translation>وقتیکه انتخاب شده،پنجره ماشین،هنگامیکه مکان نمای ماوس روی آنها میرود بالا برده میشود</translation>
+        <source>When checked, machine windows will be raised when the mouse pointer moves over them.</source>
+        <translation>وقتیکه انتخاب شده،پنجره ماشین،هنگامیکه مکان نمای ماوس روی آنها میرود بالا برده میشود</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsExtension</name>
     <message>
-      <source>&Extension Packages:</source>
-      <translation>&بسته افزونه:</translation>
+        <source>&Extension Packages:</source>
+        <translation type="obsolete">&بسته افزونه:</translation>
     </message>
     <message>
-      <source>Lists all installed packages.</source>
-      <translation>لیست تمام بسته های نصب شده.</translation>
+        <source>Lists all installed packages.</source>
+        <translation>لیست تمام بسته های نصب شده.</translation>
     </message>
     <message>
-      <source>Active</source>
-      <translation>فعال</translation>
+        <source>Active</source>
+        <translation>فعال</translation>
     </message>
     <message>
-      <source>Name</source>
-      <translation>نام</translation>
+        <source>Name</source>
+        <translation>نام</translation>
     </message>
     <message>
-      <source>Version</source>
-      <translation>نسخه</translation>
+        <source>Version</source>
+        <translation>نسخه</translation>
     </message>
     <message>
-      <source>Add package</source>
-      <translation>افزودن بسته</translation>
+        <source>Add package</source>
+        <translation type="obsolete">افزودن بسته</translation>
     </message>
     <message>
-      <source>Remove package</source>
-      <translation>حذف بسته</translation>
+        <source>Remove package</source>
+        <translation type="obsolete">حذف بسته</translation>
     </message>
     <message>
-      <source>Select an extension package file</source>
-      <translation>یک فایل بسته افزونه انتخاب کنید</translation>
+        <source>Select an extension package file</source>
+        <translation>یک فایل بسته افزونه انتخاب کنید</translation>
     </message>
     <message>
-      <source>Extension package files (%1)</source>
-      <translation>فایل بسته افزونه (%1)</translation>
+        <source>Extension package files (%1)</source>
+        <translation>فایل بسته افزونه (%1)</translation>
     </message>
     <message>
-      <source>Extensions</source>
-      <translation>افزونه ها</translation>
+        <source>Extensions</source>
+        <translation>افزونه ها</translation>
     </message>
     <message>
-      <source>&Extension Packages</source>
-      <translation>&بسته افزونه</translation>
+        <source>&Extension Packages</source>
+        <translation>&بسته افزونه</translation>
     </message>
     <message>
-      <source>Add Package</source>
-      <translation>افزودن بسته</translation>
+        <source>Add Package</source>
+        <translation>افزودن بسته</translation>
     </message>
     <message>
-      <source>Remove Package</source>
-      <translation>حذف بسته</translation>
+        <source>Remove Package</source>
+        <translation>حذف بسته</translation>
     </message>
     <message>
-      <source>Adds new package.</source>
-      <translation>افزودن بسته جدید</translation>
+        <source>Adds new package.</source>
+        <translation>افزودن بسته جدید</translation>
     </message>
     <message>
-      <source>Removes selected package.</source>
-      <translation>حذف بسته انتخاب شده</translation>
+        <source>Removes selected package.</source>
+        <translation>حذف بسته انتخاب شده</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsGeneral</name>
     <message>
-      <source>Holds the path to the default virtual machine folder. This folder is used, if not explicitly specified otherwise, when creating new virtual machines.</source>
-      <translation>مسیر را به پوشه پیش فرض ماشین مجازی را نشان میدهد. این پوشه ،اگر صریحا مشخص نشده در غیر اینصورت، هنگام ایجاد ماشین مجازی جدید بکاررفته است.</translation>
+        <source>Holds the path to the default virtual machine folder. This folder is used, if not explicitly specified otherwise, when creating new virtual machines.</source>
+        <translation>مسیر را به پوشه پیش فرض ماشین مجازی را نشان میدهد. این پوشه ،اگر صریحا مشخص نشده در غیر اینصورت، هنگام ایجاد ماشین مجازی جدید بکاررفته است.</translation>
     </message>
     <message>
-      <source>Holds the path to the library that provides authentication for Remote Display (VRDP) clients.</source>
-      <translation>مسیری به کتابخانه ای که تایید اعتبار برای نمایش ریموت کلاینت  (VRDP) ارائه میکند،را نشان میدهد.</translation>
+        <source>Holds the path to the library that provides authentication for Remote Display (VRDP) clients.</source>
+        <translation>مسیری به کتابخانه ای که تایید اعتبار برای نمایش ریموت کلاینت  (VRDP) ارائه میکند،را نشان میدهد.</translation>
     </message>
     <message>
-      <source>Default &Machine Folder:</source>
-      <translation>پوشه پیش فرض م&اشین:</translation>
+        <source>Default &Machine Folder:</source>
+        <translation>پوشه پیش فرض م&اشین:</translation>
     </message>
     <message>
-      <source>V&RDP Authentication Library:</source>
-      <translation>کتابخانه تایید اعتبار V&RDP:</translation>
+        <source>V&RDP Authentication Library:</source>
+        <translation>کتابخانه تایید اعتبار V&RDP:</translation>
     </message>
     <message>
-      <source>When checked, the application will provide an icon with the context menu in the system tray.</source>
-      <translation>وقتیکه انتخاب شده،برنامه یک آیکون با منوی زمینه در کنار ساعت ارائه میکند.</translation>
+        <source>When checked, the application will provide an icon with the context menu in the system tray.</source>
+        <translation type="obsolete">وقتیکه انتخاب شده،برنامه یک آیکون با منوی زمینه در کنار ساعت ارائه میکند.</translation>
     </message>
     <message>
-      <source>&Show System Tray Icon</source>
-      <translation>نمایش آیکون کنار س&اعت</translation>
+        <source>&Show System Tray Icon</source>
+        <translation type="obsolete">نمایش آیکون کنار س&اعت</translation>
     </message>
     <message>
-      <source>&Auto show Dock and Menubar in fullscreen</source>
-      <translation>نمایش خودکار دوک و &نوارمنو در تمام صفحه</translation>
+        <source>&Auto show Dock and Menubar in fullscreen</source>
+        <translation type="obsolete">نمایش خودکار دوک و &نوارمنو در تمام صفحه</translation>
     </message>
     <message>
-      <source>When checked, the host screen saver will be disabled whenever a virtual machine is running.</source>
-      <translation>وقتیکه انتخاب شده،محافظ صفحه نمایش میزبان هرگاه که ماشین مجازی در اِجرا است غیرفعال میشود.</translation>
+        <source>When checked, the host screen saver will be disabled whenever a virtual machine is running.</source>
+        <translation type="obsolete">وقتیکه انتخاب شده،محافظ صفحه نمایش میزبان هرگاه که ماشین مجازی در اِجرا است غیرفعال میشود.</translation>
     </message>
     <message>
-      <source>Disable Host &ScreenSaver</source>
-      <translation>غیر&فعالسازی محافظ صفحه نمایش میزبان</translation>
+        <source>Disable Host &ScreenSaver</source>
+        <translation type="obsolete">غیر&فعالسازی محافظ صفحه نمایش میزبان</translation>
     </message>
     <message>
-      <source>&Dock and Menubar:</source>
-      <translation>&داک و نوار منو:</translation>
+        <source>&Dock and Menubar:</source>
+        <translation type="obsolete">&داک و نوار منو:</translation>
     </message>
     <message>
-      <source>Auto-Show in Fullscreen</source>
-      <translation>نمایش خودکار در تمام صفحه</translation>
+        <source>Auto-Show in Fullscreen</source>
+        <translation type="obsolete">نمایش خودکار در تمام صفحه</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>وقتیکه انتخاب شده،داک میزبان و نوار منو وقتیکه ماشین در حالت تمام صفحه است نشان داده خواهد شد.</translation>
+        <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>
     </message>
     <message>
-      <source>&Host Screensaver:</source>
-      <translation>محافظ صفحه نمایش میزبان&:</translation>
+        <source>&Host Screensaver:</source>
+        <translation type="obsolete">محافظ صفحه نمایش میزبان&:</translation>
     </message>
     <message>
-      <source>When checked, the host screensaver will be disabled whenever a virtual machine is running.</source>
-      <translation>وقتیکه انتخاب شده،محافظ صفحه نمایش میزبان هرگاه ماشین مجازی در اجرا هست غیرفعال خواهد شد.</translation>
+        <source>When checked, the host screensaver will be disabled whenever a virtual machine is running.</source>
+        <translation>وقتیکه انتخاب شده،محافظ صفحه نمایش میزبان هرگاه ماشین مجازی در اجرا هست غیرفعال خواهد شد.</translation>
     </message>
     <message>
-      <source>Disable When Running Virtual Machines</source>
-      <translation>زمانیکه در حال اجرای ماشین های مجازی هست غیرفعال کن</translation>
+        <source>Disable When Running Virtual Machines</source>
+        <translation type="obsolete">زمانیکه در حال اجرای ماشین های مجازی هست غیرفعال کن</translation>
     </message>
     <message>
-      <source>Host Screensaver:</source>
-      <translation>محافظ صفحه نمایش میزبان:</translation>
+        <source>Host Screensaver:</source>
+        <translation>محافظ صفحه نمایش میزبان:</translation>
     </message>
     <message>
-      <source>&Disable When Running Virtual Machines</source>
-      <translation>وقتی ماشین مجازی فعال است غیر فعال کن&</translation>
+        <source>&Disable When Running Virtual Machines</source>
+        <translation>وقتی ماشین مجازی فعال است غیر فعال کن&</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsInput</name>
     <message>
-      <source>Host &Key:</source>
-      <translation>کلید میزب&ان:</translation>
+        <source>Host &Key:</source>
+        <translation type="obsolete">کلید میزب&ان:</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>کلید بکاررفته بعنوان یک کلیدمیزبان در پنجره ماشین مجازی را نشان میدهد.فیلد ورودی را فعال کرده و کلید میزبان جدید را فشاردهید.توجه کنید که آن الفبایی است،حرکت های نشانگر و کلیدهای ویرایش نمیتواند استفاده شود.</translation>
+        <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>
     </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>
-      <translation>وقتیکه انتخاب شده،صفحه کلید هربار که پنجره ماشین مجازی فعال شود آن را ضبط میکند.وقتیکه صفحه کلید ضبط شد،همه ضربات صفحه کلید شامل کلیدهای سیستمی مثل آلت+تب داخل ماشین مجازی هدایت میشوند.</translation>
+        <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>
+        <translation>وقتیکه انتخاب شده،صفحه کلید هربار که پنجره ماشین مجازی فعال شود آن را ضبط میکند.وقتیکه صفحه کلید ضبط شد،همه ضربات صفحه کلید شامل کلیدهای سیستمی مثل آلت+تب داخل ماشین مجازی هدایت میشوند.</translation>
     </message>
     <message>
-      <source>&Auto Capture Keyboard</source>
-      <translation>ضبط &خودکار صفحه کلید</translation>
+        <source>&Auto Capture Keyboard</source>
+        <translation>ضبط &خودکار صفحه کلید</translation>
     </message>
     <message>
-      <source>Reset host combination</source>
-      <translation>ریست میزبان ترکیبی</translation>
+        <source>Reset host combination</source>
+        <translation type="obsolete">ریست میزبان ترکیبی</translation>
     </message>
     <message>
-      <source>Resets the key combination used as the host combination in the VM window.</source>
-      <translation>ریست کلید ترکیبی بکاررفته بعنوان میزبان ترکیبی در پنجره ماشین مجازی.</translation>
+        <source>Resets the key combination used as the host combination in the VM window.</source>
+        <translation type="obsolete">ریست کلید ترکیبی بکاررفته بعنوان میزبان ترکیبی در پنجره ماشین مجازی.</translation>
     </message>
     <message>
-      <source>Host Key Combination</source>
-      <translation>کلید ترکیبی میزبان</translation>
+        <source>Host Key Combination</source>
+        <translation>کلید ترکیبی میزبان</translation>
     </message>
     <message>
-      <source>Some items have the same shortcuts assigned.</source>
-      <translation>به برخی از موارد همین کلید های میانبر اختصاص یافته است.</translation>
+        <source>Some items have the same shortcuts assigned.</source>
+        <translation>به برخی از موارد همین کلید های میانبر اختصاص یافته است.</translation>
     </message>
     <message>
-      <source>&VirtualBox Manager</source>
-      <translation>مدیر &ویرچوال باکس</translation>
+        <source>&VirtualBox Manager</source>
+        <translation>مدیر &ویرچوال باکس</translation>
     </message>
     <message>
-      <source>Virtual &Machine</source>
-      <translation>&ماشین مجازی</translation>
+        <source>Virtual &Machine</source>
+        <translation>&ماشین مجازی</translation>
     </message>
     <message>
-      <source>Lists all the available shortcuts which can be configured.</source>
-      <translation>لیست همه میانبرهای موجود که میتواند پیکربندی شود.</translation>
+        <source>Lists all the available shortcuts which can be configured.</source>
+        <translation type="obsolete">لیست همه میانبرهای موجود که میتواند پیکربندی شود.</translation>
     </message>
     <message>
-      <source>Enter a sequence to filter the shortcut list.</source>
-      <translation>یک دنباله برای فیلتر لیست میانبر وارد کنید</translation>
+        <source>Enter a sequence to filter the shortcut list.</source>
+        <translation type="obsolete">یک دنباله برای فیلتر لیست میانبر وارد کنید</translation>
     </message>
     <message>
-      <source>Lists all available shortcuts which can be configured.</source>
-      <translation>لیست همه میانبرهای موجود که میتواند پیکربندی شود</translation>
+        <source>Lists all available shortcuts which can be configured.</source>
+        <translation>لیست همه میانبرهای موجود که میتواند پیکربندی شود</translation>
     </message>
     <message>
-      <source>Holds a sequence to filter the shortcut list.</source>
-      <translation>یک توالی برای فیلتر لیست میانبر ها نگه میدارد</translation>
+        <source>Holds a sequence to filter the shortcut list.</source>
+        <translation>یک توالی برای فیلتر لیست میانبر ها نگه میدارد</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsLanguage</name>
     <message>
-      <source> (built-in)</source>
-      <comment>Language</comment>
-      <translation> (توکار)</translation>
+        <source> (built-in)</source>
+        <comment>Language</comment>
+        <translation> (توکار)</translation>
     </message>
     <message>
-      <source><unavailable></source>
-      <comment>Language</comment>
-      <translation><دردسترس نیست></translation>
+        <source><unavailable></source>
+        <comment>Language</comment>
+        <translation><دردسترس نیست></translation>
     </message>
     <message>
-      <source><unknown></source>
-      <comment>Author(s)</comment>
-      <translation><ناشناخته></translation>
+        <source><unknown></source>
+        <comment>Author(s)</comment>
+        <translation><ناشناخته></translation>
     </message>
     <message>
-      <source>Default</source>
-      <comment>Language</comment>
-      <translation>پیش فرض</translation>
+        <source>Default</source>
+        <comment>Language</comment>
+        <translation>پیش فرض</translation>
     </message>
     <message>
-      <source>Language:</source>
-      <translation>زبان:</translation>
+        <source>Language:</source>
+        <translation>زبان:</translation>
     </message>
     <message>
-      <source>&Interface Language:</source>
-      <translation>رابط& زبان:</translation>
+        <source>&Interface Language:</source>
+        <translation type="obsolete">رابط& زبان:</translation>
     </message>
     <message>
-      <source>Lists all available user interface languages. The effective language is written in <b>bold</b>. Select <i>Default</i> to reset to the system default language.</source>
-      <translation>لیست همه رابط های زبان موجود است. زبان های موثر در آن <b>پر رنگ</b> نوشته شده اند گزینه <i>پیش فرض</i> را برای ریست به زبان پیش فرض سیستم انتخاب کنید.</translation>
+        <source>Lists all available user interface languages. The effective language is written in <b>bold</b>. Select <i>Default</i> to reset to the system default language.</source>
+        <translation>لیست همه رابط های زبان موجود است. زبان های موثر در آن <b>پر رنگ</b> نوشته شده اند گزینه <i>پیش فرض</i> را برای ریست به زبان پیش فرض سیستم انتخاب کنید.</translation>
     </message>
     <message>
-      <source>Name</source>
-      <translation>نام</translation>
+        <source>Name</source>
+        <translation>نام</translation>
     </message>
     <message>
-      <source>Id</source>
-      <translation>شناسه</translation>
+        <source>Id</source>
+        <translation>شناسه</translation>
     </message>
     <message>
-      <source>Language</source>
-      <translation>زبان</translation>
+        <source>Language</source>
+        <translation>زبان</translation>
     </message>
     <message>
-      <source>Author</source>
-      <translation>نویسنده</translation>
+        <source>Author</source>
+        <translation>نویسنده</translation>
     </message>
     <message>
-      <source>Author(s):</source>
-      <translation>مترجم:</translation>
+        <source>Author(s):</source>
+        <translation>مترجم:</translation>
     </message>
     <message>
-      <source>&Interface Languages</source>
-      <translation>&رابط زبان</translation>
+        <source>&Interface Languages</source>
+        <translation>&رابط زبان</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsNetwork</name>
     <message>
-      <source>host IPv4 address of <b>%1</b> is wrong</source>
-      <translation>میزبان IPv4 آدرس <b>%1</b> اشتباه است</translation>
+        <source>host IPv4 address of <b>%1</b> is wrong</source>
+        <translation type="obsolete">میزبان IPv4 آدرس <b>%1</b> اشتباه است</translation>
     </message>
     <message>
-      <source>host IPv4 network mask of <b>%1</b> is wrong</source>
-      <translation>میزبان IPv4 ماسک شبکه <b>%1</b> اشتباه است</translation>
+        <source>host IPv4 network mask of <b>%1</b> is wrong</source>
+        <translation type="obsolete">میزبان IPv4 ماسک شبکه <b>%1</b> اشتباه است</translation>
     </message>
     <message>
-      <source>host IPv6 address of <b>%1</b> is wrong</source>
-      <translation>میزبان IPv6 آدرس <b>%1</b> اشتباه است</translation>
+        <source>host IPv6 address of <b>%1</b> is wrong</source>
+        <translation type="obsolete">میزبان IPv6 آدرس <b>%1</b> اشتباه است</translation>
     </message>
     <message>
-      <source>DHCP server address of <b>%1</b> is wrong</source>
-      <translation>آدرس سرور DHCP <b>%1</b> اشتباه است</translation>
+        <source>DHCP server address of <b>%1</b> is wrong</source>
+        <translation type="obsolete">آدرس سرور DHCP <b>%1</b> اشتباه است</translation>
     </message>
     <message>
-      <source>DHCP server network mask of <b>%1</b> is wrong</source>
-      <translation>ماسک شبکه سرور دی اِچ سی پی <b>%1</b> اشتباه است</translation>
+        <source>DHCP server network mask of <b>%1</b> is wrong</source>
+        <translation type="obsolete">ماسک شبکه سرور دی اِچ سی پی <b>%1</b> اشتباه است</translation>
     </message>
     <message>
-      <source>DHCP lower address bound of <b>%1</b> is wrong</source>
-      <translation>محدوده آدرس پایین تر DHCP <b>%1</b> اشتباه است</translation>
+        <source>DHCP lower address bound of <b>%1</b> is wrong</source>
+        <translation type="obsolete">محدوده آدرس پایین تر DHCP <b>%1</b> اشتباه است</translation>
     </message>
     <message>
-      <source>DHCP upper address bound of <b>%1</b> is wrong</source>
-      <translation>محدوده آدرس بالاتر DHCP <b>%1</b> اشتباه است</translation>
+        <source>DHCP upper address bound of <b>%1</b> is wrong</source>
+        <translation type="obsolete">محدوده آدرس بالاتر DHCP <b>%1</b> اشتباه است</translation>
     </message>
     <message>
-      <source>Adapter</source>
-      <translation>آداپتور</translation>
+        <source>Adapter</source>
+        <translation>آداپتور</translation>
     </message>
     <message>
-      <source>Automatically configured</source>
-      <comment>interface</comment>
-      <translation>خودکار پیکربندی شده</translation>
+        <source>Automatically configured</source>
+        <comment>interface</comment>
+        <translation>خودکار پیکربندی شده</translation>
     </message>
     <message>
-      <source>Manually configured</source>
-      <comment>interface</comment>
-      <translation>دستی پیکربندی شده</translation>
+        <source>Manually configured</source>
+        <comment>interface</comment>
+        <translation>دستی پیکربندی شده</translation>
     </message>
     <message>
-      <source>IPv4 Address</source>
-      <translation>آدرس IPv4</translation>
+        <source>IPv4 Address</source>
+        <translation>آدرس IPv4</translation>
     </message>
     <message>
-      <source>Not set</source>
-      <comment>address</comment>
-      <translation>تنظیم نشده</translation>
+        <source>Not set</source>
+        <comment>address</comment>
+        <translation>تنظیم نشده</translation>
     </message>
     <message>
-      <source>IPv4 Network Mask</source>
-      <translation>ماسک شبکه IPv4</translation>
+        <source>IPv4 Network Mask</source>
+        <translation>ماسک شبکه IPv4</translation>
     </message>
     <message>
-      <source>Not set</source>
-      <comment>mask</comment>
-      <translation>تنظیم نشده</translation>
+        <source>Not set</source>
+        <comment>mask</comment>
+        <translation>تنظیم نشده</translation>
     </message>
     <message>
-      <source>IPv6 Address</source>
-      <translation>آدرس IPv6</translation>
+        <source>IPv6 Address</source>
+        <translation>آدرس IPv6</translation>
     </message>
     <message>
-      <source>IPv6 Network Mask Length</source>
-      <translation>طول ماسک شبکه IPv6</translation>
+        <source>IPv6 Network Mask Length</source>
+        <translation>طول ماسک شبکه IPv6</translation>
     </message>
     <message>
-      <source>Not set</source>
-      <comment>length</comment>
-      <translation>تنظیم نشده</translation>
+        <source>Not set</source>
+        <comment>length</comment>
+        <translation>تنظیم نشده</translation>
     </message>
     <message>
-      <source>DHCP Server</source>
-      <translation>سرور DHCP</translation>
+        <source>DHCP Server</source>
+        <translation>سرور DHCP</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>server</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>server</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>server</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>server</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Address</source>
-      <translation>آدرس</translation>
+        <source>Address</source>
+        <translation>آدرس</translation>
     </message>
     <message>
-      <source>Network Mask</source>
-      <translation>ماسک شبکه</translation>
+        <source>Network Mask</source>
+        <translation>ماسک شبکه</translation>
     </message>
     <message>
-      <source>Lower Bound</source>
-      <translation>محدوده پایین تر</translation>
+        <source>Lower Bound</source>
+        <translation>محدوده پایین تر</translation>
     </message>
     <message>
-      <source>Not set</source>
-      <comment>bound</comment>
-      <translation>تنظیم نشده</translation>
+        <source>Not set</source>
+        <comment>bound</comment>
+        <translation>تنظیم نشده</translation>
     </message>
     <message>
-      <source>Upper Bound</source>
-      <translation>محدوده بالاتر</translation>
+        <source>Upper Bound</source>
+        <translation>محدوده بالاتر</translation>
     </message>
     <message>
-      <source>&Add host-only network</source>
-      <translation>افزودن فقط-می&زبان شبکه</translation>
+        <source>&Add host-only network</source>
+        <translation type="obsolete">افزودن فقط-می&زبان شبکه</translation>
     </message>
     <message>
-      <source>&Remove host-only network</source>
-      <translation>حذف &شبکه فقط-میزبان</translation>
+        <source>&Remove host-only network</source>
+        <translation type="obsolete">حذف &شبکه فقط-میزبان</translation>
     </message>
     <message>
-      <source>&Edit host-only network</source>
-      <translation>ویرایش فقط-م&یزبان شبکه</translation>
+        <source>&Edit host-only network</source>
+        <translation type="obsolete">ویرایش فقط-م&یزبان شبکه</translation>
     </message>
     <message>
-      <source>&Host-only Networks:</source>
-      <translation>شبکه های &فقط-میزبان:</translation>
+        <source>&Host-only Networks:</source>
+        <translation type="obsolete">شبکه های &فقط-میزبان:</translation>
     </message>
     <message>
-      <source>Lists all available host-only networks.</source>
-      <translation>لیست همه شبکه های فقط-میزبان موجود.</translation>
+        <source>Lists all available host-only networks.</source>
+        <translation>لیست همه شبکه های فقط-میزبان موجود.</translation>
     </message>
     <message>
-      <source>Name</source>
-      <translation>نام</translation>
+        <source>Name</source>
+        <translation>نام</translation>
     </message>
     <message>
-      <source>Networking</source>
-      <translation>شبکه سازی</translation>
+        <source>Networking</source>
+        <translation>شبکه سازی</translation>
     </message>
     <message>
-      <source>&NAT Networks</source>
-      <translation>&شبکه های NAT</translation>
+        <source>&NAT Networks</source>
+        <translation>&شبکه های NAT</translation>
     </message>
     <message>
-      <source>Lists all available NAT networks.</source>
-      <translation>لیست تمام شبکه های NAT .</translation>
+        <source>Lists all available NAT networks.</source>
+        <translation>لیست تمام شبکه های NAT .</translation>
     </message>
     <message>
-      <source>&Host-only Networks</source>
-      <translation>شبکه های& فقط-میزبان</translation>
+        <source>&Host-only Networks</source>
+        <translation>شبکه های& فقط-میزبان</translation>
     </message>
     <message>
-      <source>No new name specified for the NAT network previously called <b>%1</b>.</source>
-      <translation>هیچ نام جدیدی برای شبکه NAT که قبلا <b>%1</b> نامیده می شد تعیین نشده است.</translation>
+        <source>No new name specified for the NAT network previously called <b>%1</b>.</source>
+        <translation>هیچ نام جدیدی برای شبکه NAT که قبلا <b>%1</b> نامیده می شد تعیین نشده است.</translation>
     </message>
     <message>
-      <source>No CIDR specified for the NAT network <b>%1</b>.</source>
-      <translation>هیچ CIDR برای شبکه NAT  <b>%1</b> تعیین نشده است.</translation>
+        <source>No CIDR specified for the NAT network <b>%1</b>.</source>
+        <translation>هیچ CIDR برای شبکه NAT  <b>%1</b> تعیین نشده است.</translation>
     </message>
     <message>
-      <source>No CIDR specified for the NAT network previously called <b>%1</b>.</source>
-      <translation>هیچ CIDR برای شبکه NAT که قبلا <b>%1</b> نامیده میشد تعیین نشده است.</translation>
+        <source>No CIDR specified for the NAT network previously called <b>%1</b>.</source>
+        <translation>هیچ CIDR برای شبکه NAT که قبلا <b>%1</b> نامیده میشد تعیین نشده است.</translation>
     </message>
     <message>
-      <source>Invalid CIDR specified (<i>%1</i>) for the NAT network <b>%2</b>.</source>
-      <translation>مقدار CIDR نامعتبر (<i>%1</i>) برای شبکه the <b>%2</b> تعیین شده است.</translation>
+        <source>Invalid CIDR specified (<i>%1</i>) for the NAT network <b>%2</b>.</source>
+        <translation>مقدار CIDR نامعتبر (<i>%1</i>) برای شبکه the <b>%2</b> تعیین شده است.</translation>
     </message>
     <message>
-      <source>Invalid CIDR specified (<i>%1</i>) for the NAT network previously called <b>%2</b>.</source>
-      <translation>مقدار CIDR نامعتبر (<i>%1</i>) برای شبکه NAT که قبلا <b>%2</b> نامیده می شد تعیین شده است.</translation>
+        <source>Invalid CIDR specified (<i>%1</i>) for the NAT network previously called <b>%2</b>.</source>
+        <translation>مقدار CIDR نامعتبر (<i>%1</i>) برای شبکه NAT که قبلا <b>%2</b> نامیده می شد تعیین شده است.</translation>
     </message>
     <message>
-      <source>Network Name</source>
-      <translation>نام شبکه</translation>
+        <source>Network Name</source>
+        <translation>نام شبکه</translation>
     </message>
     <message>
-      <source>[empty]</source>
-      <translation>[خالی]</translation>
+        <source>[empty]</source>
+        <translation>[خالی]</translation>
     </message>
     <message>
-      <source>%1 (renamed from %2)</source>
-      <translation>%1 (تغییرنام داد به %2)</translation>
+        <source>%1 (renamed from %2)</source>
+        <translation>%1 (تغییرنام داد به %2)</translation>
     </message>
     <message>
-      <source>Old Network Name</source>
-      <translation>نام قدیمی شبکه</translation>
+        <source>Old Network Name</source>
+        <translation>نام قدیمی شبکه</translation>
     </message>
     <message>
-      <source>New Network Name</source>
-      <translation>نام جدید شبکه</translation>
+        <source>New Network Name</source>
+        <translation>نام جدید شبکه</translation>
     </message>
     <message>
-      <source>Network CIDR</source>
-      <translation>شبکه CIDR</translation>
+        <source>Network CIDR</source>
+        <translation>شبکه CIDR</translation>
     </message>
     <message>
-      <source>Supports DHCP</source>
-      <translation>پشتیبانی از DHCP</translation>
+        <source>Supports DHCP</source>
+        <translation>پشتیبانی از DHCP</translation>
     </message>
     <message>
-      <source>yes</source>
-      <translation>بله</translation>
+        <source>yes</source>
+        <translation>بله</translation>
     </message>
     <message>
-      <source>no</source>
-      <translation>خیر</translation>
+        <source>no</source>
+        <translation>خیر</translation>
     </message>
     <message>
-      <source>Supports IPv6</source>
-      <translation>پشتیبانی از IPv6</translation>
+        <source>Supports IPv6</source>
+        <translation>پشتیبانی از IPv6</translation>
     </message>
     <message>
-      <source>Default IPv6 route</source>
-      <translation>مسیر پیش فرض IPv6</translation>
+        <source>Default IPv6 route</source>
+        <translation>مسیر پیش فرض IPv6</translation>
     </message>
     <message>
-      <source>Host interface <b>%1</b> does not currently have a valid IPv4 address.</source>
-      <translation>رابط میزبان <b>%1</b> اکنون آدرس IPv4 معتبر ندارد.</translation>
+        <source>Host interface <b>%1</b> does not currently have a valid IPv4 address.</source>
+        <translation>رابط میزبان <b>%1</b> اکنون آدرس IPv4 معتبر ندارد.</translation>
     </message>
     <message>
-      <source>Host interface <b>%1</b> does not currently have a valid IPv4 network mask.</source>
-      <translation>رابط میزبان <b>%1</b> اکنون مسک شبکه IPv4 معتبر ندارد.</translation>
+        <source>Host interface <b>%1</b> does not currently have a valid IPv4 network mask.</source>
+        <translation>رابط میزبان <b>%1</b> اکنون مسک شبکه IPv4 معتبر ندارد.</translation>
     </message>
     <message>
-      <source>Host interface <b>%1</b> does not currently have a valid IPv6 address.</source>
-      <translation>رابط میزبان <b>%1</b> اکنون آدرس IPv6 معتبر ندارد.</translation>
+        <source>Host interface <b>%1</b> does not currently have a valid IPv6 address.</source>
+        <translation>رابط میزبان <b>%1</b> اکنون آدرس IPv6 معتبر ندارد.</translation>
     </message>
     <message>
-      <source>Host interface <b>%1</b> does not currently have a valid DHCP server address.</source>
-      <translation>رابط میزبان <b>%1</b> اکنون آدرس سرور DHCP معتبر ندارد.</translation>
+        <source>Host interface <b>%1</b> does not currently have a valid DHCP server address.</source>
+        <translation>رابط میزبان <b>%1</b> اکنون آدرس سرور DHCP معتبر ندارد.</translation>
     </message>
     <message>
-      <source>Host interface <b>%1</b> does not currently have a valid DHCP server mask.</source>
-      <translation>رابط میزبان <b>%1</b> اکنون سرور ماسک DHCP معتبر ندارد.</translation>
+        <source>Host interface <b>%1</b> does not currently have a valid DHCP server mask.</source>
+        <translation>رابط میزبان <b>%1</b> اکنون سرور ماسک DHCP معتبر ندارد.</translation>
     </message>
     <message>
-      <source>Host interface <b>%1</b> does not currently have a valid DHCP server lower address bound.</source>
-      <translation>رابط میزبان <b>%1</b> محدوده آدرس سرور پایین تر DHCP معتبر ندارد.</translation>
+        <source>Host interface <b>%1</b> does not currently have a valid DHCP server lower address bound.</source>
+        <translation>رابط میزبان <b>%1</b> محدوده آدرس سرور پایین تر DHCP معتبر ندارد.</translation>
     </message>
     <message>
-      <source>Host interface <b>%1</b> does not currently have a valid DHCP server upper address bound.</source>
-      <translation>رابط میزبان <b>%1</b> محدوده آدرس بالاتر سرور DHCP معتبر ندارد.</translation>
+        <source>Host interface <b>%1</b> does not currently have a valid DHCP server upper address bound.</source>
+        <translation>رابط میزبان <b>%1</b> محدوده آدرس بالاتر سرور DHCP معتبر ندارد.</translation>
     </message>
     <message>
-      <source>The name <b>%1</b> is being used for several NAT networks.</source>
-      <translation>نام <b>%1</b> درحال استفاده برای چندین شبکه NAT میباشد.</translation>
+        <source>The name <b>%1</b> is being used for several NAT networks.</source>
+        <translation>نام <b>%1</b> درحال استفاده برای چندین شبکه NAT میباشد.</translation>
     </message>
     <message>
-      <source>Active</source>
-      <comment>NAT network</comment>
-      <translation>فعال</translation>
+        <source>Active</source>
+        <comment>NAT network</comment>
+        <translation>فعال</translation>
     </message>
     <message>
-      <source>&Add NAT network</source>
-      <translation>&افزودن شبکه NAT</translation>
+        <source>&Add NAT network</source>
+        <translation type="obsolete">&افزودن شبکه NAT</translation>
     </message>
     <message>
-      <source>&Remove NAT network</source>
-      <translation>&حذف شبکه NAT</translation>
+        <source>&Remove NAT network</source>
+        <translation type="obsolete">&حذف شبکه NAT</translation>
     </message>
     <message>
-      <source>&Edit NAT network</source>
-      <translation>&ویرایش شبکه NAT</translation>
+        <source>&Edit NAT network</source>
+        <translation type="obsolete">&ویرایش شبکه NAT</translation>
     </message>
     <message>
-      <source>Add NAT Network</source>
-      <translation>افزودن شبکه NAT</translation>
+        <source>Add NAT Network</source>
+        <translation>افزودن شبکه NAT</translation>
     </message>
     <message>
-      <source>Remove NAT Network</source>
-      <translation>حذف شبکه NAT</translation>
+        <source>Remove NAT Network</source>
+        <translation>حذف شبکه NAT</translation>
     </message>
     <message>
-      <source>Edit NAT Network</source>
-      <translation>ویرایش شبکه NAT</translation>
+        <source>Edit NAT Network</source>
+        <translation>ویرایش شبکه NAT</translation>
     </message>
     <message>
-      <source>Adds new NAT network.</source>
-      <translation>افزودن شبکه جدید نَت</translation>
+        <source>Adds new NAT network.</source>
+        <translation>افزودن شبکه جدید نَت</translation>
     </message>
     <message>
-      <source>Removes selected NAT network.</source>
-      <translation>حذف شبکه نَت انتخاب شده</translation>
+        <source>Removes selected NAT network.</source>
+        <translation>حذف شبکه نَت انتخاب شده</translation>
     </message>
     <message>
-      <source>Edits selected NAT network.</source>
-      <translation>ویرایش شبکه نَت انتخاب شده</translation>
+        <source>Edits selected NAT network.</source>
+        <translation>ویرایش شبکه نَت انتخاب شده</translation>
     </message>
     <message>
-      <source>Add Host-only Network</source>
-      <translation>افزودن فقط-میزبان شبکه</translation>
+        <source>Add Host-only Network</source>
+        <translation>افزودن فقط-میزبان شبکه</translation>
     </message>
     <message>
-      <source>Remove Host-only Network</source>
-      <translation>حذف شبکه فقط-میزبان</translation>
+        <source>Remove Host-only Network</source>
+        <translation>حذف شبکه فقط-میزبان</translation>
     </message>
     <message>
-      <source>Edit Host-only Network</source>
-      <translation>ویرایش فقط-میزبان شبکه</translation>
+        <source>Edit Host-only Network</source>
+        <translation>ویرایش فقط-میزبان شبکه</translation>
     </message>
     <message>
-      <source>Adds new host-only network.</source>
-      <translation>افزودن شبکه جدید فقط-میزبان</translation>
+        <source>Adds new host-only network.</source>
+        <translation>افزودن شبکه جدید فقط-میزبان</translation>
     </message>
     <message>
-      <source>Removes selected host-only network.</source>
-      <translation>حذف شبکه فقط-میزبان انتخاب شده</translation>
+        <source>Removes selected host-only network.</source>
+        <translation>حذف شبکه فقط-میزبان انتخاب شده</translation>
     </message>
     <message>
-      <source>Edits selected host-only network.</source>
-      <translation>ویرایش شبکه فقط-میزبان انتخاب شده</translation>
+        <source>Edits selected host-only network.</source>
+        <translation>ویرایش شبکه فقط-میزبان انتخاب شده</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsNetworkDetails</name>
     <message>
-      <source>Host-only Network Details</source>
-      <translation>جزئیات شبکه فقط-میزبان</translation>
+        <source>Host-only Network Details</source>
+        <translation type="obsolete">جزئیات شبکه فقط-میزبان</translation>
     </message>
     <message>
-      <source>&Adapter</source>
-      <translation>&آداپتور</translation>
+        <source>&Adapter</source>
+        <translation type="obsolete">&آداپتور</translation>
     </message>
     <message>
-      <source>Manual &Configuration</source>
-      <translation>پیکربندی &دستی</translation>
+        <source>Manual &Configuration</source>
+        <translation type="obsolete">پیکربندی &دستی</translation>
     </message>
     <message>
-      <source>Use manual configuration for this host-only network adapter.</source>
-      <translation>استفاده از پیکربندی دستی برای این آداپتور شبکه فقط-میزبان.</translation>
+        <source>Use manual configuration for this host-only network adapter.</source>
+        <translation type="obsolete">استفاده از پیکربندی دستی برای این آداپتور شبکه فقط-میزبان.</translation>
     </message>
     <message>
-      <source>&IPv4 Address:</source>
-      <translation>آد&رس IPv4:</translation>
+        <source>&IPv4 Address:</source>
+        <translation type="obsolete">آد&رس IPv4:</translation>
     </message>
     <message>
-      <source>Holds the host IPv4 address for this adapter.</source>
-      <translation>آدرس میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
+        <source>Holds the host IPv4 address for this adapter.</source>
+        <translation type="obsolete">آدرس میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
     </message>
     <message>
-      <source>IPv4 Network &Mask:</source>
-      <translation>ماسک ش&بکه IPv4:</translation>
+        <source>IPv4 Network &Mask:</source>
+        <translation type="obsolete">ماسک ش&بکه IPv4:</translation>
     </message>
     <message>
-      <source>Holds the host IPv4 network mask for this adapter.</source>
-      <translation>ماسک شبکه میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
+        <source>Holds the host IPv4 network mask for this adapter.</source>
+        <translation type="obsolete">ماسک شبکه میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
     </message>
     <message>
-      <source>I&Pv6 Address:</source>
-      <translation>آدرس I&Pv6:</translation>
+        <source>I&Pv6 Address:</source>
+        <translation type="obsolete">آدرس I&Pv6:</translation>
     </message>
     <message>
-      <source>Holds the host IPv6 address for this adapter if IPv6 is supported.</source>
-      <translation>آدرس میزبان IPv6 برای این آداپتور اگر IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
+        <source>Holds the host IPv6 address for this adapter if IPv6 is supported.</source>
+        <translation type="obsolete">آدرس میزبان IPv6 برای این آداپتور اگر IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
     </message>
     <message>
-      <source>IPv6 Network Mask &Length:</source>
-      <translation>طول ماسک ش&بکه IPv6:</translation>
+        <source>IPv6 Network Mask &Length:</source>
+        <translation type="obsolete">طول ماسک ش&بکه IPv6:</translation>
     </message>
     <message>
-      <source>Holds the host IPv6 network mask prefix length for this adapter if IPv6 is supported.</source>
-      <translation>طول پیشوند ماسک شبکه میزبان IPv6 برای این آداپتور اگر  IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
+        <source>Holds the host IPv6 network mask prefix length for this adapter if IPv6 is supported.</source>
+        <translation type="obsolete">طول پیشوند ماسک شبکه میزبان IPv6 برای این آداپتور اگر  IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
     </message>
     <message>
-      <source>&DHCP Server</source>
-      <translation>سر&ور DHCP</translation>
+        <source>&DHCP Server</source>
+        <translation type="obsolete">سر&ور DHCP</translation>
     </message>
     <message>
-      <source>&Enable Server</source>
-      <translation>فعالسازی &سرور</translation>
+        <source>&Enable Server</source>
+        <translation type="obsolete">فعالسازی &سرور</translation>
     </message>
     <message>
-      <source>Indicates whether the DHCP Server is enabled on machine startup or not.</source>
-      <translation>هرگاه سرور دی اِچ سی پی در اِستارت آپ ماشین فعال شده باشد یا نه،را نشان میدهد.</translation>
+        <source>Indicates whether the DHCP Server is enabled on machine startup or not.</source>
+        <translation type="obsolete">هرگاه سرور دی اِچ سی پی در اِستارت آپ ماشین فعال شده باشد یا نه،را نشان میدهد.</translation>
     </message>
     <message>
-      <source>Server Add&ress:</source>
-      <translation>آدرس سرور&:</translation>
+        <source>Server Add&ress:</source>
+        <translation type="obsolete">آدرس سرور&:</translation>
     </message>
     <message>
-      <source>Holds the address of the DHCP server servicing the network associated with this host-only adapter.</source>
-      <translation>آدرس سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با آداپتور فقط-میزبان را نشان میدهد.</translation>
+        <source>Holds the address of the DHCP server servicing the network associated with this host-only adapter.</source>
+        <translation type="obsolete">آدرس سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با آداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
-      <source>Server &Mask:</source>
-      <translation>ماسک &سرور:</translation>
+        <source>Server &Mask:</source>
+        <translation type="obsolete">ماسک &سرور:</translation>
     </message>
     <message>
-      <source>Holds the network mask of the DHCP server servicing the network associated with this host-only adapter.</source>
-      <translation>ماسک شبکه سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
+        <source>Holds the network mask of the DHCP server servicing the network associated with this host-only adapter.</source>
+        <translation type="obsolete">ماسک شبکه سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
-      <source>&Lower Address Bound:</source>
-      <translation>محدوده آدر&س پایین تر:</translation>
+        <source>&Lower Address Bound:</source>
+        <translation type="obsolete">محدوده آدر&س پایین تر:</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>محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این آداپتور فقط-میزبان را نشان میدهد.</translation>
+        <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>
     </message>
     <message>
-      <source>&Upper Address Bound:</source>
-      <translation>محدوده آ&درس بالاتر:</translation>
+        <source>&Upper Address Bound:</source>
+        <translation type="obsolete">محدوده آ&درس بالاتر:</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>محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
+        <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>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsNetworkDetailsHost</name>
     <message>
-      <source>Host-only Network Details</source>
-      <translation>جزئیات شبکه فقط-میزبان</translation>
+        <source>Host-only Network Details</source>
+        <translation>جزئیات شبکه فقط-میزبان</translation>
     </message>
     <message>
-      <source>&Adapter</source>
-      <translation>&آداپتور</translation>
+        <source>&Adapter</source>
+        <translation>&آداپتور</translation>
     </message>
     <message>
-      <source>Manual &Configuration</source>
-      <translation>پیکربندی &دستی</translation>
+        <source>Manual &Configuration</source>
+        <translation>پیکربندی &دستی</translation>
     </message>
     <message>
-      <source>Use manual configuration for this host-only network adapter.</source>
-      <translation>استفاده از پیکربندی دستی برای این آداپتور شبکه فقط-میزبان.</translation>
+        <source>Use manual configuration for this host-only network adapter.</source>
+        <translation type="obsolete">استفاده از پیکربندی دستی برای این آداپتور شبکه فقط-میزبان.</translation>
     </message>
     <message>
-      <source>&IPv4 Address:</source>
-      <translation>آد&رس IPv4:</translation>
+        <source>&IPv4 Address:</source>
+        <translation>آد&رس IPv4:</translation>
     </message>
     <message>
-      <source>Holds the host IPv4 address for this adapter.</source>
-      <translation>آدرس میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
+        <source>Holds the host IPv4 address for this adapter.</source>
+        <translation>آدرس میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
     </message>
     <message>
-      <source>IPv4 Network &Mask:</source>
-      <translation>ماسک ش&بکه IPv4:</translation>
+        <source>IPv4 Network &Mask:</source>
+        <translation>ماسک ش&بکه IPv4:</translation>
     </message>
     <message>
-      <source>Holds the host IPv4 network mask for this adapter.</source>
-      <translation>ماسک شبکه میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
+        <source>Holds the host IPv4 network mask for this adapter.</source>
+        <translation>ماسک شبکه میزبان IPv4 برای این آداپتور نشان میدهد.</translation>
     </message>
     <message>
-      <source>I&Pv6 Address:</source>
-      <translation>آدرس I&Pv6:</translation>
+        <source>I&Pv6 Address:</source>
+        <translation>آدرس I&Pv6:</translation>
     </message>
     <message>
-      <source>Holds the host IPv6 address for this adapter if IPv6 is supported.</source>
-      <translation>آدرس میزبان IPv6 برای این آداپتور اگر IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
+        <source>Holds the host IPv6 address for this adapter if IPv6 is supported.</source>
+        <translation>آدرس میزبان IPv6 برای این آداپتور اگر IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
     </message>
     <message>
-      <source>IPv6 Network Mask &Length:</source>
-      <translation>طول ماسک ش&بکه IPv6:</translation>
+        <source>IPv6 Network Mask &Length:</source>
+        <translation>طول ماسک ش&بکه IPv6:</translation>
     </message>
     <message>
-      <source>Holds the host IPv6 network mask prefix length for this adapter if IPv6 is supported.</source>
-      <translation>طول پیشوند ماسک شبکه میزبان IPv6 برای این آداپتور اگر  IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
+        <source>Holds the host IPv6 network mask prefix length for this adapter if IPv6 is supported.</source>
+        <translation>طول پیشوند ماسک شبکه میزبان IPv6 برای این آداپتور اگر  IPv6 پشتیبانی شده باشد را نشان میدهد.</translation>
     </message>
     <message>
-      <source>&DHCP Server</source>
-      <translation>سر&ور DHCP</translation>
+        <source>&DHCP Server</source>
+        <translation>سر&ور DHCP</translation>
     </message>
     <message>
-      <source>&Enable Server</source>
-      <translation>فعالسازی &سرور</translation>
+        <source>&Enable Server</source>
+        <translation>فعالسازی &سرور</translation>
     </message>
     <message>
-      <source>Indicates whether the DHCP Server is enabled on machine startup or not.</source>
-      <translation>هرگاه سرور دی اِچ سی پی در اِستارت آپ ماشین فعال شده باشد یا نه،را نشان میدهد.</translation>
+        <source>Indicates whether the DHCP Server is enabled on machine startup or not.</source>
+        <translation type="obsolete">هرگاه سرور دی اِچ سی پی در اِستارت آپ ماشین فعال شده باشد یا نه،را نشان میدهد.</translation>
     </message>
     <message>
-      <source>Server Add&ress:</source>
-      <translation>آدرس سرور&:</translation>
+        <source>Server Add&ress:</source>
+        <translation>آدرس سرور&:</translation>
     </message>
     <message>
-      <source>Holds the address of the DHCP server servicing the network associated with this host-only adapter.</source>
-      <translation>آدرس سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با آداپتور فقط-میزبان را نشان میدهد.</translation>
+        <source>Holds the address of the DHCP server servicing the network associated with this host-only adapter.</source>
+        <translation>آدرس سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با آداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
-      <source>Server &Mask:</source>
-      <translation>ماسک &سرور:</translation>
+        <source>Server &Mask:</source>
+        <translation>ماسک &سرور:</translation>
     </message>
     <message>
-      <source>Holds the network mask of the DHCP server servicing the network associated with this host-only adapter.</source>
-      <translation>ماسک شبکه سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
+        <source>Holds the network mask of the DHCP server servicing the network associated with this host-only adapter.</source>
+        <translation>ماسک شبکه سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
-      <source>&Lower Address Bound:</source>
-      <translation>محدوده آدر&س پایین تر:</translation>
+        <source>&Lower Address Bound:</source>
+        <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>محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این آداپتور فقط-میزبان را نشان میدهد.</translation>
+        <source>Holds the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
+        <translation>محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این آداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
-      <source>&Upper Address Bound:</source>
-      <translation>محدوده آ&درس بالاتر:</translation>
+        <source>&Upper Address Bound:</source>
+        <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>محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
+        <source>Holds the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
+        <translation>محدوده آدرس پایین تر ارائه شده توسط سرور دی اِچ سی پی خدماتی شبکه وابسته سازی شده با این اداپتور فقط-میزبان را نشان میدهد.</translation>
     </message>
     <message>
-      <source>When checked, manual configuration will be used for this network adapter.</source>
-      <translation>وقتیکه انتخاب شده،پیکربندی دستی برای این آداپتور شبکه بکار میرود</translation>
+        <source>When checked, manual configuration will be used for this network adapter.</source>
+        <translation>وقتیکه انتخاب شده،پیکربندی دستی برای این آداپتور شبکه بکار میرود</translation>
     </message>
     <message>
-      <source>When checked, the DHCP Server will be enabled for this network on machine start-up.</source>
-      <translation>وقتیکه انتخاب شده،سرور دی اِچ سی پی برای این شبکه در استارت آپ ماشین فعال میشود</translation>
+        <source>When checked, the DHCP Server will be enabled for this network on machine start-up.</source>
+        <translation>وقتیکه انتخاب شده،سرور دی اِچ سی پی برای این شبکه در استارت آپ ماشین فعال میشود</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsNetworkDetailsNAT</name>
     <message>
-      <source>NAT Network Details</source>
-      <translation>جزئیات شبکه NAT</translation>
+        <source>NAT Network Details</source>
+        <translation>جزئیات شبکه NAT</translation>
     </message>
     <message>
-      <source>&Enable Network</source>
-      <translation>&فعالسازی شبکه</translation>
+        <source>&Enable Network</source>
+        <translation>&فعالسازی شبکه</translation>
     </message>
     <message>
-      <source>Enable this NAT network.</source>
-      <translation>فعالسازی این شبکه NAT.</translation>
+        <source>Enable this NAT network.</source>
+        <translation type="obsolete">فعالسازی این شبکه NAT.</translation>
     </message>
     <message>
-      <source>Network &Name:</source>
-      <translation>نام &شبکه:</translation>
+        <source>Network &Name:</source>
+        <translation>نام &شبکه:</translation>
     </message>
     <message>
-      <source>Holds the name for this network.</source>
-      <translation>نام این شبکه را نگه می دارد.</translation>
+        <source>Holds the name for this network.</source>
+        <translation>نام این شبکه را نگه می دارد.</translation>
     </message>
     <message>
-      <source>Network &CIDR:</source>
-      <translation>شبکه &CIDR:</translation>
+        <source>Network &CIDR:</source>
+        <translation>شبکه &CIDR:</translation>
     </message>
     <message>
-      <source>Holds the CIDR for this network.</source>
-      <translation>CIDR  رابرای این شبکه نگه می دارد.</translation>
+        <source>Holds the CIDR for this network.</source>
+        <translation>CIDR  رابرای این شبکه نگه می دارد.</translation>
     </message>
     <message>
-      <source>Network Options:</source>
-      <translation>گزینه های شبکه:</translation>
+        <source>Network Options:</source>
+        <translation>گزینه های شبکه:</translation>
     </message>
     <message>
-      <source>Supports &DHCP</source>
-      <translation>پشتیبانی از &DHCP</translation>
+        <source>Supports &DHCP</source>
+        <translation>پشتیبانی از &DHCP</translation>
     </message>
     <message>
-      <source>Determines whether this network supports DHCP.</source>
-      <translation>تعیین اینکه آیا این شبکه از DHCP پشتیبانی میکند.</translation>
+        <source>Determines whether this network supports DHCP.</source>
+        <translation type="obsolete">تعیین اینکه آیا این شبکه از DHCP پشتیبانی میکند.</translation>
     </message>
     <message>
-      <source>Supports &IPv6</source>
-      <translation>پشتیبانی از &IPv6</translation>
+        <source>Supports &IPv6</source>
+        <translation>پشتیبانی از &IPv6</translation>
     </message>
     <message>
-      <source>Determines whether this network supports IPv6.</source>
-      <translation>تعیین اینکه آیا این شبکه از IPv6 پشتیبانی میکند.</translation>
+        <source>Determines whether this network supports IPv6.</source>
+        <translation type="obsolete">تعیین اینکه آیا این شبکه از IPv6 پشتیبانی میکند.</translation>
     </message>
     <message>
-      <source>Advertise Default IPv6 &Route</source>
-      <translation>اعلان مسیر پیش فرض IPv6&</translation>
+        <source>Advertise Default IPv6 &Route</source>
+        <translation>اعلان مسیر پیش فرض IPv6&</translation>
     </message>
     <message>
-      <source>Determines whether this network should be advertised as the default IPv6 route.</source>
-      <translation>تعیین اینکه آیا شبکه باید مسیر پیش فرض IPv6 را اعلان کند.</translation>
+        <source>Determines whether this network should be advertised as the default IPv6 route.</source>
+        <translation type="obsolete">تعیین اینکه آیا شبکه باید مسیر پیش فرض IPv6 را اعلان کند.</translation>
     </message>
     <message>
-      <source>Opens a window to manage port forwarding rules.</source>
-      <translation>پنجره را برای مدیریت دستورات اِرسال پورت باز میکند.</translation>
+        <source>Opens a window to manage port forwarding rules.</source>
+        <translation type="obsolete">پنجره را برای مدیریت دستورات اِرسال پورت باز میکند.</translation>
     </message>
     <message>
-      <source>&Port Forwarding</source>
-      <translation>اِرسا&ل پورت</translation>
+        <source>&Port Forwarding</source>
+        <translation>اِرسا&ل پورت</translation>
     </message>
     <message>
-      <source>When checked, this network will be enabled.</source>
-      <translation>وقتیکه انتخاب شده،این شبکه فعال خواهد شد</translation>
+        <source>When checked, this network will be enabled.</source>
+        <translation>وقتیکه انتخاب شده،این شبکه فعال خواهد شد</translation>
     </message>
     <message>
-      <source>When checked, this network will support DHCP.</source>
-      <translation>وقتیکه انتخاب شده،این شبکه از دی اِچ سی پی پشتیبانی خواهد کرد</translation>
+        <source>When checked, this network will support DHCP.</source>
+        <translation>وقتیکه انتخاب شده،این شبکه از دی اِچ سی پی پشتیبانی خواهد کرد</translation>
     </message>
     <message>
-      <source>When checked, this network will support IPv6.</source>
-      <translation>وقتیکه انتخاب شده،این شبکه از آی پی نسخه 6 پشتیبانی خواهد کرد</translation>
+        <source>When checked, this network will support IPv6.</source>
+        <translation>وقتیکه انتخاب شده،این شبکه از آی پی نسخه 6 پشتیبانی خواهد کرد</translation>
     </message>
     <message>
-      <source>When checked, this network will be advertised as the default IPv6 route.</source>
-      <translation>وقتیکه انتخاب شده،این شبکه بعنوان مسیر آدرس آی پی نسخه 6 انتشار می یابد</translation>
+        <source>When checked, this network will be advertised as the default IPv6 route.</source>
+        <translation>وقتیکه انتخاب شده،این شبکه بعنوان مسیر آدرس آی پی نسخه 6 انتشار می یابد</translation>
     </message>
     <message>
-      <source>Displays a window to configure port forwarding rules.</source>
-      <translation>پنجره ای برای پیکربندی دستورات ارسال پورت را نشان میدهد</translation>
+        <source>Displays a window to configure port forwarding rules.</source>
+        <translation>پنجره ای برای پیکربندی دستورات ارسال پورت را نشان میدهد</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsPortForwardingDlg</name>
     <message>
-      <source>Port Forwarding Rules</source>
-      <translation>دستورات اِرسال پورت</translation>
+        <source>Port Forwarding Rules</source>
+        <translation>دستورات اِرسال پورت</translation>
     </message>
     <message>
-      <source>IPv4</source>
-      <translation>IPv4</translation>
+        <source>IPv4</source>
+        <translation>IPv4</translation>
     </message>
     <message>
-      <source>IPv6</source>
-      <translation>IPv6</translation>
+        <source>IPv6</source>
+        <translation>IPv6</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-      <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-      <translation>وقتیکه انتخاب شده،ویرچوال باکس از تنظیمات پراکسی عرضه شده برای وظایفی مثل دانلود افزونه مهمان از شبکه یا بررسی برای بروزرسانی استفاده خواهد کرد.</translation>
+        <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>
+    </message>
+    <message>
+        <source>&Enable Proxy</source>
+        <translation type="obsolete">فعال کرد&ن پراکسی</translation>
+    </message>
+    <message>
+        <source>Ho&st:</source>
+        <translation>میز&بان:</translation>
+    </message>
+    <message>
+        <source>Changes the proxy host.</source>
+        <translation type="obsolete">تغییر پراکسی میزبان.</translation>
+    </message>
+    <message>
+        <source>&Port:</source>
+        <translation>پور&ت:</translation>
+    </message>
+    <message>
+        <source>Changes the proxy port.</source>
+        <translation type="obsolete">تغییر پورت پراکسی.</translation>
     </message>
     <message>
-      <source>&Enable Proxy</source>
-      <translation>فعال کرد&ن پراکسی</translation>
+        <source>When checked the authentication supplied will be used with the proxy server.</source>
+        <translation type="obsolete">وقتیکه انتخاب شده تایید اعتبار عرضه شده با پراکسی سرور استفاده خواهد شد.</translation>
     </message>
     <message>
-      <source>Ho&st:</source>
-      <translation>میز&بان:</translation>
+        <source>&Use authentication</source>
+        <translation type="obsolete">&استفاده از تایید اعتبار</translation>
     </message>
     <message>
-      <source>Changes the proxy host.</source>
-      <translation>تغییر پراکسی میزبان.</translation>
+        <source>User &name:</source>
+        <translation type="obsolete">نا&م کاربر:</translation>
     </message>
     <message>
-      <source>&Port:</source>
-      <translation>پور&ت:</translation>
+        <source>Changes the user name used for authentication.</source>
+        <translation type="obsolete">تغییر نام کاربر بکاررفته برای تایید اعتبار.</translation>
     </message>
     <message>
-      <source>Changes the proxy port.</source>
-      <translation>تغییر پورت پراکسی.</translation>
+        <source>Pass&word:</source>
+        <translation type="obsolete">رمز&عبور:</translation>
     </message>
     <message>
-      <source>When checked the authentication supplied will be used with the proxy server.</source>
-      <translation>وقتیکه انتخاب شده تایید اعتبار عرضه شده با پراکسی سرور استفاده خواهد شد.</translation>
+        <source>Changes the password used for authentication.</source>
+        <translation type="obsolete">تغییر رمزعبور بکاررفته برای تایید اعتبار.</translation>
     </message>
     <message>
-      <source>&Use authentication</source>
-      <translation>&استفاده از تایید اعتبار</translation>
+        <source>No proxy host is currently specified.</source>
+        <translation>میزبان پراکسی اکنون تایین نشده است.</translation>
     </message>
     <message>
-      <source>User &name:</source>
-      <translation>نا&م کاربر:</translation>
+        <source>No proxy port is currently specified.</source>
+        <translation>پورت پراکسی اکنون تعیین نشده است.</translation>
     </message>
     <message>
-      <source>Changes the user name used for authentication.</source>
-      <translation>تغییر نام کاربر بکاررفته برای تایید اعتبار.</translation>
+        <source>Holds the proxy host.</source>
+        <translation>نگه داشتن میزبان پراکسی</translation>
     </message>
     <message>
-      <source>Pass&word:</source>
-      <translation>رمز&عبور:</translation>
+        <source>Holds the proxy port.</source>
+        <translation>نگه داشتن پورت پراکسی</translation>
     </message>
     <message>
-      <source>Changes the password used for authentication.</source>
-      <translation>تغییر رمزعبور بکاررفته برای تایید اعتبار.</translation>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-      <source>No proxy host is currently specified.</source>
-      <translation>میزبان پراکسی اکنون تایین نشده است.</translation>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-      <source>No proxy port is currently specified.</source>
-      <translation>پورت پراکسی اکنون تعیین نشده است.</translation>
+        <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>
     </message>
     <message>
-      <source>Holds the proxy host.</source>
-      <translation>نگه داشتن میزبان پراکسی</translation>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-      <source>Holds the proxy port.</source>
-      <translation>نگه داشتن پورت پراکسی</translation>
+        <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>
     </message>
-  </context>
-  <context>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>UIGlobalSettingsUpdate</name>
     <message>
-      <source>When checked, the application will periodically connect to the VirtualBox website and check whether a new VirtualBox version is available.</source>
-      <translation>وقتیکه انتخاب شده،برنامه بطور دوره ای به وبسایت برنامه متصل میشود و نسخه جدید برنامه را اگر موجود باشد بررسی میکند.</translation>
+        <source>When checked, the application will periodically connect to the VirtualBox website and check whether a new VirtualBox version is available.</source>
+        <translation>وقتیکه انتخاب شده،برنامه بطور دوره ای به وبسایت برنامه متصل میشود و نسخه جدید برنامه را اگر موجود باشد بررسی میکند.</translation>
     </message>
     <message>
-      <source>&Check for Updates</source>
-      <translation>بررسی برای بروزرس&انی</translation>
+        <source>&Check for Updates</source>
+        <translation>بررسی برای بروزرس&انی</translation>
     </message>
     <message>
-      <source>&Once per:</source>
-      <translation>&یک بار در هر:</translation>
+        <source>&Once per:</source>
+        <translation>&یک بار در هر:</translation>
     </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>مشخص میکند هرچند وقت یکبار بررسی نسخه جدید باید اجرا شود.توجه کنید که اگر میخواهید کاملا این بررسی را غیرفعال کنید،گزینه بالایی را غیرفعال کنید.</translation>
+        <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>
     </message>
     <message>
-      <source>Next Check:</source>
-      <translation>بررسی بعدی:</translation>
+        <source>Next Check:</source>
+        <translation>بررسی بعدی:</translation>
     </message>
     <message>
-      <source>Check for:</source>
-      <translation>برسی برای:</translation>
+        <source>Check for:</source>
+        <translation>برسی برای:</translation>
     </message>
     <message>
-      <source><p>Choose this if you only wish to be notified about stable updates to VirtualBox.</p></source>
-      <translation><p>اگر میخواهید از بروزرسانی نسخه های پایدار مطلع شوید این گزینه را انتخاب کنید.</p></translation>
+        <source><p>Choose this if you only wish to be notified about stable updates to VirtualBox.</p></source>
+        <translation><p>اگر میخواهید از بروزرسانی نسخه های پایدار مطلع شوید این گزینه را انتخاب کنید.</p></translation>
     </message>
     <message>
-      <source>&Stable Release Versions</source>
-      <translation>نسخه های &پایدار</translation>
+        <source>&Stable Release Versions</source>
+        <translation>نسخه های &پایدار</translation>
     </message>
     <message>
-      <source><p>Choose this if you wish to be notified about all new VirtualBox releases.</p></source>
-      <translation><p>اگر میخواهید از همه نسخه های جدید برنامه مطلع شوید این گزینه را انتخاب کنید.</p></translation>
+        <source><p>Choose this if you wish to be notified about all new VirtualBox releases.</p></source>
+        <translation><p>اگر میخواهید از همه نسخه های جدید برنامه مطلع شوید این گزینه را انتخاب کنید.</p></translation>
     </message>
     <message>
-      <source>&All New Releases</source>
-      <translation>همه نس&خه های جدید</translation>
+        <source>&All New Releases</source>
+        <translation>همه نس&خه های جدید</translation>
     </message>
     <message>
-      <source><p>Choose this to be notified about all new VirtualBox releases and pre-release versions of VirtualBox.</p></source>
-      <translation><p>این گزینه را برای مطلع شدن از نسخه های جدید و پیش نسخه های برنامه انتخاب کنید.</p></translation>
+        <source><p>Choose this to be notified about all new VirtualBox releases and pre-release versions of VirtualBox.</p></source>
+        <translation><p>این گزینه را برای مطلع شدن از نسخه های جدید و پیش نسخه های برنامه انتخاب کنید.</p></translation>
     </message>
     <message>
-      <source>All New Releases and &Pre-Releases</source>
-      <translation>همه نسخه ها و پیش نسخه ه&ا</translation>
+        <source>All New Releases and &Pre-Releases</source>
+        <translation>همه نسخه ها و پیش نسخه ه&ا</translation>
     </message>
     <message>
-      <source>Selects how often the new version check should be performed. Note that if you want to completely disable this check, just clear the above check box.</source>
-      <translation>انتخاب کنید چند مدت یکبار نسخه جدید بررسی شود.اگر میخواهید کاملا آن را غیرفعال کنید،گزینه بالا را از حالت انتخاب در بیاورید</translation>
+        <source>Selects how often the new version check should be performed. Note that if you want to completely disable this check, just clear the above check box.</source>
+        <translation>انتخاب کنید چند مدت یکبار نسخه جدید بررسی شود.اگر میخواهید کاملا آن را غیرفعال کنید،گزینه بالا را از حالت انتخاب در بیاورید</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIHelpButton</name>
     <message>
-      <source>&Help</source>
-      <translation>را&هنما</translation>
+        <source>&Help</source>
+        <translation>را&هنما</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIHostComboEditor</name>
     <message>
-      <source><key_%1></source>
-      <translation><key_%1></translation>
+        <source><key_%1></source>
+        <translation><key_%1></translation>
     </message>
     <message>
-      <source>Left </source>
-      <translation>Left </translation>
+        <source>Left </source>
+        <translation>Left </translation>
     </message>
     <message>
-      <source>Right </source>
-      <translation>Right </translation>
+        <source>Right </source>
+        <translation>Right </translation>
     </message>
     <message>
-      <source>Left Shift</source>
-      <translation>Left Shift</translation>
+        <source>Left Shift</source>
+        <translation>Left Shift</translation>
     </message>
     <message>
-      <source>Right Shift</source>
-      <translation>Right Shift</translation>
+        <source>Right Shift</source>
+        <translation>Right Shift</translation>
     </message>
     <message>
-      <source>Left Ctrl</source>
-      <translation>Left Ctrl</translation>
+        <source>Left Ctrl</source>
+        <translation>Left Ctrl</translation>
     </message>
     <message>
-      <source>Right Ctrl</source>
-      <translation>Right Ctrl</translation>
+        <source>Right Ctrl</source>
+        <translation>Right Ctrl</translation>
     </message>
     <message>
-      <source>Left Alt</source>
-      <translation>Left Alt</translation>
+        <source>Left Alt</source>
+        <translation>Left Alt</translation>
     </message>
     <message>
-      <source>Right Alt</source>
-      <translation>Right Alt</translation>
+        <source>Right Alt</source>
+        <translation>Right Alt</translation>
     </message>
     <message>
-      <source>Left WinKey</source>
-      <translation>Left WinKey</translation>
+        <source>Left WinKey</source>
+        <translation>Left WinKey</translation>
     </message>
     <message>
-      <source>Right WinKey</source>
-      <translation>Right WinKey</translation>
+        <source>Right WinKey</source>
+        <translation>Right WinKey</translation>
     </message>
     <message>
-      <source>Menu key</source>
-      <translation>Menu key</translation>
+        <source>Menu key</source>
+        <translation>Menu key</translation>
     </message>
     <message>
-      <source>Alt Gr</source>
-      <translation>Alt Gr</translation>
+        <source>Alt Gr</source>
+        <translation>Alt Gr</translation>
     </message>
     <message>
-      <source>Caps Lock</source>
-      <translation>Caps Lock</translation>
+        <source>Caps Lock</source>
+        <translation>Caps Lock</translation>
     </message>
     <message>
-      <source>Scroll Lock</source>
-      <translation>Scroll Lock</translation>
+        <source>Scroll Lock</source>
+        <translation>Scroll Lock</translation>
     </message>
     <message>
-      <source>Host+</source>
-      <translation>Host+</translation>
+        <source>Host+</source>
+        <translation>Host+</translation>
     </message>
     <message>
-      <source>None</source>
-      <translation>None</translation>
+        <source>None</source>
+        <translation>None</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIHotKeyEditor</name>
     <message>
-      <source>Left </source>
-      <translation>Left </translation>
+        <source>Left </source>
+        <translation type="obsolete">Left </translation>
     </message>
     <message>
-      <source>Right </source>
-      <translation>Right </translation>
+        <source>Right </source>
+        <translation type="obsolete">Right </translation>
     </message>
     <message>
-      <source>Right Alt</source>
-      <translation>Right Alt</translation>
+        <source>Right Alt</source>
+        <translation type="obsolete">Right Alt</translation>
     </message>
     <message>
-      <source>Left WinKey</source>
-      <translation>Left WinKey</translation>
+        <source>Left WinKey</source>
+        <translation type="obsolete">Left WinKey</translation>
     </message>
     <message>
-      <source>Right WinKey</source>
-      <translation>Right WinKey</translation>
+        <source>Right WinKey</source>
+        <translation type="obsolete">Right WinKey</translation>
     </message>
     <message>
-      <source>Menu key</source>
-      <translation>Menu key</translation>
+        <source>Menu key</source>
+        <translation type="obsolete">Menu key</translation>
     </message>
     <message>
-      <source>Alt Gr</source>
-      <translation>Alt Gr</translation>
+        <source>Alt Gr</source>
+        <translation type="obsolete">Alt Gr</translation>
     </message>
     <message>
-      <source>Caps Lock</source>
-      <translation>Caps Lock</translation>
+        <source>Caps Lock</source>
+        <translation type="obsolete">Caps Lock</translation>
     </message>
     <message>
-      <source>Scroll Lock</source>
-      <translation>Scroll Lock</translation>
+        <source>Scroll Lock</source>
+        <translation type="obsolete">Scroll Lock</translation>
     </message>
     <message>
-      <source><key_%1></source>
-      <translation><key_%1></translation>
+        <source><key_%1></source>
+        <translation type="obsolete"><key_%1></translation>
     </message>
     <message>
-      <source>None</source>
-      <translation>None</translation>
+        <source>None</source>
+        <translation type="obsolete">None</translation>
     </message>
     <message>
-      <source>Left Shift</source>
-      <translation>Left Shift</translation>
+        <source>Left Shift</source>
+        <translation type="obsolete">Left Shift</translation>
     </message>
     <message>
-      <source>Right Shift</source>
-      <translation>Right Shift</translation>
+        <source>Right Shift</source>
+        <translation type="obsolete">Right Shift</translation>
     </message>
     <message>
-      <source>Left Ctrl</source>
-      <translation>Left Ctrl</translation>
+        <source>Left Ctrl</source>
+        <translation type="obsolete">Left Ctrl</translation>
     </message>
     <message>
-      <source>Right Ctrl</source>
-      <translation>Right Ctrl</translation>
+        <source>Right Ctrl</source>
+        <translation type="obsolete">Right Ctrl</translation>
     </message>
     <message>
-      <source>Left Alt</source>
-      <translation>Left Alt</translation>
+        <source>Left Alt</source>
+        <translation type="obsolete">Left Alt</translation>
     </message>
     <message>
-      <source>Reset shortcut to default</source>
-      <translation>ریست میانبر به پیش فرض</translation>
+        <source>Reset shortcut to default</source>
+        <translation>ریست میانبر به پیش فرض</translation>
     </message>
     <message>
-      <source>Unset shortcut</source>
-      <translation>عدمتعیین میانبر</translation>
+        <source>Unset shortcut</source>
+        <translation>عدمتعیین میانبر</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIHotKeyTableModel</name>
     <message>
-      <source>Name</source>
-      <translation>نام</translation>
+        <source>Name</source>
+        <translation>نام</translation>
     </message>
     <message>
-      <source>Shortcut</source>
-      <translation>میانبر</translation>
+        <source>Shortcut</source>
+        <translation>میانبر</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIImportLicenseViewer</name>
     <message>
-      <source><b>The virtual system "%1" requires that you agree to the terms and conditions of the software license agreement shown below.</b><br /><br />Click <b>Agree</b> to continue or click <b>Disagree</b> to cancel the import.</source>
-      <translation><b>سیستم مجازی "%1" نیازدارد که شما ضوابط و شرایط توافقنامه مجوز نرمافزار را که در زیر نشان داده شده را بپذیرید.</b><br /><br />روی <b>می پذیرم</b> برای ادامه یا روی <b>نمی پذیرم</b> برای لغو واردکردن کلیک کنید.</translation>
+        <source><b>The virtual system "%1" requires that you agree to the terms and conditions of the software license agreement shown below.</b><br /><br />Click <b>Agree</b> to continue or click <b>Disagree</b> to cancel the import.</source>
+        <translation><b>سیستم مجازی "%1" نیازدارد که شما ضوابط و شرایط توافقنامه مجوز نرمافزار را که در زیر نشان داده شده را بپذیرید.</b><br /><br />روی <b>می پذیرم</b> برای ادامه یا روی <b>نمی پذیرم</b> برای لغو واردکردن کلیک کنید.</translation>
     </message>
     <message>
-      <source>Software License Agreement</source>
-      <translation>توافقنامه مجوز نرم افزار</translation>
+        <source>Software License Agreement</source>
+        <translation>توافقنامه مجوز نرم افزار</translation>
     </message>
     <message>
-      <source>&Disagree</source>
-      <translation>نم&ی پذیرم</translation>
+        <source>&Disagree</source>
+        <translation>نم&ی پذیرم</translation>
     </message>
     <message>
-      <source>&Agree</source>
-      <translation>م&ی پذیرم</translation>
+        <source>&Agree</source>
+        <translation>م&ی پذیرم</translation>
     </message>
     <message>
-      <source>&Print...</source>
-      <translation>چ&اپ...</translation>
+        <source>&Print...</source>
+        <translation>چ&اپ...</translation>
     </message>
     <message>
-      <source>&Save...</source>
-      <translation>ذخ&یره...</translation>
+        <source>&Save...</source>
+        <translation>ذخ&یره...</translation>
     </message>
     <message>
-      <source>Text (*.txt)</source>
-      <translation>متن (*.txt)</translation>
+        <source>Text (*.txt)</source>
+        <translation>متن (*.txt)</translation>
     </message>
     <message>
-      <source>Save license to file...</source>
-      <translation>ذخیره مجوز در فایل...</translation>
+        <source>Save license to file...</source>
+        <translation>ذخیره مجوز در فایل...</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIIndicatorsPool</name>
     <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><p style='white-space:pre'><nobr>فعالیت دیسک سخت مجازی را نشان میدهد:</nobr>%1</p></translation>
+        <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>
     </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><p style='white-space:pre'><nobr>فعالیت های دستگاه سی دی/دی وی دی را نشان میدهد:</nobr>%1</p></translation>
+        <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>
     </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><p style='white-space:pre'><nobr>فعالیت دستگاه فلاپی را نشان میدهد:</nobr>%1</p></translation>
+        <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>
     </message>
     <message>
-      <source><p style='white-space:pre'><nobr>Indicates the activity of the network interfaces:</nobr>%1</p></source>
-      <comment>Network adapters tooltip</comment>
-      <translation><p style='white-space:pre'><nobr>فعالیت رابط های شبکه را نشان میدهد:</nobr>%1</p></translation>
+        <source><p style='white-space:pre'><nobr>Indicates the activity of the network interfaces:</nobr>%1</p></source>
+        <comment>Network adapters tooltip</comment>
+        <translation><p style='white-space:pre'><nobr>فعالیت رابط های شبکه را نشان میدهد:</nobr>%1</p></translation>
     </message>
     <message>
-      <source><br><nobr><b>Adapter %1 (%2)</b>: %3 cable %4</nobr></source>
-      <comment>Network adapters tooltip</comment>
-      <translation><br><nobr><b>آداپتور %1 (%2)</b>: %3 کابل %4</nobr></translation>
+        <source><br><nobr><b>Adapter %1 (%2)</b>: %3 cable %4</nobr></source>
+        <comment>Network adapters tooltip</comment>
+        <translation><br><nobr><b>آداپتور %1 (%2)</b>: %3 کابل %4</nobr></translation>
     </message>
     <message>
-      <source>connected</source>
-      <comment>Network adapters tooltip</comment>
-      <translation>متصل شده است</translation>
+        <source>connected</source>
+        <comment>Network adapters tooltip</comment>
+        <translation>متصل شده است</translation>
     </message>
     <message>
-      <source>disconnected</source>
-      <comment>Network adapters tooltip</comment>
-      <translation>قطع شده است</translation>
+        <source>disconnected</source>
+        <comment>Network adapters tooltip</comment>
+        <translation>قطع شده است</translation>
     </message>
     <message>
-      <source><br><nobr><b>All network adapters are disabled</b></nobr></source>
-      <comment>Network adapters tooltip</comment>
-      <translation><br><nobr><b>همه آداپتورهای شبکه غیرفعال شده اند</b></nobr></translation>
+        <source><br><nobr><b>All network adapters are disabled</b></nobr></source>
+        <comment>Network adapters tooltip</comment>
+        <translation><br><nobr><b>همه آداپتورهای شبکه غیرفعال شده اند</b></nobr></translation>
     </message>
     <message>
-      <source><p style='white-space:pre'><nobr>Indicates the activity of the attached USB devices:</nobr>%1</p></source>
-      <comment>USB device tooltip</comment>
-      <translation><p style='white-space:pre'><nobr>فعالیت دستگاه یو اِس بی ضمیمه شده را نشان میدهد:</nobr>%1</p></translation>
+        <source><p style='white-space:pre'><nobr>Indicates the activity of the attached USB devices:</nobr>%1</p></source>
+        <comment>USB device tooltip</comment>
+        <translation><p style='white-space:pre'><nobr>فعالیت دستگاه یو اِس بی ضمیمه شده را نشان میدهد:</nobr>%1</p></translation>
     </message>
     <message>
-      <source><br><nobr><b>No USB devices attached</b></nobr></source>
-      <comment>USB device tooltip</comment>
-      <translation><br><nobr><b>هیچ دستگاه یو اِس بی ضمیمه نشده است</b></nobr></translation>
+        <source><br><nobr><b>No USB devices attached</b></nobr></source>
+        <comment>USB device tooltip</comment>
+        <translation><br><nobr><b>هیچ دستگاه یو اِس بی ضمیمه نشده است</b></nobr></translation>
     </message>
     <message>
-      <source><br><nobr><b>USB Controller is disabled</b></nobr></source>
-      <comment>USB device tooltip</comment>
-      <translation><br><nobr><b>کنترلر یو اِس بی غیرفعال شده است</b></nobr></translation>
+        <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>
     </message>
     <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><p style='white-space:pre'><nobr>فعالیت پوشه های اشتراکی ماشین را نشان میدهد:</nobr>%1</p></translation>
+        <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><p style='white-space:pre'><nobr>فعالیت پوشه های اشتراکی ماشین را نشان میدهد:</nobr>%1</p></translation>
     </message>
     <message>
-      <source><br><nobr><b>No shared folders</b></nobr></source>
-      <comment>Shared folders tooltip</comment>
-      <translation><br><nobr><b>پوشه های اشتراکی ندارد</b></nobr></translation>
+        <source><br><nobr><b>No shared folders</b></nobr></source>
+        <comment>Shared folders tooltip</comment>
+        <translation><br><nobr><b>پوشه های اشتراکی ندارد</b></nobr></translation>
     </message>
     <message>
-      <source><br><nobr><b>%1:</b>&nbsp;%2</nobr></source>
-      <comment>Virtualization Stuff LED</comment>
-      <translation><br><nobr><b>%1:</b>&nbsp;%2</nobr></translation>
+        <source><br><nobr><b>%1:</b>&nbsp;%2</nobr></source>
+        <comment>Virtualization Stuff LED</comment>
+        <translation><br><nobr><b>%1:</b>&nbsp;%2</nobr></translation>
     </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_16 [...]
-      <translation>هرگاه نشانگر ماوس میزبان از مهمان ضبط شده باشد،نشان میدهد:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;نشانگر ضبط نشده است</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;نشانگر ضبط شده است</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;یکپارچگی ماوس (MI) روشن است</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/>& [...]
+        <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>هرگاه نشانگر ماوس میزبان از مهمان ضبط شده باشد،نشان میدهد:<br><nobr><img src=:/mouse_disabled_16px.png/>&nbsp;&nbsp;نشانگر ضبط نشده است</nobr><br><nobr><img src=:/mouse_16px.png/>&nbsp;&nbsp;نشانگر ضبط شده است</nobr><br><nobr><img src=:/mouse_seamless_16px.png/>&nbsp;&nbsp;یکپارچگی ماوس (MI) روشن است</nobr><br><nobr><img src=:/mouse_can_seamless_16px.png/&gt [...]
     </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>هرگاه صفحه کلید توسط سیستم عامل مهمان ضیط شده باشد (<img src=:/hostkey_captured_16px.png/>) یا نه،را نشان میدهد (<img src=:/hostkey_16px.png/>).</translation>
+        <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>
     </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>هرگاه سرور ریموت دسکتاپ فعال شده باشد یا نه را (<img src=:/vrdp_16px.png/>) نشان میدهد (<img src=:/vrdp_disabled_16px.png/>).</translation>
+        <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>
     </message>
     <message>
-      <source><hr>The Remote Desktop Server is listening on port %1</source>
-      <translation><hr>سرور ریموت دسکتاپ گوش میکند به پورت %1</translation>
+        <source><hr>The Remote Desktop Server is listening on port %1</source>
+        <translation type="obsolete"><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>وضعیت ویزگی های مختلف بکاررفته در این ماشین مجازی را نشان میدهد:<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>
+        <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>
     </message>
     <message>
-      <source><nobr>Indicates video capturing activity:</nobr><br>%1</source>
-      <translation><nobr>فعالیت ضبط ویدیو را نشان میدهد:</nobr><br>%1</translation>
+        <source><nobr>Indicates video capturing activity:</nobr><br>%1</source>
+        <translation><nobr>فعالیت ضبط ویدیو را نشان میدهد:</nobr><br>%1</translation>
     </message>
     <message>
-      <source><nobr><b>Video capture disabled</b></nobr></source>
-      <translation><nobr><b>ضبط ویدئو غیرفعال شده است</b></nobr></translation>
+        <source><nobr><b>Video capture disabled</b></nobr></source>
+        <translation><nobr><b>ضبط ویدئو غیرفعال شده است</b></nobr></translation>
     </message>
     <message>
-      <source><nobr><b>Video capture file:</b> %1</nobr></source>
-      <translation><nobr><b>فایل ضبط ویدیو:</b> %1</nobr></translation>
+        <source><nobr><b>Video capture file:</b> %1</nobr></source>
+        <translation><nobr><b>فایل ضبط ویدیو:</b> %1</nobr></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><br><nobr><b>%7:</b>&nbsp;%8%</nobr></source>
-      <comment>Virtualization Stuff LED</comment>
-      <translation>وضعیت سایر ویژگی ها:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr><br><nobr><b>%5:</b>&nbsp;%6</nobr><br><nobr><b>%7:</b>&nbsp;%8%</nobr></translation>
+        <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><br><nobr><b>%7:</b>&nbsp;%8%</nobr></source>
+        <comment>Virtualization Stuff LED</comment>
+        <translation>وضعیت سایر ویژگی ها:<br><nobr><b>%1:</b>&nbsp;%2</nobr><br><nobr><b>%3:</b>&nbsp;%4</nobr><br><nobr><b>%5:</b>&nbsp;%6</nobr><br><nobr><b>%7:</b>&nbsp;%8%</nobr></translation>
     </message>
     <message>
-      <source><p style='white-space:pre'><nobr>Indicates the activity of the hard disks:</nobr>%1</p></source>
-      <comment>HDD tooltip</comment>
-      <translation><p style='white-space:pre'><nobr>فعالیت دیسک سخت را نشان میدهد:</nobr>%1</p></translation>
+        <source><p style='white-space:pre'><nobr>Indicates the activity of the hard disks:</nobr>%1</p></source>
+        <comment>HDD tooltip</comment>
+        <translation><p style='white-space:pre'><nobr>فعالیت دیسک سخت را نشان میدهد:</nobr>%1</p></translation>
     </message>
     <message>
-      <source><p style='white-space:pre'><nobr>Indicates the activity of the optical drives:</nobr>%1</p></source>
-      <comment>CD tooltip</comment>
-      <translation><p style='white-space:pre'><nobr>فعالیت درایو نوری را نشان میدهد:</nobr>%1</p></translation>
+        <source><p style='white-space:pre'><nobr>Indicates the activity of the optical drives:</nobr>%1</p></source>
+        <comment>CD tooltip</comment>
+        <translation><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 drives:</nobr>%1</p></source>
-      <comment>FD tooltip</comment>
-      <translation><p style='white-space:pre'><nobr>فعالیت فلاپی درایو را نشان میدهد:</nobr>%1</p></translation>
+        <source><p style='white-space:pre'><nobr>Indicates the activity of the floppy drives:</nobr>%1</p></source>
+        <comment>FD tooltip</comment>
+        <translation><p style='white-space:pre'><nobr>فعالیت فلاپی درایو را نشان میدهد:</nobr>%1</p></translation>
     </message>
     <message>
-      <source><p style='white-space:pre'><nobr>Indicates the activity of the display:</nobr>%1</p></source>
-      <translation><p style='white-space:pre'><nobr>فعالیت نمایشگر را نشان میدهد:</nobr>%1</p></translation>
+        <source><p style='white-space:pre'><nobr>Indicates the activity of the display:</nobr>%1</p></source>
+        <translation><p style='white-space:pre'><nobr>فعالیت نمایشگر را نشان میدهد:</nobr>%1</p></translation>
     </message>
     <message>
-      <source>Indicates whether the host keyboard is captured by the guest OS:<br><nobr><img src=:/hostkey_16px.png/>&nbsp;&nbsp;keyboard is not captured</nobr><br><nobr><img src=:/hostkey_captured_16px.png/>&nbsp;&nbsp;keyboard is captured</nobr></source>
-      <translation>اگر صفحه کلید میزبان توسط سیستم عامل مهمان ضبط شده باشد را نشان میدهد:<br><nobr><img src=:/hostkey_16px.png/>&nbsp;&nbsp;صفحه کلید ضبط نشده است</nobr><br><nobr><img src=:/hostkey_captured_16px.png/>&nbsp;&nbsp;صفحه کلید ضبط شده است</nobr></translation>
+        <source>Indicates whether the host keyboard is captured by the guest OS:<br><nobr><img src=:/hostkey_16px.png/>&nbsp;&nbsp;keyboard is not captured</nobr><br><nobr><img src=:/hostkey_captured_16px.png/>&nbsp;&nbsp;keyboard is captured</nobr></source>
+        <translation>اگر صفحه کلید میزبان توسط سیستم عامل مهمان ضبط شده باشد را نشان میدهد:<br><nobr><img src=:/hostkey_16px.png/>&nbsp;&nbsp;صفحه کلید ضبط نشده است</nobr><br><nobr><img src=:/hostkey_captured_16px.png/>&nbsp;&nbsp;صفحه کلید ضبط شده است</nobr></translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UILineTextEdit</name>
     <message>
-      <source>&Edit</source>
-      <translation>ویرا&یش</translation>
+        <source>&Edit</source>
+        <translation>ویرا&یش</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineLogic</name>
     <message>
-      <source>Preview Monitor %1</source>
-      <translation>پیشنمایش مانیتور %1</translation>
+        <source>Preview Monitor %1</source>
+        <translation type="obsolete">پیشنمایش مانیتور %1</translation>
     </message>
     <message>
-      <source>Snapshot %1</source>
-      <translation>ضبط وضعیت %1</translation>
+        <source>Snapshot %1</source>
+        <translation type="obsolete">ضبط وضعیت %1</translation>
     </message>
     <message>
-      <source>No CD/DVD Devices Attached</source>
-      <translation>دستگاه سی دی/دی وی دی ضمیمه نشده است</translation>
+        <source>No CD/DVD Devices Attached</source>
+        <translation type="obsolete">دستگاه سی دی/دی وی دی ضمیمه نشده است</translation>
     </message>
     <message>
-      <source>No CD/DVD devices attached to that VM</source>
-      <translation>دستگاه سی دی/دی وی دی به ماشین مجازی ضمیمه نشده است</translation>
+        <source>No CD/DVD devices attached to that VM</source>
+        <translation type="obsolete">دستگاه سی دی/دی وی دی به ماشین مجازی ضمیمه نشده است</translation>
     </message>
     <message>
-      <source>No Floppy Devices Attached</source>
-      <translation>دستگاه فلاپی ضمیمه نشده است</translation>
+        <source>No Floppy Devices Attached</source>
+        <translation type="obsolete">دستگاه فلاپی ضمیمه نشده است</translation>
     </message>
     <message>
-      <source>No floppy devices attached to that VM</source>
-      <translation>دستگاه فلاپی به ماشین مجازی متصل نشده است</translation>
+        <source>No floppy devices attached to that VM</source>
+        <translation type="obsolete">دستگاه فلاپی به ماشین مجازی متصل نشده است</translation>
     </message>
     <message>
-      <source>No USB Devices Connected</source>
-      <translation>دستگاه یو اِس بی متصل نشده است</translation>
+        <source>No USB Devices Connected</source>
+        <translation type="obsolete">دستگاه یو اِس بی متصل نشده است</translation>
     </message>
     <message>
-      <source>No supported devices connected to the host PC</source>
-      <translation>دستگاه پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
+        <source>No supported devices connected to the host PC</source>
+        <translation type="obsolete">دستگاه پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
     </message>
     <message>
-      <source>Select a filename for the screenshot ...</source>
-      <translation>یک نام فایل برای ضبط وضعیت انتخاب کنید...</translation>
+        <source>Select a filename for the screenshot ...</source>
+        <translation>یک نام فایل برای ضبط وضعیت انتخاب کنید...</translation>
     </message>
     <message>
-      <source>No Webcams Connected</source>
-      <translation>وب کمی متصل نشده است</translation>
+        <source>No Webcams Connected</source>
+        <translation type="obsolete">وب کمی متصل نشده است</translation>
     </message>
     <message>
-      <source>No supported webcams connected to the host PC</source>
-      <translation>وب کم پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
+        <source>No supported webcams connected to the host PC</source>
+        <translation type="obsolete">وب کم پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
     </message>
     <message>
-      <source>Connect Network Adapter</source>
-      <translation>اتصال به آداپتور شبکه</translation>
+        <source>Connect Network Adapter</source>
+        <translation type="obsolete">اتصال به آداپتور شبکه</translation>
     </message>
     <message>
-      <source>Connect Network Adapter %1</source>
-      <translation>اتصال به آداپتور شبکه %1</translation>
+        <source>Connect Network Adapter %1</source>
+        <translation type="obsolete">اتصال به آداپتور شبکه %1</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsAudio</name>
     <message>
-      <source>When checked, a virtual PCI audio card will be plugged into the virtual machine and will communicate with the host audio system using the specified driver.</source>
-      <translation>وقتیکه انتخاب شده،یک کارت صوتی پی سی آی مجازی متصل خواهد شد به ماشین مجازی و با صوت سیستم میزبان توسط درایور مشخص شده ارتباط برقرار میکند.</translation>
+        <source>When checked, a virtual PCI audio card will be plugged into the virtual machine and will communicate with the host audio system using the specified driver.</source>
+        <translation>وقتیکه انتخاب شده،یک کارت صوتی پی سی آی مجازی متصل خواهد شد به ماشین مجازی و با صوت سیستم میزبان توسط درایور مشخص شده ارتباط برقرار میکند.</translation>
     </message>
     <message>
-      <source>Enable &Audio</source>
-      <translation>فعالسازی &صدا</translation>
+        <source>Enable &Audio</source>
+        <translation>فعالسازی &صدا</translation>
     </message>
     <message>
-      <source>Host Audio &Driver:</source>
-      <translation>درایور صدای میزبان&:</translation>
+        <source>Host Audio &Driver:</source>
+        <translation>درایور صدای میزبان&:</translation>
     </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>درایور خروجی صدا را کنترل میکند. گزینه <b>درایور صوتی تهی</b> باعث میشود که مهمان کارت صوتی را مشاهده کند، هر چند هر دسترسی به آن چشمپوشی میشود.</translation>
+        <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>
     </message>
     <message>
-      <source>Audio &Controller:</source>
-      <translation>کنترلر صدا&:</translation>
+        <source>Audio &Controller:</source>
+        <translation>کنترلر صدا&:</translation>
     </message>
     <message>
-      <source>Selects the type of the virtual sound card. Depending on this value, VirtualBox will provide different audio hardware to the virtual machine.</source>
-      <translation>نوع کارت صدای مجازی را انتخاب کنید.وابسته به این مقدار،ویرچوال باکس صدای سخت افزاری متفاوت به ماشین مجازی ارائه میدهد.</translation>
+        <source>Selects the type of the virtual sound card. Depending on this value, VirtualBox will provide different audio hardware to the virtual machine.</source>
+        <translation>نوع کارت صدای مجازی را انتخاب کنید.وابسته به این مقدار،ویرچوال باکس صدای سخت افزاری متفاوت به ماشین مجازی ارائه میدهد.</translation>
     </message>
     <message>
-      <source>Selects the audio output driver. The <b>Null Audio Driver</b> makes the guest see an audio card, however every access to it will be ignored.</source>
-      <translation>درایور خروجی صدا را انتخاب می کند. گزینه <b>درایور صوتی تهی</b> باعث میشود که مهمان کارت صوتی را مشاهده کند، هر چند هر دسترسی به آن چشمپوشی میشود.</translation>
+        <source>Selects the audio output driver. The <b>Null Audio Driver</b> makes the guest see an audio card, however every access to it will be ignored.</source>
+        <translation>درایور خروجی صدا را انتخاب می کند. گزینه <b>درایور صوتی تهی</b> باعث میشود که مهمان کارت صوتی را مشاهده کند، هر چند هر دسترسی به آن چشمپوشی میشود.</translation>
     </message>
-  </context>
-  <context>
+</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>شما کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده اید،که آن کمترین مقدار موردنیاز برای رفتن به حالت تمام صفحه یا حالت یکپارچه هست.</translation>
+        <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>
     </message>
     <message>
-      <source><qt>%1&nbsp;MB</qt></source>
-      <translation><qt>%1&nbsp;مگابایت</qt></translation>
+        <source><qt>%1&nbsp;MB</qt></source>
+        <translation type="obsolete"><qt>%1&nbsp;مگابایت</qt></translation>
     </message>
     <message>
-      <source>&Video</source>
-      <translation>وید&یو</translation>
+        <source>&Video</source>
+        <translation type="obsolete">وید&یو</translation>
     </message>
     <message>
-      <source>Video &Memory:</source>
-      <translation>حافظه وی&دیو:</translation>
+        <source>Video &Memory:</source>
+        <translation>حافظه وی&دیو:</translation>
     </message>
     <message>
-      <source>Controls the amount of video memory provided to the virtual machine.</source>
-      <translation>مقدار حافظه ویدیویی ارائه شده در ماشین مجازی را کنترل میکند.</translation>
+        <source>Controls the amount of video memory provided to the virtual machine.</source>
+        <translation>مقدار حافظه ویدیویی ارائه شده در ماشین مجازی را کنترل میکند.</translation>
     </message>
     <message>
-      <source>MB</source>
-      <translation>مگابایت</translation>
+        <source>MB</source>
+        <translation>مگابایت</translation>
     </message>
     <message>
-      <source>Extended Features:</source>
-      <translation>ویژگی تمدید یافته:</translation>
+        <source>Extended Features:</source>
+        <translation>ویژگی تمدید یافته:</translation>
     </message>
     <message>
-      <source>When checked, the virtual machine will be given access to the 3D graphics capabilities available on the host.</source>
-      <translation>وقتیکه انتخاب شده،ماشین مجازی دسترسی به قابلیت گرافیک سه بعدی موجود در میزبان را میدهد.</translation>
+        <source>When checked, the virtual machine will be given access to the 3D graphics capabilities available on the host.</source>
+        <translation>وقتیکه انتخاب شده،ماشین مجازی دسترسی به قابلیت گرافیک سه بعدی موجود در میزبان را میدهد.</translation>
     </message>
     <message>
-      <source>Enable &3D Acceleration</source>
-      <translation>فعالسازی &شتاب دهنده سه بعدی</translation>
+        <source>Enable &3D Acceleration</source>
+        <translation>فعالسازی &شتاب دهنده سه بعدی</translation>
     </message>
     <message>
-      <source>&Remote Display</source>
-      <translation>&نمایش ریموت</translation>
+        <source>&Remote Display</source>
+        <translation>&نمایش ریموت</translation>
     </message>
     <message>
-      <source>When checked, the VM will act as a Remote Desktop Protocol (RDP) server, allowing remote clients to connect and operate the VM (when it is running) using a standard RDP client.</source>
-      <translation>وقتیکه انتخاب شده، ماشین مجازی مانند پروتکل سرور ریموت دسکتاپ (RDP) اقدام میکند، اجازه کلاینت ریموت به اتصال و عملکرد ماشین مجازی (وقتی آن در اِجراست) توسط کلاینت استاندارد RDP .</translation>
+        <source>When checked, the VM will act as a Remote Desktop Protocol (RDP) server, allowing remote clients to connect and operate the VM (when it is running) using a standard RDP client.</source>
+        <translation>وقتیکه انتخاب شده، ماشین مجازی مانند پروتکل سرور ریموت دسکتاپ (RDP) اقدام میکند، اجازه کلاینت ریموت به اتصال و عملکرد ماشین مجازی (وقتی آن در اِجراست) توسط کلاینت استاندارد RDP .</translation>
     </message>
     <message>
-      <source>&Enable Server</source>
-      <translation>فعالسازی &سرور</translation>
+        <source>&Enable Server</source>
+        <translation>فعالسازی &سرور</translation>
     </message>
     <message>
-      <source>Server &Port:</source>
-      <translation>پورت &سرور:</translation>
+        <source>Server &Port:</source>
+        <translation>پورت &سرور:</translation>
     </message>
     <message>
-      <source>Authentication &Method:</source>
-      <translation>روش &تایید اعتبار:</translation>
+        <source>Authentication &Method:</source>
+        <translation>روش &تایید اعتبار:</translation>
     </message>
     <message>
-      <source>Defines the VRDP authentication method.</source>
-      <translation>روش تایید اعتبار VRDP را تعریف میکند.</translation>
+        <source>Defines the VRDP authentication method.</source>
+        <translation type="obsolete">روش تایید اعتبار VRDP را تعریف میکند.</translation>
     </message>
     <message>
-      <source>Authentication &Timeout:</source>
-      <translation>مدت زمان &تایید اعتبار:</translation>
+        <source>Authentication &Timeout:</source>
+        <translation>مدت زمان &تایید اعتبار:</translation>
     </message>
     <message>
-      <source>Specifies the timeout for guest authentication, in milliseconds.</source>
-      <translation>مدت زمان را برای تایید اعتبار مهمان مشخص میکند،در هزارم ثانیه.</translation>
+        <source>Specifies the timeout for guest authentication, in milliseconds.</source>
+        <translation type="obsolete">مدت زمان را برای تایید اعتبار مهمان مشخص میکند،در هزارم ثانیه.</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>شما کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده اید که آن کمترین مقدار موردنیاز برای ویدیو اِچ دی برای پخش موثر هست.</translation>
+        <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>
     </message>
     <message>
-      <source>When checked, the virtual machine will be given access to the Video Acceleration capabilities available on the host.</source>
-      <translation>وقتیکه انتخاب شده،ماشین مجازی دسترسی به قابلیت شتاب دهنده ویدیو موجود در میزبان را میدهد.</translation>
+        <source>When checked, the virtual machine will be given access to the Video Acceleration capabilities available on the host.</source>
+        <translation>وقتیکه انتخاب شده،ماشین مجازی دسترسی به قابلیت شتاب دهنده ویدیو موجود در میزبان را میدهد.</translation>
     </message>
     <message>
-      <source>Enable &2D Video Acceleration</source>
-      <translation>فعالسازی شتاب دهنده دو& بعدی</translation>
+        <source>Enable &2D Video Acceleration</source>
+        <translation>فعالسازی شتاب دهنده دو& بعدی</translation>
     </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>شماره پورت سرور VRDP. میتوانید <tt>0</tt> (صفر) را انتخاب کنید، برای انتخاب پورت 3389، پورت استاندارد برای RDP.</translation>
+        <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>
     </message>
     <message>
-      <source>Mo&nitor Count:</source>
-      <translation>تعداد &مانیتور:</translation>
+        <source>Mo&nitor Count:</source>
+        <translation>تعداد &مانیتور:</translation>
     </message>
     <message>
-      <source>Controls the amount of virtual monitors provided to the virtual machine.</source>
-      <translation>مقدار مانیتورهای مجازی ارائه شده در ماشین مجازی را کنترل میکند.</translation>
+        <source>Controls the amount of virtual monitors provided to the virtual machine.</source>
+        <translation>مقدار مانیتورهای مجازی ارائه شده در ماشین مجازی را کنترل میکند.</translation>
     </message>
     <message>
-      <source><qt>%1</qt></source>
-      <translation><qt>%1</qt></translation>
+        <source><qt>%1</qt></source>
+        <translation type="obsolete"><qt>%1</qt></translation>
     </message>
     <message>
-      <source>Specifies whether multiple simultaneous connections to the VM are permitted.</source>
-      <translation>تعیین اینکه چه موقع اتصالات چندگانه همزمان به ماشین مجازی را اجازه میدهد.</translation>
+        <source>Specifies whether multiple simultaneous connections to the VM are permitted.</source>
+        <translation type="obsolete">تعیین اینکه چه موقع اتصالات چندگانه همزمان به ماشین مجازی را اجازه میدهد.</translation>
     </message>
     <message>
-      <source>&Allow Multiple Connections</source>
-      <translation>&اجازه ارتباط چندگانه</translation>
+        <source>&Allow Multiple Connections</source>
+        <translation>&اجازه ارتباط چندگانه</translation>
     </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>شما شتاب دهنده سه بعدی را برای یک عملکرد سیستم که از درایو ویدیو WDDM استفاده میکند فعال کرده اید. برای حداکثر کارایی VRAM مهمان را حداقل روی <b>%1</b> تنظیم کنید.</translation>
+        <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>
     </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>شما شتاب دهنده ویدیو دو بعدی را فعال کرده اید.چنانکه شتاب دهنده ویدیو دو بعدی فقط برای ویندوز مهمان ها پشتیبانی شده است،این ویزگی غیرفعال خواهد شد.</translation>
+        <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>
     </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>شما شتاب دهنده سه بعدی را فعال کرده اید. هرچند، شتاب دهنده سه بعدی در راه اندازی میزبان فعلی کار نخواهد کرد بنابراین شما قادر به شروع ماشین مجازی نیستید.</translation>
+        <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>
     </message>
     <message>
-      <source>Video &Capture</source>
-      <translation>&ضبط ویدئو</translation>
+        <source>Video &Capture</source>
+        <translation>&ضبط ویدئو</translation>
     </message>
     <message>
-      <source>When checked, VirtualBox will record the virtual machine session as a video file.</source>
-      <translation>وقتیکه انتخاب شده،ویرچوال باکس،جلسه یا وضعیت ماشین مجازی را در فایل ویدیویی ضبط خواهد کرد.</translation>
+        <source>When checked, VirtualBox will record the virtual machine session as a video file.</source>
+        <translation>وقتیکه انتخاب شده،ویرچوال باکس،جلسه یا وضعیت ماشین مجازی را در فایل ویدیویی ضبط خواهد کرد.</translation>
     </message>
     <message>
-      <source>&Enable Video Capture</source>
-      <translation>فعالسازی &ضبط ویدیو</translation>
+        <source>&Enable Video Capture</source>
+        <translation>فعالسازی &ضبط ویدیو</translation>
     </message>
     <message>
-      <source>File &Path:</source>
-      <translation>&مسیر فایل:</translation>
+        <source>File &Path:</source>
+        <translation>&مسیر فایل:</translation>
     </message>
     <message>
-      <source>This setting determines the filename VirtualBox uses to save the recorded content.</source>
-      <translation>این گزینه نام فایلی را که ویرچوال باکس برای محتوای ضبط شده استفاده میکند را تعیین میکند.</translation>
+        <source>This setting determines the filename VirtualBox uses to save the recorded content.</source>
+        <translation type="obsolete">این گزینه نام فایلی را که ویرچوال باکس برای محتوای ضبط شده استفاده میکند را تعیین میکند.</translation>
     </message>
     <message>
-      <source>Frame &Size:</source>
-      <translation>اندازه &فریم:</translation>
+        <source>Frame &Size:</source>
+        <translation>اندازه &فریم:</translation>
     </message>
     <message>
-      <source>This setting determines the resolution (frame size) of the recorded video.</source>
-      <translation>این تنظیم نسبت دید (اندازه فریم) ویدیو ضبط شده را تعیین میکند.</translation>
+        <source>This setting determines the resolution (frame size) of the recorded video.</source>
+        <translation type="obsolete">این تنظیم نسبت دید (اندازه فریم) ویدیو ضبط شده را تعیین میکند.</translation>
     </message>
     <message>
-      <source>This setting determines the <b>horizontal</b> resolution (frame width) of the recorded video.</source>
-      <translation>این تنظیم نسبت دید <b>اُفقی</b> (عرض فریم) ویدیو ضبط شده را تعیین میکند.</translation>
+        <source>This setting determines the <b>horizontal</b> resolution (frame width) of the recorded video.</source>
+        <translation type="obsolete">این تنظیم نسبت دید <b>اُفقی</b> (عرض فریم) ویدیو ضبط شده را تعیین میکند.</translation>
     </message>
     <message>
-      <source>This setting determines the <b>vertical</b> resolution (frame height) of the recorded video.</source>
-      <translation>این تنظیم نسبت دید <b>عمودی</b> (ارتفاع فریم) ویدیو ضبط شده را تعیین میکند.</translation>
+        <source>This setting determines the <b>vertical</b> resolution (frame height) of the recorded video.</source>
+        <translation type="obsolete">این تنظیم نسبت دید <b>عمودی</b> (ارتفاع فریم) ویدیو ضبط شده را تعیین میکند.</translation>
     </message>
     <message>
-      <source>&Frame Rate:</source>
-      <translation>&نرخ فریم:</translation>
+        <source>&Frame Rate:</source>
+        <translation>&نرخ فریم:</translation>
     </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>این تنظیم حداکثر تعداد<b>فریم بر ثانیه</b> تعیین میکند. فریم های اضافی رد خواهد شد. کاهش این مقدار باعث افزایش تعداد فریم های رد شده میشود درنهایت حجم فایل کم میشود.</translation>
+        <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>
     </message>
     <message>
-      <source>&Quality:</source>
-      <translation>&کیفیت:</translation>
+        <source>&Quality:</source>
+        <translation>&کیفیت:</translation>
     </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>این تنظیم <b>کیفیت</b> را تعیین میکند. افزایش این مقدار کیفیت ویدیو را بیشتر میکند اما حجم فایل نیز بیشتر میشود.</translation>
+        <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>
     </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>این تنظیم نرخ بیت را در <b>کیلوبیت بر ثانیه</b> تعیین میکند. افزایش این مقدار کیفیت ویدیو را بیشتر میکند اما حجم فایل نیز بیشتر میشود.</translation>
+        <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>
     </message>
     <message>
-      <source>&Screens:</source>
-      <translation>&نمایشگرها:</translation>
+        <source>&Screens:</source>
+        <translation>&نمایشگرها:</translation>
     </message>
     <message>
-      <source>The virtual machine is set up to use hardware graphics acceleration. However the host system does not currently provide this, so you will not be able to start the machine.</source>
-      <translation>ماشین مجازی طوری راه اندازی شده که از سخت افزار شتاب دهنده گرافیکی استفاده کند. هرچند سیستم میزبان اکنون این را ارائه نمیکند، بنابراین شما قادر به اجرای ماشین مجازی نیستید.</translation>
+        <source>The virtual machine is set up to use hardware graphics acceleration. However the host system does not currently provide this, so you will not be able to start the machine.</source>
+        <translation>ماشین مجازی طوری راه اندازی شده که از سخت افزار شتاب دهنده گرافیکی استفاده کند. هرچند سیستم میزبان اکنون این را ارائه نمیکند، بنابراین شما قادر به اجرای ماشین مجازی نیستید.</translation>
     </message>
     <message>
-      <source>The virtual machine is currently assigned less than <b>%1</b> of video memory which is the minimum amount required to switch to fullscreen or seamless mode.</source>
-      <translation>اکنون ماشین مجازی کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده است.که آن کمترین مقدار موردنیاز برای رفتن به حالت تمام صفحه یا حالت یکپارچه هست.</translation>
+        <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>
     </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>
-      <translation>اکنون ماشین مجازی کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده است.که آن کمترین مقدار موردنیاز برای ویدیو کیفیت بالا با پخش موثر است.</translation>
+        <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>
+        <translation>اکنون ماشین مجازی کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده است.که آن کمترین مقدار موردنیاز برای ویدیو کیفیت بالا با پخش موثر است.</translation>
     </message>
     <message>
-      <source>The virtual machine is set up to use hardware graphics acceleration and the operating system hint is set to Windows Vista or later. For best performance you should set the machine's video memory to at least b>%1</b>.</source>
-      <translation>ماشین مجازی طوری راه اندازی شده که از سخت افزار شتاب دهنده گرافیکی استفاده کند و سیستم عامل اشارع دارد که آن به ویندوز ویستا به بعد تنظیم شده است. برای بهترین کارایی باید حافظه ویدیویی ماشین را حداقل به b>%1</b> تنظیم کنید.</translation>
+        <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>
     </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>
-      <translation>ماشین مجازی طوری راه اندازی شده که از جریان ویدیو شتاب دهنده استفاده کند. از آنجا که این ویژگی فقط با ویندوز سیستم مهمان کار میکند،آن غیر فعال خواهد شد.</translation>
+        <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>
+        <translation>ماشین مجازی طوری راه اندازی شده که از جریان ویدیو شتاب دهنده استفاده کند. از آنجا که این ویژگی فقط با ویندوز سیستم مهمان کار میکند،آن غیر فعال خواهد شد.</translation>
     </message>
     <message>
-      <source>The VRDE server port value is not currently specified.</source>
-      <translation>مقدار پورت سرور VRDE اکنون تعیین شده است.</translation>
+        <source>The VRDE server port value is not currently specified.</source>
+        <translation>مقدار پورت سرور VRDE اکنون تعیین شده است.</translation>
     </message>
     <message>
-      <source>The VRDE authentication timeout value is not currently specified.</source>
-      <translation>مقدار مدت زمان تایید اعتبار VRDE اکنون تعیین نشده است.</translation>
+        <source>The VRDE authentication timeout value is not currently specified.</source>
+        <translation>مقدار مدت زمان تایید اعتبار VRDE اکنون تعیین نشده است.</translation>
     </message>
     <message>
-      <source>User Defined</source>
-      <translation>تعریف شده توسط کاربر</translation>
+        <source>User Defined</source>
+        <translation>تعریف شده توسط کاربر</translation>
     </message>
     <message>
-      <source>%1 fps</source>
-      <translation>%1 فریم بر ثانیه</translation>
+        <source>%1 fps</source>
+        <translation>%1 فریم بر ثانیه</translation>
     </message>
     <message>
-      <source>fps</source>
-      <translation>فریم بر ثانیه</translation>
+        <source>fps</source>
+        <translation>فریم بر ثانیه</translation>
     </message>
     <message>
-      <source>low</source>
-      <comment>quality</comment>
-      <translation>کم</translation>
+        <source>low</source>
+        <comment>quality</comment>
+        <translation>کم</translation>
     </message>
     <message>
-      <source>medium</source>
-      <comment>quality</comment>
-      <translation>متوسط</translation>
+        <source>medium</source>
+        <comment>quality</comment>
+        <translation>متوسط</translation>
     </message>
     <message>
-      <source>high</source>
-      <comment>quality</comment>
-      <translation>بالا</translation>
+        <source>high</source>
+        <comment>quality</comment>
+        <translation>بالا</translation>
     </message>
     <message>
-      <source>kbps</source>
-      <translation>کیلوبیت بر ثانیه</translation>
+        <source>kbps</source>
+        <translation>کیلوبیت بر ثانیه</translation>
     </message>
     <message>
-      <source>Screen %1</source>
-      <translation>صفحه نمایش %1</translation>
+        <source>Screen %1</source>
+        <translation>صفحه نمایش %1</translation>
     </message>
     <message>
-      <source>Enable video recording for screen %1.</source>
-      <translation>ضبط ویدیو برای صفحه نمایش %1 فعال شود.</translation>
+        <source>Enable video recording for screen %1.</source>
+        <translation type="obsolete">ضبط ویدیو برای صفحه نمایش %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>نمایش ریموت اکنون برای این ماشین مجازی فعال شده است. هرچند، نیاز دارد که <b>%1</b> نصب شود. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود نمایید،درغیر اینصورت ماشین مجازی با نمایش ریموت غیرفعال شده اِجرا خواهد شد</translation>
+        <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>
     </message>
     <message>
-      <source>&Screen</source>
-      <translation>نمایشگر&</translation>
+        <source>&Screen</source>
+        <translation>نمایشگر&</translation>
     </message>
     <message>
-      <source>Scale Factor:</source>
-      <translation>ضریب مقیاس:</translation>
+        <source>Scale Factor:</source>
+        <translation>ضریب مقیاس:</translation>
     </message>
     <message>
-      <source>Controls the guest screen scale factor.</source>
-      <translation>کنترل ضریب مقیاس نمایشگر مهمان</translation>
+        <source>Controls the guest screen scale factor.</source>
+        <translation>کنترل ضریب مقیاس نمایشگر مهمان</translation>
     </message>
     <message>
-      <source>%</source>
-      <translation>%</translation>
+        <source>%</source>
+        <translation>%</translation>
     </message>
     <message>
-      <source>HiDPI Support:</source>
-      <translation>پشتیبانی HiDPI :</translation>
+        <source>HiDPI Support:</source>
+        <translation>پشتیبانی HiDPI :</translation>
     </message>
     <message>
-      <source>When checked, guest screen contents will not be scaled up to compensate for high host screen resolutions.</source>
-      <translation>وقتیکه انتخاب شده،محتویات نمایشگر مهمان به مقیاس بزرگتری برای جبران نسبت دید نمایشگر بزرگتر میزبان در نخواهد آمد.</translation>
+        <source>When checked, guest screen contents will not be scaled up to compensate for high host screen resolutions.</source>
+        <translation>وقتیکه انتخاب شده،محتویات نمایشگر مهمان به مقیاس بزرگتری برای جبران نسبت دید نمایشگر بزرگتر میزبان در نخواهد آمد.</translation>
     </message>
     <message>
-      <source>Use &Unscaled HiDPI Output</source>
-      <translation>استفاده از خروجی HiDPI مقیاس بندی نشده&</translation>
+        <source>Use &Unscaled HiDPI Output</source>
+        <translation>استفاده از خروجی HiDPI مقیاس بندی نشده&</translation>
     </message>
     <message>
-      <source>Acceleration:</source>
-      <translation>شتاب دهنده:</translation>
+        <source>Acceleration:</source>
+        <translation>شتاب دهنده:</translation>
     </message>
     <message>
-      <source>Holds the VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP.</source>
-      <translation>شماره پورت سرور VRDP را نگه می دارد. میتوانید <tt>0</tt> (صفر) را انتخاب کنید، برای انتخاب پورت 3389، پورت استاندارد برای RDP.</translation>
+        <source>Holds the VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP.</source>
+        <translation>شماره پورت سرور VRDP را نگه می دارد. میتوانید <tt>0</tt> (صفر) را انتخاب کنید، برای انتخاب پورت 3389، پورت استاندارد برای RDP.</translation>
     </message>
     <message>
-      <source>Selects the VRDP authentication method.</source>
-      <translation>روش تایید اعتبار VRDP را انتخاب کنید</translation>
+        <source>Selects the VRDP authentication method.</source>
+        <translation>روش تایید اعتبار VRDP را انتخاب کنید</translation>
     </message>
     <message>
-      <source>Holds the timeout for guest authentication, in milliseconds.</source>
-      <translation>مدت زمان را برای تایید اعتبار مهمان نگه می دارد،در هزارم ثانیه.</translation>
+        <source>Holds the timeout for guest authentication, in milliseconds.</source>
+        <translation>مدت زمان را برای تایید اعتبار مهمان نگه می دارد،در هزارم ثانیه.</translation>
     </message>
     <message>
-      <source>When checked, multiple simultaneous connections to the VM are permitted.</source>
-      <translation>وقتیکه انتخاب شده،اتصالات چندگانه همزمان به ماشین مجازی را اجازه میدهد.</translation>
+        <source>When checked, multiple simultaneous connections to the VM are permitted.</source>
+        <translation>وقتیکه انتخاب شده،اتصالات چندگانه همزمان به ماشین مجازی را اجازه میدهد.</translation>
     </message>
     <message>
-      <source>Holds the filename VirtualBox uses to save the recorded content.</source>
-      <translation>نام فایلی را که ویرچوال باکس برای ذخیره محتوای ضبط شده استفاده می کند را نگه می دارد.</translation>
+        <source>Holds the filename VirtualBox uses to save the recorded content.</source>
+        <translation>نام فایلی را که ویرچوال باکس برای ذخیره محتوای ضبط شده استفاده می کند را نگه می دارد.</translation>
     </message>
     <message>
-      <source>Selects the resolution (frame size) of the recorded video.</source>
-      <translation>نسبت دید (اندازه فریم) ویدیو ضبط شده را انتخاب کنید</translation>
+        <source>Selects the resolution (frame size) of the recorded video.</source>
+        <translation>نسبت دید (اندازه فریم) ویدیو ضبط شده را انتخاب کنید</translation>
     </message>
     <message>
-      <source>Holds the <b>horizontal</b> resolution (frame width) of the recorded video.</source>
-      <translation>نسبت دید <b>اُفقی</b> (عرض فریم) ویدیو ضبط شده را حفظ میکند</translation>
+        <source>Holds the <b>horizontal</b> resolution (frame width) of the recorded video.</source>
+        <translation>نسبت دید <b>اُفقی</b> (عرض فریم) ویدیو ضبط شده را حفظ میکند</translation>
     </message>
     <message>
-      <source>Holds the <b>vertical</b> resolution (frame height) of the recorded video.</source>
-      <translation>نسبت دید <b>عمودی</b> (ارتفاع فریم) ویدیو ضبط شده را حفظ میکند</translation>
+        <source>Holds the <b>vertical</b> resolution (frame height) of the recorded video.</source>
+        <translation>نسبت دید <b>عمودی</b> (ارتفاع فریم) ویدیو ضبط شده را حفظ میکند</translation>
     </message>
     <message>
-      <source>Controls the maximum number of <b>frames per second</b>. Additional frames will be skipped. Reducing this value will increase the number of skipped frames and reduce the file size.</source>
-      <translation>حداکثر تعداد <b>فریم بر ثانیه</b> را کنترل می کند. فریم های اضافه رَد میشوند.کاهش این مقدار تعداد فریم های رَد شده را افزایش میدهد،در نتیجه حجم فایل کم میشود</translation>
+        <source>Controls the maximum number of <b>frames per second</b>. Additional frames will be skipped. Reducing this value will increase the number of skipped frames and reduce the file size.</source>
+        <translation>حداکثر تعداد <b>فریم بر ثانیه</b> را کنترل می کند. فریم های اضافه رَد میشوند.کاهش این مقدار تعداد فریم های رَد شده را افزایش میدهد،در نتیجه حجم فایل کم میشود</translation>
     </message>
     <message>
-      <source>Controls the <b>quality</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
-      <translation>کنترل <b>کیفیت</b>. افزایش این مقدار کیفیت ویدیو را بهتر خواهد کرد ولی حجم فایل هم افزایش پیدا خواهد کرد</translation>
+        <source>Controls the <b>quality</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
+        <translation>کنترل <b>کیفیت</b>. افزایش این مقدار کیفیت ویدیو را بهتر خواهد کرد ولی حجم فایل هم افزایش پیدا خواهد کرد</translation>
     </message>
     <message>
-      <source>Holds the bitrate in <b>kilobits per second</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
-      <translation>نرخ بیت را در <b>کیلوبیت بر ثانیه</b> تعیین میکند. افزایش این مقدار کیفیت ویدیو را بیشتر میکند اما حجم فایل نیز بیشتر میشود.</translation>
+        <source>Holds the bitrate in <b>kilobits per second</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
+        <translation>نرخ بیت را در <b>کیلوبیت بر ثانیه</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 to switch to full-screen or seamless mode.</source>
-      <translation>اکنون ماشین مجازی کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده است.که آن حداقل مقدار مورد نیاز برای رفتن به حالت تمام صفحه یا یکپارچه است.</translation>
+        <source>The virtual machine is currently assigned less than <b>%1</b> of video memory which is the minimum amount required to switch to full-screen or seamless mode.</source>
+        <translation>اکنون ماشین مجازی کمتر از <b>%1</b> حافظه ویدیویی اختصاص داده است.که آن حداقل مقدار مورد نیاز برای رفتن به حالت تمام صفحه یا یکپارچه است.</translation>
     </message>
     <message>
-      <source>The virtual machine is set up to use hardware graphics acceleration and the operating system hint is set to Windows Vista or later. For best performance you should set the machine's video memory to at least <b>%1</b>.</source>
-      <translation>ماشین مجازی طوری راه اندازی شده که از سخت افزار شتاب دهنده گرافیکی استفاده کند و سیستم عامل اشارع دارد که آن به ویندوز ویستا به بعد تنظیم شده است. برای بهترین کارایی باید حافظه ویدیویی ماشین را حداقل به <b>%1</b> تنظیم کنید.</translation>
+        <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>ماشین مجازی طوری راه اندازی شده که از سخت افزار شتاب دهنده گرافیکی استفاده کند و سیستم عامل اشارع دارد که آن به ویندوز ویستا به بعد تنظیم شده است. برای بهترین کارایی باید حافظه ویدیویی ماشین را حداقل به <b>%1</b> تنظیم کنید.</translation>
     </message>
     <message>
-      <source>Remote Display is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site as otherwise your VM will be started with Remote Display disabled.</source>
-      <translation>نمایش ریموت اکنون برای این ماشین مجازی فعال شده است. هرچند، نیاز دارد که <b>%1</b> نصب شود. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود نمایید،درغیر اینصورت ماشین مجازی با نمایش ریموت غیرفعال شده اِجرا خواهد شد</translation>
+        <source>Remote Display is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site as otherwise your VM will be started with Remote Display disabled.</source>
+        <translation>نمایش ریموت اکنون برای این ماشین مجازی فعال شده است. هرچند، نیاز دارد که <b>%1</b> نصب شود. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود نمایید،درغیر اینصورت ماشین مجازی با نمایش ریموت غیرفعال شده اِجرا خواهد شد</translation>
     </message>
     <message>
-      <source>%1 MB</source>
-      <translation>%1 مگابایت</translation>
+        <source>%1 MB</source>
+        <translation>%1 مگابایت</translation>
     </message>
     <message>
-      <source>%1%</source>
-      <translation>%1%</translation>
+        <source>%1%</source>
+        <translation>%1%</translation>
     </message>
     <message>
-      <source><i>About %1MB per 5 minute video</i></source>
-      <translation><i>در حدود %1 مگابایت در هر 5 دقیقه ویدیو</i></translation>
+        <source><i>About %1MB per 5 minute video</i></source>
+        <translation><i>در حدود %1 مگابایت در هر 5 دقیقه ویدیو</i></translation>
     </message>
     <message>
-      <source>When checked, enables video recording for screen %1.</source>
-      <translation>وقتیکه انتخاب شده، ضبط ویدیو را برای نمایشگر %1 فعال میکند.</translation>
+        <source>When checked, enables video recording for screen %1.</source>
+        <translation>وقتیکه انتخاب شده، ضبط ویدیو را برای نمایشگر %1 فعال میکند.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <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>مسیری که ضبط وضعیت ماشین مجازی در آن ذخیره شده را نشان میدهد.آگاه باشید که ضبط وضعیت فضای دیسک بسیاری استفاده می کند.</translation>
+        <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>
     </message>
     <message>
-      <source>&Basic</source>
-      <translation>&پایه ای</translation>
+        <source>&Basic</source>
+        <translation type="obsolete">&پایه ای</translation>
     </message>
     <message>
-      <source>&Advanced</source>
-      <translation>پی&شرفته</translation>
+        <source>&Advanced</source>
+        <translation type="obsolete">پی&شرفته</translation>
     </message>
     <message>
-      <source>&Shared Clipboard:</source>
-      <translation>کلیپ برد& اشتراکی:</translation>
+        <source>&Shared Clipboard:</source>
+        <translation>کلیپ برد& اشتراکی:</translation>
     </message>
     <message>
-      <source>Selects which clipboard data will be copied between the guest and the host OS. This feature requires Guest Additions to be installed in the guest OS.</source>
-      <translation>انتخاب اینکه کدام داده کلیپ برد بین مهمان و سیستم عامل میزبان کپی خواهد شد.این ویژگی نیازدارد که افزونه مهمان در سیستم عامل مهمان نصب شده باشد.</translation>
+        <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>انتخاب اینکه کدام داده کلیپ برد بین مهمان و سیستم عامل میزبان کپی خواهد شد.این ویژگی نیازدارد که افزونه مهمان در سیستم عامل مهمان نصب شده باشد.</translation>
     </message>
     <message>
-      <source>S&napshot Folder:</source>
-      <translation>پوشه& ضبط وضعیت:</translation>
+        <source>S&napshot Folder:</source>
+        <translation>پوشه& ضبط وضعیت:</translation>
     </message>
     <message>
-      <source>&Description</source>
-      <translation>تو&ضیحات</translation>
+        <source>&Description</source>
+        <translation type="obsolete">تو&ضیحات</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>
-      <translation>توضیحات ماشین مجازی را نشان میدهد.فیلد توضیحات برای نوشتن توضیح در جزئیات پیکربندی سیستم عامل مهمان نصب شده سودمند است.</translation>
+        <source>Holds the description of the virtual machine. The description field is useful for commenting on configuration details of the installed guest OS.</source>
+        <translation>توضیحات ماشین مجازی را نشان میدهد.فیلد توضیحات برای نوشتن توضیح در جزئیات پیکربندی سیستم عامل مهمان نصب شده سودمند است.</translation>
     </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>وقتیکه انتخاب شده،هرگونه تغییر اجرا شده در سی دی/دی وی دی بارگیری شده یا رسانه فلاپی حین اِجرای ماشین در فایل تنظیمات بمنظور حفظ پیکربندی رسانه بارگیری شده بین اِجراها ذخیره خواهد شد.</translation>
+        <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>
     </message>
     <message>
-      <source>Removable Media:</source>
-      <translation>رسانه قابل حمل:</translation>
+        <source>Removable Media:</source>
+        <translation type="obsolete">رسانه قابل حمل:</translation>
     </message>
     <message>
-      <source>&Remember Runtime Changes</source>
-      <translation>&حفظ تغییرات زمان اِجرا</translation>
+        <source>&Remember Runtime Changes</source>
+        <translation type="obsolete">&حفظ تغییرات زمان اِجرا</translation>
     </message>
     <message>
-      <source>Mini ToolBar:</source>
-      <translation>نوارابزار کوچک:</translation>
+        <source>Mini ToolBar:</source>
+        <translation type="obsolete">نوارابزار کوچک:</translation>
     </message>
     <message>
-      <source>If checked, show the Mini ToolBar in Fullscreen and Seamless modes.</source>
-      <translation>اگر انتخاب شده،نوار ابزار کوچک را در حالت تمام صفحه یا یکپارچه نشان میدهد.</translation>
+        <source>If checked, show the Mini ToolBar in Fullscreen and Seamless modes.</source>
+        <translation type="obsolete">اگر انتخاب شده،نوار ابزار کوچک را در حالت تمام صفحه یا یکپارچه نشان میدهد.</translation>
     </message>
     <message>
-      <source>Show in &Fullscreen/Seamless</source>
-      <translation>نمایش &در تمام صفحه/یکپارچه</translation>
+        <source>Show in &Fullscreen/Seamless</source>
+        <translation type="obsolete">نمایش &در تمام صفحه/یکپارچه</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>اگر انتخاب شده، نوارابزار کوچک را در بالای صفحه نشان میدهد،بجای موقعیت پیش فرض آن در پایین صفحه.</translation>
+        <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>
     </message>
     <message>
-      <source>Show at &Top of Screen</source>
-      <translation>نمایش در &بالای صفحه</translation>
+        <source>Show at &Top of Screen</source>
+        <translation type="obsolete">نمایش در &بالای صفحه</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>شما سیستم عامل 64 بیتی مهمان برای این ماشین مجازی انتخاب کرده اید. همینطور مهمان به سخت افزار مجازی سازی نیاز دارد (VT-x/AMD-V)، این ویزگی خودکار فعال خواهد شد.</translation>
+        <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>
     </message>
     <message>
-      <source>&Drag'n'Drop:</source>
-      <translation>&کشیدن 'و' رهاکردن:</translation>
+        <source>&Drag'n'Drop:</source>
+        <translation type="obsolete">&کشیدن 'و' رهاکردن:</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>
-      <translation>انتخاب اینکه کدام داده بین مهمان و سیستم عامل میزبان توسط کشیدن و رهاکردن کپی خواهد شد.این ویژگی نیازدارد که افزونه مهمان در سیستم عامل مهمان نصب شده باشد.</translation>
+        <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>انتخاب اینکه کدام داده بین مهمان و سیستم عامل میزبان توسط کشیدن و رهاکردن کپی خواهد شد.این ویژگی نیازدارد که افزونه مهمان در سیستم عامل مهمان نصب شده باشد.</translation>
     </message>
     <message>
-      <source>No name specified for the virtual machine.</source>
-      <translation>نامی برای ماشین مجازی مشخص نشده است.</translation>
+        <source>No name specified for the virtual machine.</source>
+        <translation>نامی برای ماشین مجازی مشخص نشده است.</translation>
     </message>
     <message>
-      <source>The virtual machine operating system hint is set to a 64-bit type. 64-bit guest systems require hardware virtualization, so this will be enabled automatically if you confirm the changes.</source>
-      <translation>سیستم عامل ماشین مجازی اشاره میکند که به نوع 64 بیت تنظیم شده است.سیستم مهمان 64 بیت نیاز به مجازی سازی سخت افزاری دارد،بنابراین اگر شما تغییرات را تایید کنید،آن خودکار فعال خواهد شد.</translation>
+        <source>The virtual machine operating system hint is set to a 64-bit type. 64-bit guest systems require hardware virtualization, so this will be enabled automatically if you confirm the changes.</source>
+        <translation>سیستم عامل ماشین مجازی اشاره میکند که به نوع 64 بیت تنظیم شده است.سیستم مهمان 64 بیت نیاز به مجازی سازی سخت افزاری دارد،بنابراین اگر شما تغییرات را تایید کنید،آن خودکار فعال خواهد شد.</translation>
     </message>
     <message>
-      <source>Basi&c</source>
-      <translation>اساسی&</translation>
+        <source>Basi&c</source>
+        <translation>اساسی&</translation>
     </message>
     <message>
-      <source>A&dvanced</source>
-      <translation>پی&شرفته</translation>
+        <source>A&dvanced</source>
+        <translation>پی&شرفته</translation>
     </message>
     <message>
-      <source>D&rag'n'Drop:</source>
-      <translation>&کشیدن و رهاکردن:</translation>
+        <source>D&rag'n'Drop:</source>
+        <translation>&کشیدن و رهاکردن:</translation>
     </message>
     <message>
-      <source>D&escription</source>
-      <translation>توضیحات&</translation>
+        <source>D&escription</source>
+        <translation>توضیحات&</translation>
     </message>
     <message>
-      <source>Enc&ryption</source>
-      <translation>رمزگذاری&</translation>
+        <source>Enc&ryption</source>
+        <translation>رمزگذاری&</translation>
     </message>
     <message>
-      <source>When checked, enables encryption for this virtual machine.</source>
-      <translation>وقتیکه انتخاب شده،رمزگذاری برای این ماشین مجازی </translation>
+        <source>When checked, enables encryption for this virtual machine.</source>
+        <translation>وقتیکه انتخاب شده،رمزگذاری برای این ماشین مجازی </translation>
     </message>
     <message>
-      <source>En&able Encryption</source>
-      <translation>فعالسازی رمز گذاری&</translation>
+        <source>En&able Encryption</source>
+        <translation>فعالسازی رمز گذاری&</translation>
     </message>
     <message>
-      <source>Encryption C&ipher:</source>
-      <translation>کُد گذاریِ رمزگذاری&:</translation>
+        <source>Encryption C&ipher:</source>
+        <translation>کُد گذاریِ رمزگذاری&:</translation>
     </message>
     <message>
-      <source>Selects the cipher to be used for encrypting the virtual machine disks.</source>
-      <translation>نوع کُد گذاری برای رمزگذاری دیسک ماشین مجازی را انتخاب کنید.</translation>
+        <source>Selects the cipher to be used for encrypting the virtual machine disks.</source>
+        <translation>نوع کُد گذاری برای رمزگذاری دیسک ماشین مجازی را انتخاب کنید.</translation>
     </message>
     <message>
-      <source>E&nter New Password:</source>
-      <translation>رمزعبور& جدید را وارد کنید:</translation>
+        <source>E&nter New Password:</source>
+        <translation>رمزعبور& جدید را وارد کنید:</translation>
     </message>
     <message>
-      <source>Holds the password to be assigned to the virtual machine.</source>
-      <translation>رمزعبور اختصاص داده شده به ماشین مجازی را نگه می دارد</translation>
+        <source>Holds the password to be assigned to the virtual machine.</source>
+        <translation>رمزعبور اختصاص داده شده به ماشین مجازی را نگه می دارد</translation>
     </message>
     <message>
-      <source>C&onfirm New Password:</source>
-      <translation>تأیید& رمزعبور جدید:</translation>
+        <source>C&onfirm New Password:</source>
+        <translation>تأیید& رمزعبور جدید:</translation>
     </message>
     <message>
-      <source>Confirms the password to be assigned to the virtual machine.</source>
-      <translation>تأیید رمز عبوری که به ماشین مجازی اختصاص داده شده است</translation>
+        <source>Confirms the password to be assigned to the virtual machine.</source>
+        <translation>تأیید رمز عبوری که به ماشین مجازی اختصاص داده شده است</translation>
     </message>
     <message>
-      <source>You are trying to encrypt this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site.</source>
-      <translation>شما درصدد رمزگذاری این ماشین مجازی هستید. هرچند، این نیاز دارد که <i>%1</i> نصب شود. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود کنید.</translation>
+        <source>You are trying to encrypt this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site.</source>
+        <translation>شما درصدد رمزگذاری این ماشین مجازی هستید. هرچند، این نیاز دارد که <i>%1</i> نصب شود. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود کنید.</translation>
     </message>
     <message>
-      <source>Encryption cipher type not specified.</source>
-      <translation>نوع کُد گذاریِ رمزگذاری تعیین نشده است.</translation>
+        <source>Encryption cipher type not specified.</source>
+        <translation>نوع کُد گذاریِ رمزگذاری تعیین نشده است.</translation>
     </message>
     <message>
-      <source>Encryption password empty.</source>
-      <translation>رمزعبور رمزگذاری خالی است</translation>
+        <source>Encryption password empty.</source>
+        <translation>رمزعبور رمزگذاری خالی است</translation>
     </message>
     <message>
-      <source>Encryption passwords do not match.</source>
-      <translation>رمزعبور رمز گذاری مثل هم نیست</translation>
+        <source>Encryption passwords do not match.</source>
+        <translation>رمزعبور رمز گذاری مثل هم نیست</translation>
     </message>
     <message>
-      <source>Holds the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of storage space.</source>
-      <translation>مسیری که ضبط وضعیت های این ماشین مجازی ذخیره خواهند شد را نگه میدارد.بخاطر داشته باشید که گرفتن ضبط وضعیت های زیاد فضای زیادی از هارد شما را پُر می کند</translation>
+        <source>Holds the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of storage space.</source>
+        <translation>مسیری که ضبط وضعیت های این ماشین مجازی ذخیره خواهند شد را نگه میدارد.بخاطر داشته باشید که گرفتن ضبط وضعیت های زیاد فضای زیادی از هارد شما را پُر می کند</translation>
     </message>
     <message>
-      <source>Leave Unchanged</source>
-      <comment>cipher type</comment>
-      <translation>تغییری نده</translation>
+        <source>Leave Unchanged</source>
+        <comment>cipher type</comment>
+        <translation>تغییری نده</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsInterface</name>
     <message>
-      <source>Allows to modify VM menu-bar contents.</source>
-      <translation>اجازه ویرایش محتوای نوار منوی ماشین مجازی</translation>
+        <source>Allows to modify VM menu-bar contents.</source>
+        <translation>اجازه ویرایش محتوای نوار منوی ماشین مجازی</translation>
     </message>
     <message>
-      <source>Mini ToolBar:</source>
-      <translation>نوارابزار کوچک:</translation>
+        <source>Mini ToolBar:</source>
+        <translation>نوارابزار کوچک:</translation>
     </message>
     <message>
-      <source>When checked, show the Mini ToolBar in full-screen and seamless modes.</source>
-      <translation>وقتیکه انتخاب شده،نوار ابزار کوچک را در حالت تمام صفحه و یکپارچه نشان میدهد</translation>
+        <source>When checked, show the Mini ToolBar in full-screen and seamless modes.</source>
+        <translation>وقتیکه انتخاب شده،نوار ابزار کوچک را در حالت تمام صفحه و یکپارچه نشان میدهد</translation>
     </message>
     <message>
-      <source>Show in &Full-screen/Seamless</source>
-      <translation>نمایش در تمام صفحه/یکپارچه&</translation>
+        <source>Show in &Full-screen/Seamless</source>
+        <translation>نمایش در تمام صفحه/یکپارچه&</translation>
     </message>
     <message>
-      <source>When checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen.</source>
-      <translation>وقتیکه انتخاب شده،نوار ابزار کوچک در بالا صفحه نمایشگر نشان میدهد،در غیر اینصورت در مکان پیش فرض در پایین نمایشگر نشان داده خواهد شد</translation>
+        <source>When checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen.</source>
+        <translation>وقتیکه انتخاب شده،نوار ابزار کوچک در بالا صفحه نمایشگر نشان میدهد،در غیر اینصورت در مکان پیش فرض در پایین نمایشگر نشان داده خواهد شد</translation>
     </message>
     <message>
-      <source>Show at &Top of Screen</source>
-      <translation>نمایش در &بالای صفحه</translation>
+        <source>Show at &Top of Screen</source>
+        <translation>نمایش در &بالای صفحه</translation>
     </message>
     <message>
-      <source>Allows to modify VM status-bar contents.</source>
-      <translation>اجازه ویرایش محتوای نوار وضعیت ماشین مجازی</translation>
+        <source>Allows to modify VM status-bar contents.</source>
+        <translation>اجازه ویرایش محتوای نوار وضعیت ماشین مجازی</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsNetwork</name>
     <message>
-      <source>When checked, plugs this virtual network adapter into the virtual machine.</source>
-      <translation>وقتیکه انتخاب شده،اتصال این آداپتور شبکه مجازی به ماشین مجازی.</translation>
+        <source>When checked, plugs this virtual network adapter into the virtual machine.</source>
+        <translation>وقتیکه انتخاب شده،اتصال این آداپتور شبکه مجازی به ماشین مجازی.</translation>
     </message>
     <message>
-      <source>&Enable Network Adapter</source>
-      <translation>&فعالسازی آداپتور شبکه</translation>
+        <source>&Enable Network Adapter</source>
+        <translation>&فعالسازی آداپتور شبکه</translation>
     </message>
     <message>
-      <source>Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine.</source>
-      <translation>نوع آداپتور شبکه مجازی را انتخاب کنید.وابسته به این مقدار،ویرچوال باکس سخت افزار شبکه متفاوت به ماشین مجازی ارائه میدهد.</translation>
+        <source>Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine.</source>
+        <translation>نوع آداپتور شبکه مجازی را انتخاب کنید.وابسته به این مقدار،ویرچوال باکس سخت افزار شبکه متفاوت به ماشین مجازی ارائه میدهد.</translation>
     </message>
     <message>
-      <source>&Attached to:</source>
-      <translation>ضمیمه &شده به:</translation>
+        <source>&Attached to:</source>
+        <translation>ضمیمه &شده به:</translation>
     </message>
     <message>
-      <source>Controls how this virtual adapter is attached to the real network of the Host OS.</source>
-      <translation>کنترل اینکه چگونه این آداپتور مجازی به شبکه واقعی سیستم عامل میزبان ضمیمه شده است.</translation>
+        <source>Controls how this virtual adapter is attached to the real network of the Host OS.</source>
+        <translation type="obsolete">کنترل اینکه چگونه این آداپتور مجازی به شبکه واقعی سیستم عامل میزبان ضمیمه شده است.</translation>
     </message>
     <message>
-      <source>Adapter &Type:</source>
-      <translation>نوع &آداپتور:</translation>
+        <source>Adapter &Type:</source>
+        <translation>نوع &آداپتور:</translation>
     </message>
     <message>
-      <source>no bridged network adapter is selected</source>
-      <translation>هیچ آداپتور شبکه پل شده ای انتخاب نشده است</translation>
+        <source>no bridged network adapter is selected</source>
+        <translation type="obsolete">هیچ آداپتور شبکه پل شده ای انتخاب نشده است</translation>
     </message>
     <message>
-      <source>no internal network name is specified</source>
-      <translation>هیچ نام شبکه داخلی مشخص نشده است</translation>
+        <source>no internal network name is specified</source>
+        <translation type="obsolete">هیچ نام شبکه داخلی مشخص نشده است</translation>
     </message>
     <message>
-      <source>no host-only network adapter is selected</source>
-      <translation>هیچ آداپتور فقط-میزبان انتخاب نشده است</translation>
+        <source>no host-only network adapter is selected</source>
+        <translation type="obsolete">هیچ آداپتور فقط-میزبان انتخاب نشده است</translation>
     </message>
     <message>
-      <source>Not selected</source>
-      <comment>network adapter name</comment>
-      <translation>انتخاب نشده است</translation>
+        <source>Not selected</source>
+        <comment>network adapter name</comment>
+        <translation>انتخاب نشده است</translation>
     </message>
     <message>
-      <source>&Name:</source>
-      <translation>نا&م:</translation>
+        <source>&Name:</source>
+        <translation>نا&م:</translation>
     </message>
     <message>
-      <source>A&dvanced</source>
-      <translation>پی&شرفته</translation>
+        <source>A&dvanced</source>
+        <translation>پی&شرفته</translation>
     </message>
     <message>
-      <source>Shows or hides additional network adapter options.</source>
-      <translation>نمایش یا عدم نمایش گزینه های اضافی آداپتور شبکه.</translation>
+        <source>Shows or hides additional network adapter options.</source>
+        <translation type="obsolete">نمایش یا عدم نمایش گزینه های اضافی آداپتور شبکه.</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>
-      <translation>آدرس مک این آداپتور را نشان میدهد. آن دقیقا شامل 12 کاراکتر از {0-9,A-F} هست. توجه کنید که کاراکتر دوم باید یک عدد زوج باشد.</translation>
+        <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>
+        <translation>آدرس مک این آداپتور را نشان میدهد. آن دقیقا شامل 12 کاراکتر از {0-9,A-F} هست. توجه کنید که کاراکتر دوم باید یک عدد زوج باشد.</translation>
     </message>
     <message>
-      <source>Generates a new random MAC address.</source>
-      <translation>تولید یک آدرس مک تصادفی جدید.</translation>
+        <source>Generates a new random MAC address.</source>
+        <translation>تولید یک آدرس مک تصادفی جدید.</translation>
     </message>
     <message>
-      <source>Indicates whether the virtual network cable is plugged in on machine startup or not.</source>
-      <translation>هرگاه کابل شبکه مجازی در اِستارت آپ ماشین متصل شده است یا نه،را نشان میدهد.</translation>
+        <source>Indicates whether the virtual network cable is plugged in on machine startup or not.</source>
+        <translation type="obsolete">هرگاه کابل شبکه مجازی در اِستارت آپ ماشین متصل شده است یا نه،را نشان میدهد.</translation>
     </message>
     <message>
-      <source>&Cable Connected</source>
-      <translation>کابل متصل ش&ده است</translation>
+        <source>&Cable Connected</source>
+        <translation>کابل متصل ش&ده است</translation>
     </message>
     <message>
-      <source>Opens a window to manage port forwarding rules.</source>
-      <translation>پنجره را برای مدیریت دستورات اِرسال پورت باز میکند.</translation>
+        <source>Opens a window to manage port forwarding rules.</source>
+        <translation type="obsolete">پنجره را برای مدیریت دستورات اِرسال پورت باز میکند.</translation>
     </message>
     <message>
-      <source>&Port Forwarding</source>
-      <translation>اِرسا&ل پورت</translation>
+        <source>&Port Forwarding</source>
+        <translation>اِرسا&ل پورت</translation>
     </message>
     <message>
-      <source>&Promiscuous Mode:</source>
-      <translation>&حالت بیقاعده:</translation>
+        <source>&Promiscuous Mode:</source>
+        <translation>&حالت بیقاعده:</translation>
     </message>
     <message>
-      <source>Selects the promiscuous mode policy of the network adapter when attached to an internal network, host only network or a bridge.</source>
-      <translation>سیاست حالت بیقاعده آداپتور شبکه را وقتی که به یک شبکه داخلی ضمیمه شده است را انتخاب کنید،شبکه فقط میزبان یا یک پل.</translation>
+        <source>Selects the promiscuous mode policy of the network adapter when attached to an internal network, host only network or a bridge.</source>
+        <translation>سیاست حالت بیقاعده آداپتور شبکه را وقتی که به یک شبکه داخلی ضمیمه شده است را انتخاب کنید،شبکه فقط میزبان یا یک پل.</translation>
     </message>
     <message>
-      <source>Generic Properties:</source>
-      <translation>مشخصات کلی:</translation>
+        <source>Generic Properties:</source>
+        <translation>مشخصات کلی:</translation>
     </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>هرگونه پیکربندی تنظیمات برای درایور پیوست شبکه را که استفاده خواهید کرد را اینجا وارد کنید. تنظیمات باید به شکل <b>نام=مقدار</b> باشد و به درایور آن بستگی خواهد داشت. از <b>shift-enter</b> برای افزودن ورودی جدید استفاده کنید.</translation>
+        <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>
     </message>
     <message>
-      <source>no generic driver is selected</source>
-      <translation>درایور کلی انتخاب نشده است</translation>
+        <source>no generic driver is selected</source>
+        <translation type="obsolete">درایور کلی انتخاب نشده است</translation>
     </message>
     <message>
-      <source>Selects the network adapter on the host system that traffic to and from this network card will go through.</source>
-      <translation>آداپتور شبکه ای را که در سیستم میزبان در آن ترافیک به و از این کارت شبکه انجام میشود را انتخاب کنید.</translation>
+        <source>Selects the network adapter on the host system that traffic to and from this network card will go through.</source>
+        <translation>آداپتور شبکه ای را که در سیستم میزبان در آن ترافیک به و از این کارت شبکه انجام میشود را انتخاب کنید.</translation>
     </message>
     <message>
-      <source>Holds the name of the internal network that this network card will be connected to. You can create a new internal network by choosing a name which is not used by any other network cards in this virtual machine or others.</source>
-      <translation>نام شبکه داخلی که این کارت شبکه به آن متصل شده است را وارد کنید.میتوانید یک شبکه داخلی جدید با انتخاب نامی که توسط کارت شبکه دیگری در این ماشین مجازی یا سایر آنها بکارنرفته است ایجاد کنید.</translation>
+        <source>Holds the name of the internal network that this network card will be connected to. You can create a new internal network by choosing a name which is not used by any other network cards in this virtual machine or others.</source>
+        <translation>نام شبکه داخلی که این کارت شبکه به آن متصل شده است را وارد کنید.میتوانید یک شبکه داخلی جدید با انتخاب نامی که توسط کارت شبکه دیگری در این ماشین مجازی یا سایر آنها بکارنرفته است ایجاد کنید.</translation>
     </message>
     <message>
-      <source>Selects the virtual network adapter on the host system that traffic to and from this network card will go through. You can create and remove adapters using the global network settings in the virtual machine manager window.</source>
-      <translation>آداپتور شبکه مجازی را که در سیستم میزبان در آن ترافیک به و از این کارت شبکه انجام میشود را انتخاب کنید.توسط تنظیمات سراسری شبکه در پنجره مدیریت ماشین مجازی میتوانید آداپتور شبکه ایجاد یا حذف کنید.</translation>
+        <source>Selects the virtual network adapter on the host system that traffic to and from this network card will go through. You can create and remove adapters using the global network settings in the virtual machine manager window.</source>
+        <translation>آداپتور شبکه مجازی را که در سیستم میزبان در آن ترافیک به و از این کارت شبکه انجام میشود را انتخاب کنید.توسط تنظیمات سراسری شبکه در پنجره مدیریت ماشین مجازی میتوانید آداپتور شبکه ایجاد یا حذف کنید.</translation>
     </message>
     <message>
-      <source>Selects the driver to be used with this network card.</source>
-      <translation>درایوری که با این کارت شبکه بکار میرود را انتخاب کنید.</translation>
+        <source>Selects the driver to be used with this network card.</source>
+        <translation>درایوری که با این کارت شبکه بکار میرود را انتخاب کنید.</translation>
     </message>
     <message>
-      <source>&MAC Address:</source>
-      <translation>&آدرس مَک:</translation>
+        <source>&MAC Address:</source>
+        <translation>&آدرس مَک:</translation>
     </message>
     <message>
-      <source>the MAC address must be 12 hexadecimal digits long.</source>
-      <translation>آدرس مَک باید 12 رقم هگزادسیمال بلند باشد.</translation>
+        <source>the MAC address must be 12 hexadecimal digits long.</source>
+        <translation type="obsolete">آدرس مَک باید 12 رقم هگزادسیمال بلند باشد.</translation>
     </message>
     <message>
-      <source>the second digit in the MAC address may not be odd as only unicast addresses are allowed.</source>
-      <translation>عدد دوم آدرس مَک نباسد فرد باشد طوریکه فقط آدرس های یونیکست اجازه داده شده اند.</translation>
+        <source>the second digit in the MAC address may not be odd as only unicast addresses are allowed.</source>
+        <translation type="obsolete">عدد دوم آدرس مَک نباسد فرد باشد طوریکه فقط آدرس های یونیکست اجازه داده شده اند.</translation>
     </message>
     <message>
-      <source>No bridged network adapter is currently selected.</source>
-      <translation>هیچ آداپتور شبکه پل شده اکنون انتخاب نشده است.</translation>
+        <source>No bridged network adapter is currently selected.</source>
+        <translation>هیچ آداپتور شبکه پل شده اکنون انتخاب نشده است.</translation>
     </message>
     <message>
-      <source>No internal network name is currently specified.</source>
-      <translation>هیچ نام شبکه داخلی اکنون تعیین نشده است.</translation>
+        <source>No internal network name is currently specified.</source>
+        <translation>هیچ نام شبکه داخلی اکنون تعیین نشده است.</translation>
     </message>
     <message>
-      <source>No host-only network adapter is currently selected.</source>
-      <translation>هیچ آداپتور شبکه فقط-میزبان انتخاب نشده است.</translation>
+        <source>No host-only network adapter is currently selected.</source>
+        <translation>هیچ آداپتور شبکه فقط-میزبان انتخاب نشده است.</translation>
     </message>
     <message>
-      <source>No generic driver is currently selected.</source>
-      <translation>اکنون هیچ درایور اصلی انتخاب نشده است.</translation>
+        <source>No generic driver is currently selected.</source>
+        <translation>اکنون هیچ درایور اصلی انتخاب نشده است.</translation>
     </message>
     <message>
-      <source>No NAT network name is currently specified.</source>
-      <translation>هیچ نام شبکه  NAT اکنون تعیین نشده است.</translation>
+        <source>No NAT network name is currently specified.</source>
+        <translation>هیچ نام شبکه  NAT اکنون تعیین نشده است.</translation>
     </message>
     <message>
-      <source>The MAC address must be 12 hexadecimal digits long.</source>
-      <translation>آدرس مک باید 12 رقم هگزادسیمال بلند باشد</translation>
+        <source>The MAC address must be 12 hexadecimal digits long.</source>
+        <translation>آدرس مک باید 12 رقم هگزادسیمال بلند باشد</translation>
     </message>
     <message>
-      <source>The second digit in the MAC address may not be odd as only unicast addresses are allowed.</source>
-      <translation>رقم دوم در آدرس مک نباید فرد باشد دراینصور فقط ادرس یونی کست اجازه داده میشود</translation>
+        <source>The second digit in the MAC address may not be odd as only unicast addresses are allowed.</source>
+        <translation>رقم دوم در آدرس مک نباید فرد باشد دراینصور فقط ادرس یونی کست اجازه داده میشود</translation>
     </message>
     <message>
-      <source>Holds the name of the NAT network that this network card will be connected to. You can create and remove networks using the global network settings in the virtual machine manager window.</source>
-      <translation>نام شبکه NAT که این کارت شبکه به آن متصل شده است را نگه دارید. شما میتوانید توسط تنظیمات سراسری شبکه در پنجره مدیریت ماشین مجازی شبکه راحذف و ایجاد کنید.</translation>
+        <source>Holds the name of the NAT network that this network card will be connected to. You can create and remove networks using the global network settings in the virtual machine manager window.</source>
+        <translation>نام شبکه NAT که این کارت شبکه به آن متصل شده است را نگه دارید. شما میتوانید توسط تنظیمات سراسری شبکه در پنجره مدیریت ماشین مجازی شبکه راحذف و ایجاد کنید.</translation>
     </message>
     <message>
-      <source>Selects how this virtual adapter is attached to the real network of the Host OS.</source>
-      <translation>انتخاب کنید چگونه این آداپتور مجازی به شبکه واقعی سیستم عامل میزبان ضمیمه شود</translation>
+        <source>Selects how this virtual adapter is attached to the real network of the Host OS.</source>
+        <translation>انتخاب کنید چگونه این آداپتور مجازی به شبکه واقعی سیستم عامل میزبان ضمیمه شود</translation>
     </message>
     <message>
-      <source>Shows additional network adapter options.</source>
-      <translation>گزینه های اضافی آداپتور شبکه را نشان میدهد</translation>
+        <source>Shows additional network adapter options.</source>
+        <translation>گزینه های اضافی آداپتور شبکه را نشان میدهد</translation>
     </message>
     <message>
-      <source>Holds the configuration settings for the network attachment driver. The settings should be of the form <b>name=value</b> and will depend on the driver. Use <b>shift-enter</b> to add a new entry.</source>
-      <translation>پیکربندی تنظیمات برای درایور پیوست شبکه را نگه می دارد. تنظیمات باید به شکل <b>نام=مقدار</b> باشد و به درایور آن بستگی خواهد داشت. از <b>shift-enter</b> برای افزودن ورودی جدید استفاده کنید.</translation>
+        <source>Holds the configuration settings for the network attachment driver. The settings should be of the form <b>name=value</b> and will depend on the driver. Use <b>shift-enter</b> to add a new entry.</source>
+        <translation>پیکربندی تنظیمات برای درایور پیوست شبکه را نگه می دارد. تنظیمات باید به شکل <b>نام=مقدار</b> باشد و به درایور آن بستگی خواهد داشت. از <b>shift-enter</b> برای افزودن ورودی جدید استفاده کنید.</translation>
     </message>
     <message>
-      <source>When checked, the virtual network cable is plugged in.</source>
-      <translation>وقتیکه انتخاب شده،کابل مجازی شبکه متصل شده هست.</translation>
+        <source>When checked, the virtual network cable is plugged in.</source>
+        <translation>وقتیکه انتخاب شده،کابل مجازی شبکه متصل شده هست.</translation>
     </message>
     <message>
-      <source>Displays a window to configure port forwarding rules.</source>
-      <translation>پنجره ای برای پیکربندی دستورات ارسال پورت را نشان میدهد</translation>
+        <source>Displays a window to configure port forwarding rules.</source>
+        <translation>پنجره ای برای پیکربندی دستورات ارسال پورت را نشان میدهد</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsParallel</name>
     <message>
-      <source>Port %1</source>
-      <comment>parallel ports</comment>
-      <translation>پورت %1</translation>
+        <source>Port %1</source>
+        <comment>parallel ports</comment>
+        <translation>پورت %1</translation>
     </message>
     <message>
-      <source>When checked, enables the given parallel port of the virtual machine.</source>
-      <translation>وقتیکه انتخاب شده،پورت پارالل معین شده ماشین مجازی را فعال میکند.</translation>
+        <source>When checked, enables the given parallel port of the virtual machine.</source>
+        <translation>وقتیکه انتخاب شده،پورت پارالل معین شده ماشین مجازی را فعال میکند.</translation>
     </message>
     <message>
-      <source>&Enable Parallel Port</source>
-      <translation>&فعالسازی پورت پارالل</translation>
+        <source>&Enable Parallel Port</source>
+        <translation>&فعالسازی پورت پارالل</translation>
     </message>
     <message>
-      <source>Port &Number:</source>
-      <translation>شماره &پورت:</translation>
+        <source>Port &Number:</source>
+        <translation>شماره &پورت:</translation>
     </message>
     <message>
-      <source>Holds the parallel port number. You can choose one of the standard parallel ports or select <b>User-defined</b> and specify port parameters manually.</source>
-      <translation>شماره پورت پارالل را نشان میدهد. میتوانید یکی از پورت های استاندارد پارالل را انتخاب کنید یا <b>توسط کاربر تعریف شده</b> را انتخاب کنید و پارامترهای پورت را دستی تعیین کنید.</translation>
+        <source>Holds the parallel port number. You can choose one of the standard parallel ports or select <b>User-defined</b> and specify port parameters manually.</source>
+        <translation>شماره پورت پارالل را نشان میدهد. میتوانید یکی از پورت های استاندارد پارالل را انتخاب کنید یا <b>توسط کاربر تعریف شده</b> را انتخاب کنید و پارامترهای پورت را دستی تعیین کنید.</translation>
     </message>
     <message>
-      <source>&IRQ:</source>
-      <translation>&IRQ:</translation>
+        <source>&IRQ:</source>
+        <translation>&IRQ:</translation>
     </message>
     <message>
-      <source>I/O Po&rt:</source>
-      <translation>پورت& ورودی/خروجی:</translation>
+        <source>I/O Po&rt:</source>
+        <translation>پورت& ورودی/خروجی:</translation>
     </message>
     <message>
-      <source>Port &Path:</source>
-      <translation>مسیر &پورت:</translation>
+        <source>Port &Path:</source>
+        <translation>مسیر &پورت:</translation>
     </message>
     <message>
-      <source>Holds the host parallel device name.</source>
-      <translation>نام دستگاه پارالل میزبان را نشان میدهد.</translation>
+        <source>Holds the host parallel device name.</source>
+        <translation>نام دستگاه پارالل میزبان را نشان میدهد.</translation>
     </message>
     <message>
-      <source>Holds the IRQ number of this parallel 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>
-      <translation>شماره IRQ این پورت پارالل را نشان میدهد. این باید یک عدد کامل بین <tt>0</tt> و <tt>255</tt> باشد. مقادیر بزرگتر از <tt>15</tt> فقط میتواند استفاده شود اگر تنظیمات <b>I/O APIC</b> برای این ماشین مجازی فعال شده باشد.</translation>
+        <source>Holds the IRQ number of this parallel 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>
+        <translation>شماره IRQ این پورت پارالل را نشان میدهد. این باید یک عدد کامل بین <tt>0</tt> و <tt>255</tt> باشد. مقادیر بزرگتر از <tt>15</tt> فقط میتواند استفاده شود اگر تنظیمات <b>I/O APIC</b> برای این ماشین مجازی فعال شده باشد.</translation>
     </message>
     <message>
-      <source>Holds the base I/O port address of this parallel port. Valid values are integer numbers in range from <tt>0</tt> to <tt>0xFFFF</tt>.</source>
-      <translation>آدرس پورت ورودی/خروجی پایه این پورت پارالل را نشان میدهد. مقادیر معتبر اعداد صحیحی در محدوده <tt>0</tt> به <tt>0xFFFF</tt> هستند.</translation>
+        <source>Holds the base I/O port address of this parallel port. Valid values are integer numbers in range from <tt>0</tt> to <tt>0xFFFF</tt>.</source>
+        <translation>آدرس پورت ورودی/خروجی پایه این پورت پارالل را نشان میدهد. مقادیر معتبر اعداد صحیحی در محدوده <tt>0</tt> به <tt>0xFFFF</tt> هستند.</translation>
     </message>
     <message>
-      <source>No IRQ is currently specified.</source>
-      <translation>اکنون IRQ تعیین نشده است.</translation>
+        <source>No IRQ is currently specified.</source>
+        <translation>اکنون IRQ تعیین نشده است.</translation>
     </message>
     <message>
-      <source>No I/O port is currently specified.</source>
-      <translation>اکنون پورت I/O تعیین نشده است.</translation>
+        <source>No I/O port is currently specified.</source>
+        <translation>اکنون پورت I/O تعیین نشده است.</translation>
     </message>
     <message>
-      <source>Two or more ports have the same settings.</source>
-      <translation>دو یا چند پورت تنظیمات مشابه دارند.</translation>
+        <source>Two or more ports have the same settings.</source>
+        <translation>دو یا چند پورت تنظیمات مشابه دارند.</translation>
     </message>
     <message>
-      <source>No port path is currently specified.</source>
-      <translation>اکنون مسیر پورتی تعیین نشده است.</translation>
+        <source>No port path is currently specified.</source>
+        <translation>اکنون مسیر پورتی تعیین نشده است.</translation>
     </message>
     <message>
-      <source>There are currently duplicate port paths specified.</source>
-      <translation>اکنون مسیر پورت های تکراری تعیین شده است.</translation>
+        <source>There are currently duplicate port paths specified.</source>
+        <translation>اکنون مسیر پورت های تکراری تعیین شده است.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsParallelPage</name>
     <message>
-      <source>Duplicate port number selected </source>
-      <translation>شماره پورت تکراری انتخاب شده است </translation>
+        <source>Duplicate port number selected </source>
+        <translation type="obsolete">شماره پورت تکراری انتخاب شده است </translation>
     </message>
     <message>
-      <source>Port path not specified </source>
-      <translation>مسیر پورت مشخص نشده است </translation>
+        <source>Port path not specified </source>
+        <translation type="obsolete">مسیر پورت مشخص نشده است </translation>
     </message>
     <message>
-      <source>Duplicate port path entered </source>
-      <translation>مسیر تکراری پورت وارد شده است </translation>
+        <source>Duplicate port path entered </source>
+        <translation type="obsolete">مسیر تکراری پورت وارد شده است </translation>
     </message>
     <message>
-      <source>No IRQ is currently specified.</source>
-      <translation>اکنون IRQ تعیین نشده است.</translation>
+        <source>No IRQ is currently specified.</source>
+        <translation type="obsolete">اکنون IRQ تعیین نشده است.</translation>
     </message>
     <message>
-      <source>No I/O port is currently specified.</source>
-      <translation>اکنون پورت I/O تعیین نشده است.</translation>
+        <source>No I/O port is currently specified.</source>
+        <translation type="obsolete">اکنون پورت I/O تعیین نشده است.</translation>
     </message>
     <message>
-      <source>Two or more ports have the same settings.</source>
-      <translation>دو یا چند پورت تنظیمات مشابه دارند.</translation>
+        <source>Two or more ports have the same settings.</source>
+        <translation type="obsolete">دو یا چند پورت تنظیمات مشابه دارند.</translation>
     </message>
     <message>
-      <source>No port path is currently specified.</source>
-      <translation>اکنون مسیر پورتی تعیین نشده است.</translation>
+        <source>No port path is currently specified.</source>
+        <translation type="obsolete">اکنون مسیر پورتی تعیین نشده است.</translation>
     </message>
     <message>
-      <source>There are currently duplicate port paths specified.</source>
-      <translation>اکنون مسیر پورت های تکراری تعیین شده است.</translation>
+        <source>There are currently duplicate port paths specified.</source>
+        <translation type="obsolete">اکنون مسیر پورت های تکراری تعیین شده است.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsPortForwardingDlg</name>
     <message>
-      <source>Port Forwarding Rules</source>
-      <translation>دستورات اِرسال پورت</translation>
+        <source>Port Forwarding Rules</source>
+        <translation>دستورات اِرسال پورت</translation>
     </message>
     <message>
-      <source>This table contains a list of port forwarding rules.</source>
-      <translation>این جدول شامل یک لیست از دستورات اِرسال پورت است.</translation>
+        <source>This table contains a list of port forwarding rules.</source>
+        <translation type="obsolete">این جدول شامل یک لیست از دستورات اِرسال پورت است.</translation>
     </message>
     <message>
-      <source>Insert new rule</source>
-      <translation>افزودن دستور جدید</translation>
+        <source>Insert new rule</source>
+        <translation type="obsolete">افزودن دستور جدید</translation>
     </message>
     <message>
-      <source>Copy selected rule</source>
-      <translation>کپی دستور انتخاب شده</translation>
+        <source>Copy selected rule</source>
+        <translation type="obsolete">کپی دستور انتخاب شده</translation>
     </message>
     <message>
-      <source>Delete selected rule</source>
-      <translation>حذف دستور انتخاب شده</translation>
+        <source>Delete selected rule</source>
+        <translation type="obsolete">حذف دستور انتخاب شده</translation>
     </message>
     <message>
-      <source>This button adds new port forwarding rule.</source>
-      <translation>این دکمه دستور اِرسال پورت جدید اضافه میکند.</translation>
+        <source>This button adds new port forwarding rule.</source>
+        <translation type="obsolete">این دکمه دستور اِرسال پورت جدید اضافه میکند.</translation>
     </message>
     <message>
-      <source>This button deletes selected port forwarding rule.</source>
-      <translation>این دکمه دستور اِرسال پورت انتخاب شده را حذف میکند.</translation>
+        <source>This button deletes selected port forwarding rule.</source>
+        <translation type="obsolete">این دکمه دستور اِرسال پورت انتخاب شده را حذف میکند.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsSF</name>
     <message>
-      <source>Adds a new shared folder definition.</source>
-      <translation>پوشه تعریف جدید اشتراکی را اضافه میکند.</translation>
+        <source>Adds a new shared folder definition.</source>
+        <translation type="obsolete">پوشه تعریف جدید اشتراکی را اضافه میکند.</translation>
     </message>
     <message>
-      <source>Edits the selected shared folder definition.</source>
-      <translation>پوشه تعریف اشتراکی انتخاب شده را ویرایش میکند.</translation>
+        <source>Edits the selected shared folder definition.</source>
+        <translation type="obsolete">پوشه تعریف اشتراکی انتخاب شده را ویرایش میکند.</translation>
     </message>
     <message>
-      <source>Removes the selected shared folder definition.</source>
-      <translation>پوشه تعریف اشتراکی انتخاب شده را حذف میکند.</translation>
+        <source>Removes the selected shared folder definition.</source>
+        <translation type="obsolete">پوشه تعریف اشتراکی انتخاب شده را حذف میکند.</translation>
     </message>
     <message>
-      <source> Machine Folders</source>
-      <translation> پوشه های ماشین</translation>
+        <source> Machine Folders</source>
+        <translation> پوشه های ماشین</translation>
     </message>
     <message>
-      <source> Transient Folders</source>
-      <translation> پوشه های ناپایدار</translation>
+        <source> Transient Folders</source>
+        <translation> پوشه های ناپایدار</translation>
     </message>
     <message>
-      <source>Full</source>
-      <translation>کامل</translation>
+        <source>Full</source>
+        <translation>کامل</translation>
     </message>
     <message>
-      <source>Read-only</source>
-      <translation>فقط-خواندنی</translation>
+        <source>Read-only</source>
+        <translation>فقط-خواندنی</translation>
     </message>
     <message>
-      <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>لیست همه پوشه های قابل دسترسی به این ماشین. برای دسترسی به پوشه اشتراکی از 'net use x: \\vboxsvr\share' استفاده کنید که نام دارد <i>share</i> از سیستم عامل شبیه داس, یا 'mount -t vboxsf share mount_point' برای دسترسی آن از سیستم عامل لینوکس. این ویژگی نیاز به افزونه مهمان دارد.</translation>
+        <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>لیست همه پوشه های قابل دسترسی به این ماشین. برای دسترسی به پوشه اشتراکی از 'net use x: \\vboxsvr\share' استفاده کنید که نام دارد <i>share</i> از سیستم عامل شبیه داس, یا 'mount -t vboxsf share mount_point' برای دسترسی آن از سیستم عامل لینوکس. این ویژگی نیاز به افزونه مهمان دارد.</translation>
     </message>
     <message>
-      <source>Name</source>
-      <translation>نام</translation>
+        <source>Name</source>
+        <translation>نام</translation>
     </message>
     <message>
-      <source>Path</source>
-      <translation>مسیر</translation>
+        <source>Path</source>
+        <translation>مسیر</translation>
     </message>
     <message>
-      <source>Access</source>
-      <translation>دسترسی</translation>
+        <source>Access</source>
+        <translation>دسترسی</translation>
     </message>
     <message>
-      <source>&Add Shared Folder</source>
-      <translation>&افزودن پوشه اشتراکی</translation>
+        <source>&Add Shared Folder</source>
+        <translation type="obsolete">&افزودن پوشه اشتراکی</translation>
     </message>
     <message>
-      <source>&Edit Shared Folder</source>
-      <translation>&ویرایش پوشه اشتراکی</translation>
+        <source>&Edit Shared Folder</source>
+        <translation type="obsolete">&ویرایش پوشه اشتراکی</translation>
     </message>
     <message>
-      <source>&Remove Shared Folder</source>
-      <translation>&حذف پوشه اشتراکی</translation>
+        <source>&Remove Shared Folder</source>
+        <translation type="obsolete">&حذف پوشه اشتراکی</translation>
     </message>
     <message>
-      <source>&Folders List</source>
-      <translation>&لیست پوشه ها</translation>
+        <source>&Folders List</source>
+        <translation>&لیست پوشه ها</translation>
     </message>
     <message>
-      <source>Auto-mount</source>
-      <translation>بارگیری-خودکار</translation>
+        <source>Auto-mount</source>
+        <translation>بارگیری-خودکار</translation>
     </message>
     <message>
-      <source>Yes</source>
-      <translation>بله</translation>
+        <source>Yes</source>
+        <translation>بله</translation>
     </message>
     <message>
-      <source>Add Shared Folder</source>
-      <translation>افزودن پوشه اشتراکی</translation>
+        <source>Add Shared Folder</source>
+        <translation>افزودن پوشه اشتراکی</translation>
     </message>
     <message>
-      <source>Edit Shared Folder</source>
-      <translation>ویرایش پوشه اشتراکی</translation>
+        <source>Edit Shared Folder</source>
+        <translation>ویرایش پوشه اشتراکی</translation>
     </message>
     <message>
-      <source>Remove Shared Folder</source>
-      <translation>حذف پوشه اشتراکی</translation>
+        <source>Remove Shared Folder</source>
+        <translation>حذف پوشه اشتراکی</translation>
     </message>
     <message>
-      <source>Adds new shared folder.</source>
-      <translation>افزودن پوشه اشتراکی جدید</translation>
+        <source>Adds new shared folder.</source>
+        <translation>افزودن پوشه اشتراکی جدید</translation>
     </message>
     <message>
-      <source>Edits selected shared folder.</source>
-      <translation>ویرایش پوشه اشتراکی انتخاب شده</translation>
+        <source>Edits selected shared folder.</source>
+        <translation>ویرایش پوشه اشتراکی انتخاب شده</translation>
     </message>
     <message>
-      <source>Removes selected shared folder.</source>
-      <translation>حذف پوشه اشتراکی انتخاب شده</translation>
+        <source>Removes selected shared folder.</source>
+        <translation>حذف پوشه اشتراکی انتخاب شده</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsSFDetails</name>
     <message>
-      <source>Add Share</source>
-      <translation>افزودن اشتراک</translation>
+        <source>Add Share</source>
+        <translation>افزودن اشتراک</translation>
     </message>
     <message>
-      <source>Edit Share</source>
-      <translation>ویرایش اشتراک</translation>
+        <source>Edit Share</source>
+        <translation>ویرایش اشتراک</translation>
     </message>
     <message>
-      <source>Dialog</source>
-      <translation>پنجره</translation>
+        <source>Dialog</source>
+        <translation type="obsolete">پنجره</translation>
     </message>
     <message>
-      <source>Folder Path:</source>
-      <translation>مسیر پوشه:</translation>
+        <source>Folder Path:</source>
+        <translation>مسیر پوشه:</translation>
     </message>
     <message>
-      <source>Folder Name:</source>
-      <translation>نام پوشه:</translation>
+        <source>Folder Name:</source>
+        <translation>نام پوشه:</translation>
     </message>
     <message>
-      <source>Holds the name of the shared folder (as it will be seen by the guest OS).</source>
-      <translation>نام پوشه اشتراکی را نشان میدهد (طوریکه در سیستم عامل مهمان نشان داده میشود).</translation>
+        <source>Holds the name of the shared folder (as it will be seen by the guest OS).</source>
+        <translation>نام پوشه اشتراکی را نشان میدهد (طوریکه در سیستم عامل مهمان نشان داده میشود).</translation>
     </message>
     <message>
-      <source>When checked, the guest OS will not be able to write to the specified shared folder.</source>
-      <translation>اگر انتخاب شده باشد،سیستم عامل مهمان قادر به نوشتن در پوشه اشتراکی مشخص شده نیست.</translation>
+        <source>When checked, the guest OS will not be able to write to the specified shared folder.</source>
+        <translation>اگر انتخاب شده باشد،سیستم عامل مهمان قادر به نوشتن در پوشه اشتراکی مشخص شده نیست.</translation>
     </message>
     <message>
-      <source>&Read-only</source>
-      <translation>فقط-خواند&نی</translation>
+        <source>&Read-only</source>
+        <translation>فقط-خواند&نی</translation>
     </message>
     <message>
-      <source>&Make Permanent</source>
-      <translation>دائمی& باشد</translation>
+        <source>&Make Permanent</source>
+        <translation>دائمی& باشد</translation>
     </message>
     <message>
-      <source>When checked, the guest OS will try to automatically mount the shared folder on startup.</source>
-      <translation>وقتیکه انتخاب شده باشد،سیستم عامل مهمان سعی میکند در اِستارت آپ پوشه اشتراکی را بارگیری کند.</translation>
+        <source>When checked, the guest OS will try to automatically mount the shared folder on startup.</source>
+        <translation>وقتیکه انتخاب شده باشد،سیستم عامل مهمان سعی میکند در اِستارت آپ پوشه اشتراکی را بارگیری کند.</translation>
     </message>
     <message>
-      <source>&Auto-mount</source>
-      <translation>&بارگیری-خودکار</translation>
+        <source>&Auto-mount</source>
+        <translation>&بارگیری-خودکار</translation>
     </message>
     <message>
-      <source>If checked, this shared folder will be permanent.</source>
-      <translation>اگر انتخاب شده باشد،این پوشه اشتراکی دائمی خواهد بود.</translation>
+        <source>If checked, this shared folder will be permanent.</source>
+        <translation type="obsolete">اگر انتخاب شده باشد،این پوشه اشتراکی دائمی خواهد بود.</translation>
     </message>
     <message>
-      <source>Window</source>
-      <translation>پنجره</translation>
+        <source>Window</source>
+        <translation type="obsolete">پنجره</translation>
     </message>
     <message>
-      <source>When checked, this shared folder will be permanent.</source>
-      <translation>وقتیکه انتخاب شده،این پوشه اشتراکی دائمی خواهد شد</translation>
+        <source>When checked, this shared folder will be permanent.</source>
+        <translation>وقتیکه انتخاب شده،این پوشه اشتراکی دائمی خواهد شد</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsSerial</name>
     <message>
-      <source>Port %1</source>
-      <comment>serial ports</comment>
-      <translation>پورت %1</translation>
+        <source>Port %1</source>
+        <comment>serial ports</comment>
+        <translation>پورت %1</translation>
     </message>
     <message>
-      <source>When checked, enables the given serial port of the virtual machine.</source>
-      <translation>وقتیکه انتخاب شده،پورت سریال معین شده ماشین مجازی را فعال میکند.</translation>
+        <source>When checked, enables the given serial port of the virtual machine.</source>
+        <translation>وقتیکه انتخاب شده،پورت سریال معین شده ماشین مجازی را فعال میکند.</translation>
     </message>
     <message>
-      <source>&Enable Serial Port</source>
-      <translation>&فعالسازی پورت سریال</translation>
+        <source>&Enable Serial Port</source>
+        <translation>&فعالسازی پورت سریال</translation>
     </message>
     <message>
-      <source>Port &Number:</source>
-      <translation>شماره &پورت:</translation>
+        <source>Port &Number:</source>
+        <translation>شماره &پورت:</translation>
     </message>
     <message>
-      <source>Selects the serial port number. You can choose one of the standard serial ports or select <b>User-defined</b> and specify port parameters manually.</source>
-      <translation>شماره پورت سریال را نشان میدهد. میتوانید یکی از پورت های سریال استاندارد را انتخاب کنید یا از <b>توسط کاربر تعریف شده</b> انتخاب و پارامترهای پورت را دستی وارد کنید.</translation>
+        <source>Selects the serial port number. You can choose one of the standard serial ports or select <b>User-defined</b> and specify port parameters manually.</source>
+        <translation>شماره پورت سریال را نشان میدهد. میتوانید یکی از پورت های سریال استاندارد را انتخاب کنید یا از <b>توسط کاربر تعریف شده</b> انتخاب و پارامترهای پورت را دستی وارد کنید.</translation>
     </message>
     <message>
-      <source>&IRQ:</source>
-      <translation>&IRQ:</translation>
+        <source>&IRQ:</source>
+        <translation>&IRQ:</translation>
     </message>
     <message>
-      <source>I/O Po&rt:</source>
-      <translation>پورت& ورودی/خروجی:</translation>
+        <source>I/O Po&rt:</source>
+        <translation>پورت& ورودی/خروجی:</translation>
     </message>
     <message>
-      <source>Port &Mode:</source>
-      <translation>حالت &پورت:</translation>
+        <source>Port &Mode:</source>
+        <translation>حالت &پورت:</translation>
     </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>حالت کاری این پورت سریال را کنترل میکند. اگر شما <b>قطع شده است</b> را انتخاب کنید، سیستم عامل مهمان پورت سریال را تشخیص خواهد داد اما قادر به استفاده از آن نیست.</translation>
+        <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>
     </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>اگر انتخاب شده، میله مشخص شده در فیلد <b>مسیر پورت</b> توسط ماشین مجازی حین شروع آن ایجاد خواهد شد. در غیراینصورت، ماشین مجازی فرض میکند که میله موجود است و سعی میکند که از آن استفاده کند.</translation>
+        <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>
     </message>
     <message>
-      <source>&Create Pipe</source>
-      <translation>ایجاد &میله</translation>
+        <source>&Create Pipe</source>
+        <translation type="obsolete">ایجاد &میله</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>مسیر را به میله پورت سریال در میزبان را وقتیکه پورت در حالت <b>میله میزبان</b> کار میکند را نشان میدهد، یا نام دستگاه سریال میزبان را وقتیکه پورت در حالت <b>دستگاه میزبان</b> در حال کار است را نشان میدهد.</translation>
+        <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>
     </message>
     <message>
-      <source>Port/File &Path:</source>
-      <translation>مسیر پور&ت/فایل:</translation>
+        <source>Port/File &Path:</source>
+        <translation type="obsolete">مسیر پور&ت/فایل:</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>
-      <translation>شماره IRQ این پورت سریال را نشان میدهد. این باید یک عدد کامل بین <tt>0</tt> و <tt>255</tt> باشد. مقادیر بزرگتر از <tt>15</tt> فقط میتواند استفاده شود اگر تنظیمات <b>I/O APIC</b> برای این ماشین مجازی فعال شده باشد.</translation>
+        <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>
+        <translation>شماره IRQ این پورت سریال را نشان میدهد. این باید یک عدد کامل بین <tt>0</tt> و <tt>255</tt> باشد. مقادیر بزرگتر از <tt>15</tt> فقط میتواند استفاده شود اگر تنظیمات <b>I/O APIC</b> برای این ماشین مجازی فعال شده باشد.</translation>
     </message>
     <message>
-      <source>Holds the base I/O port address of this serial port. Valid values are integer numbers in range from <tt>0</tt> to <tt>0xFFFF</tt>.</source>
-      <translation>آدرس پورت ورودی/خروجی پایه را برای این پورت سریال را نشان میدهد. مقادیر معتبر اعداد صحیح در محدوده ای از <tt>0</tt> به <tt>0xFFFF</tt> هستند.</translation>
+        <source>Holds the base I/O port address of this serial port. Valid values are integer numbers in range from <tt>0</tt> to <tt>0xFFFF</tt>.</source>
+        <translation>آدرس پورت ورودی/خروجی پایه را برای این پورت سریال را نشان میدهد. مقادیر معتبر اعداد صحیح در محدوده ای از <tt>0</tt> به <tt>0xFFFF</tt> هستند.</translation>
     </message>
     <message>
-      <source>Selects the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source>
-      <translation>حالت کاری این پورت سریال را انتخاب کنید. اگر <b>قطع شده است</b>را انتخاب کنید،سیستم عامل مهمان،پورت سریال را تشخیص میدهد اما قادر به عمل کردن نیست</translation>
+        <source>Selects the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source>
+        <translation>حالت کاری این پورت سریال را انتخاب کنید. اگر <b>قطع شده است</b>را انتخاب کنید،سیستم عامل مهمان،پورت سریال را تشخیص میدهد اما قادر به عمل کردن نیست</translation>
     </message>
     <message>
-      <source>When checked, the virtual machine will assume that the pipe or socket specified in the <b>Path/Address</b> field exists and try to use it. Otherwise, the pipe or socket will be created by the virtual machine when it starts.</source>
-      <translation>وقتیکه انتخاب شده،ماشین مجازی لوله یا سوکت مشخص شده در <b>مسیر/آدرس</b> را فیلد موجود در نظر میگیرد و از آن استفاده میکند. در غیر اینصورت،لوله یا سوکت وقتیکه ماشین مجازی اجرا شد همراه آن ایجاد خواهد شد</translation>
+        <source>When checked, the virtual machine will assume that the pipe or socket specified in the <b>Path/Address</b> field exists and try to use it. Otherwise, the pipe or socket will be created by the virtual machine when it starts.</source>
+        <translation>وقتیکه انتخاب شده،ماشین مجازی لوله یا سوکت مشخص شده در <b>مسیر/آدرس</b> را فیلد موجود در نظر میگیرد و از آن استفاده میکند. در غیر اینصورت،لوله یا سوکت وقتیکه ماشین مجازی اجرا شد همراه آن ایجاد خواهد شد</translation>
     </message>
     <message>
-      <source>&Connect to existing pipe/socket</source>
-      <translation>اتصال به لوله/سوکت موجود&</translation>
+        <source>&Connect to existing pipe/socket</source>
+        <translation>اتصال به لوله/سوکت موجود&</translation>
     </message>
     <message>
-      <source>&Path/Address:</source>
-      <translation>&مسیر/آدرس:</translation>
+        <source>&Path/Address:</source>
+        <translation>&مسیر/آدرس:</translation>
     </message>
     <message>
-      <source><p>In <b>Host Pipe</b> mode: Holds the path to the serial port's pipe on the host. Examples: "\\.\pipe\myvbox" or "/tmp/myvbox", for Windows and UNIX-like systems respectively.</p><p>In <b>Host Device</b> mode: Holds the host serial device name. Examples: "COM1" or "/dev/ttyS0".</p><p>In <b>Raw File</b> mode: Holds the file-path on the host system, where the serial [...]
-      <translation><p>در حالت <b>لوله میزبان</b> باشد: مسیر را برای لوله پورت سریال میزبان نگه میدارد.مثال: "\\.\pipe\myvbox" یا "/tmp/myvbox", به ترتیب برای ویندوز و سیستم هایی همانند-یونیکس.</p><p>در حالت <b>دستگاه میزبان</b> باشد: نام سریال دستگاه را نگه میدارد: "COM1" یا "/dev/ttyS0".</p><p>در حالت <b>فایل خام</b> باشد: مسیر فایل در سیستم-میزبان را نگه میدارد،جایی که سریال خروجی دامپ خواهد شد.</p><p>در حالت [...]
+        <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>در حالت <b>لوله میزبان</b> باشد: مسیر را برای لوله پورت سریال میزبان نگه میدارد.مثال: "\\.\pipe\myvbox" یا "/tmp/myvbox", به ترتیب برای ویندوز و سیستم هایی همانند-یونیکس.</p><p>در حالت <b>دستگاه میزبان</b> باشد: نام سریال دستگاه را نگه میدارد: "COM1" یا "/dev/ttyS0".</p><p>در حالت <b>فایل خام</b> باشد: مسیر فایل در سیستم-میزبان را نگه میدارد،جایی که سریال خروج [...]
     </message>
     <message>
-      <source>No IRQ is currently specified.</source>
-      <translation>اکنون IRQ تعیین نشده است.</translation>
+        <source>No IRQ is currently specified.</source>
+        <translation>اکنون IRQ تعیین نشده است.</translation>
     </message>
     <message>
-      <source>No I/O port is currently specified.</source>
-      <translation>اکنون پورت I/O تعیین نشده است.</translation>
+        <source>No I/O port is currently specified.</source>
+        <translation>اکنون پورت I/O تعیین نشده است.</translation>
     </message>
     <message>
-      <source>Two or more ports have the same settings.</source>
-      <translation>دو یا چند پورت تنظیمات مشابه دارند.</translation>
+        <source>Two or more ports have the same settings.</source>
+        <translation>دو یا چند پورت تنظیمات مشابه دارند.</translation>
     </message>
     <message>
-      <source>No port path is currently specified.</source>
-      <translation>اکنون مسیر پورتی تعیین نشده است.</translation>
+        <source>No port path is currently specified.</source>
+        <translation>اکنون مسیر پورتی تعیین نشده است.</translation>
     </message>
     <message>
-      <source>There are currently duplicate port paths specified.</source>
-      <translation>اکنون مسیر پورت های تکراری تعیین شده است.</translation>
+        <source>There are currently duplicate port paths specified.</source>
+        <translation>اکنون مسیر پورت های تکراری تعیین شده است.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsSerialPage</name>
     <message>
-      <source>Duplicate port number selected </source>
-      <translation>شماره پورت تکراری انتخاب شده است </translation>
+        <source>Duplicate port number selected </source>
+        <translation type="obsolete">شماره پورت تکراری انتخاب شده است </translation>
     </message>
     <message>
-      <source>Port path not specified </source>
-      <translation>مسیر پورت مشخص نشده است </translation>
+        <source>Port path not specified </source>
+        <translation type="obsolete">مسیر پورت مشخص نشده است </translation>
     </message>
     <message>
-      <source>Duplicate port path entered </source>
-      <translation>مسیر تکراری پورت وارد شده است </translation>
+        <source>Duplicate port path entered </source>
+        <translation type="obsolete">مسیر تکراری پورت وارد شده است </translation>
     </message>
     <message>
-      <source>No IRQ is currently specified.</source>
-      <translation>اکنون IRQ تعیین نشده است.</translation>
+        <source>No IRQ is currently specified.</source>
+        <translation type="obsolete">اکنون IRQ تعیین نشده است.</translation>
     </message>
     <message>
-      <source>No I/O port is currently specified.</source>
-      <translation>اکنون پورت I/O تعیین نشده است.</translation>
+        <source>No I/O port is currently specified.</source>
+        <translation type="obsolete">اکنون پورت I/O تعیین نشده است.</translation>
     </message>
     <message>
-      <source>Two or more ports have the same settings.</source>
-      <translation>دو یا چند پورت تنظیمات مشابه دارند.</translation>
+        <source>Two or more ports have the same settings.</source>
+        <translation type="obsolete">دو یا چند پورت تنظیمات مشابه دارند.</translation>
     </message>
     <message>
-      <source>No port path is currently specified.</source>
-      <translation>اکنون مسیر پورتی تعیین نشده است.</translation>
+        <source>No port path is currently specified.</source>
+        <translation type="obsolete">اکنون مسیر پورتی تعیین نشده است.</translation>
     </message>
     <message>
-      <source>There are currently duplicate port paths specified.</source>
-      <translation>اکنون مسیر پورت های تکراری تعیین شده است.</translation>
+        <source>There are currently duplicate port paths specified.</source>
+        <translation type="obsolete">اکنون مسیر پورت های تکراری تعیین شده است.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsStorage</name>
     <message>
-      <source><nobr><b>%1</b></nobr><br><nobr>Bus:&nbsp;&nbsp;%2</nobr><br><nobr>Type:&nbsp;&nbsp;%3</nobr></source>
-      <translation><nobr><b>%1</b></nobr><br><nobr>باس:&nbsp;&nbsp;%2</nobr><br><nobr>نوع:&nbsp;&nbsp;%3</nobr></translation>
+        <source><nobr><b>%1</b></nobr><br><nobr>Bus:&nbsp;&nbsp;%2</nobr><br><nobr>Type:&nbsp;&nbsp;%3</nobr></source>
+        <translation><nobr><b>%1</b></nobr><br><nobr>باس:&nbsp;&nbsp;%2</nobr><br><nobr>نوع:&nbsp;&nbsp;%3</nobr></translation>
     </message>
     <message>
-      <source><nobr>Expand/Collapse&nbsp;Item</nobr></source>
-      <translation><nobr>بازکردن/بستن&nbsp;آیتم</nobr></translation>
+        <source><nobr>Expand/Collapse&nbsp;Item</nobr></source>
+        <translation type="obsolete"><nobr>بازکردن/بستن&nbsp;آیتم</nobr></translation>
     </message>
     <message>
-      <source><nobr>Add&nbsp;Hard&nbsp;Disk</nobr></source>
-      <translation><nobr>افزودن&nbsp;دیسک&nbsp;سخت</nobr></translation>
+        <source><nobr>Add&nbsp;Hard&nbsp;Disk</nobr></source>
+        <translation type="obsolete"><nobr>افزودن&nbsp;دیسک&nbsp;سخت</nobr></translation>
     </message>
     <message>
-      <source><nobr>Add&nbsp;CD/DVD&nbsp;Device</nobr></source>
-      <translation><nobr>افزودن&nbsp;دستگاه&nbsp;سی دی/دی وی دی</nobr></translation>
+        <source><nobr>Add&nbsp;CD/DVD&nbsp;Device</nobr></source>
+        <translation type="obsolete"><nobr>افزودن&nbsp;دستگاه&nbsp;سی دی/دی وی دی</nobr></translation>
     </message>
     <message>
-      <source><nobr>Add&nbsp;Floppy&nbsp;Device</nobr></source>
-      <translation><nobr>افزودن&nbsp;دستگاه&nbsp;فلاپی</nobr></translation>
+        <source><nobr>Add&nbsp;Floppy&nbsp;Device</nobr></source>
+        <translation type="obsolete"><nobr>افزودن&nbsp;دستگاه&nbsp;فلاپی</nobr></translation>
     </message>
     <message>
-      <source><i>%1</i> uses a medium that is already attached to <i>%2</i>.</source>
-      <translation><i>%1</i> از رسانه که از قبل به <i>%2</i> متصل شده است استفاده میکند.</translation>
+        <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>
     </message>
     <message>
-      <source>Add Controller</source>
-      <translation>افزودن کنترلر</translation>
+        <source>Add Controller</source>
+        <translation>افزودن کنترلر</translation>
     </message>
     <message>
-      <source>Add IDE Controller</source>
-      <translation>افزودن کنترلر IDE</translation>
+        <source>Add IDE Controller</source>
+        <translation>افزودن کنترلر IDE</translation>
     </message>
     <message>
-      <source>Add SATA Controller</source>
-      <translation>افزودن کنترلر SATA</translation>
+        <source>Add SATA Controller</source>
+        <translation>افزودن کنترلر SATA</translation>
     </message>
     <message>
-      <source>Add SCSI Controller</source>
-      <translation>افزودن کنترلر SCSI</translation>
+        <source>Add SCSI Controller</source>
+        <translation>افزودن کنترلر SCSI</translation>
     </message>
     <message>
-      <source>Add Floppy Controller</source>
-      <translation>افزودن کنترلر فلاپی</translation>
+        <source>Add Floppy Controller</source>
+        <translation>افزودن کنترلر فلاپی</translation>
     </message>
     <message>
-      <source>Remove Controller</source>
-      <translation>حذف کنترلر</translation>
+        <source>Remove Controller</source>
+        <translation>حذف کنترلر</translation>
     </message>
     <message>
-      <source>Add Attachment</source>
-      <translation>افزودن ضمیمه</translation>
+        <source>Add Attachment</source>
+        <translation>افزودن ضمیمه</translation>
     </message>
     <message>
-      <source>Add Hard Disk</source>
-      <translation>افزودن ديسک سخت</translation>
+        <source>Add Hard Disk</source>
+        <translation>افزودن ديسک سخت</translation>
     </message>
     <message>
-      <source>Add CD/DVD Device</source>
-      <translation>افزودن دستگاه سی دی/دی وی دی</translation>
+        <source>Add CD/DVD Device</source>
+        <translation type="obsolete">افزودن دستگاه سی دی/دی وی دی</translation>
     </message>
     <message>
-      <source>Add Floppy Device</source>
-      <translation>افزودن دستگاه فلاپی</translation>
+        <source>Add Floppy Device</source>
+        <translation type="obsolete">افزودن دستگاه فلاپی</translation>
     </message>
     <message>
-      <source>Remove Attachment</source>
-      <translation>حذف ضمیمه</translation>
+        <source>Remove Attachment</source>
+        <translation>حذف ضمیمه</translation>
     </message>
     <message>
-      <source>Adds a new controller to the end of the Storage Tree.</source>
-      <translation>یک کنترلر جدید به انتهای درخت ذخیره ساز اضافه میکند.</translation>
+        <source>Adds a new controller to the end of the Storage Tree.</source>
+        <translation type="obsolete">یک کنترلر جدید به انتهای درخت ذخیره ساز اضافه میکند.</translation>
     </message>
     <message>
-      <source>Removes the controller highlighted in the Storage Tree.</source>
-      <translation>کنترلر پررنگ شده در درخت ذخیره ساز را حذف میکند.</translation>
+        <source>Removes the controller highlighted in the Storage Tree.</source>
+        <translation type="obsolete">کنترلر پررنگ شده در درخت ذخیره ساز را حذف میکند.</translation>
     </message>
     <message>
-      <source>Adds a new attachment to the Storage Tree using currently selected controller as parent.</source>
-      <translation>یک ضمیمه جدید به درخت ذخیره ساز توسط کنترلر انتخاب شده فعلی بعنوان منشاء اضافه میکند.</translation>
+        <source>Adds a new attachment to the Storage Tree using currently selected controller as parent.</source>
+        <translation type="obsolete">یک ضمیمه جدید به درخت ذخیره ساز توسط کنترلر انتخاب شده فعلی بعنوان منشاء اضافه میکند.</translation>
     </message>
     <message>
-      <source>Removes the attachment highlighted in the Storage Tree.</source>
-      <translation>ضمیمه پررنگ شده در درخت ذخیره ساز را حذف میکند.</translation>
+        <source>Removes the attachment highlighted in the Storage Tree.</source>
+        <translation type="obsolete">ضمیمه پررنگ شده در درخت ذخیره ساز را حذف میکند.</translation>
     </message>
     <message>
-      <source>IDE Controller</source>
-      <translation>کنترلر IDE</translation>
+        <source>IDE Controller</source>
+        <translation type="obsolete">کنترلر IDE</translation>
     </message>
     <message>
-      <source>SATA Controller</source>
-      <translation>کنترلر SATA</translation>
+        <source>SATA Controller</source>
+        <translation type="obsolete">کنترلر SATA</translation>
     </message>
     <message>
-      <source>SCSI Controller</source>
-      <translation>کنترلر SCSI</translation>
+        <source>SCSI Controller</source>
+        <translation type="obsolete">کنترلر SCSI</translation>
     </message>
     <message>
-      <source>Floppy Controller</source>
-      <translation>کنترلر فلاپی</translation>
+        <source>Floppy Controller</source>
+        <translation type="obsolete">کنترلر فلاپی</translation>
     </message>
     <message>
-      <source>Hard &Disk:</source>
-      <translation>ديسک &سخت:</translation>
+        <source>Hard &Disk:</source>
+        <translation>ديسک &سخت:</translation>
     </message>
     <message>
-      <source>&Storage Tree</source>
-      <translation>درخت &ذخیره ساز</translation>
+        <source>&Storage Tree</source>
+        <translation>درخت &ذخیره ساز</translation>
     </message>
     <message>
-      <source>Contains all storage controllers for this machine and the virtual images and host drives attached to them.</source>
-      <translation>شامل همه کنترلر های ذخیره ساز برای این ماشین و ماشین مجازی و درایوهای میزبان ضمیمه شده به آنها هست.</translation>
+        <source>Contains all storage controllers for this machine and the virtual images and host drives attached to them.</source>
+        <translation type="obsolete">شامل همه کنترلر های ذخیره ساز برای این ماشین و ماشین مجازی و درایوهای میزبان ضمیمه شده به آنها هست.</translation>
     </message>
     <message>
-      <source>Information</source>
-      <translation>اطلاعات</translation>
+        <source>Information</source>
+        <translation>اطلاعات</translation>
     </message>
     <message>
-      <source>The Storage Tree can contain several controllers of different types. This machine currently has no controllers.</source>
-      <translation>درخت ذخیره ساز میتواند محتوی چندین نوع مختلف کنترلر باشد.این ماشین اکنون کنترلر ندارد.</translation>
+        <source>The Storage Tree can contain several controllers of different types. This machine currently has no controllers.</source>
+        <translation>درخت ذخیره ساز میتواند محتوی چندین نوع مختلف کنترلر باشد.این ماشین اکنون کنترلر ندارد.</translation>
     </message>
     <message>
-      <source>Attributes</source>
-      <translation>صفات</translation>
+        <source>Attributes</source>
+        <translation>صفات</translation>
     </message>
     <message>
-      <source>&Name:</source>
-      <translation>نا&م:</translation>
+        <source>&Name:</source>
+        <translation>نا&م:</translation>
     </message>
     <message>
-      <source>Changes the name of the storage controller currently selected in the Storage Tree.</source>
-      <translation>نام کنترلر ذخیره ساز فعلی انتخاب شده را در درخت ذخیره ساز تغییر میدهد.</translation>
+        <source>Changes the name of the storage controller currently selected in the Storage Tree.</source>
+        <translation type="obsolete">نام کنترلر ذخیره ساز فعلی انتخاب شده را در درخت ذخیره ساز تغییر میدهد.</translation>
     </message>
     <message>
-      <source>&Type:</source>
-      <translation>نو&ع:</translation>
+        <source>&Type:</source>
+        <translation>نو&ع:</translation>
     </message>
     <message>
-      <source>Selects the sub-type of the storage controller currently selected in the Storage Tree.</source>
-      <translation>زیر-نوع کنترلر ذخیره ساز کنونی انتخاب شده در درخت ذخیره ساز را انتخاب کنید.</translation>
+        <source>Selects the sub-type of the storage controller currently selected in the Storage Tree.</source>
+        <translation>زیر-نوع کنترلر ذخیره ساز کنونی انتخاب شده در درخت ذخیره ساز را انتخاب کنید.</translation>
     </message>
     <message>
-      <source>Selects the slot on the storage controller used by this attachment. The available slots depend on the type of the controller and other attachments on it.</source>
-      <translation>شکاف را در کنترلر ذخیره ساز بکاررفته با این ضمیمه را انتخاب کنید.شکاف های موجود به نوع کنترلر و سایر ضمیمه های آن بستگی دارد.</translation>
+        <source>Selects the slot on the storage controller used by this attachment. The available slots depend on the type of the controller and other attachments on it.</source>
+        <translation>شکاف را در کنترلر ذخیره ساز بکاررفته با این ضمیمه را انتخاب کنید.شکاف های موجود به نوع کنترلر و سایر ضمیمه های آن بستگی دارد.</translation>
     </message>
     <message>
-      <source>When checked, allows the guest to send ATAPI commands directly to the host-drive which makes it possible to use CD/DVD writers connected to the host inside the VM. Note that writing audio CD inside the VM is not yet supported.</source>
-      <translation>وقتیکه انتخاب شده،به مهمان اجازه ارسال فرمان مستقیم ATAPI به درایو-میزبان را میدهد که امکان استفاده از سی دی/دی وی دی رایتر متصل شده به میزبان را داخل ماشین مجازی میدهد. توجه کنید که نوشتن سی دی صوتی داخل ماشین مجازی هنوز پشتیبانی نشده است.</translation>
+        <source>When checked, allows the guest to send ATAPI commands directly to the host-drive which makes it possible to use CD/DVD writers connected to the host inside the VM. Note that writing audio CD inside the VM is not yet supported.</source>
+        <translation>وقتیکه انتخاب شده،به مهمان اجازه ارسال فرمان مستقیم ATAPI به درایو-میزبان را میدهد که امکان استفاده از سی دی/دی وی دی رایتر متصل شده به میزبان را داخل ماشین مجازی میدهد. توجه کنید که نوشتن سی دی صوتی داخل ماشین مجازی هنوز پشتیبانی نشده است.</translation>
     </message>
     <message>
-      <source>&Passthrough</source>
-      <translation>از طریق &گذرگاه</translation>
+        <source>&Passthrough</source>
+        <translation>از طریق &گذرگاه</translation>
     </message>
     <message>
-      <source>Virtual Size:</source>
-      <translation>حجم مجازی:</translation>
+        <source>Virtual Size:</source>
+        <translation>حجم مجازی:</translation>
     </message>
     <message>
-      <source>Actual Size:</source>
-      <translation>حجم واقعی:</translation>
+        <source>Actual Size:</source>
+        <translation>حجم واقعی:</translation>
     </message>
     <message>
-      <source>Size:</source>
-      <translation>حجم:</translation>
+        <source>Size:</source>
+        <translation>حجم:</translation>
     </message>
     <message>
-      <source>Location:</source>
-      <translation>مکان:</translation>
+        <source>Location:</source>
+        <translation>مکان:</translation>
     </message>
     <message>
-      <source>Type (Format):</source>
-      <translation>نوع (فرمت):</translation>
+        <source>Type (Format):</source>
+        <translation>نوع (فرمت):</translation>
     </message>
     <message>
-      <source>Attached to:</source>
-      <translation>ضمیمه شده به:</translation>
+        <source>Attached to:</source>
+        <translation>ضمیمه شده به:</translation>
     </message>
     <message>
-      <source>Allows to use host I/O caching capabilities.</source>
-      <translation>اجازه استفاده از قابلیت کَش ورودی/خروجی میزبان را میدهد.</translation>
+        <source>Allows to use host I/O caching capabilities.</source>
+        <translation type="obsolete">اجازه استفاده از قابلیت کَش ورودی/خروجی میزبان را میدهد.</translation>
     </message>
     <message>
-      <source>Use Host I/O Cache</source>
-      <translation>استفاده از کَش ورودی/خروجی میزبان</translation>
+        <source>Use Host I/O Cache</source>
+        <translation>استفاده از کَش ورودی/خروجی میزبان</translation>
     </message>
     <message>
-      <source>Add SAS Controller</source>
-      <translation>افزودن کنترلر SAS</translation>
+        <source>Add SAS Controller</source>
+        <translation>افزودن کنترلر SAS</translation>
     </message>
     <message>
-      <source>SAS Controller</source>
-      <translation>کنترلر SAS</translation>
+        <source>SAS Controller</source>
+        <translation type="obsolete">کنترلر SAS</translation>
     </message>
     <message>
-      <source>Type:</source>
-      <translation>نوع:</translation>
+        <source>Type:</source>
+        <translation>نوع:</translation>
     </message>
     <message>
-      <source>Host Drive</source>
-      <translation>درایو میزبان</translation>
+        <source>Host Drive</source>
+        <translation>درایو میزبان</translation>
     </message>
     <message>
-      <source>Image</source>
-      <translation>ایمیج</translation>
+        <source>Image</source>
+        <translation type="obsolete">ایمیج</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>
-      <translation>یک فایل دیسک سخت مجازی انتخاب یا ایجاد کنید. ماشین مجازی داده را در فایل بعنوان محتویات دیسک سخت مجازی میبیند.</translation>
+        <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>
+        <translation>یک فایل دیسک سخت مجازی انتخاب یا ایجاد کنید. ماشین مجازی داده را در فایل بعنوان محتویات دیسک سخت مجازی میبیند.</translation>
     </message>
     <message>
-      <source>Set up the virtual hard disk</source>
-      <translation>تنظیم دیسک سخت مجازی</translation>
+        <source>Set up the virtual hard disk</source>
+        <translation type="obsolete">تنظیم دیسک سخت مجازی</translation>
     </message>
     <message>
-      <source>CD/DVD &Drive:</source>
-      <translation>درایو سی دی/دی &وی دی:</translation>
+        <source>CD/DVD &Drive:</source>
+        <translation type="obsolete">درایو سی دی/دی &وی دی:</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>یک دیسک مجازی سی دی/دی وی دی یا یک درایو فیزیکی برای استفاده با درایو مجازی انتخاب کنید. ماشین مجازی دیسک قرارداده شده در درایو را با داده در فایل یا در درایو فیزیکی بعنوان محتویات دیسک میبیند.</translation>
+        <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>
     </message>
     <message>
-      <source>Set up the virtual CD/DVD drive</source>
-      <translation>تنظیم درایو مجازی سی دی/دی وی دی</translation>
+        <source>Set up the virtual CD/DVD drive</source>
+        <translation type="obsolete">تنظیم درایو مجازی سی دی/دی وی دی</translation>
     </message>
     <message>
-      <source>Floppy &Drive:</source>
-      <translation>درایو &فلاپی:</translation>
+        <source>Floppy &Drive:</source>
+        <translation>درایو &فلاپی:</translation>
     </message>
     <message>
-      <source>Choose a virtual floppy 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>یک دیسک فلاپی مجازی یا یک درایو فیزیکی برای استفاده با درایو مجازی انتخاب کنید. ماشین مجازی دیسک قرارداده شده در درایو را با داده در فایل یا در درایو فیزیکی بعنوان محتویات دیسک میبیند.</translation>
+        <source>Choose a virtual floppy 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>یک دیسک فلاپی مجازی یا یک درایو فیزیکی برای استفاده با درایو مجازی انتخاب کنید. ماشین مجازی دیسک قرارداده شده در درایو را با داده در فایل یا در درایو فیزیکی بعنوان محتویات دیسک میبیند.</translation>
     </message>
     <message>
-      <source>Set up the virtual floppy drive</source>
-      <translation>تنظیم درایو فلاپی مجازی</translation>
+        <source>Set up the virtual floppy drive</source>
+        <translation type="obsolete">تنظیم درایو فلاپی مجازی</translation>
     </message>
     <message>
-      <source>Create a new hard disk...</source>
-      <translation>ایجاد یک دیسک سخت جدید...</translation>
+        <source>Create a new hard disk...</source>
+        <translation type="obsolete">ایجاد یک دیسک سخت جدید...</translation>
     </message>
     <message>
-      <source>Choose a virtual hard disk file...</source>
-      <translation>یک فایل ديسک سخت مجازی انتخاب کنید...</translation>
+        <source>Choose a virtual hard disk file...</source>
+        <translation type="obsolete">یک فایل ديسک سخت مجازی انتخاب کنید...</translation>
     </message>
     <message>
-      <source>Choose a virtual CD/DVD disk file...</source>
-      <translation>یک فایل دیسک سی دی/دی وی دی مجازی انتخاب کنید...</translation>
+        <source>Choose a virtual CD/DVD disk file...</source>
+        <translation type="obsolete">یک فایل دیسک سی دی/دی وی دی مجازی انتخاب کنید...</translation>
     </message>
     <message>
-      <source>Remove disk from virtual drive</source>
-      <translation>حذف دیسک از درایو مجازی</translation>
+        <source>Remove disk from virtual drive</source>
+        <translation>حذف دیسک از درایو مجازی</translation>
     </message>
     <message>
-      <source>Choose a virtual floppy disk file...</source>
-      <translation>یک فایل دیسک فلاپی مجازی انتخاب کنید...</translation>
+        <source>Choose a virtual floppy disk file...</source>
+        <translation type="obsolete">یک فایل دیسک فلاپی مجازی انتخاب کنید...</translation>
     </message>
     <message>
-      <source>When checked the virtual disk will not be removed when the guest system ejects it.</source>
-      <translation>وقتیکه انتخاب شده،دیسک مجازی حذف نخواهد شد زمانیکه سیستم مهمان آن را ایجکت میکند.</translation>
+        <source>When checked the virtual disk will not be removed when the guest system ejects it.</source>
+        <translation type="obsolete">وقتیکه انتخاب شده،دیسک مجازی حذف نخواهد شد زمانیکه سیستم مهمان آن را ایجکت میکند.</translation>
     </message>
     <message>
-      <source>&Live CD/DVD</source>
-      <translation>سی &دی/دی وی دی زنده</translation>
+        <source>&Live CD/DVD</source>
+        <translation>سی &دی/دی وی دی زنده</translation>
     </message>
     <message>
-      <source>When checked the guest system will see the virtual disk as a solid state device.</source>
-      <translation>وقتیکه انتخاب شده،سیستم مهمان دیسک مجازی را بعنوان یک دستگاه حالت جامد خواهد دید.</translation>
+        <source>When checked the guest system will see the virtual disk as a solid state device.</source>
+        <translation type="obsolete">وقتیکه انتخاب شده،سیستم مهمان دیسک مجازی را بعنوان یک دستگاه حالت جامد خواهد دید.</translation>
     </message>
     <message>
-      <source>&Solid-state Drive</source>
-      <translation>&درایو حالت جامد</translation>
+        <source>&Solid-state Drive</source>
+        <translation>&درایو حالت جامد</translation>
     </message>
     <message>
-      <source>Details:</source>
-      <translation>جزئیات:</translation>
+        <source>Details:</source>
+        <translation>جزئیات:</translation>
     </message>
     <message>
-      <source>no name specified for controller at position <b>%1</b>.</source>
-      <translation>نامی برای کنترلر در موقعیت <b>%1</b> مشخص نشده است.</translation>
+        <source>no name specified for controller at position <b>%1</b>.</source>
+        <translation type="obsolete">نامی برای کنترلر در موقعیت <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>کنترلر در موقعیت <b>%1</b> از نامی که از قبل توسط کنترلری در موقعیت <b>%2</b> استفاده شده،بکار میبرد.</translation>
+        <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>
     </message>
     <message>
-      <source>no hard disk is selected for <i>%1</i>.</source>
-      <translation>هیچ دیسک سختی برای <i>%1</i>انتخاب نشده است.</translation>
+        <source>no hard disk is selected for <i>%1</i>.</source>
+        <translation type="obsolete">هیچ دیسک سختی برای <i>%1</i>انتخاب نشده است.</translation>
     </message>
     <message>
-      <source>at most one supported</source>
-      <comment>controller</comment>
-      <translation>حداکثر یکی پشتیبانی میشود</translation>
+        <source>at most one supported</source>
+        <comment>controller</comment>
+        <translation>حداکثر یکی پشتیبانی میشود</translation>
     </message>
     <message>
-      <source>up to %1 supported</source>
-      <comment>controllers</comment>
-      <translation>تا %1 پشتیبانی میشود</translation>
+        <source>up to %1 supported</source>
+        <comment>controllers</comment>
+        <translation>تا %1 پشتیبانی میشود</translation>
     </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>شما اکنون درحال استفاده کنترلرهای ذخیره ساز بیشتر از %1 تراشه پشتیبانی شده هستید. لطفا نوع تراشه را در صفحه تنظیمات سیستم تغییر دهید یا تعداد کنترلرهای ذخیره ساز زیرین را در صفحه تنظیمات ذخیره ساز کاهش دهید: %2.</translation>
+        <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>
     </message>
     <message>
-      <source>&Port Count:</source>
-      <translation>تعداد &پورت:</translation>
+        <source>&Port Count:</source>
+        <translation>تعداد &پورت:</translation>
     </message>
     <message>
-      <source>Selects the port count of the SATA storage controller currently selected in the Storage Tree. This must be at least one more than the highest port number you need to use.</source>
-      <translation>تعداد پورت کنترلر ذخیره ساز ساتا کنونی انتخاب شده را در درخت ذخیره ساز انتخاب کنید. این باید حداقل یکی بیشتر از بیشتر تعداد پورتی باشد که استفاده میکنید.</translation>
+        <source>Selects the port count of the SATA storage controller currently selected in the Storage Tree. This must be at least one more than the highest port number you need to use.</source>
+        <translation>تعداد پورت کنترلر ذخیره ساز ساتا کنونی انتخاب شده را در درخت ذخیره ساز انتخاب کنید. این باید حداقل یکی بیشتر از بیشتر تعداد پورتی باشد که استفاده میکنید.</translation>
     </message>
     <message>
-      <source>Controller: %1</source>
-      <translation>کنترلر: %1</translation>
+        <source>Controller: %1</source>
+        <translation>کنترلر: %1</translation>
     </message>
     <message>
-      <source>No name is currently specified for the controller at position <b>%1</b>.</source>
-      <translation>هیچ نامی اکنون برای کنترلر در موقعیت <b>%1</b> تعیین نشده است.</translation>
+        <source>No name is currently specified for the controller at position <b>%1</b>.</source>
+        <translation>هیچ نامی اکنون برای کنترلر در موقعیت <b>%1</b> تعیین نشده است.</translation>
     </message>
     <message>
-      <source>The controller at position <b>%1</b> has the same name as the controller at position <b>%2</b>.</source>
-      <translation>کنترلردر موقعیت <b>%1</b> همین نام را بعنوان کنترلر در موقعیت <b>%2</b> دارد.</translation>
+        <source>The controller at position <b>%1</b> has the same name as the controller at position <b>%2</b>.</source>
+        <translation>کنترلردر موقعیت <b>%1</b> همین نام را بعنوان کنترلر در موقعیت <b>%2</b> دارد.</translation>
     </message>
     <message>
-      <source>No hard disk is selected for <i>%1</i>.</source>
-      <translation>دیسک سختی برای <i>%1</i> انتخاب نشده است.</translation>
+        <source>No hard disk is selected for <i>%1</i>.</source>
+        <translation>دیسک سختی برای <i>%1</i> انتخاب نشده است.</translation>
     </message>
     <message>
-      <source><i>%1</i> is using a disk that is already attached to <i>%2</i>.</source>
-      <translation><i>%1</i> از دیسکی استفاده میکند که از قبل ضمیمه شده به <i>%2</i>.</translation>
+        <source><i>%1</i> is using a disk that is already attached to <i>%2</i>.</source>
+        <translation><i>%1</i> از دیسکی استفاده میکند که از قبل ضمیمه شده به <i>%2</i>.</translation>
     </message>
     <message>
-      <source>The machine currently has more storage controllers assigned 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>ماشین اکنون درحال استفاده کنترلرهای ذخیره ساز بیشتر از %1 تراشه پشتیبانی شده هستید. لطفا نوع تراشه را در صفحه تنظیمات سیستم تغییر دهید یا تعداد کنترلرهای ذخیره ساز زیرین را در صفحه تنظیمات ذخیره ساز کاهش دهید: %2</translation>
+        <source>The machine currently has more storage controllers assigned 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>ماشین اکنون درحال استفاده کنترلرهای ذخیره ساز بیشتر از %1 تراشه پشتیبانی شده هستید. لطفا نوع تراشه را در صفحه تنظیمات سیستم تغییر دهید یا تعداد کنترلرهای ذخیره ساز زیرین را در صفحه تنظیمات ذخیره ساز کاهش دهید: %2</translation>
     </message>
     <message>
-      <source>Lists all storage controllers for this machine and the virtual images and host drives attached to them.</source>
-      <translation>همه کنترلر های ذخیره ساز برای این ماشین و ایمیج مجازی و درایو های میزبان ضمیمه شده به آن را لیست می کند.</translation>
+        <source>Lists all storage controllers for this machine and the virtual images and host drives attached to them.</source>
+        <translation>همه کنترلر های ذخیره ساز برای این ماشین و ایمیج مجازی و درایو های میزبان ضمیمه شده به آن را لیست می کند.</translation>
     </message>
     <message>
-      <source>Holds the name of the storage controller currently selected in the Storage Tree.</source>
-      <translation>نام کنترلر ذخیره ساز فعلی انتخاب شده را در درخت ذخیره ساز حفظ می کند.</translation>
+        <source>Holds the name of the storage controller currently selected in the Storage Tree.</source>
+        <translation>نام کنترلر ذخیره ساز فعلی انتخاب شده را در درخت ذخیره ساز حفظ می کند.</translation>
     </message>
     <message>
-      <source>When checked, allows to use host I/O caching capabilities.</source>
-      <translation>وقتیکه انتخاب شده،اجازه استفاده از قابلیت کَش کردن ورودی/خروجی میزبان را میدهد.</translation>
+        <source>When checked, allows to use host I/O caching capabilities.</source>
+        <translation>وقتیکه انتخاب شده،اجازه استفاده از قابلیت کَش کردن ورودی/خروجی میزبان را میدهد.</translation>
     </message>
     <message>
-      <source>When checked, the virtual disk will not be removed when the guest system ejects it.</source>
-      <translation>وقتیکه انتخاب شده،هنگامی که دیسک مجازی توسط سیستم مهمان ریجکت شد،حذف نخواهد شد</translation>
+        <source>When checked, the virtual disk will not be removed when the guest system ejects it.</source>
+        <translation>وقتیکه انتخاب شده،هنگامی که دیسک مجازی توسط سیستم مهمان ریجکت شد،حذف نخواهد شد</translation>
     </message>
     <message>
-      <source>When checked, the guest system will see the virtual disk as a solid-state device.</source>
-      <translation>وقتیکه انتخاب شده،سیتم مهمان دیسک مجازی را بعنوان دیسک جامد می بیند.</translation>
+        <source>When checked, the guest system will see the virtual disk as a solid-state device.</source>
+        <translation>وقتیکه انتخاب شده،سیتم مهمان دیسک مجازی را بعنوان دیسک جامد می بیند.</translation>
     </message>
     <message>
-      <source>When checked, the guest system will see the virtual disk as a hot-pluggable device.</source>
-      <translation>وقتیکه انتخاب شده،سیستم مهمان دیسک مجازی را بعنوان دستگاه اتصال گرم(مثل فِلَش) میبیند.</translation>
+        <source>When checked, the guest system will see the virtual disk as a hot-pluggable device.</source>
+        <translation>وقتیکه انتخاب شده،سیستم مهمان دیسک مجازی را بعنوان دستگاه اتصال گرم(مثل فِلَش) میبیند.</translation>
     </message>
     <message>
-      <source>&Hot-pluggable</source>
-      <translation>اتصال گَرم&</translation>
+        <source>&Hot-pluggable</source>
+        <translation>اتصال گَرم&</translation>
     </message>
     <message>
-      <source>Encrypted with key:</source>
-      <translation>رمزگذاری شده با کلید:</translation>
+        <source>Encrypted with key:</source>
+        <translation>رمزگذاری شده با کلید:</translation>
     </message>
     <message>
-      <source>Choose disk image...</source>
-      <comment>This is used for hard disks, optical media and floppies</comment>
-      <translation>ایمیج دیسک را انتخاب کنید...</translation>
+        <source>Choose disk image...</source>
+        <comment>This is used for hard disks, optical media and floppies</comment>
+        <translation>ایمیج دیسک را انتخاب کنید...</translation>
     </message>
     <message>
-      <source>Image</source>
-      <comment>storage image</comment>
-      <translation>ایمیج</translation>
+        <source>Image</source>
+        <comment>storage image</comment>
+        <translation>ایمیج</translation>
     </message>
     <message>
-      <source><nobr>Expands/Collapses&nbsp;item.</nobr></source>
-      <translation><nobr>باز کردن/بستنs&nbsp;مورد</nobr></translation>
+        <source><nobr>Expands/Collapses&nbsp;item.</nobr></source>
+        <translation><nobr>باز کردن/بستنs&nbsp;مورد</nobr></translation>
     </message>
     <message>
-      <source><nobr>Adds&nbsp;hard&nbsp;disk.</nobr></source>
-      <translation><nobr>افزودنs&nbsp;دیسک&nbsp;سخت.</nobr></translation>
+        <source><nobr>Adds&nbsp;hard&nbsp;disk.</nobr></source>
+        <translation><nobr>افزودنs&nbsp;دیسک&nbsp;سخت.</nobr></translation>
     </message>
     <message>
-      <source><nobr>Adds&nbsp;optical&nbsp;drive.</nobr></source>
-      <translation><nobr>افزودنs&nbsp;درایو&nbsp;نوری.</nobr></translation>
+        <source><nobr>Adds&nbsp;optical&nbsp;drive.</nobr></source>
+        <translation><nobr>افزودنs&nbsp;درایو&nbsp;نوری.</nobr></translation>
     </message>
     <message>
-      <source><nobr>Adds&nbsp;floppy&nbsp;drive.</nobr></source>
-      <translation><nobr>افزودنs&nbsp;فلاپی&nbsp;درایو.</nobr></translation>
+        <source><nobr>Adds&nbsp;floppy&nbsp;drive.</nobr></source>
+        <translation><nobr>افزودنs&nbsp;فلاپی&nbsp;درایو.</nobr></translation>
     </message>
     <message>
-      <source>Add USB Controller</source>
-      <translation>افزودن کنترلر یو اِس بی</translation>
+        <source>Add USB Controller</source>
+        <translation>افزودن کنترلر یو اِس بی</translation>
     </message>
     <message>
-      <source>Add Optical Drive</source>
-      <translation>افزودن درایو نوری</translation>
+        <source>Add Optical Drive</source>
+        <translation>افزودن درایو نوری</translation>
     </message>
     <message>
-      <source>Add Floppy Drive</source>
-      <translation>افزودن فلاپی درایو</translation>
+        <source>Add Floppy Drive</source>
+        <translation>افزودن فلاپی درایو</translation>
     </message>
     <message>
-      <source>Adds new storage controller.</source>
-      <translation>افزودن کنترلر ذخیره ساز جدید</translation>
+        <source>Adds new storage controller.</source>
+        <translation>افزودن کنترلر ذخیره ساز جدید</translation>
     </message>
     <message>
-      <source>Removes selected storage controller.</source>
-      <translation>حذف کنترلر ذخیره ساز انتخاب شده</translation>
+        <source>Removes selected storage controller.</source>
+        <translation>حذف کنترلر ذخیره ساز انتخاب شده</translation>
     </message>
     <message>
-      <source>Adds new storage attachment.</source>
-      <translation>افزودن ضمیمه ذخیره ساز جدید</translation>
+        <source>Adds new storage attachment.</source>
+        <translation>افزودن ضمیمه ذخیره ساز جدید</translation>
     </message>
     <message>
-      <source>Removes selected storage attachment.</source>
-      <translation>حذف ضمیمه ذخیره ساز انتخاب شده</translation>
+        <source>Removes selected storage attachment.</source>
+        <translation>حذف ضمیمه ذخیره ساز انتخاب شده</translation>
     </message>
     <message>
-      <source>Optical &Drive:</source>
-      <translation>درایو نوری&:</translation>
+        <source>Optical &Drive:</source>
+        <translation>درایو نوری&:</translation>
     </message>
     <message>
-      <source>Choose a virtual optical disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source>
-      <translation>یک دیسک مجازی نوری یا یک درایو فیزیکی برای استفاده با درایو مجازی انتخاب کنید. ماشین مجازی دیسک قرارداده شده در درایو را با داده در فایل یا در درایو فیزیکی بعنوان محتویات دیسک می بیند.</translation>
+        <source>Choose a virtual optical disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source>
+        <translation>یک دیسک مجازی نوری یا یک درایو فیزیکی برای استفاده با درایو مجازی انتخاب کنید. ماشین مجازی دیسک قرارداده شده در درایو را با داده در فایل یا در درایو فیزیکی بعنوان محتویات دیسک می بیند.</translation>
     </message>
     <message>
-      <source>Create New Hard Disk...</source>
-      <translation>ایجاد دیسک سخت جدید...</translation>
+        <source>Create New Hard Disk...</source>
+        <translation>ایجاد دیسک سخت جدید...</translation>
     </message>
     <message>
-      <source>Choose Virtual Hard Disk File...</source>
-      <translation>فایل دیسک سخت مجازی انتخاب کنید...</translation>
+        <source>Choose Virtual Hard Disk File...</source>
+        <translation>فایل دیسک سخت مجازی انتخاب کنید...</translation>
     </message>
     <message>
-      <source>Choose Virtual Optical Disk File...</source>
-      <translation>فایل دیسک نوری مجازی انتخاب کنید...</translation>
+        <source>Choose Virtual Optical Disk File...</source>
+        <translation>فایل دیسک نوری مجازی انتخاب کنید...</translation>
     </message>
     <message>
-      <source>Remove Disk from Virtual Drive</source>
-      <translation>حذف دیسک از درایو مجازی</translation>
+        <source>Remove Disk from Virtual Drive</source>
+        <translation>حذف دیسک از درایو مجازی</translation>
     </message>
     <message>
-      <source>Choose Virtual Floppy Disk File...</source>
-      <translation>فایل دیسک فلاپی مجازی را انتخاب کنید...</translation>
+        <source>Choose Virtual Floppy Disk File...</source>
+        <translation>فایل دیسک فلاپی مجازی را انتخاب کنید...</translation>
     </message>
-  </context>
-  <context>
+</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>شما بیشتر از <b>%1%</b> از حافظه رایانه را (<b>%2</b>) به ماشین مجازی اختصاص داده اید. حافظه کافی برای سیستم عامل میزبان باقی نمانده است. لطفا مقدار کمتری انتخاب کنید.</translation>
+        <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>
     </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>شما بیشتر از <b>%1%</b> از حافظه رایانه را (<b>%2</b>) به ماشین مجازی اختصاص داده اید. حافظه کافی برای سیستم عامل میزبان باقی نمانده است. با ریسک پذیری خود ادامه دهید.</translation>
+        <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>
     </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>به دلیل کارایی، تعداد پردازنده مجازی ضمیمه شده به ماشین مجازی نبابید بیشتر از دوبرابر پردازنده فیزیکی در میزبان (<b>%1</b>) باشد. لطفا تعداد پردازنده مجازی را کاهش دهید.</translation>
+        <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>
     </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>شما پردازنده مجازی بیشتری نسبت به تعداد پردازنده فیزیکی سیستم میزبان (<b>%1</b>) به ماشین مجازی اختصاص داده اید. این بیشتر باعث تنزل کارایی ماشین مجازی میشود. لطفا به کاهش پردازنده مجازی توجه کنید.</translation>
+        <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>
     </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>شما بیشتر از یک پردازنده مجازی به ماشین مجازی اختصاص داده اید. آن کار نخواهد کرد مگر اینکه ویژگی IO-APIC نیز فعال شده باشد. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
+        <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>
     </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>شما بیشتر از یک پردازنده مجازی به ماشین اختصاص داده اید. آن کار نخواهد کرد مگر اینکه مجازی سازی سخت افزار (VT-x/AMD-V) نیز فعال شده باشد. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
+        <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>
     </message>
     <message>
-      <source><qt>%1&nbsp;MB</qt></source>
-      <translation><qt>%1&nbsp;مگابایت</qt></translation>
+        <source><qt>%1&nbsp;MB</qt></source>
+        <translation type="obsolete"><qt>%1&nbsp;مگابایت</qt></translation>
     </message>
     <message>
-      <source><qt>%1&nbsp;CPU</qt></source>
-      <comment>%1 is 1 for now</comment>
-      <translation><qt>%1&nbsp;پردازنده</qt></translation>
+        <source><qt>%1&nbsp;CPU</qt></source>
+        <comment>%1 is 1 for now</comment>
+        <translation type="obsolete"><qt>%1&nbsp;پردازنده</qt></translation>
     </message>
     <message>
-      <source>&Motherboard</source>
-      <translation>&مادربرد</translation>
+        <source>&Motherboard</source>
+        <translation>&مادربرد</translation>
     </message>
     <message>
-      <source>Base &Memory:</source>
-      <translation>حافظه پا&یه:</translation>
+        <source>Base &Memory:</source>
+        <translation>حافظه پا&یه:</translation>
     </message>
     <message>
-      <source>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</source>
-      <translation>مقدار حافظه ارائه شده در ماشین مجازی را کنترل میکند.اگر زیادی اختصاص دهید،شاید ماشین اِجرا نشود.</translation>
+        <source>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</source>
+        <translation>مقدار حافظه ارائه شده در ماشین مجازی را کنترل میکند.اگر زیادی اختصاص دهید،شاید ماشین اِجرا نشود.</translation>
     </message>
     <message>
-      <source>MB</source>
-      <translation>مگابایت</translation>
+        <source>MB</source>
+        <translation>مگابایت</translation>
     </message>
     <message>
-      <source>&Boot Order:</source>
-      <translation>ترتیب &بوت:</translation>
+        <source>&Boot Order:</source>
+        <translation>ترتیب &بوت:</translation>
     </message>
     <message>
-      <source>Defines the boot device order. Use the checkboxes on the left to enable or disable individual boot devices. Move items up and down to change the device order.</source>
-      <translation>ترتیب بوت شدن دستگاه را تعریف میکند.از چک باکس سمت راست برای فعال و غیرفعال کردن جداگانه دستگاه بوت استفاده کنید.برای تغییر ترتیب بوت دستگاه آنها را بالا و پایین ببرید.</translation>
+        <source>Defines the boot device order. Use the checkboxes on the left to enable or disable individual boot devices. Move items up and down to change the device order.</source>
+        <translation>ترتیب بوت شدن دستگاه را تعریف میکند.از چک باکس سمت راست برای فعال و غیرفعال کردن جداگانه دستگاه بوت استفاده کنید.برای تغییر ترتیب بوت دستگاه آنها را بالا و پایین ببرید.</translation>
     </message>
     <message>
-      <source>Move Down (Ctrl-Down)</source>
-      <translation>به پایین (Ctrl-Down)</translation>
+        <source>Move Down (Ctrl-Down)</source>
+        <translation type="obsolete">به پایین (Ctrl-Down)</translation>
     </message>
     <message>
-      <source>Moves the selected boot device down.</source>
-      <translation>دستگاه بوت انتخاب شده را به پایین انتقال میدهد.</translation>
+        <source>Moves the selected boot device down.</source>
+        <translation>دستگاه بوت انتخاب شده را به پایین انتقال میدهد.</translation>
     </message>
     <message>
-      <source>Move Up (Ctrl-Up)</source>
-      <translation>به بالا (Ctrl-Up)</translation>
+        <source>Move Up (Ctrl-Up)</source>
+        <translation type="obsolete">به بالا (Ctrl-Up)</translation>
     </message>
     <message>
-      <source>Moves the selected boot device up.</source>
-      <translation>دستگاه بوت انتخاب شده را به بالا انتقال میدهد.</translation>
+        <source>Moves the selected boot device up.</source>
+        <translation>دستگاه بوت انتخاب شده را به بالا انتقال میدهد.</translation>
     </message>
     <message>
-      <source>Extended Features:</source>
-      <translation>ویژگی تمدید یافته:</translation>
+        <source>Extended Features:</source>
+        <translation>ویژگی تمدید یافته:</translation>
     </message>
     <message>
-      <source>When checked, the virtual machine will support the Input Output APIC (I/O APIC), which may slightly decrease performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source>
-      <translation>وقتیکه انتخاب شده، ماشین مجازی از ورودی خروجیAPIC (I/O APIC) پشتیبانی میکند، که ممکن است اندکی کارایی را کاهش دهد. <b>توجه:</b>این ویزگی را بعد از نصب ویندوز سیستم عامل مهمان غیرفعال نکنید!</translation>
+        <source>When checked, the virtual machine will support the Input Output APIC (I/O APIC), which may slightly decrease performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source>
+        <translation>وقتیکه انتخاب شده، ماشین مجازی از ورودی خروجیAPIC (I/O APIC) پشتیبانی میکند، که ممکن است اندکی کارایی را کاهش دهد. <b>توجه:</b>این ویزگی را بعد از نصب ویندوز سیستم عامل مهمان غیرفعال نکنید!</translation>
     </message>
     <message>
-      <source>Enable &I/O APIC</source>
-      <translation>فعالسازی &I/O APIC</translation>
+        <source>Enable &I/O APIC</source>
+        <translation>فعالسازی &I/O APIC</translation>
     </message>
     <message>
-      <source>&Processor</source>
-      <translation>&پردازنده</translation>
+        <source>&Processor</source>
+        <translation>&پردازنده</translation>
     </message>
     <message>
-      <source>&Processor(s):</source>
-      <translation>پرداز&نده:</translation>
+        <source>&Processor(s):</source>
+        <translation>پرداز&نده:</translation>
     </message>
     <message>
-      <source>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</source>
-      <translation>وقتیکه انتخاب شده، ویزگی افزونه آدرس فیزیکی پردازنده میزبان (PAE) در معرض ماشین مجازی قرار میگیرد.</translation>
+        <source>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</source>
+        <translation>وقتیکه انتخاب شده، ویزگی افزونه آدرس فیزیکی پردازنده میزبان (PAE) در معرض ماشین مجازی قرار میگیرد.</translation>
     </message>
     <message>
-      <source>Enable PA&E/NX</source>
-      <translation>فعالسازی PA&E/NX</translation>
+        <source>Enable PA&E/NX</source>
+        <translation>فعالسازی PA&E/NX</translation>
     </message>
     <message>
-      <source>Acce&leration</source>
-      <translation>شتا&ب دهنده</translation>
+        <source>Acce&leration</source>
+        <translation>شتا&ب دهنده</translation>
     </message>
     <message>
-      <source>Hardware Virtualization:</source>
-      <translation>مجازی سازی سخت افزار:</translation>
+        <source>Hardware Virtualization:</source>
+        <translation>مجازی سازی سخت افزار:</translation>
     </message>
     <message>
-      <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</source>
-      <translation>وقتیکه انتخاب شده، ماشین مجازی سعی میکند از افزونه سخت افزار مجازی سازی پردازنده میزبان همچون Intel VT-x و AMD-V استفاده کند.</translation>
+        <source>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</source>
+        <translation>وقتیکه انتخاب شده، ماشین مجازی سعی میکند از افزونه سخت افزار مجازی سازی پردازنده میزبان همچون Intel VT-x و AMD-V استفاده کند.</translation>
     </message>
     <message>
-      <source>Enable &VT-x/AMD-V</source>
-      <translation>فعالسازی &VT-x/AMD-V</translation>
+        <source>Enable &VT-x/AMD-V</source>
+        <translation>فعالسازی &VT-x/AMD-V</translation>
     </message>
     <message>
-      <source>When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V.</source>
-      <translation>وقتیکه انتخاب شده، ماشین مجازی سعی میکند از افزونه صفحه بندی تو در تو Intel VT-x و AMD-V استفاده کند.</translation>
+        <source>When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V.</source>
+        <translation>وقتیکه انتخاب شده، ماشین مجازی سعی میکند از افزونه صفحه بندی تو در تو Intel VT-x و AMD-V استفاده کند.</translation>
     </message>
     <message>
-      <source>Enable Nested Pa&ging</source>
-      <translation>فعالسازی &صفحه بندی تو در تو</translation>
+        <source>Enable Nested Pa&ging</source>
+        <translation>فعالسازی &صفحه بندی تو در تو</translation>
     </message>
     <message>
-      <source><qt>%1&nbsp;CPUs</qt></source>
-      <comment>%1 is host cpu count * 2 for now</comment>
-      <translation><qt>%1&nbsp;پردازنده</qt></translation>
+        <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>
     </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>
-      <translation>وقتیکه انتخاب شده، مهمان از رابط سفت افزار تمدید شده (EFI) پشتیبانی میکند، که آن موردنیاز برای بوت OSes معین هست. Non-EFI aware OSes قادر به بوت نیست اگر این گزینه فعال شده باشد.</translation>
+        <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>
+        <translation>وقتیکه انتخاب شده، مهمان از رابط سفت افزار تمدید شده (EFI) پشتیبانی میکند، که آن موردنیاز برای بوت OSes معین هست. Non-EFI aware OSes قادر به بوت نیست اگر این گزینه فعال شده باشد.</translation>
     </message>
     <message>
-      <source>Enable &EFI (special OSes only)</source>
-      <translation>فعالسازی &EFI (فقط ویژه OSes)</translation>
+        <source>Enable &EFI (special OSes only)</source>
+        <translation>فعالسازی &EFI (فقط ویژه OSes)</translation>
     </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>اگر انتخاب شده، دستگاه RTC زمان را در یو تی سی گزارش میدهد، در غیراینصورت دز زمان (میزبان) محلی گزارش میدهد. یونیکس معمولا انتظار دارد ساعت سخت افزاری در یو تی سی تنظیم شده باشد.</translation>
+        <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>
     </message>
     <message>
-      <source>Hardware Clock in &UTC Time</source>
-      <translation>ساعت &سخت افزاری در زمان یو تی سی&</translation>
+        <source>Hardware Clock in &UTC Time</source>
+        <translation>ساعت &سخت افزاری در زمان یو تی سی&</translation>
     </message>
     <message>
-      <source>Controls the number of virtual CPUs in the virtual machine. You need hardware virtualization support on your host system to use more than one virtual CPU.</source>
-      <translation>تعداد پردازنده مجازی در ماشین مجازی را کنترل میکند.شما نیاز به پشتیبانی سخت افزار مجازی سازی در سیستم میزبان برای استفاده بیشتر از یک پردازنده مجازی دارید.</translation>
+        <source>Controls the number of virtual CPUs in the virtual machine. You need hardware virtualization support on your host system to use more than one virtual CPU.</source>
+        <translation>تعداد پردازنده مجازی در ماشین مجازی را کنترل میکند.شما نیاز به پشتیبانی سخت افزار مجازی سازی در سیستم میزبان برای استفاده بیشتر از یک پردازنده مجازی دارید.</translation>
     </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>اگر انتخاب شده،یک دستگاه اشاره گر حقیقی (یک تبلت یو اِس بی) پشتیبانی خواهد شد. درغیراینصورت، فقط یک ماوس استاندارد PS/2 شبیه سازی خواهد شد.</translation>
+        <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>
     </message>
     <message>
-      <source>Enable &absolute pointing device</source>
-      <translation>فعال &سازی دستگاه اشاره گر حقیقی</translation>
+        <source>Enable &absolute pointing device</source>
+        <translation type="obsolete">فعال &سازی دستگاه اشاره گر حقیقی</translation>
     </message>
     <message>
-      <source>&Chipset:</source>
-      <translation>&تراشه:</translation>
+        <source>&Chipset:</source>
+        <translation>&تراشه:</translation>
     </message>
     <message>
-      <source>Selects the chipset to be emulated in this virtual machine. Note that the ICH9 chipset emulation is experimental and not recommended except for guest systems (such as Mac OS X) which require it.</source>
-      <translation>تراشه را برای شبیه سازی در این ماشین مجازی انتخاب کنید. توجه کنید که شبیه سازی تراشه ICH9 ازمایشی هست و توصیه نمیشود بجز برای سیستم های مهمان (مانند Mac OS X) که به آن نیاز دارند.</translation>
+        <source>Selects the chipset to be emulated in this virtual machine. Note that the ICH9 chipset emulation is experimental and not recommended except for guest systems (such as Mac OS X) which require it.</source>
+        <translation>تراشه را برای شبیه سازی در این ماشین مجازی انتخاب کنید. توجه کنید که شبیه سازی تراشه ICH9 ازمایشی هست و توصیه نمیشود بجز برای سیستم های مهمان (مانند Mac OS X) که به آن نیاز دارند.</translation>
     </message>
     <message>
-      <source>&Execution Cap:</source>
-      <translation>درپوش اِجرا&:</translation>
+        <source>&Execution Cap:</source>
+        <translation>درپوش اِجرا&:</translation>
     </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>محدودسازی مقدار زمان هر پردازنده مجازی که اجازه اجرا داده شده است. هر پردازنده مجازی اجازه داده شده تا این درصد زمان پردازش موجود در یک پردازنده فیزیکی را استفاده کند. درپوس اِجرا میتواند با تنظیم شدن روی 100% غیرفعال شود. تنظیم در پوش به پایین میتواند باعث کندی پاسخ ماشین شود.</translation>
+        <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>محدودسازی مقدار زمان هر پردازنده مجازی که اجازه اجرا داده شده است. هر پردازنده مجازی اجازه داده شده تا این درصد زمان پردازش موجود در یک پردازنده فیزیکی را استفاده کند. درپوس اِجرا میتواند با تنظیم شدن روی 100% غیرفعال شود. تنظیم در پوش به پایین میتواند باعث کندی پاسخ ماشین شود.</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>
-      <translation>شما درپوش اِجرای پردازنده را در مقدار کم تنظیم کرده اید. این موجب میشود که ماشین آهسته واکنش دهد.</translation>
+        <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>
     </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>شما یک USB HID (Human Interface Device) را فعال کرده اید. این کار نخواهد کرد مگراینکه شبیه سازی یو اِس بی نیز فعال شده باشد. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
+        <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>
     </message>
     <message>
-      <source><qt>%1%</qt></source>
-      <comment>Min CPU execution cap in %</comment>
-      <translation><qt>%1%</qt></translation>
+        <source><qt>%1%</qt></source>
+        <comment>Min CPU execution cap in %</comment>
+        <translation type="obsolete"><qt>%1%</qt></translation>
     </message>
     <message>
-      <source><qt>%1%</qt></source>
-      <comment>Max CPU execution cap in %</comment>
-      <translation><qt>%1%</qt></translation>
+        <source><qt>%1%</qt></source>
+        <comment>Max CPU execution cap in %</comment>
+        <translation type="obsolete"><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>شما نوع تراشه ICH9 به ماشین مجازی اختصاص داده اید. آن بدرستی کار نمیکند مگراینکه شما گزینه IO-APIC را فعال کرده باشید. این خودکار انجام خواهد شد وقتیکه شما تنظیمات ماشین مجازی را با فشار دکمه تأیید بپذیرید.</translation>
+        <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>
     </message>
     <message>
-      <source>&Pointing Device:</source>
-      <translation>&دستگاه اشاره گر:</translation>
+        <source>&Pointing Device:</source>
+        <translation>&دستگاه اشاره گر:</translation>
     </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>هرگاه دستگاه اشاره گر شبیه ساز شده یک ماوس پی اِس/2 استاندارد،یک تبلت یو اِس  بی یا یک تبلت لمسی یو اِس بی را تعیین میکند.</translation>
+        <source>Determines whether the emulated pointing device is a standard PS/2 mouse, a USB tablet or a USB multi-touch tablet.</source>
+        <translation>هرگاه دستگاه اشاره گر شبیه ساز شده یک ماوس پی اِس/2 استاندارد،یک تبلت یو اِس  بی یا یک تبلت لمسی یو اِس بی را تعیین میکند.</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>
-      <translation>بیشتر از <b>%1%</b> از حافظه رایانه میزبان را (<b>%2</b>) به ماشین مجازی اختصاص داده اید. حافظه کافی برای سیستم عامل مهمان باقی نمانده است.لطفا مقدار کمتری انتخاب نمایید.</translation>
+        <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>
+        <translation>بیشتر از <b>%1%</b> از حافظه رایانه میزبان را (<b>%2</b>) به ماشین مجازی اختصاص داده اید. حافظه کافی برای سیستم عامل مهمان باقی نمانده است.لطفا مقدار کمتری انتخاب نمایید.</translation>
     </message>
     <message>
-      <source>More than <b>%1%</b> of the host computer's memory (<b>%2</b>) is assigned to the virtual machine. There might not be enough memory left for the host operating system. Please consider selecting a smaller amount.</source>
-      <translation>بیشتر از <b>%1%</b> از حافظه رایانه میزبان را (<b>%2</b>) به ماشین مجازی اختصاص داده اید. حافظه کافی برای سیستم عامل مهمان باقی نمانده است.با در نظر گرفتن این مقدار کمتری انتخاب نمایید.</translation>
+        <source>More than <b>%1%</b> of the host computer's memory (<b>%2</b>) is assigned to the virtual machine. There might not be enough memory left for the host operating system. Please consider selecting a smaller amount.</source>
+        <translation>بیشتر از <b>%1%</b> از حافظه رایانه میزبان را (<b>%2</b>) به ماشین مجازی اختصاص داده اید. حافظه کافی برای سیستم عامل مهمان باقی نمانده است.با در نظر گرفتن این مقدار کمتری انتخاب نمایید.</translation>
     </message>
     <message>
-      <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support a chip set of type ICH9. It will be done automatically if you confirm your changes.</source>
-      <translation>ویژگی ورودی/خروجی APIC اکنون در بخش مادربرد صفحه سیستم فعال نشده است.این برای پشتیبانی از نوع تراشه ICH9 ضروری هست. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
+        <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>
     </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>شبیه ساز کنترلر یو اِس بی اکنون در صفحه یو اِس بی فعال نشده است. بمنظور پشتیبانی از دستگاه ورودی یو اِس بی به آن نیاز است. اگر تغییرات را تایید کنید آن خودکار انجام خواهد شد..</translation>
+        <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>
     </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>به دلیل کارایی، تعداد پردازنده مجازی ضمیمه شده به ماشین مجازی نبابید بیشتر از دوبرابر پردازنده فیزیکی در میزبان (<b>%1</b>) باشد. لطفا تعداد پردازنده مجازی را کاهش دهید.</translation>
+        <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>به دلیل کارایی، تعداد پردازنده مجازی ضمیمه شده به ماشین مجازی نبابید بیشتر از دوبرابر پردازنده فیزیکی در میزبان (<b>%1</b>) باشد. لطفا تعداد پردازنده مجازی را کاهش دهید.</translation>
     </message>
     <message>
-      <source>More virtual CPUs are assigned to the virtual machine than the number of physical CPUs on the 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>پردازنده مجازی بیشتری نسبت به تعداد پردازنده فیزیکی سیستم میزبان (<b>%1</b>) به ماشین مجازی اختصاص داده اید. این بیشتر باعث تنزل کارایی ماشین مجازی میشود. لطفا به کاهش پردازنده مجازی توجه کنید.</translation>
+        <source>More virtual CPUs are assigned to the virtual machine than the number of physical CPUs on the 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>پردازنده مجازی بیشتری نسبت به تعداد پردازنده فیزیکی سیستم میزبان (<b>%1</b>) به ماشین مجازی اختصاص داده اید. این بیشتر باعث تنزل کارایی ماشین مجازی میشود. لطفا به کاهش پردازنده مجازی توجه کنید.</translation>
     </message>
     <message>
-      <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support more than one virtual processor. It will be done automatically if you confirm your changes.</source>
-      <translation>ویژگی ورودی/خروجی APIC اکنون در بخش مادربرد صفحه سیستم فعال نشده است.این برای پشتیبانی از بیشتر از یک پردازنده مجازی نیاز است. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
+        <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>
     </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>مجازی سازی سخت افزار اکنون در بخش شتاب دهنده صفحه سیستم فعال نشده است. برای پشتیبانی از بیشتر از یک پردازنده مجازی این ضروری است. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
+        <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>
     </message>
     <message>
-      <source>The processor execution cap is set to a low value. This may make the machine feel slow to respond.</source>
-      <translation>درپوش اِجرای پردازنده به مقدار کم تنظیم شده است.این میتواند موجب احساس کندی در عملکرد و پاسخ ماشین داشته باشد.</translation>
+        <source>The processor execution cap is set to a low value. This may make the machine feel slow to respond.</source>
+        <translation>درپوش اِجرای پردازنده به مقدار کم تنظیم شده است.این میتواند موجب احساس کندی در عملکرد و پاسخ ماشین داشته باشد.</translation>
     </message>
     <message>
-      <source>When checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source>
-      <translation>وقتیکه انتخاب شده، دستگاه RTC زمان را در یو تی سی گزارش میدهد، در غیراینصورت دز زمان (میزبان) محلی گزارش میدهد. یونیکس معمولا انتظار دارد ساعت سخت افزاری در یو تی سی تنظیم شده باشد.</translation>
+        <source>When checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source>
+        <translation>وقتیکه انتخاب شده، دستگاه RTC زمان را در یو تی سی گزارش میدهد، در غیراینصورت دز زمان (میزبان) محلی گزارش میدهد. یونیکس معمولا انتظار دارد ساعت سخت افزاری در یو تی سی تنظیم شده باشد.</translation>
     </message>
     <message>
-      <source>%</source>
-      <translation>%</translation>
+        <source>%</source>
+        <translation>%</translation>
     </message>
     <message>
-      <source>&Paravirtualization Interface:</source>
-      <translation>رابط پارا مجازی سازی&:</translation>
+        <source>&Paravirtualization Interface:</source>
+        <translation>رابط پارا مجازی سازی&:</translation>
     </message>
     <message>
-      <source>Selects the paravirtualization guest interface provider to be used by this virtual machine.</source>
-      <translation>ارائه دهنده رابط پارا مجازی سازی مهمان برای استفاده در این ماشین انتخاب کنید</translation>
+        <source>Selects the paravirtualization guest interface provider to be used by this virtual machine.</source>
+        <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 in order to support a chip set of type ICH9 you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
-      <translation>ویژگی ورودی/خروجی APIC اکنون در بخش مادربرد صفحه سیستم فعال نشده است.این برای پشتیبانی از نوع تراشه ICH9 که برای این ماشین مجازی فعال کرده اید ضروری هست. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
+        <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support a chip set of type ICH9 you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
+        <translation>ویژگی ورودی/خروجی 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 you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
-      <translation>شبیه ساز کنترلر یو اِس بی اکنون در صفحه یو اِس بی فعال نشده است. بمنظور پشتیبانی از دستگاه ورودی یو اِس بی که برای این ماشین مجازی فعال شده،به آن نیاز است. اگر تغییرات را تایید کنید آن خودکار انجام خواهد شد.</translation>
+        <source>USB controller emulation is not currently enabled on the USB page. This is needed to support an emulated USB input device you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
+        <translation>شبیه ساز کنترلر یو اِس بی اکنون در صفحه یو اِس بی فعال نشده است. بمنظور پشتیبانی از دستگاه ورودی یو اِس بی که برای این ماشین مجازی فعال شده،به آن نیاز است. اگر تغییرات را تایید کنید آن خودکار انجام خواهد شد.</translation>
     </message>
     <message>
-      <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
-      <translation>ویژگی ورودی/خروجی APIC اکنون در بخش مادربرد صفحه سیستم فعال نشده است.این برای پشتیبانی از بیشتر از یک پردازنده مجازی که برای این ماشین مجازی فعال کرده اید نیاز است. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
+        <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
+        <translation>ویژگی ورودی/خروجی 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 you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
-      <translation>مجازی سازی سخت افزار اکنون در بخش شتاب دهنده صفحه سیستم فعال نشده است. برای پشتیبانی از بیشتر از یک پردازنده مجازی که برای این ماشین مجازی انتخاب کرده اید ضروری است. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
+        <source>Hardware virtualization is not currently enabled in the Acceleration section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
+        <translation>مجازی سازی سخت افزار اکنون در بخش شتاب دهنده صفحه سیستم فعال نشده است. برای پشتیبانی از بیشتر از یک پردازنده مجازی که برای این ماشین مجازی انتخاب کرده اید ضروری است. اگر تغییرات را تایید و اعمال کنید آن خودکار انجام خواهد شد.</translation>
     </message>
     <message>
-      <source>%1 MB</source>
-      <translation>%1 مگابایت</translation>
+        <source>%1 MB</source>
+        <translation>%1 مگابایت</translation>
     </message>
     <message>
-      <source>%1 CPU</source>
-      <comment>%1 is 1 for now</comment>
-      <translation>%1 پردازنده</translation>
+        <source>%1 CPU</source>
+        <comment>%1 is 1 for now</comment>
+        <translation>%1 پردازنده</translation>
     </message>
     <message>
-      <source>%1 CPUs</source>
-      <comment>%1 is host cpu count * 2 for now</comment>
-      <translation>%1 پردازنده</translation>
+        <source>%1 CPUs</source>
+        <comment>%1 is host cpu count * 2 for now</comment>
+        <translation>%1 پردازنده</translation>
     </message>
     <message>
-      <source>%1%</source>
-      <translation>%1%</translation>
+        <source>%1%</source>
+        <translation>%1%</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsUSB</name>
     <message>
-      <source>&Add Empty Filter</source>
-      <translation>افزود&ن فیلتر خالی</translation>
+        <source>&Add Empty Filter</source>
+        <translation type="obsolete">افزود&ن فیلتر خالی</translation>
     </message>
     <message>
-      <source>A&dd Filter From Device</source>
-      <translation>افزودن فیلت&ر از دستگاه</translation>
+        <source>A&dd Filter From Device</source>
+        <translation type="obsolete">افزودن فیلت&ر از دستگاه</translation>
     </message>
     <message>
-      <source>&Edit Filter</source>
-      <translation>ویرایش &فیلتر</translation>
+        <source>&Edit Filter</source>
+        <translation type="obsolete">ویرایش &فیلتر</translation>
     </message>
     <message>
-      <source>&Remove Filter</source>
-      <translation>حذ&ف فیلتر</translation>
+        <source>&Remove Filter</source>
+        <translation type="obsolete">حذ&ف فیلتر</translation>
     </message>
     <message>
-      <source>&Move Filter Up</source>
-      <translation>&انتقال فیلتر به بالا</translation>
+        <source>&Move Filter Up</source>
+        <translation type="obsolete">&انتقال فیلتر به بالا</translation>
     </message>
     <message>
-      <source>M&ove Filter Down</source>
-      <translation>&انتقال فیلتر به پایین</translation>
+        <source>M&ove Filter Down</source>
+        <translation type="obsolete">&انتقال فیلتر به پایین</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>یک فیلتر یو اِس بی جدید با همه فیلدهای آغازی تنظیم شده به استرینگ خالی اضافه میکند.توجه کنید که چنین فیلتری با هرگونه دستگاه یو اِس بی ضمیمه شده ای تطبیق پیدا میکند.</translation>
+        <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>
     </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>یک فیلتر یو اِس بی جدید با همه فیلدهای تنظیم شده به مقادیر دستگاه یو اِس بی انتخاب شده ضمیمه شده به رایانه میزبان اضافه میکند.</translation>
+        <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>
     </message>
     <message>
-      <source>Edits the selected USB filter.</source>
-      <translation>ویرایش فیلتر یو اِس بی انتخاب شده.</translation>
+        <source>Edits the selected USB filter.</source>
+        <translation type="obsolete">ویرایش فیلتر یو اِس بی انتخاب شده.</translation>
     </message>
     <message>
-      <source>Removes the selected USB filter.</source>
-      <translation>فیلتر یو اِس بی انتخاب شده را حذف میکند.</translation>
+        <source>Removes the selected USB filter.</source>
+        <translation type="obsolete">فیلتر یو اِس بی انتخاب شده را حذف میکند.</translation>
     </message>
     <message>
-      <source>Moves the selected USB filter up.</source>
-      <translation>فیلتر یو اِس بی انتخاب شده را به بالا انتقال میدهد.</translation>
+        <source>Moves the selected USB filter up.</source>
+        <translation type="obsolete">فیلتر یو اِس بی انتخاب شده را به بالا انتقال میدهد.</translation>
     </message>
     <message>
-      <source>Moves the selected USB filter down.</source>
-      <translation>فیلتر یو اِس بی انتخاب شده را به پایین انتقال میدهد.</translation>
+        <source>Moves the selected USB filter down.</source>
+        <translation type="obsolete">فیلتر یو اِس بی انتخاب شده را به پایین انتقال میدهد.</translation>
     </message>
     <message>
-      <source>New Filter %1</source>
-      <comment>usb</comment>
-      <translation>فیلتر جدید %1</translation>
+        <source>New Filter %1</source>
+        <comment>usb</comment>
+        <translation>فیلتر جدید %1</translation>
     </message>
     <message>
-      <source>When checked, enables the virtual USB controller of this machine.</source>
-      <translation>وقتیکه انتخاب شده،کنترلر یو اِس بی مجازی را برای این ماشین فعال میکند.</translation>
+        <source>When checked, enables the virtual USB controller of this machine.</source>
+        <translation>وقتیکه انتخاب شده،کنترلر یو اِس بی مجازی را برای این ماشین فعال میکند.</translation>
     </message>
     <message>
-      <source>Enable &USB Controller</source>
-      <translation>فعالسازی کنترلر &یو اِس بی</translation>
+        <source>Enable &USB Controller</source>
+        <translation>فعالسازی کنترلر &یو اِس بی</translation>
     </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>وقتیکه انتخاب شده، کنترلر یو اِس بی EHCI این ماشین را فعال میکند. کنترلر یو اِس بی EHCI پشتیبانی از یو اِس بی 2.0 را فراهم میکند.</translation>
+        <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>
     </message>
     <message>
-      <source>Enable USB 2.0 (E&HCI) Controller</source>
-      <translation>فعالسازی کنترلر یو اِس بی 2.0 (E&HCI)</translation>
+        <source>Enable USB 2.0 (E&HCI) Controller</source>
+        <translation type="obsolete">فعالسازی کنترلر یو اِس بی 2.0 (E&HCI)</translation>
     </message>
     <message>
-      <source>USB Device &Filters</source>
-      <translation>فیلترهای دستگاه &یو اِس بی</translation>
+        <source>USB Device &Filters</source>
+        <translation>فیلترهای دستگاه &یو اِس بی</translation>
     </message>
     <message>
-      <source>Lists all USB filters of this machine. The checkbox to the left defines whether the particular filter is enabled or not. Use the context menu or buttons to the right to add or remove USB filters.</source>
-      <translation>همه فیلترهای یو اِس بی این ماشین را لیست میکند.چک باکس سمت راست مشخص میکند فیلتر ویژه فعال یا غیرفعال است.از منوی زمینه یا دکمه ها برای افزودن یا حذف فیلتر یو اِس بی استفاده کنید.</translation>
+        <source>Lists all USB filters of this machine. The checkbox to the left defines whether the particular filter is enabled or not. Use the context menu or buttons to the right to add or remove USB filters.</source>
+        <translation>همه فیلترهای یو اِس بی این ماشین را لیست میکند.چک باکس سمت راست مشخص میکند فیلتر ویژه فعال یا غیرفعال است.از منوی زمینه یا دکمه ها برای افزودن یا حذف فیلتر یو اِس بی استفاده کنید.</translation>
     </message>
     <message>
-      <source>[filter]</source>
-      <translation>[فیلتر]</translation>
+        <source>[filter]</source>
+        <translation>[فیلتر]</translation>
     </message>
     <message>
-      <source><nobr>Vendor ID: %1</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>شناسه فروشنده: %1</nobr></translation>
+        <source><nobr>Vendor ID: %1</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>شناسه فروشنده: %1</nobr></translation>
     </message>
     <message>
-      <source><nobr>Product ID: %2</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>شناسه محصول: %2</nobr></translation>
+        <source><nobr>Product ID: %2</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>شناسه محصول: %2</nobr></translation>
     </message>
     <message>
-      <source><nobr>Revision: %3</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>بازبینی: %3</nobr></translation>
+        <source><nobr>Revision: %3</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>بازبینی: %3</nobr></translation>
     </message>
     <message>
-      <source><nobr>Product: %4</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>محصول: %4</nobr></translation>
+        <source><nobr>Product: %4</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>محصول: %4</nobr></translation>
     </message>
     <message>
-      <source><nobr>Manufacturer: %5</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>سازنده: %5</nobr></translation>
+        <source><nobr>Manufacturer: %5</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>سازنده: %5</nobr></translation>
     </message>
     <message>
-      <source><nobr>Serial No.: %1</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>شماره سریال.: %1</nobr></translation>
+        <source><nobr>Serial No.: %1</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>شماره سریال.: %1</nobr></translation>
     </message>
     <message>
-      <source><nobr>Port: %1</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>پورت: %1</nobr></translation>
+        <source><nobr>Port: %1</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>پورت: %1</nobr></translation>
     </message>
     <message>
-      <source><nobr>State: %1</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>وضعیت: %1</nobr></translation>
+        <source><nobr>State: %1</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>وضعیت: %1</nobr></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. 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>اکنون یو اِس بی 2.0 برای این ماشین فعال شده است. هرچند، این نیاز دارد که <b>%1</b> نصب شده باشد. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود کنید. بعداز این شما قادر به فعال کردن مجدد یو اِس بی 2.0 هستید. آن در این فاصله غیرفعال شده است بجز اینکه شما تغییرات تنظیمات فعلی را لغو کنید.</translation>
+        <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>
     </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>اکنون یو اِس بی 2.0 برای این ماشین فعال شده است. هرچند، این نیاز دارد که <b>%1</b> نصب شده باشد. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود کنید، یا یو اِس بی 2.0 را غیرفعال کنید تا بتوانید آن را اِجرا کنید.</translation>
+        <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>
     </message>
     <message>
-      <source>When chosen, enables the virtual USB OHCI controller of this machine. The USB OHCI controller provides USB 1.0 support.</source>
-      <translation>وقتیکه انتخاب شده، کنترلر یو اِس بی OHCI این ماشین را فعال میکند. کنترلر یو اِس بی OHCI پشتیبانی از یو اِس بی 1.0 را فراهم میکند.</translation>
+        <source>When chosen, enables the virtual USB OHCI controller of this machine. The USB OHCI controller provides USB 1.0 support.</source>
+        <translation>وقتیکه انتخاب شده، کنترلر یو اِس بی OHCI این ماشین را فعال میکند. کنترلر یو اِس بی OHCI پشتیبانی از یو اِس بی 1.0 را فراهم میکند.</translation>
     </message>
     <message>
-      <source>USB &1.1 (OHCI) Controller</source>
-      <translation>USB &1.1 (OHCI) کنترلر</translation>
+        <source>USB &1.1 (OHCI) Controller</source>
+        <translation>USB &1.1 (OHCI) کنترلر</translation>
     </message>
     <message>
-      <source>When chosen, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source>
-      <translation>وقتیکه انتخاب شده، کنترلر یو اِس بی EHCI این ماشین را فعال میکند. کنترلر یو اِس بی EHCI پشتیبانی از یو اِس بی 2.0 را فراهم میکند.</translation>
+        <source>When chosen, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source>
+        <translation>وقتیکه انتخاب شده، کنترلر یو اِس بی EHCI این ماشین را فعال میکند. کنترلر یو اِس بی EHCI پشتیبانی از یو اِس بی 2.0 را فراهم میکند.</translation>
     </message>
     <message>
-      <source>USB &2.0 (EHCI) Controller</source>
-      <translation>USB &2.0 (EHCI) کنترلر</translation>
+        <source>USB &2.0 (EHCI) Controller</source>
+        <translation>USB &2.0 (EHCI) کنترلر</translation>
     </message>
     <message>
-      <source>When chosen, enables the virtual USB xHCI controller of this machine. The USB xHCI controller provides USB 3.0 support.</source>
-      <translation>وقتیکه انتخاب شده، کنترلر یو اِس بی xHCI این ماشین را فعال میکند. کنترلر یو اِس بی xHCI پشتیبانی از یو اِس بی 3.0 را فراهم میکند.</translation>
+        <source>When chosen, enables the virtual USB xHCI controller of this machine. The USB xHCI controller provides USB 3.0 support.</source>
+        <translation>وقتیکه انتخاب شده، کنترلر یو اِس بی xHCI این ماشین را فعال میکند. کنترلر یو اِس بی xHCI پشتیبانی از یو اِس بی 3.0 را فراهم میکند.</translation>
     </message>
     <message>
-      <source>USB &3.0 (xHCI) Controller</source>
-      <translation>USB &3.0 (xHCI) کنترلر</translation>
+        <source>USB &3.0 (xHCI) Controller</source>
+        <translation>USB &3.0 (xHCI) کنترلر</translation>
     </message>
     <message>
-      <source>USB 2.0/3.0 is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site or disable USB 2.0/3.0 to be able to start the machine.</source>
-      <translation>اکنون یو اِس بی 2.0/3.0 برای این ماشین فعال شده است. هرچند، این نیاز دارد که <b>%1</b> نصب شده باشد. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود کنید، یا یو اِس بی 2.0/3.0 را غیرفعال کنید تا بتوانید آن را اِجرا کنید.</translation>
+        <source>USB 2.0/3.0 is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site or disable USB 2.0/3.0 to be able to start the machine.</source>
+        <translation>اکنون یو اِس بی 2.0/3.0 برای این ماشین فعال شده است. هرچند، این نیاز دارد که <b>%1</b> نصب شده باشد. لطفا بسته افزونه را از سایت ویرچوال باکس دانلود کنید، یا یو اِس بی 2.0/3.0 را غیرفعال کنید تا بتوانید آن را اِجرا کنید.</translation>
     </message>
     <message>
-      <source>Add Empty Filter</source>
-      <translation>افزودن فیلتر خالی</translation>
+        <source>Add Empty Filter</source>
+        <translation>افزودن فیلتر خالی</translation>
     </message>
     <message>
-      <source>Add Filter From Device</source>
-      <translation>افزودن فیلتر از دستگاه</translation>
+        <source>Add Filter From Device</source>
+        <translation>افزودن فیلتر از دستگاه</translation>
     </message>
     <message>
-      <source>Edit Filter</source>
-      <translation>ویرایش فیلتر</translation>
+        <source>Edit Filter</source>
+        <translation>ویرایش فیلتر</translation>
     </message>
     <message>
-      <source>Remove Filter</source>
-      <translation>حذف فیلتر</translation>
+        <source>Remove Filter</source>
+        <translation>حذف فیلتر</translation>
     </message>
     <message>
-      <source>Move Filter Up</source>
-      <translation>انتقال فیلتر به بالا</translation>
+        <source>Move Filter Up</source>
+        <translation>انتقال فیلتر به بالا</translation>
     </message>
     <message>
-      <source>Move Filter Down</source>
-      <translation>انتقال فیلتر به پایین</translation>
+        <source>Move Filter Down</source>
+        <translation>انتقال فیلتر به پایین</translation>
     </message>
     <message>
-      <source>Adds new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source>
-      <translation>یک فیلتر یو اِس بی جدید با همه فیلدهای آغازی تنظیم شده با استرینگ خالی اضافه میکند.توجه کنید که چنین فیلتری با هر دستگاه یو اِس بی ضمیمه شده ای تطبیق پیدا میکند.</translation>
+        <source>Adds new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source>
+        <translation>یک فیلتر یو اِس بی جدید با همه فیلدهای آغازی تنظیم شده با استرینگ خالی اضافه میکند.توجه کنید که چنین فیلتری با هر دستگاه یو اِس بی ضمیمه شده ای تطبیق پیدا میکند.</translation>
     </message>
     <message>
-      <source>Adds new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source>
-      <translation>فیلتر یو اِس بی جدید با همه فیلدهای تنظیم شده به مقادیر دستگاه یو اِس بی انتخاب شده ضمیمه شده به رایانه میزبان اضافه میکند.</translation>
+        <source>Adds new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source>
+        <translation>فیلتر یو اِس بی جدید با همه فیلدهای تنظیم شده به مقادیر دستگاه یو اِس بی انتخاب شده ضمیمه شده به رایانه میزبان اضافه میکند.</translation>
     </message>
     <message>
-      <source>Edits selected USB filter.</source>
-      <translation>ویرایش فیلتر یو اِس بی انتخاب شده</translation>
+        <source>Edits selected USB filter.</source>
+        <translation>ویرایش فیلتر یو اِس بی انتخاب شده</translation>
     </message>
     <message>
-      <source>Removes selected USB filter.</source>
-      <translation>حذف فیلتر یو اِس بی انتخاب شده</translation>
+        <source>Removes selected USB filter.</source>
+        <translation>حذف فیلتر یو اِس بی انتخاب شده</translation>
     </message>
     <message>
-      <source>Moves selected USB filter up.</source>
-      <translation>انتقال فیلتر یو اِس بی انتخاب شده به بالا</translation>
+        <source>Moves selected USB filter up.</source>
+        <translation>انتقال فیلتر یو اِس بی انتخاب شده به بالا</translation>
     </message>
     <message>
-      <source>Moves selected USB filter down.</source>
-      <translation>انتقال فیلتر یو اِس بی انتخاب شده به پایین</translation>
+        <source>Moves selected USB filter down.</source>
+        <translation>انتقال فیلتر یو اِس بی انتخاب شده به پایین</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineSettingsUSBFilterDetails</name>
     <message>
-      <source>Any</source>
-      <comment>remote</comment>
-      <translation>هر</translation>
+        <source>Any</source>
+        <comment>remote</comment>
+        <translation>هر</translation>
     </message>
     <message>
-      <source>Yes</source>
-      <comment>remote</comment>
-      <translation>بله</translation>
+        <source>Yes</source>
+        <comment>remote</comment>
+        <translation>بله</translation>
     </message>
     <message>
-      <source>No</source>
-      <comment>remote</comment>
-      <translation>خیر</translation>
+        <source>No</source>
+        <comment>remote</comment>
+        <translation>خیر</translation>
     </message>
     <message>
-      <source>&Name:</source>
-      <translation>نا&م:</translation>
+        <source>&Name:</source>
+        <translation>نا&م:</translation>
     </message>
     <message>
-      <source>Holds the filter name.</source>
-      <translation>نام فیلتر را نمایش می دهد.</translation>
+        <source>Holds the filter name.</source>
+        <translation>نام فیلتر را نمایش می دهد.</translation>
     </message>
     <message>
-      <source>&Vendor ID:</source>
-      <translation>&شناسه فروشنده:</translation>
+        <source>&Vendor ID:</source>
+        <translation>&شناسه فروشنده:</translation>
     </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>فیلتر شناسه فروشنده را تعریف میکند. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>XXXX</tt> جایی که <tt>X</tt> یک رقم مبنای شانزده هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <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>
     </message>
     <message>
-      <source>&Product ID:</source>
-      <translation>شناسه &محصول:</translation>
+        <source>&Product ID:</source>
+        <translation>شناسه &محصول:</translation>
     </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>فیلتر شناسه محصول را تعریف میکند. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>XXXX</tt> جایی که <tt>X</tt> یک رقم مبنای شانزده است. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <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>
     </message>
     <message>
-      <source>&Revision:</source>
-      <translation>&بازبینی:</translation>
+        <source>&Revision:</source>
+        <translation>&بازبینی:</translation>
     </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>فیلتر شماره بازبینی را تعیین میکند. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>IIFF</tt> جایی که <tt>I</tt> یک رقم دهدهی بخش صحیح و <tt>F</tt> یک رقم دهدهی بخش کسری هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <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>
     </message>
     <message>
-      <source>&Manufacturer:</source>
-      <translation>&سازنده:</translation>
+        <source>&Manufacturer:</source>
+        <translation>&سازنده:</translation>
     </message>
     <message>
-      <source>Defines the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</source>
-      <translation>فیلتر سازنده را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <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>
     </message>
     <message>
-      <source>Pro&duct:</source>
-      <translation>مح&صول:</translation>
+        <source>Pro&duct:</source>
+        <translation>مح&صول:</translation>
     </message>
     <message>
-      <source>Defines the product name filter as an <i>exact match</i> string. An empty string will match any value.</source>
-      <translation>فیلتر نام محصول را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <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>
     </message>
     <message>
-      <source>&Serial No.:</source>
-      <translation>&شماره سریال:</translation>
+        <source>&Serial No.:</source>
+        <translation>&شماره سریال:</translation>
     </message>
     <message>
-      <source>Defines the serial number filter as an <i>exact match</i> string. An empty string will match any value.</source>
-      <translation>فیلتر شماره سریال را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <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>
     </message>
     <message>
-      <source>Por&t:</source>
-      <translation>پور&ت:</translation>
+        <source>Por&t:</source>
+        <translation>پور&ت:</translation>
     </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>فیلتر پورت یو اِس بی میزبان را بعنوان یک استرینگ <i>تطبیق دقیق</i> تعریف میکند. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <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>
     </message>
     <message>
-      <source>R&emote:</source>
-      <translation>ریمو&ت:</translation>
+        <source>R&emote:</source>
+        <translation>ریمو&ت:</translation>
     </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>هرگاه این فیلتر اعمال شده به دستگاه یو اِس بی به رایانه میزبان محلی ضمیمه شده است (<i>خیر</i>)، به یک کلاینت رایانه VRDP (<i>بله</i>)، یا هر دو (<i>هر</i>) را تعریف میکند.</translation>
+        <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>
     </message>
     <message>
-      <source>&Action:</source>
-      <translation>اق&دام:</translation>
+        <source>&Action:</source>
+        <translation type="obsolete">اق&دام:</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>یک اقدام اجرا شده رایانه میزبان را وقتیکه یک دستگاه مطابق ضمیمه شده است را تعریف میکند: سپرده شده به سیستم عامل میزبان (<i>چشمپوشی</i>) یا قاپیدن آن برای استفاده در زمان دیگر با ماشین مجازی (<i>نگه داشتن</i>).</translation>
+        <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>
     </message>
     <message>
-      <source>USB Filter Details</source>
-      <translation>جزئیات فیلتر یو اِس بی</translation>
+        <source>USB Filter Details</source>
+        <translation>جزئیات فیلتر یو اِس بی</translation>
     </message>
     <message>
-      <source>Holds the vendor ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
-      <translation>فیلتر شناسه فروشنده را نگه می دارد. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>XXXX</tt> جایی که <tt>X</tt> یک رقم مبنای شانزده هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <source>Holds the vendor ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
+        <translation>فیلتر شناسه فروشنده را نگه می دارد. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>XXXX</tt> جایی که <tt>X</tt> یک رقم مبنای شانزده هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
-      <source>Holds the product ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
-      <translation>فیلتر شناسه محصول را نگه می دارد. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>XXXX</tt> جایی که <tt>X</tt> یک رقم مبنای شانزده هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <source>Holds the product ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
+        <translation>فیلتر شناسه محصول را نگه می دارد. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>XXXX</tt> جایی که <tt>X</tt> یک رقم مبنای شانزده هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
-      <source>Holds the revision number filter. The <i>exact match</i> string format is <tt>IIFF</tt> where <tt>I</tt> is a decimal digit of the integer part and <tt>F</tt> is a decimal digit of the fractional part. An empty string will match any value.</source>
-      <translation>فیلتر شماره بازبینی را نگه می دارد. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>IIFF</tt> جایی که <tt>I</tt> یک رقم دهدهی بخش صحیح و <tt>F</tt> یک رقم دهدهی بخش کسری هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <source>Holds the revision number filter. The <i>exact match</i> string format is <tt>IIFF</tt> where <tt>I</tt> is a decimal digit of the integer part and <tt>F</tt> is a decimal digit of the fractional part. An empty string will match any value.</source>
+        <translation>فیلتر شماره بازبینی را نگه می دارد. فرمت استرینگ <i>تطبیق دقیق</i> هست <tt>IIFF</tt> جایی که <tt>I</tt> یک رقم دهدهی بخش صحیح و <tt>F</tt> یک رقم دهدهی بخش کسری هست. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
-      <source>Holds the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</source>
-      <translation>فیلتر سازنده را بعنوان یک استرینگ <i>تطبیق دقیق</i> نگه می دارد. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <source>Holds the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</source>
+        <translation>فیلتر سازنده را بعنوان یک استرینگ <i>تطبیق دقیق</i> نگه می دارد. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
-      <source>Holds the product name filter as an <i>exact match</i> string. An empty string will match any value.</source>
-      <translation>فیلتر نام محصول را بعنوان یک استرینگ <i>تطبیق دقیق</i> نگه می دارد. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <source>Holds the product name filter as an <i>exact match</i> string. An empty string will match any value.</source>
+        <translation>فیلتر نام محصول را بعنوان یک استرینگ <i>تطبیق دقیق</i> نگه می دارد. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
-      <source>Holds the serial number filter as an <i>exact match</i> string. An empty string will match any value.</source>
-      <translation>فیلتر شماره سریال را بعنوان یک استرینگ <i>تطبیق دقیق</i> نگه می دارد. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <source>Holds the serial number filter as an <i>exact match</i> string. An empty string will match any value.</source>
+        <translation>فیلتر شماره سریال را بعنوان یک استرینگ <i>تطبیق دقیق</i> نگه می دارد. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
-      <source>Holds the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source>
-      <translation>فیلتر پورت یو اِس بی میزبان را بعنوان یک استرینگ <i>تطبیق دقیق</i> نگه می دارد. یک استرینگ خالی مطابق با هر مقداری است.</translation>
+        <source>Holds the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source>
+        <translation>فیلتر پورت یو اِس بی میزبان را بعنوان یک استرینگ <i>تطبیق دقیق</i> نگه می دارد. یک استرینگ خالی مطابق با هر مقداری است.</translation>
     </message>
     <message>
-      <source>Holds whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source>
-      <translation>هرگاه این فیلتر اعمال شده به دستگاه یو اِس بی به رایانه میزبان محلی ضمیمه شده است (<i>خیر</i>)، به یک کلاینت رایانه VRDP (<i>بله</i>)، یا هر دو (<i>هر</i>) را نگه میدارد.</translation>
+        <source>Holds whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source>
+        <translation>هرگاه این فیلتر اعمال شده به دستگاه یو اِس بی به رایانه میزبان محلی ضمیمه شده است (<i>خیر</i>)، به یک کلاینت رایانه VRDP (<i>بله</i>)، یا هر دو (<i>هر</i>) را نگه میدارد.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineWindow</name>
     <message>
-      <source> EXPERIMENTAL build %1r%2 - %3</source>
-      <translation> نسخه آزمایشی %1r%2 - %3</translation>
+        <source> EXPERIMENTAL build %1r%2 - %3</source>
+        <translation> نسخه آزمایشی %1r%2 - %3</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMachineWindowNormal</name>
     <message>
-      <source>Shows the currently assigned Host key.<br>This key, when pressed alone, toggles the keyboard and mouse capture state. It can also be used in combination with other keys to quickly perform actions from the main menu.</source>
-      <translation>کلید میزبانی که اکنون اختصاص داده شده را نمایش میدهد.<br>این کلید، وقتیکه این کلید فقط فشرده شود، ضامن تغییر وضعیت حالت ضبط ماوس و صفحه کلید میشود. آن میتواند بطور ترکیبی با سایر کلیدها اقدامات را از منوی اصلی فورا اِجرا کند.</translation>
+        <source>Shows the currently assigned Host key.<br>This key, when pressed alone, toggles the keyboard and mouse capture state. It can also be used in combination with other keys to quickly perform actions from the main menu.</source>
+        <translation>کلید میزبانی که اکنون اختصاص داده شده را نمایش میدهد.<br>این کلید، وقتیکه این کلید فقط فشرده شود، ضامن تغییر وضعیت حالت ضبط ماوس و صفحه کلید میشود. آن میتواند بطور ترکیبی با سایر کلیدها اقدامات را از منوی اصلی فورا اِجرا کند.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMediumManager</name>
     <message>
-      <source>&Hard drives</source>
-      <translation>درایو س&خت</translation>
+        <source>&Hard drives</source>
+        <translation type="obsolete">درایو س&خت</translation>
     </message>
     <message>
-      <source>&Optical disks</source>
-      <translation>دیسک نو&ری</translation>
+        <source>&Optical disks</source>
+        <translation>دیسک نو&ری</translation>
     </message>
     <message>
-      <source>&Floppy disks</source>
-      <translation>دیسک &فلاپی</translation>
+        <source>&Floppy disks</source>
+        <translation>دیسک &فلاپی</translation>
     </message>
     <message>
-      <source>&Select</source>
-      <translation>&انتخاب</translation>
+        <source>&Select</source>
+        <translation type="obsolete">&انتخاب</translation>
     </message>
     <message>
-      <source>C&lose</source>
-      <translation>&بستن</translation>
+        <source>C&lose</source>
+        <translation type="obsolete">&بستن</translation>
     </message>
     <message>
-      <source>Removing medium...</source>
-      <translation>حذف رسانه&...</translation>
+        <source>Removing medium...</source>
+        <translation>حذف رسانه&...</translation>
     </message>
     <message>
-      <source>&Hard disks</source>
-      <translation>دیسک سخت&</translation>
+        <source>&Hard disks</source>
+        <translation>دیسک سخت&</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMediumTypeChangeDialog</name>
     <message>
-      <source>Modify medium attributes</source>
-      <translation>ویرایش صفات رسانه</translation>
+        <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>
+        <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>Choose mode:</source>
+        <translation>نوع رسانه را انتخاب کنید:</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMenuBarEditorWidget</name>
     <message>
-      <source>Virtual Screen Resize</source>
-      <translation>تغییر اندازه نمایشگر مجازی</translation>
+        <source>Virtual Screen Resize</source>
+        <translation>تغییر اندازه نمایشگر مجازی</translation>
     </message>
     <message>
-      <source>Virtual Screen Mapping</source>
-      <translation>مسیردهی نمایشگذ مجازی</translation>
+        <source>Virtual Screen Mapping</source>
+        <translation>مسیردهی نمایشگذ مجازی</translation>
     </message>
     <message>
-      <source>Switch</source>
-      <translation>تعویض</translation>
+        <source>Switch</source>
+        <translation>تعویض</translation>
     </message>
     <message>
-      <source>Close</source>
-      <translation>بستن</translation>
+        <source>Close</source>
+        <translation>بستن</translation>
     </message>
     <message>
-      <source>Enable Menu Bar</source>
-      <translation>فعالسازی نوار منو</translation>
+        <source>Enable Menu Bar</source>
+        <translation>فعالسازی نوار منو</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMessageCenter</name>
     <message>
-      <source>VirtualBox - Information</source>
-      <comment>msg box title</comment>
-      <translation>ویرچوال باکس - اطلاعات</translation>
+        <source>VirtualBox - Information</source>
+        <comment>msg box title</comment>
+        <translation>ویرچوال باکس - اطلاعات</translation>
     </message>
     <message>
-      <source>VirtualBox - Question</source>
-      <comment>msg box title</comment>
-      <translation>ویرچوال باکس - سوال</translation>
+        <source>VirtualBox - Question</source>
+        <comment>msg box title</comment>
+        <translation>ویرچوال باکس - سوال</translation>
     </message>
     <message>
-      <source>VirtualBox - Warning</source>
-      <comment>msg box title</comment>
-      <translation>ویرچوال باکس - هشدار</translation>
+        <source>VirtualBox - Warning</source>
+        <comment>msg box title</comment>
+        <translation>ویرچوال باکس - هشدار</translation>
     </message>
     <message>
-      <source>VirtualBox - Error</source>
-      <comment>msg box title</comment>
-      <translation>ویرچوال باکس - خطا</translation>
+        <source>VirtualBox - Error</source>
+        <comment>msg box title</comment>
+        <translation>ویرچوال باکس - خطا</translation>
     </message>
     <message>
-      <source>VirtualBox - Critical Error</source>
-      <comment>msg box title</comment>
-      <translation>ويرچوال باکس - خطای خطرناک</translation>
+        <source>VirtualBox - Critical Error</source>
+        <comment>msg box title</comment>
+        <translation>ويرچوال باکس - خطای خطرناک</translation>
     </message>
     <message>
-      <source>Do not show this message again</source>
-      <comment>msg box flag</comment>
-      <translation>این پیام را دیگر نشان نده</translation>
+        <source>Do not show this message again</source>
+        <comment>msg box flag</comment>
+        <translation>این پیام را دیگر نشان نده</translation>
     </message>
     <message>
-      <source>Failed to open <tt>%1</tt>. Make sure your desktop environment can properly handle URLs of this type.</source>
-      <translation>موفق به بازکردن <tt>%1</tt> نشد. مطمئن شوید محیط دسکتاپ شما میتواند بدرستی این نوع از آدرس ها را باز کند.</translation>
+        <source>Failed to open <tt>%1</tt>. Make sure your desktop environment can properly handle URLs of this type.</source>
+        <translation>موفق به بازکردن <tt>%1</tt> نشد. مطمئن شوید محیط دسکتاپ شما میتواند بدرستی این نوع از آدرس ها را باز کند.</translation>
     </message>
     <message>
-      <source><p>Failed to initialize COM or to find the VirtualBox COM server. Most likely, the VirtualBox server is not running or failed to start.</p><p>The application will now terminate.</p></source>
-      <translation><p>موفق به مقداردهی کام یا یافتن سرور کام ویرچوال باکس نشد. احتمالا، سرور ویرچوال باکس در اِجرا نیست یا موفق به شروع نشده است.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
+        <source><p>Failed to initialize COM or to find the VirtualBox COM server. Most likely, the VirtualBox server is not running or failed to start.</p><p>The application will now terminate.</p></source>
+        <translation><p>موفق به مقداردهی کام یا یافتن سرور کام ویرچوال باکس نشد. احتمالا، سرور ویرچوال باکس در اِجرا نیست یا موفق به شروع نشده است.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
     </message>
     <message>
-      <source><p>Failed to create the VirtualBox COM object.</p><p>The application will now terminate.</p></source>
-      <translation><p>موفق به ایجاد شی کام ویرچوال باکس نشد.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
+        <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>
     </message>
     <message>
-      <source>Failed to set global VirtualBox properties.</source>
-      <translation>موفق به تنظیم مشخصات سراسری ویرچوال باکس نشد.</translation>
+        <source>Failed to set global VirtualBox properties.</source>
+        <translation>موفق به تنظیم مشخصات سراسری ویرچوال باکس نشد.</translation>
     </message>
     <message>
-      <source>Failed to access the USB subsystem.</source>
-      <translation>موفق به دستررسی به یو اِس بی سیستم فرعی نشد.</translation>
+        <source>Failed to access the USB subsystem.</source>
+        <translation>موفق به دستررسی به یو اِس بی سیستم فرعی نشد.</translation>
     </message>
     <message>
-      <source>Failed to create a new virtual machine.</source>
-      <translation>موفق به ایجاد یک ماشین مجازی جدید نشد.</translation>
+        <source>Failed to create a new virtual machine.</source>
+        <translation>موفق به ایجاد یک ماشین مجازی جدید نشد.</translation>
     </message>
     <message>
-      <source>Failed to create a new virtual machine <b>%1</b>.</source>
-      <translation>موفق به ایجاد ماشین مجازی جدید <b>%1</b> نشد.</translation>
+        <source>Failed to create a new virtual machine <b>%1</b>.</source>
+        <translation type="obsolete">موفق به ایجاد ماشین مجازی جدید <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to apply the settings to the virtual machine <b>%1</b>.</source>
-      <translation>موفق به اِعمال تغییرات در ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to apply the settings to the virtual machine <b>%1</b>.</source>
+        <translation type="obsolete">موفق به اِعمال تغییرات در ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to start the virtual machine <b>%1</b>.</source>
-      <translation>موفق به شروع ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to start the virtual machine <b>%1</b>.</source>
+        <translation>موفق به شروع ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to pause the execution of the virtual machine <b>%1</b>.</source>
-      <translation>موفق به وقفه اِجرای ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to pause the execution of the virtual machine <b>%1</b>.</source>
+        <translation>موفق به وقفه اِجرای ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to resume the execution of the virtual machine <b>%1</b>.</source>
-      <translation>موفق به از سرگیری اِجرای ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to resume the execution of the virtual machine <b>%1</b>.</source>
+        <translation>موفق به از سرگیری اِجرای ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to save the state of the virtual machine <b>%1</b>.</source>
-      <translation>موفق به ذخیره وضعیت ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to save the state of the virtual machine <b>%1</b>.</source>
+        <translation>موفق به ذخیره وضعیت ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to create a snapshot of the virtual machine <b>%1</b>.</source>
-      <translation>موفق به ایجاد ضبط وضعیت ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to create a snapshot of the virtual machine <b>%1</b>.</source>
+        <translation>موفق به ایجاد ضبط وضعیت ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to stop the virtual machine <b>%1</b>.</source>
-      <translation>موفق به توقف ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to stop the virtual machine <b>%1</b>.</source>
+        <translation>موفق به توقف ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to remove the virtual machine <b>%1</b>.</source>
-      <translation>موفق به حذف ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to remove the virtual machine <b>%1</b>.</source>
+        <translation>موفق به حذف ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to discard the saved state of the virtual machine <b>%1</b>.</source>
-      <translation>موفق به لغو وضعیت ذخیره شده ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to discard the saved state of the virtual machine <b>%1</b>.</source>
+        <translation>موفق به لغو وضعیت ذخیره شده ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>There is no virtual machine named <b>%1</b>.</source>
-      <translation>ماشین مجازی با نام <b>%1</b> وجود ندارد.</translation>
+        <source>There is no virtual machine named <b>%1</b>.</source>
+        <translation>ماشین مجازی با نام <b>%1</b> وجود ندارد.</translation>
     </message>
     <message>
-      <source>Failed to create a new session.</source>
-      <translation>موفق به ایجاد جلسه جدید نشد.</translation>
+        <source>Failed to create a new session.</source>
+        <translation>موفق به ایجاد جلسه جدید نشد.</translation>
     </message>
     <message>
-      <source>Failed to open a session for the virtual machine <b>%1</b>.</source>
-      <translation>موفق به بازکردن جلسه برای ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to open a session for the virtual machine <b>%1</b>.</source>
+        <translation>موفق به بازکردن جلسه برای ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to remove the host network interface <b>%1</b>.</source>
-      <translation>موفق به حذف رابط شبکه میزبان <b>%1</b> نشد.</translation>
+        <source>Failed to remove the host network interface <b>%1</b>.</source>
+        <translation>موفق به حذف رابط شبکه میزبان <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>.</source>
-      <translation>موفق به ضمیمه دستگاه یو اِس بی <b>%1</b> به ماشین مجازی <b>%2</b> نشد.</translation>
+        <source>Failed to attach the USB device <b>%1</b> to the virtual machine <b>%2</b>.</source>
+        <translation>موفق به ضمیمه دستگاه یو اِس بی <b>%1</b> به ماشین مجازی <b>%2</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>.</source>
-      <translation>موفق به جداکردن دستگاه یو اِس بی <b>%1</b> از ماشین مجازی <b>%2</b> نشد.</translation>
+        <source>Failed to detach the USB device <b>%1</b> from the virtual machine <b>%2</b>.</source>
+        <translation>موفق به جداکردن دستگاه یو اِس بی <b>%1</b> از ماشین مجازی <b>%2</b> نشد.</translation>
     </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>موفق به ایجاد پوشه اشتراکی <b>%1</b> (اشاره به <nobr><b>%2</b></nobr>) برای ماشین مجازی <b>%3</b> نشد.</translation>
+        <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>موفق به ایجاد پوشه اشتراکی <b>%1</b> (اشاره به <nobr><b>%2</b></nobr>) برای ماشین مجازی <b>%3</b> نشد.</translation>
     </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>موفق به حذف پوشه اشتراکی <b>%1</b> (اشاره به <nobr><b>%2</b></nobr>) از ماشین مجازی <b>%3</b> نشد.</translation>
+        <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>
     </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>
-      <translation><p>ماشین مجازی گزارش داده که سیستم عامل مهمان از <b>یکپارچگی نشانگر ماوس</b> در حالت ویدیو فعلی پشتیبانی نمیکند. بمنظور استفاده از ماوس داخل سیستم عامل مهمان شما (با کلیک روی صفحه ماشین مجازی یا فشار کلید میزبان) نیازدارید که ماوس را ضبط کنید.</p></translation>
+        <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>
+        <translation><p>ماشین مجازی گزارش داده که سیستم عامل مهمان از <b>یکپارچگی نشانگر ماوس</b> در حالت ویدیو فعلی پشتیبانی نمیکند. بمنظور استفاده از ماوس داخل سیستم عامل مهمان شما (با کلیک روی صفحه ماشین مجازی یا فشار کلید میزبان) نیازدارید که ماوس را ضبط کنید.</p></translation>
     </message>
     <message>
-      <source><p>The Virtual Machine is currently in the <b>Paused</b> state and not able to see any keyboard or mouse input. If you want to continue to work inside the VM, you need to resume it by selecting the corresponding action from the menu bar.</p></source>
-      <translation><p>ماشین مجازی اکنون در وضعیت <b>وقفه شده است</b> هست وقادر به دیدن هیچگونه ورودی ماوس و صفحه کلید نیست. اگر میخواهید کار را داخل ماشین مجازی ادامه دهید، شما باید آن را با انتخاب اقدام مناسب از نوار منو ادامه دهید.</p></translation>
+        <source><p>The Virtual Machine is currently in the <b>Paused</b> state and not able to see any keyboard or mouse input. If you want to continue to work inside the VM, you need to resume it by selecting the corresponding action from the menu bar.</p></source>
+        <translation><p>ماشین مجازی اکنون در وضعیت <b>وقفه شده است</b> هست وقادر به دیدن هیچگونه ورودی ماوس و صفحه کلید نیست. اگر میخواهید کار را داخل ماشین مجازی ادامه دهید، شما باید آن را با انتخاب اقدام مناسب از نوار منو ادامه دهید.</p></translation>
     </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><p>به علت محدودیت های محلی قادر به اِجرای ویرچوال باکس در حالت <i>گزینشگر مجازی</i> نیست.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
+        <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>
     </message>
     <message>
-      <source><nobr>Fatal Error</nobr></source>
-      <comment>runtime error info</comment>
-      <translation><nobr>خطای مخرب</nobr></translation>
+        <source><nobr>Fatal Error</nobr></source>
+        <comment>runtime error info</comment>
+        <translation><nobr>خطای مخرب</nobr></translation>
     </message>
     <message>
-      <source><nobr>Non-Fatal Error</nobr></source>
-      <comment>runtime error info</comment>
-      <translation><nobr>خطای غیر مخرب</nobr></translation>
+        <source><nobr>Non-Fatal Error</nobr></source>
+        <comment>runtime error info</comment>
+        <translation><nobr>خطای غیر مخرب</nobr></translation>
     </message>
     <message>
-      <source><nobr>Warning</nobr></source>
-      <comment>runtime error info</comment>
-      <translation><nobr>هشدار</nobr></translation>
+        <source><nobr>Warning</nobr></source>
+        <comment>runtime error info</comment>
+        <translation><nobr>هشدار</nobr></translation>
     </message>
     <message>
-      <source><nobr>Error ID: </nobr></source>
-      <comment>runtime error info</comment>
-      <translation><nobr>شناسه خطا: </nobr></translation>
+        <source><nobr>Error ID: </nobr></source>
+        <comment>runtime error info</comment>
+        <translation><nobr>شناسه خطا: </nobr></translation>
     </message>
     <message>
-      <source>Severity: </source>
-      <comment>runtime error info</comment>
-      <translation>شدت: </translation>
+        <source>Severity: </source>
+        <comment>runtime error info</comment>
+        <translation>شدت: </translation>
     </message>
     <message>
-      <source><p>A fatal error has occurred during virtual machine execution! The virtual machine will be powered off. Please copy the following error message using the clipboard to help diagnose the problem:</p></source>
-      <translation><p>یک خطای مخرب حین اِجرای ماشین مجازی رخ داده است! ماشین مجازی خاموش و قطع برق خواهد شد. لطفا پیام خطای زیر را توسط کلیپ برد برای تشخیص مشکل کپی کنید:</p></translation>
+        <source><p>A fatal error has occurred during virtual machine execution! The virtual machine will be powered off. Please copy the following error message using the clipboard to help diagnose the problem:</p></source>
+        <translation><p>یک خطای مخرب حین اِجرای ماشین مجازی رخ داده است! ماشین مجازی خاموش و قطع برق خواهد شد. لطفا پیام خطای زیر را توسط کلیپ برد برای تشخیص مشکل کپی کنید:</p></translation>
     </message>
     <message>
-      <source><p>An error has occurred during virtual machine execution! The error details are shown below. You may try to correct the error and resume the virtual machine execution.</p></source>
-      <translation><p>یک خطا حین اِجرای ماشین مجازی رخ داده است! خزئیات خطا در زیر نشان داده شده است. شاید بتوانید خطا را تصحیخ و اِجرای ماشین مجازی را ادامه دهید.</p></translation>
+        <source><p>An error has occurred during virtual machine execution! The error details are shown below. You may try to correct the error and resume the virtual machine execution.</p></source>
+        <translation><p>یک خطا حین اِجرای ماشین مجازی رخ داده است! خزئیات خطا در زیر نشان داده شده است. شاید بتوانید خطا را تصحیخ و اِجرای ماشین مجازی را ادامه دهید.</p></translation>
     </message>
     <message>
-      <source><p>The virtual machine execution may run into an error condition as described below. We suggest that you take an appropriate action to avert the error.</p></source>
-      <translation><p>ماشین مجازی ممکن است در وضعیت خطا طوریکه در زیر توصیف شده اِجرا شود. ما پیشنهاد میکنیم کهشما اقدام مقتضی را برای رفع خطا انجام دهید.</p></translation>
+        <source><p>The virtual machine execution may run into an error condition as described below. We suggest that you take an appropriate action to avert the error.</p></source>
+        <translation><p>ماشین مجازی ممکن است در وضعیت خطا طوریکه در زیر توصیف شده اِجرا شود. ما پیشنهاد میکنیم کهشما اقدام مقتضی را برای رفع خطا انجام دهید.</p></translation>
     </message>
     <message>
-      <source>Result&nbsp;Code: </source>
-      <comment>error info</comment>
-      <translation>کد&nbsp;نتیجه: </translation>
+        <source>Result&nbsp;Code: </source>
+        <comment>error info</comment>
+        <translation>کد&nbsp;نتیجه: </translation>
     </message>
     <message>
-      <source>Component: </source>
-      <comment>error info</comment>
-      <translation>جزء: </translation>
+        <source>Component: </source>
+        <comment>error info</comment>
+        <translation>جزء: </translation>
     </message>
     <message>
-      <source>Interface: </source>
-      <comment>error info</comment>
-      <translation>رابط: </translation>
+        <source>Interface: </source>
+        <comment>error info</comment>
+        <translation>رابط: </translation>
     </message>
     <message>
-      <source>Callee: </source>
-      <comment>error info</comment>
-      <translation>Callee: </translation>
+        <source>Callee: </source>
+        <comment>error info</comment>
+        <translation>Callee: </translation>
     </message>
     <message>
-      <source>Callee&nbsp;RC: </source>
-      <comment>error info</comment>
-      <translation>Callee&nbsp;RC: </translation>
+        <source>Callee&nbsp;RC: </source>
+        <comment>error info</comment>
+        <translation>Callee&nbsp;RC: </translation>
     </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><p>قادر به یافتن فایل زبان برای زبان <b>%1</b> در دایرکتوری زیر نیست:<b><nobr>%2</nobr></b> </p><p> زبان موقتا به زبان پیش فرض سیستم ریست خواهد شد. لطفا به پنجره <b>اولویت ها</b> بروید که آن را میتوان از منوی <b>فایل</b> در پنجره اصلی برنامه یافت، و یکی از زبان های موجود در صفحه <b>زبان</b> را انتخاب کنید.</p></translation>
+        <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>
     </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><p>قادر به بارگیری فایل زبان <b><nobr>%1</nobr></b> نیست. <p>زبان موقتا به زبان توکار برنامه یعنی انگلیسی ریست میشود. لطفا به پنجره <b>اولویت ها</b> بروید که میتوانید آن را از منوی <b>فایل</b> از پنجره اصلی برنامه باز کنید، و یکی از زبان های موجود را از صفحه <b>زبان</b> انتخاب کنید.</p></translation>
+        <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>
     </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><p>موفق به حذف پوشه اشتراکی <b>%1</b> (اشاره به <nobr><b>%2</b></nobr>) از ماشین مجازی <b>%3</b> نشد.</p><p>Pلطفا همه برنامه ها را در سیستم عامل مهمان ببندید ممکن است از پوشه اشتراکی استفاده کنند،سپس دوباره سعی کنید.</p></translation>
+        <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><p>موفق به حذف پوشه اشتراکی <b>%1</b> (اشاره به <nobr><b>%2</b></nobr>) از ماشین مجازی <b>%3</b> نشد.</p><p>Pلطفا همه برنامه ها را در سیستم عامل مهمان ببندید ممکن است از پوشه اشتراکی استفاده کنند،سپس دوباره سعی کنید.</p></translation>
     </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><p>آیا میخواهید ایمیج سی دی افزونه مهمان ویرچوال باکس را از <nobr><a href="%1">%2</a></nobr> (حجم %3 بایت) دانلود کنید؟</p></translation>
+        <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>
     </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><p>ایمیج سی دی افزونه مهمان ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%3</b> ذخیره شد.</nobr></p><p>آیا میخواهید این ایمیج سی دی را ثبت کرده و آن را در درایو سی دی/دی وی دی مجازی بارگیری کنید؟</p></translation>
+        <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>
     </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 OS [...]
-      <translation><p>پنجره ماشین مجازی برای کار در حالت رنگی <b>%1&nbsp;بیت</b> بهسازی شده است اما نمایشگر مجازی اکنون روی <b>%2&nbsp;بیت</b> تنظیم شده است.</p><p>لطفا پنجره مشخصات نمایش سیستم عامل مهمان را باز کنید و حالت رنگی <b>%3&nbsp;بیت</b> را انتخاب کنید، اگر آن موجود است، آن بهترین کارایی ممکن را برای ویدیو مجازی سیستم فرعی دارد.</p><p><b>توجه</b>. برخی سیستم عامل ها، مانند OS/2، ممکن است و [...]
+        <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>. برخی سیستم عامل ها، مانن [...]
     </message>
     <message>
-      <source>Failed to find license files in <nobr><b>%1</b></nobr>.</source>
-      <translation>موفق به یافتن فایل مجوز در <nobr><b>%1</b></nobr> نشد.</translation>
+        <source>Failed to find license files in <nobr><b>%1</b></nobr>.</source>
+        <translation type="obsolete">موفق به یافتن فایل مجوز در <nobr><b>%1</b></nobr> نشد.</translation>
     </message>
     <message>
-      <source>Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions.</source>
-      <translation>موفق به بازکردن فایل مجوز <nobr><b>%1</b></nobr> نشد. سطح دسترسی فایل را بررسی کنید.</translation>
+        <source>Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions.</source>
+        <translation>موفق به بازکردن فایل مجوز <nobr><b>%1</b></nobr> نشد. سطح دسترسی فایل را بررسی کنید.</translation>
     </message>
     <message>
-      <source>Failed to send the ACPI Power Button press event to the virtual machine <b>%1</b>.</source>
-      <translation>موفق به اِرسال رویداد فشار دکمه برق اِی سی پی آی به ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to send the ACPI Power Button press event to the virtual machine <b>%1</b>.</source>
+        <translation>موفق به اِرسال رویداد فشار دکمه برق اِی سی پی آی به ماشین مجازی <b>%1</b> نشد.</translation>
     </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><p>تبریک میگم! شما بعنوان کاربر ویرچوال باکس باموفقیت ثبت نام کردید.</p><p>از شما برای گذاشتن زمان و پرکردن این فرم تشکر میکنیم!</p></translation>
+        <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>
     </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>
-      <translation><p>موفق به بارگیری پیکربندی سراسری رابط از <b><nobr>%1</nobr></b> نشد.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
+        <source><p>Failed to load the global GUI configuration from <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source>
+        <translation><p>موفق به بارگیری پیکربندی سراسری رابط از <b><nobr>%1</nobr></b> نشد.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
     </message>
     <message>
-      <source><p>Failed to save the global GUI configuration to <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source>
-      <translation><p>موفق به ذخیره پیکربندی سراسری رابط <b><nobr>%1</nobr></b> نشد.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
+        <source><p>Failed to save the global GUI configuration to <b><nobr>%1</nobr></b>.</p><p>The application will now terminate.</p></source>
+        <translation><p>موفق به ذخیره پیکربندی سراسری رابط <b><nobr>%1</nobr></b> نشد.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
     </message>
     <message>
-      <source>Failed to save the settings of the virtual machine <b>%1</b> to <b><nobr>%2</nobr></b>.</source>
-      <translation>موفق به ذخیره تنظیمات ماشین مجازی <b>%1</b> در <b><nobr>%2</nobr></b> نشد.</translation>
+        <source>Failed to save the settings of the virtual machine <b>%1</b> to <b><nobr>%2</nobr></b>.</source>
+        <translation>موفق به ذخیره تنظیمات ماشین مجازی <b>%1</b> در <b><nobr>%2</nobr></b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to load the settings of the virtual machine <b>%1</b> from <b><nobr>%2</nobr></b>.</source>
-      <translation>موفق به بارگیری تنظیمات ماشین مجازی <b>%1</b> از <b><nobr>%2</nobr></b> نشد.</translation>
+        <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>
     </message>
     <message>
-      <source>Discard</source>
-      <comment>saved state</comment>
-      <translation>لغو کن</translation>
+        <source>Discard</source>
+        <comment>saved state</comment>
+        <translation>لغو کن</translation>
     </message>
     <message>
-      <source>Download</source>
-      <comment>additions</comment>
-      <translation>دانلود</translation>
+        <source>Download</source>
+        <comment>additions</comment>
+        <translation type="obsolete">دانلود</translation>
     </message>
     <message>
-      <source>Insert</source>
-      <comment>additions</comment>
-      <translation>بارگیری</translation>
+        <source>Insert</source>
+        <comment>additions</comment>
+        <translation>بارگیری</translation>
     </message>
     <message>
-      <source><p>The host key is currently defined as <b>%1</b>.</p></source>
-      <comment>additional message box paragraph</comment>
-      <translation><p>کلیدمیزبان اکنون <b>%1</b> هست.</p></translation>
+        <source><p>The host key is currently defined as <b>%1</b>.</p></source>
+        <comment>additional message box paragraph</comment>
+        <translation><p>کلیدمیزبان اکنون <b>%1</b> هست.</p></translation>
     </message>
     <message>
-      <source>Capture</source>
-      <comment>do input capture</comment>
-      <translation>ضبط</translation>
+        <source>Capture</source>
+        <comment>do input capture</comment>
+        <translation>ضبط</translation>
     </message>
     <message>
-      <source>Check</source>
-      <comment>inaccessible media message box</comment>
-      <translation>بررسی</translation>
+        <source>Check</source>
+        <comment>inaccessible media message box</comment>
+        <translation>بررسی</translation>
     </message>
     <message>
-      <source>Switch</source>
-      <comment>fullscreen</comment>
-      <translation>تعویض</translation>
+        <source>Switch</source>
+        <comment>fullscreen</comment>
+        <translation type="obsolete">تعویض</translation>
     </message>
     <message>
-      <source>Switch</source>
-      <comment>seamless</comment>
-      <translation>تعویض</translation>
+        <source>Switch</source>
+        <comment>seamless</comment>
+        <translation type="obsolete">تعویض</translation>
     </message>
     <message>
-      <source>Reset</source>
-      <comment>machine</comment>
-      <translation>ریست</translation>
+        <source>Reset</source>
+        <comment>machine</comment>
+        <translation>ریست</translation>
     </message>
     <message>
-      <source>Continue</source>
-      <comment>no hard disk attached</comment>
-      <translation>ادامه</translation>
+        <source>Continue</source>
+        <comment>no hard disk attached</comment>
+        <translation>ادامه</translation>
     </message>
     <message>
-      <source>Go Back</source>
-      <comment>no hard disk attached</comment>
-      <translation>برگرد</translation>
+        <source>Go Back</source>
+        <comment>no hard disk attached</comment>
+        <translation>برگرد</translation>
     </message>
     <message>
-      <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>به علت حافظه ویدیویی ناکافی قادر به واردشدن در حالت یکپارچه نیستید.</p><p>شما باید ماشین مجازی را پیکربندی کنید که حداقل <b>%1</b> حافظه ویدیویی داشته باشد.</p></translation>
+        <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>به علت حافظه ویدیویی ناکافی قادر به واردشدن در حالت یکپارچه نیستید.</p><p>شما باید ماشین مجازی را پیکربندی کنید که حداقل <b>%1</b> حافظه ویدیویی داشته باشد.</p></translation>
     </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><p>به علت حافظه ویدیویی ناکافی قادر به تعویض صفحه مهمان به حالت تمام صفحه نیست.</p><p>شما باید ماشین مجازی را پیکربندی کنید که حداقل <b>%1</b> حافظه ویدیویی داشته باشد.</p><p>دکمه <b>چشمپوشی</b> را برای رفتن به حالت تمام صفحه درهر صورت فشار دهید یا دکمه <b>لغو</b> را برای لغو عملکرد فشار دهید.</p></translation>
+        <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>
     </message>
     <message>
-      <source>You are already running the most recent version of VirtualBox.</source>
-      <translation>شما جدیدترین نسخه ویرچوال باکس را نصب کرده اید.</translation>
+        <source>You are already running the most recent version of VirtualBox.</source>
+        <translation>شما جدیدترین نسخه ویرچوال باکس را نصب کرده اید.</translation>
     </message>
     <message>
-      <source><p>You have <b>clicked the mouse</b> inside the Virtual Machine display or pressed the <b>host key</b>. This will cause the Virtual Machine to <b>capture</b> the host mouse pointer (only if the mouse pointer integration is not currently supported by the guest OS) and the keyboard, which will make them unavailable to other applications running on your host machine.</p><p>You can press the <b>host key</b> at an [...]
-      <translation><p>شما باید <b>ماوس را کلیک کنید</b> داخل صفحه ماشین مجازی یا <b>کلیدمیزبان</b> را فشار دهید. این باعث میشود که ماشین مجازی نشانگر ماوس میزبان و صفحه کلید را <b>ضبط</b> کند (فقط اگر یکپارچگی نشانگر ماوس حالا توسط سیستم عامل مهمان پشتیبانی نشود) ، که آنها را در سایر برنامه های در اِجرای ماشین میزبان را غیرقابل دسترس میکند.</p><p>میتوانید <b>کلیدمیزبان</b> در هر زمانی برای <b>خروج از ضبط</b> صف [...]
+        <source><p>You have <b>clicked the mouse</b> inside the Virtual Machine display or pressed the <b>host key</b>. This will cause the Virtual Machine to <b>capture</b> the host mouse pointer (only if the mouse pointer integration is not currently supported by the guest OS) and the keyboard, which will make them unavailable to other applications running on your host machine.</p><p>You can press the <b>host key</b> at  [...]
+        <translation><p>شما باید <b>ماوس را کلیک کنید</b> داخل صفحه ماشین مجازی یا <b>کلیدمیزبان</b> را فشار دهید. این باعث میشود که ماشین مجازی نشانگر ماوس میزبان و صفحه کلید را <b>ضبط</b> کند (فقط اگر یکپارچگی نشانگر ماوس حالا توسط سیستم عامل مهمان پشتیبانی نشود) ، که آنها را در سایر برنامه های در اِجرای ماشین میزبان را غیرقابل دسترس میکند.</p><p>میتوانید <b>کلیدمیزبان</b> در هر زمانی برای <b>خروج از ضبط</b>  [...]
     </message>
     <message>
-      <source><p>You have the <b>Auto capture keyboard</b> option turned on. This will cause the Virtual Machine to automatically <b>capture</b> the keyboard every time the VM window is activated and make it unavailable to other applications running on your host machine: when the keyboard is captured, all keystrokes (including system ones like Alt-Tab) will be directed to the VM.</p><p>You can press the <b>host key</b> at any time to  [...]
-      <translation><p>شما باید گزینه <b>ضبط خودکار صفحه کلید</b> را روشن کنید. این موجب میشود ماشین مجازی خودکار صفحه کلید را <b>ضبط</b> کند هربارکه پنجره ماشین مجازی فعال شده است و آن را غیرقابل دسترس در سایر برنامه های درحال اجرا در ماشین میزبان میکند:وقتیکه صفحه کلید ضبط شده است، همه ضربات کلید (شامل سیستمی مثل آلت+تب) به ماشین مجازی هدایت خواهد شد.</p><p>میتوانید <b>کلیدمیزبان</b> را در هر زمانی برای <b>خروج از ضبط</b> [...]
+        <source><p>You have the <b>Auto capture keyboard</b> option turned on. This will cause the Virtual Machine to automatically <b>capture</b> the keyboard every time the VM window is activated and make it unavailable to other applications running on your host machine: when the keyboard is captured, all keystrokes (including system ones like Alt-Tab) will be directed to the VM.</p><p>You can press the <b>host key</b> at any time t [...]
+        <translation><p>شما باید گزینه <b>ضبط خودکار صفحه کلید</b> را روشن کنید. این موجب میشود ماشین مجازی خودکار صفحه کلید را <b>ضبط</b> کند هربارکه پنجره ماشین مجازی فعال شده است و آن را غیرقابل دسترس در سایر برنامه های درحال اجرا در ماشین میزبان میکند:وقتیکه صفحه کلید ضبط شده است، همه ضربات کلید (شامل سیستمی مثل آلت+تب) به ماشین مجازی هدایت خواهد شد.</p><p>میتوانید <b>کلیدمیزبان</b> را در هر زمانی برای <b>خروج از ضبط</b&g [...]
     </message>
     <message>
-      <source><p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- all mouse actions you perform when the mouse pointer is over the Virtual Machine's display are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p><p>The mouse icon on the sta [...]
-      <translation><p>ماشین مجازی گزارش داده که از  <b>یکپارچگی نشانگر ماوس</b> پشتیبانی میکند. این معنی را میدهد که شما به <i>ضبط</i> نشانگر ماوس برای استفاده در سیستم عامل مهمان نیازی ندارید -- همه اقدامات ماوس که اِجرا کرده اید وقتیکه نشانگر ماوس روی صفحه ماشین مجازی هست مستقیما به سیستم عامل مهمان فرستاده میشود. اگر ماوس اکنون ضبط شده است، آن خودکار از ضبط خارج خواهد شد.</p><p>آیکون ماوس در نوار وضعیت شبیه این خواهد یود&nbsp;<img src=: [...]
+        <source><p>The Virtual Machine reports that the guest OS supports <b>mouse pointer integration</b>. This means that you do not need to <i>capture</i> the mouse pointer to be able to use it in your guest OS -- all mouse actions you perform when the mouse pointer is over the Virtual Machine's display are directly sent to the guest OS. If the mouse is currently captured, it will be automatically uncaptured.</p><p>The mouse icon on the s [...]
+        <translation><p>ماشین مجازی گزارش داده که از  <b>یکپارچگی نشانگر ماوس</b> پشتیبانی میکند. این معنی را میدهد که شما به <i>ضبط</i> نشانگر ماوس برای استفاده در سیستم عامل مهمان نیازی ندارید -- همه اقدامات ماوس که اِجرا کرده اید وقتیکه نشانگر ماوس روی صفحه ماشین مجازی هست مستقیما به سیستم عامل مهمان فرستاده میشود. اگر ماوس اکنون ضبط شده است، آن خودکار از ضبط خارج خواهد شد.</p><p>آیکون ماوس در نوار وضعیت شبیه این خواهد یود&nbsp;<img src [...]
     </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>
-      <translation><p>نسخه جدید ویرچوال باکس منتشر شده است! نسخه <b>%1</b> موجود است در <a href="https://www.virtualbox.org/">virtualbox.org</a>.</p><p>میتوانید این نسخه را توسط این لینک دانلود کنید:</p><p><a href=%2>%3</a></p></translation>
+        <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="https://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version using the link:</p><p><a href=%2>%3</a></p></source>
+        <translation><p>نسخه جدید ویرچوال باکس منتشر شده است! نسخه <b>%1</b> موجود است در <a href="https://www.virtualbox.org/">virtualbox.org</a>.</p><p>میتوانید این نسخه را توسط این لینک دانلود کنید:</p><p><a href=%2>%3</a></p></translation>
     </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><p>آیا میخواهید که %1 زیر را ترخیص کنید؟ <nobr><b>%2</b></nobr> </p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%3</b>.</p></translation>
+        <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>
     </message>
     <message>
-      <source>Release</source>
-      <comment>detach medium</comment>
-      <translation>ترخیص</translation>
+        <source>Release</source>
+        <comment>detach medium</comment>
+        <translation>ترخیص</translation>
     </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><p>آیا میخواهید %1 <nobr><b>%2</b></nobr> را از لیست رسانه شناخته شده حذف کنید؟</p></translation>
+        <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>
     </message>
     <message>
-      <source>As this hard disk is inaccessible its image file can not be deleted.</source>
-      <translation>توجه کنید که این دیسک سخت غیرقابل دسترسی میباشد،واحد ذخیره ساز آن درحال حاضر قابل حذف نمیباشد.</translation>
+        <source>As this hard disk is inaccessible its image file can not be deleted.</source>
+        <translation type="obsolete">توجه کنید که این دیسک سخت غیرقابل دسترسی میباشد،واحد ذخیره ساز آن درحال حاضر قابل حذف نمیباشد.</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>پنجره بعدی به شما اجازه حذف واحد ذخیره ساز این دیسک سخت یا حفظ آن را برای استفاده در آینده را میدهد.</translation>
+        <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>
     </message>
     <message>
-      <source>Remove</source>
-      <comment>medium</comment>
-      <translation>حذف</translation>
+        <source>Remove</source>
+        <comment>medium</comment>
+        <translation>حذف</translation>
     </message>
     <message>
-      <source><p>The hard disk storage unit at location <b>%1</b> already exists. You cannot create a new virtual hard disk that uses this location because it can be already used by another virtual hard disk.</p><p>Please specify a different location.</p></source>
-      <translation><p>واحد ذخیره ساز دیسک سخت در مکان <b>%1</b> از قبل موجود است. نمیتوانید یک دیسک سخت مجازی جدید را که از این مکان استفاده میکند را ایجاد کنید زیرا آن از قبل توسط دیسک سخت مجازی دیگری در حال استفاده است.</p><p>لطفا مکانی متفاوت انتخاب کنید.</p></translation>
+        <source><p>The hard disk storage unit at location <b>%1</b> already exists. You cannot create a new virtual hard disk that uses this location because it can be already used by another virtual hard disk.</p><p>Please specify a different location.</p></source>
+        <translation><p>واحد ذخیره ساز دیسک سخت در مکان <b>%1</b> از قبل موجود است. نمیتوانید یک دیسک سخت مجازی جدید را که از این مکان استفاده میکند را ایجاد کنید زیرا آن از قبل توسط دیسک سخت مجازی دیگری در حال استفاده است.</p><p>لطفا مکانی متفاوت انتخاب کنید.</p></translation>
     </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 poss [...]
-      <translation><p>آیا میخواهید واحد ذخیره ساز دیسک سخت <nobr><b>%1</b></nobr> را حذف کنید؟</p><p>اگر شما <b>حذف</b> را انتخاب کنید سپس واحد ذخیره ساز مشخص شده همیشگی حذف خواهد شد. این عملکرد <b>قابل آندوکردن</b>نیست.</p><p>اگر شما <b>حفظ</b> را انتخاب کنید،سپس دیسک سخت فقط از لیست دیسک سخت های شناخته شده حذف خواهد شد، اما واحد ذخیره ساز دست نخورده باقی میماند که آن موجب میشود بعدا دیسک سخت را بت [...]
+        <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> را انتخاب کنید،سپس دیسک سخت فقط از لیست دیسک سخت های شناخته شده حذف خواهد شد، اما واحد ذخیره ساز دست نخورده باقی میماند که آن موجب میشود ب [...]
     </message>
     <message>
-      <source>Delete</source>
-      <comment>hard disk storage</comment>
-      <translation>حذف</translation>
+        <source>Delete</source>
+        <comment>hard disk storage</comment>
+        <translation>حذف</translation>
     </message>
     <message>
-      <source>Keep</source>
-      <comment>hard disk storage</comment>
-      <translation>حفظ</translation>
+        <source>Keep</source>
+        <comment>hard disk storage</comment>
+        <translation>حفظ</translation>
     </message>
     <message>
-      <source>Failed to delete the storage unit of the hard disk <b>%1</b>.</source>
-      <translation>موفق به حذف واحد ذخیره ساز دیسک سخت <b>%1</b> نشد.</translation>
+        <source>Failed to delete the storage unit of the hard disk <b>%1</b>.</source>
+        <translation>موفق به حذف واحد ذخیره ساز دیسک سخت <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to create the hard disk storage <nobr><b>%1</b>.</nobr></source>
-      <translation>موفق به ایجاد ذخیره ساز دیسک سخت <nobr><b>%1</b> نشد.</nobr></translation>
+        <source>Failed to create the hard disk storage <nobr><b>%1</b>.</nobr></source>
+        <translation>موفق به ایجاد ذخیره ساز دیسک سخت <nobr><b>%1</b> نشد.</nobr></translation>
     </message>
     <message>
-      <source>Failed to open the %1 <nobr><b>%2</b></nobr>.</source>
-      <translation>موفق به بازکردن %1 <nobr><b>%2</b></nobr> نشد.</translation>
+        <source>Failed to open the %1 <nobr><b>%2</b></nobr>.</source>
+        <translation type="obsolete">موفق به بازکردن %1 <nobr><b>%2</b></nobr> نشد.</translation>
     </message>
     <message>
-      <source>Failed to close the %1 <nobr><b>%2</b></nobr>.</source>
-      <translation>موفق به بستن %1 <nobr><b>%2</b></nobr> نشد.</translation>
+        <source>Failed to close the %1 <nobr><b>%2</b></nobr>.</source>
+        <translation type="obsolete">موفق به بستن %1 <nobr><b>%2</b></nobr> نشد.</translation>
     </message>
     <message>
-      <source>Failed to access the disk image file <nobr><b>%1</b></nobr>.</source>
-      <translation>موفق به تعیین وضعیت دسترسی پذیری رسانه <nobr><b>%1</b></nobr> نشد.</translation>
+        <source>Failed to access the disk image file <nobr><b>%1</b></nobr>.</source>
+        <translation>موفق به تعیین وضعیت دسترسی پذیری رسانه <nobr><b>%1</b></nobr> نشد.</translation>
     </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><p>به علت خطای زیر موفق به اتصال به سرویس ثبت نام آنلاین ویرچوال باکس نشد:</p><p><b>%1</b></p></translation>
+        <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>
     </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><p>یک یا تعداد بیشتری دیسک سخت مجازی، سی دی/دی وی دی یا رسانه فلاپی اکنون قابل دسترسی نیستند. درنتیجه، تا زمانیکه این رسانه ها قابل دسترسی نباشد شما قادر به استفاده از ماشین مجازی نیستید.</p><p>دکمه <b>بررسی</b> را برای بازکردن پنجره مدیر رسانه مجازی فشار دهید و مشاهده کنید کدام رسانه ها قابل دسترسی نیستند، یا دکمه <b>چشمپوشی</b> را برای نادیده گرفتن این پیام فشار دهید.</p></translation>
+        <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>
     </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></nobr& [...]
-      <translation><p>یک خطای خطرناک حین اِجرای ماشین مجازی رخ داده و اِجرای ماشین متوقف شده است.</p><p>برای راهنمایی، لطفا بخش انجمن را در <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> ببینید یا با پشتیبانی تماس بگیرید. لطفا محتویات فایل وقایع <tt>VBox.log</tt> و فایل ایمیج <tt>VBox.png</tt> را ارئه دهید، که میتوانید آنها را در دایرکتوری <nobr><b>%1</b></nobr> پیدا کنید، همچنین توضیح دهید ک [...]
+        <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>یک خطای خطرناک حین اِجرای ماشین مجازی رخ داده و اِجرای ماشین متوقف شده است.</p><p>برای راهنمایی، لطفا بخش انجمن را در <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> ببینید یا با پشتیبانی تماس بگیرید. لطفا محتویات فایل وقایع <tt>VBox.log</tt> و فایل ایمیج <tt>VBox.png</tt> را ارئه دهید، که میتوانید آنها را در دایرکتوری <nobr><b>%1</b></nobr> پیدا کنید، همچنین توضیح دهید [...]
     </message>
     <message>
-      <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>فایل های زیر از قبل موجود است:<br /><br />%1<br /><br />آیا میخواهید آنها را جایگزین کنید؟ جایگزین کردن آنها محتوایشان را جایگزین خواهد کرد.</translation>
+        <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>فایل های زیر از قبل موجود است:<br /><br />%1<br /><br />آیا میخواهید آنها را جایگزین کنید؟ جایگزین کردن آنها محتوایشان را جایگزین خواهد کرد.</translation>
     </message>
     <message>
-      <source>You are running a prerelease version of VirtualBox. This version is not suitable for production use.</source>
-      <translation>شما در حال اِجرا در نسخه پیش از انتشار ویرچوال باکس هستید. این نسخه مناسب استفاده تولیدی نیست.</translation>
+        <source>You are running a prerelease version of VirtualBox. This version is not suitable for production use.</source>
+        <translation>شما در حال اِجرا در نسخه پیش از انتشار ویرچوال باکس هستید. این نسخه مناسب استفاده تولیدی نیست.</translation>
     </message>
     <message>
-      <source>You are trying to shut down the guest with the ACPI power button. This is currently not possible because the guest does not support software shutdown.</source>
-      <translation>شما در تلاش برای شات دان مهمان با دکمه برق اِی سی پی آی هستید.این اکنون امکان ندارد زیرا مهمان از نرم افزار شات دان پشتیبانی نمیکند.</translation>
+        <source>You are trying to shut down the guest with the ACPI power button. This is currently not possible because the guest does not support software shutdown.</source>
+        <translation>شما در تلاش برای شات دان مهمان با دکمه برق اِی سی پی آی هستید.این اکنون امکان ندارد زیرا مهمان از نرم افزار شات دان پشتیبانی نمیکند.</translation>
     </message>
     <message>
-      <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 فعال شده است، اما قابل استفاده نیست. مهمان 64 بیتی شما موفق به تشخیص پردازنده 64 بیتی نخواهد شد و قادر به بوت نیست.</p><p>لطفا مطمئن شوید که شما مشخصه VT-x/AMD-V را در بایوس رایانه میزبان فعال کرده اید.</p></translation>
+        <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 فعال شده است، اما قابل استفاده نیست. مهمان 64 بیتی شما موفق به تشخیص پردازنده 64 بیتی نخواهد شد و قادر به بوت نیست.</p><p>لطفا مطمئن شوید که شما مشخصه VT-x/AMD-V را در بایوس رایانه میزبان فعال کرده اید.</p></translation>
     </message>
     <message>
-      <source>Close VM</source>
-      <translation>بستن ماشین مجازی</translation>
+        <source>Close VM</source>
+        <translation>بستن ماشین مجازی</translation>
     </message>
     <message>
-      <source>Continue</source>
-      <translation>ادامه</translation>
+        <source>Continue</source>
+        <translation>ادامه</translation>
     </message>
     <message>
-      <source>Cancel</source>
-      <translation>لغو</translation>
+        <source>Cancel</source>
+        <translation>لغو</translation>
     </message>
     <message>
-      <source>Failed to create the host-only network interface.</source>
-      <translation>موفق به ایجاد رابط شبکه فقط-میزبان نشد.</translation>
+        <source>Failed to create the host-only network interface.</source>
+        <translation type="obsolete">موفق به ایجاد رابط شبکه فقط-میزبان نشد.</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><p>فایل تنظیمات موجود ویرچوال باکس خودکار از فرمت قدیمی به فرمت جدید موردنیاز با نسخه جدید ویرچوال باکس تبدیل خواهد شد.</p><p>دکمه <b>تأیید</b> را برای اِجرای ویرچوال باکس فشار دهید یا دکمه <b>خروج</b> را اگر میخواهید برنامه ویرچوال باکس بدون هیچ اقدامی بعدی بسته شود را فشار دهید.</p></translation>
+        <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>
     </message>
     <message>
-      <source>Failed to open appliance.</source>
-      <translation>موفق به بازکردن وسیله نشد.</translation>
+        <source>Failed to open appliance.</source>
+        <translation type="obsolete">موفق به بازکردن وسیله نشد.</translation>
     </message>
     <message>
-      <source>Failed to open/interpret appliance <b>%1</b>.</source>
-      <translation>موفق به بازکردن/تفسیر وسیله <b>%1</b> نشد.</translation>
+        <source>Failed to open/interpret appliance <b>%1</b>.</source>
+        <translation>موفق به بازکردن/تفسیر وسیله <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to import appliance <b>%1</b>.</source>
-      <translation>موفق به واردکردن وسیله <b>%1</b> نشد.</translation>
+        <source>Failed to import appliance <b>%1</b>.</source>
+        <translation>موفق به واردکردن وسیله <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to create appliance.</source>
-      <translation>موفق به ایجاد وسیله نشد.</translation>
+        <source>Failed to create appliance.</source>
+        <translation type="obsolete">موفق به ایجاد وسیله نشد.</translation>
     </message>
     <message>
-      <source>Failed to prepare the export of the appliance <b>%1</b>.</source>
-      <translation>موفق به اماده سازی خروجیگیری وسیله <b>%1</b> نشد.</translation>
+        <source>Failed to prepare the export of the appliance <b>%1</b>.</source>
+        <translation>موفق به اماده سازی خروجیگیری وسیله <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to create an appliance.</source>
-      <translation>موفق به ایجاد یک وسیله نشد.</translation>
+        <source>Failed to create an appliance.</source>
+        <translation type="obsolete">موفق به ایجاد یک وسیله نشد.</translation>
     </message>
     <message>
-      <source>Failed to export appliance <b>%1</b>.</source>
-      <translation>موفق به خروجیگیری وسیله <b>%1</b> نشد.</translation>
+        <source>Failed to export appliance <b>%1</b>.</source>
+        <translation>موفق به خروجیگیری وسیله <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <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 inte [...]
-      <translation><p>حذف شبکه فقط-میزبان رابط فقط-میزبان این شبکه که برپایه آن هست را حذف میکند. آیا میخواهید رابط (شبکه فقط-میزبان) <nobr><b>%1</b> را حذف کنید؟</nobr></p><p><b>توجه:</b> این رابط ممکن است درحال استفاده توسط یک یا تعداد بیشتری آداپتور شبکه مجازی متعلق به یکی از ماشین های مجازی شما باشد.بعداز اینکه آن حذف شد، آن آداپتورها بیش از این قابل استفاده نیستند تازمانی که شما تنظیمات آنها را با انتخاب نام رابط متفاوت یا نوع ضم [...]
+        <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>حذف شبکه فقط-میزبان رابط فقط-میزبان این شبکه که برپایه آن هست را حذف میکند. آیا میخواهید رابط (شبکه فقط-میزبان) <nobr><b>%1</b> را حذف کنید؟</nobr></p><p><b>توجه:</b> این رابط ممکن است درحال استفاده توسط یک یا تعداد بیشتری آداپتور شبکه مجازی متعلق به یکی از ماشین های مجازی شما باشد.بعداز اینکه آن حذف شد، آن آداپتورها بیش از این قابل استفاده نیستند تازمانی که شما تنظیمات آنها را با انتخاب نام رابط متفاوت یا نوع  [...]
     </message>
     <message>
-      <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>یک فایل با نام <b>%1</b> از قبل موجود است. آیا میخواهید آن را جایگزین کنید؟<br /><br />جایگزین کردن آن محتویات را هم جایگزینی میکند.</translation>
+        <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>یک فایل با نام <b>%1</b> از قبل موجود است. آیا میخواهید آن را جایگزین کنید؟<br /><br />جایگزین کردن آن محتویات را هم جایگزینی میکند.</translation>
     </message>
     <message>
-      <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Certain guests (e.g. OS/2 and QNX) require this feature.</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 فعال شده است، اما قابل استفاده نیست. برخی مهمان ها (مثل OS/2 و QNX) به این ویژگی نیاز دارند.</p><p>لطفا مطمئن شوید که شما مشخصه VT-x/AMD-V را در بایوس رایانه میزبان فعال کرده اید.</p></translation>
+        <source><p>VT-x/AMD-V hardware acceleration has been enabled, but is not operational. Certain guests (e.g. OS/2 and QNX) require this feature.</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 فعال شده است، اما قابل استفاده نیست. برخی مهمان ها (مثل OS/2 و QNX) به این ویژگی نیاز دارند.</p><p>لطفا مطمئن شوید که شما مشخصه VT-x/AMD-V را در بایوس رایانه میزبان فعال کرده اید.</p></translation>
     </message>
     <message>
-      <source><p>Invalid e-mail address or password specified.</p></source>
-      <translation><p>آدرس ایمیل یا رمزعبور نامعتبر تعیین شده است.</p></translation>
+        <source><p>Invalid e-mail address or password specified.</p></source>
+        <translation type="obsolete"><p>آدرس ایمیل یا رمزعبور نامعتبر تعیین شده است.</p></translation>
     </message>
     <message>
-      <source><p>Failed to register the VirtualBox product.</p><p>%1</p></source>
-      <translation><p>موفق به ثبت نام محصول ویرچوال باکس نشد.</p><p>%1</p></translation>
+        <source><p>Failed to register the VirtualBox product.</p><p>%1</p></source>
+        <translation type="obsolete"><p>موفق به ثبت نام محصول ویرچوال باکس نشد.</p><p>%1</p></translation>
     </message>
     <message>
-      <source>Failed to check files.</source>
-      <translation>موفق به بررسی فایل ها نشد.</translation>
+        <source>Failed to check files.</source>
+        <translation>موفق به بررسی فایل ها نشد.</translation>
     </message>
     <message>
-      <source>Failed to remove file.</source>
-      <translation>موفق به حذف فایل نشد.</translation>
+        <source>Failed to remove file.</source>
+        <translation>موفق به حذف فایل نشد.</translation>
     </message>
     <message>
-      <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>بنظر میرسد شما فایل سیستم USBFS در /sys/bus/usb/drivers بارگیری کرده اید. ما قویا پیشنهاد میکنیم این را تغییر دهید، طوریکه آن شدیدا باعث پیکربندی اشتباه سیستم میشود که همچنین باعث دستگاه یو اِس بی با خطای غیرمنتظره رو برو شود.</translation>
+        <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>بنظر میرسد شما فایل سیستم USBFS در /sys/bus/usb/drivers بارگیری کرده اید. ما قویا پیشنهاد میکنیم این را تغییر دهید، طوریکه آن شدیدا باعث پیکربندی اشتباه سیستم میشود که همچنین باعث دستگاه یو اِس بی با خطای غیرمنتظره رو برو شود.</translation>
     </message>
     <message>
-      <source>You are running an EXPERIMENTAL build of VirtualBox. This version is not suitable for production use.</source>
-      <translation>شما درحال اِجرا در نسخه ازمایشی ویرچوال باکس هستید.این نسخه مناسب برای استفاده تولیدی نیست.</translation>
+        <source>You are running an EXPERIMENTAL build of VirtualBox. This version is not suitable for production use.</source>
+        <translation>شما درحال اِجرا در نسخه ازمایشی ویرچوال باکس هستید.این نسخه مناسب برای استفاده تولیدی نیست.</translation>
     </message>
     <message>
-      <source>Restore</source>
-      <translation>بازگردانی</translation>
+        <source>Restore</source>
+        <translation>بازگردانی</translation>
     </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><p>حذف ضبط وضعیت موجب میشود که اطلاعات ذخیره شده در آن از دست برود، و داده دیسک که در سطح چندین ایمیج گسترش یافته با اضافه ضبط وضعیت داخل یک فایل ادغام شوند. این میتواند یک فرآیند طولانی باشد، و اطلاعات ضبط وضعیت قابل بازگردانی نیست.</p></p>آیا میخواهید ضبط وضعیت انتخاب شده <b>%1</b> را حذف کنید؟</p></translation>
+        <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>
     </message>
     <message>
-      <source>Delete</source>
-      <translation>حذف</translation>
+        <source>Delete</source>
+        <translation>حذف</translation>
     </message>
     <message>
-      <source>Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
-      <translation>موفق به بازگردانی ضبط وضعیت <b>%1</b> ماشین مجازی <b>%2</b> نشد.</translation>
+        <source>Failed to restore 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 delete the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
-      <translation>موفق به حذف ضبط وضعیت <b>%1</b> ماشین مجازی <b>%2</b> نشد.</translation>
+        <source>Failed to delete the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
+        <translation>موفق به حذف ضبط وضعیت <b>%1</b> ماشین مجازی <b>%2</b> نشد.</translation>
     </message>
     <message>
-      <source>Unable to insert the %1 <nobr><b>%2</b></nobr> into the machine <b>%3</b>.</source>
-      <translation>قادر به بارگیری %1 <nobr><b>%2</b></nobr> در ماشین <b>%3</b> نیست.</translation>
+        <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>
     </message>
     <message>
-      <source> Would you like to force mounting of this medium?</source>
-      <translation> آیا میخواهید این رسانه را اجباری بارگیری کنید؟</translation>
+        <source> Would you like to force mounting of this medium?</source>
+        <translation type="obsolete"> آیا میخواهید این رسانه را اجباری بارگیری کنید؟</translation>
     </message>
     <message>
-      <source>Unable to unmount the %1 <nobr><b>%2</b></nobr> from the machine <b>%3</b>.</source>
-      <translation>قادر به تخلیه %1 <nobr><b>%2</b></nobr> از ماشین <b>%3</b> نیست.</translation>
+        <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>
     </message>
     <message>
-      <source> Would you like to force unmounting of this medium?</source>
-      <translation> آیا میخواهید این رسانه را اجباری تخلیه کنید؟</translation>
+        <source> Would you like to force unmounting of this medium?</source>
+        <translation type="obsolete"> آیا میخواهید این رسانه را اجباری تخلیه کنید؟</translation>
     </message>
     <message>
-      <source>Force Unmount</source>
-      <translation>تخلیه اجباری</translation>
+        <source>Force Unmount</source>
+        <translation>تخلیه اجباری</translation>
     </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><p>نمیتوان ایمیج سی دی نصب کننده افزونه مهمان ویرچوال باکس را داخل ماشین مجازی <b>%1</b>قرار داد، چونکه ماشین درایو سی دی/دی وی دی ندارد. لطفا یک درایو توسط صفحه ذخیره ساز در پنجره تنظیمات ماشین مجازی اضافه کنید.</p></translation>
+        <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>
     </message>
     <message>
-      <source>E&xit</source>
-      <comment>warnAboutSettingsAutoConversion message box</comment>
-      <translation>خر&وج</translation>
+        <source>E&xit</source>
+        <comment>warnAboutSettingsAutoConversion message box</comment>
+        <translation type="obsolete">خر&وج</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><p>فایل تنظیمات زیرین ویرچوال باکس خودکار از فرمت قدیمی به فرمت جدید که موردنیاز نسخه جدید است تبدیل خواهد شد.</p><p>دکمه <b>تأیید</b> را برای شروع ویرچوال باکس فشار دهید یا دکمه <b>خروج</b> را اگر میخواهید برنامه ویرچوال باکس بدون هیچ اقدامی بعدی بسته شود را فشار دهید.</p></translation>
+        <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>
     </message>
     <message>
-      <source>hard disk</source>
-      <comment>failed to mount ...</comment>
-      <translation>دیسک سخت</translation>
+        <source>hard disk</source>
+        <comment>failed to mount ...</comment>
+        <translation type="obsolete">دیسک سخت</translation>
     </message>
     <message>
-      <source>CD/DVD</source>
-      <comment>failed to mount ... host-drive</comment>
-      <translation>سی دی/دی وی دی</translation>
+        <source>CD/DVD</source>
+        <comment>failed to mount ... host-drive</comment>
+        <translation type="obsolete">سی دی/دی وی دی</translation>
     </message>
     <message>
-      <source>CD/DVD image</source>
-      <comment>failed to mount ...</comment>
-      <translation>ایمیج سی دی/دی وی دی</translation>
+        <source>CD/DVD image</source>
+        <comment>failed to mount ...</comment>
+        <translation type="obsolete">ایمیج سی دی/دی وی دی</translation>
     </message>
     <message>
-      <source>floppy</source>
-      <comment>failed to mount ... host-drive</comment>
-      <translation>فلاپی</translation>
+        <source>floppy</source>
+        <comment>failed to mount ... host-drive</comment>
+        <translation type="obsolete">فلاپی</translation>
     </message>
     <message>
-      <source>floppy image</source>
-      <comment>failed to mount ...</comment>
-      <translation>ایمیج فلاپی</translation>
+        <source>floppy image</source>
+        <comment>failed to mount ...</comment>
+        <translation type="obsolete">ایمیج فلاپی</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><p>آیا میخواهید دستگاه سی دی/دی وی دی رام را حذف کنید؟</p><p>شما قادر به بارگیری سی دی یا ایمیج ایزو یا نصب افزونه مهمان بدون آن نیستید!</p></translation>
+        <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>
     </message>
     <message>
-      <source>&Remove</source>
-      <comment>medium</comment>
-      <translation>ح&ذف</translation>
+        <source>&Remove</source>
+        <comment>medium</comment>
+        <translation>ح&ذف</translation>
     </message>
     <message>
-      <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 در سیستم شما موجود نیست. مهمان 64 بیتی شما موفق به تشخیص پردازنده 64 بیتی نخواهد شد و قادر به بوت نیستید.</translation>
+        <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 در سیستم شما موجود نیست. مهمان 64 بیتی شما موفق به تشخیص پردازنده 64 بیتی نخواهد شد و قادر به بوت نیستید.</translation>
     </message>
     <message>
-      <source><p>VT-x/AMD-V hardware acceleration is not available on your system. Certain guests (e.g. OS/2 and QNX) require this feature and will fail to boot without it.</p></source>
-      <translation><p>شتاب دهنده سخت افزاری VT-x/AMD-V در سیستم شما موجود نیست. برخی مهمان ها (مثل OS/2 و QNX) این ویژگی را نیاز دارند و موفق به بوت بدون آن نخواهند شد.</p></translation>
+        <source><p>VT-x/AMD-V hardware acceleration is not available on your system. Certain guests (e.g. OS/2 and QNX) require this feature and will fail to boot without it.</p></source>
+        <translation><p>شتاب دهنده سخت افزاری VT-x/AMD-V در سیستم شما موجود نیست. برخی مهمان ها (مثل OS/2 و QNX) این ویژگی را نیاز دارند و موفق به بوت بدون آن نخواهند شد.</p></translation>
     </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><p>حذف ضبط وضعیت %1 موقتا فضای دیسک بیشتری را نیاز دارد. در بدترین حالت حجم ایمیج %2 توسط %3افزایش خواهد یافت، هرچند در این فایل سیستم آنجا فقط %4 آزاد است.</p><p>خارج شدن از فضای دیسک حین عملکرد ادغام میتواند موجب خرابی ایمیج و پیکربندی ماشین مجازی شود، مثل از دست دادن ماشین مجازی و داده های آن.</p><p>شما میتوانید با ریسک خود ضبط وضعیت را حذف کنید.</p></translation>
+        <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>
     </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>
-      <translation><p>به علت حافظه ویدیویی ناکافی مهمان قادر به تغییر صفحه مهمان به این صفحه میزبان نیست.</p><p>ماشین مجازی شما حداقل باید روی <b>%1</b> حافظه ویدیویی پیکربندی شود.</p></translation>
+        <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>
+        <translation><p>به علت حافظه ویدیویی ناکافی مهمان قادر به تغییر صفحه مهمان به این صفحه میزبان نیست.</p><p>ماشین مجازی شما حداقل باید روی <b>%1</b> حافظه ویدیویی پیکربندی شود.</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><p>Press <b>Ignore</b> to switch the screen anyway or press <b>Cancel</b> to cancel the operation.</p></source>
-      <translation><p>به علت حافظه ویدیویی ناکافی مهمان قادر به تغییر صفحه مهمان به این صفحه میزبان نیست.</p><p>ماشین مجازی شما حداقل باید روی <b>%1</b> حافظه ویدیویی پیکربندی شود.</p><p>دکمه <b>چشمپوشی</b> برای رفتن به صفحه درهرصورت فشار دهید یا دکمه <b>لغو</b> را برای انصراف از عملکرد فشار دهید.</p></translation>
+        <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><p>Press <b>Ignore</b> to switch the screen anyway or press <b>Cancel</b> to cancel the operation.</p></source>
+        <translation><p>به علت حافظه ویدیویی ناکافی مهمان قادر به تغییر صفحه مهمان به این صفحه میزبان نیست.</p><p>ماشین مجازی شما حداقل باید روی <b>%1</b> حافظه ویدیویی پیکربندی شود.</p><p>دکمه <b>چشمپوشی</b> برای رفتن به صفحه درهرصورت فشار دهید یا دکمه <b>لغو</b> را برای انصراف از عملکرد فشار دهید.</p></translation>
     </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><p>نمیتوان صفحه مهمان را به حالت تمام صفحه برد. شما نمایشگر مجازی بیشتری نسبت به نمایشگر فیزیکی ضمیمه شده به میزبان پیکربندی کرده اید.</p><p>لطفا یا صفحه مجازی را در پیکربندی ماشین مجازی کمتر کنید یا نمایشگر بیشتری به میزبان اضافه کنید.</p></translation>
+        <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>
     </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><p>نمیتوان صفحه مهمان را به حالت یکپارچه برد. شما نمایشگر مجازی بیشتر از نمایشگر فیزیکی به میزبان ضمیمه کرده اید.</p><p>لطفا نمایشگر مجازی کمتری در پیکربندی ماشین مجازی انتخاب کنید یا نمایشگر بیشتری به میزبان خود ضمیمه کنید.</p></translation>
+        <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>
     </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><p>قادر به یافتنراهنمای کاربر ویرچوال باکس <nobr><b>%1</b> نیست.</nobr></p><p>آیا میخواهید این فایل را از اینترنت دانلود کنید؟</p></translation>
+        <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>
     </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><p>آیا میخواهید راهنمای کاربر ویرچوال باکس را از <nobr><a href="%1">%2</a></nobr> (حجم %3 بایت) دانلود کنید؟</p></translation>
+        <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>
     </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><p>راهنمای کاربر ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%3</b> ذخیره شد.</nobr></p></translation>
+        <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>
     </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><p>راهنمای کاربر ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد اما نمیتواند بطور محلی بعنوان <nobr><b>%3</b> ذخیره شود.</nobr></p><p>لطفا برای آن فایل محل دیگری را انتخاب کنید.</p></translation>
+        <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>
     </message>
     <message>
-      <source>Failed to open virtual machine located in %1.</source>
-      <translation>موفق به بازکردن ماشین مجازی قرارگرفته در %1 نشد.</translation>
+        <source>Failed to open virtual machine located in %1.</source>
+        <translation>موفق به بازکردن ماشین مجازی قرارگرفته در %1 نشد.</translation>
     </message>
     <message>
-      <source>Failed to add virtual machine <b>%1</b> located in <i>%2</i> because its already present.</source>
-      <translation>موفق به افزودن ماشین مجازی <b>%1</b> قرارگرفته در <i>%2</i> نشد زیرا آن از قبل حاضر است.</translation>
+        <source>Failed to add virtual machine <b>%1</b> located in <i>%2</i> because its already present.</source>
+        <translation>موفق به افزودن ماشین مجازی <b>%1</b> قرارگرفته در <i>%2</i> نشد زیرا آن از قبل حاضر است.</translation>
     </message>
     <message>
-      <source>Delete all files</source>
-      <translation>حذف همه فایل ها</translation>
+        <source>Delete all files</source>
+        <translation>حذف همه فایل ها</translation>
     </message>
     <message>
-      <source>Remove only</source>
-      <translation>فقط حذف</translation>
+        <source>Remove only</source>
+        <translation>فقط حذف</translation>
     </message>
     <message>
-      <source>Remove</source>
-      <translation>حذف</translation>
+        <source>Remove</source>
+        <translation>حذف</translation>
     </message>
     <message>
-      <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>شما در صدد افزودن یک دیسک سخت مجازی به کنترلر <b>%1</b> هستید.</p><p>آیا میخواهید یک فایل خالی جدید برای حفظ محتویات دیسک ایجاد کنید یا یکی که موجود است را انتخاب کنید؟</p></translation>
+        <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>شما در صدد افزودن یک دیسک سخت مجازی به کنترلر <b>%1</b> هستید.</p><p>آیا میخواهید یک فایل خالی جدید برای حفظ محتویات دیسک ایجاد کنید یا یکی که موجود است را انتخاب کنید؟</p></translation>
     </message>
     <message>
-      <source>Create &new disk</source>
-      <comment>add attachment routine</comment>
-      <translation>ایجاد دیسک &جدید</translation>
+        <source>Create &new disk</source>
+        <comment>add attachment routine</comment>
+        <translation type="obsolete">ایجاد دیسک &جدید</translation>
     </message>
     <message>
-      <source>&Choose existing disk</source>
-      <comment>add attachment routine</comment>
-      <translation>انتخاب دی&سک موجود</translation>
+        <source>&Choose existing disk</source>
+        <comment>add attachment routine</comment>
+        <translation type="obsolete">انتخاب دی&سک موجود</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><p>شما درصدد افزودن درایو سی دی/دی وی دی به کنترلر <b>%1</b> هستید؟</p><p>آیا میخواهید دیسک مجازی سی دی/دی وی دی برای قراردادن در درایو انتخاب کنید یا آن را خالی بگذارید؟</p></translation>
+        <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>
     </message>
     <message>
-      <source>&Choose disk</source>
-      <comment>add attachment routine</comment>
-      <translation>انتخاب د&یسک</translation>
+        <source>&Choose disk</source>
+        <comment>add attachment routine</comment>
+        <translation type="obsolete">انتخاب د&یسک</translation>
     </message>
     <message>
-      <source>Leave &empty</source>
-      <comment>add attachment routine</comment>
-      <translation>خالی &بگذار</translation>
+        <source>Leave &empty</source>
+        <comment>add attachment routine</comment>
+        <translation type="obsolete">خالی &بگذار</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>
-      <translation><p>شما درصدد افزودن درایو فلاپی جدید به کنترلر <b>%1</b> هستید.</p><p>آیا میخواهید یک دیسک فلاپی مجازی برای قراردادن در درایو انتخاب کنید یا آن را حالا خالی بگذارید؟</p></translation>
+        <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>
+        <translation><p>شما درصدد افزودن درایو فلاپی جدید به کنترلر <b>%1</b> هستید.</p><p>آیا میخواهید یک دیسک فلاپی مجازی برای قراردادن در درایو انتخاب کنید یا آن را حالا خالی بگذارید؟</p></translation>
     </message>
     <message>
-      <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>موفق به جداکردن دیسک سخت (<nobr><b>%1</b></nobr>) از شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
+        <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>موفق به جداکردن دیسک سخت (<nobr><b>%1</b></nobr>) از شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
     </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>موفق به جداکردن دستگاه سی دی/دی وی دی (<nobr><b>%1</b></nobr>) از شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
+        <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>
     </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>موفق به جداکردن دستگاه فلاپی (<nobr><b>%1</b></nobr>) از شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
+        <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>
     </message>
     <message>
-      <source>Failed to update Guest Additions. The Guest Additions disk image file will be inserted for user installation.</source>
-      <translation>موفق به بروزرسانی افزونه مهمان نشد. ایمیج نصب افزونه مهمان برای ارائه نصب دستی بارگیری خواهد شد.</translation>
+        <source>Failed to update Guest Additions. The Guest Additions disk image file will be inserted for user installation.</source>
+        <translation>موفق به بروزرسانی افزونه مهمان نشد. ایمیج نصب افزونه مهمان برای ارائه نصب دستی بارگیری خواهد شد.</translation>
     </message>
     <message>
-      <source>Failed to install the Extension Pack <b>%1</b>.</source>
-      <translation>موفق به نصب بسته افزونه <b>%1</b> نشد.</translation>
+        <source>Failed to install the Extension Pack <b>%1</b>.</source>
+        <translation>موفق به نصب بسته افزونه <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to uninstall the Extension Pack <b>%1</b>.</source>
-      <translation>موفق به حذف بسته افزونه <b>%1</b> نشد.</translation>
+        <source>Failed to uninstall the Extension Pack <b>%1</b>.</source>
+        <translation>موفق به حذف بسته افزونه <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>&Remove</source>
-      <translation>ح&ذف</translation>
+        <source>&Remove</source>
+        <translation>ح&ذف</translation>
     </message>
     <message>
-      <source>The current port forwarding rules are not valid. None of the host or guest port values may be set to zero.</source>
-      <translation>دستورات اِرسال پورت فعلی صحیح نیست.مقادیر پورت غیر میزبان یا مهمان باید به صفر تنظیم شود.</translation>
+        <source>The current port forwarding rules are not valid. None of the host or guest port values may be set to zero.</source>
+        <translation>دستورات اِرسال پورت فعلی صحیح نیست.مقادیر پورت غیر میزبان یا مهمان باید به صفر تنظیم شود.</translation>
     </message>
     <message>
-      <source><p>There are unsaved changes in the port forwarding configuration.</p><p>If you proceed your changes will be discarded.</p></source>
-      <translation><p>تغییرات ذخیره نشده در پیکربندی اِرسال پورت موجود است.</p><p>اگر ادامه دهید تغییرات ذخیره نمیشود.</p></translation>
+        <source><p>There are unsaved changes in the port forwarding configuration.</p><p>If you proceed your changes will be discarded.</p></source>
+        <translation><p>تغییرات ذخیره نشده در پیکربندی اِرسال پورت موجود است.</p><p>اگر ادامه دهید تغییرات ذخیره نمیشود.</p></translation>
     </message>
     <message>
-      <source>Failed to attach the hard disk (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-      <translation>موفق به ضمیمه دیسک سخت (<nobr><b>%1</b></nobr>) به شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
+        <source>Failed to attach the hard disk (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <translation>موفق به ضمیمه دیسک سخت (<nobr><b>%1</b></nobr>) به شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
     </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>موفق به ضمیمه دستگاه سی دی/دی وی دی (<nobr><b>%1</b></nobr>) به شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
+        <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>
     </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>موفق به ضمیمه دستگاه (<nobr><b>%1</b></nobr>) به شکاف <i>%2</i> از ماشین <b>%3</b> نشد.</translation>
+        <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>
     </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>
-      <translation><p>توجه کنید که واحد ذخیره ساز این رسانه حذف نخواهد شد و امکان استفاده آن در زمان دیگری هم هست.</p></translation>
+        <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>توجه کنید که واحد ذخیره ساز این رسانه حذف نخواهد شد و امکان استفاده آن در زمان دیگری هم هست.</p></translation>
     </message>
     <message>
-      <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully started  [...]
-      <translation><p>افزونه مهمان ویرچوال باکس در ماشین مجازی دردسترس ظاهر نشده است، و پوشه اشتراکی بدون آن قابل استفاده نیست. برای استفاده از پوشه اشتراکی در داخل ماشین مجازی، لطفا افزونه مهمان را نصب کنید اگر آنها نصب نشده است. یا اگر بدرستی کار نمیکند مجددا نصب کنید، گزینه <b>نصب افزونه مهمان</b> را از منوی <b>دستگاه</b> انتخاب کنید. اگر آنها نصب شده اند اما ماشین هنوز بطورکامل شروع نشده است سپس پوشه اشتراکی یک بار در آن دردسترس است.</p></translation>
+        <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>افزونه مهمان ویرچوال باکس در ماشین مجازی دردسترس ظاهر نشده است، و پوشه اشتراکی بدون آن قابل استفاده نیست. برای استفاده از پوشه اشتراکی در داخل ماشین مجازی، لطفا افزونه مهمان را نصب کنید اگر آنها نصب نشده است. یا اگر بدرستی کار نمیکند مجددا نصب کنید، گزینه <b>نصب افزونه مهمان</b> را از منوی <b>دستگاه</b> انتخاب کنید. اگر آنها نصب شده اند اما ماشین هنوز بطورکامل شروع نشده است سپس پوشه اشتراکی یک بار در آن دردسترس است.</p></translation>
     </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><p>پنجره ماشین مجازی حالا به حالت <b>تمام صفحه</b> میرود. با فشاردادن <b>%1</b> میتوانید به حالت پنجره ای بروید.</p><p>توجه داشته باشید که کلید <i>میزبان</i> اکنون بعنوان <b>%2</b> تعریف شده است.</p><p>توجه کنید که نوارمنوی اصلی در حالت یکپارچه پنهان است. میتوانید با فشاردادن <b>Host+Home</b> به آن دسترسی داشته باشید.</p></translation>
+        <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>
     </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>
-      <translation><p>پنجره ماشین مجازی حالا به حالت <b>یکپارچه</b> میرود.با فشاردادن <b>%1</b> میتوانید به حالت پنجره ای بروید.</p><p>توجه داشته باشید که کلید <i>میزبان</i> اکنون بعنوان <b>%2</b> تعریف شده است.</p><p>توجه کنید که نوارمنوی اصلی در حالت یکپارچه پنهان است. میتوانید با فشاردادن <b>Host+Home</b> به آن دسترسی داشته باشید.</p></translation>
+        <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>پنجره ماشین مجازی حالا به حالت <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>Scale</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 scaled mode. You can access it by pressing <b>Host+Home</b>.</p></source>
-      <translation><p>پنجره ماشین مجازی حالا به حالت <b>مقیاس</b>میرود. با فشاردادن <b>%1</b> میتوانید به حالت پنجره ای بروید.</p><p>توجه داشته باشید که کلید <i>میزبان</i> اکنون بعنوان <b>%2</b> تعریف شده است.</p><p>توجه کنید که نوارمنوی اصلی در حالت مقیاس پنهان است. میتوانید با فشاردادن <b>Host+Home</b> به آن دسترسی داشته باشید.</p></translation>
+        <source><p>The virtual machine window will be now switched to <b>Scale</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 scaled mode. You can access it by pressing <b>Host+Home</b>.</p></source>
+        <translation><p>پنجره ماشین مجازی حالا به حالت <b>مقیاس</b>میرود. با فشاردادن <b>%1</b> میتوانید به حالت پنجره ای بروید.</p><p>توجه داشته باشید که کلید <i>میزبان</i> اکنون بعنوان <b>%2</b> تعریف شده است.</p><p>توجه کنید که نوارمنوی اصلی در حالت مقیاس پنهان است. میتوانید با فشاردادن <b>Host+Home</b> به آن دسترسی داشته باشید.</p></translation>
     </message>
     <message>
-      <source>Switch</source>
-      <comment>scale</comment>
-      <translation>تعویض</translation>
+        <source>Switch</source>
+        <comment>scale</comment>
+        <translation type="obsolete">تعویض</translation>
     </message>
     <message>
-      <source>Failed to open the Extension Pack <b>%1</b>.</source>
-      <translation>موفق به بازکردن بسته افزونه <b>%1</b> نشد.</translation>
+        <source>Failed to open the Extension Pack <b>%1</b>.</source>
+        <translation>موفق به بازکردن بسته افزونه <b>%1</b> نشد.</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=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1</t [...]
-      <translation><p>شما درصدد نصب بسته افزونه ویرچوال باکس هستید. بسته افزونه مکمل عاملیت ویرچوال باکس هست و محتوی نرم افزار سطح سیستمی هست که میتواند برای سیستم شما مضر باشد. لطفا توضیحات زیر را بازبینی کنید و فقط اگر بسته افزونه را از منبع قابل اطمینان دانلود کرده اید ادامه دهید.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>نام:&nbsp;&nbsp;</b></td><td>%1</td></tr><tr><td><b>نسخه: [...]
+        <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=0><tr><td><b>Name:&nbsp;&nbsp;</b></td><td>%1< [...]
+        <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>&Install</source>
-      <translation>ن&صب</translation>
+        <source>&Install</source>
+        <translation type="obsolete">ن&صب</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>
-      <translation>بسته افزونه مکمل عاملیت ویرچوال باکس است و محتوی نرم افزار سطح سیستمی هست که میتواند برای سیستم مضر باشد. لطفا توضیحات زیر را بازبینی کنید و فقط ادامه دهید اگر شما بسته افزونه را از منبع قابل اطمینان دریافت کرده اید.</translation>
+        <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>
+        <translation>بسته افزونه مکمل عاملیت ویرچوال باکس است و محتوی نرم افزار سطح سیستمی هست که میتواند برای سیستم مضر باشد. لطفا توضیحات زیر را بازبینی کنید و فقط ادامه دهید اگر شما بسته افزونه را از منبع قابل اطمینان دریافت کرده اید.</translation>
     </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=0><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&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</td [...]
+        <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=0><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><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>&Upgrade</source>
-      <translation>ارتق&اء</translation>
+        <source>&Upgrade</source>
+        <translation>ارتق&اء</translation>
     </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=0><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><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</t [...]
+        <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=0><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><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>&Downgrade</source>
-      <translation>&تنزیل</translation>
+        <source>&Downgrade</source>
+        <translation>&تنزیل</translation>
     </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=0><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>&lt [...]
-      <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&g [...]
+        <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=0><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><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>&Reinstall</source>
-      <translation>نصب م&جدد</translation>
+        <source>&Reinstall</source>
+        <translation>نصب م&جدد</translation>
     </message>
     <message>
-      <source><p>You are about to remove the VirtualBox extension pack <b>%1</b>.</p><p>Are you sure you want to proceed?</p></source>
-      <translation><p>شما درصدد حذف بسته افزونه <b>%1</b> هستید.</p><p>آیا واقعا ادامه میدهید؟</p></translation>
+        <source><p>You are about to remove the VirtualBox extension pack <b>%1</b>.</p><p>Are you sure you want to proceed?</p></source>
+        <translation><p>شما درصدد حذف بسته افزونه <b>%1</b> هستید.</p><p>آیا واقعا ادامه میدهید؟</p></translation>
     </message>
     <message>
-      <source>The extension pack <br><nobr><b>%1</b><nobr><br> was installed successfully.</source>
-      <translation>بسته افزونه <br><nobr><b>%1</b><nobr><br> باموفقیت نصب شد.</translation>
+        <source>The extension pack <br><nobr><b>%1</b><nobr><br> was installed successfully.</source>
+        <translation>بسته افزونه <br><nobr><b>%1</b><nobr><br> باموفقیت نصب شد.</translation>
     </message>
     <message>
-      <source><p>Cannot create the machine folder <b>%1</b> in the parent folder <nobr><b>%2</b>.</nobr></p><p>Please check that the parent really exists and that you have permissions to create the machine folder.</p></source>
-      <translation><p>پوشه ماشین <b>%1</b> در پوشه بالایی <nobr><b>%2</b> نمیتوان ایجاد کرد</nobr></p><p> لطفا بررسی کنید پوشه بالایی واقعا وجود دارد و شما اجازه کافی برای ایجاد پوشه ماشین را دارید.</p></translation>
+        <source><p>Cannot create the machine folder <b>%1</b> in the parent folder <nobr><b>%2</b>.</nobr></p><p>Please check that the parent really exists and that you have permissions to create the machine folder.</p></source>
+        <translation><p>پوشه ماشین <b>%1</b> در پوشه بالایی <nobr><b>%2</b> نمیتوان ایجاد کرد</nobr></p><p> لطفا بررسی کنید پوشه بالایی واقعا وجود دارد و شما اجازه کافی برای ایجاد پوشه ماشین را دارید.</p></translation>
     </message>
     <message>
-      <source>Failed to register the virtual machine <b>%1</b>.</source>
-      <translation>موفق به ثبت ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to register the virtual machine <b>%1</b>.</source>
+        <translation>موفق به ثبت ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <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>تنظیمات ماشین حین ویرایش آنها تغییر یافته است. شما اکنون تنظیمات تغییریافته ذخیره نشده دارید.</p><p>آیا میخواهید تنظیمات تغییریافته بارگیری مجدد شود یا تغییراتی را که ایجاد کرده اید حفظ شود؟</p></translation>
+        <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>تنظیمات ماشین حین ویرایش آنها تغییر یافته است. شما اکنون تنظیمات تغییریافته ذخیره نشده دارید.</p><p>آیا میخواهید تنظیمات تغییریافته بارگیری مجدد شود یا تغییراتی را که ایجاد کرده اید حفظ شود؟</p></translation>
     </message>
     <message>
-      <source>Reload settings</source>
-      <translation>بارگیری مجدد تنظیمات</translation>
+        <source>Reload settings</source>
+        <translation>بارگیری مجدد تنظیمات</translation>
     </message>
     <message>
-      <source>Keep changes</source>
-      <translation>حفظ تغییرات</translation>
+        <source>Keep changes</source>
+        <translation>حفظ تغییرات</translation>
     </message>
     <message>
-      <source>The virtual machine that you are changing has been started. Only certain settings can be changed while a machine is running. All other changes will be lost if you close this window now.</source>
-      <translation>ماشین مجازی را که میخواهید تغییر دهید اِجرا شده است. وقتیکه ماشین در اِجراست فقط برخی تنظیمات قابل تغییر است. سایر تغییرات اگر حالا این پنجره بسته شود از دست خواهد رفت.</translation>
+        <source>The virtual machine that you are changing has been started. Only certain settings can be changed while a machine is running. All other changes will be lost if you close this window now.</source>
+        <translation>ماشین مجازی را که میخواهید تغییر دهید اِجرا شده است. وقتیکه ماشین در اِجراست فقط برخی تنظیمات قابل تغییر است. سایر تغییرات اگر حالا این پنجره بسته شود از دست خواهد رفت.</translation>
     </message>
     <message>
-      <source>Failed to clone the virtual machine <b>%1</b>.</source>
-      <translation>موفق به شبیه سازی ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to clone the virtual machine <b>%1</b>.</source>
+        <translation>موفق به شبیه سازی ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Create a snapshot of the current machine state</source>
-      <translation>ایجاد یک ضبط وضعیت از وضعیت فعلی ماشین</translation>
+        <source>Create a snapshot of the current machine state</source>
+        <translation>ایجاد یک ضبط وضعیت از وضعیت فعلی ماشین</translation>
     </message>
     <message>
-      <source><p>Error changing disk image mode from <b>%1</b> to <b>%2</b>.</p></source>
-      <translation><p>خطای تغییر رسانه از <b>%1</b> به <b>%2</b>.</p></translation>
+        <source><p>Error changing disk image mode from <b>%1</b> to <b>%2</b>.</p></source>
+        <translation><p>خطای تغییر رسانه از <b>%1</b> به <b>%2</b>.</p></translation>
     </message>
     <message>
-      <source>Sorry, some generic error happens.</source>
-      <translation>متاسفیم، تعدادی خطای کلی رخ داده است.</translation>
+        <source>Sorry, some generic error happens.</source>
+        <translation type="obsolete">متاسفیم، تعدادی خطای کلی رخ داده است.</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><p>یو اِس بی 2.0 اکنون برای این ماشین مجازی فعال شده است. خهرچند، این نیاز دارد که <b><nobr>%1</nobr></b> نصب شده باشد.</p><p>لطفا بسته افزونه را از سایت برنامه دانلود و نصب کنید. بعداز این شما قادر به فعالسازی مجدد یو اِس بی 2.0 هستید. ان در این فاصله غیرفعال خواهد شد بجز اینکه شما تغییرات تنظیمات فعلی را لغو کنید.</p></translation>
+        <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>
     </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>قادر به بارگیری سرویس پراکسی یو اِس بی میزبان نیست (VERR_FILE_NOT_FOUND). شاید سرویس در رایانه میزبان نصب نشده است</translation>
+        <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>قادر به بارگیری سرویس پراکسی یو اِس بی میزبان نیست (VERR_FILE_NOT_FOUND). شاید سرویس در رایانه میزبان نصب نشده است</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>ویرچوال باکس اکنون اجازه دسترسی به دستگاه یو ایس بی را ندارد.  این را میتوانید با افزودن کاربر خود به گروه 'vboxusers' تغییر دهید.  لطفا برای توضیحات جزئی تر راهنمای کاربری را ببینید</translation>
+        <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>ویرچوال باکس اکنون اجازه دسترسی به دستگاه یو ایس بی را ندارد.  این را میتوانید با افزودن کاربر خود به گروه 'vboxusers' تغییر دهید.  لطفا برای توضیحات جزئی تر راهنمای کاربری را ببینید</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>ویرچوال باکس اکنون اجازه دسترسی به دستگاه یو اِس بی را ندارد.  میتوانید این را با اجازه به کاربر خود برای دسترسی به فایل ها و پوشه های 'usbfs' تغییر دهید.  لطفا برای توضیحات جزئی تر راهنمای کربر را مشاهده کنید</translation>
+        <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>ویرچوال باکس اکنون اجازه دسترسی به دستگاه یو اِس بی را ندارد.  میتوانید این را با اجازه به کاربر خود برای دسترسی به فایل ها و پوشه های 'usbfs' تغییر دهید.  لطفا برای توضیحات جزئی تر راهنمای کربر را مشاهده کنید</translation>
     </message>
     <message>
-      <source>The USB Proxy Service has not yet been ported to this host</source>
-      <translation>سرویس پراکسی یو اِس بی هنوز به این میزبان پورت نشده است</translation>
+        <source>The USB Proxy Service has not yet been ported to this host</source>
+        <translation>سرویس پراکسی یو اِس بی هنوز به این میزبان پورت نشده است</translation>
     </message>
     <message>
-      <source>Could not load the Host USB Proxy service</source>
-      <translation>قادر به بارگیری سرویس پراکسی یو اِس بی میزبان نیست</translation>
+        <source>Could not load the Host USB Proxy service</source>
+        <translation>قادر به بارگیری سرویس پراکسی یو اِس بی میزبان نیست</translation>
     </message>
     <message>
-      <source>Can't find snapshot named <b>%1</b>.</source>
-      <translation>نمیتوان ضبط وضعیتی با نام <b>%1</b> یافت.</translation>
+        <source>Can't find snapshot named <b>%1</b>.</source>
+        <translation>نمیتوان ضبط وضعیتی با نام <b>%1</b> یافت.</translation>
     </message>
     <message>
-      <source><p>Failed to save the downloaded file as <nobr><b>%1</b>.</nobr></p></source>
-      <translation><p>موفق به ذخیره فایل دانلود شده بعنوان <nobr><b>%1</b> نشد. </nobr></p></translation>
+        <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>
     </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>
-      <translation><p>Yشما نسخه قدیمی (%1) از <b><nobr>%2</nobr></b> را نصب کرده اید.</p><p>آیا میخواهید جدیدترین نسخه را از اینترنت دانلود کنید؟</p></translation>
+        <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>Yشما نسخه قدیمی (%1) از <b><nobr>%2</nobr></b> را نصب کرده اید.</p><p>آیا میخواهید جدیدترین نسخه را از اینترنت دانلود کنید؟</p></translation>
     </message>
     <message>
-      <source>Download</source>
-      <comment>extension pack</comment>
-      <translation>دانلود</translation>
+        <source>Download</source>
+        <comment>extension pack</comment>
+        <translation type="obsolete">دانلود</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>
-      <translation><p>آیا میخواهید  <b><nobr>%1</nobr></b> را از <nobr><a href="%2">%2</a></nobr> (حجم %3 بایت)دانلود کنید؟</p></translation>
+        <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>
+        <translation><p>آیا میخواهید  <b><nobr>%1</nobr></b> را از <nobr><a href="%2">%2</a></nobr> (حجم %3 بایت)دانلود کنید؟</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></p><p>Do you wish to install this extension pack?</p></source>
-      <translation><p>The <b><nobr>%1</nobr></b> با موفقیت دانلود شده است از <nobr><a href="%2">%2</a></nobr> و بطور محلی بعنوان <nobr><b>%3</b> ذخیره شده است. </nobr></p><p>آیا میخواهید بسته افزونه را نصب کنید؟</p></translation>
+        <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></p><p>Do you wish to install this extension pack?</p></source>
+        <translation><p>The <b><nobr>%1</nobr></b> با موفقیت دانلود شده است از <nobr><a href="%2">%2</a></nobr> و بطور محلی بعنوان <nobr><b>%3</b> ذخیره شده است. </nobr></p><p>آیا میخواهید بسته افزونه را نصب کنید؟</p></translation>
     </message>
     <message>
-      <source>Install</source>
-      <comment>extension pack</comment>
-      <translation>نصب</translation>
+        <source>Install</source>
+        <comment>extension pack</comment>
+        <translation>نصب</translation>
     </message>
     <message>
-      <source><p>The <b><nobr>%1</nobr></b> has been successfully downloaded from <nobr><a href="%2">%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><p>The <b><nobr>%1</nobr></b> با موفقیت دانلود شده است از <nobr><a href="%2">%2</a></nobr> اما نمیتواند بطور محلی یعنوان <nobr><b>%3</b> ذخیره شود. </nobr></p><p>لطفا برای آن فایل محلی دیگر را انتخاب کنید؟.</p></translation>
+        <source><p>The <b><nobr>%1</nobr></b> has been successfully downloaded from <nobr><a href="%2">%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><p>The <b><nobr>%1</nobr></b> با موفقیت دانلود شده است از <nobr><a href="%2">%2</a></nobr> اما نمیتواند بطور محلی یعنوان <nobr><b>%3</b> ذخیره شود. </nobr></p><p>لطفا برای آن فایل محلی دیگر را انتخاب کنید؟.</p></translation>
     </message>
     <message>
-      <source><p>You have version %1 of the <b><nobr>%2</nobr></b> installed.</p><p>You should download and install version %3 of this extension pack from Oracle!</p></source>
-      <translation><p>شما نسخه %1 از <b><nobr>%2</nobr></b> نصب کرده اید.</p><p>شما باید نسخه %3 این بسته افزونه را از اوراکل دانلود و نصب کنید!</p></translation>
+        <source><p>You have version %1 of the <b><nobr>%2</nobr></b> installed.</p><p>You should download and install version %3 of this extension pack from Oracle!</p></source>
+        <translation><p>شما نسخه %1 از <b><nobr>%2</nobr></b> نصب کرده اید.</p><p>شما باید نسخه %3 این بسته افزونه را از اوراکل دانلود و نصب کنید!</p></translation>
     </message>
     <message>
-      <source>Ok</source>
-      <comment>extension pack</comment>
-      <translation>تأیید</translation>
+        <source>Ok</source>
+        <comment>extension pack</comment>
+        <translation type="obsolete">تأیید</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>
-      <translation><p>موفق به مقداردهی کام نشد زیرا دایرکتوری پیکربندی سراسری ویرچوال باکس <b><nobr>%1</nobr></b> قابل دسترسی نیست. لطفا سطح دسترسی این پوشه و پوشه بالایی آن را بررسی کنید.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
+        <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>موفق به مقداردهی کام نشد زیرا دایرکتوری پیکربندی سراسری ویرچوال باکس <b><nobr>%1</nobr></b> قابل دسترسی نیست. لطفا سطح دسترسی این پوشه و پوشه بالایی آن را بررسی کنید.</p><p>برنامه حالا بسته خواهد شد.</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>
-      <comment>This text is never used with n == 0.  Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many machines are in the list and doesn't need to be told).</comment>
-      <translation>
-        <numerusform>p>این %n ماشین مجازی زیر اکنون در وضعیت ذخیره شده هستند: <b>%1</b></p><p>اگر ادامه دهید وضعیت زمان اِجرای ماشین خروجیگیری شده لغو خواهد شد. سایر ماشین ها تغییر نخواهد کرد.</p</numerusform>
-      </translation>
+        <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">
+            <numerusform>p>این %n ماشین مجازی زیر اکنون در وضعیت ذخیره شده هستند: <b>%1</b></p><p>اگر ادامه دهید وضعیت زمان اِجرای ماشین خروجیگیری شده لغو خواهد شد. سایر ماشین ها تغییر نخواهد کرد.</p</numerusform>
+        </translation>
     </message>
     <message>
-      <source><p>You are about to remove following virtual machine items from the machine list:</p><p><b>%1</b></p><p>Do you wish to proceed?</p></source>
-      <translation><p>شما درصدد حذف ماشین مجازی زیر از لیست ماشین زیر هستید:</p><p><b>%1</b></p><p>آیا ادامه میدهید؟</p></translation>
+        <source><p>You are about to remove following virtual machine items from the machine list:</p><p><b>%1</b></p><p>Do you wish to proceed?</p></source>
+        <translation><p>شما درصدد حذف ماشین مجازی زیر از لیست ماشین زیر هستید:</p><p><b>%1</b></p><p>آیا ادامه میدهید؟</p></translation>
     </message>
     <message>
-      <source><p>You are about to remove following inaccessible virtual machines from the machine list:</p><p>%1</p><p>Do you wish to proceed?</p></source>
-      <translation><p>شما درصدد حذف ماشین مجازی غیرقابل دسترس زیر از لیست ماشین هستید:</p><p>%1</p><p>آیا ادامه میدهید؟</p></translation>
+        <source><p>You are about to remove following inaccessible virtual machines from the machine list:</p><p>%1</p><p>Do you wish to proceed?</p></source>
+        <translation><p>شما درصدد حذف ماشین مجازی غیرقابل دسترس زیر از لیست ماشین هستید:</p><p>%1</p><p>آیا ادامه میدهید؟</p></translation>
     </message>
     <message>
-      <source><p>You are about to remove following virtual machines from the machine list:</p><p>%1</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well? Doing this will also remove the files containing the machine's virtual hard disks if they are not in use by another machine.</p></source>
-      <translation><p>شما درصدد حذف ماشین مجازی زیر از لیست ماشین هستید:</p><p>%1</p><p>آیا میخواهید فایل های محتوی ماشین مجازی را هم همچنین از دیسک سخت حذف کنید؟ انجام این همچنین فایل های موجود در دیسک سخت مجازی را حذف میکند اگر آن توسط ماشین دیگری در حال استفاده نباشد.</p></translation>
+        <source><p>You are about to remove following virtual machines from the machine list:</p><p>%1</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well? Doing this will also remove the files containing the machine's virtual hard disks if they are not in use by another machine.</p></source>
+        <translation><p>شما درصدد حذف ماشین مجازی زیر از لیست ماشین هستید:</p><p>%1</p><p>آیا میخواهید فایل های محتوی ماشین مجازی را هم همچنین از دیسک سخت حذف کنید؟ انجام این همچنین فایل های موجود در دیسک سخت مجازی را حذف میکند اگر آن توسط ماشین دیگری در حال استفاده نباشد.</p></translation>
     </message>
     <message>
-      <source><p>You are about to remove following virtual machines from the machine list:</p><p>%1</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well?</p></source>
-      <translation><p>شما درصدد حذف ماشین مجازی از لیست ماشین زیر هستید:</p><p>%1</p><p>آیا میخواهید فایل های شامل ماشین مجازی را از دیسک سخت همچنین حذف کنید؟</p></translation>
+        <source><p>You are about to remove following virtual machines from the machine list:</p><p>%1</p><p>Would you like to delete the files containing the virtual machine from your hard disk as well?</p></source>
+        <translation><p>شما درصدد حذف ماشین مجازی از لیست ماشین زیر هستید:</p><p>%1</p><p>آیا میخواهید فایل های شامل ماشین مجازی را از دیسک سخت همچنین حذف کنید؟</p></translation>
     </message>
     <message>
-      <source>Do you wish to cancel all current network operations?</source>
-      <translation>آیا میخواهید همه عملکردهای شبکه فعلی را لغو کنید؟</translation>
+        <source>Do you wish to cancel all current network operations?</source>
+        <translation>آیا میخواهید همه عملکردهای شبکه فعلی را لغو کنید؟</translation>
     </message>
     <message>
-      <source>ACPI Shutdown</source>
-      <comment>machine</comment>
-      <translation>شات دان اِی سی پی آی</translation>
+        <source>ACPI Shutdown</source>
+        <comment>machine</comment>
+        <translation>شات دان اِی سی پی آی</translation>
     </message>
     <message>
-      <source>Power Off</source>
-      <comment>machine</comment>
-      <translation>قطع برق</translation>
+        <source>Power Off</source>
+        <comment>machine</comment>
+        <translation>قطع برق</translation>
     </message>
     <message>
-      <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>پوشه ماشین <nobr><b>%1</b> را نمیتوان حذف کرد.</nobr></p><p>لطفا بررسی کنید این پوشه واقعا وجود دارد و شما اجازه حذف آن را دارید.</p></translation>
+        <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>پوشه ماشین <nobr><b>%1</b> را نمیتوان حذف کرد.</nobr></p><p>لطفا بررسی کنید این پوشه واقعا وجود دارد و شما اجازه حذف آن را دارید.</p></translation>
     </message>
     <message>
-      <source><p>Cannot create the machine folder <b>%1</b> in the parent folder <nobr><b>%2</b>.</nobr></p><p>This folder already exists and possibly belongs to another machine.</p></source>
-      <translation><p>پوشه ماشین <b>%1</b> را در پوشه بالایی <nobr><b>%2</b> نمیتوان ایجاد کرد.</nobr></p><p>این پوشه از قبل وجود دارد و احتمالا به ماشین دیگری تعلق دارد.</p></translation>
+        <source><p>Cannot create the machine folder <b>%1</b> in the parent folder <nobr><b>%2</b>.</nobr></p><p>This folder already exists and possibly belongs to another machine.</p></source>
+        <translation><p>پوشه ماشین <b>%1</b> را در پوشه بالایی <nobr><b>%2</b> نمیتوان ایجاد کرد.</nobr></p><p>این پوشه از قبل وجود دارد و احتمالا به ماشین دیگری تعلق دارد.</p></translation>
     </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>شما درصدد ایجاد یک ماشین مجازی جدید بدون درایو سخت هستید؟. تا زمانیکه یکی اضافه نکنید قادر به نصب سیستم عامل نیستید. در این زمان شما فقط قادر به شروع ماشین توسط دیسک نوری مجازی یا از شبکه هستید؟.</translation>
+        <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>
     </message>
     <message>
-      <source>Failed to drop data.</source>
-      <translation>موفق به رها کردن داده نشد.</translation>
+        <source>Failed to drop data.</source>
+        <translation type="obsolete">موفق به رها کردن داده نشد.</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><p>قادر به یافتن فایل ایمیج سی دی افزونه مهمان ویرچوال باکس نیست.</nobr></p><p>آیا میخواهید ایمیج سی دی را از اینترنت دانلود کنید؟</p></translation>
+        <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>
     </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>
-      <translation><p>آیا میخواهید وضعیت ماشین ذخیره شده زیر را لغو کنید؟</p><p><b>%1</b></p><p>این عملکرد معادل ریست یا قطع برق ماشین بدون انجام شات دان مناسب سیستم عامل مهمان است.</p></translation>
+        <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>آیا میخواهید وضعیت ماشین ذخیره شده زیر را لغو کنید؟</p><p><b>%1</b></p><p>این عملکرد معادل ریست یا قطع برق ماشین بدون انجام شات دان مناسب سیستم عامل مهمان است.</p></translation>
     </message>
     <message>
-      <source><p>Do you really want to reset the following virtual machines?</p><p><b>%1</b></p><p>This will cause any unsaved data in applications running inside it to be lost.</p></source>
-      <translation><p>آیا واقعا میخواهید ماشین مجازی زیر را ریست کنید؟</p><p><b>%1</b></p><p>این باعث میشود داده های ذخیره نشده درحال اِجرا در داخل آن از دست برود.</p></translation>
+        <source><p>Do you really want to reset the following virtual machines?</p><p><b>%1</b></p><p>This will cause any unsaved data in applications running inside it to be lost.</p></source>
+        <translation><p>آیا واقعا میخواهید ماشین مجازی زیر را ریست کنید؟</p><p><b>%1</b></p><p>این باعث میشود داده های ذخیره نشده درحال اِجرا در داخل آن از دست برود.</p></translation>
     </message>
     <message>
-      <source><p>Do you really want to send an ACPI shutdown signal to the following virtual machines?</p><p><b>%1</b></p></source>
-      <translation><p>آیا میخواهید یک سیگنال شات دان اِی سی پی آی به ماشین مجازی زیر ارسال کنید؟</p><p><b>%1</b></p></translation>
+        <source><p>Do you really want to send an ACPI shutdown signal to the following virtual machines?</p><p><b>%1</b></p></source>
+        <translation><p>آیا میخواهید یک سیگنال شات دان اِی سی پی آی به ماشین مجازی زیر ارسال کنید؟</p><p><b>%1</b></p></translation>
     </message>
     <message>
-      <source><p>Do you really want to power off the following virtual machines?</p><p><b>%1</b></p><p>This will cause any unsaved data in applications running inside it to be lost.</p></source>
-      <translation><p>آیا میخواهید ماشین مجازی زیر را قطع برق کنید؟</p><p><b>%1</b></p><p>این باعث میشود داده های ذخیره نشده درحال اِجرا در داخل آن از دست برود.</p></translation>
+        <source><p>Do you really want to power off the following virtual machines?</p><p><b>%1</b></p><p>This will cause any unsaved data in applications running inside it to be lost.</p></source>
+        <translation><p>آیا میخواهید ماشین مجازی زیر را قطع برق کنید؟</p><p><b>%1</b></p><p>این باعث میشود داده های ذخیره نشده درحال اِجرا در داخل آن از دست برود.</p></translation>
     </message>
     <message>
-      <source><p>You are trying to move machine <nobr><b>%1</b></nobr> to group <nobr><b>%2</b></nobr> which already have sub-group <nobr><b>%1</b></nobr>.</p><p>Please resolve this name-conflict and try again.</p></source>
-      <translation><p>شما درصدد انتقال ماشین <nobr><b>%1</b></nobr> به گروه <nobr><b>%2</b></nobr> که از قبل زیرگروه <nobr><b>%1</b></nobr> را دارد هستید.</p><p>لطفا این ناسازگاری نام را برطرف و دوباره سعی کنید.</p></translation>
+        <source><p>You are trying to move machine <nobr><b>%1</b></nobr> to group <nobr><b>%2</b></nobr> which already have sub-group <nobr><b>%1</b></nobr>.</p><p>Please resolve this name-conflict and try again.</p></source>
+        <translation><p>شما درصدد انتقال ماشین <nobr><b>%1</b></nobr> به گروه <nobr><b>%2</b></nobr> که از قبل زیرگروه <nobr><b>%1</b></nobr> را دارد هستید.</p><p>لطفا این ناسازگاری نام را برطرف و دوباره سعی کنید.</p></translation>
     </message>
     <message>
-      <source><p>You are trying to move group <nobr><b>%1</b></nobr> to group <nobr><b>%2</b></nobr> which already have another item with the same name.</p><p>Would you like to automatically rename it?</p></source>
-      <translation><p>شما درصدد انتقال گروه <nobr><b>%1</b></nobr> به گروه <nobr><b>%2</b></nobr> که از قبل آیتمی دیگر با همین نام دارد هستید.</p><p>میخواهید آن خودکار تغییرنام داده شود؟</p></translation>
+        <source><p>You are trying to move group <nobr><b>%1</b></nobr> to group <nobr><b>%2</b></nobr> which already have another item with the same name.</p><p>Would you like to automatically rename it?</p></source>
+        <translation><p>شما درصدد انتقال گروه <nobr><b>%1</b></nobr> به گروه <nobr><b>%2</b></nobr> که از قبل آیتمی دیگر با همین نام دارد هستید.</p><p>میخواهید آن خودکار تغییرنام داده شود؟</p></translation>
     </message>
     <message>
-      <source>Rename</source>
-      <translation>تغییرنام</translation>
+        <source>Rename</source>
+        <translation>تغییرنام</translation>
     </message>
     <message>
-      <source><p>You are about to restore snapshot <nobr><b>%1</b></nobr>.</p><p>You can create a snapshot of the current state of the virtual machine first by checking the box below; if you do not do this the current state will be permanently lost. Do you wish to proceed?</p></source>
-      <translation><p>شما درصدد بازگردانی ضبط وضعیت <nobr><b>%1</b></nobr> هستید؟</p><p>شما میتوانید از وضعیت فعلی ماشین مجازی با انتخاب گزینه زیر یک ضبط وضعیت ایجاد کنید اگر این کار را انجام ندهید،این وضعیت کاملا از دست میرود. آیا ادامه میدهید؟</p></translation>
+        <source><p>You are about to restore snapshot <nobr><b>%1</b></nobr>.</p><p>You can create a snapshot of the current state of the virtual machine first by checking the box below; if you do not do this the current state will be permanently lost. Do you wish to proceed?</p></source>
+        <translation><p>شما درصدد بازگردانی ضبط وضعیت <nobr><b>%1</b></nobr> هستید؟</p><p>شما میتوانید از وضعیت فعلی ماشین مجازی با انتخاب گزینه زیر یک ضبط وضعیت ایجاد کنید اگر این کار را انجام ندهید،این وضعیت کاملا از دست میرود. آیا ادامه میدهید؟</p></translation>
     </message>
     <message>
-      <source><p>Are you sure you want to restore snapshot <nobr><b>%1</b></nobr>?</p></source>
-      <translation><p>آیا مطمئن هستید میخواهید ضبط وضعیت <nobr><b>%1</b></nobr> را بازگردانی کنید؟</p></translation>
+        <source><p>Are you sure you want to restore snapshot <nobr><b>%1</b></nobr>?</p></source>
+        <translation><p>آیا مطمئن هستید میخواهید ضبط وضعیت <nobr><b>%1</b></nobr> را بازگردانی کنید؟</p></translation>
     </message>
     <message>
-      <source>Failed to set groups of the virtual machine <b>%1</b>.</source>
-      <translation>موفق به تنظیم گروه ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to set groups of the virtual machine <b>%1</b>.</source>
+        <translation>موفق به تنظیم گروه ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <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>قادر به اِجرای ماشین <b>%1</b> نیست زیرا رابط شبکه فیزیکی زیر یافت نشد:</p><p><b>%2</b></p><p>میتوانید تنظیمات شبکه ماشین را تغییر دهید یا ماشین را متوقف کنید.</p></translation>
+        <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>قادر به اِجرای ماشین <b>%1</b> نیست زیرا رابط شبکه فیزیکی زیر یافت نشد:</p><p><b>%2</b></p><p>میتوانید تنظیمات شبکه ماشین را تغییر دهید یا ماشین را متوقف کنید.</p></translation>
     </message>
     <message>
-      <source>Change Network Settings</source>
-      <translation>تغییر تنظیمات شبکه</translation>
+        <source>Change Network Settings</source>
+        <translation>تغییر تنظیمات شبکه</translation>
     </message>
     <message>
-      <source>Close Virtual Machine</source>
-      <translation>بستن ماشین مجازی</translation>
+        <source>Close Virtual Machine</source>
+        <translation type="obsolete">بستن ماشین مجازی</translation>
     </message>
     <message>
-      <source><p>Cannot start the VirtualBox Manager due to local restrictions.</p><p>The application will now terminate.</p></source>
-      <translation><p>به علت محدودیت محلی نمیتوان مدیر ویرچوال باکس را اجرا کرد.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
+        <source><p>Cannot start the VirtualBox Manager due to local restrictions.</p><p>The application will now terminate.</p></source>
+        <translation><p>به علت محدودیت محلی نمیتوان مدیر ویرچوال باکس را اجرا کرد.</p><p>برنامه حالا بسته خواهد شد.</p></translation>
     </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 VirtualBox Manager window, and select one of the existing languages on the <b>Language</b> page.</p></source>
-      <translation><p>قادر به یافتن فایل زبان برای زبان <b>%1</b> در دایرکتوری زیر نیست: <b><nobr>%2</nobr></b> </p><p>زبان موقتا به زبان پیش فرض سیستم ریست خواهد شد. لطفا به پنجره. <b>اولویت ها</b> بروید که آن را میتوان از منوی <b>فایل</b> در پنجره اصلی برنامه یافت، و یکی از زبان های موجود در صفحه <b>زبان</b> را انتخاب کنید.</p></translation>
+        <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 VirtualBox Manager window, and select one of the existing languages on the <b>Language</b> page.</p></source>
+        <translation><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 VirtualBox Manager window, and select one of the existing languages on the <b>Language</b> page.</p></source>
-      <translation><p>قادر به بارگیری فایل زبان <b><nobr>%1</nobr></b> نیست. <p>زبان موقتا به زبان توکار برنامه یعنی انگلیسی ریست میشود. لطفا به پنجره <b>اولویت ها</b> بروید که میتوانید آن را از منوی <b>فایل</b> از پنجره اصلی برنامه باز کنید، و یکی از زبانهای موجود را از صفحه <b>زبان</b> انتخاب کنید.</p></translation>
+        <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 VirtualBox Manager window, and select one of the existing languages on the <b>Language</b> page.</p></source>
+        <translation><p>قادر به بارگیری فایل زبان <b><nobr>%1</nobr></b> نیست. <p>زبان موقتا به زبان توکار برنامه یعنی انگلیسی ریست میشود. لطفا به پنجره <b>اولویت ها</b> بروید که میتوانید آن را از منوی <b>فایل</b> از پنجره اصلی برنامه باز کنید، و یکی از زبانهای موجود را از صفحه <b>زبان</b> انتخاب کنید.</p></translation>
     </message>
     <message>
-      <source>There is no virtual machine with the identifier <b>%1</b>.</source>
-      <translation>ماشین مجازی با شناسه <b>%1</b> وجود ندارد.</translation>
+        <source>There is no virtual machine with the identifier <b>%1</b>.</source>
+        <translation>ماشین مجازی با شناسه <b>%1</b> وجود ندارد.</translation>
     </message>
     <message>
-      <source>Ignore</source>
-      <translation>چشمپوشی</translation>
+        <source>Ignore</source>
+        <translation>چشمپوشی</translation>
     </message>
     <message>
-      <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>آیا میخواهید شبکه NAT <nobr><b>%1</b> را حذف کنید؟</nobr></p><p> اگر این شبکه بایک یا تعداد بیشتری آداپتور شبکه ماشین مجازی در حال استفاده باشد دیگر قابل استفاده نخواهد بود تا زمانیکه یا نام شبکه متفاوت انتخاب کرده یا نوع ضمیمه آداپتور متفاوت انتخاب کرد.</p></translation>
+        <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>آیا میخواهید شبکه NAT <nobr><b>%1</b> را حذف کنید؟</nobr></p><p> اگر این شبکه بایک یا تعداد بیشتری آداپتور شبکه ماشین مجازی در حال استفاده باشد دیگر قابل استفاده نخواهد بود تا زمانیکه یا نام شبکه متفاوت انتخاب کرده یا نوع ضمیمه آداپتور متفاوت انتخاب کرد.</p></translation>
     </message>
     <message>
-      <source>Failed to create NAT network.</source>
-      <translation>موفق به ایجاد شبکه NAT نشد.</translation>
+        <source>Failed to create NAT network.</source>
+        <translation>موفق به ایجاد شبکه NAT نشد.</translation>
     </message>
     <message>
-      <source>Failed to remove NAT network <b>%1</b>.</source>
-      <translation>موفق به حذف شبکه NAT <b>%1</b> نشد.</translation>
+        <source>Failed to remove NAT network <b>%1</b>.</source>
+        <translation>موفق به حذف شبکه NAT <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to create DHCP server.</source>
-      <translation>موفق به ایجاد سرور DHCP نشد.</translation>
+        <source>Failed to create DHCP server.</source>
+        <translation>موفق به ایجاد سرور DHCP نشد.</translation>
     </message>
     <message>
-      <source>Failed to remove DHCP server for network interface <b>%1</b>.</source>
-      <translation>موفق به حذف سرور DHCP برای رابطه شبکه <b>%1</b> نشد.</translation>
+        <source>Failed to remove DHCP server for network interface <b>%1</b>.</source>
+        <translation>موفق به حذف سرور DHCP برای رابطه شبکه <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to create the host network interface.</source>
-      <translation>موفق به ایجاد رابط شبکه میزبان نشد.</translation>
+        <source>Failed to create the host network interface.</source>
+        <translation>موفق به ایجاد رابط شبکه میزبان نشد.</translation>
     </message>
     <message>
-      <source>Create &new disk</source>
-      <translation>ایجاد دیسک &جدید</translation>
+        <source>Create &new disk</source>
+        <translation>ایجاد دیسک &جدید</translation>
     </message>
     <message>
-      <source>&Choose existing disk</source>
-      <translation>انتخاب دی&سک موجود</translation>
+        <source>&Choose existing disk</source>
+        <translation>انتخاب دی&سک موجود</translation>
     </message>
     <message>
-      <source>Leave &empty</source>
-      <translation>خالی &بگذار</translation>
+        <source>Leave &empty</source>
+        <translation>خالی &بگذار</translation>
     </message>
     <message>
-      <source>&Choose disk</source>
-      <translation>انتخاب د&یسک</translation>
+        <source>&Choose disk</source>
+        <translation>انتخاب د&یسک</translation>
     </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><p>آیا میخواهید دیسک سخت مجازی <nobr><b>%1</b></nobr> ترخیص شود؟ </p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
+        <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>
     </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><p>آیا میخواهید دیسک نوری مجازی <nobr><b>%1</b></nobr> را ترخیص کنید؟ </p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
+        <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>
     </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><p>آیا میخواهید دیسک فلاپی مجازی <nobr><b>%1</b></nobr> را ترخیص کنید؟</p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
+        <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>
     </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>
-      <translation><p>آیا میخواهید دیسک سخت مجازی <nobr><b>%1</b></nobr> را از لیست فایل های دیسک ایمیج شناخته شده حذف کنید؟</p></translation>
+        <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>آیا میخواهید دیسک سخت مجازی <nobr><b>%1</b></nobr> را از لیست فایل های دیسک ایمیج شناخته شده حذف کنید؟</p></translation>
     </message>
     <message>
-      <source><p>As this hard disk is inaccessible its image file can not be deleted.</p></source>
-      <translation><p>از آنجا که این دیسک سخت  قابل دسترسی نیست،فایل ایمیج آن را نمیتوان حذف کرد.</p></translation>
+        <source><p>As this hard disk is inaccessible its image file can not be deleted.</p></source>
+        <translation><p>از آنجا که این دیسک سخت  قابل دسترسی نیست،فایل ایمیج آن را نمیتوان حذف کرد.</p></translation>
     </message>
     <message>
-      <source><p>Are you sure you want to remove the virtual optical disk <nobr><b>%1</b></nobr> from the list of known disk image files?</p></source>
-      <translation><p>آیا میخواهید دیسک نوری مجازی <nobr><b>%1</b></nobr> را از لیست فایل های ایمیج شناخته شده حذف کنید؟</p></translation>
+        <source><p>Are you sure you want to remove the virtual optical disk <nobr><b>%1</b></nobr> from the list of known disk image files?</p></source>
+        <translation><p>آیا میخواهید دیسک نوری مجازی <nobr><b>%1</b></nobr> را از لیست فایل های ایمیج شناخته شده حذف کنید؟</p></translation>
     </message>
     <message>
-      <source><p>Are you sure you want to remove the virtual floppy disk <nobr><b>%1</b></nobr> from the list of known disk image files?</p></source>
-      <translation><p>آیا میخواهید دیسک فلاپی مجازی <nobr><b>%1</b></nobr> را از لیست فایل های دیسک ایمیج شناخته شده حذف کنید؟</p></translation>
+        <source><p>Are you sure you want to remove the virtual floppy disk <nobr><b>%1</b></nobr> from the list of known disk image files?</p></source>
+        <translation><p>آیا میخواهید دیسک فلاپی مجازی <nobr><b>%1</b></nobr> را از لیست فایل های دیسک ایمیج شناخته شده حذف کنید؟</p></translation>
     </message>
     <message>
-      <source><p>Unable to insert the virtual optical disk <nobr><b>%1</b></nobr> into the machine <b>%2</b>.</p></source>
-      <translation><p>قادر به قراردادن دیسک نوری مجازی <nobr><b>%1</b></nobr> در ماشین <b>%2</b> نیست.</p></translation>
+        <source><p>Unable to insert the virtual optical disk <nobr><b>%1</b></nobr> into the machine <b>%2</b>.</p></source>
+        <translation><p>قادر به قراردادن دیسک نوری مجازی <nobr><b>%1</b></nobr> در ماشین <b>%2</b> نیست.</p></translation>
     </message>
     <message>
-      <source><p>Would you like to try to force insertion of this disk?</p></source>
-      <translation><p>آیا میخواهید این دیسک را اجباری قرار دهید؟</p></translation>
+        <source><p>Would you like to try to force insertion of this disk?</p></source>
+        <translation><p>آیا میخواهید این دیسک را اجباری قرار دهید؟</p></translation>
     </message>
     <message>
-      <source><p>Unable to eject the virtual optical disk <nobr><b>%1</b></nobr> from the machine <b>%2</b>.</p></source>
-      <translation><p>قادر به ایجکت دیسک نوری مجازی <nobr><b>%1</b></nobr> از ماشین <b>%2</b> نیست.</p></translation>
+        <source><p>Unable to eject the virtual optical disk <nobr><b>%1</b></nobr> from the machine <b>%2</b>.</p></source>
+        <translation><p>قادر به ایجکت دیسک نوری مجازی <nobr><b>%1</b></nobr> از ماشین <b>%2</b> نیست.</p></translation>
     </message>
     <message>
-      <source><p>Would you like to try to force ejection of this disk?</p></source>
-      <translation><p>آیا میخواهید این دیسک را ایجکت اجباری کنید؟</p></translation>
+        <source><p>Would you like to try to force ejection of this disk?</p></source>
+        <translation><p>آیا میخواهید این دیسک را ایجکت اجباری کنید؟</p></translation>
     </message>
     <message>
-      <source><p>Unable to insert the virtual floppy disk <nobr><b>%1</b></nobr> into the machine <b>%2</b>.</p></source>
-      <translation><p>قادر به قراردادن دیسک فلاپی مجازی <nobr><b>%1</b></nobr> در ماشین <b>%2</b> نیست.</p></translation>
+        <source><p>Unable to insert the virtual floppy disk <nobr><b>%1</b></nobr> into the machine <b>%2</b>.</p></source>
+        <translation><p>قادر به قراردادن دیسک فلاپی مجازی <nobr><b>%1</b></nobr> در ماشین <b>%2</b> نیست.</p></translation>
     </message>
     <message>
-      <source><p>Unable to eject the virtual floppy disk <nobr><b>%1</b></nobr> from the machine <b>%2</b>.</p></source>
-      <translation><p>قادر به ایجکت دیسک مجازی فلاپی <nobr><b>%1</b></nobr> از ماشین <b>%2</b> نیست.</p></translation>
+        <source><p>Unable to eject the virtual floppy disk <nobr><b>%1</b></nobr> from the machine <b>%2</b>.</p></source>
+        <translation><p>قادر به ایجکت دیسک مجازی فلاپی <nobr><b>%1</b></nobr> از ماشین <b>%2</b> نیست.</p></translation>
     </message>
     <message>
-      <source>Failed to open the hard disk file <nobr><b>%1</b></nobr>.</source>
-      <translation>موفق به بازکردن فایل دیسک سخت <nobr><b>%1</b></nobr> نشد.</translation>
+        <source>Failed to open the hard disk file <nobr><b>%1</b></nobr>.</source>
+        <translation type="obsolete">موفق به بازکردن فایل دیسک سخت <nobr><b>%1</b></nobr> نشد.</translation>
     </message>
     <message>
-      <source>Failed to open the optical disk file <nobr><b>%1</b></nobr>.</source>
-      <translation>موفق به بازکردن فایل دیسک نوری <nobr><b>%1</b></nobr> نشد.</translation>
+        <source>Failed to open the optical disk file <nobr><b>%1</b></nobr>.</source>
+        <translation type="obsolete">موفق به بازکردن فایل دیسک نوری <nobr><b>%1</b></nobr> نشد.</translation>
     </message>
     <message>
-      <source>Failed to open the floppy disk file <nobr><b>%1</b></nobr>.</source>
-      <translation>موفق به بازکردن فایل فلاپی دیسک <nobr><b>%1</b></nobr> نشد.</translation>
+        <source>Failed to open the floppy disk file <nobr><b>%1</b></nobr>.</source>
+        <translation type="obsolete">موفق به بازکردن فایل فلاپی دیسک <nobr><b>%1</b></nobr> نشد.</translation>
     </message>
     <message>
-      <source>Failed to close the hard disk file <nobr><b>%2</b></nobr>.</source>
-      <translation>موفق به بستن فایل دیسک سخت <nobr><b>%2</b></nobr> نشد.</translation>
+        <source>Failed to close the hard disk file <nobr><b>%2</b></nobr>.</source>
+        <translation type="obsolete">موفق به بستن فایل دیسک سخت <nobr><b>%2</b></nobr> نشد.</translation>
     </message>
     <message>
-      <source>Failed to close the optical disk file <nobr><b>%2</b></nobr>.</source>
-      <translation>موفق به بستن فایل دیسک نوری <nobr><b>%2</b></nobr> نشد.</translation>
+        <source>Failed to close the optical disk file <nobr><b>%2</b></nobr>.</source>
+        <translation type="obsolete">موفق به بستن فایل دیسک نوری <nobr><b>%2</b></nobr> نشد.</translation>
     </message>
     <message>
-      <source>Failed to close the floppy disk file <nobr><b>%2</b></nobr>.</source>
-      <translation>موفق به بستن فایل فلاپی دیسک <nobr><b>%2</b></nobr> نشد.</translation>
+        <source>Failed to close the floppy disk file <nobr><b>%2</b></nobr>.</source>
+        <translation type="obsolete">موفق به بستن فایل فلاپی دیسک <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>
-      <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many machines are in the list and doesn't need to be told).</comment>
-      <translation>
-        <numerusform>p>این %n ماشین مجازی زیر اکنون در وضعیت ذخیره شده هستند: <b>%1</b></p><p>اگر ادامه دهید وضعیت زمان اِجرای ماشین خروجیگیری شده لغو خواهد شد. سایر ماشین ها تغییر نخواهد کرد.</p</numerusform>
-      </translation>
+        <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source>
+        <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many machines are in the list and doesn't need to be told).</comment>
+        <translation>
+            <numerusform>p>این %n ماشین مجازی زیر اکنون در وضعیت ذخیره شده هستند: <b>%1</b></p><p>اگر ادامه دهید وضعیت زمان اِجرای ماشین خروجیگیری شده لغو خواهد شد. سایر ماشین ها تغییر نخواهد کرد.</p</numerusform>
+        </translation>
+    </message>
+    <message>
+        <source>Switch</source>
+        <translation>تعویض</translation>
     </message>
     <message>
-      <source>Switch</source>
-      <translation>تعویض</translation>
+        <source>Failed to enable the remote desktop server for the virtual machine <b>%1</b>.</source>
+        <translation>موفق به فعالسازی سرور ریموت دسکتاپ برای ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to enable the remote desktop server for the virtual machine <b>%1</b>.</source>
-      <translation>موفق به فعالسازی سرور ریموت دسکتاپ برای ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to disable the remote desktop server for the virtual machine <b>%1</b>.</source>
+        <translation>موفق به غیرفعالسازی سرور ریموت دسکتاپ برای ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to disable the remote desktop server for the virtual machine <b>%1</b>.</source>
-      <translation>موفق به غیرفعالسازی سرور ریموت دسکتاپ برای ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to enable video capturing for the virtual machine <b>%1</b>.</source>
+        <translation>موفق به فعالسازی ضبط ویدیو برای ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to enable video capturing for the virtual machine <b>%1</b>.</source>
-      <translation>موفق به فعالسازی ضبط ویدیو برای ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to disable video capturing for the virtual machine <b>%1</b>.</source>
+        <translation>موفق به ضبط ویدیو برای ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to disable video capturing for the virtual machine <b>%1</b>.</source>
-      <translation>موفق به ضبط ویدیو برای ماشین مجازی <b>%1</b> نشد.</translation>
+        <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>نمیتوان فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> را یافت.</p><p>آیا میخواهید فایل دیسک ایمیج را از اینترنت دانلود کند؟</p></translation>
     </message>
     <message>
-      <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>نمیتوان فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> را یافت.</p><p>آیا میخواهید فایل دیسک ایمیج را از اینترنت دانلود کند؟</p></translation>
+        <source>Download</source>
+        <translation>دانلود</translation>
     </message>
     <message>
-      <source>Download</source>
-      <translation>دانلود</translation>
+        <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>آیا میخواهید فایل ایمیج دیسک <b>افزونه مهمان ویرچوال باکس</b> را از <nobr><a href="%1">%1</a></nobr> (حجم %2 بایت) دانلود کنید؟</p></translation>
     </message>
     <message>
-      <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>آیا میخواهید فایل ایمیج دیسک <b>افزونه مهمان ویرچوال باکس</b> را از <nobr><a href="%1">%1</a></nobr> (حجم %2 بایت) دانلود کنید؟</p></translation>
+        <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>فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> با موفقیت <nobr><a href="%1">%1</a></nobr>دانلود شد اما نمیتوان بطور محلی در اینجا ذخیره کرد: <nobr><b>%2</b> </nobr></p><p>لطفا یک مکان دیگر برای ذخیره آن انتخاب کنید.</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> 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>فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> با موفقیت <nobr><a href="%1">%1</a></nobr>دانلود شد اما نمیتوان بطور محلی در اینجا ذخیره کرد: <nobr><b>%2</b> </nobr></p><p>لطفا یک مکان دیگر برای ذخیره آن انتخاب کنید.</p></translation>
+        <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>
     </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><p>فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> با موفقیت از <nobr><a href="%1">%1</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%2</b> ذخیره شد.</nobr></p><p>آیا میخواهید این فایل دیسک ایمیج را ثبت کرده و در درایو سی دی/دی وی دی بارگیری کنید؟</p></translation>
+        <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>
     </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><p>نمیتوان فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> را در ماشین مجازی <b>%1</b>قرارداد،زیرا ماشین درایو سی دی یا دی وی دی ندارد. لطفا یک درایو توسط صفحه ذخیره ساز در پنجره تنظیمات ماشین مجازی اضافه کنید.</p></translation>
+        <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>
+        <translation><p>قادر به یافتن <b>راهنمای کاربر ویرچوال باکس</b> <nobr><b>%1</b> نیست</nobr></p><p>آیا میخواهید آن را از اینترنت دانلود کنید؟</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>
-      <translation><p>قادر به یافتن <b>راهنمای کاربر ویرچوال باکس</b> <nobr><b>%1</b> نیست</nobr></p><p>آیا میخواهید آن را از اینترنت دانلود کنید؟</p></translation>
+        <source><p>Are you sure you want to download the <b>VirtualBox User Manual</b> from <nobr><a href="%1">%1</a></nobr> (size %2 bytes)?</p></source>
+        <translation><p>آیا میخواهید فایل <b>راهنمای کاربر ویرچوال باکس</b> را از <nobr><a href="%1">%1</a></nobr> (حجم %2 بایت) دانلود کنید؟</p></translation>
     </message>
     <message>
-      <source><p>Are you sure you want to download the <b>VirtualBox User Manual</b> from <nobr><a href="%1">%1</a></nobr> (size %2 bytes)?</p></source>
-      <translation><p>آیا میخواهید فایل <b>راهنمای کاربر ویرچوال باکس</b> را از <nobr><a href="%1">%1</a></nobr> (حجم %2 بایت) دانلود کنید؟</p></translation>
+        <source><p>The VirtualBox User Manual 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>راهنمای کاربر ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد اما نمیتواند بطور محلی بعنوان <nobr><b>%3</b> ذخیره شود.</nobr></p><p>لطفا برای آن فایل محل دیگری را انتخاب کنید.</p> {1"?} {1<?} {2<?}</translation>
     </message>
     <message>
-      <source><p>The VirtualBox User Manual 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>راهنمای کاربر ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد اما نمیتواند بطور محلی بعنوان <nobr><b>%3</b> ذخیره شود.</nobr></p><p>لطفا برای آن فایل محل دیگری را انتخاب کنید.</p> {1"?} {1<?} {2<?}</translation>
+        <source><p>The VirtualBox User Manual has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>.</nobr></p></source>
+        <translation><p>راهنمای کاربر ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%3</b> ذخیره شد.</nobr></p> {1"?} {1<?} {2<?}</translation>
     </message>
     <message>
-      <source><p>The VirtualBox User Manual has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>.</nobr></p></source>
-      <translation><p>راهنمای کاربر ویرچوال باکس با موفقیت از <nobr><a href="%1">%2</a></nobr> دانلود شد و بطور محلی بعنوان <nobr><b>%3</b> ذخیره شد.</nobr></p> {1"?} {1<?} {2<?}</translation>
+        <source>Close</source>
+        <translation>بستن</translation>
     </message>
     <message>
-      <source>Close</source>
-      <translation>بستن</translation>
+        <source>Ok</source>
+        <translation>تأیید</translation>
     </message>
     <message>
-      <source>Ok</source>
-      <translation>تأیید</translation>
+        <source>Do not show this message again</source>
+        <translation>این پیام را دیگر نشان نده</translation>
     </message>
     <message>
-      <source>Do not show this message again</source>
-      <translation>این پیام را دیگر نشان نده</translation>
+        <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 [...]
     </message>
     <message>
-      <source><p>The VirtualBox Guest Additions do not appear to be available on this virtual machine, and shared folders cannot be used without them. To use shared folders inside the virtual machine, please install the Guest Additions if they are not installed, or re-install them if they are not working correctly, by selecting <b>Insert Guest Additions CD image</b> from the <b>Devices</b> menu. If they are installed but the machine is not yet fully started  [...]
-      <comment>new</comment>
-      <translation><p>افزونه مهمان ویرچوال باکس در ماشین مجازی دردسترس ظاهر نشده است، و پوشه اشتراکی بدون آن قابل استفاده نیست. برای استفاده از پوشه اشتراکی در داخل ماشین مجازی، لطفا افزونه مهمان را نصب کنید اگر آنها نصب نشده است. یا اگر بدرستی کار نمیکند مجددا نصب کنید، گزینه <b>نصب افزونه مهمان</b> را از منوی <b>دستگاه</b> انتخاب کنید. اگر آنها نصب شده اند اما ماشین هنوز بطورکامل شروع نشده است سپس پوشه اشتراکی یک بار در آن دردسترس است.</p></translation>
+        <source>Insert</source>
+        <comment>additions-new</comment>
+        <translation type="obsolete">بارگیری</translation>
     </message>
     <message>
-      <source>Insert</source>
-      <comment>additions-new</comment>
-      <translation>بارگیری</translation>
+        <source>Failed to attach the webcam <b>%1</b> to the virtual machine <b>%2</b>.</source>
+        <translation>موفق به ضمیمه کردن وب کم <b>%1</b> به ماشین مجازی <b>%2</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to attach the webcam <b>%1</b> to the virtual machine <b>%2</b>.</source>
-      <translation>موفق به ضمیمه کردن وب کم <b>%1</b> به ماشین مجازی <b>%2</b> نشد.</translation>
+        <source>Failed to detach the webcam <b>%1</b> from the virtual machine <b>%2</b>.</source>
+        <translation>موفق به جداسازی وب کم <b>%1</b> از ماشین مجازی <b>%2</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to detach the webcam <b>%1</b> from the virtual machine <b>%2</b>.</source>
-      <translation>موفق به جداسازی وب کم <b>%1</b> از ماشین مجازی <b>%2</b> نشد.</translation>
+        <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>نمایشگر مجازی اکنون به حالت رنگی <b>%1&nbsp;بیت</b> تنظیم شده است. برای کارایی بهتر لطفا آن را به <b>%2&nbsp;بیت</b> تغییر دهید. این معمولا میتواند از قسمت <b>نمایش</b> کنترل پنل سیستم عامل مهمان یا تنظیمات سیستم انجام شود.</p></translation>
     </message>
     <message>
-      <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>نمایشگر مجازی اکنون به حالت رنگی <b>%1&nbsp;بیت</b> تنظیم شده است. برای کارایی بهتر لطفا آن را به <b>%2&nbsp;بیت</b> تغییر دهید. این معمولا میتواند از قسمت <b>نمایش</b> کنترل پنل سیستم عامل مهمان یا تنظیمات سیستم انجام شود.</p></translation>
+        <source><p>Failed to create the VirtualBoxClient COM object.</p><p>The application will now terminate.</p></source>
+        <translation><p>موفق به ایجاد شی کام کلاینت ویرچوال باکس نشد.</p><p>برنامه بسته خواهد شد.</p></translation>
     </message>
     <message>
-      <source><p>Failed to create the VirtualBoxClient COM object.</p><p>The application will now terminate.</p></source>
-      <translation><p>موفق به ایجاد شی کام کلاینت ویرچوال باکس نشد.</p><p>برنامه بسته خواهد شد.</p></translation>
+        <source>Failed to set the global VirtualBox extra data for key <i>%1</i> to value <i>{%2}</i>.</source>
+        <translation>موفق به تنظیم داده اضافی سراسری ویرچوال باکس برای کلید <i>%1</i> به مقدار <i>{%2}</i> نشد</translation>
     </message>
     <message>
-      <source>Failed to set the global VirtualBox extra data for key <i>%1</i> to value <i>{%2}</i>.</source>
-      <translation>موفق به تنظیم داده اضافی سراسری ویرچوال باکس برای کلید <i>%1</i> به مقدار <i>{%2}</i> نشد</translation>
+        <source>Failed to set the extra data for key <i>%1</i> of machine <i>%2</i> to value <i>{%3}</i>.</source>
+        <translation>موفق به تنظیم داده اضافی برای کلید <i>%1</i> ماشین <i>%2</i> به مقدار <i>{%3}</i> نشد.</translation>
     </message>
     <message>
-      <source>Failed to set the extra data for key <i>%1</i> of machine <i>%2</i> to value <i>{%3}</i>.</source>
-      <translation>موفق به تنظیم داده اضافی برای کلید <i>%1</i> ماشین <i>%2</i> به مقدار <i>{%3}</i> نشد.</translation>
+        <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>یک یا تعداد بیشتری فایل دیسک ایمیج اکنون قابل دسترسی نیستند. درنتیجه، تا زمانیکه این رسانه ها قابل دسترسی نباشد شما قادر به استفاده از ماشین مجازی نیستید.</p><p>دکمه <b>بررسی</b> را برای بازکردن پنجره مدیر رسانه مجازی فشار دهید و مشاهده کنید کدام رسانه ها قابل دسترسی نیستند، یا دکمه <b>چشمپوشی</b> را برای نادیده گرفتن این پیام فشار دهید.</p></translation>
     </message>
     <message>
-      <source><p>One or more disk image files are not currently accessible. As a result, you will not be able to operate virtual machines that use these files until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see which files are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source>
-      <translation><p>یک یا تعداد بیشتری فایل دیسک ایمیج اکنون قابل دسترسی نیستند. درنتیجه، تا زمانیکه این رسانه ها قابل دسترسی نباشد شما قادر به استفاده از ماشین مجازی نیستید.</p><p>دکمه <b>بررسی</b> را برای بازکردن پنجره مدیر رسانه مجازی فشار دهید و مشاهده کنید کدام رسانه ها قابل دسترسی نیستند، یا دکمه <b>چشمپوشی</b> را برای نادیده گرفتن این پیام فشار دهید.</p></translation>
+        <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and storage data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source>
+        <translation><p>حذف ضبط وضعیت موجب میشود که اطلاعات ذخیره شده در آن از دست برود، و داده دیسک که در سطح چندین ایمیج گسترش یافته با اضافه ضبط وضعیت داخل یک فایل ادغام شوند. این میتواند یک فرآیند طولانی باشد، و اطلاعات ضبط وضعیت قابل بازگردانی نیست.</p></p>آیا میخواهید ضبط وضعیت انتخاب شده <b>%1</b> را حذف کنید؟</p></translation>
     </message>
     <message>
-      <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and storage data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source>
-      <translation><p>حذف ضبط وضعیت موجب میشود که اطلاعات ذخیره شده در آن از دست برود، و داده دیسک که در سطح چندین ایمیج گسترش یافته با اضافه ضبط وضعیت داخل یک فایل ادغام شوند. این میتواند یک فرآیند طولانی باشد، و اطلاعات ضبط وضعیت قابل بازگردانی نیست.</p></p>آیا میخواهید ضبط وضعیت انتخاب شده <b>%1</b> را حذف کنید؟</p></translation>
+        <source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
+        <translation><p>حذف ضبط وضعیت %1 موقتا فضای دیسک بیشتری را نیاز دارد. در بدترین حالت حجم ایمیج %2 توسط %3افزایش خواهد یافت، هرچند در این فایل سیستم آنجا فقط %4 آزاد است.</p><p>خارج شدن از فضای دیسک حین عملکرد ادغام میتواند موجب خرابی ایمیج و پیکربندی ماشین مجازی شود، مثل از دست دادن ماشین مجازی و داده های آن.</p><p>شما میتوانید با ریسک خود ضبط وضعیت را حذف کنید.</p></translation>
     </message>
     <message>
-      <source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
-      <translation><p>حذف ضبط وضعیت %1 موقتا فضای دیسک بیشتری را نیاز دارد. در بدترین حالت حجم ایمیج %2 توسط %3افزایش خواهد یافت، هرچند در این فایل سیستم آنجا فقط %4 آزاد است.</p><p>خارج شدن از فضای دیسک حین عملکرد ادغام میتواند موجب خرابی ایمیج و پیکربندی ماشین مجازی شود، مثل از دست دادن ماشین مجازی و داده های آن.</p><p>شما میتوانید با ریسک خود ضبط وضعیت را حذف کنید.</p></translation>
+        <source>Failed to save the settings.</source>
+        <translation>موفق به ذخیره تنظیمات نشد</translation>
     </message>
     <message>
-      <source>Failed to save the settings.</source>
-      <translation>موفق به ذخیره تنظیمات نشد</translation>
+        <source><p>You are about to add a new optical drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual optical disk to put in the drive or to leave it empty for now?</p></source>
+        <translation><p>شما درصدد افزودن درایو نوری به کنترلر <b>%1</b> هستید؟</p><p>آیا میخواهید دیسک مجازی نوری برای قراردادن در درایو انتخاب کنید یا آن را خالی بگذارید؟</p></translation>
     </message>
     <message>
-      <source><p>You are about to add a new optical drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual optical disk to put in the drive or to leave it empty for now?</p></source>
-      <translation><p>شما درصدد افزودن درایو نوری به کنترلر <b>%1</b> هستید؟</p><p>آیا میخواهید دیسک مجازی نوری برای قراردادن در درایو انتخاب کنید یا آن را خالی بگذارید؟</p></translation>
+        <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>آیا میخواهید درایو نوری را حذف کنید؟</p><p>شما دیگر قادر به قرار دادن دیسک نوری یا ایمیج ایزو یا نصب افزونه مهمان نیستید</p></translation>
     </message>
     <message>
-      <source><p>Are you sure you want to delete the optical drive?</p><p>You will not be able to insert any optical disks or ISO images or install the Guest Additions without it!</p></source>
-      <translation><p>آیا میخواهید درایو نوری را حذف کنید؟</p><p>شما دیگر قادر به قرار دادن دیسک نوری یا ایمیج ایزو یا نصب افزونه مهمان نیستید</p></translation>
+        <source>Failed to attach the optical drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <translation>موفق به اتصال درایو نوری (<nobr><b>%1</b></nobr>) به اِسلات <i>%2</i> ماشین مجازی <b>%3</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to attach the optical drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-      <translation>موفق به اتصال درایو نوری (<nobr><b>%1</b></nobr>) به اِسلات <i>%2</i> ماشین مجازی <b>%3</b> نشد.</translation>
+        <source>Failed to attach the floppy drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <translation>موفق به اتصال فلاپی درایو (<nobr><b>%1</b></nobr>) به اِسلات <i>%2</i> ماشین مجازی <b>%3</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to attach the floppy drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-      <translation>موفق به اتصال فلاپی درایو (<nobr><b>%1</b></nobr>) به اِسلات <i>%2</i> ماشین مجازی <b>%3</b> نشد.</translation>
+        <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
+        <translation>دستورات ارسال پورت فعلی صحیح نیست.نام دستور باید منحصر بفرد باشد</translation>
     </message>
     <message>
-      <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
-      <translation>دستورات ارسال پورت فعلی صحیح نیست.نام دستور باید منحصر بفرد باشد</translation>
+        <source>The current port forwarding rules are not valid. Few rules have same host ports and conflicting IP addresses.</source>
+        <translation>دستورات ارسال پورت جدید معتبر نیست.تعدادی دستور پورت میزبان یکسان دارند که باعث ناسازگاری آدرس آی پی میشود</translation>
     </message>
     <message>
-      <source>The current port forwarding rules are not valid. Few rules have same host ports and conflicting IP addresses.</source>
-      <translation>دستورات ارسال پورت جدید معتبر نیست.تعدادی دستور پورت میزبان یکسان دارند که باعث ناسازگاری آدرس آی پی میشود</translation>
+        <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>آیا میخواهید فایل دیسک ایمیج را ترخیص کنید <nobr><b>%1</b></nobr>؟</p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
     </message>
     <message>
-      <source><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
-      <translation><p>آیا میخواهید فایل دیسک ایمیج را ترخیص کنید <nobr><b>%1</b></nobr>؟</p><p>این آن را از ماشین مجازی زیر جدا خواهد کرد: <b>%2</b>.</p></translation>
+        <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>آیا میخواهید واحد ذخیره ساز دیسک سخت مجازی <nobr><b>%1</b></nobr> را حذف کنید؟</p><p>اگر شما <b>حذف</b> را انتخاب کنید سپس واحد ذخیره ساز مشخص شده همیشگی حذف خواهد شد. این عملکرد <b>قابل آندوکردن</b>نیست.</p><p>اگر شما <b>حفظ</b> را انتخاب کنید،سپس دیسک سخت فقط از لیست دیسک سخت های شناخته شده حذف خواهد شد، اما واحد ذخیره ساز دست نخورده باقی میماند که آن موجب میشود بعدا دیسک س [...]
     </message>
     <message>
-      <source><p>Do you want to delete the storage unit of the virtual hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which makes [...]
-      <translation><p>آیا میخواهید واحد ذخیره ساز دیسک سخت مجازی <nobr><b>%1</b></nobr> را حذف کنید؟</p><p>اگر شما <b>حذف</b> را انتخاب کنید سپس واحد ذخیره ساز مشخص شده همیشگی حذف خواهد شد. این عملکرد <b>قابل آندوکردن</b>نیست.</p><p>اگر شما <b>حفظ</b> را انتخاب کنید،سپس دیسک سخت فقط از لیست دیسک سخت های شناخته شده حذف خواهد شد، اما واحد ذخیره ساز دست نخورده باقی میماند که آن موجب میشود بعدا دیسک سخت [...]
+        <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>موفق به جداسازی درایو نوری (<nobr><b>%1</b></nobr>) از اِسلات <i>%2</i> ماشین مجازی <b>%3</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to detach the optical drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
-      <translation>موفق به جداسازی درایو نوری (<nobr><b>%1</b></nobr>) از اِسلات <i>%2</i> ماشین مجازی <b>%3</b> نشد.</translation>
+        <source>Failed to detach the floppy drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <translation>موفق به جداسازی فلاپی درایو (<nobr><b>%1</b></nobr>) از اِسلات <i>%2</i> ماشین مجازی <b>%3</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to detach the floppy drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
-      <translation>موفق به جداسازی فلاپی درایو (<nobr><b>%1</b></nobr>) از اِسلات <i>%2</i> ماشین مجازی <b>%3</b> نشد.</translation>
+        <source>Failed to open the disk image file <nobr><b>%1</b></nobr>.</source>
+        <translation>موفق به باز کردن فایل دیسک ایمیج <nobr><b>%1</b></nobr> نشد.</translation>
     </message>
     <message>
-      <source>Failed to open the disk image file <nobr><b>%1</b></nobr>.</source>
-      <translation>موفق به باز کردن فایل دیسک ایمیج <nobr><b>%1</b></nobr> نشد.</translation>
+        <source>Failed to close the disk image file <nobr><b>%1</b></nobr>.</source>
+        <translation>موفق به بستن فایل دیسک ایمیج <nobr><b>%1</b></nobr> نشد.</translation>
     </message>
     <message>
-      <source>Failed to close the disk image file <nobr><b>%1</b></nobr>.</source>
-      <translation>موفق به بستن فایل دیسک ایمیج <nobr><b>%1</b></nobr> نشد.</translation>
+        <source>You are about to create a new virtual machine without a hard disk. You will not be able to install an operating system on the machine until you add one. In the mean time you will only be able to start the machine using a virtual optical disk or from the network.</source>
+        <translation>شما در صدد ایجاد ماشین مجازی جدید بدون دیسک سخت هستید. تا زمانیکه دیسک سخت اضافه نکنید قادر به نصب سیستم عامل بر روی آن نیستید.در این زمان میتوانید ماشین را توسط دیسک نوری مجازی یا از شبکه شروع کنید</translation>
     </message>
     <message>
-      <source>You are about to create a new virtual machine without a hard disk. You will not be able to install an operating system on the machine until you add one. In the mean time you will only be able to start the machine using a virtual optical disk or from the network.</source>
-      <translation>شما در صدد ایجاد ماشین مجازی جدید بدون دیسک سخت هستید. تا زمانیکه دیسک سخت اضافه نکنید قادر به نصب سیستم عامل بر روی آن نیستید.در این زمان میتوانید ماشین را توسط دیسک نوری مجازی یا از شبکه شروع کنید</translation>
+        <source>Bad password or authentication failure.</source>
+        <translation>رمزعبور اشتباه یا موفق به تایید اعتبار نشد</translation>
     </message>
     <message>
-      <source>Bad password or authentication failure.</source>
-      <translation>رمزعبور اشتباه یا موفق به تایید اعتبار نشد</translation>
+        <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>یک خطای خطرناک حین اِجرای ماشین مجازی رخ داده و اِجرای ماشین متوقف شده است.</p><p>برای راهنمایی، لطفا بخش انجمن را در <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> ببینید یا با پشتیبانی تماس بگیرید. لطفا محتویات فایل وقایع <tt>VBox.log</tt> را ارئه دهید، که میتوانید آنها را در دایرکتوری وقایع پیدا کنید ، همچنین توضیح دهید در حین انجام چه کاری این خطا رخ داد. توجه کنید که شما میتوانید فایل های بالا را با [...]
     </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 er [...]
-      <translation><p>یک خطای خطرناک حین اِجرای ماشین مجازی رخ داده و اِجرای ماشین متوقف شده است.</p><p>برای راهنمایی، لطفا بخش انجمن را در <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> ببینید یا با پشتیبانی تماس بگیرید. لطفا محتویات فایل وقایع <tt>VBox.log</tt> را ارئه دهید، که میتوانید آنها را در دایرکتوری وقایع پیدا کنید ، همچنین توضیح دهید در حین انجام چه کاری این خطا رخ داد. توجه کنید که شما میتوانید فایل های بالا را با ا [...]
+        <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>پنجره ماشین مجازی حالا به حالت <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>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>پنجره ماشین مجازی حالا به حالت <b>تمام صفحه</b> میرود. با فشاردادن <b>%1</b> میتوانید به حالت پنجره ای بروید.</p><p>توجه داشته باشید که کلید <i>میزبان</i> اکنون بعنوان <b>%2</b> تعریف شده است.</p><p>توجه کنید که نوارمنوی اصلی در حالت یکپارچه پنهان است. میتوانید با فشاردادن <b>Host+Home</b> به آن دسترسی داشته باشید.</p></translation>
+        <source><p>Could not switch the guest display to full-screen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to full-screen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
+        <translation><p>به علت حافظه ویدیویی ناکافی قادر به تعویض صفحه مهمان به حالت تمام صفحه نیست.</p><p>شما باید ماشین مجازی را پیکربندی کنید که حداقل <b>%1</b> حافظه ویدیویی داشته باشد.</p><p>دکمه <b>چشمپوشی</b> را برای رفتن به حالت تمام صفحه درهر صورت فشار دهید یا دکمه <b>لغو</b> را برای لغو عملکرد فشار دهید.</p></translation>
     </message>
     <message>
-      <source><p>Could not switch the guest display to full-screen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to full-screen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
-      <translation><p>به علت حافظه ویدیویی ناکافی قادر به تعویض صفحه مهمان به حالت تمام صفحه نیست.</p><p>شما باید ماشین مجازی را پیکربندی کنید که حداقل <b>%1</b> حافظه ویدیویی داشته باشد.</p><p>دکمه <b>چشمپوشی</b> را برای رفتن به حالت تمام صفحه درهر صورت فشار دهید یا دکمه <b>لغو</b> را برای لغو عملکرد فشار دهید.</p></translation>
+        <source>Failed to connect the network adapter cable of the virtual machine <b>%1</b>.</source>
+        <translation>موفق به اتصال کابل آداپتور شبکه ماشین مجازی <b>%1</b> نشد.</translation>
     </message>
     <message>
-      <source>Failed to connect the network adapter cable of the virtual machine <b>%1</b>.</source>
-      <translation>موفق به اتصال کابل آداپتور شبکه ماشین مجازی <b>%1</b> نشد.</translation>
+        <source>Failed to disconnect the network adapter cable of the virtual machine <b>%1</b>.</source>
+        <translation>موفق به قطع اتصال کابل آداپتور شبکه ماشین مجازی <b>%1</b> نشد</translation>
     </message>
     <message>
-      <source>Failed to disconnect the network adapter cable of the virtual machine <b>%1</b>.</source>
-      <translation>موفق به قطع اتصال کابل آداپتور شبکه ماشین مجازی <b>%1</b> نشد</translation>
+        <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><p>نمیتوان فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> را در ماشین مجازی <b>%1</b> قرار داد،زیرا آن درایو نوری ندارد. لطفا یک درایو توسط صفحه ذخیره ساز در پنجره تنظیمات ماشین مجازی اضافه کنید.</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><p>نمیتوان فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> را در ماشین مجازی <b>%1</b> قرار داد،زیرا آن درایو نوری ندارد. لطفا یک درایو توسط صفحه ذخیره ساز در پنجره تنظیمات ماشین مجازی اضافه کنید.</p></translation>
+        <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>فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> با موفقیت دانلود شد از <nobr><a href="%1">%1</a></nobr> و بطور محلی در <nobr><b>%2</b> ذخیره شد. </nobr></p><p>آیا میخواهید این فایل ایمیج دیسک را ثبت کرده و در درایو نوری بارگیری نمائید؟</p></translation>
     </message>
     <message>
-      <source><p>The <b>VirtualBox Guest Additions</b> disk image file has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>.</nobr></p><p>Do you wish to register this disk image file and insert it into the virtual optical drive?</p></source>
-      <translation><p>فایل دیسک ایمیج <b>افزونه مهمان ویرچوال باکس</b> با موفقیت دانلود شد از <nobr><a href="%1">%1</a></nobr> و بطور محلی در <nobr><b>%2</b> ذخیره شد. </nobr></p><p>آیا میخواهید این فایل ایمیج دیسک را ثبت کرده و در درایو نوری بارگیری نمائید؟</p></translation>
+        <source>Drag and drop operation from host to guest failed.</source>
+        <translation>عملکرد کشیدن و رها کردن از میزبان به مهمان موفق نشد</translation>
     </message>
     <message>
-      <source>Drag and drop operation from host to guest failed.</source>
-      <translation>عملکرد کشیدن و رها کردن از میزبان به مهمان موفق نشد</translation>
+        <source>Unable to cancel host to guest drag and drop operation.</source>
+        <translation>قادر به لغو عملکرد کشیدن و رها کردن میزبان به مهمان نیست</translation>
     </message>
     <message>
-      <source>Unable to cancel host to guest drag and drop operation.</source>
-      <translation>قادر به لغو عملکرد کشیدن و رها کردن میزبان به مهمان نیست</translation>
+        <source>Drag and drop operation from guest to host failed.</source>
+        <translation>عملکرد کشیدن و رها کردن از مهمان به میزبان موفق نشد</translation>
     </message>
     <message>
-      <source>Drag and drop operation from guest to host failed.</source>
-      <translation>عملکرد کشیدن و رها کردن از مهمان به میزبان موفق نشد</translation>
+        <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
+        <translation>رمزعبور رمزگذاری برای <nobr>شناسه = '%1'</nobr> نامعتبر هست.</translation>
     </message>
     <message>
-      <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
-      <translation>رمزعبور رمزگذاری برای <nobr>شناسه = '%1'</nobr> نامعتبر هست.</translation>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
     </message>
-  </context>
-  <context>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>UIMiniToolBar</name>
     <message>
-      <source>Always show the toolbar</source>
-      <translation>همیشه نمایش نوارابزار</translation>
+        <source>Always show the toolbar</source>
+        <translation>همیشه نمایش نوارابزار</translation>
     </message>
     <message>
-      <source>Minimize Window</source>
-      <translation>کمینه پنجره</translation>
+        <source>Minimize Window</source>
+        <translation>کمینه پنجره</translation>
     </message>
     <message>
-      <source>Exit Full Screen or Seamless Mode</source>
-      <translation>خروج ازحالت تمام صفحه یا حالت یکپارچه</translation>
+        <source>Exit Full Screen or Seamless Mode</source>
+        <translation>خروج ازحالت تمام صفحه یا حالت یکپارچه</translation>
     </message>
     <message>
-      <source>Close VM</source>
-      <translation>بستن ماشین مجازی</translation>
+        <source>Close VM</source>
+        <translation>بستن ماشین مجازی</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIMultiScreenLayout</name>
     <message>
-      <source>Virtual Screen %1</source>
-      <translation>صفحه مجازی %1</translation>
+        <source>Virtual Screen %1</source>
+        <translation>صفحه مجازی %1</translation>
     </message>
     <message>
-      <source>Use Host Screen %1</source>
-      <translation>استفاده از صفحه میزبان %1</translation>
+        <source>Use Host Screen %1</source>
+        <translation>استفاده از صفحه میزبان %1</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UINameAndSystemEditor</name>
     <message>
-      <source>&Name:</source>
-      <translation>نا&م:</translation>
+        <source>&Name:</source>
+        <translation type="obsolete">نا&م:</translation>
     </message>
     <message>
-      <source>Holds the name of the virtual machine.</source>
-      <translation>نام ماشین مجازی را نشان میدهد.</translation>
+        <source>Holds the name of the virtual machine.</source>
+        <translation>نام ماشین مجازی را نشان میدهد.</translation>
     </message>
     <message>
-      <source>&Type:</source>
-      <translation>نو&ع:</translation>
+        <source>&Type:</source>
+        <translation>نو&ع:</translation>
     </message>
     <message>
-      <source>Selects the operating system family that you plan to install into this virtual machine.</source>
-      <translation>خانواده سیستم عاملی را که شما قصد نصب آن را در ماشین مجازی دارید نشان میدهد.</translation>
+        <source>Selects the operating system family that you plan to install into this virtual machine.</source>
+        <translation>خانواده سیستم عاملی را که شما قصد نصب آن را در ماشین مجازی دارید نشان میدهد.</translation>
     </message>
     <message>
-      <source>&Version:</source>
-      <translation>&نسخه:</translation>
+        <source>&Version:</source>
+        <translation>&نسخه:</translation>
     </message>
     <message>
-      <source>Selects the operating system type that you plan to install into this virtual machine (called a guest operating system).</source>
-      <translation>نوع سیستم عاملی که شما قصد دارید داخل ماشین مجازی را نصب کنید نشان میدهد،که بعنوان سیستم عامل مهمان شناخته میشود.</translation>
+        <source>Selects the operating system type that you plan to install into this virtual machine (called a guest operating system).</source>
+        <translation>نوع سیستم عاملی که شما قصد دارید داخل ماشین مجازی را نصب کنید نشان میدهد،که بعنوان سیستم عامل مهمان شناخته میشود.</translation>
     </message>
     <message>
-      <source>N&ame:</source>
-      <translation>&نام:</translation>
+        <source>N&ame:</source>
+        <translation>&نام:</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UINetworkManagerDialog</name>
     <message>
-      <source>Network Operations Manager</source>
-      <translation>مدیر عملکردهای شبکه</translation>
+        <source>Network Operations Manager</source>
+        <translation>مدیر عملکردهای شبکه</translation>
     </message>
     <message>
-      <source>There are no active network operations.</source>
-      <translation>هیچگونه عملکرد فعال شبکه ندارد.</translation>
+        <source>There are no active network operations.</source>
+        <translation>هیچگونه عملکرد فعال شبکه ندارد.</translation>
     </message>
     <message>
-      <source>&Cancel All</source>
-      <translation>&لغو همه</translation>
+        <source>&Cancel All</source>
+        <translation>&لغو همه</translation>
     </message>
     <message>
-      <source>Cancel all active network operations</source>
-      <translation>لغو همه عملکردهای فعال شبکه</translation>
+        <source>Cancel all active network operations</source>
+        <translation>لغو همه عملکردهای فعال شبکه</translation>
     </message>
     <message>
-      <source>Error: %1.</source>
-      <translation>خطا: %1.</translation>
+        <source>Error: %1.</source>
+        <translation type="obsolete">خطا: %1.</translation>
     </message>
     <message>
-      <source>Network Operation</source>
-      <translation>عملکرد شبکه</translation>
+        <source>Network Operation</source>
+        <translation>عملکرد شبکه</translation>
     </message>
     <message>
-      <source>Restart network operation</source>
-      <translation>ریستارت عملکرد شبکه</translation>
+        <source>Restart network operation</source>
+        <translation>ریستارت عملکرد شبکه</translation>
     </message>
     <message>
-      <source>Cancel network operation</source>
-      <translation>لغو عملکرد شبکه</translation>
+        <source>Cancel network operation</source>
+        <translation>لغو عملکرد شبکه</translation>
     </message>
     <message>
-      <source>The network operation failed with the following error: %1.</source>
-      <translation>عملکرد شبکه یا خطای زیر موفق نشد: %1.</translation>
+        <source>The network operation failed with the following error: %1.</source>
+        <translation>عملکرد شبکه یا خطای زیر موفق نشد: %1.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UINetworkManagerIndicator</name>
     <message>
-      <source>Current network operations:</source>
-      <translation>عملکردهای فعلی شبکه:</translation>
+        <source>Current network operations:</source>
+        <translation>عملکردهای فعلی شبکه:</translation>
     </message>
     <message>
-      <source>failed</source>
-      <comment>network operation</comment>
-      <translation>موفق نشد</translation>
+        <source>failed</source>
+        <comment>network operation</comment>
+        <translation>موفق نشد</translation>
     </message>
     <message>
-      <source>(%1 of %2)</source>
-      <translation>(%1 از %2)</translation>
+        <source>(%1 of %2)</source>
+        <translation>(%1 از %2)</translation>
     </message>
     <message>
-      <source>Double-click for more information.</source>
-      <translation>برای اطلاعات بیشتر دومرتبه کلیک کنید.</translation>
+        <source>Double-click for more information.</source>
+        <translation>برای اطلاعات بیشتر دومرتبه کلیک کنید.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UINetworkReplyPrivate</name>
     <message>
-      <source>Host not found</source>
-      <translation>میزبان یافت نشد</translation>
+        <source>Host not found</source>
+        <translation>میزبان یافت نشد</translation>
+    </message>
+    <message>
+        <source>Content access denied</source>
+        <translation>دسترسی به محتوا رد شد</translation>
+    </message>
+    <message>
+        <source>Protocol failure</source>
+        <translation>پروتکل موفق نشد</translation>
+    </message>
+    <message>
+        <source>Wrong SSL certificate format</source>
+        <translation>فرمت گواهینامه SSL اشتباه است</translation>
+    </message>
+    <message>
+        <source>SSL authentication failed</source>
+        <translation>تایید اعتبار SSL انجام نشد.</translation>
+    </message>
+    <message>
+        <source>Unknown reason</source>
+        <translation>دلیل ناشناخته</translation>
+    </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-      <source>Content access denied</source>
-      <translation>دسترسی به محتوا رد شد</translation>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-      <source>Protocol failure</source>
-      <translation>پروتکل موفق نشد</translation>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
     <message>
-      <source>Wrong SSL certificate format</source>
-      <translation>فرمت گواهینامه SSL اشتباه است</translation>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-      <source>SSL authentication failed</source>
-      <translation>تایید اعتبار SSL انجام نشد.</translation>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-      <source>Unknown reason</source>
-      <translation>دلیل ناشناخته</translation>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIPopupCenter</name>
     <message>
-      <source>Click for full details</source>
-      <translation>برای جزئیات کامل کلیک کنید</translation>
+        <source>Click for full details</source>
+        <translation>برای جزئیات کامل کلیک کنید</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIPortForwardingModel</name>
     <message>
-      <source>Name</source>
-      <translation>نام</translation>
+        <source>Name</source>
+        <translation type="obsolete">نام</translation>
     </message>
     <message>
-      <source>Protocol</source>
-      <translation>پروتکل</translation>
+        <source>Protocol</source>
+        <translation type="obsolete">پروتکل</translation>
     </message>
     <message>
-      <source>Host IP</source>
-      <translation>آی پی میزبان</translation>
+        <source>Host IP</source>
+        <translation type="obsolete">آی پی میزبان</translation>
     </message>
     <message>
-      <source>Host Port</source>
-      <translation>پورت میزبان</translation>
+        <source>Host Port</source>
+        <translation type="obsolete">پورت میزبان</translation>
     </message>
     <message>
-      <source>Guest IP</source>
-      <translation>آی پی مهمان</translation>
+        <source>Guest IP</source>
+        <translation type="obsolete">آی پی مهمان</translation>
     </message>
     <message>
-      <source>Guest Port</source>
-      <translation>پورت مهمان</translation>
+        <source>Guest Port</source>
+        <translation type="obsolete">پورت مهمان</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIPortForwardingTable</name>
     <message>
-      <source>Name</source>
-      <translation>نام</translation>
+        <source>Name</source>
+        <translation>نام</translation>
     </message>
     <message>
-      <source>Protocol</source>
-      <translation>پروتکل</translation>
+        <source>Protocol</source>
+        <translation>پروتکل</translation>
     </message>
     <message>
-      <source>Host IP</source>
-      <translation>آی پی میزبان</translation>
+        <source>Host IP</source>
+        <translation>آی پی میزبان</translation>
     </message>
     <message>
-      <source>Host Port</source>
-      <translation>پورت میزبان</translation>
+        <source>Host Port</source>
+        <translation>پورت میزبان</translation>
     </message>
     <message>
-      <source>Guest IP</source>
-      <translation>آی پی مهمان</translation>
+        <source>Guest IP</source>
+        <translation>آی پی مهمان</translation>
     </message>
     <message>
-      <source>Guest Port</source>
-      <translation>پورت مهمان</translation>
+        <source>Guest Port</source>
+        <translation>پورت مهمان</translation>
     </message>
     <message>
-      <source>Contains a list of port forwarding rules.</source>
-      <translation>شامل لیست دستورات ارسال پورت است</translation>
+        <source>Contains a list of port forwarding rules.</source>
+        <translation>شامل لیست دستورات ارسال پورت است</translation>
     </message>
     <message>
-      <source>Add New Rule</source>
-      <translation>افزودن دستور جدید</translation>
+        <source>Add New Rule</source>
+        <translation>افزودن دستور جدید</translation>
     </message>
     <message>
-      <source>Copy Selected Rule</source>
-      <translation>کپی دستور انتخاب شده</translation>
+        <source>Copy Selected Rule</source>
+        <translation>کپی دستور انتخاب شده</translation>
     </message>
     <message>
-      <source>Remove Selected Rule</source>
-      <translation>حذف دستور انتخاب شده</translation>
+        <source>Remove Selected Rule</source>
+        <translation>حذف دستور انتخاب شده</translation>
     </message>
     <message>
-      <source>Adds new port forwarding rule.</source>
-      <translation>افزودن دستور ارسال پورت جدید</translation>
+        <source>Adds new port forwarding rule.</source>
+        <translation>افزودن دستور ارسال پورت جدید</translation>
     </message>
     <message>
-      <source>Copies selected port forwarding rule.</source>
-      <translation>کپی دستور ارسال پورت انتخاب شده</translation>
+        <source>Copies selected port forwarding rule.</source>
+        <translation>کپی دستور ارسال پورت انتخاب شده</translation>
     </message>
     <message>
-      <source>Removes selected port forwarding rule.</source>
-      <translation>حذف دستور ارسال پورت انتخاب شده</translation>
+        <source>Removes selected port forwarding rule.</source>
+        <translation>حذف دستور ارسال پورت انتخاب شده</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIProgressDialog</name>
     <message>
-      <source>A few seconds remaining</source>
-      <translation>چند ثانیه باقیمانده است</translation>
+        <source>A few seconds remaining</source>
+        <translation>چند ثانیه باقیمانده است</translation>
     </message>
     <message>
-      <source>Canceling...</source>
-      <translation>درحال لغو...</translation>
+        <source>Canceling...</source>
+        <translation>درحال لغو...</translation>
     </message>
     <message>
-      <source>&Cancel</source>
-      <translation>&لغو</translation>
+        <source>&Cancel</source>
+        <translation>&لغو</translation>
     </message>
     <message>
-      <source>Cancel the current operation</source>
-      <translation>لغو عملکرد فعلی</translation>
+        <source>Cancel the current operation</source>
+        <translation>لغو عملکرد فعلی</translation>
     </message>
     <message>
-      <source>%1, %2 remaining</source>
-      <comment>You may wish to translate this more like "Time remaining: %1, %2"</comment>
-      <translation>%1, %2 باقیمانده</translation>
+        <source>%1, %2 remaining</source>
+        <comment>You may wish to translate this more like "Time remaining: %1, %2"</comment>
+        <translation>%1, %2 باقیمانده</translation>
     </message>
     <message>
-      <source>%1 remaining</source>
-      <comment>You may wish to translate this more like "Time remaining: %1"</comment>
-      <translation>%1 باقیمانده</translation>
+        <source>%1 remaining</source>
+        <comment>You may wish to translate this more like "Time remaining: %1"</comment>
+        <translation>%1 باقیمانده</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UISelectorWindow</name>
     <message>
-      <source>Show Toolbar</source>
-      <translation>نمایش نوارابزار</translation>
+        <source>Show Toolbar</source>
+        <translation>نمایش نوارابزار</translation>
     </message>
     <message>
-      <source>Show Statusbar</source>
-      <translation>نمایش نواروضعیت</translation>
+        <source>Show Statusbar</source>
+        <translation>نمایش نواروضعیت</translation>
     </message>
     <message>
-      <source>Select a virtual machine file</source>
-      <translation>فایل ماشین مجازی را انتخاب کنید</translation>
+        <source>Select a virtual machine file</source>
+        <translation>فایل ماشین مجازی را انتخاب کنید</translation>
     </message>
     <message>
-      <source>Virtual machine files (%1)</source>
-      <translation>فایل ماشین مجازی (%1)</translation>
+        <source>Virtual machine files (%1)</source>
+        <translation>فایل ماشین مجازی (%1)</translation>
     </message>
     <message>
-      <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is  a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></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 g [...]
-      <translation><h3>به ویرچوال باکس خوش آمدید!</h3><p>بخش راست این پنجره لیستی از همه ماشین های مجازی روی رایانه شما هست. حالا لیست خالی هست زیرا شما هنوز هیچگونه ماشین مجازی ایجاد نکرده اید.</p><p>بمنظور ایجاد ماشین مجازی جدید، دکمه <b>جدید</b> را از نوارابزار اصلی قرارگرفته در بالای پنجره فشار دهید.</p><p> میتوانید کلید <b>%1</b> برای دریافت راهنمای فوری فشاردهید، یا از سایت <a href=https://www.virtualbox.org>وی [...]
+        <source><h3>Welcome to VirtualBox!</h3><p>The left part of this window is  a list of all virtual machines on your computer. The list is empty now because you haven't created any virtual machines yet.<img src=:/welcome.png align=right/></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 [...]
+        <translation><h3>به ویرچوال باکس خوش آمدید!</h3><p>بخش راست این پنجره لیستی از همه ماشین های مجازی روی رایانه شما هست. حالا لیست خالی هست زیرا شما هنوز هیچگونه ماشین مجازی ایجاد نکرده اید.</p><p>بمنظور ایجاد ماشین مجازی جدید، دکمه <b>جدید</b> را از نوارابزار اصلی قرارگرفته در بالای پنجره فشار دهید.</p><p> میتوانید کلید <b>%1</b> برای دریافت راهنمای فوری فشاردهید، یا از سایت <a href=https://www.virtualbox.org> [...]
     </message>
     <message>
-      <source>Manager</source>
-      <comment>Note: main window title which is pretended by the product name.</comment>
-      <translation>مدیر</translation>
+        <source>Manager</source>
+        <comment>Note: main window title which is pretended by the product name.</comment>
+        <translation>مدیر</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UISession</name>
     <message>
-      <source>Updating Guest Additions</source>
-      <translation>بروزرسانی افزونه مهمان</translation>
+        <source>Updating Guest Additions</source>
+        <translation>بروزرسانی افزونه مهمان</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UISettingsDialog</name>
     <message>
-      <source><i>Select a settings category from the list on the left-hand side and move the mouse over a settings item to get more information.</i></source>
-      <translation><i>دسته تنظیمات را از لیست در سمت دست-راست را انتخاب کنید و ماوس را روی تنظیمات آیتم برای دریافت اطلاعات بیشتر حرکت دهید.</i></translation>
+        <source><i>Select a settings category from the list on the left-hand side and move the mouse over a settings item to get more information.</i></source>
+        <translation><i>دسته تنظیمات را از لیست در سمت دست-راست را انتخاب کنید و ماوس را روی تنظیمات آیتم برای دریافت اطلاعات بیشتر حرکت دهید.</i></translation>
     </message>
     <message>
-      <source>On the <b>%1</b> page, %2</source>
-      <translation>در <b>%1</b> صفحه، %2</translation>
+        <source>On the <b>%1</b> page, %2</source>
+        <translation type="obsolete">در <b>%1</b> صفحه، %2</translation>
     </message>
     <message>
-      <source>Invalid settings detected</source>
-      <translation>تنظیمات نامعتبر تشخیص داده است</translation>
+        <source>Invalid settings detected</source>
+        <translation>تنظیمات نامعتبر تشخیص داده است</translation>
     </message>
     <message>
-      <source>Non-optimal settings detected</source>
-      <translation>تنظیمات غیرمطلوب تشخیص داده است</translation>
+        <source>Non-optimal settings detected</source>
+        <translation type="obsolete">تنظیمات غیرمطلوب تشخیص داده است</translation>
     </message>
     <message>
-      <source>Settings</source>
-      <translation>تنظیمات</translation>
+        <source>Settings</source>
+        <translation type="obsolete">تنظیمات</translation>
     </message>
     <message>
-      <source><b>%1</b> page:</source>
-      <translation><b>%1</b> صفحه:</translation>
+        <source><b>%1</b> page:</source>
+        <translation><b>%1</b> صفحه:</translation>
     </message>
     <message>
-      <source><b>%1: %2</b> page:</source>
-      <translation><b>%1: %2</b> صفحه:</translation>
+        <source><b>%1: %2</b> page:</source>
+        <translation><b>%1: %2</b> صفحه:</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UISettingsDialogGlobal</name>
     <message>
-      <source>General</source>
-      <translation>عمومی</translation>
+        <source>General</source>
+        <translation>عمومی</translation>
     </message>
     <message>
-      <source>Input</source>
-      <translation>ورودی</translation>
+        <source>Input</source>
+        <translation>ورودی</translation>
     </message>
     <message>
-      <source>Update</source>
-      <translation>بروزرسانی</translation>
+        <source>Update</source>
+        <translation>بروزرسانی</translation>
     </message>
     <message>
-      <source>Language</source>
-      <translation>زبان</translation>
+        <source>Language</source>
+        <translation>زبان</translation>
     </message>
     <message>
-      <source>USB</source>
-      <translation>یو اِس بی</translation>
+        <source>USB</source>
+        <translation type="obsolete">یو اِس بی</translation>
     </message>
     <message>
-      <source>Network</source>
-      <translation>شبکه</translation>
+        <source>Network</source>
+        <translation>شبکه</translation>
     </message>
     <message>
-      <source>Extensions</source>
-      <translation>افزونه ها</translation>
+        <source>Extensions</source>
+        <translation>افزونه ها</translation>
     </message>
     <message>
-      <source>VirtualBox - %1</source>
-      <translation>ويرچوال باکس - %1</translation>
+        <source>VirtualBox - %1</source>
+        <translation>ويرچوال باکس - %1</translation>
     </message>
     <message>
-      <source>Proxy</source>
-      <translation>پراکسی</translation>
+        <source>Proxy</source>
+        <translation>پراکسی</translation>
     </message>
     <message>
-      <source>Display</source>
-      <translation>نمایش</translation>
+        <source>Display</source>
+        <translation>نمایش</translation>
     </message>
     <message>
-      <source>Preferences</source>
-      <translation>اولویت ها</translation>
+        <source>Preferences</source>
+        <translation>اولویت ها</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UISettingsDialogMachine</name>
     <message>
-      <source>General</source>
-      <translation>عمومی</translation>
+        <source>General</source>
+        <translation>عمومی</translation>
     </message>
     <message>
-      <source>System</source>
-      <translation>سیستم</translation>
+        <source>System</source>
+        <translation>سیستم</translation>
     </message>
     <message>
-      <source>Display</source>
-      <translation>نمایش</translation>
+        <source>Display</source>
+        <translation>نمایش</translation>
     </message>
     <message>
-      <source>Storage</source>
-      <translation>ذخیره ساز</translation>
+        <source>Storage</source>
+        <translation>ذخیره ساز</translation>
     </message>
     <message>
-      <source>Audio</source>
-      <translation>صدا</translation>
+        <source>Audio</source>
+        <translation>صدا</translation>
     </message>
     <message>
-      <source>Network</source>
-      <translation>شبکه</translation>
+        <source>Network</source>
+        <translation>شبکه</translation>
     </message>
     <message>
-      <source>Ports</source>
-      <translation>پورت ها</translation>
+        <source>Ports</source>
+        <translation>پورت ها</translation>
     </message>
     <message>
-      <source>Serial Ports</source>
-      <translation>پورت سریال</translation>
+        <source>Serial Ports</source>
+        <translation>پورت سریال</translation>
     </message>
     <message>
-      <source>Parallel Ports</source>
-      <translation>پورت پارالل</translation>
+        <source>Parallel Ports</source>
+        <translation>پورت پارالل</translation>
     </message>
     <message>
-      <source>USB</source>
-      <translation>یو اِس بی</translation>
+        <source>USB</source>
+        <translation>یو اِس بی</translation>
     </message>
     <message>
-      <source>Shared Folders</source>
-      <translation>پوشه های اشتراکی</translation>
+        <source>Shared Folders</source>
+        <translation>پوشه های اشتراکی</translation>
     </message>
     <message>
-      <source>%1 - %2</source>
-      <translation>%1 - %2</translation>
+        <source>%1 - %2</source>
+        <translation>%1 - %2</translation>
     </message>
     <message>
-      <source>User Interface</source>
-      <translation>رابط کاربری</translation>
+        <source>User Interface</source>
+        <translation>رابط کاربری</translation>
     </message>
     <message>
-      <source>Settings</source>
-      <translation>تنظیمات</translation>
+        <source>Settings</source>
+        <translation>تنظیمات</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UISettingsSerializerProgress</name>
     <message>
-      <source>Loading Settings...</source>
-      <translation>بارگیری تنظیمات...</translation>
+        <source>Loading Settings...</source>
+        <translation>بارگیری تنظیمات...</translation>
     </message>
     <message>
-      <source>Saving Settings...</source>
-      <translation>ذخیره تنظیمات...</translation>
+        <source>Saving Settings...</source>
+        <translation>ذخیره تنظیمات...</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIStatusBarEditorWidget</name>
     <message>
-      <source><nobr><b>Click</b> to toggle indicator presence.</nobr><br><nobr><b>Drag&Drop</b> to change indicator position.</nobr></source>
-      <translation><nobr><b>کلیک کنید</b> تا ضامن  شاخص حاضر شود.</nobr><br><nobr><b>کشیدن & رها کردن</b> برای تغییر موقعیت شاخص.</nobr></translation>
+        <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>کلیک کنید</b> تا ضامن  شاخص حاضر شود.</nobr><br><nobr><b>کشیدن & رها کردن</b> برای تغییر موقعیت شاخص.</nobr></translation>
     </message>
     <message>
-      <source>Close</source>
-      <translation>بستن</translation>
+        <source>Close</source>
+        <translation>بستن</translation>
     </message>
     <message>
-      <source>Enable Status Bar</source>
-      <translation>فعالسازی نوار وضعیت</translation>
+        <source>Enable Status Bar</source>
+        <translation>فعالسازی نوار وضعیت</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UITextEditor</name>
     <message>
-      <source>Edit text</source>
-      <translation>ویرایش متن</translation>
+        <source>Edit text</source>
+        <translation>ویرایش متن</translation>
     </message>
     <message>
-      <source>&Replace...</source>
-      <translation>جا&یگزینی...</translation>
+        <source>&Replace...</source>
+        <translation>جا&یگزینی...</translation>
     </message>
     <message>
-      <source>Replaces the current text with the content of a file.</source>
-      <translation>جایگزینی متن فعلی با محتوای فایل.</translation>
+        <source>Replaces the current text with the content of a file.</source>
+        <translation>جایگزینی متن فعلی با محتوای فایل.</translation>
     </message>
     <message>
-      <source>Text (*.txt);;All (*.*)</source>
-      <translation>متن (*.txt);;همه (*.*)</translation>
+        <source>Text (*.txt);;All (*.*)</source>
+        <translation>متن (*.txt);;همه (*.*)</translation>
     </message>
     <message>
-      <source>Select a file to open...</source>
-      <translation>یک فایل برای باکردن انتخاب کنید...</translation>
+        <source>Select a file to open...</source>
+        <translation>یک فایل برای باکردن انتخاب کنید...</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIUpdateManager</name>
     <message>
-      <source>1 day</source>
-      <translation>1 روز</translation>
+        <source>1 day</source>
+        <translation>1 روز</translation>
     </message>
     <message>
-      <source>2 days</source>
-      <translation>2 روز</translation>
+        <source>2 days</source>
+        <translation>2 روز</translation>
     </message>
     <message>
-      <source>3 days</source>
-      <translation>3 روز</translation>
+        <source>3 days</source>
+        <translation>3 روز</translation>
     </message>
     <message>
-      <source>4 days</source>
-      <translation>4 روز</translation>
+        <source>4 days</source>
+        <translation>4 روز</translation>
     </message>
     <message>
-      <source>5 days</source>
-      <translation>5 روز</translation>
+        <source>5 days</source>
+        <translation>5 روز</translation>
     </message>
     <message>
-      <source>6 days</source>
-      <translation>6 روز</translation>
+        <source>6 days</source>
+        <translation>6 روز</translation>
     </message>
     <message>
-      <source>1 week</source>
-      <translation>1 هفته</translation>
+        <source>1 week</source>
+        <translation>1 هفته</translation>
     </message>
     <message>
-      <source>2 weeks</source>
-      <translation>2 هفته</translation>
+        <source>2 weeks</source>
+        <translation>2 هفته</translation>
     </message>
     <message>
-      <source>3 weeks</source>
-      <translation>3 هفته</translation>
+        <source>3 weeks</source>
+        <translation>3 هفته</translation>
     </message>
     <message>
-      <source>1 month</source>
-      <translation>1 ماه</translation>
+        <source>1 month</source>
+        <translation>1 ماه</translation>
     </message>
     <message>
-      <source>Never</source>
-      <translation>هرگز</translation>
+        <source>Never</source>
+        <translation>هرگز</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIUpdateStepVirtualBox</name>
     <message>
-      <source>Checking for a new VirtualBox version...</source>
-      <translation>بررسی برای نسخه جدید برنامه...</translation>
+        <source>Checking for a new VirtualBox version...</source>
+        <translation>بررسی برای نسخه جدید برنامه...</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIVMCloseDialog</name>
     <message>
-      <source>Close Virtual Machine</source>
-      <translation>بستن ماشین مجازی</translation>
+        <source>Close Virtual Machine</source>
+        <translation>بستن ماشین مجازی</translation>
     </message>
     <message>
-      <source>You want to:</source>
-      <translation>چه کاری انجام خواهید داد:</translation>
+        <source>You want to:</source>
+        <translation>چه کاری انجام خواهید داد:</translation>
     </message>
     <message>
-      <source><p>Saves the current execution state of the virtual machine to the physical hard disk of the host PC.</p><p>Next time this machine is started, it will be restored from the saved state and continue execution from the same place you saved it at, which will let you continue your work immediately.</p><p>Note that saving the machine state may take a long time, depending on the guest operating system type and the amount of memory you assigned to the  [...]
-      <translation><p>ذخیره وضعیت اِجرای فعلی ماشین مجازی در ذیسک سخت فیزیکی رایانه میزبان.</p><p>زمان بعدی که ماشین شروع شود، آن از وضعیت ذخیره شده بازگردانی خواهد شد و اجرا را از همان جا که ذخیره کرده بودید ادامه میدهید، که به شما اجازه میدهد کار خود را فورا آغاز کنید.</p><p>توجه کنید که ذخیره وضعیت ماشین زمان زیادی می گیرد، به نوع سیستم عامل مهمان و مقدار حافظه ای که به ماشین مجازی اختصاص داده اید بستگی دارد.</p></translation>
+        <source><p>Saves the current execution state of the virtual machine to the physical hard disk of the host PC.</p><p>Next time this machine is started, it will be restored from the saved state and continue execution from the same place you saved it at, which will let you continue your work immediately.</p><p>Note that saving the machine state may take a long time, depending on the guest operating system type and the amount of memory you assigned to th [...]
+        <translation><p>ذخیره وضعیت اِجرای فعلی ماشین مجازی در ذیسک سخت فیزیکی رایانه میزبان.</p><p>زمان بعدی که ماشین شروع شود، آن از وضعیت ذخیره شده بازگردانی خواهد شد و اجرا را از همان جا که ذخیره کرده بودید ادامه میدهید، که به شما اجازه میدهد کار خود را فورا آغاز کنید.</p><p>توجه کنید که ذخیره وضعیت ماشین زمان زیادی می گیرد، به نوع سیستم عامل مهمان و مقدار حافظه ای که به ماشین مجازی اختصاص داده اید بستگی دارد.</p></translation>
     </message>
     <message>
-      <source>&Save the machine state</source>
-      <translation>ذخیره وضعیت &ماشین</translation>
+        <source>&Save the machine state</source>
+        <translation>ذخیره وضعیت &ماشین</translation>
     </message>
     <message>
-      <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system ma [...]
-      <translation><p>ارسال رویداد دکمه برق اِی سی پی آی به ماشین مجازی.</p><p>بطور معمول، سیستم عامل مهمان درحال اِجرای داخل ماشین مجازی این رویداد را تشخیص داده و یک رویه خاموش کردن صحیح را اجرا میکند.این روش توصیه شده برای خاموش کردن ماشین مجازی هست زیرا آن این شانس را دارد که همه برنامه ها داخل آن داده و وضعیت خود را ذخیره کنند.</p><p>اگر ماشین به این اقدام پاسخی نداد سپس سیستم عامل مهمان ممکن است اشتباه پیکربندی شده باشد یا به هیچ وجه رویداد دکمه برق اِ [...]
+        <source><p>Sends the ACPI Power Button press event to the virtual machine.</p><p>Normally, the guest operating system running inside the virtual machine will detect this event and perform a clean shutdown procedure. This is a recommended way to turn off the virtual machine because all applications running inside it will get a chance to save their data and state.</p><p>If the machine doesn't respond to this action then the guest operating system  [...]
+        <translation><p>ارسال رویداد دکمه برق اِی سی پی آی به ماشین مجازی.</p><p>بطور معمول، سیستم عامل مهمان درحال اِجرای داخل ماشین مجازی این رویداد را تشخیص داده و یک رویه خاموش کردن صحیح را اجرا میکند.این روش توصیه شده برای خاموش کردن ماشین مجازی هست زیرا آن این شانس را دارد که همه برنامه ها داخل آن داده و وضعیت خود را ذخیره کنند.</p><p>اگر ماشین به این اقدام پاسخی نداد سپس سیستم عامل مهمان ممکن است اشتباه پیکربندی شده باشد یا به هیچ وجه رویداد دکمه برق  [...]
     </message>
     <message>
-      <source>S&end the shutdown signal</source>
-      <translation>اِرسال سیگنال& خاموش کردن</translation>
+        <source>S&end the shutdown signal</source>
+        <translation>اِرسال سیگنال& خاموش کردن</translation>
     </message>
     <message>
-      <source><p>Turns off the virtual machine.</p><p>Note that this action will stop machine execution immediately so that the guest operating system running inside it will not be able to perform a clean shutdown procedure which may result in <i>data loss</i> inside the virtual machine. Selecting this action is recommended only if the virtual machine does not respond to the <b>Send the shutdown signal</b> action.</p></source>
-      <translation><p>ماشین مجازی را خاموش میکند.</p><p>توجه کنید که این اقدام اِجرای ماشین را فورا متوقف میکند بنابراین سیستم عامل مهمان درحال اِجرا در آن قادر به اِجرای یک رویه شات دان صحیح نیست که میتواند موجب <i>از دست دادن داده</i> داخل ماشین مجازی شود. این اقدام فقط اگر ماشین مجازی به اقدام <b>اِرسال سیگنال خاموش کردن</b> پاسخی نداد،توصیه میشود.</p></translation>
+        <source><p>Turns off the virtual machine.</p><p>Note that this action will stop machine execution immediately so that the guest operating system running inside it will not be able to perform a clean shutdown procedure which may result in <i>data loss</i> inside the virtual machine. Selecting this action is recommended only if the virtual machine does not respond to the <b>Send the shutdown signal</b> action.</p></source>
+        <translation><p>ماشین مجازی را خاموش میکند.</p><p>توجه کنید که این اقدام اِجرای ماشین را فورا متوقف میکند بنابراین سیستم عامل مهمان درحال اِجرا در آن قادر به اِجرای یک رویه شات دان صحیح نیست که میتواند موجب <i>از دست دادن داده</i> داخل ماشین مجازی شود. این اقدام فقط اگر ماشین مجازی به اقدام <b>اِرسال سیگنال خاموش کردن</b> پاسخی نداد،توصیه میشود.</p></translation>
     </message>
     <message>
-      <source>&Power off the machine</source>
-      <translation>قطع برق &ماشین</translation>
+        <source>&Power off the machine</source>
+        <translation>قطع برق &ماشین</translation>
     </message>
     <message>
-      <source>Restore the machine state stored in the current snapshot</source>
-      <translation>بازگردانی وضعیت ماشین ذخیره شده در ضبط وضعیت فعلی</translation>
+        <source>Restore the machine state stored in the current snapshot</source>
+        <translation>بازگردانی وضعیت ماشین ذخیره شده در ضبط وضعیت فعلی</translation>
     </message>
     <message>
-      <source><p>When checked, the machine will be returned to the state stored in the current snapshot after it is turned off. This is useful if you are sure that you want to discard the results of your last sessions and start again at that snapshot.</p></source>
-      <translation><p>وقتیکه انتخاب شده، ماشین به وضعیت ذخیره شده در ضبط وضعیت فعلی بعداز اینکه آن خاموش شد باز میگردد. این سودمند هست اگر شما مطمئنید که میخواهید تغییرات ایجاد شده در آخرین دسترسی را ذخیره نشود و دوباره از ضبط وضعیت شروع کنید.</p></translation>
+        <source><p>When checked, the machine will be returned to the state stored in the current snapshot after it is turned off. This is useful if you are sure that you want to discard the results of your last sessions and start again at that snapshot.</p></source>
+        <translation><p>وقتیکه انتخاب شده، ماشین به وضعیت ذخیره شده در ضبط وضعیت فعلی بعداز اینکه آن خاموش شد باز میگردد. این سودمند هست اگر شما مطمئنید که میخواهید تغییرات ایجاد شده در آخرین دسترسی را ذخیره نشود و دوباره از ضبط وضعیت شروع کنید.</p></translation>
     </message>
     <message>
-      <source>&Restore current snapshot '%1'</source>
-      <translation>بازگردانی ضبط &وضعیت فعلی '%1'</translation>
+        <source>&Restore current snapshot '%1'</source>
+        <translation>بازگردانی ضبط &وضعیت فعلی '%1'</translation>
     </message>
     <message>
-      <source>&Continue running in the background</source>
-      <translation>در حال اِجرا در پس زمینه باقی بمان&</translation>
+        <source>&Continue running in the background</source>
+        <translation>در حال اِجرا در پس زمینه باقی بمان&</translation>
     </message>
     <message>
-      <source><p>Close the virtual machine windows but keep the virtual machine running.</p><p>You can use the VirtualBox Manager to return to running the virtual machine in a window.</p></source>
-      <translation><p>پنجره ماشین مجازی را ببند ولی ماشین مجازی را در حال اِجرا نگه دار. </p><p>میتوانید از مدیر ویرچوال باکس برای بازگشت به پنجره ماشین مجازی در حال اِجرا استفاده کنید</translation>
+        <source><p>Close the virtual machine windows but keep the virtual machine running.</p><p>You can use the VirtualBox Manager to return to running the virtual machine in a window.</p></source>
+        <translation><p>پنجره ماشین مجازی را ببند ولی ماشین مجازی را در حال اِجرا نگه دار. </p><p>میتوانید از مدیر ویرچوال باکس برای بازگشت به پنجره ماشین مجازی در حال اِجرا استفاده کنید</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIVMDesktop</name>
     <message>
-      <source>&Details</source>
-      <translation>جزئی&ات</translation>
+        <source>&Details</source>
+        <translation>جزئی&ات</translation>
     </message>
     <message>
-      <source>&Snapshots</source>
-      <translation>ضبط وضعیت &ها</translation>
+        <source>&Snapshots</source>
+        <translation>ضبط وضعیت &ها</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIVMInfoDialog</name>
     <message>
-      <source>%1 - Session Information</source>
-      <translation>%1 - اطلاعات جلسه</translation>
+        <source>%1 - Session Information</source>
+        <translation>%1 - اطلاعات جلسه</translation>
     </message>
     <message>
-      <source>Configuration &Details</source>
-      <translation>جزئیات &پیکربندی</translation>
+        <source>Configuration &Details</source>
+        <translation>جزئیات &پیکربندی</translation>
     </message>
     <message>
-      <source>&Runtime Information</source>
-      <translation>&اطلاعات زمان اِجرا</translation>
+        <source>&Runtime Information</source>
+        <translation>&اطلاعات زمان اِجرا</translation>
     </message>
     <message>
-      <source>DMA Transfers</source>
-      <translation>انتقالات DMA</translation>
+        <source>DMA Transfers</source>
+        <translation>انتقالات DMA</translation>
     </message>
     <message>
-      <source>PIO Transfers</source>
-      <translation>انتقالات PIO</translation>
+        <source>PIO Transfers</source>
+        <translation>انتقالات PIO</translation>
     </message>
     <message>
-      <source>Data Read</source>
-      <translation>خواندن داده</translation>
+        <source>Data Read</source>
+        <translation>خواندن داده</translation>
     </message>
     <message>
-      <source>Data Written</source>
-      <translation>نوشتن داده</translation>
+        <source>Data Written</source>
+        <translation>نوشتن داده</translation>
     </message>
     <message>
-      <source>Data Transmitted</source>
-      <translation>داده اِرسال شده</translation>
+        <source>Data Transmitted</source>
+        <translation>داده اِرسال شده</translation>
     </message>
     <message>
-      <source>Data Received</source>
-      <translation>داده دریافتی</translation>
+        <source>Data Received</source>
+        <translation>داده دریافتی</translation>
     </message>
     <message>
-      <source>Not Detected</source>
-      <comment>guest additions</comment>
-      <translation>تشخیص داده نشده است</translation>
+        <source>Not Detected</source>
+        <comment>guest additions</comment>
+        <translation>تشخیص داده نشده است</translation>
     </message>
     <message>
-      <source>Not Detected</source>
-      <comment>guest os type</comment>
-      <translation>تشخیص داده نشده است</translation>
+        <source>Not Detected</source>
+        <comment>guest os type</comment>
+        <translation>تشخیص داده نشده است</translation>
     </message>
     <message>
-      <source>Not Available</source>
-      <comment>details report (VRDE server port)</comment>
-      <translation>موجود نیست</translation>
+        <source>Not Available</source>
+        <comment>details report (VRDE server port)</comment>
+        <translation>موجود نیست</translation>
     </message>
     <message>
-      <source>Runtime Attributes</source>
-      <translation>صفات زمان اِجرا</translation>
+        <source>Runtime Attributes</source>
+        <translation>صفات زمان اِجرا</translation>
     </message>
     <message>
-      <source>Screen Resolution</source>
-      <translation>وضوح صفحه</translation>
+        <source>Screen Resolution</source>
+        <translation>وضوح صفحه</translation>
     </message>
     <message>
-      <source>VM Uptime</source>
-      <translation>مدت فعالیت ماشین مجازی</translation>
+        <source>VM Uptime</source>
+        <translation>مدت فعالیت ماشین مجازی</translation>
     </message>
     <message>
-      <source>Clipboard Mode</source>
-      <translation>حالت کلیپ برد</translation>
+        <source>Clipboard Mode</source>
+        <translation>حالت کلیپ برد</translation>
     </message>
     <message>
-      <source>Drag and Drop Mode</source>
-      <translation>حالت کشیدن و رها کردن</translation>
+        <source>Drag and Drop Mode</source>
+        <translation>حالت کشیدن و رها کردن</translation>
     </message>
     <message>
-      <source>Guest Additions</source>
-      <translation>افزونه مهمان</translation>
+        <source>Guest Additions</source>
+        <translation>افزونه مهمان</translation>
     </message>
     <message>
-      <source>Guest OS Type</source>
-      <translation>نوع سیستم عامل مهمان</translation>
+        <source>Guest OS Type</source>
+        <translation>نوع سیستم عامل مهمان</translation>
     </message>
     <message>
-      <source>Storage Statistics</source>
-      <translation>آمار ذخیره ساز</translation>
+        <source>Storage Statistics</source>
+        <translation>آمار ذخیره ساز</translation>
     </message>
     <message>
-      <source>No Storage Devices</source>
-      <translation>دستگاه ذخیره ساز ندارد</translation>
+        <source>No Storage Devices</source>
+        <translation>دستگاه ذخیره ساز ندارد</translation>
     </message>
     <message>
-      <source>Network Statistics</source>
-      <translation>آمار شبکه</translation>
+        <source>Network Statistics</source>
+        <translation>آمار شبکه</translation>
     </message>
     <message>
-      <source>No Network Adapters</source>
-      <translation>هیچ آداپتور شبکه ندارد</translation>
+        <source>No Network Adapters</source>
+        <translation>هیچ آداپتور شبکه ندارد</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIVMListView</name>
     <message>
-      <source>Inaccessible</source>
-      <translation>قابل دسترسی نیست</translation>
+        <source>Inaccessible</source>
+        <translation>قابل دسترسی نیست</translation>
     </message>
     <message>
-      <source><nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr></source>
-      <comment>VM tooltip (name, last state change, session state)</comment>
-      <translation><nobr>%1<br></nobr><nobr>%2 از زمان %3</nobr><br><nobr>جلسه %4</nobr></translation>
+        <source><nobr>%1<br></nobr><nobr>%2 since %3</nobr><br><nobr>Session %4</nobr></source>
+        <comment>VM tooltip (name, last state change, session state)</comment>
+        <translation><nobr>%1<br></nobr><nobr>%2 از زمان %3</nobr><br><nobr>جلسه %4</nobr></translation>
     </message>
     <message>
-      <source><nobr><b>%1</b><br></nobr><nobr>Inaccessible since %2</nobr></source>
-      <comment>Inaccessible VM tooltip (name, last state change)</comment>
-      <translation><nobr><b>%1</b><br></nobr><nobr>غیرقابل دسترسی از زمان %2</nobr></translation>
+        <source><nobr><b>%1</b><br></nobr><nobr>Inaccessible since %2</nobr></source>
+        <comment>Inaccessible VM tooltip (name, last state change)</comment>
+        <translation><nobr><b>%1</b><br></nobr><nobr>غیرقابل دسترسی از زمان %2</nobr></translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIVMLogViewer</name>
     <message>
-      <source>Close the search panel</source>
-      <translation>بستن پنل جستجو</translation>
+        <source>Close the search panel</source>
+        <translation>بستن پنل جستجو</translation>
     </message>
     <message>
-      <source>&Find</source>
-      <translation>یاف&تن</translation>
+        <source>&Find</source>
+        <translation>یاف&تن</translation>
     </message>
     <message>
-      <source>Enter a search string here</source>
-      <translation>عبارت جستجو را اینجا وارد کنید</translation>
+        <source>Enter a search string here</source>
+        <translation>عبارت جستجو را اینجا وارد کنید</translation>
     </message>
     <message>
-      <source>&Previous</source>
-      <translation>&قبلی</translation>
+        <source>&Previous</source>
+        <translation>&قبلی</translation>
     </message>
     <message>
-      <source>Search for the previous occurrence of the string</source>
-      <translation>جستجوی رخداد قبلی استرینگ</translation>
+        <source>Search for the previous occurrence of the string</source>
+        <translation>جستجوی رخداد قبلی استرینگ</translation>
     </message>
     <message>
-      <source>&Next</source>
-      <translation>بعد&ی</translation>
+        <source>&Next</source>
+        <translation>بعد&ی</translation>
     </message>
     <message>
-      <source>Search for the next occurrence of the string</source>
-      <translation>جستجوی رخداد بعدی استرینگ</translation>
+        <source>Search for the next occurrence of the string</source>
+        <translation>جستجوی رخداد بعدی استرینگ</translation>
     </message>
     <message>
-      <source>C&ase Sensitive</source>
-      <translation>حساس به &حروف</translation>
+        <source>C&ase Sensitive</source>
+        <translation>حساس به &حروف</translation>
     </message>
     <message>
-      <source>Perform case sensitive search (when checked)</source>
-      <translation>اِجرای جستجوی حساس به حروف (وقتیکه انتخاب شده)</translation>
+        <source>Perform case sensitive search (when checked)</source>
+        <translation>اِجرای جستجوی حساس به حروف (وقتیکه انتخاب شده)</translation>
     </message>
     <message>
-      <source>String not found</source>
-      <translation>استرینگ یافت نشد</translation>
+        <source>String not found</source>
+        <translation>استرینگ یافت نشد</translation>
     </message>
     <message>
-      <source><p>No log files found. Press the <b>Refresh</b> button to rescan the log folder <nobr><b>%1</b></nobr>.</p></source>
-      <translation><p>فایل وقایع یافت نشد. دکمه <b>تازه کردن</b> را برای اسکن مجدد پوشه وقایع <nobr><b>%1</b></nobr> فشار دهید.</p></translation>
+        <source><p>No log files found. Press the <b>Refresh</b> button to rescan the log folder <nobr><b>%1</b></nobr>.</p></source>
+        <translation><p>فایل وقایع یافت نشد. دکمه <b>تازه کردن</b> را برای اسکن مجدد پوشه وقایع <nobr><b>%1</b></nobr> فشار دهید.</p></translation>
     </message>
     <message>
-      <source>Save VirtualBox Log As</source>
-      <translation>ذخیره وقایه ویرچوال باکس بعنوان</translation>
+        <source>Save VirtualBox Log As</source>
+        <translation>ذخیره وقایه ویرچوال باکس بعنوان</translation>
     </message>
     <message>
-      <source>%1 - VirtualBox Log Viewer</source>
-      <translation>%1 - نمایش دهنده وقایع ویرچوال باکس</translation>
+        <source>%1 - VirtualBox Log Viewer</source>
+        <translation>%1 - نمایش دهنده وقایع ویرچوال باکس</translation>
     </message>
     <message>
-      <source>&Refresh</source>
-      <translation>تازه کرد&ن</translation>
+        <source>&Refresh</source>
+        <translation>تازه کرد&ن</translation>
     </message>
     <message>
-      <source>&Save</source>
-      <translation>ذخیر&ه</translation>
+        <source>&Save</source>
+        <translation>ذخیر&ه</translation>
     </message>
     <message>
-      <source>Close</source>
-      <translation>بستن</translation>
+        <source>Close</source>
+        <translation>بستن</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIVMPreviewWindow</name>
     <message>
-      <source>Update Disabled</source>
-      <translation>بروزرسانی غیرفعال شده</translation>
+        <source>Update Disabled</source>
+        <translation type="obsolete">بروزرسانی غیرفعال شده</translation>
     </message>
     <message>
-      <source>Every 0.5 s</source>
-      <translation>هر 0.5 ثانیه</translation>
+        <source>Every 0.5 s</source>
+        <translation type="obsolete">هر 0.5 ثانیه</translation>
     </message>
     <message>
-      <source>Every 1 s</source>
-      <translation>هر 1 ثانیه</translation>
+        <source>Every 1 s</source>
+        <translation type="obsolete">هر 1 ثانیه</translation>
     </message>
     <message>
-      <source>Every 2 s</source>
-      <translation>هر 2 ثانیه</translation>
+        <source>Every 2 s</source>
+        <translation type="obsolete">هر 2 ثانیه</translation>
     </message>
     <message>
-      <source>Every 5 s</source>
-      <translation>هر 5 ثانیه</translation>
+        <source>Every 5 s</source>
+        <translation type="obsolete">هر 5 ثانیه</translation>
     </message>
     <message>
-      <source>Every 10 s</source>
-      <translation>هر 10 ثانیه</translation>
+        <source>Every 10 s</source>
+        <translation type="obsolete">هر 10 ثانیه</translation>
     </message>
     <message>
-      <source>No Preview</source>
-      <translation>پیشنمایش ندارد</translation>
+        <source>No Preview</source>
+        <translation type="obsolete">پیشنمایش ندارد</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIWizard</name>
     <message>
-      <source>Hide Description</source>
-      <translation>عدم نمایش توضیحات</translation>
+        <source>Hide Description</source>
+        <translation type="obsolete">عدم نمایش توضیحات</translation>
     </message>
     <message>
-      <source>Show Description</source>
-      <translation>نمایش توضیحات</translation>
+        <source>Show Description</source>
+        <translation type="obsolete">نمایش توضیحات</translation>
     </message>
     <message>
-      <source>&Expert Mode</source>
-      <translation>حالت تخصصی&</translation>
+        <source>&Expert Mode</source>
+        <translation>حالت تخصصی&</translation>
     </message>
     <message>
-      <source>Switch to <nobr><b>Expert Mode</b></nobr>, a one-page dialog for experienced users.</source>
-      <translation>رفتن به <nobr><b>حالت تخصصی</b></nobr>، یک پنجره تکی برای کاربران حرفه ای هست</translation>
+        <source>Switch to <nobr><b>Expert Mode</b></nobr>, a one-page dialog for experienced users.</source>
+        <translation>رفتن به <nobr><b>حالت تخصصی</b></nobr>، یک پنجره تکی برای کاربران حرفه ای هست</translation>
     </message>
     <message>
-      <source>&Guided Mode</source>
-      <translation>حالت هدایتی&</translation>
+        <source>&Guided Mode</source>
+        <translation>حالت هدایتی&</translation>
     </message>
     <message>
-      <source>Switch to <nobr><b>Guided Mode</b></nobr>, a step-by-step dialog with detailed explanations.</source>
-      <translation>رفتن به <nobr><b>حالت هدایتی</b></nobr>، پنجره های گام به گام با توضیحات مفصل هست</translation>
+        <source>Switch to <nobr><b>Guided Mode</b></nobr>, a step-by-step dialog with detailed explanations.</source>
+        <translation>رفتن به <nobr><b>حالت هدایتی</b></nobr>، پنجره های گام به گام با توضیحات مفصل هست</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIWizardCloneVD</name>
     <message>
-      <source>Copy Virtual Hard Drive</source>
-      <translation>کپی درایو سخت مجازی</translation>
+        <source>Copy Virtual Hard Drive</source>
+        <translation type="obsolete">کپی درایو سخت مجازی</translation>
     </message>
     <message>
-      <source>Copy</source>
-      <translation>کپی</translation>
+        <source>Copy</source>
+        <translation>کپی</translation>
     </message>
     <message>
-      <source>Hard drive to copy</source>
-      <translation>درایو سخت برای کپی</translation>
+        <source>Hard drive to copy</source>
+        <translation type="obsolete">درایو سخت برای کپی</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><p>لطفا یک فایل درایو سخت مجازی که میخواهید کپی کنید را اگر انتخاب نشده انتخاب کنید. میتوانید یکی از لیست انتخاب کنید یا از آیکون پوشه درکنار لیست یکی انتخاب کنید.</p></translation>
+        <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>
     </message>
     <message>
-      <source>Choose a virtual hard drive file to copy...</source>
-      <translation>یک فایل درایو سخت مجازی برای کپی انتخاب کنید...</translation>
+        <source>Choose a virtual hard drive file to copy...</source>
+        <translation type="obsolete">یک فایل درایو سخت مجازی برای کپی انتخاب کنید...</translation>
     </message>
     <message>
-      <source>Hard drive file type</source>
-      <translation>نوع فایل درایو سخت</translation>
+        <source>Hard drive file type</source>
+        <translation type="obsolete">نوع فایل درایو سخت</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>لطفا نوع فایلی را که میخواهید برای درایو سخت مجازی جدید استفاده کنید،انتخاب کنید. اگر نمیخواهید آن را با سایر برنامه های مجازی سازی استفاده کنید،میتوانید تنظیمات را تغییر ندهید.</translation>
+        <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>
     </message>
     <message>
-      <source>Storage on physical hard drive</source>
-      <translation>ذخیره ساز در درایو سخت فیزیکی</translation>
+        <source>Storage on physical hard drive</source>
+        <translation type="obsolete">ذخیره ساز در درایو سخت فیزیکی</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>لطفا انتخاب کنید چه موقع فایل درایو سخت مجازی جدید باید بزرگ شود به همان اندازه که استفاده شده است (پویا اختصاص داده شده) یا آن باید در حداکثر حجم ایجاد شود (حجم ثابت شده).</translation>
+        <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>
     </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><p>یک فایل درایو سخت <b>پویا اختصاص داده شده</b> فقط از فضای دیسک سخت فیزیکی شما استفاده میکند و آن را پر میکند (حداکثر تا تا <b>حجم ثابت شده</b>)، هرچند آن دوباره خودکار وقتیکه فضای آن خالی شد کوچک نمیشود.</p></translation>
+        <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>
     </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><p>یک فایل درایو سخت <b>حجم ثابت شده</b> ممکن است در برخی سیستم ها بیشتر طول بکشد تا ایجاد شود اما اغلب استفاده سریعتری دارد.</p></translation>
+        <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>
     </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><p>شما میتوانید <b>تقسیم</b> فایل درایو سخت به چندین فایل تا حجم دو گیگابایت را انتخاب کنید. این عمدتا برای ذخیره ماشین مجازی در دستگاه یو اِس بی قابل حمل یا سیستم قدیمی،که نمیتواند فایل های بزرگ را استفاده کند سودمند است.</translation>
+        <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>
     </message>
     <message>
-      <source>&Dynamically allocated</source>
-      <translation>&پویا اختصاص داده شده</translation>
+        <source>&Dynamically allocated</source>
+        <translation>&پویا اختصاص داده شده</translation>
     </message>
     <message>
-      <source>&Fixed size</source>
-      <translation>&حجم ثابت شده</translation>
+        <source>&Fixed size</source>
+        <translation>&حجم ثابت شده</translation>
     </message>
     <message>
-      <source>&Split into files of less than 2GB</source>
-      <translation>تقسیم به فایل هایی &کوچکتر از 2گیگابایت</translation>
+        <source>&Split into files of less than 2GB</source>
+        <translation>تقسیم به فایل هایی &کوچکتر از 2گیگابایت</translation>
     </message>
     <message>
-      <source>Please choose a location for new virtual hard drive file</source>
-      <translation>لطفا یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید</translation>
+        <source>Please choose a location for new virtual hard drive file</source>
+        <translation type="obsolete">لطفا یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید</translation>
     </message>
     <message>
-      <source>New hard drive to create</source>
-      <translation>درایو سخت جدید برای ایجاد</translation>
+        <source>New hard drive to create</source>
+        <translation type="obsolete">درایو سخت جدید برای ایجاد</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>لطفا نام درایو سخت مجازی جدید را در کادر زیر وارد کنید یا روی پوشه آیکون برای انتخاب پوشه دیگری برای ایجاد فایل در آن کلیک کنید.</translation>
+        <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>
     </message>
     <message>
-      <source>Choose a location for new virtual hard drive file...</source>
-      <translation>یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید...</translation>
+        <source>Choose a location for new virtual hard drive file...</source>
+        <translation type="obsolete">یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید...</translation>
     </message>
     <message>
-      <source>%1_copy</source>
-      <comment>copied virtual hard drive name</comment>
-      <translation>%1_کپی</translation>
+        <source>%1_copy</source>
+        <comment>copied virtual hard drive name</comment>
+        <translation>%1_کپی</translation>
     </message>
     <message>
-      <source>Hard drive to &copy</source>
-      <translation>درایو سخت برای &کپی</translation>
+        <source>Hard drive to &copy</source>
+        <translation type="obsolete">درایو سخت برای &کپی</translation>
     </message>
     <message>
-      <source>&New hard drive to create</source>
-      <translation>&درایو سخت جدید برای ایجاد</translation>
+        <source>&New hard drive to create</source>
+        <translation type="obsolete">&درایو سخت جدید برای ایجاد</translation>
     </message>
     <message>
-      <source>Hard drive file &type</source>
-      <translation>نوع فایل &درایو سخت</translation>
+        <source>Hard drive file &type</source>
+        <translation type="obsolete">نوع فایل &درایو سخت</translation>
     </message>
     <message>
-      <source>Copy Virtual Hard Disk</source>
-      <translation>کپی دیسک سخت مجازی</translation>
+        <source>Copy Virtual Hard Disk</source>
+        <translation>کپی دیسک سخت مجازی</translation>
     </message>
     <message>
-      <source>Hard disk to copy</source>
-      <translation>دیسک سخت برای کپی</translation>
+        <source>Hard disk 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 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>
     </message>
     <message>
-      <source>Choose a virtual hard disk file to copy...</source>
-      <translation>یک فایل دیسک سخت مجازی برای کپی انتخاب کنید...</translation>
+        <source>Choose a virtual hard disk file to copy...</source>
+        <translation>یک فایل دیسک سخت مجازی برای کپی انتخاب کنید...</translation>
     </message>
     <message>
-      <source>Hard disk file type</source>
-      <translation>نوع فایل دیسک سخت</translation>
+        <source>Hard disk 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 hard disk. 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>Storage on physical hard disk</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>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>
     </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>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>
     </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>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>
     </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>
+        <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>
     </message>
     <message>
-      <source>Please choose a location for new virtual hard disk file</source>
-      <translation>لطفا مکان فایل دیسک سخت مجازی جدید را انتخاب کنید</translation>
+        <source>Please choose a location for new virtual hard disk file</source>
+        <translation>لطفا مکان فایل دیسک سخت مجازی جدید را انتخاب کنید</translation>
     </message>
     <message>
-      <source>New hard disk to create</source>
-      <translation>دیسک سخت جدید برای ایجاد</translation>
+        <source>New hard disk to create</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>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>
     </message>
     <message>
-      <source>Choose a location for new virtual hard disk file...</source>
-      <translation>یک مکان برای فایل دیسک سخت مجازی جدید انتخاب کنید...</translation>
+        <source>Choose a location for new virtual hard disk file...</source>
+        <translation>یک مکان برای فایل دیسک سخت مجازی جدید انتخاب کنید...</translation>
     </message>
     <message>
-      <source>Hard disk to &copy</source>
-      <translation>دیسک سخت برای کپی&</translation>
+        <source>Hard disk to &copy</source>
+        <translation>دیسک سخت برای کپی&</translation>
     </message>
     <message>
-      <source>&New hard disk to create</source>
-      <translation>دیسک سخت جدید برای ایجاد&</translation>
+        <source>&New hard disk to create</source>
+        <translation>دیسک سخت جدید برای ایجاد&</translation>
     </message>
     <message>
-      <source>Hard disk file &type</source>
-      <translation>نوع فایل دیسک سخت&</translation>
+        <source>Hard disk file &type</source>
+        <translation>نوع فایل دیسک سخت&</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIWizardCloneVM</name>
     <message>
-      <source>Linked Base for %1 and %2</source>
-      <translation>پایه پیوندی برای %1 و %2</translation>
+        <source>Linked Base for %1 and %2</source>
+        <translation>پایه پیوندی برای %1 و %2</translation>
     </message>
     <message>
-      <source>Clone Virtual Machine</source>
-      <translation>شبیه سازی ماشین مجازی</translation>
+        <source>Clone Virtual Machine</source>
+        <translation>شبیه سازی ماشین مجازی</translation>
     </message>
     <message>
-      <source>Clone</source>
-      <translation>شبیه سازی</translation>
+        <source>Clone</source>
+        <translation>شبیه سازی</translation>
     </message>
     <message>
-      <source>%1 Clone</source>
-      <translation>%1 شبیه سازی</translation>
+        <source>%1 Clone</source>
+        <translation>%1 شبیه سازی</translation>
     </message>
     <message>
-      <source>New machine name</source>
-      <translation>نام ماشین جدید</translation>
+        <source>New machine name</source>
+        <translation>نام ماشین جدید</translation>
     </message>
     <message>
-      <source><p>Please choose a name for the new virtual machine. The new machine will be a clone of the machine <b>%1</b>.</p></source>
-      <translation><p>لطفا یک نام برای ماشین مجازی جدید انتخاب کنید. ماشین جدید از ماشین <b>%1</b> شبیه سازی خواهد شد.</p></translation>
+        <source><p>Please choose a name for the new virtual machine. The new machine will be a clone of the machine <b>%1</b>.</p></source>
+        <translation><p>لطفا یک نام برای ماشین مجازی جدید انتخاب کنید. ماشین جدید از ماشین <b>%1</b> شبیه سازی خواهد شد.</p></translation>
     </message>
     <message>
-      <source>When checked a new unique MAC address will be assigned to all configured network cards.</source>
-      <translation>وقتیکه انتخاب شده یک آدرس مَک جدید منحصر بفرد به همه کارت های شبکه پیکربندی شده اختصاص داده خواهد شد.</translation>
+        <source>When checked a new unique MAC address will be assigned to all configured network cards.</source>
+        <translation>وقتیکه انتخاب شده یک آدرس مَک جدید منحصر بفرد به همه کارت های شبکه پیکربندی شده اختصاص داده خواهد شد.</translation>
     </message>
     <message>
-      <source>&Reinitialize the MAC address of all network cards</source>
-      <translation>مقداردهی مجدد &آدرس مک همه کارت های شبکه</translation>
+        <source>&Reinitialize the MAC address of all network cards</source>
+        <translation>مقداردهی مجدد &آدرس مک همه کارت های شبکه</translation>
     </message>
     <message>
-      <source>Clone type</source>
-      <translation>نوع شبیه سازی</translation>
+        <source>Clone type</source>
+        <translation>نوع شبیه سازی</translation>
     </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 machine [...]
-      <translation><p>لطفا نوع شبیه سازی را که میخواهید برای ایجاد انتخاب کنید.</p><p>اگر شما <b>شبیه سازی کامل </b> را انتخاب کنید، یک کپی دقیق (شامل همه فایل های درایو سخت مجازی) از ماشین مجازی اصلی ایجاد خواهد شد.</p><p>اگر شما <b>شبیه سازی لینک شده</b> را انتخاب کنید، یک ماشین جدید ایجاد خواهد شد، اما فایل های درایو سخت مجازی به فایل های درایو سخت مجازی ماشین اصلی گره خورده است و شما قادر به انتقال ماشین مجازی جدید به رایانه دیگر  [...]
+        <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> را انتخاب کنید، یک ماشین جدید ایجاد خواهد شد، اما فایل های درایو سخت مجازی به فایل های درایو سخت مجازی ماشین اصلی گره خورده است و شما قادر به انتقال ماشین مجازی جد [...]
     </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>
-      <translation><p>اگر شما یک <b>شبیه سازی لینک شده </b> انتخاب کنید سپس یک ضبط وضعیت جدید در ماشین مجازی اصلی بعنوان بخشی از فرآیند شبیه سازی ایجاد خواهد شد.</p></translation>
+        <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>
+        <translation><p>اگر شما یک <b>شبیه سازی لینک شده </b> انتخاب کنید سپس یک ضبط وضعیت جدید در ماشین مجازی اصلی بعنوان بخشی از فرآیند شبیه سازی ایجاد خواهد شد.</p></translation>
     </message>
     <message>
-      <source>&Full clone</source>
-      <translation>&شبیه سازی کامل</translation>
+        <source>&Full clone</source>
+        <translation>&شبیه سازی کامل</translation>
     </message>
     <message>
-      <source>&Linked clone</source>
-      <translation>&شبیه سازی لینک شده</translation>
+        <source>&Linked clone</source>
+        <translation>&شبیه سازی لینک شده</translation>
     </message>
     <message>
-      <source>Snapshots</source>
-      <translation>ضبط وضعیت</translation>
+        <source>Snapshots</source>
+        <translation>ضبط وضعیت</translation>
     </message>
     <message>
-      <source><p>Please choose which parts of the snapshot tree should be cloned with the machine.</p></source>
-      <translation><p>لطفا انتخاب کنید کدام بخش های ضبط وضعیت باید با ماشین شبیه سازی شود.</p></translation>
+        <source><p>Please choose which parts of the snapshot tree should be cloned with the machine.</p></source>
+        <translation><p>لطفا انتخاب کنید کدام بخش های ضبط وضعیت باید با ماشین شبیه سازی شود.</p></translation>
     </message>
     <message>
-      <source><p>If you choose <b>Current machine state</b>, the new machine will reflect the current state of the original machine and will have no snapshots.</p></source>
-      <translation><p>اگر شما <b>وضعیت فعلی ماشین</b> را انتخاب کنید، ماشین جدید بازتاب وضعیت فعلی ماشین اصلی و بدون ضبط وضعیت خواهد بود.</p></translation>
+        <source><p>If you choose <b>Current machine state</b>, the new machine will reflect the current state of the original machine and will have no snapshots.</p></source>
+        <translation><p>اگر شما <b>وضعیت فعلی ماشین</b> را انتخاب کنید، ماشین جدید بازتاب وضعیت فعلی ماشین اصلی و بدون ضبط وضعیت خواهد بود.</p></translation>
     </message>
     <message>
-      <source><p>If you choose <b>Current snapshot tree branch</b>, the new machine will reflect the current state of the original machine and will have matching snapshots for all snapshots in the tree branch starting at the current state in the original machine.</p></source>
-      <translation><p>اگر شما <b>ضبط وضعیت شاخه درختی فعلی</b> را انتخاب کنید، ماشین جدید بازتاب وضعیت فعلی ماشین اصلی خواهد بود و مطابق ضبط وضعیت های برای همه ضبط وضعیت ها در شاخه درختی  شروع شده در وضعیت فعلی در ماشین اصلی خواهد بود.</p></translation>
+        <source><p>If you choose <b>Current snapshot tree branch</b>, the new machine will reflect the current state of the original machine and will have matching snapshots for all snapshots in the tree branch starting at the current state in the original machine.</p></source>
+        <translation><p>اگر شما <b>ضبط وضعیت شاخه درختی فعلی</b> را انتخاب کنید، ماشین جدید بازتاب وضعیت فعلی ماشین اصلی خواهد بود و مطابق ضبط وضعیت های برای همه ضبط وضعیت ها در شاخه درختی  شروع شده در وضعیت فعلی در ماشین اصلی خواهد بود.</p></translation>
     </message>
     <message>
-      <source><p>If you choose <b>Everything</b>, the new machine will reflect the current state of the original machine and will have matching snapshots for all snapshots in the original machine.</p></source>
-      <translation><p>اگر شما <b>هرچیزی</b> را انتخاب کنید، ماشین جدید بازتاب وضعیت فعلی ماشین اصلی و مطابق همه ضبط وضعیت ها خواهد بود برای همه ضبط وضعیت ها در ماشین اصلی.</p></translation>
+        <source><p>If you choose <b>Everything</b>, the new machine will reflect the current state of the original machine and will have matching snapshots for all snapshots in the original machine.</p></source>
+        <translation><p>اگر شما <b>هرچیزی</b> را انتخاب کنید، ماشین جدید بازتاب وضعیت فعلی ماشین اصلی و مطابق همه ضبط وضعیت ها خواهد بود برای همه ضبط وضعیت ها در ماشین اصلی.</p></translation>
     </message>
     <message>
-      <source>Current &machine state</source>
-      <translation>وضعبت فعلی &ماشین</translation>
+        <source>Current &machine state</source>
+        <translation>وضعبت فعلی &ماشین</translation>
     </message>
     <message>
-      <source>Current &snapshot tree branch</source>
-      <translation>ضبط وضعیت شاخه درختی &فعلی</translation>
+        <source>Current &snapshot tree branch</source>
+        <translation>ضبط وضعیت شاخه درختی &فعلی</translation>
     </message>
     <message>
-      <source>&Everything</source>
-      <translation>&هرچیزی</translation>
+        <source>&Everything</source>
+        <translation>&هرچیزی</translation>
     </message>
     <message>
-      <source>New machine &name</source>
-      <translation>&نام ماشین جدید</translation>
+        <source>New machine &name</source>
+        <translation>&نام ماشین جدید</translation>
     </message>
     <message>
-      <source>&Full Clone</source>
-      <translation>&شبیه سازی کامل</translation>
+        <source>&Full Clone</source>
+        <translation>&شبیه سازی کامل</translation>
     </message>
     <message>
-      <source>&Linked Clone</source>
-      <translation>&شبیه سازی لینک شده</translation>
+        <source>&Linked Clone</source>
+        <translation>&شبیه سازی لینک شده</translation>
     </message>
     <message>
-      <source><p>Please choose the type of clone you wish to create.</p><p>If you choose <b>Full clone</b>, an exact copy (including all virtual hard disk files) of the original virtual machine will be created.</p><p>If you choose <b>Linked clone</b>, a new machine will be created, but the virtual hard disk files will be tied to the virtual hard disk files of original machine and you will not be able to move the new virtual machine to [...]
-      <translation><p>لطفا نوع شبیه سازی را که میخواهید برای ایجاد انتخاب کنید.</p><p>اگر شما <b>شبیه سازی کامل </b> را انتخاب کنید، یک کپی دقیق (شامل همه فایل های دیسک سخت مجازی) از ماشین مجازی اصلی ایجاد خواهد شد.</p><p>اگر شما <b>شبیه سازی لینک شده</b> را انتخاب کنید، یک ماشین جدید ایجاد خواهد شد، اما فایل های دیسک سخت مجازی به فایل های دیسک سخت مجازی ماشین اصلی گره خورده است و شما قادر به انتقال ماشین مجازی جدید به رایانه دیگر بدو [...]
+        <source><p>Please choose the type of clone you wish to create.</p><p>If you choose <b>Full clone</b>, an exact copy (including all virtual hard disk files) of the original virtual machine will be created.</p><p>If you choose <b>Linked clone</b>, a new machine will be created, but the virtual hard disk files will be tied to the virtual hard disk files of original machine and you will not be able to move the new virtual machine  [...]
+        <translation><p>لطفا نوع شبیه سازی را که میخواهید برای ایجاد انتخاب کنید.</p><p>اگر شما <b>شبیه سازی کامل </b> را انتخاب کنید، یک کپی دقیق (شامل همه فایل های دیسک سخت مجازی) از ماشین مجازی اصلی ایجاد خواهد شد.</p><p>اگر شما <b>شبیه سازی لینک شده</b> را انتخاب کنید، یک ماشین جدید ایجاد خواهد شد، اما فایل های دیسک سخت مجازی به فایل های دیسک سخت مجازی ماشین اصلی گره خورده است و شما قادر به انتقال ماشین مجازی جدید به رایانه دیگر ب [...]
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIWizardExportApp</name>
     <message>
-      <source>Checking files ...</source>
-      <translation>بررسی فایل ها ...</translation>
+        <source>Checking files ...</source>
+        <translation>بررسی فایل ها ...</translation>
     </message>
     <message>
-      <source>Removing files ...</source>
-      <translation>حذف فایل ها ...</translation>
+        <source>Removing files ...</source>
+        <translation>حذف فایل ها ...</translation>
     </message>
     <message>
-      <source>Exporting Appliance ...</source>
-      <translation>خروجیگیری وسیله ...</translation>
+        <source>Exporting Appliance ...</source>
+        <translation>خروجیگیری وسیله ...</translation>
     </message>
     <message>
-      <source>Export Virtual Appliance</source>
-      <translation>خروجیگیری وسیله مجازی</translation>
+        <source>Export Virtual Appliance</source>
+        <translation>خروجیگیری وسیله مجازی</translation>
     </message>
     <message>
-      <source>Restore Defaults</source>
-      <translation>بازگردانی پیش فرض</translation>
+        <source>Restore Defaults</source>
+        <translation>بازگردانی پیش فرض</translation>
     </message>
     <message>
-      <source>Export</source>
-      <translation>خروجیگیری</translation>
+        <source>Export</source>
+        <translation>خروجیگیری</translation>
     </message>
     <message>
-      <source>Virtual machines to export</source>
-      <translation>ماشین مجازی برای خروجیگیری</translation>
+        <source>Virtual machines to export</source>
+        <translation>ماشین مجازی برای خروجیگیری</translation>
     </message>
     <message>
-      <source><p>Please select the virtual machines that should be added to the appliance. You can select more than one. Please note that these machines have to be turned off before they can be exported.</p></source>
-      <translation><p>لطفا ماشین مجازی را که باید به لیست وسیله شما اضافه گردد را انتخاب کنید. میتوانید بیشتر از یکی انتخاب کنید. لطفا توجه داشته باشید که این ماشین ها قبل از خروجیگیری خاموش شده باشند.</p></translation>
+        <source><p>Please select the virtual machines that should be added to the appliance. You can select more than one. Please note that these machines have to be turned off before they can be exported.</p></source>
+        <translation><p>لطفا ماشین مجازی را که باید به لیست وسیله شما اضافه گردد را انتخاب کنید. میتوانید بیشتر از یکی انتخاب کنید. لطفا توجه داشته باشید که این ماشین ها قبل از خروجیگیری خاموش شده باشند.</p></translation>
     </message>
     <message>
-      <source>Appliance settings</source>
-      <translation>تنظیمات وسیله</translation>
+        <source>Appliance settings</source>
+        <translation>تنظیمات وسیله</translation>
     </message>
     <message>
-      <source>Please choose where to create the virtual appliance. You can create it on your own computer, on the Sun Cloud service or on an S3 storage server.</source>
-      <translation>لطفا انتخاب کنید کجا وسیله مجازی ایجاد شود. میتوانید آن را روی رایانه خود، یا در سرویس سان کلاود یا در سرور ذخیره ساز اِس 3 ایجاد کنید.</translation>
+        <source>Please choose where to create the virtual appliance. You can create it on your own computer, on the Sun Cloud service or on an S3 storage server.</source>
+        <translation>لطفا انتخاب کنید کجا وسیله مجازی ایجاد شود. میتوانید آن را روی رایانه خود، یا در سرویس سان کلاود یا در سرور ذخیره ساز اِس 3 ایجاد کنید.</translation>
     </message>
     <message>
-      <source>Create on</source>
-      <translation>ایجاد در</translation>
+        <source>Create on</source>
+        <translation>ایجاد در</translation>
     </message>
     <message>
-      <source>&This computer</source>
-      <translation>&این رایانه</translation>
+        <source>&This computer</source>
+        <translation>&این رایانه</translation>
     </message>
     <message>
-      <source>Sun &Cloud</source>
-      <translation>سان &کلاود</translation>
+        <source>Sun &Cloud</source>
+        <translation>سان &کلاود</translation>
     </message>
     <message>
-      <source>&Simple Storage System (S3)</source>
-      <translation>&سیستم ذخیره ساز ساده (S3)</translation>
+        <source>&Simple Storage System (S3)</source>
+        <translation>&سیستم ذخیره ساز ساده (S3)</translation>
     </message>
     <message>
-      <source>Appliance</source>
-      <translation>وسیله</translation>
+        <source>Appliance</source>
+        <translation>وسیله</translation>
     </message>
     <message>
-      <source>&Username:</source>
-      <translation>نام ک&اربر:</translation>
+        <source>&Username:</source>
+        <translation>نام ک&اربر:</translation>
     </message>
     <message>
-      <source>&Password:</source>
-      <translation>&رمزعبور:</translation>
+        <source>&Password:</source>
+        <translation>&رمزعبور:</translation>
     </message>
     <message>
-      <source>&Hostname:</source>
-      <translation>نام &میزبان:</translation>
+        <source>&Hostname:</source>
+        <translation>نام &میزبان:</translation>
     </message>
     <message>
-      <source>&Bucket:</source>
-      <translation>&سطل:</translation>
+        <source>&Bucket:</source>
+        <translation>&سطل:</translation>
     </message>
     <message>
-      <source>&File:</source>
-      <translation>&فایل:</translation>
+        <source>&File:</source>
+        <translation>&فایل:</translation>
     </message>
     <message>
-      <source>Please choose a virtual appliance file</source>
-      <translation>لطفا یک فایل وسیله مجازی انتخاب کنید</translation>
+        <source>Please choose a virtual appliance file</source>
+        <translation type="obsolete">لطفا یک فایل وسیله مجازی انتخاب کنید</translation>
     </message>
     <message>
-      <source>Open Virtualization Format Archive (%1)</source>
-      <translation>آرشیو فرمت مجازی سازی باز (%1)</translation>
+        <source>Open Virtualization Format Archive (%1)</source>
+        <translation>آرشیو فرمت مجازی سازی باز (%1)</translation>
     </message>
     <message>
-      <source>Open Virtualization Format (%1)</source>
-      <translation>فرمت مجازی سازی باز (%1)</translation>
+        <source>Open Virtualization Format (%1)</source>
+        <translation>فرمت مجازی سازی باز (%1)</translation>
     </message>
     <message>
-      <source>Write in legacy OVF 0.9 format for compatibility with other virtualization products.</source>
-      <translation>نوشتن در فرمت کاربردی OVF 0.9 برای سازگاری با سایر محصولات مجازی سازی.</translation>
+        <source>Write in legacy OVF 0.9 format for compatibility with other virtualization products.</source>
+        <translation>نوشتن در فرمت کاربردی OVF 0.9 برای سازگاری با سایر محصولات مجازی سازی.</translation>
     </message>
     <message>
-      <source>&Write legacy OVF 0.9</source>
-      <translation>&نوشتن کاربردی OVF 0.9</translation>
+        <source>&Write legacy OVF 0.9</source>
+        <translation type="obsolete">&نوشتن کاربردی OVF 0.9</translation>
     </message>
     <message>
-      <source>Create a Manifest file for automatic data integrity checks on import.</source>
-      <translation>ایجاد یک فایل مانیفست برای بررسی یکپارچگی خودکار داده در وارد کردن.</translation>
+        <source>Create a Manifest file for automatic data integrity checks on import.</source>
+        <translation>ایجاد یک فایل مانیفست برای بررسی یکپارچگی خودکار داده در وارد کردن.</translation>
     </message>
     <message>
-      <source>Write &Manifest file</source>
-      <translation>نوشتن &فایل مانیفست</translation>
+        <source>Write &Manifest file</source>
+        <translation>نوشتن &فایل مانیفست</translation>
     </message>
     <message>
-      <source>This is the descriptive information which will be added to the virtual appliance.  You can change it by double clicking on individual lines.</source>
-      <translation>این اطلاعات تشریحی هست که به وسیله مجازی اضافه شده است. میتوانید آن را با دومرتبه کلیک یا خطوط جداگانه تغییر دهید.</translation>
+        <source>This is the descriptive information which will be added to the virtual appliance.  You can change it by double clicking on individual lines.</source>
+        <translation>این اطلاعات تشریحی هست که به وسیله مجازی اضافه شده است. میتوانید آن را با دومرتبه کلیک یا خطوط جداگانه تغییر دهید.</translation>
     </message>
     <message>
-      <source>Virtual &machines to export</source>
-      <translation>ماشین مجازی برا&ی خروجیگیری</translation>
+        <source>Virtual &machines to export</source>
+        <translation>ماشین مجازی برا&ی خروجیگیری</translation>
     </message>
     <message>
-      <source>Appliance &settings</source>
-      <translation>تنظیمات &وسیله</translation>
+        <source>Appliance &settings</source>
+        <translation>تنظیمات &وسیله</translation>
     </message>
     <message>
-      <source>&Destination</source>
-      <translation>&مقصد</translation>
+        <source>&Destination</source>
+        <translation>&مقصد</translation>
     </message>
     <message>
-      <source>&Local Filesystem </source>
-      <translation>&فایل سیستم محلی </translation>
+        <source>&Local Filesystem </source>
+        <translation>&فایل سیستم محلی </translation>
     </message>
     <message>
-      <source>Storage settings</source>
-      <translation>تنظیمات ذخیره ساز</translation>
+        <source>Storage settings</source>
+        <translation>تنظیمات ذخیره ساز</translation>
     </message>
     <message>
-      <source>Please choose a file to export the virtual appliance to</source>
-      <translation>لطفا یک فایل برای خروجیگیری وسیله مجازی انتخاب کنید</translation>
+        <source>Please choose a file to export the virtual appliance to</source>
+        <translation>لطفا یک فایل برای خروجیگیری وسیله مجازی انتخاب کنید</translation>
     </message>
     <message>
-      <source>F&ormat:</source>
-      <translation>&فرمت:</translation>
+        <source>F&ormat:</source>
+        <translation>&فرمت:</translation>
     </message>
     <message>
-      <source>OVF 0.9</source>
-      <translation>OVF 0.9</translation>
+        <source>OVF 0.9</source>
+        <translation>OVF 0.9</translation>
     </message>
     <message>
-      <source>OVF 1.0</source>
-      <translation>OVF 1.0</translation>
+        <source>OVF 1.0</source>
+        <translation>OVF 1.0</translation>
     </message>
     <message>
-      <source>OVF 2.0</source>
-      <translation>OVF 2.0</translation>
+        <source>OVF 2.0</source>
+        <translation>OVF 2.0</translation>
     </message>
     <message>
-      <source>Write in standard OVF 1.0 format.</source>
-      <translation>نوشتن در فرمت استاندارد OVF 1.0.</translation>
+        <source>Write in standard OVF 1.0 format.</source>
+        <translation>نوشتن در فرمت استاندارد OVF 1.0.</translation>
     </message>
     <message>
-      <source>Write in new experimental OVF 2.0 format.</source>
-      <translation>نوشتن در فرمت آزمایشی OVF 2.0 .</translation>
+        <source>Write in new experimental OVF 2.0 format.</source>
+        <translation>نوشتن در فرمت آزمایشی OVF 2.0 .</translation>
     </message>
     <message>
-      <source>&Storage settings</source>
-      <translation>&تنظیمات ذخیره ساز</translation>
+        <source>&Storage settings</source>
+        <translation>&تنظیمات ذخیره ساز</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIWizardExportAppPageBasic3</name>
     <message>
-      <source><p>Please choose a filename to export the OVF/OVA to.</p><p>If you use an <i>ova</i> extension, then all the files will be combined into one Open Virtualization Format Archive.</p><p>If you use an <i>ovf</i> extension, several files will be written separately.</p><p>Other extensions are not allowed.</p></source>
-      <translation><p>لطفا برای خروجیگیری به OVF/OVA یک نام فایل انتخاب کنید.</p><p> اگر شما از پسوند نام فایل <i>ova</i> استفاده میکنید، سپس همه فایل ها داخل یک فرمت آرشیو مجازی سازی باز ادغام میشوند.</p><p> اگر شما از پسوند <i>ovf</i> استفاده میکنید، چندین فایل جداگانه نوشته خواهند شد.</p><p>سایر پسوندها اجازه داده نمیشود.</p></translation>
+        <source><p>Please choose a filename to export the OVF/OVA to.</p><p>If you use an <i>ova</i> extension, then all the files will be combined into one Open Virtualization Format Archive.</p><p>If you use an <i>ovf</i> extension, several files will be written separately.</p><p>Other extensions are not allowed.</p></source>
+        <translation><p>لطفا برای خروجیگیری به OVF/OVA یک نام فایل انتخاب کنید.</p><p> اگر شما از پسوند نام فایل <i>ova</i> استفاده میکنید، سپس همه فایل ها داخل یک فرمت آرشیو مجازی سازی باز ادغام میشوند.</p><p> اگر شما از پسوند <i>ovf</i> استفاده میکنید، چندین فایل جداگانه نوشته خواهند شد.</p><p>سایر پسوندها اجازه داده نمیشود.</p></translation>
     </message>
     <message>
-      <source>Please complete the additional fields like the username, password and the bucket, and provide a filename for the OVF target.</source>
-      <translation>لطفا فیلدهای اضافی مانند نام کاربری،رمزعبور، و سطل را پرکنید، و یک نام فایل برای OVF ارائه کنید.</translation>
+        <source>Please complete the additional fields like the username, password and the bucket, and provide a filename for the OVF target.</source>
+        <translation>لطفا فیلدهای اضافی مانند نام کاربری،رمزعبور، و سطل را پرکنید، و یک نام فایل برای OVF ارائه کنید.</translation>
     </message>
     <message>
-      <source>Please complete the additional fields like the username, password, hostname and the bucket, and provide a filename for the OVF target.</source>
-      <translation>لطفا فیلدهای اضافی مانند نام کاربری،رمزعبور،نام میزبان، و سطل را پرکنید، و یک نام فایل برای OVF ارائه کنید.</translation>
+        <source>Please complete the additional fields like the username, password, hostname and the bucket, and provide a filename for the OVF target.</source>
+        <translation>لطفا فیلدهای اضافی مانند نام کاربری،رمزعبور،نام میزبان، و سطل را پرکنید، و یک نام فایل برای OVF ارائه کنید.</translation>
     </message>
     <message>
-      <source>Choose a file to export the virtual appliance to...</source>
-      <translation>یک فایل برای خروجیگیری ماشین مجازی انتخاب کنید</translation>
+        <source>Choose a file to export the virtual appliance to...</source>
+        <translation>یک فایل برای خروجیگیری ماشین مجازی انتخاب کنید</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIWizardExportAppPageExpert</name>
     <message>
-      <source>Choose a file to export the virtual appliance to...</source>
-      <translation>یک فایل برای خروجیگیری ماشین مجازی انتخاب کنید</translation>
+        <source>Choose a file to export the virtual appliance to...</source>
+        <translation>یک فایل برای خروجیگیری ماشین مجازی انتخاب کنید</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIWizardFirstRun</name>
     <message>
-      <source>Select start-up disk</source>
-      <translation>دیسک-آغازگر را انتخاب کنید</translation>
+        <source>Select start-up disk</source>
+        <translation>دیسک-آغازگر را انتخاب کنید</translation>
     </message>
     <message>
-      <source>Start</source>
-      <translation>شروع</translation>
+        <source>Start</source>
+        <translation>شروع</translation>
     </message>
     <message>
-      <source><p>Please select a virtual optical disk file or a physical optical drive containing a disk to start your new virtual machine from.</p><p>The disk should be suitable for starting a computer from and should contain the operating system you wish to install on the virtual machine if you want to do that now. The disk will be ejected from the virtual drive automatically next time you switch the virtual machine off, but you can also do this yourself if needed usi [...]
-      <translation><p>لطفا یک فایل دیسک نوری مجازی یا یک درایو نوری فیزیکی شامل یک دیسک برای شروع ماشین جدید از آن انتخاب کنید.</p><p>دیسک باید مناسب برای شروع یک رایانه باشد و شامل سیستم عاملی که میخواهید روی آن نصب کنید باشد البته اگر میخواهید آن را حالا انجام دهید. در زمان بعدی که ماشین مجازی خاموش شد دیسک خودکار از درایو مجازی ایجکت خواهد شد، اما میتوانید این را خودتان هم اگر نیاز داشتید از منوی دستگاه انجام دهید.</p></translation>
+        <source><p>Please select a virtual optical disk file or a physical optical drive containing a disk to start your new virtual machine from.</p><p>The disk should be suitable for starting a computer from and should contain the operating system you wish to install on the virtual machine if you want to do that now. The disk will be ejected from the virtual drive automatically next time you switch the virtual machine off, but you can also do this yourself if needed u [...]
+        <translation><p>لطفا یک فایل دیسک نوری مجازی یا یک درایو نوری فیزیکی شامل یک دیسک برای شروع ماشین جدید از آن انتخاب کنید.</p><p>دیسک باید مناسب برای شروع یک رایانه باشد و شامل سیستم عاملی که میخواهید روی آن نصب کنید باشد البته اگر میخواهید آن را حالا انجام دهید. در زمان بعدی که ماشین مجازی خاموش شد دیسک خودکار از درایو مجازی ایجکت خواهد شد، اما میتوانید این را خودتان هم اگر نیاز داشتید از منوی دستگاه انجام دهید.</p></translation>
     </message>
     <message>
-      <source><p>Please select a virtual optical disk file or a physical optical drive containing a disk to start your new virtual machine from.</p><p>The disk should be suitable for starting a computer from. As this virtual machine has no hard drive you will not be able to install an operating system on it at the moment.</p></source>
-      <translation><p>لطفا یک فایل دیسک نوری مجازی یا یک درایو نوری فیزیکی شامل یک دیسک برای شروع ماشین جدید از آن انتخاب کنید.</p><p>این دیسک باید مناسب شروع رایانه باشد. از آنجا که این ماشین مجازی درایو سختی ندارد شما قادر به نصب سیستم عامل در آن اکنون نیستید.</p></translation>
+        <source><p>Please select a virtual optical disk file or a physical optical drive containing a disk to start your new virtual machine from.</p><p>The disk should be suitable for starting a computer from. As this virtual machine has no hard drive you will not be able to install an operating system on it at the moment.</p></source>
+        <translation><p>لطفا یک فایل دیسک نوری مجازی یا یک درایو نوری فیزیکی شامل یک دیسک برای شروع ماشین جدید از آن انتخاب کنید.</p><p>این دیسک باید مناسب شروع رایانه باشد. از آنجا که این ماشین مجازی درایو سختی ندارد شما قادر به نصب سیستم عامل در آن اکنون نیستید.</p></translation>
     </message>
     <message>
-      <source>Choose a virtual optical disk file...</source>
-      <translation>یک فایل دیسک نوری مجازی انتخاب کنید...</translation>
+        <source>Choose a virtual optical disk file...</source>
+        <translation>یک فایل دیسک نوری مجازی انتخاب کنید...</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIWizardImportApp</name>
     <message>
-      <source>Import Virtual Applicance</source>
-      <translation>واردکردن وسیله مجازی</translation>
+        <source>Import Virtual Applicance</source>
+        <translation type="obsolete">واردکردن وسیله مجازی</translation>
     </message>
     <message>
-      <source>Restore Defaults</source>
-      <translation>بازگردانی پیش فرض</translation>
+        <source>Restore Defaults</source>
+        <translation>بازگردانی پیش فرض</translation>
     </message>
     <message>
-      <source>Import</source>
-      <translation>واردکردن</translation>
+        <source>Import</source>
+        <translation>واردکردن</translation>
     </message>
     <message>
-      <source>Appliance to import</source>
-      <translation>وسیله برای واردکردن</translation>
+        <source>Appliance to import</source>
+        <translation>وسیله برای واردکردن</translation>
     </message>
     <message>
-      <source><p>VirtualBox currently supports importing appliances saved in the Open Virtualization Format (OVF). To continue, select the file to import below.</p></source>
-      <translation><p>ویرچوال باکس اکنون از واردکردن وسیله در فرمت مجازی سازی شده باز (OVF) پشتیبانی میکند. برای ادامه،از زیر یک فایل برای واردکردن انتخاب کنید.</p></translation>
+        <source><p>VirtualBox currently supports importing appliances saved in the Open Virtualization Format (OVF). To continue, select the file to import below.</p></source>
+        <translation><p>ویرچوال باکس اکنون از واردکردن وسیله در فرمت مجازی سازی شده باز (OVF) پشتیبانی میکند. برای ادامه،از زیر یک فایل برای واردکردن انتخاب کنید.</p></translation>
     </message>
     <message>
-      <source>Open appliance...</source>
-      <translation>بازکردن وسیله...</translation>
+        <source>Open appliance...</source>
+        <translation type="obsolete">بازکردن وسیله...</translation>
     </message>
     <message>
-      <source>Select an appliance to import</source>
-      <translation>یک وسیله برای واردکردن انتخاب کنید</translation>
+        <source>Select an appliance to import</source>
+        <translation type="obsolete">یک وسیله برای واردکردن انتخاب کنید</translation>
     </message>
     <message>
-      <source>Open Virtualization Format (%1)</source>
-      <translation>فرمت مجازی سازی باز (%1)</translation>
+        <source>Open Virtualization Format (%1)</source>
+        <translation>فرمت مجازی سازی باز (%1)</translation>
     </message>
     <message>
-      <source>Appliance settings</source>
-      <translation>تنظیمات وسیله</translation>
+        <source>Appliance settings</source>
+        <translation>تنظیمات وسیله</translation>
     </message>
     <message>
-      <source>These are the virtual machines contained in the appliance and the suggested settings of the imported VirtualBox machines. You can change many of the properties shown by double-clicking on the items and disable others using the check boxes below.</source>
-      <translation>اینها ماشین های مجازی شامل در وسیله و تنظیمات پیشنهاد شده ماشین های مجازی واردشده هستند.میتوانید بسیاری از مشخصات نمایش داده شده را بادومرتبه کلیک روی آیتم تغییر دهید و بقیه را توسط چک باکس زیر غیرفعال کنید.</translation>
+        <source>These are the virtual machines contained in the appliance and the suggested settings of the imported VirtualBox machines. You can change many of the properties shown by double-clicking on the items and disable others using the check boxes below.</source>
+        <translation>اینها ماشین های مجازی شامل در وسیله و تنظیمات پیشنهاد شده ماشین های مجازی واردشده هستند.میتوانید بسیاری از مشخصات نمایش داده شده را بادومرتبه کلیک روی آیتم تغییر دهید و بقیه را توسط چک باکس زیر غیرفعال کنید.</translation>
     </message>
     <message>
-      <source>Import Virtual Appliance</source>
-      <translation>وارد کردن یک وسیله مجازی</translation>
+        <source>Import Virtual Appliance</source>
+        <translation>وارد کردن یک وسیله مجازی</translation>
     </message>
     <message>
-      <source>Choose a virtual appliance file to import...</source>
-      <translation>یک وسیله مجازی برای وارد کردن انتخاب کنید...</translation>
+        <source>Choose a virtual appliance file to import...</source>
+        <translation>یک وسیله مجازی برای وارد کردن انتخاب کنید...</translation>
     </message>
     <message>
-      <source>Please choose a virtual appliance file to import</source>
-      <translation>لطفا یک فایل وسیله مجازی برای وارد کردن انتخاب کنید</translation>
+        <source>Please choose a virtual appliance file to import</source>
+        <translation>لطفا یک فایل وسیله مجازی برای وارد کردن انتخاب کنید</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIWizardNewVD</name>
     <message>
-      <source>Create Virtual Hard Drive</source>
-      <translation>ایجاد یک درایو سخت مجازی</translation>
+        <source>Create Virtual Hard Drive</source>
+        <translation type="obsolete">ایجاد یک درایو سخت مجازی</translation>
     </message>
     <message>
-      <source>Create</source>
-      <translation>ایجاد</translation>
+        <source>Create</source>
+        <translation>ایجاد</translation>
     </message>
     <message>
-      <source>Hard drive file type</source>
-      <translation>نوع فایل درایو سخت</translation>
+        <source>Hard drive file type</source>
+        <translation type="obsolete">نوع فایل درایو سخت</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>لطفا نوع فایلی را که میخواهید برای درایو سخت مجازی جدید استفاده کنید،انتخاب کنید. اگر نمیخواهید آن را با سایر برنامه های مجازی سازی استفاده کنید،میتوانید تنظیمات را تغییر ندهید.</translation>
+        <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>
     </message>
     <message>
-      <source>Storage on physical hard drive</source>
-      <translation>ذخیره ساز در درایو سخت فیزیکی</translation>
+        <source>Storage on physical hard drive</source>
+        <translation type="obsolete">ذخیره ساز در درایو سخت فیزیکی</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>لطفا انتخاب کنید چه موقع فایل درایو سخت مجازی جدید باید بزرگ شود به همان اندازه که استفاده شده است (پویا اختصاص داده شده) یا آن باید در حداکثر حجم ایجاد شود (حجم ثابت شده).</translation>
+        <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>
     </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><p>یک فایل درایو سخت <b>پویا اختصاص داده شده</b> فقط از فضای دیسک سخت فیزیکی شما استفاده میکند و آن را پر میکند (حداکثر تا تا <b>حجم ثابت شده</b>)، هرچند آن دوباره خودکار وقتیکه فضای آن خالی شد کوچک نمیشود.</p></translation>
+        <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>
     </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><p>یک فایل درایو سخت <b>حجم ثابت شده</b> ممکن است در برخی سیستم ها بیشتر طول بکشد تا ایجاد شود اما اغلب استفاده سریعتری دارد.</p></translation>
+        <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>
     </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><p>شما میتوانید <b>تقسیم</b> فایل درایو سخت به چندین فایل تا حجم دو گیگابایت را انتخاب کنید. این عمدتا برای ذخیره ماشین مجازی در دستگاه یو اِس بی قابل حمل یا سیستم قدیمی،که نمیتواند فایل های بزرگ را استفاده کند سودمند است.</translation>
+        <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>
     </message>
     <message>
-      <source>&Dynamically allocated</source>
-      <translation>&پویا اختصاص داده شده</translation>
+        <source>&Dynamically allocated</source>
+        <translation>&پویا اختصاص داده شده</translation>
     </message>
     <message>
-      <source>&Fixed size</source>
-      <translation>&حجم ثابت شده</translation>
+        <source>&Fixed size</source>
+        <translation>&حجم ثابت شده</translation>
     </message>
     <message>
-      <source>&Split into files of less than 2GB</source>
-      <translation>تقسیم به فایل هایی &کوچکتر از 2گیگابایت</translation>
+        <source>&Split into files of less than 2GB</source>
+        <translation>تقسیم به فایل هایی &کوچکتر از 2گیگابایت</translation>
     </message>
     <message>
-      <source><nobr>%1 (%2 B)</nobr></source>
-      <translation><nobr>%1 (%2 بایت)</nobr></translation>
+        <source><nobr>%1 (%2 B)</nobr></source>
+        <translation><nobr>%1 (%2 بایت)</nobr></translation>
     </message>
     <message>
-      <source>File location and size</source>
-      <translation>حجم و مکان فایل</translation>
+        <source>File location and size</source>
+        <translation>حجم و مکان فایل</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>لطفا نام درایو سخت مجازی جدید را در کادر زیر وارد کنید یا روی پوشه آیکون برای انتخاب پوشه دیگری برای ایجاد فایل در آن کلیک کنید.</translation>
+        <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>
     </message>
     <message>
-      <source>Choose a location for new virtual hard drive file...</source>
-      <translation>یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید...</translation>
+        <source>Choose a location for new virtual hard drive file...</source>
+        <translation type="obsolete">یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید...</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>حجم درایو سخت مجازی را در مگابایت انتخاب کنید.این حجم محدودیتی در مقدار فایل داده هست که ماشین مجازی قادر به ذخیره آن در درایو سخت فیزیکی هست.</translation>
+        <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>
     </message>
     <message>
-      <source>File &location</source>
-      <translation>مکان &فایل</translation>
+        <source>File &location</source>
+        <translation>مکان &فایل</translation>
     </message>
     <message>
-      <source>File &size</source>
-      <translation>&حجم فایل</translation>
+        <source>File &size</source>
+        <translation>&حجم فایل</translation>
     </message>
     <message>
-      <source>Hard drive file &type</source>
-      <translation>نوع فایل &درایو سخت</translation>
+        <source>Hard drive file &type</source>
+        <translation type="obsolete">نوع فایل &درایو سخت</translation>
     </message>
     <message>
-      <source>Create Virtual Hard Disk</source>
-      <translation>ایجاد دیسک سخت مجازی</translation>
+        <source>Create Virtual Hard Disk</source>
+        <translation>ایجاد دیسک سخت مجازی</translation>
     </message>
     <message>
-      <source>Hard disk file type</source>
-      <translation>نوع فایل دیسک سخت</translation>
+        <source>Hard disk 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 hard disk. 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>Storage on physical hard disk</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>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>
     </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>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>
     </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>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>
     </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>
+        <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>
     </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>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>
     </message>
     <message>
-      <source>Choose a location for new virtual hard disk file...</source>
-      <translation>یک مکان برای فایل دیسک سخت مجازی جدید انتخاب کنید...</translation>
+        <source>Choose a location for new virtual hard disk file...</source>
+        <translation>یک مکان برای فایل دیسک سخت مجازی جدید انتخاب کنید...</translation>
     </message>
     <message>
-      <source>Select the size of the virtual hard disk in megabytes. This size is the limit on the amount of file data that a virtual machine will be able to store on the hard disk.</source>
-      <translation>حجم دیسک سخت مجازی را به مگابایت انتخاب کنید. این حجم مقدار محدودیت برای فایل های داده ای است که ماشین مجازی قادر به ذخیره آن در دیسک سخت است</translation>
+        <source>Select the size of the virtual hard disk in megabytes. This size is the limit on the amount of file data that a virtual machine will be able to store on the hard disk.</source>
+        <translation>حجم دیسک سخت مجازی را به مگابایت انتخاب کنید. این حجم مقدار محدودیت برای فایل های داده ای است که ماشین مجازی قادر به ذخیره آن در دیسک سخت است</translation>
     </message>
     <message>
-      <source>Hard disk file &type</source>
-      <translation>نوع فایل دیسک سخت&</translation>
+        <source>Hard disk file &type</source>
+        <translation>نوع فایل دیسک سخت&</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>UIWizardNewVM</name>
     <message>
-      <source>Create Virtual Machine</source>
-      <translation>ایجاد ماشین مجازی</translation>
+        <source>Create Virtual Machine</source>
+        <translation>ایجاد ماشین مجازی</translation>
     </message>
     <message>
-      <source>Create</source>
-      <translation>ایجاد</translation>
+        <source>Create</source>
+        <translation>ایجاد</translation>
     </message>
     <message>
-      <source>IDE Controller</source>
-      <translation>کنترلر IDE</translation>
+        <source>IDE Controller</source>
+        <translation type="obsolete">کنترلر IDE</translation>
     </message>
     <message>
-      <source>SATA Controller</source>
-      <translation>کنترلر SATA</translation>
+        <source>SATA Controller</source>
+        <translation type="obsolete">کنترلر SATA</translation>
     </message>
     <message>
-      <source>SCSI Controller</source>
-      <translation>کنترلر SCSI</translation>
+        <source>SCSI Controller</source>
+        <translation type="obsolete">کنترلر SCSI</translation>
     </message>
     <message>
-      <source>Floppy Controller</source>
-      <translation>کنترلر فلاپی</translation>
+        <source>Floppy Controller</source>
+        <translation type="obsolete">کنترلر فلاپی</translation>
     </message>
     <message>
-      <source>SAS Controller</source>
-      <translation>کنترلر SAS</translation>
+        <source>SAS Controller</source>
+        <translation type="obsolete">کنترلر SAS</translation>
     </message>
     <message>
-      <source>Name and operating system</source>
-      <translation>نام و سیستم عامل</translation>
+        <source>Name and operating system</source>
+        <translation>نام و سیستم عامل</translation>
     </message>
     <message>
-      <source>Please choose a descriptive name for the new virtual machine and select the type of operating system you intend to install on it. The name you choose will be used throughout VirtualBox to identify this machine.</source>
-      <translation>لطفا یک نام تشریحی برای ماشین مجازی جدید و نوع سیستم عاملی را که میخواهید در آن نصب کنید انتخاب کنید.نامی که انتخاب میکنید برای شناسایی کلی این ماشین بکار میرود.</translation>
+        <source>Please choose a descriptive name for the new virtual machine and select the type of operating system you intend to install on it. The name you choose will be used throughout VirtualBox to identify this machine.</source>
+        <translation>لطفا یک نام تشریحی برای ماشین مجازی جدید و نوع سیستم عاملی را که میخواهید در آن نصب کنید انتخاب کنید.نامی که انتخاب میکنید برای شناسایی کلی این ماشین بکار میرود.</translation>
     </message>
     <message>
-      <source>Memory size</source>
-      <translation>حجم حافظه</translation>
+        <source>Memory size</source>
+        <translation>حجم حافظه</translation>
     </message>
     <message>
-      <source><p>Select the amount of memory (RAM) in megabytes to be allocated to the virtual machine.</p><p>The recommended memory size is <b>%1</b> MB.</p></source>
-      <translation><p>لطفا مقدار حافظه (RAM) در مگابایت برای اختصاص به ماشین مجازی انتخاب کنید.</p><p>حجم توصیه شده حافظه <b>%1</b> مگابایت است.</p></translation>
+        <source><p>Select the amount of memory (RAM) in megabytes to be allocated to the virtual machine.</p><p>The recommended memory size is <b>%1</b> MB.</p></source>
+        <translation><p>لطفا مقدار حافظه (RAM) در مگابایت برای اختصاص به ماشین مجازی انتخاب کنید.</p><p>حجم توصیه شده حافظه <b>%1</b> مگابایت است.</p></translation>
     </message>
     <message>
-      <source>Hard drive</source>
-      <translation>درایو سخت</translation>
+        <source>Hard drive</source>
+        <translation type="obsolete">درایو سخت</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><p>اگر میخواهید درایو سخت مجازی به ماشین جدید اضافه کنید. میتوانید یک فایل درایو سخت جدید ایجاد کنید یا یکی از لیست انتخاب کنید یا توسط آیکون پوشه از مکان دیگری انتخاب کنید.</p><p>اگر نیاز به راه اندازی تنظیمات بیشتر ذخیره ساز دارید میتوانید این مرحله را رد کرده و تغییرات را در تنظیمات ماشین وقتی ایجاد شد انجام دهید.</p><p>حجم توصیه شده درایو سخت <b>%1</b> است.</p></translation>
+        <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>
     </message>
     <message>
-      <source>Choose a virtual hard drive file...</source>
-      <translation>یک فایل درایو سخت مجازی انتخاب کنید...</translation>
+        <source>Choose a virtual hard drive file...</source>
+        <translation type="obsolete">یک فایل درایو سخت مجازی انتخاب کنید...</translation>
     </message>
     <message>
-      <source>&Memory size</source>
-      <translation>حجم &حافظه</translation>
+        <source>&Memory size</source>
+        <translation>حجم &حافظه</translation>
     </message>
     <message>
-      <source>&Do not add a virtual hard drive</source>
-      <translation>یک درایو سخت مجازی اضافه نک&ن</translation>
+        <source>&Do not add a virtual hard drive</source>
+        <translation type="obsolete">یک درایو سخت مجازی اضافه نک&ن</translation>
     </message>
     <message>
-      <source>&Create a virtual hard drive now</source>
-      <translation>یک درایو سخت مجازی حالا ایجاد &کن</translation>
+        <source>&Create a virtual hard drive now</source>
+        <translation type="obsolete">یک درایو سخت مجازی حالا ایجاد &کن</translation>
     </message>
     <message>
-      <source>&Use an existing virtual hard drive file</source>
-      <translation>از یک فایل درایو سخت مجازی &استفاده کنید</translation>
+        <source>&Use an existing virtual hard drive file</source>
+        <translation type="obsolete">از یک فایل درایو سخت مجازی &استفاده کنید</translation>
     </message>
     <message>
-      <source>Hard disk</source>
-      <translation>دیسک سخت</translation>
+        <source>Hard disk</source>
+        <translation>دیسک سخت</translation>
     </message>
     <message>
-      <source><p>If you wish you can add a virtual hard disk to the new machine. You can either create a new hard disk file or select one from the list or from another location using the folder icon.</p><p>If you need a more complex storage set-up you can skip this step and make the changes to the machine settings once the machine is created.</p><p>The recommended size of the hard disk is <b>%1</b>.</p></source>
-      <translation><p>اگر میخواهید درایو سخت مجازی به ماشین جدید اضافه کنید. میتوانید یک فایل درایو سخت جدید ایجاد کنید یا یکی از لیست انتخاب کنید یا توسط آیکون پوشه از مکان دیگری انتخاب کنید.</p><p>اگر نیاز به راه اندازی تنظیمات بیشتر ذخیره ساز دارید میتوانید این مرحله را رد کرده و تغییرات را در تنظیمات ماشین وقتی ایجاد شد انجام دهید.</p><p>حجم توصیه شده درایو سخت <b>%1</b> است.</p></translation>
+        <source><p>If you wish you can add a virtual hard disk to the new machine. You can either create a new hard disk file or select one from the list or from another location using the folder icon.</p><p>If you need a more complex storage set-up you can skip this step and make the changes to the machine settings once the machine is created.</p><p>The recommended size of the hard disk is <b>%1</b>.</p></source>
+        <translation><p>اگر میخواهید درایو سخت مجازی به ماشین جدید اضافه کنید. میتوانید یک فایل درایو سخت جدید ایجاد کنید یا یکی از لیست انتخاب کنید یا توسط آیکون پوشه از مکان دیگری انتخاب کنید.</p><p>اگر نیاز به راه اندازی تنظیمات بیشتر ذخیره ساز دارید میتوانید این مرحله را رد کرده و تغییرات را در تنظیمات ماشین وقتی ایجاد شد انجام دهید.</p><p>حجم توصیه شده درایو سخت <b>%1</b> است.</p></translation>
     </message>
     <message>
-      <source>&Do not add a virtual hard disk</source>
-      <translation>دیسک سخت مجازی اضافه نکن&</translation>
+        <source>&Do not add a virtual hard disk</source>
+        <translation>دیسک سخت مجازی اضافه نکن&</translation>
     </message>
     <message>
-      <source>&Create a virtual hard disk now</source>
-      <translation>حالا یک دیسک سخت مجازی ایجاد کن&</translation>
+        <source>&Create a virtual hard disk now</source>
+        <translation>حالا یک دیسک سخت مجازی ایجاد کن&</translation>
     </message>
     <message>
-      <source>&Use an existing virtual hard disk file</source>
-      <translation>از یک فایل دیسک سخت مجازی استفاده کن&</translation>
+        <source>&Use an existing virtual hard disk file</source>
+        <translation>از یک فایل دیسک سخت مجازی استفاده کن&</translation>
     </message>
     <message>
-      <source>Choose a virtual hard disk file...</source>
-      <translation>یک فایل ديسک سخت مجازی انتخاب کنید...</translation>
+        <source>Choose a virtual hard disk file...</source>
+        <translation>یک فایل ديسک سخت مجازی انتخاب کنید...</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxAboutDlg</name>
     <message>
-      <source>VirtualBox - About</source>
-      <translation>ویرچوال باکس - درباره</translation>
+        <source>VirtualBox - About</source>
+        <translation>ویرچوال باکس - درباره</translation>
     </message>
     <message>
-      <source>VirtualBox Graphical User Interface</source>
-      <translation>رابط گرافیکی کاربر ویرچوال باکس</translation>
+        <source>VirtualBox Graphical User Interface</source>
+        <translation>رابط گرافیکی کاربر ویرچوال باکس</translation>
     </message>
     <message>
-      <source>Version %1</source>
-      <translation>نسخه %1</translation>
+        <source>Version %1</source>
+        <translation>نسخه %1</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxEmptyFileSelector</name>
     <message>
-      <source>&Choose...</source>
-      <translation>انتخا&ب...</translation>
+        <source>&Choose...</source>
+        <translation type="obsolete">انتخا&ب...</translation>
     </message>
     <message>
-      <source>Choose...</source>
-      <translation>انتخاب کنید...</translation>
+        <source>Choose...</source>
+        <translation>انتخاب کنید...</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxFilePathSelectorWidget</name>
     <message>
-      <source><reset to default></source>
-      <translation><ریست به پیش فرض></translation>
+        <source><reset to default></source>
+        <translation><ریست به پیش فرض></translation>
     </message>
     <message>
-      <source>The actual default path value will be displayed after accepting the changes and opening this window again.</source>
-      <translation>مقدار مسیر پیش فرض واقعی بعداز پذیرفتن تغییرات و بازکردن دوباره این پنجره نمایش داده میشود.</translation>
+        <source>The actual default path value will be displayed after accepting the changes and opening this window again.</source>
+        <translation>مقدار مسیر پیش فرض واقعی بعداز پذیرفتن تغییرات و بازکردن دوباره این پنجره نمایش داده میشود.</translation>
     </message>
     <message>
-      <source><not selected></source>
-      <translation><انتخاب نشده است></translation>
+        <source><not selected></source>
+        <translation><انتخاب نشده است></translation>
     </message>
     <message>
-      <source>Please use the <b>Other...</b> item from the drop-down list to select a path.</source>
-      <translation>لطفا از آیتم <b>سایر...</b> از لیست کشویی برای انتخاب مسیر استفاده کنید.</translation>
+        <source>Please use the <b>Other...</b> item from the drop-down list to select a path.</source>
+        <translation>لطفا از آیتم <b>سایر...</b> از لیست کشویی برای انتخاب مسیر استفاده کنید.</translation>
     </message>
     <message>
-      <source>Other...</source>
-      <translation>سایر...</translation>
+        <source>Other...</source>
+        <translation>سایر...</translation>
     </message>
     <message>
-      <source>Reset</source>
-      <translation>ریست</translation>
+        <source>Reset</source>
+        <translation>ریست</translation>
     </message>
     <message>
-      <source>Opens a window to select a different folder.</source>
-      <translation>بازکردن یک پنجره برای انتخاب پوشه متفاوت.</translation>
+        <source>Opens a window to select a different folder.</source>
+        <translation type="obsolete">بازکردن یک پنجره برای انتخاب پوشه متفاوت.</translation>
     </message>
     <message>
-      <source>Resets the folder path to the default value.</source>
-      <translation>ریست مسیر پوشه به مقدار پیش فرض.</translation>
+        <source>Resets the folder path to the default value.</source>
+        <translation>ریست مسیر پوشه به مقدار پیش فرض.</translation>
     </message>
     <message>
-      <source>Opens a window to select a different file.</source>
-      <translation>بازکردن یک پنجره برای انتخاب فایل متفاوت.</translation>
+        <source>Opens a window to select a different file.</source>
+        <translation type="obsolete">بازکردن یک پنجره برای انتخاب فایل متفاوت.</translation>
     </message>
     <message>
-      <source>Resets the file path to the default value.</source>
-      <translation>ریست مسیر فایل به مقدار پیش فرض.</translation>
+        <source>Resets the file path to the default value.</source>
+        <translation>ریست مسیر فایل به مقدار پیش فرض.</translation>
     </message>
     <message>
-      <source>&Copy</source>
-      <translation>ک&پی</translation>
+        <source>&Copy</source>
+        <translation>ک&پی</translation>
     </message>
     <message>
-      <source>Please type the folder path here.</source>
-      <translation>لطفا مسیر پوشه را اینجا وارد کنید.</translation>
+        <source>Please type the folder path here.</source>
+        <translation type="obsolete">لطفا مسیر پوشه را اینجا وارد کنید.</translation>
     </message>
     <message>
-      <source>Please type the file path here.</source>
-      <translation>لطفا مسیر فایل را اینجا وارد کنید.</translation>
+        <source>Please type the file path here.</source>
+        <translation type="obsolete">لطفا مسیر فایل را اینجا وارد کنید.</translation>
     </message>
     <message>
-      <source>The actual default path value will be displayed after accepting the changes and opening this window again.</source>
-      <comment>new</comment>
-      <translation>مقدار مسیر پیش فرض واقعی بعداز پذیرفتن تغییرات و بازکردن دوباره این پنجره نمایش داده میشود.</translation>
+        <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>
     </message>
     <message>
-      <source>Displays a window to select a different folder.</source>
-      <translation>پنجره ای برای انتخاب پوشه ای دیگر را نشان میدهد</translation>
+        <source>Displays a window to select a different folder.</source>
+        <translation>پنجره ای برای انتخاب پوشه ای دیگر را نشان میدهد</translation>
     </message>
     <message>
-      <source>Displays a window to select a different file.</source>
-      <translation>پنجره ای برای انتخاب فایلی دیگر را نشان میدهد</translation>
+        <source>Displays a window to select a different file.</source>
+        <translation>پنجره ای برای انتخاب فایلی دیگر را نشان میدهد</translation>
     </message>
     <message>
-      <source>Holds the folder path.</source>
-      <translation>نگه داشتن مسیر پوشه</translation>
+        <source>Holds the folder path.</source>
+        <translation>نگه داشتن مسیر پوشه</translation>
     </message>
     <message>
-      <source>Holds the file path.</source>
-      <translation>نگه داشتن مسیر فایل</translation>
+        <source>Holds the file path.</source>
+        <translation>نگه داشتن مسیر فایل</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxGlobal</name>
     <message>
-      <source>Unknown device %1:%2</source>
-      <comment>USB device details</comment>
-      <translation>دستگاه ناشناخته %1:%2</translation>
+        <source>Unknown device %1:%2</source>
+        <comment>USB device details</comment>
+        <translation>دستگاه ناشناخته %1:%2</translation>
     </message>
     <message>
-      <source><nobr>Vendor ID: %1</nobr><br><nobr>Product ID: %2</nobr><br><nobr>Revision: %3</nobr></source>
-      <comment>USB device tooltip</comment>
-      <translation><nobr>شناسه فروشنده: %1</nobr><br><nobr>شناسه محصول: %2</nobr><br><nobr>بازبینی: %3</nobr></translation>
+        <source><nobr>Vendor ID: %1</nobr><br><nobr>Product ID: %2</nobr><br><nobr>Revision: %3</nobr></source>
+        <comment>USB device tooltip</comment>
+        <translation><nobr>شناسه فروشنده: %1</nobr><br><nobr>شناسه محصول: %2</nobr><br><nobr>بازبینی: %3</nobr></translation>
     </message>
     <message>
-      <source><br><nobr>Serial No. %1</nobr></source>
-      <comment>USB device tooltip</comment>
-      <translation><br><nobr>شماره سریال. %1</nobr></translation>
+        <source><br><nobr>Serial No. %1</nobr></source>
+        <comment>USB device tooltip</comment>
+        <translation><br><nobr>شماره سریال. %1</nobr></translation>
     </message>
     <message>
-      <source><br><nobr>State: %1</nobr></source>
-      <comment>USB device tooltip</comment>
-      <translation><br><nobr>وضعیت: %1</nobr></translation>
+        <source><br><nobr>State: %1</nobr></source>
+        <comment>USB device tooltip</comment>
+        <translation><br><nobr>وضعیت: %1</nobr></translation>
     </message>
     <message>
-      <source>Name</source>
-      <comment>details report</comment>
-      <translation>نام</translation>
+        <source>Name</source>
+        <comment>details report</comment>
+        <translation>نام</translation>
     </message>
     <message>
-      <source>OS Type</source>
-      <comment>details report</comment>
-      <translation>نوع سیستم عامل</translation>
+        <source>OS Type</source>
+        <comment>details report</comment>
+        <translation>نوع سیستم عامل</translation>
     </message>
     <message>
-      <source>Base Memory</source>
-      <comment>details report</comment>
-      <translation>حافظه پایه</translation>
+        <source>Base Memory</source>
+        <comment>details report</comment>
+        <translation>حافظه پایه</translation>
     </message>
     <message>
-      <source>General</source>
-      <comment>details report</comment>
-      <translation>عمومی</translation>
+        <source>General</source>
+        <comment>details report</comment>
+        <translation>عمومی</translation>
     </message>
     <message>
-      <source>Video Memory</source>
-      <comment>details report</comment>
-      <translation>حافظه ویدیو</translation>
+        <source>Video Memory</source>
+        <comment>details report</comment>
+        <translation>حافظه ویدیو</translation>
     </message>
     <message>
-      <source>Boot Order</source>
-      <comment>details report</comment>
-      <translation>ترتیب بوت</translation>
+        <source>Boot Order</source>
+        <comment>details report</comment>
+        <translation>ترتیب بوت</translation>
     </message>
     <message>
-      <source>ACPI</source>
-      <comment>details report</comment>
-      <translation>ACPI</translation>
+        <source>ACPI</source>
+        <comment>details report</comment>
+        <translation>ACPI</translation>
     </message>
     <message>
-      <source>I/O APIC</source>
-      <comment>details report</comment>
-      <translation>I/O APIC</translation>
+        <source>I/O APIC</source>
+        <comment>details report</comment>
+        <translation>I/O APIC</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details report (ACPI)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details report (ACPI)</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (ACPI)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (ACPI)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details report (I/O APIC)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details report (I/O APIC)</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (I/O APIC)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (I/O APIC)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (audio)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (audio)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Audio</source>
-      <comment>details report</comment>
-      <translation>صدا</translation>
+        <source>Audio</source>
+        <comment>details report</comment>
+        <translation>صدا</translation>
     </message>
     <message>
-      <source>Adapter %1</source>
-      <comment>details report (network)</comment>
-      <translation>آداپتور %1</translation>
+        <source>Adapter %1</source>
+        <comment>details report (network)</comment>
+        <translation>آداپتور %1</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (network)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (network)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Network</source>
-      <comment>details report</comment>
-      <translation>شبکه</translation>
+        <source>Network</source>
+        <comment>details report</comment>
+        <translation>شبکه</translation>
     </message>
     <message>
-      <source>Device Filters</source>
-      <comment>details report (USB)</comment>
-      <translation>فیلترهای دستگاه</translation>
+        <source>Device Filters</source>
+        <comment>details report (USB)</comment>
+        <translation>فیلترهای دستگاه</translation>
     </message>
     <message>
-      <source>%1 (%2 active)</source>
-      <comment>details report (USB)</comment>
-      <translation>%1 (%2 فعال)</translation>
+        <source>%1 (%2 active)</source>
+        <comment>details report (USB)</comment>
+        <translation>%1 (%2 فعال)</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (USB)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (USB)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Powered Off</source>
-      <comment>MachineState</comment>
-      <translation>قطع برق شده است</translation>
+        <source>Powered Off</source>
+        <comment>MachineState</comment>
+        <translation>قطع برق شده است</translation>
     </message>
     <message>
-      <source>Saved</source>
-      <comment>MachineState</comment>
-      <translation>ذخیره شده</translation>
+        <source>Saved</source>
+        <comment>MachineState</comment>
+        <translation>ذخیره شده</translation>
     </message>
     <message>
-      <source>Aborted</source>
-      <comment>MachineState</comment>
-      <translation>لغو شده است</translation>
+        <source>Aborted</source>
+        <comment>MachineState</comment>
+        <translation>لغو شده است</translation>
     </message>
     <message>
-      <source>Running</source>
-      <comment>MachineState</comment>
-      <translation>در حال اِجرا</translation>
+        <source>Running</source>
+        <comment>MachineState</comment>
+        <translation>در حال اِجرا</translation>
     </message>
     <message>
-      <source>Paused</source>
-      <comment>MachineState</comment>
-      <translation>وقفه شده است</translation>
+        <source>Paused</source>
+        <comment>MachineState</comment>
+        <translation>وقفه شده است</translation>
     </message>
     <message>
-      <source>Starting</source>
-      <comment>MachineState</comment>
-      <translation>درحال شروع</translation>
+        <source>Starting</source>
+        <comment>MachineState</comment>
+        <translation>درحال شروع</translation>
     </message>
     <message>
-      <source>Stopping</source>
-      <comment>MachineState</comment>
-      <translation>درحال توقف</translation>
+        <source>Stopping</source>
+        <comment>MachineState</comment>
+        <translation>درحال توقف</translation>
     </message>
     <message>
-      <source>Saving</source>
-      <comment>MachineState</comment>
-      <translation>ذخیره کردن</translation>
+        <source>Saving</source>
+        <comment>MachineState</comment>
+        <translation>ذخیره کردن</translation>
     </message>
     <message>
-      <source>Restoring</source>
-      <comment>MachineState</comment>
-      <translation>بازگردانی</translation>
+        <source>Restoring</source>
+        <comment>MachineState</comment>
+        <translation>بازگردانی</translation>
     </message>
     <message>
-      <source>Spawning</source>
-      <comment>SessionState</comment>
-      <translation>Spawning</translation>
+        <source>Spawning</source>
+        <comment>SessionState</comment>
+        <translation>Spawning</translation>
     </message>
     <message>
-      <source>None</source>
-      <comment>DeviceType</comment>
-      <translation>هیچیک</translation>
+        <source>None</source>
+        <comment>DeviceType</comment>
+        <translation>هیچیک</translation>
     </message>
     <message>
-      <source>Floppy</source>
-      <comment>DeviceType</comment>
-      <translation>فلاپی</translation>
+        <source>Floppy</source>
+        <comment>DeviceType</comment>
+        <translation>فلاپی</translation>
     </message>
     <message>
-      <source>CD/DVD</source>
-      <comment>DeviceType</comment>
-      <translation>سی دی/دی وی دی-رام</translation>
+        <source>CD/DVD</source>
+        <comment>DeviceType</comment>
+        <translation type="obsolete">سی دی/دی وی دی-رام</translation>
     </message>
     <message>
-      <source>Hard Disk</source>
-      <comment>DeviceType</comment>
-      <translation>دیسک سخت</translation>
+        <source>Hard Disk</source>
+        <comment>DeviceType</comment>
+        <translation>دیسک سخت</translation>
     </message>
     <message>
-      <source>Network</source>
-      <comment>DeviceType</comment>
-      <translation>شبکه</translation>
+        <source>Network</source>
+        <comment>DeviceType</comment>
+        <translation>شبکه</translation>
     </message>
     <message>
-      <source>Null Audio Driver</source>
-      <comment>AudioDriverType</comment>
-      <translation>درایور صوتی تهی</translation>
+        <source>Null Audio Driver</source>
+        <comment>AudioDriverType</comment>
+        <translation>درایور صوتی تهی</translation>
     </message>
     <message>
-      <source>Windows Multimedia</source>
-      <comment>AudioDriverType</comment>
-      <translation>Windows Multimedia</translation>
+        <source>Windows Multimedia</source>
+        <comment>AudioDriverType</comment>
+        <translation>Windows Multimedia</translation>
     </message>
     <message>
-      <source>OSS Audio Driver</source>
-      <comment>AudioDriverType</comment>
-      <translation>درایور صوتی OSS</translation>
+        <source>OSS Audio Driver</source>
+        <comment>AudioDriverType</comment>
+        <translation>درایور صوتی OSS</translation>
     </message>
     <message>
-      <source>ALSA Audio Driver</source>
-      <comment>AudioDriverType</comment>
-      <translation>درایور صوتی ALSA</translation>
+        <source>ALSA Audio Driver</source>
+        <comment>AudioDriverType</comment>
+        <translation>درایور صوتی ALSA</translation>
     </message>
     <message>
-      <source>Windows DirectSound</source>
-      <comment>AudioDriverType</comment>
-      <translation>Windows DirectSound</translation>
+        <source>Windows DirectSound</source>
+        <comment>AudioDriverType</comment>
+        <translation>Windows DirectSound</translation>
     </message>
     <message>
-      <source>CoreAudio</source>
-      <comment>AudioDriverType</comment>
-      <translation>CoreAudio</translation>
+        <source>CoreAudio</source>
+        <comment>AudioDriverType</comment>
+        <translation>CoreAudio</translation>
     </message>
     <message>
-      <source>Not attached</source>
-      <comment>NetworkAttachmentType</comment>
-      <translation>ضمیمه نشده است</translation>
+        <source>Not attached</source>
+        <comment>NetworkAttachmentType</comment>
+        <translation>ضمیمه نشده است</translation>
     </message>
     <message>
-      <source>NAT</source>
-      <comment>NetworkAttachmentType</comment>
-      <translation>NAT</translation>
+        <source>NAT</source>
+        <comment>NetworkAttachmentType</comment>
+        <translation>NAT</translation>
     </message>
     <message>
-      <source>Internal Network</source>
-      <comment>NetworkAttachmentType</comment>
-      <translation>شبکه داخلی</translation>
+        <source>Internal Network</source>
+        <comment>NetworkAttachmentType</comment>
+        <translation>شبکه داخلی</translation>
     </message>
     <message>
-      <source>Not supported</source>
-      <comment>USBDeviceState</comment>
-      <translation>پشتیبانی نمیشود</translation>
+        <source>Not supported</source>
+        <comment>USBDeviceState</comment>
+        <translation>پشتیبانی نمیشود</translation>
     </message>
     <message>
-      <source>Unavailable</source>
-      <comment>USBDeviceState</comment>
-      <translation>دردسترس نیست</translation>
+        <source>Unavailable</source>
+        <comment>USBDeviceState</comment>
+        <translation>دردسترس نیست</translation>
     </message>
     <message>
-      <source>Busy</source>
-      <comment>USBDeviceState</comment>
-      <translation>مشغول است</translation>
+        <source>Busy</source>
+        <comment>USBDeviceState</comment>
+        <translation>مشغول است</translation>
     </message>
     <message>
-      <source>Available</source>
-      <comment>USBDeviceState</comment>
-      <translation>در دسترس است</translation>
+        <source>Available</source>
+        <comment>USBDeviceState</comment>
+        <translation>در دسترس است</translation>
     </message>
     <message>
-      <source>Held</source>
-      <comment>USBDeviceState</comment>
-      <translation>نگه داشده شده است</translation>
+        <source>Held</source>
+        <comment>USBDeviceState</comment>
+        <translation>نگه داشده شده است</translation>
     </message>
     <message>
-      <source>Captured</source>
-      <comment>USBDeviceState</comment>
-      <translation>ضبط شده</translation>
+        <source>Captured</source>
+        <comment>USBDeviceState</comment>
+        <translation>ضبط شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>ClipboardType</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>ClipboardType</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Host To Guest</source>
-      <comment>ClipboardType</comment>
-      <translation>میزبان به مهمان</translation>
+        <source>Host To Guest</source>
+        <comment>ClipboardType</comment>
+        <translation>میزبان به مهمان</translation>
     </message>
     <message>
-      <source>Guest To Host</source>
-      <comment>ClipboardType</comment>
-      <translation>مهمان به میزبان</translation>
+        <source>Guest To Host</source>
+        <comment>ClipboardType</comment>
+        <translation>مهمان به میزبان</translation>
     </message>
     <message>
-      <source>Bidirectional</source>
-      <comment>ClipboardType</comment>
-      <translation>دوطرفه</translation>
+        <source>Bidirectional</source>
+        <comment>ClipboardType</comment>
+        <translation>دوطرفه</translation>
     </message>
     <message>
-      <source>Port %1</source>
-      <comment>details report (serial ports)</comment>
-      <translation>پورت %1</translation>
+        <source>Port %1</source>
+        <comment>details report (serial ports)</comment>
+        <translation>پورت %1</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (serial ports)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (serial ports)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Serial Ports</source>
-      <comment>details report</comment>
-      <translation>پورت سریال</translation>
+        <source>Serial Ports</source>
+        <comment>details report</comment>
+        <translation>پورت سریال</translation>
     </message>
     <message>
-      <source>USB</source>
-      <comment>details report</comment>
-      <translation>یو اِس بی</translation>
+        <source>USB</source>
+        <comment>details report</comment>
+        <translation>یو اِس بی</translation>
     </message>
     <message>
-      <source>Shared Folders</source>
-      <comment>details report (shared folders)</comment>
-      <translation>پوشه های اشتراکی</translation>
+        <source>Shared Folders</source>
+        <comment>details report (shared folders)</comment>
+        <translation>پوشه های اشتراکی</translation>
     </message>
     <message>
-      <source>None</source>
-      <comment>details report (shared folders)</comment>
-      <translation>ندارد</translation>
+        <source>None</source>
+        <comment>details report (shared folders)</comment>
+        <translation>ندارد</translation>
     </message>
     <message>
-      <source>Shared Folders</source>
-      <comment>details report</comment>
-      <translation>پوشه های اشتراکی</translation>
+        <source>Shared Folders</source>
+        <comment>details report</comment>
+        <translation>پوشه های اشتراکی</translation>
     </message>
     <message>
-      <source>Disconnected</source>
-      <comment>PortMode</comment>
-      <translation>قطع شده است</translation>
+        <source>Disconnected</source>
+        <comment>PortMode</comment>
+        <translation>قطع شده است</translation>
     </message>
     <message>
-      <source>Host Pipe</source>
-      <comment>PortMode</comment>
-      <translation>میله میزبان</translation>
+        <source>Host Pipe</source>
+        <comment>PortMode</comment>
+        <translation>میله میزبان</translation>
     </message>
     <message>
-      <source>Host Device</source>
-      <comment>PortMode</comment>
-      <translation>دستگاه میزبان</translation>
+        <source>Host Device</source>
+        <comment>PortMode</comment>
+        <translation>دستگاه میزبان</translation>
     </message>
     <message>
-      <source>User-defined</source>
-      <comment>serial port</comment>
-      <translation>تعریف شده توسط کاربر</translation>
+        <source>User-defined</source>
+        <comment>serial port</comment>
+        <translation>تعریف شده توسط کاربر</translation>
     </message>
     <message>
-      <source>VT-x/AMD-V</source>
-      <comment>details report</comment>
-      <translation>VT-x/AMD-V</translation>
+        <source>VT-x/AMD-V</source>
+        <comment>details report</comment>
+        <translation>VT-x/AMD-V</translation>
     </message>
     <message>
-      <source>PAE/NX</source>
-      <comment>details report</comment>
-      <translation>PAE/NX</translation>
+        <source>PAE/NX</source>
+        <comment>details report</comment>
+        <translation>PAE/NX</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details report (VT-x/AMD-V)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details report (VT-x/AMD-V)</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (VT-x/AMD-V)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (VT-x/AMD-V)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details report (PAE/NX)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details report (PAE/NX)</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (PAE/NX)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (PAE/NX)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Host Driver</source>
-      <comment>details report (audio)</comment>
-      <translation>درایور میزبان</translation>
+        <source>Host Driver</source>
+        <comment>details report (audio)</comment>
+        <translation>درایور میزبان</translation>
     </message>
     <message>
-      <source>Controller</source>
-      <comment>details report (audio)</comment>
-      <translation>کنترلر</translation>
+        <source>Controller</source>
+        <comment>details report (audio)</comment>
+        <translation>کنترلر</translation>
     </message>
     <message>
-      <source>Port %1</source>
-      <comment>details report (parallel ports)</comment>
-      <translation>پورت %1</translation>
+        <source>Port %1</source>
+        <comment>details report (parallel ports)</comment>
+        <translation>پورت %1</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (parallel ports)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (parallel ports)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Parallel Ports</source>
-      <comment>details report</comment>
-      <translation>پورت پارالل</translation>
+        <source>Parallel Ports</source>
+        <comment>details report</comment>
+        <translation>پورت پارالل</translation>
     </message>
     <message>
-      <source>USB</source>
-      <comment>DeviceType</comment>
-      <translation>یو اِس بی</translation>
+        <source>USB</source>
+        <comment>DeviceType</comment>
+        <translation>یو اِس بی</translation>
     </message>
     <message>
-      <source>Shared Folder</source>
-      <comment>DeviceType</comment>
-      <translation>پوشه اشتراکی</translation>
+        <source>Shared Folder</source>
+        <comment>DeviceType</comment>
+        <translation>پوشه اشتراکی</translation>
     </message>
     <message>
-      <source>IDE</source>
-      <comment>StorageBus</comment>
-      <translation>IDE</translation>
+        <source>IDE</source>
+        <comment>StorageBus</comment>
+        <translation>IDE</translation>
     </message>
     <message>
-      <source>SATA</source>
-      <comment>StorageBus</comment>
-      <translation>SATA</translation>
+        <source>SATA</source>
+        <comment>StorageBus</comment>
+        <translation>SATA</translation>
     </message>
     <message>
-      <source>Solaris Audio</source>
-      <comment>AudioDriverType</comment>
-      <translation>صوت سولاریس</translation>
+        <source>Solaris Audio</source>
+        <comment>AudioDriverType</comment>
+        <translation>صوت سولاریس</translation>
     </message>
     <message>
-      <source>PulseAudio</source>
-      <comment>AudioDriverType</comment>
-      <translation>PulseAudio</translation>
+        <source>PulseAudio</source>
+        <comment>AudioDriverType</comment>
+        <translation>PulseAudio</translation>
     </message>
     <message>
-      <source>ICH AC97</source>
-      <comment>AudioControllerType</comment>
-      <translation>ICH AC97</translation>
+        <source>ICH AC97</source>
+        <comment>AudioControllerType</comment>
+        <translation>ICH AC97</translation>
     </message>
     <message>
-      <source>SoundBlaster 16</source>
-      <comment>AudioControllerType</comment>
-      <translation>SoundBlaster 16</translation>
+        <source>SoundBlaster 16</source>
+        <comment>AudioControllerType</comment>
+        <translation>SoundBlaster 16</translation>
     </message>
     <message>
-      <source>PCnet-PCI II (Am79C970A)</source>
-      <comment>NetworkAdapterType</comment>
-      <translation>PCnet-PCI II (Am79C970A)</translation>
+        <source>PCnet-PCI II (Am79C970A)</source>
+        <comment>NetworkAdapterType</comment>
+        <translation>PCnet-PCI II (Am79C970A)</translation>
     </message>
     <message>
-      <source>PCnet-FAST III (Am79C973)</source>
-      <comment>NetworkAdapterType</comment>
-      <translation>PCnet-FAST III (Am79C973)</translation>
+        <source>PCnet-FAST III (Am79C973)</source>
+        <comment>NetworkAdapterType</comment>
+        <translation>PCnet-FAST III (Am79C973)</translation>
     </message>
     <message>
-      <source>Intel PRO/1000 MT Desktop (82540EM)</source>
-      <comment>NetworkAdapterType</comment>
-      <translation>Intel PRO/1000 MT Desktop (82540EM)</translation>
+        <source>Intel PRO/1000 MT Desktop (82540EM)</source>
+        <comment>NetworkAdapterType</comment>
+        <translation>Intel PRO/1000 MT Desktop (82540EM)</translation>
     </message>
     <message>
-      <source>Intel PRO/1000 T Server (82543GC)</source>
-      <comment>NetworkAdapterType</comment>
-      <translation>Intel PRO/1000 T Server (82543GC)</translation>
+        <source>Intel PRO/1000 T Server (82543GC)</source>
+        <comment>NetworkAdapterType</comment>
+        <translation>Intel PRO/1000 T Server (82543GC)</translation>
     </message>
     <message>
-      <source><nobr>Vendor ID: %1</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>شناسه فروشنده: %1</nobr></translation>
+        <source><nobr>Vendor ID: %1</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>شناسه فروشنده: %1</nobr></translation>
     </message>
     <message>
-      <source><nobr>Product ID: %2</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>شناسه محصول: %2</nobr></translation>
+        <source><nobr>Product ID: %2</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>شناسه محصول: %2</nobr></translation>
     </message>
     <message>
-      <source><nobr>Revision: %3</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>بازبینی: %3</nobr></translation>
+        <source><nobr>Revision: %3</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>بازبینی: %3</nobr></translation>
     </message>
     <message>
-      <source><nobr>Product: %4</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>محصول: %4</nobr></translation>
+        <source><nobr>Product: %4</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>محصول: %4</nobr></translation>
     </message>
     <message>
-      <source><nobr>Manufacturer: %5</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>سازنده: %5</nobr></translation>
+        <source><nobr>Manufacturer: %5</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>سازنده: %5</nobr></translation>
     </message>
     <message>
-      <source><nobr>Serial No.: %1</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>شماره سریال.: %1</nobr></translation>
+        <source><nobr>Serial No.: %1</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>شماره سریال.: %1</nobr></translation>
     </message>
     <message>
-      <source><nobr>Port: %1</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>پورت: %1</nobr></translation>
+        <source><nobr>Port: %1</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>پورت: %1</nobr></translation>
     </message>
     <message>
-      <source><nobr>State: %1</nobr></source>
-      <comment>USB filter tooltip</comment>
-      <translation><nobr>وضعیت: %1</nobr></translation>
+        <source><nobr>State: %1</nobr></source>
+        <comment>USB filter tooltip</comment>
+        <translation><nobr>وضعیت: %1</nobr></translation>
     </message>
     <message>
-      <source>Checking...</source>
-      <comment>medium</comment>
-      <translation>درحال برسی...</translation>
+        <source>Checking...</source>
+        <comment>medium</comment>
+        <translation>درحال برسی...</translation>
     </message>
     <message>
-      <source>Inaccessible</source>
-      <comment>medium</comment>
-      <translation>قابل دسترسی نیست</translation>
+        <source>Inaccessible</source>
+        <comment>medium</comment>
+        <translation>قابل دسترسی نیست</translation>
     </message>
     <message>
-      <source>3D Acceleration</source>
-      <comment>details report</comment>
-      <translation>شتاب دهنده سه بعدی</translation>
+        <source>3D Acceleration</source>
+        <comment>details report</comment>
+        <translation>شتاب دهنده سه بعدی</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details report (3D Acceleration)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details report (3D Acceleration)</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (3D Acceleration)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (3D Acceleration)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Setting Up</source>
-      <comment>MachineState</comment>
-      <translation>تنظیم کردن</translation>
+        <source>Setting Up</source>
+        <comment>MachineState</comment>
+        <translation>تنظیم کردن</translation>
     </message>
     <message>
-      <source>Differencing</source>
-      <comment>DiskType</comment>
-      <translation>متفاوت</translation>
+        <source>Differencing</source>
+        <comment>DiskType</comment>
+        <translation>متفاوت</translation>
     </message>
     <message>
-      <source>Nested Paging</source>
-      <comment>details report</comment>
-      <translation>صفحه بندی تودرتو</translation>
+        <source>Nested Paging</source>
+        <comment>details report</comment>
+        <translation>صفحه بندی تودرتو</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details report (Nested Paging)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details report (Nested Paging)</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (Nested Paging)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (Nested Paging)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Internal network, '%1'</source>
-      <comment>details report (network)</comment>
-      <translation>شبه داخلی, '%1'</translation>
+        <source>Internal network, '%1'</source>
+        <comment>details report (network)</comment>
+        <translation>شبه داخلی, '%1'</translation>
     </message>
     <message>
-      <source>SCSI</source>
-      <comment>StorageBus</comment>
-      <translation>SCSI</translation>
+        <source>SCSI</source>
+        <comment>StorageBus</comment>
+        <translation>SCSI</translation>
     </message>
     <message>
-      <source>PIIX3</source>
-      <comment>StorageControllerType</comment>
-      <translation>PIIX3</translation>
+        <source>PIIX3</source>
+        <comment>StorageControllerType</comment>
+        <translation>PIIX3</translation>
     </message>
     <message>
-      <source>PIIX4</source>
-      <comment>StorageControllerType</comment>
-      <translation>PIIX4</translation>
+        <source>PIIX4</source>
+        <comment>StorageControllerType</comment>
+        <translation>PIIX4</translation>
     </message>
     <message>
-      <source>ICH6</source>
-      <comment>StorageControllerType</comment>
-      <translation>ICH6</translation>
+        <source>ICH6</source>
+        <comment>StorageControllerType</comment>
+        <translation>ICH6</translation>
     </message>
     <message>
-      <source>AHCI</source>
-      <comment>StorageControllerType</comment>
-      <translation>AHCI</translation>
+        <source>AHCI</source>
+        <comment>StorageControllerType</comment>
+        <translation>AHCI</translation>
     </message>
     <message>
-      <source>Lsilogic</source>
-      <comment>StorageControllerType</comment>
-      <translation>Lsilogic</translation>
+        <source>Lsilogic</source>
+        <comment>StorageControllerType</comment>
+        <translation>Lsilogic</translation>
     </message>
     <message>
-      <source>BusLogic</source>
-      <comment>StorageControllerType</comment>
-      <translation>BusLogic</translation>
+        <source>BusLogic</source>
+        <comment>StorageControllerType</comment>
+        <translation>BusLogic</translation>
     </message>
     <message>
-      <source>Bridged adapter, %1</source>
-      <comment>details report (network)</comment>
-      <translation>آداپتور پل شده، %1</translation>
+        <source>Bridged adapter, %1</source>
+        <comment>details report (network)</comment>
+        <translation>آداپتور پل شده، %1</translation>
     </message>
     <message>
-      <source>Host-only adapter, '%1'</source>
-      <comment>details report (network)</comment>
-      <translation>آداپتور فقط-میزبان '%1'</translation>
+        <source>Host-only adapter, '%1'</source>
+        <comment>details report (network)</comment>
+        <translation>آداپتور فقط-میزبان '%1'</translation>
     </message>
     <message>
-      <source>Intel PRO/1000 MT Server (82545EM)</source>
-      <comment>NetworkAdapterType</comment>
-      <translation>Intel PRO/1000 MT Server (82545EM)</translation>
+        <source>Intel PRO/1000 MT Server (82545EM)</source>
+        <comment>NetworkAdapterType</comment>
+        <translation>Intel PRO/1000 MT Server (82545EM)</translation>
     </message>
     <message>
-      <source>Bridged Adapter</source>
-      <comment>NetworkAttachmentType</comment>
-      <translation>آداپتور پل شده</translation>
+        <source>Bridged Adapter</source>
+        <comment>NetworkAttachmentType</comment>
+        <translation>آداپتور پل شده</translation>
     </message>
     <message>
-      <source>Host-only Adapter</source>
-      <comment>NetworkAttachmentType</comment>
-      <translation>آداپتور فقط-میزبان</translation>
+        <source>Host-only Adapter</source>
+        <comment>NetworkAttachmentType</comment>
+        <translation>آداپتور فقط-میزبان</translation>
     </message>
     <message>
-      <source><nobr>%1 MB</nobr></source>
-      <comment>details report</comment>
-      <translation><nobr>%1 مگابایت</nobr></translation>
+        <source><nobr>%1 MB</nobr></source>
+        <comment>details report</comment>
+        <translation><nobr>%1 مگابایت</nobr></translation>
     </message>
     <message>
-      <source>Processor(s)</source>
-      <comment>details report</comment>
-      <translation>پردازشگر(ها)</translation>
+        <source>Processor(s)</source>
+        <comment>details report</comment>
+        <translation>پردازشگر(ها)</translation>
     </message>
     <message>
-      <source><nobr>%1</nobr></source>
-      <comment>details report</comment>
-      <translation><nobr>%1</nobr></translation>
+        <source><nobr>%1</nobr></source>
+        <comment>details report</comment>
+        <translation><nobr>%1</nobr></translation>
     </message>
     <message>
-      <source>System</source>
-      <comment>details report</comment>
-      <translation>سیستم</translation>
+        <source>System</source>
+        <comment>details report</comment>
+        <translation>سیستم</translation>
     </message>
     <message>
-      <source>Display</source>
-      <comment>details report</comment>
-      <translation>نمایش</translation>
+        <source>Display</source>
+        <comment>details report</comment>
+        <translation>نمایش</translation>
     </message>
     <message>
-      <source>Raw File</source>
-      <comment>PortMode</comment>
-      <translation>فایل خام</translation>
+        <source>Raw File</source>
+        <comment>PortMode</comment>
+        <translation>فایل خام</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details report (2D Video Acceleration)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details report (2D Video Acceleration)</comment>
+        <translation>فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (2D Video Acceleration)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (2D Video Acceleration)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>2D Video Acceleration</source>
-      <comment>details report</comment>
-      <translation>شتاب دهنده ویدیو دو بعدی</translation>
+        <source>2D Video Acceleration</source>
+        <comment>details report</comment>
+        <translation>شتاب دهنده ویدیو دو بعدی</translation>
     </message>
     <message>
-      <source>Not Attached</source>
-      <comment>details report (Storage)</comment>
-      <translation>ضمیمه نشده است</translation>
+        <source>Not Attached</source>
+        <comment>details report (Storage)</comment>
+        <translation>ضمیمه نشده است</translation>
     </message>
     <message>
-      <source>Storage</source>
-      <comment>details report</comment>
-      <translation>ذخیره ساز</translation>
+        <source>Storage</source>
+        <comment>details report</comment>
+        <translation>ذخیره ساز</translation>
     </message>
     <message>
-      <source>Teleported</source>
-      <comment>MachineState</comment>
-      <translation>Teleported</translation>
+        <source>Teleported</source>
+        <comment>MachineState</comment>
+        <translation>Teleported</translation>
     </message>
     <message>
-      <source>Guru Meditation</source>
-      <comment>MachineState</comment>
-      <translation>Guru Meditation</translation>
+        <source>Guru Meditation</source>
+        <comment>MachineState</comment>
+        <translation>Guru Meditation</translation>
     </message>
     <message>
-      <source>Teleporting</source>
-      <comment>MachineState</comment>
-      <translation>Teleporting</translation>
+        <source>Teleporting</source>
+        <comment>MachineState</comment>
+        <translation>Teleporting</translation>
     </message>
     <message>
-      <source>Taking Live Snapshot</source>
-      <comment>MachineState</comment>
-      <translation>ایجاد ضبط وضعیت زنده</translation>
+        <source>Taking Live Snapshot</source>
+        <comment>MachineState</comment>
+        <translation>ایجاد ضبط وضعیت زنده</translation>
     </message>
     <message>
-      <source>Teleporting Paused VM</source>
-      <comment>MachineState</comment>
-      <translation>Teleporting Paused VM</translation>
+        <source>Teleporting Paused VM</source>
+        <comment>MachineState</comment>
+        <translation>Teleporting Paused VM</translation>
     </message>
     <message>
-      <source>Restoring Snapshot</source>
-      <comment>MachineState</comment>
-      <translation>بازگردانی ضبط وضعیت</translation>
+        <source>Restoring Snapshot</source>
+        <comment>MachineState</comment>
+        <translation>بازگردانی ضبط وضعیت</translation>
     </message>
     <message>
-      <source>Deleting Snapshot</source>
-      <comment>MachineState</comment>
-      <translation>حذف ضبط وضعیت</translation>
+        <source>Deleting Snapshot</source>
+        <comment>MachineState</comment>
+        <translation>حذف ضبط وضعیت</translation>
     </message>
     <message>
-      <source>Floppy</source>
-      <comment>StorageBus</comment>
-      <translation>فلاپی</translation>
+        <source>Floppy</source>
+        <comment>StorageBus</comment>
+        <translation>فلاپی</translation>
     </message>
     <message>
-      <source>Paravirtualized Network (virtio-net)</source>
-      <comment>NetworkAdapterType</comment>
-      <translation>شبکه پارا مجازی سازی شده (virtio-net)</translation>
+        <source>Paravirtualized Network (virtio-net)</source>
+        <comment>NetworkAdapterType</comment>
+        <translation>شبکه پارا مجازی سازی شده (virtio-net)</translation>
     </message>
     <message>
-      <source>I82078</source>
-      <comment>StorageControllerType</comment>
-      <translation>I82078</translation>
+        <source>I82078</source>
+        <comment>StorageControllerType</comment>
+        <translation>I82078</translation>
     </message>
     <message>
-      <source>Empty</source>
-      <comment>medium</comment>
-      <translation>ندارد</translation>
+        <source>Empty</source>
+        <comment>medium</comment>
+        <translation>ندارد</translation>
     </message>
     <message>
-      <source>Host Drive '%1'</source>
-      <comment>medium</comment>
-      <translation>درایو میزبان '%1'</translation>
+        <source>Host Drive '%1'</source>
+        <comment>medium</comment>
+        <translation>درایو میزبان '%1'</translation>
     </message>
     <message>
-      <source>Host Drive %1 (%2)</source>
-      <comment>medium</comment>
-      <translation>درایو میزبان %1 (%2)</translation>
+        <source>Host Drive %1 (%2)</source>
+        <comment>medium</comment>
+        <translation>درایو میزبان %1 (%2)</translation>
     </message>
     <message>
-      <source><p style=white-space:pre>Type (Format):  %1 (%2)</p></source>
-      <comment>medium</comment>
-      <translation><p style=white-space:pre>نوع (فرمت):  %1 (%2)</p></translation>
+        <source><p style=white-space:pre>Type (Format):  %1 (%2)</p></source>
+        <comment>medium</comment>
+        <translation><p style=white-space:pre>نوع (فرمت):  %1 (%2)</p></translation>
     </message>
     <message>
-      <source><p>Attached to:  %1</p></source>
-      <comment>image</comment>
-      <translation><p>ضمیمه شده به:  %1</p></translation>
+        <source><p>Attached to:  %1</p></source>
+        <comment>image</comment>
+        <translation><p>ضمیمه شده به:  %1</p></translation>
     </message>
     <message>
-      <source><i>Not Attached</i></source>
-      <comment>image</comment>
-      <translation><i>ضمیمه نشده است</i></translation>
+        <source><i>Not Attached</i></source>
+        <comment>image</comment>
+        <translation><i>ضمیمه نشده است</i></translation>
     </message>
     <message>
-      <source><i>Checking accessibility...</i></source>
-      <comment>medium</comment>
-      <translation><i>بررسی دسترسی پذیری...</i></translation>
+        <source><i>Checking accessibility...</i></source>
+        <comment>medium</comment>
+        <translation><i>بررسی دسترسی پذیری...</i></translation>
     </message>
     <message>
-      <source>Failed to check accessibility of disk image files.</source>
-      <comment>medium</comment>
-      <translation>موفق به بررسی دسترسی پذیری رسانه نشد.</translation>
+        <source>Failed to check accessibility of disk image files.</source>
+        <comment>medium</comment>
+        <translation>موفق به بررسی دسترسی پذیری رسانه نشد.</translation>
     </message>
     <message>
-      <source><b>No disk image file selected</b></source>
-      <comment>medium</comment>
-      <translation><b>رسانه ای انتخاب نشده است</b></translation>
+        <source><b>No disk image file selected</b></source>
+        <comment>medium</comment>
+        <translation><b>رسانه ای انتخاب نشده است</b></translation>
     </message>
     <message>
-      <source>You can also change this while the machine is running.</source>
-      <translation>همچنین میتوانید زمانی که ماشین در حال اِجراست این را تغییر دهید.</translation>
+        <source>You can also change this while the machine is running.</source>
+        <translation>همچنین میتوانید زمانی که ماشین در حال اِجراست این را تغییر دهید.</translation>
     </message>
     <message>
-      <source><b>No disk image files available</b></source>
-      <comment>medium</comment>
-      <translation><b>رسانه ای موجود نیست</b></translation>
+        <source><b>No disk image files available</b></source>
+        <comment>medium</comment>
+        <translation><b>رسانه ای موجود نیست</b></translation>
     </message>
     <message>
-      <source>You can create disk image files using the virtual media manager.</source>
-      <translation>میتوانید ایمیج رسانه را توسط مدیر رسانه مجازی ایجاد کنید.</translation>
+        <source>You can create disk image files using the virtual media manager.</source>
+        <translation type="obsolete">میتوانید ایمیج رسانه را توسط مدیر رسانه مجازی ایجاد کنید.</translation>
     </message>
     <message>
-      <source>Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source>
-      <comment>medium</comment>
-      <translation>ضمیمه کردن این دیسک سخت بطور غیرمستقیم توسط یک دیسک سخت متفاوت ایجاد شده جدید اِجرا شده است.</translation>
+        <source>Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source>
+        <comment>medium</comment>
+        <translation>ضمیمه کردن این دیسک سخت بطور غیرمستقیم توسط یک دیسک سخت متفاوت ایجاد شده جدید اِجرا شده است.</translation>
     </message>
     <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>برخی از رسانه ها در این زنجیره دیسک سخت غیرقابل دسترسی است. لطفا از مدیر رسانه مجازی در حالت <b>نمایش دیسک سخت متفاوت </b> برای بررسی این رسانه ها استفاده کنید.</translation>
+        <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>
     </message>
     <message>
-      <source>This base hard disk is indirectly attached using the following differencing hard disk:</source>
-      <comment>medium</comment>
-      <translation>این دیسک سخت پایه غیرمستقیم ضمیمه شده توسط دیسک سخت متفاوت زیر:</translation>
+        <source>This base hard disk is indirectly attached using the following differencing hard disk:</source>
+        <comment>medium</comment>
+        <translation>این دیسک سخت پایه غیرمستقیم ضمیمه شده توسط دیسک سخت متفاوت زیر:</translation>
     </message>
     <message numerus="yes">
-      <source>%n year(s)</source>
-      <translation>
-        <numerusform>%n سال</numerusform>
-      </translation>
+        <source>%n year(s)</source>
+        <translation>
+            <numerusform>%n سال</numerusform>
+        </translation>
     </message>
     <message numerus="yes">
-      <source>%n month(s)</source>
-      <translation>
-        <numerusform>%n ماه</numerusform>
-      </translation>
+        <source>%n month(s)</source>
+        <translation>
+            <numerusform>%n ماه</numerusform>
+        </translation>
     </message>
     <message numerus="yes">
-      <source>%n day(s)</source>
-      <translation>
-        <numerusform>%n روز</numerusform>
-      </translation>
+        <source>%n day(s)</source>
+        <translation>
+            <numerusform>%n روز</numerusform>
+        </translation>
     </message>
     <message numerus="yes">
-      <source>%n hour(s)</source>
-      <translation>
-        <numerusform>%n ساعت</numerusform>
-      </translation>
+        <source>%n hour(s)</source>
+        <translation>
+            <numerusform>%n ساعت</numerusform>
+        </translation>
     </message>
     <message numerus="yes">
-      <source>%n minute(s)</source>
-      <translation>
-        <numerusform>%n دقیقه</numerusform>
-      </translation>
+        <source>%n minute(s)</source>
+        <translation>
+            <numerusform>%n دقیقه</numerusform>
+        </translation>
     </message>
     <message numerus="yes">
-      <source>%n second(s)</source>
-      <translation>
-        <numerusform>%n ثانیه</numerusform>
-      </translation>
+        <source>%n second(s)</source>
+        <translation>
+            <numerusform>%n ثانیه</numerusform>
+        </translation>
     </message>
     <message>
-      <source>(CD/DVD)</source>
-      <translation>(سی دی/دی وی دی)</translation>
+        <source>(CD/DVD)</source>
+        <translation type="obsolete">(سی دی/دی وی دی)</translation>
     </message>
     <message>
-      <source>Screens</source>
-      <comment>details report</comment>
-      <translation>نمایشگر</translation>
+        <source>Screens</source>
+        <comment>details report</comment>
+        <translation>نمایشگر</translation>
     </message>
     <message>
-      <source>SAS</source>
-      <comment>StorageBus</comment>
-      <translation>SAS</translation>
+        <source>SAS</source>
+        <comment>StorageBus</comment>
+        <translation>SAS</translation>
     </message>
     <message>
-      <source>LsiLogic SAS</source>
-      <comment>StorageControllerType</comment>
-      <translation>LsiLogic SAS</translation>
+        <source>LsiLogic SAS</source>
+        <comment>StorageControllerType</comment>
+        <translation>LsiLogic SAS</translation>
     </message>
     <message>
-      <source>B</source>
-      <comment>size suffix Bytes</comment>
-      <translation>بایت</translation>
+        <source>B</source>
+        <comment>size suffix Bytes</comment>
+        <translation>بایت</translation>
     </message>
     <message>
-      <source>KB</source>
-      <comment>size suffix KBytes=1024 Bytes</comment>
-      <translation>کیلوبایت</translation>
+        <source>KB</source>
+        <comment>size suffix KBytes=1024 Bytes</comment>
+        <translation>کیلوبایت</translation>
     </message>
     <message>
-      <source>MB</source>
-      <comment>size suffix MBytes=1024 KBytes</comment>
-      <translation>مگابایت</translation>
+        <source>MB</source>
+        <comment>size suffix MBytes=1024 KBytes</comment>
+        <translation>مگابایت</translation>
     </message>
     <message>
-      <source>GB</source>
-      <comment>size suffix GBytes=1024 MBytes</comment>
-      <translation>گیگابایت</translation>
+        <source>GB</source>
+        <comment>size suffix GBytes=1024 MBytes</comment>
+        <translation>گیگابایت</translation>
     </message>
     <message>
-      <source>TB</source>
-      <comment>size suffix TBytes=1024 GBytes</comment>
-      <translation>ترابایت</translation>
+        <source>TB</source>
+        <comment>size suffix TBytes=1024 GBytes</comment>
+        <translation>ترابایت</translation>
     </message>
     <message>
-      <source>PB</source>
-      <comment>size suffix PBytes=1024 TBytes</comment>
-      <translation>PB</translation>
+        <source>PB</source>
+        <comment>size suffix PBytes=1024 TBytes</comment>
+        <translation>PB</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>nested paging</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>nested paging</comment>
+        <translation type="obsolete">فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>nested paging</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>nested paging</comment>
+        <translation type="obsolete">غیرفعال شده</translation>
     </message>
     <message>
-      <source>Nested Paging</source>
-      <translation>صفحه بندی تودرتو</translation>
+        <source>Nested Paging</source>
+        <translation>صفحه بندی تودرتو</translation>
     </message>
     <message>
-      <source>Unknown device</source>
-      <comment>USB device details</comment>
-      <translation>دستگاه ناشناخته</translation>
+        <source>Unknown device</source>
+        <comment>USB device details</comment>
+        <translation>دستگاه ناشناخته</translation>
     </message>
     <message>
-      <source>Remote Desktop Server Port</source>
-      <comment>details report (VRDE Server)</comment>
-      <translation>پورت سرور ریموت دسکتاپ</translation>
+        <source>Remote Desktop Server Port</source>
+        <comment>details report (VRDE Server)</comment>
+        <translation>پورت سرور ریموت دسکتاپ</translation>
     </message>
     <message>
-      <source>Remote Desktop Server</source>
-      <comment>details report (VRDE Server)</comment>
-      <translation>سرور ریموت دسکتاپ</translation>
+        <source>Remote Desktop Server</source>
+        <comment>details report (VRDE Server)</comment>
+        <translation>سرور ریموت دسکتاپ</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (VRDE Server)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (VRDE Server)</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>All files (*)</source>
-      <translation>همه فایل ها (*)</translation>
+        <source>All files (*)</source>
+        <translation>همه فایل ها (*)</translation>
     </message>
     <message>
-      <source>Fault Tolerant Syncing</source>
-      <comment>MachineState</comment>
-      <translation>Fault Tolerant Syncing</translation>
+        <source>Fault Tolerant Syncing</source>
+        <comment>MachineState</comment>
+        <translation>Fault Tolerant Syncing</translation>
     </message>
     <message>
-      <source>Unlocked</source>
-      <comment>SessionState</comment>
-      <translation>گشوده شده</translation>
+        <source>Unlocked</source>
+        <comment>SessionState</comment>
+        <translation>گشوده شده</translation>
     </message>
     <message>
-      <source>Locked</source>
-      <comment>SessionState</comment>
-      <translation>قفل شده</translation>
+        <source>Locked</source>
+        <comment>SessionState</comment>
+        <translation>قفل شده</translation>
     </message>
     <message>
-      <source>Unlocking</source>
-      <comment>SessionState</comment>
-      <translation>گشودن</translation>
+        <source>Unlocking</source>
+        <comment>SessionState</comment>
+        <translation>گشودن</translation>
     </message>
     <message>
-      <source>Null</source>
-      <comment>AuthType</comment>
-      <translation>تهی</translation>
+        <source>Null</source>
+        <comment>AuthType</comment>
+        <translation>تهی</translation>
     </message>
     <message>
-      <source>External</source>
-      <comment>AuthType</comment>
-      <translation>خارجی</translation>
+        <source>External</source>
+        <comment>AuthType</comment>
+        <translation>خارجی</translation>
     </message>
     <message>
-      <source>Guest</source>
-      <comment>AuthType</comment>
-      <translation>مهمان</translation>
+        <source>Guest</source>
+        <comment>AuthType</comment>
+        <translation>مهمان</translation>
     </message>
     <message>
-      <source>Intel HD Audio</source>
-      <comment>AudioControllerType</comment>
-      <translation>Intel HD Audio</translation>
+        <source>Intel HD Audio</source>
+        <comment>AudioControllerType</comment>
+        <translation>Intel HD Audio</translation>
     </message>
     <message>
-      <source>PIIX3</source>
-      <comment>ChipsetType</comment>
-      <translation>PIIX3</translation>
+        <source>PIIX3</source>
+        <comment>ChipsetType</comment>
+        <translation>PIIX3</translation>
     </message>
     <message>
-      <source>ICH9</source>
-      <comment>ChipsetType</comment>
-      <translation>ICH9</translation>
+        <source>ICH9</source>
+        <comment>ChipsetType</comment>
+        <translation>ICH9</translation>
     </message>
     <message>
-      <source>Execution Cap</source>
-      <comment>details report</comment>
-      <translation>درپوش اِجرا</translation>
+        <source>Execution Cap</source>
+        <comment>details report</comment>
+        <translation>درپوش اِجرا</translation>
     </message>
     <message>
-      <source><nobr>%1%</nobr></source>
-      <comment>details report</comment>
-      <translation><nobr>%1%</nobr></translation>
+        <source><nobr>%1%</nobr></source>
+        <comment>details report</comment>
+        <translation><nobr>%1%</nobr></translation>
     </message>
     <message>
-      <source>Generic, '%1'</source>
-      <comment>details report (network)</comment>
-      <translation>کلی، '%1'</translation>
+        <source>Generic, '%1'</source>
+        <comment>details report (network)</comment>
+        <translation>کلی، '%1'</translation>
     </message>
     <message>
-      <source>Generic Driver</source>
-      <comment>NetworkAttachmentType</comment>
-      <translation>درایور کلی</translation>
+        <source>Generic Driver</source>
+        <comment>NetworkAttachmentType</comment>
+        <translation>درایور کلی</translation>
     </message>
     <message>
-      <source>Adapter %1</source>
-      <translation>آداپتور %1</translation>
+        <source>Adapter %1</source>
+        <translation>آداپتور %1</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>DragAndDropType</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>DragAndDropType</comment>
+        <translation>غیرفعال شده</translation>
     </message>
     <message>
-      <source>Host To Guest</source>
-      <comment>DragAndDropType</comment>
-      <translation>میزبان به مهمان</translation>
+        <source>Host To Guest</source>
+        <comment>DragAndDropType</comment>
+        <translation>میزبان به مهمان</translation>
     </message>
     <message>
-      <source>Guest To Host</source>
-      <comment>DragAndDropType</comment>
-      <translation>مهمان به میزبان</translation>
+        <source>Guest To Host</source>
+        <comment>DragAndDropType</comment>
+        <translation>مهمان به میزبان</translation>
     </message>
     <message>
-      <source>Bidirectional</source>
-      <comment>DragAndDropType</comment>
-      <translation>دوطرفه</translation>
+        <source>Bidirectional</source>
+        <comment>DragAndDropType</comment>
+        <translation>دوطرفه</translation>
     </message>
     <message>
-      <source>Normal</source>
-      <comment>MediumType</comment>
-      <translation>معمولی</translation>
+        <source>Normal</source>
+        <comment>MediumType</comment>
+        <translation>معمولی</translation>
     </message>
     <message>
-      <source>Immutable</source>
-      <comment>MediumType</comment>
-      <translation>تغییر ناپذیر است</translation>
+        <source>Immutable</source>
+        <comment>MediumType</comment>
+        <translation>تغییر ناپذیر است</translation>
     </message>
     <message>
-      <source>Writethrough</source>
-      <comment>MediumType</comment>
-      <translation>نوشتن سرتاسری</translation>
+        <source>Writethrough</source>
+        <comment>MediumType</comment>
+        <translation>نوشتن سرتاسری</translation>
     </message>
     <message>
-      <source>Shareable</source>
-      <comment>MediumType</comment>
-      <translation>قابل اشتراک گذاری</translation>
+        <source>Shareable</source>
+        <comment>MediumType</comment>
+        <translation>قابل اشتراک گذاری</translation>
     </message>
     <message>
-      <source>Readonly</source>
-      <comment>MediumType</comment>
-      <translation>فقط خواندنی</translation>
+        <source>Readonly</source>
+        <comment>MediumType</comment>
+        <translation>فقط خواندنی</translation>
     </message>
     <message>
-      <source>Multi-attach</source>
-      <comment>MediumType</comment>
-      <translation>چند-ضمیمه</translation>
+        <source>Multi-attach</source>
+        <comment>MediumType</comment>
+        <translation>چند-ضمیمه</translation>
     </message>
     <message>
-      <source>Dynamically allocated storage</source>
-      <comment>MediumVariant</comment>
-      <translation>ذخیر ساز پویا اختصاص داده شده</translation>
+        <source>Dynamically allocated storage</source>
+        <comment>MediumVariant</comment>
+        <translation>ذخیر ساز پویا اختصاص داده شده</translation>
     </message>
     <message>
-      <source>Dynamically allocated differencing storage</source>
-      <comment>MediumVariant</comment>
-      <translation>ذخیره ساز متفاوت پویا اختصاص داده شده</translation>
+        <source>Dynamically allocated differencing storage</source>
+        <comment>MediumVariant</comment>
+        <translation>ذخیره ساز متفاوت پویا اختصاص داده شده</translation>
     </message>
     <message>
-      <source>Fixed size storage</source>
-      <comment>MediumVariant</comment>
-      <translation>ذخیره ساز حجم ثابت شده</translation>
+        <source>Fixed size storage</source>
+        <comment>MediumVariant</comment>
+        <translation>ذخیره ساز حجم ثابت شده</translation>
     </message>
     <message>
-      <source>Dynamically allocated storage split into files of less than 2GB</source>
-      <comment>MediumVariant</comment>
-      <translation>ذخیر ساز پویا اختصاص داده شده به فایل هایی کوچکتر از 2 گیگابایت تقسیم میشود</translation>
+        <source>Dynamically allocated storage split into files of less than 2GB</source>
+        <comment>MediumVariant</comment>
+        <translation>ذخیر ساز پویا اختصاص داده شده به فایل هایی کوچکتر از 2 گیگابایت تقسیم میشود</translation>
     </message>
     <message>
-      <source>Dynamically allocated differencing storage split into files of less than 2GB</source>
-      <comment>MediumVariant</comment>
-      <translation>ذخیره ساز متفاوت پویا اختصاص داده شده به فایل هایی کوچکتر از 2 گیگابایت تقسیم میشود</translation>
+        <source>Dynamically allocated differencing storage split into files of less than 2GB</source>
+        <comment>MediumVariant</comment>
+        <translation>ذخیره ساز متفاوت پویا اختصاص داده شده به فایل هایی کوچکتر از 2 گیگابایت تقسیم میشود</translation>
     </message>
     <message>
-      <source>Fixed size storage split into files of less than 2GB</source>
-      <comment>MediumVariant</comment>
-      <translation>ذخیره ساز حجم ثابت شده به فایل هایی کوچکتر از 2 گیگابایت تقسیم میشود</translation>
+        <source>Fixed size storage split into files of less than 2GB</source>
+        <comment>MediumVariant</comment>
+        <translation>ذخیره ساز حجم ثابت شده به فایل هایی کوچکتر از 2 گیگابایت تقسیم میشود</translation>
     </message>
     <message>
-      <source>Dynamically allocated compressed storage</source>
-      <comment>MediumVariant</comment>
-      <translation>ذخیره ساز فشرده شده پویا اختصاص داده شده</translation>
+        <source>Dynamically allocated compressed storage</source>
+        <comment>MediumVariant</comment>
+        <translation>ذخیره ساز فشرده شده پویا اختصاص داده شده</translation>
     </message>
     <message>
-      <source>Dynamically allocated differencing compressed storage</source>
-      <comment>MediumVariant</comment>
-      <translation>ذخیره ساز فشرده شده متفاوت پویا اختصاص داده شده</translation>
+        <source>Dynamically allocated differencing compressed storage</source>
+        <comment>MediumVariant</comment>
+        <translation>ذخیره ساز فشرده شده متفاوت پویا اختصاص داده شده</translation>
     </message>
     <message>
-      <source>Fixed size ESX storage</source>
-      <comment>MediumVariant</comment>
-      <translation>حجم ثابت شده ذخیره ساز ای اِس ایکس</translation>
+        <source>Fixed size ESX storage</source>
+        <comment>MediumVariant</comment>
+        <translation>حجم ثابت شده ذخیره ساز ای اِس ایکس</translation>
     </message>
     <message>
-      <source>Fixed size storage on raw disk</source>
-      <comment>MediumVariant</comment>
-      <translation>حجم ثابت شده ذخیره ساز در دیسک خام</translation>
+        <source>Fixed size storage on raw disk</source>
+        <comment>MediumVariant</comment>
+        <translation>حجم ثابت شده ذخیره ساز در دیسک خام</translation>
     </message>
     <message>
-      <source>Deny</source>
-      <comment>NetworkAdapterPromiscModePolicy</comment>
-      <translation>انکار کرده</translation>
+        <source>Deny</source>
+        <comment>NetworkAdapterPromiscModePolicy</comment>
+        <translation>انکار کرده</translation>
     </message>
     <message>
-      <source>Allow VMs</source>
-      <comment>NetworkAdapterPromiscModePolicy</comment>
-      <translation>اِجازه ماشین مجازی</translation>
+        <source>Allow VMs</source>
+        <comment>NetworkAdapterPromiscModePolicy</comment>
+        <translation>اِجازه ماشین مجازی</translation>
     </message>
     <message>
-      <source>Allow All</source>
-      <comment>NetworkAdapterPromiscModePolicy</comment>
-      <translation>اجازه همه</translation>
+        <source>Allow All</source>
+        <comment>NetworkAdapterPromiscModePolicy</comment>
+        <translation>اجازه همه</translation>
     </message>
     <message>
-      <source>Ignore</source>
-      <comment>USBDeviceFilterAction</comment>
-      <translation>چشمپوشی</translation>
+        <source>Ignore</source>
+        <comment>USBDeviceFilterAction</comment>
+        <translation>چشمپوشی</translation>
     </message>
     <message>
-      <source>Hold</source>
-      <comment>USBDeviceFilterAction</comment>
-      <translation>نگه داشته شده است</translation>
+        <source>Hold</source>
+        <comment>USBDeviceFilterAction</comment>
+        <translation>نگه داشته شده است</translation>
     </message>
     <message>
-      <source>UDP</source>
-      <comment>NATProtocol</comment>
-      <translation>UDP</translation>
+        <source>UDP</source>
+        <comment>NATProtocol</comment>
+        <translation>UDP</translation>
     </message>
     <message>
-      <source>TCP</source>
-      <comment>NATProtocol</comment>
-      <translation>TCP</translation>
+        <source>TCP</source>
+        <comment>NATProtocol</comment>
+        <translation>TCP</translation>
     </message>
     <message>
-      <source>IDE Primary Master</source>
-      <comment>StorageSlot</comment>
-      <translation>IDE اولیه مَستر</translation>
+        <source>IDE Primary Master</source>
+        <comment>StorageSlot</comment>
+        <translation>IDE اولیه مَستر</translation>
     </message>
     <message>
-      <source>IDE Primary Slave</source>
-      <comment>StorageSlot</comment>
-      <translation>IDE اولیه اِسلیو</translation>
+        <source>IDE Primary Slave</source>
+        <comment>StorageSlot</comment>
+        <translation>IDE اولیه اِسلیو</translation>
     </message>
     <message>
-      <source>IDE Secondary Master</source>
-      <comment>StorageSlot</comment>
-      <translation>IDE ثانویه مَستر</translation>
+        <source>IDE Secondary Master</source>
+        <comment>StorageSlot</comment>
+        <translation>IDE ثانویه مَستر</translation>
     </message>
     <message>
-      <source>IDE Secondary Slave</source>
-      <comment>StorageSlot</comment>
-      <translation>IDE ثانویه اِسلیو</translation>
+        <source>IDE Secondary Slave</source>
+        <comment>StorageSlot</comment>
+        <translation>IDE ثانویه اِسلیو</translation>
     </message>
     <message>
-      <source>SATA Port %1</source>
-      <comment>StorageSlot</comment>
-      <translation>پورت SATA %1</translation>
+        <source>SATA Port %1</source>
+        <comment>StorageSlot</comment>
+        <translation>پورت SATA %1</translation>
     </message>
     <message>
-      <source>SCSI Port %1</source>
-      <comment>StorageSlot</comment>
-      <translation>پورت SCSI %1</translation>
+        <source>SCSI Port %1</source>
+        <comment>StorageSlot</comment>
+        <translation>پورت SCSI %1</translation>
     </message>
     <message>
-      <source>SAS Port %1</source>
-      <comment>StorageSlot</comment>
-      <translation>پورت SAS %1</translation>
+        <source>SAS Port %1</source>
+        <comment>StorageSlot</comment>
+        <translation>پورت SAS %1</translation>
     </message>
     <message>
-      <source>Floppy Device %1</source>
-      <comment>StorageSlot</comment>
-      <translation>دستگاه فلاپی %1</translation>
+        <source>Floppy Device %1</source>
+        <comment>StorageSlot</comment>
+        <translation>دستگاه فلاپی %1</translation>
     </message>
     <message>
-      <source>General</source>
-      <comment>DetailsElementType</comment>
-      <translation>عمومی</translation>
+        <source>General</source>
+        <comment>DetailsElementType</comment>
+        <translation>عمومی</translation>
     </message>
     <message>
-      <source>Preview</source>
-      <comment>DetailsElementType</comment>
-      <translation>پیشنمایش</translation>
+        <source>Preview</source>
+        <comment>DetailsElementType</comment>
+        <translation>پیشنمایش</translation>
     </message>
     <message>
-      <source>System</source>
-      <comment>DetailsElementType</comment>
-      <translation>سیستم</translation>
+        <source>System</source>
+        <comment>DetailsElementType</comment>
+        <translation>سیستم</translation>
     </message>
     <message>
-      <source>Display</source>
-      <comment>DetailsElementType</comment>
-      <translation>نمایش</translation>
+        <source>Display</source>
+        <comment>DetailsElementType</comment>
+        <translation>نمایش</translation>
     </message>
     <message>
-      <source>Storage</source>
-      <comment>DetailsElementType</comment>
-      <translation>ذخیره ساز</translation>
+        <source>Storage</source>
+        <comment>DetailsElementType</comment>
+        <translation>ذخیره ساز</translation>
     </message>
     <message>
-      <source>Audio</source>
-      <comment>DetailsElementType</comment>
-      <translation>صدا</translation>
+        <source>Audio</source>
+        <comment>DetailsElementType</comment>
+        <translation>صدا</translation>
     </message>
     <message>
-      <source>Network</source>
-      <comment>DetailsElementType</comment>
-      <translation>شبکه</translation>
+        <source>Network</source>
+        <comment>DetailsElementType</comment>
+        <translation>شبکه</translation>
     </message>
     <message>
-      <source>Serial ports</source>
-      <comment>DetailsElementType</comment>
-      <translation>پورت سریال</translation>
+        <source>Serial ports</source>
+        <comment>DetailsElementType</comment>
+        <translation>پورت سریال</translation>
     </message>
     <message>
-      <source>Parallel ports</source>
-      <comment>DetailsElementType</comment>
-      <translation>پورت پارالل</translation>
+        <source>Parallel ports</source>
+        <comment>DetailsElementType</comment>
+        <translation>پورت پارالل</translation>
     </message>
     <message>
-      <source>USB</source>
-      <comment>DetailsElementType</comment>
-      <translation>یو اِس بی</translation>
+        <source>USB</source>
+        <comment>DetailsElementType</comment>
+        <translation>یو اِس بی</translation>
     </message>
     <message>
-      <source>Shared folders</source>
-      <comment>DetailsElementType</comment>
-      <translation>پوشه های اشتراکی</translation>
+        <source>Shared folders</source>
+        <comment>DetailsElementType</comment>
+        <translation>پوشه های اشتراکی</translation>
     </message>
     <message>
-      <source>Description</source>
-      <comment>DetailsElementType</comment>
-      <translation>توضیحات</translation>
+        <source>Description</source>
+        <comment>DetailsElementType</comment>
+        <translation>توضیحات</translation>
     </message>
     <message>
-      <source>Please choose a virtual hard drive file</source>
-      <translation>لطفا یک فایل درایو سخت مجازی انتخاب کنید</translation>
+        <source>Please choose a virtual hard drive file</source>
+        <translation type="obsolete">لطفا یک فایل درایو سخت مجازی انتخاب کنید</translation>
     </message>
     <message>
-      <source>All virtual hard drive files (%1)</source>
-      <translation>همه فایل های درایو سخت مجازی (%1)</translation>
+        <source>All virtual hard drive files (%1)</source>
+        <translation type="obsolete">همه فایل های درایو سخت مجازی (%1)</translation>
     </message>
     <message>
-      <source>Please choose a virtual optical disk file</source>
-      <translation>لطفا یک فایل دیسک نوری مجازی انتخاب کنید</translation>
+        <source>Please choose a virtual optical disk file</source>
+        <translation>لطفا یک فایل دیسک نوری مجازی انتخاب کنید</translation>
     </message>
     <message>
-      <source>All virtual optical disk files (%1)</source>
-      <translation>همه فایل های دیسک نوری مجازی (%1)</translation>
+        <source>All virtual optical disk files (%1)</source>
+        <translation>همه فایل های دیسک نوری مجازی (%1)</translation>
     </message>
     <message>
-      <source>Please choose a virtual floppy disk file</source>
-      <translation>لطفا یک فایل دیسک فلاپی مجازی انتخاب کنید</translation>
+        <source>Please choose a virtual floppy disk file</source>
+        <translation>لطفا یک فایل دیسک فلاپی مجازی انتخاب کنید</translation>
     </message>
     <message>
-      <source>All virtual floppy disk files (%1)</source>
-      <translation>همه فایل های دیسک فلاپی مجازی (%1)</translation>
+        <source>All virtual floppy disk files (%1)</source>
+        <translation>همه فایل های دیسک فلاپی مجازی (%1)</translation>
     </message>
     <message>
-      <source>VDI (VirtualBox Disk Image)</source>
-      <translation>VDI (دیسک ایمیج ویرچوال باکس)</translation>
+        <source>VDI (VirtualBox Disk Image)</source>
+        <translation>VDI (دیسک ایمیج ویرچوال باکس)</translation>
     </message>
     <message>
-      <source>VMDK (Virtual Machine Disk)</source>
-      <translation>VMDK (دیسک ماشین مجازی)</translation>
+        <source>VMDK (Virtual Machine Disk)</source>
+        <translation>VMDK (دیسک ماشین مجازی)</translation>
     </message>
     <message>
-      <source>VHD (Virtual Hard Disk)</source>
-      <translation>VHD (دیسک سخت مجازی)</translation>
+        <source>VHD (Virtual Hard Disk)</source>
+        <translation>VHD (دیسک سخت مجازی)</translation>
     </message>
     <message>
-      <source>HDD (Parallels Hard Disk)</source>
-      <translation>HDD (دیسک سخت پارالل)</translation>
+        <source>HDD (Parallels Hard Disk)</source>
+        <translation>HDD (دیسک سخت پارالل)</translation>
     </message>
     <message>
-      <source>QED (QEMU enhanced disk)</source>
-      <translation>QED (دیسک بهسازی شده کیو ای اِم یو)</translation>
+        <source>QED (QEMU enhanced disk)</source>
+        <translation>QED (دیسک بهسازی شده کیو ای اِم یو)</translation>
     </message>
     <message>
-      <source>QCOW (QEMU Copy-On-Write)</source>
-      <translation>QCOW (کیو ای اِم یو کپی-در-نوشتن)</translation>
+        <source>QCOW (QEMU Copy-On-Write)</source>
+        <translation>QCOW (کیو ای اِم یو کپی-در-نوشتن)</translation>
     </message>
     <message>
-      <source>Please choose a location for new virtual hard drive file</source>
-      <translation>لطفا یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید</translation>
+        <source>Please choose a location for new virtual hard drive file</source>
+        <translation type="obsolete">لطفا یک مکان برای فایل درایو سخت مجازی جدید انتخاب کنید</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>details report (Unrestricted Execution)</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>details report (Unrestricted Execution)</comment>
+        <translation type="obsolete">فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>details report (Unrestricted Execution)</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>details report (Unrestricted Execution)</comment>
+        <translation type="obsolete">غیرفعال شده</translation>
     </message>
     <message>
-      <source>Unrestricted Execution</source>
-      <comment>details report</comment>
-      <translation>اِجرای بدون محدودیت</translation>
+        <source>Unrestricted Execution</source>
+        <comment>details report</comment>
+        <translation>اِجرای بدون محدودیت</translation>
     </message>
     <message>
-      <source>PS/2 Mouse</source>
-      <comment>PointingHIDType</comment>
-      <translation>PS/2 Mouse</translation>
+        <source>PS/2 Mouse</source>
+        <comment>PointingHIDType</comment>
+        <translation>PS/2 Mouse</translation>
     </message>
     <message>
-      <source>USB Mouse</source>
-      <comment>PointingHIDType</comment>
-      <translation>موس یو اِس بی</translation>
+        <source>USB Mouse</source>
+        <comment>PointingHIDType</comment>
+        <translation>موس یو اِس بی</translation>
     </message>
     <message>
-      <source>USB Tablet</source>
-      <comment>PointingHIDType</comment>
-      <translation>تبلت یو اِس بی</translation>
+        <source>USB Tablet</source>
+        <comment>PointingHIDType</comment>
+        <translation>تبلت یو اِس بی</translation>
     </message>
     <message>
-      <source>PS/2 and USB Mouse</source>
-      <comment>PointingHIDType</comment>
-      <translation>ماوس پی اِس/2 و یو اِس بی</translation>
+        <source>PS/2 and USB Mouse</source>
+        <comment>PointingHIDType</comment>
+        <translation>ماوس پی اِس/2 و یو اِس بی</translation>
     </message>
     <message>
-      <source>USB Multi-Touch Tablet</source>
-      <comment>PointingHIDType</comment>
-      <translation>تبلت چند لمسی یو اِس بی</translation>
+        <source>USB Multi-Touch Tablet</source>
+        <comment>PointingHIDType</comment>
+        <translation>تبلت چند لمسی یو اِس بی</translation>
     </message>
     <message>
-      <source>NAT Network</source>
-      <comment>NetworkAttachmentType</comment>
-      <translation>شبکه NAT</translation>
+        <source>NAT Network</source>
+        <comment>NetworkAttachmentType</comment>
+        <translation>شبکه NAT</translation>
     </message>
     <message>
-      <source>NAT network, '%1'</source>
-      <comment>details report (network)</comment>
-      <translation>شبکه NAT، '%1'</translation>
+        <source>NAT network, '%1'</source>
+        <comment>details report (network)</comment>
+        <translation>شبکه NAT، '%1'</translation>
     </message>
     <message>
-      <source>You can create or add disk image files in the virtual machine settings.</source>
-      <translation>شما میتوانید فایل های ایمیج دیسک را در تنظیمات ماشین مجازی اضافه یا ایجاد نمائیید.</translation>
+        <source>You can create or add disk image files in the virtual machine settings.</source>
+        <translation>شما میتوانید فایل های ایمیج دیسک را در تنظیمات ماشین مجازی اضافه یا ایجاد نمائیید.</translation>
     </message>
     <message>
-      <source>Enabled</source>
-      <comment>unrestricted execution</comment>
-      <translation>فعال شده</translation>
+        <source>Enabled</source>
+        <comment>unrestricted execution</comment>
+        <translation type="obsolete">فعال شده</translation>
     </message>
     <message>
-      <source>Disabled</source>
-      <comment>unrestricted execution</comment>
-      <translation>غیرفعال شده</translation>
+        <source>Disabled</source>
+        <comment>unrestricted execution</comment>
+        <translation type="obsolete">غیرفعال شده</translation>
     </message>
     <message>
-      <source>Unrestricted Execution</source>
-      <translation>اِجرای بدون محدودیت</translation>
+        <source>Unrestricted Execution</source>
+        <translation>اِجرای بدون محدودیت</translation>
     </message>
     <message>
-      <source>USB</source>
-      <comment>StorageControllerType</comment>
-      <translation>یو اِس بی</translation>
+        <source>USB</source>
+        <comment>StorageControllerType</comment>
+        <translation>یو اِس بی</translation>
     </message>
     <message>
-      <source>off</source>
-      <comment>guest monitor status</comment>
-      <translation>خاموش</translation>
+        <source>off</source>
+        <comment>guest monitor status</comment>
+        <translation>خاموش</translation>
     </message>
     <message>
-      <source>Active</source>
-      <comment>details report (VT-x/AMD-V)</comment>
-      <translation>فعال</translation>
+        <source>Active</source>
+        <comment>details report (VT-x/AMD-V)</comment>
+        <translation>فعال</translation>
     </message>
     <message>
-      <source>Inactive</source>
-      <comment>details report (VT-x/AMD-V)</comment>
-      <translation>غیر فعال</translation>
+        <source>Inactive</source>
+        <comment>details report (VT-x/AMD-V)</comment>
+        <translation>غیر فعال</translation>
     </message>
     <message>
-      <source>Active</source>
-      <comment>details report (Nested Paging)</comment>
-      <translation>فعال</translation>
+        <source>Active</source>
+        <comment>details report (Nested Paging)</comment>
+        <translation>فعال</translation>
     </message>
     <message>
-      <source>Inactive</source>
-      <comment>details report (Nested Paging)</comment>
-      <translation>غیر فعال</translation>
+        <source>Inactive</source>
+        <comment>details report (Nested Paging)</comment>
+        <translation>غیر فعال</translation>
     </message>
     <message>
-      <source>Active</source>
-      <comment>details report (Unrestricted Execution)</comment>
-      <translation>فعال</translation>
+        <source>Active</source>
+        <comment>details report (Unrestricted Execution)</comment>
+        <translation>فعال</translation>
     </message>
     <message>
-      <source>Inactive</source>
-      <comment>details report (Unrestricted Execution)</comment>
-      <translation>غیر فعال</translation>
+        <source>Inactive</source>
+        <comment>details report (Unrestricted Execution)</comment>
+        <translation>غیر فعال</translation>
     </message>
     <message>
-      <source>Paravirtualization Interface</source>
-      <comment>details report</comment>
-      <translation>رابط پارا مجازی سازی</translation>
+        <source>Paravirtualization Interface</source>
+        <comment>details report</comment>
+        <translation>رابط پارا مجازی سازی</translation>
     </message>
     <message>
-      <source>Taking Snapshot</source>
-      <comment>MachineState</comment>
-      <translation>گرفتن ضبط وضعیت</translation>
+        <source>Taking Snapshot</source>
+        <comment>MachineState</comment>
+        <translation>گرفتن ضبط وضعیت</translation>
     </message>
     <message>
-      <source>Taking Online Snapshot</source>
-      <comment>MachineState</comment>
-      <translation>گرفتن ضبط وضعیت آنلاین</translation>
+        <source>Taking Online Snapshot</source>
+        <comment>MachineState</comment>
+        <translation>گرفتن ضبط وضعیت آنلاین</translation>
     </message>
     <message>
-      <source>None</source>
-      <comment>ParavirtProvider</comment>
-      <translation>ندارد</translation>
+        <source>None</source>
+        <comment>ParavirtProvider</comment>
+        <translation>ندارد</translation>
     </message>
     <message>
-      <source>Default</source>
-      <comment>ParavirtProvider</comment>
-      <translation>پیش فرض</translation>
+        <source>Default</source>
+        <comment>ParavirtProvider</comment>
+        <translation>پیش فرض</translation>
     </message>
     <message>
-      <source>Legacy</source>
-      <comment>ParavirtProvider</comment>
-      <translation>میراث</translation>
+        <source>Legacy</source>
+        <comment>ParavirtProvider</comment>
+        <translation>میراث</translation>
     </message>
     <message>
-      <source>Minimal</source>
-      <comment>ParavirtProvider</comment>
-      <translation>حداقل</translation>
+        <source>Minimal</source>
+        <comment>ParavirtProvider</comment>
+        <translation>حداقل</translation>
     </message>
     <message>
-      <source>Hyper-V</source>
-      <comment>ParavirtProvider</comment>
-      <translation>Hyper-V</translation>
+        <source>Hyper-V</source>
+        <comment>ParavirtProvider</comment>
+        <translation>Hyper-V</translation>
     </message>
     <message>
-      <source>KVM</source>
-      <comment>ParavirtProvider</comment>
-      <translation>KVM</translation>
+        <source>KVM</source>
+        <comment>ParavirtProvider</comment>
+        <translation>KVM</translation>
     </message>
     <message>
-      <source>Optical</source>
-      <comment>DeviceType</comment>
-      <translation>نوری</translation>
+        <source>Optical</source>
+        <comment>DeviceType</comment>
+        <translation>نوری</translation>
     </message>
     <message>
-      <source>New dynamically allocated storage</source>
-      <comment>MediumVariant</comment>
-      <translation>ذخیر ساز پویا اختصاص داده شده جدید</translation>
+        <source>New dynamically allocated storage</source>
+        <comment>MediumVariant</comment>
+        <translation>ذخیر ساز پویا اختصاص داده شده جدید</translation>
     </message>
     <message>
-      <source>TCP</source>
-      <comment>PortMode</comment>
-      <translation>TCP</translation>
+        <source>TCP</source>
+        <comment>PortMode</comment>
+        <translation>TCP</translation>
     </message>
     <message>
-      <source>OHCI</source>
-      <comment>USBControllerType</comment>
-      <translation>OHCI</translation>
+        <source>OHCI</source>
+        <comment>USBControllerType</comment>
+        <translation>OHCI</translation>
     </message>
     <message>
-      <source>EHCI</source>
-      <comment>USBControllerType</comment>
-      <translation>EHCI</translation>
+        <source>EHCI</source>
+        <comment>USBControllerType</comment>
+        <translation>EHCI</translation>
     </message>
     <message>
-      <source>xHCI</source>
-      <comment>USBControllerType</comment>
-      <translation>xHCI</translation>
+        <source>xHCI</source>
+        <comment>USBControllerType</comment>
+        <translation>xHCI</translation>
     </message>
     <message>
-      <source>USB Port %1</source>
-      <comment>StorageSlot</comment>
-      <translation>پورت یو اِس بی %1</translation>
+        <source>USB Port %1</source>
+        <comment>StorageSlot</comment>
+        <translation>پورت یو اِس بی %1</translation>
     </message>
     <message>
-      <source>User interface</source>
-      <comment>DetailsElementType</comment>
-      <translation>رابط کاربری</translation>
+        <source>User interface</source>
+        <comment>DetailsElementType</comment>
+        <translation>رابط کاربری</translation>
     </message>
     <message>
-      <source>(Optical Drive)</source>
-      <translation>(درایو نوری)</translation>
+        <source>(Optical Drive)</source>
+        <translation>(درایو نوری)</translation>
     </message>
     <message>
-      <source>Please choose a virtual hard disk file</source>
-      <translation>لطفا یک فایل دیسک سخت مجازی انتخاب کنید</translation>
+        <source>Please choose a virtual hard disk file</source>
+        <translation>لطفا یک فایل دیسک سخت مجازی انتخاب کنید</translation>
     </message>
     <message>
-      <source>All virtual hard disk files (%1)</source>
-      <translation>همه فایل های دیسک سخت مجازی (%1)</translation>
+        <source>All virtual hard disk files (%1)</source>
+        <translation>همه فایل های دیسک سخت مجازی (%1)</translation>
     </message>
     <message>
-      <source>Encrypted</source>
-      <comment>medium</comment>
-      <translation>رمزگذاری شده</translation>
+        <source>Encrypted</source>
+        <comment>medium</comment>
+        <translation>رمزگذاری شده</translation>
     </message>
     <message>
-      <source>Some of the files in this hard disk chain are inaccessible. Please use the Virtual Medium Manager to inspect these files.</source>
-      <comment>medium</comment>
-      <translation>بعضی از فایل ها در این زنجیره دیسک سخت قابل دسترسی نیست.لطفا از مدیر رسانه مجازی برای بازرسی این فایل ها استفاده کنید</translation>
+        <source>Some of the files in this hard disk chain are inaccessible. Please use the Virtual Medium Manager to inspect these files.</source>
+        <comment>medium</comment>
+        <translation>بعضی از فایل ها در این زنجیره دیسک سخت قابل دسترسی نیست.لطفا از مدیر رسانه مجازی برای بازرسی این فایل ها استفاده کنید</translation>
     </message>
     <message>
-      <source>Please choose a location for new virtual hard disk file</source>
-      <translation>لطفا مکان فایل دیسک سخت مجازی جدید را انتخاب کنید</translation>
+        <source>Please choose a location for new virtual hard disk file</source>
+        <translation>لطفا مکان فایل دیسک سخت مجازی جدید را انتخاب کنید</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxGlobalSettings</name>
     <message>
-      <source>The value '%1' of the key '%2' doesn't match the regexp constraint '%3'.</source>
-      <translation>مقدار '%1' کلید '%2' با محدودیت regexp '%3' تطبیق ندارد.</translation>
+        <source>The value '%1' of the key '%2' doesn't match the regexp constraint '%3'.</source>
+        <translation>مقدار '%1' کلید '%2' با محدودیت regexp '%3' تطبیق ندارد.</translation>
     </message>
     <message>
-      <source>Cannot delete the key '%1'.</source>
-      <translation>کلید '%1' را نمیتوان حذف کرد.</translation>
+        <source>Cannot delete the key '%1'.</source>
+        <translation>کلید '%1' را نمیتوان حذف کرد.</translation>
     </message>
     <message>
-      <source>'%1' is an invalid host-combination code-sequence.</source>
-      <translation>'%1' یک کد توالی میزبان-ترکیبی نامعتبر است.</translation>
+        <source>'%1' is an invalid host-combination code-sequence.</source>
+        <translation>'%1' یک کد توالی میزبان-ترکیبی نامعتبر است.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxLicenseViewer</name>
     <message>
-      <source>VirtualBox License</source>
-      <translation>مجوز ویرچوال باکس</translation>
+        <source>VirtualBox License</source>
+        <translation>مجوز ویرچوال باکس</translation>
     </message>
     <message>
-      <source>I &Agree</source>
-      <translation>می &پذیرم</translation>
+        <source>I &Agree</source>
+        <translation>می &پذیرم</translation>
     </message>
     <message>
-      <source>I &Disagree</source>
-      <translation>نمی &پذیرم</translation>
+        <source>I &Disagree</source>
+        <translation>نمی &پذیرم</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxMediaManagerDlg</name>
     <message>
-      <source>&Actions</source>
-      <translation>اقدام&ات</translation>
+        <source>&Actions</source>
+        <translation>اقدام&ات</translation>
     </message>
     <message>
-      <source>&New...</source>
-      <translation>جد&ید...</translation>
+        <source>&New...</source>
+        <translation type="obsolete">جد&ید...</translation>
     </message>
     <message>
-      <source>&Add...</source>
-      <translation>&افزودن...</translation>
+        <source>&Add...</source>
+        <translation type="obsolete">&افزودن...</translation>
     </message>
     <message>
-      <source>R&emove</source>
-      <translation>حذ&ف</translation>
+        <source>R&emove</source>
+        <translation>حذ&ف</translation>
     </message>
     <message>
-      <source>Re&lease</source>
-      <translation>تر&خیص</translation>
+        <source>Re&lease</source>
+        <translation>تر&خیص</translation>
     </message>
     <message>
-      <source>Re&fresh</source>
-      <translation>تازه& کردن</translation>
+        <source>Re&fresh</source>
+        <translation>تازه& کردن</translation>
     </message>
     <message>
-      <source>Add an existing disk image file</source>
-      <translation>افزودن یک رسانه موجود</translation>
+        <source>Add an existing disk image file</source>
+        <translation type="obsolete">افزودن یک رسانه موجود</translation>
     </message>
     <message>
-      <source>Remove the selected disk image file</source>
-      <translation>حذف رسانه انتخاب شده</translation>
+        <source>Remove the selected disk image file</source>
+        <translation>حذف رسانه انتخاب شده</translation>
     </message>
     <message>
-      <source>Release the selected disk image file by detaching it from the machines</source>
-      <translation>رسانه انتخاب شده را با جداکردن آن از ماشین ترخیص میکند</translation>
+        <source>Release the selected disk image file by detaching it from the machines</source>
+        <translation>رسانه انتخاب شده را با جداکردن آن از ماشین ترخیص میکند</translation>
     </message>
     <message>
-      <source>Refresh the list of disk image files</source>
-      <translation>تازه کردن لیست رسانه</translation>
+        <source>Refresh the list of disk image files</source>
+        <translation>تازه کردن لیست رسانه</translation>
     </message>
     <message>
-      <source>Checking accessibility</source>
-      <translation>بررسی دسترسی پذیری</translation>
+        <source>Checking accessibility</source>
+        <translation>بررسی دسترسی پذیری</translation>
     </message>
     <message>
-      <source>All files (*)</source>
-      <translation>همه فایل ها (*)</translation>
+        <source>All files (*)</source>
+        <translation type="obsolete">همه فایل ها (*)</translation>
     </message>
     <message>
-      <source><i>Not&nbsp;Attached</i></source>
-      <translation><i>ضمیمه&nbsp;نشده است</i></translation>
+        <source><i>Not&nbsp;Attached</i></source>
+        <translation><i>ضمیمه&nbsp;نشده است</i></translation>
     </message>
     <message>
-      <source>--</source>
-      <comment>no info</comment>
-      <translation>--</translation>
+        <source>--</source>
+        <comment>no info</comment>
+        <translation>--</translation>
     </message>
     <message>
-      <source>Virtual Media Manager</source>
-      <translation>مدیر رسانه مجازی</translation>
+        <source>Virtual Media Manager</source>
+        <translation>مدیر رسانه مجازی</translation>
     </message>
     <message>
-      <source>Name</source>
-      <translation>نام</translation>
+        <source>Name</source>
+        <translation>نام</translation>
     </message>
     <message>
-      <source>Virtual Size</source>
-      <translation>حجم مجازی</translation>
+        <source>Virtual Size</source>
+        <translation>حجم مجازی</translation>
     </message>
     <message>
-      <source>Actual Size</source>
-      <translation>حجم واقعی</translation>
+        <source>Actual Size</source>
+        <translation>حجم واقعی</translation>
     </message>
     <message>
-      <source>Size</source>
-      <translation>حجم</translation>
+        <source>Size</source>
+        <translation>حجم</translation>
     </message>
     <message>
-      <source>Type:</source>
-      <translation>نوع:</translation>
+        <source>Type:</source>
+        <translation>نوع:</translation>
     </message>
     <message>
-      <source>Location:</source>
-      <translation>مکان:</translation>
+        <source>Location:</source>
+        <translation>مکان:</translation>
     </message>
     <message>
-      <source>Format:</source>
-      <translation>فرمت:</translation>
+        <source>Format:</source>
+        <translation>فرمت:</translation>
     </message>
     <message>
-      <source>Storage details:</source>
-      <translation>جزئیات ذخیره ساز:</translation>
+        <source>Storage details:</source>
+        <translation>جزئیات ذخیره ساز:</translation>
     </message>
     <message>
-      <source>Attached to:</source>
-      <translation>ضمیمه شده به:</translation>
+        <source>Attached to:</source>
+        <translation>ضمیمه شده به:</translation>
     </message>
     <message>
-      <source>&Copy...</source>
-      <translation>کپ&ی...</translation>
+        <source>&Copy...</source>
+        <translation>کپ&ی...</translation>
     </message>
     <message>
-      <source>&Modify...</source>
-      <translation>ویرا&یش...</translation>
+        <source>&Modify...</source>
+        <translation>ویرا&یش...</translation>
     </message>
     <message>
-      <source>Copy an existing disk image file</source>
-      <translation>کپی یک رسانه موجود</translation>
+        <source>Copy an existing disk image file</source>
+        <translation>کپی یک رسانه موجود</translation>
     </message>
     <message>
-      <source>Modify the attributes of the selected disk image file</source>
-      <translation>ویرایش صفات رسانه انتخاب شده</translation>
+        <source>Modify the attributes of the selected disk image file</source>
+        <translation>ویرایش صفات رسانه انتخاب شده</translation>
     </message>
     <message>
-      <source>Create a new virtual hard drive</source>
-      <translation>ایجاد یک درایو سخت مجازی جدید</translation>
+        <source>Create a new virtual hard drive</source>
+        <translation type="obsolete">ایجاد یک درایو سخت مجازی جدید</translation>
     </message>
     <message>
-      <source><i>Not&nbsp;Encrypted</i></source>
-      <translation><i>رمزگذاری نشده&</i></translation>
+        <source><i>Not&nbsp;Encrypted</i></source>
+        <translation><i>رمزگذاری نشده&</i></translation>
     </message>
     <message>
-      <source>Encrypted with key:</source>
-      <translation>رمزگذاری شده با کلید:</translation>
+        <source>Encrypted with key:</source>
+        <translation>رمزگذاری شده با کلید:</translation>
     </message>
     <message>
-      <source>UUID:</source>
-      <translation>UUID:</translation>
+        <source>UUID:</source>
+        <translation>UUID:</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxMiniToolBar</name>
     <message>
-      <source>Always show the toolbar</source>
-      <translation>همیشه نمایش نوارابزار</translation>
+        <source>Always show the toolbar</source>
+        <translation type="obsolete">همیشه نمایش نوارابزار</translation>
     </message>
     <message>
-      <source>Exit Full Screen or Seamless Mode</source>
-      <translation>خروج ازحالت تمام صفحه یا حالت یکپارچه</translation>
+        <source>Exit Full Screen or Seamless Mode</source>
+        <translation type="obsolete">خروج ازحالت تمام صفحه یا حالت یکپارچه</translation>
     </message>
     <message>
-      <source>Close VM</source>
-      <translation>بستن ماشین مجازی</translation>
+        <source>Close VM</source>
+        <translation type="obsolete">بستن ماشین مجازی</translation>
     </message>
     <message>
-      <source>Minimize Window</source>
-      <translation>کمینه پنجره</translation>
+        <source>Minimize Window</source>
+        <translation type="obsolete">کمینه پنجره</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxScreenshotViewer</name>
     <message>
-      <source>Screenshot of %1 (%2)</source>
-      <translation>اِسکرین شات %1 (%2)</translation>
+        <source>Screenshot of %1 (%2)</source>
+        <translation>اِسکرین شات %1 (%2)</translation>
     </message>
     <message>
-      <source>Click to view non-scaled screenshot.</source>
-      <translation>برای مشاهده اِسکرین شات غیر-مقیاس شده کلیک کنید.</translation>
+        <source>Click to view non-scaled screenshot.</source>
+        <translation>برای مشاهده اِسکرین شات غیر-مقیاس شده کلیک کنید.</translation>
     </message>
     <message>
-      <source>Click to view scaled screenshot.</source>
-      <translation>برای مشاهده اِسکرین شات مقیاس شده کلیک کنید.</translation>
+        <source>Click to view scaled screenshot.</source>
+        <translation>برای مشاهده اِسکرین شات مقیاس شده کلیک کنید.</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxSnapshotDetailsDlg</name>
     <message>
-      <source>Details of %1 (%2)</source>
-      <translation>جزئیات %1 (%2)</translation>
+        <source>Details of %1 (%2)</source>
+        <translation>جزئیات %1 (%2)</translation>
     </message>
     <message>
-      <source>Click to enlarge the screenshot.</source>
-      <translation>برای بزرگ کردن اِسکرین شات کلیک کنید.</translation>
+        <source>Click to enlarge the screenshot.</source>
+        <translation>برای بزرگ کردن اِسکرین شات کلیک کنید.</translation>
     </message>
     <message>
-      <source>&Name:</source>
-      <translation>نا&م:</translation>
+        <source>&Name:</source>
+        <translation>نا&م:</translation>
     </message>
     <message>
-      <source>Taken:</source>
-      <translation>گرفته شده:</translation>
+        <source>Taken:</source>
+        <translation>گرفته شده:</translation>
     </message>
     <message>
-      <source>&Description:</source>
-      <translation>توضی&حات:</translation>
+        <source>&Description:</source>
+        <translation>توضی&حات:</translation>
     </message>
     <message>
-      <source>D&etails:</source>
-      <translation>جزئ&یات:</translation>
+        <source>D&etails:</source>
+        <translation>جزئ&یات:</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxSnapshotsWgt</name>
     <message>
-      <source>VBoxSnapshotsWgt</source>
-      <translation>VBoxSnapshotsWgt</translation>
+        <source>VBoxSnapshotsWgt</source>
+        <translation>VBoxSnapshotsWgt</translation>
     </message>
     <message>
-      <source>Current State (changed)</source>
-      <comment>Current State (Modified)</comment>
-      <translation>وضعیت فعلی (تغییر کرده است)</translation>
+        <source>Current State (changed)</source>
+        <comment>Current State (Modified)</comment>
+        <translation>وضعیت فعلی (تغییر کرده است)</translation>
     </message>
     <message>
-      <source>Current State</source>
-      <comment>Current State (Unmodified)</comment>
-      <translation>وضعیت فعلی</translation>
+        <source>Current State</source>
+        <comment>Current State (Unmodified)</comment>
+        <translation>وضعیت فعلی</translation>
     </message>
     <message>
-      <source>The current state differs from the state stored in the current snapshot</source>
-      <translation>وضعیت فعلی متفاوت از وضعیت ذخیره شده در ضبط وضعیت فعلی</translation>
+        <source>The current state differs from the state stored in the current snapshot</source>
+        <translation>وضعیت فعلی متفاوت از وضعیت ذخیره شده در ضبط وضعیت فعلی</translation>
     </message>
     <message>
-      <source>The current state is identical to the state stored in the current snapshot</source>
-      <translation>وضعیت فعلی برابر است با وضعیت ذخیره شده در ضبط وضعیت فعلی</translation>
+        <source>The current state is identical to the state stored in the current snapshot</source>
+        <translation>وضعیت فعلی برابر است با وضعیت ذخیره شده در ضبط وضعیت فعلی</translation>
     </message>
     <message>
-      <source> (current, </source>
-      <comment>Snapshot details</comment>
-      <translation> (فعلی، </translation>
+        <source> (current, </source>
+        <comment>Snapshot details</comment>
+        <translation> (فعلی، </translation>
     </message>
     <message>
-      <source>online)</source>
-      <comment>Snapshot details</comment>
-      <translation>آنلاین)</translation>
+        <source>online)</source>
+        <comment>Snapshot details</comment>
+        <translation>آنلاین)</translation>
     </message>
     <message>
-      <source>offline)</source>
-      <comment>Snapshot details</comment>
-      <translation>آفلاین)</translation>
+        <source>offline)</source>
+        <comment>Snapshot details</comment>
+        <translation>آفلاین)</translation>
     </message>
     <message>
-      <source>Taken at %1</source>
-      <comment>Snapshot (time)</comment>
-      <translation>ایجاد شده در %1</translation>
+        <source>Taken at %1</source>
+        <comment>Snapshot (time)</comment>
+        <translation>ایجاد شده در %1</translation>
     </message>
     <message>
-      <source>Taken on %1</source>
-      <comment>Snapshot (date + time)</comment>
-      <translation>ایجاد شده در %1</translation>
+        <source>Taken on %1</source>
+        <comment>Snapshot (date + time)</comment>
+        <translation>ایجاد شده در %1</translation>
     </message>
     <message>
-      <source>%1 since %2</source>
-      <comment>Current State (time or date + time)</comment>
-      <translation>%1 از %2</translation>
+        <source>%1 since %2</source>
+        <comment>Current State (time or date + time)</comment>
+        <translation>%1 از %2</translation>
     </message>
     <message>
-      <source>Snapshot %1</source>
-      <translation>ضبط وضعیت %1</translation>
+        <source>Snapshot %1</source>
+        <translation>ضبط وضعیت %1</translation>
     </message>
     <message>
-      <source>Take &Snapshot</source>
-      <translation>ایجاد ضبط &وضعیت</translation>
+        <source>Take &Snapshot</source>
+        <translation>ایجاد ضبط &وضعیت</translation>
     </message>
     <message>
-      <source>S&how Details</source>
-      <translation>نمایش &جزئیات</translation>
+        <source>S&how Details</source>
+        <translation>نمایش &جزئیات</translation>
     </message>
     <message>
-      <source>Take a snapshot of the current virtual machine state</source>
-      <translation>ایجاد یک ضبط وضعیت از وضعیت فعلی ماشین مجازی</translation>
+        <source>Take a snapshot of the current virtual machine state</source>
+        <translation>ایجاد یک ضبط وضعیت از وضعیت فعلی ماشین مجازی</translation>
     </message>
     <message>
-      <source>Show the details of the selected snapshot</source>
-      <translation>نمایش جزئیات ضبط وضعیت انتخاب شده</translation>
+        <source>Show the details of the selected snapshot</source>
+        <translation type="obsolete">نمایش جزئیات ضبط وضعیت انتخاب شده</translation>
     </message>
     <message>
-      <source> (%1)</source>
-      <translation> (%1)</translation>
+        <source> (%1)</source>
+        <translation> (%1)</translation>
     </message>
     <message>
-      <source>&Restore Snapshot</source>
-      <translation>بازگردانی &ضبط وضعیت</translation>
+        <source>&Restore Snapshot</source>
+        <translation>بازگردانی &ضبط وضعیت</translation>
     </message>
     <message>
-      <source>&Delete Snapshot</source>
-      <translation>حذف ضبط &وضعیت</translation>
+        <source>&Delete Snapshot</source>
+        <translation>حذف ضبط &وضعیت</translation>
     </message>
     <message>
-      <source>Restore the selected snapshot of the virtual machine</source>
-      <translation>بازگردانی ضبط وضعیت انتخاب شده ماشین مجازی</translation>
+        <source>Restore the selected snapshot of the virtual machine</source>
+        <translation type="obsolete">بازگردانی ضبط وضعیت انتخاب شده ماشین مجازی</translation>
     </message>
     <message>
-      <source>Delete the selected snapshot of the virtual machine</source>
-      <translation>حذف ضبط وضعیت انتخاب شده ماشین مجازی</translation>
+        <source>Delete the selected snapshot of the virtual machine</source>
+        <translation type="obsolete">حذف ضبط وضعیت انتخاب شده ماشین مجازی</translation>
     </message>
     <message>
-      <source> (%1 ago)</source>
-      <translation> (%1 پیش)</translation>
+        <source> (%1 ago)</source>
+        <translation> (%1 پیش)</translation>
     </message>
     <message>
-      <source>&Clone...</source>
-      <translation>شبیه &سازی...</translation>
+        <source>&Clone...</source>
+        <translation>شبیه &سازی...</translation>
     </message>
     <message>
-      <source>Clone the selected virtual machine</source>
-      <translation>شبیه سازی ماشین مجازی انتخاب شده</translation>
+        <source>Clone the selected virtual machine</source>
+        <translation type="obsolete">شبیه سازی ماشین مجازی انتخاب شده</translation>
     </message>
     <message>
-      <source>Restore selected snapshot of the virtual machine</source>
-      <translation>بازگردانی ضبط وضعیت انتخاب شده ماشین مجازی</translation>
+        <source>Restore selected snapshot of the virtual machine</source>
+        <translation>بازگردانی ضبط وضعیت انتخاب شده ماشین مجازی</translation>
     </message>
     <message>
-      <source>Delete selected snapshot of the virtual machine</source>
-      <translation>ضبط وضعیت ماشین مجازی انتخاب شده را حذف میکند</translation>
+        <source>Delete selected snapshot of the virtual machine</source>
+        <translation>ضبط وضعیت ماشین مجازی انتخاب شده را حذف میکند</translation>
     </message>
     <message>
-      <source>Display a window with selected snapshot details</source>
-      <translation>پنجره ای از جزئیات ضبط وضعیت انتخاب شده را نشان میدهد</translation>
+        <source>Display a window with selected snapshot details</source>
+        <translation>پنجره ای از جزئیات ضبط وضعیت انتخاب شده را نشان میدهد</translation>
     </message>
     <message>
-      <source>Clone selected virtual machine</source>
-      <translation>شبیه سازی ماشین مجازی انتخاب شده</translation>
+        <source>Clone selected virtual machine</source>
+        <translation>شبیه سازی ماشین مجازی انتخاب شده</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxTakeSnapshotDlg</name>
     <message>
-      <source>Take Snapshot of Virtual Machine</source>
-      <translation>ایجاد ضبط وضعیت از ماشین مجازی</translation>
+        <source>Take Snapshot of Virtual Machine</source>
+        <translation>ایجاد ضبط وضعیت از ماشین مجازی</translation>
     </message>
     <message>
-      <source>Snapshot &Name</source>
-      <translation>نام ضب&ط وضعیت</translation>
+        <source>Snapshot &Name</source>
+        <translation>نام ضب&ط وضعیت</translation>
     </message>
     <message>
-      <source>Snapshot &Description</source>
-      <translation>توضیحات &ضبط وضعیت</translation>
+        <source>Snapshot &Description</source>
+        <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>
-        <numerusform>هشدار: شما درحال ایجاد یک ضبط وضعیت از ماشین درحال اجرا هستید که %n ایمیج تغییرناپذیر به آن ضمیمه شده است. تا زمانیکه شما روی این ضبط وضعیت کار میکنید ایمیج تغییرناپذیر برای جلوگیری از از بین رفتن داده ریست نخواهد شد.</numerusform>
-      </translation>
+        <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>
+            <numerusform>هشدار: شما درحال ایجاد یک ضبط وضعیت از ماشین درحال اجرا هستید که %n ایمیج تغییرناپذیر به آن ضمیمه شده است. تا زمانیکه شما روی این ضبط وضعیت کار میکنید ایمیج تغییرناپذیر برای جلوگیری از از بین رفتن داده ریست نخواهد شد.</numerusform>
+        </translation>
     </message>
     <message>
-      <source>Snapshot %1</source>
-      <translation>ضبط وضعیت %1</translation>
+        <source>Snapshot %1</source>
+        <translation>ضبط وضعیت %1</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxUSBMenu</name>
     <message>
-      <source><no devices available></source>
-      <comment>USB devices</comment>
-      <translation><دستگاه دردسترس نیست></translation>
+        <source><no devices available></source>
+        <comment>USB devices</comment>
+        <translation><دستگاه دردسترس نیست></translation>
     </message>
     <message>
-      <source>No supported devices connected to the host PC</source>
-      <comment>USB device tooltip</comment>
-      <translation>دستگاه پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
+        <source>No supported devices connected to the host PC</source>
+        <comment>USB device tooltip</comment>
+        <translation>دستگاه پشتیبانی شده ای به رایانه میزبان متصل نشده است</translation>
     </message>
-  </context>
-  <context>
+</context>
+<context>
     <name>VBoxVMInformationDlg</name>
     <message>
-      <source>%1 - Session Information</source>
-      <translation>%1 - اطلاعات جلسه</translation>
+        <source>%1 - Session Information</source>
+        <translation type="obsolete">%1 - اطلاعات جلسه</translation>
     </message>
     <message>
-      <source>&Details</source>
-      <translation>جزئی&ات</translation>
+        <source>&Details</source>
+        <translation type="obsolete">جزئی&ات</translation>
     </message>
     <message>
-      <source>&Runtime</source>
-      <translation>زمان اِ&جرا</translation>
+        <source>&Runtime</source>
+        <translation type="obsolete">زمان اِ&جرا</translation>
     </message>
     <message>
-      <source>DMA Transfers</source>
-      <translation>انتقالات DMA</translation>
+        <source>DMA Transfers</source>
+        <translation type="obsolete">انتقالات DMA</translation>
     </message>
     <message>
-      <source>PIO Transfers</source>
-      <translation>انتقالات PIO</translation>
+        <source>PIO Transfers</source>
+        <translation type="obsolete">انتقالات PIO</translation>
     </message>
     <message>
-      <source>Data Read</source>
-      <translation>خواندن داده</translation>
+        <source>Data Read</source>
+        <translation type="obsolete">خواندن داده</translation>
     </message>
     <message>
-      <source>Data Written</source>
-      <translation>نوشتن داده</translation>
+        <source>Data Written</source>
+        <translation type="obsolete">نوشتن داده</translation>
     </message>
     <message>
-      <source>Data Transmitted</source>
-      <translation>داده اِرسال شده</translation>
+        <source>Data Transmitted</source>
+        <translation type="obsolete">داده اِرسال شده</translation>
     </message>
     <message>
-      <source>Data Received</source>
-      <translation>داده دریافتی</translation>
+        <source>Data Received</source>
+        <translation type="obsolete">داده دریافتی</translation>
     </message>
     <message>
-      <source>Runtime Attributes</source>
-      <translation>صفات زمان اِجرا</translation>
+        <source>Runtime Attributes</source>
+        <translation type="obsolete">صفات زمان اِجرا</translation>
     </message>
     <message>
-      <source>Screen Resolution</source>
-      <translation>وضوح صفحه</translation>
+        <source>Screen Resolution</source>
+        <translation type="obsolete">وضوح صفحه</translation>
     </message>
     <message>
-      <source>Not Detected</source>
-      <comment>guest additions</comment>
-      <translation>تشخیص داده نشده است</translation>
+        <source>Not Detected</source>
+        <comment>guest additions</comment>
+        <translation type="obsolete">تشخیص داده نشده است</translation>
     </message>
     <message>
-      <source>Not Detected</source>
-      <comment>guest os type</comment>
-      <translation>تشخیص داده نشده است</translation>
+        <source>Not Detected</source>
+        <comment>guest os type</comment>
+        <translation type="obsolete">تشخیص داده نشده است</translation>
     </message>
     <message>
-      <source>Guest Additions</source>
-      <translation>افزونه مهمان</translation>
+        <source>Guest Additions</source>
+        <translation type="obsolete">افزونه مهمان</translation>
     </message>
     <message>
-      <source>Guest OS Type</source>
-      <translation>نوع سیستم عامل مهمان</translation>
+        <source>Guest OS Type</source>
+        <translation type="obsolete">نوع سیستم عامل مهمان</translation>
     </message>
     <message>
-      <source>No Network Adapters</source>
-      <translation>هیچ آداپتور شبکه ندارد</translation>
+        <source>No Network Adapters</source>
+        <translation type="obsolete">هیچ آداپتور شبکه ندارد</translation>
     </message>
     <message>
-      <source>VBoxVMInformationDlg</source>
-      <translation>VBoxVMInformationDlg</translation>
+        <source>VBoxVMInformationDlg</source>
+        <translation type="obsolete">VBoxVMInformationDlg</translation>
     </message>
     <message>
-      <source>Storage Statistics</source>
-      <translation>آمار ذخیره ساز</translation>
+        <source>Storage Statistics</source>
+        <translation type="obsolete">آمار ذخیره ساز</translation>
     </message>
     <message>
-      <source>No Storage Devices</source>
-      <translation>دستگاه ذخیره ساز ندارد</translation>
+        <source>No Storage Devices</source>
+        <translation type="obsolete">دستگاه ذخیره ساز ندارد</translation>
     </message>
     <message>
-      <source>Network Statistics</source>
-      <translation>آمار شبکه</translation>
+        <source>Network Statistics</source>
+        <translation type="obsolete">آمار شبکه</translation>
     </message>
     <message>
-      <source>Not Available</source>
-      <comment>details report (VRDE server port)</comment>
-      <translation>موجود نیست</translation>
+        <source>Not Available</source>
+        <comment>details report (VRDE server port)</comment>
+        <translation type="obsolete">موجود نیست</translation>
     </message>
     <message>
-      <source>Clipboard Mode</source>
-      <translation>حالت کلیپ برد</translation>
+        <source>Clipboard Mode</source>
+        <translation type="obsolete">حالت کلیپ برد</translation>
     </message>
     <message>
-      <source>Drag'n'Drop Mode</source>
-      <translation>حالت کشیدن 'و' رهاکردن</translation>
+        <source>Drag'n'Drop Mode</source>
+        <translation type="obsolete">حالت کشیدن 'و' رهاکردن</translation>
     </message>
     <message>
-      <source>Configuration &Details</source>
-      <translation>جزئیات &پیکربندی</translation>
+        <source>Configuration &Details</source>
+        <translation type="obsolete">جزئیات &پیکربندی</translation>
     </message>
     <message>
-      <source>&Runtime Information</source>
-      <translation>&اطلاعات زمان اِجرا</translation>
+        <source>&Runtime Information</source>
+        <translation type="obsolete">&اطلاعات زمان اِجرا</translation>
     </message>
-  </context>
+</context>
 </TS>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts
index 31e180f..a74728e 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fi.ts
@@ -3594,14 +3594,6 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-        <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Enable Proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Ho&st:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3625,6 +3617,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -8124,6 +8140,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -8281,6 +8305,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts
index 7011ac4..c6592e2 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_fr.ts
@@ -523,19 +523,19 @@
     </message>
     <message>
         <source>&Import Appliance...</source>
-        <translation>&Importer une application virtuelle...</translation>
+        <translation>&Importer un appareil virtuel...</translation>
     </message>
     <message>
         <source>Import an appliance into VirtualBox</source>
-        <translation>Importer une application virtuelle (ensemble de machines pré-configurées) dans VirtualBox</translation>
+        <translation>Importer appareil virtuel (appliance) dans VirtualBox</translation>
     </message>
     <message>
         <source>&Export Appliance...</source>
-        <translation>&Exporter une application virtuelle...</translation>
+        <translation>&Exporter un appareil virtuel...</translation>
     </message>
     <message>
         <source>Export one or more VirtualBox virtual machines as an appliance</source>
-        <translation>Exporter une ou plusieurs machines de VirtualBox en tant qu'application virtuelle</translation>
+        <translation>Exporter une ou plusieurs machines VirtualBox en tant qu'appareil virtuel</translation>
     </message>
     <message>
         <source>&Preferences...</source>
@@ -617,7 +617,7 @@
     </message>
     <message>
         <source>Re&fresh</source>
-        <translation type="unfinished">&Actualiser</translation>
+        <translation>&Actualiser</translation>
     </message>
     <message>
         <source>Refresh the accessibility state of the selected virtual machine</source>
@@ -938,446 +938,446 @@
     </message>
     <message>
         <source>&VirtualBox</source>
-        <translation type="unfinished"></translation>
+        <translation>&VirtualBox</translation>
     </message>
     <message>
         <source>&File</source>
-        <translation type="unfinished">&Fichier</translation>
+        <translation>&Fichier</translation>
     </message>
     <message>
         <source>&Window</source>
-        <translation type="unfinished"></translation>
+        <translation>&Fenêtre</translation>
     </message>
     <message>
         <source>&Minimize</source>
-        <translation type="unfinished"></translation>
+        <translation>&Minimiser</translation>
     </message>
     <message>
         <source>Minimize active window</source>
-        <translation type="unfinished"></translation>
+        <translation>Minimise la fenêtre active</translation>
     </message>
     <message>
         <source>Display the Network Operations Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre du Gestionnaire d'opérations réseau</translation>
     </message>
     <message>
         <source>Display a window with product information</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher les informations sur le produit</translation>
     </message>
     <message>
         <source>&Preferences...</source>
         <comment>global preferences window</comment>
-        <translation type="unfinished">&Paramètres...</translation>
+        <translation>&Paramètres...</translation>
     </message>
     <message>
         <source>Display the global preferences window</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre des préférences globales</translation>
     </message>
     <message>
         <source>Display the virtual machine settings window</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre des paramètres de la machine virtuelle</translation>
     </message>
     <message>
         <source>Display the virtual machine session information window</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre d'informations de session de la machine virtuelle</translation>
     </message>
     <message>
         <source>&Save State</source>
-        <translation type="unfinished"></translation>
+        <translation>&Sauvegarder l'état</translation>
     </message>
     <message>
         <source>Save the state of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Sauvegarde l'état de la machine virtuelle</translation>
     </message>
     <message>
         <source>Send the ACPI Shutdown signal to the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Envoie le signal d'extinction ACPI à la machien virtuelle</translation>
     </message>
     <message>
         <source>&Full-screen Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Mode &plein écran</translation>
     </message>
     <message>
         <source>Switch between normal and full-screen mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Permuter entre les modes normal et plein écran</translation>
     </message>
     <message>
         <source>Seam&less Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Mode &intégré</translation>
     </message>
     <message>
         <source>S&caled Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Mode mise à l'é&chelle</translation>
     </message>
     <message>
         <source>&Minimize Window</source>
-        <translation type="unfinished"></translation>
+        <translation>&Minimiser la fenêtre</translation>
     </message>
     <message>
         <source>Automatically resize the guest display when the window is resized</source>
-        <translation type="unfinished"></translation>
+        <translation>Redimensionner automatiquement l'affichage de l'invité quand la fenêtre est redimensionnée</translation>
     </message>
     <message>
         <source>Take guest display screenshot</source>
-        <translation type="unfinished"></translation>
+        <translation>Prendre une capture de l'écran de l'invité</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure video capture</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre des paramètres de la machine virtuelle pour configurer la capture vidéo</translation>
     </message>
     <message>
         <source>Enable guest display video capture</source>
-        <translation type="unfinished"></translation>
+        <translation>Activer la capture vidéo de l'affichage inivté</translation>
     </message>
     <message>
         <source>Allow remote desktop (RDP) connections to this machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Autoriser les connexions de bureau distant (RDP) à cette machine</translation>
     </message>
     <message>
         <source>&Menu Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Barre de &menu</translation>
     </message>
     <message>
         <source>&Menu Bar Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Paramètres de la barre de &menu...</translation>
     </message>
     <message>
         <source>Display window to configure menu-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre de configuration de la barre de menu</translation>
     </message>
     <message>
         <source>Show Menu &Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la &barre de menu</translation>
     </message>
     <message>
         <source>Enable menu-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Activer la barre de menu</translation>
     </message>
     <message>
         <source>&Status Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Barre d'&état</translation>
     </message>
     <message>
         <source>&Status Bar Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Paramètres de la barre d'&état...</translation>
     </message>
     <message>
         <source>Display window to configure status-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre de configuration de la barre d'état</translation>
     </message>
     <message>
         <source>Show Status &Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la barre d'&état</translation>
     </message>
     <message>
         <source>Enable status-bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Activer la barre d'état</translation>
     </message>
     <message>
         <source>S&cale Factor</source>
-        <translation type="unfinished"></translation>
+        <translation>Facteur d'é&chelle</translation>
     </message>
     <message>
         <source>&Input</source>
-        <translation type="unfinished"></translation>
+        <translation>&Entrée</translation>
     </message>
     <message>
         <source>&Keyboard</source>
-        <translation type="unfinished"></translation>
+        <translation>&Clavier</translation>
     </message>
     <message>
         <source>&Keyboard Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Paramètres du &clavier...</translation>
     </message>
     <message>
         <source>Display global preferences window to configure keyboard shortcuts</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre des préférences globales de configuration des raccourcis clavier</translation>
     </message>
     <message>
         <source>&Insert %1</source>
         <comment>that means send the %1 key sequence to the virtual machine</comment>
-        <translation type="unfinished"></translation>
+        <translation>&Envoyer %1</translation>
     </message>
     <message>
         <source>Send the %1 sequence to the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Envoie la séquence %1 à la machine virtuelle</translation>
     </message>
     <message>
         <source>&Mouse</source>
-        <translation type="unfinished"></translation>
+        <translation>&Souris</translation>
     </message>
     <message>
         <source>&Mouse Integration</source>
-        <translation type="unfinished"></translation>
+        <translation>Intégration de la &souris</translation>
     </message>
     <message>
         <source>Enable host mouse pointer integration</source>
-        <translation type="unfinished"></translation>
+        <translation>Activer l'intégration du pointeur de la souris</translation>
     </message>
     <message>
         <source>&Hard Disks</source>
-        <translation type="unfinished"></translation>
+        <translation>&Disques durs</translation>
     </message>
     <message>
         <source>&Hard Disk Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Paramètres des &disques durs...</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure hard disks</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre des paramètres de la machine virtuelle pour configurer les disques durs</translation>
     </message>
     <message>
         <source>&Optical Drives</source>
-        <translation type="unfinished"></translation>
+        <translation>Lecteurs &optiques</translation>
     </message>
     <message>
         <source>&Floppy Drives</source>
-        <translation type="unfinished"></translation>
+        <translation>&Lecteurs de disquettes</translation>
     </message>
     <message>
         <source>&Network</source>
-        <translation type="unfinished"></translation>
+        <translation>&Réseau</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure network adapters</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre des paramètres de la machine virtuelle pour configurer les cartes réseau</translation>
     </message>
     <message>
         <source>&USB</source>
-        <translation type="unfinished"></translation>
+        <translation>&USB</translation>
     </message>
     <message>
         <source>&USB Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Paramètres &USB...</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure USB devices</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre des paramètres de la machine virtuelle pour configurer les périphériques USB</translation>
     </message>
     <message>
         <source>&Drag and Drop</source>
-        <translation type="unfinished"></translation>
+        <translation>&Glisser-Déposer</translation>
     </message>
     <message>
         <source>&Shared Folders</source>
-        <translation type="unfinished"></translation>
+        <translation>&Dossiers partagés</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure shared folders</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher la fenêtre des paramètres de la machine virtuelle pour configurer les dossiers partagés</translation>
     </message>
     <message>
         <source>Insert the Guest Additions disk file into the virtual optical drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Insère le fichier d'image disque des Additions Invité dans le lecteur optique virtuel</translation>
     </message>
     <message>
         <source>&Logging</source>
         <comment>debug action</comment>
-        <translation type="unfinished"></translation>
+        <translation>Journa&lisation</translation>
     </message>
     <message>
         <source>Show &Log...</source>
         <comment>debug action</comment>
-        <translation type="unfinished">Afficher le &journal...</translation>
+        <translation>Afficher le &journal...</translation>
     </message>
     <message>
         <source>%1%</source>
         <comment>scale-factor</comment>
-        <translation type="unfinished">%1%</translation>
+        <translation>%1%</translation>
     </message>
     <message>
         <source>Enable</source>
         <comment>Virtual Screen</comment>
-        <translation type="unfinished">Activer</translation>
+        <translation>Activer</translation>
     </message>
     <message>
         <source>Resize to %1x%2</source>
         <comment>Virtual Screen</comment>
-        <translation type="unfinished"></translation>
+        <translation>Redimmensionner en %1x%2</translation>
     </message>
     <message>
         <source>Preview Monitor %1</source>
-        <translation type="unfinished">Aperçu de l'écran %1</translation>
+        <translation>Aperçu de l'écran %1</translation>
     </message>
     <message>
         <source>&Connect Network Adapter</source>
-        <translation type="unfinished"></translation>
+        <translation>&Connecter la carte réseau</translation>
     </message>
     <message>
         <source>Connect Network Adapter &%1</source>
-        <translation type="unfinished"></translation>
+        <translation>Connecter la carte réseau &%1</translation>
     </message>
     <message>
         <source>No USB Devices Connected</source>
-        <translation type="unfinished">Aucun périphérique USB n'est branché</translation>
+        <translation>Aucun périphérique USB n'est branché</translation>
     </message>
     <message>
         <source>No supported devices connected to the host PC</source>
-        <translation type="unfinished">Aucun périphérique supporté n'est connecté à l'ordinateur</translation>
+        <translation>Aucun périphérique supporté n'est connecté à l'ordinateur</translation>
     </message>
     <message>
         <source>No Webcams Connected</source>
-        <translation type="unfinished">Aucune Webcam connectée</translation>
+        <translation>Aucune Webcam connectée</translation>
     </message>
     <message>
         <source>No supported webcams connected to the host PC</source>
-        <translation type="unfinished">Aucune Webcam supportée connectée</translation>
+        <translation>Aucune Webcam supportée connectée</translation>
     </message>
     <message>
         <source>E&xtra Data Manager...</source>
-        <translation type="unfinished"></translation>
+        <translation>Gestionnaire de données e&xtra...</translation>
     </message>
     <message>
         <source>Display the Extra Data Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>Affiche la fenêtre du gestionnaire de données supplémentaires</translation>
     </message>
     <message>
         <source>Create new virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Créer une nouvelle machine virtuelle</translation>
     </message>
     <message>
         <source>Add existing virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter une machine virtuelle existante</translation>
     </message>
     <message>
         <source>Rename selected virtual machine group</source>
-        <translation type="unfinished"></translation>
+        <translation>Renome le groupe de machines virtuelles sélectionné</translation>
     </message>
     <message>
         <source>&Ungroup</source>
-        <translation type="unfinished"></translation>
+        <translation>&Dégrouper</translation>
     </message>
     <message>
         <source>Ungroup items of selected virtual machine group</source>
-        <translation type="unfinished"></translation>
+        <translation>Dégroupe les éléments sélectionnés du groupe de machines virtuelles</translation>
     </message>
     <message>
         <source>&Sort</source>
-        <translation type="unfinished"></translation>
+        <translation>&Trier</translation>
     </message>
     <message>
         <source>Sort items of selected virtual machine group alphabetically</source>
-        <translation type="unfinished"></translation>
+        <translation>Trie alphabétiquement les éléments du groupe de machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>Add new group based on selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter un groupe basé sur les machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>Clone selected virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Cloner la machine virtuelle sélectionnée</translation>
     </message>
     <message>
         <source>Remove selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer les machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>Start selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Démarre les machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>Switch to the windows of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Bascule vers les fenêtres des machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>&Normal Start</source>
-        <translation type="unfinished"></translation>
+        <translation>Démarrage &normal</translation>
     </message>
     <message>
         <source>&Headless Start</source>
-        <translation type="unfinished"></translation>
+        <translation>Démarrage sans &affichage</translation>
     </message>
     <message>
         <source>Start selected virtual machines in the background</source>
-        <translation type="unfinished"></translation>
+        <translation>Démarre les machines virtuelles sélectionnées en tâche de fond</translation>
     </message>
     <message>
         <source>&Detachable Start</source>
-        <translation type="unfinished"></translation>
+        <translation>Démarrage &détachable</translation>
     </message>
     <message>
         <source>Start selected virtual machines with option of continuing in background</source>
-        <translation type="unfinished"></translation>
+        <translation>Démarre les machines virtuelles sélectionnées avec option de poursuite d'éxecution en tâche de fond</translation>
     </message>
     <message>
         <source>Suspend execution of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Suspendre l'éxécution des machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>Reset selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Réinitialise les machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>D&iscard Saved State...</source>
-        <translation type="unfinished"></translation>
+        <translation>Oubl&ier l'état sauvegardé...</translation>
     </message>
     <message>
         <source>Discard saved state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Oublie l'état sauvegardé des machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>Show log files of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher le journal des machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>Refresh accessibility state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Actualiser l'état des machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>S&how in Finder</source>
-        <translation type="unfinished"></translation>
+        <translation>&Afficher dans le Finder</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in Finder</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher le fichier de définition de la machine VirtualBox dans le Finder</translation>
     </message>
     <message>
         <source>S&how in Explorer</source>
-        <translation type="unfinished"></translation>
+        <translation>&Afficher dans l'explorateur de fichiers</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in Explorer</source>
-        <translation type="unfinished"></translation>
+        <translation>Affiche le fichier de définition de la Machine VirtualBox dans l'explorateur de fichiers</translation>
     </message>
     <message>
         <source>S&how in File Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>&Afficher dans le gestionnaire de fichier</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in the File Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Afficher le fichier de définition de la machine virtuelle dans le gestionnaire de fichier</translation>
     </message>
     <message>
         <source>Cr&eate Alias on Desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Créer un &alias sur le bureau</translation>
     </message>
     <message>
         <source>Create alias files to the VirtualBox Machine Definition files on your desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Crée un alias du fichier de définition de la Machine VirtualBox sur votre bureau</translation>
     </message>
     <message>
         <source>Cr&eate Shortcut on Desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Créer un &raccourci sur le bureau</translation>
     </message>
     <message>
         <source>Create shortcut files to the VirtualBox Machine Definition files on your desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Crée un raccourci vers le fichier de définition de la Machine VirtualBox sur votre bureau</translation>
     </message>
     <message>
         <source>Sort group of first selected virtual machine alphabetically</source>
-        <translation type="unfinished"></translation>
+        <translation>Trie alphabétiquement le groupe de la première machine virtuelle sélectionnée</translation>
     </message>
     <message>
         <source>Save state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Sauvegarde l'état des machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>Send ACPI Shutdown signal to selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Envoie le signal d'extinction ACPI aux machines virtuelles sélectionnées</translation>
     </message>
     <message>
         <source>Power off selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Eteind les machines virtuelles sélectionnées</translation>
     </message>
 </context>
 <context>
@@ -1392,31 +1392,31 @@
     <message>
         <source>ID</source>
         <comment>password table field</comment>
-        <translation type="unfinished"></translation>
+        <translation>ID</translation>
     </message>
     <message>
         <source>Password</source>
         <comment>password table field</comment>
-        <translation type="unfinished"></translation>
+        <translation>Mot de passe</translation>
     </message>
     <message numerus="yes">
         <source><nobr>Used by the following %n hard disk(s):</nobr><br>%1</source>
         <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many hard drives are in the tool-tip and doesn't need to be told).</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform><nobr>Utilisé par le %n disque dur :</nobr><br>%1</numerusform>
+            <numerusform><nobr>Utilisé par le(s) %n disque(s) dur(s) :</nobr><br>%1</numerusform>
         </translation>
     </message>
     <message>
         <source>%1 - Disk Encryption</source>
-        <translation type="unfinished"></translation>
+        <translation>Cryptage de disque %1</translation>
     </message>
     <message numerus="yes">
         <source>This virtual machine is password protected. Please enter the %n encryption password(s) below.</source>
         <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many passwords are in the list and doesn't need to be told).</comment>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>Cette machine virtuelle est protégée par un mot de passe. Veuillez entrez le %n mot de passe d'encryption ci-dessous.</numerusform>
+            <numerusform>Cette machine virtuelle est protégée par un mot de passe. Veuillez entrez les %n mots de passe d'encryption ci-dessous.</numerusform>
         </translation>
     </message>
 </context>
@@ -1534,7 +1534,7 @@
     </message>
     <message>
         <source>When checked a new unique MAC address will assigned to all configured network cards.</source>
-        <translation>Si cette case est cochée une nouvelle adresse MAC unique sera assignée à toutes les interfaces réseau.</translation>
+        <translation>Si cette case est cochée, une nouvelle adresse MAC unique sera assignée à toutes les interfaces réseau.</translation>
     </message>
     <message>
         <source>&Reinitialize the MAC address of all network cards</source>
@@ -1542,30 +1542,30 @@
     </message>
     <message>
         <source>Storage Controller (IDE)</source>
-        <translation type="unfinished"></translation>
+        <translation>Contrôleur de stockage (IDE)</translation>
     </message>
     <message>
         <source>Storage Controller (SATA)</source>
-        <translation type="unfinished"></translation>
+        <translation>Contrôleur de stockage (SATA)</translation>
     </message>
     <message>
         <source>Storage Controller (SCSI)</source>
-        <translation type="unfinished"></translation>
+        <translation>Contrôleur de stockage (SCSI)</translation>
     </message>
     <message>
         <source>Storage Controller (SAS)</source>
-        <translation type="unfinished"></translation>
+        <translation>Contrôleur de stockage (SAS)</translation>
     </message>
 </context>
 <context>
     <name>UIApplianceImportEditorWidget</name>
     <message>
         <source>Importing Appliance ...</source>
-        <translation>Importation de l'application virtuelle...</translation>
+        <translation>Importation de l'apareil virtuel...</translation>
     </message>
     <message>
         <source>Reading Appliance ...</source>
-        <translation>Lecture de l'application virtuelle...</translation>
+        <translation>Lecture de l'apareil virtuel...</translation>
     </message>
 </context>
 <context>
@@ -2251,7 +2251,7 @@
     </message>
     <message>
         <source>Retrieving data ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Récupération des données...</translation>
     </message>
 </context>
 <context>
@@ -2972,102 +2972,102 @@
     <message>
         <source>Minimal Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Paravirtualisation minimale</translation>
     </message>
     <message>
         <source>Hyper-V Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Paravirtualisation Hyper-V</translation>
     </message>
     <message>
         <source>KVM Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Paravirtualisation KVM</translation>
     </message>
     <message>
         <source>Scale-factor</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Facteur d'échelle</translation>
     </message>
     <message>
         <source>Unscaled HiDPI Video Output</source>
         <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Sortie vidéo HiDPI non mise à m'échelle</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (display/Unscaled HiDPI Video Output)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Activé</translation>
     </message>
     <message>
         <source>[Optical Drive]</source>
         <comment>details (storage)</comment>
-        <translation type="unfinished"></translation>
+        <translation>[Lecteur optique]</translation>
     </message>
     <message>
         <source>Generic Driver, '%1' { %2 }</source>
         <comment>details (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Pilote générique, '%1' { %2 }</translation>
     </message>
     <message>
         <source>USB Controller</source>
         <comment>details (usb)</comment>
-        <translation type="unfinished">Contrôleur USB</translation>
+        <translation>Contrôleur USB</translation>
     </message>
     <message>
         <source>Menu-bar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Barre de menu</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (user interface/menu-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Active</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/menu-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Inactive</translation>
     </message>
     <message>
         <source>Status-bar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Barre de status</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (user interface/status-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Activée</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/status-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Désactivée</translation>
     </message>
     <message>
         <source>Mini-toolbar Position</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Position de la mini barre d'outil</translation>
     </message>
     <message>
         <source>Top</source>
         <comment>details (user interface/mini-toolbar position)</comment>
-        <translation type="unfinished"></translation>
+        <translation>En haut</translation>
     </message>
     <message>
         <source>Bottom</source>
         <comment>details (user interface/mini-toolbar position)</comment>
-        <translation type="unfinished"></translation>
+        <translation>En bas</translation>
     </message>
     <message>
         <source>Mini-toolbar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Mini barre d'outil</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/mini-toolbar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Désactivée</translation>
     </message>
 </context>
 <context>
@@ -3273,23 +3273,23 @@
     </message>
     <message>
         <source>Machine Windows:</source>
-        <translation type="unfinished"></translation>
+        <translation>Fenêtres des machines :</translation>
     </message>
     <message>
         <source>&Raise Window Under Mouse</source>
-        <translation type="unfinished"></translation>
+        <translation>Fai&re apparaître la fenêtre au survol de la souris</translation>
     </message>
     <message>
         <source>Holds the maximum width which we would like the guest to use.</source>
-        <translation type="unfinished"></translation>
+        <translation>Définit la largeur maximale qu'un invité puisse utiliser.</translation>
     </message>
     <message>
         <source>Holds the maximum height which we would like the guest to use.</source>
-        <translation type="unfinished"></translation>
+        <translation>Définit la hauteur maximale qu'un invité puisse utiliser.</translation>
     </message>
     <message>
         <source>When checked, machine windows will be raised when the mouse pointer moves over them.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, la fenêtre de la machine apparaît au survol de la souris.</translation>
     </message>
 </context>
 <context>
@@ -3340,19 +3340,19 @@
     </message>
     <message>
         <source>Add Package</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter une extension</translation>
     </message>
     <message>
         <source>Remove Package</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer l'extension</translation>
     </message>
     <message>
         <source>Adds new package.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajoute une nouvelle extension.</translation>
     </message>
     <message>
         <source>Removes selected package.</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer l'extension sélectionnée.</translation>
     </message>
 </context>
 <context>
@@ -3428,11 +3428,11 @@
     </message>
     <message>
         <source>Host Screensaver:</source>
-        <translation type="unfinished"></translation>
+        <translation>Economiseur d'écran de l'hôte :</translation>
     </message>
     <message>
         <source>&Disable When Running Virtual Machines</source>
-        <translation type="unfinished"></translation>
+        <translation>&Désactiver pendant le fonctionnement des machines virtuelles</translation>
     </message>
 </context>
 <context>
@@ -3455,7 +3455,7 @@
     </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>
-        <translation>Si cette case est cochée le clavier sera capturé automatiquement dès l'activation d'une fenêtre machine. Quand le clavier est capturé toutes les frappes (même les combinaisons comme Alt-Tab) sont dirigées vers la machine virtuelle.</translation>
+        <translation>Si cette case est cochée, le clavier sera capturé automatiquement dès l'activation d'une fenêtre machine. Quand le clavier est capturé toutes les frappes (même les combinaisons comme Alt-Tab) sont dirigées vers la machine virtuelle.</translation>
     </message>
     <message>
         <source>&Auto Capture Keyboard</source>
@@ -3495,11 +3495,11 @@
     </message>
     <message>
         <source>Lists all available shortcuts which can be configured.</source>
-        <translation type="unfinished"></translation>
+        <translation>Liste tous les raccourcis disponibles qui peuvent être configurés.</translation>
     </message>
     <message>
         <source>Holds a sequence to filter the shortcut list.</source>
-        <translation type="unfinished"></translation>
+        <translation>Contient une séquence pour filtrer la liste des raccourcis.</translation>
     </message>
 </context>
 <context>
@@ -3843,51 +3843,51 @@
     </message>
     <message>
         <source>Add NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter un réseau NAT</translation>
     </message>
     <message>
         <source>Remove NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Retirer le réseau NAT</translation>
     </message>
     <message>
         <source>Edit NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Modifier le réseau NAT</translation>
     </message>
     <message>
         <source>Adds new NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajoute un réseau NAT.</translation>
     </message>
     <message>
         <source>Removes selected NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Retire le réseau NAT sélectionné.</translation>
     </message>
     <message>
         <source>Edits selected NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Édite le réseau NAT sélectionné.</translation>
     </message>
     <message>
         <source>Add Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter réseau privé hôte</translation>
     </message>
     <message>
         <source>Remove Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer le réseau privé hôte</translation>
     </message>
     <message>
         <source>Edit Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Éditer le réseau privé hôte</translation>
     </message>
     <message>
         <source>Adds new host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajoute un nouveau réseau privé hôte.</translation>
     </message>
     <message>
         <source>Removes selected host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer le réseau privé hôte sélectionné.</translation>
     </message>
     <message>
         <source>Edits selected host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Édite le réseau privé hôte sélectionné.</translation>
     </message>
 </context>
 <context>
@@ -4081,11 +4081,11 @@
     </message>
     <message>
         <source>When checked, manual configuration will be used for this network adapter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, la configuration manuelle de la carte réseau sera utilisée.</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>Si cette case est cochée, le serveur DHCP sera activé sur ce réseau au démarrage de la machine.</translation>
     </message>
 </context>
 <context>
@@ -4156,23 +4156,23 @@
     </message>
     <message>
         <source>When checked, this network will be enabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, le réseau sera activé.</translation>
     </message>
     <message>
         <source>When checked, this network will support DHCP.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, le réseau supportera DHCP.</translation>
     </message>
     <message>
         <source>When checked, this network will support IPv6.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, le réseau supportera IPv6.</translation>
     </message>
     <message>
         <source>When checked, this network will be advertised as the default IPv6 route.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, le réseau virtuel sera annoncé comme la route IPv6 par défaut.</translation>
     </message>
     <message>
         <source>Displays a window to configure port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Affiche une fenêtre pour gérer les règles de redirection de ports.</translation>
     </message>
 </context>
 <context>
@@ -4194,11 +4194,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>Si cette case est cochée VirtualBox utilisera le proxy pour le téléchargement des additions invité depuis le réseau ou pour la vérification des mises à jour.</translation>
+        <translation type="obsolete">Si cette case est cochée, VirtualBox utilisera le proxy pour le téléchargement des additions invité depuis le réseau ou pour la vérification des mises à jour.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>&Activer le proxy</translation>
+        <translation type="obsolete">&Activer le proxy</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4250,10 +4250,34 @@
     </message>
     <message>
         <source>Holds the proxy host.</source>
-        <translation type="unfinished"></translation>
+        <translation>Contient l'hôte proxy.</translation>
     </message>
     <message>
         <source>Holds the proxy port.</source>
+        <translation>Contient l'hôte proxy.</translation>
+    </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -4309,7 +4333,7 @@
     </message>
     <message>
         <source>Selects how often the new version check should be performed. Note that if you want to completely disable this check, just clear the above check box.</source>
-        <translation type="unfinished"></translation>
+        <translation>Configure la fréquence des recherches de mises à jour. Décochez la case ci-dessus pour désactiver la vérification des mises à jour.</translation>
     </message>
 </context>
 <context>
@@ -4800,32 +4824,32 @@
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the hard disks:</nobr>%1</p></source>
         <comment>HDD tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Indique l'activité du disque dur : </nobr>%1<p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the optical drives:</nobr>%1</p></source>
         <comment>CD tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Indique l'activité des lecteurs optiques :</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the floppy drives:</nobr>%1</p></source>
         <comment>FD tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Indique l'activité des lecteurs de disquette :</nobr>%1</p></translation>
     </message>
     <message>
         <source><p style='white-space:pre'><nobr>Indicates the activity of the display:</nobr>%1</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Indique l'activité de l'affichage :</nobr>%1</p></translation>
     </message>
     <message>
         <source>Indicates whether the host keyboard is captured by the guest OS:<br><nobr><img src=:/hostkey_16px.png/>&nbsp;&nbsp;keyboard is not captured</nobr><br><nobr><img src=:/hostkey_captured_16px.png/>&nbsp;&nbsp;keyboard is captured</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation>Indique si le clavier de l'hôte est capturé par le système invité :<br><nobr><img src=:/hostkey_16px.png/>&nbsp;&nbsp;le clavier n'est pas capturé</nobr><br><nobr><img src=:/hostkey_captured_16px.png/>&nbsp;&nbsp;le clavier est capturé</nobr></translation>
     </message>
 </context>
 <context>
     <name>UILineTextEdit</name>
     <message>
         <source>&Edit</source>
-        <translation>&Modifier</translation>
+        <translation>&Éditer</translation>
     </message>
 </context>
 <context>
@@ -4923,7 +4947,7 @@
     </message>
     <message>
         <source>Selects the audio output driver. The <b>Null Audio Driver</b> makes the guest see an audio card, however every access to it will be ignored.</source>
-        <translation type="unfinished"></translation>
+        <translation>Détermine le pilote de sortie audio. Le <b>Pilote audio factice</b> simule une carte son à laquelle tous les accès sont ignorés.</translation>
     </message>
 </context>
 <context>
@@ -5178,107 +5202,107 @@
     </message>
     <message>
         <source>&Screen</source>
-        <translation type="unfinished"></translation>
+        <translation>&Écran</translation>
     </message>
     <message>
         <source>Scale Factor:</source>
-        <translation type="unfinished"></translation>
+        <translation>Facteur d'échelle :</translation>
     </message>
     <message>
         <source>Controls the guest screen scale factor.</source>
-        <translation type="unfinished"></translation>
+        <translation>Contrôle le facteur d'échelle de l'écran de l'invité.</translation>
     </message>
     <message>
         <source>%</source>
-        <translation type="unfinished"></translation>
+        <translation>%</translation>
     </message>
     <message>
         <source>HiDPI Support:</source>
-        <translation type="unfinished"></translation>
+        <translation>Support de HiDPI :</translation>
     </message>
     <message>
         <source>When checked, guest screen contents will not be scaled up to compensate for high host screen resolutions.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée,le contenu de l'écran de l'invité ne sera pas mis à l'échelle pour compenser pour de hautes résolutions d'écran hôte.</translation>
     </message>
     <message>
         <source>Use &Unscaled HiDPI Output</source>
-        <translation type="unfinished"></translation>
+        <translation>Utiliser une sortie vidéo &HiDPI non mise à m'échelle</translation>
     </message>
     <message>
         <source>Acceleration:</source>
-        <translation type="unfinished"></translation>
+        <translation>Accélération :</translation>
     </message>
     <message>
         <source>Holds the VRDP Server port number. You may specify <tt>0</tt> (zero), to select port 3389, the standard port for RDP.</source>
-        <translation type="unfinished"></translation>
+        <translation>Numéro de port du serveur VRDP. Vous pouvez mettre <tt>0</tt> pour choisir le port RDP standard (3389).</translation>
     </message>
     <message>
         <source>Selects the VRDP authentication method.</source>
-        <translation type="unfinished"></translation>
+        <translation>Définit la méthode d'authentification VRDP.</translation>
     </message>
     <message>
         <source>Holds the timeout for guest authentication, in milliseconds.</source>
-        <translation type="unfinished"></translation>
+        <translation>Définit le délai d'attente (en millisecondes) pour l'authentification de l'invité.</translation>
     </message>
     <message>
         <source>When checked, multiple simultaneous connections to the VM are permitted.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, de multiples connexions simultanées vers la machine virtuelle sont permises.</translation>
     </message>
     <message>
         <source>Holds the filename VirtualBox uses to save the recorded content.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ce paramètre détermine le nom du fichier que VirtualBox utilise pour le contenu enregistré.</translation>
     </message>
     <message>
         <source>Selects the resolution (frame size) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ce paramètre détermine la résolution (taille d'image) de la vidéo enregistrée.</translation>
     </message>
     <message>
         <source>Holds the <b>horizontal</b> resolution (frame width) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ce paramètre détermine la résolution <b>horizontale</b> (largeur d'image) de la vidéo enregistrée.</translation>
     </message>
     <message>
         <source>Holds the <b>vertical</b> resolution (frame height) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ce paramètre détermine la résolution <b>verticale</b> (hauteur d'image) de la vidéo enregistrée.</translation>
     </message>
     <message>
         <source>Controls the maximum number of <b>frames per second</b>. Additional frames will be skipped. Reducing this value will increase the number of skipped frames and reduce the file size.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ce paramètre détermine le nombre maximum d'<b>images par seconde</b>. Les images supplémentaires seront ignorées. La réduction de cette valeur augmentera le nombre d'images ignorées et réduira la taille du fichier.</translation>
     </message>
     <message>
         <source>Controls the <b>quality</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ce paramètre détermine la <b>qualité</b>. L'augementation de cette valeur améliorera le rendu de la vidéo au prix d'une taille de fichier plus grande.</translation>
     </message>
     <message>
         <source>Holds the bitrate in <b>kilobits per second</b>. Increasing this value will make the video look better at the cost of an increased file size.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ce paramètre détermine le débit en <b>kilobits par seconde</b>. L'augementation de cette valeur améliorera le rendu de la vidéo au prix d'une taille de fichier plus grande.</translation>
     </message>
     <message>
         <source>The virtual machine is currently assigned less than <b>%1</b> of video memory which is the minimum amount required to switch to full-screen or seamless mode.</source>
-        <translation type="unfinished"></translation>
+        <translation>Moins de <b>%1</b> de la mémoire vidéo est actuellement alloué à la machine virtuelle, ce qui est le minimum nécessaire pour basculer en mode plein écran ou en mode intégré.</translation>
     </message>
     <message>
         <source>The virtual machine is set up to use hardware graphics acceleration and the operating system hint is set to Windows Vista or later. For best performance you should set the machine's video memory to at least <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>La machine virtuelle est paramétrée pour utiliser l'accélération graphique et l'indicateur de système d'exploitation est réglé sur Windows Vista ou ultérieur. Pour de meilleures performances, vous devriez régler la mémoire vidéo de la machine à au moins <b>%1</b>.</translation>
     </message>
     <message>
         <source>Remote Display is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site as otherwise your VM will be started with Remote Display disabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>L'affichage distant est actuellement activé pour cette machine virtuelle. L'installation de <i>%1</i> est réquise. Veuillez installer le pack d'extension depuis le site de téléchargement de VirtualBox, votre machine virtuelle sera démarrée avec l'affichage distant désactivité sinon.</translation>
     </message>
     <message>
         <source>%1 MB</source>
-        <translation type="unfinished">%1 Mo</translation>
+        <translation>%1 Mo</translation>
     </message>
     <message>
         <source>%1%</source>
-        <translation type="unfinished">%1%</translation>
+        <translation>%1%</translation>
     </message>
     <message>
         <source><i>About %1MB per 5 minute video</i></source>
-        <translation type="unfinished"></translation>
+        <translation><i>Environ %1 Mo pour une vidéo de 5 minutes</i></translation>
     </message>
     <message>
         <source>When checked, enables video recording for screen %1.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, l'enregistrement vidéo pour l'écran %1 est activé.</translation>
     </message>
 </context>
 <context>
@@ -5373,115 +5397,115 @@
     </message>
     <message>
         <source>The virtual machine operating system hint is set to a 64-bit type. 64-bit guest systems require hardware virtualization, so this will be enabled automatically if you confirm the changes.</source>
-        <translation>L'indicateur de système d'exploitation virtuel est défini sur le type 64 bits. Les systèmes invités 64 bits nécessitent la virtualisation matérielle, elle sera donc automatiquement activée si vous confirmez les modifications.</translation>
+        <translation>L'indicateur de système d'exploitation virtuel est définit sur le type 64 bits. Les systèmes invités 64 bits nécessitent la virtualisation matérielle, elle sera donc automatiquement activée si vous confirmez les modifications.</translation>
     </message>
     <message>
         <source>Basi&c</source>
-        <translation type="unfinished"></translation>
+        <translation>&Basic</translation>
     </message>
     <message>
         <source>A&dvanced</source>
-        <translation type="unfinished">A&vancé</translation>
+        <translation>&Avancé</translation>
     </message>
     <message>
         <source>D&rag'n'Drop:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Glisser-Déposer :</translation>
     </message>
     <message>
         <source>D&escription</source>
-        <translation type="unfinished">D&escription</translation>
+        <translation>D&escription</translation>
     </message>
     <message>
         <source>Enc&ryption</source>
-        <translation type="unfinished"></translation>
+        <translation>&Chiffrement</translation>
     </message>
     <message>
         <source>When checked, enables encryption for this virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, le chiffrement de cette machine virtuelle sera activé.</translation>
     </message>
     <message>
         <source>En&able Encryption</source>
-        <translation type="unfinished"></translation>
+        <translation>&Activer le chiffrement</translation>
     </message>
     <message>
         <source>Encryption C&ipher:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Code de chiffrement :</translation>
     </message>
     <message>
         <source>Selects the cipher to be used for encrypting the virtual machine disks.</source>
-        <translation type="unfinished"></translation>
+        <translation>Sélectionne le code à utilisé pour le chiffrement des disques de machines virtuelles.</translation>
     </message>
     <message>
         <source>E&nter New Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>E&nter le nouveau mot de passe :</translation>
     </message>
     <message>
         <source>Holds the password to be assigned to the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Indique le mot de passe à assigner à la machine virtuelle.</translation>
     </message>
     <message>
         <source>C&onfirm New Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>C&onfirmer le nouveau de mot de passe :</translation>
     </message>
     <message>
         <source>Confirms the password to be assigned to the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Confirme le mot de passe à assigner à la machine virtuelle.</translation>
     </message>
     <message>
         <source>You are trying to encrypt this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site.</source>
-        <translation type="unfinished"></translation>
+        <translation>Vous tentez de chiffrer cette machine virtuelle mais ceci nécessite que l'extension <i>%1</i> soit installé. Veuillez installer l'extension à partir du site de téléchargement VirtualBox.</translation>
     </message>
     <message>
         <source>Encryption cipher type not specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Type de code de chiffrement non spécifié.</translation>
     </message>
     <message>
         <source>Encryption password empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>Mot de passe de chiffrement vide.</translation>
     </message>
     <message>
         <source>Encryption passwords do not match.</source>
-        <translation type="unfinished"></translation>
+        <translation>Les mots de passe de chiffrement ne correspondent pas.</translation>
     </message>
     <message>
         <source>Holds the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of storage space.</source>
-        <translation type="unfinished"></translation>
+        <translation>Affiche le dossier dans lequel les instantanés de cette machine virtuelle seront sauvegardés. Sachez que les instantanés peuvent prendre beaucoup de place.</translation>
     </message>
     <message>
         <source>Leave Unchanged</source>
         <comment>cipher type</comment>
-        <translation type="unfinished"></translation>
+        <translation>Laisser inchangé</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsInterface</name>
     <message>
         <source>Allows to modify VM menu-bar contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Permet la modification du contenu de la barre de menu de la machine virtuelle.</translation>
     </message>
     <message>
         <source>Mini ToolBar:</source>
-        <translation type="unfinished">Barre d'outils compacte :</translation>
+        <translation>Mini Barre d'outils :</translation>
     </message>
     <message>
         <source>When checked, show the Mini ToolBar in full-screen and seamless modes.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée la mini barre d'outils  sera affichée dans les modes plein écran et intégré.</translation>
     </message>
     <message>
         <source>Show in &Full-screen/Seamless</source>
-        <translation type="unfinished"></translation>
+        <translation>A&fficher en plein écran/mode intégré</translation>
     </message>
     <message>
         <source>When checked, show the Mini ToolBar at the top of the screen, rather than in its default position at the bottom of the screen.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée la mini barre d'outil sera affichée en haut de l'écran, plutôt qu'en bas comme par défaut.</translation>
     </message>
     <message>
         <source>Show at &Top of Screen</source>
-        <translation type="unfinished">Afficher en hau&t de l'écran</translation>
+        <translation>Afficher en hau&t de l'écran</translation>
     </message>
     <message>
         <source>Allows to modify VM status-bar contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Permet la modification du contenu de la barre d'état de la machine virtuelle.</translation>
     </message>
 </context>
 <context>
@@ -5653,23 +5677,23 @@
     </message>
     <message>
         <source>Selects how this virtual adapter is attached to the real network of the Host OS.</source>
-        <translation type="unfinished"></translation>
+        <translation>Détermine la façon dont cet adaptateur virtuel est attaché au réseau réel du système d'exploitation hôte.</translation>
     </message>
     <message>
         <source>Shows additional network adapter options.</source>
-        <translation type="unfinished"></translation>
+        <translation>Affiche des options de carte réseau addtionnelles.</translation>
     </message>
     <message>
         <source>Holds the configuration settings for the network attachment driver. The settings should be of the form <b>name=value</b> and will depend on the driver. Use <b>shift-enter</b> to add a new entry.</source>
-        <translation type="unfinished"></translation>
+        <translation>Contient les paramètres de configuration pour le pilote de connexion au réseau. Les paramètres doivent avoir pour format <b>name=value</b> et dépende du pilote. Utilisez <b>Majuscule-Entrée</b> pour ajouter une nouvelle entrée.</translation>
     </message>
     <message>
         <source>When checked, the virtual network cable is plugged in.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, le câble de la carte du réseau virtuel est branché.</translation>
     </message>
     <message>
         <source>Displays a window to configure port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Affiche une fenêtre pour gérer les règles de redirection de ports.</translation>
     </message>
 </context>
 <context>
@@ -5721,23 +5745,23 @@
     </message>
     <message>
         <source>No IRQ is currently specified.</source>
-        <translation type="unfinished">Aucune IRQ actuellement spécifiée.</translation>
+        <translation>Aucune IRQ actuellement spécifiée.</translation>
     </message>
     <message>
         <source>No I/O port is currently specified.</source>
-        <translation type="unfinished">Aucun port E/S actuellement spécifié.</translation>
+        <translation>Aucun port E/S actuellement spécifié.</translation>
     </message>
     <message>
         <source>Two or more ports have the same settings.</source>
-        <translation type="unfinished">Plusieurs ports ont les mêmes paramètres.</translation>
+        <translation>Plusieurs ports ont les mêmes paramètres.</translation>
     </message>
     <message>
         <source>No port path is currently specified.</source>
-        <translation type="unfinished">Aucun chemin de port actuellement spécifié.</translation>
+        <translation>Aucun chemin de port actuellement spécifié.</translation>
     </message>
     <message>
         <source>There are currently duplicate port paths specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Plusieurs chemins de port sont actuellement en double.</translation>
     </message>
 </context>
 <context>
@@ -5883,27 +5907,27 @@
     </message>
     <message>
         <source>Add Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter un dossier partagé</translation>
     </message>
     <message>
         <source>Edit Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Éditer le dossier partagé</translation>
     </message>
     <message>
         <source>Remove Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer le dossier partagé</translation>
     </message>
     <message>
         <source>Adds new shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>AJoute un nouveau dossier partagé.</translation>
     </message>
     <message>
         <source>Edits selected shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Édite le dossier partagé sélectionné.</translation>
     </message>
     <message>
         <source>Removes selected shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprime le dossier partagé sélectionné.</translation>
     </message>
 </context>
 <context>
@@ -5963,7 +5987,7 @@
     </message>
     <message>
         <source>When checked, this shared folder will be permanent.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, ce dossier partagé sera permanent.</translation>
     </message>
 </context>
 <context>
@@ -6031,43 +6055,43 @@
     </message>
     <message>
         <source>Selects the working mode of this serial port. If you select <b>Disconnected</b>, the guest OS will detect the serial port but will not be able to operate it.</source>
-        <translation type="unfinished"></translation>
+        <translation>Détermine le mode de fonctionnement de ce port série. Si vous choisissez <b>Déconnecté</b> le système d´exploitation invité le détectera mais ne pourra pas l'utiliser.</translation>
     </message>
     <message>
         <source>When checked, the virtual machine will assume that the pipe or socket specified in the <b>Path/Address</b> field exists and try to use it. Otherwise, the pipe or socket will be created by the virtual machine when it starts.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, la machine virtuellement présumera que le pipe ou socket spécifié dans le champ <b>Chemin/Adresse</b> existe ou essayera de l'utiliser. Sinon, le pipe ou socket sera crée au démarrage de la machine virtuelle.</translation>
     </message>
     <message>
         <source>&Connect to existing pipe/socket</source>
-        <translation type="unfinished"></translation>
+        <translation>Se &connecter au pipe/socket existant</translation>
     </message>
     <message>
         <source>&Path/Address:</source>
-        <translation type="unfinished"></translation>
+        <translation>Chemin/&Adresse :</translation>
     </message>
     <message>
         <source><p>In <b>Host Pipe</b> mode: Holds the path to the serial port's pipe on the host. Examples: "\\.\pipe\myvbox" or "/tmp/myvbox", for Windows and UNIX-like systems respectively.</p><p>In <b>Host Device</b> mode: Holds the host serial device name. Examples: "COM1" or "/dev/ttyS0".</p><p>In <b>Raw File</b> mode: Holds the file-path on the host system, where the seri [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Dans le mode <b>Pipe hôte</b> : définit le chemin vers le pipe du port série sur l'hôte. Exemple : "\\.\pipe\myvbox" ou "/tmp/myvbox", pour Windows et systèmes UNIX-  respectivement.</p><p>Dans le mode <b>Dispostif hôte</b> : définit le nom du dispositif série sur l'hôte. Exemple : "COM1" or "/dev/ttyS0".</p><p>Dans le mode <b>Fichier brut</b> : défi [...]
     </message>
     <message>
         <source>No IRQ is currently specified.</source>
-        <translation type="unfinished">Aucune IRQ actuellement spécifiée.</translation>
+        <translation>Aucune IRQ actuellement spécifiée.</translation>
     </message>
     <message>
         <source>No I/O port is currently specified.</source>
-        <translation type="unfinished">Aucun port E/S actuellement spécifié.</translation>
+        <translation>Aucun port E/S actuellement spécifié.</translation>
     </message>
     <message>
         <source>Two or more ports have the same settings.</source>
-        <translation type="unfinished">Plusieurs ports ont les mêmes paramètres.</translation>
+        <translation>Plusieurs ports ont les mêmes paramètres.</translation>
     </message>
     <message>
         <source>No port path is currently specified.</source>
-        <translation type="unfinished">Aucun chemin de port actuellement spécifié.</translation>
+        <translation>Aucun chemin de port actuellement spécifié.</translation>
     </message>
     <message>
         <source>There are currently duplicate port paths specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Plusieurs chemins de port sont actuellement en double.</translation>
     </message>
 </context>
 <context>
@@ -6484,117 +6508,117 @@
     </message>
     <message>
         <source>Lists all storage controllers for this machine and the virtual images and host drives attached to them.</source>
-        <translation type="unfinished"></translation>
+        <translation>Liste touts les contrôleurs de stockage pour cette machine ainsi que les images virtuelles et lecteurs hôte qui leurs sont rattachés.</translation>
     </message>
     <message>
         <source>Holds the name of the storage controller currently selected in the Storage Tree.</source>
-        <translation type="unfinished"></translation>
+        <translation>Définit le nom du contrôleur de stockage actuellement sélectionné dans l'arborescence de stockage.</translation>
     </message>
     <message>
         <source>When checked, allows to use host I/O caching capabilities.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, les capacités de mise en cache des ES de l'hôte sont permises.</translation>
     </message>
     <message>
         <source>When checked, the virtual disk will not be removed when the guest system ejects it.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, le disque virtuel ne sera pas retirer quand le système d'exploitation invité l'éjectera.</translation>
     </message>
     <message>
         <source>When checked, the guest system will see the virtual disk as a solid-state device.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, l'invité verra le disque virtuel comme un dispositif solid-state.</translation>
     </message>
     <message>
         <source>When checked, the guest system will see the virtual disk as a hot-pluggable device.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, l'invité verra le disque virtuel comme un dispositif branchable à chaud.</translation>
     </message>
     <message>
         <source>&Hot-pluggable</source>
-        <translation type="unfinished"></translation>
+        <translation>Branchable à c&haud</translation>
     </message>
     <message>
         <source>Encrypted with key:</source>
-        <translation type="unfinished"></translation>
+        <translation>Chiffré avec la clé : </translation>
     </message>
     <message>
         <source>Choose disk image...</source>
         <comment>This is used for hard disks, optical media and floppies</comment>
-        <translation type="unfinished"></translation>
+        <translation>Choisir l'image de disque existante...</translation>
     </message>
     <message>
         <source>Image</source>
         <comment>storage image</comment>
-        <translation type="unfinished">Disque virtuel</translation>
+        <translation>Image de stockage</translation>
     </message>
     <message>
         <source><nobr>Expands/Collapses&nbsp;item.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Développer/Réduire&nbsp;l'élément.</nobr></translation>
     </message>
     <message>
         <source><nobr>Adds&nbsp;hard&nbsp;disk.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Ajoute&nbsp;un&nbsp;disque&nbsp;dur.</nobr></translation>
     </message>
     <message>
         <source><nobr>Adds&nbsp;optical&nbsp;drive.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Ajoute&nbsp;un&nbsp;lecteur&nbsp;optique.</nobr></translation>
     </message>
     <message>
         <source><nobr>Adds&nbsp;floppy&nbsp;drive.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Ajoute&nbsp;un&nbsp;lecteur&nbsp;de&nbsp;disquette.</nobr></translation>
     </message>
     <message>
         <source>Add USB Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter un contrôleur USB</translation>
     </message>
     <message>
         <source>Add Optical Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter un lecteur optique</translation>
     </message>
     <message>
         <source>Add Floppy Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter un lecteur de disquette</translation>
     </message>
     <message>
         <source>Adds new storage controller.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajoute un nouveau contrôleur de stockage.</translation>
     </message>
     <message>
         <source>Removes selected storage controller.</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprime le contrôleur de stockage sélectionné.</translation>
     </message>
     <message>
         <source>Adds new storage attachment.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajoute un nouvel accessoire de stocakge.</translation>
     </message>
     <message>
         <source>Removes selected storage attachment.</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprime l'accessoire de stockage sélectionné.</translation>
     </message>
     <message>
         <source>Optical &Drive:</source>
-        <translation type="unfinished"></translation>
+        <translation>Lecteur &optique :</translation>
     </message>
     <message>
         <source>Choose a virtual optical disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez une lecteur optique virtuel ou un lecteur physique à utiliser avec le lecteur virtuel. La machine virtuelle vera un disque inséré dans le lecteur avec pour contenu les données du le fichier ou sur le disque physique.</translation>
     </message>
     <message>
         <source>Create New Hard Disk...</source>
-        <translation type="unfinished"></translation>
+        <translation>Créer un nouveau disque dur...</translation>
     </message>
     <message>
         <source>Choose Virtual Hard Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez un fichier de disque dur virtuel...</translation>
     </message>
     <message>
         <source>Choose Virtual Optical Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez un fichier de disque optique virtuel...</translation>
     </message>
     <message>
         <source>Remove Disk from Virtual Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Retirer le disque du lecteur virtuel</translation>
     </message>
     <message>
         <source>Choose Virtual Floppy Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez un fichier de disquette virtuel...</translation>
     </message>
 </context>
 <context>
@@ -6678,7 +6702,7 @@
     </message>
     <message>
         <source>When checked, the virtual machine will support the Input Output APIC (I/O APIC), which may slightly decrease performance. <b>Note:</b> don't disable this feature after having installed a Windows guest operating system!</source>
-        <translation>Si cette case est cochée la machine virtuelle supportera les IO-APIC, ce qui peut diminuer légèrement les performances. <b>Note :</b> ne désactivez pas cette fonction après l'installation d'un système d'exploitation Windows !</translation>
+        <translation>Si cette case est cochée, la machine virtuelle supportera les IO-APIC, ce qui peut diminuer légèrement les performances. <b>Note :</b> ne désactivez pas cette fonction après l'installation d'un système d'exploitation Windows !</translation>
     </message>
     <message>
         <source>Enable &I/O APIC</source>
@@ -6694,7 +6718,7 @@
     </message>
     <message>
         <source>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</source>
-        <translation>Si cette case est cochée la fonction d'extension d'adresses physiques (PAE) du processeur hôte sera signalée à la machine virtuelle.</translation>
+        <translation>Si cette case est cochée, la fonction d'extension d'adresses physiques (PAE) du processeur hôte sera signalée à la machine virtuelle.</translation>
     </message>
     <message>
         <source>Enable PA&E/NX</source>
@@ -6845,53 +6869,53 @@
     </message>
     <message>
         <source>When checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source>
-        <translation type="unfinished"></translation>
+        <translation>Si cette case est cochée, l'horloge temps réel de la machine virtuelle retournera le temps universel coordonné (UTC) et sinon le temps local de l'hôte. Les systèmes Unix s'attendent en général à ce que l'horloge matérielle soit réglée sur UTC.</translation>
     </message>
     <message>
         <source>%</source>
-        <translation type="unfinished"></translation>
+        <translation>%</translation>
     </message>
     <message>
         <source>&Paravirtualization Interface:</source>
-        <translation type="unfinished"></translation>
+        <translation>Interface de &paravirtualisation :</translation>
     </message>
     <message>
         <source>Selects the paravirtualization guest interface provider to be used by this virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Sélectionne le fournisseur d'interface de paravirtualisation de l'invité à utiliser pour cette machine virtuelle.</translation>
     </message>
     <message>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support a chip set of type ICH9 you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>La fonctionnalité E/S APIC n'est actuellement pas activée dans la section Carte-mère de la page Système. Cela est nécessaire afin de pouvoir supporter un chipset de type ICH9 pour cette machine virtuelle. Cela sera fait automatiquement si vous confirmez vos changements.</translation>
     </message>
     <message>
         <source>USB controller emulation is not currently enabled on the USB page. This is needed to support an emulated USB input device you have enabled for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>L'émulation de contrôleur USB n'est actuellement pas activée sur la page des réglages USB. Cela est nécessaire afin de pouvoir supporter un système d'entrée USB émulé. Cela sera fait automatiquement si vous confirmez vos changements.</translation>
     </message>
     <message>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>La fonctionnalité E/S APIC n'est actuellement pas activée dans la section Carte-mère de la page Système. Cela est nécessaire afin de pouvoir supporter un chipset de type ICH9 pour cette machine virtuelle. Cela sera fait automatiquement si vous confirmez vos changements.</translation>
     </message>
     <message>
         <source>Hardware virtualization is not currently enabled in the Acceleration section of the System page. This is needed in order to support more than one virtual processor you have chosen for this VM. It will be done automatically if you confirm your changes.</source>
-        <translation type="unfinished"></translation>
+        <translation>La virtualisation matérielle n'est actuellement pas activée dans la section Accélération de la page de réglages Système. Cela sera fait automatiquement si vous confirmez vos changements.</translation>
     </message>
     <message>
         <source>%1 MB</source>
-        <translation type="unfinished">%1 Mo</translation>
+        <translation>%1 Mo</translation>
     </message>
     <message>
         <source>%1 CPU</source>
         <comment>%1 is 1 for now</comment>
-        <translation type="unfinished"></translation>
+        <translation>CPU %1</translation>
     </message>
     <message>
         <source>%1 CPUs</source>
         <comment>%1 is host cpu count * 2 for now</comment>
-        <translation type="unfinished"></translation>
+        <translation>CPUs %1</translation>
     </message>
     <message>
         <source>%1%</source>
-        <translation type="unfinished">%1%</translation>
+        <translation>%1%</translation>
     </message>
 </context>
 <context>
@@ -6952,7 +6976,7 @@
     </message>
     <message>
         <source>When checked, enables the virtual USB controller of this machine.</source>
-        <translation>Si cette case est cochée le contrôleur USB de cette machine sera activé.</translation>
+        <translation>Si cette case est cochée, le contrôleur USB de cette machine sera activé.</translation>
     </message>
     <message>
         <source>Enable &USB Controller</source>
@@ -7032,79 +7056,79 @@
     </message>
     <message>
         <source>When chosen, enables the virtual USB OHCI controller of this machine. The USB OHCI controller provides USB 1.0 support.</source>
-        <translation type="unfinished"></translation>
+        <translation>Lorsque sélectionné, active le contrôleur USB OHCI virtuel de cette machine. Le contrôleur USB OHCI fournit le support USB 1.0.</translation>
     </message>
     <message>
         <source>USB &1.1 (OHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Contrôleur USB &1.1 (OHCI)</translation>
     </message>
     <message>
         <source>When chosen, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source>
-        <translation type="unfinished"></translation>
+        <translation>Lorsque sélectionné, active le contrôleur USB EHCI virtuel de cette machine. Le contrôleur USB EHCI fournit le support USB 2.0.</translation>
     </message>
     <message>
         <source>USB &2.0 (EHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Contrôleur USB &2.0 (EHCI)</translation>
     </message>
     <message>
         <source>When chosen, enables the virtual USB xHCI controller of this machine. The USB xHCI controller provides USB 3.0 support.</source>
-        <translation type="unfinished"></translation>
+        <translation>Lorsque sélectionné, active le contrôleur USB xHCI virtuel de cette machine. Le contrôleur USB xHCI fournit le support USB 3.0.</translation>
     </message>
     <message>
         <source>USB &3.0 (xHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Contrôleur &3.0 (xHCI)</translation>
     </message>
     <message>
         <source>USB 2.0/3.0 is currently enabled for this virtual machine. However, this requires the <i>%1</i> to be installed. Please install the Extension Pack from the VirtualBox download site or disable USB 2.0/3.0 to be able to start the machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>L'USB 2.0/3.0 est actuellement activé pour cette machine virtuelle. L'installation de <b>%1</b> est cependant requise. Veuillez installer le pack d'extension depuis le site de téléchargement VirtualBox ou desactiver l'USB 2.0/3.0 afin de pouvoir démarrer la machine.</translation>
     </message>
     <message>
         <source>Add Empty Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter un filtre vide</translation>
     </message>
     <message>
         <source>Add Filter From Device</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter un filtre depuis un périphérique</translation>
     </message>
     <message>
         <source>Edit Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Éditer le filtre</translation>
     </message>
     <message>
         <source>Remove Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer le filtre</translation>
     </message>
     <message>
         <source>Move Filter Up</source>
-        <translation type="unfinished"></translation>
+        <translation>Déplacer le filtre vers le haut</translation>
     </message>
     <message>
         <source>Move Filter Down</source>
-        <translation type="unfinished"></translation>
+        <translation>Déplacer le filtre vers le bas</translation>
     </message>
     <message>
         <source>Adds new USB filter with all fields initially set to empty strings. Note that such a filter will match any attached USB device.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajoute un filtre USB dont tous les champs sont vides. Notez qu'un tel filtre acceptera n'importe quel périphérique USB connecté.</translation>
     </message>
     <message>
         <source>Adds new USB filter with all fields set to the values of the selected USB device attached to the host PC.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajoute un filtre USB dont tous les champs correspondent aux valeurs du périphérique voulu de l'hôte.</translation>
     </message>
     <message>
         <source>Edits selected USB filter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Modifie le filtre USB sélectionné.</translation>
     </message>
     <message>
         <source>Removes selected USB filter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprime le filtre USB sélectionné.</translation>
     </message>
     <message>
         <source>Moves selected USB filter up.</source>
-        <translation type="unfinished"></translation>
+        <translation>Déplace le filtre USB sélectionné vers le haut.</translation>
     </message>
     <message>
         <source>Moves selected USB filter down.</source>
-        <translation type="unfinished"></translation>
+        <translation>Déplace le filtre USB sélectionné vers le bas.</translation>
     </message>
 </context>
 <context>
@@ -7210,35 +7234,35 @@
     </message>
     <message>
         <source>Holds the vendor ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Filtre sur l'ID du vendeur. Le format pour une <i>concordance exacte</i> est <tt>XXXX</tt> (hexadécimal). Une chaîne vide acceptera n'importe quelle valeur.</translation>
     </message>
     <message>
         <source>Holds the product ID filter. The <i>exact match</i> string format is <tt>XXXX</tt> where <tt>X</tt> is a hexadecimal digit. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Filtre sur l'ID du vendeur. Le format pour une <i>concordance exacte</i> est <tt>XXXX</tt> (hexadécimal). Une chaîne vide acceptera n'importe quelle valeur.</translation>
     </message>
     <message>
         <source>Holds the revision number filter. The <i>exact match</i> string format is <tt>IIFF</tt> where <tt>I</tt> is a decimal digit of the integer part and <tt>F</tt> is a decimal digit of the fractional part. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Filtre sur le numéro de révision. Le format pour une <i>concordance exacte</i> est <tt>IIFF</tt> (décimal) où II représente la partie entière et FF la partie fractionnaire. Une chaîne vide acceptera toutes les valeurs.</translation>
     </message>
     <message>
         <source>Holds the manufacturer filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Filtre de <i>concordance exacte</i> sur le fabricant. Une chaîne vide acceptera n'importe quelle valeur.</translation>
     </message>
     <message>
         <source>Holds the product name filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Filtre de <i>concordance exacte</i> sur le nom du produit. Une chaîne vide acceptera n'importe quelle valeur.</translation>
     </message>
     <message>
         <source>Holds the serial number filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Filtre de <i>concordance exacte</i> sur le numéro de série. Une chaîne vide acceptera n'importe quelle valeur.</translation>
     </message>
     <message>
         <source>Holds the host USB port filter as an <i>exact match</i> string. An empty string will match any value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Filtre de <i>concordance exacte</i> sur le numéro de port USB de l'hôte. Une chaîne vide acceptera toutes les valeurs.</translation>
     </message>
     <message>
         <source>Holds whether this filter applies to USB devices attached locally to the host computer (<i>No</i>), to a VRDP client's computer (<i>Yes</i>), or both (<i>Any</i>).</source>
-        <translation type="unfinished"></translation>
+        <translation>Détermine si le filtre sera appliqué aux périphériques connectés à l'hôte (<i>Non</i>), à un client VRDP (<i>Oui</i>), ou aux deux (<i>Tous</i>).</translation>
     </message>
 </context>
 <context>
@@ -7279,11 +7303,11 @@
     </message>
     <message>
         <source>Removing medium...</source>
-        <translation type="unfinished"></translation>
+        <translation>Retrait du support...</translation>
     </message>
     <message>
         <source>&Hard disks</source>
-        <translation type="unfinished"></translation>
+        <translation>&Disques durs</translation>
     </message>
 </context>
 <context>
@@ -7305,23 +7329,23 @@
     <name>UIMenuBarEditorWidget</name>
     <message>
         <source>Virtual Screen Resize</source>
-        <translation type="unfinished"></translation>
+        <translation>Redimensionnement de l'écran virtuel</translation>
     </message>
     <message>
         <source>Virtual Screen Mapping</source>
-        <translation type="unfinished"></translation>
+        <translation>Cartographie de l'écran virtuel</translation>
     </message>
     <message>
         <source>Switch</source>
-        <translation type="unfinished"></translation>
+        <translation>Permuter</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Fermer</translation>
+        <translation>Fermer</translation>
     </message>
     <message>
         <source>Enable Menu Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Activer la barre de menu</translation>
     </message>
 </context>
 <context>
@@ -7906,11 +7930,11 @@
     </message>
     <message>
         <source>Failed to open/interpret appliance <b>%1</b>.</source>
-        <translation>Échec de l'ouverture/l'interprétation de l'application virtuelle <b>%1</b>.</translation>
+        <translation>Échec de l'ouverture/l'interprétation de l'appareil virtuel <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to import appliance <b>%1</b>.</source>
-        <translation>Échec de l'importation de l'application virtuelle <b>%1</b>.</translation>
+        <translation>Échec de l'importation de l'appareil virtuel <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to create an appliance.</source>
@@ -7918,11 +7942,11 @@
     </message>
     <message>
         <source>Failed to prepare the export of the appliance <b>%1</b>.</source>
-        <translation>Échec de l'exportation de l'application virtuelle <b>%1</b>.</translation>
+        <translation>Échec de l'exportation de l'appareil virtuel <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to export appliance <b>%1</b>.</source>
-        <translation>Échec de l'exportation de l'application virtuelle <b>%1</b>.</translation>
+        <translation>Échec de l'exportation de l'appareil virtuel <b>%1</b>.</translation>
     </message>
     <message>
         <source>Cancel</source>
@@ -8853,131 +8877,139 @@
     </message>
     <message>
         <source><p>Failed to create the VirtualBoxClient COM object.</p><p>The application will now terminate.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Échec de la création de l'objet COM de VirtualBox.</p><p>Le programme va s'arrêter.</p></translation>
     </message>
     <message>
         <source>Failed to set the global VirtualBox extra data for key <i>%1</i> to value <i>{%2}</i>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de définir les données supplémentaires globales de VirtualBox pour la clé <i>%1</i> à la valeur <i>{%2}</i>.</translation>
     </message>
     <message>
         <source>Failed to set the extra data for key <i>%1</i> of machine <i>%2</i> to value <i>{%3}</i>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de définir les données supplémentaires pour la clé <i>%1</i> de la machine <i>%2</i> à la valeur <i>{%3}</i>.</translation>
     </message>
     <message>
         <source><p>One or more disk image files are not currently accessible. As a result, you will not be able to operate virtual machines that use these files until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see which files are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Un ou plusieurs disques durs virtuels, CD, DVD, ou disquettes ne sont pas pas accessibles pour l'instant. Vous ne pourrez démarrer de machines virtuelles qui les utilisent tant qu'ils ne seront pas accessibles.</p><p>Cliquez sur <b>Vérifier</b> pour ouvrir le Gestionnaire de médias virtuels et voir quels médias sont inaccessibles, ou bien sur <b>Ignorer</b> pour ignorer ce message.</p></translation>
     </message>
     <message>
         <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and storage data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Supprimer cet instantané entrainera la perte de toutes les informations d'état qui y sont sauvegardées, et la fusion des données de disques virtuels répartis sur plusieurs fichiers en un seul. Ce processus peut durer longtemps et est irréversible.</p></p>Voulez-vous vraiment supprimer l'instantané <b>%1</b> ?</p></translation>
     </message>
     <message>
         <source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>La suppression de l'instantané %1 nécessitera temporairement de l'espace disque supplémentaire. La taille du fichier %2 pourra augmenter de %3, mais il n'y a que %4 d'espace disponible.</p><p>Un manque d'espace disque pendant l'opération de fusion peut corrompre le fichier et la configuration de la machine virtuelle, donc une perte de ces données.</p><p>Vous pouvez procéder à la suppression de l'inst [...]
     </message>
     <message>
         <source>Failed to save the settings.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de sauvegarder les paramètres.</translation>
     </message>
     <message>
         <source><p>You are about to add a new optical drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual optical disk to put in the drive or to leave it empty for now?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Vous êtes sur le point d'ajouter un nouveau lecteur optique au contrôleur <b>%1</b>.</p><p>Voulez-vous choisir un disque optique virtuel à insérer dans le lecteur ou bien le laisser vide pour le moment ?</p></translation>
     </message>
     <message>
         <source><p>Are you sure you want to delete the optical drive?</p><p>You will not be able to insert any optical disks or ISO images or install the Guest Additions without it!</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Êtes-vous sûr de vouloir supprimer le lecteur optique ?</p><p>Vous ne pourrez insérer de disque optique ou d'image ISO ou d'installer les Additions invité !</p></translation>
     </message>
     <message>
         <source>Failed to attach the optical drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible d'attacher le lecteur optique (<nobr><b>%1</b></nobr>) à l'emplacement <i>%2</i> de la machine <b>%3</b>.</translation>
     </message>
     <message>
         <source>Failed to attach the floppy drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible d'attacher le lecteur disquettes (<nobr><b>%1</b></nobr>) à l'emplacement <i>%2</i> de la machine <b>%3</b>.</translation>
     </message>
     <message>
         <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
-        <translation type="unfinished"></translation>
+        <translation>Les règles actuelles de redirection de ports ne sont pas valides. Les noms de règles doivent être uniques.</translation>
     </message>
     <message>
         <source>The current port forwarding rules are not valid. Few rules have same host ports and conflicting IP addresses.</source>
-        <translation type="unfinished"></translation>
+        <translation>Les règles actuelles de redirection de ports ne sont pas valides. Certaines ont le même port d'hôte et des adresses IP en conflit.</translation>
     </message>
     <message>
         <source><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Êtes-vous sûr de vouloir libérer le fichier d'image disque <nobr>%1</b></nobr></p><p>Cela le libérera de (des) machine(s) virtuelle(s) suivante(s) : <b>%2</b>.</p></translation>
     </message>
     <message>
         <source><p>Do you want to delete the storage unit of the virtual hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which mak [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Voulez-vous supprimer le conteneur du disque dur <nobr><b>%1</b></nobr> ?</p><p>Si vous choisissez <b>Supprimer</b> le conteneur sera supprimé. Cette opération est <b>irréversible</b>.</p><p>Si vous choisissez <b>Conserver</b> il sera seulement enlevé de la liste des disques connus, et le conteneur sera laissé tel quel. Il sera donc possible de rajouter le disque dur à la lis [...]
     </message>
     <message>
         <source>Failed to detach the optical drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible d'détacher le lecteur optique (<nobr><b>%1</b></nobr>) de l'emplacement <i>%2</i> de la machine <b>%3</b>.</translation>
     </message>
     <message>
         <source>Failed to detach the floppy drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible de détacher le lecteur de disquettes (<nobr><b>%1</b></nobr>) de l'emplacement <i>%2</i> de la machine <b>%3</b>.</translation>
     </message>
     <message>
         <source>Failed to open the disk image file <nobr><b>%1</b></nobr>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Echec de l'ouverture du fichier d'image de disque <nobr><b>%1</b></nobr>.</translation>
     </message>
     <message>
         <source>Failed to close the disk image file <nobr><b>%1</b></nobr>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Echec de la fermeture du fichier d'image de disque <nobr><b>%1</b></nobr>.</translation>
     </message>
     <message>
         <source>You are about to create a new virtual machine without a hard disk. You will not be able to install an operating system on the machine until you add one. In the mean time you will only be able to start the machine using a virtual optical disk or from the network.</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
         <source>Bad password or authentication failure.</source>
-        <translation type="unfinished"></translation>
+        <translation>Mot de passe incorrect ou erreur d'authenfication.</translation>
     </message>
     <message>
         <source><p>A critical error has occurred while running the virtual machine and the machine execution should be stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt>, which you can find in the virtual machine log directory, as well as a description of what you were doing when this  [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Un erreur critique est survenue durant l'exécution de la machine virtuelle et devrait être arrêtée.</p><p>Pour de l'aide, veuillez consulter la section"Community" du site <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> ou votre contrat de support. Merci de fournir le contenu du fichier journal <tt>VBox.log</tt>, que vous pouvez trouver dans le répertoire log de la machine virtuelle, ai [...]
     </message>
     <message>
         <source><p>The virtual machine window will be now switched to <b>full-screen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in full-screen mode. You can access it by pressing <b>Host+Home</b>.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>La fenêtre de la machine virtuelle va passer en mode <b>plein écran</b>. Vous pouvez revenir au mode fenêtré avec <b>%1</b>. La <i>touche hôte</i> est actuellement <b>%2</b>.</p><p>Notez la barre de menu n'est pas affichée en mode plein écran. Vous pouvez toutefois y accéder avec la combinaison <b>Hôte+Début</b>.</p></translation>
     </message>
     <message>
         <source><p>Could not switch the guest display to full-screen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to full-screen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>L'affichage de l'invité n'a pas pu passer en mode plein écran car il n'a pas assez de mémoire vidéo.</p><p>Allouez au moins <b>%1</b> de mémoire vidéo à la machine virtuelle.</p><p>Cliquez sur <b>Ignorer</b> pour quand même passer en mode plein écran ou bien sur <b>Annuler</b> pour annuler l'opération.</p></translation>
     </message>
     <message>
         <source>Failed to connect the network adapter cable of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Echec de connexion de la carte réseau pour la machine virtuelle <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to disconnect the network adapter cable of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Echec de déconnexion de la carte réseau pour la machine virtuelle <b>%1</b>.</translation>
     </message>
     <message>
         <source><p>Could not insert the <b>VirtualBox Guest Additions</b> disk image file into the virtual machine <b>%1</b>, as the machine has no optical drives. Please add a drive using the storage page of the virtual machine settings window.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Impossible d'insérer le fichier d'image disque <b>Additions Invité VirtualBox</b> dans la machine virtuelle <b>%1</b> : la machine n'a pas de lecteur CD/DVD. Veuillez ajouter un lecteur en utilisant la page stockage de la fenêtre des réglages de la machine virtuelle.</p></translation>
     </message>
     <message>
         <source><p>The <b>VirtualBox Guest Additions</b> disk image file has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>.</nobr></p><p>Do you wish to register this disk image file and insert it into the virtual optical drive?</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Le fichier d'image disque <b>Additions Invité VirtualBox</b> a bien été téléchargé depuis <nobr><a href="%1">%1</a></nobr> et enregistré localement en tant que <nobr><b>%2</b>.</nobr></p><p>Souhaitez-vous consigner ce fichier d'image disque et l'insérer dans le lecteur de CD/DVD virtuel ?</p></translation>
     </message>
     <message>
         <source>Drag and drop operation from host to guest failed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Le glisser-déposer de l'hôte vers l'invité a échoué.</translation>
     </message>
     <message>
         <source>Unable to cancel host to guest drag and drop operation.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impossible d'annuler l'opération de glisser-déposer de l'hôte vers l'invité.</translation>
     </message>
     <message>
         <source>Drag and drop operation from guest to host failed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Le glisser-déposer de l'invité vers l'hôte a échoué.</translation>
     </message>
     <message>
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
-        <translation type="unfinished"></translation>
+        <translation>Le mot de passe de chiffrement pour <nobr>ID = '%1'</nobr> est invalide.</translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation>Les règles actuelles de redirection de ports ne sont pas valables. Toutes les valeurs de l'hôte ou de l'invité doivent être correctes ou vides.</translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation>Les règles actuelles de redirection de ports ne sont pas valables. Aucune des adresses de l'invité ne peut être vide.</translation>
     </message>
 </context>
 <context>
@@ -9094,7 +9126,7 @@
     </message>
     <message>
         <source>N&ame:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Nom :</translation>
     </message>
 </context>
 <context>
@@ -9182,6 +9214,42 @@
         <source>Unknown reason</source>
         <translation>Raison inconnue</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation>%1 : %2</translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation>Impossible d'initialiser la bibliothèque HTTP</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>Connexion refusée</translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation>Contenu déplacé</translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation>Proxy non trouvé</translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation>Pendant la configuration du proxy</translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation>Pendant le téléchargment du certificat</translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation>Pendant la requête réseau</translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
@@ -9673,55 +9741,55 @@ And the size is not necessarily "in megabytes", the slider chooses the
     <name>UIPortForwardingTable</name>
     <message>
         <source>Name</source>
-        <translation type="unfinished"></translation>
+        <translation>Nom</translation>
     </message>
     <message>
         <source>Protocol</source>
-        <translation type="unfinished">Protocole</translation>
+        <translation>Protocole</translation>
     </message>
     <message>
         <source>Host IP</source>
-        <translation type="unfinished">IP hôte</translation>
+        <translation>IP hôte</translation>
     </message>
     <message>
         <source>Host Port</source>
-        <translation type="unfinished">Port hôte</translation>
+        <translation>Port hôte</translation>
     </message>
     <message>
         <source>Guest IP</source>
-        <translation type="unfinished">IP invité</translation>
+        <translation>IP invité</translation>
     </message>
     <message>
         <source>Guest Port</source>
-        <translation type="unfinished">Port invité</translation>
+        <translation>Port invité</translation>
     </message>
     <message>
         <source>Contains a list of port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Définit une liste des règles de redirection de port.</translation>
     </message>
     <message>
         <source>Add New Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajouter une nouvelle règle</translation>
     </message>
     <message>
         <source>Copy Selected Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Copier la règle sélectionnée</translation>
     </message>
     <message>
         <source>Remove Selected Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer la règle sélectionnée</translation>
     </message>
     <message>
         <source>Adds new port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ajoute une nouvelle règle de redirection.</translation>
     </message>
     <message>
         <source>Copies selected port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Copie la règle de redirection sélectionnée.</translation>
     </message>
     <message>
         <source>Removes selected port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprime la règle de redirection sélectionnée.</translation>
     </message>
 </context>
 <context>
@@ -9867,7 +9935,7 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Preferences</source>
-        <translation type="unfinished"></translation>
+        <translation>Préférences</translation>
     </message>
 </context>
 <context>
@@ -9946,37 +10014,37 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>User Interface</source>
-        <translation type="unfinished"></translation>
+        <translation>Interface utilisateur</translation>
     </message>
     <message>
         <source>Settings</source>
-        <translation type="unfinished">Paramètres</translation>
+        <translation>Paramètres</translation>
     </message>
 </context>
 <context>
     <name>UISettingsSerializerProgress</name>
     <message>
         <source>Loading Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Chargement des réglages...</translation>
     </message>
     <message>
         <source>Saving Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Sauvegarde des réglages...</translation>
     </message>
 </context>
 <context>
     <name>UIStatusBarEditorWidget</name>
     <message>
         <source><nobr><b>Click</b> to toggle indicator presence.</nobr><br><nobr><b>Drag&Drop</b> to change indicator position.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr><b>Cliquez</b> pour sélectionner un indicateur présence.</nobr><br><nobr><b>Glisser-&Déposer</b> pour changer la position de l'indicateur.</nobr></translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished">Fermer</translation>
+        <translation>Fermer</translation>
     </message>
     <message>
         <source>Enable Status Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Activer la barre d'état</translation>
     </message>
 </context>
 <context>
@@ -10145,11 +10213,11 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>&Continue running in the background</source>
-        <translation type="unfinished"></translation>
+        <translation>&Continue l'exécution en tâche de fond</translation>
     </message>
     <message>
         <source><p>Close the virtual machine windows but keep the virtual machine running.</p><p>You can use the VirtualBox Manager to return to running the virtual machine in a window.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Ferme les fenêtres des machines virtuelles mais les laisser en fonctionnement.</p><p>Vous pouvez utliiser les Gestionnaire VirtualBox pour rétablir l'exécution de la machine virtuelle dans une fenêtre.</p></translation>
     </message>
 </context>
 <context>
@@ -10167,98 +10235,98 @@ And the size is not necessarily "in megabytes", the slider chooses the
     <name>UIVMInfoDialog</name>
     <message>
         <source>%1 - Session Information</source>
-        <translation type="unfinished">%1 - Détails de la session</translation>
+        <translation>%1 - Détails de la session</translation>
     </message>
     <message>
         <source>Configuration &Details</source>
-        <translation type="unfinished">&Détails de configuration</translation>
+        <translation>&Détails de configuration</translation>
     </message>
     <message>
         <source>&Runtime Information</source>
-        <translation type="unfinished">Info&rmations d'exécution</translation>
+        <translation>Info&rmations d'exécution</translation>
     </message>
     <message>
         <source>DMA Transfers</source>
-        <translation type="unfinished">Transferts DMA</translation>
+        <translation>Transferts DMA</translation>
     </message>
     <message>
         <source>PIO Transfers</source>
-        <translation type="unfinished">Transferts PIO </translation>
+        <translation>Transferts PIO</translation>
     </message>
     <message>
         <source>Data Read</source>
-        <translation type="unfinished">Données lues</translation>
+        <translation>Données lues</translation>
     </message>
     <message>
         <source>Data Written</source>
-        <translation type="unfinished">Données écrites</translation>
+        <translation>Données écrites</translation>
     </message>
     <message>
         <source>Data Transmitted</source>
-        <translation type="unfinished">Données transmise</translation>
+        <translation>Données transmises</translation>
     </message>
     <message>
         <source>Data Received</source>
-        <translation type="unfinished">Données reçues</translation>
+        <translation>Données reçues</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest additions</comment>
-        <translation type="unfinished"></translation>
+        <translation>Non détectés</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest os type</comment>
-        <translation type="unfinished"></translation>
+        <translation>Non détecté</translation>
     </message>
     <message>
         <source>Not Available</source>
         <comment>details report (VRDE server port)</comment>
-        <translation type="unfinished">Non disponible</translation>
+        <translation>Non disponible</translation>
     </message>
     <message>
         <source>Runtime Attributes</source>
-        <translation type="unfinished">Propriétés</translation>
+        <translation>Propriétés d'éxécution</translation>
     </message>
     <message>
         <source>Screen Resolution</source>
-        <translation type="unfinished">Résolution de l'écran</translation>
+        <translation>Résolution de l'écran</translation>
     </message>
     <message>
         <source>VM Uptime</source>
-        <translation type="unfinished"></translation>
+        <translation>Durée de fonctionnement de la VM</translation>
     </message>
     <message>
         <source>Clipboard Mode</source>
-        <translation type="unfinished">Mode du presse-papier</translation>
+        <translation>Mode du presse-papier</translation>
     </message>
     <message>
         <source>Drag and Drop Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Mode Glisser-Déposer</translation>
     </message>
     <message>
         <source>Guest Additions</source>
-        <translation type="unfinished">Additions invité</translation>
+        <translation>Additions invité</translation>
     </message>
     <message>
         <source>Guest OS Type</source>
-        <translation type="unfinished"></translation>
+        <translation>Type du système d'exploitation invité</translation>
     </message>
     <message>
         <source>Storage Statistics</source>
-        <translation type="unfinished">Statistiques du stockage</translation>
+        <translation>Statistiques du stockage</translation>
     </message>
     <message>
         <source>No Storage Devices</source>
-        <translation type="unfinished">Aucun périphérique de stockage</translation>
+        <translation>Aucun périphérique de stockage</translation>
     </message>
     <message>
         <source>Network Statistics</source>
-        <translation type="unfinished">Statistiques du réseau</translation>
+        <translation>Statistiques du réseau</translation>
     </message>
     <message>
         <source>No Network Adapters</source>
-        <translation type="unfinished">Pas de cartes réseau</translation>
+        <translation>Pas de carte réseau</translation>
     </message>
 </context>
 <context>
@@ -10424,19 +10492,19 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>&Expert Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Mode &expert</translation>
     </message>
     <message>
         <source>Switch to <nobr><b>Expert Mode</b></nobr>, a one-page dialog for experienced users.</source>
-        <translation type="unfinished"></translation>
+        <translation>Passer au <nobr><b>mode Expert</b></nobr>, une boîte de dialogue d'une page pour les utilisateurs expérimentés.</translation>
     </message>
     <message>
         <source>&Guided Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Mode &Guidé</translation>
     </message>
     <message>
         <source>Switch to <nobr><b>Guided Mode</b></nobr>, a step-by-step dialog with detailed explanations.</source>
-        <translation type="unfinished"></translation>
+        <translation>Passer au <nobr><b>mode Guidé</b></nobr>, une boîte de dialogue pas-à-pas avec explications détaillées.</translation>
     </message>
 </context>
 <context>
@@ -10536,75 +10604,75 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Copier le disque dur virtuel</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez un fichier de disque dur virtuel à copier...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Stockage sur disque dur physique</translation>
     </message>
     <message>
         <source>Please choose whether the new virtual hard disk file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source><p>A <b>fixed size</b> hard disk file may take longer to create on some systems but is often faster to use.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez un emplacement pour le nouveau fichier de disque dur virtuel</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez un emplacement pour le nouveau fichier de disque dur virtuel...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Disque dur à &copier</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation type="unfinished"></translation>
+        <translation>&Nouveau disque dur à créer</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation type="unfinished"></translation>
+        <translation>&type de fichier de disque dur</translation>
     </message>
 </context>
 <context>
@@ -10707,7 +10775,7 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source><p>Please choose the type of clone you wish to create.</p><p>If you choose <b>Full clone</b>, an exact copy (including all virtual hard disk files) of the original virtual machine will be created.</p><p>If you choose <b>Linked clone</b>, a new machine will be created, but the virtual hard disk files will be tied to the virtual hard disk files of original machine and you will not be able to move the new virtual machine  [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Veuillez choisir le type de clone que vous souhaitez créer.</p><p>Si vous choisissez <b>Clone intégral</b>, une copie exacte (incluant tous les fichiers de disques durs virtuels) de la machine virtuelle d'origine sera créee.</p><p>Si vous choisissez <b>Clone lié</b>, une nouvelle machine sera créee, mais les fichiers de disques durs virtuels seront liés aux fichiers de disques durs virtuels de la machine d [...]
     </message>
 </context>
 <context>
@@ -10722,11 +10790,11 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Exporting Appliance ...</source>
-        <translation>Exportation de l'application virtuelle en cours...</translation>
+        <translation>Exportation de l'appareil virtuel en cours...</translation>
     </message>
     <message>
         <source>Export Virtual Appliance</source>
-        <translation>Exporter l'application virtuelle</translation>
+        <translation>Exporter l'appareil virtuel</translation>
     </message>
     <message>
         <source>Restore Defaults</source>
@@ -10742,15 +10810,15 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source><p>Please select the virtual machines that should be added to the appliance. You can select more than one. Please note that these machines have to be turned off before they can be exported.</p></source>
-        <translation><p>Veuillez choisir les machines virtuelles à ajouter à l'application virtuelle. Vous pouvez en sélectionner plusieurs. Veuillez noter que ces machines doivent être éteintes avant de pouvoir être exportées.</p></translation>
+        <translation><p>Veuillez choisir les machines virtuelles à ajouter à l'appareil virtuel. Vous pouvez en sélectionner plusieurs. Veuillez noter que ces machines doivent être éteintes avant de pouvoir être exportées.</p></translation>
     </message>
     <message>
         <source>Appliance settings</source>
-        <translation>Paramètres de l'application virtuelle</translation>
+        <translation>Paramètres de l'appareil virtuel</translation>
     </message>
     <message>
         <source>Please choose where to create the virtual appliance. You can create it on your own computer, on the Sun Cloud service or on an S3 storage server.</source>
-        <translation>Veuillez choisir où créer l'application virtuelle. Vous pouvez la créer sur votre ordinateur, sur le service Sun Cloud ou sur un serveur de stockage S3.</translation>
+        <translation>Veuillez choisir où créer l'appareil virtuel. Vous pouvez la créer sur votre ordinateur, sur le service Sun Cloud ou sur un serveur de stockage S3.</translation>
     </message>
     <message>
         <source>Create on</source>
@@ -10770,7 +10838,7 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Appliance</source>
-        <translation>Application virtuelle</translation>
+        <translation>Appareil virtuel (appliance)</translation>
     </message>
     <message>
         <source>&Username:</source>
@@ -10822,7 +10890,7 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>This is the descriptive information which will be added to the virtual appliance.  You can change it by double clicking on individual lines.</source>
-        <translation>Voici les informations de description qui seront ajoutées à l'application virtuelle. Vous pouvez les modifier en double-cliquant sur chaque ligne.</translation>
+        <translation>Voici les informations de description qui seront ajoutées à l'appareil virtuel. Vous pouvez les modifier en double-cliquant sur chaque ligne.</translation>
     </message>
     <message>
         <source>Virtual &machines to export</source>
@@ -10830,7 +10898,7 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Appliance &settings</source>
-        <translation>Paramètre&s de l'application virtuelle</translation>
+        <translation>Paramètre&s de l'appareil virtuel</translation>
     </message>
     <message>
         <source>&Destination</source>
@@ -10846,7 +10914,7 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Please choose a file to export the virtual appliance to</source>
-        <translation>Veuillez choisir un fichier vers lequel exporter l'application virtuelle</translation>
+        <translation>Veuillez choisir un fichier vers lequel exporter l'appareil virtuel</translation>
     </message>
     <message>
         <source>F&ormat:</source>
@@ -10893,15 +10961,15 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Choose a file to export the virtual appliance to...</source>
-        <translation>Choisissez un fichier vers lequel exporter l'application virtuelle...</translation>
+        <translation>Choisissez un fichier vers lequel exporter l'appareil virtuel...</translation>
     </message>
 </context>
 <context>
     <name>UIWizardExportAppPageExpert</name>
     <message>
         <source>Choose a file to export the virtual appliance to...</source>
-        <translatorcomment>[BM]Appliance has several translations in French (Appareil, Instrument, Application). None is actually fully satisfying.</translatorcomment>
-        <translation>Choisissez un fichier sur lequel exporter l'application virtuelle...</translation>
+        <translatorcomment>[BM]Appliance has several translations in French (Appareil, Instrument, Application). None is actually fully satisfying :-)</translatorcomment>
+        <translation>Choisissez un fichier sur lequel exporter l'appareil virtuel...</translation>
     </message>
 </context>
 <context>
@@ -10943,7 +11011,7 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Appliance to import</source>
-        <translation>Application virtuelle à importer</translation>
+        <translation>Appareil virtuel à importer</translation>
     </message>
     <message>
         <source><p>VirtualBox currently supports importing appliances saved in the Open Virtualization Format (OVF). To continue, select the file to import below.</p></source>
@@ -10963,23 +11031,23 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Appliance settings</source>
-        <translation>Paramètres de l'application virtuelle</translation>
+        <translation>Paramètres de l'appareil virtuel</translation>
     </message>
     <message>
         <source>These are the virtual machines contained in the appliance and the suggested settings of the imported VirtualBox machines. You can change many of the properties shown by double-clicking on the items and disable others using the check boxes below.</source>
-        <translation>Voici les machines virtuelles décrites dans l'application virtuelle et les paramètres suggérés pour les machines importées. Vous pouvez en changer certains en double-cliquant dessus et désactiver les autres avec les cases à cocher.</translation>
+        <translation>Voici les machines virtuelles décrites dans l'appareil virtuel et les paramètres suggérés pour les machines importées. Vous pouvez en changer certains en double-cliquant dessus et désactiver les autres avec les cases à cocher.</translation>
     </message>
     <message>
         <source>Import Virtual Appliance</source>
-        <translation>Importer l'application virtuelle</translation>
+        <translation>Importer un appareil virtuel</translation>
     </message>
     <message>
         <source>Choose a virtual appliance file to import...</source>
-        <translation>Choisir un fichier d'application virtuelle à importer...</translation>
+        <translation>Choisir un fichier d'appareil virtuel à importer...</translation>
     </message>
     <message>
         <source>Please choose a virtual appliance file to import</source>
-        <translation>Veuillez choisir un fichier d'application virtuelle à importer</translation>
+        <translation>Veuillez choisir un fichier d'appareil virtuel à importer</translation>
     </message>
 </context>
 <context>
@@ -11066,51 +11134,51 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Create Virtual Hard Disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Créer un disque dur virtuel</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Stockage sur disque dur physique</translation>
     </message>
     <message>
         <source>Please choose whether the new virtual hard disk file should grow as it is used (dynamically allocated) or if it should be created at its maximum size (fixed size).</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <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 automatiquement 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 type="unfinished"></translation>
+        <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>
     </message>
     <message>
         <source><p>You can also choose to <b>split</b> the hard disk file into several files of up to two gigabytes each. This is mainly useful if you wish to store the virtual machine on removable USB devices or old systems, some of which cannot handle very large files.</source>
-        <translation type="unfinished"></translation>
+        <translation><p>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 type the name of the new virtual hard disk file into the box below or click on the folder icon to select a different folder to create the file in.</source>
-        <translation type="unfinished"></translation>
+        <translation>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 type="unfinished"></translation>
+        <translation>Choisissez un emplacement pour le nouveau fichier de disque dur virtuel...</translation>
     </message>
     <message>
         <source>Select the size of the virtual hard disk in megabytes. This size is the limit on the amount of file data that a virtual machine will be able to store on the hard disk.</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez la taille du disque dur virtuel en mégaoctets. Cette taille est la limite de la quantité de données de fichiers qu'une machine virtuelle sera capable de stocker sur le disque dur.</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
-        <translation type="unfinished"></translation>
+        <translation>&type de fichier de disque dur</translation>
     </message>
 </context>
 <context>
@@ -11189,27 +11257,27 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Disque dur</translation>
     </message>
     <message>
         <source><p>If you wish you can add a virtual hard disk to the new machine. You can either create a new hard disk file or select one from the list or from another location using the folder icon.</p><p>If you need a more complex storage set-up you can skip this step and make the changes to the machine settings once the machine is created.</p><p>The recommended size of the hard disk is <b>%1</b>.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>SI vous le souhaitez, vous pouvez ajouter un disque dur virtuel à la nouvelle machine. Vous pouvez soit créer un nouveau disque, soit en choisir un de la liste ou d'un autre emplacement en utilisant l'icône dossier.</p><p>Si vous avez besoin d'une configuration de stockage plus complexe, vous pouvez sauter cette étape et modifier les réglages de la machine une fois celle-ci crée.</p><p>La taille du disque dur recommandé [...]
     </message>
     <message>
         <source>&Do not add a virtual hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>&Ne pas ajouter de disque dur virtuel</translation>
     </message>
     <message>
         <source>&Create a virtual hard disk now</source>
-        <translation type="unfinished"></translation>
+        <translation>&Créer un disque dur virtuel maintenant</translation>
     </message>
     <message>
         <source>&Use an existing virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>&Utiliser un fichier de disque dur virtuel existant</translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file...</source>
-        <translation type="unfinished">Choisissez un fichier de disque dur virtuel...</translation>
+        <translation>Choisissez un fichier de disque dur virtuel...</translation>
     </message>
 </context>
 <context>
@@ -11345,19 +11413,19 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Displays a window to select a different folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Affiche une fenêtre pour sélectionner un dossier différent.</translation>
     </message>
     <message>
         <source>Displays a window to select a different file.</source>
-        <translation type="unfinished"></translation>
+        <translation>Affiche une fenêtre pour sélectionner un fichier différent.</translation>
     </message>
     <message>
         <source>Holds the folder path.</source>
-        <translation type="unfinished"></translation>
+        <translation>Affiche le chemin du dossier.</translation>
     </message>
     <message>
         <source>Holds the file path.</source>
-        <translation type="unfinished"></translation>
+        <translation>Définit le nom du fichier.</translation>
     </message>
 </context>
 <context>
@@ -13032,153 +13100,153 @@ And the size is not necessarily "in megabytes", the slider chooses the
     <message>
         <source>off</source>
         <comment>guest monitor status</comment>
-        <translation type="unfinished"></translation>
+        <translation>éteint</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (VT-x/AMD-V)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Active</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (VT-x/AMD-V)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Inactive</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (Nested Paging)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Active</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (Nested Paging)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Inactive</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (Unrestricted Execution)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Active</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (Unrestricted Execution)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Inactive</translation>
     </message>
     <message>
         <source>Paravirtualization Interface</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Interface de paravirtualisation</translation>
     </message>
     <message>
         <source>Taking Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Prise d'instantané en cours</translation>
     </message>
     <message>
         <source>Taking Online Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Prise d'instantané en ligne en cours</translation>
     </message>
     <message>
         <source>None</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Aucun</translation>
     </message>
     <message>
         <source>Default</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished">Par défaut</translation>
+        <translation>Par défaut</translation>
     </message>
     <message>
         <source>Legacy</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Héritage</translation>
     </message>
     <message>
         <source>Minimal</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Minimale</translation>
     </message>
     <message>
         <source>Hyper-V</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Hyper-V</translation>
     </message>
     <message>
         <source>KVM</source>
         <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>KVM</translation>
     </message>
     <message>
         <source>Optical</source>
         <comment>DeviceType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Optique</translation>
     </message>
     <message>
         <source>New dynamically allocated storage</source>
         <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Nouveau stockage de taille dynamique</translation>
     </message>
     <message>
         <source>TCP</source>
         <comment>PortMode</comment>
-        <translation type="unfinished">TCP</translation>
+        <translation>TCP</translation>
     </message>
     <message>
         <source>OHCI</source>
         <comment>USBControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>OHCI</translation>
     </message>
     <message>
         <source>EHCI</source>
         <comment>USBControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>EHCI</translation>
     </message>
     <message>
         <source>xHCI</source>
         <comment>USBControllerType</comment>
-        <translation type="unfinished"></translation>
+        <translation>xHCI</translation>
     </message>
     <message>
         <source>USB</source>
         <comment>StorageControllerType</comment>
-        <translation type="unfinished">USB</translation>
+        <translation>USB</translation>
     </message>
     <message>
         <source>USB Port %1</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>Port USB %1</translation>
     </message>
     <message>
         <source>User interface</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Interface utilisateur</translation>
     </message>
     <message>
         <source>(Optical Drive)</source>
-        <translation type="unfinished"></translation>
+        <translation>(Lecteur optique)</translation>
     </message>
     <message>
         <source>Please choose a virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez un fichier de disque dur virtuel</translation>
     </message>
     <message>
         <source>All virtual hard disk files (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Tous les fichiers de disque dur virtuel (%1)</translation>
     </message>
     <message>
         <source>Encrypted</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Crypté</translation>
     </message>
     <message>
         <source>Some of the files in this hard disk chain are inaccessible. Please use the Virtual Medium Manager to inspect these files.</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Certains des fichiers dans cette chaîne de disques durs sont inaccessibles. Utilisez le gestionnaire de médias virtuels pour inspecter ces fichiers.</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Choisissez un emplacement pour le nouveau fichier de disque dur virtuel</translation>
     </message>
 </context>
 <context>
@@ -13477,15 +13545,15 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source><i>Not&nbsp;Encrypted</i></source>
-        <translation type="unfinished"></translation>
+        <translation><i>Non&nbsp;crypté</i></translation>
     </message>
     <message>
         <source>Encrypted with key:</source>
-        <translation type="unfinished"></translation>
+        <translation>Crypté avec la clé :</translation>
     </message>
     <message>
         <source>UUID:</source>
-        <translation type="unfinished"></translation>
+        <translation>UUID :</translation>
     </message>
 </context>
 <context>
@@ -13968,19 +14036,19 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Restore selected snapshot of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Restaurer l'instantané sélectionné de la machine virtuelle</translation>
     </message>
     <message>
         <source>Delete selected snapshot of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Supprimer l'instantané sélectionné de la machine virtuelle</translation>
     </message>
     <message>
         <source>Display a window with selected snapshot details</source>
-        <translation type="unfinished"></translation>
+        <translation>Affiche les détails de l'instantané sélectionné</translation>
     </message>
     <message>
         <source>Clone selected virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Cloner la machine virtuelle sélectionnée</translation>
     </message>
 </context>
 <context>
@@ -14017,7 +14085,7 @@ And the size is not necessarily "in megabytes", the slider chooses the
     </message>
     <message>
         <source>Snapshot %1</source>
-        <translation type="unfinished">Instantané %1</translation>
+        <translation>Instantané %1</translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts
index e43bb49..4e5b238 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_gl_ES.ts
@@ -3772,14 +3772,6 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-        <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Enable Proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Ho&st:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3803,6 +3795,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -7998,6 +8014,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -8174,6 +8198,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts
index 2aa4b82..43d55f8 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_hu.ts
@@ -4662,11 +4662,11 @@ p, li { white-space: pre-wrap; }
     <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>Ha engedélyezed, a VirtualBox az olyan feladatokhoz, mint az Integrációs szolgáltatások letöltése vagy a frissítések ellenőrzése, a proxy szerver beállításait fogja használni.</translation>
+        <translation type="obsolete">Ha engedélyezed, a VirtualBox az olyan feladatokhoz, mint az Integrációs szolgáltatások letöltése vagy a frissítések ellenőrzése, a proxy szerver beállításait fogja használni.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>&Proxy használata</translation>
+        <translation type="obsolete">&Proxy használata</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4724,6 +4724,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation>A proxy port.</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10002,6 +10026,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -10205,6 +10237,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>Ismeretlen ok</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts
index 61dc9f3..8c9e73e 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_id.ts
@@ -4195,11 +4195,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>Bila ditandai, VirtualBox akan memakai pengaturan proksi yang diberikan untuk tugas seperti menunduh Guest Addition dari jaringan atau memeriksa pemutakhiran.</translation>
+        <translation type="obsolete">Bila ditandai, VirtualBox akan memakai pengaturan proksi yang diberikan untuk tugas seperti menunduh Guest Addition dari jaringan atau memeriksa pemutakhiran.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>&Fungsikan Proksi</translation>
+        <translation type="obsolete">&Fungsikan Proksi</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4257,6 +4257,30 @@
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -9214,6 +9238,14 @@
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -9413,6 +9445,42 @@
         <source>Unknown reason</source>
         <translation>Alasan tidak diketahui</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
index 73594ce..7bd2cbc 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_it.ts
@@ -5085,11 +5085,11 @@ p, li { white-space: pre-wrap; }
     <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>Se marcata, VirtualBox utilizzerà le impostazioni del proxy fornite per attività come lo scaricamento delle Guest Additions dalla rete o il controllo degli aggiornamenti.</translation>
+        <translation type="obsolete">Se marcata, VirtualBox utilizzerà le impostazioni del proxy fornite per attività come lo scaricamento delle Guest Additions dalla rete o il controllo degli aggiornamenti.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>A&bilita il proxy</translation>
+        <translation type="obsolete">A&bilita il proxy</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -5147,6 +5147,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation>Mostra la porta del proxy.</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10857,6 +10881,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation>La password di cifratura per <nobr>ID = '%1'</nobr> non è valida.</translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation>Le regole di inoltro delle porte attuali non sono valide. Il valore dell'indirizzo dell'host o del guest deve essere corretto o vuoto.</translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation>Le regole di inoltro delle porte attuali non sono valide. Nessun valore dell'indirizzo del guest dovrebbe essere vuoto.</translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -11095,6 +11127,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>Motivo sconosciuto</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation>%1 %2</translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation>Impossibile inizializzare la libreria HTTP</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>Connessione rifiutata</translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation>Contenuto spostato</translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation>Proxy non trovato</translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation>Durante la configurazione del proxy</translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation>Durante lo scaricamento del certificato</translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation>Durante la richiesta della rete</translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
index fe2bc5d..825196a 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ja.ts
@@ -4626,11 +4626,11 @@ p, li { white-space: pre-wrap; }
     <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>VirtualBoxはGuest Additionsのネットワークからのダウンロードやアップデートの確認にプロキシー設定を使用します。</translation>
+        <translation type="obsolete">VirtualBoxはGuest Additionsのネットワークからのダウンロードやアップデートの確認にプロキシー設定を使用します。</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>プロキシーを有効化(&E)</translation>
+        <translation type="obsolete">プロキシーを有効化(&E)</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4688,6 +4688,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation>プロキシーのポートを指定します。</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10318,6 +10342,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -10506,6 +10538,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>原因不明</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts
index 0cd4df7..c01ca09 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_km_KH.ts
@@ -3659,14 +3659,6 @@ creating/removing host-only network</comment>
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-        <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Enable Proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Ho&st:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3690,6 +3682,30 @@ creating/removing host-only network</comment>
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -8054,6 +8070,14 @@ medium</comment>
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -8219,6 +8243,42 @@ medium</comment>
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts
index 62f1312..557f23e 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ko.ts
@@ -4670,11 +4670,11 @@ p, li { white-space: pre-wrap; }
     <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>선택하면 VirtualBox 게스트 확장 다운로드 및 업데이트 확인 등 네트워크를 사용하는 작업에 아래 프록시를 사용합니다.</translation>
+        <translation type="obsolete">선택하면 VirtualBox 게스트 확장 다운로드 및 업데이트 확인 등 네트워크를 사용하는 작업에 아래 프록시를 사용합니다.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>프록시 사용하기(&E)</translation>
+        <translation type="obsolete">프록시 사용하기(&E)</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4732,6 +4732,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation>프록시 포트를 변경합니다.</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10149,6 +10173,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation><nobr>ID = '%1'</nobr>의 암호가 잘못되었습니다.</translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </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>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -10337,6 +10369,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>알 수 없는 이유</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts
index c71da4c..f279da1 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_lt.ts
@@ -4072,11 +4072,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>Kai pažymėta, VirtualBox užduotims tokioms kaip svečio papildinių parsiuntimas ar atnaujinimų tikrinimas, naudos tarpinio serverio nustatymus.</translation>
+        <translation type="obsolete">Kai pažymėta, VirtualBox užduotims tokioms kaip svečio papildinių parsiuntimas ar atnaujinimų tikrinimas, naudos tarpinio serverio nustatymus.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>&Naudoti įgaliotąjį serverį</translation>
+        <translation type="obsolete">&Naudoti įgaliotąjį serverį</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4134,6 +4134,30 @@
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -8889,6 +8913,14 @@
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -9088,6 +9120,42 @@
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts
index 84ae524..6fd5061 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_nl.ts
@@ -4133,11 +4133,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>Als dit is ingesteld zal VirtualBox de proxy-instellingen gebruiken voor taken als downloaden van Guest Additions van het netwerk of controleren op updates.</translation>
+        <translation type="obsolete">Als dit is ingesteld zal VirtualBox de proxy-instellingen gebruiken voor taken als downloaden van Guest Additions van het netwerk of controleren op updates.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>Proxy insch&akelen</translation>
+        <translation type="obsolete">Proxy insch&akelen</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4195,6 +4195,30 @@
         <source>Holds the proxy port.</source>
         <translation>Bevat de proxypoort.</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -8683,6 +8707,14 @@
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation>Ongeldig versleutelwachtwoord voor <nobr>ID = '%1'</nobr>.</translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation>De huidige regels voor het doorverwijzen van poorten zijn niet geldig. Alle host- of gast-adreswaarden moeten of geldig, of leeg zijn.</translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation>De huidige regels voor het doorverwijzen van poorten zijn niet geldig. Geen van de gast-adreswaarden mag leeg zijn..</translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetUserManual</name>
@@ -8863,6 +8895,42 @@
         <source>Unknown reason</source>
         <translation>Reden onbekend</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation>%1: %2</translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation>Niet in staat de HTTP-bibliotheek te initialiseren</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>Verbinding geweigerd</translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation>Inhoud verplaatst</translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation>Proxy niet gevonden</translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation>Tijdens proxy configuratie</translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation>Tijdens downloaden certificaat</translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation>Tijdens netwerkverzoek</translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts
index b11ac95..f84b206 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pl.ts
@@ -3965,14 +3965,6 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-        <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Enable Proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Ho&st:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3996,6 +3988,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -9009,6 +9025,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -9197,6 +9221,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts
index db0c777..569122b 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt.ts
@@ -3897,14 +3897,6 @@
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-        <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Enable Proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Ho&st:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3928,6 +3920,30 @@
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -8516,6 +8532,14 @@
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -8700,6 +8724,42 @@
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
index 4245390..d989599 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_pt_BR.ts
@@ -4988,11 +4988,11 @@ p, li { white-space: pre-wrap; }
     <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>Quando selecionado, o VirtualBox irá utilizar as configurações de proxy fornecidas para atividades como baixar os Adicionais para Convidado da rede ou verificação de atualizações.</translation>
+        <translation type="obsolete">Quando selecionado, o VirtualBox irá utilizar as configurações de proxy fornecidas para atividades como baixar os Adicionais para Convidado da rede ou verificação de atualizações.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>Habilitar proxy (&E)</translation>
+        <translation type="obsolete">Habilitar proxy (&E)</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -5050,6 +5050,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation>Contém a porta do servidor proxy.</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10750,6 +10774,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation>Senha de criptografia inválida para <nobr>ID = '%1'</nobr>.</translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation>As regras atuais de redirecionamento de portas não são válidas. Todos os endereços de hospedeiros ou convidados devem estar corretos ou vazios.</translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation>As regras atuais de redirecionamento de portas não são válidas. Nenhum dos endereços de convidados podem estar vazios.</translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -10984,6 +11016,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>Razão desconhecida</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation>%1 %2</translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation>Falha ao inicializar a biblioteca HTTP</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>Conexão recusada</translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation>Conteúdo movido</translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation>Proxy não encontrado</translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation>Durante a configuração do proxy</translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation>Durante a baixa dos certificados</translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation>Durante um pedido de rede</translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts
index e34081d..833d92f 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ro.ts
@@ -3748,14 +3748,6 @@ Acest director este folosit, dacă nu este explicit specificat altfel, atunci c
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-        <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Enable Proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Ho&st:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3779,6 +3771,30 @@ Acest director este folosit, dacă nu este explicit specificat altfel, atunci c
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -8315,6 +8331,14 @@ Acest director este folosit, dacă nu este explicit specificat altfel, atunci c
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -8492,6 +8516,42 @@ Acest director este folosit, dacă nu este explicit specificat altfel, atunci c
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts
index c5a1956..42f111c 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_ru.ts
@@ -4546,11 +4546,11 @@ p, li { white-space: pre-wrap; }
     <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>Если галочка стоит, VirtualBox будет использовать данные настройки для работы с прокси-сервером в целях загрузки гостевых дополнений и проверки обновлений.</translation>
+        <translation type="obsolete">Если галочка стоит, VirtualBox будет использовать данные настройки для работы с прокси-сервером в целях загрузки гостевых дополнений и проверки обновлений.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>&Использовать прокси-сервер</translation>
+        <translation type="obsolete">&Использовать прокси-сервер</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4608,6 +4608,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation>Опредеяет порт прокси-сервера.</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10010,6 +10034,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation>Пароль шифрования дисков <nobr>с идентификатором = '%1'</nobr> указан неверно.</translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </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>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -10198,6 +10230,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation>Неизвестная причина</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts
index f5e056b..8e93126 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sk.ts
@@ -4078,11 +4078,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>Keď je voľba zaškrtnutá, VirtualBox použije zadané nastavenia proxy pre úlohy ako napríklad sťahovanie Hosťovských doplnkov alebo kontrolu aktualizácii.</translation>
+        <translation type="obsolete">Keď je voľba zaškrtnutá, VirtualBox použije zadané nastavenia proxy pre úlohy ako napríklad sťahovanie Hosťovských doplnkov alebo kontrolu aktualizácii.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>&Povoliť proxy</translation>
+        <translation type="obsolete">&Povoliť proxy</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4140,6 +4140,30 @@
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -8269,6 +8293,14 @@
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -8446,6 +8478,42 @@
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts
index 15e84db..c4603cd 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sr.ts
@@ -4228,11 +4228,11 @@ p, li { white-space: pre-wrap; }
     <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>Када одабрано, VirtualBox ће користити постаке проксија за, на пример, преузимање 'додатака госта' или провере ажурирања.</translation>
+        <translation type="obsolete">Када одабрано, VirtualBox ће користити постаке проксија за, на пример, преузимање 'додатака госта' или провере ажурирања.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>Упали прокси</translation>
+        <translation type="obsolete">Упали прокси</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4290,6 +4290,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -9240,6 +9264,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -9439,6 +9471,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts
index 718c904..ef14c42 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sv.ts
@@ -4676,11 +4676,11 @@ p, li { white-space: pre-wrap; }
     <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>När kryssad kommer VirtualBox att använda proxyinställningarna som angivits för funktioner som hämtning av gästtillägg från nätverket eller kontroll av uppdateringar.</translation>
+        <translation type="obsolete">När kryssad kommer VirtualBox att använda proxyinställningarna som angivits för funktioner som hämtning av gästtillägg från nätverket eller kontroll av uppdateringar.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>A&ktivera proxyserver</translation>
+        <translation type="obsolete">A&ktivera proxyserver</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4738,6 +4738,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -10270,6 +10294,14 @@ serial ports</comment>
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -10508,6 +10540,42 @@ serial ports</comment>
         <source>Unknown reason</source>
         <translation>Okänd anledning</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts
index 7cf74c8..f4f8773 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_tr.ts
@@ -1355,7 +1355,7 @@
     </message>
     <message>
         <source>Discard saved state of selected virtual machines</source>
-        <translation>Seçilen sanal makinelerin kaydedilmiş durumundan vazgeç</translation>
+        <translation>Seçilen sanal makinelerin kaydedildi durumundan vazgeç</translation>
     </message>
     <message>
         <source>Show log files of selected virtual machines</source>
@@ -4023,11 +4023,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>İşaretlendiğinde, VirtualBox ağdan Misafir Eklentilerini indirme ya da güncellemeleri kontrol etme gibi görevler için sağlanan proksi ayarlarını kullanacak.</translation>
+        <translation type="obsolete">İşaretlendiğinde, VirtualBox ağdan Misafir Eklentilerini indirme ya da güncellemeleri kontrol etme gibi görevler için sağlanan proksi ayarlarını kullanacak.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>Proksiyi &etkinleştir</translation>
+        <translation type="obsolete">Proksiyi &etkinleştir</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4085,6 +4085,30 @@
         <source>Holds the proxy port.</source>
         <translation>Proksi bağlantı noktasını tutar.</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -7505,7 +7529,7 @@
     </message>
     <message>
         <source>Failed to discard the saved state of the virtual machine <b>%1</b>.</source>
-        <translation><b>%1</b> sanal makinesinin kaydedilmiş durumundan vazgeçme başarısız.</translation>
+        <translation><b>%1</b> sanal makinesinin kaydedildi durumundan vazgeçme başarısız.</translation>
     </message>
     <message>
         <source>Failed to discard the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
@@ -8699,7 +8723,7 @@
     </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>
-        <translation><p>Aşağıdaki sanal makinelerin kaydedilmiş durumundan vazgeçmek istediğinize emin misiniz?</p><p><b>%1</b></p><p>Bu işlem misafir İS'nin uygun bir kapama olmadan makine gücünü kapatmaya veya sıfırlamaya eşdeğerdir.</p></translation>
+        <translation><p>Aşağıdaki sanal makinelerin kaydedildi durumundan vazgeçmek istediğinize emin misiniz?</p><p><b>%1</b></p><p>Bu işlem misafir İS'nin uygun bir kapama olmadan makine gücünü kapatmaya veya sıfırlamaya eşdeğerdir.</p></translation>
     </message>
     <message>
         <source><p>Do you really want to reset the following virtual machines?</p><p><b>%1</b></p><p>This will cause any unsaved data in applications running inside it to be lost.</p></source>
@@ -8885,7 +8909,7 @@
         <source><p>The %n following virtual machine(s) are currently in a saved state: <b>%1</b></p><p>If you continue the runtime state of the exported machine(s) will be discarded. The other machine(s) will not be changed.</p></source>
         <comment>This text is never used with n == 0. Feel free to drop the %n where possible, we only included it because of problems with Qt Linguist (but the user can see how many machines are in the list and doesn't need to be told).</comment>
         <translation>
-            <numerusform><p>Şurada belirtilen %n sanal makine şu anda kaydedilmiş durumunda: <b>%1</b></p><p>Eğer devam ederseniz, dışa aktarılmış makine(ler)in çalışma zamanı durumundan vazgeçilecektir. Diğer makine(ler) değiştirilmeyecektir.</p></numerusform>
+            <numerusform><p>Şurada belirtilen %n sanal makine şu anda kaydedildi durumunda: <b>%1</b></p><p>Eğer devam ederseniz, dışa aktarılmış makine(lerin)nin çalışma zamanı durumundan vazgeçilecektir. Diğer makine(ler) değiştirilmeyecektir.</p></numerusform>
         </translation>
     </message>
     <message>
@@ -9153,6 +9177,14 @@
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation><nobr>ID = '%1'</nobr> için şifreleme parolası geçersiz.</translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation>Şu anki bağlantı noktası yönlendirme kuralları geçerli değil. Anamakine veya misafir adres değerlerinin tümü doğru olmalı ya da boş olmalıdır.</translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation>Şu anki bağlantı noktası yönlendirme kuralları geçerli değil. Misafir adres değerlerinin hiçbiri boş olmayabilir.</translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -9318,6 +9350,42 @@
         <source>Unknown reason</source>
         <translation>Bilinmeyen sebep</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation>%1: %2</translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation>HTTP kütüphanesi başlatılamıyor</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>Bağlantı reddedildi</translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation>İçerik taşındı</translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation>Proksi bulunamadı</translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation>Proksi yapılandırması sırasında</translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation>Sertifika indirme sırasında</translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation>Ağ isteği sırasında</translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
@@ -10372,7 +10440,7 @@ bu basamağı atlayarak sabit diskleri Sanal Makine Ayarları penceresinden ekle
     </message>
     <message>
         <source><p>Saves the current execution state of the virtual machine to the physical hard disk of the host PC.</p><p>Next time this machine is started, it will be restored from the saved state and continue execution from the same place you saved it at, which will let you continue your work immediately.</p><p>Note that saving the machine state may take a long time, depending on the guest operating system type and the amount of memory you assigned to th [...]
-        <translation><p>Sanal makinenin şu anki çalıştırılma durumunu anamakine PC'nin fiziksel sabit diskine kaydeder.</p><p>Bu makine bir dahaki sefere başlatılır, kaydedilmiş durumundan geri yüklenecektir ve çalışmanıza anında devam etmnize izin verecek, kaydettiğiniz aynı yerden çalıştırılmaya devam edecektir.</p><p>Makine durumunu kaydetmenin, sanal makine için ayırdığınız bellek miktarına ve misafir işletim sistemi türüne bağlı olarak uzun sürebil [...]
+        <translation><p>Sanal makinenin şu anki çalıştırılma durumunu anamakine PC'nin fiziksel sabit diskine kaydeder.</p><p>Bu makine bir dahaki sefere başlatılır, kaydedildi durumundan geri yüklenecektir ve çalışmanıza anında devam etmnize izin verecek, kaydettiğiniz aynı yerden çalıştırılmaya devam edecektir.</p><p>Makine durumunu kaydetmenin, sanal makine için ayırdığınız bellek miktarına ve misafir işletim sistemi türüne bağlı olarak uzun sürebili [...]
     </message>
     <message>
         <source>&Save the machine state</source>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts
index 2f9086a..53e2416 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_uk.ts
@@ -4269,11 +4269,11 @@ p, li { white-space: pre-wrap; }
     <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>Якщо позначено, VirtualBox буде використовувати налаштування проксі для завдань на кшталт звантаження гостьових доповнень або перевіряння на оновлення.</translation>
+        <translation type="obsolete">Якщо позначено, VirtualBox буде використовувати налаштування проксі для завдань на кшталт звантаження гостьових доповнень або перевіряння на оновлення.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>&Увімкнути проксі</translation>
+        <translation type="obsolete">&Увімкнути проксі</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4331,6 +4331,30 @@ p, li { white-space: pre-wrap; }
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -9463,6 +9487,14 @@ p, li { white-space: pre-wrap; }
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetAdditions</name>
@@ -9701,6 +9733,42 @@ p, li { white-space: pre-wrap; }
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
index 4221d4d..f6cab19 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_xx_YY.ts
@@ -2228,14 +2228,6 @@
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
-        <source>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Enable Proxy</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Ho&st:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2259,6 +2251,30 @@
         <source>Holds the proxy port.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -5244,6 +5260,14 @@
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -5383,6 +5407,42 @@
         <source>Unknown reason</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIPopupCenter</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
index 57bad3b..34dfde1 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_CN.ts
@@ -4082,11 +4082,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>选中时,VirtualBox 将使用提供的代理设置连接网络,如从网络下载增强功能包,或检查更新。</translation>
+        <translation type="obsolete">选中时,VirtualBox 将使用提供的代理设置连接网络,如从网络下载增强功能包,或检查更新。</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>启用代理(&E)</translation>
+        <translation type="obsolete">启用代理(&E)</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -4144,6 +4144,30 @@
         <source>Holds the proxy port.</source>
         <translation>更改代理端口。</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -8650,6 +8674,14 @@
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation><nobr>ID = '%1'</nobr> 的加密密钥无效。</translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation type="unfinished"></translation>
+    </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>
+    </message>
 </context>
 <context>
     <name>UIMiniProcessWidgetUserManual</name>
@@ -8831,6 +8863,42 @@
         <source>Unknown reason</source>
         <translation>未知原因</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINewHDWizard</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
index c0de6a0..fef8488 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_zh_TW.ts
@@ -85,7 +85,7 @@
     </message>
     <message>
         <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.</source>
-        <translation>未載入 VirtualBox Linux 核心驅動程式 (vboxdrv) 或是 /dev/vboxdrv 的權限問題。 請以 root 執行 <br/><br/>  <font color=blue>'/sbin/vboxconfig' 來重新安裝核心模組。 如果在您的發行中可以使用,您應先安裝 DKMS 套件。 這個套件保留 Linux 核心變更的追蹤並在需要時重新編譯 vboxdrv 核心模組。</translation>
+        <translation>未載入 VirtualBox Linux 核心驅動程式 (vboxdrv) 或是 /dev/vboxdrv 的權限問題。 請以 root 執行 <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>來重新安裝核心模組。 如果在您的發行中可以使用,您應先安裝 DKMS 套件。 這個套件保留 Linux 核心變更的追蹤並在需要時重新編譯 vboxdrv 核心模組。</translation>
     </message>
 </context>
 <context>
@@ -2229,11 +2229,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>勾選時,VirtualBox 將使用提供的 Proxy 設定工作,如從網路下載 Guest Additions 或檢查更新。</translation>
+        <translation type="obsolete">勾選時,VirtualBox 將使用提供的 Proxy 設定工作,如從網路下載 Guest Additions 或檢查更新。</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>啟用 Proxy(&E)</translation>
+        <translation type="obsolete">啟用 Proxy(&E)</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -2259,6 +2259,30 @@
         <source>Holds the proxy port.</source>
         <translation>保留 Proxy 連接埠。</translation>
     </message>
+    <message>
+        <source>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Direct Connection to the Internet</source>
+        <translation type="unfinished"></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>
+    </message>
+    <message>
+        <source>&Manual Proxy Configuration</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UIGlobalSettingsUpdate</name>
@@ -5244,6 +5268,14 @@
         <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation><nobr>ID = '%1'</nobr> 的加密密碼無效。</translation>
     </message>
+    <message>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <translation>目前連接埠轉送規則無效。 所有主機或客體位址值必須正確或為空。</translation>
+    </message>
+    <message>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <translation>目前連接埠轉送規則無效。 沒有客體位址值可能為空。</translation>
+    </message>
 </context>
 <context>
     <name>UIMiniToolBar</name>
@@ -5383,6 +5415,42 @@
         <source>Unknown reason</source>
         <translation>不明原因</translation>
     </message>
+    <message>
+        <source>%1: %2</source>
+        <comment>Context description: Error description</comment>
+        <translation>%1: %2</translation>
+    </message>
+    <message>
+        <source>Unable to initialize HTTP library</source>
+        <translation>無法初始化 HTTP 程式庫</translation>
+    </message>
+    <message>
+        <source>Connection refused</source>
+        <translation>拒絕連線</translation>
+    </message>
+    <message>
+        <source>Content moved</source>
+        <translation>內容移除</translation>
+    </message>
+    <message>
+        <source>Proxy not found</source>
+        <translation>找不到 Proxy</translation>
+    </message>
+</context>
+<context>
+    <name>UINetworkReplyPrivateThread</name>
+    <message>
+        <source>During proxy configuration</source>
+        <translation>Proxy 組態期間</translation>
+    </message>
+    <message>
+        <source>During certificate downloading</source>
+        <translation>憑證下載期間</translation>
+    </message>
+    <message>
+        <source>During network request</source>
+        <translation>請求網路期間</translation>
+    </message>
 </context>
 <context>
     <name>UIPopupCenter</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts b/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts
index be2ff11..86ca709 100644
--- a/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/qt_zh_TW.ts
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.0" language="zh_TW" sourcelanguage="en">
+<TS version="2.1" language="zh_TW">
 <context>
     <name>MAC_APPLICATION_MENU</name>
     <message>
@@ -103,7 +103,7 @@ have libgstreamer-plugins-base installed.</source>
     </message>
     <message numerus="yes">
         <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
-        <translation type="unfinished">
+        <translation>
             <numerusform>遺失所需的轉碼器。 您需要安裝以下轉碼器以播放這個內容: %0</numerusform>
         </translation>
     </message>
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.cpp
index 5a8fed8..924798b 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.cpp
@@ -393,3 +393,65 @@ QPixmap UIIconPoolGeneral::guestOSTypeIcon(const QString &strOSTypeID, QSize *pL
     return icon.pixmap(iconSize);
 }
 
+QPixmap UIIconPoolGeneral::guestOSTypePixmap(const QString &strOSTypeID, const QSize &physicalSize) const
+{
+    /* Prepare fallback pixmap: */
+    static QPixmap nullPixmap;
+
+    /* If we do NOT have that 'guest OS type' pixmap cached already: */
+    if (!m_guestOSTypePixmaps.contains(strOSTypeID))
+    {
+        /* Compose proper pixmap if we have that 'guest OS type' known: */
+        if (m_guestOSTypeIconNames.contains(strOSTypeID))
+            m_guestOSTypePixmaps[strOSTypeID] = QPixmap(m_guestOSTypeIconNames[strOSTypeID]);
+        /* Assign fallback pixmap if we do NOT have that 'guest OS type' known: */
+        else
+            m_guestOSTypePixmaps[strOSTypeID] = nullPixmap;
+    }
+
+    /* Retrieve corresponding pixmap: */
+    const QPixmap &pixmap = m_guestOSTypePixmaps.value(strOSTypeID);
+    AssertMsgReturn(!pixmap.isNull(),
+                    ("Undefined pixmap for type '%s'.", strOSTypeID.toLatin1().constData()),
+                    nullPixmap);
+
+    /* Return pixmap of the requested size: */
+    return pixmap.size() == physicalSize ? pixmap : pixmap.scaled(physicalSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+}
+
+QPixmap UIIconPoolGeneral::guestOSTypePixmapHiDPI(const QString &strOSTypeID, const QSize &physicalSize) const
+{
+    /* Prepare fallback pixmap: */
+    static QPixmap nullPixmap;
+
+    /* If we do NOT have that 'guest OS type' pixmap cached already: */
+    if (!m_guestOSTypePixmapsHiDPI.contains(strOSTypeID))
+    {
+        /* Compose proper pixmap if we have that 'guest OS type' known: */
+        if (m_guestOSTypeIconNames.contains(strOSTypeID))
+        {
+            /* Get name: */
+            const QString strName =  m_guestOSTypeIconNames.value(strOSTypeID);
+            /* Parse name to prefix and suffix: */
+            const QString strPrefix = strName.section('.', 0, -2);
+            const QString strSuffix = strName.section('.', -1, -1);
+            /* Prepare HiDPI pixmap on the basis of values above: */
+            const QPixmap pixmapHiDPI(strPrefix + "_hidpi." + strSuffix);
+            /* Remember HiDPI pixmap: */
+            m_guestOSTypePixmapsHiDPI[strOSTypeID] = pixmapHiDPI;
+        }
+        /* Assign fallback pixmap if we do NOT have that 'guest OS type' known: */
+        else
+            m_guestOSTypePixmapsHiDPI[strOSTypeID] = nullPixmap;
+    }
+
+    /* Retrieve corresponding pixmap: */
+    const QPixmap &pixmap = m_guestOSTypePixmapsHiDPI.value(strOSTypeID);
+    AssertMsgReturn(!pixmap.isNull(),
+                    ("Undefined pixmap for type '%s'.", strOSTypeID.toLatin1().constData()),
+                    nullPixmap);
+
+    /* Return pixmap of the requested size: */
+    return pixmap.size() == physicalSize ? pixmap : pixmap.scaled(physicalSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+}
+
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.h b/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.h
index 18a945e..9767bcc 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIIconPool.h
@@ -106,12 +106,21 @@ public:
       * In case if non-null @a pLogicalSize pointer provided, it will be updated properly. */
     QPixmap guestOSTypeIcon(const QString &strOSTypeID, QSize *pLogicalSize = 0) const;
 
+    /** Returns pixmap corresponding to passed @a strOSTypeID and @a physicalSize. */
+    QPixmap guestOSTypePixmap(const QString &strOSTypeID, const QSize &physicalSize) const;
+    /** Returns HiDPI pixmap corresponding to passed @a strOSTypeID and @a physicalSize. */
+    QPixmap guestOSTypePixmapHiDPI(const QString &strOSTypeID, const QSize &physicalSize) const;
+
 private:
 
     /** Guest OS type icon-names cache. */
     QHash<QString, QString> m_guestOSTypeIconNames;
     /** Guest OS type icons cache. */
     mutable QHash<QString, QIcon> m_guestOSTypeIcons;
+    /** Holds the guest OS type pixmaps cache. */
+    mutable QHash<QString, QPixmap> m_guestOSTypePixmaps;
+    /** Holds the guest OS type HiDPI pixmaps cache. */
+    mutable QHash<QString, QPixmap> m_guestOSTypePixmapsHiDPI;
 };
 
 #endif /* !___UIIconPool_h___ */
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
index 276401f..f36e4a0 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
@@ -51,7 +51,6 @@
 
 /* GUI includes: */
 # include "VBoxGlobal.h"
-# include "VBoxUtils.h"
 # include "UISelectorWindow.h"
 # include "UIMessageCenter.h"
 # include "UIPopupCenter.h"
@@ -145,9 +144,6 @@
 
 #include <QLibraryInfo>
 #include <QProgressDialog>
-#ifdef VBOX_GUI_WITH_NETWORK_MANAGER
-# include <QNetworkProxy>
-#endif /* VBOX_GUI_WITH_NETWORK_MANAGER */
 #include <QSettings>
 #include <QStyleOptionSpinBox>
 
@@ -632,8 +628,8 @@ QList<ulong> XGetStrut(Window window)
 QList<CGuestOSType> VBoxGlobal::vmGuestOSFamilyList() const
 {
     QList<CGuestOSType> result;
-    for (int i = 0; i < mFamilyIDs.size(); ++i)
-        result << mTypes[i][0];
+    for (int i = 0; i < m_guestOSFamilyIDs.size(); ++i)
+        result << m_guestOSTypes[i][0];
     return result;
 }
 
@@ -643,9 +639,9 @@ QList<CGuestOSType> VBoxGlobal::vmGuestOSFamilyList() const
  */
 QList<CGuestOSType> VBoxGlobal::vmGuestOSTypeList(const QString &aFamilyId) const
 {
-    AssertMsg(mFamilyIDs.contains(aFamilyId), ("Family ID incorrect: '%s'.", aFamilyId.toLatin1().constData()));
-    return mFamilyIDs.contains(aFamilyId) ?
-           mTypes[mFamilyIDs.indexOf(aFamilyId)] : QList<CGuestOSType>();
+    AssertMsg(m_guestOSFamilyIDs.contains(aFamilyId), ("Family ID incorrect: '%s'.", aFamilyId.toLatin1().constData()));
+    return m_guestOSFamilyIDs.contains(aFamilyId) ?
+           m_guestOSTypes[m_guestOSFamilyIDs.indexOf(aFamilyId)] : QList<CGuestOSType>();
 }
 
 QPixmap VBoxGlobal::vmGuestOSTypeIcon(const QString &strOSTypeID, QSize *pLogicalSize /* = 0 */) const
@@ -660,6 +656,30 @@ QPixmap VBoxGlobal::vmGuestOSTypeIcon(const QString &strOSTypeID, QSize *pLogica
     return m_pIconPool->guestOSTypeIcon(strOSTypeID, pLogicalSize);
 }
 
+QPixmap VBoxGlobal::vmGuestOSTypePixmap(const QString &strOSTypeID, const QSize &physicalSize) const
+{
+    /* Prepare fallback pixmap: */
+    static QPixmap nullPixmap;
+
+    /* Make sure general icon-pool initialized: */
+    AssertReturn(m_pIconPool, nullPixmap);
+
+    /* Redirect to general icon-pool: */
+    return m_pIconPool->guestOSTypePixmap(strOSTypeID, physicalSize);
+}
+
+QPixmap VBoxGlobal::vmGuestOSTypePixmapHiDPI(const QString &strOSTypeID, const QSize &physicalSize) const
+{
+    /* Prepare fallback pixmap: */
+    static QPixmap nullPixmap;
+
+    /* Make sure general icon-pool initialized: */
+    AssertReturn(m_pIconPool, nullPixmap);
+
+    /* Redirect to general icon-pool: */
+    return m_pIconPool->guestOSTypePixmapHiDPI(strOSTypeID, physicalSize);
+}
+
 /**
  *  Returns the guest OS type object corresponding to the given type id of list
  *  containing OS types related to OS family determined by family id attribute.
@@ -669,14 +689,14 @@ CGuestOSType VBoxGlobal::vmGuestOSType(const QString &aTypeId,
              const QString &aFamilyId /* = QString::null */) const
 {
     QList <CGuestOSType> list;
-    if (mFamilyIDs.contains (aFamilyId))
+    if (m_guestOSFamilyIDs.contains (aFamilyId))
     {
-        list = mTypes [mFamilyIDs.indexOf (aFamilyId)];
+        list = m_guestOSTypes [m_guestOSFamilyIDs.indexOf (aFamilyId)];
     }
     else
     {
-        for (int i = 0; i < mFamilyIDs.size(); ++ i)
-            list += mTypes [i];
+        for (int i = 0; i < m_guestOSFamilyIDs.size(); ++ i)
+            list += m_guestOSTypes [i];
     }
     for (int j = 0; j < list.size(); ++ j)
         if (!list [j].GetId().compare (aTypeId))
@@ -690,9 +710,9 @@ CGuestOSType VBoxGlobal::vmGuestOSType(const QString &aTypeId,
  */
 QString VBoxGlobal::vmGuestOSTypeDescription (const QString &aTypeId) const
 {
-    for (int i = 0; i < mFamilyIDs.size(); ++ i)
+    for (int i = 0; i < m_guestOSFamilyIDs.size(); ++ i)
     {
-        QList <CGuestOSType> list (mTypes [i]);
+        QList <CGuestOSType> list (m_guestOSTypes [i]);
         for ( int j = 0; j < list.size(); ++ j)
             if (!list [j].GetId().compare (aTypeId))
                 return list [j].GetDescription();
@@ -1555,40 +1575,6 @@ CSession VBoxGlobal::openSession(const QString &strId, KLockType lockType /* = K
     return session;
 }
 
-#ifdef VBOX_GUI_WITH_NETWORK_MANAGER
-void VBoxGlobal::reloadProxySettings()
-{
-    UIProxyManager proxyManager(settings().proxySettings());
-    if (proxyManager.authEnabled())
-    {
-        proxyManager.setAuthEnabled(false);
-        proxyManager.setAuthLogin(QString());
-        proxyManager.setAuthPassword(QString());
-        VBoxGlobalSettings globalSettings = settings();
-        globalSettings.setProxySettings(proxyManager.toString());
-        vboxGlobal().setSettings(globalSettings);
-    }
-    if (proxyManager.proxyEnabled())
-    {
-#if 0
-        QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::HttpProxy,
-                                                         proxyManager.proxyHost(),
-                                                         proxyManager.proxyPort().toInt(),
-                                                         proxyManager.authEnabled() ? proxyManager.authLogin() : QString(),
-                                                         proxyManager.authEnabled() ? proxyManager.authPassword() : QString()));
-#else
-        QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::HttpProxy,
-                                                         proxyManager.proxyHost(),
-                                                         proxyManager.proxyPort().toInt()));
-#endif
-    }
-    else
-    {
-        QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::NoProxy));
-    }
-}
-#endif /* VBOX_GUI_WITH_NETWORK_MANAGER */
-
 void VBoxGlobal::createMedium(const UIMedium &medium)
 {
     if (m_mediumEnumeratorDtorRwLock.tryLockForRead())
@@ -3869,14 +3855,6 @@ void VBoxGlobal::sltGUILanguageChange(QString strLang)
     loadLanguage(strLang);
 }
 
-void VBoxGlobal::sltProcessGlobalSettingChange()
-{
-#ifdef VBOX_GUI_WITH_NETWORK_MANAGER
-    /* Reload proxy settings: */
-    reloadProxySettings();
-#endif /* VBOX_GUI_WITH_NETWORK_MANAGER */
-}
-
 // Protected members
 ////////////////////////////////////////////////////////////////////////////////
 
@@ -4025,12 +4003,8 @@ void VBoxGlobal::prepare()
         msgCenter().cannotCreateVirtualBoxClient(m_client);
         return;
     }
-    /* Fetch corresponding objects/values: */
-    m_vbox = virtualBoxClient().GetVirtualBox();
-    m_host = virtualBox().GetHost();
-    m_strHomeFolder = virtualBox().GetHomeFolder();
-    /* Mark wrappers valid: */
-    m_fWrappersValid = true;
+    /* Init wrappers: */
+    comWrappersReinit();
 
     /* Watch for the VBoxSVC availability changes: */
     connect(gVBoxEvents, SIGNAL(sigVBoxSVCAvailabilityChange(bool)),
@@ -4060,33 +4034,6 @@ void VBoxGlobal::prepare()
     connect(gEDataManager, SIGNAL(sigLanguageChange(QString)),
             this, SLOT(sltGUILanguageChange(QString)));
 
-    /* Initialize guest OS Type list. */
-    CGuestOSTypeVector coll = m_vbox.GetGuestOSTypes();
-    int osTypeCount = coll.size();
-    AssertMsg(osTypeCount > 0, ("Number of OS types must not be zero"));
-    if (osTypeCount > 0)
-    {
-        /* Here we ASSUME the 'Other' types are always the first, so we
-         * remember it and will append it to the list when finished.
-         * We do a two pass, first adding the specific types, then the two
-         * 'Other' types. */
-        for (int j = 0; j < 2; j++)
-        {
-            int cMax = j == 0 ? coll.size() : RT_MIN(2, coll.size());
-            for (int i = j == 0 ? 2 : 0; i < cMax; ++i)
-            {
-                CGuestOSType os = coll[i];
-                QString familyId(os.GetFamilyId());
-                if (!mFamilyIDs.contains(familyId))
-                {
-                    mFamilyIDs << familyId;
-                    mTypes << QList<CGuestOSType>();
-                }
-                mTypes[mFamilyIDs.indexOf(familyId)].append(os);
-            }
-        }
-    }
-
     qApp->installEventFilter (this);
 
     /* process command line */
@@ -4372,12 +4319,6 @@ void VBoxGlobal::prepare()
     if (agressiveCaching())
         startMediumEnumeration();
 
-    /* Prepare global settings change handler: */
-    connect(&settings(), SIGNAL(propertyChanged(const char*, const char*)),
-            this, SLOT(sltProcessGlobalSettingChange()));
-    /* Handle global settings change for the first time: */
-    sltProcessGlobalSettingChange();
-
     /* Create shortcut pool: */
     UIShortcutPool::create();
 
@@ -4443,8 +4384,8 @@ void VBoxGlobal::cleanup()
     m_pIconPool = 0;
 
     /* ensure CGuestOSType objects are no longer used */
-    mFamilyIDs.clear();
-    mTypes.clear();
+    m_guestOSFamilyIDs.clear();
+    m_guestOSTypes.clear();
 
     /* Starting COM cleanup: */
     m_comCleanupProtectionToken.lockForWrite();
@@ -4498,12 +4439,8 @@ void VBoxGlobal::sltHandleVBoxSVCAvailabilityChange(bool fAvailable)
     {
         if (!m_fWrappersValid)
         {
-            /* Re-fetch corresponding objects/values: */
-            m_vbox = virtualBoxClient().GetVirtualBox();
-            m_host = virtualBox().GetHost();
-            m_strHomeFolder = virtualBox().GetHomeFolder();
-            /* Mark wrappers valid: */
-            m_fWrappersValid = true;
+            /* Re-init wrappers: */
+            comWrappersReinit();
 
             /* If that is Selector UI: */
             if (!isVMConsoleProcess())
@@ -4519,6 +4456,45 @@ void VBoxGlobal::sltHandleVBoxSVCAvailabilityChange(bool fAvailable)
     emit sigVBoxSVCAvailabilityChange();
 }
 
+void VBoxGlobal::comWrappersReinit()
+{
+    /* Re-fetch corresponding objects/values: */
+    m_vbox = virtualBoxClient().GetVirtualBox();
+    m_host = virtualBox().GetHost();
+    m_strHomeFolder = virtualBox().GetHomeFolder();
+
+    /* Re-initialize guest OS Type list: */
+    m_guestOSFamilyIDs.clear();
+    m_guestOSTypes.clear();
+    const CGuestOSTypeVector guestOSTypes = m_vbox.GetGuestOSTypes();
+    const int cGuestOSTypeCount = guestOSTypes.size();
+    AssertMsg(cGuestOSTypeCount > 0, ("Number of OS types must not be zero"));
+    if (cGuestOSTypeCount > 0)
+    {
+        /* Here we ASSUME the 'Other' types are always the first,
+         * so we remember them and will append them to the list when finished.
+         * We do a two pass, first adding the specific types, then the two 'Other' types. */
+        for (int j = 0; j < 2; ++j)
+        {
+            int cMax = j == 0 ? cGuestOSTypeCount : RT_MIN(2, cGuestOSTypeCount);
+            for (int i = j == 0 ? 2 : 0; i < cMax; ++i)
+            {
+                const CGuestOSType os = guestOSTypes.at(i);
+                const QString strFamilyID = os.GetFamilyId();
+                if (!m_guestOSFamilyIDs.contains(strFamilyID))
+                {
+                    m_guestOSFamilyIDs << strFamilyID;
+                    m_guestOSTypes << QList<CGuestOSType>();
+                }
+                m_guestOSTypes[m_guestOSFamilyIDs.indexOf(strFamilyID)].append(os);
+            }
+        }
+    }
+
+    /* Mark wrappers valid: */
+    m_fWrappersValid = true;
+}
+
 #ifdef VBOX_WITH_DEBUGGER_GUI
 
 # define VBOXGLOBAL_DBG_CFG_VAR_FALSE       (0)
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
index 6f5b582..4c1352e 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
@@ -255,6 +255,11 @@ public:
       * In case if non-null @a pLogicalSize pointer provided, it will be updated properly. */
     QPixmap vmGuestOSTypeIcon(const QString &strOSTypeID, QSize *pLogicalSize = 0) const;
 
+    /** Returns pixmap corresponding to passed @a strOSTypeID and @a physicalSize. */
+    QPixmap vmGuestOSTypePixmap(const QString &strOSTypeID, const QSize &physicalSize) const;
+    /** Returns HiDPI pixmap corresponding to passed @a strOSTypeID and @a physicalSize. */
+    QPixmap vmGuestOSTypePixmapHiDPI(const QString &strOSTypeID, const QSize &physicalSize) const;
+
     CGuestOSType vmGuestOSType (const QString &aTypeId,
                                 const QString &aFamilyId = QString::null) const;
     QString vmGuestOSTypeDescription (const QString &aTypeId) const;
@@ -337,10 +342,6 @@ public:
     /** Shortcut to openSession (aId, true). */
     CSession openExistingSession(const QString &aId) { return openSession(aId, KLockType_Shared); }
 
-#ifdef VBOX_GUI_WITH_NETWORK_MANAGER
-    void reloadProxySettings();
-#endif /* VBOX_GUI_WITH_NETWORK_MANAGER */
-
     /* API: Medium-processing stuff: */
     void createMedium(const UIMedium &medium);
     void deleteMedium(const QString &strMediumID);
@@ -493,7 +494,6 @@ public slots:
     bool openURL (const QString &aURL);
 
     void sltGUILanguageChange(QString strLang);
-    void sltProcessGlobalSettingChange();
 
 protected slots:
 
@@ -514,6 +514,9 @@ private:
     VBoxGlobal();
     ~VBoxGlobal();
 
+    /** Re-initializes COM wrappers and containers. */
+    void comWrappersReinit();
+
 #ifdef VBOX_WITH_DEBUGGER_GUI
     void initDebuggerVar(int *piDbgCfgVar, const char *pszEnvVar, const char *pszExtraDataName, bool fDefault = false);
     void setDebuggerVar(int *piDbgCfgVar, bool fState);
@@ -538,6 +541,10 @@ private:
     CHost m_host;
     /** Holds the symbolic VirtualBox home-folder representation. */
     QString m_strHomeFolder;
+    /** Holds the guest OS family IDs. */
+    QList<QString> m_guestOSFamilyIDs;
+    /** Holds the guest OS types for each family ID. */
+    QList<QList<CGuestOSType> > m_guestOSTypes;
 
     /** Holds whether acquired COM wrappers are currently valid. */
     bool m_fWrappersValid;
@@ -627,9 +634,6 @@ private:
 
     int m3DAvailable;
 
-    QList <QString> mFamilyIDs;
-    QList <QList <CGuestOSType> > mTypes;
-
     QString mDiskTypes_Differencing;
 
     QString mUserDefinedPortName;
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxUtils.h b/src/VBox/Frontends/VirtualBox/src/globals/VBoxUtils.h
index 6e933d8..aee3c18 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxUtils.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxUtils.h
@@ -145,41 +145,57 @@ public:
     }
 };
 
+/** Object containing functionality
+  * to (de)serialize proxy settings. */
 class UIProxyManager
 {
 public:
 
+    /** Proxy states. */
+    enum ProxyState
+    {
+        ProxyState_Disabled,
+        ProxyState_Enabled,
+        ProxyState_Auto
+    };
+
+    /** Constructs object which parses passed @a strProxySettings. */
     UIProxyManager(const QString &strProxySettings = QString())
-        : m_fProxyEnabled(false), m_fAuthEnabled(false)
+        : m_enmProxyState(ProxyState_Auto)
+        , m_fAuthEnabled(false)
     {
-        /* Parse settings: */
-        if (!strProxySettings.isEmpty())
-        {
-            QStringList proxySettings = strProxySettings.split(",");
-            if (proxySettings.size() > 0)
-                m_fProxyEnabled = proxySettings[0] == "proxyEnabled";
-            if (proxySettings.size() > 1)
-                m_strProxyHost = proxySettings[1];
-            if (proxySettings.size() > 2)
-                m_strProxyPort = proxySettings[2];
-            if (proxySettings.size() > 3)
-                m_fAuthEnabled = proxySettings[3] == "authEnabled";
-            if (proxySettings.size() > 4)
-                m_strAuthLogin = proxySettings[4];
-            if (proxySettings.size() > 5)
-                m_strAuthPassword = proxySettings[5];
-        }
+        /* Parse proxy settings: */
+        if (strProxySettings.isEmpty())
+            return;
+        QStringList proxySettings = strProxySettings.split(",");
+
+        /* Parse proxy state, host and port: */
+        if (proxySettings.size() > 0)
+            m_enmProxyState = proxyStateFromString(proxySettings[0]);
+        if (proxySettings.size() > 1)
+            m_strProxyHost = proxySettings[1];
+        if (proxySettings.size() > 2)
+            m_strProxyPort = proxySettings[2];
+
+        /* Parse whether proxy auth enabled and has login/password: */
+        if (proxySettings.size() > 3)
+            m_fAuthEnabled = proxySettings[3] == "authEnabled";
+        if (proxySettings.size() > 4)
+            m_strAuthLogin = proxySettings[4];
+        if (proxySettings.size() > 5)
+            m_strAuthPassword = proxySettings[5];
     }
 
+    /** Serializes proxy settings. */
     QString toString() const
     {
         /* Serialize settings: */
         QString strResult;
-        if (m_fProxyEnabled || !m_strProxyHost.isEmpty() || !m_strProxyPort.isEmpty() ||
+        if (m_enmProxyState != ProxyState_Auto || !m_strProxyHost.isEmpty() || !m_strProxyPort.isEmpty() ||
             m_fAuthEnabled || !m_strAuthLogin.isEmpty() || !m_strAuthPassword.isEmpty())
         {
             QStringList proxySettings;
-            proxySettings << QString(m_fProxyEnabled ? "proxyEnabled" : "proxyDisabled");
+            proxySettings << proxyStateToString(m_enmProxyState);
             proxySettings << m_strProxyHost;
             proxySettings << m_strProxyPort;
             proxySettings << QString(m_fAuthEnabled ? "authEnabled" : "authDisabled");
@@ -190,30 +206,72 @@ public:
         return strResult;
     }
 
-    /* Proxy attribute getters: */
-    bool proxyEnabled() const { return m_fProxyEnabled; }
+    /** Returns the proxy state. */
+    ProxyState proxyState() const { return m_enmProxyState; }
+    /** Returns the proxy host. */
     const QString& proxyHost() const { return m_strProxyHost; }
+    /** Returns the proxy port. */
     const QString& proxyPort() const { return m_strProxyPort; }
+
+    /** Returns whether the proxy auth is enabled. */
     bool authEnabled() const { return m_fAuthEnabled; }
+    /** Returns the proxy auth login. */
     const QString& authLogin() const { return m_strAuthLogin; }
+    /** Returns the proxy auth password. */
     const QString& authPassword() const { return m_strAuthPassword; }
 
-    /* Proxy attribute setters: */
-    void setProxyEnabled(bool fProxyEnabled) { m_fProxyEnabled = fProxyEnabled; }
-    void setProxyHost(const QString &strProxyHost) { m_strProxyHost = strProxyHost; }
-    void setProxyPort(const QString &strProxyPort) { m_strProxyPort = strProxyPort; }
-    void setAuthEnabled(bool fAuthEnabled) { m_fAuthEnabled = fAuthEnabled; }
-    void setAuthLogin(const QString &strAuthLogin) { m_strAuthLogin = strAuthLogin; }
-    void setAuthPassword(const QString &strAuthPassword) { m_strAuthPassword = strAuthPassword; }
+    /** Defines the proxy @a enmState. */
+    void setProxyState(ProxyState enmState) { m_enmProxyState = enmState; }
+    /** Defines the proxy @a strHost. */
+    void setProxyHost(const QString &strHost) { m_strProxyHost = strHost; }
+    /** Defines the proxy @a strPort. */
+    void setProxyPort(const QString &strPort) { m_strProxyPort = strPort; }
+
+    /** Defines whether the proxy auth is @a fEnabled. */
+    void setAuthEnabled(bool fEnabled) { m_fAuthEnabled = fEnabled; }
+    /** Defines the proxy auth @a strLogin. */
+    void setAuthLogin(const QString &strLogin) { m_strAuthLogin = strLogin; }
+    /** Defines the proxy auth @a strPassword. */
+    void setAuthPassword(const QString &strPassword) { m_strAuthPassword = strPassword; }
 
 private:
 
-    /* Proxy attribute variables: */
-    bool m_fProxyEnabled;
+    /** Converts passed @a state to corresponding #QString. */
+    static QString proxyStateToString(ProxyState state)
+    {
+        switch (state)
+        {
+            case ProxyState_Disabled: return QString("ProxyDisabled");
+            case ProxyState_Enabled:  return QString("ProxyEnabled");
+            case ProxyState_Auto:     break;
+        }
+        return QString("ProxyAuto");
+    }
+
+    /** Converts passed @a strState to corresponding #ProxyState. */
+    static ProxyState proxyStateFromString(const QString &strState)
+    {
+        /* Compose the map of known states: */
+        QMap<QString, ProxyState> states;
+        states["ProxyDisabled"] = ProxyState_Disabled; // New since VBox 5.0
+        states["proxyEnabled"]  = ProxyState_Enabled;  // Old since VBox 4.1
+        states["ProxyEnabled"]  = ProxyState_Enabled;  // New since VBox 5.0
+        /* Return one of registered or 'Auto' by default: */
+        return states.value(strState, ProxyState_Auto);
+    }
+
+    /** Holds the proxy state. */
+    ProxyState m_enmProxyState;
+    /** Holds the proxy host. */
     QString m_strProxyHost;
+    /** Holds the proxy port. */
     QString m_strProxyPort;
+
+    /** Holds whether the proxy auth is enabled. */
     bool m_fAuthEnabled;
+    /** Holds the proxy auth login. */
     QString m_strAuthLogin;
+    /** Holds the proxy auth password. */
     QString m_strAuthPassword;
 };
 
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp
index 5e22680..fe60652 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.cpp
@@ -42,12 +42,7 @@ void UIDownloader::sltStartAcknowledging()
     m_state = UIDownloaderState_Acknowledging;
 
     /* Send HEAD requests: */
-    QList<QNetworkRequest> requests;
-    for (int i = 0; i < m_sources.size(); ++i)
-        requests << QNetworkRequest(m_sources[i]);
-
-    /* Create network request set: */
-    createNetworkRequest(requests, UINetworkRequestType_HEAD, tr("Looking for %1...").arg(m_strDescription));
+    createNetworkRequest(UINetworkRequestType_HEAD, m_sources);
 }
 
 /* Downloading start: */
@@ -57,10 +52,7 @@ void UIDownloader::sltStartDownloading()
     m_state = UIDownloaderState_Downloading;
 
     /* Send GET request: */
-    QNetworkRequest request(m_source);
-
-    /* Create network request: */
-    createNetworkRequest(request, UINetworkRequestType_GET, tr("Downloading %1...").arg(m_strDescription));
+    createNetworkRequest(UINetworkRequestType_GET, QList<QUrl>() << m_source);
 }
 
 /* Constructor: */
@@ -72,6 +64,20 @@ UIDownloader::UIDownloader()
     connect(this, SIGNAL(sigToStartDownloading()), this, SLOT(sltStartDownloading()), Qt::QueuedConnection);
 }
 
+/* virtual override */
+const QString UIDownloader::description() const
+{
+    /* Look for known state: */
+    switch (m_state)
+    {
+        case UIDownloaderState_Acknowledging: return tr("Looking for %1...");
+        case UIDownloaderState_Downloading:   return tr("Downloading %1...");
+        default:                              break;
+    }
+    /* Return null-string by default: */
+    return QString();
+}
+
 /* Network-reply progress handler: */
 void UIDownloader::processNetworkReplyProgress(qint64 iReceived, qint64 iTotal)
 {
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h b/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h
index 854047f..004c0f4 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloader.h
@@ -79,9 +79,8 @@ protected:
     void setTarget(const QString &strTarget) { m_strTarget = strTarget; }
     const QString& target() const { return m_strTarget; }
 
-    /* Description stuff,
-     * allows to set/get Network Customer description for Network Access Manager: */
-    void setDescription(const QString &strDescription) { m_strDescription = strDescription; }
+    /** Returns description of the current network operation. */
+    virtual const QString description() const;
 
     /* Start delayed acknowledging: */
     void startDelayedAcknowledging() { emit sigToStartAcknowledging(); }
@@ -112,7 +111,6 @@ private:
     QList<QUrl> m_sources;
     QUrl m_source;
     QString m_strTarget;
-    QString m_strDescription;
 };
 
 #endif // __UIDownloader_h__
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp
index 1334ed6..cd954b8 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.cpp
@@ -57,9 +57,6 @@ UIDownloaderAdditions::UIDownloaderAdditions()
     if (!m_spInstance)
         m_spInstance = this;
 
-    /* Set description: */
-    setDescription(tr("VirtualBox Guest Additions"));
-
     /* Prepare source/target: */
     const QString &strName = QString("VBoxGuestAdditions_%1.iso").arg(vboxGlobal().vboxVersionStringNormalized());
     const QString &strSource = QString("http://download.virtualbox.org/virtualbox/%1/").arg(vboxGlobal().vboxVersionStringNormalized()) + strName;
@@ -77,9 +74,15 @@ UIDownloaderAdditions::~UIDownloaderAdditions()
         m_spInstance = 0;
 }
 
+/* virtual override */
+const QString UIDownloaderAdditions::description() const
+{
+    return UIDownloader::description().arg(tr("VirtualBox Guest Additions"));
+}
+
 bool UIDownloaderAdditions::askForDownloadingConfirmation(UINetworkReply *pReply)
 {
-    return msgCenter().confirmDownloadGuestAdditions(source().toString(), pReply->header(QNetworkRequest::ContentLengthHeader).toInt());
+    return msgCenter().confirmDownloadGuestAdditions(source().toString(), pReply->header(UINetworkReply::ContentLengthHeader).toInt());
 }
 
 void UIDownloaderAdditions::handleDownloadedObject(UINetworkReply *pReply)
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h
index 9d1454c..96a3ad6 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderAdditions.h
@@ -43,6 +43,9 @@ private:
     UIDownloaderAdditions();
     ~UIDownloaderAdditions();
 
+    /** Returns description of the current network operation. */
+    virtual const QString description() const;
+
     /* Virtual stuff reimplementations: */
     bool askForDownloadingConfirmation(UINetworkReply *pReply);
     void handleDownloadedObject(UINetworkReply *pReply);
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp
index 0cb95f3..7cca8b4 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.cpp
@@ -59,9 +59,6 @@ UIDownloaderExtensionPack::UIDownloaderExtensionPack()
     if (!m_spInstance)
         m_spInstance = this;
 
-    /* Set description: */
-    setDescription(tr("VirtualBox Extension Pack"));
-
     /* Prepare source/target: */
     QString strExtPackUnderscoredName(QString(GUI_ExtPackName).replace(' ', '_'));
     QString strTemplateSourcePath("http://download.virtualbox.org/virtualbox/%1/");
@@ -85,9 +82,15 @@ UIDownloaderExtensionPack::~UIDownloaderExtensionPack()
         m_spInstance = 0;
 }
 
+/* virtual override */
+const QString UIDownloaderExtensionPack::description() const
+{
+    return UIDownloader::description().arg(tr("VirtualBox Extension Pack"));
+}
+
 bool UIDownloaderExtensionPack::askForDownloadingConfirmation(UINetworkReply *pReply)
 {
-    return msgCenter().confirmDownloadExtensionPack(GUI_ExtPackName, source().toString(), pReply->header(QNetworkRequest::ContentLengthHeader).toInt());
+    return msgCenter().confirmDownloadExtensionPack(GUI_ExtPackName, source().toString(), pReply->header(UINetworkReply::ContentLengthHeader).toInt());
 }
 
 void UIDownloaderExtensionPack::handleDownloadedObject(UINetworkReply *pReply)
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h
index 1b91c61..5c492c3 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderExtensionPack.h
@@ -43,6 +43,9 @@ private:
     UIDownloaderExtensionPack();
     ~UIDownloaderExtensionPack();
 
+    /** Returns description of the current network operation. */
+    virtual const QString description() const;
+
     /* Virtual stuff reimplementations: */
     bool askForDownloadingConfirmation(UINetworkReply *pReply);
     void handleDownloadedObject(UINetworkReply *pReply);
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp
index d5e17c6..1abf508 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.cpp
@@ -57,9 +57,6 @@ UIDownloaderUserManual::UIDownloaderUserManual()
     if (!m_spInstance)
         m_spInstance = this;
 
-    /* Set description: */
-    setDescription(tr("VirtualBox User Manual"));
-
     /* Compose User Manual filename: */
     QString strUserManualFullFileName = vboxGlobal().helpFile();
     QString strUserManualShortFileName = QFileInfo(strUserManualFullFileName).fileName();
@@ -80,9 +77,15 @@ UIDownloaderUserManual::~UIDownloaderUserManual()
         m_spInstance = 0;
 }
 
+/* virtual override */
+const QString UIDownloaderUserManual::description() const
+{
+    return UIDownloader::description().arg(tr("VirtualBox User Manual"));
+}
+
 bool UIDownloaderUserManual::askForDownloadingConfirmation(UINetworkReply *pReply)
 {
-    return msgCenter().confirmDownloadUserManual(source().toString(), pReply->header(QNetworkRequest::ContentLengthHeader).toInt());
+    return msgCenter().confirmDownloadUserManual(source().toString(), pReply->header(UINetworkReply::ContentLengthHeader).toInt());
 }
 
 void UIDownloaderUserManual::handleDownloadedObject(UINetworkReply *pReply)
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h
index fc182cf..4673357 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIDownloaderUserManual.h
@@ -43,6 +43,9 @@ private:
     UIDownloaderUserManual();
     ~UIDownloaderUserManual();
 
+    /** Returns description of the current network operation. */
+    virtual const QString description() const;
+
     /* Virtual stuff reimplementations: */
     bool askForDownloadingConfirmation(UINetworkReply *pReply);
     void handleDownloadedObject(UINetworkReply *pReply);
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.cpp
index 597949f..47ea963 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.cpp
@@ -20,7 +20,7 @@
 #else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
 /* Qt includes: */
-# include <QNetworkRequest>
+# include <QUrl>
 
 /* Local includes: */
 # include "UINetworkCustomer.h"
@@ -41,13 +41,9 @@ UINetworkCustomer::UINetworkCustomer(QObject *pParent, bool fForceCall)
 {
 }
 
-void UINetworkCustomer::createNetworkRequest(const QNetworkRequest &request, UINetworkRequestType type, const QString &strDescription)
+void UINetworkCustomer::createNetworkRequest(UINetworkRequestType type, const QList<QUrl> urls,
+                                             const UserDictionary requestHeaders /* = UserDictionary() */)
 {
-    gNetworkManager->createNetworkRequest(request, type, strDescription, this);
-}
-
-void UINetworkCustomer::createNetworkRequest(const QList<QNetworkRequest> &requests, UINetworkRequestType type, const QString &strDescription)
-{
-    gNetworkManager->createNetworkRequest(requests, type, strDescription, this);
+    gNetworkManager->createNetworkRequest(type, urls, requestHeaders, this);
 }
 
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h
index d3b3707..c4c60df 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkCustomer.h
@@ -26,7 +26,7 @@
 
 /* Forward declarations: */
 class UINetworkReply;
-class QNetworkRequest;
+class QUrl;
 
 /* Interface to access UINetworkManager protected functionality: */
 class UINetworkCustomer : public QObject
@@ -49,12 +49,14 @@ public:
     /* Network-reply finish handler: */
     virtual void processNetworkReplyFinished(UINetworkReply *pReply) = 0;
 
+    /** Returns description of the current network operation. */
+    virtual const QString description() const { return QString(); }
+
 protected:
 
-    /* Network-request wrapper: */
-    void createNetworkRequest(const QNetworkRequest &request, UINetworkRequestType type, const QString &strDescription);
-    /* Network-request wrapper (set): */
-    void createNetworkRequest(const QList<QNetworkRequest> &requests, UINetworkRequestType type, const QString &strDescription);
+    /** Creates network-request of the passed @a type on the basis of the passed @a urls and the @a requestHeaders. */
+    void createNetworkRequest(UINetworkRequestType type, const QList<QUrl> urls,
+                              const UserDictionary requestHeaders = UserDictionary());
 
 private:
 
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkDefs.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkDefs.h
index bb5099c..e4cf5de 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-2012 Oracle Corporation
+ * Copyright (C) 2011-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;
@@ -15,23 +15,21 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-#ifndef __UINetworkDefs_h__
-#define __UINetworkDefs_h__
+#ifndef ___UINetworkDefs_h___
+#define ___UINetworkDefs_h___
 
-/* Network-request types: */
+/* Qt includes: */
+#include <QMap>
+
+/** Network request types. */
 enum UINetworkRequestType
 {
     UINetworkRequestType_HEAD,
-    UINetworkRequestType_GET,
-    UINetworkRequestType_GET_Our
+    UINetworkRequestType_GET
 };
 
-/* Network-reply types: */
-enum UINetworkReplyType
-{
-    UINetworkReplyType_Qt,
-    UINetworkReplyType_Our
-};
+/** User dictionary. */
+typedef QMap<QString, QString> UserDictionary;
 
-#endif // __UINetworkDefs_h__
+#endif /* !___UINetworkDefs_h___ */
 
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.cpp
index 71bcd35..ac46928 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.cpp
@@ -21,6 +21,7 @@
 
 /* Global includes: */
 # include <QWidget>
+# include <QUrl>
 
 /* Local includes: */
 # include "UINetworkManager.h"
@@ -106,20 +107,11 @@ void UINetworkManager::show()
     m_pNetworkManagerDialog->showNormal();
 }
 
-void UINetworkManager::createNetworkRequest(const QNetworkRequest &request, UINetworkRequestType type, const QString &strDescription,
-                                            UINetworkCustomer *pCustomer)
+void UINetworkManager::createNetworkRequest(UINetworkRequestType type, const QList<QUrl> &urls,
+                                            const UserDictionary &requestHeaders, UINetworkCustomer *pCustomer)
 {
     /* Create network-request: */
-    UINetworkRequest *pNetworkRequest = new UINetworkRequest(request, type, strDescription, pCustomer, this);
-    /* Prepare created network-request: */
-    prepareNetworkRequest(pNetworkRequest);
-}
-
-void UINetworkManager::createNetworkRequest(const QList<QNetworkRequest> &requests, UINetworkRequestType type, const QString &strDescription,
-                                            UINetworkCustomer *pCustomer)
-{
-    /* Create network-request: */
-    UINetworkRequest *pNetworkRequest = new UINetworkRequest(requests, type, strDescription, pCustomer, this);
+    UINetworkRequest *pNetworkRequest = new UINetworkRequest(type, urls, requestHeaders, pCustomer, this);
     /* Prepare created network-request: */
     prepareNetworkRequest(pNetworkRequest);
 }
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.h
index 663b41b..db85ef3 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkManager.h
@@ -18,25 +18,24 @@
 #ifndef __UINetworkManager_h__
 #define __UINetworkManager_h__
 
-/* Global includes: */
-#include <QNetworkAccessManager>
+/* Qt includes: */
+#include <QObject>
 #include <QUuid>
-#include <QMap>
-#include <QNetworkRequest>
 
 /* Local inludes: */
 #include "UINetworkDefs.h"
 
 /* Forward declarations: */
+class QUrl;
 class QWidget;
 class UINetworkRequest;
 class UINetworkCustomer;
 class UINetworkManagerDialog;
 class UINetworkManagerIndicator;
 
-/* QNetworkAccessManager class reimplementation.
+/* QObject class reimplementation.
  * Providing network access for VirtualBox application purposes. */
-class UINetworkManager : public QNetworkAccessManager
+class UINetworkManager : public QObject
 {
     Q_OBJECT;
 
@@ -80,11 +79,10 @@ protected:
 
     /* Allow UINetworkCustomer to create network-request: */
     friend class UINetworkCustomer;
-    /* Network-request creation wrappers for UINetworkCustomer: */
-    void createNetworkRequest(const QNetworkRequest &request, UINetworkRequestType type, const QString &strDescription,
-                              UINetworkCustomer *pCustomer);
-    void createNetworkRequest(const QList<QNetworkRequest> &requests, UINetworkRequestType type, const QString &strDescription,
-                              UINetworkCustomer *pCustomer);
+    /** Creates network-request of the passed @a type
+      * on the basis of the passed @a urls and the @a requestHeaders for the @a pCustomer specified. */
+    void createNetworkRequest(UINetworkRequestType type, const QList<QUrl> &urls,
+                              const UserDictionary &requestHeaders, UINetworkCustomer *pCustomer);
 
 private:
 
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
index 6fefe4a..9cc0497 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.cpp
@@ -1,6 +1,6 @@
 /* $Id: UINetworkReply.cpp $ */
 /** @file
- * VBox Qt GUI - UINetworkReply, i.e. HTTP/HTTPS for update pings++.
+ * VBox Qt GUI - UINetworkReply stuff implementation.
  */
 
 /*
@@ -25,6 +25,7 @@
 # include <QThread>
 # include <QRegExp>
 # include <QVector>
+# include <QVariant>
 
 /* GUI includes: */
 # include "UINetworkReply.h"
@@ -32,15 +33,16 @@
 # ifndef VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS
 #  include "VBoxGlobal.h"
 #  include "VBoxUtils.h"
-# else
+# else /* VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS */
 #  include <VBox/log.h>
-# endif
+# endif /* VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS */
 
-/* Other VBox includes; */
+/* Other VBox includes: */
 # include <iprt/initterm.h>
 
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
+/* Other VBox includes: */
 #include <iprt/crypto/pem.h>
 #include <iprt/crypto/store.h>
 #include <iprt/err.h>
@@ -51,103 +53,250 @@
 #include <iprt/zip.h>
 
 
-/**
- * Our network-reply thread
- */
+/** QThread extension
+  * used as network-reply private thread interface. */
 class UINetworkReplyPrivateThread : public QThread
 {
 #ifndef VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS
     Q_OBJECT;
-#endif
 
-public:
+signals:
 
-    /* Constructor: */
-    UINetworkReplyPrivateThread(const QNetworkRequest &request);
+    /** Notifies listeners about reply progress change.
+      * @param  iBytesReceived  Holds the current amount of bytes received.
+      * @param  iBytesTotal     Holds the total amount of bytes to be received. */
+    void sigDownloadProgress(qint64 iBytesReceived, qint64 iBytesTotal);
+#endif /* !VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS */
 
-    /** Returns short descriptive context of thread's current operation. */
-    const QString context() const { return m_strContext; }
+public:
+
+    /** Constructs network-reply thread of the passed @a type for the passed @a url and @a requestHeaders. */
+    UINetworkReplyPrivateThread(UINetworkRequestType type, const QUrl &url, const UserDictionary &requestHeaders);
 
     /** @name APIs
      * @{ */
-    /** Read everything. */
-    const QByteArray& readAll() const { return m_reply; }
-    /** IRPT error status. */
-    int error() const { return m_iError; }
-    /** Abort HTTP request. */
-    void abort();
+        /** Aborts reply. */
+        void abort();
+
+        /** Returns the URL of the reply which is the URL of the request for now. */
+        const QUrl& url() const { return m_url; }
+
+        /** Returns the last cached IPRT HTTP error of the reply. */
+        int error() const { return m_iError; }
+
+        /** Returns binary content of the reply. */
+        const QByteArray& readAll() const { return m_reply; }
+        /** Returns value for the cached reply header of the passed @a type. */
+        QString header(UINetworkReply::KnownHeader type) const;
+        /** Returns value for the cached reply attribute of the passed @a code. */
+        QVariant attribute(UINetworkReply::KnownAttribute code) const { /** @todo r=dsen: Fix that. */ Q_UNUSED(code); return QVariant(); }
+
+        /** Returns short descriptive context of thread's current operation. */
+        const QString context() const { return m_strContext; }
     /** @} */
 
 private:
-    /** @name Helpers - HTTP stuff
+
+    /** @name Helpers for HTTP and Certificates handling.
      * @{ */
-    int applyProxyRules();
-    int applyHttpsCertificates();
-    int applyRawHeaders();
-    int performMainRequest();
+        /** Applies configuration. */
+        int applyConfiguration();
+        /** Applies proxy rules. */
+        int applyProxyRules();
+        /** Applies security certificates. */
+        int applyHttpsCertificates();
+        /** Applies raw headers. */
+        int applyRawHeaders();
+        /** Performs main request. */
+        int performMainRequest();
+
+        /** Performs whole thread functionality. */
+        void run();
+
+        /** Handles download progress callback.
+          * @param  cbDownloadTotal  Brings the total amount of bytes to be received.
+          * @param  cbDownloaded     Brings the current amount of bytes received. */
+        void handleProgressChange(uint64_t cbDownloadTotal, uint64_t cbDownloaded);
     /** @} */
 
-    /* Helper: Main thread runner: */
-    void run();
+    /** @name Static helpers for HTTP and Certificates handling.
+     * @{ */
+        /** Returns full certificate file-name. */
+        static QString fullCertificateFileName();
+
+        /** Applies proxy rules.
+          * @remarks  Implementation doesn't exists, to be removed? */
+        static int applyProxyRules(RTHTTP hHttp, const QString &strHostName, int iPort);
+
+        /** Applies raw headers.
+          * @param  hHttp    Brings the HTTP client instance.
+          * @param  headers  Brings the map of headers to be applied. */
+        static int applyRawHeaders(RTHTTP hHttp, const UserDictionary &headers);
+
+        /** Returns the number of certificates found in a search result array.
+          * @param  pafFoundCerts  Brings the array parallel to s_aCerts with the status of each wanted certificate. */
+        static unsigned countCertsFound(bool const *pafFoundCerts);
+
+        /** Returns whether we've found all the necessary certificates.
+          * @param  pafFoundCerts  Brings the array parallel to s_aCerts with the status of each wanted certificate. */
+        static bool areAllCertsFound(bool const *pafFoundCerts);
+
+        /** Refreshes the certificates.
+          * @param  hHttp          Brings the HTTP client instance. (Can be NIL when running the testcase.)
+          * @param  phStore        On input, this holds the current store, so that we can fish out wanted
+          *                        certificates from it. On successful return, this is replaced with a new
+          *                        store reflecting the refrehsed content of @a pszCaCertFile.
+          * @param  pafFoundCerts  On input, this holds the certificates found in the current store.
+          *                        On return, this reflects what is current in the @a pszCaCertFile.
+          *                        The array runs parallel to s_aCerts.
+          * @param  pszCaCertFile  Where to write the refreshed certificates if we've managed to gather
+          *                        a collection that is at least as good as the old one. */
+        static int refreshCertificates(RTHTTP hHttp, PRTCRSTORE phStore, bool *pafFoundCerts, const char *pszCaCertFile);
+
+        /** Downloads missing certificates.
+          * @param  hNewStore         On successful return, this store will contain newly downloaded certificates.
+          * @param  pafNewFoundCerts  On successful return, this array parallel to s_aCerts will contain the
+          *                           status of each newly downloaded certificate.
+          * @param  hHttp             Brings the HTTP client instance.
+          * @param  pStaticErrInfo    Unused currently. */
+        static void downloadMissingCertificates(RTCRSTORE hNewStore, bool *pafNewFoundCerts, RTHTTP hHttp,
+                                                PRTERRINFOSTATIC pStaticErrInfo);
+
+        /** Converts a PEM certificate, verifies it against @a pCertInfo and adds it to the given store.
+          * @param  hStore       The store to add certificate to.
+          * @param  pvResponse   The raw PEM certificate file bytes.
+          * @param  cbResponse   The number of bytes.
+          * @param  pWantedCert  The certificate info (we use hashes and encoded size). */
+        static int convertVerifyAndAddPemCertificateToStore(RTCRSTORE hStore, void const *pvResponse,
+                                                            size_t cbResponse, PCRTCRCERTWANTED pWantedCert);
+
+        /** Redirects download progress callback to particular object which can handle it.
+          * @param  hHttp            Brings the HTTP client instance.
+          * @param  pvUser           Brings the convenience pointer for the
+          *                          user-agent object which should handle that callback.
+          * @param  cbDownloadTotal  Brings the total amount of bytes to be received.
+          * @param  cbDownloaded     Brings the current amount of bytes received. */
+        static DECLCALLBACK(void) handleProgressChange(RTHTTP hHttp, void *pvUser, uint64_t cbDownloadTotal, uint64_t cbDownloaded);
+    /** @} */
 
     /** Additinoal download nfo about wanted certificate. */
     typedef struct CERTINFO
     {
-        /** Filename in the zip file we download (PEM). */
+        /** Holds the filename of the zip file we download (PEM). */
         const char *pszZipFile;
-        /** List of direct URLs to PEM formatted files.. */
+        /** Lists direct URLs to PEM formatted files. */
         const char *apszUrls[4];
     } CERTINFO;
 
-    /** @name Static helpers for HTTP and Certificates handling.
-     * @{ */
-    static QString fullCertificateFileName();
-    static int applyProxyRules(RTHTTP hHttp, const QString &strHostName, int iPort);
-    static int applyRawHeaders(RTHTTP hHttp, const QList<QByteArray> &headers, const QNetworkRequest &request);
-    static unsigned countCertsFound(bool const *pafFoundCerts);
-    static bool areAllCertsFound(bool const *pafFoundCerts);
-    static int refreshCertificates(RTHTTP hHttp, PRTCRSTORE phStore, bool *pafFoundCerts, const char *pszCaCertFile);
-    static void downloadMissingCertificates(RTCRSTORE hNewStore, bool *pafNewFoundCerts, RTHTTP hHttp,
-                                            PRTERRINFOSTATIC pStaticErrInfo);
-    static int convertVerifyAndAddPemCertificateToStore(RTCRSTORE hStore, void const *pvResponse,
-                                                        size_t cbResponse, PCRTCRCERTWANTED pWantedCert);
-    /** @} */
+    /** Holds the request type. */
+    const UINetworkRequestType m_type;
+    /** Holds the request url. */
+    const QUrl m_url;
+    /** Holds the request headers. */
+    const UserDictionary m_requestHeaders;
 
+    /** Holds the IPRT HTTP client instance handle. */
+    RTHTTP m_hHttp;
+    /** Holds the last cached IPRT HTTP error of the reply. */
+    int m_iError;
     /** Holds short descriptive context of thread's current operation. */
     QString m_strContext;
-
-    /* Variables: */
-    QNetworkRequest m_request;
-    int m_iError;
-    /** IPRT HTTP client instance handle. */
-    RTHTTP m_hHttp;
+    /** Holds the reply instance. */
     QByteArray m_reply;
+    /** Holds the cached reply headers. */
+    UserDictionary m_headers;
 
+    /** Holds the URLs to root zip files containing certificates we want. */
     static const char * const s_apszRootsZipUrls[];
+    /** Holds the download details. */
     static const CERTINFO s_CertInfoPcaCls3Gen5;
+    /** Holds the details on the certificates we are after.
+      * The pvUser member points to a UINetworkReplyPrivateThread::CERTINFO. */
     static const RTCRCERTWANTED s_aCerts[];
+    /** Holds the certificate file name (no path). */
     static const QString s_strCertificateFileName;
 
 #ifdef VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS
 public:
+    /** Starts the test routine. */
     static void testIt(RTTEST hTest);
-#endif
+#endif /* VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS */
 };
 
 
-/**
- * URLs to root zip files containing certificates we want.
- */
-/*static*/ const char * const UINetworkReplyPrivateThread::s_apszRootsZipUrls[] =
+#ifndef VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS
+/** QObject extension
+  * used as network-reply private data interface. */
+class UINetworkReplyPrivate : public QObject
 {
-    "http://www.symantec.com/content/en/us/enterprise/verisign/roots/roots.zip"
+    Q_OBJECT;
+
+signals:
+
+    /** Notifies listeners about reply progress change.
+      * @param  iBytesReceived  Holds the current amount of bytes received.
+      * @param  iBytesTotal     Holds the total amount of bytes to be received. */
+    void downloadProgress(qint64 iBytesReceived, qint64 iBytesTotal);
+
+    /** Notifies listeners about reply has finished processing. */
+    void finished();
+
+public:
+
+    /** Constructs network-reply private data of the passed @a type for the passed @a url and @a requestHeaders. */
+    UINetworkReplyPrivate(UINetworkRequestType type, const QUrl &url, const UserDictionary &requestHeaders);
+    /** Destructs reply private data. */
+    ~UINetworkReplyPrivate();
+
+    /** Aborts reply. */
+    void abort() { m_pThread->abort(); }
+
+    /** Returns URL of the reply. */
+    QUrl url() const { return m_pThread->url(); }
+
+    /** Returns the last cached error of the reply. */
+    UINetworkReply::NetworkError error() const { return m_error; }
+    /** Returns the user-oriented string corresponding to the last cached error of the reply. */
+    QString errorString() const;
+
+    /** Returns binary content of the reply. */
+    QByteArray readAll() const { return m_pThread->readAll(); }
+    /** Returns value for the cached reply header of the passed @a type. */
+    QString header(UINetworkReply::KnownHeader type) const { return m_pThread->header(type); }
+    /** Returns value for the cached reply attribute of the passed @a code. */
+    QVariant attribute(UINetworkReply::KnownAttribute code) const { return m_pThread->attribute(code); }
+
+private slots:
+
+    /** Handles signal about reply has finished processing. */
+    void sltFinished();
+
+private:
+
+    /** Holds full error template in "Context description: Error description" form. */
+    QString m_strErrorTemplate;
+
+    /** Holds the last cached error of the reply. */
+    UINetworkReply::NetworkError m_error;
+
+    /** Holds the reply thread instance. */
+    UINetworkReplyPrivateThread *m_pThread;
 };
+#endif /* !VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS */
 
 
-/**
- * Download details for
- */
-/*static*/ const UINetworkReplyPrivateThread::CERTINFO UINetworkReplyPrivateThread::s_CertInfoPcaCls3Gen5 =
+/*********************************************************************************************************************************
+*   Class UINetworkReplyPrivateThread implementation.                                                                            *
+*********************************************************************************************************************************/
+
+/* static */
+const char * const UINetworkReplyPrivateThread::s_apszRootsZipUrls[] =
+{
+    "http://www.symantec.com/content/en/us/enterprise/verisign/roots/roots.zip"
+};
+
+/* static */
+const UINetworkReplyPrivateThread::CERTINFO UINetworkReplyPrivateThread::s_CertInfoPcaCls3Gen5 =
 {
     /*.pszZipFile     =*/
     "VeriSign Root Certificates/Generation 5 (G5) PCA/VeriSign Class 3 Public Primary Certification Authority - G5.pem",
@@ -160,12 +309,8 @@ public:
     }
 };
 
-
-/**
- * Details on the certificates we are after.
- * The pvUser member points to a UINetworkReplyPrivateThread::CERTINFO.
- */
-/* static */ const RTCRCERTWANTED UINetworkReplyPrivateThread::s_aCerts[] =
+/* static */
+const RTCRCERTWANTED UINetworkReplyPrivateThread::s_aCerts[] =
 {
     /*[0] =*/
     {
@@ -195,15 +340,15 @@ public:
     },
 };
 
+/* static */
+const QString UINetworkReplyPrivateThread::s_strCertificateFileName = QString("vbox-ssl-cacertificate.crt");
 
-/** The certificate file name (no path). */
-/* static */ const QString UINetworkReplyPrivateThread::s_strCertificateFileName = QString("vbox-ssl-cacertificate.crt");
-
-
-UINetworkReplyPrivateThread::UINetworkReplyPrivateThread(const QNetworkRequest &request)
-    : m_request(request)
-    , m_iError(VINF_SUCCESS)
+UINetworkReplyPrivateThread::UINetworkReplyPrivateThread(UINetworkRequestType type, const QUrl &url, const UserDictionary &requestHeaders)
+    : m_type(type)
+    , m_url(url)
+    , m_requestHeaders(requestHeaders)
     , m_hHttp(NIL_RTHTTP)
+    , m_iError(VINF_SUCCESS)
 {
 }
 
@@ -214,38 +359,61 @@ void UINetworkReplyPrivateThread::abort()
         RTHttpAbort(m_hHttp);
 }
 
+QString UINetworkReplyPrivateThread::header(UINetworkReply::KnownHeader type) const
+{
+    /* Look for known header type: */
+    switch (type)
+    {
+        case UINetworkReply::ContentTypeHeader:   return m_headers.value("Content-Type");
+        case UINetworkReply::ContentLengthHeader: return m_headers.value("Content-Length");
+        case UINetworkReply::LastModifiedHeader:  return m_headers.value("Last-Modified");
+        default: break;
+    }
+    /* Return null-string by default: */
+    return QString();
+}
+
+int UINetworkReplyPrivateThread::applyConfiguration()
+{
+    /* Install downloading progress callback: */
+    return RTHttpSetDownloadProgressCallback(m_hHttp, &UINetworkReplyPrivateThread::handleProgressChange, this);
+}
+
 int UINetworkReplyPrivateThread::applyProxyRules()
 {
     /* Set thread context: */
     m_strContext = tr("During proxy configuration");
 
 #ifndef VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS
-    /* Get the proxymanager: */
+    /* Get the proxy-manager: */
     UIProxyManager proxyManager(vboxGlobal().settings().proxySettings());
 
-    /* If the specific proxy settings aren't enabled, we'll use the
-       system default proxy.  Otherwise assume it's configured. */
-    if (proxyManager.proxyEnabled())
-        return RTHttpSetProxy(m_hHttp,
-                              proxyManager.proxyHost().toUtf8().constData(),
-                              proxyManager.proxyPort().toUInt(),
-                              NULL /* pszProxyUser */, NULL /* pszProxyPwd */);
-
-    /** @todo This should be some kind of tristate:
-     *      - system configured proxy ("proxyDisabled" as well as default "")
-     *      - user configured proxy ("proxyEnabled").
-     *      - user configured "no proxy" (currently missing).
-     * In the two last cases, call RTHttpSetProxy.
-     *
-     * Alternatively, we could opt not to give the user a way of doing "no proxy",
-     * that would require no real changes to the visible GUI... Just a thought.
-     */
-#endif
+    /* If the specific proxy settings are enabled, we'll use them
+     * unless user disabled that functionality manually. */
+    switch (proxyManager.proxyState())
+    {
+        case UIProxyManager::ProxyState_Enabled:
+            return RTHttpSetProxy(m_hHttp,
+                                  proxyManager.proxyHost().toUtf8().constData(),
+                                  proxyManager.proxyPort().toUInt(),
+                                  NULL /* pszProxyUser */, NULL /* pszProxyPwd */);
+        case UIProxyManager::ProxyState_Disabled:
+            return VINF_SUCCESS;
+        default:
+            break;
+    }
+#endif /* VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS */
+
+    /* By default, use system proxy: */
     return RTHttpUseSystemProxySettings(m_hHttp);
 }
 
 int UINetworkReplyPrivateThread::applyHttpsCertificates()
 {
+    /* Check if we really need SSL: */
+    if (!url().toString().startsWith("https:", Qt::CaseInsensitive))
+        return VINF_SUCCESS;
+
     /* Set thread context: */
     m_strContext = tr("During certificate downloading");
 
@@ -335,12 +503,11 @@ int UINetworkReplyPrivateThread::applyRawHeaders()
     m_strContext = tr("During network request");
 
     /* Make sure we have a raw headers at all: */
-    QList<QByteArray> headers = m_request.rawHeaderList();
-    if (headers.isEmpty())
+    if (m_requestHeaders.isEmpty())
         return VINF_SUCCESS;
 
     /* Apply raw headers: */
-    return applyRawHeaders(m_hHttp, headers, m_request);
+    return applyRawHeaders(m_hHttp, m_requestHeaders);
 }
 
 int UINetworkReplyPrivateThread::performMainRequest()
@@ -351,16 +518,58 @@ int UINetworkReplyPrivateThread::performMainRequest()
     /* Paranoia: */
     m_reply.clear();
 
-    /* Perform blocking HTTP GET request: */
-    char *pszResponse;
-    /** @todo r=bird: Use RTHttpGetBinary? */
-    int rc = RTHttpGetText(m_hHttp, m_request.url().toString().toUtf8().constData(), &pszResponse);
-    if (RT_SUCCESS(rc))
+    /* Prepare result: */
+    int rc = 0;
+
+    /* Depending on request type: */
+    switch (m_type)
     {
-        m_reply = QByteArray(pszResponse);
-        RTHttpFreeResponseText(pszResponse);
+        case UINetworkRequestType_HEAD:
+        {
+            /* Perform blocking HTTP HEAD request: */
+            void   *pvResponse = 0;
+            size_t  cbResponse = 0;
+            rc = RTHttpGetHeaderBinary(m_hHttp, m_url.toString().toUtf8().constData(), &pvResponse, &cbResponse);
+            if (RT_SUCCESS(rc))
+            {
+                m_reply = QByteArray((char*)pvResponse, (int)cbResponse);
+                RTHttpFreeResponse(pvResponse);
+            }
+
+            /* Paranoia: */
+            m_headers.clear();
+
+            /* Parse header contents: */
+            const QString strHeaders = QString(m_reply);
+            const QStringList headers = strHeaders.split("\n", QString::SkipEmptyParts);
+            foreach (const QString &strHeader, headers)
+            {
+                const QStringList values = strHeader.split(": ", QString::SkipEmptyParts);
+                if (values.size() > 1)
+                    m_headers[values.at(0)] = values.at(1);
+            }
+
+            break;
+        }
+        case UINetworkRequestType_GET:
+        {
+            /* Perform blocking HTTP GET request: */
+            void   *pvResponse = 0;
+            size_t  cbResponse = 0;
+            rc = RTHttpGetBinary(m_hHttp, m_url.toString().toUtf8().constData(), &pvResponse, &cbResponse);
+            if (RT_SUCCESS(rc))
+            {
+                m_reply = QByteArray((char*)pvResponse, (int)cbResponse);
+                RTHttpFreeResponse(pvResponse);
+            }
+
+            break;
+        }
+        default:
+            break;
     }
 
+    /* Return result: */
     return rc;
 }
 
@@ -369,49 +578,65 @@ void UINetworkReplyPrivateThread::run()
     /* Init: */
     RTR3InitExeNoArguments(RTR3INIT_FLAGS_SUPLIB); /** @todo r=bird: WTF? */
 
-    /* Create HTTP object: */
+    /* Create HTTP client: */
+    m_iError = RTHttpCreate(&m_hHttp);
     if (RT_SUCCESS(m_iError))
-        m_iError = RTHttpCreate(&m_hHttp);
+    {
+        /* Apply configuration: */
+        if (RT_SUCCESS(m_iError))
+            m_iError = applyConfiguration();
 
-    /* Apply proxy-rules: */
-    if (RT_SUCCESS(m_iError))
-        m_iError = applyProxyRules();
+        /* Apply proxy-rules: */
+        if (RT_SUCCESS(m_iError))
+            m_iError = applyProxyRules();
 
-    /* Apply https-certificates: */
-    if (RT_SUCCESS(m_iError))
-        m_iError = applyHttpsCertificates();
+        /* Apply https-certificates: */
+        if (RT_SUCCESS(m_iError))
+            m_iError = applyHttpsCertificates();
 
-    /* Assign raw-headers: */
-    if (RT_SUCCESS(m_iError))
-        m_iError = applyRawHeaders();
+        /* Assign raw-headers: */
+        if (RT_SUCCESS(m_iError))
+            m_iError = applyRawHeaders();
 
-    /* Perform main request: */
-    if (RT_SUCCESS(m_iError))
-        m_iError = performMainRequest();
+        /* Perform main request: */
+        if (RT_SUCCESS(m_iError))
+            m_iError = performMainRequest();
 
-    /* Destroy HTTP client instance: */
-    RTHTTP hHttp = m_hHttp;
-    if (hHttp != NIL_RTHTTP)
-    {
-        /** @todo r=bird: There is a race here between this and abort()! */
-        m_hHttp = NIL_RTHTTP;
-        RTHttpDestroy(hHttp);
+        /* Destroy HTTP client: */
+        RTHTTP hHttp = m_hHttp;
+        if (hHttp != NIL_RTHTTP)
+        {
+            /** @todo r=bird: There is a race here between this and abort()! */
+            m_hHttp = NIL_RTHTTP;
+            RTHttpDestroy(hHttp);
+        }
     }
 }
 
+void UINetworkReplyPrivateThread::handleProgressChange(uint64_t cbDownloadTotal, uint64_t cbDownloaded)
+{
+#ifndef VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS
+    /* Notify listeners about progress change: */
+    emit sigDownloadProgress(cbDownloaded, cbDownloadTotal);
+#else /* VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS */
+    Q_UNUSED(cbDownloaded);
+    Q_UNUSED(cbDownloadTotal);
+#endif /* VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS */
+}
+
 /* static */
 QString UINetworkReplyPrivateThread::fullCertificateFileName()
 {
 #ifndef VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS
     const QDir homeDir(QDir::toNativeSeparators(vboxGlobal().homeFolder()));
     return QDir::toNativeSeparators(homeDir.absoluteFilePath(s_strCertificateFileName));
-#else
+#else /* VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS */
     return QString("/not/such/agency/non-existing-file.cer");
-#endif
+#endif /* VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS */
 }
 
 /* static */
-int UINetworkReplyPrivateThread::applyRawHeaders(RTHTTP hHttp, const QList<QByteArray> &headers, const QNetworkRequest &request)
+int UINetworkReplyPrivateThread::applyRawHeaders(RTHTTP hHttp, const UserDictionary &headers)
 {
     /* Make sure HTTP is created: */
     if (hHttp == NIL_RTHTTP)
@@ -420,10 +645,10 @@ int UINetworkReplyPrivateThread::applyRawHeaders(RTHTTP hHttp, const QList<QByte
     /* We should format them first: */
     QVector<QByteArray> formattedHeaders;
     QVector<const char*> formattedHeaderPointers;
-    foreach (const QByteArray &header, headers)
+    foreach (const QString &header, headers.keys())
     {
         /* Prepare formatted representation: */
-        QString strFormattedString = QString("%1: %2").arg(QString(header), QString(request.rawHeader(header)));
+        QString strFormattedString = QString("%1: %2").arg(header, headers.value(header));
         formattedHeaders << strFormattedString.toAscii();
         formattedHeaderPointers << formattedHeaders.last().constData();
     }
@@ -433,15 +658,8 @@ int UINetworkReplyPrivateThread::applyRawHeaders(RTHTTP hHttp, const QList<QByte
     return RTHttpSetHeaders(hHttp, formattedHeaderPointers.size(), ppFormattedHeaders);
 }
 
-/**
- * Counts the number of certificates found in a search result array.
- *
- * @returns Number of wanted certifcates we've found.
- * @param   pafFoundCerts       Array parallel to s_aCerts with the status of
- *                              each wanted certificate.
- */
-/*static*/ unsigned
-UINetworkReplyPrivateThread::countCertsFound(bool const *pafFoundCerts)
+/* static */
+unsigned UINetworkReplyPrivateThread::countCertsFound(bool const *pafFoundCerts)
 {
     unsigned cFound = 0;
     for (uint32_t i = 0; i < RT_ELEMENTS(s_aCerts); i++)
@@ -449,15 +667,8 @@ UINetworkReplyPrivateThread::countCertsFound(bool const *pafFoundCerts)
     return cFound;
 }
 
-/**
- * Checks if we've found all the necessary certificates or not.
- *
- * @returns true if we have, false if we haven't.
- * @param   pafFoundCerts       Array parallel to s_aCerts with the status of
- *                              each wanted certificate.
- */
-/*static*/ bool
-UINetworkReplyPrivateThread::areAllCertsFound(bool const *pafFoundCerts)
+/* static */
+bool UINetworkReplyPrivateThread::areAllCertsFound(bool const *pafFoundCerts)
 {
     for (uint32_t i = 0; i < RT_ELEMENTS(s_aCerts); i++)
         if (!pafFoundCerts[i])
@@ -465,28 +676,9 @@ UINetworkReplyPrivateThread::areAllCertsFound(bool const *pafFoundCerts)
     return true;
 }
 
-/**
- * Refresh the certificates.
- *
- * @return  IPRT status code for the testcase.
- * @param   hHttp               The HTTP client instance.  (Can be NIL when
- *                              running the testcase.)
- * @param   phStore             On input, this holds the current store, so that
- *                              we can fish out wanted certificates from it.
- *                              On successful return, this is replaced with a
- *                              new store reflecting the refrehsed content of
- *                              @a pszCaCertFile.
- * @param   pafFoundCerts       On input, this holds the certificates found in
- *                              the current store.  On return, this reflects
- *                              what is current in the @a pszCaCertFile.  The
- *                              array runs parallel to s_aCerts.
- * @param   pszCaCertFile       Where to write the refreshed certificates if
- *                              we've managed to gather a collection that is at
- *                              least as good as the old one.
- */
-/*static*/ int
-UINetworkReplyPrivateThread::refreshCertificates(RTHTTP hHttp, PRTCRSTORE phStore, bool *pafFoundCerts,
-                                                 const char *pszCaCertFile)
+/* static */
+int UINetworkReplyPrivateThread::refreshCertificates(RTHTTP hHttp, PRTCRSTORE phStore, bool *pafFoundCerts,
+                                                     const char *pszCaCertFile)
 {
     /*
      * Collect the standard assortment of SSL certificates.
@@ -580,9 +772,9 @@ UINetworkReplyPrivateThread::refreshCertificates(RTHTTP hHttp, PRTCRSTORE phStor
     return rc;
 }
 
-/*static*/ void
-UINetworkReplyPrivateThread::downloadMissingCertificates(RTCRSTORE hNewStore, bool *pafNewFoundCerts, RTHTTP hHttp,
-                                                         PRTERRINFOSTATIC pStaticErrInfo)
+/* static */
+void UINetworkReplyPrivateThread::downloadMissingCertificates(RTCRSTORE hNewStore, bool *pafNewFoundCerts, RTHTTP hHttp,
+                                                              PRTERRINFOSTATIC pStaticErrInfo)
 {
     int rc;
 
@@ -655,21 +847,10 @@ UINetworkReplyPrivateThread::downloadMissingCertificates(RTCRSTORE hNewStore, bo
         }
 }
 
-/**
- * Converts a PEM certificate, verifies it against @a pCertInfo and adds it to
- * the given store.
- *
- * @returns IPRT status code.
- * @param   hStore              The store to add it to.
- * @param   pvResponse          The raw PEM certificate file bytes.
- * @param   cbResponse          The number of bytes.
- * @param   pWantedCert         The certificate info (we use hashes and encoded
- *                              size).
- */
-/*static*/ int
-UINetworkReplyPrivateThread::convertVerifyAndAddPemCertificateToStore(RTCRSTORE hStore,
-                                                                      void const *pvResponse, size_t cbResponse,
-                                                                      PCRTCRCERTWANTED pWantedCert)
+/* static */
+int UINetworkReplyPrivateThread::convertVerifyAndAddPemCertificateToStore(RTCRSTORE hStore,
+                                                                          void const *pvResponse, size_t cbResponse,
+                                                                          PCRTCRCERTWANTED pWantedCert)
 {
     /*
      * Convert the PEM certificate to its binary form so we can hash it.
@@ -721,141 +902,98 @@ UINetworkReplyPrivateThread::convertVerifyAndAddPemCertificateToStore(RTCRSTORE
     return rc;
 }
 
-#ifndef VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS
-
-/**
- * Our network-reply (HTTP) object.
- */
-class UINetworkReplyPrivate : public QObject
+/* static */
+DECLCALLBACK(void) UINetworkReplyPrivateThread::handleProgressChange(RTHTTP hHttp, void *pvUser, uint64_t cbDownloadTotal, uint64_t cbDownloaded)
 {
-    Q_OBJECT;
-
-signals:
-
-    /* Notifiers: */
-    void downloadProgress(qint64 iBytesReceived, qint64 iBytesTotal);
-    void finished();
+    /* Redirect callback to particular object: */
+    Q_UNUSED(hHttp);
+    AssertPtrReturnVoid(pvUser);
+    static_cast<UINetworkReplyPrivateThread*>(pvUser)->handleProgressChange(cbDownloadTotal, cbDownloaded);
+}
 
-public:
 
-    /* Constructor: */
-    UINetworkReplyPrivate(const QNetworkRequest &request)
-        : m_error(QNetworkReply::NoError)
-        , m_pThread(0)
-    {
-        /* Prepare full error template: */
-        m_strErrorTemplate = tr("%1: %2", "Context description: Error description");
-        /* Create and run network-reply thread: */
-        m_pThread = new UINetworkReplyPrivateThread(request);
-        connect(m_pThread, SIGNAL(finished()), this, SLOT(sltFinished()));
-        m_pThread->start();
-    }
+#ifndef VBOX_GUI_IN_TST_SSL_CERT_DOWNLOADS
 
-    /* Destructor: */
-    ~UINetworkReplyPrivate()
-    {
-        /* Terminate network-reply thread: */
-        m_pThread->abort();
-        m_pThread->wait();
-        delete m_pThread;
-        m_pThread = 0;
-    }
+/*********************************************************************************************************************************
+*   Class UINetworkReplyPrivate implementation.                                                                                  *
+*********************************************************************************************************************************/
 
-    /* API: Abort reply: */
-    void abort()
-    {
-        m_pThread->abort();
-    }
+UINetworkReplyPrivate::UINetworkReplyPrivate(UINetworkRequestType type, const QUrl &url, const UserDictionary &requestHeaders)
+    : m_error(UINetworkReply::NoError)
+    , m_pThread(0)
+{
+    /* Prepare full error template: */
+    m_strErrorTemplate = tr("%1: %2", "Context description: Error description");
+
+    /* 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()));
+    m_pThread->start();
+}
 
-    /* API: Error-code getter: */
-    QNetworkReply::NetworkError error() const { return m_error; }
+UINetworkReplyPrivate::~UINetworkReplyPrivate()
+{
+    /* Terminate network-reply thread: */
+    m_pThread->abort();
+    m_pThread->wait();
+    delete m_pThread;
+    m_pThread = 0;
+}
 
-    /* API: Error-string getter: */
-    QString errorString() const
+QString UINetworkReplyPrivate::errorString() const
+{
+    /* Look for known error codes: */
+    switch (m_error)
     {
-        switch (m_error)
-        {
-            case QNetworkReply::NoError:                     break;
-            case QNetworkReply::RemoteHostClosedError:       return m_strErrorTemplate.arg(m_pThread->context(), tr("Unable to initialize HTTP library"));
-            case QNetworkReply::HostNotFoundError:           return m_strErrorTemplate.arg(m_pThread->context(), tr("Host not found"));
-            case QNetworkReply::ContentAccessDenied:         return m_strErrorTemplate.arg(m_pThread->context(), tr("Content access denied"));
-            case QNetworkReply::ProtocolFailure:             return m_strErrorTemplate.arg(m_pThread->context(), tr("Protocol failure"));
-            case QNetworkReply::ConnectionRefusedError:      return m_strErrorTemplate.arg(m_pThread->context(), tr("Connection refused"));
-            case QNetworkReply::SslHandshakeFailedError:     return m_strErrorTemplate.arg(m_pThread->context(), tr("SSL authentication failed"));
-            case QNetworkReply::AuthenticationRequiredError: return m_strErrorTemplate.arg(m_pThread->context(), tr("Wrong SSL certificate format"));
-            case QNetworkReply::ContentReSendError:          return m_strErrorTemplate.arg(m_pThread->context(), tr("Content moved"));
-            case QNetworkReply::ProxyNotFoundError:          return m_strErrorTemplate.arg(m_pThread->context(), tr("Proxy not found"));
-            default:                                         return m_strErrorTemplate.arg(m_pThread->context(), tr("Unknown reason"));
-        }
-        return QString();
+        case UINetworkReply::NoError:                     break;
+        case UINetworkReply::RemoteHostClosedError:       return m_strErrorTemplate.arg(m_pThread->context(), tr("Unable to initialize HTTP library"));
+        case UINetworkReply::HostNotFoundError:           return m_strErrorTemplate.arg(m_pThread->context(), tr("Host not found"));
+        case UINetworkReply::ContentAccessDenied:         return m_strErrorTemplate.arg(m_pThread->context(), tr("Content access denied"));
+        case UINetworkReply::ProtocolFailure:             return m_strErrorTemplate.arg(m_pThread->context(), tr("Protocol failure"));
+        case UINetworkReply::ConnectionRefusedError:      return m_strErrorTemplate.arg(m_pThread->context(), tr("Connection refused"));
+        case UINetworkReply::SslHandshakeFailedError:     return m_strErrorTemplate.arg(m_pThread->context(), tr("SSL authentication failed"));
+        case UINetworkReply::AuthenticationRequiredError: return m_strErrorTemplate.arg(m_pThread->context(), tr("Wrong SSL certificate format"));
+        case UINetworkReply::ContentReSendError:          return m_strErrorTemplate.arg(m_pThread->context(), tr("Content moved"));
+        case UINetworkReply::ProxyNotFoundError:          return m_strErrorTemplate.arg(m_pThread->context(), tr("Proxy not found"));
+        default:                                          return m_strErrorTemplate.arg(m_pThread->context(), tr("Unknown reason"));
     }
+    /* Return null-string by default: */
+    return QString();
+}
 
-    /* API: Reply getter: */
-    QByteArray readAll() { return m_pThread->readAll(); }
-
-private slots:
-
-    /* Handler: Thread finished: */
-    void sltFinished()
+void UINetworkReplyPrivate::sltFinished()
+{
+    /* Look for known error codes: */
+    switch (m_pThread->error())
     {
-        switch (m_pThread->error())
-        {
-            case VINF_SUCCESS:                         m_error = QNetworkReply::NoError; break;
-            case VERR_HTTP_INIT_FAILED:                m_error = QNetworkReply::RemoteHostClosedError; break;
-            case VERR_HTTP_NOT_FOUND:                  m_error = QNetworkReply::HostNotFoundError; break;
-            case VERR_HTTP_ACCESS_DENIED:              m_error = QNetworkReply::ContentAccessDenied; break;
-            case VERR_HTTP_BAD_REQUEST:                m_error = QNetworkReply::ProtocolFailure; break;
-            case VERR_HTTP_COULDNT_CONNECT:            m_error = QNetworkReply::ConnectionRefusedError; break;
-            case VERR_HTTP_SSL_CONNECT_ERROR:          m_error = QNetworkReply::SslHandshakeFailedError; break;
-            case VERR_HTTP_CACERT_WRONG_FORMAT:        m_error = QNetworkReply::AuthenticationRequiredError; break;
-            case VERR_HTTP_CACERT_CANNOT_AUTHENTICATE: m_error = QNetworkReply::AuthenticationRequiredError; break;
-            case VERR_HTTP_ABORTED:                    m_error = QNetworkReply::OperationCanceledError; break;
-            case VERR_HTTP_REDIRECTED:                 m_error = QNetworkReply::ContentReSendError; break;
-            case VERR_HTTP_PROXY_NOT_FOUND:            m_error = QNetworkReply::ProxyNotFoundError; break;
-            default:                                   m_error = QNetworkReply::UnknownNetworkError; break;
-        }
-        emit finished();
+        case VINF_SUCCESS:                         m_error = UINetworkReply::NoError; break;
+        case VERR_HTTP_INIT_FAILED:                m_error = UINetworkReply::RemoteHostClosedError; break;
+        case VERR_HTTP_NOT_FOUND:                  m_error = UINetworkReply::HostNotFoundError; break;
+        case VERR_HTTP_ACCESS_DENIED:              m_error = UINetworkReply::ContentAccessDenied; break;
+        case VERR_HTTP_BAD_REQUEST:                m_error = UINetworkReply::ProtocolFailure; break;
+        case VERR_HTTP_COULDNT_CONNECT:            m_error = UINetworkReply::ConnectionRefusedError; break;
+        case VERR_HTTP_SSL_CONNECT_ERROR:          m_error = UINetworkReply::SslHandshakeFailedError; break;
+        case VERR_HTTP_CACERT_WRONG_FORMAT:        m_error = UINetworkReply::AuthenticationRequiredError; break;
+        case VERR_HTTP_CACERT_CANNOT_AUTHENTICATE: m_error = UINetworkReply::AuthenticationRequiredError; break;
+        case VERR_HTTP_ABORTED:                    m_error = UINetworkReply::OperationCanceledError; break;
+        case VERR_HTTP_REDIRECTED:                 m_error = UINetworkReply::ContentReSendError; break;
+        case VERR_HTTP_PROXY_NOT_FOUND:            m_error = UINetworkReply::ProxyNotFoundError; break;
+        default:                                   m_error = UINetworkReply::UnknownNetworkError; break;
     }
-
-private:
-
-    /** Holds full error template in "Context description: Error description" form. */
-    QString m_strErrorTemplate;
-
-    /* Variables: */
-    QNetworkReply::NetworkError m_error;
-    UINetworkReplyPrivateThread *m_pThread;
-};
+    /* Redirect signal to external listeners: */
+    emit finished();
+}
 
 
 /*********************************************************************************************************************************
 *   Class UINetworkReply implementation.                                                                                         *
 *********************************************************************************************************************************/
 
-UINetworkReply::UINetworkReply(const QNetworkRequest &request, UINetworkRequestType requestType)
-    : m_replyType(UINetworkReplyType_Qt)
-    , m_pReply(0)
+UINetworkReply::UINetworkReply(UINetworkRequestType type, const QUrl &url, const UserDictionary &requestHeaders)
+    : m_pReply(new UINetworkReplyPrivate(type, url, requestHeaders))
 {
-    /* Create network-reply object: */
-    switch (requestType)
-    {
-        /* Prepare Qt network-reply (HEAD): */
-        case UINetworkRequestType_HEAD:
-            m_replyType = UINetworkReplyType_Qt;
-            m_pReply = gNetworkManager->head(request);
-            break;
-        /* Prepare Qt network-reply (GET): */
-        case UINetworkRequestType_GET:
-            m_replyType = UINetworkReplyType_Qt;
-            m_pReply = gNetworkManager->get(request);
-            break;
-        /* Prepare our network-reply (GET): */
-        case UINetworkRequestType_GET_Our:
-            m_replyType = UINetworkReplyType_Our;
-            m_pReply = new UINetworkReplyPrivate(request);
-            break;
-    }
-
     /* 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()));
@@ -871,79 +1009,39 @@ UINetworkReply::~UINetworkReply()
     }
 }
 
-QVariant UINetworkReply::header(QNetworkRequest::KnownHeaders header) const
+void UINetworkReply::abort()
 {
-    QVariant result;
-    switch (m_replyType)
-    {
-        case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->header(header); break;
-        case UINetworkReplyType_Our: /* TODO: header() */ break;
-    }
-    return result;
+    return m_pReply->abort();
 }
 
-QVariant UINetworkReply::attribute(QNetworkRequest::Attribute code) const
+QUrl UINetworkReply::url() const
 {
-    QVariant result;
-    switch (m_replyType)
-    {
-        case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->attribute(code); break;
-        case UINetworkReplyType_Our: /* TODO: attribute() */ break;
-    }
-    return result;
+    return m_pReply->url();
 }
 
-void UINetworkReply::abort()
+UINetworkReply::NetworkError UINetworkReply::error() const
 {
-    switch (m_replyType)
-    {
-        case UINetworkReplyType_Qt: qobject_cast<QNetworkReply*>(m_pReply)->abort(); break;
-        case UINetworkReplyType_Our: qobject_cast<UINetworkReplyPrivate*>(m_pReply)->abort(); break;
-    }
+    return m_pReply->error();
 }
 
-QNetworkReply::NetworkError UINetworkReply::error() const
+QString UINetworkReply::errorString() const
 {
-    QNetworkReply::NetworkError result = QNetworkReply::NoError;
-    switch (m_replyType)
-    {
-        case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->error(); break;
-        case UINetworkReplyType_Our: result = qobject_cast<UINetworkReplyPrivate*>(m_pReply)->error(); break;
-    }
-    return result;
+    return m_pReply->errorString();
 }
 
-QString UINetworkReply::errorString() const
+QByteArray UINetworkReply::readAll() const
 {
-    QString strResult;
-    switch (m_replyType)
-    {
-        case UINetworkReplyType_Qt: strResult = qobject_cast<QNetworkReply*>(m_pReply)->errorString(); break;
-        case UINetworkReplyType_Our: strResult = qobject_cast<UINetworkReplyPrivate*>(m_pReply)->errorString(); break;
-    }
-    return strResult;
+    return m_pReply->readAll();
 }
 
-QByteArray UINetworkReply::readAll()
+QVariant UINetworkReply::header(UINetworkReply::KnownHeader header) const
 {
-    QByteArray result;
-    switch (m_replyType)
-    {
-        case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->readAll(); break;
-        case UINetworkReplyType_Our: result = qobject_cast<UINetworkReplyPrivate*>(m_pReply)->readAll(); break;
-    }
-    return result;
+    return m_pReply->header(header);
 }
 
-QUrl UINetworkReply::url() const
+QVariant UINetworkReply::attribute(UINetworkReply::KnownAttribute code) const
 {
-    QUrl result;
-    switch (m_replyType)
-    {
-        case UINetworkReplyType_Qt: result = qobject_cast<QNetworkReply*>(m_pReply)->url(); break;
-        case UINetworkReplyType_Our: /* TODO: url() */ break;
-    }
-    return result;
+    return m_pReply->attribute(code);
 }
 
 #include "UINetworkReply.moc"
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkReply.h
index 4375c8c..ddfabc2 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-2013 Oracle Corporation
+ * Copyright (C) 2012-2015 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -15,47 +15,102 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-#ifndef __UINetworkReply_h__
-#define __UINetworkReply_h__
+#ifndef ___UINetworkReply_h___
+#define ___UINetworkReply_h___
 
 /* Qt includes: */
 #include <QPointer>
-#include <QNetworkReply>
+#include <QUrl>
 
 /* GUI includes: */
 #include "UINetworkDefs.h"
 
-/* Network-reply interface: */
+/* Forward declarations: */
+class UINetworkReplyPrivate;
+
+/** QObject extension
+  * used as network-reply interface. */
 class UINetworkReply : public QObject
 {
     Q_OBJECT;
 
 signals:
 
-    /* Notifiers: */
+    /** Notifies listeners about reply progress change.
+      * @param  iBytesReceived  Holds the current amount of bytes received.
+      * @param  iBytesTotal     Holds the total amount of bytes to be received. */
     void downloadProgress(qint64 iBytesReceived, qint64 iBytesTotal);
+
+    /** Notifies listeners about reply has finished processing. */
     void finished();
 
 public:
 
-    /* Constructor/destructor: */
-    UINetworkReply(const QNetworkRequest &request, UINetworkRequestType requestType);
+    /** Known error codes.
+      * Came from QtNetwork module.
+      * More to go on demand when necessary. */
+    enum NetworkError
+    {
+        NoError,
+        ConnectionRefusedError,
+        RemoteHostClosedError,
+        HostNotFoundError,
+        OperationCanceledError,
+        SslHandshakeFailedError,
+        ProxyNotFoundError,
+        ContentAccessDenied,
+        AuthenticationRequiredError,
+        ContentReSendError,
+        UnknownNetworkError,
+        ProtocolFailure,
+    };
+
+    /** Known header types.
+      * Came from QtNetwork module.
+      * More to go on demand when necessary. */
+    enum KnownHeader
+    {
+        ContentTypeHeader,
+        ContentLengthHeader,
+        LastModifiedHeader,
+    };
+
+    /** Known attribute types.
+      * Came from QtNetwork module.
+      * More to go on demand when necessary. */
+    enum KnownAttribute
+    {
+        RedirectionTargetAttribute,
+    };
+
+    /** Constructs network-reply of the passed @a type for the passed @a url and @a requestHeaders. */
+    UINetworkReply(UINetworkRequestType type, const QUrl &url, const UserDictionary &requestHeaders);
+    /** Destructs reply. */
     ~UINetworkReply();
 
-    /* API: */
-    QVariant header(QNetworkRequest::KnownHeaders header) const;
-    QVariant attribute(QNetworkRequest::Attribute code) const;
+    /** Aborts reply. */
     void abort();
-    QNetworkReply::NetworkError error() const;
-    QString errorString() const;
-    QByteArray readAll();
+
+    /** Returns the URL of the reply. */
     QUrl url() const;
 
+    /** Returns the last cached error of the reply. */
+    NetworkError error() const;
+    /** Returns the user-oriented string corresponding to the last cached error of the reply. */
+    QString errorString() const;
+
+    /** Returns binary content of the reply. */
+    QByteArray readAll() const;
+    /** Returns value for the cached reply header of the passed @a type. */
+    QVariant header(UINetworkReply::KnownHeader header) const;
+    /** Returns value for the cached reply attribute of the passed @a code. */
+    QVariant attribute(UINetworkReply::KnownAttribute code) const;
+
 private:
 
-    /* Variables: */
-    UINetworkReplyType m_replyType;
-    QPointer<QObject> m_pReply;
+    /** Holds the reply private data instance. */
+    UINetworkReplyPrivate *m_pReply;
 };
 
-#endif // __UINetworkReply_h__
+#endif /* !___UINetworkReply_h___ */
+
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp
index 4a8c713..38cfe60 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.cpp
@@ -1,10 +1,10 @@
 /* $Id: UINetworkRequest.cpp $ */
 /** @file
- * VBox Qt GUI - UINetworkRequest stuff implementation.
+ * VBox Qt GUI - UINetworkRequest class implementation.
  */
 
 /*
- * Copyright (C) 2011-2012 Oracle Corporation
+ * Copyright (C) 2011-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;
@@ -19,9 +19,6 @@
 # include <precomp.h>
 #else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
-/* Qt includes: */
-# include <QNetworkReply>
-
 /* GUI includes: */
 # include "UINetworkRequest.h"
 # include "UINetworkRequestWidget.h"
@@ -33,69 +30,47 @@
 
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
-
-/* Constructor: */
-UINetworkRequest::UINetworkRequest(const QNetworkRequest &request, UINetworkRequestType type, const QString &strDescription,
+UINetworkRequest::UINetworkRequest(UINetworkRequestType type,
+                                   const QList<QUrl> &urls,
+                                   const UserDictionary &requestHeaders,
                                    UINetworkCustomer *pCustomer,
                                    UINetworkManager *pNetworkManager)
     : QObject(pNetworkManager)
-    , m_uuid(QUuid::createUuid())
-    , m_requests(QList<QNetworkRequest>() << request)
-    , m_iCurrentRequestIndex(0)
     , m_type(type)
-    , m_strDescription(strDescription)
+    , m_urls(urls)
+    , m_requestHeaders(requestHeaders)
     , m_pCustomer(pCustomer)
-    , m_fRunning(false)
-{
-    /* Initialize: */
-    initialize();
-}
-
-UINetworkRequest::UINetworkRequest(const QList<QNetworkRequest> &requests, UINetworkRequestType type, const QString &strDescription,
-                                   UINetworkCustomer *pCustomer,
-                                   UINetworkManager *pNetworkManager)
-    : QObject(pNetworkManager)
+    , m_pNetworkManager(pNetworkManager)
     , m_uuid(QUuid::createUuid())
-    , m_requests(requests)
-    , m_iCurrentRequestIndex(0)
-    , m_type(type)
-    , m_strDescription(strDescription)
-    , m_pCustomer(pCustomer)
+    , m_iUrlIndex(-1)
     , m_fRunning(false)
 {
-    /* Initialize: */
-    initialize();
+    /* Prepare: */
+    prepare();
 }
 
-/* Destructor: */
 UINetworkRequest::~UINetworkRequest()
 {
-    /* Destroy network-reply: */
-    cleanupNetworkReply();
-
-    /* Unregister network-request from network-manager: */
-    manager()->unregisterNetworkRequest(m_uuid);
+    /* Cleanup: */
+    cleanup();
 }
 
-UINetworkManager* UINetworkRequest::manager() const
+const QString UINetworkRequest::description() const
 {
-    AssertPtrReturn(parent(), 0);
-    return qobject_cast<UINetworkManager*>(parent());
+    return m_pCustomer->description();
 }
 
-/* Network-reply progress handler: */
 void UINetworkRequest::sltHandleNetworkReplyProgress(qint64 iReceived, qint64 iTotal)
 {
-    /* Notify general network-requests listeners: */
+    /* Notify common network-request listeners: */
     emit sigProgress(m_uuid, iReceived, iTotal);
-    /* Notify particular network-request listeners: */
+    /* Notify own network-request listeners: */
     emit sigProgress(iReceived, iTotal);
 }
 
-/* Network-reply finish handler: */
 void UINetworkRequest::sltHandleNetworkReplyFinish()
 {
-    /* Set as non-running: */
+    /* Mark network-reply as non-running: */
     m_fRunning = false;
 
     /* Make sure network-reply still valid: */
@@ -103,138 +78,139 @@ void UINetworkRequest::sltHandleNetworkReplyFinish()
         return;
 
     /* If network-request was canceled: */
-    if (m_pReply->error() == QNetworkReply::OperationCanceledError)
+    if (m_pReply->error() == UINetworkReply::OperationCanceledError)
     {
         /* Notify network-manager: */
         emit sigCanceled(m_uuid);
     }
     /* If network-reply has no errors: */
-    else if (m_pReply->error() == QNetworkReply::NoError)
+    else if (m_pReply->error() == UINetworkReply::NoError)
     {
         /* Check if redirection required: */
-        QUrl redirect = m_pReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
+        QUrl redirect = m_pReply->attribute(UINetworkReply::RedirectionTargetAttribute).toUrl();
         if (redirect.isValid())
         {
             /* Cleanup current network-reply first: */
             cleanupNetworkReply();
 
-            /* Choose redirect-source as current: */
-            m_request.setUrl(redirect);
+            /* Choose redirect-source as current url: */
+            m_url = redirect;
 
             /* Create new network-reply finally: */
             prepareNetworkReply();
         }
         else
         {
-            /* Notify particular network-request listeners: */
+            /* Notify own network-request listeners: */
             emit sigFinished();
-            /* Notify general network-requests listeners: */
+            /* Notify common network-request listeners: */
             emit sigFinished(m_uuid);
         }
     }
     /* If some error occured: */
     else
     {
-        /* Check if we have other requests in set: */
-        if (m_iCurrentRequestIndex < m_requests.size() - 1)
+        /* Check if we have other urls in queue: */
+        if (m_iUrlIndex < m_urls.size() - 1)
         {
             /* Cleanup current network-reply first: */
             cleanupNetworkReply();
 
-            /* Choose next network-request as current: */
-            ++m_iCurrentRequestIndex;
-            m_request = m_requests[m_iCurrentRequestIndex];
+            /* Choose next url as current: */
+            ++m_iUrlIndex;
+            m_url = m_urls.at(m_iUrlIndex);
 
             /* Create new network-reply finally: */
             prepareNetworkReply();
         }
         else
         {
-            /* Notify particular network-request listeners: */
+            /* Notify own network-request listeners: */
             emit sigFailed(m_pReply->errorString());
-            /* Notify general network-requests listeners: */
+            /* Notify common network-request listeners: */
             emit sigFailed(m_uuid, m_pReply->errorString());
         }
     }
 }
 
-/* Slot to retry network-request: */
 void UINetworkRequest::sltRetry()
 {
     /* Cleanup current network-reply first: */
     cleanupNetworkReply();
 
-    /* Choose first network-request as current: */
-    m_iCurrentRequestIndex = 0;
-    m_request = m_requests[m_iCurrentRequestIndex];
+    /* Choose first url as current: */
+    m_iUrlIndex = 0;
+    m_url = m_urls.at(m_iUrlIndex);
 
     /* Create new network-reply finally: */
     prepareNetworkReply();
 }
 
-/* Slot to cancel network-request: */
 void UINetworkRequest::sltCancel()
 {
     /* Abort network-reply if present: */
-    abortNetworkReply();
+    if (m_pReply)
+    {
+        if (m_fRunning)
+            m_pReply->abort();
+        else
+            emit sigCanceled(m_uuid);
+    }
 }
 
-/* Initialize: */
-void UINetworkRequest::initialize()
+void UINetworkRequest::prepare()
 {
-    /* Prepare listeners for parent(): */
-    connect(parent(), SIGNAL(sigCancelNetworkRequests()), this, SLOT(sltCancel()), Qt::QueuedConnection);
+    /* Prepare listeners for network-manager: */
+    connect(manager(), SIGNAL(sigCancelNetworkRequests()),
+            this, SLOT(sltCancel()), Qt::QueuedConnection);
+
+    /* Choose first url as current: */
+    m_iUrlIndex = 0;
+    m_url = m_urls.at(m_iUrlIndex);
 
     /* Register network-request in network-manager: */
     manager()->registerNetworkRequest(this);
 
-    /* Choose first network-request as current: */
-    m_iCurrentRequestIndex = 0;
-    m_request = m_requests[m_iCurrentRequestIndex];
-
-    /* Create network-reply: */
+    /* Prepare network-reply: */
     prepareNetworkReply();
 }
 
-/* Prepare network-reply: */
 void UINetworkRequest::prepareNetworkReply()
 {
-    /* Make network-request: */
-    m_pReply = new UINetworkReply(m_request, m_type);
-    AssertMsg(m_pReply, ("Unable to make network-request!\n"));
-    /* Prepare listeners for m_pReply: */
-    connect(m_pReply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(sltHandleNetworkReplyProgress(qint64, qint64)));
-    connect(m_pReply, SIGNAL(finished()), this, SLOT(sltHandleNetworkReplyFinish()));
-
-    /* Set as running: */
-    m_fRunning = true;
-
-    /* Notify general network-requests listeners: */
-    emit sigStarted(m_uuid);
-    /* Notify particular network-request listeners: */
-    emit sigStarted();
+    /* Create network-reply: */
+    m_pReply = new UINetworkReply(m_type, m_url, m_requestHeaders);
+    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()));
+
+        /* Mark network-reply as running: */
+        m_fRunning = true;
+
+        /* Notify common network-request listeners: */
+        emit sigStarted(m_uuid);
+        /* Notify own network-request listeners: */
+        emit sigStarted();
+    }
 }
 
-/* Cleanup network-reply: */
 void UINetworkRequest::cleanupNetworkReply()
 {
-    /* Destroy current reply: */
-    AssertMsg(m_pReply, ("Network-reply already destroyed!\n"));
+    /* Destroy network-reply: */
+    AssertPtrReturnVoid(m_pReply.data());
     m_pReply->disconnect();
     m_pReply->deleteLater();
     m_pReply = 0;
 }
 
-/* Abort network-reply: */
-void UINetworkRequest::abortNetworkReply()
+void UINetworkRequest::cleanup()
 {
-    /* Abort network-reply if present: */
-    if (m_pReply)
-    {
-        if (m_fRunning)
-            m_pReply->abort();
-        else
-            emit sigCanceled(m_uuid);
-    }
+    /* Cleanup network-reply: */
+    cleanupNetworkReply();
+
+    /* Unregister network-request from network-manager: */
+    manager()->unregisterNetworkRequest(m_uuid);
 }
 
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h
index 101d3dd..fbc1290 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequest.h
@@ -1,10 +1,10 @@
 /* $Id: UINetworkRequest.h $ */
 /** @file
- * VBox Qt GUI - UINetworkRequest stuff declaration.
+ * VBox Qt GUI - UINetworkRequest class declaration.
  */
 
 /*
- * Copyright (C) 2011-2012 Oracle Corporation
+ * Copyright (C) 2011-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;
@@ -15,12 +15,11 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-#ifndef __UINetworkRequest_h__
-#define __UINetworkRequest_h__
+#ifndef ___UINetworkRequest_h___
+#define ___UINetworkRequest_h___
 
 /* Qt includes: */
 #include <QUuid>
-#include <QNetworkRequest>
 #include <QPointer>
 
 /* GUI inludes: */
@@ -34,79 +33,110 @@ class UINetworkManagerIndicator;
 class UINetworkRequestWidget;
 class UINetworkCustomer;
 
-/* Network-request contianer: */
+/** QObject extension used as network-request container. */
 class UINetworkRequest : public QObject
 {
     Q_OBJECT;
 
 signals:
 
-    /* Notifications to UINetworkManager: */
+    /** Notifies common UINetworkManager about progress with @a uuid changed.
+      * @param  iReceived  Holds the amount of bytes received.
+      * @param  iTotal     Holds the amount of total bytes to receive. */
     void sigProgress(const QUuid &uuid, qint64 iReceived, qint64 iTotal);
+    /** Notifies UINetworkManager about progress with @a uuid started. */
     void sigStarted(const QUuid &uuid);
+    /** Notifies UINetworkManager about progress with @a uuid canceled. */
     void sigCanceled(const QUuid &uuid);
+    /** Notifies UINetworkManager about progress with @a uuid finished. */
     void sigFinished(const QUuid &uuid);
+    /** Notifies UINetworkManager about progress with @a uuid failed with @a strError. */
     void sigFailed(const QUuid &uuid, const QString &strError);
 
-    /* Notifications to UINetworkRequestWidget: */
+    /** Notifies own UINetworkRequestWidget about progress changed.
+      * @param  iReceived  Holds the amount of bytes received.
+      * @param  iTotal     Holds the amount of total bytes to receive. */
     void sigProgress(qint64 iReceived, qint64 iTotal);
+    /** Notifies own UINetworkRequestWidget about progress started. */
     void sigStarted();
+    /** Notifies own UINetworkRequestWidget about progress finished. */
     void sigFinished();
+    /** Notifies own UINetworkRequestWidget about progress failed with @a strError. */
     void sigFailed(const QString &strError);
 
 public:
 
-    /* Constructor/destructor: */
-    UINetworkRequest(const QNetworkRequest &request, UINetworkRequestType type, const QString &strDescription,
-                     UINetworkCustomer *pCustomer,
-                     UINetworkManager *pNetworkManager);
-    UINetworkRequest(const QList<QNetworkRequest> &requests, UINetworkRequestType type, const QString &strDescription,
+    /** Constructs network-request of the passed @a type
+      * on the basis of the passed @a urls and the @a requestHeaders
+      * for the @a pCustomer and @a pNetworkManager specified. */
+    UINetworkRequest(UINetworkRequestType type,
+                     const QList<QUrl> &urls,
+                     const UserDictionary &requestHeaders,
                      UINetworkCustomer *pCustomer,
                      UINetworkManager *pNetworkManager);
+    /** Destructs network-request. */
     ~UINetworkRequest();
 
-    /** Returns parent network-manager. */
-    UINetworkManager* manager() const;
-    /* Getters: */
-    const QUuid& uuid() const { return m_uuid; }
-    const QString& description() const { return m_strDescription; }
+    /** Returns the request description. */
+    const QString description() const;
+    /** Returns the request customer. */
     UINetworkCustomer* customer() { return m_pCustomer; }
+    /** Returns the request manager. */
+    UINetworkManager* manager() const { return m_pNetworkManager; }
+    /** Returns unique request QUuid. */
+    const QUuid& uuid() const { return m_uuid; }
+    /** Returns the request reply. */
     UINetworkReply* reply() { return m_pReply; }
 
 private slots:
 
-    /* Network-reply progress handler: */
+    /** Handles reply about progress changed.
+      * @param  iReceived  Brings the amount of bytes received.
+      * @param  iTotal     Brings the amount of total bytes to receive. */
     void sltHandleNetworkReplyProgress(qint64 iReceived, qint64 iTotal);
-    /* Network-reply finish handler: */
+    /** Handles reply about progress finished. */
     void sltHandleNetworkReplyFinish();
 
-    /* Slot to retry network-request: */
+    /** Initiates request retrying. */
     void sltRetry();
-    /* Slot to cancel network-request: */
+    /** Initiates request cancelling. */
     void sltCancel();
 
 private:
 
-    /* Initialize: */
-    void initialize();
-
-    /* Prepare network-reply: */
+    /** Prepares request. */
+    void prepare();
+    /** Prepares request's reply. */
     void prepareNetworkReply();
-    /* Cleanup network-reply: */
+
+    /** Cleanups request's reply. */
     void cleanupNetworkReply();
-    /* Abort network-reply: */
-    void abortNetworkReply();
-
-    /* Variables: */
-    QUuid m_uuid;
-    QList<QNetworkRequest> m_requests;
-    QNetworkRequest m_request;
-    int m_iCurrentRequestIndex;
-    UINetworkRequestType m_type;
-    QString m_strDescription;
+    /** Cleanups request. */
+    void cleanup();
+
+    /** Holds the request type. */
+    const UINetworkRequestType m_type;
+    /** Holds the request urls. */
+    const QList<QUrl> m_urls;
+    /** Holds the request headers. */
+    const UserDictionary m_requestHeaders;
+    /** Holds the request customer. */
     UINetworkCustomer *m_pCustomer;
-    QPointer<UINetworkReply> m_pReply;
+    /** Holds the request manager. */
+    UINetworkManager *m_pNetworkManager;
+    /** Holds unique request QUuid. */
+    const QUuid m_uuid;
+
+    /** Holds current request url. */
+    QUrl m_url;
+    /** Holds index of current request url. */
+    int m_iUrlIndex;
+    /** Holds whether current request url is in progress. */
     bool m_fRunning;
+
+    /** Holds the request reply. */
+    QPointer<UINetworkReply> m_pReply;
 };
 
-#endif // __UINetworkRequest_h__
+#endif /* !___UINetworkRequest_h___ */
+
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.cpp b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.cpp
index 3de2ef3..f59df89 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.cpp
@@ -164,28 +164,9 @@ void UINetworkRequestWidget::sltSetProgressToFailed(const QString &strError)
     /* Show 'retry' button: */
     m_pRetryButton->setHidden(false);
 
-    /* Try to find all the links in the error-message,
-     * replace them with %increment if present: */
-    QString strErrorText(strError);
-    QRegExp linkRegExp("[\\S]+[\\./][\\S]+");
-    QStringList links;
-    for (int i = 1; linkRegExp.indexIn(strErrorText) != -1; ++i)
-    {
-        links << linkRegExp.cap();
-        strErrorText.replace(linkRegExp.cap(), QString("%%1").arg(i));
-    }
-    /* Return back all the links, just in bold: */
-    if (!links.isEmpty())
-        for (int i = 0; i < links.size(); ++i)
-            strErrorText = strErrorText.arg(QString("<b>%1</b>").arg(links[i]));
-
-    // @todo: NLS: Embed <br> directly into error header text.
-    /* Prepend the error-message with <br> symbol: */
-    strErrorText.prepend("<br>");
-
     /* Show error label: */
     m_pErrorPane->setHidden(false);
-    m_pErrorPane->setText(UINetworkManagerDialog::tr("The network operation failed with the following error: %1.").arg(strErrorText));
+    m_pErrorPane->setText(composeErrorText(strError));
 }
 
 void UINetworkRequestWidget::sltTimeIsOut()
@@ -210,4 +191,38 @@ void UINetworkRequestWidget::retranslateUi()
 
     /* Translate cancel button: */
     m_pCancelButton->setStatusTip(UINetworkManagerDialog::tr("Cancel network operation"));
+
+    /* Translate error label: */
+    if (m_pNetworkRequest->reply())
+        m_pErrorPane->setText(composeErrorText(m_pNetworkRequest->reply()->errorString()));
+}
+
+/* static */
+const QString UINetworkRequestWidget::composeErrorText(QString strErrorText)
+{
+    /* Null-string for null-string: */
+    if (strErrorText.isEmpty())
+        return QString();
+
+    /* Try to find all the links in the error-message,
+     * replace them with %increment if present: */
+    QRegExp linkRegExp("[\\S]+[\\./][\\S]+");
+    QStringList links;
+    for (int i = 1; linkRegExp.indexIn(strErrorText) != -1; ++i)
+    {
+        links << linkRegExp.cap();
+        strErrorText.replace(linkRegExp.cap(), QString("%%1").arg(i));
+    }
+    /* Return back all the links, just in bold: */
+    if (!links.isEmpty())
+        for (int i = 0; i < links.size(); ++i)
+            strErrorText = strErrorText.arg(QString("<b>%1</b>").arg(links[i]));
+
+    // @todo: NLS: Embed <br> directly into error header text.
+    /* Prepend the error-message with <br> symbol: */
+    strErrorText.prepend("<br>");
+
+    /* Return final result: */
+    return UINetworkManagerDialog::tr("The network operation failed with the following error: %1.").arg(strErrorText);
 }
+
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.h b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.h
index c16216c..7c24f37 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.h
+++ b/src/VBox/Frontends/VirtualBox/src/net/UINetworkRequestWidget.h
@@ -71,6 +71,9 @@ private:
     /* Translation stuff: */
     void retranslateUi();
 
+    /** Composes error text on the basis of the passed @a strErrorText. */
+    static const QString composeErrorText(QString strErrorText);
+
     /* Widgets: */
     QWidget *m_pContentWidget;
     QGridLayout *m_pMainLayout;
diff --git a/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp b/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp
index ed945c3..3914ca6 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/UIUpdateManager.cpp
@@ -163,6 +163,12 @@ private slots:
 
 private:
 
+    /** Returns description of the current network operation. */
+    virtual const QString description() const
+    {
+        return tr("Checking for a new VirtualBox version...");
+    }
+
     /* Prepare network request: */
     void prepareNetworkRequest()
     {
@@ -189,10 +195,9 @@ private:
         QString strUserAgent(QString("VirtualBox %1 <%2>").arg(vboxGlobal().virtualBox().GetVersion()).arg(platformInfo()));
 
         /* Send GET request: */
-        QNetworkRequest request;
-        request.setUrl(url);
-        request.setRawHeader("User-Agent", strUserAgent.toAscii());
-        createNetworkRequest(request, UINetworkRequestType_GET_Our, tr("Checking for a new VirtualBox version..."));
+        UserDictionary headers;
+        headers["User-Agent"] = strUserAgent;
+        createNetworkRequest(UINetworkRequestType_GET, QList<QUrl>() << url, headers);
     }
 
     /* Handle network reply canceled: */
diff --git a/src/VBox/Frontends/VirtualBox/src/net/tstSSLCertDownloads.cpp b/src/VBox/Frontends/VirtualBox/src/net/tstSSLCertDownloads.cpp
index 63a4339..c47c1f5 100644
--- a/src/VBox/Frontends/VirtualBox/src/net/tstSSLCertDownloads.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/net/tstSSLCertDownloads.cpp
@@ -43,8 +43,9 @@
 
 /*static*/ void UINetworkReplyPrivateThread::testIt(RTTEST hTest)
 {
-    QNetworkRequest Dummy;
-    UINetworkReplyPrivateThread TestObj(Dummy);
+    QUrl Dummy1;
+    UserDictionary Dummy2;
+    UINetworkReplyPrivateThread TestObj(UINetworkRequestType_GET, Dummy1, Dummy2);
 
     /*
      * Do the first setup things that UINetworkReplyPrivateThread::run.
diff --git a/src/VBox/Frontends/VirtualBox/src/precomp.h b/src/VBox/Frontends/VirtualBox/src/precomp.h
index d777862..24efbff 100644
--- a/src/VBox/Frontends/VirtualBox/src/precomp.h
+++ b/src/VBox/Frontends/VirtualBox/src/precomp.h
@@ -85,7 +85,6 @@
 #include <QHash>
 #include <QHeaderView>
 #include <QHelpEvent>
-//#include <QHostAddress> - only used once
 #include <QIcon>
 #include <QImage>
 //#include <QImageWriter> - only used once
@@ -119,10 +118,6 @@
 #include <QMouseEvent>
 //#include <QMouseEventTransition> - only used once
 #include <QMutex>
-#include <QNetworkAccessManager>
-//#include <QNetworkProxy> - only used once
-#include <QNetworkReply>
-#include <QNetworkRequest>
 #include <QObject>
 #include <QPaintEvent>
 #include <QPainter>
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
index fe4e39c..efa4113 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
@@ -558,6 +558,11 @@ HRESULT UIFrameBufferPrivate::init(UIMachineView *pMachineView)
     /* Cache window ID: */
     m_iWinId = (m_pMachineView && m_pMachineView->viewport()) ? (LONG64)m_pMachineView->viewport()->winId() : 0;
 
+#ifdef Q_WS_X11
+    /* Sync Qt and X11 Server (see xTracker #7547). */
+    XSync(QX11Info::display(), false);
+#endif
+
     /* Assign display: */
     m_display = m_pMachineView->uisession()->display();
 
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
index 1f9d281..10aa0a1 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
@@ -1221,7 +1221,7 @@ void UIMachineLogic::prepareDock()
 
     /* Now the dock icon preview */
     QString osTypeId = guest().GetOSTypeId();
-    m_pDockIconPreview = new UIDockIconPreview(uisession(), vboxGlobal().vmGuestOSTypeIcon(osTypeId));
+    m_pDockIconPreview = new UIDockIconPreview(uisession(), vboxGlobal().vmGuestOSTypePixmapHiDPI(osTypeId, QSize(42, 42)));
 
     /* Should the dock-icon be updated at runtime? */
     bool fEnabled = gEDataManager->realtimeDockIconUpdateEnabled(vboxGlobal().managedVMUuid());
@@ -1645,10 +1645,24 @@ void UIMachineLogic::sltTakeScreenshot()
     if (!isMachineWindowsCreated())
         return;
 
+    /* Formatting default filename for screenshot. VM folder is the default directory to save: */
+    const QFileInfo fi(machine().GetSettingsFilePath());
+    const QString strCurrentTime = QDateTime::currentDateTime().toString("dd_MM_yyyy_hh_mm_ss");
+    const QString strFormatDefaultFileName = QString("VirtualBox").append("_").append(machine().GetName()).append("_").append(strCurrentTime);
+    const QString strDefaultFileName = QDir(fi.absolutePath()).absoluteFilePath(strFormatDefaultFileName);
+
+    /* Formatting temporary filename for screenshot. It is saved in system temporary directory if available, else in VM folder: */
+    QString strTempFile = QDir(fi.absolutePath()).absoluteFilePath("temp").append("_").append(strCurrentTime).append(".png");
+    if (QDir::temp().exists())
+        strTempFile = QDir::temp().absoluteFilePath("temp").append("_").append(strCurrentTime).append(".png");
+
+    /* Do the screenshot: */
+    takeScreenshot(strTempFile, "png");
+
     /* Which image formats for writing does this Qt version know of? */
     QList<QByteArray> formats = QImageWriter::supportedImageFormats();
     QStringList filters;
-    /* Build a filters list out of it. */
+    /* Build a filters list out of it: */
     for (int i = 0; i < formats.size(); ++i)
     {
         const QString &s = formats.at(i) + " (*." + formats.at(i).toLower() + ")";
@@ -1656,7 +1670,7 @@ void UIMachineLogic::sltTakeScreenshot()
         if (filters.indexOf(QRegExp(QRegExp::escape(s), Qt::CaseInsensitive)) == -1)
             filters << s;
     }
-    /* Try to select some common defaults. */
+    /* Try to select some common defaults: */
     QString strFilter;
     int i = filters.indexOf(QRegExp(".*png.*", Qt::CaseInsensitive));
     if (i == -1)
@@ -1680,18 +1694,14 @@ void UIMachineLogic::sltTakeScreenshot()
         activeMachineWindow()->machineView()->clearFocus();
 #endif /* Q_WS_WIN */
 
-    /* Request the filename from the user. */
-    QFileInfo fi(machine().GetSettingsFilePath());
-    QString strAbsolutePath(fi.absolutePath());
-    QString strCompleteBaseName(fi.completeBaseName());
-    QString strStart = QDir(strAbsolutePath).absoluteFilePath(strCompleteBaseName);
-    QString strFilename = QIFileDialog::getSaveFileName(strStart,
-                                                        filters.join(";;"),
-                                                        activeMachineWindow(),
-                                                        tr("Select a filename for the screenshot ..."),
-                                                        &strFilter,
-                                                        true /* resolve symlinks */,
-                                                        true /* confirm overwrite */);
+    /* Request the filename from the user: */
+    const QString strFilename = QIFileDialog::getSaveFileName(strDefaultFileName,
+                                                              filters.join(";;"),
+                                                              activeMachineWindow(),
+                                                              tr("Select a filename for the screenshot ..."),
+                                                              &strFilter,
+                                                              true /* resolve symlinks */,
+                                                              true /* confirm overwrite */);
 
 #ifdef Q_WS_WIN
     /* Due to Qt bug, modal QFileDialog appeared above the active machine-window
@@ -1703,9 +1713,26 @@ void UIMachineLogic::sltTakeScreenshot()
         activeMachineWindow()->machineView()->setFocus();
 #endif /* Q_WS_WIN */
 
-    /* Do the screenshot. */
     if (!strFilename.isEmpty())
-        takeScreenshot(strFilename, strFilter.split(" ").value(0, "png"));
+    {
+        const QString strFormat = strFilter.split(" ").value(0, "png");
+        const QImage tmpImage(strTempFile);
+
+        /* On X11 Qt Filedialog returns the filepath without the filetype suffix, so adding it ourselves: */
+#ifdef Q_WS_X11
+        /* Add filetype suffix only if user has not added it explicitly: */
+        if (!strFilename.endsWith(QString(".%1").arg(strFormat)))
+            tmpImage.save(QDir::toNativeSeparators(QFile::encodeName(QString("%1.%2").arg(strFilename, strFormat))),
+                          strFormat.toAscii().constData());
+        else
+            tmpImage.save(QDir::toNativeSeparators(QFile::encodeName(strFilename)),
+                          strFormat.toAscii().constData());
+#else /* !Q_WS_X11 */
+        tmpImage.save(QDir::toNativeSeparators(QFile::encodeName(strFilename)),
+                      strFormat.toAscii().constData());
+#endif /* !Q_WS_X11 */
+    }
+    QFile::remove(strTempFile);
 }
 
 void UIMachineLogic::sltOpenVideoCaptureOptions()
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp
index f541814..95a577b 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UIActionPoolSelector.cpp
@@ -670,7 +670,9 @@ class UIActionToggleCommonPauseAndResume : public UIActionToggle
 public:
 
     UIActionToggleCommonPauseAndResume(UIActionPool *pParent)
-        : UIActionToggle(pParent, ":/vm_pause_16px.png", ":/vm_pause_disabled_16px.png") {}
+        : UIActionToggle(pParent,
+                         ":/vm_pause_on_16px.png", ":/vm_pause_16px.png",
+                         ":/vm_pause_on_disabled_16px.png", ":/vm_pause_disabled_16px.png") {}
 
 protected:
 
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
index 4c186fd..3f51d2b 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
@@ -1808,12 +1808,20 @@ void UISelectorWindow::updateActionsAppearance()
     UIVMItem *pFirstStartedAction = 0;
     foreach (UIVMItem *pSelectedItem, items)
         if (UIVMItem::isItemStarted(pSelectedItem))
+        {
             pFirstStartedAction = pSelectedItem;
-    /* Update the Pause/Resume action appearance: */
+            break;
+        }
+    /* Update the group Pause/Resume action appearance: */
     actionPool()->action(UIActionIndexST_M_Group_T_Pause)->blockSignals(true);
     actionPool()->action(UIActionIndexST_M_Group_T_Pause)->setChecked(pFirstStartedAction && UIVMItem::isItemPaused(pFirstStartedAction));
     actionPool()->action(UIActionIndexST_M_Group_T_Pause)->retranslateUi();
     actionPool()->action(UIActionIndexST_M_Group_T_Pause)->blockSignals(false);
+    /* Update the machine Pause/Resume action appearance: */
+    actionPool()->action(UIActionIndexST_M_Machine_T_Pause)->blockSignals(true);
+    actionPool()->action(UIActionIndexST_M_Machine_T_Pause)->setChecked(pFirstStartedAction && UIVMItem::isItemPaused(pFirstStartedAction));
+    actionPool()->action(UIActionIndexST_M_Machine_T_Pause)->retranslateUi();
+    actionPool()->action(UIActionIndexST_M_Machine_T_Pause)->blockSignals(false);
 
 #ifdef QT_MAC_USE_COCOA
     /* Avoid bug in Qt Cocoa which results in showing a "more arrow" on size-hint changes: */
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp
index 4e5cb9f..f9a474d 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp
@@ -40,8 +40,6 @@
 
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
-#include <QHostAddress>
-
 #include "CDHCPServer.h"
 
 
@@ -244,25 +242,25 @@ bool UIItemNetworkHost::validate(UIValidationMessage &message)
     /* Host interface validation: */
     if (!m_data.m_interface.m_fDhcpClientEnabled)
     {
-        if (m_data.m_interface.m_strInterfaceAddress.isEmpty() &&
-            (QHostAddress(m_data.m_interface.m_strInterfaceAddress) == QHostAddress::Any ||
-             QHostAddress(m_data.m_interface.m_strInterfaceAddress).protocol() != QAbstractSocket::IPv4Protocol))
+        if (!m_data.m_interface.m_strInterfaceAddress.trimmed().isEmpty() &&
+            (   !RTNetIsIPv4AddrStr(m_data.m_interface.m_strInterfaceAddress.toAscii().constData())
+             || RTNetStrIsIPv4AddrAny(m_data.m_interface.m_strInterfaceAddress.toAscii().constData())))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid IPv4 address.").arg(text(0));
             fPass = false;
         }
-        if (!m_data.m_interface.m_strInterfaceMask.isEmpty() &&
-            (QHostAddress(m_data.m_interface.m_strInterfaceMask) == QHostAddress::Any ||
-             QHostAddress(m_data.m_interface.m_strInterfaceMask).protocol() != QAbstractSocket::IPv4Protocol))
+        if (!m_data.m_interface.m_strInterfaceMask.trimmed().isEmpty() &&
+            (   !RTNetIsIPv4AddrStr(m_data.m_interface.m_strInterfaceMask.toAscii().constData())
+             || RTNetStrIsIPv4AddrAny(m_data.m_interface.m_strInterfaceMask.toAscii().constData())))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid IPv4 network mask.").arg(text(0));
             fPass = false;
         }
         if (m_data.m_interface.m_fIpv6Supported)
         {
-            if (!m_data.m_interface.m_strInterfaceAddress6.isEmpty() &&
-                (QHostAddress(m_data.m_interface.m_strInterfaceAddress6) == QHostAddress::AnyIPv6 ||
-                 QHostAddress(m_data.m_interface.m_strInterfaceAddress6).protocol() != QAbstractSocket::IPv6Protocol))
+            if (!m_data.m_interface.m_strInterfaceAddress6.trimmed().isEmpty() &&
+                (   !RTNetIsIPv6AddrStr(m_data.m_interface.m_strInterfaceAddress6.toAscii().constData())
+                 || RTNetStrIsIPv6AddrAny(m_data.m_interface.m_strInterfaceAddress6.toAscii().constData())))
             {
                 message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid IPv6 address.").arg(text(0));
                 fPass = false;
@@ -273,26 +271,26 @@ bool UIItemNetworkHost::validate(UIValidationMessage &message)
     /* DHCP server validation: */
     if (m_data.m_dhcpserver.m_fDhcpServerEnabled)
     {
-        if (QHostAddress(m_data.m_dhcpserver.m_strDhcpServerAddress) == QHostAddress::Any ||
-            QHostAddress(m_data.m_dhcpserver.m_strDhcpServerAddress).protocol() != QAbstractSocket::IPv4Protocol)
+        if (   !RTNetIsIPv4AddrStr(m_data.m_dhcpserver.m_strDhcpServerAddress.toAscii().constData())
+            || RTNetStrIsIPv4AddrAny(m_data.m_dhcpserver.m_strDhcpServerAddress.toAscii().constData()))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid DHCP server address.").arg(text(0));
             fPass = false;
         }
-        if (QHostAddress(m_data.m_dhcpserver.m_strDhcpServerMask) == QHostAddress::Any ||
-            QHostAddress(m_data.m_dhcpserver.m_strDhcpServerMask).protocol() != QAbstractSocket::IPv4Protocol)
+        if (   !RTNetIsIPv4AddrStr(m_data.m_dhcpserver.m_strDhcpServerMask.toAscii().constData())
+            || RTNetStrIsIPv4AddrAny(m_data.m_dhcpserver.m_strDhcpServerMask.toAscii().constData()))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid DHCP server mask.").arg(text(0));
             fPass = false;
         }
-        if (QHostAddress(m_data.m_dhcpserver.m_strDhcpLowerAddress) == QHostAddress::Any ||
-            QHostAddress(m_data.m_dhcpserver.m_strDhcpLowerAddress).protocol() != QAbstractSocket::IPv4Protocol)
+        if (   !RTNetIsIPv4AddrStr(m_data.m_dhcpserver.m_strDhcpLowerAddress.toAscii().constData())
+            || RTNetStrIsIPv4AddrAny(m_data.m_dhcpserver.m_strDhcpLowerAddress.toAscii().constData()))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid DHCP server lower address bound.").arg(text(0));
             fPass = false;
         }
-        if (QHostAddress(m_data.m_dhcpserver.m_strDhcpUpperAddress) == QHostAddress::Any ||
-            QHostAddress(m_data.m_dhcpserver.m_strDhcpUpperAddress).protocol() != QAbstractSocket::IPv4Protocol)
+        if (   !RTNetIsIPv4AddrStr(m_data.m_dhcpserver.m_strDhcpUpperAddress.toAscii().constData())
+            || RTNetStrIsIPv4AddrAny(m_data.m_dhcpserver.m_strDhcpUpperAddress.toAscii().constData()))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid DHCP server upper address bound.").arg(text(0));
             fPass = false;
@@ -1100,19 +1098,25 @@ void UIGlobalSettingsNetwork::saveCacheItemNetworkHost(const UIDataNetworkHost &
     /* Manual host interface configuration: */
     else
     {
-        AssertMsg(data.m_interface.m_strInterfaceAddress.isEmpty() ||
-                  QHostAddress(data.m_interface.m_strInterfaceAddress).protocol() == QAbstractSocket::IPv4Protocol,
+        AssertMsg(data.m_interface.m_strInterfaceAddress.trimmed().isEmpty() ||
+                  RTNetIsIPv4AddrStr(data.m_interface.m_strInterfaceAddress.toAscii().constData()),
                   ("Interface IPv4 address must be empty or IPv4-valid!\n"));
-        AssertMsg(data.m_interface.m_strInterfaceMask.isEmpty() ||
-                  QHostAddress(data.m_interface.m_strInterfaceMask).protocol() == QAbstractSocket::IPv4Protocol,
+        AssertMsg(data.m_interface.m_strInterfaceMask.trimmed().isEmpty() ||
+                  RTNetIsIPv4AddrStr(data.m_interface.m_strInterfaceMask.toAscii().constData()),
                   ("Interface IPv4 network mask must be empty or IPv4-valid!\n"));
-        iface.EnableStaticIPConfig(data.m_interface.m_strInterfaceAddress, data.m_interface.m_strInterfaceMask);
+        if (   (   data.m_interface.m_strInterfaceAddress.trimmed().isEmpty()
+                || RTNetIsIPv4AddrStr(data.m_interface.m_strInterfaceAddress.toAscii().constData()))
+            && (   data.m_interface.m_strInterfaceMask.trimmed().isEmpty()
+                || RTNetIsIPv4AddrStr(data.m_interface.m_strInterfaceMask.toAscii().constData())))
+            iface.EnableStaticIPConfig(data.m_interface.m_strInterfaceAddress, data.m_interface.m_strInterfaceMask);
         if (iface.GetIPV6Supported())
         {
-            AssertMsg(data.m_interface.m_strInterfaceAddress6.isEmpty() ||
-                      QHostAddress(data.m_interface.m_strInterfaceAddress6).protocol() == QAbstractSocket::IPv6Protocol,
+            AssertMsg(data.m_interface.m_strInterfaceAddress6.trimmed().isEmpty() ||
+                      RTNetIsIPv6AddrStr(data.m_interface.m_strInterfaceAddress6.toAscii().constData()),
                       ("Interface IPv6 address must be empty or IPv6-valid!\n"));
-            iface.EnableStaticIPConfigV6(data.m_interface.m_strInterfaceAddress6, data.m_interface.m_strInterfaceMaskLength6.toULong());
+            if (   data.m_interface.m_strInterfaceAddress6.trimmed().isEmpty()
+                || RTNetIsIPv6AddrStr(data.m_interface.m_strInterfaceAddress6.toAscii().constData()))
+                iface.EnableStaticIPConfigV6(data.m_interface.m_strInterfaceAddress6, data.m_interface.m_strInterfaceMaskLength6.toULong());
         }
     }
 
@@ -1123,18 +1127,18 @@ void UIGlobalSettingsNetwork::saveCacheItemNetworkHost(const UIDataNetworkHost &
 
     /* Save DHCP server configuration: */
     dhcp.SetEnabled(data.m_dhcpserver.m_fDhcpServerEnabled);
-    AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpServerAddress).protocol() == QAbstractSocket::IPv4Protocol,
+    AssertMsg(RTNetIsIPv4AddrStr(data.m_dhcpserver.m_strDhcpServerAddress.toAscii().constData()),
               ("DHCP server IPv4 address must be IPv4-valid!\n"));
-    AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpServerMask).protocol() == QAbstractSocket::IPv4Protocol,
+    AssertMsg(RTNetIsIPv4AddrStr(data.m_dhcpserver.m_strDhcpServerMask.toAscii().constData()),
               ("DHCP server IPv4 network mask must be IPv4-valid!\n"));
-    AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpLowerAddress).protocol() == QAbstractSocket::IPv4Protocol,
+    AssertMsg(RTNetIsIPv4AddrStr(data.m_dhcpserver.m_strDhcpLowerAddress.toAscii().constData()),
               ("DHCP server IPv4 lower bound must be IPv4-valid!\n"));
-    AssertMsg(QHostAddress(data.m_dhcpserver.m_strDhcpUpperAddress).protocol() == QAbstractSocket::IPv4Protocol,
+    AssertMsg(RTNetIsIPv4AddrStr(data.m_dhcpserver.m_strDhcpUpperAddress.toAscii().constData()),
               ("DHCP server IPv4 upper bound must be IPv4-valid!\n"));
-    if (QHostAddress(data.m_dhcpserver.m_strDhcpServerAddress).protocol() == QAbstractSocket::IPv4Protocol &&
-        QHostAddress(data.m_dhcpserver.m_strDhcpServerMask).protocol() == QAbstractSocket::IPv4Protocol &&
-        QHostAddress(data.m_dhcpserver.m_strDhcpLowerAddress).protocol() == QAbstractSocket::IPv4Protocol &&
-        QHostAddress(data.m_dhcpserver.m_strDhcpUpperAddress).protocol() == QAbstractSocket::IPv4Protocol)
+    if (RTNetIsIPv4AddrStr(data.m_dhcpserver.m_strDhcpServerAddress.toAscii().constData()) &&
+        RTNetIsIPv4AddrStr(data.m_dhcpserver.m_strDhcpServerMask.toAscii().constData()) &&
+        RTNetIsIPv4AddrStr(data.m_dhcpserver.m_strDhcpLowerAddress.toAscii().constData()) &&
+        RTNetIsIPv4AddrStr(data.m_dhcpserver.m_strDhcpUpperAddress.toAscii().constData()))
         dhcp.SetConfiguration(data.m_dhcpserver.m_strDhcpServerAddress, data.m_dhcpserver.m_strDhcpServerMask,
                               data.m_dhcpserver.m_strDhcpLowerAddress, data.m_dhcpserver.m_strDhcpUpperAddress);
 }
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.cpp b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.cpp
index da75e7c..6306986 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.cpp
@@ -37,12 +37,16 @@ UIGlobalSettingsProxy::UIGlobalSettingsProxy()
     Ui::UIGlobalSettingsProxy::setupUi(this);
 
     /* Setup widgets: */
+    QButtonGroup *pButtonGroup = new QButtonGroup(this);
+    pButtonGroup->addButton(m_pRadioProxyAuto);
+    pButtonGroup->addButton(m_pRadioProxyDisabled);
+    pButtonGroup->addButton(m_pRadioProxyEnabled);
     m_pPortEditor->setFixedWidthByText(QString().fill('0', 6));
     m_pHostEditor->setValidator(new QRegExpValidator(QRegExp("\\S+"), m_pHostEditor));
     m_pPortEditor->setValidator(new QRegExpValidator(QRegExp("\\d+"), m_pPortEditor));
 
     /* Setup connections: */
-    connect(m_pCheckboxProxy, SIGNAL(toggled(bool)), this, SLOT(sltProxyToggled()));
+    connect(pButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(sltProxyToggled()));
     connect(m_pHostEditor, SIGNAL(textEdited(const QString&)), this, SLOT(revalidate()));
     connect(m_pPortEditor, SIGNAL(textEdited(const QString&)), this, SLOT(revalidate()));
 
@@ -59,7 +63,7 @@ void UIGlobalSettingsProxy::loadToCacheFrom(QVariant &data)
 
     /* Load to cache: */
     UIProxyManager proxyManager(m_settings.proxySettings());
-    m_cache.m_fProxyEnabled = proxyManager.proxyEnabled();
+    m_cache.m_enmProxyState = proxyManager.proxyState();
     m_cache.m_strProxyHost = proxyManager.proxyHost();
     m_cache.m_strProxyPort = proxyManager.proxyPort();
 
@@ -72,7 +76,12 @@ void UIGlobalSettingsProxy::loadToCacheFrom(QVariant &data)
 void UIGlobalSettingsProxy::getFromCache()
 {
     /* Fetch from cache: */
-    m_pCheckboxProxy->setChecked(m_cache.m_fProxyEnabled);
+    switch (m_cache.m_enmProxyState)
+    {
+        case UIProxyManager::ProxyState_Auto:     m_pRadioProxyAuto->setChecked(true); break;
+        case UIProxyManager::ProxyState_Disabled: m_pRadioProxyDisabled->setChecked(true); break;
+        case UIProxyManager::ProxyState_Enabled:  m_pRadioProxyEnabled->setChecked(true); break;
+    }
     m_pHostEditor->setText(m_cache.m_strProxyHost);
     m_pPortEditor->setText(m_cache.m_strProxyPort);
     sltProxyToggled();
@@ -86,7 +95,9 @@ void UIGlobalSettingsProxy::getFromCache()
 void UIGlobalSettingsProxy::putToCache()
 {
     /* Upload to cache: */
-    m_cache.m_fProxyEnabled = m_pCheckboxProxy->isChecked();
+    m_cache.m_enmProxyState = m_pRadioProxyEnabled->isChecked()  ? UIProxyManager::ProxyState_Enabled :
+                              m_pRadioProxyDisabled->isChecked() ? UIProxyManager::ProxyState_Disabled :
+                                                                   UIProxyManager::ProxyState_Auto;
     m_cache.m_strProxyHost = m_pHostEditor->text();
     m_cache.m_strProxyPort = m_pPortEditor->text();
 }
@@ -99,7 +110,7 @@ void UIGlobalSettingsProxy::saveFromCacheTo(QVariant &data)
     UISettingsPageGlobal::fetchData(data);
 
     UIProxyManager proxyManager;
-    proxyManager.setProxyEnabled(m_cache.m_fProxyEnabled);
+    proxyManager.setProxyState(m_cache.m_enmProxyState);
     proxyManager.setProxyHost(m_cache.m_strProxyHost);
     proxyManager.setProxyPort(m_cache.m_strProxyPort);
     m_settings.setProxySettings(proxyManager.toString());
@@ -111,7 +122,7 @@ void UIGlobalSettingsProxy::saveFromCacheTo(QVariant &data)
 bool UIGlobalSettingsProxy::validate(QList<UIValidationMessage> &messages)
 {
     /* Pass if proxy is disabled: */
-    if (!m_pCheckboxProxy->isChecked())
+    if (!m_pRadioProxyEnabled->isChecked())
         return true;
 
     /* Pass by default: */
@@ -145,8 +156,10 @@ bool UIGlobalSettingsProxy::validate(QList<UIValidationMessage> &messages)
 void UIGlobalSettingsProxy::setOrderAfter(QWidget *pWidget)
 {
     /* Configure navigation: */
-    setTabOrder(pWidget, m_pCheckboxProxy);
-    setTabOrder(m_pCheckboxProxy, m_pHostEditor);
+    setTabOrder(pWidget, m_pRadioProxyAuto);
+    setTabOrder(m_pRadioProxyAuto, m_pRadioProxyDisabled);
+    setTabOrder(m_pRadioProxyDisabled, m_pRadioProxyEnabled);
+    setTabOrder(m_pRadioProxyEnabled, m_pHostEditor);
     setTabOrder(m_pHostEditor, m_pPortEditor);
 }
 
@@ -159,7 +172,7 @@ void UIGlobalSettingsProxy::retranslateUi()
 void UIGlobalSettingsProxy::sltProxyToggled()
 {
     /* Update widgets availability: */
-    m_pContainerProxy->setEnabled(m_pCheckboxProxy->isChecked());
+    m_pContainerProxy->setEnabled(m_pRadioProxyEnabled->isChecked());
 
     /* Revalidate: */
     revalidate();
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.h b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.h
index ef072ba..5912726 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.h
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.h
@@ -19,6 +19,7 @@
 #define __UIGlobalSettingsProxy_h__
 
 /* Local includes */
+#include "VBoxUtils.h"
 #include "UISettingsPage.h"
 #include "UIGlobalSettingsProxy.gen.h"
 
@@ -26,9 +27,9 @@
 struct UISettingsCacheGlobalProxy
 {
     UISettingsCacheGlobalProxy()
-        : m_fProxyEnabled(false)
+        : m_enmProxyState(UIProxyManager::ProxyState_Auto)
     {}
-    bool m_fProxyEnabled;
+    UIProxyManager::ProxyState m_enmProxyState;
     QString m_strProxyHost;
     QString m_strProxyPort;
 };
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.ui b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.ui
index 078fa18..f923309 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.ui
+++ b/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsProxy.ui
@@ -19,16 +19,36 @@
     <number>0</number>
    </property>
    <item row="0" column="0" colspan="2">
-    <widget class="QCheckBox" name="m_pCheckboxProxy">
+    <widget class="QRadioButton" name="m_pRadioProxyAuto">
      <property name="whatsThis">
-      <string>When checked, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</string>
+      <string>When chosen, VirtualBox will try to auto-detect host proxy settings for tasks like downloading Guest Additions from the network or checking for updates.</string>
      </property>
      <property name="text">
-      <string>&Enable Proxy</string>
+      <string>&Auto-detect Host Proxy Settings</string>
      </property>
     </widget>
    </item>
-   <item row="1" column="0">
+   <item row="1" column="0" colspan="2">
+    <widget class="QRadioButton" name="m_pRadioProxyDisabled">
+     <property name="whatsThis">
+      <string>When chosen, VirtualBox will use direct Internet connection for tasks like downloading Guest Additions from the network or checking for updates.</string>
+     </property>
+     <property name="text">
+      <string>&Direct Connection to the Internet</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="QRadioButton" name="m_pRadioProxyEnabled">
+     <property name="whatsThis">
+      <string>When chosen, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</string>
+     </property>
+     <property name="text">
+      <string>&Manual Proxy Configuration</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0">
     <spacer>
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
@@ -44,7 +64,7 @@
      </property>
     </spacer>
    </item>
-   <item row="1" column="1" colspan="2">
+   <item row="3" column="1">
     <widget class="QWidget" name="m_pContainerProxy">
      <property name="sizePolicy">
       <sizepolicy vsizetype="Minimum" hsizetype="MinimumExpanding">
@@ -99,7 +119,7 @@
      </layout>
     </widget>
    </item>
-   <item row="2" column="0" colspan="3">
+   <item row="4" column="0" colspan="2">
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
diff --git a/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp b/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
index bbe4ccf..5ce2ba3 100644
--- a/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
@@ -29,7 +29,6 @@
 # include <QComboBox>
 # include <QLineEdit>
 # include <QSpinBox>
-# include <QHostAddress>
 
 /* GUI includes: */
 # include "UIPortForwardingTable.h"
@@ -727,10 +726,14 @@ bool UIPortForwardingTable::validate() const
         if (hostPort.value() == 0 || guestPort.value() == 0)
             return msgCenter().warnAboutIncorrectPort(window());
         /* If at aleast one address is incorrect: */
-        if (   (!hostIp.isEmpty() && QHostAddress(hostIp).isNull())
-            || (!guestIp.isEmpty() && QHostAddress(guestIp).isNull()))
+        if (!hostIp.trimmed().isEmpty() &&
+            (   !RTNetIsIPv4AddrStr(hostIp.toAscii().constData())
+             || RTNetStrIsIPv4AddrAny(hostIp.toAscii().constData())))
+            return msgCenter().warnAboutIncorrectAddress(window());
+        if (!guestIp.trimmed().isEmpty() &&
+            (   !RTNetIsIPv4AddrStr(guestIp.toAscii().constData())
+             || RTNetStrIsIPv4AddrAny(guestIp.toAscii().constData())))
             return msgCenter().warnAboutIncorrectAddress(window());
-
         /* If empty guest address is not allowed: */
         if (   !m_fAllowEmptyGuestIPs
             && guestIp.isEmpty())
diff --git a/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp b/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp
index 07e7a25..36d66d7 100644
--- a/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp
+++ b/src/VBox/GuestHost/HGSMI/HGSMICommon.cpp
@@ -352,7 +352,7 @@ HGSMICHANNEL *HGSMIChannelFindById(HGSMICHANNELINFO *pChannelInfo,
 
 /** Process a guest buffer.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param pArea        Area which supposed to contain the buffer.
  * @param pChannelInfo The channel pool.
  * @param offBuffer    The buffer location in the area.
@@ -397,7 +397,7 @@ int HGSMIBufferProcess(const HGSMIAREA *pArea,
 
 /** Register a new HGSMI channel by index.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param pChannelInfo      The channel pool managed by the caller.
  * @param u8Channel         Index of the channel.
  * @param pszName           Name of the channel (optional, allocated by the caller).
diff --git a/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp b/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp
index ecff728..5dc1844 100644
--- a/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrv-dtrace.cpp
@@ -1045,8 +1045,6 @@ static SUPDRVTRACERREG g_VBoxDTraceReg =
 
 /**
  * Module initialization code.
- *
- * @param   hMod            Opque module handle.
  */
 const SUPDRVTRACERREG * VBOXCALL supdrvDTraceInit(void)
 {
diff --git a/src/VBox/HostDrivers/Support/SUPDrv.cpp b/src/VBox/HostDrivers/Support/SUPDrv.cpp
index 371f0b4..cee36ca 100644
--- a/src/VBox/HostDrivers/Support/SUPDrv.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrv.cpp
@@ -2397,6 +2397,7 @@ static int supdrvIOCtlInnerRestricted(uintptr_t uIOCtl, PSUPDRVDEVEXT pDevExt, P
  * @param   pDevExt     Device extention.
  * @param   pSession    Session data.
  * @param   pReqHdr     The request header.
+ * @param   cbReq       The size of the request buffer.
  */
 int VBOXCALL supdrvIOCtl(uintptr_t uIOCtl, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPREQHDR pReqHdr, size_t cbReq)
 {
@@ -2619,6 +2620,8 @@ int VBOXCALL supdrvIDC(uintptr_t uReq, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSe
  * @returns Unique identifier on success (pointer).
  *          All future reference must use this identifier.
  * @returns NULL on failure.
+ * @param   pSession        The caller's session.
+ * @param   enmType         The object type.
  * @param   pfnDestructor   The destructore function which will be called when the reference count reaches 0.
  * @param   pvUser1         The first user argument.
  * @param   pvUser2         The second user argument.
@@ -3380,7 +3383,7 @@ SUPR0DECL(int) SUPR0MemFree(PSUPDRVSESSION pSession, RTHCUINTPTR uPtr)
  * @param   fFlags      Flags, reserved for the future. Must be zero.
  * @param   ppvR3       Where to store the address of the Ring-3 mapping.
  *                      NULL if no ring-3 mapping.
- * @param   ppvR3       Where to store the address of the Ring-0 mapping.
+ * @param   ppvR0       Where to store the address of the Ring-0 mapping.
  *                      NULL if no ring-0 mapping.
  * @param   paPages     Where to store the addresses of the pages. Optional.
  */
@@ -3645,7 +3648,7 @@ SUPR0DECL(int) SUPR0PageFree(PSUPDRVSESSION pSession, RTR3PTR pvR3)
 /**
  * Reports a bad context, currenctly that means EFLAGS.AC is 0 instead of 1.
  *
- * @param   pSession        The session of the caller.
+ * @param   pDevExt         The device extension.
  * @param   pszFile         The source file where the caller detected the bad
  *                          context.
  * @param   uLine           The line number in @a pszFile.
@@ -3868,14 +3871,14 @@ SUPR0DECL(void) SUPR0ResumeVTxOnCpu(bool fSuspended)
  * Checks if Intel VT-x feature is usable on this CPU.
  *
  * @returns VBox status code.
- * @param   fIsSmxModeAmbiguous   Where to write whether the SMX mode causes
+ * @param   pfIsSmxModeAmbiguous  Where to return whether the SMX mode causes
  *                                ambiguity that makes us unsure whether we
  *                                really can use VT-x or not.
  *
  * @remarks Must be called with preemption disabled.
  *          The caller is also expected to check that the CPU is an Intel (or
  *          VIA) CPU -and- that it supports VT-x.  Otherwise, this function
- *          might throw a #GP fault as it tries to read/write MSRs that may not
+ *          might throw a \#GP fault as it tries to read/write MSRs that may not
  *          be present!
  */
 SUPR0DECL(int) SUPR0GetVmxUsability(bool *pfIsSmxModeAmbiguous)
@@ -5231,8 +5234,7 @@ static int supdrvIDC_LdrGetSymbol(PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession
  *
  * @returns IPRT status code.
  * @param   pDevExt             Device globals.
- * @param   pSession            Session data.
- * @param   pVMMR0              VMMR0 image handle.
+ * @param   pvVMMR0             VMMR0 image handle.
  * @param   pvVMMR0EntryFast    VMMR0EntryFast address.
  * @param   pvVMMR0EntryEx      VMMR0EntryEx address.
  * @remark  Caller must own the loader mutex.
diff --git a/src/VBox/HostDrivers/Support/SUPDrvGip.cpp b/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
index 10ac6ef..d9706e3 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrvGip.cpp
@@ -4241,7 +4241,7 @@ static DECLCALLBACK(int) supdrvTscDeltaThread(RTTHREAD hThread, void *pvUser)
  * @returns VINF_SUCCESS on success, VERR_TIMEOUT if it doesn't respond in time,
  *          other error code on internal error.
  *
- * @param   pThis           Pointer to the grant service instance data.
+ * @param   pDevExt         The device instance data.
  * @param   enmCurState     The current state.
  * @param   enmNewState     The new state we're waiting for it to enter.
  */
diff --git a/src/VBox/HostDrivers/Support/SUPDrvIOC.h b/src/VBox/HostDrivers/Support/SUPDrvIOC.h
index 2d07f2c..0fd3cc9 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvIOC.h
+++ b/src/VBox/HostDrivers/Support/SUPDrvIOC.h
@@ -1441,7 +1441,7 @@ typedef struct SUPMSRPROBER
                     uint64_t        fOrMask;
                 } Modify;
 
-                /** Reserve space for the future.. */
+                /** Reserve space for the future. */
                 uint64_t        auPadding[3];
             } uArgs;
         } In;
diff --git a/src/VBox/HostDrivers/Support/SUPDrvInternal.h b/src/VBox/HostDrivers/Support/SUPDrvInternal.h
index 1990bcd..daa8c23 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvInternal.h
+++ b/src/VBox/HostDrivers/Support/SUPDrvInternal.h
@@ -230,12 +230,19 @@
 # undef SUPDRV_WITH_MSR_PROBER
 #endif
 
+#ifdef DOXYGEN_RUNNING
+# define SUPDRV_WITH_MSR_PROBER
+# define SUPDRV_WITHOUT_MSR_PROBER
+#endif
+
 #if 1
-/**  Use a dedicated kernel thread to service TSC-delta measurement requests.
- *   @todo Test on servers with many CPUs and sockets. */
-#define SUPDRV_USE_TSC_DELTA_THREAD
+/** @def SUPDRV_USE_TSC_DELTA_THREAD
+ * Use a dedicated kernel thread to service TSC-delta measurement requests.
+ * @todo Test on servers with many CPUs and sockets. */
+# define SUPDRV_USE_TSC_DELTA_THREAD
 #endif
 
+
 /*******************************************************************************
 *   Structures and Typedefs                                                    *
 *******************************************************************************/
diff --git a/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp b/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp
index c646cba..9bf881d 100644
--- a/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp
+++ b/src/VBox/HostDrivers/Support/SUPDrvTracer.cpp
@@ -248,7 +248,6 @@ static int supdrvVtgValidateString(const char *psz)
  * @param   pVtgHdr             The header.
  * @param   uVtgHdrAddr         The address where the header is actually
  *                              loaded.
- * @param   cbVtgObj            The alleged size of the header.
  * @param   pbImage             The image base, if available.
  * @param   cbImage             The image size, if available.
  * @param   fUmod               Whether this is a user module.
@@ -867,7 +866,7 @@ static void supdrvTracerRemoveAllProviders(PSUPDRVDEVEXT pDevExt)
  * Registers the VTG tracepoint providers of a driver.
  *
  * @returns VBox status code.
- * @param   pszName             The driver name.
+ * @param   pDevExt             The device instance data.
  * @param   pVtgHdr             The VTG object header.
  * @param   pImage              The image if applicable.
  * @param   pSession            The session if applicable.
@@ -1102,7 +1101,6 @@ SUPR0DECL(int) SUPR0TracerRegisterDrv(PSUPDRVSESSION pSession, PVTGOBJHDR pVtgHd
  * Deregister the VTG tracepoint providers of a driver.
  *
  * @param   pSession            The support driver session handle.
- * @param   pVtgHdr             The VTG header.
  */
 SUPR0DECL(void) SUPR0TracerDeregisterDrv(PSUPDRVSESSION pSession)
 {
diff --git a/src/VBox/HostDrivers/Support/SUPLib.cpp b/src/VBox/HostDrivers/Support/SUPLib.cpp
index 197f651..b116e7c 100644
--- a/src/VBox/HostDrivers/Support/SUPLib.cpp
+++ b/src/VBox/HostDrivers/Support/SUPLib.cpp
@@ -1790,8 +1790,11 @@ typedef struct SUPDRVTRACERSTRTAB
  * Destroys a string table, restoring the original pszFunction member valus.
  *
  * @param   pThis               The string table structure.
- * @param   paProbLocs          The probe location array.
- * @param   cProbLocs           The number of probe locations.
+ * @param   paProbeLocs32       The probe location array, 32-bit type variant.
+ * @param   paProbeLocs64       The probe location array, 64-bit type variant.
+ * @param   cProbeLocs          The number of elements in the array.
+ * @param   f32Bit              Set if @a paProbeLocs32 should be used, when
+ *                              clear use @a paProbeLocs64.
  */
 static void supr3TracerDestroyStrTab(PSUPDRVTRACERSTRTAB pThis, PVTGPROBELOC32 paProbeLocs32, PVTGPROBELOC64 paProbeLocs64,
                                      uint32_t cProbeLocs, bool f32Bit)
@@ -1818,9 +1821,12 @@ static void supr3TracerDestroyStrTab(PSUPDRVTRACERSTRTAB pThis, PVTGPROBELOC32 p
  * This will save and replace the pszFunction members with offsets.
  *
  * @returns Pointer to a string table structure.  NULL on failure.
- * @param   paProbLocs          The probe location array.
- * @param   cProbLocs           The number of elements in the array.
- * @param   cBits
+ * @param   paProbeLocs32       The probe location array, 32-bit type variant.
+ * @param   paProbeLocs64       The probe location array, 64-bit type variant.
+ * @param   cProbeLocs          The number of elements in the array.
+ * @param   offDelta            Relocation offset for the string pointers.
+ * @param   f32Bit              Set if @a paProbeLocs32 should be used, when
+ *                              clear use @a paProbeLocs64.
  */
 static PSUPDRVTRACERSTRTAB supr3TracerCreateStrTab(PVTGPROBELOC32 paProbeLocs32,
                                                    PVTGPROBELOC64 paProbeLocs64,
diff --git a/src/VBox/HostDrivers/Support/SUPLibLdr.cpp b/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
index 4b7bd83..440727c 100644
--- a/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
+++ b/src/VBox/HostDrivers/Support/SUPLibLdr.cpp
@@ -349,7 +349,12 @@ static DECLCALLBACK(int) supLoadModuleCreateTabsCB(RTLDRMOD hLdrMod, const char
  * Worker for SUPR3LoadModule().
  *
  * @returns VBox status code.
- * @param   pszFilename     Name of the VMMR0 image file
+ * @param   pszFilename         Name of the VMMR0 image file
+ * @param   pszModule           The modulen name.
+ * @param   pszSrvReqHandler    The service request handler symbol name,
+ *                              optional.
+ * @param   pErrInfo            Where to store detailed error info. Optional.
+ * @param   ppvImageBase        Where to return the load address.
  */
 static int supLoadModule(const char *pszFilename, const char *pszModule, const char *pszSrvReqHandler,
                          PRTERRINFO pErrInfo, void **ppvImageBase)
diff --git a/src/VBox/HostDrivers/Support/SUPR0IdcClientStubs.c b/src/VBox/HostDrivers/Support/SUPR0IdcClientStubs.c
index 6476812..097dfc1 100644
--- a/src/VBox/HostDrivers/Support/SUPR0IdcClientStubs.c
+++ b/src/VBox/HostDrivers/Support/SUPR0IdcClientStubs.c
@@ -39,6 +39,7 @@
  * @returns Pointer to the symbol on success, NULL on failure.
  *
  * @param   pHandle     The IDC handle.
+ * @param   ppfn        Where to return the address of the symbol.
  * @param   pszName     The name of the symbol.
  */
 static void supR0IdcGetSymbol(PSUPDRVIDCHANDLE pHandle, PFNRT *ppfn, const char *pszName)
@@ -65,7 +66,8 @@ static void supR0IdcGetSymbol(PSUPDRVIDCHANDLE pHandle, PFNRT *ppfn, const char
  *
  * @returns Pointer to the symbol on success, NULL on failure.
  *
- * @param   pHandle     The IDC handle.
+ * @param   pSession    The IDC session.
+ * @param   ppfn        Where to return the address of the symbol.
  * @param   pszName     The name of the symbol.
  */
 static void supR0IdcGetSymbolBySession(PSUPDRVSESSION pSession, PFNRT *ppfn, const char *pszName)
diff --git a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
index 09792dd..66762f3 100644
--- a/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
+++ b/src/VBox/HostDrivers/Support/SUPR3HardenedMain.cpp
@@ -695,7 +695,7 @@ DECLHIDDEN(void) suplibHardenedPrintF(const char *pszFormat, ...)
 
 
 /**
- * @copydoc RTPathStripFilename.
+ * @copydoc RTPathStripFilename
  */
 static void suplibHardenedPathStripFilename(char *pszPath)
 {
@@ -844,11 +844,9 @@ DECLHIDDEN(int) supR3HardenedPathAppDocs(char *pszPath, size_t cchPath)
 
 
 /**
- * Returns the full path to the executable.
+ * Returns the full path to the executable in g_szSupLibHardenedExePath.
  *
  * @returns IPRT status code.
- * @param   pszPath     Where to store it.
- * @param   cchPath     How big that buffer is.
  */
 static void supR3HardenedGetFullExePath(void)
 {
diff --git a/src/VBox/HostDrivers/Support/SUPSvc.cpp b/src/VBox/HostDrivers/Support/SUPSvc.cpp
index a8708fa..bbffe32 100644
--- a/src/VBox/HostDrivers/Support/SUPSvc.cpp
+++ b/src/VBox/HostDrivers/Support/SUPSvc.cpp
@@ -304,7 +304,7 @@ void supSvcLogErrorStr(const char *pszMsg)
  * In debug builds this will also put it in the debug log.
  *
  * @param   pszFormat   The log string. No trailing newline.
- * @param   ...         Format arguments.
+ * @param   va          Format arguments.
  *
  * @todo    This should later be replaced by the release logger and callback destination(s).
  */
diff --git a/src/VBox/HostDrivers/Support/SUPSvcInternal.h b/src/VBox/HostDrivers/Support/SUPSvcInternal.h
index b2f50cc..3fbb394 100644
--- a/src/VBox/HostDrivers/Support/SUPSvcInternal.h
+++ b/src/VBox/HostDrivers/Support/SUPSvcInternal.h
@@ -53,7 +53,7 @@ int  supSvcDisplayTooManyArgsError(const char *pszAction, int argc, char **argv,
 /**
  * Logs the message to the appropriate system log.
  *
- * @param   psMsg       The log string.
+ * @param   pszMsg      The log string.
  */
 void supSvcOsLogErrorStr(const char *pszMsg);
 /** @} */
diff --git a/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp b/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp
index 2dc87f7..8f77a58 100644
--- a/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp
+++ b/src/VBox/HostDrivers/Support/darwin/SUPDrv-darwin.cpp
@@ -837,7 +837,7 @@ static int VBoxDrvDarwinIOCtlSlow(PSUPDRVSESSION pSession, u_long iCmd, caddr_t
  * The SUPDRV IDC entry point.
  *
  * @returns VBox status code, see supdrvIDC.
- * @param   iReq        The request code.
+ * @param   uReq        The request code.
  * @param   pReq        The request.
  */
 DECLEXPORT(int) VBOXCALL SUPDrvDarwinIDC(uint32_t uReq, PSUPDRVIDCREQHDR pReq)
diff --git a/src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c b/src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c
index dd472b5..ca73752 100644
--- a/src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c
+++ b/src/VBox/HostDrivers/Support/freebsd/SUPDrv-freebsd.c
@@ -74,7 +74,7 @@ static int VBoxDrvFreeBSDUnload(void);
 
 static d_open_t     VBoxDrvFreeBSDOpenUsr;
 static d_open_t     VBoxDrvFreeBSDOpenSys;
-static void         VBoxDrvFreeBSDDtr(void *pData);
+static void         VBoxDrvFreeBSDDtr(void *pvData);
 static d_ioctl_t    VBoxDrvFreeBSDIOCtl;
 static int          VBoxDrvFreeBSDIOCtlSlow(PSUPDRVSESSION pSession, u_long ulCmd, caddr_t pvData, struct thread *pTd);
 
@@ -224,12 +224,13 @@ static int VBoxDrvFreeBSDUnload(void)
  *
  * @returns 0 on success, errno on failure.
  *          EBUSY if the device is used by someone else.
- * @param   pDev        The device node.
- * @param   fOpen       The open flags.
- * @param   pTd         The thread.
- * @param   iDevType    ???
+ * @param   pDev            The device node.
+ * @param   fOpen           The open flags.
+ * @param   iDevType        Some device type thing we don't use.
+ * @param   pTd             The thread.
+ * @param   fUnrestricted   Set if opening /dev/vboxdrv, clear if /dev/vboxdrvu.
  */
-static int vboxdrvFreeBSDOpenCommon(struct cdev *pDev, int fOpen, int iDevtype, struct thread *pTd, bool fUnrestricted)
+static int vboxdrvFreeBSDOpenCommon(struct cdev *pDev, int fOpen, int iDevType, struct thread *pTd, bool fUnrestricted)
 {
     PSUPDRVSESSION pSession;
     int rc;
@@ -252,7 +253,7 @@ static int vboxdrvFreeBSDOpenCommon(struct cdev *pDev, int fOpen, int iDevtype,
         /** @todo get (r)uid and (r)gid.
         pSession->Uid = stuff;
         pSession->Gid = stuff; */
-        devfs_set_cdevpriv(pSession, VBoxDrvFreeBSDDtr);
+        rc = devfs_set_cdevpriv(pSession, vboxdrvFreeBSDDtr); Assert(rc == 0);
         Log(("VBoxDrvFreeBSDOpen: pSession=%p\n", pSession));
         ASMAtomicIncU32(&g_cUsers);
         return 0;
@@ -263,32 +264,29 @@ static int vboxdrvFreeBSDOpenCommon(struct cdev *pDev, int fOpen, int iDevtype,
 
 
 /** For vboxdrv. */
-static int VBoxDrvFreeBSDOpenSys(struct cdev *pDev, int fOpen, int iDevtype, struct thread *pTd)
+static int VBoxDrvFreeBSDOpenSys(struct cdev *pDev, int fOpen, int iDevType, struct thread *pTd)
 {
-    return vboxdrvFreeBSDOpenCommon(pDev, fOpen, iDevtype, pTd, true);
+    return vboxdrvFreeBSDOpenCommon(pDev, fOpen, iDevType, pTd, true);
 }
 
 
 /** For vboxdrvu. */
-static int VBoxDrvFreeBSDOpenUsr(struct cdev *pDev, int fOpen, int iDevtype, struct thread *pTd)
+static int VBoxDrvFreeBSDOpenUsr(struct cdev *pDev, int fOpen, int iDevType, struct thread *pTd)
 {
-    return vboxdrvFreeBSDOpenCommon(pDev, fOpen, iDevtype, pTd, false);
+    return vboxdrvFreeBSDOpenCommon(pDev, fOpen, iDevType, pTd, false);
 }
 
 
 /**
- * Close a file device previously opened by VBoxDrvFreeBSDOpen
+ * Close a file device previously opened by VBoxDrvFreeBSDOpen.
  *
  * @returns 0 on success.
- * @param   pDev        The device.
- * @param   fFile       The file descriptor flags.
- * @param   DevType     The device type (CHR.
- * @param   pTd         The calling thread.
+ * @param   pvData      The session being closed.
  */
-static void VBoxDrvFreeBSDDtr(void *pData)
+static void vboxdrvFreeBSDDtr(void *pvData)
 {
-    PSUPDRVSESSION pSession = pData;
-    Log(("VBoxDrvFreeBSDDtr: pSession=%p\n", pSession));
+    PSUPDRVSESSION pSession = pvData;
+    Log(("vboxdrvFreeBSDDtr: pSession=%p\n", pSession));
 
     /*
      * Close the session.
@@ -468,7 +466,7 @@ static int VBoxDrvFreeBSDIOCtlSlow(PSUPDRVSESSION pSession, u_long ulCmd, caddr_
  * The SUPDRV IDC entry point.
  *
  * @returns VBox status code, see supdrvIDC.
- * @param   iReq        The request code.
+ * @param   uReq        The request code.
  * @param   pReq        The request.
  */
 int VBOXCALL SUPDrvFreeBSDIDC(uint32_t uReq, PSUPDRVIDCREQHDR pReq)
diff --git a/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv b/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv
index 932e1a8..0d7b029 100755
--- a/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv
+++ b/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv
@@ -42,6 +42,7 @@ FILES_VBOXDRV_NOBIN=" \
     ${PATH_ROOT}/include/iprt/heap.h=>include/iprt/heap.h \
     ${PATH_ROOT}/include/iprt/handletable.h=>include/iprt/handletable.h \
     ${PATH_ROOT}/include/iprt/initterm.h=>include/iprt/initterm.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/list.h=>include/iprt/list.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
     ${PATH_ROOT}/include/iprt/mangling.h=>include/iprt/mangling.h \
@@ -63,6 +64,7 @@ FILES_VBOXDRV_NOBIN=" \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
     ${PATH_ROOT}/include/iprt/uint128.h=>include/iprt/uint128.h \
     ${PATH_ROOT}/include/iprt/uni.h=>include/iprt/uni.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/iprt/uuid.h=>include/iprt/uuid.h \
     ${PATH_ROOT}/include/iprt/crc.h=>include/iprt/crc.h \
     ${PATH_ROOT}/include/iprt/net.h=>include/iprt/net.h \
diff --git a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
index 36fb4d7..f171418 100644
--- a/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
+++ b/src/VBox/HostDrivers/Support/linux/SUPDrv-linux.c
@@ -1,4 +1,4 @@
-/* $Rev: 102792 $ */
+/* $Rev: 103607 $ */
 /** @file
  * VBoxDrv - The VirtualBox Support Driver - Linux specifics.
  */
@@ -603,9 +603,10 @@ static int VBoxDrvProbe(struct platform_device *pDev)
 /**
  * Suspend callback.
  * @param   pDev        Pointer to the platform device.
- * @param   State       message type, see Documentation/power/devices.txt.
+ * @param   State       Message type, see Documentation/power/devices.txt.
+ *                      Ignored.
  */
-# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30)
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30) && !defined(DOXYGEN_RUNNING)
 static int VBoxDrvSuspend(struct device *pDev)
 # else
 static int VBoxDrvSuspend(struct platform_device *pDev, pm_message_t State)
@@ -639,7 +640,7 @@ static int VBoxDrvResume(struct platform_device *pDev)
  * @param   uCmd        The function specified to ioctl().
  * @param   ulArg       The argument specified to ioctl().
  */
-#ifdef HAVE_UNLOCKED_IOCTL
+#if defined(HAVE_UNLOCKED_IOCTL) || defined(DOXYGEN_RUNNING)
 static long VBoxDrvLinuxIOCtl(struct file *pFilp, unsigned int uCmd, unsigned long ulArg)
 #else
 static int VBoxDrvLinuxIOCtl(struct inode *pInode, struct file *pFilp, unsigned int uCmd, unsigned long ulArg)
@@ -810,7 +811,7 @@ static int VBoxDrvLinuxIOCtlSlow(struct file *pFilp, unsigned int uCmd, unsigned
  * The SUPDRV IDC entry point.
  *
  * @returns VBox status code, see supdrvIDC.
- * @param   iReq        The request code.
+ * @param   uReq        The request code.
  * @param   pReq        The request.
  */
 int VBOXCALL SUPDrvLinuxIDC(uint32_t uReq, PSUPDRVIDCREQHDR pReq)
diff --git a/src/VBox/HostDrivers/Support/linux/files_vboxdrv b/src/VBox/HostDrivers/Support/linux/files_vboxdrv
index 4b4e8b0..204b55a 100755
--- a/src/VBox/HostDrivers/Support/linux/files_vboxdrv
+++ b/src/VBox/HostDrivers/Support/linux/files_vboxdrv
@@ -41,6 +41,7 @@ FILES_VBOXDRV_NOBIN=" \
     ${PATH_ROOT}/include/iprt/heap.h=>include/iprt/heap.h \
     ${PATH_ROOT}/include/iprt/handletable.h=>include/iprt/handletable.h \
     ${PATH_ROOT}/include/iprt/initterm.h=>include/iprt/initterm.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/list.h=>include/iprt/list.h \
     ${PATH_ROOT}/include/iprt/lockvalidator.h=>include/iprt/lockvalidator.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
@@ -65,6 +66,7 @@ FILES_VBOXDRV_NOBIN=" \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
     ${PATH_ROOT}/include/iprt/uint128.h=>include/iprt/uint128.h \
     ${PATH_ROOT}/include/iprt/uni.h=>include/iprt/uni.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/iprt/uuid.h=>include/iprt/uuid.h \
     ${PATH_ROOT}/include/iprt/x86.h=>include/iprt/x86.h \
     ${PATH_ROOT}/include/iprt/nocrt/limits.h=>include/iprt/nocrt/limits.h \
diff --git a/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c b/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c
index a7f671a..9dd842e 100644
--- a/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c
+++ b/src/VBox/HostDrivers/Support/solaris/SUPDrv-solaris.c
@@ -664,7 +664,7 @@ static int VBoxDrvSolarisWrite(dev_t Dev, struct uio *pUio, cred_t *pCred)
  *
  * @param   Dev             Device number
  * @param   Cmd             Operation identifier
- * @param   pArg            Arguments from user to driver
+ * @param   pArgs           Arguments from user to driver
  * @param   Mode            Information bitfield (read/write, address space etc.)
  * @param   pCred           User credentials
  * @param   pVal            Return value for calling process.
@@ -744,7 +744,7 @@ static int VBoxDrvSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArgs, int Mode, cre
  * @returns Solaris errno.
  *
  * @param   pSession    The session.
- * @param   Cmd         The IOCtl command.
+ * @param   iCmd        The IOCtl command.
  * @param   Mode        Information bitfield (for specifying ownership of data)
  * @param   iArg        User space address of the request buffer.
  */
@@ -848,7 +848,7 @@ static int VBoxDrvSolarisIOCtlSlow(PSUPDRVSESSION pSession, int iCmd, int Mode,
  * The SUPDRV IDC entry point.
  *
  * @returns VBox status code, see supdrvIDC.
- * @param   iReq        The request code.
+ * @param   uReq        The request code.
  * @param   pReq        The request.
  */
 int VBOXCALL SUPDrvSolarisIDC(uint32_t uReq, PSUPDRVIDCREQHDR pReq)
diff --git a/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp b/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
index ee5abba..d47d42c 100644
--- a/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
@@ -1004,7 +1004,7 @@ NTSTATUS _stdcall VBoxDrvNtClose(PDEVICE_OBJECT pDevObj, PIRP pIrp)
  * @param   cbInput             The size of the input buffer.
  * @param   pvOutput            The output buffer as specfied by the user.
  * @param   cbOutput            The size of the output buffer.
- * @param   uFunction           The function.
+ * @param   uCmd                The I/O command/function being invoked.
  * @param   pIoStatus           Where to return the status of the operation.
  * @param   pDevObj             The device object..
  */
@@ -1258,7 +1258,7 @@ NTSTATUS _stdcall VBoxDrvNtDeviceControl(PDEVICE_OBJECT pDevObj, PIRP pIrp)
  *
  * @returns NT status code.
  *
- * @param   pDevObj     Device object.
+ * @param   pDevExt     Device extension.
  * @param   pSession    The session.
  * @param   pIrp        Request packet.
  * @param   pStack      The stack location containing the DeviceControl parameters.
diff --git a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
index e8ad9a1..3e1be81 100644
--- a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
@@ -578,8 +578,8 @@ static bool supHardViUtf16PathEndsWith(PCRTUTF16 pwsz, const char *pszSuffix)
  * Simple case insensitive UTF-16 / ASCII starts-with path predicate.
  *
  * @returns true if starts with given string, false if not.
- * @param   pwsz                The UTF-16 path string.
- * @param   pszPrefix           The ascii prefix string.
+ * @param   pwszLeft            The UTF-16 path string.
+ * @param   pszRight            The ascii prefix string.
  */
 static bool supHardViUtf16PathStartsWithAscii(PCRTUTF16 pwszLeft, const char *pszRight)
 {
@@ -1130,7 +1130,7 @@ DECLHIDDEN(int) supHardenedWinVerifyImageByLdrMod(RTLDRMOD hLdrMod, PCRTUTF16 pw
      * In one report by 'thor' the WinSxS resident comctl32.dll was owned by
      * SECURITY_BUILTIN_DOMAIN_RID + DOMAIN_ALIAS_RID_ADMINS (with 4.3.16).
      */
-    /** @todo Since we're now allowing Builtin\Administrators after all, perhaps we
+    /** @todo Since we're now allowing Builtin\\Administrators after all, perhaps we
      *        could drop these system32 + winsxs hacks?? */
     if (   (pNtViRdr->fFlags & SUPHNTVI_F_TRUSTED_INSTALLER_OWNER)
         && !supHardNtViCheckIsOwnedByTrustedInstallerOrSimilar(pNtViRdr->hFile, pwszName))
@@ -2620,11 +2620,13 @@ l_fresh_context:
  * This is used by supHardenedWinVerifyImageByLdrMod as well as
  * supR3HardenedScreenImage.
  *
- * @returns IPRT status code.
+ * @returns IPRT status code, modified @a rc.
  * @param   hFile               Handle of the file to verify.
  * @param   pwszName            Full NT path to the DLL in question, used for
  *                              dealing with unsigned system dlls as well as for
  *                              error/logging.
+ * @param   fFlags              SUPHNTVI_F_XXX.
+ * @param   rc                  The current status code.
  * @param   pfWinVerifyTrust    Where to return whether WinVerifyTrust was
  *                              actually used.
  * @param   pErrInfo            Pointer to error info structure. Optional.
diff --git a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp
index 86821c0..77b115d 100644
--- a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp
@@ -242,7 +242,7 @@ PFNNTQUERYVIRTUALMEMORY g_pfnNtQueryVirtualMemory = NULL;
 #endif
 
 #ifdef IN_RING3
-/** The number of valid entries in the loader cache.. */
+/** The number of valid entries in the loader cache. */
 static uint32_t                 g_cSupNtVpLdrCacheEntries = 0;
 /** The loader cache entries. */
 static SUPHNTLDRCACHEENTRY      g_aSupNtVpLdrCacheEntries[RT_ELEMENTS(g_apszSupNtVpAllowedDlls) + 1 + 3];
@@ -255,8 +255,6 @@ static SUPHNTLDRCACHEENTRY      g_aSupNtVpLdrCacheEntries[RT_ELEMENTS(g_apszSupN
  * @returns @a rc.
  * @param   pErrInfo            Pointer to the extended error info structure.
  *                              Can be NULL.
- * @param   pszErr              Where to return error details.
- * @param   cbErr               Size of the buffer @a pszErr points to.
  * @param   rc                  The status to return.
  * @param   pszMsg              The format string for the message.
  * @param   ...                 The arguments for the format string.
@@ -283,8 +281,6 @@ static int supHardNtVpSetInfo1(PRTERRINFO pErrInfo, int rc, const char *pszMsg,
  *
  * @returns @a rc.
  * @param   pThis               The process validator instance.
- * @param   pszErr              Where to return error details.
- * @param   cbErr               Size of the buffer @a pszErr points to.
  * @param   rc                  The status to return.
  * @param   pszMsg              The format string for the message.
  * @param   ...                 The arguments for the format string.
@@ -1010,7 +1006,6 @@ static int supHardNtVpVerifyImageMemoryCompare(PSUPHNTVPSTATE pThis, PSUPHNTVPIM
  * @param   pImage              The image data collected during the address
  *                              space scan.
  * @param   hProcess            Handle to the process.
- * @param   hFile               Handle to the image file.
  */
 static int supHardNtVpVerifyImage(PSUPHNTVPSTATE pThis, PSUPHNTVPIMAGE pImage, HANDLE hProcess)
 {
@@ -1134,6 +1129,8 @@ DECLHIDDEN(PRTUTF16) supHardNtVpIsPossible8dot3Path(PCRTUTF16 pwszPath)
  *
  * @param   pUniStr     The path to fix up. MaximumLength is the max buffer
  *                      length.
+ * @param   fPathOnly   Whether to only process the path and leave the filename
+ *                      as passed in.
  */
 DECLHIDDEN(void) supHardNtVpFix8dot3Path(PUNICODE_STRING pUniStr, bool fPathOnly)
 {
@@ -1973,7 +1970,7 @@ static int supHardNtVpScanVirtualMemory(PSUPHNTVPSTATE pThis, HANDLE hProcess)
  * @returns VBox status code.
  * @param   pEntry              The loader cache entry.
  * @param   pwszName            The filename to use in error messages.
- * @param   pErRInfo            Where to return extened error information.
+ * @param   pErrInfo            Where to return extened error information.
  */
 DECLHIDDEN(int) supHardNtLdrCacheEntryVerify(PSUPHNTLDRCACHEENTRY pEntry, PCRTUTF16 pwszName, PRTERRINFO pErrInfo)
 {
diff --git a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
index bc06f44..7302ca8 100644
--- a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
@@ -312,7 +312,7 @@ static PVERIFIERCACHEENTRY  volatile g_pVerifierCacheTodoWvt = NULL;
 static PVERIFIERCACHEIMPORT volatile g_pVerifierCacheTodoImports = NULL;
 
 /** The windows path to dir \\SystemRoot\\System32 directory (technically
- *  this whatever \KnownDlls\KnownDllPath points to). */
+ *  this whatever \\KnownDlls\\KnownDllPath points to). */
 SUPSYSROOTDIRBUF            g_System32WinPath;
 /** @ */
 
@@ -2957,7 +2957,7 @@ DECLINLINE(bool) suplibCommandLineIsArgSeparator(int ch)
  * argument.
  *
  * @returns Pointer to a command line string (heap).
- * @param   pUniStr         Unicode string structure to initialize to the
+ * @param   pString         Unicode string structure to initialize to the
  *                          command line. Optional.
  * @param   iWhich          Which respawn we're to check for, 1 being the first
  *                          one, and 2 the second and final.
@@ -3748,7 +3748,7 @@ static void supR3HardNtChildFindNtdll(PSUPR3HARDNTCHILD pThis)
 /**
  * Gather child data.
  *
- * @param   This                The child process data structure.
+ * @param   pThis               The child process data structure.
  */
 static void supR3HardNtChildGatherData(PSUPR3HARDNTCHILD pThis)
 {
@@ -5098,11 +5098,11 @@ static void supR3HardenedLogFileInfo(PCRTUTF16 pwszFile, bool fAdversarial)
  *
  * @returns Mask of SUPHARDNT_ADVERSARY_XXX flags.
  *
- * @remarks The enumeration of \Driver normally requires administrator
+ * @remarks The enumeration of \\Driver normally requires administrator
  *          privileges.  So, the detection we're doing here isn't always gonna
  *          work just based on that.
  *
- * @todo    Find drivers in \FileSystems as well, then we could detect VrNsdDrv
+ * @todo    Find drivers in \\FileSystems as well, then we could detect VrNsdDrv
  *          from ViRobot APT Shield 2.0.
  */
 static uint32_t supR3HardenedWinFindAdversaries(void)
diff --git a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainImports-win.cpp b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainImports-win.cpp
index 4017c57..205d6b3 100644
--- a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainImports-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMainImports-win.cpp
@@ -635,7 +635,10 @@ DECLHIDDEN(void) supR3HardenedWinInitSyscalls(bool fReportErrors)
  *
  * We must not permanently modify any global data here.
  *
- * @param   uNtDllAddr          The address of the NTDLL.
+ * @param   uNtDllAddr                  The address of the NTDLL.
+ * @param   ppfnNtWaitForSingleObject   Where to store the NtWaitForSingleObject
+ *                                      address.
+ * @param   ppfnNtSetEvent              Where to store the NtSetEvent address.
  */
 DECLHIDDEN(void) supR3HardenedWinGetVeryEarlyImports(uintptr_t uNtDllAddr,
                                                      PFNNTWAITFORSINGLEOBJECT *ppfnNtWaitForSingleObject,
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c b/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c
index 567cae5..a616cb1 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c
+++ b/src/VBox/HostDrivers/VBoxNetAdp/VBoxNetAdp.c
@@ -36,1015 +36,6 @@
 #include <VBox/err.h>
 #include <iprt/string.h>
 
-#ifdef VBOXANETADP_DO_NOT_USE_NETFLT
-#error "this code is broken"
-
-#include <VBox/sup.h>
-#include <iprt/assert.h>
-#include <iprt/spinlock.h>
-#include <iprt/uuid.h>
-#include <VBox/version.h>
-
-/** r=bird: why is this here in the agnostic code? */
-#ifdef RT_OS_DARWIN
-# include <net/ethernet.h>
-# include <net/if_ether.h>
-# include <net/if_types.h>
-# include <sys/socket.h>
-# include <net/if.h>
-# include <net/if_dl.h>
-# include <sys/errno.h>
-# include <sys/param.h>
-#endif
-
-
-/*********************************************************************************************************************************
-*   Defined Constants And Macros                                                                                                 *
-*********************************************************************************************************************************/
-#define IFPORT_2_VBOXNETADP(pIfPort) \
-    ( (PVBOXNETADP)((uint8_t *)pIfPort - RT_OFFSETOF(VBOXNETADP, MyPort)) )
-
-
-AssertCompileMemberSize(VBOXNETADP, enmState, sizeof(uint32_t));
-
-/**
- * Gets the enmState member atomically.
- *
- * Used for all reads.
- *
- * @returns The enmState value.
- * @param   pThis           The instance.
- */
-DECLINLINE(VBOXNETADPSTATE) vboxNetAdpGetState(PVBOXNETADP pThis)
-{
-    return (VBOXNETADPSTATE)ASMAtomicUoReadU32((uint32_t volatile *)&pThis->enmState);
-}
-
-
-/**
- * Sets the enmState member atomically.
- *
- * Used for all updates.
- *
- * @param   pThis           The instance.
- * @param   enmNewState     The new value.
- */
-DECLINLINE(void) vboxNetAdpSetState(PVBOXNETADP pThis, VBOXNETADPSTATE enmNewState)
-{
-    Log(("vboxNetAdpSetState: pThis=%p, state change: %d -> %d.\n", pThis, vboxNetAdpGetState(pThis), enmNewState));
-    ASMAtomicWriteU32((uint32_t volatile *)&pThis->enmState, enmNewState);
-}
-
-
-/**
- * Sets the enmState member atomically after first acquiring the spinlock.
- *
- * Used for all updates.
- *
- * @param   pThis           The instance.
- * @param   enmNewState     The new value.
- */
-DECLINLINE(void) vboxNetAdpSetStateWithLock(PVBOXNETADP pThis, VBOXNETADPSTATE enmNewState)
-{
-    Log(("vboxNetAdpSetStateWithLock: pThis=%p, state=%d.\n", pThis, enmNewState));
-    RTSpinlockAcquire(pThis->hSpinlock);
-    vboxNetAdpSetState(pThis, enmNewState);
-    RTSpinlockRelease(pThis->hSpinlock);
-}
-
-
-/**
- * Gets the enmState member with locking.
- *
- * Used for all reads.
- *
- * @returns The enmState value.
- * @param   pThis           The instance.
- */
-DECLINLINE(VBOXNETADPSTATE) vboxNetAdpGetStateWithLock(PVBOXNETADP pThis)
-{
-    VBOXNETADPSTATE enmState;
-    RTSpinlockAcquire(pThis->hSpinlock);
-    enmState = vboxNetAdpGetState(pThis);
-    RTSpinlockRelease(pThis->hSpinlock);
-    Log(("vboxNetAdpGetStateWithLock: pThis=%p, state=%d.\n", pThis, enmState));
-    return enmState;
-}
-
-
-/**
- * Checks and sets the enmState member atomically.
- *
- * Used for all updates.
- *
- * @returns true if the state has been changed.
- * @param   pThis           The instance.
- * @param   enmNewState     The new value.
- */
-DECLINLINE(bool) vboxNetAdpCheckAndSetState(PVBOXNETADP pThis, VBOXNETADPSTATE enmOldState, VBOXNETADPSTATE enmNewState)
-{
-    VBOXNETADPSTATE enmActualState;
-    bool fRc = true; /* be optimistic */
-
-    RTSpinlockAcquire(pThis->hSpinlock);
-    enmActualState = vboxNetAdpGetState(pThis); /** @todo r=bird: ASMAtomicCmpXchgU32()*/
-    if (enmActualState == enmOldState)
-        vboxNetAdpSetState(pThis, enmNewState);
-    else
-        fRc = false;
-    RTSpinlockRelease(pThis->hSpinlock);
-
-    if (fRc)
-        Log(("vboxNetAdpCheckAndSetState: pThis=%p, state changed: %d -> %d.\n", pThis, enmOldState, enmNewState));
-    else
-        Log(("vboxNetAdpCheckAndSetState: pThis=%p, no state change: %d != %d (expected).\n", pThis, enmActualState, enmOldState));
-    return fRc;
-}
-
-
-/**
- * Finds a instance by its name, the caller does the locking.
- *
- * @returns Pointer to the instance by the given name. NULL if not found.
- * @param   pGlobals        The globals.
- * @param   pszName         The name of the instance.
- */
-static PVBOXNETADP vboxNetAdpFind(PVBOXNETADPGLOBALS pGlobals, const char *pszName)
-{
-    unsigned i;
-
-    for (i = 0; i < RT_ELEMENTS(pGlobals->aAdapters); i++)
-    {
-        PVBOXNETADP pThis = &pGlobals->aAdapters[i];
-        RTSpinlockAcquire(pThis->hSpinlock);
-        if (    vboxNetAdpGetState(pThis)
-            &&  !strcmp(pThis->szName, pszName))
-        {
-            RTSpinlockRelease(pThis->hSpinlock);
-            return pThis;
-        }
-        RTSpinlockRelease(pThis->hSpinlock);
-    }
-    return NULL;
-}
-
-
-/**
- * Releases a reference to the specified instance.
- *
- * @param   pThis           The instance.
- * @param   fBusy           Whether the busy counter should be decremented too.
- */
-DECLHIDDEN(void) vboxNetAdpRelease(PVBOXNETADP pThis)
-{
-    uint32_t cRefs;
-
-    /*
-     * Paranoid Android.
-     */
-    AssertPtr(pThis);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-    Assert(pThis->MyPort.u32VersionEnd == INTNETTRUNKIFPORT_VERSION);
-    Assert(vboxNetAdpGetState(pThis) > kVBoxNetAdpState_Invalid);
-    AssertPtr(pThis->pGlobals);
-    Assert(pThis->hEventIdle != NIL_RTSEMEVENT);
-    Assert(pThis->hSpinlock != NIL_RTSPINLOCK);
-    Assert(pThis->szName[0]);
-
-    /*
-     * The object reference counting.
-     */
-    cRefs = ASMAtomicDecU32(&pThis->cRefs);
-    Assert(cRefs < UINT32_MAX / 2);
-}
-
-
-/**
- * Decrements the busy counter and does idle wakeup.
- *
- * @param   pThis           The instance.
- */
-DECLHIDDEN(void) vboxNetAdpIdle(PVBOXNETADP pThis)
-{
-    uint32_t cBusy;
-
-    /*
-     * Paranoid Android.
-     */
-    AssertPtr(pThis);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-    Assert(pThis->MyPort.u32VersionEnd == INTNETTRUNKIFPORT_VERSION);
-    Assert(vboxNetAdpGetState(pThis) >= kVBoxNetAdpState_Connected);
-    AssertPtr(pThis->pGlobals);
-    Assert(pThis->hEventIdle != NIL_RTSEMEVENT);
-
-    cBusy = ASMAtomicDecU32(&pThis->cBusy);
-    if (!cBusy)
-    {
-        int rc = RTSemEventSignal(pThis->hEventIdle);
-        AssertRC(rc);
-    }
-    else
-        Assert(cBusy < UINT32_MAX / 2);
-}
-
-
-/**
- * Retains a reference to the specified instance.
- *
- * @param   pThis           The instance.
- */
-DECLHIDDEN(void) vboxNetAdpRetain(PVBOXNETADP pThis)
-{
-    uint32_t cRefs;
-
-    /*
-     * Paranoid Android.
-     */
-    AssertPtr(pThis);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-    Assert(pThis->MyPort.u32VersionEnd == INTNETTRUNKIFPORT_VERSION);
-    Assert(vboxNetAdpGetState(pThis) > kVBoxNetAdpState_Invalid);
-    AssertPtr(pThis->pGlobals);
-    Assert(pThis->hEventIdle != NIL_RTSEMEVENT);
-    Assert(pThis->hSpinlock != NIL_RTSPINLOCK);
-    Assert(pThis->szName[0]);
-
-    /*
-     * Retain the object.
-     */
-    cRefs = ASMAtomicIncU32(&pThis->cRefs);
-    Assert(cRefs > 1 && cRefs < UINT32_MAX / 2);
-
-    NOREF(cRefs);
-}
-
-
-/**
- * Increments busy counter.
- *
- * @param   pThis           The instance.
- */
-DECLHIDDEN(void) vboxNetAdpBusy(PVBOXNETADP pThis)
-{
-    uint32_t cBusy;
-
-    /*
-     * Are we vigilant enough?
-     */
-    AssertPtr(pThis);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-    Assert(pThis->MyPort.u32VersionEnd == INTNETTRUNKIFPORT_VERSION);
-    Assert(vboxNetAdpGetState(pThis) >= kVBoxNetAdpState_Connected);
-    AssertPtr(pThis->pGlobals);
-    Assert(pThis->hEventIdle != NIL_RTSEMEVENT);
-    cBusy = ASMAtomicIncU32(&pThis->cBusy);
-    Assert(cBusy > 0 && cBusy < UINT32_MAX / 2);
-
-    NOREF(cBusy);
-}
-
-
-/**
- * Generate a suitable MAC address.
- *
- * @param   pThis       The instance.
- * @param   pMac        Where to return the MAC address.
- */
-DECLHIDDEN(void) vboxNetAdpComposeMACAddress(PVBOXNETADP pThis, PRTMAC pMac)
-{
-#if 0 /* Use a locally administered version of the OUI we use for the guest NICs. */
-    pMac->au8[0] = 0x08 | 2;
-    pMac->au8[1] = 0x00;
-    pMac->au8[2] = 0x27;
-#else /* this is what \0vb comes down to. It seems to be unassigned atm. */
-    pMac->au8[0] = 0;
-    pMac->au8[1] = 0x76;
-    pMac->au8[2] = 0x62;
-#endif
-
-    pMac->au8[3] = 0; /* pThis->uUnit >> 16; */
-    pMac->au8[4] = 0; /* pThis->uUnit >> 8; */
-    pMac->au8[5] = pThis->uUnit;
-}
-
-
-/**
- * Checks if receive is possible and increases busy and ref counters if so.
- *
- * @param   pThis           The instance.
- */
-DECLHIDDEN(bool) vboxNetAdpPrepareToReceive(PVBOXNETADP pThis)
-{
-    bool fCanReceive  = false;
-    /*
-     * Input validation.
-     */
-    AssertPtr(pThis);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-    RTSpinlockAcquire(pThis->hSpinlock);
-    if (vboxNetAdpGetState(pThis) == kVBoxNetAdpState_Active)
-    {
-        fCanReceive = true;
-        vboxNetAdpRetain(pThis);
-        vboxNetAdpBusy(pThis);
-    }
-    RTSpinlockRelease(pThis->hSpinlock);
-    Log(("vboxNetAdpPrepareToReceive: fCanReceive=%d.\n", fCanReceive));
-
-    return fCanReceive;
-}
-
-
-/**
- * Forwards scatter/gather list to internal network and decreases busy and ref counters.
- *
- * @param   pThis           The instance.
- */
-DECLHIDDEN(void) vboxNetAdpReceive(PVBOXNETADP pThis, PINTNETSG pSG)
-{
-    /*
-     * Input validation.
-     */
-    AssertPtr(pThis);
-    AssertPtr(pSG);
-    AssertPtr(pThis->pSwitchPort);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-    Log(("vboxNetAdpReceive: forwarding packet to internal net...\n"));
-    pThis->pSwitchPort->pfnRecv(pThis->pSwitchPort, pSG, INTNETTRUNKDIR_HOST);
-    vboxNetAdpIdle(pThis);
-    vboxNetAdpRelease(pThis);
-}
-
-
-/**
- * Decreases busy and ref counters.
- *
- * @param   pThis           The instance.
- */
-DECLHIDDEN(void) vboxNetAdpCancelReceive(PVBOXNETADP pThis)
-{
-    Log(("vboxNetAdpCancelReceive: cancelled.\n"));
-    vboxNetAdpIdle(pThis);
-    vboxNetAdpRelease(pThis);
-}
-
-
-/**
- * @copydoc INTNETTRUNKIFPORT::pfnXmit
- */
-static DECLCALLBACK(int) vboxNetAdpPortXmit(PINTNETTRUNKIFPORT pIfPort, PINTNETSG pSG, uint32_t fDst)
-{
-    PVBOXNETADP pThis = IFPORT_2_VBOXNETADP(pIfPort);
-    int rc = VINF_SUCCESS;
-
-    /*
-     * Input validation.
-     */
-    AssertPtr(pThis);
-    AssertPtr(pSG);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-
-    Log(("vboxNetAdpPortXmit: outgoing packet (len=%d)\n", pSG->cbTotal));
-
-    /*
-     * Do a retain/busy, invoke the OS specific code.
-     */
-    RTSpinlockAcquire(pThis->hSpinlock);
-    if (vboxNetAdpGetState(pThis) != kVBoxNetAdpState_Active)
-    {
-        RTSpinlockRelease(pThis->hSpinlock);
-        Log(("vboxNetAdpReceive: Dropping incoming packet for inactive interface %s.\n",
-             pThis->szName));
-        return VERR_INVALID_STATE;
-    }
-    vboxNetAdpRetain(pThis);
-    vboxNetAdpBusy(pThis);
-    RTSpinlockRelease(pThis->hSpinlock);
-
-    rc = vboxNetAdpPortOsXmit(pThis, pSG, fDst);
-    vboxNetAdpIdle(pThis);
-    vboxNetAdpRelease(pThis);
-
-    return rc;
-}
-
-
-/**
- * @copydoc INTNETTRUNKIFPORT::pfnGetMacAddress
- */
-static DECLCALLBACK(void) vboxNetAdpPortGetMacAddress(PINTNETTRUNKIFPORT pIfPort, PRTMAC pMac)
-{
-    PVBOXNETADP pThis = IFPORT_2_VBOXNETADP(pIfPort);
-
-    /*
-     * Input validation.
-     */
-    AssertPtr(pThis);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-    Assert(vboxNetAdpGetStateWithLock(pThis) == kVBoxNetAdpState_Active);
-
-    /*
-     * Forward the question to the OS specific code.
-     */
-    vboxNetAdpPortOsGetMacAddress(pThis, pMac);
-}
-
-
-/**
- * @copydoc INTNETTRUNKIFPORT::pfnWaitForIdle
- */
-static DECLCALLBACK(int) vboxNetAdpPortWaitForIdle(PINTNETTRUNKIFPORT pIfPort, uint32_t cMillies)
-{
-    int rc;
-    PVBOXNETADP pThis = IFPORT_2_VBOXNETADP(pIfPort);
-
-    /*
-     * Input validation.
-     */
-    AssertPtr(pThis);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-    AssertReturn(vboxNetAdpGetStateWithLock(pThis) >= kVBoxNetAdpState_Connected, VERR_INVALID_STATE);
-
-    /*
-     * Go to sleep on the semaphore after checking the busy count.
-     */
-    vboxNetAdpRetain(pThis);
-
-    rc = VINF_SUCCESS;
-    while (pThis->cBusy && RT_SUCCESS(rc))
-        rc = RTSemEventWait(pThis->hEventIdle, cMillies); /** @todo make interruptible? */
-
-    vboxNetAdpRelease(pThis);
-
-    return rc;
-}
-
-
-/**
- * @copydoc INTNETTRUNKIFPORT::pfnSetActive
- */
-static DECLCALLBACK(bool) vboxNetAdpPortSetActive(PINTNETTRUNKIFPORT pIfPort, bool fActive)
-{
-    bool fPreviouslyActive;
-    PVBOXNETADP pThis = IFPORT_2_VBOXNETADP(pIfPort);
-
-    /*
-     * Input validation.
-     */
-    AssertPtr(pThis);
-    AssertPtr(pThis->pGlobals);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-
-    Log(("vboxNetAdpPortSetActive: pThis=%p, fActive=%d, state before: %d.\n", pThis, fActive, vboxNetAdpGetState(pThis)));
-    RTSpinlockAcquire(pThis->hSpinlock);
-
-    fPreviouslyActive = vboxNetAdpGetState(pThis) == kVBoxNetAdpState_Active;
-    if (fPreviouslyActive != fActive)
-    {
-        switch (vboxNetAdpGetState(pThis))
-        {
-            case kVBoxNetAdpState_Connected:
-                vboxNetAdpSetState(pThis, kVBoxNetAdpState_Active);
-                break;
-            case kVBoxNetAdpState_Active:
-                vboxNetAdpSetState(pThis, kVBoxNetAdpState_Connected);
-                break;
-            default:
-                break;
-        }
-    }
-
-    RTSpinlockRelease(pThis->hSpinlock);
-    Log(("vboxNetAdpPortSetActive: state after: %RTbool.\n", vboxNetAdpGetState(pThis)));
-    return fPreviouslyActive;
-}
-
-
-/**
- * @copydoc INTNETTRUNKIFPORT::pfnDisconnectAndRelease
- */
-static DECLCALLBACK(void) vboxNetAdpPortDisconnectAndRelease(PINTNETTRUNKIFPORT pIfPort)
-{
-    PVBOXNETADP pThis = IFPORT_2_VBOXNETADP(pIfPort);
-
-    /*
-     * Serious paranoia.
-     */
-    AssertPtr(pThis);
-    Assert(pThis->MyPort.u32Version == INTNETTRUNKIFPORT_VERSION);
-    Assert(pThis->MyPort.u32VersionEnd == INTNETTRUNKIFPORT_VERSION);
-    AssertPtr(pThis->pGlobals);
-    Assert(pThis->hEventIdle != NIL_RTSEMEVENT);
-    Assert(pThis->hSpinlock != NIL_RTSPINLOCK);
-
-
-    /*
-     * Disconnect and release it.
-     */
-    RTSpinlockAcquire(pThis->hSpinlock);
-    //Assert(vboxNetAdpGetState(pThis) == kVBoxNetAdpState_Connected);
-    Assert(!pThis->cBusy);
-    vboxNetAdpSetState(pThis, kVBoxNetAdpState_Transitional);
-    RTSpinlockRelease(pThis->hSpinlock);
-
-    vboxNetAdpOsDisconnectIt(pThis);
-    pThis->pSwitchPort = NULL;
-
-    RTSpinlockAcquire(pThis->hSpinlock);
-    vboxNetAdpSetState(pThis, kVBoxNetAdpState_Available);
-    RTSpinlockRelease(pThis->hSpinlock);
-
-    vboxNetAdpRelease(pThis);
-}
-
-
-/**
- * @copydoc INTNETTRUNKIFPORT::pfnRelease
- */
-static DECLCALLBACK(void) vboxNetAdpPortRelease(PINTNETTRUNKIFPORT pIfPort)
-{
-    PVBOXNETADP pThis = IFPORT_2_VBOXNETADP(pIfPort);
-    vboxNetAdpRelease(pThis);
-}
-
-
-/**
- * @copydoc INTNETTRUNKIFPORT::pfnRetain
- */
-static DECLCALLBACK(void) vboxNetAdpPortRetain(PINTNETTRUNKIFPORT pIfPort)
-{
-    PVBOXNETADP pThis = IFPORT_2_VBOXNETADP(pIfPort);
-    vboxNetAdpRetain(pThis);
-}
-
-
-int vboxNetAdpCreate(PINTNETTRUNKFACTORY pIfFactory, PVBOXNETADP *ppNew)
-{
-    PVBOXNETADPGLOBALS pGlobals = (PVBOXNETADPGLOBALS)((uint8_t *)pIfFactory - RT_OFFSETOF(VBOXNETADPGLOBALS, TrunkFactory));
-    unsigned i;
-    int rc;
-
-    for (i = 0; i < RT_ELEMENTS(pGlobals->aAdapters); i++)
-    {
-        PVBOXNETADP pThis = &pGlobals->aAdapters[i];
-
-        if (vboxNetAdpCheckAndSetState(pThis, kVBoxNetAdpState_Invalid, kVBoxNetAdpState_Transitional))
-        {
-            /* Found an empty slot -- use it. */
-            uint32_t cRefs = ASMAtomicIncU32(&pThis->cRefs);
-            Assert(cRefs == 1);
-            RTMAC Mac;
-            vboxNetAdpComposeMACAddress(pThis, &Mac);
-            rc = vboxNetAdpOsCreate(pThis, &Mac);
-            *ppNew = pThis;
-
-            RTSpinlockAcquire(pThis->hSpinlock);
-            vboxNetAdpSetState(pThis, kVBoxNetAdpState_Available);
-            RTSpinlockRelease(pThis->hSpinlock);
-            return rc;
-        }
-    }
-
-    /* All slots in adapter array are busy. */
-    return VERR_OUT_OF_RESOURCES;
-}
-
-int vboxNetAdpDestroy(PVBOXNETADP pThis)
-{
-    int rc = VINF_SUCCESS;
-
-    RTSpinlockAcquire(pThis->hSpinlock);
-    if (vboxNetAdpGetState(pThis) != kVBoxNetAdpState_Available || pThis->cBusy)
-    {
-        RTSpinlockRelease(pThis->hSpinlock);
-        return VERR_INTNET_FLT_IF_BUSY;
-    }
-    vboxNetAdpSetState(pThis, kVBoxNetAdpState_Transitional);
-    RTSpinlockRelease(pThis->hSpinlock);
-    vboxNetAdpRelease(pThis);
-
-    vboxNetAdpOsDestroy(pThis);
-
-    RTSpinlockAcquire(pThis->hSpinlock);
-    vboxNetAdpSetState(pThis, kVBoxNetAdpState_Invalid);
-    RTSpinlockRelease(pThis->hSpinlock);
-
-    return rc;
-}
-
-/**
- * Connects the instance to the specified switch port.
- *
- * Called while owning the lock. We're ASSUMING that the internal
- * networking code is already owning an recursive mutex, so, there
- * will be no deadlocks when vboxNetAdpOsConnectIt calls back into
- * it for setting preferences.
- *
- * @returns VBox status code.
- * @param   pThis               The instance.
- * @param   pSwitchPort         The port on the internal network 'switch'.
- * @param   ppIfPort            Where to return our port interface.
- */
-static int vboxNetAdpConnectIt(PVBOXNETADP pThis, PINTNETTRUNKSWPORT pSwitchPort, PINTNETTRUNKIFPORT *ppIfPort)
-{
-    int rc;
-
-    /*
-     * Validate state.
-     */
-    Assert(!pThis->cBusy);
-    Assert(vboxNetAdpGetStateWithLock(pThis) == kVBoxNetAdpState_Transitional);
-
-    /*
-     * Do the job.
-     * Note that we're calling the os stuff while owning the semaphore here.
-     */
-    pThis->pSwitchPort = pSwitchPort;
-    rc = vboxNetAdpOsConnectIt(pThis);
-    if (RT_SUCCESS(rc))
-    {
-        *ppIfPort = &pThis->MyPort;
-    }
-    else
-        pThis->pSwitchPort = NULL;
-
-    return rc;
-}
-
-
-/**
- * @copydoc INTNETTRUNKFACTORY::pfnCreateAndConnect
- */
-static DECLCALLBACK(int) vboxNetAdpFactoryCreateAndConnect(PINTNETTRUNKFACTORY pIfFactory, const char *pszName,
-                                                           PINTNETTRUNKSWPORT pSwitchPort, uint32_t fFlags,
-                                                           PINTNETTRUNKIFPORT *ppIfPort)
-{
-    PVBOXNETADPGLOBALS pGlobals = (PVBOXNETADPGLOBALS)((uint8_t *)pIfFactory - RT_OFFSETOF(VBOXNETADPGLOBALS, TrunkFactory));
-    PVBOXNETADP pThis;
-    int rc;
-
-    LogFlow(("vboxNetAdpFactoryCreateAndConnect: pszName=%p:{%s} fFlags=%#x\n", pszName, pszName, fFlags));
-    Assert(pGlobals->cFactoryRefs > 0);
-    AssertMsgReturn(!fFlags,
-                    ("%#x\n", fFlags), VERR_INVALID_PARAMETER);
-
-    /*
-     * Find instance, check if busy, connect if not.
-     */
-    pThis = vboxNetAdpFind(pGlobals, pszName);
-    if (pThis)
-    {
-        if (vboxNetAdpCheckAndSetState(pThis, kVBoxNetAdpState_Available, kVBoxNetAdpState_Transitional))
-        {
-            vboxNetAdpRetain(pThis);
-            rc = vboxNetAdpConnectIt(pThis, pSwitchPort, ppIfPort);
-            vboxNetAdpSetStateWithLock(pThis, RT_SUCCESS(rc) ? kVBoxNetAdpState_Connected : kVBoxNetAdpState_Available);
-        }
-        else
-            rc = VERR_INTNET_FLT_IF_BUSY;
-    }
-    else
-        rc = VERR_INTNET_FLT_IF_NOT_FOUND;
-
-    return rc;
-}
-
-
-/**
- * @copydoc INTNETTRUNKFACTORY::pfnRelease
- */
-static DECLCALLBACK(void) vboxNetAdpFactoryRelease(PINTNETTRUNKFACTORY pIfFactory)
-{
-    PVBOXNETADPGLOBALS pGlobals = (PVBOXNETADPGLOBALS)((uint8_t *)pIfFactory - RT_OFFSETOF(VBOXNETADPGLOBALS, TrunkFactory));
-
-    int32_t cRefs = ASMAtomicDecS32(&pGlobals->cFactoryRefs);
-    Assert(cRefs >= 0); NOREF(cRefs);
-    LogFlow(("vboxNetAdpFactoryRelease: cRefs=%d (new)\n", cRefs));
-}
-
-
-/**
- * Implements the SUPDRV component factor interface query method.
- *
- * @returns Pointer to an interface. NULL if not supported.
- *
- * @param   pSupDrvFactory      Pointer to the component factory registration structure.
- * @param   pSession            The session - unused.
- * @param   pszInterfaceUuid    The factory interface id.
- */
-static DECLCALLBACK(void *) vboxNetAdpQueryFactoryInterface(PCSUPDRVFACTORY pSupDrvFactory, PSUPDRVSESSION pSession, const char *pszInterfaceUuid)
-{
-    PVBOXNETADPGLOBALS pGlobals = (PVBOXNETADPGLOBALS)((uint8_t *)pSupDrvFactory - RT_OFFSETOF(VBOXNETADPGLOBALS, SupDrvFactory));
-
-    /*
-     * Convert the UUID strings and compare them.
-     */
-    RTUUID UuidReq;
-    int rc = RTUuidFromStr(&UuidReq, pszInterfaceUuid);
-    if (RT_SUCCESS(rc))
-    {
-        if (!RTUuidCompareStr(&UuidReq, INTNETTRUNKFACTORY_UUID_STR))
-        {
-            ASMAtomicIncS32(&pGlobals->cFactoryRefs);
-            return &pGlobals->TrunkFactory;
-        }
-#ifdef LOG_ENABLED
-        else
-            Log(("VBoxNetAdp: unknown factory interface query (%s)\n", pszInterfaceUuid));
-#endif
-    }
-    else
-        Log(("VBoxNetAdp: rc=%Rrc, uuid=%s\n", rc, pszInterfaceUuid));
-
-    return NULL;
-}
-
-
-/**
- * Checks whether the VBoxNetAdp wossname can be unloaded.
- *
- * This will return false if someone is currently using the module.
- *
- * @returns true if it's relatively safe to unload it, otherwise false.
- * @param   pGlobals        Pointer to the globals.
- */
-DECLHIDDEN(bool) vboxNetAdpCanUnload(PVBOXNETADPGLOBALS pGlobals)
-{
-    bool fRc = true; /* Assume it can be unloaded. */
-    unsigned i;
-
-    for (i = 0; i < RT_ELEMENTS(pGlobals->aAdapters); i++)
-    {
-        PVBOXNETADP pThis = &pGlobals->aAdapters[i];
-        if (vboxNetAdpGetStateWithLock(&pGlobals->aAdapters[i]) >= kVBoxNetAdpState_Connected)
-        {
-            fRc = false;
-            break; /* We already know the answer. */
-        }
-    }
-    return fRc && ASMAtomicUoReadS32((int32_t volatile *)&pGlobals->cFactoryRefs) <= 0;
-}
-
-/**
- * tries to deinitialize Idc
- * we separate the globals settings "base" which is actually
- * "general" globals settings except for Idc, and idc.
- * This is needed for windows filter driver, which gets loaded prior to VBoxDrv,
- * thus it's not possible to make idc initialization from the driver startup routine for it,
- * though the "base is still needed for the driver to functions".
- * @param pGlobals
- * @return VINF_SUCCESS on success, VERR_WRONG_ORDER if we're busy.
- */
-DECLHIDDEN(int) vboxNetAdpTryDeleteIdc(PVBOXNETADPGLOBALS pGlobals)
-{
-    int rc;
-
-    Assert(pGlobals->hFastMtx != NIL_RTSEMFASTMUTEX);
-
-    /*
-     * Check before trying to deregister the factory.
-     */
-    if (!vboxNetAdpCanUnload(pGlobals))
-        return VERR_WRONG_ORDER;
-
-    /*
-     * Disconnect from SUPDRV and check that nobody raced us,
-     * reconnect if that should happen.
-     */
-    rc = SUPR0IdcComponentDeregisterFactory(&pGlobals->SupDrvIDC, &pGlobals->SupDrvFactory);
-    AssertRC(rc);
-    if (!vboxNetAdpCanUnload(pGlobals))
-    {
-        rc = SUPR0IdcComponentRegisterFactory(&pGlobals->SupDrvIDC, &pGlobals->SupDrvFactory);
-        AssertRC(rc);
-        return VERR_WRONG_ORDER;
-    }
-
-    SUPR0IdcClose(&pGlobals->SupDrvIDC);
-
-    return rc;
-}
-
-static int vboxNetAdpSlotCreate(PVBOXNETADPGLOBALS pGlobals, unsigned uUnit, PVBOXNETADP pNew)
-{
-    int rc;
-
-    pNew->MyPort.u32Version             = INTNETTRUNKIFPORT_VERSION;
-    pNew->MyPort.pfnRetain              = vboxNetAdpPortRetain;
-    pNew->MyPort.pfnRelease             = vboxNetAdpPortRelease;
-    pNew->MyPort.pfnDisconnectAndRelease= vboxNetAdpPortDisconnectAndRelease;
-    pNew->MyPort.pfnSetState            = vboxNetAdpPortSetState;
-    pNew->MyPort.pfnWaitForIdle         = vboxNetAdpPortWaitForIdle;
-    pNew->MyPort.pfnXmit                = vboxNetAdpPortXmit;
-    pNew->MyPort.u32VersionEnd          = INTNETTRUNKIFPORT_VERSION;
-    pNew->pSwitchPort                   = NULL;
-    pNew->pGlobals                      = pGlobals;
-    pNew->hSpinlock                     = NIL_RTSPINLOCK;
-    pNew->enmState                      = kVBoxNetAdpState_Invalid;
-    pNew->cRefs                         = 0;
-    pNew->cBusy                         = 0;
-    pNew->hEventIdle                    = NIL_RTSEMEVENT;
-
-    rc = RTSpinlockCreate(&pNew->hSpinlock, RTSPINLOCK_FLAGS_INTERRUPT_SAFE, "VBoxNetAdptSlotCreate");
-    if (RT_SUCCESS(rc))
-    {
-        rc = RTSemEventCreate(&pNew->hEventIdle);
-        if (RT_SUCCESS(rc))
-        {
-            rc = vboxNetAdpOsInit(pNew);
-            if (RT_SUCCESS(rc))
-            {
-                return rc;
-            }
-            RTSemEventDestroy(pNew->hEventIdle);
-            pNew->hEventIdle = NIL_RTSEMEVENT;
-        }
-        RTSpinlockDestroy(pNew->hSpinlock);
-        pNew->hSpinlock = NIL_RTSPINLOCK;
-    }
-    return rc;
-}
-
-static void vboxNetAdpSlotDestroy(PVBOXNETADP pThis)
-{
-    Assert(pThis->cRefs == 0);
-    Assert(pThis->cBusy == 0);
-    Assert(vboxNetAdpGetState(pThis) == kVBoxNetAdpState_Invalid);
-    if (pThis->hEventIdle != NIL_RTSEMEVENT)
-    {
-        RTSemEventDestroy(pThis->hEventIdle);
-        pThis->hEventIdle = NIL_RTSEMEVENT;
-    }
-    if (pThis->hSpinlock != NIL_RTSPINLOCK)
-    {
-        RTSpinlockDestroy(pThis->hSpinlock);
-        pThis->hSpinlock = NIL_RTSPINLOCK;
-    }
-}
-
-/**
- * performs "base" globals deinitialization
- * we separate the globals settings "base" which is actually
- * "general" globals settings except for Idc, and idc.
- * This is needed for windows filter driver, which gets loaded prior to VBoxDrv,
- * thus it's not possible to make idc initialization from the driver startup routine for it,
- * though the "base is still needed for the driver to functions".
- * @param pGlobals
- * @return none
- */
-DECLHIDDEN(void) vboxNetAdpDeleteGlobalsBase(PVBOXNETADPGLOBALS pGlobals)
-{
-    int i;
-    /*
-     * Release resources.
-     */
-    for (i = 0; i < (int)RT_ELEMENTS(pGlobals->aAdapters); i++)
-        if (RT_SUCCESS(vboxNetAdpDestroy(&pGlobals->aAdapters[i])))
-            vboxNetAdpSlotDestroy(&pGlobals->aAdapters[i]);
-
-    RTSemFastMutexDestroy(pGlobals->hFastMtx);
-    pGlobals->hFastMtx = NIL_RTSEMFASTMUTEX;
-
-#ifdef VBOXNETADP_STATIC_CONFIG
-    RTSemEventDestroy(pGlobals->hTimerEvent);
-    pGlobals->hTimerEvent = NIL_RTSEMEVENT;
-#endif
-
-}
-
-
-/**
- * Called by the native part when the OS wants the driver to unload.
- *
- * @returns VINF_SUCCESS on success, VERR_WRONG_ORDER if we're busy.
- *
- * @param   pGlobals        Pointer to the globals.
- */
-DECLHIDDEN(int) vboxNetAdpTryDeleteGlobals(PVBOXNETADPGLOBALS pGlobals)
-{
-    int rc = vboxNetAdpTryDeleteIdc(pGlobals);
-    if (RT_SUCCESS(rc))
-    {
-        vboxNetAdpDeleteGlobalsBase(pGlobals);
-    }
-    return rc;
-}
-
-
-/**
- * performs the "base" globals initialization
- * we separate the globals initialization to globals "base" initialization which is actually
- * "general" globals initialization except for Idc not being initialized, and idc initialization.
- * This is needed for windows filter driver, which gets loaded prior to VBoxDrv,
- * thus it's not possible to make idc initialization from the driver startup routine for it.
- *
- * @returns VBox status code.
- * @param   pGlobals    Pointer to the globals. */
-DECLHIDDEN(int) vboxNetAdpInitGlobalsBase(PVBOXNETADPGLOBALS pGlobals)
-{
-    /*
-     * Initialize the common portions of the structure.
-     */
-    int i;
-    int rc = RTSemFastMutexCreate(&pGlobals->hFastMtx);
-    if (RT_SUCCESS(rc))
-    {
-        memset(pGlobals->aAdapters, 0, sizeof(pGlobals->aAdapters));
-        for (i = 0; i < (int)RT_ELEMENTS(pGlobals->aAdapters); i++)
-        {
-            rc = vboxNetAdpSlotCreate(pGlobals, i, &pGlobals->aAdapters[i]);
-            if (RT_FAILURE(rc))
-            {
-                /* Clean up. */
-                while (--i >= 0)
-                    vboxNetAdpSlotDestroy(&pGlobals->aAdapters[i]);
-                Log(("vboxNetAdpInitGlobalsBase: Failed to create fast mutex (rc=%Rrc).\n", rc));
-                RTSemFastMutexDestroy(pGlobals->hFastMtx);
-                return rc;
-            }
-        }
-        pGlobals->TrunkFactory.pfnRelease = vboxNetAdpFactoryRelease;
-        pGlobals->TrunkFactory.pfnCreateAndConnect = vboxNetAdpFactoryCreateAndConnect;
-
-        strcpy(pGlobals->SupDrvFactory.szName, "VBoxNetAdp");
-        pGlobals->SupDrvFactory.pfnQueryFactoryInterface = vboxNetAdpQueryFactoryInterface;
-    }
-
-    return rc;
-}
-
-/**
- * performs the Idc initialization
- * we separate the globals initialization to globals "base" initialization which is actually
- * "general" globals initialization except for Idc not being initialized, and idc initialization.
- * This is needed for windows filter driver, which gets loaded prior to VBoxDrv,
- * thus it's not possible to make idc initialization from the driver startup routine for it.
- *
- * @returns VBox status code.
- * @param   pGlobals    Pointer to the globals. */
-DECLHIDDEN(int) vboxNetAdpInitIdc(PVBOXNETADPGLOBALS pGlobals)
-{
-    int rc;
-    /*
-     * Establish a connection to SUPDRV and register our component factory.
-     */
-    rc = SUPR0IdcOpen(&pGlobals->SupDrvIDC, 0 /* iReqVersion = default */, 0 /* iMinVersion = default */, NULL, NULL, NULL);
-    if (RT_SUCCESS(rc))
-    {
-        rc = SUPR0IdcComponentRegisterFactory(&pGlobals->SupDrvIDC, &pGlobals->SupDrvFactory);
-        if (RT_SUCCESS(rc))
-        {
-#if 1 /** @todo REMOVE ME! */
-            PVBOXNETADP pTmp;
-            rc = vboxNetAdpCreate(&pGlobals->TrunkFactory, &pTmp);
-            if (RT_FAILURE(rc))
-                Log(("Failed to create vboxnet0, rc=%Rrc.\n", rc));
-#endif
-            Log(("VBoxNetAdp: pSession=%p\n", SUPR0IdcGetSession(&pGlobals->SupDrvIDC)));
-            return rc;
-        }
-
-        /* bail out. */
-        LogRel(("VBoxNetAdp: Failed to register component factory, rc=%Rrc\n", rc));
-        SUPR0IdcClose(&pGlobals->SupDrvIDC);
-    }
-
-    return rc;
-}
-
-/**
- * Called by the native driver/kext module initialization routine.
- *
- * It will initialize the common parts of the globals, assuming the caller
- * has already taken care of the OS specific bits.
- *
- * @returns VBox status code.
- * @param   pGlobals    Pointer to the globals.
- */
-DECLHIDDEN(int) vboxNetAdpInitGlobals(PVBOXNETADPGLOBALS pGlobals)
-{
-    /*
-     * Initialize the common portions of the structure.
-     */
-    int rc = vboxNetAdpInitGlobalsBase(pGlobals);
-    if (RT_SUCCESS(rc))
-    {
-        rc = vboxNetAdpInitIdc(pGlobals);
-        if (RT_SUCCESS(rc))
-        {
-            return rc;
-        }
-
-        /* bail out. */
-        vboxNetAdpDeleteGlobalsBase(pGlobals);
-    }
-
-    return rc;
-}
-
-#else /* !VBOXANETADP_DO_NOT_USE_NETFLT */
-
 
 VBOXNETADP g_aAdapters[VBOXNETADP_MAX_INSTANCES];
 static uint8_t g_aUnits[VBOXNETADP_MAX_UNITS/8];
@@ -1201,7 +192,6 @@ int  vboxNetAdpInit(void)
  * Finds an adapter by its name.
  *
  * @returns Pointer to the instance by the given name. NULL if not found.
- * @param   pGlobals        The globals.
  * @param   pszName         The name of the instance.
  */
 PVBOXNETADP vboxNetAdpFindByName(const char *pszName)
@@ -1227,4 +217,3 @@ void vboxNetAdpShutdown(void)
     for (i = 0; i < RT_ELEMENTS(g_aAdapters); i++)
         vboxNetAdpDestroy(&g_aAdapters[i]);
 }
-#endif /* !VBOXANETADP_DO_NOT_USE_NETFLT */
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp b/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp
index 98e44c6..78f07c3 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp
+++ b/src/VBox/HostDrivers/VBoxNetAdp/darwin/VBoxNetAdp-darwin.cpp
@@ -336,8 +336,10 @@ void vboxNetAdpOsDestroy(PVBOXNETADP pThis)
 /**
  * Device open. Called on open /dev/vboxnetctl
  *
- * @param   pInode      Pointer to inode info structure.
- * @param   pFilp       Associated file pointer.
+ * @param   Dev         The device number.
+ * @param   fFlags      ???.
+ * @param   fDevType    ???.
+ * @param   pProcess    The process issuing this request.
  */
 static int VBoxNetAdpDarwinOpen(dev_t Dev, int fFlags, int fDevType, struct proc *pProcess)
 {
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp b/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp
index 8521b22..14f9776 100755
--- a/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp
+++ b/src/VBox/HostDrivers/VBoxNetAdp/freebsd/files_vboxnetadp
@@ -40,6 +40,7 @@ VBOX_VBOXNETADP_SOURCES=" \
     ${PATH_ROOT}/include/iprt/err.h=>include/iprt/err.h \
     ${PATH_ROOT}/include/iprt/heap.h=>include/iprt/heap.h \
     ${PATH_ROOT}/include/iprt/initterm.h=>include/iprt/initterm.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
     ${PATH_ROOT}/include/iprt/mangling.h=>include/iprt/mangling.h \
     ${PATH_ROOT}/include/iprt/mem.h=>include/iprt/mem.h \
@@ -58,6 +59,7 @@ VBOX_VBOXNETADP_SOURCES=" \
     ${PATH_ROOT}/include/iprt/timer.h=>include/iprt/timer.h \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
     ${PATH_ROOT}/include/iprt/uni.h=>include/iprt/uni.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/iprt/uuid.h=>include/iprt/uuid.h \
     ${PATH_ROOT}/include/iprt/nocrt/limits.h=>include/iprt/nocrt/limits.h \
     ${PATH_ROOT}/include/VBox/cdefs.h=>include/VBox/cdefs.h \
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c b/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c
index 0ef5424..92e1724 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c
+++ b/src/VBox/HostDrivers/VBoxNetAdp/linux/VBoxNetAdp-linux.c
@@ -169,6 +169,7 @@ struct net_device_stats *vboxNetAdpLinuxGetStats(struct net_device *pNetDev)
 static void vboxNetAdpEthGetDrvinfo(struct net_device *pNetDev, struct ethtool_drvinfo *info)
 {
     PVBOXNETADPPRIV pPriv = netdev_priv(pNetDev);
+    NOREF(pPriv);
 
     RTStrPrintf(info->driver, sizeof(info->driver),
                 "%s", VBOXNETADP_NAME);
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp b/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp
index 0d962dd..da6dd35 100755
--- a/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp
+++ b/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp
@@ -1,5 +1,5 @@
 #!/bin/sh
-# $Revision: 100877 $
+# $Revision: 103594 $
 ## @files
 # Shared file between Makefile.kmk and export_modules
 #
@@ -30,6 +30,7 @@ VBOX_VBOXNETADP_SOURCES=" \
     ${PATH_ROOT}/include/iprt/err.h=>include/iprt/err.h \
     ${PATH_ROOT}/include/iprt/heap.h=>include/iprt/heap.h \
     ${PATH_ROOT}/include/iprt/initterm.h=>include/iprt/initterm.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
     ${PATH_ROOT}/include/iprt/mangling.h=>include/iprt/mangling.h \
     ${PATH_ROOT}/include/iprt/mem.h=>include/iprt/mem.h \
@@ -49,6 +50,7 @@ VBOX_VBOXNETADP_SOURCES=" \
     ${PATH_ROOT}/include/iprt/timer.h=>include/iprt/timer.h \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
     ${PATH_ROOT}/include/iprt/uni.h=>include/iprt/uni.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/iprt/uuid.h=>include/iprt/uuid.h \
     ${PATH_ROOT}/include/iprt/x86.h=>include/iprt/x86.h \
     ${PATH_ROOT}/include/iprt/nocrt/limits.h=>include/iprt/nocrt/limits.h \
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c b/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c
index ff943e7..73f31b5 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c
+++ b/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFlt.c
@@ -190,7 +190,7 @@
  *
  *
  *
- * @subsection subsec_netflt_msc_hif_rm    Host Interface Rediscovery - OBSOLETE
+ * @subsection subsec_netflt_msc_hif_rd    Host Interface Rediscovery - OBSOLETE
  *
  * The rediscovery is performed when we receive a send request and a certain
  * period have elapsed since the last attempt, i.e. we're polling it. We
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h b/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h
index 7a6afba..f9c8f5c 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h
+++ b/src/VBox/HostDrivers/VBoxNetFlt/VBoxNetFltInternal.h
@@ -381,6 +381,7 @@ DECLHIDDEN(int) vboxNetFltPortOsXmit(PVBOXNETFLTINS pThis, void *pvIfData, PINTN
  * It is only called when the state changes.
  *
  * @param   pThis           The instance.
+ * @param   fActive         Whether to active (@c true) or deactive.
  *
  * @remarks Owns the lock for the out-bound trunk port.
  */
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt b/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt
index 7f77a9e..83db297 100755
--- a/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt
+++ b/src/VBox/HostDrivers/VBoxNetFlt/freebsd/files_vboxnetflt
@@ -39,6 +39,7 @@ VBOX_VBOXNETFLT_SOURCES=" \
     ${PATH_ROOT}/include/iprt/err.h=>include/iprt/err.h \
     ${PATH_ROOT}/include/iprt/heap.h=>include/iprt/heap.h \
     ${PATH_ROOT}/include/iprt/initterm.h=>include/iprt/initterm.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
     ${PATH_ROOT}/include/iprt/mangling.h=>include/iprt/mangling.h \
     ${PATH_ROOT}/include/iprt/mem.h=>include/iprt/mem.h \
@@ -57,6 +58,7 @@ VBOX_VBOXNETFLT_SOURCES=" \
     ${PATH_ROOT}/include/iprt/timer.h=>include/iprt/timer.h \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
     ${PATH_ROOT}/include/iprt/uni.h=>include/iprt/uni.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/iprt/uuid.h=>include/iprt/uuid.h \
     ${PATH_ROOT}/include/iprt/nocrt/limits.h=>include/iprt/nocrt/limits.h \
     ${PATH_ROOT}/include/VBox/cdefs.h=>include/VBox/cdefs.h \
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
index c2c3074..11193c5 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
+++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/VBoxNetFlt-linux.c
@@ -770,11 +770,10 @@ static struct sk_buff *vboxNetFltLinuxSkBufFromSG(PVBOXNETFLTINS pThis, PINTNETS
  * @param   pThis               The instance.
  * @param   pBuf                The sk_buff.
  * @param   pSG                 The SG.
- * @param   pvFrame             The frame pointer, optional.
  * @param   cSegs               The number of segments allocated for the SG.
  *                              This should match the number in the mbuf exactly!
  * @param   fSrc                The source of the frame.
- * @param   pGso                Pointer to the GSO context if it's a GSO
+ * @param   pGsoCtx             Pointer to the GSO context if it's a GSO
  *                              internal network frame.  NULL if regular frame.
  */
 DECLINLINE(void) vboxNetFltLinuxSkBufToSG(PVBOXNETFLTINS pThis, struct sk_buff *pBuf, PINTNETSG pSG,
@@ -845,14 +844,9 @@ DECLINLINE(void) vboxNetFltLinuxSkBufToSG(PVBOXNETFLTINS pThis, struct sk_buff *
 }
 
 /**
- * Packet handler,
+ * Packet handler; not really documented - figure it out yourself.
  *
- * @returns 0 or EJUSTRETURN.
- * @param   pThis           The instance.
- * @param   pMBuf           The mbuf.
- * @param   pvFrame         The start of the frame, optional.
- * @param   fSrc            Where the packet (allegedly) comes from, one INTNETTRUNKDIR_* value.
- * @param   eProtocol       The protocol.
+ * @returns 0 or EJUSTRETURN - this is probably copy & pastry and thus wrong.
  */
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 14)
 static int vboxNetFltLinuxPacketHandler(struct sk_buff *pBuf,
@@ -1371,7 +1365,9 @@ static int vboxNetFltLinuxForwardSegment(PVBOXNETFLTINS pThis, struct sk_buff *p
 }
 
 /**
+ * I won't disclose what I do, figure it out yourself, including pThis referencing.
  *
+ * @param   pThis       The net filter instance.
  * @param   pBuf        The socket buffer.  This is consumed by this function.
  */
 static void vboxNetFltLinuxForwardToIntNet(PVBOXNETFLTINS pThis, struct sk_buff *pBuf)
@@ -1608,8 +1604,7 @@ static void vboxNetFltSetLinkState(PVBOXNETFLTINS pThis, struct net_device *pDev
  *
  * @returns VBox status code.
  * @param   pThis           The instance.
- * @param   fRediscovery    If set we're doing a rediscovery attempt, so, don't
- *                          flood the release log.
+ * @param   pDev            The device to attach to.
  */
 static int vboxNetFltLinuxAttachToInterface(PVBOXNETFLTINS pThis, struct net_device *pDev)
 {
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt b/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt
index 3225e05..94adfe4 100755
--- a/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt
+++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/files_vboxnetflt
@@ -30,6 +30,7 @@ VBOX_VBOXNETFLT_SOURCES=" \
     ${PATH_ROOT}/include/iprt/err.h=>include/iprt/err.h \
     ${PATH_ROOT}/include/iprt/heap.h=>include/iprt/heap.h \
     ${PATH_ROOT}/include/iprt/initterm.h=>include/iprt/initterm.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
     ${PATH_ROOT}/include/iprt/mangling.h=>include/iprt/mangling.h \
     ${PATH_ROOT}/include/iprt/mem.h=>include/iprt/mem.h \
@@ -49,6 +50,7 @@ VBOX_VBOXNETFLT_SOURCES=" \
     ${PATH_ROOT}/include/iprt/timer.h=>include/iprt/timer.h \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
     ${PATH_ROOT}/include/iprt/uni.h=>include/iprt/uni.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/iprt/uuid.h=>include/iprt/uuid.h \
     ${PATH_ROOT}/include/iprt/nocrt/limits.h=>include/iprt/nocrt/limits.h \
     ${PATH_ROOT}/include/VBox/cdefs.h=>include/VBox/cdefs.h \
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c b/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
index 8db5212..fc00dcb 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
+++ b/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFlt-solaris.c
@@ -123,7 +123,7 @@ typedef struct VLANHEADER *PVLANHEADER;
 /**
  * Stream Driver hooks.
  */
-static int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pArg, void **ppResult);
+static int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pArg, void **ppvResult);
 static int VBoxNetFltSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd);
 static int VBoxNetFltSolarisDetach(dev_info_t *pDip, ddi_detach_cmd_t enmCmd);
 static int VBoxNetFltSolarisQuiesceNotNeeded(dev_info_t *pDip);
@@ -717,7 +717,7 @@ static int VBoxNetFltSolarisQuiesceNotNeeded(dev_info_t *pDip)
  *
  * @returns  corresponding solaris error code.
  */
-static int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pvArg, void **ppResult)
+static int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pvArg, void **ppvResult)
 {
     LogFunc((DEVICE_NAME ":VBoxNetFltSolarisGetInfo pDip=%p enmCmd=%d pArg=%p instance=%d\n", pDip, enmCmd,
                 getminor((dev_t)pvArg)));
@@ -726,14 +726,14 @@ static int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, voi
     {
         case DDI_INFO_DEVT2DEVINFO:
         {
-            *ppResult = g_pVBoxNetFltSolarisDip;
+            *ppvResult = g_pVBoxNetFltSolarisDip;
             return DDI_SUCCESS;
         }
 
         case DDI_INFO_DEVT2INSTANCE:
         {
             int instance = getminor((dev_t)pvArg);
-            *ppResult = (void *)(uintptr_t)instance;
+            *ppvResult = (void *)(uintptr_t)instance;
             return DDI_SUCCESS;
         }
     }
@@ -1317,7 +1317,7 @@ static int VBoxNetFltSolarisModWritePut(queue_t *pQueue, mblk_t *pMsg)
  * Put the stream in raw mode.
  *
  * @returns VBox status code.
- * @param   pQueue      Pointer to the read queue.
+ * @param   pPromiscStream  Pointer to the read queue.
  */
 static int vboxNetFltSolarisSetRawMode(vboxnetflt_promisc_stream_t *pPromiscStream)
 {
@@ -1821,6 +1821,7 @@ static int vboxNetFltSolarisSetMuxId(vnode_t *pVNode, struct lifreq *pInterface)
  * Get the multiplexor file descriptor of the lower stream.
  *
  * @returns VBox status code.
+ * @param   pVNode  Pointer to the device vnode.
  * @param   MuxId   The multiplexor ID.
  * @param   pFd     Where to store the lower stream file descriptor.
  */
@@ -1908,6 +1909,7 @@ static int vboxNetFltSolarisRelinkIp6(vnode_t *pVNode, struct lifreq *pInterface
  * Dynamically find the position on the host stack where to attach/detach ourselves.
  *
  * @returns VBox status code.
+ * @param   fAttach     Is this an attach or detach.
  * @param   pVNode      Pointer to the lower stream vnode.
  * @param   pModPos     Where to store the module position.
  */
@@ -2644,7 +2646,7 @@ static int vboxNetFltSolarisAttachIp6(PVBOXNETFLTINS pThis, bool fAttach)
 /**
  * Ipv6 dynamic attachment timer callback to attach to the Ipv6 stream if needed.
  *
- * @param   pThis           Pointer to the timer.
+ * @param   pTimer          Pointer to the timer.
  * @param   pvData          Opaque pointer to the instance.
  * @param   iTick           Timer tick (unused).
  */
@@ -2850,6 +2852,7 @@ static int vboxNetFltSolarisAttachToInterface(PVBOXNETFLTINS pThis)
  * @returns Solaris message block.
  * @param   pThis           The instance.
  * @param   pSG             Pointer to the scatter-gather list.
+ * @param   fDst            The destination mask, INTNETTRUNKDIR_XXX. Ignored.
  */
 static mblk_t *vboxNetFltSolarisMBlkFromSG(PVBOXNETFLTINS pThis, PINTNETSG pSG, uint32_t fDst)
 {
@@ -2966,7 +2969,7 @@ static int vboxNetFltSolarisMBlkToSG(PVBOXNETFLTINS pThis, mblk_t *pMsg, PINTNET
  *
  * @returns VBox status code.
  * @param   pMsg        Pointer to the raw message.
- * @param   pDlpiMsg    Where to store the M_PROTO message.
+ * @param   ppDlpiMsg   Where to store the M_PROTO message.
  *
  * @remarks The original raw message would be no longer valid and will be
  *          linked as part of the new DLPI message. Callers must take care
@@ -3369,7 +3372,7 @@ DECLINLINE(bool) vboxNetFltPortSolarisIsHostMac(PVBOXNETFLTINS pThis, PCRTMAC pM
  * @param   pThis       The instance.
  * @param   pStream     Pointer to the stream.
  * @param   pQueue      Pointer to the read queue.
- * @param   pOrigMsg    Pointer to the message.
+ * @param   pMsg        Pointer to the message.
  */
 static int vboxNetFltSolarisRecv(PVBOXNETFLTINS pThis, vboxnetflt_stream_t *pStream, queue_t *pQueue, mblk_t *pMsg)
 {
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFltBow-solaris.c b/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFltBow-solaris.c
index f6b4901..5d8c697 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFltBow-solaris.c
+++ b/src/VBox/HostDrivers/VBoxNetFlt/solaris/VBoxNetFltBow-solaris.c
@@ -120,7 +120,7 @@ extern int      mac_client_set_resources(mac_client_handle_t hClient, mac_resour
 *********************************************************************************************************************************/
 LOCAL int VBoxNetFltSolarisAttach(dev_info_t *pDip, ddi_attach_cmd_t enmCmd);
 LOCAL int VBoxNetFltSolarisDetach(dev_info_t *pDip, ddi_detach_cmd_t enmCmd);
-LOCAL int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pArg, void **ppResult);
+LOCAL int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pArg, void **ppvResult);
 
 
 /*********************************************************************************************************************************
@@ -263,7 +263,7 @@ LOCAL PVBOXNETFLTVNIC vboxNetFltSolarisAllocVNIC(void);
 LOCAL void vboxNetFltSolarisFreeVNIC(PVBOXNETFLTVNIC pVNIC);
 LOCAL void vboxNetFltSolarisDestroyVNIC(PVBOXNETFLTVNIC pVNIC);
 LOCAL int vboxNetFltSolarisCreateVNIC(PVBOXNETFLTINS pThis, PVBOXNETFLTVNIC *ppVNIC);
-LOCAL inline int vboxNetFltSolarisGetLinkId(const char *pszMacName, datalink_id_t *pLinkId);
+DECLINLINE(int) vboxNetFltSolarisGetLinkId(const char *pszMacName, datalink_id_t *pLinkId);
 
 /**
  * Kernel entry points
@@ -424,7 +424,7 @@ LOCAL int VBoxNetFltSolarisDetach(dev_info_t *pDip, ddi_detach_cmd_t enmCmd)
  *
  * @returns corresponding solaris error code.
  */
-LOCAL int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pvArg, void **ppResult)
+LOCAL int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void *pvArg, void **ppvResult)
 {
     Log((DEVICE_NAME ":VBoxNetFltSolarisGetInfo pDip=%p enmCmd=%d pArg=%p instance=%d\n", pDip, enmCmd, getminor((dev_t)pvArg)));
 
@@ -432,14 +432,14 @@ LOCAL int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void
     {
         case DDI_INFO_DEVT2DEVINFO:
         {
-            *ppResult = g_pVBoxNetFltSolarisDip;
+            *ppvResult = g_pVBoxNetFltSolarisDip;
             return DDI_SUCCESS;
         }
 
         case DDI_INFO_DEVT2INSTANCE:
         {
             int instance = getminor((dev_t)pvArg);
-            *ppResult = (void *)(uintptr_t)instance;
+            *ppvResult = (void *)(uintptr_t)instance;
             return DDI_SUCCESS;
         }
     }
@@ -453,10 +453,11 @@ LOCAL int VBoxNetFltSolarisGetInfo(dev_info_t *pDip, ddi_info_cmd_t enmCmd, void
  *
  * @param   pThis           The instance.
  * @param   pSG             Pointer to the scatter-gather list.
+ * @param   fDst            INTNETTRUNKDIR_XXX.
  *
  * @returns Solaris message block.
  */
-LOCAL inline mblk_t *vboxNetFltSolarisMBlkFromSG(PVBOXNETFLTINS pThis, PINTNETSG pSG, uint32_t fDst)
+DECLINLINE(mblk_t *) vboxNetFltSolarisMBlkFromSG(PVBOXNETFLTINS pThis, PINTNETSG pSG, uint32_t fDst)
 {
     Log((DEVICE_NAME ":vboxNetFltSolarisMBlkFromSG pThis=%p pSG=%p\n", pThis, pSG));
 
@@ -811,8 +812,6 @@ LOCAL int vboxNetFltSolarisReportInfo(PVBOXNETFLTINS pThis, mac_handle_t hInterf
  *
  * @param   pThis           The instance.
  * @param   pVNIC           Pointer to the VNIC.
- * @param   pVNICTemplate   Pointer to the VNIC template initialize from, can be
- *                          NULL.
  *
  * @returns VBox status code.
  */
@@ -1010,7 +1009,7 @@ LOCAL PVBOXNETFLTVNIC vboxNetFltSolarisAllocVNIC(void)
  *
  * @param   pVNIC           Pointer to the VNIC.
  */
-LOCAL inline void vboxNetFltSolarisFreeVNIC(PVBOXNETFLTVNIC pVNIC)
+DECLINLINE(void) vboxNetFltSolarisFreeVNIC(PVBOXNETFLTVNIC pVNIC)
 {
     RTMemFree(pVNIC);
 }
@@ -1223,7 +1222,7 @@ LOCAL int vboxNetFltSolarisCreateVNIC(PVBOXNETFLTINS pThis, PVBOXNETFLTVNIC *ppV
  *
  * @returns VBox status code.
  */
-LOCAL inline int vboxNetFltSolarisGetLinkId(const char *pszMacName, datalink_id_t *pLinkId)
+DECLINLINE(int) vboxNetFltSolarisGetLinkId(const char *pszMacName, datalink_id_t *pLinkId)
 {
     /*
      * dls_mgmt_get_linkid() requires to be in a state to answer upcalls. We should always use this
@@ -1249,7 +1248,7 @@ LOCAL inline int vboxNetFltSolarisGetLinkId(const char *pszMacName, datalink_id_
  *
  * @returns VBox status code.
  */
-LOCAL inline int vboxNetFltSolarisSetPromisc(PVBOXNETFLTINS pThis, PVBOXNETFLTVNIC pVNIC)
+DECLINLINE(int) vboxNetFltSolarisSetPromisc(PVBOXNETFLTINS pThis, PVBOXNETFLTVNIC pVNIC)
 {
     int rc = VINF_SUCCESS;
     if (!pVNIC->hPromisc)
@@ -1270,7 +1269,7 @@ LOCAL inline int vboxNetFltSolarisSetPromisc(PVBOXNETFLTINS pThis, PVBOXNETFLTVN
  * @param   pThis           The VM connection instance.
  * @param   pVNIC           Pointer to the VNIC.
  */
-LOCAL inline void vboxNetFltSolarisRemovePromisc(PVBOXNETFLTINS pThis, PVBOXNETFLTVNIC pVNIC)
+DECLINLINE(void) vboxNetFltSolarisRemovePromisc(PVBOXNETFLTINS pThis, PVBOXNETFLTVNIC pVNIC)
 {
     if (pVNIC->hPromisc)
     {
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
index 5baf345..0654cf0 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
@@ -188,8 +188,6 @@ typedef struct _VBOXNETLWF_MODULE {
     /** Work Item to deliver offloading indications at passive IRQL */
     NDIS_HANDLE hWorkItem;
 #endif /* !VBOXNETLWF_SYNC_SEND */
-    /** Name of underlying adapter */
-    ANSI_STRING strMiniportName;
     /** MAC address of underlying adapter */
     RTMAC MacAddr;
     /** Saved offload configuration */
@@ -202,6 +200,8 @@ typedef struct _VBOXNETLWF_MODULE {
     bool fActive;
     /** true if the host wants the adapter to be in promisc mode */
     bool fHostPromisc;
+    /** Name of underlying adapter */
+    char szMiniportName[1];
 } VBOXNETLWF_MODULE;
 typedef VBOXNETLWF_MODULE *PVBOXNETLWF_MODULE;
 
@@ -774,15 +774,35 @@ static NDIS_STATUS vboxNetLwfWinAttach(IN NDIS_HANDLE hFilter, IN NDIS_HANDLE hD
     PVBOXNETLWFGLOBALS pGlobals = (PVBOXNETLWFGLOBALS)hDriverCtx;
     AssertReturn(pGlobals, NDIS_STATUS_FAILURE);
 
+    ANSI_STRING strMiniportName;
+    /* We use the miniport name to associate this filter module with the netflt instance */
+    NTSTATUS rc = RtlUnicodeStringToAnsiString(&strMiniportName,
+                                               pParameters->BaseMiniportName,
+                                               TRUE);
+    if (rc != STATUS_SUCCESS)
+    {
+        Log(("ERROR! vboxNetLwfWinAttach: RtlUnicodeStringToAnsiString(%ls) failed with 0x%x\n",
+             pParameters->BaseMiniportName, rc));
+        return NDIS_STATUS_FAILURE;
+    }
+    DbgPrint("vboxNetLwfWinAttach: friendly name=%wZ\n", pParameters->BaseMiniportInstanceName);
+    DbgPrint("vboxNetLwfWinAttach: name=%Z\n", strMiniportName);
+
+    UINT cbModuleWithNameExtra = sizeof(VBOXNETLWF_MODULE) + strMiniportName.Length;
     PVBOXNETLWF_MODULE pModuleCtx = (PVBOXNETLWF_MODULE)NdisAllocateMemoryWithTagPriority(hFilter,
-                                                                      sizeof(VBOXNETLWF_MODULE),
+                                                                      cbModuleWithNameExtra,
                                                                       VBOXNETLWF_MEM_TAG,
                                                                       LowPoolPriority);
     if (!pModuleCtx)
+    {
+        RtlFreeAnsiString(&strMiniportName);
         return NDIS_STATUS_RESOURCES;
+    }
     Log4(("vboxNetLwfWinAttach: allocated module context 0x%p\n", pModuleCtx));
 
-    NdisZeroMemory(pModuleCtx, sizeof(VBOXNETLWF_MODULE));
+    NdisZeroMemory(pModuleCtx, cbModuleWithNameExtra);
+    NdisMoveMemory(pModuleCtx->szMiniportName, strMiniportName.Buffer, strMiniportName.Length);
+    RtlFreeAnsiString(&strMiniportName);
 
     pModuleCtx->hWorkItem = NdisAllocateIoWorkItem(g_VBoxNetLwfGlobals.hFilterDriver);
     if (!pModuleCtx->hWorkItem)
@@ -793,21 +813,6 @@ static NDIS_STATUS vboxNetLwfWinAttach(IN NDIS_HANDLE hFilter, IN NDIS_HANDLE hD
         return NDIS_STATUS_RESOURCES;
     }
 
-    /* We use the miniport name to associate this filter module with the netflt instance */
-    NTSTATUS rc = RtlUnicodeStringToAnsiString(&pModuleCtx->strMiniportName,
-                                               pParameters->BaseMiniportName,
-                                               TRUE);
-    if (rc != STATUS_SUCCESS)
-    {
-        Log(("ERROR! vboxNetLwfWinAttach: RtlUnicodeStringToAnsiString(%ls) failed with 0x%x\n",
-             pParameters->BaseMiniportName, rc));
-        NdisFreeIoWorkItem(pModuleCtx->hWorkItem);
-        NdisFreeMemory(pModuleCtx, 0, 0);
-        return NDIS_STATUS_FAILURE;
-    }
-    DbgPrint("vboxNetLwfWinAttach: friendly name=%wZ\n", pParameters->BaseMiniportInstanceName);
-    DbgPrint("vboxNetLwfWinAttach: name=%Z\n", pModuleCtx->strMiniportName);
-
     Assert(pParameters->MacAddressLength == sizeof(RTMAC));
     NdisMoveMemory(&pModuleCtx->MacAddr, pParameters->CurrentMacAddress, RT_MIN(sizeof(RTMAC), pParameters->MacAddressLength));
     if (pParameters->DefaultOffloadConfiguration)
@@ -843,7 +848,6 @@ static NDIS_STATUS vboxNetLwfWinAttach(IN NDIS_HANDLE hFilter, IN NDIS_HANDLE hD
     if (!pModuleCtx->hPool)
     {
         Log(("ERROR! vboxNetLwfWinAttach: NdisAllocateNetBufferListPool failed\n"));
-        RtlFreeAnsiString(&pModuleCtx->strMiniportName);
         NdisFreeIoWorkItem(pModuleCtx->hWorkItem);
         NdisFreeMemory(pModuleCtx, 0, 0);
         return NDIS_STATUS_RESOURCES;
@@ -862,7 +866,6 @@ static NDIS_STATUS vboxNetLwfWinAttach(IN NDIS_HANDLE hFilter, IN NDIS_HANDLE hD
         Log(("ERROR! vboxNetLwfWinAttach: NdisFSetAttributes failed with 0x%x\n", Status));
         NdisFreeNetBufferListPool(pModuleCtx->hPool);
         Log4(("vboxNetLwfWinAttach: freed NBL+NB pool 0x%p\n", pModuleCtx->hPool));
-        RtlFreeAnsiString(&pModuleCtx->strMiniportName);
         NdisFreeIoWorkItem(pModuleCtx->hWorkItem);
         NdisFreeMemory(pModuleCtx, 0, 0);
         return NDIS_STATUS_RESOURCES;
@@ -916,7 +919,6 @@ static VOID vboxNetLwfWinDetach(IN NDIS_HANDLE hModuleCtx)
         NdisFreeNetBufferListPool(pModuleCtx->hPool);
         Log4(("vboxNetLwfWinDetach: freed NBL+NB pool 0x%p\n", pModuleCtx->hPool));
     }
-    RtlFreeAnsiString(&pModuleCtx->strMiniportName);
     NdisFreeIoWorkItem(pModuleCtx->hWorkItem);
     NdisFreeMemory(hModuleCtx, 0, 0);
     Log4(("vboxNetLwfWinDetach: freed module context 0x%p\n", pModuleCtx));
@@ -2126,7 +2128,7 @@ VOID vboxNetLwfWinToggleOffloading(PVOID WorkItemContext, NDIS_HANDLE NdisIoWork
         }
         else
         {
-            DbgPrint("VBoxNetLwf: no saved offload config to modify for %Z\n", pModuleCtx->strMiniportName);
+            DbgPrint("VBoxNetLwf: no saved offload config to modify for %s\n", pModuleCtx->szMiniportName);
             NdisZeroMemory(&OffloadConfig, sizeof(OffloadConfig));
             OffloadConfig.Header.Type = NDIS_OBJECT_TYPE_OFFLOAD;
             OffloadConfig.Header.Revision = NDIS_OFFLOAD_REVISION_1;
@@ -2144,7 +2146,7 @@ VOID vboxNetLwfWinToggleOffloading(PVOID WorkItemContext, NDIS_HANDLE NdisIoWork
             Log(("vboxNetLwfWinToggleOffloading: restored offloading config\n"));
         }
         else
-            DbgPrint("VBoxNetLwf: no saved offload config to restore for %Z\n", pModuleCtx->strMiniportName);
+            DbgPrint("VBoxNetLwf: no saved offload config to restore for %s\n", pModuleCtx->szMiniportName);
     }
 }
 
@@ -2331,14 +2333,12 @@ int vboxNetFltOsInitInstance(PVBOXNETFLTINS pThis, void *pvContext)
     LogFlow(("==>vboxNetFltOsInitInstance: instance=%p context=%p\n", pThis, pvContext));
     AssertReturn(pThis, VERR_INVALID_PARAMETER);
     Log(("vboxNetFltOsInitInstance: trunk name=%s\n", pThis->szName));
-    ANSI_STRING strInst;
-    RtlInitAnsiString(&strInst, pThis->szName);
     PVBOXNETLWF_MODULE pModuleCtx = NULL;
     NdisAcquireSpinLock(&g_VBoxNetLwfGlobals.Lock);
     RTListForEach(&g_VBoxNetLwfGlobals.listModules, pModuleCtx, VBOXNETLWF_MODULE, node)
     {
-        DbgPrint("vboxNetFltOsInitInstance: evaluating module, name=%Z\n", pModuleCtx->strMiniportName);
-        if (RtlEqualString(&strInst, &pModuleCtx->strMiniportName, TRUE))
+        DbgPrint("vboxNetFltOsInitInstance: evaluating module, name=%s\n", pModuleCtx->szMiniportName);
+        if (!RTStrICmp(pThis->szName, pModuleCtx->szMiniportName))
         {
             NdisReleaseSpinLock(&g_VBoxNetLwfGlobals.Lock);
             Log(("vboxNetFltOsInitInstance: found matching module, name=%s\n", pThis->szName));
diff --git a/src/VBox/HostDrivers/VBoxPci/VBoxPci.c b/src/VBox/HostDrivers/VBoxPci/VBoxPci.c
index c585387..35905e3 100644
--- a/src/VBox/HostDrivers/VBoxPci/VBoxPci.c
+++ b/src/VBox/HostDrivers/VBoxPci/VBoxPci.c
@@ -1,4 +1,4 @@
-/* $Id $ */
+/* $Id: VBoxPci.c $ */
 /** @file
  * VBoxPci - PCI card passthrough support (Host), Common Code.
  */
@@ -173,7 +173,7 @@ DECLHIDDEN(void) vboxPciDevCleanup(PVBOXRAWPCIINS pThis)
 
 
 /**
- * @copydoc RAWPCIDEVPORT:: pfnInit
+ * @interface_method_impl{RAWPCIDEVPORT,pfnInit}
  */
 static DECLCALLBACK(int) vboxPciDevInit(PRAWPCIDEVPORT pPort, uint32_t fFlags)
 {
@@ -190,7 +190,7 @@ static DECLCALLBACK(int) vboxPciDevInit(PRAWPCIDEVPORT pPort, uint32_t fFlags)
 }
 
 /**
- * @copydoc RAWPCIDEVPORT:: pfnDeinit
+ * @interface_method_impl{RAWPCIDEVPORT,pfnDeinit}
  */
 static DECLCALLBACK(int) vboxPciDevDeinit(PRAWPCIDEVPORT pPort, uint32_t fFlags)
 {
@@ -215,7 +215,7 @@ static DECLCALLBACK(int) vboxPciDevDeinit(PRAWPCIDEVPORT pPort, uint32_t fFlags)
 
 
 /**
- * @copydoc RAWPCIDEVPORT:: pfnDestroy
+ * @interface_method_impl{RAWPCIDEVPORT,pfnDestroy}
  */
 static DECLCALLBACK(int) vboxPciDevDestroy(PRAWPCIDEVPORT pPort)
 {
@@ -247,7 +247,7 @@ static DECLCALLBACK(int) vboxPciDevDestroy(PRAWPCIDEVPORT pPort)
     return rc;
 }
 /**
- * @copydoc RAWPCIDEVPORT:: pfnGetRegionInfo
+ * @interface_method_impl{RAWPCIDEVPORT,pfnGetRegionInfo}
  */
 static DECLCALLBACK(int) vboxPciDevGetRegionInfo(PRAWPCIDEVPORT pPort,
                                                  int32_t        iRegion,
@@ -270,7 +270,7 @@ static DECLCALLBACK(int) vboxPciDevGetRegionInfo(PRAWPCIDEVPORT pPort,
 }
 
 /**
- * @copydoc RAWPCIDEVPORT:: pfnMapRegion
+ * @interface_method_impl{RAWPCIDEVPORT,pfnMapRegion}
  */
 static DECLCALLBACK(int) vboxPciDevMapRegion(PRAWPCIDEVPORT pPort,
                                              int32_t        iRegion,
@@ -292,7 +292,7 @@ static DECLCALLBACK(int) vboxPciDevMapRegion(PRAWPCIDEVPORT pPort,
 }
 
 /**
- * @copydoc RAWPCIDEVPORT:: pfnUnapRegion
+ * @interface_method_impl{RAWPCIDEVPORT,pfnUnmapRegion}
  */
 static DECLCALLBACK(int) vboxPciDevUnmapRegion(PRAWPCIDEVPORT pPort,
                                                int32_t        iRegion,
@@ -313,7 +313,7 @@ static DECLCALLBACK(int) vboxPciDevUnmapRegion(PRAWPCIDEVPORT pPort,
 }
 
 /**
- * @copydoc RAWPCIDEVPORT:: pfnPciCfgRead
+ * @interface_method_impl{RAWPCIDEVPORT,pfnPciCfgRead}
  */
 static DECLCALLBACK(int) vboxPciDevPciCfgRead(PRAWPCIDEVPORT pPort,
                                               uint32_t       Register,
@@ -332,7 +332,7 @@ static DECLCALLBACK(int) vboxPciDevPciCfgRead(PRAWPCIDEVPORT pPort,
 }
 
 /**
- * @copydoc RAWPCIDEVPORT:: pfnPciCfgWrite
+ * @interface_method_impl{RAWPCIDEVPORT,pfnPciCfgWrite}
  */
 static DECLCALLBACK(int) vboxPciDevPciCfgWrite(PRAWPCIDEVPORT pPort,
                                                uint32_t       Register,
@@ -509,7 +509,7 @@ static int vboxPciNewInstance(PVBOXRAWPCIGLOBALS pGlobals,
 }
 
 /**
- * @copydoc RAWPCIFACTORY::pfnCreateAndConnect
+ * @interface_method_impl{RAWPCIFACTORY,pfnCreateAndConnect}
  */
 static DECLCALLBACK(int) vboxPciFactoryCreateAndConnect(PRAWPCIFACTORY       pFactory,
                                                         uint32_t             u32HostAddress,
@@ -544,7 +544,7 @@ unlock:
 }
 
 /**
- * @copydoc RAWPCIFACTORY::pfnRelease
+ * @interface_method_impl{RAWPCIFACTORY,pfnRelease}
  */
 static DECLCALLBACK(void) vboxPciFactoryRelease(PRAWPCIFACTORY pFactory)
 {
@@ -556,7 +556,7 @@ static DECLCALLBACK(void) vboxPciFactoryRelease(PRAWPCIFACTORY pFactory)
 }
 
 /**
- * @copydoc RAWPCIFACTORY::pfnInitVm
+ * @interface_method_impl{RAWPCIFACTORY,pfnInitVm}
  */
 static DECLCALLBACK(int)  vboxPciFactoryInitVm(PRAWPCIFACTORY       pFactory,
                                                PVM                  pVM,
@@ -595,7 +595,7 @@ static DECLCALLBACK(int)  vboxPciFactoryInitVm(PRAWPCIFACTORY       pFactory,
 }
 
 /**
- * @copydoc RAWPCIFACTORY::pfnDeinitVm
+ * @interface_method_impl{RAWPCIFACTORY,pfnDeinitVm}
  */
 static DECLCALLBACK(void)  vboxPciFactoryDeinitVm(PRAWPCIFACTORY       pFactory,
                                                   PVM                  pVM,
@@ -774,3 +774,4 @@ void vboxPciShutdown(PVBOXRAWPCIGLOBALS pGlobals)
     if (RT_SUCCESS(rc))
         vboxPciDeleteGlobals(pGlobals);
 }
+
diff --git a/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c b/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
index 96e82d8..f4f71a8 100644
--- a/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
+++ b/src/VBox/HostDrivers/VBoxPci/linux/VBoxPci-linux.c
@@ -882,9 +882,9 @@ int  vboxPciOsDevPciCfgRead (PVBOXRAWPCIINS pIns, uint32_t Register, PCIRAWMEMLO
  *
  * @param   iIrq            The IRQ number.
  * @param   pvDevId         The device ID, a pointer to PVBOXRAWPCIINS.
- * @param   pvRegs          Register set. Removed in 2.6.19.
+ * @param   pRegs           Register set. Removed in 2.6.19.
  */
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19) && !defined(DOXYGEN_RUNNING)
 static irqreturn_t vboxPciOsIrqHandler(int iIrq, void *pvDevId)
 #else
 static irqreturn_t vboxPciOsIrqHandler(int iIrq, void *pvDevId, struct pt_regs *pRegs)
diff --git a/src/VBox/HostDrivers/VBoxPci/linux/files_vboxpci b/src/VBox/HostDrivers/VBoxPci/linux/files_vboxpci
index d8136fc..7b1db27 100755
--- a/src/VBox/HostDrivers/VBoxPci/linux/files_vboxpci
+++ b/src/VBox/HostDrivers/VBoxPci/linux/files_vboxpci
@@ -30,6 +30,7 @@ VBOX_VBOXPCI_SOURCES=" \
     ${PATH_ROOT}/include/iprt/err.h=>include/iprt/err.h \
     ${PATH_ROOT}/include/iprt/heap.h=>include/iprt/heap.h \
     ${PATH_ROOT}/include/iprt/initterm.h=>include/iprt/initterm.h \
+    ${PATH_ROOT}/include/iprt/latin1.h=>include/iprt/latin1.h \
     ${PATH_ROOT}/include/iprt/log.h=>include/iprt/log.h \
     ${PATH_ROOT}/include/iprt/mangling.h=>include/iprt/mangling.h \
     ${PATH_ROOT}/include/iprt/mem.h=>include/iprt/mem.h \
@@ -48,6 +49,7 @@ VBOX_VBOXPCI_SOURCES=" \
     ${PATH_ROOT}/include/iprt/timer.h=>include/iprt/timer.h \
     ${PATH_ROOT}/include/iprt/types.h=>include/iprt/types.h \
     ${PATH_ROOT}/include/iprt/uni.h=>include/iprt/uni.h \
+    ${PATH_ROOT}/include/iprt/utf16.h=>include/iprt/utf16.h \
     ${PATH_ROOT}/include/iprt/uuid.h=>include/iprt/uuid.h \
     ${PATH_ROOT}/include/iprt/nocrt/limits.h=>include/iprt/nocrt/limits.h \
     ${PATH_ROOT}/include/VBox/cdefs.h=>include/VBox/cdefs.h \
diff --git a/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.cpp b/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.cpp
index d124883..49a0fe6 100644
--- a/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.cpp
@@ -401,12 +401,18 @@ void VBoxUSBFilterRemoveOwner(VBOXUSBFILTER_CONTEXT Owner)
  * Unlike the VBoxUSBFilterMatch, returns Owner also if exclude filter is matched
  *
  * @returns Owner on if matched, VBOXUSBFILTER_CONTEXT_NIL it not matched.
- * @param   pDevice     The device data as a filter structure.
- *                      See USBFilterMatch for how to construct this.
- * @param   puId        Where to store the filter id (optional).
- * @param   pfFilter    Where to store whether the device must be filtered or not
+ * @param   pDevice             The device data as a filter structure.
+ *                              See USBFilterMatch for how to construct this.
+ * @param   puId                Where to store the filter id (optional).
+ * @param   fRemoveFltIfOneShot Whether or not to remove one-shot filters on
+ *                              match.
+ * @param   pfFilter            Where to store whether the device must be filtered or not
+ * @param   pfIsOneShot         Where to return whetehr the match was a one-shot
+ *                              filter or not.  Optional.
+ *
  */
-VBOXUSBFILTER_CONTEXT VBoxUSBFilterMatchEx(PCUSBFILTER pDevice, uintptr_t *puId, bool fRemoveFltIfOneShot, bool *pfFilter, bool *pfIsOneShot)
+VBOXUSBFILTER_CONTEXT VBoxUSBFilterMatchEx(PCUSBFILTER pDevice, uintptr_t *puId,
+                                           bool fRemoveFltIfOneShot, bool *pfFilter, bool *pfIsOneShot)
 {
     /*
      * Validate input.
diff --git a/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.h b/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.h
index 2df3d5a..07ded8b 100644
--- a/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.h
+++ b/src/VBox/HostDrivers/VBoxUSB/VBoxUSBFilterMgr.h
@@ -22,6 +22,8 @@
 
 RT_C_DECLS_BEGIN
 
+/** @todo r=bird: VBOXUSBFILTER_CONTEXT isn't following the coding
+ *        guildlines. Don't know which clueless dude did this...  */
 #if defined(RT_OS_WINDOWS)
 typedef struct VBOXUSBFLTCTX *VBOXUSBFILTER_CONTEXT;
 #define VBOXUSBFILTER_CONTEXT_NIL NULL
diff --git a/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c b/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c
index a432c68..c36f632 100644
--- a/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c
+++ b/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c
@@ -329,7 +329,8 @@ LOCAL int vboxUSBSolarisProcessIOCtl(int iFunction, void *pvState, int Mode, PVB
                                      size_t *pcbDataOut);
 LOCAL bool vboxUSBSolarisIsUSBDevice(dev_info_t *pDip);
 
-/** Device Operation Hooks */
+/** @name Device Operation Hooks
+ * @{ */
 LOCAL int vboxUSBSolarisSendURB(vboxusb_state_t *pState, PVBOXUSBREQ_URB pUrbReq, int Mode);
 LOCAL int vboxUSBSolarisReapURB(vboxusb_state_t *pState, PVBOXUSBREQ_URB pUrbReq, int Mode);
 LOCAL int vboxUSBSolarisClearEndPoint(vboxusb_state_t *pState, uint8_t bEndpoint);
@@ -339,8 +340,10 @@ LOCAL int vboxUSBSolarisSetInterface(vboxusb_state_t *pState, uint8_t uInterface
 LOCAL int vboxUSBSolarisCloseDevice(vboxusb_state_t *pState, VBOXUSB_RESET_LEVEL enmReset);
 LOCAL int vboxUSBSolarisAbortPipe(vboxusb_state_t *pState, uint8_t bEndpoint);
 LOCAL int vboxUSBSolarisGetConfigIndex(vboxusb_state_t *pState, uint_t uCfgValue);
+/** @} */
 
-/** Hotplug & Power Management Hooks */
+/** @name Hotplug & Power Management Hooks
+ * @{ */
 LOCAL inline void vboxUSBSolarisNotifyHotplug(vboxusb_state_t *pState);
 LOCAL int vboxUSBSolarisDeviceDisconnected(dev_info_t *pDip);
 LOCAL int vboxUSBSolarisDeviceReconnected(dev_info_t *pDip);
@@ -352,13 +355,18 @@ LOCAL void vboxUSBSolarisDeviceResume(vboxusb_state_t *pState);
 LOCAL void vboxUSBSolarisDeviceRestore(vboxusb_state_t *pState);
 LOCAL void vboxUSBSolarisPowerBusy(vboxusb_state_t *pState);
 LOCAL void vboxUSBSolarisPowerIdle(vboxusb_state_t *pState);
+/** @} */
 
-/** Monitor Hooks */
+/** @name Monitor Hooks
+ * @{ */
 int VBoxUSBMonSolarisRegisterClient(dev_info_t *pClientDip, PVBOXUSB_CLIENT_INFO pClientInfo);
 int VBoxUSBMonSolarisUnregisterClient(dev_info_t *pClientDip);
+/** @} */
 
-/** Callbacks from Monitor */
+/** @name Callbacks from Monitor
+ * @{ */
 LOCAL int vboxUSBSolarisSetConsumerCredentials(RTPROCESS Process, int Instance, void *pvReserved);
+/** @} */
 
 
 /*********************************************************************************************************************************
@@ -1550,7 +1558,7 @@ static inline int vboxUSBSolarisToVBoxRC(int UsbRc)
 /**
  * Convert Solaris' USBA device state to VBox's error code.
  *
- * @param   UsbRc           Solaris USBA error code.
+ * @param   uDeviceState        The USB device state to convert.
  *
  * @returns VBox error code.
  */
@@ -2059,7 +2067,7 @@ LOCAL int vboxUSBSolarisClearEndPoint(vboxusb_state_t *pState, uint8_t bEndpoint
  * Set configuration (SET_CONFIGURATION)
  *
  * @param   pState          The USB device instance.
- * @param   uCfgValue       The Configuration value.
+ * @param   bCfgValue       The Configuration value.
  *
  * @returns VBox error code.
  */
@@ -2215,7 +2223,7 @@ LOCAL int vboxUSBSolarisSetInterface(vboxusb_state_t *pState, uint8_t uInterface
  * Close the USB device and reset it if required.
  *
  * @param   pState          The USB device instance.
- * @param   ResetLevel      The reset level.
+ * @param   enmReset        The reset level.
  *
  * @returns VBox error code.
  */
@@ -2349,14 +2357,13 @@ LOCAL int vboxUSBSolarisAbortPipe(vboxusb_state_t *pState, uint8_t bEndpoint)
  * @param   pState          The USB device instance.
  * @param   pEpData         The Endpoint data.
  * @param   uCfgValue       The Configuration value.
- * @param   uCfgIndex       The Configuration index.
  * @param   uInterface      The Interface.
  * @param   uAlt            The Alternate setting.
  *
  * @returns VBox error code.
  */
 LOCAL int vboxUSBSolarisInitEndPoint(vboxusb_state_t *pState, usb_ep_data_t *pEpData, uchar_t uCfgValue,
-                                uchar_t uInterface, uchar_t uAlt)
+                                     uchar_t uInterface, uchar_t uAlt)
 {
     LogFunc((DEVICE_NAME ":vboxUSBSolarisInitEndPoint pState=%p pEpData=%p CfgVal=%d Iface=%d Alt=%d", pState,
                     pEpData, uCfgValue, uInterface, uAlt));
@@ -2814,9 +2821,7 @@ LOCAL int vboxUSBSolarisGetConfigIndex(vboxusb_state_t *pState, uint_t uCfgValue
  * Allocates and initializes an Isoc. In URB from the ring-3 equivalent.
  *
  * @param   pState          The USB device instance.
- * @param   pUrb            The URB to initialize.
  * @param   pUrbReq         Opaque pointer to the complete request.
- * @param   pMsg            Pointer to the allocated request data.
  *
  * @returns The allocated Isoc. In URB to be used.
  */
diff --git a/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSBMon-solaris.c b/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSBMon-solaris.c
index c0d9c9e..19e4951 100644
--- a/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSBMon-solaris.c
+++ b/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSBMon-solaris.c
@@ -668,10 +668,13 @@ static int VBoxUSBMonSolarisIOCtl(dev_t Dev, int Cmd, intptr_t pArg, int Mode, c
  * @returns  VBox status code.
  *
  * @param   iFunction           The requested function.
- * @param   pvState             Opaque pointer to driver state used for getting ring-3 process (Id).
- * @param   pvData              The input/output data buffer. Can be NULL depending on the function.
+ * @param   pvState             Opaque pointer to driver state used for getting
+ *                              ring-3 process (Id).
+ * @param   pvData              The input/output data buffer. Can be NULL
+ *                              depending on the function.
  * @param   cbData              The max size of the data buffer.
- * @param   pcbDataReturned     Where to store the amount of returned data. Can be NULL.
+ * @param   pcbReturnedData     Where to store the amount of returned data.  Can
+ *                              be NULL.
  */
 static int vboxUSBMonSolarisProcessIOCtl(int iFunction, void *pvState, void *pvData, size_t cbData, size_t *pcbReturnedData)
 {
@@ -903,8 +906,6 @@ static int vboxUSBMonSolarisClientInfo(vboxusbmon_state_t *pState, PVBOXUSB_CLIE
  * Registers client driver.
  *
  * @returns VBox status code.
- * @param   pszDevicePath       The device path of the client driver.
- * @param   Instance            The client driver instance.
  */
 int VBoxUSBMonSolarisRegisterClient(dev_info_t *pClientDip, PVBOXUSB_CLIENT_INFO pClientInfo)
 {
@@ -932,11 +933,9 @@ int VBoxUSBMonSolarisRegisterClient(dev_info_t *pClientDip, PVBOXUSB_CLIENT_INFO
 
             return VINF_SUCCESS;
         }
-        else
-            return VERR_NO_MEMORY;
+        return VERR_NO_MEMORY;
     }
-    else
-        return VERR_INVALID_STATE;
+    return VERR_INVALID_STATE;
 }
 
 
@@ -944,8 +943,6 @@ int VBoxUSBMonSolarisRegisterClient(dev_info_t *pClientDip, PVBOXUSB_CLIENT_INFO
  * Deregisters client driver.
  *
  * @returns VBox status code.
- * @param   pszDevicePath       The device path of the client driver.
- * @param   Instance            The client driver instance.
  */
 int VBoxUSBMonSolarisUnregisterClient(dev_info_t *pClientDip)
 {
@@ -984,8 +981,7 @@ int VBoxUSBMonSolarisUnregisterClient(dev_info_t *pClientDip)
         LogRel((DEVICE_NAME ":VBoxUSBMonSolarisUnregisterClient Failed to find registered client %p\n", pClientDip));
         return VERR_NOT_FOUND;
     }
-    else
-        return VERR_INVALID_STATE;
+    return VERR_INVALID_STATE;
 }
 
 
diff --git a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp
index 4c9cb3a..966fe96 100644
--- a/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp
+++ b/src/VBox/HostDrivers/VBoxUSB/win/dev/VBoxUsbRt.cpp
@@ -1342,7 +1342,14 @@ static NTSTATUS vboxUsbRtUrbSend(PVBOXUSBDEV_EXT pDevExt, PIRP pIrp, PUSBSUP_URB
                 iStartFrame = pPipeInfo->NextScheduledFrame;
                 if ((iFrame < iStartFrame) || (iStartFrame > iFrame + 512))
                     iFrame = iStartFrame;
-                pPipeInfo->NextScheduledFrame = iFrame + pUrbInfo->numIsoPkts;
+                /* For full-speed devices, there must be one transfer per frame (Windows USB
+                 * stack requirement), but URBs can contain multiple packets. For high-speed or
+                 * faster transfers, we expect one URB per frame, regardless of the interval.
+                 */
+                if (pDevExt->Rt.devdescr->bcdUSB < 0x300 && !pDevExt->Rt.fIsHighSpeed)
+                    pPipeInfo->NextScheduledFrame = iFrame + pUrbInfo->numIsoPkts;
+                else
+                    pPipeInfo->NextScheduledFrame = iFrame + 1;
                 pUrb->UrbIsochronousTransfer.StartFrame = iFrame;
                 break;
             }
diff --git a/src/VBox/HostServices/GuestControl/service.cpp b/src/VBox/HostServices/GuestControl/service.cpp
index 6748207..c2043eb 100644
--- a/src/VBox/HostServices/GuestControl/service.cpp
+++ b/src/VBox/HostServices/GuestControl/service.cpp
@@ -919,7 +919,7 @@ public:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnUnload
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnUnload}
      * Simply deletes the service object
      */
     static DECLCALLBACK(int) svcUnload(void *pvService)
@@ -934,7 +934,7 @@ public:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnConnect
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnConnect}
      * Stub implementation of pfnConnect and pfnDisconnect.
      */
     static DECLCALLBACK(int) svcConnect(void *pvService,
@@ -948,7 +948,7 @@ public:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnConnect
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnConnect}
      * Stub implementation of pfnConnect and pfnDisconnect.
      */
     static DECLCALLBACK(int) svcDisconnect(void *pvService,
@@ -962,7 +962,7 @@ public:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnCall
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnCall}
      * Wraps to the call member function
      */
     static DECLCALLBACK(void) svcCall(void * pvService,
@@ -980,7 +980,7 @@ public:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnHostCall
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnHostCall}
      * Wraps to the hostCall member function
      */
     static DECLCALLBACK(int) svcHostCall(void *pvService,
@@ -995,7 +995,7 @@ public:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnRegisterExtension
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnRegisterExtension}
      * Installs a host callback for notifications of property changes.
      */
     static DECLCALLBACK(int) svcRegisterExtension(void *pvService,
@@ -1402,8 +1402,8 @@ int Service::hostProcessCommand(uint32_t eFunction, uint32_t cParms, VBOXHGCMSVC
 }
 
 /**
- * Handle an HGCM service call.
- * @copydoc VBOXHGCMSVCFNTABLE::pfnCall
+ * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnCall}
+ *
  * @note    All functions which do not involve an unreasonable delay will be
  *          handled synchronously.  If needed, we will add a request handler
  *          thread in future for those which do.
@@ -1504,7 +1504,7 @@ void Service::call(VBOXHGCMCALLHANDLE callHandle, uint32_t u32ClientID,
 
 /**
  * Service call handler for the host.
- * @copydoc VBOXHGCMSVCFNTABLE::pfnHostCall
+ * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnHostCall}
  * @thread  hgcm
  */
 int Service::hostCall(uint32_t eFunction, uint32_t cParms, VBOXHGCMSVCPARM paParms[])
diff --git a/src/VBox/HostServices/GuestControl/testcase/tstGuestControlSvc.cpp b/src/VBox/HostServices/GuestControl/testcase/tstGuestControlSvc.cpp
index 3710329..e8b5c66 100644
--- a/src/VBox/HostServices/GuestControl/testcase/tstGuestControlSvc.cpp
+++ b/src/VBox/HostServices/GuestControl/testcase/tstGuestControlSvc.cpp
@@ -54,7 +54,7 @@ static DECLCALLBACK(void) callComplete(VBOXHGCMCALLHANDLE callHandle, int32_t rc
  * Initialise the HGCM service table as much as we need to start the
  * service.
  *
- * @return IPRT status.
+ * @return IPRT status code.
  * @param  pTable the table to initialise
  */
 int initTable(VBOXHGCMSVCFNTABLE *pTable, VBOXHGCMSVCHELPERS *pHelpers)
diff --git a/src/VBox/HostServices/GuestProperties/service.cpp b/src/VBox/HostServices/GuestProperties/service.cpp
index 4d57abb..3722361 100644
--- a/src/VBox/HostServices/GuestProperties/service.cpp
+++ b/src/VBox/HostServices/GuestProperties/service.cpp
@@ -296,7 +296,7 @@ public:
     { }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnUnload
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnUnload}
      * Simply deletes the service object
      */
     static DECLCALLBACK(int) svcUnload(void *pvService)
@@ -311,7 +311,7 @@ public:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnConnect
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnConnect}
      * Stub implementation of pfnConnect and pfnDisconnect.
      */
     static DECLCALLBACK(int) svcConnectDisconnect(void * /* pvService */,
@@ -322,7 +322,7 @@ public:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnCall
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnCall}
      * Wraps to the call member function
      */
     static DECLCALLBACK(void) svcCall(void * pvService,
@@ -341,7 +341,7 @@ public:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnHostCall
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnHostCall}
      * Wraps to the hostCall member function
      */
     static DECLCALLBACK(int) svcHostCall(void *pvService,
@@ -358,7 +358,7 @@ public:
     }
 
     /**
-     * @copydoc VBOXHGCMSVCHELPERS::pfnRegisterExtension
+     * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnRegisterExtension}
      * Installs a host callback for notifications of property changes.
      */
     static DECLCALLBACK(int) svcRegisterExtension(void *pvService,
@@ -1314,7 +1314,7 @@ int Service::notifyHost(const char *pszName, const char *pszValue,
 
 /**
  * Handle an HGCM service call.
- * @copydoc VBOXHGCMSVCFNTABLE::pfnCall
+ * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnCall}
  * @note    All functions which do not involve an unreasonable delay will be
  *          handled synchronously.  If needed, we will add a request handler
  *          thread in future for those which do.
@@ -1432,7 +1432,7 @@ void Service::dbgInfo(void *pvUser, PCDBGFINFOHLP pHlp, const char *pszArgs)
 
 /**
  * Service call handler for the host.
- * @copydoc VBOXHGCMSVCFNTABLE::pfnHostCall
+ * @interface_method_impl{VBOXHGCMSVCFNTABLE,pfnHostCall}
  * @thread  hgcm
  */
 int Service::hostCall (uint32_t eFunction, uint32_t cParms, VBOXHGCMSVCPARM paParms[])
diff --git a/src/VBox/HostServices/SharedOpenGL/render/renderspu.c b/src/VBox/HostServices/SharedOpenGL/render/renderspu.c
index 2efc409..91a38fc 100644
--- a/src/VBox/HostServices/SharedOpenGL/render/renderspu.c
+++ b/src/VBox/HostServices/SharedOpenGL/render/renderspu.c
@@ -470,7 +470,7 @@ static void renderCompareGLExtensions(const char *pszAvailableExts, const char *
                 fPrintHeader = 0;
                 crInfo("Host does not support OpenGL extension(s):");
             }
-            crInfo("%.*s", offExtEnd, pszExt);
+            crInfo("  %.*s", offExtEnd, pszExt);
         }
 
         pszExt += offExtEnd;
diff --git a/src/VBox/HostServices/auth/winlogon/winlogon.cpp b/src/VBox/HostServices/auth/winlogon/winlogon.cpp
index 4cac37f..99c54e8 100644
--- a/src/VBox/HostServices/auth/winlogon/winlogon.cpp
+++ b/src/VBox/HostServices/auth/winlogon/winlogon.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2011 Oracle Corporation
+ * 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;
@@ -16,38 +16,85 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-/* If defined, debug messages will be written to the specified file. */
-// #define AUTH_DEBUG_FILE_NAME "\\VBoxAuth.log"
-
-#include <stdio.h>
-#include <string.h>
+/* If defined, debug messages will be written to the debugger. */
+// #define AUTH_DEBUG
 
 #include <Windows.h>
 
 #include <VBox/VBoxAuth.h>
 
-static void dprintf(const char *fmt, ...)
+#ifdef AUTH_DEBUG
+#include <stdio.h>
+
+static void dprintfw(const WCHAR *fmt, ...)
 {
-#ifdef AUTH_DEBUG_FILE_NAME
    va_list va;
-
    va_start(va, fmt);
 
-   char buffer[1024];
+   WCHAR buffer[1024];
 
-   _vsnprintf (buffer, sizeof (buffer), fmt, va);
+   _vsnwprintf(buffer, sizeof (buffer), fmt, va);
 
-   OutputDebugStringA(buffer);
+   OutputDebugStringW(buffer);
 
-   FILE *f = fopen (AUTH_DEBUG_FILE_NAME, "ab");
-   if (f)
-   {
-       fprintf (f, "%s", buffer);
-       fclose (f);
-   }
-
-   va_end (va);
+   va_end(va);
+}
+#define DBGAUTH(a) dprintfw a
+#else
+#define DBGAUTH(a)
 #endif
+
+static WCHAR swszEmpty[] = { L"" };
+
+static void freeWideChar(WCHAR *pwszString)
+{
+    if (pwszString && pwszString != &swszEmpty[0])
+    {
+        size_t cb = (wcslen(pwszString) + 1) * sizeof(WCHAR);
+        SecureZeroMemory(pwszString, cb);
+        free(pwszString);
+    }
+}
+
+static WCHAR *utf8ToWideChar(const char *pszString)
+{
+    /*
+     * Shortcut for empty strings.
+     */
+    if (!pszString || *pszString == 0)
+        return &swszEmpty[0];
+
+    /*
+     * Return NULL on errors.
+     */
+    WCHAR *pwszString = NULL;
+
+    /*
+     * First calc result string length.
+     */
+    const DWORD dwFlags = MB_ERR_INVALID_CHARS;
+    int cwc = MultiByteToWideChar(CP_UTF8, dwFlags, pszString, -1, NULL, 0);
+    if (cwc > 0)
+    {
+        /*
+         * Alloc space for result buffer.
+         */
+        pwszString = (WCHAR *)malloc(cwc * sizeof(WCHAR));
+        if (pwszString)
+        {
+            /*
+             * Do the translation.
+             */
+            if (MultiByteToWideChar(CP_UTF8, dwFlags, pszString, -1, pwszString, cwc) <= 0)
+            {
+                /* translation error */
+                free(pwszString);
+                pwszString = NULL;
+            }
+        }
+    }
+
+    return pwszString;
 }
 
 extern "C"
@@ -63,42 +110,55 @@ AuthResult AUTHCALL AuthEntry (const char *szCaller,
                                int fLogon,
                                unsigned clientId)
 {
-    AuthResult result = AuthResultAccessDenied;
-
-    LPTSTR lpszUsername = (char *)szUser;
-    LPTSTR lpszDomain   = (char *)szDomain;
-    LPTSTR lpszPassword = (char *)szPassword;
-
-    /* LOGON32_LOGON_INTERACTIVE is intended for users who will be interactively using the computer,
-     * such as a user being logged on by a terminal server, remote shell, or similar process.
-     */
-    DWORD dwLogonType     = LOGON32_LOGON_INTERACTIVE;
-    DWORD dwLogonProvider = LOGON32_PROVIDER_DEFAULT;
-
-    HANDLE hToken;
-
-    dprintf("u[%s], d[%s], p[%s]\n", lpszUsername, lpszDomain, lpszPassword);
+    if (!fLogon)
+    {
+        /* Nothing to cleanup. The return code does not matter. */
+        return AuthResultAccessDenied;
+    }
 
-    BOOL fSuccess = LogonUser(lpszUsername,
-                              lpszDomain,
-                              lpszPassword,
-                              dwLogonType,
-                              dwLogonProvider,
-                              &hToken);
+    LPWSTR lpwszUsername = utf8ToWideChar(szUser);
+    LPWSTR lpwszDomain   = utf8ToWideChar(szDomain);
+    LPWSTR lpwszPassword = utf8ToWideChar(szPassword);
 
-    if (fSuccess)
-    {
-        dprintf("LogonUser success. hToken = %p\n", hToken);
+    DBGAUTH((L"u[%ls], d[%ls], p[%ls]\n", lpwszUsername, lpwszDomain, lpwszPassword));
 
-        result = AuthResultAccessGranted;
+    AuthResult result = AuthResultAccessDenied;
 
-        CloseHandle (hToken);
-    }
-    else
+    if (lpwszUsername && lpwszDomain && lpwszPassword)
     {
-        dprintf("LogonUser failed %08X\n", GetLastError ());
+        /* LOGON32_LOGON_INTERACTIVE is intended for users who will be interactively using the computer,
+         * such as a user being logged on by a terminal server, remote shell, or similar process.
+         */
+        DWORD dwLogonType     = LOGON32_LOGON_INTERACTIVE;
+        DWORD dwLogonProvider = LOGON32_PROVIDER_DEFAULT;
+
+        HANDLE hToken;
+
+        BOOL fSuccess = LogonUserW(lpwszUsername,
+                                   lpwszDomain,
+                                   lpwszPassword,
+                                   dwLogonType,
+                                   dwLogonProvider,
+                                   &hToken);
+
+        if (fSuccess)
+        {
+            DBGAUTH((L"LogonUser success. hToken = %p\n", hToken));
+
+            result = AuthResultAccessGranted;
+
+            CloseHandle(hToken);
+        }
+        else
+        {
+            DBGAUTH((L"LogonUser failed %08X\n", GetLastError()));
+        }
     }
 
+    freeWideChar(lpwszUsername);
+    freeWideChar(lpwszDomain);
+    freeWideChar(lpwszPassword);
+
     return result;
 }
 
diff --git a/src/VBox/Installer/darwin/VBoxKEXTs/postflight b/src/VBox/Installer/darwin/VBoxKEXTs/postflight
index d602688..39c8ba7 100755
--- a/src/VBox/Installer/darwin/VBoxKEXTs/postflight
+++ b/src/VBox/Installer/darwin/VBoxKEXTs/postflight
@@ -42,6 +42,17 @@ rm -Rfv \
 #
 # Install the launchd script.
 #
+# Make sure "/Library/LaunchDaemons/ exists first as some uninstallers/users
+# may be silly enough to remove it.  We assume that /Library exists and will
+# not try create it because it normally has extra ACLs.
+#
+if [ ! -e "/Library/LaunchDaemons/" ]; then
+    set -e
+    mkdir "/Library/LaunchDaemons"
+    chmod 755 "/Library/LaunchDaemons"
+    chown root:wheel "/Library/LaunchDaemons"
+    set +e
+fi
 rm -vf "/Library/LaunchDaemons/org.virtualbox.startup.plist"
 set -e
 ln -s  "../Application Support/VirtualBox/LaunchDaemons/org.virtualbox.startup.plist" \
diff --git a/src/VBox/Installer/linux/distributions_deb b/src/VBox/Installer/linux/distributions_deb
index 9f5cc77..fa98505 100644
--- a/src/VBox/Installer/linux/distributions_deb
+++ b/src/VBox/Installer/linux/distributions_deb
@@ -2,6 +2,7 @@ _Debian_sid      = DEBIAN_8_0
 _Debian_jessie   = DEBIAN_8_0
 _Debian_wheezy   = DEBIAN_7_0
 _Debian_squeeze  = DEBIAN_6_0
+_Ubuntu_wily     = UBUNTU_15_10
 _Ubuntu_trusty   = UBUNTU_14_04
 _Ubuntu_raring   = UBUNTU_13_04
 _Ubuntu_quantal  = UBUNTU_12_10
diff --git a/src/VBox/Installer/linux/routines.sh b/src/VBox/Installer/linux/routines.sh
index ec9ad10..906b90f 100644
--- a/src/VBox/Installer/linux/routines.sh
+++ b/src/VBox/Installer/linux/routines.sh
@@ -166,7 +166,7 @@ install_init_script()
     test -L "/sbin/rc${name}" && rm "/sbin/rc${name}"
     ln -s "${script}" "/sbin/rc${name}"
     if test -x "`which systemctl 2>/dev/null`"; then
-        if ! test -L /sbin/init || ls -l /sbin/init | grep -q ">.*systemd"; then
+        if ! test -f /sbin/init || ls -l /sbin/init | grep -q ">.*systemd"; then
             { systemd_wrap_init_script "$script" "$name"; return; }
         fi
     fi
diff --git a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
index 8f343a5..b29b3c3 100644
--- a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
+++ b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
@@ -28,7 +28,7 @@ License:   GPLv2
 Group:     Applications/System
 Vendor:    Oracle Corporation
 BuildRoot: %BUILDROOT%
-Requires:  %INITSCRIPTS% %LIBASOUND%
+Requires:  %INITSCRIPTS% %LIBASOUND% net-tools
 
 %if %{?rpm_suse:1}%{!?rpm_suse:0}
 %debug_package
diff --git a/src/VBox/Installer/linux/vboxautostart-service.sh b/src/VBox/Installer/linux/vboxautostart-service.sh
index a119537..bd51261 100755
--- a/src/VBox/Installer/linux/vboxautostart-service.sh
+++ b/src/VBox/Installer/linux/vboxautostart-service.sh
@@ -51,10 +51,6 @@ elif [ -f /etc/debian_version ]; then
     system=debian
 elif [ -f /etc/gentoo-release ]; then
     system=gentoo
-elif [ -f /etc/slackware-version ]; then
-    system=slackware
-elif [ -f /etc/lfs-release ]; then
-    system=lfs
 else
     system=other
 fi
@@ -173,10 +169,15 @@ if [ "$system" = "gentoo" ]; then
     fi
 fi
 
-if [ "$system" = "slackware" ]; then
+if [ "$system" = "other" ]; then
     killproc() {
-        killall $1
-        rm -f $PIDFILE
+        kp_binary="${1##*/}"
+        pkill "${kp_binary}" || return 0
+        sleep 1
+        pkill "${kp_binary}" || return 0
+        sleep 1
+        pkill -9 "${kp_binary}"
+        return 0
     }
     if [ -n "$NOLSB" ]; then
         fail_msg() {
@@ -196,43 +197,6 @@ if [ "$system" = "slackware" ]; then
     }
 fi
 
-if [ "$system" = "lfs" ]; then
-    . /etc/rc.d/init.d/functions
-    if [ -n "$NOLSB" ]; then
-        fail_msg() {
-            echo_failure
-        }
-        succ_msg() {
-            echo_ok
-        }
-        begin_msg() {
-            echo $1
-        }
-    fi
-    start_daemon() {
-        usr="$1"
-        shift
-        su - $usr -c "$*"
-    }
-    status() {
-        statusproc $1
-    }
-fi
-
-if [ "$system" = "other" ]; then
-    if [ -n "$NOLSB" ]; then
-        fail_msg() {
-            echo " ...fail!"
-        }
-        succ_msg() {
-            echo " ...done."
-        }
-        begin_msg() {
-            echo -n "$1"
-        }
-    fi
-fi
-
 vboxdrvrunning() {
     lsmod | grep -q "vboxdrv[^_-]"
 }
diff --git a/src/VBox/Installer/linux/vboxballoonctrl-service.sh b/src/VBox/Installer/linux/vboxballoonctrl-service.sh
index d7bd437..40a738b 100755
--- a/src/VBox/Installer/linux/vboxballoonctrl-service.sh
+++ b/src/VBox/Installer/linux/vboxballoonctrl-service.sh
@@ -55,12 +55,6 @@ elif [ -f /etc/debian_version ]; then
 elif [ -f /etc/gentoo-release ]; then
     system=gentoo
     PIDFILE="/var/run/vboxballoonctrl-service"
-elif [ -f /etc/slackware-version ]; then
-    system=slackware
-    PIDFILE="/var/run/vboxballoonctrl-service"
-elif [ -f /etc/lfs-release ]; then
-    system=lfs
-    PIDFILE="/var/run/vboxballoonctrl-service.pid"
 else
     system=other
     if [ -d /var/run -a -w /var/run ]; then
@@ -182,10 +176,15 @@ if [ "$system" = "gentoo" ]; then
     fi
 fi
 
-if [ "$system" = "slackware" ]; then
+if [ "$system" = "other" ]; then
     killproc() {
-        killall $1
-        rm -f $PIDFILE
+        kp_binary="${1##*/}"
+        pkill "${kp_binary}" || return 0
+        sleep 1
+        pkill "${kp_binary}" || return 0
+        sleep 1
+        pkill -9 "${kp_binary}"
+        return 0
     }
     if [ -n "$NOLSB" ]; then
         fail_msg() {
@@ -205,43 +204,6 @@ if [ "$system" = "slackware" ]; then
     }
 fi
 
-if [ "$system" = "lfs" ]; then
-    . /etc/rc.d/init.d/functions
-    if [ -n "$NOLSB" ]; then
-        fail_msg() {
-            echo_failure
-        }
-        succ_msg() {
-            echo_ok
-        }
-        begin_msg() {
-            echo $1
-        }
-    fi
-    start_daemon() {
-        usr="$1"
-        shift
-        su - $usr -c "$*"
-    }
-    status() {
-        statusproc $1
-    }
-fi
-
-if [ "$system" = "other" ]; then
-    if [ -n "$NOLSB" ]; then
-        fail_msg() {
-            echo " ...fail!"
-        }
-        succ_msg() {
-            echo " ...done."
-        }
-        begin_msg() {
-            echo -n "$1"
-        }
-    fi
-fi
-
 vboxdrvrunning() {
     lsmod | grep -q "vboxdrv[^_-]"
 }
diff --git a/src/VBox/Installer/linux/vboxweb-service.sh b/src/VBox/Installer/linux/vboxweb-service.sh
index 82eac89..0d554f5 100755
--- a/src/VBox/Installer/linux/vboxweb-service.sh
+++ b/src/VBox/Installer/linux/vboxweb-service.sh
@@ -57,12 +57,6 @@ elif [ -f /etc/debian_version ]; then
 elif [ -f /etc/gentoo-release ]; then
     system=gentoo
     PIDFILE="/var/run/vboxweb-service"
-elif [ -f /etc/slackware-version ]; then
-    system=slackware
-    PIDFILE="/var/run/vboxweb-service"
-elif [ -f /etc/lfs-release ]; then
-    system=lfs
-    PIDFILE="/var/run/vboxweb-service.pid"
 else
     system=other
     if [ -d /var/run -a -w /var/run ]; then
@@ -184,10 +178,15 @@ if [ "$system" = "gentoo" ]; then
     fi
 fi
 
-if [ "$system" = "slackware" ]; then
+if [ "$system" = "other" ]; then
     killproc() {
-        killall $1
-        rm -f $PIDFILE
+        kp_binary="${1##*/}"
+        pkill "${kp_binary}" || return 0
+        sleep 1
+        pkill "${kp_binary}" || return 0
+        sleep 1
+        pkill -9 "${kp_binary}"
+        return 0
     }
     if [ -n "$NOLSB" ]; then
         fail_msg() {
@@ -207,43 +206,6 @@ if [ "$system" = "slackware" ]; then
     }
 fi
 
-if [ "$system" = "lfs" ]; then
-    . /etc/rc.d/init.d/functions
-    if [ -n "$NOLSB" ]; then
-        fail_msg() {
-            echo_failure
-        }
-        succ_msg() {
-            echo_ok
-        }
-        begin_msg() {
-            echo $1
-        }
-    fi
-    start_daemon() {
-        usr="$1"
-        shift
-        su - $usr -c "$*"
-    }
-    status() {
-        statusproc $1
-    }
-fi
-
-if [ "$system" = "other" ]; then
-    if [ -n "$NOLSB" ]; then
-        fail_msg() {
-            echo " ...fail!"
-        }
-        succ_msg() {
-            echo " ...done."
-        }
-        begin_msg() {
-            echo -n "$1"
-        }
-    fi
-fi
-
 vboxdrvrunning() {
     lsmod | grep -q "vboxdrv[^_-]"
 }
diff --git a/src/VBox/Installer/solaris/Makefile.kmk b/src/VBox/Installer/solaris/Makefile.kmk
index f75fba5..2c2bb53 100644
--- a/src/VBox/Installer/solaris/Makefile.kmk
+++ b/src/VBox/Installer/solaris/Makefile.kmk
@@ -335,7 +335,6 @@ SOLARIS_STRIP_BINS = \
 	  $(if $(VBOX_WITH_QT4_SUN),\
 	    libQtCoreVBox.so.4 \
 	    libQtGuiVBox.so.4 \
-	    libQtNetworkVBox.so.4 \
 	    $(if $(VBOX_GUI_USE_QGL),libQtOpenGLVBox.so.4,) \
 	    accessible/libqtaccessiblewidgets.so,)) \
 	$(if $(VBOX_WITH_DEBUGGER_GUI),VBoxDbg.so DbgPlugInDiggers.so,) \
diff --git a/src/VBox/Installer/win/Stub/VBoxStub.cpp b/src/VBox/Installer/win/Stub/VBoxStub.cpp
index ecc98c1..d5b947f 100644
--- a/src/VBox/Installer/win/Stub/VBoxStub.cpp
+++ b/src/VBox/Installer/win/Stub/VBoxStub.cpp
@@ -880,13 +880,13 @@ int WINAPI WinMain(HINSTANCE  hInstance,
 
     /* Parse the parameters. */
     int ch;
-    bool fParsingDone = false;
+    bool fExitEarly = false;
     RTGETOPTUNION ValueUnion;
     RTGETOPTSTATE GetState;
     RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1, 0);
     while (   (ch = RTGetOpt(&GetState, &ValueUnion))
            && rcExit == RTEXITCODE_SUCCESS
-           && !fParsingDone)
+           && !fExitEarly)
     {
         switch (ch)
         {
@@ -936,7 +936,7 @@ int WINAPI WinMain(HINSTANCE  hInstance,
                 ShowInfo("Version: %d.%d.%d.%d",
                          VBOX_VERSION_MAJOR, VBOX_VERSION_MINOR, VBOX_VERSION_BUILD,
                          VBOX_SVN_REV);
-                fParsingDone = true;
+                fExitEarly = true;
                 break;
 
             case 'v':
@@ -961,7 +961,7 @@ int WINAPI WinMain(HINSTANCE  hInstance,
                          "%s --extract -path C:\\VBox",
                          VBOX_STUB_TITLE, VBOX_VERSION_MAJOR, VBOX_VERSION_MINOR, VBOX_VERSION_BUILD, VBOX_SVN_REV,
                          argv[0], argv[0]);
-                fParsingDone = true;
+                fExitEarly = true;
                 break;
 
             case VINF_GETOPT_NOT_OPTION:
@@ -993,6 +993,10 @@ int WINAPI WinMain(HINSTANCE  hInstance,
         }
     }
 
+    /* Check if we can bail out early. */
+    if (fExitEarly)
+        return rcExit;
+
     if (rcExit != RTEXITCODE_SUCCESS)
         vrc = VERR_PARSE_ERROR;
 
diff --git a/src/VBox/Installer/win/UserInterface.wxi b/src/VBox/Installer/win/UserInterface.wxi
index b9aa7aa..961f952 100644
--- a/src/VBox/Installer/win/UserInterface.wxi
+++ b/src/VBox/Installer/win/UserInterface.wxi
@@ -393,15 +393,15 @@
                  change their Windows color scheme.
                  Also see: http://osdir.com/ml/windows.devel.wix.user/2005-02/msg00300.html -->
             <Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="25" Y="95" Width="200" Height="17"
-                Property="VBOX_INSTALLDESKTOPSHORTCUT" CheckBoxValue="1">
+                     Property="VBOX_INSTALLDESKTOPSHORTCUT" CheckBoxValue="1" Default="no">
                 <Text>!(loc.Customize2Dlg_CreateShortcut)</Text>
             </Control>
             <Control Id="QuicklaunchShortcutCheckBox" Type="CheckBox" X="25" Y="115" Width="200" Height="17"
-                     Property="VBOX_INSTALLQUICKLAUNCHSHORTCUT" CheckBoxValue="1">
+                     Property="VBOX_INSTALLQUICKLAUNCHSHORTCUT" CheckBoxValue="1" Default="no">
                 <Text>!(loc.Customize2Dlg_CreateQuickLaunch)</Text>
             </Control>
             <Control Id="RegisterFileExtensionsCheckBox" Type="CheckBox" X="25" Y="135" Width="200" Height="17"
-                     Property="VBOX_REGISTERFILEEXTENSIONS" CheckBoxValue="1">
+                     Property="VBOX_REGISTERFILEEXTENSIONS" CheckBoxValue="1" Default="no">
                 <Text>!(loc.Customize2Dlg_RegisterFileExtensions)</Text>
             </Control>
             <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17"
@@ -585,7 +585,7 @@
         <!-- This dialog is called after successful installation -->
         <Dialog Id="VBoxExitDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
             <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Finish)">
-                <Publish Event="DoAction" Value="ca_StartVBox"><![CDATA[VBOX_STARTVBOX]]></Publish>
+                <Publish Event="DoAction" Value="ca_StartVBox"><![CDATA[VBOX_START]]></Publish>
                 <Publish Event="EndDialog" Value="Return">1</Publish>
             </Control>
 
@@ -609,7 +609,7 @@
                  change their Windows color scheme.
                  Also see: http://osdir.com/ml/windows.devel.wix.user/2005-02/msg00300.html -->
             <Control Id="StartVBoxCheckBox" Type="CheckBox" X="135" Y="115" Width="200" Height="17"
-                Property="VBOX_STARTVBOX" CheckBoxValue="1">
+                     Property="VBOX_START" CheckBoxValue="1" Default="no">
                 <Text>!(loc.ExitDlg_StartVBox)</Text>
                 <Condition Action="hide">
                     <![CDATA[(InstallMode="Repair") OR (InstallMode="Remove") OR
@@ -1190,4 +1190,3 @@
     </UI>
 
 </Include>
-
diff --git a/src/VBox/Installer/win/VBoxMergeApp.wxi b/src/VBox/Installer/win/VBoxMergeApp.wxi
index 43bfbe5..110cbeb 100644
--- a/src/VBox/Installer/win/VBoxMergeApp.wxi
+++ b/src/VBox/Installer/win/VBoxMergeApp.wxi
@@ -273,8 +273,6 @@
               Source="$(env.PATH_OUT)\bin\QtCoreVBox4.dll" />
         <File Id="file_QtGuiVBox4.dll" Name="QtGuiVBox4.dll"
               Source="$(env.PATH_OUT)\bin\QtGuiVBox4.dll" />
-        <File Id="file_QtNetworkVBox4.dll" Name="QtNetworkVBox4.dll"
-              Source="$(env.PATH_OUT)\bin\QtNetworkVBox4.dll" />
 <?endif ?>
 <?if $(env.VBOX_WITH_DEBUGGER_GUI) = "yes" ?>
         <File Id="file_VBoxDbg.dll" Name="VBoxDbg.dll"
diff --git a/src/VBox/Installer/win/VBoxMergeNetAdp6.wxi b/src/VBox/Installer/win/VBoxMergeNetAdp6.wxi
index 3b34c51..abaafb3 100644
--- a/src/VBox/Installer/win/VBoxMergeNetAdp6.wxi
+++ b/src/VBox/Installer/win/VBoxMergeNetAdp6.wxi
@@ -24,7 +24,9 @@
         <File Id="file_VBoxNetAdp6.cat" Name="VBoxNetAdp6.cat"
               Source="$(env.PATH_OUT)\bin\VBoxNetAdp6.cat" />
 <?endif ?>
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "no" ?>
         <Condition><![CDATA[NETWORKTYPE="NDIS6"]]></Condition>
+<?endif ?>
     </Component>
 
 </Include>
diff --git a/src/VBox/Installer/win/VBoxMergeNetLwf.wxi b/src/VBox/Installer/win/VBoxMergeNetLwf.wxi
index 1b6b048..d4d2ca3 100644
--- a/src/VBox/Installer/win/VBoxMergeNetLwf.wxi
+++ b/src/VBox/Installer/win/VBoxMergeNetLwf.wxi
@@ -25,7 +25,9 @@
         <File Id="file_VBoxNetLwf.cat" Name="VBoxNetLwf.cat"
               Source="$(env.PATH_OUT)\bin\VBoxNetLwf.cat" />
 <?endif ?>
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "no" ?>
         <Condition><![CDATA[NETWORKTYPE="NDIS6"]]></Condition>
+<?endif ?>
     </Component>
 
 <?endif ?> <!-- VBOX_WITH_NETFLT -->
diff --git a/src/VBox/Installer/win/VirtualBox.wxs b/src/VBox/Installer/win/VirtualBox.wxs
index 9dd1685..9929fd1 100644
--- a/src/VBox/Installer/win/VirtualBox.wxs
+++ b/src/VBox/Installer/win/VirtualBox.wxs
@@ -72,11 +72,27 @@
     <!-- Force overwriting all files and re-create shortcuts to guarantee a working environment -->
     <Property Id='REINSTALLMODE' Value='amus'/>
 
-    <!-- VirtualBox properties -->
-    <Property Id="VBOX_INSTALLDESKTOPSHORTCUT" Value="1" />
-    <Property Id="VBOX_INSTALLQUICKLAUNCHSHORTCUT" Value="1" />
-    <Property Id="VBOX_REGISTERFILEEXTENSIONS" Value="1" />
-    <Property Id="VBOX_STARTVBOX" Value="1" />
+    <!-- VirtualBox properties (can be modified from command line) -->
+
+    <!-- Whether or not a desktop shortcut should be created. -->
+    <Property Id="VBOX_INSTALLDESKTOPSHORTCUT" Value="1" Secure="yes"/>
+    <SetProperty Id="VBOX_INSTALLDESKTOPSHORTCUT" After="AppSearch" Sequence="both"
+                 Value="{}"><![CDATA[VBOX_INSTALLDESKTOPSHORTCUT="0"]]></SetProperty>
+
+    <!-- Whether or not a desktop shortcut for the Quick Launch Bar should be created -->
+    <Property Id="VBOX_INSTALLQUICKLAUNCHSHORTCUT" Value="1" Secure="yes"/>
+    <SetProperty Id="VBOX_INSTALLQUICKLAUNCHSHORTCUT" After="AppSearch" Sequence="both"
+                 Value="{}"><![CDATA[VBOX_INSTALLQUICKLAUNCHSHORTCUT="0"]]></SetProperty>
+
+    <!-- Whether or not registering of known desktop shortcut for the Quick Launch Bar should be created -->
+    <Property Id="VBOX_REGISTERFILEEXTENSIONS" Value="1" Secure="yes"/>
+    <SetProperty Id="VBOX_REGISTERFILEEXTENSIONS" After="AppSearch" Sequence="both"
+                 Value="{}"><![CDATA[VBOX_REGISTERFILEEXTENSIONS="0"]]></SetProperty>
+
+    <!-- Whether or not VirtualBox should be started automatically right after successful installation -->
+    <Property Id="VBOX_START" Value="1" Secure="yes"/>
+    <SetProperty Id="VBOX_START" After="AppSearch" Sequence="both"
+                 Value="{}"><![CDATA[VBOX_START="0"]]></SetProperty>
 
     <!-- Make sure installation will not start on anything other but the NT family -->
 <?if $(env.BUILD_TARGET_ARCH) = "amd64" ?>
@@ -107,7 +123,7 @@
         NOT VBOXINNOTEK
     </Condition>
 
-    
+
     <!-- *************************** Upgrade packages only ******************************* -->
     <!-- Minimum and Maximum specify the range of versions we are supposed to update with this upgrade.
          IncludeMaximum and IncludeMinimum specify whether the bound value is actually included in the range or not
@@ -169,7 +185,7 @@
             <FileSearch Name="dependency.dep"/>
         </DirectorySearch>
     </Property>
-    
+
     <!--
                             install upgrade uninstall
     VBOXDEPENDENCY             0      1/0      1/0
@@ -178,12 +194,12 @@
     not final                  1       0        1
     -->
 
-    <Condition Message="It was detected an application which has been using currently installed VirtualBox version. 
-    You must remove this application before continuing installation. 
+    <Condition Message="It was detected an application which has been using currently installed VirtualBox version.
+    You must remove this application before continuing installation.
     See the file dependency.dep in the VirtualBox installation directory for details. ">
         NOT (VBOXDEPENDENCY AND UPGRADINGPRODUCTCODE)
     </Condition>
-    
+
     <!-- Detect old Sun installation -->
     <!-- Force a manual uninstall of an already installed Sun VirtualBox version first -->
     <!--<Property Id="VBOXSUN">
@@ -438,11 +454,11 @@
     <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
                 <MergeRef Id="msm_VBoxNetworkAdp" />
                 <MergeRef Id="msm_VBoxNetworkAdp6" />
-                <MergeRef Id="msm_VBoxNetworkLwf" />                
+                <MergeRef Id="msm_VBoxNetworkLwf" />
     <?else ?>
                 <ComponentRef Id="cp_NetAdpDriver" />
                 <ComponentRef Id="cp_NetAdp6Driver" />
-                <ComponentRef Id="cp_NetLwfDriver" />                
+                <ComponentRef Id="cp_NetLwfDriver" />
     <?endif ?>
             </Feature>
 
diff --git a/src/VBox/Main/Makefile.kmk b/src/VBox/Main/Makefile.kmk
index 882f237..19f5f99 100644
--- a/src/VBox/Main/Makefile.kmk
+++ b/src/VBox/Main/Makefile.kmk
@@ -345,6 +345,7 @@ VBoxSVC_INTERMEDIATES = \
 
 VBoxSVC_SOURCES = \
 	$(VBoxAPIWrap_0_OUTDIR)/VBoxAPI.d \
+	src-all/AuthLibrary.cpp \
 	src-all/DisplayPNGUtil.cpp \
 	src-all/DisplayResampleImage.cpp \
 	src-all/DisplayUtils.cpp \
@@ -650,6 +651,7 @@ VBoxC_DEFS = \
 	$(if-expr defined(VBOX_WITH_EHCI) && defined(VBOX_WITH_USB),VBOX_WITH_EHCI,) \
 	$(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \
 	$(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,) \
+	$(if $(VBOX_WITH_VRDEAUTH_IN_VBOXSVC),VBOX_WITH_VRDEAUTH_IN_VBOXSVC,) \
 	$(if $(VBOX_WITH_VPX),VBOX_WITH_VPX,)
 ifdef VBOX_WITH_CRHGSMI
  VBoxC_DEFS += VBOX_WITH_CRHGSMI
@@ -810,6 +812,10 @@ ifdef VBOX_WITH_VPX
 	src-client/EbmlWriter.cpp \
 	src-client/VideoRec.cpp
 endif
+ifndef VBOX_WITH_VRDEAUTH_IN_VBOXSVC
+ VBoxC_SOURCES += \
+	src-all/AuthLibrary.cpp
+endif
 
 ifeq ($(KBUILD_TARGET),darwin)
 VBoxC_ORDERDEPS += $(VBoxC_0_OUTDIR)/VBoxC.def
diff --git a/src/VBox/Main/glue/NativeEventQueue.cpp b/src/VBox/Main/glue/NativeEventQueue.cpp
index 23420f2..0efdcda 100644
--- a/src/VBox/Main/glue/NativeEventQueue.cpp
+++ b/src/VBox/Main/glue/NativeEventQueue.cpp
@@ -520,14 +520,17 @@ int NativeEventQueue::processEventQueue(RTMSINTERVAL cMsTimeout)
 # ifdef RT_OS_DARWIN
         /** @todo check how Ctrl-C works on Darwin. */
         rc = waitForEventsOnDarwin(cMsTimeout);
-        if (rc == VERR_TIMEOUT)
-            rc = processPendingEvents(mEventQ);
 # else // !RT_OS_DARWIN
         rc = waitForEventsOnXPCOM(mEventQ, cMsTimeout);
+# endif // !RT_OS_DARWIN
         if (    RT_SUCCESS(rc)
             ||  rc == VERR_TIMEOUT)
-            rc = processPendingEvents(mEventQ);
-# endif // !RT_OS_DARWIN
+        {
+            int rc2 = processPendingEvents(mEventQ);
+            /* If the wait was successful don't fail the whole operation. */
+            if (RT_FAILURE(rc) && RT_FAILURE(rc2))
+                rc = rc2;
+        }
     }
 
     if (  (   RT_SUCCESS(rc)
diff --git a/src/VBox/Main/idl/VirtualBox.xidl b/src/VBox/Main/idl/VirtualBox.xidl
index 30982b7..43c7d67 100644
--- a/src/VBox/Main/idl/VirtualBox.xidl
+++ b/src/VBox/Main/idl/VirtualBox.xidl
@@ -3594,7 +3594,7 @@
 
   <interface
     name="IInternalMachineControl" extends="$unknown"
-    uuid="ec36f437-ad4d-4512-94dd-f4c568143aa7"
+    uuid="cdbc59df-4f4d-4cf2-809c-917601355afc"
     internal="yes"
     wsmap="suppress"
     >
@@ -3918,6 +3918,22 @@
         <desc>Network transmit rate for VM.</desc>
       </param>
     </method>
+
+    <method name="authenticateExternal">
+      <desc>
+        Verify credentials using the external auth library.
+      </desc>
+      <param name="authParams" type="wstring" dir="in" safearray="yes">
+        <desc>
+          The auth parameters, credentials, etc.
+        </desc>
+      </param>
+      <param name="result" type="wstring" dir="out">
+        <desc>
+          The authentification result.
+        </desc>
+      </param>
+    </method>
   </interface>
 
   <interface
diff --git a/src/VBox/Main/include/AuthLibrary.h b/src/VBox/Main/include/AuthLibrary.h
new file mode 100644
index 0000000..5d4192a
--- /dev/null
+++ b/src/VBox/Main/include/AuthLibrary.h
@@ -0,0 +1,41 @@
+/* $Id: AuthLibrary.h $ */
+/** @file
+ * Main - external authentication library interface.
+ */
+
+/*
+ * Copyright (C) 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.
+ */
+
+#ifndef ____H_AUTHLIBRARY
+#define ____H_AUTHLIBRARY
+
+#include <VBox/VBoxAuth.h>
+#include <iprt/types.h>
+
+typedef struct AUTHLIBRARYCONTEXT
+{
+    RTLDRMOD hAuthLibrary;
+    PAUTHENTRY pfnAuthEntry;
+    PAUTHENTRY2 pfnAuthEntry2;
+    PAUTHENTRY3 pfnAuthEntry3;
+} AUTHLIBRARYCONTEXT;
+
+int AuthLibLoad(AUTHLIBRARYCONTEXT *pAuthLibCtx, const char *pszLibrary);
+void AuthLibUnload(AUTHLIBRARYCONTEXT *pAuthLibCtx);
+
+AuthResult AuthLibAuthenticate(const AUTHLIBRARYCONTEXT *pAuthLibCtx,
+                               PCRTUUID pUuid, AuthGuestJudgement guestJudgement,
+                               const char *pszUser, const char *pszPassword, const char *pszDomain,
+                               uint32_t u32ClientId);
+void AuthLibDisconnect(const AUTHLIBRARYCONTEXT *pAuthLibCtx, PCRTUUID pUuid, uint32_t u32ClientId);
+
+#endif  /* !____H_AUTHLIBRARY */
diff --git a/src/VBox/Main/include/ConsoleImpl.h b/src/VBox/Main/include/ConsoleImpl.h
index eaa7442..4d82608 100644
--- a/src/VBox/Main/include/ConsoleImpl.h
+++ b/src/VBox/Main/include/ConsoleImpl.h
@@ -975,6 +975,7 @@ private:
     ComPtr<IEventListener> mVmListener;
 
     friend struct VMTask;
+    friend class ConsoleVRDPServer;
 };
 
 #endif // !____H_CONSOLEIMPL
diff --git a/src/VBox/Main/include/ConsoleVRDPServer.h b/src/VBox/Main/include/ConsoleVRDPServer.h
index f9afd98..4617123 100644
--- a/src/VBox/Main/include/ConsoleVRDPServer.h
+++ b/src/VBox/Main/include/ConsoleVRDPServer.h
@@ -22,7 +22,7 @@
 #include "RemoteUSBBackend.h"
 #include "HGCM.h"
 
-#include <VBox/VBoxAuth.h>
+#include "AuthLibrary.h"
 
 #include <VBox/RemoteDesktop/VRDEImage.h>
 #include <VBox/RemoteDesktop/VRDEMousePtr.h>
@@ -244,13 +244,12 @@ private:
     void remoteUSBThreadStop (void);
 #endif /* VBOX_WITH_USB */
 
-    /* External authentication library handle. The library is loaded in the
+#ifndef VBOX_WITH_VRDEAUTH_IN_VBOXSVC
+    /* External authentication library context. The library is loaded in the
      * Authenticate method and unloaded at the object destructor.
      */
-    RTLDRMOD mAuthLibrary;
-    PAUTHENTRY mpfnAuthEntry;
-    PAUTHENTRY2 mpfnAuthEntry2;
-    PAUTHENTRY3 mpfnAuthEntry3;
+    AUTHLIBRARYCONTEXT mAuthLibCtx;
+#endif
 
     uint32_t volatile mu32AudioInputClientId;
 
diff --git a/src/VBox/Main/include/Logging.h b/src/VBox/Main/include/Logging.h
index 4de5f57..07f0fc5 100644
--- a/src/VBox/Main/include/Logging.h
+++ b/src/VBox/Main/include/Logging.h
@@ -1,12 +1,10 @@
 /* $Id: Logging.h $ */
-
 /** @file
- *
- * VirtualBox COM: logging macros and function definitions
+ * VirtualBox COM - logging macros and function definitions
  */
 
 /*
- * Copyright (C) 2004-2012 Oracle Corporation
+ * 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;
@@ -25,7 +23,10 @@
  *  the |Logging.h| header if you want to use a group other than LOG_GROUP_MAIN
  *  for logging from within Main source files.
  *
- *  @example #define LOG_GROUP_MAIN_OVERRIDE LOG_GROUP_HGCM
+ *  Example:
+ *  @code
+ *  #define LOG_GROUP_MAIN_OVERRIDE LOG_GROUP_HGCM
+ *  @endcode
  */
 
 /*
@@ -46,5 +47,5 @@
 
 #include <VBox/log.h>
 
-#endif // ____H_LOGGING
+#endif // !____H_LOGGING
 /* vi: set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/src/VBox/Main/include/MachineImpl.h b/src/VBox/Main/include/MachineImpl.h
index 26553c6..2f1302b 100644
--- a/src/VBox/Main/include/MachineImpl.h
+++ b/src/VBox/Main/include/MachineImpl.h
@@ -18,6 +18,7 @@
 #ifndef ____H_MACHINEIMPL
 #define ____H_MACHINEIMPL
 
+#include "AuthLibrary.h"
 #include "VirtualBoxBase.h"
 #include "SnapshotImpl.h"
 #include "ProgressImpl.h"
@@ -1259,6 +1260,8 @@ private:
                                ULONG aMemSharedTotal,
                                ULONG aVmNetRx,
                                ULONG aVmNetTx);
+    HRESULT authenticateExternal(const std::vector<com::Utf8Str> &aAuthParams,
+                                 com::Utf8Str &aResult);
 };
 
 // SessionMachine class
@@ -1407,6 +1410,8 @@ private:
                                ULONG aMemSharedTotal,
                                ULONG aVmNetRx,
                                ULONG aVmNetTx);
+    HRESULT authenticateExternal(const std::vector<com::Utf8Str> &aAuthParams,
+                                 com::Utf8Str &aResult);
 
 
     struct ConsoleTaskData
@@ -1509,6 +1514,8 @@ private:
     ClientToken *mClientToken;
 
     int miNATNetworksStarted;
+
+    AUTHLIBRARYCONTEXT mAuthLibCtx;
 };
 
 // SnapshotMachine class
diff --git a/src/VBox/Main/include/Matching.h b/src/VBox/Main/include/Matching.h
index 7f6b8f6..d55fea0 100644
--- a/src/VBox/Main/include/Matching.h
+++ b/src/VBox/Main/include/Matching.h
@@ -1,6 +1,5 @@
 /* $Id: Matching.h $ */
 /** @file
- *
  * Declaration of template classes that provide simple API to
  * do matching between values and value filters constructed from strings.
  */
@@ -113,11 +112,12 @@ protected:
 
 /**
  *  Represents a parsed interval filter.
- *  The string format is: "int:(<m>|([<m>]-[<n>]))|(<m>|([<m>]-[<n>]))+"
- *  where <m> and <n> are numbers in the decimal, hex (0xNNN) or octal (0NNN)
- *  form, and <m> < <n>. Spaces are allowed around <m> and <n>.
+ *  The string format is:
+ *      "int:(\<m\>|([\<m\>]-[\<n\>]))|(\<m\>|([\<m\>]-[\<n\>]))+"
+ *  where \<m\> and \<n\> are numbers in the decimal, hex (0xNNN) or octal
+ *  (0NNN) form, and \<m\> \< \<n\>. Spaces are allowed around \<m\> and \<n\>.
  *
- *  @param T    type of values to match. Must be a fundamental integer type.
+ *  @tparam T    type of values to match. Must be a fundamental integer type.
  */
 template <class T>
 class ParsedIntervalFilter : public ParsedIntervalFilter_base
@@ -350,22 +350,23 @@ private:
 
 /**
  *  Represents a parsed regexp filter.
- *  The string format is: "rx:<regexp>" or "<string>"
- *  where <regexp> is a valid regexp and <string> is the exact match.
  *
- *  @param Conv
+ *  The string format is: "rx:\<regexp\>" or "\<string\>"
+ *  where \<regexp\> is a valid regexp and \<string\> is the exact match.
+ *
+ *  @tparam Conv
  *      class that must define a public static function
  *      <tt>Bstr toBstr (T aValue)</tt>, where T is the
  *      type of values that should be accepted by #isMatch().
  *      This function is used to get the string representation of T
  *      for regexp matching.
- *  @param aIgnoreCase
+ *  @tparam aIgnoreCase
  *      true if the case insensitive comparison should be done by default
  *      and false otherwise
- *  @param aMinLen
+ *  @tparam aMinLen
  *      minimum string length, or 0 if not limited.
  *      Used only when the filter string represents the exact match.
- *  @param aMaxLen
+ *  @tparam aMaxLen
  *      maximum string length, or 0 if not limited.
  *      Used only when the filter string represents the exact match.
  */
@@ -407,11 +408,11 @@ protected:
  *  for which isNull() = false after parsing the string becomes the active
  *  one (F1 is tried first).
  *
- *  Both filters must have <tt>bool isMatch (const T&)</tt>
- *  methods where T is the same type as used in #isMatch().
+ *  Both filters must have <tt>bool isMatch(const T&)</tt> methods where T is
+ *  the same type as used in #isMatch().
  *
- *  @param F1   first filter class
- *  @param F2   second filter class
+ *  @tparam F1  first filter class
+ *  @tparam F2  second filter class
  */
 template <class F1, class F2>
 class TwoParsedFilters
@@ -466,7 +467,7 @@ private:
  *  Inherits from the given parsed filter class and keeps the string used to
  *  construct the filter as a member.
  *
- *  @param F    parsed filter class
+ *  @tparam F   parsed filter class
  */
 template <class F>
 class Matchable : public F
@@ -519,5 +520,5 @@ private:
 
 } /* namespace matching */
 
-#endif // ____H_MATCHING
+#endif // !____H_MATCHING
 /* vi: set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/src/VBox/Main/include/MediumImpl.h b/src/VBox/Main/include/MediumImpl.h
index c1a606d..c88d9da 100644
--- a/src/VBox/Main/include/MediumImpl.h
+++ b/src/VBox/Main/include/MediumImpl.h
@@ -168,6 +168,7 @@ public:
                                 ComObjPtr<Progress> *aProgress,
                                 bool aWait);
     Utf8Str i_getPreferredDiffFormat();
+    MediumVariant_T i_getPreferredDiffVariant();
 
     HRESULT i_close(AutoCaller &autoCaller);
     HRESULT i_unlockRead(MediumState_T *aState);
diff --git a/src/VBox/Main/include/USBIdDatabase.h b/src/VBox/Main/include/USBIdDatabase.h
index 301f803..4e0945b 100644
--- a/src/VBox/Main/include/USBIdDatabase.h
+++ b/src/VBox/Main/include/USBIdDatabase.h
@@ -1,91 +1,270 @@
+/* $Id: USBIdDatabase.h $ */
+/** @file
+ * USB device vendor and product ID database.
+ */
+
 /*
-* Copyright (C) 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.
-*/
-
-#pragma once
-
-#include <vector>
-#include <algorithm>
-#include <functional>
+ * Copyright (C) 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.
+ */
+
+#ifndef ___USBIdDatabase_h
+#define ___USBIdDatabase_h
+
+#include <iprt/assert.h>
 #include <iprt/stdint.h>
+#include <iprt/cpp/ministring.h>
+
+
+/** Saves a few bytes (~25%) on strings.  */
+#define USB_ID_DATABASE_WITH_COMPRESSION
+
+/** Max string length. */
+#define USB_ID_DATABASE_MAX_STRING      _1K
+
 
 /**
-* Macros to make key of alias table
-*/
-#define USBKEY(vendorId, productId) (((uint32_t)(vendorId) << 16) | (productId))
+ * USB ID database string table reference.
+ */
+typedef struct USBIDDBSTR
+{
+    /** Offset of the string in the string table. */
+    uint32_t off : 22;
+    /** The length of the string. */
+    uint32_t cch : 10;
+} USBIDDBSTR;
+AssertCompileSize(USBIDDBSTR, sizeof(uint32_t));
+
 
 /**
-* Elements of Aliases table
-*/
-class Product
+ * Elements of product table.
+ */
+typedef struct USBIDDBPROD
 {
-public:
-    uint32_t key;
-    const char* product;
-};
+    /** Product ID. */
+    uint16_t idProduct;
+} USBIDDBPROD;
+AssertCompileSize(USBIDDBPROD, sizeof(uint16_t));
+
 
 /**
-* Element of Vendors table
-*/
-class Vendor
+ * Element of vendor table.
+ */
+typedef struct USBIDDBVENDOR
 {
-public:
-    unsigned short vendorID;
-    const char* vendor;
-};
+    /** Vendor ID. */
+    uint16_t idVendor;
+    /** Index of the first product. */
+    uint16_t iProduct;
+    /** Number of products. */
+    uint16_t cProducts;
+} USBIDDBVENDOR;
+AssertCompileSize(USBIDDBVENDOR, sizeof(uint16_t) * 3);
 
-class ProductLess :
-    public std::binary_function<Product, Product, bool>
+
+/**
+ * Wrapper for static array of Aliases.
+ */
+class USBIdDatabase
 {
+public: // For assertions and statis in the generator.
+    /** String table. */
+    static const char           s_achStrTab[];
+    /** The size of the string table (for bounds checking). */
+    static const size_t         s_cchStrTab;
+#ifdef USB_ID_DATABASE_WITH_COMPRESSION
+    /** Dictionary containing the 127 most used substrings (that we managed
+     * to detect without lousy word based searching). */
+    static const USBIDDBSTR     s_aCompDict[127];
+#endif
+
+    /** Number of vendors in the two parallel arrays.   */
+    static const size_t         s_cVendors;
+    /** Vendor IDs lookup table. */
+    static const USBIDDBVENDOR  s_aVendors[];
+    /** Vendor names table running parallel to s_aVendors. */
+    static const USBIDDBSTR     s_aVendorNames[];
+
+    /** Number of products in the two parallel arrays. */
+    static const size_t         s_cProducts;
+    /** Vendor+Product keys for lookup purposes. */
+    static const USBIDDBPROD    s_aProducts[];
+    /** Product names table running parallel to s_aProducts. */
+    static const USBIDDBSTR     s_aProductNames[];
+
 public:
-    bool operator () (const Product& left, const Product& right) const
+    static RTCString returnString(USBIDDBSTR const *pStr)
     {
-        return left.key < right.key;
+        Assert(pStr->cch < s_cchStrTab);
+        Assert(pStr->off < s_cchStrTab);
+        Assert(pStr->off + (size_t)pStr->cch < s_cchStrTab);
+
+#ifdef USB_ID_DATABASE_WITH_COMPRESSION
+        char        szTmp[USB_ID_DATABASE_MAX_STRING * 2];
+        char       *pchDst = &szTmp[0];
+        size_t      cchSrc = pStr->cch;
+        const char *pchSrc = &s_achStrTab[pStr->off];
+        Assert(cchSrc <= USB_ID_DATABASE_MAX_STRING);
+        while (cchSrc-- > 0)
+        {
+            unsigned char uch = *pchSrc++;
+            if (!(uch & 0x80))
+            {
+                *pchDst++ = (char)uch;
+                Assert(uch != 0);
+                Assert((uintptr_t)(pchDst - &szTmp[0]) < USB_ID_DATABASE_MAX_STRING);
+            }
+            else if (uch == 0xff)
+            {
+                RTUNICP uc = ' ';
+                int rc = RTStrGetCpNEx(&pchSrc, &cchSrc, &uc);
+                AssertStmt(RT_SUCCESS(rc), (uc = '?', pchSrc++, cchSrc--));
+                pchDst = RTStrPutCp(pchDst, uc);
+                Assert((uintptr_t)(pchDst - &szTmp[0]) < USB_ID_DATABASE_MAX_STRING);
+            }
+            else
+            {
+                /* Dictionary reference. No unescaping necessary here. */
+                const USBIDDBSTR *pStr2 = &s_aCompDict[uch & 0x7f];
+                Assert(pStr2->cch < s_cchStrTab);
+                Assert(pStr2->off < s_cchStrTab);
+                Assert(pStr2->off + (size_t)pStr->cch < s_cchStrTab);
+                Assert((uintptr_t)(&pchDst[pStr2->cch] - &szTmp[0]) < USB_ID_DATABASE_MAX_STRING);
+                memcpy(pchDst, &s_achStrTab[pStr2->off], pStr2->cch);
+                pchDst += pStr2->cch;
+            }
+        }
+        *pchDst = '\0';
+        return RTCString(szTmp, pchDst - &szTmp[0]);
+#else  /* !USB_ID_DATABASE_WITH_COMPRESSION */
+        return RTCString(&s_achStrTab[pStr->off], pStr->cch);
+#endif /* !USB_ID_DATABASE_WITH_COMPRESSION */
     }
-};
 
-class VendorLess :
-    public std::binary_function<Vendor, Vendor, bool>
-{
-public:
-    bool operator () (const Vendor& left, const Vendor& right) const
+private:
+    /**
+     * Performs a binary lookup of @a idVendor.
+     *
+     * @returns The index in the vendor tables, UINT32_MAX if not found.
+     * @param   idVendor        The vendor ID.
+     */
+    static uint32_t lookupVendor(uint16_t idVendor)
     {
-        return left.vendorID < right.vendorID;
+        size_t iEnd   = s_cVendors;
+        if (iEnd)
+        {
+            size_t iStart = 0;
+            for (;;)
+            {
+                size_t idx = iStart + (iEnd - iStart) / 2;
+                if (s_aVendors[idx].idVendor < idVendor)
+                {
+                    idx++;
+                    if (idx < iEnd)
+                        iStart = idx;
+                    else
+                        break;
+                }
+                else if (s_aVendors[idx].idVendor > idVendor)
+                {
+                    if (idx != iStart)
+                        iEnd = idx;
+                    else
+                        break;
+                }
+                else
+                    return (uint32_t)idx;
+            }
+        }
+        return UINT32_MAX;
     }
-};
 
+    /**
+     * Performs a binary lookup of @a idProduct.
+     *
+     * @returns The index in the product tables, UINT32_MAX if not found.
+     * @param   idProduct       The product ID.
+     * @param   iStart          The index of the first entry for the vendor.
+     * @param   iEnd            The index of after the last entry.
+     */
+    static uint32_t lookupProduct(uint16_t idProduct, size_t iStart, size_t iEnd)
+    {
+        if (iStart < iEnd)
+        {
+            for (;;)
+            {
+                size_t idx = iStart + (iEnd - iStart) / 2;
+                if (s_aProducts[idx].idProduct < idProduct)
+                {
+                    idx++;
+                    if (idx < iEnd)
+                        iStart = idx;
+                    else
+                        break;
+                }
+                else if (s_aProducts[idx].idProduct > idProduct)
+                {
+                    if (idx != iStart)
+                        iEnd = idx;
+                    else
+                        break;
+                }
+                else
+                    return (uint32_t)idx;
+            }
+        }
+        return UINT32_MAX;
+    }
 
-/**
-* Wrapper for static array of Aliases.
-*/
-class AliasDictionary
-{
-protected:
-    static Product productArray[];
-    static const size_t products_size;
-    static Vendor vendorArray[];
-    static const size_t vendors_size;
 
 public:
-    static const char* findProduct(unsigned short vendorId, unsigned short productId)
+    static RTCString findProduct(uint16_t idVendor, uint16_t idProduct)
+    {
+        uint32_t idxVendor = lookupVendor(idVendor);
+        if (idxVendor != UINT32_MAX)
+        {
+            uint32_t idxProduct = lookupProduct(idProduct, s_aVendors[idxVendor].iProduct,
+                                                s_aVendors[idxVendor].iProduct + s_aVendors[idxVendor].cProducts);
+            if (idxProduct != UINT32_MAX)
+                return returnString(&s_aProductNames[idxProduct]);
+        }
+        return RTCString();
+    }
+
+    static RTCString findVendor(uint16_t idVendor)
     {
-        Product lookFor = { USBKEY(vendorId, productId) };
-        Product* it = std::lower_bound(productArray, productArray + products_size, lookFor, ProductLess());
-        return lookFor.key == it->key ? it->product : NULL;
+        uint32_t idxVendor = lookupVendor(idVendor);
+        if (idxVendor != UINT32_MAX)
+            return returnString(&s_aVendorNames[idxVendor]);
+        return RTCString();
     }
 
-    static const char* findVendor(unsigned short vendorID)
+    static RTCString findVendorAndProduct(uint16_t idVendor, uint16_t idProduct, RTCString *pstrProduct)
     {
-        Vendor lookFor = { vendorID };
-        Vendor* it = std::lower_bound(vendorArray, vendorArray + vendors_size, lookFor, VendorLess());
-        return lookFor.vendorID == it->vendorID ? it->vendor : NULL;
+        uint32_t idxVendor = lookupVendor(idVendor);
+        if (idxVendor != UINT32_MAX)
+        {
+            uint32_t idxProduct = lookupProduct(idProduct, s_aVendors[idxVendor].iProduct,
+                                                s_aVendors[idxVendor].iProduct + s_aVendors[idxVendor].cProducts);
+            if (idxProduct != UINT32_MAX)
+                *pstrProduct = returnString(&s_aProductNames[idxProduct]);
+            else
+                pstrProduct->setNull();
+            return returnString(&s_aVendorNames[idxVendor]);
+        }
+        pstrProduct->setNull();
+        return RTCString();
     }
+
 };
+
+
+#endif
+
diff --git a/src/VBox/Main/src-all/AuthLibrary.cpp b/src/VBox/Main/src-all/AuthLibrary.cpp
new file mode 100644
index 0000000..f01e279
--- /dev/null
+++ b/src/VBox/Main/src-all/AuthLibrary.cpp
@@ -0,0 +1,254 @@
+/* $Id: AuthLibrary.cpp $ */
+/** @file
+ * Main - External authentication library interface.
+ */
+
+/*
+ * Copyright (C) 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.
+ */
+
+#include "AuthLibrary.h"
+#include "Logging.h"
+
+#include <iprt/ldr.h>
+#include <iprt/path.h>
+#include <iprt/string.h>
+#include <iprt/thread.h>
+
+typedef struct AuthCtx
+{
+    AuthResult result;
+
+    PAUTHENTRY3 pfnAuthEntry3;
+    PAUTHENTRY2 pfnAuthEntry2;
+    PAUTHENTRY  pfnAuthEntry;
+
+    const char         *pszCaller;
+    PAUTHUUID          pUuid;
+    AuthGuestJudgement guestJudgement;
+    const char         *pszUser;
+    const char         *pszPassword;
+    const char         *pszDomain;
+    int                fLogon;
+    unsigned           clientId;
+} AuthCtx;
+
+static DECLCALLBACK(int) authThread(RTTHREAD self, void *pvUser)
+{
+    AuthCtx *pCtx = (AuthCtx *)pvUser;
+
+    if (pCtx->pfnAuthEntry3)
+    {
+        pCtx->result = pCtx->pfnAuthEntry3(pCtx->pszCaller, pCtx->pUuid, pCtx->guestJudgement,
+                                           pCtx->pszUser, pCtx->pszPassword, pCtx->pszDomain,
+                                           pCtx->fLogon, pCtx->clientId);
+    }
+    else if (pCtx->pfnAuthEntry2)
+    {
+        pCtx->result = pCtx->pfnAuthEntry2(pCtx->pUuid, pCtx->guestJudgement,
+                                           pCtx->pszUser, pCtx->pszPassword, pCtx->pszDomain,
+                                           pCtx->fLogon, pCtx->clientId);
+    }
+    else if (pCtx->pfnAuthEntry)
+    {
+        pCtx->result = pCtx->pfnAuthEntry(pCtx->pUuid, pCtx->guestJudgement,
+                                          pCtx->pszUser, pCtx->pszPassword, pCtx->pszDomain);
+    }
+    return VINF_SUCCESS;
+}
+
+static AuthResult authCall(AuthCtx *pCtx)
+{
+    AuthResult result = AuthResultAccessDenied;
+
+    /* Use a separate thread because external modules might need a lot of stack space. */
+    RTTHREAD thread = NIL_RTTHREAD;
+    int rc = RTThreadCreate(&thread, authThread, pCtx, 512*_1K,
+                            RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "VRDEAuth");
+    LogFlowFunc(("RTThreadCreate %Rrc\n", rc));
+
+    if (RT_SUCCESS(rc))
+    {
+        rc = RTThreadWait(thread, RT_INDEFINITE_WAIT, NULL);
+        LogFlowFunc(("RTThreadWait %Rrc\n", rc));
+    }
+
+    if (RT_SUCCESS(rc))
+    {
+        /* Only update the result if the thread finished without errors. */
+        result = pCtx->result;
+    }
+    else
+    {
+        LogRel(("AUTH: Unable to execute the auth thread %Rrc\n", rc));
+    }
+
+    return result;
+}
+
+int AuthLibLoad(AUTHLIBRARYCONTEXT *pAuthLibCtx, const char *pszLibrary)
+{
+    RT_ZERO(*pAuthLibCtx);
+
+    /* Load the external authentication library. */
+    LogRel(("AUTH: Loading external authentication library '%s'\n", pszLibrary));
+
+    int rc;
+    if (RTPathHavePath(pszLibrary))
+        rc = RTLdrLoad(pszLibrary, &pAuthLibCtx->hAuthLibrary);
+    else
+    {
+        rc = RTLdrLoadAppPriv(pszLibrary, &pAuthLibCtx->hAuthLibrary);
+        if (RT_FAILURE(rc))
+        {
+            /* Backward compatibility with old default 'VRDPAuth' name.
+             * Try to load new default 'VBoxAuth' instead.
+             */
+            if (RTStrICmp(pszLibrary, "VRDPAuth") == 0)
+            {
+                LogRel(("AUTH: Loading external authentication library 'VBoxAuth'\n"));
+                rc = RTLdrLoadAppPriv("VBoxAuth", &pAuthLibCtx->hAuthLibrary);
+            }
+        }
+    }
+
+    if (RT_FAILURE(rc))
+    {
+        LogRel(("AUTH: Failed to load external authentication library: %Rrc\n", rc));
+        pAuthLibCtx->hAuthLibrary = NIL_RTLDRMOD;
+    }
+
+    if (RT_SUCCESS(rc))
+    {
+        typedef struct AuthEntryInfoStruct
+        {
+            const char *pszName;
+            void **ppvAddress;
+        } AuthEntryInfo;
+
+        AuthEntryInfo entries[] =
+        {
+            { AUTHENTRY3_NAME, (void **)&pAuthLibCtx->pfnAuthEntry3 },
+            { AUTHENTRY2_NAME, (void **)&pAuthLibCtx->pfnAuthEntry2 },
+            { AUTHENTRY_NAME,  (void **)&pAuthLibCtx->pfnAuthEntry },
+            { NULL, NULL }
+        };
+
+        /* Get the entry point. */
+        AuthEntryInfo *pEntryInfo = &entries[0];
+        while (pEntryInfo->pszName)
+        {
+            *pEntryInfo->ppvAddress = NULL;
+
+            int rc2 = RTLdrGetSymbol(pAuthLibCtx->hAuthLibrary, pEntryInfo->pszName, pEntryInfo->ppvAddress);
+            if (RT_SUCCESS(rc2))
+            {
+                /* Found an entry point. */
+                LogRel(("AUTH: Using entry point '%s'\n", pEntryInfo->pszName));
+                rc = VINF_SUCCESS;
+                break;
+            }
+
+            if (rc2 != VERR_SYMBOL_NOT_FOUND)
+                LogRel(("AUTH: Could not resolve import '%s': %Rrc\n", pEntryInfo->pszName, rc2));
+
+            rc = rc2;
+
+            pEntryInfo++;
+        }
+    }
+
+    if (RT_FAILURE(rc))
+        AuthLibUnload(pAuthLibCtx);
+
+    return rc;
+}
+
+void AuthLibUnload(AUTHLIBRARYCONTEXT *pAuthLibCtx)
+{
+    if (pAuthLibCtx->hAuthLibrary != NIL_RTLDRMOD)
+        RTLdrClose(pAuthLibCtx->hAuthLibrary);
+
+    RT_ZERO(*pAuthLibCtx);
+    pAuthLibCtx->hAuthLibrary = NIL_RTLDRMOD;
+}
+
+AuthResult AuthLibAuthenticate(const AUTHLIBRARYCONTEXT *pAuthLibCtx,
+                               PCRTUUID pUuid, AuthGuestJudgement guestJudgement,
+                               const char *pszUser, const char *pszPassword, const char *pszDomain,
+                               uint32_t u32ClientId)
+{
+    AuthResult result = AuthResultAccessDenied;
+
+    AUTHUUID rawuuid;
+    memcpy(rawuuid, pUuid, sizeof(rawuuid));
+
+    LogFlowFunc(("pAuthLibCtx = %p, uuid = %RTuuid, guestJudgement = %d, pszUser = %s, pszPassword = %s, pszDomain = %s, u32ClientId = %d\n",
+                 pAuthLibCtx, rawuuid, guestJudgement, pszUser, pszPassword, pszDomain, u32ClientId));
+
+    if (   pAuthLibCtx->hAuthLibrary
+        && (pAuthLibCtx->pfnAuthEntry || pAuthLibCtx->pfnAuthEntry2 || pAuthLibCtx->pfnAuthEntry3))
+    {
+        AuthCtx ctx;
+        ctx.result         = AuthResultAccessDenied; /* Denied by default. */
+        ctx.pfnAuthEntry3  = pAuthLibCtx->pfnAuthEntry3;
+        ctx.pfnAuthEntry2  = pAuthLibCtx->pfnAuthEntry2;
+        ctx.pfnAuthEntry   = pAuthLibCtx->pfnAuthEntry;
+        ctx.pszCaller      = "vrde";
+        ctx.pUuid          = &rawuuid;
+        ctx.guestJudgement = guestJudgement;
+        ctx.pszUser        = pszUser;
+        ctx.pszPassword    = pszPassword;
+        ctx.pszDomain      = pszDomain;
+        ctx.fLogon         = true;
+        ctx.clientId       = u32ClientId;
+
+        result = authCall(&ctx);
+    }
+    else
+    {
+        LogRelMax(8, ("AUTH: Invalid authentication module context\n"));
+        AssertFailed();
+    }
+
+    LogFlowFunc(("result = %d\n", result));
+
+    return result;
+}
+
+void AuthLibDisconnect(const AUTHLIBRARYCONTEXT *pAuthLibCtx, PCRTUUID pUuid, uint32_t u32ClientId)
+{
+    AUTHUUID rawuuid;
+    memcpy(rawuuid, pUuid, sizeof(rawuuid));
+
+    LogFlowFunc(("pAuthLibCtx = %p, , uuid = %RTuuid, u32ClientId = %d\n",
+                 pAuthLibCtx, rawuuid, u32ClientId));
+
+    if (   pAuthLibCtx->hAuthLibrary
+        && (pAuthLibCtx->pfnAuthEntry || pAuthLibCtx->pfnAuthEntry2 || pAuthLibCtx->pfnAuthEntry3))
+    {
+        AuthCtx ctx;
+        ctx.result         = AuthResultAccessDenied; /* Not used. */
+        ctx.pfnAuthEntry3  = pAuthLibCtx->pfnAuthEntry3;
+        ctx.pfnAuthEntry2  = pAuthLibCtx->pfnAuthEntry2;
+        ctx.pfnAuthEntry   = NULL;                   /* Does not use disconnect notification. */
+        ctx.pszCaller      = "vrde";
+        ctx.pUuid          = &rawuuid;
+        ctx.guestJudgement = AuthGuestNotAsked;
+        ctx.pszUser        = NULL;
+        ctx.pszPassword    = NULL;
+        ctx.pszDomain      = NULL;
+        ctx.fLogon         = false;
+        ctx.clientId       = u32ClientId;
+
+        authCall(&ctx);
+    }
+}
diff --git a/src/VBox/Main/src-all/ExtPackManagerImpl.cpp b/src/VBox/Main/src-all/ExtPackManagerImpl.cpp
index 3fdfde6..7de2bfa 100644
--- a/src/VBox/Main/src-all/ExtPackManagerImpl.cpp
+++ b/src/VBox/Main/src-all/ExtPackManagerImpl.cpp
@@ -54,7 +54,7 @@
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
-/** @name VBOX_EXTPACK_HELPER_NAME
+/** @def VBOX_EXTPACK_HELPER_NAME
  * The name of the utility application we employ to install and uninstall the
  * extension packs.  This is a set-uid-to-root binary on unixy platforms, which
  * is why it has to be a separate application.
diff --git a/src/VBox/Main/src-all/VirtualBoxBase.cpp b/src/VBox/Main/src-all/VirtualBoxBase.cpp
index 44a1e62..d2465b9 100644
--- a/src/VBox/Main/src-all/VirtualBoxBase.cpp
+++ b/src/VBox/Main/src-all/VirtualBoxBase.cpp
@@ -556,7 +556,7 @@ HRESULT VirtualBoxBase::setErrorVrc(int vrc, const char *pcszMsgFmt, ...)
  *
  * @param   hrc             The COM status code to return.
  * @param   vrc             The VBox status code.
- * @return  Most likely @hrc, see setErrorInternal.
+ * @return  Most likely @a hrc, see setErrorInternal.
  *
  * @sa      VirtualBoxBase::setError(HRESULT)
  */
@@ -581,7 +581,7 @@ HRESULT VirtualBoxBase::setErrorBoth(HRESULT hrc, int vrc)
  * @param   vrc             The VBox status code.
  * @param   pcszMsgFmt      Error message format string.
  * @param   ...             Argument specified in the @a pcszMsgFmt
- * @return  Most likely @hrc, see setErrorInternal.
+ * @return  Most likely @a hrc, see setErrorInternal.
  *
  * @sa      VirtualBoxBase::setError(HRESULT, const char *, ...)
  */
diff --git a/src/VBox/Main/src-client/ConsoleImpl.cpp b/src/VBox/Main/src-client/ConsoleImpl.cpp
index 4c35c05..393f1cd 100644
--- a/src/VBox/Main/src-client/ConsoleImpl.cpp
+++ b/src/VBox/Main/src-client/ConsoleImpl.cpp
@@ -2304,9 +2304,6 @@ HRESULT Console::i_doCPURemove(ULONG aCpu, PUVM pUVM)
                            (PFNRT)i_unplugCpu, 3,
                            this, pUVM, (VMCPUID)aCpu);
 
-        /* release the lock before a VMR3* call (EMT might wait for it, @bugref{7648})! */
-        alock.release();
-
         if (vrc == VERR_TIMEOUT)
             vrc = VMR3ReqWait(pReq, RT_INDEFINITE_WAIT);
         AssertRC(vrc);
@@ -10175,7 +10172,7 @@ DECLCALLBACK(void) Console::i_drvStatus_UnitChanged(PPDMILEDCONNECTORS pInterfac
 /**
  * Notification about a medium eject.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pInterface      Pointer to the interface structure containing the called function pointer.
  * @param   uLUN            The unit number.
  */
@@ -10248,7 +10245,7 @@ DECLCALLBACK(void *)  Console::i_drvStatus_QueryInterface(PPDMIBASE pInterface,
 /**
  * Destruct a status driver instance.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The driver instance data.
  */
 DECLCALLBACK(void) Console::i_drvStatus_Destruct(PPDMDRVINS pDrvIns)
diff --git a/src/VBox/Main/src-client/ConsoleVRDPServer.cpp b/src/VBox/Main/src-client/ConsoleVRDPServer.cpp
index fce4c24..bc28338 100644
--- a/src/VBox/Main/src-client/ConsoleVRDPServer.cpp
+++ b/src/VBox/Main/src-client/ConsoleVRDPServer.cpp
@@ -1361,7 +1361,9 @@ ConsoleVRDPServer::ConsoleVRDPServer(Console *console)
 
     mVRDPBindPort = -1;
 
-    mAuthLibrary = 0;
+#ifndef VBOX_WITH_VRDEAUTH_IN_VBOXSVC
+    RT_ZERO(mAuthLibCtx);
+#endif
 
     mu32AudioInputClientId = 0;
     mcClients = 0;
@@ -3003,15 +3005,9 @@ void ConsoleVRDPServer::Stop(void)
         }
     }
 
-    mpfnAuthEntry = NULL;
-    mpfnAuthEntry2 = NULL;
-    mpfnAuthEntry3 = NULL;
-
-    if (mAuthLibrary)
-    {
-        RTLdrClose(mAuthLibrary);
-        mAuthLibrary = 0;
-    }
+#ifndef VBOX_WITH_VRDEAUTH_IN_VBOXSVC
+    AuthLibUnload(&mAuthLibCtx);
+#endif
 }
 
 /* Worker thread for Remote USB. The thread polls the clients for
@@ -3130,93 +3126,49 @@ void ConsoleVRDPServer::remoteUSBThreadStop(void)
 }
 #endif /* VBOX_WITH_USB */
 
-typedef struct AuthCtx
-{
-    AuthResult result;
-
-    PAUTHENTRY3 pfnAuthEntry3;
-    PAUTHENTRY2 pfnAuthEntry2;
-    PAUTHENTRY  pfnAuthEntry;
-
-    const char         *pszCaller;
-    PAUTHUUID          pUuid;
-    AuthGuestJudgement guestJudgement;
-    const char         *pszUser;
-    const char         *pszPassword;
-    const char         *pszDomain;
-    int                fLogon;
-    unsigned           clientId;
-} AuthCtx;
-
-static DECLCALLBACK(int) authThread(RTTHREAD self, void *pvUser)
+AuthResult ConsoleVRDPServer::Authenticate(const Guid &uuid, AuthGuestJudgement guestJudgement,
+                                           const char *pszUser, const char *pszPassword, const char *pszDomain,
+                                           uint32_t u32ClientId)
 {
-    AuthCtx *pCtx = (AuthCtx *)pvUser;
-
-    if (pCtx->pfnAuthEntry3)
-    {
-        pCtx->result = pCtx->pfnAuthEntry3(pCtx->pszCaller, pCtx->pUuid, pCtx->guestJudgement,
-                                           pCtx->pszUser, pCtx->pszPassword, pCtx->pszDomain,
-                                           pCtx->fLogon, pCtx->clientId);
-    }
-    else if (pCtx->pfnAuthEntry2)
-    {
-        pCtx->result = pCtx->pfnAuthEntry2(pCtx->pUuid, pCtx->guestJudgement,
-                                           pCtx->pszUser, pCtx->pszPassword, pCtx->pszDomain,
-                                           pCtx->fLogon, pCtx->clientId);
-    }
-    else if (pCtx->pfnAuthEntry)
-    {
-        pCtx->result = pCtx->pfnAuthEntry(pCtx->pUuid, pCtx->guestJudgement,
-                                          pCtx->pszUser, pCtx->pszPassword, pCtx->pszDomain);
-    }
-    return VINF_SUCCESS;
-}
+    LogFlowFunc(("uuid = %RTuuid, guestJudgement = %d, pszUser = %s, pszPassword = %s, pszDomain = %s, u32ClientId = %d\n",
+                 uuid.raw(), guestJudgement, pszUser, pszPassword, pszDomain, u32ClientId));
 
-static AuthResult authCall(AuthCtx *pCtx)
-{
     AuthResult result = AuthResultAccessDenied;
 
-    /* Use a separate thread because external modules might need a lot of stack space. */
-    RTTHREAD thread = NIL_RTTHREAD;
-    int rc = RTThreadCreate(&thread, authThread, pCtx, 512*_1K,
-                            RTTHREADTYPE_DEFAULT, RTTHREADFLAGS_WAITABLE, "VRDEAuth");
-    LogFlow(("authCall: RTThreadCreate %Rrc\n", rc));
-
-    if (RT_SUCCESS(rc))
+#ifdef VBOX_WITH_VRDEAUTH_IN_VBOXSVC
+    try
     {
-        rc = RTThreadWait(thread, RT_INDEFINITE_WAIT, NULL);
-        LogFlow(("authCall: RTThreadWait %Rrc\n", rc));
-    }
+        /* Init auth parameters. Order is important. */
+        SafeArray<BSTR> authParams;
+        Bstr("VRDEAUTH"          ).detachTo(authParams.appendedRaw());
+        Bstr(uuid.toUtf16()      ).detachTo(authParams.appendedRaw());
+        BstrFmt("%u", guestJudgement).detachTo(authParams.appendedRaw());
+        Bstr(pszUser             ).detachTo(authParams.appendedRaw());
+        Bstr(pszPassword         ).detachTo(authParams.appendedRaw());
+        Bstr(pszDomain           ).detachTo(authParams.appendedRaw());
+        BstrFmt("%u", u32ClientId).detachTo(authParams.appendedRaw());
 
-    if (RT_SUCCESS(rc))
-    {
-        /* Only update the result if the thread finished without errors. */
-        result = pCtx->result;
+        Bstr authResult;
+        HRESULT hr = mConsole->mControl->AuthenticateExternal(ComSafeArrayAsInParam(authParams),
+                                                              authResult.asOutParam());
+        LogFlowFunc(("%Rhrc [%ls]\n", hr, authResult.raw()));
+
+        size_t cbPassword = RTUtf16Len((PRTUTF16)authParams[4]) * sizeof(RTUTF16);
+        if (cbPassword)
+            RTMemWipeThoroughly(authParams[4], cbPassword, 10 /* cPasses */);
+
+        if (SUCCEEDED(hr) && authResult == "granted")
+            result = AuthResultAccessGranted;
     }
-    else
+    catch (std::bad_alloc)
     {
-        LogRel(("AUTH: unable to execute the auth thread %Rrc\n", rc));
     }
-
-    return result;
-}
-
-AuthResult ConsoleVRDPServer::Authenticate(const Guid &uuid, AuthGuestJudgement guestJudgement,
-                                                const char *pszUser, const char *pszPassword, const char *pszDomain,
-                                                uint32_t u32ClientId)
-{
-    AUTHUUID rawuuid;
-
-    memcpy(rawuuid, uuid.raw(), sizeof(rawuuid));
-
-    LogFlow(("ConsoleVRDPServer::Authenticate: uuid = %RTuuid, guestJudgement = %d, pszUser = %s, pszPassword = %s, pszDomain = %s, u32ClientId = %d\n",
-             rawuuid, guestJudgement, pszUser, pszPassword, pszDomain, u32ClientId));
-
+#else
     /*
      * Called only from VRDP input thread. So thread safety is not required.
      */
 
-    if (!mAuthLibrary)
+    if (!mAuthLibCtx.hAuthLibrary)
     {
         /* Load the external authentication library. */
         Bstr authLibrary;
@@ -3224,70 +3176,7 @@ AuthResult ConsoleVRDPServer::Authenticate(const Guid &uuid, AuthGuestJudgement
 
         Utf8Str filename = authLibrary;
 
-        LogRel(("AUTH: loading external authentication library '%ls'\n", authLibrary.raw()));
-
-        int rc;
-        if (RTPathHavePath(filename.c_str()))
-            rc = RTLdrLoad(filename.c_str(), &mAuthLibrary);
-        else
-        {
-            rc = RTLdrLoadAppPriv(filename.c_str(), &mAuthLibrary);
-            if (RT_FAILURE(rc))
-            {
-                /* Backward compatibility with old default 'VRDPAuth' name.
-                 * Try to load new default 'VBoxAuth' instead.
-                 */
-                if (filename == "VRDPAuth")
-                {
-                    LogRel(("AUTH: ConsoleVRDPServer::Authenticate: loading external authentication library VBoxAuth\n"));
-                    rc = RTLdrLoadAppPriv("VBoxAuth", &mAuthLibrary);
-                }
-            }
-        }
-
-        if (RT_FAILURE(rc))
-            LogRel(("AUTH: Failed to load external authentication library. Error code: %Rrc\n", rc));
-
-        if (RT_SUCCESS(rc))
-        {
-            typedef struct AuthEntryInfoStruct
-            {
-                const char *pszName;
-                void **ppvAddress;
-
-            } AuthEntryInfo;
-            AuthEntryInfo entries[] =
-            {
-                { AUTHENTRY3_NAME, (void **)&mpfnAuthEntry3 },
-                { AUTHENTRY2_NAME, (void **)&mpfnAuthEntry2 },
-                { AUTHENTRY_NAME,  (void **)&mpfnAuthEntry },
-                { NULL, NULL }
-            };
-
-            /* Get the entry point. */
-            AuthEntryInfo *pEntryInfo = &entries[0];
-            while (pEntryInfo->pszName)
-            {
-                *pEntryInfo->ppvAddress = NULL;
-
-                int rc2 = RTLdrGetSymbol(mAuthLibrary, pEntryInfo->pszName, pEntryInfo->ppvAddress);
-                if (RT_SUCCESS(rc2))
-                {
-                    /* Found an entry point. */
-                    LogRel(("AUTH: Using entry point '%s'.\n", pEntryInfo->pszName));
-                    rc = VINF_SUCCESS;
-                    break;
-                }
-
-                if (rc2 != VERR_SYMBOL_NOT_FOUND)
-                {
-                    LogRel(("AUTH: Could not resolve import '%s'. Error code: %Rrc\n", pEntryInfo->pszName, rc2));
-                }
-                rc = rc2;
-
-                pEntryInfo++;
-            }
-        }
+        int rc = AuthLibLoad(&mAuthLibCtx, filename.c_str());
 
         if (RT_FAILURE(rc))
         {
@@ -3296,37 +3185,15 @@ AuthResult ConsoleVRDPServer::Authenticate(const Guid &uuid, AuthGuestJudgement
                                filename.c_str(),
                                rc);
 
-            mpfnAuthEntry = NULL;
-            mpfnAuthEntry2 = NULL;
-            mpfnAuthEntry3 = NULL;
-
-            if (mAuthLibrary)
-            {
-                RTLdrClose(mAuthLibrary);
-                mAuthLibrary = 0;
-            }
-
             return AuthResultAccessDenied;
         }
     }
 
-    Assert(mAuthLibrary && (mpfnAuthEntry || mpfnAuthEntry2 || mpfnAuthEntry3));
-
-    AuthCtx ctx;
-    ctx.result         = AuthResultAccessDenied; /* Denied by default. */
-    ctx.pfnAuthEntry3  = mpfnAuthEntry3;
-    ctx.pfnAuthEntry2  = mpfnAuthEntry2;
-    ctx.pfnAuthEntry   = mpfnAuthEntry;
-    ctx.pszCaller      = "vrde";
-    ctx.pUuid          = &rawuuid;
-    ctx.guestJudgement = guestJudgement;
-    ctx.pszUser        = pszUser;
-    ctx.pszPassword    = pszPassword;
-    ctx.pszDomain      = pszDomain;
-    ctx.fLogon         = true;
-    ctx.clientId       = u32ClientId;
-
-    AuthResult result = authCall(&ctx);
+    result = AuthLibAuthenticate(&mAuthLibCtx,
+                                 uuid.raw(), guestJudgement,
+                                 pszUser, pszPassword, pszDomain,
+                                 u32ClientId);
+#endif /* !VBOX_WITH_VRDEAUTH_IN_VBOXSVC */
 
     switch (result)
     {
@@ -3344,37 +3211,36 @@ AuthResult ConsoleVRDPServer::Authenticate(const Guid &uuid, AuthGuestJudgement
             result = AuthResultAccessDenied;
     }
 
-    LogFlow(("ConsoleVRDPServer::Authenticate: result = %d\n", result));
+    LogFlowFunc(("result = %d\n", result));
 
     return result;
 }
 
 void ConsoleVRDPServer::AuthDisconnect(const Guid &uuid, uint32_t u32ClientId)
 {
-    AUTHUUID rawuuid;
+    LogFlow(("ConsoleVRDPServer::AuthDisconnect: uuid = %RTuuid, u32ClientId = %d\n",
+             uuid.raw(), u32ClientId));
 
-    memcpy(rawuuid, uuid.raw(), sizeof(rawuuid));
+#ifdef VBOX_WITH_VRDEAUTH_IN_VBOXSVC
+    try
+    {
+        /* Init auth parameters. Order is important. */
+        SafeArray<BSTR> authParams;
+        Bstr("VRDEAUTHDISCONNECT").detachTo(authParams.appendedRaw());
+        Bstr(uuid.toUtf16()      ).detachTo(authParams.appendedRaw());
+        BstrFmt("%u", u32ClientId).detachTo(authParams.appendedRaw());
 
-    LogFlow(("ConsoleVRDPServer::AuthDisconnect: uuid = %RTuuid, u32ClientId = %d\n",
-             rawuuid, u32ClientId));
-
-    Assert(mAuthLibrary && (mpfnAuthEntry || mpfnAuthEntry2 || mpfnAuthEntry3));
-
-    AuthCtx ctx;
-    ctx.result         = AuthResultAccessDenied; /* Not used. */
-    ctx.pfnAuthEntry3  = mpfnAuthEntry3;
-    ctx.pfnAuthEntry2  = mpfnAuthEntry2;
-    ctx.pfnAuthEntry   = NULL;                   /* Does not use disconnect notification. */
-    ctx.pszCaller      = "vrde";
-    ctx.pUuid          = &rawuuid;
-    ctx.guestJudgement = AuthGuestNotAsked;
-    ctx.pszUser        = NULL;
-    ctx.pszPassword    = NULL;
-    ctx.pszDomain      = NULL;
-    ctx.fLogon         = false;
-    ctx.clientId       = u32ClientId;
-
-    authCall(&ctx);
+        Bstr authResult;
+        HRESULT hr = mConsole->mControl->AuthenticateExternal(ComSafeArrayAsInParam(authParams),
+                                                              authResult.asOutParam());
+        LogFlowFunc(("%Rhrc [%ls]\n", hr, authResult.raw())); NOREF(hr);
+    }
+    catch (std::bad_alloc)
+    {
+    }
+#else
+    AuthLibDisconnect(&mAuthLibCtx, uuid.raw(), u32ClientId);
+#endif /* !VBOX_WITH_VRDEAUTH_IN_VBOXSVC */
 }
 
 int ConsoleVRDPServer::lockConsoleVRDPServer(void)
diff --git a/src/VBox/Main/src-client/DisplayImpl.cpp b/src/VBox/Main/src-client/DisplayImpl.cpp
index 5510434..55adf90 100644
--- a/src/VBox/Main/src-client/DisplayImpl.cpp
+++ b/src/VBox/Main/src-client/DisplayImpl.cpp
@@ -4105,7 +4105,7 @@ DECLCALLBACK(void *)  Display::i_drvQueryInterface(PPDMIBASE pInterface, const c
 /**
  * Destruct a display driver instance.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The driver instance data.
  */
 DECLCALLBACK(void) Display::i_drvDestruct(PPDMDRVINS pDrvIns)
diff --git a/src/VBox/Main/src-client/DrvAudioVRDE.cpp b/src/VBox/Main/src-client/DrvAudioVRDE.cpp
index 3dc91df..247eda8 100644
--- a/src/VBox/Main/src-client/DrvAudioVRDE.cpp
+++ b/src/VBox/Main/src-client/DrvAudioVRDE.cpp
@@ -139,7 +139,7 @@ static DECLCALLBACK(bool) drvAudioVRDEIsEnabled(PPDMIHOSTAUDIO pInterface, PDMAU
 }
 
 /**
- * <Missing brief description>
+ * {FIXME - Missing brief description - FIXME}
  *
  * Transfers audio input formerly sent by a connected RDP client / VRDE backend
  * (using the onVRDEInputXXX methods) over to the VRDE host (VM). The audio device
diff --git a/src/VBox/Main/src-client/KeyboardImpl.cpp b/src/VBox/Main/src-client/KeyboardImpl.cpp
index b796cab..f19ad00 100644
--- a/src/VBox/Main/src-client/KeyboardImpl.cpp
+++ b/src/VBox/Main/src-client/KeyboardImpl.cpp
@@ -336,7 +336,7 @@ DECLCALLBACK(void *) Keyboard::i_drvQueryInterface(PPDMIBASE pInterface, const c
 /**
  * Destruct a keyboard driver instance.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The driver instance data.
  */
 DECLCALLBACK(void) Keyboard::i_drvDestruct(PPDMDRVINS pDrvIns)
diff --git a/src/VBox/Main/src-client/MachineDebuggerImpl.cpp b/src/VBox/Main/src-client/MachineDebuggerImpl.cpp
index d0052a2..b9ad1ee 100644
--- a/src/VBox/Main/src-client/MachineDebuggerImpl.cpp
+++ b/src/VBox/Main/src-client/MachineDebuggerImpl.cpp
@@ -405,7 +405,7 @@ HRESULT MachineDebugger::setCSAMEnabled(BOOL aCSAMEnabled)
  * Returns the log enabled / disabled status.
  *
  * @returns COM status code
- * @param   aEnabled     address of result variable
+ * @param   aLogEnabled     address of result variable
  */
 HRESULT MachineDebugger::getLogEnabled(BOOL *aLogEnabled)
 {
@@ -425,7 +425,7 @@ HRESULT MachineDebugger::getLogEnabled(BOOL *aLogEnabled)
  * Enables or disables logging.
  *
  * @returns COM status code
- * @param   aEnabled    The new code log state.
+ * @param   aLogEnabled    The new code log state.
  */
 HRESULT MachineDebugger::setLogEnabled(BOOL aLogEnabled)
 {
@@ -867,7 +867,7 @@ static DECLCALLBACK(size_t) MachineDebuggerInfoOutput(void *pvArg, const char *p
 }
 
 /**
- * @interface_method_impl{DBGFINFOHLP, pfnPrintfV}
+ * @interface_method_impl{DBGFINFOHLP,pfnPrintfV}
  */
 static DECLCALLBACK(void) MachineDebuggerInfoPrintfV(PCDBGFINFOHLP pHlp, const char *pszFormat, va_list va)
 {
@@ -875,7 +875,7 @@ static DECLCALLBACK(void) MachineDebuggerInfoPrintfV(PCDBGFINFOHLP pHlp, const c
 }
 
 /**
- * @interface_method_impl{DBGFINFOHLP, pfnPrintf}
+ * @interface_method_impl{DBGFINFOHLP,pfnPrintf}
  */
 static DECLCALLBACK(void) MachineDebuggerInfoPrintf(PCDBGFINFOHLP pHlp, const char *pszFormat, ...)
 {
diff --git a/src/VBox/Main/src-client/MouseImpl.cpp b/src/VBox/Main/src-client/MouseImpl.cpp
index 9535af3..7337881 100644
--- a/src/VBox/Main/src-client/MouseImpl.cpp
+++ b/src/VBox/Main/src-client/MouseImpl.cpp
@@ -1184,7 +1184,7 @@ DECLCALLBACK(void *)  Mouse::i_drvQueryInterface(PPDMIBASE pInterface, const cha
 /**
  * Destruct a mouse driver instance.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pDrvIns     The driver instance data.
  */
 DECLCALLBACK(void) Mouse::i_drvDestruct(PPDMDRVINS pDrvIns)
diff --git a/src/VBox/Main/src-client/Nvram.cpp b/src/VBox/Main/src-client/Nvram.cpp
index 1c13d36..0267c12 100644
--- a/src/VBox/Main/src-client/Nvram.cpp
+++ b/src/VBox/Main/src-client/Nvram.cpp
@@ -97,7 +97,7 @@ Nvram::~Nvram()
 
 
 /**
- * @interface_method_impl(PDMINVRAM,pfnVarStoreSeqEnd)
+ * @interface_method_impl{PDMINVRAMCONNECTOR,pfnVarStoreSeqEnd}
  */
 DECLCALLBACK(int) drvNvram_VarStoreSeqEnd(PPDMINVRAMCONNECTOR pInterface, int rc)
 {
@@ -131,7 +131,7 @@ static char *drvNvram_binaryToCfgmString(void const *pvBuf, size_t cbBuf)
 }
 
 /**
- * @interface_method_impl(PDMINVRAM,pfnVarStoreSeqPut)
+ * @interface_method_impl{PDMINVRAMCONNECTOR,pfnVarStoreSeqPut}
  */
 DECLCALLBACK(int) drvNvram_VarStoreSeqPut(PPDMINVRAMCONNECTOR pInterface, int idxVariable,
                                           PCRTUUID pVendorUuid, const char *pszName, size_t cchName,
@@ -228,7 +228,7 @@ static void drvNvram_deleteVar(PNVRAM pThis, const char *pszVarNodeNm)
 }
 
 /**
- * @interface_method_impl(PDMINVRAM,pfnVarStoreSeqBegin)
+ * @interface_method_impl{PDMINVRAMCONNECTOR,pfnVarStoreSeqBegin}
  */
 DECLCALLBACK(int) drvNvram_VarStoreSeqBegin(PPDMINVRAMCONNECTOR pInterface, uint32_t cVariables)
 {
@@ -255,7 +255,7 @@ DECLCALLBACK(int) drvNvram_VarStoreSeqBegin(PPDMINVRAMCONNECTOR pInterface, uint
 }
 
 /**
- * @interface_method_impl(PDMINVRAMCONNECTOR,pfnVarQueryByIndex)
+ * @interface_method_impl{PDMINVRAMCONNECTOR,pfnVarQueryByIndex}
  */
 DECLCALLBACK(int) drvNvram_VarQueryByIndex(PPDMINVRAMCONNECTOR pInterface, uint32_t idxVariable,
                                            PRTUUID pVendorUuid, char *pszName, uint32_t *pcchName,
@@ -311,7 +311,7 @@ DECLCALLBACK(int) drvNvram_VarQueryByIndex(PPDMINVRAMCONNECTOR pInterface, uint3
 
 
 /**
- * @interface_method_impl(PDMIBASE,pfnQueryInterface)
+ * @interface_method_impl{PDMIBASE,pfnQueryInterface}
  */
 DECLCALLBACK(void *) Nvram::drvNvram_QueryInterface(PPDMIBASE pInterface, const char *pszIID)
 {
@@ -326,7 +326,7 @@ DECLCALLBACK(void *) Nvram::drvNvram_QueryInterface(PPDMIBASE pInterface, const
 
 
 /**
- * @interface_method_impl(PDMDRVREG,pfnDestruct)
+ * @interface_method_impl{PDMDRVREG,pfnDestruct}
  */
 DECLCALLBACK(void) Nvram::drvNvram_Destruct(PPDMDRVINS pDrvIns)
 {
@@ -339,7 +339,7 @@ DECLCALLBACK(void) Nvram::drvNvram_Destruct(PPDMDRVINS pDrvIns)
 
 
 /**
- * @interface_method_impl(PDMDRVREG,pfnConstruct)
+ * @interface_method_impl{PDMDRVREG,pfnConstruct}
  */
 DECLCALLBACK(int) Nvram::drvNvram_Construct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uint32_t fFlags)
 {
diff --git a/src/VBox/Main/src-client/RemoteUSBBackend.cpp b/src/VBox/Main/src-client/RemoteUSBBackend.cpp
index ff62599..886e838 100644
--- a/src/VBox/Main/src-client/RemoteUSBBackend.cpp
+++ b/src/VBox/Main/src-client/RemoteUSBBackend.cpp
@@ -1,6 +1,5 @@
 /* $Id: RemoteUSBBackend.cpp $ */
 /** @file
- *
  * VirtualBox Remote USB backend
  */
 
diff --git a/src/VBox/Main/src-server/ApplianceImplIO.cpp b/src/VBox/Main/src-server/ApplianceImplIO.cpp
index ed3dd06..f8b8006 100644
--- a/src/VBox/Main/src-server/ApplianceImplIO.cpp
+++ b/src/VBox/Main/src-server/ApplianceImplIO.cpp
@@ -617,7 +617,7 @@ static DECLCALLBACK(int) fssRdOnly_GetSize(void *pvUser, void *pvStorage, uint64
     return rc;
 }
 
-/** @interface_method_impl{VDINTERFACEIO,pfnRead}  */
+/** @interface_method_impl{VDINTERFACEIO,pfnReadSync}  */
 static DECLCALLBACK(int) fssRdOnly_ReadSync(void *pvUser, void *pvStorage, uint64_t off, void *pvBuf,
                                             size_t cbToRead, size_t *pcbRead)
 {
diff --git a/src/VBox/Main/src-server/ApplianceImplImport.cpp b/src/VBox/Main/src-server/ApplianceImplImport.cpp
index cbe2321..e29dca2 100644
--- a/src/VBox/Main/src-server/ApplianceImplImport.cpp
+++ b/src/VBox/Main/src-server/ApplianceImplImport.cpp
@@ -1017,8 +1017,8 @@ HRESULT Appliance::i_readFSOVF(TaskOVF *pTask)
                     Utf8Str name = i_applianceIOName(applianceIOFile);
 
                     vrc = VDInterfaceAdd(&pFileIo->Core, name.c_str(),
-                                             VDINTERFACETYPE_IO, 0, sizeof(VDINTERFACEIO),
-                                             &storage.pVDImageIfaces);
+                                         VDINTERFACETYPE_IO, 0, sizeof(VDINTERFACEIO),
+                                         &storage.pVDImageIfaces);
                     if (RT_FAILURE(vrc))
                         throw setError(VBOX_E_IPRT_ERROR, "Creation of the VD interface failed (%Rrc)", vrc);
 
diff --git a/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp b/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp
index ffc99e4..a47a2b5 100644
--- a/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp
+++ b/src/VBox/Main/src-server/HostDnsServiceResolvConf.cpp
@@ -46,7 +46,10 @@ typedef int socklen_t;
 
 struct HostDnsServiceResolvConf::Data
 {
-    Data(const char *fileName):resolvConfFilename(fileName){};
+    Data(const char *fileName)
+        : resolvConfFilename(fileName)
+    {
+    };
 
     std::string resolvConfFilename;
 };
@@ -106,3 +109,4 @@ HRESULT HostDnsServiceResolvConf::readResolvConf()
 
     return S_OK;
 }
+
diff --git a/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp b/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp
index 23e3dca..c65a542 100644
--- a/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp
+++ b/src/VBox/Main/src-server/HostUSBDeviceImpl.cpp
@@ -168,11 +168,7 @@ HRESULT HostUSBDevice::getManufacturer(com::Utf8Str &aManufacturer)
 
     aManufacturer = mUsb->pszManufacturer;
     if (mUsb->pszManufacturer == NULL || mUsb->pszManufacturer[0] == 0)
-    {
-        const char* vendorName = AliasDictionary::findVendor(mUsb->idVendor);
-        if (vendorName)
-            aManufacturer = vendorName;
-    }
+        aManufacturer = USBIdDatabase::findVendor(mUsb->idVendor);
     return S_OK;
 }
 
@@ -183,11 +179,7 @@ HRESULT HostUSBDevice::getProduct(com::Utf8Str &aProduct)
 
     aProduct = mUsb->pszProduct;
     if (mUsb->pszProduct == NULL || mUsb->pszProduct[0] == 0)
-    {
-        const char* productName = AliasDictionary::findProduct(mUsb->idVendor, mUsb->idProduct);
-        if (productName)
-            aProduct = productName;
-    }
+        aProduct = USBIdDatabase::findProduct(mUsb->idVendor, mUsb->idProduct);
     return S_OK;
 }
 
@@ -334,21 +326,26 @@ com::Utf8Str HostUSBDevice::i_getName()
     if (haveManufacturer && haveProduct)
         name = Utf8StrFmt("%s %s", mUsb->pszManufacturer, mUsb->pszProduct);
     else if (haveManufacturer)
-        name = Utf8StrFmt("%s", mUsb->pszManufacturer);
+        name = mUsb->pszManufacturer;
     else if (haveProduct)
-        name = Utf8StrFmt("%s", mUsb->pszProduct);
+        name = mUsb->pszProduct;
     else
     {
-        const char* vendorName = AliasDictionary::findVendor(mUsb->idVendor);
-        const char* productName = AliasDictionary::findProduct(mUsb->idVendor, mUsb->idProduct);
-        if (vendorName && productName)
-        {
-            name = Utf8StrFmt("%s %s", vendorName, productName);
-        }
+        Utf8Str strProduct;
+        Utf8Str strVendor = USBIdDatabase::findVendorAndProduct(mUsb->idVendor, mUsb->idProduct, &strProduct);
+        if (strVendor.isNotEmpty() && strProduct.isNotEmpty())
+            name = Utf8StrFmt("%s %s", strVendor.c_str(), strProduct.c_str());
         else
         {
-            name = "<unknown>";
-            LogRel(("USB: Unknown USB device detected (idVendor: 0x%04x, idProduct: 0x%04x). Please, report the idVendor and idProduct to virtualbox.org.\n", vendorName, productName));
+            LogRel(("USB: Unknown USB device detected (idVendor: 0x%04x, idProduct: 0x%04x). Please, report the idVendor and idProduct to virtualbox.org.\n",
+                    mUsb->idVendor, mUsb->idProduct));
+            if (strVendor.isNotEmpty())
+                name = strVendor;
+            else
+            {
+                Assert(strProduct.isEmpty());
+                name = "<unknown>";
+            }
         }
     }
 
diff --git a/src/VBox/Main/src-server/MachineImpl.cpp b/src/VBox/Main/src-server/MachineImpl.cpp
index 6fe11d2..ce1047b 100644
--- a/src/VBox/Main/src-server/MachineImpl.cpp
+++ b/src/VBox/Main/src-server/MachineImpl.cpp
@@ -4165,7 +4165,7 @@ HRESULT Machine::attachDevice(const com::Utf8Str &aName,
                 alock.release();
 
                 rc = medium->i_createDiffStorage(diff,
-                                                 MediumVariant_Standard,
+                                                 medium->i_getPreferredDiffVariant(),
                                                  pMediumLockList,
                                                  NULL /* aProgress */,
                                                  true /* aWait */);
@@ -10336,6 +10336,7 @@ HRESULT Machine::i_saveHardware(settings::Hardware &data, settings::Debugging *p
         if (FAILED(rc)) throw rc;
 
         /* Host PCI devices */
+        data.pciAttachments.clear();
         for (HWData::PCIDeviceAssignmentList::const_iterator it = mHWData->mPCIDeviceAssignments.begin();
              it != mHWData->mPCIDeviceAssignments.end();
              ++it)
@@ -10793,7 +10794,8 @@ HRESULT Machine::i_createImplicitDiffs(IProgress *aProgress,
 
             /* release the locks before the potentially lengthy operation */
             alock.release();
-            rc = pMedium->i_createDiffStorage(diff, MediumVariant_Standard,
+            rc = pMedium->i_createDiffStorage(diff,
+                                              pMedium->i_getPreferredDiffVariant(),
                                               pMediumLockList,
                                               NULL /* aProgress */,
                                               true /* aWait */);
@@ -10844,7 +10846,7 @@ HRESULT Machine::i_createImplicitDiffs(IProgress *aProgress,
 
 /**
  * Deletes implicit differencing hard disks created either by
- * #createImplicitDiffs() or by #AttachDevice() and rolls back mMediaData.
+ * #i_createImplicitDiffs() or by #AttachDevice() and rolls back mMediaData.
  *
  * Note that to delete hard disks created by #AttachDevice() this method is
  * called from #fixupMedia() when the changes are rolled back.
@@ -12331,6 +12333,8 @@ HRESULT SessionMachine::init(Machine *aMachine)
 
     HRESULT rc = S_OK;
 
+    RT_ZERO(mAuthLibCtx);
+
     /* create the machine client token */
     try
     {
@@ -12648,6 +12652,16 @@ void SessionMachine::uninit(Uninit::Reason aReason)
         mData->mSession.mProgress.setNull();
     }
 
+    if (mConsoleTaskData.mProgress)
+    {
+        Assert(aReason == Uninit::Abnormal);
+        mConsoleTaskData.mProgress->i_notifyComplete(E_FAIL,
+                                                     COM_IIDOF(ISession),
+                                                     getComponentName(),
+                                                     tr("The VM session was aborted"));
+        mConsoleTaskData.mProgress.setNull();
+    }
+
     /* remove the association between the peer machine and this session machine */
     Assert(   (SessionMachine*)mData->mSession.mMachine == this
             || aReason == Uninit::Unexpected);
@@ -12679,6 +12693,8 @@ void SessionMachine::uninit(Uninit::Reason aReason)
     unconst(mParent) = NULL;
     unconst(mPeer) = NULL;
 
+    AuthLibUnload(&mAuthLibCtx);
+
     LogFlowThisFuncLeave();
 }
 
@@ -13548,6 +13564,94 @@ HRESULT SessionMachine::ejectMedium(const ComPtr<IMediumAttachment> &aAttachment
     return S_OK;
 }
 
+HRESULT SessionMachine::authenticateExternal(const std::vector<com::Utf8Str> &aAuthParams,
+                                             com::Utf8Str &aResult)
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    HRESULT hr = S_OK;
+
+    if (aAuthParams[0] == "VRDEAUTH" && aAuthParams.size() == 7)
+    {
+        enum VRDEAuthParams
+        {
+           parmUuid = 1,
+           parmGuestJudgement,
+           parmUser,
+           parmPassword,
+           parmDomain,
+           parmClientId
+        };
+
+        AuthResult result = AuthResultAccessDenied;
+
+        if (!mAuthLibCtx.hAuthLibrary)
+        {
+            /* Load the external authentication library. */
+            Bstr authLibrary;
+            mVRDEServer->COMGETTER(AuthLibrary)(authLibrary.asOutParam());
+
+            Utf8Str filename = authLibrary;
+
+            int rc = AuthLibLoad(&mAuthLibCtx, filename.c_str());
+            if (RT_FAILURE(rc))
+            {
+                hr = setError(E_FAIL,
+                              tr("Could not load the external authentication library '%s' (%Rrc)"),
+                              filename.c_str(), rc);
+            }
+        }
+
+        if (SUCCEEDED(hr))
+        {
+            Guid uuid(aAuthParams[parmUuid]);
+            AuthGuestJudgement guestJudgement = (AuthGuestJudgement)aAuthParams[parmGuestJudgement].toUInt32();
+            uint32_t u32ClientId = aAuthParams[parmClientId].toUInt32();
+
+            result = AuthLibAuthenticate(&mAuthLibCtx,
+                                         uuid.raw(), guestJudgement,
+                                         aAuthParams[parmUser].c_str(),
+                                         aAuthParams[parmPassword].c_str(),
+                                         aAuthParams[parmDomain].c_str(),
+                                         u32ClientId);
+        }
+
+        /* Hack: aAuthParams[parmPassword] is const but the code believes in writable memory. */
+        size_t cbPassword = aAuthParams[parmPassword].length();
+        if (cbPassword)
+        {
+            RTMemWipeThoroughly((void *)aAuthParams[parmPassword].c_str(), cbPassword, 10 /* cPasses */);
+            memset((void *)aAuthParams[parmPassword].c_str(), 'x', cbPassword);
+        }
+
+        if (result == AuthResultAccessGranted)
+            aResult = "granted";
+        else
+            aResult = "denied";
+
+        LogRel(("AUTH: VRDE authentification for user '%s' result '%s'\n",
+                aAuthParams[parmUser].c_str(), aResult.c_str()));
+    }
+    else if (aAuthParams[0] == "VRDEAUTHDISCONNECT" && aAuthParams.size() == 3)
+    {
+        enum VRDEAuthDisconnectParams
+        {
+           parmUuid = 1,
+           parmClientId
+        };
+
+        Guid uuid(aAuthParams[parmUuid]);
+        uint32_t u32ClientId = 0;
+        AuthLibDisconnect(&mAuthLibCtx, uuid.raw(), u32ClientId);
+    }
+    else
+    {
+        hr = E_INVALIDARG;
+    }
+
+    return hr;
+}
+
 // public methods only for internal purposes
 /////////////////////////////////////////////////////////////////////////////
 
@@ -14778,6 +14882,14 @@ HRESULT Machine::reportVmStatistics(ULONG aValidStats,
     ReturnComNotImplemented();
 }
 
+HRESULT Machine::authenticateExternal(const std::vector<com::Utf8Str> &aAuthParams,
+                                             com::Utf8Str &aResult)
+{
+    NOREF(aAuthParams);
+    NOREF(aResult);
+    ReturnComNotImplemented();
+}
+
 HRESULT Machine::applyDefaults(const com::Utf8Str &aFlags)
 {
     NOREF(aFlags);
diff --git a/src/VBox/Main/src-server/MachineImplCloneVM.cpp b/src/VBox/Main/src-server/MachineImplCloneVM.cpp
index fcde9ad..dbdcbe5 100644
--- a/src/VBox/Main/src-server/MachineImplCloneVM.cpp
+++ b/src/VBox/Main/src-server/MachineImplCloneVM.cpp
@@ -724,7 +724,8 @@ HRESULT MachineCloneVMPrivate::createDifferencingMedium(const ComObjPtr<Machine>
         if (FAILED(rc)) throw rc;
 
         /* this already registers the new diff image */
-        rc = pParent->i_createDiffStorage(diff, MediumVariant_Standard,
+        rc = pParent->i_createDiffStorage(diff,
+                                          pParent->i_getPreferredDiffVariant(),
                                           pMediumLockList,
                                           NULL /* aProgress */,
                                           true /* aWait */);
diff --git a/src/VBox/Main/src-server/MediumImpl.cpp b/src/VBox/Main/src-server/MediumImpl.cpp
index e07913d..93f0634 100644
--- a/src/VBox/Main/src-server/MediumImpl.cpp
+++ b/src/VBox/Main/src-server/MediumImpl.cpp
@@ -4512,6 +4512,25 @@ Utf8Str Medium::i_getPreferredDiffFormat()
 }
 
 /**
+ * Returns a preferred variant for differencing media.
+ */
+MediumVariant_T Medium::i_getPreferredDiffVariant()
+{
+    AutoCaller autoCaller(this);
+    AssertComRCReturn(autoCaller.rc(), MediumVariant_Standard);
+
+    /* check that our own format supports diffs */
+    if (!(m->formatObj->i_getCapabilities() & MediumFormatCapabilities_Differencing))
+        return MediumVariant_Standard;
+
+    /* m->variant is const, no need to lock */
+    ULONG mediumVariantFlags = (ULONG)m->variant;
+    mediumVariantFlags &= ~MediumVariant_Fixed;
+    mediumVariantFlags |= MediumVariant_Diff;
+    return (MediumVariant_T)mediumVariantFlags;
+}
+
+/**
  * Implementation for the public Medium::Close() with the exception of calling
  * VirtualBox::saveRegistries(), in case someone wants to call this for several
  * media.
diff --git a/src/VBox/Main/src-server/StorageControllerImpl.cpp b/src/VBox/Main/src-server/StorageControllerImpl.cpp
index 4cc6607..8f2c0c2 100644
--- a/src/VBox/Main/src-server/StorageControllerImpl.cpp
+++ b/src/VBox/Main/src-server/StorageControllerImpl.cpp
@@ -683,11 +683,13 @@ bool StorageController::i_getBootable() const
 }
 
 /**
- * Returns S_OK if the given port and device numbers are within the range supported
- * by this controller. If not, it sets an error and returns E_INVALIDARG.
- * @param ulPort
- * @param ulDevice
- * @return
+ * Checks the validity of a port and device number.
+ *
+ * @retval S_OK If the given port and device numbers are within the range
+ *         supported by this controller.
+ * @retval E_INVALIDARG If not. Sets an error.
+ * @param aControllerPort   Controller port number.
+ * @param aDevice           Device number.
  */
 HRESULT StorageController::i_checkPortAndDeviceValid(LONG aControllerPort,
                                                      LONG aDevice)
diff --git a/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp b/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp
index c65df1d..f854125 100644
--- a/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp
+++ b/src/VBox/Main/src-server/USBDeviceFilterImpl.cpp
@@ -204,6 +204,7 @@ void USBDeviceFilter::FinalRelease()
  *  Initializes the USB device filter object.
  *
  *  @param aParent  Handle of the parent object.
+ *  @param data     Reference filter settings.
  */
 HRESULT USBDeviceFilter::init(USBDeviceFilters *aParent,
                               const settings::USBDeviceFilter &data)
diff --git a/src/VBox/Main/src-server/USBIdDatabaseGenerator.cpp b/src/VBox/Main/src-server/USBIdDatabaseGenerator.cpp
index b51d109..4f89c66 100644
--- a/src/VBox/Main/src-server/USBIdDatabaseGenerator.cpp
+++ b/src/VBox/Main/src-server/USBIdDatabaseGenerator.cpp
@@ -1,74 +1,149 @@
+/* $Id: USBIdDatabaseGenerator.cpp $ */
+/** @file
+ * USB device vendor and product ID database - generator.
+ */
+
 /*
-* 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.
-*/
+ * Copyright (C) 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.
+ */
 
+/*********************************************************************************************************************************
+*   Header Files                                                                                                                 *
+*********************************************************************************************************************************/
 #include <stdio.h>
+
 #include <fstream>
 #include <iostream>
+#include <iomanip>
 #include <algorithm>
-#include <vector>
+#include <map>
 #include <string>
+#include <vector>
 
+#include <iprt/initterm.h>
+#include <iprt/message.h>
 #include <iprt/string.h>
 #include <iprt/stream.h>
+#include "../../Runtime/include/internal/strhash.h" /** @todo make this one public */
+
+#include "../include/USBIdDatabase.h"
+
+
+/** For verbose output.   */
+static bool g_fVerbose = false;
+/** Output prefix for informational output. */
+#define INFO_PREF "USBIdDatabaseGenerator: Info: "
+
 
 using namespace std;
 
-const char* header = "/*\n\
- * Copyright(C) 2005 - 2015 Oracle Corporation\n\
- *\n\
- * 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\
- */\
- \n\
- \n\
- #include \"USBIdDatabase.h\"\n\
- \n\
- /** USB devices aliases array.\n\
- *   Format: VendorId, ProductId, Vendor Name, Product Name\n\
- *   The source of the list is http://www.linux-usb.org/usb.ids\n\
- */\n\
- Product AliasDictionary::productArray[] = { \n";
-
-const char* footer = "};\n\
- \n\
- const size_t AliasDictionary::products_size = sizeof(AliasDictionary::productArray) / sizeof(Product); \n";
-
-const char* vendor_header = "\nVendor AliasDictionary::vendorArray[] = { \n";
-const char* vendor_footer = "};\n\
-\n\
-const size_t AliasDictionary::vendors_size = sizeof(AliasDictionary::vendorArray) / sizeof(Vendor);";
-
-const char* start_block = "#            interface  interface_name               <-- two tabs";
-const char* end_block = "# List of known device classes, subclasses and protocols";
-
-#define USBKEY(vendorId, productId) (((vendorId) << 16) | (productId))
-
-// error codes
-#define ERROR_INVALID_ARGUMENTS (1)
-#define ERROR_OPEN_FILE         (2)
-#define ERROR_IN_PARSE_LINE     (3)
-#define ERROR_DUPLICATE_ENTRY   (4)
-#define ERROR_WRONG_FILE_FORMAT (5)
+static const char * const header =
+    "/** @file\n"
+    " * USB device vendor and product ID database - Autogenerated from <stupid C++ cannot do %s>\n"
+    " */\n"
+    "\n"
+    "/*\n"
+    " * Copyright (C) 2015 Oracle Corporation\n"
+    " *\n"
+    " * 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"
+    "\n"
+    "#include \"USBIdDatabase.h\"\n"
+    "\n";
+static const char * const product_header =
+    "/**\n"
+    " * USB devices aliases array.\n"
+    " * Format: VendorId, ProductId, Vendor Name, Product Name\n"
+    " * The source of the list is http://www.linux-usb.org/usb.ids\n"
+    " */\n"
+    "USBIDDBPROD const USBIdDatabase::s_aProducts[] =\n"
+    "{\n";
+const char *product_part2 =
+    "};\n"
+    "\n"
+    "\nconst USBIDDBSTR USBIdDatabase::s_aProductNames[] =\n"
+    "{\n";
+const char *product_footer =
+    "};\n"
+    "\n"
+    "const size_t USBIdDatabase::s_cProducts = RT_ELEMENTS(USBIdDatabase::s_aProducts);\n";
+
+const char *vendor_header =
+    "\nUSBIDDBVENDOR const USBIdDatabase::s_aVendors[] =\n"
+    "{\n";
+const char *vendor_part2 =
+    "};\n"
+    "\n"
+    "\nconst USBIDDBSTR USBIdDatabase::s_aVendorNames[] =\n"
+    "{\n";
+const char *vendor_footer =
+    "};\n"
+    "\n"
+    "const size_t USBIdDatabase::s_cVendors = RT_ELEMENTS(USBIdDatabase::s_aVendors);\n";
+
+const char *start_block = "# Vendors, devices and interfaces. Please keep sorted.";
+const char *end_block = "# List of known device classes, subclasses and protocols";
+
+
+// error codes (complements RTEXITCODE_XXX).
+#define ERROR_OPEN_FILE         (12)
+#define ERROR_IN_PARSE_LINE     (13)
+#define ERROR_DUPLICATE_ENTRY   (14)
+#define ERROR_WRONG_FILE_FORMAT (15)
+#define ERROR_TOO_MANY_PRODUCTS (16)
+
+
+/**
+ * String that will end up in the string table.
+ */
+struct StrTabString
+{
+    /** The string. */
+    std::string str;
+    /** The string hash value. */
+    uint32_t    uHash;
+    /** The string table reference. */
+    USBIDDBSTR  StrRef;
+    /** Pointer to the next string reference (same string table entry). */
+    struct StrTabString *pNextRef;
+    /** Pointer to the next string with the same hash value (collision). */
+    struct StrTabString *pNextCollision;
+
+    void printRef(ostream &rStrm) const
+    {
+        rStrm << "    { 0x" << setfill('0') << setw(6) << hex << StrRef.off << ", 0x"
+              << setfill('0') << setw(2) << hex << StrRef.cch << " }, ";
+    }
+
+    void printRefLine(ostream &rStrm) const
+    {
+        printRef(rStrm);
+        rStrm << endl;
+    }
+};
+typedef struct StrTabString *PSTRTABSTRING;
 
 struct VendorRecord
 {
     size_t vendorID;
-    string vendor;
+    size_t iProduct;
+    size_t cProducts;
+    StrTabString vendor;
 };
 
 struct ProductRecord
@@ -76,7 +151,7 @@ struct ProductRecord
     size_t key;
     size_t vendorID;
     size_t productID;
-    string product;
+    StrTabString product;
 };
 
 bool operator < (const ProductRecord& lh, const ProductRecord& rh)
@@ -99,32 +174,17 @@ bool operator == (const VendorRecord& lh, const VendorRecord& rh)
     return lh.vendorID == rh.vendorID;
 }
 
-string conv(const string& src)
-{
-    string res = src;
-    for (size_t i = 0; i < res.length(); i++)
-    {
-        switch (res[i])
-        {
-        case '"':
-        case '\\': res.insert(i++, "\\");
-        }
-    }
-    return res;
-}
-
 ostream& operator <<(ostream& stream, const ProductRecord product)
 {
-    stream << "{USBKEY(0x" << hex << product.vendorID
-        << ", 0x" << product.productID << "), "
-        << "\"" << conv(product.product).c_str() << "\" }," << endl;
+    stream << "    { 0x" << setfill('0') << setw(4) << product.productID << " }, " << endl;
     return stream;
 }
 
 ostream& operator <<(ostream& stream, const VendorRecord vendor)
 {
-    stream << "{0x" << hex << vendor.vendorID
-        << ", \"" << conv(vendor.vendor).c_str() << "\" }," << endl;
+    stream << "    { 0x" << setfill('0') << setw(4) << hex << vendor.vendorID
+           << ", 0x"  << setfill('0') << setw(4) << hex << vendor.iProduct
+           << ", 0x"  << setfill('0') << setw(4) << hex << vendor.cProducts << " }, " << endl;
     return stream;
 }
 
@@ -145,26 +205,704 @@ ProductsSet g_products;
 VendorsSet g_vendors;
 
 
+
+/*
+ * String "compression".  We replace the 127 most used words with references.
+ */
+#ifdef USB_ID_DATABASE_WITH_COMPRESSION
+
+typedef std::map<std::string, size_t> WORDFREQMAP;
+typedef WORDFREQMAP::value_type WORDFREQPAIR;
+
+/** The 127 words we've picked to be indexed by reference.  */
+static StrTabString g_aCompDict[127];
+
+/**
+ * For sorting the frequency fidning in descending order.
+ *
+ * Comparison operators are put outside to make older gcc versions (like 4.1.1
+ * on lnx64-rel) happy.
+ */
+class WordFreqSortEntry
+{
+public:
+    WORDFREQPAIR const *m_pPair;
+
+public:
+    WordFreqSortEntry(WORDFREQPAIR const *pPair) : m_pPair(pPair) {}
+};
+
+bool operator == (WordFreqSortEntry const &rLeft, WordFreqSortEntry const &rRight)
+{
+    return rLeft.m_pPair->second == rRight.m_pPair->second;
+}
+
+bool operator <  (WordFreqSortEntry const &rLeft, WordFreqSortEntry const &rRight)
+{
+    return rLeft.m_pPair->second >  rRight.m_pPair->second;
+}
+
+
+/**
+ * Replaces the dictionary words and escapes non-ascii chars in a string.
+ *
+ * @param   pString     The string to fixup.
+ * @param   pcchOld     The old string length is added to this (stats)
+ * @param   pcchNew     The new string length is added to this (stats)
+ */
+static void FixupString(std::string *pString, size_t *pcchOld, size_t *pcchNew)
+{
+    char        szNew[USB_ID_DATABASE_MAX_STRING * 2];
+    char       *pszDst = szNew;
+    const char *pszSrc = pString->c_str();
+    const char *pszSrcEnd = strchr(pszSrc, '\0');
+
+    *pcchOld += pszSrcEnd - pszSrc;
+
+    char ch;
+    while ((ch = *pszSrc) != '\0')
+    {
+        /* Spaces. */
+        while (ch == ' ')
+        {
+            *pszDst++ = ' ';
+            ch = *++pszSrc;
+        }
+        if (!ch)
+            break;
+
+        /* Find the end of the current word. */
+        size_t cchWord = 1;
+        while ((ch = pszSrc[cchWord]) != ' ' && ch != '\0')
+            cchWord++;
+
+        /* Check for g_aWord matches. */
+        size_t cchMax = pszSrcEnd - pszSrc;
+        for (unsigned i = 0; i < RT_ELEMENTS(g_aCompDict); i++)
+        {
+            size_t cchLen = g_aCompDict[i].str.length();
+            if (   cchLen >= cchWord
+                && cchLen <= cchMax
+                && g_aCompDict[i].str.compare(0, cchLen, pszSrc, cchLen) == 0)
+            {
+                *pszDst++ = (unsigned char)(0x80 | i);
+                pszSrc += cchLen;
+                cchWord = 0;
+                break;
+            }
+        }
+
+        if (cchWord)
+        {
+            /* Copy the current word. */
+            ch = *pszSrc;
+            do
+            {
+                if (!((unsigned char)ch & 0x80))
+                {
+                    *pszDst++ = ch;
+                    pszSrc++;
+                }
+                else
+                {
+                    RTUNICP uc;
+                    int rc = RTStrGetCpEx(&pszSrc, &uc);
+                    if (RT_SUCCESS(rc))
+                    {
+                        *pszDst++ = (unsigned char)0xff; /* escape single code point. */
+                        pszDst = RTStrPutCp(pszDst, uc);
+                    }
+                    else
+                    {
+                        cerr << "Error: RTStrGetCpEx failed with rc=" << rc << endl;
+                        exit(3);
+                    }
+                }
+            } while ((ch = *pszSrc) != '\0' && ch != ' ');
+        }
+    }
+    *pszDst = '\0';
+    *pcchNew += pszDst - &szNew[0];
+
+    *pString = szNew;
+}
+
+
+/**
+ * Analyzes a string.
+ *
+ * @param   pFrequencies    The word frequency map.
+ * @param   rString         The string to analyze.
+ */
+static void AnalyzeString(WORDFREQMAP *pFrequencies, std::string const &rString)
+{
+    const char *psz = rString.c_str();
+
+    /*
+     * For now we just consider words.
+     */
+    char ch;
+    while ((ch = *psz) != '\0')
+    {
+        /* Skip leading spaces. */
+        while (ch == ' ')
+            ch = *++psz;
+        if (!ch)
+            return;
+
+        /* Find end of word. */
+        size_t cchWord = 1;
+        while ((ch = psz[cchWord]) != ' ' && ch != '\0')
+            cchWord++;
+        if (cchWord > 1)
+        {
+            std::string strWord(psz, cchWord);
+            WORDFREQMAP::iterator it = pFrequencies->find(strWord);
+            if (it != pFrequencies->end())
+                it->second += cchWord - 1;
+            else
+                (*pFrequencies)[strWord] = 0;
+            /** @todo could gain hits by including the space after the word, but that
+             *        has the same accounting problems as the two words scenario below. */
+
+# if 0 /** @todo need better accounting for overlapping alternatives before this can be enabled. */
+            /* Two words - immediate yields calc may lie when this enabled and we may pick the wrong words. */
+            if (ch == ' ')
+            {
+                ch = psz[++cchWord];
+                if (ch != ' ' && ch != '\0')
+                {
+                    size_t const cchSaved = cchWord;
+
+                    do
+                        cchWord++;
+                    while ((ch = psz[cchWord]) != ' ' && ch != '\0');
+
+                    strWord = std::string(psz, cchWord);
+                    WORDFREQMAP::iterator it = pFrequencies->find(strWord);
+                    if (it != pFrequencies->end())
+                        it->second += cchWord - 1;
+                    else
+                        (*pFrequencies)[strWord] = 0;
+
+                    cchWord = cchSaved;
+                }
+            }
+# endif
+        }
+
+        /* Advance. */
+        psz += cchWord;
+    }
+}
+
+
+/**
+ * Compresses the vendor and product strings.
+ *
+ * This is very very simple (a lot less work that the string table for
+ * instance).
+ */
+static void DoStringCompression(void)
+{
+    /*
+     * Analyze the strings collecting stats on potential sequences to replace.
+     */
+    WORDFREQMAP Frequencies;
+
+    uint32_t    cProducts = 0;
+    for (ProductsSet::iterator it = g_products.begin(); it != g_products.end(); ++it, cProducts++)
+        AnalyzeString(&Frequencies, it->product.str);
+
+    uint32_t    cVendors = 0;
+    for (VendorsSet::iterator it = g_vendors.begin(); it != g_vendors.end(); ++it, cVendors++)
+        AnalyzeString(&Frequencies, it->vendor.str);
+
+    if (g_fVerbose)
+    {
+        size_t const cbVendorEntry = sizeof(USBIdDatabase::s_aVendors[0]) + sizeof(USBIdDatabase::s_aVendorNames[0]);
+        size_t const cbVendors = cVendors * cbVendorEntry;
+        cout << INFO_PREF << cVendors  << " vendors (" << cbVendors << " bytes)" << endl;
+
+        size_t const cbProductEntry = sizeof(USBIdDatabase::s_aProducts[0]) + sizeof(USBIdDatabase::s_aProductNames[0]);
+        size_t const cbProducts = cProducts * cbProductEntry;
+        cout << INFO_PREF << cProducts << " products (" << cbProducts << " bytes)" << endl;
+    }
+
+    /*
+     * Sort the result and pick the top 127 ones.
+     */
+    std::vector<WordFreqSortEntry> SortMap;
+    for (WORDFREQMAP::iterator it = Frequencies.begin(); it != Frequencies.end(); ++it)
+    {
+        WORDFREQPAIR const &rPair = *it;
+        SortMap.push_back(WordFreqSortEntry(&rPair));
+    }
+
+    sort(SortMap.begin(), SortMap.end());
+
+    size_t   cb = 0;
+    unsigned i  = 0;
+    for (std::vector<WordFreqSortEntry>::iterator it = SortMap.begin();
+         it != SortMap.end() && i < RT_ELEMENTS(g_aCompDict);
+         ++it, i++)
+    {
+        g_aCompDict[i].str = it->m_pPair->first;
+        cb += it->m_pPair->second;
+    }
+
+    if (g_fVerbose)
+        cout << INFO_PREF "Estimated compression saving " << cb << " bytes" << endl;
+
+    /*
+     * Rework the strings.
+     */
+    size_t cchNew = 0;
+    size_t cchOld = 0;
+    for (ProductsSet::iterator it = g_products.begin(); it != g_products.end(); ++it)
+        FixupString(&it->product.str, &cchOld, &cchNew);
+    for (VendorsSet::iterator it = g_vendors.begin(); it != g_vendors.end(); ++it)
+        FixupString(&it->vendor.str, &cchOld, &cchNew);
+
+    for (i = 0; i < RT_ELEMENTS(g_aCompDict); i++)
+        cchNew += g_aCompDict[i].str.length() + 1;
+
+    if (g_fVerbose)
+    {
+        cout << INFO_PREF "Strings: original: " << cchOld << " bytes;  compressed: " << cchNew << " bytes;";
+        if (cchNew < cchOld)
+            cout << "  saving " << (cchOld - cchNew) << " bytes (" << ((cchOld - cchNew) * 100 / cchOld) << "%)" << endl;
+        else
+            cout << "  wasting " << (cchOld - cchNew) << " bytes!" << endl;
+        cout << INFO_PREF "Average string length is " << (cchOld / (cVendors + cProducts)) << endl;
+    }
+}
+
+
+/**
+ * Writes the compression dictionary to the output stream.
+ *
+ * @param   rStrm   The output stream.
+ */
+static void WriteCompressionDictionary(ostream &rStrm)
+{
+    rStrm << "const USBIDDBSTR USBIdDatabase::s_aCompDict[" << dec << RT_ELEMENTS(g_aCompDict) << "] = " << endl;
+    rStrm << "{" << endl;
+    for (unsigned i = 0; i < RT_ELEMENTS(g_aCompDict); i++)
+    {
+        g_aCompDict[i].printRef(rStrm);
+        rStrm << " // " << g_aCompDict[i].str << endl;
+    }
+    rStrm << "};" << endl << endl;
+}
+
+#endif /* USB_ID_DATABASE_WITH_COMPRESSION */
+
+
+/*
+ * Compile a string table.
+ */
+
+/** The size of g_papStrHash. */
+static size_t           g_cStrHash = 0;
+/** String hash table. */
+static PSTRTABSTRING   *g_papStrHash = NULL;
+/** Duplicate strings found by AddString. */
+static size_t           g_cDuplicateStrings = 0;
+/** Total length of the unique strings (no terminators). */
+static size_t           g_cchUniqueStrings = 0;
+/** Number of unique strings after AddString. */
+static size_t           g_cUniqueStrings = 0;
+/** Number of collisions. */
+static size_t           g_cCollisions = 0;
+
+/** Number of entries in g_apSortedStrings. */
+static size_t           g_cSortedStrings = 0;
+/** The sorted string table. */
+static PSTRTABSTRING   *g_papSortedStrings = NULL;
+
+/** The string table. */
+static char            *g_pachStrTab = NULL;
+/** The actual string table size. */
+static size_t           g_cchStrTab = 0;
+
+
+/**
+ * Adds a string to the hash table.
+ * @param   pStr    The string.
+ */
+static void AddString(PSTRTABSTRING pStr)
+{
+    pStr->pNextRef       = NULL;
+    pStr->pNextCollision = NULL;
+    pStr->StrRef.off     = 0;
+    pStr->StrRef.cch     = pStr->str.length();
+    size_t cchIgnored;
+    pStr->uHash          = sdbm(pStr->str.c_str(), &cchIgnored);
+    Assert(cchIgnored == pStr->str.length());
+
+    size_t idxHash = pStr->uHash % g_cStrHash;
+    PSTRTABSTRING pCur = g_papStrHash[idxHash];
+    if (!pCur)
+        g_papStrHash[idxHash] = pStr;
+    else
+    {
+        /* Look for matching string. */
+        do
+        {
+            if (   pCur->uHash      == pStr->uHash
+                && pCur->StrRef.cch == pStr->StrRef.cch
+                && pCur->str        == pStr->str)
+            {
+                pStr->pNextRef = pCur->pNextRef;
+                pCur->pNextRef = pStr;
+                g_cDuplicateStrings++;
+                return;
+            }
+            pCur = pCur->pNextCollision;
+        } while (pCur != NULL);
+
+        /* No matching string, insert. */
+        g_cCollisions++;
+        pStr->pNextCollision = g_papStrHash[idxHash];
+        g_papStrHash[idxHash] = pStr;
+    }
+
+    g_cUniqueStrings++;
+    g_cchUniqueStrings += pStr->StrRef.cch;
+}
+
+
+/**
+ * Inserts a string into g_apUniqueStrings.
+ * @param   pStr    The string.
+ */
+static void InsertUniqueString(PSTRTABSTRING pStr)
+{
+    size_t iIdx;
+    size_t iEnd = g_cSortedStrings;
+    if (iEnd)
+    {
+        size_t iStart = 0;
+        for (;;)
+        {
+            iIdx = iStart + (iEnd - iStart) / 2;
+            if (g_papSortedStrings[iIdx]->StrRef.cch < pStr->StrRef.cch)
+            {
+                if (iIdx <= iStart)
+                    break;
+                iEnd = iIdx;
+            }
+            else if (g_papSortedStrings[iIdx]->StrRef.cch > pStr->StrRef.cch)
+            {
+                if (++iIdx >= iEnd)
+                    break;
+                iStart = iIdx;
+            }
+            else
+                break;
+        }
+
+        if (iIdx != g_cSortedStrings)
+            memmove(&g_papSortedStrings[iIdx + 1], &g_papSortedStrings[iIdx],
+                    (g_cSortedStrings - iIdx) * sizeof(g_papSortedStrings[iIdx]));
+    }
+    else
+        iIdx = 0;
+
+    g_papSortedStrings[iIdx] = pStr;
+    g_cSortedStrings++;
+}
+
+
+/**
+ * Creates a string table.
+ *
+ * This will save space by dropping string terminators, eliminating duplicates
+ * and try find strings that are sub-strings of others.
+ *
+ * Will initialize the StrRef of all StrTabString instances.
+ */
+static void CreateStringTable(void)
+{
+    /*
+     * Allocate a hash table double the size of all strings (to avoid too
+     * many collisions).  Add all strings to it, finding duplicates in the
+     * process.
+     */
+    size_t cMaxStrings = g_products.size() + g_vendors.size();
+#ifdef USB_ID_DATABASE_WITH_COMPRESSION
+    cMaxStrings += RT_ELEMENTS(g_aCompDict);
+#endif
+    cMaxStrings *= 2;
+    g_papStrHash = new PSTRTABSTRING[cMaxStrings];
+    g_cStrHash   = cMaxStrings;
+    memset(g_papStrHash, 0, cMaxStrings * sizeof(g_papStrHash[0]));
+
+    for (ProductsSet::iterator it = g_products.begin(); it != g_products.end(); ++it)
+        AddString(&it->product);
+    for (VendorsSet::iterator it = g_vendors.begin(); it != g_vendors.end(); ++it)
+        AddString(&it->vendor);
+#ifdef USB_ID_DATABASE_WITH_COMPRESSION
+    for (unsigned i = 0; i < RT_ELEMENTS(g_aCompDict); i++)
+        AddString(&g_aCompDict[i]);
+#endif
+    if (g_fVerbose)
+        cout << INFO_PREF "" << g_cUniqueStrings << " unique string (" << g_cchUniqueStrings << " bytes), "
+             << g_cDuplicateStrings << " duplicates, " << g_cCollisions << " collisions" << endl;
+
+    /*
+     * Create g_papSortedStrings from the hash table.  The table is sorted by
+     * string length, with the longer strings first.
+     */
+    g_papSortedStrings = new PSTRTABSTRING[g_cUniqueStrings];
+    g_cSortedStrings   = 0;
+    size_t idxHash = g_cStrHash;
+    while (idxHash-- > 0)
+    {
+        PSTRTABSTRING pCur = g_papStrHash[idxHash];
+        if (pCur)
+        {
+            do
+            {
+                InsertUniqueString(pCur);
+                pCur = pCur->pNextCollision;
+            } while (pCur);
+        }
+    }
+
+    /*
+     * Create the actual string table.
+     */
+    g_pachStrTab = new char [g_cchUniqueStrings + 1];
+    g_cchStrTab  = 0;
+    for (size_t i = 0; i < g_cSortedStrings; i++)
+    {
+        PSTRTABSTRING       pCur      = g_papSortedStrings[i];
+        const char * const  pszCur    = pCur->str.c_str();
+        size_t       const  cchCur    = pCur->StrRef.cch;
+        size_t              offStrTab = g_cchStrTab;
+
+        /*
+         * See if the string is a substring already found in the string table.
+         * Excluding the zero terminator increases the chances for this.
+         */
+        size_t      cchLeft   = g_cchStrTab >= cchCur ? g_cchStrTab - cchCur : 0;
+        const char *pchLeft   = g_pachStrTab;
+        char const  chFirst   = *pszCur;
+        while (cchLeft > 0)
+        {
+            const char *pchCandidate = (const char *)memchr(pchLeft, chFirst, cchLeft);
+            if (!pchCandidate)
+                break;
+            if (memcmp(pchCandidate, pszCur,  cchCur) == 0)
+            {
+                offStrTab = pchCandidate - g_pachStrTab;
+                break;
+            }
+
+            cchLeft -= pchCandidate + 1 - pchLeft;
+            pchLeft  = pchCandidate + 1;
+        }
+
+        if (offStrTab == g_cchStrTab)
+        {
+            /*
+             * See if the start of the string overlaps the end of the string table.
+             */
+            if (g_cchStrTab && cchCur > 1)
+            {
+                cchLeft = RT_MIN(g_cchStrTab, cchCur - 1);
+                pchLeft = &g_pachStrTab[g_cchStrTab - cchLeft];
+                while (cchLeft > 0)
+                {
+                    const char *pchCandidate = (const char *)memchr(pchLeft, chFirst, cchLeft);
+                    if (!pchCandidate)
+                        break;
+                    cchLeft -= pchCandidate - pchLeft;
+                    pchLeft  = pchCandidate;
+                    if (memcmp(pchLeft, pszCur, cchLeft) == 0)
+                    {
+                        size_t cchToCopy = cchCur - cchLeft;
+                        memcpy(&g_pachStrTab[offStrTab], &pszCur[cchLeft], cchToCopy);
+                        g_cchStrTab += cchToCopy;
+                        offStrTab = pchCandidate - g_pachStrTab;
+                        break;
+                    }
+                    cchLeft--;
+                    pchLeft++;
+                }
+            }
+
+            /*
+             * If we didn't have any luck above, just append the string.
+             */
+            if (offStrTab == g_cchStrTab)
+            {
+                memcpy(&g_pachStrTab[offStrTab], pszCur, cchCur);
+                g_cchStrTab += cchCur;
+            }
+        }
+
+        /*
+         * Set the string table offset for all the references to this string.
+         */
+        do
+        {
+            pCur->StrRef.off = (uint32_t)offStrTab;
+            pCur = pCur->pNextRef;
+        } while (pCur != NULL);
+    }
+
+    if (g_fVerbose)
+        cout << INFO_PREF "String table: " << g_cchStrTab << " bytes" << endl;
+}
+
+
+#ifdef VBOX_STRICT
+/**
+ * Sanity checks a string table string.
+ * @param   pStr    The string to check.
+ */
+static void CheckStrTabString(PSTRTABSTRING pStr)
+{
+    Assert(pStr->StrRef.cch == pStr->str.length());
+    Assert(pStr->StrRef.off < g_cchStrTab);
+    Assert(pStr->StrRef.off + pStr->StrRef.cch <= g_cchStrTab);
+    Assert(memcmp(pStr->str.c_str(), &g_pachStrTab[pStr->StrRef.off], pStr->str.length()) == 0);
+}
+#endif
+
+
+/**
+ * Writes the string table code to the output stream.
+ *
+ * @param   rStrm   The output stream.
+ */
+static void WriteStringTable(ostream &rStrm)
+{
+#ifdef VBOX_STRICT
+    /*
+     * Do some quick sanity checks while we're here.
+     */
+    for (ProductsSet::iterator it = g_products.begin(); it != g_products.end(); ++it)
+        CheckStrTabString(&it->product);
+    for (VendorsSet::iterator it = g_vendors.begin(); it != g_vendors.end(); ++it)
+        CheckStrTabString(&it->vendor);
+# ifdef USB_ID_DATABASE_WITH_COMPRESSION
+    for (unsigned i = 0; i < RT_ELEMENTS(g_aCompDict); i++)
+        CheckStrTabString(&g_aCompDict[i]);
+# endif
+#endif
+
+    /*
+     * Create a table for speeding up the character categorization.
+     */
+    uint8_t abCharCat[256];
+    RT_ZERO(abCharCat);
+    abCharCat[(unsigned char)'\\'] = 1;
+    abCharCat[(unsigned char)'\''] = 1;
+    for (unsigned i = 0; i < 0x20; i++)
+        abCharCat[i] = 2;
+    for (unsigned i = 0x7f; i < 0x100; i++)
+        abCharCat[i] = 2;
+
+    /*
+     * We follow the sorted string table, one string per line.
+     */
+    rStrm << endl;
+    rStrm << "const size_t USBIdDatabase::s_cchStrTab   = " <<  g_cchStrTab << ";" << endl;
+    rStrm << "const char   USBIdDatabase::s_achStrTab[] =" << endl;
+    rStrm << "{" << endl;
+
+    uint32_t off = 0;
+    for (uint32_t i = 0; i < g_cSortedStrings; i++)
+    {
+        PSTRTABSTRING pCur = g_papSortedStrings[i];
+        uint32_t      offEnd = pCur->StrRef.off + pCur->StrRef.cch;
+        if (offEnd > off)
+        {
+            /* Comment with a more readable version of the string. */
+            if (off == pCur->StrRef.off)
+                rStrm << " /* 0x";
+            else
+                rStrm << " /* 0X";
+            rStrm << hex << setfill('0') << setw(5) << off << " = \"";
+            for (uint32_t offTmp = off; offTmp < offEnd; offTmp++)
+            {
+                unsigned char uch = g_pachStrTab[offTmp];
+                if (abCharCat[uch] == 0)
+                    rStrm << (char)uch;
+                else if (abCharCat[uch] != 1)
+                    rStrm << "\\x" << setw(2) << hex << (size_t)uch;
+                else
+                    rStrm << "\\" << (char)uch;
+            }
+            rStrm << "\" */" << endl;
+
+            /* Must use char by char here or we may trigger the max string
+               length limit in the compiler, */
+            rStrm << "    ";
+            for (; off < offEnd; off++)
+            {
+                unsigned char uch = g_pachStrTab[off];
+                rStrm << "'";
+                if (abCharCat[uch] == 0)
+                    rStrm << (char)uch;
+                else if (abCharCat[uch] != 1)
+                    rStrm << "\\x" << setw(2) << hex << (size_t)uch;
+                else
+                    rStrm << "\\" << (char)uch;
+                rStrm << "',";
+            }
+            rStrm << endl;
+        }
+    }
+
+    rStrm << "};" << endl;
+    rStrm << "AssertCompile(sizeof(USBIdDatabase::s_achStrTab) == 0x" << hex << g_cchStrTab << ");" << endl << endl;
+}
+
+
+/*
+ * Input file parsing.
+ */
+
+/** The size of all the raw strings, including terminators. */
+static size_t g_cbRawStrings = 0;
+
 int ParseAlias(const string& src, size_t& id, string& desc)
 {
     unsigned int i = 0;
-    int idx = 0;
-    string sin;
-
     if (sscanf(src.c_str(), "%x", &i) != 1)
         return ERROR_IN_PARSE_LINE;
 
-    size_t index = src.find_first_of(" \t", 1);
-    index = src.find_first_not_of(" \t", index);
-
-    if (index == string::npos)
-        return ERROR_IN_PARSE_LINE;
+    /* skip the number and following whitespace. */
+    size_t offNext = src.find_first_of(" \t", 1);
+    offNext = src.find_first_not_of(" \t", offNext);
+    if (offNext != string::npos)
+    {
+        size_t cchLength = src.length() - offNext;
+        if (cchLength <= USB_ID_DATABASE_MAX_STRING)
+        {
+            id = i;
+            desc = src.substr(offNext);
 
-    sin = src.substr(index);
-    id = i;
-    desc = sin;
+            /* Check the string encoding. */
+            int rc = RTStrValidateEncoding(desc.c_str());
+            if (RT_SUCCESS(rc))
+            {
+                g_cbRawStrings += desc.length() + 1;
+                return RTEXITCODE_SUCCESS;
+            }
 
-    return 0;
+            cerr << "Error: Invalid encoding: '" << desc << "' (rc=" << rc << ")" << endl;
+        }
+        cerr << "Error: String to long (" << cchLength << ")" << endl;
+    }
+    else
+        cerr << "Error: Error parsing \"" << src << "\"" << endl;
+    return ERROR_IN_PARSE_LINE;
 }
 
 bool IsCommentOrEmptyLine(const string& str)
@@ -186,7 +924,7 @@ bool getline(PRTSTREAM instream, string& resString)
     }
     else if (rc != VERR_EOF)
     {
-        cerr << "Warning: Invalid line in file. Error: " << hex << rc << endl;
+        cerr << "Warning: Invalid line in file. Error: " << rc << endl;
     }
     return false;
 }
@@ -196,62 +934,60 @@ int ParseUsbIds(PRTSTREAM instream)
     State::Value state = State::lookForStartBlock;
     string line;
     int res = 0;
-    VendorRecord vendor = { 0, "" };
+    VendorRecord vendor = { 0, 0, 0, "" };
 
     while (state != State::finished && getline(instream, line))
     {
         switch (state)
         {
-        case State::lookForStartBlock:
-        {
-            if (line.find(start_block) != string::npos)
-                state = State::lookForEndBlock;
-            break;
-        }
-        case State::lookForEndBlock:
-        {
-            if (line.find(end_block) != string::npos)
-                state = State::finished;
-            else
+            case State::lookForStartBlock:
+            {
+                if (line.find(start_block) != string::npos)
+                    state = State::lookForEndBlock;
+                break;
+            }
+            case State::lookForEndBlock:
             {
-                if (!IsCommentOrEmptyLine(line))
+                if (line.find(end_block) != string::npos)
+                    state = State::finished;
+                else
                 {
-                    if (line[0] == '\t')
+                    if (!IsCommentOrEmptyLine(line))
                     {
-                        // Parse Product line
-                        // first line should be vendor
-                        if (vendor.vendorID == 0)
+                        if (line[0] == '\t')
                         {
-                            cerr << "Wrong file format. Product before vendor: "
-                                << line.c_str() << "'" << endl;
-                            return ERROR_WRONG_FILE_FORMAT;
+                            // Parse Product line
+                            // first line should be vendor
+                            if (vendor.vendorID == 0)
+                            {
+                                cerr << "Wrong file format. Product before vendor: " << line.c_str() << "'" << endl;
+                                return ERROR_WRONG_FILE_FORMAT;
+                            }
+                            ProductRecord product = { 0, vendor.vendorID, 0, "" };
+                            if (ParseAlias(line.substr(1), product.productID, product.product.str) != 0)
+                            {
+                                cerr << "Error in parsing product line: '" << line.c_str() << "'" << endl;
+                                return ERROR_IN_PARSE_LINE;
+                            }
+                            product.key = RT_MAKE_U32(product.productID, product.vendorID);
+                            Assert(product.vendorID == vendor.vendorID);
+                            g_products.push_back(product);
                         }
-                        ProductRecord product = { 0, vendor.vendorID, 0, "" };
-                        if (ParseAlias(line.substr(1), product.productID, product.product) != 0)
-                        {
-                            cerr << "Error in parsing product line: '"
-                                << line.c_str() << "'" << endl;
-                            return ERROR_IN_PARSE_LINE;
-                        }
-                        product.key = USBKEY(product.vendorID, product.productID);
-                        Assert(product.vendorID != 0);
-                        g_products.push_back(product);
-                    }
-                    else
-                    {
-                        // Parse vendor line
-                        if (ParseAlias(line, vendor.vendorID, vendor.vendor) != 0)
+                        else
                         {
-                            cerr << "Error in parsing vendor line: '"
-                                << line.c_str() << "'" << endl;
-                            return ERROR_IN_PARSE_LINE;
+                            // Parse vendor line
+                            if (ParseAlias(line, vendor.vendorID, vendor.vendor.str) != 0)
+                            {
+                                cerr << "Error in parsing vendor line: '"
+                                    << line.c_str() << "'" << endl;
+                                return ERROR_IN_PARSE_LINE;
+                            }
+                            g_vendors.push_back(vendor);
                         }
-                        g_vendors.push_back(vendor);
                     }
                 }
+                break;
             }
-            break;
-        }
         }
     }
     if (state == State::lookForStartBlock)
@@ -262,22 +998,38 @@ int ParseUsbIds(PRTSTREAM instream)
     return 0;
 }
 
-int main(int argc, char* argv[])
+
+static int usage(ostream &rOut, const char *argv0)
 {
+    rOut << "Usage: " << argv0
+         << " [linux.org usb list file] [custom usb list file] [-o output file]" << endl;
+    return RTEXITCODE_SYNTAX;
+}
+
+int main(int argc, char *argv[])
+{
+    /*
+     * Initialize IPRT and convert argv to UTF-8.
+     */
+    int rc = RTR3InitExe(argc, &argv, 0);
+    if (RT_FAILURE(rc))
+        return RTMsgInitFailure(rc);
+
+    /*
+     * Parse arguments and read input files.
+     */
     if (argc < 4)
     {
-        cerr << "Format: " << argv[0] <<
-            " [linux.org usb list file] [custom usb list file] [-o output file]" << endl;
-        cerr << "Error: Invalid arguments." << endl;
-        return ERROR_INVALID_ARGUMENTS;
+        usage(cerr, argv[0]);
+        cerr << "Error: Not enough arguments." << endl;
+        return RTEXITCODE_SYNTAX;
     }
     ofstream fout;
     PRTSTREAM fin;
     g_products.reserve(20000);
     g_vendors.reserve(3500);
 
-    char* outName = NULL;
-    int rc = 0;
+    const char *outName = NULL;
     for (int i = 1; i < argc; i++)
     {
         if (strcmp(argv[i], "-o") == 0)
@@ -285,71 +1037,150 @@ int main(int argc, char* argv[])
             outName = argv[++i];
             continue;
         }
+        if (   strcmp(argv[i], "-h") == 0
+            || strcmp(argv[i], "-?") == 0
+            || strcmp(argv[i], "--help") == 0)
+        {
+            usage(cout, argv[0]);
+            return RTEXITCODE_SUCCESS;
+        }
 
-        if (RT_FAILURE(rc = RTStrmOpen(argv[i], "r", &fin)))
+        rc = RTStrmOpen(argv[i], "r", &fin);
+        if (RT_FAILURE(rc))
         {
-            cerr << "Format: " << argv[0] <<
-                " [linux.org usb list file] [custom usb list file] [-o output file]" << endl;
-            cerr << "Error: Can not open file '" << argv[i] << "'. Error: " << hex << rc << endl;
+            cerr << "Error: Failed to open file '" << argv[i] << "' for reading. rc=" << rc << endl;
             return ERROR_OPEN_FILE;
         }
 
-        int res = ParseUsbIds(fin);
-        if (res != 0)
+        rc = ParseUsbIds(fin);
+        if (rc != 0)
         {
-            cerr << "Error in parsing USB devices file '" <<
-                argv[i] << "'" << endl;
+            cerr << "Error: Failed parsing USB devices file '" << argv[i] << "'" << endl;
             RTStrmClose(fin);
-            return res;
+            return rc;
         }
         RTStrmClose(fin);
     }
 
+    /*
+     * Due to USBIDDBVENDOR::iProduct, there is currently a max of 64KB products.
+     * (Not a problem as we've only have less that 54K products currently.)
+     */
+    if (g_products.size() > _64K)
+    {
+        cerr << "Error: More than 64K products is not supported (input: " << g_products.size() << ")" << endl;
+        return ERROR_TOO_MANY_PRODUCTS;
+    }
+
+    /*
+     * Sort the IDs and fill in the iProduct and cProduct members.
+     */
     sort(g_products.begin(), g_products.end());
     sort(g_vendors.begin(), g_vendors.end());
 
-    // validate that all records are unique
+    size_t iProduct = 0;
+    for (size_t iVendor = 0; iVendor < g_vendors.size(); iVendor++)
+    {
+        size_t const idVendor = g_vendors[iVendor].vendorID;
+        g_vendors[iVendor].iProduct = iProduct;
+        if (   iProduct < g_products.size()
+            && g_products[iProduct].vendorID <= idVendor)
+        {
+            if (g_products[iProduct].vendorID == idVendor)
+                do
+                    iProduct++;
+                while (   iProduct < g_products.size()
+                       && g_products[iProduct].vendorID == idVendor);
+            else
+            {
+                cerr << "Error: product without vendor after sorting. impossible!" << endl;
+                return ERROR_IN_PARSE_LINE;
+            }
+        }
+        g_vendors[iVendor].cProducts = iProduct - g_vendors[iVendor].iProduct;
+    }
+
+    /*
+     * Verify that all IDs are unique.
+     */
     ProductsSet::iterator ita = adjacent_find(g_products.begin(), g_products.end());
     if (ita != g_products.end())
     {
-        cerr << "Warning: Duplicate alias detected. " << *ita << endl;
-        return 0;
+        cerr << "Error: Duplicate alias detected. " << *ita << endl;
+        return ERROR_DUPLICATE_ENTRY;
     }
 
+    /*
+     * Do string compression and create the string table.
+     */
+#ifdef USB_ID_DATABASE_WITH_COMPRESSION
+    DoStringCompression();
+#endif
+    CreateStringTable();
+
+    /*
+     * Print stats.
+     */
+    size_t const cbVendorEntry  = sizeof(USBIdDatabase::s_aVendors[0]) + sizeof(USBIdDatabase::s_aVendorNames[0]);
+    size_t const cbProductEntry = sizeof(USBIdDatabase::s_aProducts[0]) + sizeof(USBIdDatabase::s_aProductNames[0]);
+
+    size_t cbOldRaw = (g_products.size() + g_vendors.size()) * sizeof(const char *) * 2 + g_cbRawStrings;
+    size_t cbRaw    = g_vendors.size() * cbVendorEntry + g_products.size() * cbProductEntry + g_cbRawStrings;
+    size_t cbActual = g_vendors.size() * cbVendorEntry + g_products.size() * cbProductEntry + g_cchStrTab;
+#ifdef USB_ID_DATABASE_WITH_COMPRESSION
+    cbActual += sizeof(USBIdDatabase::s_aCompDict);
+#endif
+    cout << INFO_PREF "Total " << dec << cbActual << " bytes";
+    if (cbActual < cbRaw)
+        cout << " saving " << dec << ((cbRaw - cbActual) * 100 / cbRaw) << "% (" << (cbRaw - cbActual) << " bytes)";
+    else
+        cout << " wasting " << dec << (cbActual - cbRaw) << " bytes";
+    cout << "; old version " << cbOldRaw << " bytes + relocs ("
+         << ((cbOldRaw - cbActual) * 100 / cbOldRaw) << "% save)." << endl;
+
+
+    /*
+     * Produce the source file.
+     */
     if (!outName)
     {
-        cerr << "Format: " << argv[0] <<
-            " [linux.org usb list file] [custom usb list file] [-o output file]" << endl;
-        cerr << "Error: Output file is not defined." << endl;
+        cerr << "Error: Output file is not specified." << endl;
         return ERROR_OPEN_FILE;
     }
 
     fout.open(outName);
     if (!fout.is_open())
     {
-        cerr << "Format: " << argv[0] <<
-            " [linux.org usb list file] [custom usb list file] [-o output file]" << endl;
-        cerr << "Error: Can not open file to write '" << argv[1] << "'." << endl;
+        cerr << "Error: Can not open file to write '" << outName << "'." << endl;
         return ERROR_OPEN_FILE;
     }
 
     fout << header;
+
+    WriteStringTable(fout);
+#ifdef USB_ID_DATABASE_WITH_COMPRESSION
+    WriteCompressionDictionary(fout);
+#endif
+
+    fout << product_header;
     for (ProductsSet::iterator itp = g_products.begin(); itp != g_products.end(); ++itp)
-    {
         fout << *itp;
-    }
-    fout << footer;
+    fout << product_part2;
+    for (ProductsSet::iterator itp = g_products.begin(); itp != g_products.end(); ++itp)
+        itp->product.printRefLine(fout);
+    fout << product_footer;
 
     fout << vendor_header;
     for (VendorsSet::iterator itv = g_vendors.begin(); itv != g_vendors.end(); ++itv)
-    {
         fout << *itv;
-    }
+    fout << vendor_part2;
+    for (VendorsSet::iterator itv = g_vendors.begin(); itv != g_vendors.end(); ++itv)
+        itv->vendor.printRefLine(fout);
     fout << vendor_footer;
 
     fout.close();
 
 
-    return 0;
+    return RTEXITCODE_SUCCESS;
 }
 
diff --git a/src/VBox/Main/src-server/USBIdDatabaseStub.cpp b/src/VBox/Main/src-server/USBIdDatabaseStub.cpp
index 5010bb5..bef8f83 100644
--- a/src/VBox/Main/src-server/USBIdDatabaseStub.cpp
+++ b/src/VBox/Main/src-server/USBIdDatabaseStub.cpp
@@ -1,26 +1,33 @@
+/* $Id: USBIdDatabaseStub.cpp $ */
+/** @file
+ * USB device vendor and product ID database - stub.
+ */
+
 /*
-* Copyright(C) 2005 - 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.
-*
-*/
+ * Copyright (C) 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.
+ */
 
 #include "USBIdDatabase.h"
 
-/** USB devices aliases array.
-*   Format: VendorId, ProductId, Vendor Name, Product Name
-*   The source of the list is http://www.linux-usb.org/usb.ids
-*/
-Product AliasDictionary::productArray[] = {0};
+const char           USBIdDatabase::s_achStrTab[]     = "";
+const size_t         USBIdDatabase::s_cchStrTab       = 0;
+#ifdef USB_ID_DATABASE_WITH_COMPRESSION
+const USBIDDBSTR     USBIdDatabase::s_aCompDict[127];
+#endif
 
-const size_t AliasDictionary::products_size = sizeof(AliasDictionary::productArray) / sizeof(Product);
+const size_t         USBIdDatabase::s_cVendors        = 0;
+const USBIDDBVENDOR  USBIdDatabase::s_aVendors[]      = { 0 };
+const USBIDDBSTR     USBIdDatabase::s_aVendorNames[]  = { {0,0} };
 
-Vendor AliasDictionary::vendorArray[] = {0};
+const size_t         USBIdDatabase::s_cProducts       = 0;
+const USBIDDBPROD    USBIdDatabase::s_aProducts[]     = { 0 };
+const USBIDDBSTR     USBIdDatabase::s_aProductNames[] = { {0,0} };
 
-const size_t AliasDictionary::vendors_size = sizeof(AliasDictionary::vendorArray) / sizeof(Vendor);
diff --git a/src/VBox/Main/src-server/USBProxyService.cpp b/src/VBox/Main/src-server/USBProxyService.cpp
index 95cccd2..f08a97b 100644
--- a/src/VBox/Main/src-server/USBProxyService.cpp
+++ b/src/VBox/Main/src-server/USBProxyService.cpp
@@ -639,7 +639,7 @@ void USBProxyService::releaseDeviceCompleted(HostUSBDevice *aDevice, bool aSucce
 /**
  * Starts the service.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  */
 int USBProxyService::start(void)
 {
@@ -677,7 +677,7 @@ int USBProxyService::start(void)
 /**
  * Stops the service.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  */
 int USBProxyService::stop(void)
 {
@@ -788,7 +788,7 @@ int USBProxyService::wait(RTMSINTERVAL aMillies)
  *
  * The default implementation in USBProxyService just a dummy stub.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  */
 int USBProxyService::interruptWait(void)
 {
diff --git a/src/VBox/Main/src-server/VirtualBoxImpl.cpp b/src/VBox/Main/src-server/VirtualBoxImpl.cpp
index 8178760..3b039c6 100644
--- a/src/VBox/Main/src-server/VirtualBoxImpl.cpp
+++ b/src/VBox/Main/src-server/VirtualBoxImpl.cpp
@@ -3328,17 +3328,17 @@ HRESULT VirtualBox::i_convertMachineGroups(const std::vector<com::Utf8Str> aMach
  *
  * @note Locks the media tree for reading.
  */
-HRESULT VirtualBox::i_findHardDiskById(const Guid &id,
+HRESULT VirtualBox::i_findHardDiskById(const Guid &aId,
                                        bool aSetError,
                                        ComObjPtr<Medium> *aHardDisk /*= NULL*/)
 {
-    AssertReturn(!id.isZero(), E_INVALIDARG);
+    AssertReturn(!aId.isZero(), E_INVALIDARG);
 
     // we use the hard disks map, but it is protected by the
     // hard disk _list_ lock handle
     AutoReadLock alock(m->allHardDisks.getLockHandle() COMMA_LOCKVAL_SRC_POS);
 
-    HardDiskMap::const_iterator it = m->mapHardDisks.find(id);
+    HardDiskMap::const_iterator it = m->mapHardDisks.find(aId);
     if (it != m->mapHardDisks.end())
     {
         if (aHardDisk)
@@ -3349,7 +3349,7 @@ HRESULT VirtualBox::i_findHardDiskById(const Guid &id,
     if (aSetError)
         return setError(VBOX_E_OBJECT_NOT_FOUND,
                         tr("Could not find an open hard disk with UUID {%RTuuid}"),
-                        id.raw());
+                        aId.raw());
 
     return VBOX_E_OBJECT_NOT_FOUND;
 }
diff --git a/src/VBox/Main/src-server/custom.ids b/src/VBox/Main/src-server/custom.ids
index 4f53f13..f3ec2df 100644
--- a/src/VBox/Main/src-server/custom.ids
+++ b/src/VBox/Main/src-server/custom.ids
@@ -1,4 +1,4 @@
-# Vendors, devices
+# Vendors, devices and interfaces. Please keep sorted.
 
 # Syntax:
 # vendor  vendor_name
diff --git a/src/VBox/Main/src-server/linux/USBGetDevices.cpp b/src/VBox/Main/src-server/linux/USBGetDevices.cpp
index 8145ef8..a12dbdf 100644
--- a/src/VBox/Main/src-server/linux/USBGetDevices.cpp
+++ b/src/VBox/Main/src-server/linux/USBGetDevices.cpp
@@ -1090,7 +1090,7 @@ static int USBSysfsEnumerateHostDevices(const char *pcszDevicesRoot,
  *   usb<hub number>
  * and usbfs always returns port number zero.
  *
- * @returns VBox status. pu8Port is set on success.
+ * @returns VBox status code. pu8Port is set on success.
  * @param   pszPath     The sysfs path to parse.
  * @param   pu8Port     Where to store the port number.
  */
diff --git a/src/VBox/Main/src-server/usb.ids b/src/VBox/Main/src-server/usb.ids
index fdd6227..dbcfcff 100644
--- a/src/VBox/Main/src-server/usb.ids
+++ b/src/VBox/Main/src-server/usb.ids
@@ -9,8 +9,8 @@
 #	The latest version can be obtained from
 #		http://www.linux-usb.org/usb.ids
 #
-# Version: 2015.06.22
-# Date:    2015-06-22 20:34:08
+# Version: 2015.09.28
+# Date:    2015-09-28 20:34:09
 #
 
 # Vendors, devices and interfaces. Please keep sorted.
@@ -26,7 +26,7 @@
 0003  Club Mac
 0004  Nebraska Furniture Mart
 0011  Unknown
-	7788  Flash mass storage drive
+	7788  counterfeit flash drive
 0053  Planex
 	5301  GW-US54ZGL 802.11bg
 0079  DragonRise Inc.
@@ -188,6 +188,7 @@
 	0212  DeskJet 1220C
 	0217  LaserJet 2200
 	0218  APOLLO P2500/2600
+	0221  StreamSmart 400 [F2235AA]
 	022a  Laserjet CP1525nw
 	0241  Link-5 micro dongle
 	0304  DeskJet 810c/812c
@@ -271,6 +272,7 @@
 	1116  Jornada 568 Pocket PC
 	1117  LaserJet 1300n
 	1151  PSC-750xi Printer/Scanner/Copier
+	1198  HID-compliant mouse
 	1202  PhotoSmart 320 series
 	1204  DeskJet 930c
 	1205  ScanJet 4500C/5550C
@@ -462,7 +464,7 @@
 	3e17  LaserJet P1006
 	3f02  PhotoSmart 7550~
 	3f11  PSC-1315/PSC-1317
-	4002  PhotoSmart 635/715/720/735/935 (storage)
+	4002  PhotoSmart 635/715/720/735/935/E337 (storage)
 	4004  CP1160
 	4102  PhotoSmart 618
 	4105  ScanJet 4370
@@ -718,7 +720,7 @@
 	1060  JTAG adapter
 	1234  IronLogic RFID Adapter [Z-2 USB]
 	1235  Iron Logic Z-397 RS-485/422 converter
-	6001  FT232 USB-Serial (UART) IC
+	6001  FT232 Serial (UART) IC
 	6002  Lumel PD12
 	6007  Serial Converter
 	6008  Serial Converter
@@ -804,6 +806,7 @@
 	d739  Propox ISPcable III
 	d9a9  Actisense USG-1 NMEA Serial Gateway
 	d9aa  Actisense NGT-1 NMEA2000 PC Interface
+	d9ab  Actisense NGT-1 NMEA2000 Gateway
 	daf4  Qundis Serial Infrared Head
 	e0d0  Total Phase Aardvark I2C/SPI Host Adapter
 	e521  EVER Sinline XL Series UPS
@@ -852,6 +855,7 @@
 	fc82  SEMC DSS-20/DSS-25 SyncStation
 	fd48  ShipModul MiniPlex-4xUSB NMEA Multiplexer
 	fd49  ShipModul MiniPlex-4xUSB-AIS NMEA Multiplexer
+	fd4b  ShipModul MiniPlex NMEA Multiplexer
 	ff08  ToolHouse LoopBack Adapter
 	ff18  ScienceScope Logbook ML
 	ff19  Logbook Bus
@@ -1068,6 +1072,7 @@
 	402b  Photo Printer 6850
 	402e  605 Photo Printer
 	4034  805 Photo Printer
+	404f  305 Photo Printer
 	4056  ESP 7200 Series AiO
 	4109  EasyShare Printer Dock Series 3
 	410d  EasyShare G600 Printer Dock
@@ -1078,6 +1083,8 @@
 	6003  i50
 	6004  i60
 	6005  i80
+	6029  i900
+	602a  i900
 040b  Weltrend Semiconductor
 	0a68  Func MS-3 gaming mouse [WT6573F MCU]
 	6510  Weltrend Bar Code Reader
@@ -1417,8 +1424,11 @@
 	02e3  5230 (PC-Suite mode)
 	02e4  5230 (Imaging mode)
 	0360  C1-01 Ovi Suite Mode
+	0396  C7-00 (Modem mode)
 	03a4  C5 (Storage mode)
-	03c0  C7-00
+	03c0  C7-00 (Mass storage mode)
+	03c1  C7-00 (Media transfer mode)
+	03cd  C7-00 (Nokia Suite mode)
 	03d1  N950
 	0400  7600 Phone Parent
 	0401  6650 GSM Phone
@@ -1485,9 +1495,11 @@
 	0508  E65 (PC Suite mode)
 	0509  E65 (Storage mode)
 	0518  N9 Phone
+	054d  C2-01
 	0600  Digital Pen SU-1B
 	0610  CS-15 (Internet Stick 3G modem)
-	0661  Lumia 920
+	0661  Lumia 620/920
+	069a  130 [RM-1035] (Charging only)
 	0720  X (RM-980)
 	0800  Connectivity Cable DKU-5
 	0801  Data Cable DKU-6
@@ -1513,6 +1525,7 @@
 	2020  USB Hub
 	20cd  Sitecom Internal Multi Memory reader/writer MD-005
 	20fc  6-in-1 Card Reader
+	2134  Hub
 	2228  9-in-2 Card Reader
 	223a  8-in-1 Card Reader
 	2503  USB 2.0 Hub
@@ -1529,6 +1542,7 @@
 	4060  Ultra Fast Media Reader
 	4064  Ultra Fast Media Reader
 	5434  Hub
+	5534  Hub
 	7500  LAN7500 Ethernet 10/100/1000 Adapter
 	9512  SMC9512/9514 USB Hub
 	9514  SMC9514 Hub
@@ -1861,9 +1875,10 @@
 	0006  Easy Mouse+
 	000b  NetMouse Wheel(P+U)
 	000c  TACOMA Fingerprint V1.06.01
-	000e  VideoCAM Web
+	000e  Genius NetScroll Optical
 	0013  TACOMA Fingerprint Mouse V1.06.01
 	001a  Genius WebScroll+
+	002e  NetScroll + Traveler / NetScroll 110
 	0036  Pocket Mouse LE
 	0039  NetScroll+ Superior
 	003a  NetScroll+ Mini Traveler / Genius NetScroll 120
@@ -2254,7 +2269,9 @@
 	0779  LifeCam HD-3000
 	0780  Comfort Curve Keyboard 3000
 	0797  Optical Mouse 200
+	07a5  Wireless Receiver 1461C
 	07f8  Wired Keyboard 600 (model 1576)
+	07fd  Nano Transceiver 1.1
 	930a  ISOUSB.SYS Intel 82930 Isochronous IO Test Board
 	ffca  Catalina
 	fff8  Keyboard
@@ -2383,6 +2400,7 @@
 	082b  Webcam C170
 	082d  HD Pro Webcam C920
 	0830  QuickClip
+	0836  B525 HD Webcam
 	0837  BCC950 ConferenceCam
 	0840  QuickCam Express
 	0843  Webcam C930e
@@ -2489,7 +2507,7 @@
 	0a29  H600 [Wireless Headset]
 	0a37  USB Headset H540
 	0a38  Headset H340
-	0a44  Wired headset
+	0a44  Headset H390
 	0a4d  G430 Surround Sound Gaming Headset
 	0b02  C-UV35 [Bluetooth Mini-Receiver] (HID proxy mode)
 	8801  Video Camera
@@ -2562,6 +2580,7 @@
 	c06b  G700 Wireless Gaming Mouse
 	c06c  Optical Mouse
 	c077  M105 Optical Mouse
+	c07c  M-R0017 [G700s Rechargeable Gaming Mouse]
 	c101  UltraX Media Remote
 	c110  Harmony 785/885 Remote
 	c111  Harmony 525 Remote
@@ -2637,7 +2656,7 @@
 	c305  Internet Keyboard
 	c307  Internet Keyboard
 	c308  Internet Navigator Keyboard
-	c309  Internet Keyboard
+	c309  Y-BF37 [Internet Navigator Keyboard]
 	c30a  iTouch Composite
 	c30b  NetPlay Keyboard
 	c30c  Internet Keys (X)
@@ -2690,6 +2709,7 @@
 	c52d  R700 Remote Presenter receiver
 	c52e  MK260 Wireless Combo Receiver
 	c52f  Unifying Receiver
+	c531  C-U0007 [Unifying Receiver]
 	c532  Unifying Receiver
 	c534  Unifying Receiver
 	c603  3Dconnexion Spacemouse Plus XT
@@ -2992,6 +3012,7 @@
 	a007  External Disk USB 3.0
 	a009  Stor.E Basics
 	a00d  STOR.E BASICS 500GB
+	a202  Canvio Basics HDD
 	b001  Stor.E Partner
 	d000  External Disk 2TB Model DT01ABA200
 	d010  External Disk 3TB
@@ -3031,9 +3052,11 @@
 	5710  Joystick in FS Mode
 	5720  STM microSD Flash Device
 	5721  Hantek DDS-3X25 Arbitrary Waveform Generator
+	5730  STM32 Audio Streaming
 	5740  STM32F407
 	7270  ST Micro Serial Bridge
 	7554  56k SoftModem
+	91d1  Sensor Hub
 	df11  STM Device in DFU Mode
 	ff10  Swann ST56 Modem
 0484  Specialix
@@ -3051,6 +3074,7 @@
 	e003  Pirelli DP-L10
 	e00d  Broadcom Bluetooth 2.1 Device
 	e00f  Foxconn T77H114 BCM2070 [Single-Chip Bluetooth 2.1 + EDR Adapter]
+	e011  Acer Bluetooth module
 	e016  Ubee PXU1900 WiMAX Adapter [Beceem BCSM250]
 	e02c  Atheros AR5BBU12 Bluetooth Device
 	e032  Broadcom BCM20702 Bluetooth
@@ -3435,6 +3459,7 @@
 	1729  MX700 ser
 	172b  MP140 ser
 	1736  PIXMA MX320 series
+	173a  MP250 series printer
 	173b  PIXMA MP270 All-In-One Printer
 	173e  MP560
 	173f  Pixma MP640 Multifunction device
@@ -3450,6 +3475,7 @@
 	1909  CanoScan LiDE 110
 	190a  CanoScan LiDE 210
 	190d  CanoScan 9000F Mark II
+	190e  CanoScan LiDE 120
 	2200  CanoScan LiDE 25
 	2201  CanoScan FB320U
 	2202  CanoScan FB620U
@@ -3723,6 +3749,7 @@
 	3160  Digital IXUS 860 IS
 	3170  SELPHY CP750
 	3171  SELPHY CP740
+	3172  SELPHY CP520
 	3173  PowerShot SD890 IS DIGITAL ELPH / Digital IXUS 970 IS / IXY DIGITAL 820 IS
 	3174  PowerShot SD790 IS DIGITAL ELPH / Digital IXUS 90 IS / IXY DIGITAL 95 IS
 	3175  IXY Digital 25 IS
@@ -3846,9 +3873,14 @@
 	3289  PowerShot ELPH 340 HS / IXUS 265 HS
 	328a  PowerShot ELPH 150 IS / IXUS 155
 	328b  PowerShot N Facebook(R) Ready
+	3299  EOS M3
 	329a  PowerShot SX60 HS
 	329b  PowerShot SX520 HS
 	329c  PowerShot SX400 IS
+	329f  PowerShot SX530 HS
+	32a6  PowerShot SX710 HS
+	32aa  Powershot ELPH 160 / IXUS 160
+	32ac  PowerShot ELPH 170 IS / IXUS 170
 04aa  DaeWoo Telecom, Ltd
 04ab  Chromatic Research
 04ac  Micro Audiometrics Corp.
@@ -4320,7 +4352,9 @@
 	300b  Atheros AR3012 Bluetooth
 	300d  Atheros AR3012 Bluetooth
 	300f  Atheros AR3012 Bluetooth
+	3014  Qualcoom Atheros Bluetooth
 	7025  HP HD Webcam
+	7046  TOSHIBA Web Camera - HD
 	9304  Hub
 	f01c  TT1280DA DVB-T TV Tuner
 04cb  Fuji Photo Film Co., Ltd
@@ -4467,10 +4501,13 @@
 	8001  ICD2 in-circuit debugger
 	8101  PIC24F Starter Kit
 	8107  Microstick II
+	8108  ChipKit Pro MX7 (PIC32MX)
 	9004  Microchip REAL ICE
 	900a  PICkit3
 	c001  PicoLCD 20x4
 	e11c  TL866CS EEPROM Programmer [MiniPRO]
+	f2c4  Macareux-labs Hygrometry Temperature Sensor
+	f3aa  Macareux-labs Usbce Bootloader mode
 	f437  SBE Tech Ultrasonic Anemometer
 	f4b5  SmartScope
 	f8da  Hughski Ltd. ColorHug
@@ -4491,7 +4528,7 @@
 	0499  Optical Mouse
 	1203  Keyboard
 	1400  PS/2 keyboard + mouse controller
-	1503  Shortboard Lefty
+	1503  Keyboard
 	1603  Keyboard
 	1702  Keyboard LKS02
 	2011  Keyboard [Diatec Filco Majestouch 1]
@@ -4828,6 +4865,7 @@
 	60c4  M2 Portable Hard Drive USB 3.0
 	6124  D3 Station External Hard Drive
 	6125  D3 Station External Hard Drive
+	61b5  M3 Portable Hard Drive 2TB
 	61b6  M3 Portable Hard Drive 1TB
 	6601  Mobile Phone
 	6602  Galaxy
@@ -4878,6 +4916,7 @@
 	6875  GT-B3710 Standalone LTE device (Commercial)
 	6876  GT-B3710 LTE Modem
 	6877  Galaxy S
+	687a  GT-E2370 mobile phone
 	6888  GT-B3730 Composite LTE device (Commercial)
 	6889  GT-B3730 Composite LTE device (Commercial)
 	689a  LTE Storage Driver [CMC2xx]
@@ -4929,6 +4968,7 @@
 	0760  Acer KU-0760 Keyboard
 	0841  HP Multimedia Keyboard
 	0860  2.4G Multimedia Wireless Kit
+	1061  HP KG-1061 Wireless Keyboard+Mouse
 	1121  Periboard 717 Mini Wireless Keyboard
 	a001  E-Video DC-100 Camera
 	a120  ORITE CCD Webcam(PC370R)
@@ -4939,6 +4979,7 @@
 	a128  PC Camera (SN9C202 + OV7663 + EEPROM)
 	a133  Gateway Webcam
 	a136  LabTec Webcam 5500
+	a147  Medion Webcam
 	a204  DSC WIA Device (1300)
 	a208  DSC WIA Device (2320)
 	a209  Labtec DC-2320
@@ -4996,6 +5037,8 @@
 	b354  UVC 1.00 device HD UVC WebCam
 	b394  Integrated Camera
 	b3f6  HD WebCam (Acer)
+	b40e  HP Truevision HD camera
+	b444  Lenovo Integrated Webcam
 04f3  Elan Microelectronics Corp.
 	000a  Touchscreen
 	0103  ActiveJet K-2024 Multimedia Keyboard
@@ -5006,6 +5049,7 @@
 	0230  3D Optical Mouse
 	0232  Mouse
 	02f4  2.4G Cordless Mouse
+	0381  Touchscreen
 	04a0  Dream Cheeky Stress/Panic Button
 04f4  Harting Elektronik, Inc.
 04f5  Fujitsu-ICL Systems, Inc.
@@ -5065,16 +5109,17 @@
 	010b  MFC-860
 	010c  MFC-7400J
 	010d  MFC-9200J
-	010e  MFC3100C Scanner
-	010f  MFC 5100C
-	0110  MFC4800 Scanner
-	0111  MFC 6800
+	010e  MFC-3100C Scanner
+	010f  MFC-5100C
+	0110  MFC-4800 Scanner
+	0111  MFC-6800
 	0112  DCP1000 Port(FaxModem)
 	0113  MFC-8500
 	0114  MFC9700 Port(FaxModem)
-	0115  MFC9800 Scanner
+	0115  MFC-9800 Scanner
 	0116  DCP1400 Scanner
 	0119  MFC-9660
+	011a  MFC-9860
 	011b  MFC-9880
 	011c  MFC-9760
 	011d  MFC-9070
@@ -5083,13 +5128,20 @@
 	0120  MFC580 Port(FaxModem)
 	0121  MFC-590
 	0122  MFC-5100J
+	0124  MFC-4800J
+	0125  MFC-6800J
+	0127  MFC-9800J
+	0128  MFC-8500J
 	0129  Imagistics 2500 (MFC-8640D clone)
+	012b  MFC-9030
+	012e  FAX4100e IntelliFax 4100e
 	012f  FAX-4750e
+	0130  FAX-5750e
 	0132  MFC-5200C RemovableDisk
 	0135  MFC-100 Scanner
 	0136  MFC-150CL Scanner
 	013c  MFC-890 Port
-	013d  MFC-5200J Printer
+	013d  MFC-5200J
 	013e  MFC-4420C RemovableDisk
 	013f  MFC-4820C RemovableDisk
 	0140  DCP-8020
@@ -5099,14 +5151,17 @@
 	0144  DCP-4020C RemovableDisk
 	0146  MFC-3220C
 	0147  FAX-1820C Printer
-	0148  MFC-3320CN Printer
+	0148  MFC-3320CN
 	0149  FAX-1920CN Printer
 	014a  MFC-3420C
 	014b  MFC-3820CN
+	014c  DCP-3020C
 	014d  FAX-1815C Printer
 	014e  MFC-8820J
+	014f  DCP-8025J
 	0150  MFC-8220 Port(FaxModem)
 	0151  MFC-8210J
+	0153  DCP-1000J
 	0157  MFC-3420J Printer
 	0158  MFC-3820JN Port(FaxModem)
 	015d  MFC Composite Device
@@ -5166,31 +5221,44 @@
 	01ae  DCP-750CW RemovableDisk
 	01af  MFC-440CN
 	01b0  MFC-660CN
-	01b1  MFC-665CW Remote Setup Port
-	01b2  MFC-845CW Remote Setup Port
-	01b4  MFC-460CN Remote Setup Port
+	01b1  MFC-665CW
+	01b2  MFC-845CW
+	01b4  MFC-460CN
 	01b5  MFC-630CD
 	01b6  MFC-850CDN
-	01b7  MFC-5460CN Remote Setup Port
+	01b7  MFC-5460CN
 	01b8  MFC-5860CN
 	01ba  MFC-3360C
 	01bd  MFC-8660DN
 	01be  DCP-750CN RemovableDisk
-	01bf  MFC-860CDN Remote Setup Port
+	01bf  MFC-860CDN
 	01c0  DCP-128C
 	01c1  DCP-129C
 	01c2  DCP-131C
 	01c3  DCP-329C
 	01c4  DCP-331C
 	01c5  MFC-239C
-	01ca  MFC-9440CN Remote Setup Port
+	01c9  DCP-9040CN
+	01ca  MFC-9440CN
+	01cb  DCP-9045CDN
+	01cc  MFC-9840CDW
 	01ce  DCP-135C
 	01cf  DCP-150C
 	01d0  DCP-350C
 	01d1  DCP-560CN
+	01d2  DCP-770CW
+	01d3  DCP-770CN
 	01d4  MFC-230C
 	01d5  MFC-235C
 	01d6  MFC-260C
+	01d7  MFC-465CN
+	01d8  MFC-680CN
+	01d9  MFC-685CW
+	01da  MFC-885CW
+	01db  MFC-480CN
+	01dc  MFC-650CD
+	01dd  MFC-870CDN
+	01de  MFC-880CDN
 	01df  DCP-155C
 	01e0  MFC-265C
 	01e1  DCP-153C
@@ -5201,13 +5269,280 @@
 	01e9  DCP-7040
 	01ea  DCP-7030
 	01eb  MFC-7320
+	01ec  MFC-9640CW
 	01f4  MFC-5890CN
+	020a  MFC-8670DN
+	020c  DCP-9042CDN
+	020d  MFC-9450CDN
+	0216  MFC-8880DN
 	0217  MFC-8480DN
+	0219  MFC-8380DN
+	021a  MFC-8370DN
+	021b  DCP-8070D
+	021c  MFC-9320CW
+	021d  MFC-9120CN
+	021e  DCP-9010CN
+	0220  MFC-9010CN
+	0222  DCP-195C
 	0223  DCP-365CN
+	0224  DCP-375CW
+	0225  DCP-395CN
+	0227  DCP-595CN
+	0228  MFC-255CW
+	0229  MFC-295CN
+	022a  MFC-495CW
+	022b  MFC-495CN
+	022c  MFC-795CW
+	022d  MFC-675CD
+	022e  MFC-695CDN
+	022f  MFC-735CD
+	0230  MFC-935CDN
+	0234  DCP-373CW
+	0235  DCP-377CW
+	0236  DCP-390CN
+	0239  MFC-253CW
+	023a  MFC-257CW
+	023e  DCP-197C
+	023f  MFC-8680DN
+	0240  MFC-J950DN
 	0248  DCP-7055 scanner/printer
+	0253  DCP-J125
+	0254  DCP-J315W
+	0255  DCP-J515W
+	0256  DCP-J515N
+	0257  DCP-J715W
+	0258  DCP-J715N
+	0259  MFC-J220
+	025a  MFC-J410
+	025b  MFC-J265W
+	025c  MFC-J415W
+	025d  MFC-J615W
+	025e  MFC-J615N
+	025f  MFC-J700D
+	0260  MFC-J800D
+	0261  MFC-J850DN
+	026b  MFC-J630W
+	026d  MFC-J805D
+	026e  MFC-J855DN
+	026f  MFC-J270W
 	0273  DCP-7057 scanner/printer
-	029f  MFC-9325CW Multifunction Printer
-	02b3  MFC J4510DW
+	0276  MFC-5895CW
+	0278  MFC-J410W
+	0279  DCP-J525W
+	027a  DCP-J525N
+	027b  DCP-J725DW
+	027c  DCP-J725N
+	027d  DCP-J925DW
+	027e  MFC-J955DN
+	027f  MFC-J280W
+	0280  MFC-J435W
+	0281  MFC-J430W
+	0282  MFC-J625DW
+	0283  MFC-J825DW
+	0284  MFC-J825N
+	0285  MFC-J705D
+	0287  MFC-J860DN
+	0288  MFC-J5910DW
+	0289  MFC-J5910CDW
+	028a  DCP-J925N
+	028d  MFC-J835DW
+	028f  MFC-J425W
+	0290  MFC-J432W
+	0291  DCP-8110DN
+	0292  DCP-8150DN
+	0293  DCP-8155DN
+	0294  DCP-8250DN
+	0295  MFC-8510DN
+	0296  MFC-8520DN
+	0298  MFC-8910DW
+	0299  MFC-8950DW
+	029a  MFC-8690DW
+	029c  MFC-8515DN
+	029e  MFC-9125CN
+	029f  MFC-9325CW
+	02a0  DCP-J140W
+	02a5  MFC-7240
+	02a6  FAX-2940
+	02a7  FAX-2950
+	02a8  MFC-7290
+	02ab  FAX-2990
+	02ac  DCP-8110D
+	02ad  MFC-9130CW
+	02ae  MFC-9140CDN
+	02af  MFC-9330CDW
+	02b0  MFC-9340CDW
+	02b1  DCP-9020CDN
+	02b2  MFC-J810DN
+	02b3  MFC-J4510DW
+	02b4  MFC-J4710DW
+	02b5  DCP-8112DN
+	02b6  DCP-8152DN
+	02b7  DCP-8157DN
+	02b8  MFC-8512DN
+	02ba  MFC-8912DW
+	02bb  MFC-8952DW
+	02bc  DCP-J540N
+	02bd  DCP-J740N
+	02be  MFC-J710D
+	02bf  MFC-J840N
+	02c0  DCP-J940N
+	02c1  MFC-J960DN
+	02c2  DCP-J4110DW
+	02c3  MFC-J4310DW
+	02c4  MFC-J4410DW
+	02c5  MFC-J4610DW
+	02c6  DCP-J4210N
+	02c7  MFC-J4510N
+	02c8  MFC-J4910CDW
+	02c9  MFC-J4810DN
+	02ca  MFC-8712DW
+	02cb  MFC-8710DW
+	02cc  MFC-J2310
+	02cd  MFC-J2510
+	02ce  DCP-7055W
+	02cf  DCP-7057W
+	02d0  DCP-1510
+	02d1  MFC-1810
+	02d3  DCP-9020CDW
+	02d4  MFC-8810DW
+	02dd  DCP-J4215N
+	02de  DCP-J132W
+	02df  DCP-J152W
+	02e0  DCP-J152N
+	02e1  DCP-J172W
+	02e2  DCP-J552DW
+	02e3  DCP-J552N
+	02e4  DCP-J752DW
+	02e5  DCP-J752N
+	02e6  DCP-J952N
+	02e7  MFC-J245
+	02e8  MFC-J470DW
+	02e9  MFC-J475DW
+	02ea  MFC-J285DW
+	02eb  MFC-J650DW
+	02ec  MFC-J870DW
+	02ed  MFC-J870N
+	02ee  MFC-J720D
+	02ef  MFC-J820DN
+	02f0  MFC-J980DN
+	02f1  MFC-J890DN
+	02f2  MFC-J6520DW
+	02f3  MFC-J6570CDW
+	02f4  MFC-J6720DW
+	02f5  MFC-J6920DW
+	02f6  MFC-J6970CDW
+	02f7  MFC-J6975CDW
+	02f8  MFC-J6770CDW
+	02f9  DCP-J132N
+	02fa  MFC-J450DW
+	02fb  MFC-J875DW
+	02fc  DCP-J100
+	02fd  DCP-J105
+	02fe  MFC-J200
+	02ff  MFC-J3520
+	0300  MFC-J3720
+	030f  DCP-L8400CDN
+	0310  DCP-L8450CDW
+	0311  MFC-L8600CDW
+	0312  MFC-L8650CDW
+	0313  MFC-L8850CDW
+	0314  MFC-L9550CDW
+	0318  MFC-7365DN
+	0320  MFC-L2740DW
+	0321  DCP-L2500D
+	0322  DCP-L2520DW
+	0324  DCP-L2520D
+	0326  DCP-L2540DN
+	0328  DCP-L2540DW
+	0329  DCP-L2560DW
+	0330  HL-L2380DW
+	0331  MFC-L2700DW
+	0335  FAX-L2700DN
+	0337  MFC-L2720DW
+	0338  MFC-L2720DN
+	0339  DCP-J4120DW
+	033a  MFC-J4320DW
+	033c  MFC-J2320
+	033d  MFC-J4420DW
+	0340  MFC-J4620DW
+	0341  MFC-J2720
+	0342  MFC-J4625DW
+	0343  MFC-J5320DW
+	0346  MFC-J5620DW
+	0347  MFC-J5720DW
+	0349  DCP-J4220N
+	034b  MFC-J4720N
+	034e  MFC-J5720CDW
+	034f  MFC-J5820DN
+	0350  MFC-J5620CDW
+	0351  DCP-J137N
+	0353  DCP-J557N
+	0354  DCP-J757N
+	0355  DCP-J957N
+	0356  MFC-J877N
+	0357  MFC-J727D
+	0358  MFC-J987DN
+	0359  MFC-J827DN
+	035a  MFC-J897DN
+	035b  DCP-1610W
+	035c  DCP-1610NW
+	035d  MFC-1910W
+	035e  MFC-1910NW
+	0361  MFC-1919NW
+	0364  MFC-J5625DW
+	0365  MFC-J4520DW
+	0366  MFC-J5520DW
+	0367  DCP-7080D
+	0368  DCP-7080
+	0369  DCP-7180DN
+	036a  DCP-7189DW
+	036b  MFC-7380
+	036c  MFC-7480D
+	036d  MFC-7880DN
+	036e  MFC-7889DW
+	036f  DCP-9022CDW
+	0370  MFC-9142CDN
+	0371  MFC-9332CDW
+	0372  MFC-9342CDW
+	0373  MFC-L2700D
+	0376  DCP-1600
+	0377  MFC-1900
+	0378  DCP-1608
+	0379  DCP-1619
+	037a  MFC-1906
+	037b  MFC-1908
+	037c  ADS-2000e
+	037d  ADS-2100e
+	037e  ADS-2500We
+	037f  ADS-2600We
+	0380  DCP-J562DW
+	0381  DCP-J562N
+	0383  DCP-J962N
+	0384  MFC-J480DW
+	0385  MFC-J485DW
+	0386  MFC-J460DW
+	0388  MFC-J680DW
+	0389  MFC-J880DW
+	038a  MFC-J885DW
+	038b  MFC-J880N
+	038c  MFC-J730DN
+	038d  MFC-J990DN
+	038e  MFC-J830DN
+	038f  MFC-J900DN
+	0390  MFC-J5920DW
+	0392  MFC-L2705DW
+	0393  DCP-T300
+	0394  DCP-T500W
+	0395  DCP-T700W
+	0396  MFC-T800W
+	0397  DCP-J963N
+	03b3  MFC-J6925DW
+	03b4  MFC-J6573CDW
+	03b5  MFC-J6973CDW
+	03b6  MFC-J6990CDW
+	03bb  MFC-L2680W
+	03bc  MFC-L2700DN
+	03bd  DCP-J762N
 	1000  Printer
 	1002  Printer
 	2002  PTUSB Printing
@@ -5219,6 +5554,14 @@
 	2027  QL-560 P-Touch Label Printer
 	202b  PT-7600 P-Touch Label Printer
 	2100  Card Reader Writer
+	60a0  ADS-2000
+	60a1  ADS-2100
+	60a4  ADS-2500W
+	60a5  ADS-2600W
+	60a6  ADS-1000W
+	60a7  ADS-1100W
+	60a8  ADS-1500W
+	60a9  ADS-1600W
 04fa  Dallas Semiconductor
 	2490  DS1490F 2-in-1 Fob, 1-Wire adapter
 	4201  DS4201 Audio DAC
@@ -5939,8 +6282,8 @@
 	0000  PenPartner
 	0001  PenPartner 4x5
 	0002  PenPartner 6x8
-	0003  Cintiq Partner
-	0010  Graphire
+	0003  PTU-600 [Cintiq Partner]
+	0010  ET-0405 [Graphire]
 	0011  Graphire 2 4x5
 	0012  Graphire 2 5x7
 	0013  Graphire 3 4x5
@@ -12677,9 +13020,9 @@
 0db3  Tekram Technology Co., Ltd
 0db4  Chung Fu Chen Yeh Enterprise Corp.
 0db5  Access IS
-	0139  LSR116 CDC
-	013a  LSR116 Keyboard
-	013b  LSR116 HID
+	0139  Barcode Module - CDC serial
+	013a  Barcode Module - Virtual Keyboard
+	013b  Barcode Module - HID
 	0160  NFC and Smartcard Module (NSM)
 0db7  ELCON Systemtechnik
 	0002  Goldpfeil P-LAN
@@ -16902,6 +17245,9 @@
 20f4  TRENDnet
 	648b  TEW-648UBM 802.11n 150Mbps Micro Wireless N Adapter [Realtek RTL8188CUS]
 20f7  XIMEA
+	3001  Camera with CMOS sensor [MQ]
+	3021  Camera with CCD sensor [MD]
+	30b3  Camera with CMOS sensor in Vision mode [MQ]
 	a003  Subminiature 5Mpix B/W Camera, MU9PM-MH
 2100  RT Systems
 	9e52  Yaesu VX-7
@@ -16955,6 +17301,15 @@
 	6323  USB Electronic Scale
 2237  Kobo Inc.
 	4161  eReader White
+225d  Morpho
+	0001  FINGER VP Multimodal Biometric Sensor
+	0008  CBM-E3 Fingerprint Sensor
+	0009  CBM Fingerprint Sensor [CBM-V3]
+	000a  MSO1300-E3 Fingerprint Sensor
+	000b  MSO1300 Fingerprint Sensor [MSO1300-V3]
+	000c  MSO1350-E3 Fingerprint Sensor & SmartCard Reader
+	000d  MSO1350 Fingerprint Sensor & SmartCard Reader [MSO1350-V3]
+	000e  MorphoAccess SIGMA Biometric Access Control Terminal
 228d  8D Technologies inc.
 	0001  Terminal Bike Key Reader
 22a6  Pie Digital, Inc.
diff --git a/src/VBox/Main/src-server/xpcom/server.cpp b/src/VBox/Main/src-server/xpcom/server.cpp
index 4fa2a9e..2c3423b 100644
--- a/src/VBox/Main/src-server/xpcom/server.cpp
+++ b/src/VBox/Main/src-server/xpcom/server.cpp
@@ -20,7 +20,6 @@
 
 #include <nsIComponentRegistrar.h>
 
-#include <nsEventQueueUtils.h>
 #include <nsGenericFactory.h>
 
 #include "prio.h"
@@ -58,6 +57,8 @@
 #include <nsIGenericFactory.h>
 #include <VirtualBox_XPCOM.h>
 
+#include "VBox/com/NativeEventQueue.h"
+
 #include "ApplianceImpl.h"
 #include "AudioAdapterImpl.h"
 #include "BandwidthControlImpl.h"
@@ -106,74 +107,13 @@ static bool gAutoShutdown = false;
  * VirtualBox instance is released, in ms */
 static uint32_t gShutdownDelayMs = 5000;
 
-static nsCOMPtr<nsIEventQueue> gEventQ  = nsnull;
+static com::NativeEventQueue *gEventQ   = NULL;
 static PRBool volatile gKeepRunning     = PR_TRUE;
 static PRBool volatile gAllowSigUsrQuit = PR_TRUE;
 
 /////////////////////////////////////////////////////////////////////////////
 
 /**
- * Simple but smart PLEvent wrapper.
- *
- * @note Instances must be always created with <tt>operator new</tt>!
- */
-class MyEvent
-{
-public:
-
-    MyEvent()
-    {
-        mEv.that = NULL;
-    };
-
-    /**
-     * Posts this event to the given message queue. This method may only be
-     * called once. @note On success, the event will be deleted automatically
-     * after it is delivered and handled. On failure, the event will delete
-     * itself before this method returns! The caller must not delete it in
-     * either case.
-     */
-    nsresult postTo(nsIEventQueue *aEventQ)
-    {
-        AssertReturn(mEv.that == NULL, NS_ERROR_FAILURE);
-        AssertReturn(aEventQ, NS_ERROR_FAILURE);
-        nsresult rv = aEventQ->InitEvent(&mEv.e, NULL,
-                                         eventHandler, eventDestructor);
-        if (NS_SUCCEEDED(rv))
-        {
-            mEv.that = this;
-            rv = aEventQ->PostEvent(&mEv.e);
-            if (NS_SUCCEEDED(rv))
-                return rv;
-        }
-        delete this;
-        return rv;
-    }
-
-    virtual void *handler() = 0;
-
-private:
-
-    struct Ev
-    {
-        PLEvent e;
-        MyEvent *that;
-    } mEv;
-
-    static void *PR_CALLBACK eventHandler(PLEvent *self)
-    {
-        return reinterpret_cast<Ev *>(self)->that->handler();
-    }
-
-    static void PR_CALLBACK eventDestructor(PLEvent *self)
-    {
-        delete reinterpret_cast<Ev *>(self)->that;
-    }
-};
-
-////////////////////////////////////////////////////////////////////////////////
-
-/**
  *  VirtualBox class factory that destroys the created instance right after
  *  the last reference to it is released by the client, and recreates it again
  *  when necessary (so VirtualBox acts like a singleton object).
@@ -205,14 +145,7 @@ public:
             /* the last reference held by clients is being released
              * (see GetInstance()) */
 
-            PRBool onMainThread = PR_TRUE;
-            nsCOMPtr<nsIEventQueue> q(gEventQ);
-            if (q)
-            {
-                q->IsOnCurrentThread(&onMainThread);
-                q = nsnull;
-            }
-
+            bool onMainThread = RTThreadIsMain(RTThreadSelf());
             PRBool timerStarted = PR_FALSE;
 
             /* sTimer is null if this call originates from FactoryDestructor()*/
@@ -275,7 +208,7 @@ public:
         return count;
     }
 
-    class MaybeQuitEvent : public MyEvent
+    class MaybeQuitEvent : public NativeEvent
     {
         /* called on the main thread */
         void *handler()
@@ -334,13 +267,13 @@ public:
          * manually ended the server after a destruction has been scheduled
          * and this method was so lucky that it got a chance to run before
          * the timer was killed. */
-        nsCOMPtr<nsIEventQueue> q(gEventQ);
+        com::NativeEventQueue *q = gEventQ;
         AssertReturnVoid(q);
 
         /* post a quit event to the main queue */
         MaybeQuitEvent *ev = new MaybeQuitEvent();
-        nsresult rv = ev->postTo(q);
-        NOREF(rv);
+        if (!q->postEvent(ev))
+            delete ev;
 
         /* A failure above means we've been already stopped (for example
          * by Ctrl-C). FactoryDestructor() (NS_ShutdownXPCOM())
@@ -558,7 +491,7 @@ RegisterSelfComponents(nsIComponentRegistrar *registrar,
 static ipcIService *gIpcServ = nsnull;
 static const char *g_pszPidFile = NULL;
 
-class ForceQuitEvent : public MyEvent
+class ForceQuitEvent : public NativeEvent
 {
     void *handler()
     {
@@ -575,7 +508,7 @@ class ForceQuitEvent : public MyEvent
 
 static void signal_handler(int sig)
 {
-    nsCOMPtr<nsIEventQueue> q(gEventQ);
+    com::NativeEventQueue *q = gEventQ;
     if (q && gKeepRunning)
     {
         if (sig == SIGUSR1)
@@ -583,7 +516,8 @@ static void signal_handler(int sig)
             if (gAllowSigUsrQuit)
             {
                 VirtualBoxClassFactory::MaybeQuitEvent *ev = new VirtualBoxClassFactory::MaybeQuitEvent();
-                ev->postTo(q);
+                if (!q->postEvent(ev))
+                    delete ev;
             }
             /* else do nothing */
         }
@@ -591,7 +525,8 @@ static void signal_handler(int sig)
         {
             /* post a force quit event to the queue */
             ForceQuitEvent *ev = new ForceQuitEvent();
-            ev->postTo(q);
+            if (!q->postEvent(ev))
+                delete ev;
         }
     }
 }
@@ -842,16 +777,6 @@ int main(int argc, char **argv)
             break;
         }
 
-        /* get the main thread's event queue (afaik, the dconnect service always
-         * gets created upon XPCOM startup, so it will use the main (this)
-         * thread's event queue to receive IPC events) */
-        rc = NS_GetMainEventQ(getter_AddRefs(gEventQ));
-        if (NS_FAILED(rc))
-        {
-            RTMsgError("Failed to get the main event queue! (rc=%Rhrc)", rc);
-            break;
-        }
-
         nsCOMPtr<ipcIService> ipcServ(do_GetService(IPC_SERVICE_CONTRACTID, &rc));
         if (NS_FAILED(rc))
         {
@@ -947,34 +872,34 @@ int main(int argc, char **argv)
         else
             RTPrintf("WARNING: failed to obtain per-process file-descriptor limit (%d).\n", errno);
 
-        PLEvent *ev;
+        /* get the main thread's event queue */
+        gEventQ = com::NativeEventQueue::getMainEventQueue();
+        if (!gEventQ)
+        {
+            RTMsgError("Failed to get the main event queue! (rc=%Rhrc)", rc);
+            break;
+        }
+
         while (gKeepRunning)
         {
-            gEventQ->WaitForEvent(&ev);
-            gEventQ->HandleEvent(ev);
+            vrc = gEventQ->processEventQueue(RT_INDEFINITE_WAIT);
+            if (RT_FAILURE(vrc) && vrc != VERR_TIMEOUT)
+            {
+                LogRel(("Failed to wait for events! (rc=%Rrc)", vrc));
+                break;
+            }
         }
 
-        /* stop accepting new events. Clients that happen to resolve our
-         * name and issue a CreateInstance() request after this point will
-         * get NS_ERROR_ABORT once we handle the remaining messages. As a
-         * result, they should try to start a new server process. */
-        gEventQ->StopAcceptingEvents();
+        gEventQ = NULL;
+        RTPrintf("Terminated event loop.\n");
 
         /* unregister ourselves. After this point, clients will start a new
          * process because they won't be able to resolve the server name.*/
         gIpcServ->RemoveName(VBOXSVC_IPC_NAME);
-
-        /* process any remaining events. These events may include
-         * CreateInstance() requests received right before we called
-         * StopAcceptingEvents() above, and those will fail. */
-        gEventQ->ProcessPendingEvents();
-
-        RTPrintf("Terminated event loop.\n");
     }
     while (0); // this scopes the nsCOMPtrs
 
     NS_IF_RELEASE(gIpcServ);
-    gEventQ = nsnull;
 
     /* no nsCOMPtrs are allowed to be alive when you call com::Shutdown(). */
 
diff --git a/src/VBox/Main/xml/Settings.cpp b/src/VBox/Main/xml/Settings.cpp
index 333a4c8..22df864 100644
--- a/src/VBox/Main/xml/Settings.cpp
+++ b/src/VBox/Main/xml/Settings.cpp
@@ -528,7 +528,7 @@ void ConfigFileBase::readExtraData(const xml::ElementNode &elmExtraData,
 }
 
 /**
- * Reads <USBDeviceFilter> entries from under the given elmDeviceFilters node and
+ * Reads \<USBDeviceFilter\> entries from under the given elmDeviceFilters node and
  * stores them in the given linklist. This is in ConfigFileBase because it's used
  * from both MainConfigFile (for host filters) and MachineConfigFile (for machine
  * filters).
@@ -806,13 +806,13 @@ void ConfigFileBase::readMedium(MediaType t,
 }
 
 /**
- * Reads in the entire <MediaRegistry> chunk and stores its media in the lists
+ * Reads in the entire \<MediaRegistry\> chunk and stores its media in the lists
  * of the given MediaRegistry structure.
  *
  * This is used in both MainConfigFile and MachineConfigFile since starting with
  * VirtualBox 4.0, we can have media registries in both.
  *
- * For pre-1.4 files, this gets called with the <DiskRegistry> chunk instead.
+ * For pre-1.4 files, this gets called with the \<DiskRegistry\> chunk instead.
  *
  * @param elmMediaRegistry
  */
@@ -1043,8 +1043,8 @@ void ConfigFileBase::createStubDocument()
 }
 
 /**
- * Creates an <ExtraData> node under the given parent element with
- * <ExtraDataItem> childern according to the contents of the given
+ * Creates an \<ExtraData\> node under the given parent element with
+ * \<ExtraDataItem\> childern according to the contents of the given
  * map.
  *
  * This is in ConfigFileBase because it's used in both MainConfigFile
@@ -1073,7 +1073,7 @@ void ConfigFileBase::buildExtraData(xml::ElementNode &elmParent,
 }
 
 /**
- * Creates <DeviceFilter> nodes under the given parent element according to
+ * Creates \<DeviceFilter\> nodes under the given parent element according to
  * the contents of the given USBDeviceFiltersList. This is in ConfigFileBase
  * because it's used in both MainConfigFile (for host filters) and
  * MachineConfigFile (for machine filters).
@@ -1131,7 +1131,7 @@ void ConfigFileBase::buildUSBDeviceFilters(xml::ElementNode &elmParent,
 }
 
 /**
- * Creates a single <HardDisk> element for the given Medium structure
+ * Creates a single \<HardDisk\> element for the given Medium structure
  * and recurses to write the child hard disks underneath. Called from
  * MainConfigFile::write().
  *
@@ -1211,7 +1211,7 @@ void ConfigFileBase::buildMedium(MediaType t,
 }
 
 /**
- * Creates a <MediaRegistry> node under the given parent and writes out all
+ * Creates a \<MediaRegistry\> node under the given parent and writes out all
  * hard disks and DVD and floppy images from the lists in the given MediaRegistry
  * structure under it.
  *
@@ -1358,7 +1358,7 @@ bool USBDeviceFilter::operator==(const USBDeviceFilter &u) const
 ////////////////////////////////////////////////////////////////////////////////
 
 /**
- * Reads one <MachineEntry> from the main VirtualBox.xml file.
+ * Reads one \<MachineEntry\> from the main VirtualBox.xml file.
  * @param elmMachineRegistry
  */
 void MainConfigFile::readMachineRegistry(const xml::ElementNode &elmMachineRegistry)
@@ -1385,7 +1385,7 @@ void MainConfigFile::readMachineRegistry(const xml::ElementNode &elmMachineRegis
 }
 
 /**
- * Reads in the <DHCPServers> chunk.
+ * Reads in the \<DHCPServers\> chunk.
  * @param elmDHCPServers
  */
 void MainConfigFile::readDHCPServers(const xml::ElementNode &elmDHCPServers)
@@ -1455,7 +1455,7 @@ void MainConfigFile::readDhcpOptions(DhcpOptionMap& map,
 }
 
 /**
- * Reads in the <NATNetworks> chunk.
+ * Reads in the \<NATNetworks\> chunk.
  * @param elmNATNetworks
  */
 void MainConfigFile::readNATNetworks(const xml::ElementNode &elmNATNetworks)
@@ -2738,8 +2738,8 @@ void MachineConfigFile::readGuestProperties(const xml::ElementNode &elmGuestProp
 }
 
 /**
- * Helper function to read attributes that are common to <SATAController> (pre-1.7)
- * and <StorageController>.
+ * Helper function to read attributes that are common to \<SATAController\> (pre-1.7)
+ * and \<StorageController\>.
  * @param elmStorageController
  * @param strg
  */
@@ -2751,12 +2751,12 @@ void MachineConfigFile::readStorageControllerAttributes(const xml::ElementNode &
 }
 
 /**
- * Reads in a <Hardware> block and stores it in the given structure. Used
+ * Reads in a \<Hardware\> block and stores it in the given structure. Used
  * both directly from readMachine and from readSnapshot, since snapshots
  * have their own hardware sections.
  *
  * For legacy pre-1.7 settings we also need a storage structure because
- * the IDE and SATA controllers used to be defined under <Hardware>.
+ * the IDE and SATA controllers used to be defined under \<Hardware\>.
  *
  * @param elmHardware
  * @param hw
@@ -3433,11 +3433,11 @@ void MachineConfigFile::readHardware(const xml::ElementNode &elmHardware,
 
 /**
  * This gets called instead of readStorageControllers() for legacy pre-1.7 settings
- * files which have a <HardDiskAttachments> node and storage controller settings
- * hidden in the <Hardware> settings. We set the StorageControllers fields just the
+ * files which have a \<HardDiskAttachments\> node and storage controller settings
+ * hidden in the \<Hardware\> settings. We set the StorageControllers fields just the
  * same, just from different sources.
- * @param elmHardware <Hardware> XML node.
- * @param elmHardDiskAttachments  <HardDiskAttachments> XML node.
+ * @param elmHardware \<Hardware\> XML node.
+ * @param elmHardDiskAttachments  \<HardDiskAttachments\> XML node.
  * @param strg
  */
 void MachineConfigFile::readHardDiskAttachments_pre1_7(const xml::ElementNode &elmHardDiskAttachments,
@@ -3497,7 +3497,7 @@ void MachineConfigFile::readHardDiskAttachments_pre1_7(const xml::ElementNode &e
 }
 
 /**
- * Reads in a <StorageControllers> block and stores it in the given Storage structure.
+ * Reads in a \<StorageControllers\> block and stores it in the given Storage structure.
  * Used both directly from readMachine and from readSnapshot, since snapshots
  * have their own storage controllers sections.
  *
@@ -3670,11 +3670,11 @@ void MachineConfigFile::readStorageControllers(const xml::ElementNode &elmStorag
 
 /**
  * This gets called for legacy pre-1.9 settings files after having parsed the
- * <Hardware> and <StorageControllers> sections to parse <Hardware> once more
- * for the <DVDDrive> and <FloppyDrive> sections.
+ * \<Hardware\> and \<StorageControllers\> sections to parse \<Hardware\> once more
+ * for the \<DVDDrive\> and \<FloppyDrive\> sections.
  *
  * Before settings version 1.9, DVD and floppy drives were specified separately
- * under <Hardware>; we then need this extra loop to make sure the storage
+ * under \<Hardware\>; we then need this extra loop to make sure the storage
  * controller structs are already set up so we can add stuff to them.
  *
  * @param elmHardware
@@ -3762,7 +3762,7 @@ void MachineConfigFile::readDVDAndFloppies_pre1_9(const xml::ElementNode &elmHar
 }
 
 /**
- * Called for reading the <Teleporter> element under <Machine>.
+ * Called for reading the \<Teleporter\> element under \<Machine\>.
  */
 void MachineConfigFile::readTeleporter(const xml::ElementNode *pElmTeleporter,
                                        MachineUserData *pUserData)
@@ -3778,7 +3778,7 @@ void MachineConfigFile::readTeleporter(const xml::ElementNode *pElmTeleporter,
 }
 
 /**
- * Called for reading the <Debugging> element under <Machine> or <Snapshot>.
+ * Called for reading the \<Debugging\> element under \<Machine\> or \<Snapshot\>.
  */
 void MachineConfigFile::readDebugging(const xml::ElementNode *pElmDebugging, Debugging *pDbg)
 {
@@ -3795,7 +3795,7 @@ void MachineConfigFile::readDebugging(const xml::ElementNode *pElmDebugging, Deb
 }
 
 /**
- * Called for reading the <Autostart> element under <Machine> or <Snapshot>.
+ * Called for reading the \<Autostart\> element under \<Machine\> or \<Snapshot\>.
  */
 void MachineConfigFile::readAutostart(const xml::ElementNode *pElmAutostart, Autostart *pAutostart)
 {
@@ -3820,7 +3820,7 @@ void MachineConfigFile::readAutostart(const xml::ElementNode *pElmAutostart, Aut
 }
 
 /**
- * Called for reading the <Groups> element under <Machine>.
+ * Called for reading the \<Groups\> element under \<Machine\>.
  */
 void MachineConfigFile::readGroups(const xml::ElementNode *pElmGroups, StringsList *pllGroups)
 {
@@ -3846,10 +3846,10 @@ void MachineConfigFile::readGroups(const xml::ElementNode *pElmGroups, StringsLi
 }
 
 /**
- * Called initially for the <Snapshot> element under <Machine>, if present,
+ * Called initially for the \<Snapshot\> element under \<Machine\>, if present,
  * to store the snapshot's data into the given Snapshot structure (which is
  * then the one in the Machine struct). This might then recurse if
- * a <Snapshots> (plural) element is found in the snapshot, which should
+ * a \<Snapshots\> (plural) element is found in the snapshot, which should
  * contain a list of child snapshots; such lists are maintained in the
  * Snapshot structure.
  *
@@ -3992,7 +3992,7 @@ void MachineConfigFile::convertOldOSType_pre1_5(Utf8Str &str)
 }
 
 /**
- * Called from the constructor to actually read in the <Machine> element
+ * Called from the constructor to actually read in the \<Machine\> element
  * of a machine config file.
  * @param elmMachine
  */
@@ -4107,8 +4107,8 @@ void MachineConfigFile::readMachine(const xml::ElementNode &elmMachine)
 }
 
 /**
- * Creates a <Hardware> node under elmParent and then writes out the XML
- * keys under that. Called for both the <Machine> node and for snapshots.
+ * Creates a \<Hardware\> node under elmParent and then writes out the XML
+ * keys under that. Called for both the \<Machine\> node and for snapshots.
  * @param elmParent
  * @param st
  */
@@ -4936,7 +4936,7 @@ void MachineConfigFile::buildHardwareXML(xml::ElementNode &elmParent,
 }
 
 /**
- * Fill a <Network> node. Only relevant for XML version >= v1_10.
+ * Fill a \<Network\> node. Only relevant for XML version >= v1_10.
  * @param mode
  * @param elmParent
  * @param fEnabled
@@ -5037,8 +5037,8 @@ void MachineConfigFile::buildNetworkXML(NetworkAttachmentType_T mode,
 }
 
 /**
- * Creates a <StorageControllers> node under elmParent and then writes out the XML
- * keys under that. Called for both the <Machine> node and for snapshots.
+ * Creates a \<StorageControllers\> node under elmParent and then writes out the XML
+ * keys under that. Called for both the \<Machine\> node and for snapshots.
  * @param elmParent
  * @param st
  * @param fSkipRemovableMedia If true, DVD and floppy attachments are skipped and
@@ -5195,8 +5195,8 @@ void MachineConfigFile::buildStorageControllersXML(xml::ElementNode &elmParent,
 }
 
 /**
- * Creates a <Debugging> node under elmParent and then writes out the XML
- * keys under that. Called for both the <Machine> node and for snapshots.
+ * Creates a \<Debugging\> node under elmParent and then writes out the XML
+ * keys under that. Called for both the \<Machine\> node and for snapshots.
  *
  * @param pElmParent    Pointer to the parent element.
  * @param pDbg          Pointer to the debugging settings.
@@ -5214,8 +5214,8 @@ void MachineConfigFile::buildDebuggingXML(xml::ElementNode *pElmParent, const De
 }
 
 /**
- * Creates a <Autostart> node under elmParent and then writes out the XML
- * keys under that. Called for both the <Machine> node and for snapshots.
+ * Creates a \<Autostart\> node under elmParent and then writes out the XML
+ * keys under that. Called for both the \<Machine\> node and for snapshots.
  *
  * @param pElmParent    Pointer to the parent element.
  * @param pAutostart    Pointer to the autostart settings.
@@ -5243,8 +5243,8 @@ void MachineConfigFile::buildAutostartXML(xml::ElementNode *pElmParent, const Au
 }
 
 /**
- * Creates a <Groups> node under elmParent and then writes out the XML
- * keys under that. Called for the <Machine> node only.
+ * Creates a \<Groups\> node under elmParent and then writes out the XML
+ * keys under that. Called for the \<Machine\> node only.
  *
  * @param pElmParent    Pointer to the parent element.
  * @param pllGroups     Pointer to the groups list.
@@ -5268,8 +5268,8 @@ void MachineConfigFile::buildGroupsXML(xml::ElementNode *pElmParent, const Strin
 
 /**
  * Writes a single snapshot into the DOM tree. Initially this gets called from MachineConfigFile::write()
- * for the root snapshot of a machine, if present; elmParent then points to the <Snapshots> node under the
- * <Machine> node to which <Snapshot> must be added. This may then recurse for child snapshots.
+ * for the root snapshot of a machine, if present; elmParent then points to the \<Snapshots\> node under the
+ * \<Machine\> node to which \<Snapshot\> must be added. This may then recurse for child snapshots.
  *
  * @param depth
  * @param elmParent
@@ -5338,7 +5338,7 @@ void MachineConfigFile::buildSnapshotXML(uint32_t depth,
  *      settings version is at least v1.11 (VirtualBox 4.0).
  *
  *  --  BuildMachineXML_IncludeSnapshots: If set, descend into the snapshots tree
- *      of the machine and write out <Snapshot> and possibly more snapshots under
+ *      of the machine and write out \<Snapshot\> and possibly more snapshots under
  *      that, if snapshots are present. Otherwise all snapshots are suppressed
  *      (when called from OVF).
  *
@@ -5357,7 +5357,7 @@ void MachineConfigFile::buildSnapshotXML(uint32_t depth,
  *      attribute is never set. This is also for the OVF export case because we
  *      cannot save states with OVF.
  *
- * @param elmMachine XML <Machine> element to add attributes and elements to.
+ * @param elmMachine XML \<Machine\> element to add attributes and elements to.
  * @param fl Flags.
  * @param pllElementsWithUuidAttributes pointer to list that should receive UUID elements or NULL;
  *        see buildStorageControllersXML() for details.
diff --git a/src/VBox/Main/xml/ovfreader.cpp b/src/VBox/Main/xml/ovfreader.cpp
index 3762083..bc79bd3 100644
--- a/src/VBox/Main/xml/ovfreader.cpp
+++ b/src/VBox/Main/xml/ovfreader.cpp
@@ -191,12 +191,13 @@ void OVFReader::LoopThruSections(const xml::ElementNode *pReferencesElem,
 
 /**
  * Private helper method that handles disk sections in the OVF XML.
+ *
  * Gets called indirectly from IAppliance::read().
  *
- * @param pcszPath Path spec of the XML file, for error messages.
- * @param pReferencesElement "References" element from OVF, for looking up file specifications; can be NULL if no such element is present.
- * @param pSectionElem Section element for which this helper is getting called.
- * @return
+ * @param pReferencesElem   "References" element from OVF, for looking up file
+ *                          specifications; can be NULL if no such element is
+ *                          present.
+ * @param pSectionElem      Section element for which this helper is getting called.
  */
 void OVFReader::HandleDiskSection(const xml::ElementNode *pReferencesElem,
                                   const xml::ElementNode *pSectionElem)
diff --git a/src/VBox/NetworkServices/DHCP/Config.cpp b/src/VBox/NetworkServices/DHCP/Config.cpp
index 31ea542..e5fc0e4 100644
--- a/src/VBox/NetworkServices/DHCP/Config.cpp
+++ b/src/VBox/NetworkServices/DHCP/Config.cpp
@@ -176,16 +176,18 @@ const std::string tagXMLTimeAttributeExpiration = "expiration";
 const std::string tagXMLLeaseOptions = "Options";
 
 /**
- * <Leases version="1.0">
- *   <Lease mac="" network=""/>
- *    <Address value=""/>
- *    <Time issued="" expiration=""/>
- *    <options>
- *      <option name="" type=""/>
- *      </option>
- *    </options>
- *   </Lease>
- * </Leases>
+ * @verbatim
+   <Leases version="1.0">
+     <Lease mac="" network=""/>
+      <Address value=""/>
+      <Time issued="" expiration=""/>
+      <options>
+        <option name="" type=""/>
+        </option>
+      </options>
+     </Lease>
+   </Leases>
+   @endverbatim
  */
 int ConfigurationManager::loadFromFile(const com::Utf8Str& leaseStorageFileName)
 {
diff --git a/src/VBox/NetworkServices/NAT/pxtcp.c b/src/VBox/NetworkServices/NAT/pxtcp.c
index 92e8f50..cfbd0a8 100644
--- a/src/VBox/NetworkServices/NAT/pxtcp.c
+++ b/src/VBox/NetworkServices/NAT/pxtcp.c
@@ -1271,7 +1271,7 @@ pxtcp_pcb_connect(struct pxtcp *pxtcp, const struct fwspec *fwspec)
         goto reset;
     }
 
-    /* nit: comapres PF and AF, but they are the same everywhere */
+    /* nit: compares PF and AF, but they are the same everywhere */
     LWIP_ASSERT1(ss.ss_family == fwspec->sdom);
 
     status = fwany_ipX_addr_set_src(&src_addr, (const struct sockaddr *)&ss);
@@ -2290,12 +2290,20 @@ pxtcp_pcb_sent(void *arg, struct tcp_pcb *pcb, u16_t len)
                 DPRINTF0(("%s: sock %d: %R[sockerr]\n",
                           __func__, pxtcp->sock, sockerr));
 
+#if HAVE_TCP_POLLHUP == POLLIN /* see counterpart in pxtcp_pmgr_pump() */
                 /*
-                 * Since we are pulling, pxtcp is no longer registered
-                 * with poll manager so we can kill it directly.
+                 * It may still be registered with poll manager for POLLOUT.
+                 */
+                pxtcp_chan_send_weak(POLLMGR_CHAN_PXTCP_RESET, pxtcp);
+                return ERR_OK;
+#else
+                /*
+                 * It is no longer registered with poll manager so we
+                 * can kill it directly.
                  */
                 pxtcp_pcb_reset_pxtcp(pxtcp);
                 return ERR_ABRT;
+#endif
             }
         }
     }
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 894c8e9..577e0c1 100644
--- a/src/VBox/RDP/client-1.8.3/vrdp/rdpusb.c
+++ b/src/VBox/RDP/client-1.8.3/vrdp/rdpusb.c
@@ -375,7 +375,7 @@ devid2proxy (uint32_t devid)
 {
 	PUSBPROXYDEV proxy = g_proxies;
 
-	while (proxy && proxy->devid != devid)
+	while (proxy && proxy->idVrdp != devid)
 	{
 		proxy = proxy->pNext;
 	}
@@ -408,7 +408,7 @@ rdpusb_reap_urbs (void)
 			}
 
 			s = rdpusb_init_packet(14 + datalen, RDPUSB_REQ_REAP_URB);
-			out_uint32_le(s, proxy->devid);
+			out_uint32_le(s, proxy->idVrdp);
 			out_uint8(s, VRDP_USB_REAP_FLAG_LAST);
 			out_uint8(s, pUrb->enmStatus);
 			out_uint32_le(s, pUrb->handle);
@@ -508,7 +508,7 @@ rdpusb_process(STREAM s)
 			}
 
 			proxy->Dev.pszName = "Remote device";
-			proxy->devid = devid;
+			proxy->idVrdp = devid;
 
 			for (pDevice = g_pUsbDevices; pDevice; pDevice = pDevice->pNext)
 				if ((pDevice->bPort << 8) + pDevice->bBus == devid)
diff --git a/src/VBox/Runtime/Doxyfile b/src/VBox/Runtime/Doxyfile
index eb0c1ae..f8ee33b 100644
--- a/src/VBox/Runtime/Doxyfile
+++ b/src/VBox/Runtime/Doxyfile
@@ -1,96 +1,129 @@
-# Doxyfile 1.5.6
+# Doxyfile 1.8.10
 
 # This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
+# doxygen (www.doxygen.org) for a project.
 #
-# All text after a hash (#) is considered a comment and will be ignored
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
 # The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
 
 #---------------------------------------------------------------------------
 # Project related configuration options
 #---------------------------------------------------------------------------
 
 # This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
 
 DOXYFILE_ENCODING      = UTF-8
 
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
 
 PROJECT_NAME           = IPRT
 
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
 
 PROJECT_NUMBER         =
 
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          = Portable Runtime
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
 
 #OUTPUT_DIRECTORY       =
 
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
 
 CREATE_SUBDIRS         = NO
 
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
 # documentation generated by doxygen is written. Doxygen will use this
 # information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek,
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages),
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish,
-# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish,
-# and Ukrainian.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
 
 OUTPUT_LANGUAGE        = English
 
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
 
 BRIEF_MEMBER_DESC      = YES
 
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
 # brief descriptions will be completely suppressed.
+# The default value is: YES.
 
 REPEAT_BRIEF           = YES
 
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
 
 ABBREVIATE_BRIEF       =
 
 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
+# doxygen will generate a detailed section even if there is only a brief
 # description.
+# The default value is: NO.
 
 ALWAYS_DETAILED_SEC    = NO
 
@@ -98,93 +131,102 @@ ALWAYS_DETAILED_SEC    = NO
 # inherited members of a class in the documentation of that class as if those
 # members were ordinary class members. Constructors, destructors and assignment
 # operators of the base classes will not be shown.
+# The default value is: NO.
 
 INLINE_INHERITED_MEMB  = NO
 
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
 
 FULL_PATH_NAMES        = NO
 
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
 
 STRIP_FROM_PATH        =
 
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
 
 STRIP_FROM_INC_PATH    =
 
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
 
 SHORT_NAMES            = NO
 
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like regular Qt-style comments
-# (thus requiring an explicit @brief command for a brief description.)
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
 
 JAVADOC_AUTOBRIEF      = YES
 
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
-# interpret the first line (until the first dot) of a Qt-style
-# comment as the brief description. If set to NO, the comments
-# will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
 
 QT_AUTOBRIEF           = NO
 
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
 
 MULTILINE_CPP_IS_BRIEF = NO
 
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
-DETAILS_AT_TOP         = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
 
 INHERIT_DOCS           = YES
 
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
 
 SEPARATE_MEMBER_PAGES  = NO
 
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
 
 TAB_SIZE               = 4
 
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
 
 ALIASES                = \
     "note=@remark"
@@ -199,402 +241,627 @@ Implements \1 method \link \1::\2 \2 \endlink @copydoc \1::\2 "
 
 # Callback method implementation macros.
 ALIASES                += \
-    callback_method_impl{1}="Implements the callback \link \1 \1  \endlink @copydoc \1 "
+    callback_method_impl{1}="Implements the callback \link \1 \1 \endlink @copydoc \1 "
 ALIASES                += \
     callback_method_impl{2}="\2. \
 \
-Implements the callback \link \1 \1 "
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
+Implements the callback \link \1 \1 \endlink "
+
+# bugref - xTracker bug reference, takes one to four bug numbers.
+ALIASES               += bugref{1}="https://xtracker.innotek.de/index.php?bug=\1"
+ALIASES               += bugref{2}="https://xtracker.innotek.de/index.php?bug=\1, \
+https://xtracker.innotek.de/index.php?bug=\2"
+ALIASES               += bugref{3}="https://xtracker.innotek.de/index.php?bug=\1, \
+https://xtracker.innotek.de/index.php?bug=\2, \
+https://xtracker.innotek.de/index.php?bug=\3"
+ALIASES               += bugref{4}="https://xtracker.innotek.de/index.php?bug=\1, \
+https://xtracker.innotek.de/index.php?bug=\2, \
+https://xtracker.innotek.de/index.php?bug=\3, \
+https://xtracker.innotek.de/index.php?bug=\4"
+
+# ticketref - Track ticket reference, takes one to four ticket numbers.
+ALIASES               += ticketref{1}="http://www.virtualbox.org/ticket/\1"
+ALIASES               += ticketref{2}="http://www.virtualbox.org/ticket/\1, \
+http://www.virtualbox.org/ticket/\2"
+ALIASES               += ticketref{3}="http://www.virtualbox.org/ticket/\1, \
+http://www.virtualbox.org/ticket/\2, \
+http://www.virtualbox.org/ticket/\3"
+ALIASES               += ticketref{4}="http://www.virtualbox.org/ticket/\1, \
+http://www.virtualbox.org/ticket/\2, \
+http://www.virtualbox.org/ticket/\3, \
+http://www.virtualbox.org/ticket/\4"
+
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
+
+TCL_SUBST              =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
 
 OPTIMIZE_OUTPUT_FOR_C  = YES
 
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for
-# Java. For instance, namespaces will be presented as packages, qualified
-# scopes will look different, etc.
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
 
 OPTIMIZE_OUTPUT_JAVA   = NO
 
 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources only. Doxygen will then generate output that is more tailored for
-# Fortran.
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
 
 OPTIMIZE_FOR_FORTRAN   = NO
 
 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for
-# VHDL.
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
 
 OPTIMIZE_OUTPUT_VHDL   = NO
 
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
 # diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
 
 BUILTIN_STL_SUPPORT    = NO
 
 # If you use Microsoft's C++/CLI language, you should set this option to YES to
 # enable parsing support.
+# The default value is: NO.
 
 CPP_CLI_SUPPORT        = NO
 
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
-# Doxygen will parse them like normal C++ but will assume all classes use public
-# instead of private inheritance when no explicit protection keyword is present.
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
 
 SIP_SUPPORT            = NO
 
-# For Microsoft's IDL there are propget and propput attributes to indicate getter
-# and setter methods for a property. Setting this option to YES (the default)
-# will make doxygen to replace the get and set methods by a property in the
-# documentation. This will only work if the methods are indeed getting or
-# setting a simple type. If this is not the case, or you want to show the
-# methods anyway, you should set this option to NO.
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
 
 IDL_PROPERTY_SUPPORT   = YES
 
 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
+# tag is set to YES then doxygen will reuse the documentation of the first
 # member in the group (if any) for the other members of the group. By default
 # all members of a group must be documented explicitly.
+# The default value is: NO.
 
 DISTRIBUTE_GROUP_DOC   = NO
 
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
 
 SUBGROUPING            = YES
 
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
-# is documented as struct, union, or enum with the name of the typedef. So
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
 # with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically
-# be useful for C code in case the coding convention dictates that all compound
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
 # types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
 
 TYPEDEF_HIDES_STRUCT   = NO
 
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------
 
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
 
 EXTRACT_ALL            = YES
 
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
 
 EXTRACT_PRIVATE        = YES
 
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
 
 EXTRACT_STATIC         = YES
 
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
 
 EXTRACT_LOCAL_CLASSES  = YES
 
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
 
 EXTRACT_LOCAL_METHODS  = NO
 
 # If this flag is set to YES, the members of anonymous namespaces will be
 # extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base
-# name of the file that contains the anonymous namespace. By default
-# anonymous namespace are hidden.
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
 
 EXTRACT_ANON_NSPACES   = NO
 
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
 
 HIDE_UNDOC_MEMBERS     = NO
 
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
 
 HIDE_UNDOC_CLASSES     = NO
 
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
 
 HIDE_FRIEND_COMPOUNDS  = NO
 
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
 
 HIDE_IN_BODY_DOCS      = NO
 
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
 
 INTERNAL_DOCS          = YES
 
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
 # allowed. This is useful if you have classes or files whose names only differ
 # in case and if your file system supports case sensitive file names. Windows
 # and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
 
 CASE_SENSE_NAMES       = NO
 
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
 
 HIDE_SCOPE_NAMES       = NO
 
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
 
 SHOW_INCLUDE_FILES     = YES
 
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
 
 INLINE_INFO            = YES
 
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
 
 SORT_MEMBER_DOCS       = YES
 
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
 
 SORT_BRIEF_DOCS        = NO
 
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
-# hierarchy of group names into alphabetical order. If set to NO (the default)
-# the group names will appear in their defined order.
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
 
 SORT_GROUP_NAMES       = NO
 
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
 
 SORT_BY_SCOPE_NAME     = NO
 
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
 
 GENERATE_TODOLIST      = YES
 
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
 
 GENERATE_TESTLIST      = YES
 
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
 
 GENERATE_BUGLIST       = YES
 
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
 
 GENERATE_DEPRECATEDLIST= YES
 
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
 
 ENABLED_SECTIONS       =
 
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
 
 MAX_INITIALIZER_LINES  = 30
 
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
 # list will mention the files that were used to generate the documentation.
+# The default value is: YES.
 
 SHOW_USED_FILES        = YES
 
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES       = NO
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
-# This will remove the Files entry from the Quick Index and from the
-# Folder Tree View (if specified). The default is YES.
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
 
 SHOW_FILES             = YES
 
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index
-# and from the Folder Tree View (if specified). The default is YES.
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
 
 SHOW_NAMESPACES        = YES
 
 # The FILE_VERSION_FILTER tag can be used to specify a program or script that
 # doxygen should invoke to get the current version for each file (typically from
 # the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
 
 FILE_VERSION_FILTER    =
 
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
 #---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
 
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
 
 QUIET                  = YES
 
 # The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
 
 WARNINGS               = YES
 
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
 
 WARN_IF_UNDOCUMENTED   = YES
 
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
 
 WARN_IF_DOC_ERROR      = YES
 
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
 
 WARN_NO_PARAMDOC       = NO
 
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
 
 WARN_FORMAT            = "$file:$line: $text"
 
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
 
-#WARN_LOGFILE           =
+WARN_LOGFILE           =
 
 #---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
 #---------------------------------------------------------------------------
 
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
 
-#INPUT                  =
+INPUT                  =
 
 # This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-# also the default input encoding. Doxygen uses libiconv (or the iconv built
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
-# the list of possible encodings.
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
 
 INPUT_ENCODING         = UTF-8
 
 # If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd,
+# *.vhdl, *.ucf, *.qsf, *.as and *.js.
 
 #FILE_PATTERNS          =
 
-
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
 
 RECURSIVE              = NO
 
-# The EXCLUDE tag can be used to specify files and/or directories that should
+# The EXCLUDE tag can be used to specify files and/or directories that should be
 # excluded from the INPUT source files. This way you can easily exclude a
 # subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
 
-EXCLUDE                =
+#EXCLUDE                =
 
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
 # from the input.
+# The default value is: NO.
 
 EXCLUDE_SYMLINKS       = NO
 
 # If the value of the INPUT tag contains directories, you can use the
 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
 
 EXCLUDE_PATTERNS       =
 
@@ -603,528 +870,1114 @@ EXCLUDE_PATTERNS       =
 # output. The symbol name can be a fully qualified name, a word, or if the
 # wildcard * is used, a substring. Examples: ANamespace, AClass,
 # AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
 
 EXCLUDE_SYMBOLS        =
 
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
 
 EXAMPLE_PATH           =
 
 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
 
 EXAMPLE_PATTERNS       =
 
 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
 
 EXAMPLE_RECURSIVE      = NO
 
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
 
 IMAGE_PATH             =
 
 # The INPUT_FILTER tag can be used to specify a program that doxygen should
 # invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be
-# ignored.
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
 
 INPUT_FILTER           =
 
 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis.  Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match.  The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
 
 FILTER_PATTERNS        =
 
 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
 
 FILTER_SOURCE_FILES    = NO
 
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
 #---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
 #---------------------------------------------------------------------------
 
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
 
 SOURCE_BROWSER         = NO
 
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
 
 INLINE_SOURCES         = NO
 
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
 
 STRIP_CODE_COMMENTS    = NO
 
-# If the REFERENCED_BY_RELATION tag is set to YES
-# then for each documented function all documented
-# functions referencing it will be listed.
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
 
 REFERENCED_BY_RELATION = YES
 
-# If the REFERENCES_RELATION tag is set to YES
-# then for each documented function all documented entities
-# called/used by that function will be listed.
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
 
 REFERENCES_RELATION    = YES
 
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.  Otherwise they will link to the documentstion.
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
 
 REFERENCES_LINK_SOURCE = YES
 
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
 
 USE_HTAGS              = NO
 
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
 
 VERBATIM_HEADERS       = YES
 
 #---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
 
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
 
 ALPHABETICAL_INDEX     = NO
 
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
 
 COLS_IN_ALPHA_INDEX    = 5
 
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
 
 IGNORE_PREFIX          =
 
 #---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
 
 GENERATE_HTML          = YES
 
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_OUTPUT            = html
 
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_FILE_EXTENSION    = .html
 
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
 # standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_HEADER            =
 
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_FOOTER            =
 
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_STYLESHEET        =
 
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_TIMESTAMP         = NO
 
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
-# of the generated HTML documentation.
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
-GENERATE_HTMLHELP      = NO
+HTML_DYNAMIC_SECTIONS  = NO
 
-# If the GENERATE_DOCSET tag is set to YES, additional index files
-# will be generated that can be used as input for Apple's Xcode 3
-# integrated development environment, introduced with OSX 10.5 (Leopard).
-# To create a documentation set, doxygen will generate a Makefile in the
-# HTML output directory. Running make will produce the docset in that
-# directory and running "make install" will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
-# it at startup.
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 GENERATE_DOCSET        = NO
 
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
-# feed. A documentation feed provides an umbrella under which multiple
-# documentation sets from a single provider (such as a company or product suite)
-# can be grouped.
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
 
 DOCSET_FEEDNAME        = "Doxygen generated docs"
 
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
-# should uniquely identify the documentation set bundle. This should be a
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
-# will append .docset to the name.
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
 
-DOCSET_BUNDLE_ID       = org.doxygen.Project
+DOCSET_BUNDLE_ID       = org.virtualbox.iprt
 
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded. For this to work a browser that supports
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
 
-HTML_DYNAMIC_SECTIONS  = NO
+DOCSET_PUBLISHER_ID    = org.virtualbox
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = VirtualBox
 
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
 # written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 CHM_FILE               =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 HHC_LOCATION           =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 GENERATE_CHI           = NO
 
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file
-# content.
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 CHM_INDEX_ENCODING     =
 
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 BINARY_TOC             = NO
 
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 TOC_EXPAND             = NO
 
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.virtualbox.iprt
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 DISABLE_INDEX          = YES
 
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE   = 4
-
 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information.
-# If the tag value is set to FRAME, a side panel will be generated
-# containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature. Other possible values
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
-# and Class Hierarchy pages using a tree view instead of an ordered list;
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
-# disables this behavior completely. For backwards compatibility with previous
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
-# respectively.
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 GENERATE_TREEVIEW      = YES
 
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 TREEVIEW_WIDTH         = 250
 
-# Use this tag to change the font size of Latex formulas included
-# as images in the HTML documentation. The default is 10. Note that
-# when you change the font size after a successful doxygen run you need
-# to manually remove any form_*.png images from the HTML output directory
-# to force them to be regenerated.
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
 
 FORMULA_FONTSIZE       = 10
 
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_TRANSPARENT    = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = NO
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
 #---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
 
 GENERATE_LATEX         = NO
 
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_OUTPUT           = latex
 
 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_CMD_NAME         = latex
 
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 MAKEINDEX_CMD_NAME     = makeindex
 
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 COMPACT_LATEX          = NO
 
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 PAPER_TYPE             = a4wide
 
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 EXTRA_PACKAGES         =
 
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_HEADER           =
 
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 PDF_HYPERLINKS         = NO
 
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
 # higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 USE_PDFLATEX           = NO
 
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_BATCHMODE        = NO
 
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_HIDE_INDICES     = NO
 
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_SOURCE_CODE      = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
 #---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
 
 GENERATE_RTF           = NO
 
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 RTF_OUTPUT             = rtf
 
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 COMPACT_RTF            = NO
 
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 RTF_HYPERLINKS         = NO
 
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 RTF_STYLESHEET_FILE    =
 
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
 
 RTF_EXTENSIONS_FILE    =
 
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
 #---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
 
 GENERATE_MAN           = NO
 
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
 
 MAN_OUTPUT             = man
 
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
 
 MAN_EXTENSION          = .3
 
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
 
 MAN_LINKS              = NO
 
 #---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
 
 GENERATE_XML           = NO
 
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
 
 XML_OUTPUT             = xml
 
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
 
-XML_SCHEMA             =
+XML_PROGRAMLISTING     = YES
 
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
 
-XML_DTD                =
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
 
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
+GENERATE_DOCBOOK       = NO
 
-XML_PROGRAMLISTING     = YES
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
 
 #---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
 
 GENERATE_AUTOGEN_DEF   = NO
 
 #---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# Configuration options related to the Perl module output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
 
 GENERATE_PERLMOD       = NO
 
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
 
 PERLMOD_LATEX          = NO
 
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.  This is useful
-# if you want to understand what is going on.  On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
 
 PERLMOD_PRETTY         = YES
 
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
 
 PERLMOD_MAKEVAR_PREFIX =
 
@@ -1132,50 +1985,58 @@ PERLMOD_MAKEVAR_PREFIX =
 # Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
 
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
 
 ENABLE_PREPROCESSING   = YES
 
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 MACRO_EXPANSION        = YES
 
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 EXPAND_ONLY_PREDEF     = YES
 
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 SEARCH_INCLUDES        = YES
 
 # The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
 
-#INCLUDE_PATH           =
+INCLUDE_PATH           =
 
 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
 # patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
-#INCLUDE_FILE_PATTERNS  =
+INCLUDE_FILE_PATTERNS  =
 
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 PREDEFINED             = \
     DOXYGEN_RUNNING \
@@ -1193,6 +2054,8 @@ PREDEFINED             = \
     \
     "DECLINLINE(type)=inline type" \
     DECL_FORCE_INLINE(type)=DECLINLINE(type) \
+    DECL_NO_INLINE(type)=type \
+    DECLCALLBACK(type)=type \
     \
     AssertCompile(expr) \
     AssertCompileSize(a,b) \
@@ -1202,11 +2065,21 @@ PREDEFINED             = \
     AssertCompileMemberOffset(a,b,c) \
     AssertCompile2MemberOffsets(a,b,c) \
     \
+    RT_SRC_POS=1 \
+    RT_SRC_POS_ARGS=SRC_POS \
+    "RT_SRC_POS_DECL=int SRC_POS" \
+    \
+    RT_IPRT_FORMAT_ATTR(a,b)= \
+    RT_IPRT_FORMAT_ATTR_MAYBE_NULL(a,b)= \
+    RT_NO_THROW_PROTO=
+
 
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
 EXPAND_AS_DEFINED      = \
     ARCH_BITS \
@@ -1227,7 +2100,6 @@ EXPAND_AS_DEFINED      = \
     DECLHIDDEN \
     DECLASM \
     DECLASMTYPE \
-    DECLCALLBACK \
     DECLCALLBACKMEMBER \
     DECLHCCALLBACKMEMBER \
     DECLRCCALLBACKMEMBER \
@@ -1244,60 +2116,66 @@ EXPAND_AS_DEFINED      = \
     OTHERCTXSUFF \
     CTXMID \
     OTHERCTXMID \
-    \
-    RT_SRC_POS \
-    RT_SRC_POS_ARGS \
-    RT_SRC_POS_DECL
-
 
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
-#SKIP_FUNCTION_MACROS   = YES
+SKIP_FUNCTION_MACROS   = YES
 
 #---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration options related to external references
 #---------------------------------------------------------------------------
 
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-#   TAGFILES = file1 file2 ...
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
 # Adding location for the tag files is done as follows:
-#   TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
 
 TAGFILES               =
 
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
 
 GENERATE_TAGFILE       =
 
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
 
 ALLEXTERNALS           = NO
 
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
 
 EXTERNAL_GROUPS        = YES
 
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
 # The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
 
 PERL_PATH              = /usr/bin/perl
 
@@ -1305,201 +2183,312 @@ PERL_PATH              = /usr/bin/perl
 # Configuration options related to the dot tool
 #---------------------------------------------------------------------------
 
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
 # powerful graphs.
+# The default value is: YES.
 
 CLASS_DIAGRAMS         = YES
 
 # You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
 # documentation. The MSCGEN_PATH tag allows you to specify the directory where
 # the mscgen tool resides. If left empty the tool is assumed to be found in the
 # default search path.
 
 MSCGEN_PATH            =
 
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
 
 HIDE_UNDOC_RELATIONS   = YES
 
 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
 
 HAVE_DOT               = NO
 
-# By default doxygen will write a font called FreeSans.ttf to the output
-# directory and reference it in all dot files that doxygen generates. This
-# font does not include all possible unicode characters however, so when you need
-# these (or just want a differently looking font) you can specify the font name
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
-# which can be done by putting it in a standard location or by setting the
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
-# containing the font.
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+#DOT_FONTNAME           = FreeSans
 
-DOT_FONTNAME           = FreeSans
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
-# By default doxygen will tell dot to use the output directory to look for the
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a
-# different font using DOT_FONTNAME you can set the path where dot
-# can find it using this tag.
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_FONTPATH           =
 
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 CLASS_GRAPH            = YES
 
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 COLLABORATION_GRAPH    = YES
 
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 GROUP_GRAPHS           = YES
 
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
 # collaboration diagrams in a style similar to the OMG's Unified Modeling
 # Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 UML_LOOK               = YES
 
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 TEMPLATE_RELATIONS     = YES
 
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 INCLUDE_GRAPH          = YES
 
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 INCLUDED_BY_GRAPH      = YES
 
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then
-# doxygen will generate a call dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable call graphs
-# for selected functions only using the \callgraph command.
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 CALL_GRAPH             = YES
 
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
-# doxygen will generate a caller dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable caller
-# graphs for selected functions only using the \callergraph command.
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 CALLER_GRAPH           = NO
 
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 GRAPHICAL_HIERARCHY    = YES
 
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DIRECTORY_GRAPH        = YES
 
 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_IMAGE_FORMAT       = png
 
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
 # found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_PATH               =
 
 # The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOTFILE_DIRS           =
 
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen if the
-# number of direct children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_GRAPH_MAX_NODES    = 50
 
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that the size of a graph can be further restricted by
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 MAX_DOT_GRAPH_DEPTH    = 0
 
 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is enabled by default, which results in a transparent
-# background. Warning: Depending on the platform used, enabling this option
-# may lead to badly anti-aliased labels on the edges of a graph (i.e. they
-# become hard to read).
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_TRANSPARENT        = YES
 
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
 # files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_MULTI_TARGETS      = NO
 
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 GENERATE_LEGEND        = YES
 
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
 
 DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = NO
-
-#
-# The next bit is generated by the Makefile.
-#
-
diff --git a/src/VBox/Runtime/Makefile.kmk b/src/VBox/Runtime/Makefile.kmk
index 06f0fbb..c6fe664 100644
--- a/src/VBox/Runtime/Makefile.kmk
+++ b/src/VBox/Runtime/Makefile.kmk
@@ -2725,25 +2725,40 @@ $(IPRT_OUT_DIR)/Doxyfile.iprt: \
 		$(comp-vars IPRT_DOXYFILE_INPUT,DOXYGEN_INPUT_PREV,FORCE) \
 		$(comp-vars IPRT_DOXYFILE_OUTPUT,DOXYGEN_OUTPUT_PREV,FORCE) \
 		| $$(dir $$@)
-	$(RM) -f $@ $@.tmp $@.dep
-	$(CP) -f $(VBOX_PATH_RUNTIME_SRC)/Doxyfile $@.tmp
-	$(APPEND) $@.tmp
-	$(APPEND) $@.tmp "OUTPUT_DIRECTORY = $(IPRT_DOXYFILE_OUTPUT)"
-	$(APPEND) $@.tmp "WARN_LOGFILE = $(IPRT_DOXYFILE_OUTPUT)/errors"
-	$(APPEND) $@.tmp "INCLUDE_PATH = $(PATH_ROOT)/include include . common/table"
-	$(APPEND) $@.tmp "INCLUDE_FILE_PATTERNS = *.cpp.h"
-	$(APPEND) $@.tmp "PREDEFINED += $(ARCH_BITS_DEFS)"
-	$(APPEND) $@.tmp
-	$(APPEND) $@.tmp "INPUT = $(IPRT_DOXYFILE_INPUT)"
-	$(APPEND) $@.tmp
-	$(MV) -f $@.tmp $@
-	@$(APPEND) $@.dep "DOXYGEN_OUTPUT_PREV = $(IPRT_DOXYFILE_OUTPUT)"
-	@$(APPEND) $@.dep "DOXYGEN_INPUT_PREV = $(IPRT_DOXYFILE_INPUT)"
+	$(QUIET)$(RM) -f $@ $@.tmp $@.dep
+	$(QUIET)$(CP) -f $(VBOX_PATH_RUNTIME_SRC)/Doxyfile $@.tmp
+	$(QUIET)$(APPEND) $@.tmp
+	$(QUIET)$(APPEND) $@.tmp "OUTPUT_DIRECTORY = $(IPRT_DOXYFILE_OUTPUT)"
+	$(QUIET)$(APPEND) $@.tmp "WARN_LOGFILE = $(IPRT_DOXYFILE_OUTPUT)/errors"
+	$(QUIET)$(APPEND) $@.tmp 'INCLUDE_PATH = ' \
+		'$(PATH_ROOT)/include' \
+		'$(VBOX_PATH_RUNTIME_SRC)/include' \
+		'$(VBOX_PATH_RUNTIME_SRC)/' \
+		'$(VBOX_PATH_RUNTIME_SRC)/common/table'
+	$(QUIET)$(APPEND) $@.tmp "INCLUDE_FILE_PATTERNS = *.cpp.h"
+	$(QUIET)$(APPEND) $@.tmp "PREDEFINED += $(ARCH_BITS_DEFS)"
+	$(QUIET)$(APPEND) $@.tmp 'EXCLUDE = '\
+		'$(VBOX_PATH_RUNTIME_SRC)/common/string/unidata-flags.cpp' \
+       	'$(VBOX_PATH_RUNTIME_SRC)/common/string/unidata-lower.cpp' \
+       	'$(VBOX_PATH_RUNTIME_SRC)/common/string/unidata-upper.cpp' \
+       	'$(VBOX_PATH_RUNTIME_SRC)/common/ldr/ldrkStuff.cpp'
+	$(QUIET)$(APPEND) $@.tmp
+	$(QUIET)$(APPEND) $@.tmp 'INPUT = $(foreach x,$(IPRT_DOXYFILE_INPUT),\$(NLTAB)$(x))'
+	$(QUIET)$(APPEND) $@.tmp
+	$(QUIET)$(MV) -f $@.tmp $@
+	$(QUIET)$(APPEND) $@.dep "DOXYGEN_OUTPUT_PREV = $(IPRT_DOXYFILE_OUTPUT)"
+	$(QUIET)$(APPEND) $@.dep "DOXYGEN_INPUT_PREV = $(IPRT_DOXYFILE_INPUT)"
 
 # Do the actual job.
 $(IPRT_OUT_DIR)/docs.iprt: $(IPRT_OUT_DIR)/Doxyfile.iprt $$(IPRT_DOXYFILE_INPUT) | $(IPRT_DOXYFILE_OUTPUT)/
-	$(RM) -f $(wildcard $(IPRT_DOXYFILE_OUTPUT)/html/*) $(IPRT_OUT_DIR)/docs.iprt
-	doxygen $(IPRT_OUT_DIR)/Doxyfile.iprt
+	$(QUIET)$(RM) -f $(wildcard $(IPRT_DOXYFILE_OUTPUT)/html/*) $(IPRT_OUT_DIR)/docs.iprt
+	doxygen $(DOXYGEN_OPTS) $(IPRT_OUT_DIR)/Doxyfile.iprt
+	$(SED)	-e '/warning. Unexpected tag .dd. found/d' \
+		-e '/warning. Unsupported xml.html tag .globalScope. found/d' \
+               --output $(IPRT_DOXYFILE_OUTPUT)/errors2 \
+		$(IPRT_DOXYFILE_OUTPUT)/errors
+	$(CAT) $(IPRT_DOXYFILE_OUTPUT)/errors2
+	$(SED) -e "/[^ ]/q 1" $(IPRT_DOXYFILE_OUTPUT)/errors2
 	$(APPEND) $(IPRT_OUT_DIR)/docs.iprt
 
 # aliases
diff --git a/src/VBox/Runtime/VBox/log-vbox.cpp b/src/VBox/Runtime/VBox/log-vbox.cpp
index 7401a45..ae32f58 100644
--- a/src/VBox/Runtime/VBox/log-vbox.cpp
+++ b/src/VBox/Runtime/VBox/log-vbox.cpp
@@ -72,7 +72,7 @@
  *
  *
  *
- * @section sec_logging_destination     The Group Specifier.
+ * @section sec_logging_group           The Group Specifier.
  *
  * The {logger-env-base} environment variable can be used to specify which
  * logger groups to enable and which to disable. By default all groups are
diff --git a/src/VBox/Runtime/VBox/logbackdoor-redirect.cpp b/src/VBox/Runtime/VBox/logbackdoor-redirect.cpp
index b078d4c..30d4388 100644
--- a/src/VBox/Runtime/VBox/logbackdoor-redirect.cpp
+++ b/src/VBox/Runtime/VBox/logbackdoor-redirect.cpp
@@ -113,8 +113,9 @@ RTDECL(void) RTLogPrintfV(const char *pszFormat, va_list va)
 
 
 /* Do nothing for now. */
-RTDECL(void) RTLogFlush(PRTLOGGER)
+RTDECL(void) RTLogFlush(PRTLOGGER pLogger)
 {
+    NOREF(pLogger);
 }
 
 /* Do nothing. */
diff --git a/src/VBox/Runtime/common/asn1/asn1-basics.cpp b/src/VBox/Runtime/common/asn1/asn1-basics.cpp
index bf90b00..e597de7 100644
--- a/src/VBox/Runtime/common/asn1/asn1-basics.cpp
+++ b/src/VBox/Runtime/common/asn1/asn1-basics.cpp
@@ -333,13 +333,13 @@ RTDECL(void) RTAsn1ContentFree(PRTASN1CORE pAsn1Core)
  * Virtual method table based API.
  */
 
-RTDECL(void) RTAsn1VtDelete(PRTASN1CORE pAsn1Core)
+RTDECL(void) RTAsn1VtDelete(PRTASN1CORE pThisCore)
 {
-    if (pAsn1Core)
+    if (pThisCore)
     {
-        PCRTASN1COREVTABLE pOps = pAsn1Core->pOps;
+        PCRTASN1COREVTABLE pOps = pThisCore->pOps;
         if (pOps)
-            pOps->pfnDtor(pAsn1Core);
+            pOps->pfnDtor(pThisCore);
     }
 }
 
@@ -354,32 +354,32 @@ typedef struct RTASN1DEEPENUMCTX
 } RTASN1DEEPENUMCTX;
 
 
-static DECLCALLBACK(int) rtAsn1VtDeepEnumDepthFirst(PRTASN1CORE pAsn1Core, const char *pszName, uint32_t uDepth, void *pvUser)
+static DECLCALLBACK(int) rtAsn1VtDeepEnumDepthFirst(PRTASN1CORE pThisCore, const char *pszName, uint32_t uDepth, void *pvUser)
 {
-    AssertReturn(pAsn1Core, VINF_SUCCESS);
+    AssertReturn(pThisCore, VINF_SUCCESS);
 
-    if (pAsn1Core->pOps && pAsn1Core->pOps->pfnEnum)
+    if (pThisCore->pOps && pThisCore->pOps->pfnEnum)
     {
-        int rc = pAsn1Core->pOps->pfnEnum(pAsn1Core, rtAsn1VtDeepEnumDepthFirst, uDepth, pvUser);
+        int rc = pThisCore->pOps->pfnEnum(pThisCore, rtAsn1VtDeepEnumDepthFirst, uDepth, pvUser);
         if (rc != VINF_SUCCESS)
             return rc;
     }
 
     RTASN1DEEPENUMCTX *pCtx = (RTASN1DEEPENUMCTX *)pvUser;
-    return pCtx->pfnCallback(pAsn1Core, pszName, uDepth, pCtx->pvUser);
+    return pCtx->pfnCallback(pThisCore, pszName, uDepth, pCtx->pvUser);
 }
 
 
-static DECLCALLBACK(int) rtAsn1VtDeepEnumDepthLast(PRTASN1CORE pAsn1Core, const char *pszName, uint32_t uDepth, void *pvUser)
+static DECLCALLBACK(int) rtAsn1VtDeepEnumDepthLast(PRTASN1CORE pThisCore, const char *pszName, uint32_t uDepth, void *pvUser)
 {
-    AssertReturn(pAsn1Core, VINF_SUCCESS);
+    AssertReturn(pThisCore, VINF_SUCCESS);
 
     RTASN1DEEPENUMCTX *pCtx = (RTASN1DEEPENUMCTX *)pvUser;
-    int rc = pCtx->pfnCallback(pAsn1Core, pszName, uDepth, pCtx->pvUser);
+    int rc = pCtx->pfnCallback(pThisCore, pszName, uDepth, pCtx->pvUser);
     if (rc == VINF_SUCCESS)
     {
-        if (pAsn1Core->pOps && pAsn1Core->pOps->pfnEnum)
-            rc = pAsn1Core->pOps->pfnEnum(pAsn1Core, rtAsn1VtDeepEnumDepthFirst, uDepth, pvUser);
+        if (pThisCore->pOps && pThisCore->pOps->pfnEnum)
+            rc = pThisCore->pOps->pfnEnum(pThisCore, rtAsn1VtDeepEnumDepthFirst, uDepth, pvUser);
     }
     return rc;
 }
diff --git a/src/VBox/Runtime/common/checksum/manifest2.cpp b/src/VBox/Runtime/common/checksum/manifest2.cpp
index 1f18c0e..97cde90 100644
--- a/src/VBox/Runtime/common/checksum/manifest2.cpp
+++ b/src/VBox/Runtime/common/checksum/manifest2.cpp
@@ -134,7 +134,7 @@ typedef struct RTMANIFESTEQUALS
     /** Name of entries to ignore. */
     const char * const *papszIgnoreEntries;
     /** Name of attributes to ignore. */
-    const char * const *papszIgnoreAttr;
+    const char * const *papszIgnoreAttrs;
     /** Flags governing the comparision. */
     uint32_t            fFlags;
     /** Where to return an error message (++) on failure.  Can be NULL. */
@@ -308,7 +308,7 @@ RTDECL(int) RTManifestDup(RTMANIFEST hManifestSrc, PRTMANIFEST phManifestDst)
 
 
 /**
- * @callback_method_impl{FNRTSTRSPACECALLBACK, Prepare equals operation.}
+ * @callback_method_impl{FNRTSTRSPACECALLBACK, Prepare equals operation}
  */
 static DECLCALLBACK(int) rtManifestAttributeClearVisited(PRTSTRSPACECORE pStr, void *pvUser)
 {
@@ -320,7 +320,7 @@ static DECLCALLBACK(int) rtManifestAttributeClearVisited(PRTSTRSPACECORE pStr, v
 
 
 /**
- * @callback_method_impl{FNRTSTRSPACECALLBACK, Prepare equals operation.}
+ * @callback_method_impl{FNRTSTRSPACECALLBACK, Prepare equals operation}
  */
 static DECLCALLBACK(int) rtManifestEntryClearVisited(PRTSTRSPACECORE pStr, void *pvUser)
 {
@@ -333,7 +333,7 @@ static DECLCALLBACK(int) rtManifestEntryClearVisited(PRTSTRSPACECORE pStr, void
 
 
 /**
- * @callback_method_impl{FNRTSTRSPACECALLBACK, Finds the first missing.}
+ * @callback_method_impl{FNRTSTRSPACECALLBACK, Finds the first missing}
  */
 static DECLCALLBACK(int) rtManifestAttributeFindMissing2(PRTSTRSPACECORE pStr, void *pvUser)
 {
@@ -349,7 +349,7 @@ static DECLCALLBACK(int) rtManifestAttributeFindMissing2(PRTSTRSPACECORE pStr, v
     /*
      * Ignore this entry?
      */
-    char const * const *ppsz = pEquals->papszIgnoreAttr;
+    char const * const *ppsz = pEquals->papszIgnoreAttrs;
     if (ppsz)
     {
         while (*ppsz)
@@ -374,7 +374,7 @@ static DECLCALLBACK(int) rtManifestAttributeFindMissing2(PRTSTRSPACECORE pStr, v
 
 
 /**
- * @callback_method_impl{FNRTSTRSPACECALLBACK, Finds the first missing.}
+ * @callback_method_impl{FNRTSTRSPACECALLBACK, Finds the first missing}
  */
 static DECLCALLBACK(int) rtManifestEntryFindMissing2(PRTSTRSPACECORE pStr, void *pvUser)
 {
@@ -410,7 +410,7 @@ static DECLCALLBACK(int) rtManifestEntryFindMissing2(PRTSTRSPACECORE pStr, void
 
 
 /**
- * @callback_method_impl{FNRTSTRSPACECALLBACK, Compares attributes.}
+ * @callback_method_impl{FNRTSTRSPACECALLBACK, Compares attributes}
  */
 static DECLCALLBACK(int) rtManifestAttributeCompare(PRTSTRSPACECORE pStr, void *pvUser)
 {
@@ -424,7 +424,7 @@ static DECLCALLBACK(int) rtManifestAttributeCompare(PRTSTRSPACECORE pStr, void *
     /*
      * Ignore this entry?
      */
-    char const * const *ppsz = pEquals->papszIgnoreAttr;
+    char const * const *ppsz = pEquals->papszIgnoreAttrs;
     if (ppsz)
     {
         while (*ppsz)
@@ -488,7 +488,7 @@ static DECLCALLBACK(int) rtManifestAttributeCompare(PRTSTRSPACECORE pStr, void *
 
 
 /**
- * @callback_method_impl{FNRTSTRSPACECALLBACK, Prepare equals operation.}
+ * @callback_method_impl{FNRTSTRSPACECALLBACK, Prepare equals operation}
  */
 DECLINLINE (int) rtManifestEntryCompare2(PRTMANIFESTEQUALS pEquals, PRTMANIFESTENTRY pEntry1, PRTMANIFESTENTRY pEntry2)
 {
@@ -517,7 +517,7 @@ DECLINLINE (int) rtManifestEntryCompare2(PRTMANIFESTEQUALS pEquals, PRTMANIFESTE
 
 
 /**
- * @callback_method_impl{FNRTSTRSPACECALLBACK, Prepare equals operation.}
+ * @callback_method_impl{FNRTSTRSPACECALLBACK, Prepare equals operation}
  */
 static DECLCALLBACK(int) rtManifestEntryCompare(PRTSTRSPACECORE pStr, void *pvUser)
 {
@@ -570,7 +570,7 @@ static DECLCALLBACK(int) rtManifestEntryCompare(PRTSTRSPACECORE pStr, void *pvUs
 
 
 RTDECL(int) RTManifestEqualsEx(RTMANIFEST hManifest1, RTMANIFEST hManifest2, const char * const *papszIgnoreEntries,
-                               const char * const *papszIgnoreAttr, uint32_t fFlags, char *pszError, size_t cbError)
+                               const char * const *papszIgnoreAttrs, uint32_t fFlags, char *pszError, size_t cbError)
 {
     /*
      * Validate input.
@@ -613,7 +613,7 @@ RTDECL(int) RTManifestEqualsEx(RTMANIFEST hManifest1, RTMANIFEST hManifest2, con
     Equals.pThis2               = pThis2;
     Equals.fFlags               = fFlags;
     Equals.papszIgnoreEntries   = papszIgnoreEntries;
-    Equals.papszIgnoreAttr      = papszIgnoreAttr;
+    Equals.papszIgnoreAttrs     = papszIgnoreAttrs;
     Equals.pszError             = pszError;
     Equals.cbError              = cbError;
 
diff --git a/src/VBox/Runtime/common/checksum/x509.cpp b/src/VBox/Runtime/common/checksum/x509.cpp
index 9000f17..c9abd8d 100644
--- a/src/VBox/Runtime/common/checksum/x509.cpp
+++ b/src/VBox/Runtime/common/checksum/x509.cpp
@@ -66,9 +66,9 @@ RT_EXPORT_SYMBOL(RTX509PrepareOpenSSL);
  *
  * @returns IPRT status code.
  *
- * @param   pvBuf           String representation containing X509
+ * @param   pvPem           String representation containing X509
  *                          certificate in PEM format.
- * @param   cbBuf           The amount of data @a pvBuf points to.
+ * @param   cbPem           The amount of data @a pvBuf points to.
  * @param   ppOutCert       Where to store the pointer to the structure where
  *                          the info about X509 certificate will be stored.
  */
diff --git a/src/VBox/Runtime/common/crypto/store-internal.h b/src/VBox/Runtime/common/crypto/store-internal.h
index 89abf65..6f1ec26 100644
--- a/src/VBox/Runtime/common/crypto/store-internal.h
+++ b/src/VBox/Runtime/common/crypto/store-internal.h
@@ -124,7 +124,7 @@ typedef struct RTCRSTOREPROVIDER
     /**
      * Adds a certificate to the store.
      *
-     * @returns IPRT status.
+     * @returns IPRT status code.
      * @retval  VWRN_ALREADY_EXISTS if the certificate is already present and
      *          RTCRCERTCTX_F_ADD_IF_NOT_FOUND was specified.
      * @param   pvProvider      The provider specific data.
diff --git a/src/VBox/Runtime/common/dbg/dbgas.cpp b/src/VBox/Runtime/common/dbg/dbgas.cpp
index 78d3af1..9182c56 100644
--- a/src/VBox/Runtime/common/dbg/dbgas.cpp
+++ b/src/VBox/Runtime/common/dbg/dbgas.cpp
@@ -496,7 +496,7 @@ RT_EXPORT_SYMBOL(RTDbgAsModuleCount);
 /**
  * Common worker for RTDbgAsModuleLink and RTDbgAsModuleLinkSeg.
  *
- * @returns IPRT status.
+ * @returns IPRT status code.
  * @param   pDbgAs          Pointer to the address space instance data.
  * @param   hDbgMod         The module to link.
  * @param   iSeg            The segment to link or NIL if all.
diff --git a/src/VBox/Runtime/common/dbg/dbgcfg.cpp b/src/VBox/Runtime/common/dbg/dbgcfg.cpp
index b3211a1..8207627 100644
--- a/src/VBox/Runtime/common/dbg/dbgcfg.cpp
+++ b/src/VBox/Runtime/common/dbg/dbgcfg.cpp
@@ -450,6 +450,7 @@ static bool rtDbgCfgIsDirAndFixCase(char *pszPath, const char *pszSubDir, bool f
  * @param   pszPath             The path buffer containing an existing
  *                              directory.  RTPATH_MAX in size.
  * @param   pszSubDir           The sub directory to append.
+ * @param   pszSuffix           The suffix to append.
  * @param   fCaseInsensitive    Whether case insensitive searching is required.
  */
 static bool rtDbgCfgIsDirAndFixCase2(char *pszPath, const char *pszSubDir, const char *pszSuffix, bool fCaseInsensitive)
@@ -567,7 +568,7 @@ static bool rtDbgCfgIsFileAndFixCase(char *pszPath, const char *pszFilename, con
 
 
 static int rtDbgCfgTryOpenDir(PRTDBGCFGINT pThis, char *pszPath, PRTPATHSPLIT pSplitFn, uint32_t fFlags,
-                              PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                              PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     int rcRet = VWRN_NOT_FOUND;
     int rc2;
@@ -735,7 +736,7 @@ static int rtDbgCfgUnpackMsCacheFile(PRTDBGCFGINT pThis, char *pszPath, const ch
 static int rtDbgCfgTryDownloadAndOpen(PRTDBGCFGINT pThis, const char *pszServer, char *pszPath,
                                       const char *pszCacheSubDir, const char *pszUuidMappingSubDir,
                                       PRTPATHSPLIT pSplitFn, const char *pszCacheSuffix, uint32_t fFlags,
-                                      PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                                      PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
 #ifdef IPRT_WITH_HTTP
     NOREF(pszUuidMappingSubDir); /** @todo do we bother trying pszUuidMappingSubDir? */
@@ -887,7 +888,7 @@ static int rtDbgCfgCopyFileToCache(PRTDBGCFGINT pThis, char const *pszSrc, const
 static int rtDbgCfgTryOpenCache(PRTDBGCFGINT pThis, char *pszPath, size_t cchCachePath,
                                 const char *pszCacheSubDir, const char *pszUuidMappingSubDir,
                                 PCRTPATHSPLIT pSplitFn, const char *pszCacheSuffix, uint32_t fFlags,
-                                PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                                PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     Assert(pszPath[cchCachePath] == '\0');
 
@@ -976,7 +977,7 @@ static int rtDbgCfgTryOpenCache(PRTDBGCFGINT pThis, char *pszPath, size_t cchCac
 
 static int rtDbgCfgTryOpenList(PRTDBGCFGINT pThis, PRTLISTANCHOR pList, PRTPATHSPLIT pSplitFn, const char *pszCacheSubDir,
                                const char *pszUuidMappingSubDir, uint32_t fFlags, char *pszPath,
-                               PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                               PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     int rcRet = VWRN_NOT_FOUND;
     int rc2 = VINF_SUCCESS;
@@ -1143,7 +1144,7 @@ static int rtDbgCfgTryOpenList(PRTDBGCFGINT pThis, PRTLISTANCHOR pList, PRTPATHS
  */
 static int rtDbgCfgOpenWithSubDir(RTDBGCFG hDbgCfg, const char *pszFilename, const char *pszCacheSubDir,
                                   const char *pszUuidMappingSubDir, uint32_t fFlags,
-                                  PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                                  PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     int rcRet = VINF_SUCCESS;
     int rc2;
@@ -1270,7 +1271,7 @@ static int rtDbgCfgOpenWithSubDir(RTDBGCFG hDbgCfg, const char *pszFilename, con
 
 
 RTDECL(int) RTDbgCfgOpenPeImage(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_t cbImage, uint32_t uTimestamp,
-                                PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                                PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     char szSubDir[32];
     RTStrPrintf(szSubDir, sizeof(szSubDir), "%08X%x", uTimestamp, cbImage);
@@ -1282,7 +1283,7 @@ RTDECL(int) RTDbgCfgOpenPeImage(RTDBGCFG hDbgCfg, const char *pszFilename, uint3
 
 
 RTDECL(int) RTDbgCfgOpenPdb70(RTDBGCFG hDbgCfg, const char *pszFilename, PCRTUUID pUuid, uint32_t uAge,
-                              PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                              PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     char szSubDir[64];
     if (!pUuid)
@@ -1311,7 +1312,7 @@ RTDECL(int) RTDbgCfgOpenPdb70(RTDBGCFG hDbgCfg, const char *pszFilename, PCRTUUI
 
 
 RTDECL(int) RTDbgCfgOpenPdb20(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_t cbImage, uint32_t uTimestamp, uint32_t uAge,
-                              PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                              PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     /** @todo test this! */
     char szSubDir[32];
@@ -1324,7 +1325,7 @@ RTDECL(int) RTDbgCfgOpenPdb20(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_
 
 
 RTDECL(int) RTDbgCfgOpenDbg(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_t cbImage, uint32_t uTimestamp,
-                            PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                            PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     char szSubDir[32];
     RTStrPrintf(szSubDir, sizeof(szSubDir), "%08X%x", uTimestamp, cbImage);
@@ -1336,7 +1337,7 @@ RTDECL(int) RTDbgCfgOpenDbg(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_t
 
 
 RTDECL(int) RTDbgCfgOpenDwo(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_t uCrc32,
-                            PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                            PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     char szSubDir[32];
     RTStrPrintf(szSubDir, sizeof(szSubDir), "%08x", uCrc32);
@@ -1360,7 +1361,7 @@ RTDECL(int) RTDbgCfgOpenDwo(RTDBGCFG hDbgCfg, const char *pszFilename, uint32_t
  */
 static int rtDbgCfgTryOpenDsymBundleInDir(PRTDBGCFGINT pThis, char *pszPath, PRTPATHSPLIT pSplitFn,
                                           const char * const *papszSuffixes, uint32_t fFlags,
-                                          PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                                          PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     int rcRet = VWRN_NOT_FOUND;
     int rc2;
@@ -1449,7 +1450,7 @@ static int rtDbgCfgTryOpenBundleInList(PRTDBGCFGINT pThis, PRTLISTANCHOR pList,
                                        const char * const *papszSuffixes, const char *pszCacheSubDir,
                                        const char *pszCacheSuffix, const char *pszUuidMappingSubDir,
                                        uint32_t fFlags, char *pszPath,
-                                       PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                                       PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     int rcRet = VWRN_NOT_FOUND;
     int rc2;
@@ -1642,7 +1643,7 @@ static int rtDbgCfgConstructUuidMappingSubDir(char *pszSubDir, size_t cbSubDir,
 static int rtDbgCfgOpenBundleFile(RTDBGCFG hDbgCfg, const char *pszImage, const char * const *papszSuffixes,
                                   const char *pszBundleSubDir, PCRTUUID pUuid, const char *pszUuidMapDirName,
                                   const char *pszCacheSuffix, bool fOpenImage,
-                                  PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                                  PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     /*
      * Bundles are directories, means we can forget about sharing code much
@@ -1784,7 +1785,7 @@ static int rtDbgCfgOpenBundleFile(RTDBGCFG hDbgCfg, const char *pszImage, const
 
 
 RTDECL(int) RTDbgCfgOpenDsymBundle(RTDBGCFG hDbgCfg, const char *pszImage, PCRTUUID pUuid,
-                                   PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                                   PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     return rtDbgCfgOpenBundleFile(hDbgCfg, pszImage, g_apszDSymBundleSuffixes,
                                   "Contents" RTPATH_SLASH_STR "Resources" RTPATH_SLASH_STR "DWARF",
@@ -1794,7 +1795,7 @@ RTDECL(int) RTDbgCfgOpenDsymBundle(RTDBGCFG hDbgCfg, const char *pszImage, PCRTU
 
 
 RTDECL(int) RTDbgCfgOpenMachOImage(RTDBGCFG hDbgCfg, const char *pszImage, PCRTUUID pUuid,
-                                   PFNDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
+                                   PFNRTDBGCFGOPEN pfnCallback, void *pvUser1, void *pvUser2)
 {
     return rtDbgCfgOpenBundleFile(hDbgCfg, pszImage, g_apszBundleSuffixes,
                                   "Contents" RTPATH_SLASH_STR "MacOS",
@@ -1932,7 +1933,7 @@ static int rtDbgCfgChangeStringList(PRTDBGCFGINT pThis, RTDBGCFGOP enmOp, const
  * @param   pThis               The config instance.
  * @param   enmOp               The change operation.
  * @param   pszValue            The input value.
- * @param   pszMnemonics        The mnemonics map for this value.
+ * @param   paMnemonics         The mnemonics map for this value.
  * @param   puValue             The value to change.
  */
 static int rtDbgCfgChangeStringU64(PRTDBGCFGINT pThis, RTDBGCFGOP enmOp, const char *pszValue,
@@ -2086,7 +2087,7 @@ RTDECL(int) RTDbgCfgChangeUInt(RTDBGCFG hDbgCfg, RTDBGCFGPROP enmProp, RTDBGCFGO
  * Querys a string list as a single string (semicolon separators).
  *
  * @returns VINF_SUCCESS, VERR_BUFFER_OVERFLOW.
- * @param   pThis               The config instance.
+ * @param   hDbgCfg             The config instance handle.
  * @param   pList               The string list anchor.
  * @param   pszValue            The output buffer.
  * @param   cbValue             The size of the output buffer.
@@ -2125,9 +2126,9 @@ static int rtDbgCfgQueryStringList(RTDBGCFG hDbgCfg, PRTLISTANCHOR pList,
  * Querys the string value of a 64-bit unsigned int.
  *
  * @returns VINF_SUCCESS, VERR_BUFFER_OVERFLOW.
- * @param   pThis               The config instance.
+ * @param   hDbgCfg             The config instance handle.
  * @param   uValue              The value to query.
- * @param   pszMnemonics        The mnemonics map for this value.
+ * @param   paMnemonics         The mnemonics map for this value.
  * @param   pszValue            The output buffer.
  * @param   cbValue             The size of the output buffer.
  */
diff --git a/src/VBox/Runtime/common/dbg/dbgmodcodeview.cpp b/src/VBox/Runtime/common/dbg/dbgmodcodeview.cpp
index 334e77e..663e79a 100644
--- a/src/VBox/Runtime/common/dbg/dbgmodcodeview.cpp
+++ b/src/VBox/Runtime/common/dbg/dbgmodcodeview.cpp
@@ -608,7 +608,7 @@ typedef FNDBGMODCVSUBSECTCALLBACK *PFNDBGMODCVSUBSECTCALLBACK;
 /**
  * Reads CodeView information.
  *
- * @returns IPRT status.
+ * @returns IPRT status code.
  * @param   pThis               The CodeView reader instance.
  * @param   off                 The offset to start reading at, relative to the
  *                              CodeView base header.
@@ -629,7 +629,7 @@ static int rtDbgModCvReadAt(PRTDBGMODCV pThis, uint32_t off, void *pvBuf, size_t
 /**
  * Reads CodeView information into an allocated buffer.
  *
- * @returns IPRT status.
+ * @returns IPRT status code.
  * @param   pThis               The CodeView reader instance.
  * @param   off                 The offset to start reading at, relative to the
  *                              CodeView base header.
@@ -800,7 +800,7 @@ static int rtDbgModCvAddSymbol(PRTDBGMODCV pThis, uint32_t iSeg, uint64_t off, c
  *
  * @returns IPRT status code
  * @param   pThis               The CodeView debug info reader instance.
- * @param   pbSymTab            The symbol table.
+ * @param   pvSymTab            The symbol table.
  * @param   cbSymTab            The size of the symbol table.
  * @param   fFlags              Flags reserved for future exploits, MBZ.
  */
@@ -869,7 +869,7 @@ static int rtDbgModCvSsProcessV4SymTab(PRTDBGMODCV pThis, void const *pvSymTab,
 
 
 /** @callback_method_impl{FNDBGMODCVSUBSECTCALLBACK,
- * Parses kCvSst_GlobalPub, kCvSst_GlobalSym and kCvSst_StaticSym subsections,
+ * Parses kCvSst_GlobalPub\, kCvSst_GlobalSym and kCvSst_StaticSym subsections\,
  * adding symbols it finds to the container.} */
 static DECLCALLBACK(int)
 rtDbgModCvSs_GlobalPub_GlobalSym_StaticSym(PRTDBGMODCV pThis, void const *pvSubSect, size_t cbSubSect, PCRTCVDIRENT32 pDirEnt)
@@ -897,7 +897,7 @@ rtDbgModCvSs_GlobalPub_GlobalSym_StaticSym(PRTDBGMODCV pThis, void const *pvSubS
 
 
 /** @callback_method_impl{FNDBGMODCVSUBSECTCALLBACK,
- * Parses kCvSst_Module subsection, storing the debugging style in pThis.} */
+ * Parses kCvSst_Module subsection\, storing the debugging style in pThis.} */
 static DECLCALLBACK(int)
 rtDbgModCvSs_Module(PRTDBGMODCV pThis, void const *pvSubSect, size_t cbSubSect, PCRTCVDIRENT32 pDirEnt)
 {
@@ -928,7 +928,7 @@ rtDbgModCvSs_Module(PRTDBGMODCV pThis, void const *pvSubSect, size_t cbSubSect,
 
 
 /** @callback_method_impl{FNDBGMODCVSUBSECTCALLBACK,
- * Parses kCvSst_Symbols, kCvSst_PublicSym and kCvSst_AlignSym subsections,
+ * Parses kCvSst_Symbols\, kCvSst_PublicSym and kCvSst_AlignSym subsections\,
  * adding symbols it finds to the container.} */
 static DECLCALLBACK(int)
 rtDbgModCvSs_Symbols_PublicSym_AlignSym(PRTDBGMODCV pThis, void const *pvSubSect, size_t cbSubSect, PCRTCVDIRENT32 pDirEnt)
@@ -2181,8 +2181,9 @@ static DECLCALLBACK(int) rtDbgModCv_Close(PRTDBGMODINT pMod)
 
 
 
-/** @callback_method_impl{FNRTLDRENUMSEGS,
- * Used to add segments from the image.}  */
+/**
+ * @callback_method_impl{FNRTLDRENUMSEGS, Used to add segments from the image}
+ */
 static DECLCALLBACK(int) rtDbgModCvAddSegmentsCallback(RTLDRMOD hLdrMod, PCRTLDRSEG pSeg, void *pvUser)
 {
     PRTDBGMODCV pThis = (PRTDBGMODCV)pvUser;
@@ -2372,10 +2373,10 @@ static int rtDbgModCvCreateInstance(PRTDBGMODINT pDbgMod, RTCVFILETYPE enmFileTy
  * @returns status code.
  * @param   pDbgMod             The debug module instance.  On success pvDbgPriv
  *                              will point to a valid RTDBGMODCV.
+ * @param   enmFileType         The kind of file this is we're probing.
  * @param   hFile               The file with debug info in it.
  * @param   off                 The offset where to expect CV debug info.
  * @param   cb                  The number of bytes of debug info.
- * @param   enmArch             The desired image architecture.
  * @param   pszFilename         The path to the file (for logging).
  */
 static int rtDbgModCvProbeCoff(PRTDBGMODINT pDbgMod, RTCVFILETYPE enmFileType, RTFILE hFile,
@@ -2467,6 +2468,7 @@ static int rtDbgModCvProbeCoff(PRTDBGMODINT pDbgMod, RTCVFILETYPE enmFileType, R
  * @param   hFile               The file with debug info in it.
  * @param   off                 The offset where to expect CV debug info.
  * @param   cb                  The number of bytes of debug info.
+ * @param   enmArch             The desired image architecture.
  * @param   pszFilename         The path to the file (for logging).
  */
 static int rtDbgModCvProbeCommon(PRTDBGMODINT pDbgMod, PRTCVHDR pCvHdr, RTCVFILETYPE enmFileType, RTFILE hFile,
@@ -2547,7 +2549,7 @@ static DECLCALLBACK(int) rtDbgModCvEnumCallback(RTLDRMOD hLdrMod, PCRTLDRDBGINFO
  * Part two of the external file probing.
  *
  * @returns status code.
- * @param   pDbgMod             The debug module instance.  On success pvDbgPriv
+ * @param   pThis               The debug module instance.  On success pvDbgPriv
  *                              will point to a valid RTDBGMODCV.
  * @param   enmFileType         The kind of file this is we're probing.
  * @param   hFile               The file with debug info in it.
diff --git a/src/VBox/Runtime/common/dbg/dbgmoddeferred.cpp b/src/VBox/Runtime/common/dbg/dbgmoddeferred.cpp
index d396739..809587d 100644
--- a/src/VBox/Runtime/common/dbg/dbgmoddeferred.cpp
+++ b/src/VBox/Runtime/common/dbg/dbgmoddeferred.cpp
@@ -514,12 +514,12 @@ static DECLCALLBACK(RTUINTPTR) rtDbgModDeferredImg_ImageSize(PRTDBGMODINT pMod)
 
 
 /** @interface_method_impl{RTDBGMODVTIMG,pfnRvaToSegOffset} */
-static DECLCALLBACK(int) rtDbgModDeferredImg_RvaToSegOffset(PRTDBGMODINT pMod, RTLDRADDR uRva,
+static DECLCALLBACK(int) rtDbgModDeferredImg_RvaToSegOffset(PRTDBGMODINT pMod, RTLDRADDR Rva,
                                                             PRTDBGSEGIDX piSeg, PRTLDRADDR poffSeg)
 {
     int rc = rtDbgModDeferredDoIt(pMod, false /*fForceRetry*/);
     if (RT_SUCCESS(rc))
-        rc = pMod->pImgVt->pfnRvaToSegOffset(pMod, uRva, piSeg, poffSeg);
+        rc = pMod->pImgVt->pfnRvaToSegOffset(pMod, Rva, piSeg, poffSeg);
     return rc;
 }
 
diff --git a/src/VBox/Runtime/common/dbg/dbgmoddwarf.cpp b/src/VBox/Runtime/common/dbg/dbgmoddwarf.cpp
index 9d7070f..dc733d7 100644
--- a/src/VBox/Runtime/common/dbg/dbgmoddwarf.cpp
+++ b/src/VBox/Runtime/common/dbg/dbgmoddwarf.cpp
@@ -590,7 +590,7 @@ typedef RTDWARFLINESTATE *PRTDWARFLINESTATE;
  * @param   pbMember        Pointer to the first byte in the member.
  * @param   pDesc           The attribute descriptor.
  * @param   uForm           The data form.
- * @param   pDataCursor     The cursor to read data from.
+ * @param   pCursor         The cursor to read data from.
  */
 typedef DECLCALLBACK(int) FNRTDWARFATTRDECODER(PRTDWARFDIE pDie, uint8_t *pbMember, PCRTDWARFATTRDESC pDesc,
                                                uint32_t uForm, PRTDWARFCURSOR pCursor);
@@ -1975,7 +1975,7 @@ static uint8_t rtDwarfCursor_GetUByte(PRTDWARFCURSOR pCursor, uint8_t uErrValue)
  * @returns The number. On error RTDWARFCURSOR::rc is set and @a
  *          uErrValue is returned.
  * @param   pCursor             The cursor.
- * @param   uErrValue           What to return on error.
+ * @param   iErrValue           What to return on error.
  */
 static int8_t rtDwarfCursor_GetSByte(PRTDWARFCURSOR pCursor, int8_t iErrValue)
 {
@@ -2136,8 +2136,8 @@ static int rtDwarfCursor_AdvanceToPos(PRTDWARFCURSOR pCursor, uint8_t const *pbN
 /**
  * Check if the cursor is at the end of the current DWARF unit.
  *
- * @retval  @c true if at the end or a cursor error is pending.
- * @retval  @c false if not.
+ * @retval  true if at the end or a cursor error is pending.
+ * @retval  false if not.
  * @param   pCursor             The cursor.
  */
 static bool rtDwarfCursor_IsAtEndOfUnit(PRTDWARFCURSOR pCursor)
@@ -2165,8 +2165,8 @@ static int rtDwarfCursor_SkipUnit(PRTDWARFCURSOR pCursor)
  * Check if the cursor is at the end of the section (or whatever the cursor is
  * processing).
  *
- * @retval  @c true if at the end or a cursor error is pending.
- * @retval  @c false if not.
+ * @retval  true if at the end or a cursor error is pending.
+ * @retval  false if not.
  * @param   pCursor             The cursor.
  */
 static bool rtDwarfCursor_IsAtEnd(PRTDWARFCURSOR pCursor)
@@ -4014,7 +4014,7 @@ static PRTDWARFDIE rtDwarfInfo_NewDie(PRTDBGMODDWARF pThis, PCRTDWARFDIEDESC pDi
  * Free all children of a DIE.
  *
  * @param   pThis               The DWARF instance.
- * @param   pParent             The parent DIE.
+ * @param   pParentDie          The parent DIE.
  */
 static void rtDwarfInfo_FreeChildren(PRTDBGMODDWARF pThis, PRTDWARFDIE pParentDie)
 {
diff --git a/src/VBox/Runtime/common/dbg/dbgmodexports.cpp b/src/VBox/Runtime/common/dbg/dbgmodexports.cpp
index d5c99de..b86c0c1 100644
--- a/src/VBox/Runtime/common/dbg/dbgmodexports.cpp
+++ b/src/VBox/Runtime/common/dbg/dbgmodexports.cpp
@@ -54,8 +54,9 @@ typedef struct RTDBGMODEXPORTARGS
 typedef RTDBGMODEXPORTARGS *PRTDBGMODEXPORTARGS;
 
 
-/** @callback_method_impl{FNRTLDRENUMSYMS,
- *  Copies the symbols over into the container.} */
+/**
+ * @callback_method_impl{FNRTLDRENUMSYMS,
+ *      Copies the symbols over into the container} */
 static DECLCALLBACK(int) rtDbgModExportsAddSymbolCallback(RTLDRMOD hLdrMod, const char *pszSymbol, unsigned uSymbol,
                                                           RTLDRADDR Value, void *pvUser)
 {
@@ -75,7 +76,7 @@ static DECLCALLBACK(int) rtDbgModExportsAddSymbolCallback(RTLDRMOD hLdrMod, cons
 
 
 /** @callback_method_impl{FNRTLDRENUMSEGS,
- *  Copies the segments over into the container.} */
+ *      Copies the segments over into the container} */
 static DECLCALLBACK(int) rtDbgModExportsAddSegmentsCallback(RTLDRMOD hLdrMod, PCRTLDRSEG pSeg, void *pvUser)
 {
     PRTDBGMODEXPORTARGS pArgs = (PRTDBGMODEXPORTARGS)pvUser;
diff --git a/src/VBox/Runtime/common/dbg/dbgmodldr.cpp b/src/VBox/Runtime/common/dbg/dbgmodldr.cpp
index 26dd540..a9b9343 100644
--- a/src/VBox/Runtime/common/dbg/dbgmodldr.cpp
+++ b/src/VBox/Runtime/common/dbg/dbgmodldr.cpp
@@ -123,8 +123,8 @@ static DECLCALLBACK(int) rtDbgModLdr_MapPart(PRTDBGMODINT pMod, uint32_t iDbgInf
 }
 
 
-/** @interface_method_impl{RTDBGMODVTIMG,pfnGetLoadedSize} */
-static DECLCALLBACK(RTUINTPTR) rtDbgModLdr_GetLoadedSize(PRTDBGMODINT pMod)
+/** @interface_method_impl{RTDBGMODVTIMG,pfnImageSize} */
+static DECLCALLBACK(RTUINTPTR) rtDbgModLdr_ImageSize(PRTDBGMODINT pMod)
 {
     PRTDBGMODLDR pThis = (PRTDBGMODLDR)pMod->pvImgPriv;
     return RTLdrSize(pThis->hLdrMod);
@@ -132,11 +132,10 @@ static DECLCALLBACK(RTUINTPTR) rtDbgModLdr_GetLoadedSize(PRTDBGMODINT pMod)
 
 
 /** @interface_method_impl{RTDBGMODVTIMG,pfnRvaToSegOffset} */
-static DECLCALLBACK(int) rtDbgModLdr_RvaToSegOffset(PRTDBGMODINT pMod, RTLDRADDR uRva,
-                                                    PRTDBGSEGIDX piSeg, PRTLDRADDR poffSeg)
+static DECLCALLBACK(int) rtDbgModLdr_RvaToSegOffset(PRTDBGMODINT pMod, RTLDRADDR Rva, PRTDBGSEGIDX piSeg, PRTLDRADDR poffSeg)
 {
     PRTDBGMODLDR pThis = (PRTDBGMODLDR)pMod->pvImgPriv;
-    return RTLdrRvaToSegOffset(pThis->hLdrMod, uRva, piSeg, poffSeg);
+    return RTLdrRvaToSegOffset(pThis->hLdrMod, Rva, piSeg, poffSeg);
 }
 
 
@@ -149,7 +148,7 @@ static DECLCALLBACK(int) rtDbgModLdr_LinkAddressToSegOffset(PRTDBGMODINT pMod, R
 }
 
 
-/** @interface_method_impl{RTDBGMODVTIMG,pfnEnumSegments} */
+/** @interface_method_impl{RTDBGMODVTIMG,pfnEnumSymbols} */
 static DECLCALLBACK(int) rtDbgModLdr_EnumSymbols(PRTDBGMODINT pMod, uint32_t fFlags, RTLDRADDR BaseAddress,
                                                  PFNRTLDRENUMSYMS pfnCallback, void *pvUser)
 {
@@ -215,7 +214,7 @@ DECL_HIDDEN_CONST(RTDBGMODVTIMG) const g_rtDbgModVtImgLdr =
     /*.pfnEnumDbgInfo = */              rtDbgModLdr_EnumDbgInfo,
     /*.pfnEnumSegments = */             rtDbgModLdr_EnumSegments,
     /*.pfnEnumSymbols = */              rtDbgModLdr_EnumSymbols,
-    /*.pfnGetLoadedSize = */            rtDbgModLdr_GetLoadedSize,
+    /*.pfnImageSize = */                rtDbgModLdr_ImageSize,
     /*.pfnLinkAddressToSegOffset = */   rtDbgModLdr_LinkAddressToSegOffset,
     /*.pfnRvaToSegOffset= */            rtDbgModLdr_RvaToSegOffset,
     /*.pfnMapPart = */                  rtDbgModLdr_MapPart,
diff --git a/src/VBox/Runtime/common/err/RTErrConvertFromErrno.cpp b/src/VBox/Runtime/common/err/RTErrConvertFromErrno.cpp
index fb07816..a631929 100644
--- a/src/VBox/Runtime/common/err/RTErrConvertFromErrno.cpp
+++ b/src/VBox/Runtime/common/err/RTErrConvertFromErrno.cpp
@@ -119,7 +119,7 @@ RTDECL(int)  RTErrConvertFromErrno(unsigned uNativeCode)
         case EINVAL:            return VERR_INVALID_PARAMETER;
 #endif
 #ifdef ENFILE
-        case ENFILE:            return VERR_TOO_MANY_OPEN_FILES; /**@Todo fix duplicate error */
+        case ENFILE:            return VERR_TOO_MANY_OPEN_FILES; /** @todo fix duplicate error */
 #endif
 #ifdef EMFILE
         case EMFILE:            return VERR_TOO_MANY_OPEN_FILES;
diff --git a/src/VBox/Runtime/common/err/errmsg.cpp b/src/VBox/Runtime/common/err/errmsg.cpp
index d7288c7..f912a95 100644
--- a/src/VBox/Runtime/common/err/errmsg.cpp
+++ b/src/VBox/Runtime/common/err/errmsg.cpp
@@ -45,7 +45,7 @@
  */
 static const RTSTATUSMSG  g_aStatusMsgs[] =
 {
-#ifndef IPRT_NO_ERROR_DATA
+#if !defined(IPRT_NO_ERROR_DATA) && !defined(DOXYGEN_RUNNING)
 # include "errmsgdata.h"
 #else
     { "Success.", "Success.", "VINF_SUCCESS", 0 },
diff --git a/src/VBox/Runtime/common/err/errmsgxpcom.cpp b/src/VBox/Runtime/common/err/errmsgxpcom.cpp
index 7b156a2..d4341f1 100644
--- a/src/VBox/Runtime/common/err/errmsgxpcom.cpp
+++ b/src/VBox/Runtime/common/err/errmsgxpcom.cpp
@@ -106,7 +106,7 @@ static const RTCOMERRMSG  g_aStatusMsgs[] =
     MY_ERR("NS_ERROR_FILE_ACCESS_DENIED",           "NS_ERROR_FILE_ACCESS_DENIED",                  UINT32_C(0x80520015)),
     MY_ERR("NS_SUCCESS_FILE_DIRECTORY_EMPTY",       "NS_SUCCESS_FILE_DIRECTORY_EMPTY",              UINT32_C(0x00520001)),
 
-#if defined(VBOX) && !defined(IN_GUEST)
+#if defined(VBOX) && !defined(IN_GUEST) && !defined(DOXYGEN_RUNNING)
 # include "errmsgvboxcomdata.h"
 #endif
 
diff --git a/src/VBox/Runtime/common/ldr/ldrMemory.cpp b/src/VBox/Runtime/common/ldr/ldrMemory.cpp
index 350baa9..d7e40fa 100644
--- a/src/VBox/Runtime/common/ldr/ldrMemory.cpp
+++ b/src/VBox/Runtime/common/ldr/ldrMemory.cpp
@@ -75,8 +75,9 @@ typedef struct RTLDRRDRMEM
 typedef RTLDRRDRMEM *PRTLDRRDRMEM;
 
 
-/** @callback_method_impl{FNRTLDRRDRMEMDTOR,
- *  Default destructor - pvUser points to the image memory block.}
+/**
+ * @callback_method_impl{FNRTLDRRDRMEMDTOR,
+ *      Default destructor - pvUser points to the image memory block}
  */
 static DECLCALLBACK(void) rtldrRdrMemDefaultDtor(void *pvUser)
 {
@@ -84,8 +85,9 @@ static DECLCALLBACK(void) rtldrRdrMemDefaultDtor(void *pvUser)
 }
 
 
-/** @callback_method_impl{FNRTLDRRDRMEMREAD,
- *  Default memory reader - pvUser points to the image memory block.}
+/**
+ * @callback_method_impl{FNRTLDRRDRMEMREAD,
+ *      Default memory reader - pvUser points to the image memory block}
  */
 static DECLCALLBACK(int) rtldrRdrMemDefaultReader(void *pvBuf, size_t cb, size_t off, void *pvUser)
 {
@@ -94,7 +96,7 @@ static DECLCALLBACK(int) rtldrRdrMemDefaultReader(void *pvBuf, size_t cb, size_t
 }
 
 
-/** @copydoc RTLDRREADER::pfnRead */
+/** @interface_method_impl{RTLDRREADER,pfnRead} */
 static DECLCALLBACK(int) rtldrRdrMem_Read(PRTLDRREADER pReader, void *pvBuf, size_t cb, RTFOFF off)
 {
     PRTLDRRDRMEM pThis = (PRTLDRRDRMEM)pReader;
@@ -117,7 +119,7 @@ static DECLCALLBACK(int) rtldrRdrMem_Read(PRTLDRREADER pReader, void *pvBuf, siz
 }
 
 
-/** @copydoc RTLDRREADER::pfnTell */
+/** @interface_method_impl{RTLDRREADER,pfnTell} */
 static DECLCALLBACK(RTFOFF) rtldrRdrMem_Tell(PRTLDRREADER pReader)
 {
     PRTLDRRDRMEM pThis = (PRTLDRRDRMEM)pReader;
@@ -125,7 +127,7 @@ static DECLCALLBACK(RTFOFF) rtldrRdrMem_Tell(PRTLDRREADER pReader)
 }
 
 
-/** @copydoc RTLDRREADER::pfnSize */
+/** @interface_method_impl{RTLDRREADER,pfnSize} */
 static DECLCALLBACK(RTFOFF) rtldrRdrMem_Size(PRTLDRREADER pReader)
 {
     PRTLDRRDRMEM pThis = (PRTLDRRDRMEM)pReader;
@@ -133,7 +135,7 @@ static DECLCALLBACK(RTFOFF) rtldrRdrMem_Size(PRTLDRREADER pReader)
 }
 
 
-/** @copydoc RTLDRREADER::pfnLogName */
+/** @interface_method_impl{RTLDRREADER,pfnLogName} */
 static DECLCALLBACK(const char *) rtldrRdrMem_LogName(PRTLDRREADER pReader)
 {
     PRTLDRRDRMEM pThis = (PRTLDRRDRMEM)pReader;
@@ -141,7 +143,7 @@ static DECLCALLBACK(const char *) rtldrRdrMem_LogName(PRTLDRREADER pReader)
 }
 
 
-/** @copydoc RTLDRREADER::pfnMap */
+/** @interface_method_impl{RTLDRREADER,pfnMap} */
 static DECLCALLBACK(int) rtldrRdrMem_Map(PRTLDRREADER pReader, const void **ppvBits)
 {
     PRTLDRRDRMEM pThis = (PRTLDRRDRMEM)pReader;
@@ -178,7 +180,7 @@ static DECLCALLBACK(int) rtldrRdrMem_Map(PRTLDRREADER pReader, const void **ppvB
 }
 
 
-/** @copydoc RTLDRREADER::pfnUnmap */
+/** @interface_method_impl{RTLDRREADER,pfnUnmap} */
 static DECLCALLBACK(int) rtldrRdrMem_Unmap(PRTLDRREADER pReader, const void *pvBits)
 {
     PRTLDRRDRMEM pThis = (PRTLDRRDRMEM)pReader;
@@ -195,7 +197,7 @@ static DECLCALLBACK(int) rtldrRdrMem_Unmap(PRTLDRREADER pReader, const void *pvB
 }
 
 
-/** @copydoc RTLDRREADER::pfnDestroy */
+/** @interface_method_impl{RTLDRREADER,pfnDestroy} */
 static DECLCALLBACK(int) rtldrRdrMem_Destroy(PRTLDRREADER pReader)
 {
     PRTLDRRDRMEM pThis = (PRTLDRRDRMEM)pReader;
diff --git a/src/VBox/Runtime/common/ldr/ldrPE.cpp b/src/VBox/Runtime/common/ldr/ldrPE.cpp
index 55edd4d..ad983fd 100644
--- a/src/VBox/Runtime/common/ldr/ldrPE.cpp
+++ b/src/VBox/Runtime/common/ldr/ldrPE.cpp
@@ -471,7 +471,7 @@ static void rtldrPEFreePart(PRTLDRMODPE pThis, const void *pvBits, void const *p
 }
 
 
-/** @copydoc RTLDROPS::pfnGetImageSize */
+/** @interface_method_impl{RTLDROPS,pfnGetImageSize} */
 static DECLCALLBACK(size_t) rtldrPEGetImageSize(PRTLDRMODINTERNAL pMod)
 {
     PRTLDRMODPE pModPe = (PRTLDRMODPE)pMod;
@@ -568,7 +568,7 @@ static int rtldrPEReadBits(PRTLDRMODPE pModPe)
 }
 
 
-/** @copydoc RTLDROPS::pfnGetBits */
+/** @interface_method_impl{RTLDROPS,pfnGetBits} */
 static DECLCALLBACK(int) rtldrPEGetBits(PRTLDRMODINTERNAL pMod, void *pvBits, RTUINTPTR BaseAddress, PFNRTLDRIMPORT pfnGetImport, void *pvUser)
 {
     PRTLDRMODPE pModPe = (PRTLDRMODPE)pMod;
@@ -876,7 +876,7 @@ static int rtldrPEApplyFixups(PRTLDRMODPE pModPe, const void *pvBitsR, void *pvB
 }
 
 
-/** @copydoc RTLDROPS::pfnRelocate. */
+/** @interface_method_impl{RTLDROPS,pfnRelocate} */
 static DECLCALLBACK(int) rtldrPERelocate(PRTLDRMODINTERNAL pMod, void *pvBits, RTUINTPTR NewBaseAddress, RTUINTPTR OldBaseAddress,
                                          PFNRTLDRIMPORT pfnGetImport, void *pvUser)
 {
@@ -1010,7 +1010,7 @@ static int rtLdrPE_ExportToRva(PRTLDRMODPE pModPe, uint32_t iOrdinal, const char
 }
 
 
-/** @copydoc RTLDROPS::pfnGetSymbolEx. */
+/** @interface_method_impl{RTLDROPS,pfnGetSymbolEx} */
 static DECLCALLBACK(int) rtldrPEGetSymbolEx(PRTLDRMODINTERNAL pMod, const void *pvBits, RTUINTPTR BaseAddress,
                                             uint32_t iOrdinal, const char *pszSymbol, RTUINTPTR *pValue)
 {
@@ -1036,7 +1036,7 @@ static DECLCALLBACK(int) rtldrPEGetSymbolEx(PRTLDRMODINTERNAL pMod, const void *
 }
 
 
-/** @copydoc RTLDROPS::pfnQueryForwarderInfo. */
+/** @interface_method_impl{RTLDROPS,pfnQueryForwarderInfo} */
 static DECLCALLBACK(int) rtldrPE_QueryForwarderInfo(PRTLDRMODINTERNAL pMod, const void *pvBits,  uint32_t iOrdinal,
                                                     const char *pszSymbol, PRTLDRIMPORTINFO pInfo, size_t cbInfo)
 {
@@ -1263,7 +1263,7 @@ static int rtldrPEEnumSymbolsSlow(PRTLDRMODPE pThis, unsigned fFlags, RTUINTPTR
 }
 
 
-/** @copydoc RTLDROPS::pfnEnumSymbols */
+/** @interface_method_impl{RTLDROPS,pfnEnumSymbols} */
 static DECLCALLBACK(int) rtldrPEEnumSymbols(PRTLDRMODINTERNAL pMod, unsigned fFlags, const void *pvBits, RTUINTPTR BaseAddress,
                                             PFNRTLDRENUMSYMS pfnCallback, void *pvUser)
 {
@@ -1368,7 +1368,7 @@ static DECLCALLBACK(int) rtldrPEEnumSymbols(PRTLDRMODINTERNAL pMod, unsigned fFl
 }
 
 
-/** @copydoc RTLDROPS::pfnEnumDbgInfo. */
+/** @interface_method_impl{RTLDROPS,pfnEnumDbgInfo} */
 static DECLCALLBACK(int) rtldrPE_EnumDbgInfo(PRTLDRMODINTERNAL pMod, const void *pvBits,
                                              PFNRTLDRENUMDBG pfnCallback, void *pvUser)
 {
@@ -1557,7 +1557,7 @@ static DECLCALLBACK(int) rtldrPE_EnumDbgInfo(PRTLDRMODINTERNAL pMod, const void
 }
 
 
-/** @copydoc RTLDROPS::pfnEnumSegments. */
+/** @interface_method_impl{RTLDROPS,pfnEnumSegments} */
 static DECLCALLBACK(int) rtldrPE_EnumSegments(PRTLDRMODINTERNAL pMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser)
 {
     PRTLDRMODPE pModPe = (PRTLDRMODPE)pMod;
@@ -1649,7 +1649,7 @@ static DECLCALLBACK(int) rtldrPE_EnumSegments(PRTLDRMODINTERNAL pMod, PFNRTLDREN
 }
 
 
-/** @copydoc RTLDROPS::pfnLinkAddressToSegOffset. */
+/** @interface_method_impl{RTLDROPS,pfnLinkAddressToSegOffset} */
 static DECLCALLBACK(int) rtldrPE_LinkAddressToSegOffset(PRTLDRMODINTERNAL pMod, RTLDRADDR LinkAddress,
                                                         uint32_t *piSeg, PRTLDRADDR poffSeg)
 {
@@ -1689,7 +1689,7 @@ static DECLCALLBACK(int) rtldrPE_LinkAddressToSegOffset(PRTLDRMODINTERNAL pMod,
 }
 
 
-/** @copydoc RTLDROPS::pfnLinkAddressToRva. */
+/** @interface_method_impl{RTLDROPS,pfnLinkAddressToRva} */
 static DECLCALLBACK(int) rtldrPE_LinkAddressToRva(PRTLDRMODINTERNAL pMod, RTLDRADDR LinkAddress, PRTLDRADDR pRva)
 {
     PRTLDRMODPE pModPe = (PRTLDRMODPE)pMod;
@@ -1703,7 +1703,7 @@ static DECLCALLBACK(int) rtldrPE_LinkAddressToRva(PRTLDRMODINTERNAL pMod, RTLDRA
 }
 
 
-/** @copydoc RTLDROPS::pfnSegOffsetToRva. */
+/** @interface_method_impl{RTLDROPS,pfnSegOffsetToRva} */
 static DECLCALLBACK(int) rtldrPE_SegOffsetToRva(PRTLDRMODINTERNAL pMod, uint32_t iSeg, RTLDRADDR offSeg,
                                                 PRTLDRADDR pRva)
 {
@@ -1723,7 +1723,7 @@ static DECLCALLBACK(int) rtldrPE_SegOffsetToRva(PRTLDRMODINTERNAL pMod, uint32_t
 }
 
 
-/** @copydoc RTLDROPS::pfnRvaToSegOffset. */
+/** @interface_method_impl{RTLDROPS,pfnRvaToSegOffset} */
 static DECLCALLBACK(int) rtldrPE_RvaToSegOffset(PRTLDRMODINTERNAL pMod, RTLDRADDR Rva,
                                                 uint32_t *piSeg, PRTLDRADDR poffSeg)
 {
@@ -2775,7 +2775,7 @@ static DECLCALLBACK(int) rtldrPE_HashImage(PRTLDRMODINTERNAL pMod, RTDIGESTTYPE
 }
 
 
-/** @copydoc RTLDROPS::pfnDone */
+/** @interface_method_impl{RTLDROPS,pfnDone}   */
 static DECLCALLBACK(int) rtldrPEDone(PRTLDRMODINTERNAL pMod)
 {
     PRTLDRMODPE pModPe = (PRTLDRMODPE)pMod;
@@ -2788,7 +2788,7 @@ static DECLCALLBACK(int) rtldrPEDone(PRTLDRMODINTERNAL pMod)
 }
 
 
-/** @copydoc RTLDROPS::pfnClose */
+/** @interface_method_impl{RTLDROPS,pfnClose}  */
 static DECLCALLBACK(int) rtldrPEClose(PRTLDRMODINTERNAL pMod)
 {
     PRTLDRMODPE pModPe = (PRTLDRMODPE)pMod;
diff --git a/src/VBox/Runtime/common/ldr/ldrkStuff.cpp b/src/VBox/Runtime/common/ldr/ldrkStuff.cpp
index 80cb474..94008fc 100644
--- a/src/VBox/Runtime/common/ldr/ldrkStuff.cpp
+++ b/src/VBox/Runtime/common/ldr/ldrkStuff.cpp
@@ -227,7 +227,7 @@ static int rtkldrConvertErrorFromIPRT(int rc)
 
 
 
-/** @copydoc KLDRRDROPS::pfnCreate
+/** @interface_method_impl{KLDRRDROPS,pfnCreate}
  * @remark This is a dummy which isn't used. */
 static int      rtkldrRdr_Create(  PPKRDR ppRdr, const char *pszFilename)
 {
@@ -237,7 +237,7 @@ static int      rtkldrRdr_Create(  PPKRDR ppRdr, const char *pszFilename)
 }
 
 
-/** @copydoc KLDRRDROPS::pfnDestroy */
+/** @interface_method_impl{KLDRRDROPS,pfnDestroy} */
 static int      rtkldrRdr_Destroy( PKRDR pRdr)
 {
     PRTKLDRRDR pThis = (PRTKLDRRDR)pRdr;
@@ -247,7 +247,7 @@ static int      rtkldrRdr_Destroy( PKRDR pRdr)
 }
 
 
-/** @copydoc KLDRRDROPS::pfnRead */
+/** @interface_method_impl{KLDRRDROPS,pfnRead} */
 static int      rtkldrRdr_Read(    PKRDR pRdr, void *pvBuf, KSIZE cb, KFOFF off)
 {
     PRTLDRREADER pReader = ((PRTKLDRRDR)pRdr)->pReader;
@@ -256,7 +256,7 @@ static int      rtkldrRdr_Read(    PKRDR pRdr, void *pvBuf, KSIZE cb, KFOFF off)
 }
 
 
-/** @copydoc KLDRRDROPS::pfnAllMap */
+/** @interface_method_impl{KLDRRDROPS,pfnAllMap} */
 static int      rtkldrRdr_AllMap(  PKRDR pRdr, const void **ppvBits)
 {
     PRTLDRREADER pReader = ((PRTKLDRRDR)pRdr)->pReader;
@@ -265,7 +265,7 @@ static int      rtkldrRdr_AllMap(  PKRDR pRdr, const void **ppvBits)
 }
 
 
-/** @copydoc KLDRRDROPS::pfnAllUnmap */
+/** @interface_method_impl{KLDRRDROPS,pfnAllUnmap} */
 static int      rtkldrRdr_AllUnmap(PKRDR pRdr, const void *pvBits)
 {
     PRTLDRREADER pReader = ((PRTKLDRRDR)pRdr)->pReader;
@@ -274,7 +274,7 @@ static int      rtkldrRdr_AllUnmap(PKRDR pRdr, const void *pvBits)
 }
 
 
-/** @copydoc KLDRRDROPS::pfnSize */
+/** @interface_method_impl{KLDRRDROPS,pfnSize} */
 static KFOFF rtkldrRdr_Size(    PKRDR pRdr)
 {
     PRTLDRREADER pReader = ((PRTKLDRRDR)pRdr)->pReader;
@@ -282,7 +282,7 @@ static KFOFF rtkldrRdr_Size(    PKRDR pRdr)
 }
 
 
-/** @copydoc KLDRRDROPS::pfnTell */
+/** @interface_method_impl{KLDRRDROPS,pfnTell} */
 static KFOFF rtkldrRdr_Tell(    PKRDR pRdr)
 {
     PRTLDRREADER pReader = ((PRTKLDRRDR)pRdr)->pReader;
@@ -290,7 +290,7 @@ static KFOFF rtkldrRdr_Tell(    PKRDR pRdr)
 }
 
 
-/** @copydoc KLDRRDROPS::pfnName */
+/** @interface_method_impl{KLDRRDROPS,pfnName} */
 static const char * rtkldrRdr_Name(PKRDR pRdr)
 {
     PRTLDRREADER pReader = ((PRTKLDRRDR)pRdr)->pReader;
@@ -298,7 +298,7 @@ static const char * rtkldrRdr_Name(PKRDR pRdr)
 }
 
 
-/** @copydoc KLDRRDROPS::pfnNativeFH */
+/** @interface_method_impl{KLDRRDROPS,pfnNativeFH} */
 static KIPTR rtkldrRdr_NativeFH(PKRDR pRdr)
 {
     NOREF(pRdr);
@@ -307,7 +307,7 @@ static KIPTR rtkldrRdr_NativeFH(PKRDR pRdr)
 }
 
 
-/** @copydoc KLDRRDROPS::pfnPageSize */
+/** @interface_method_impl{KLDRRDROPS,pfnPageSize} */
 static KSIZE rtkldrRdr_PageSize(PKRDR pRdr)
 {
     NOREF(pRdr);
@@ -315,7 +315,7 @@ static KSIZE rtkldrRdr_PageSize(PKRDR pRdr)
 }
 
 
-/** @copydoc KLDRRDROPS::pfnMap */
+/** @interface_method_impl{KLDRRDROPS,pfnMap} */
 static int      rtkldrRdr_Map(     PKRDR pRdr, void **ppvBase, KU32 cSegments, PCKLDRSEG paSegments, KBOOL fFixed)
 {
     //PRTLDRREADER pReader = ((PRTKLDRRDR)pRdr)->pReader;
@@ -325,7 +325,7 @@ static int      rtkldrRdr_Map(     PKRDR pRdr, void **ppvBase, KU32 cSegments, P
 }
 
 
-/** @copydoc KLDRRDROPS::pfnRefresh */
+/** @interface_method_impl{KLDRRDROPS,pfnRefresh} */
 static int      rtkldrRdr_Refresh( PKRDR pRdr, void *pvBase, KU32 cSegments, PCKLDRSEG paSegments)
 {
     //PRTLDRREADER pReader = ((PRTKLDRRDR)pRdr)->pReader;
@@ -335,7 +335,7 @@ static int      rtkldrRdr_Refresh( PKRDR pRdr, void *pvBase, KU32 cSegments, PCK
 }
 
 
-/** @copydoc KLDRRDROPS::pfnProtect */
+/** @interface_method_impl{KLDRRDROPS,pfnProtect} */
 static int      rtkldrRdr_Protect( PKRDR pRdr, void *pvBase, KU32 cSegments, PCKLDRSEG paSegments, KBOOL fUnprotectOrProtect)
 {
     //PRTLDRREADER pReader = ((PRTKLDRRDR)pRdr)->pReader;
@@ -345,7 +345,7 @@ static int      rtkldrRdr_Protect( PKRDR pRdr, void *pvBase, KU32 cSegments, PCK
 }
 
 
-/** @copydoc KLDRRDROPS::pfnUnmap */
+/** @interface_method_impl{KLDRRDROPS,pfnUnmap} */
 static int      rtkldrRdr_Unmap(   PKRDR pRdr, void *pvBase, KU32 cSegments, PCKLDRSEG paSegments)
 {
     //PRTLDRREADER pReader = ((PRTKLDRRDR)pRdr)->pReader;
@@ -354,7 +354,7 @@ static int      rtkldrRdr_Unmap(   PKRDR pRdr, void *pvBase, KU32 cSegments, PCK
     return -1;
 }
 
-/** @copydoc KLDRRDROPS::pfnDone */
+/** @interface_method_impl{KLDRRDROPS,pfnDone} */
 static void     rtkldrRdr_Done(    PKRDR pRdr)
 {
     NOREF(pRdr);
@@ -393,7 +393,7 @@ extern "C" const KRDROPS g_kLdrRdrFileOps =
 
 
 
-/** @copydoc RTLDROPS::pfnClose */
+/** @interface_method_impl{RTLDROPS,pfnClose} */
 static DECLCALLBACK(int) rtkldr_Close(PRTLDRMODINTERNAL pMod)
 {
     PKLDRMOD pModkLdr = ((PRTLDRMODKLDR)pMod)->pMod;
@@ -402,7 +402,7 @@ static DECLCALLBACK(int) rtkldr_Close(PRTLDRMODINTERNAL pMod)
 }
 
 
-/** @copydoc RTLDROPS::pfnDone */
+/** @interface_method_impl{RTLDROPS,pfnDone} */
 static DECLCALLBACK(int) rtkldr_Done(PRTLDRMODINTERNAL pMod)
 {
     PKLDRMOD pModkLdr = ((PRTLDRMODKLDR)pMod)->pMod;
@@ -442,7 +442,7 @@ static int rtkldrEnumSymbolsWrapper(PKLDRMOD pMod, uint32_t iSymbol,
 }
 
 
-/** @copydoc RTLDROPS::pfnEnumSymbols */
+/** @interface_method_impl{RTLDROPS,pfnEnumSymbols} */
 static DECLCALLBACK(int) rtkldr_EnumSymbols(PRTLDRMODINTERNAL pMod, unsigned fFlags, const void *pvBits, RTUINTPTR BaseAddress,
                                             PFNRTLDRENUMSYMS pfnCallback, void *pvUser)
 {
@@ -464,7 +464,7 @@ static DECLCALLBACK(int) rtkldr_EnumSymbols(PRTLDRMODINTERNAL pMod, unsigned fFl
 }
 
 
-/** @copydoc RTLDROPS::pfnGetImageSize */
+/** @interface_method_impl{RTLDROPS,pfnGetImageSize} */
 static DECLCALLBACK(size_t) rtkldr_GetImageSize(PRTLDRMODINTERNAL pMod)
 {
     PKLDRMOD pModkLdr = ((PRTLDRMODKLDR)pMod)->pMod;
@@ -518,7 +518,7 @@ static int rtkldrGetImportWrapper(PKLDRMOD pMod, uint32_t iImport, uint32_t iSym
 }
 
 
-/** @copydoc RTLDROPS::pfnGetBits */
+/** @interface_method_impl{RTLDROPS,pfnGetBits} */
 static DECLCALLBACK(int) rtkldr_GetBits(PRTLDRMODINTERNAL pMod, void *pvBits, RTUINTPTR BaseAddress,
                                         PFNRTLDRIMPORT pfnGetImport, void *pvUser)
 {
@@ -538,7 +538,7 @@ static DECLCALLBACK(int) rtkldr_GetBits(PRTLDRMODINTERNAL pMod, void *pvBits, RT
 }
 
 
-/** @copydoc RTLDROPS::pfnRelocate */
+/** @interface_method_impl{RTLDROPS,pfnRelocate} */
 static DECLCALLBACK(int) rtkldr_Relocate(PRTLDRMODINTERNAL pMod, void *pvBits, RTUINTPTR NewBaseAddress,
                                          RTUINTPTR OldBaseAddress, PFNRTLDRIMPORT pfnGetImport, void *pvUser)
 {
@@ -558,7 +558,7 @@ static DECLCALLBACK(int) rtkldr_Relocate(PRTLDRMODINTERNAL pMod, void *pvBits, R
 }
 
 
-/** @copydoc RTLDROPS::pfnGetSymbolEx */
+/** @interface_method_impl{RTLDROPS,pfnGetSymbolEx} */
 static DECLCALLBACK(int) rtkldr_GetSymbolEx(PRTLDRMODINTERNAL pMod, const void *pvBits, RTUINTPTR BaseAddress,
                                             uint32_t iOrdinal, const char *pszSymbol, RTUINTPTR *pValue)
 {
@@ -650,7 +650,7 @@ static int rtkldrEnumDbgInfoWrapper(PKLDRMOD pMod, KU32 iDbgInfo, KLDRDBGINFOTYP
 }
 
 
-/** @copydoc RTLDROPS::pfnEnumDbgInfo */
+/** @interface_method_impl{RTLDROPS,pfnEnumDbgInfo} */
 static DECLCALLBACK(int) rtkldr_EnumDbgInfo(PRTLDRMODINTERNAL pMod, const void *pvBits,
                                             PFNRTLDRENUMDBG pfnCallback, void *pvUser)
 {
@@ -668,7 +668,7 @@ static DECLCALLBACK(int) rtkldr_EnumDbgInfo(PRTLDRMODINTERNAL pMod, const void *
 }
 
 
-/** @copydoc RTLDROPS::pfnEnumSegments. */
+/** @interface_method_impl{RTLDROPS,pfnEnumSegments} */
 static DECLCALLBACK(int) rtkldr_EnumSegments(PRTLDRMODINTERNAL pMod, PFNRTLDRENUMSEGS pfnCallback, void *pvUser)
 {
     PRTLDRMODKLDR   pThis      = (PRTLDRMODKLDR)pMod;
@@ -738,7 +738,7 @@ static DECLCALLBACK(int) rtkldr_EnumSegments(PRTLDRMODINTERNAL pMod, PFNRTLDRENU
 }
 
 
-/** @copydoc RTLDROPS::pfnLinkAddressToSegOffset. */
+/** @interface_method_impl{RTLDROPS,pfnLinkAddressToSegOffset} */
 static DECLCALLBACK(int) rtkldr_LinkAddressToSegOffset(PRTLDRMODINTERNAL pMod, RTLDRADDR LinkAddress,
                                                        uint32_t *piSeg, PRTLDRADDR poffSeg)
 {
@@ -762,7 +762,7 @@ static DECLCALLBACK(int) rtkldr_LinkAddressToSegOffset(PRTLDRMODINTERNAL pMod, R
 }
 
 
-/** @copydoc RTLDROPS::pfnLinkAddressToRva. */
+/** @interface_method_impl{RTLDROPS,pfnLinkAddressToRva}. */
 static DECLCALLBACK(int) rtkldr_LinkAddressToRva(PRTLDRMODINTERNAL pMod, RTLDRADDR LinkAddress, PRTLDRADDR pRva)
 {
     PRTLDRMODKLDR   pThis      = (PRTLDRMODKLDR)pMod;
@@ -784,9 +784,8 @@ static DECLCALLBACK(int) rtkldr_LinkAddressToRva(PRTLDRMODINTERNAL pMod, RTLDRAD
 }
 
 
-/** @copydoc RTLDROPS::pfnSegOffsetToRva. */
-static DECLCALLBACK(int) rtkldr_SegOffsetToRva(PRTLDRMODINTERNAL pMod, uint32_t iSeg, RTLDRADDR offSeg,
-                                               PRTLDRADDR pRva)
+/** @interface_method_impl{RTLDROPS,pfnSegOffsetToRva} */
+static DECLCALLBACK(int) rtkldr_SegOffsetToRva(PRTLDRMODINTERNAL pMod, uint32_t iSeg, RTLDRADDR offSeg, PRTLDRADDR pRva)
 {
     PRTLDRMODKLDR pThis = (PRTLDRMODKLDR)pMod;
 
@@ -805,9 +804,8 @@ static DECLCALLBACK(int) rtkldr_SegOffsetToRva(PRTLDRMODINTERNAL pMod, uint32_t
 }
 
 
-/** @copydoc RTLDROPS::pfnRvaToSegOffset. */
-static DECLCALLBACK(int) rtkldr_RvaToSegOffset(PRTLDRMODINTERNAL pMod, RTLDRADDR Rva,
-                                               uint32_t *piSeg, PRTLDRADDR poffSeg)
+/** @interface_method_impl{RTLDROPS,pfnRvaToSegOffset} */
+static DECLCALLBACK(int) rtkldr_RvaToSegOffset(PRTLDRMODINTERNAL pMod, RTLDRADDR Rva, uint32_t *piSeg, PRTLDRADDR poffSeg)
 {
     PRTLDRMODKLDR   pThis      = (PRTLDRMODKLDR)pMod;
     uint32_t const  cSegments  = pThis->pMod->cSegments;
@@ -829,7 +827,7 @@ static DECLCALLBACK(int) rtkldr_RvaToSegOffset(PRTLDRMODINTERNAL pMod, RTLDRADDR
 }
 
 
-/** @copydoc RTLDROPS::pfnReadDbgInfo. */
+/** @interface_method_impl{RTLDROPS,pfnReadDbgInfo} */
 static DECLCALLBACK(int) rtkldr_ReadDbgInfo(PRTLDRMODINTERNAL pMod, uint32_t iDbgInfo, RTFOFF off, size_t cb, void *pvBuf)
 {
     PRTLDRMODKLDR   pThis = (PRTLDRMODKLDR)pMod;
diff --git a/src/VBox/Runtime/common/log/log.cpp b/src/VBox/Runtime/common/log/log.cpp
index 3247806..4631e26 100644
--- a/src/VBox/Runtime/common/log/log.cpp
+++ b/src/VBox/Runtime/common/log/log.cpp
@@ -3065,13 +3065,13 @@ static void rtR0LogLoggerExFallback(uint32_t fDestFlags, uint32_t fFlags, PRTLOG
  * vprintf like function for writing to the default log.
  *
  * @param   pszFormat   Printf like format string.
- * @param   args        Optional arguments as specified in pszFormat.
+ * @param   va          Optional arguments as specified in pszFormat.
  *
  * @remark The API doesn't support formatting of floating point numbers at the moment.
  */
-RTDECL(void) RTLogPrintfV(const char *pszFormat, va_list args)
+RTDECL(void) RTLogPrintfV(const char *pszFormat, va_list va)
 {
-    RTLogLoggerV(NULL, pszFormat, args);
+    RTLogLoggerV(NULL, pszFormat, va);
 }
 RT_EXPORT_SYMBOL(RTLogPrintfV);
 
@@ -3145,7 +3145,7 @@ static int rtlogFileOpen(PRTLOGGER pLogger, char *pszErrorMsg, size_t cchErrorMs
  * Used by the rtlogFlush() function as well as RTLogCreateExV.
  *
  * @param   pLogger     The logger instance to update. NULL is not allowed!
- * @param   uTimeSlit   Current time slot (for tikme based rotation).
+ * @param   uTimeSlot   Current time slot (for tikme based rotation).
  * @param   fFirst      Flag whether this is the beginning of logging, i.e.
  *                      called from RTLogCreateExV.  Prevents pfnPhase from
  *                      being called.
diff --git a/src/VBox/Runtime/common/math/bignum.cpp b/src/VBox/Runtime/common/math/bignum.cpp
index 309d541..23c405f 100644
--- a/src/VBox/Runtime/common/math/bignum.cpp
+++ b/src/VBox/Runtime/common/math/bignum.cpp
@@ -2075,8 +2075,8 @@ DECLINLINE(bool) rtBigNumKnuthD4_MulSub(PRTBIGNUMELEMENT pauDividendJ, PRTBIGNUM
  *
  * @param   pauDividendJ    Pointer to the j-th (normalized) dividend element.
  *                          Will access up to two elements prior to this.
- * @param   uDivZ           The last element in the (normalized) divisor.
- * @param   uDivY           The penultimate element in the (normalized) divisor.
+ * @param   pauDivisor      The last element in the (normalized) divisor.
+ * @param   cDivisor        The penultimate element in the (normalized) divisor.
  */
 DECLINLINE(void) rtBigNumKnuthD6_AddBack(PRTBIGNUMELEMENT pauDividendJ, PRTBIGNUMELEMENT pauDivisor, uint32_t cDivisor)
 {
diff --git a/src/VBox/Runtime/common/misc/aiomgr.cpp b/src/VBox/Runtime/common/misc/aiomgr.cpp
index 0175655..4e14b8e 100644
--- a/src/VBox/Runtime/common/misc/aiomgr.cpp
+++ b/src/VBox/Runtime/common/misc/aiomgr.cpp
@@ -243,7 +243,7 @@ static int rtAioMgrReqsEnqueue(PRTAIOMGRINT pThis, PRTAIOMGRFILEINT pFile,
  *
  * @returns TRUE if there are still requests pending on the current manager for this endpoint.
  *          FALSE otherwise.
- * @param   pEndpointRemove    The endpoint to remove.
+ * @param   pFile           The endpoint to remove.
  */
 static bool rtAioMgrFileRemove(PRTAIOMGRFILEINT pFile)
 {
diff --git a/src/VBox/Runtime/common/misc/lockvalidator.cpp b/src/VBox/Runtime/common/misc/lockvalidator.cpp
index 8c36cba..1d53e12 100644
--- a/src/VBox/Runtime/common/misc/lockvalidator.cpp
+++ b/src/VBox/Runtime/common/misc/lockvalidator.cpp
@@ -396,9 +396,7 @@ static const char *rtLockValidatorNameThreadHandle(RTTHREAD volatile *phThread)
 /**
  * Launch a simple assertion like complaint w/ panic.
  *
- * @param   pszFile             Where from - file.
- * @param   iLine               Where from - line.
- * @param   pszFunction         Where from - function.
+ * @param   SRC_POS             The source position where call is being made from. 
  * @param   pszWhat             What we're complaining about.
  * @param   ...                 Format arguments.
  */
@@ -1126,9 +1124,8 @@ RTDECL(int) RTLockValidatorClassCreate(PRTLOCKVALCLASS phClass, bool fAutodidact
  * @returns Class handle with a reference that is automatically consumed by the
  *          first retainer.  NIL_RTLOCKVALCLASS if we run into trouble.
  *
- * @param   pszFile             The source position of the call, file.
- * @param   iLine               The source position of the call, line.
- * @param   pszFunction         The source position of the call, function.
+ * @param   SRC_POS             The source position where call is being made from.
+ *                              Use RT_SRC_POS when possible.  Optional.
  * @param   pszNameFmt          Class name format string, optional (NULL).  Max
  *                              length is 32 bytes.
  * @param   ...                 Format string arguments.
@@ -1204,7 +1201,7 @@ DECLINLINE(uint32_t) rtLockValidatorClassRelease(RTLOCKVALCLASSINT *pClass)
 /**
  * Destroys a class once there are not more references to it.
  *
- * @param   Class               The class.
+ * @param   pClass              The class.
  */
 static void rtLockValidatorClassDestroy(RTLOCKVALCLASSINT *pClass)
 {
@@ -2207,6 +2204,9 @@ DECL_FORCE_INLINE(bool) rtLockValidatorIsClassOrderOk(RTLOCKVALCLASSINT *pClass1
  * @param   pThreadSelf         The current thread.
  * @param   pRec                The lock record.
  * @param   pSrcPos             The source position of the locking operation.
+ * @param   pFirstBadClass      The first bad class.
+ * @param   pFirstBadRec        The first bad lock record.
+ * @param   pFirstBadDown       The next record on the lock stack.
  */
 static int rtLockValidatorStackCheckLockingOrder2(RTLOCKVALCLASSINT * const pClass, uint32_t const uSubClass,
                                                   PRTTHREADINT pThreadSelf, PRTLOCKVALRECUNION const pRec,
diff --git a/src/VBox/Runtime/common/net/netaddrstr2.cpp b/src/VBox/Runtime/common/net/netaddrstr2.cpp
index 9aa6aa7..0529a63 100644
--- a/src/VBox/Runtime/common/net/netaddrstr2.cpp
+++ b/src/VBox/Runtime/common/net/netaddrstr2.cpp
@@ -126,6 +126,32 @@ RTDECL(bool) RTNetIsIPv4AddrStr(const char *pcszAddr)
 RT_EXPORT_SYMBOL(RTNetIsIPv4AddrStr);
 
 
+RTDECL(bool) RTNetStrIsIPv4AddrAny(const char *pcszAddr)
+{
+    RTNETADDRIPV4 addrIPv4;
+    char *pszNext;
+    int rc;
+
+    if (pcszAddr == NULL)
+        return false;
+
+    pcszAddr = RTStrStripL(pcszAddr);
+    rc = rtNetStrToIPv4AddrEx(pcszAddr, &addrIPv4, &pszNext);
+    if (rc != VINF_SUCCESS)
+        return false;
+
+    pszNext = RTStrStripL(pszNext);
+    if (*pszNext != '\0')
+        return false;
+
+    if (addrIPv4.u != 0u)       /* INADDR_ANY? */
+        return false;
+
+    return true;
+}
+RT_EXPORT_SYMBOL(RTNetStrIsIPv4AddrAny);
+
+
 static int rtNetStrToHexGroup(const char *pcszValue, char **ppszNext,
                               uint16_t *pu16)
 {
@@ -407,3 +433,28 @@ RTDECL(bool) RTNetIsIPv6AddrStr(const char *pcszAddr)
     return true;
 }
 RT_EXPORT_SYMBOL(RTNetIsIPv6AddrStr);
+
+
+RTDECL(bool) RTNetStrIsIPv6AddrAny(const char *pcszAddr)
+{
+    RTNETADDRIPV6 addrIPv6;
+    char *pszZone, *pszNext;
+    int rc;
+
+    if (pcszAddr == NULL)
+        return false;
+
+    pcszAddr = RTStrStripL(pcszAddr);
+    rc = rtNetStrToIPv6AddrEx(pcszAddr, &addrIPv6, &pszZone, &pszNext);
+    if (rc != VINF_SUCCESS && rc != VWRN_TRAILING_SPACES)
+        return false;
+
+    if (pszZone != NULL)
+        return false;
+
+    if (addrIPv6.s.Lo != 0 || addrIPv6.s.Hi != 0) /* in6addr_any? */
+        return false;
+
+    return true;
+}
+RT_EXPORT_SYMBOL(RTNetStrIsIPv6AddrAny);
diff --git a/src/VBox/Runtime/common/path/RTPathGlob.cpp b/src/VBox/Runtime/common/path/RTPathGlob.cpp
index 7435151..1d56396 100644
--- a/src/VBox/Runtime/common/path/RTPathGlob.cpp
+++ b/src/VBox/Runtime/common/path/RTPathGlob.cpp
@@ -237,6 +237,57 @@ typedef struct RTPATHGLOB
 typedef RTPATHGLOB *PRTPATHGLOB;
 
 
+/**
+ * Matching variable lookup table.
+ * Currently so small we don't bother sorting it and doing binary lookups.
+ */
+typedef struct RTPATHMATCHVAR
+{
+    /** The variable name. */
+    const char     *pszName;
+    /** The variable name length. */
+    uint16_t        cchName;
+    /** Only available as the verify first component.  */
+    bool            fFirstOnly;
+
+    /**
+     * Queries a given variable value.
+     *
+     * @returns IPRT status code.
+     * @retval  VERR_BUFFER_OVERFLOW
+     * @retval  VERR_TRY_AGAIN if the caller should skip this value item and try the
+     *          next one instead (e.g. env var not present).
+     * @retval  VINF_EOF when retrieving the last one, if possible.
+     * @retval  VERR_EOF when @a iItem is past the item space.
+     *
+     * @param   iItem       The variable value item to retrieve. (A variable may
+     *                      have more than one value, e.g. 'BothProgramFile' on a
+     *                      64-bit system or 'Path'.)
+     * @param   pszBuf      Where to return the value.
+     * @param   cbBuf       The buffer size.
+     * @param   pcchValue   Where to return the length of the return string.
+     * @param   pCache      Pointer to the path matching cache.  May speed up
+     *                      enumerating PATH items and similar.
+     */
+    DECLCALLBACKMEMBER(int, pfnQuery)(uint32_t iItem, char *pszBuf, size_t cbBuf, size_t *pcchValue, PRTPATHMATCHCACHE pCache);
+
+    /**
+     * Matching method, optional.
+     *
+     * @returns IPRT status code.
+     * @retval  VINF_SUCCESS on match.
+     * @retval  VERR_MISMATCH on mismatch.
+     *
+     * @param   pszMatch    String to match with (not terminated).
+     * @param   cchMatch    The length of what we match with.
+     * @param   fIgnoreCase Whether to ignore case or not when comparing.
+     * @param   pcchMatched Where to return the length of the match (value length).
+     */
+    DECLCALLBACKMEMBER(int, pfnMatch)(const char *pchMatch, size_t cchMatch, bool fIgnoreCase, size_t *pcchMatched);
+
+} RTPATHMATCHVAR;
+
+
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
@@ -324,8 +375,11 @@ static int rtPathGlobExecRecursiveGeneric(PRTPATHGLOB pGlob, size_t offPath, uin
 
 /**
  * Implements mapping a glob variable to multiple environment variable values.
+ *
+ * @param   a_Name              The variable name.
  * @param   a_apszVarNames      Assumes to be a global variable that RT_ELEMENTS
  *                              works correctly on.
+ * @param   a_cbMaxValue        The max expected value size.
  */
 #define RTPATHMATCHVAR_MULTIPLE_ENVVARS(a_Name, a_apszVarNames, a_cbMaxValue) \
     static DECLCALLBACK(int) RT_CONCAT(rtPathVarQuery_,a_Name)(uint32_t iItem, char *pszBuf, size_t cbBuf, size_t *pcchValue, \
@@ -399,7 +453,7 @@ RTPATHMATCHVAR_MULTIPLE_ENVVARS(WinAllCommonProgramFiles, a_apszWinCommonProgram
 
 
 /**
- * @interface_method_impl{RTPATHMATCHVAR::pfnQuery, Enumerates the PATH}.
+ * @interface_method_impl{RTPATHMATCHVAR,pfnQuery, Enumerates the PATH}
  */
 static DECLCALLBACK(int) rtPathVarQuery_Path(uint32_t iItem, char *pszBuf, size_t cbBuf, size_t *pcchValue,
                                              PRTPATHMATCHCACHE pCache)
@@ -487,7 +541,7 @@ static DECLCALLBACK(int) rtPathVarQuery_Path(uint32_t iItem, char *pszBuf, size_
 
 #if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
 /**
- * @interface_method_impl{RTPATHMATCHVAR::pfnQuery,
+ * @interface_method_impl{RTPATHMATCHVAR,pfnQuery,
  *      The system drive letter + colon.}.
  */
 static DECLCALLBACK(int) rtPathVarQuery_DosSystemDrive(uint32_t iItem, char *pszBuf, size_t cbBuf, size_t *pcchValue,
@@ -539,7 +593,7 @@ static DECLCALLBACK(int) rtPathVarQuery_DosSystemDrive(uint32_t iItem, char *psz
 
 #ifdef RT_OS_WINDOWS
 /**
- * @interface_method_impl{RTPATHMATCHVAR::pfnQuery,
+ * @interface_method_impl{RTPATHMATCHVAR,pfnQuery,
  *      The system root directory (C:\Windows).}.
  */
 static DECLCALLBACK(int) rtPathVarQuery_WinSystemRoot(uint32_t iItem, char *pszBuf, size_t cbBuf, size_t *pcchValue,
@@ -564,54 +618,11 @@ static DECLCALLBACK(int) rtPathVarQuery_WinSystemRoot(uint32_t iItem, char *pszB
 #undef RTPATHMATCHVAR_DOUBLE_ENVVAR
 
 /**
- * Matching variable lookup table.
- * Currently so small we don't bother sorting it and doing binary lookups.
+ *
+ *
+ * @author bird (9/29/2015)
  */
-static struct RTPATHMATCHVAR
-{
-    /** The variable name. */
-    const char     *pszName;
-    /** The variable name length. */
-    uint16_t        cchName;
-    /** Only available as the verify first component.  */
-    bool            fFirstOnly;
-
-    /**
-     * Queries a given variable value.
-     *
-     * @returns IPRT status code.
-     * @retval  VERR_BUFFER_OVERFLOW
-     * @retval  VERR_TRY_AGAIN if the caller should skip this value item and try the
-     *          next one instead (e.g. env var not present).
-     * @retval  VINF_EOF when retrieving the last one, if possible.
-     * @retval  VERR_EOF when @a iItem is past the item space.
-     *
-     * @param   iItem       The variable value item to retrieve. (A variable may
-     *                      have more than one value, e.g. 'BothProgramFile' on a
-     *                      64-bit system or 'Path'.)
-     * @param   pszBuf      Where to return the value.
-     * @param   cbBuf       The buffer size.
-     * @param   pcchValue   Where to return the length of the return string.
-     * @param   pCache      Pointer to the path matching cache.  May speed up
-     *                      enumerating PATH items and similar.
-     */
-    DECLCALLBACKMEMBER(int, pfnQuery)(uint32_t iItem, char *pszBuf, size_t cbBuf, size_t *pcchValue, PRTPATHMATCHCACHE pCache);
-
-    /**
-     * Matching method, optional.
-     *
-     * @returns IPRT status code.
-     * @retval  VINF_SUCCESS on match.
-     * @retval  VERR_MISMATCH on mismatch.
-     *
-     * @param   pszMatch    String to match with (not terminated).
-     * @param   cchMatch    The length of what we match with.
-     * @param   fIgnoreCase Whether to ignore case or not when comparing.
-     * @param   pcchMatched Where to return the length of the match (value length).
-     */
-    DECLCALLBACKMEMBER(int, pfnMatch)(const char *pchMatch, size_t cchMatch, bool fIgnoreCase, size_t *pcchMatched);
-
-} const g_aVariables[] =
+static RTPATHMATCHVAR const g_aVariables[] =
 {
     { RT_STR_TUPLE("Arch"),                     false,  rtPathVarQuery_Arch, rtPathVarMatch_Arch },
     { RT_STR_TUPLE("Bits"),                     false,  rtPathVarQuery_Bits, rtPathVarMatch_Bits },
@@ -987,6 +998,8 @@ static int rtPathMatchExec(const char *pchInput, size_t cchInput, PCRTPATHMATCHC
  * @returns IPRT status code.
  * @param   pchPattern          The pattern to compile.
  * @param   cchPattern          The length of the pattern.
+ * @param   fIgnoreCase         Whether to ignore case or not when doing the
+ *                              actual matching later on.
  * @param   pAllocator          Pointer to the instruction allocator & result
  *                              array.  The compiled "program" starts at
  *                              PRTPATHMATCHALLOC::paInstructions[PRTPATHMATCHALLOC::iNext]
@@ -1650,7 +1663,9 @@ DECLINLINE(bool) rtPathGlobExecIsMatchFinalWithFileMode(PRTPATHGLOB pGlob, RTFMO
  *
  * @param   pGlob               The glob instance data.
  * @param   offPath             The current path offset/length.
- * @param   iComp               The current component.
+ * @param   iStarStarComp       The star-star component index.
+ * @param   offStarStarPath     The offset of the star-star component in the
+ *                              pattern path.
  */
 DECL_NO_INLINE(static, int) rtPathGlobExecRecursiveStarStar(PRTPATHGLOB pGlob, size_t offPath, uint32_t iStarStarComp,
                                                             size_t offStarStarPath)
diff --git a/src/VBox/Runtime/common/string/strformat.cpp b/src/VBox/Runtime/common/string/strformat.cpp
index bb51874..1369429 100644
--- a/src/VBox/Runtime/common/string/strformat.cpp
+++ b/src/VBox/Runtime/common/string/strformat.cpp
@@ -554,7 +554,7 @@ RTDECL(size_t) RTStrFormatV(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, PFNSTRF
                             cchWidth -= cchStr;
                             while (cchStr-- > 0)
                             {
-/**@todo #ifndef IN_RC*/
+/**@todo \#ifndef IN_RC*/
 #ifdef IN_RING3
                                 RTUNICP Cp;
                                 RTUtf16GetCpEx(&pwszStr, &Cp);
@@ -588,7 +588,7 @@ RTDECL(size_t) RTStrFormatV(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput, PFNSTRF
                             cchWidth -= cchStr;
                             while (cchStr-- > 0)
                             {
-/**@todo #ifndef IN_RC*/
+/**@todo \#ifndef IN_RC*/
 #ifdef IN_RING3
                                 char szUtf8[8]; /* Cp=0x7fffffff -> 6 bytes. */
                                 char *pszEnd = RTStrPutCp(szUtf8, *puszStr++);
diff --git a/src/VBox/Runtime/common/string/uniread.cpp b/src/VBox/Runtime/common/string/uniread.cpp
index 15e7998..f0c304c 100644
--- a/src/VBox/Runtime/common/string/uniread.cpp
+++ b/src/VBox/Runtime/common/string/uniread.cpp
@@ -711,8 +711,9 @@ static int YesNoMaybePropertyValueInv(char **ppszNextField)
 /**
  * Applies a property to a code point.
  *
- * @param   StartCP     The code point.
- * @param   pszProperty The property name.
+ * @param   StartCP         The code point.
+ * @param   pszProperty     The property name.
+ * @param   pszNextField    The next field.
  */
 static void ApplyProperty(RTUNICP StartCP, const char *pszProperty, char *pszNextField)
 {
diff --git a/src/VBox/Runtime/common/string/utf-8.cpp b/src/VBox/Runtime/common/string/utf-8.cpp
index 142ec1b..e47d906 100644
--- a/src/VBox/Runtime/common/string/utf-8.cpp
+++ b/src/VBox/Runtime/common/string/utf-8.cpp
@@ -869,7 +869,7 @@ static int rtLatin1CalcUtf8Length(const char *psz, size_t cchIn, size_t *pcch)
  * Recodes a Latin-1 string as UTF-8.
  *
  * @returns iprt status code.
- * @param   psz         The Latin-1 string.
+ * @param   pszIn       The Latin-1 string.
  * @param   cchIn       The number of characters to process from psz. The recoding
  *                      will stop when cch or '\\0' is reached.
  * @param   psz         Where to store the UTF-8 string.
diff --git a/src/VBox/Runtime/common/time/timesup.cpp b/src/VBox/Runtime/common/time/timesup.cpp
index a5d6e61..9e9ada7 100644
--- a/src/VBox/Runtime/common/time/timesup.cpp
+++ b/src/VBox/Runtime/common/time/timesup.cpp
@@ -111,7 +111,7 @@ static PFNTIMENANOTSINTERNAL    g_pfnWorker = rtTimeNanoTSInternalRediscover;
 
 
 /**
- * @interface_method_impl{RTTIMENANOTSDATA, pfnBad}
+ * @interface_method_impl{RTTIMENANOTSDATA,pfnBad}
  */
 static DECLCALLBACK(void) rtTimeNanoTSInternalBitch(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev,
                                                     uint64_t u64PrevNanoTS)
@@ -126,7 +126,7 @@ static DECLCALLBACK(void) rtTimeNanoTSInternalBitch(PRTTIMENANOTSDATA pData, uin
 }
 
 /**
- * @interface_method_impl{RTTIMENANOTSDATA, pfnBadCpuIndex}
+ * @interface_method_impl{RTTIMENANOTSDATA,pfnBadCpuIndex}
  */
 static DECLCALLBACK(uint64_t) rtTimeNanoTSInternalBadCpuIndex(PRTTIMENANOTSDATA pData, uint16_t idApic,
                                                               uint16_t iCpuSet, uint16_t iGipCpu)
diff --git a/src/VBox/Runtime/generic/http-curl.cpp b/src/VBox/Runtime/generic/http-curl.cpp
index a743175..e1ce7b6 100644
--- a/src/VBox/Runtime/generic/http-curl.cpp
+++ b/src/VBox/Runtime/generic/http-curl.cpp
@@ -149,6 +149,10 @@ typedef struct RTHTTPINTERNAL
     int                 rcOutput;
     /** Download size hint set by the progress callback. */
     uint64_t            cbDownloadHint;
+    /** Callback called during download. */
+    PRTHTTPDOWNLDPROGRCALLBACK pfnDownloadProgress;
+    /** User pointer parameter for pfnDownloadProgress. */
+    void               *pvDownloadProgressUser;
 } RTHTTPINTERNAL;
 /** Pointer to an internal HTTP client instance. */
 typedef RTHTTPINTERNAL *PRTHTTPINTERNAL;
@@ -176,7 +180,7 @@ typedef char          ** (* PFNLIBPROXYFACTORYGETPROXIES)(PLIBPROXYFACTORY, cons
 /*********************************************************************************************************************************
 *   Defined Constants And Macros                                                                                                 *
 *********************************************************************************************************************************/
-/** @def RTHTTP_MAX_MEM_DOWNLOAD
+/** @def RTHTTP_MAX_MEM_DOWNLOAD_SIZE
  * The max size we are allowed to download to a memory buffer.
  *
  * @remarks The minus 1 is for the trailing zero terminator we always add.
@@ -597,7 +601,13 @@ static bool rtHttpUrlInNoProxyList(const char *pszUrl, const char *pszNoProxyLis
 /**
  * Configures a proxy given a "URL" like specification.
  *
- * Format is [<scheme>"://"][<userid>[@<password>]:]<server>[":"<port>].
+ * The format is:
+ * @verbatim
+ *      [<scheme>"://"][<userid>[@<password>]:]<server>[":"<port>]
+ * @endverbatim
+ *
+ * Where the scheme gives the type of proxy server we're dealing with rather
+ * than the protocol of the external server we wish to talk to.
  *
  * @returns IPRT status code.
  * @param   pThis               The HTTP client instance.
@@ -713,7 +723,9 @@ static int rtHttpConfigureProxyForUrlFromEnv(PRTHTTPINTERNAL pThis, const char *
         rc = RTEnvGetEx(RTENV_DEFAULT, pszNoProxyVar, pszNoProxy, cchActual + _1K, NULL);
     }
     AssertMsg(rc == VINF_SUCCESS || rc == VERR_ENV_VAR_NOT_FOUND, ("rc=%Rrc\n", rc));
-    bool fNoProxy = rtHttpUrlInNoProxyList(pszUrl, RTStrStrip(pszNoProxy));
+    bool fNoProxy = false;
+    if (RT_SUCCESS(rc))
+        fNoProxy = rtHttpUrlInNoProxyList(pszUrl, RTStrStrip(pszNoProxy));
     RTMemTmpFree(pszNoProxyFree);
     if (!fNoProxy)
     {
@@ -2114,6 +2126,9 @@ static int rtHttpProgress(void *pData, double rdTotalDownload, double rdDownload
 
     pThis->cbDownloadHint = (uint64_t)rdTotalDownload;
 
+    if (pThis->pfnDownloadProgress)
+        pThis->pfnDownloadProgress(pThis, pThis->pvDownloadProgressUser, (uint64_t)rdTotalDownload, (uint64_t)rdDownloaded);
+
     return pThis->fAbort ? 1 : 0;
 }
 
@@ -2203,6 +2218,16 @@ static int rtHttpApplySettings(PRTHTTPINTERNAL pThis, const char *pszUrl)
         pThis->fHaveSetUserAgent = true;
     }
 
+    /*
+     * Use GET by default.
+     */
+    rcCurl = curl_easy_setopt(pThis->pCurl, CURLOPT_NOBODY, 0L);
+    if (CURL_FAILURE(rcCurl))
+        return VERR_HTTP_CURL_ERROR;
+    rcCurl = curl_easy_setopt(pThis->pCurl, CURLOPT_HEADER, 0L);
+    if (CURL_FAILURE(rcCurl))
+        return VERR_HTTP_CURL_ERROR;
+
     return VINF_SUCCESS;
 }
 
@@ -2274,6 +2299,7 @@ static size_t rtHttpWriteData(void *pvBuf, size_t cbUnit, size_t cUnits, void *p
  * @returns IPRT status code.
  * @param   hHttp               The HTTP/HTTPS client instance.
  * @param   pszUrl              The URL.
+ * @param   fNoBody             Set to suppress the body.
  * @param   ppvResponse         Where to return the pointer to the allocated
  *                              response data (RTMemFree).  There will always be
  *                              an zero terminator char after the response, that
@@ -2283,7 +2309,7 @@ static size_t rtHttpWriteData(void *pvBuf, size_t cbUnit, size_t cUnits, void *p
  * @remarks We ASSUME the API user doesn't do concurrent GETs in different
  *          threads, because that will probably blow up!
  */
-static int rtHttpGetToMem(RTHTTP hHttp, const char *pszUrl, uint8_t **ppvResponse, size_t *pcb)
+static int rtHttpGetToMem(RTHTTP hHttp, const char *pszUrl, bool fNoBody, uint8_t **ppvResponse, size_t *pcb)
 {
     PRTHTTPINTERNAL pThis = hHttp;
     RTHTTP_VALID_RETURN(pThis);
@@ -2315,6 +2341,13 @@ static int rtHttpGetToMem(RTHTTP hHttp, const char *pszUrl, uint8_t **ppvRespons
         int rcCurl = curl_easy_setopt(pThis->pCurl, CURLOPT_WRITEFUNCTION, &rtHttpWriteData);
         if (!CURL_FAILURE(rcCurl))
             rcCurl = curl_easy_setopt(pThis->pCurl, CURLOPT_WRITEDATA, (void *)pThis);
+        if (fNoBody)
+        {
+            if (!CURL_FAILURE(rcCurl))
+                rcCurl = curl_easy_setopt(pThis->pCurl, CURLOPT_NOBODY, 1L);
+            if (!CURL_FAILURE(rcCurl))
+                rcCurl = curl_easy_setopt(pThis->pCurl, CURLOPT_HEADER, 1L);
+        }
         if (!CURL_FAILURE(rcCurl))
         {
             /*
@@ -2348,7 +2381,26 @@ RTR3DECL(int) RTHttpGetText(RTHTTP hHttp, const char *pszUrl, char **ppszNotUtf8
     Log(("RTHttpGetText: hHttp=%p pszUrl=%s\n", hHttp, pszUrl));
     uint8_t *pv;
     size_t   cb;
-    int rc = rtHttpGetToMem(hHttp, pszUrl, &pv, &cb);
+    int rc = rtHttpGetToMem(hHttp, pszUrl, false /*fNoBody*/, &pv, &cb);
+    if (RT_SUCCESS(rc))
+    {
+        if (pv) /* paranoia */
+            *ppszNotUtf8 = (char *)pv;
+        else
+            *ppszNotUtf8 = (char *)RTMemDup("", 1);
+    }
+    else
+        *ppszNotUtf8 = NULL;
+    return rc;
+}
+
+
+RTR3DECL(int) RTHttpGetHeaderText(RTHTTP hHttp, const char *pszUrl, char **ppszNotUtf8)
+{
+    Log(("RTHttpGetText: hHttp=%p pszUrl=%s\n", hHttp, pszUrl));
+    uint8_t *pv;
+    size_t   cb;
+    int rc = rtHttpGetToMem(hHttp, pszUrl, true /*fNoBody*/, &pv, &cb);
     if (RT_SUCCESS(rc))
     {
         if (pv) /* paranoia */
@@ -2359,6 +2411,7 @@ RTR3DECL(int) RTHttpGetText(RTHTTP hHttp, const char *pszUrl, char **ppszNotUtf8
     else
         *ppszNotUtf8 = NULL;
     return rc;
+
 }
 
 
@@ -2371,7 +2424,14 @@ RTR3DECL(void) RTHttpFreeResponseText(char *pszNotUtf8)
 RTR3DECL(int) RTHttpGetBinary(RTHTTP hHttp, const char *pszUrl, void **ppvResponse, size_t *pcb)
 {
     Log(("RTHttpGetBinary: hHttp=%p pszUrl=%s\n", hHttp, pszUrl));
-    return rtHttpGetToMem(hHttp, pszUrl, (uint8_t **)ppvResponse, pcb);
+    return rtHttpGetToMem(hHttp, pszUrl, false /*fNoBody*/, (uint8_t **)ppvResponse, pcb);
+}
+
+
+RTR3DECL(int) RTHttpGetHeaderBinary(RTHTTP hHttp, const char *pszUrl, void **ppvResponse, size_t *pcb)
+{
+    Log(("RTHttpGetBinary: hHttp=%p pszUrl=%s\n", hHttp, pszUrl));
+    return rtHttpGetToMem(hHttp, pszUrl, true /*fNoBody*/, (uint8_t **)ppvResponse, pcb);
 }
 
 
@@ -2453,3 +2513,13 @@ RTR3DECL(int) RTHttpGetFile(RTHTTP hHttp, const char *pszUrl, const char *pszDst
     return rc;
 }
 
+
+RTR3DECL(int) RTHttpSetDownloadProgressCallback(RTHTTP hHttp, PRTHTTPDOWNLDPROGRCALLBACK pfnDownloadProgress, void *pvUser)
+{
+    PRTHTTPINTERNAL pThis = hHttp;
+    RTHTTP_VALID_RETURN(pThis);
+
+    pThis->pfnDownloadProgress = pfnDownloadProgress;
+    pThis->pvDownloadProgressUser = pvUser;
+    return VINF_SUCCESS;
+}
diff --git a/src/VBox/Runtime/include/internal/dbgmod.h b/src/VBox/Runtime/include/internal/dbgmod.h
index 1529354..25e5695 100644
--- a/src/VBox/Runtime/include/internal/dbgmod.h
+++ b/src/VBox/Runtime/include/internal/dbgmod.h
@@ -232,7 +232,7 @@ typedef struct RTDBGMODVTIMG
      *
      * @returns IPRT status code.
      * @param   pMod            Pointer to the module structure.
-     * @param   enmLdrProp      The property to query.
+     * @param   enmProp         The property to query.
      * @param   pvBuf           Pointer to the return buffer.
      * @param   cbBuf           The size of the return buffer.
      * @sa      RTLdrQueryProp
@@ -523,10 +523,10 @@ typedef RTDBGMODVTDBG const *PCRTDBGMODVTDBG;
  *
  * @returns IPRT status code. On success the necessary method tables should be
  *          installed in @a pMod.
- * @param   pMod            Pointer to the debug module structure.
+ * @param   pDbgMod         Pointer to the debug module structure.
  * @param   pDeferred       The deferred load data.
  */
-typedef DECLCALLBACK(int) FNRTDBGMODDEFERRED(PRTDBGMODINT pMod, struct RTDBGMODDEFERRED *pDeferred);
+typedef DECLCALLBACK(int) FNRTDBGMODDEFERRED(PRTDBGMODINT pDbgMod, struct RTDBGMODDEFERRED *pDeferred);
 /** Pointer to a deferred loading callback. */
 typedef FNRTDBGMODDEFERRED *PFNRTDBGMODDEFERRED;
 
diff --git a/src/VBox/Runtime/include/internal/ldr.h b/src/VBox/Runtime/include/internal/ldr.h
index a1a9db7..356f511 100644
--- a/src/VBox/Runtime/include/internal/ldr.h
+++ b/src/VBox/Runtime/include/internal/ldr.h
@@ -357,7 +357,7 @@ typedef struct RTLDROPS
      * @retval  VERR_NOT_FOUND the property was not found in the module.
      *
      * @param   pMod            Pointer to the loader module structure.
-     * @param   enmLdrProp      The property to query (valid).
+     * @param   enmProp         The property to query (valid).
      * @param   pvBits          Pointer to the bits returned by
      *                          RTLDROPS::pfnGetBits(), optional.
      * @param   pvBuf           Pointer to the input / output buffer. This is valid.
@@ -394,7 +394,7 @@ typedef struct RTLDROPS
      * Calculate the image hash according the image signing rules.
      *
      * @returns IPRT status code.
-     * @param   hLdrMod         The module handle.
+     * @param   pMod            The module handle.
      * @param   enmDigest       Which kind of digest.
      * @param   pszDigest       Where to store the image digest.
      * @param   cbDigest        Size of the buffer @a pszDigest points at.
diff --git a/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp b/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
index 26036be..033dad0 100644
--- a/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
+++ b/src/VBox/Runtime/r0drv/darwin/dbgkrnlinfo-r0drv-darwin.cpp
@@ -44,6 +44,8 @@ RT_C_DECLS_END
 # include <sys/systm.h>
 # include <vfs/vfs_support.h>
 /*# include <miscfs/specfs/specdev.h>*/
+#else
+# include <stdio.h> /* for printf */
 #endif
 
 #include "internal/iprt.h"
@@ -1031,20 +1033,14 @@ static void rtR0DbgKrnlDarwinDtor(RTDBGKRNLINFOINT *pThis)
 }
 
 
-RTR0DECL(int) RTR0DbgKrnlInfoOpen(PRTDBGKRNLINFO phKrnlInfo, uint32_t fFlags)
+static int rtR0DbgKrnlDarwinOpen(PRTDBGKRNLINFO phKrnlInfo, const char *pszKernelFile)
 {
-    AssertPtrReturn(phKrnlInfo, VERR_INVALID_POINTER);
-    *phKrnlInfo = NIL_RTDBGKRNLINFO;
-    AssertReturn(!fFlags, VERR_INVALID_PARAMETER);
-
     RTDBGKRNLINFOINT *pThis = (RTDBGKRNLINFOINT *)RTMemAllocZ(sizeof(*pThis));
     if (!pThis)
         return VERR_NO_MEMORY;
     pThis->hFile = NIL_RTFILE;
 
-    int rc = RTFileOpen(&pThis->hFile, "/mach_kernel", RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_WRITE);
-    if (rc == VERR_FILE_NOT_FOUND)
-        rc = RTFileOpen(&pThis->hFile, "/System/Library/Kernels/kernel", RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_WRITE);
+    int rc = RTFileOpen(&pThis->hFile, pszKernelFile, RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_WRITE);
     if (RT_SUCCESS(rc))
         rc = rtR0DbgKrnlDarwinLoadFileHeaders(pThis);
     if (RT_SUCCESS(rc))
@@ -1077,6 +1073,66 @@ RTR0DECL(int) RTR0DbgKrnlInfoOpen(PRTDBGKRNLINFO phKrnlInfo, uint32_t fFlags)
 }
 
 
+RTR0DECL(int) RTR0DbgKrnlInfoOpen(PRTDBGKRNLINFO phKrnlInfo, uint32_t fFlags)
+{
+    AssertPtrReturn(phKrnlInfo, VERR_INVALID_POINTER);
+    *phKrnlInfo = NIL_RTDBGKRNLINFO;
+    AssertReturn(!fFlags, VERR_INVALID_PARAMETER);
+
+    /*
+     * Go thru likely kernel locations
+     *
+     * Note! Check the OS X version and reorder the list?
+     * Note! We should try fish kcsuffix out of bootargs or somewhere one day.
+     */
+    static bool s_fFirstCall = true;
+    struct
+    {
+        const char *pszLocation;
+        int         rc;
+    } aKernels[] =
+    {
+        { "/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;
+    for (uint32_t i = 0; i < RT_ELEMENTS(aKernels); i++)
+    {
+        aKernels[i].rc = rc = rtR0DbgKrnlDarwinOpen(phKrnlInfo, aKernels[i].pszLocation);
+        if (RT_SUCCESS(rc))
+        {
+            if (s_fFirstCall)
+            {
+                printf("RTR0DbgKrnlInfoOpen: Using kernel file '%s'\n", aKernels[i].pszLocation);
+                s_fFirstCall = false;
+            }
+            return rc;
+        }
+    }
+
+    /*
+     * Failed.
+     */
+    /* Pick the best error code. */
+    for (uint32_t i = 0; rc == VERR_FILE_NOT_FOUND && i < RT_ELEMENTS(aKernels); i++)
+        if (aKernels[i].rc != VERR_FILE_NOT_FOUND)
+            rc = aKernels[i].rc;
+
+    /* Bitch about it. */
+    printf("RTR0DbgKrnlInfoOpen: failed to find matching kernel file! rc=%d\n", rc);
+    if (s_fFirstCall)
+    {
+        for (uint32_t i = 0; i < RT_ELEMENTS(aKernels); i++)
+            printf("RTR0DbgKrnlInfoOpen: '%s' -> %d\n", aKernels[i].pszLocation, aKernels[i].rc);
+        s_fFirstCall = false;
+    }
+
+    return rc;
+}
+
+
 RTR0DECL(uint32_t) RTR0DbgKrnlInfoRetain(RTDBGKRNLINFO hKrnlInfo)
 {
     RTDBGKRNLINFOINT *pThis = hKrnlInfo;
diff --git a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c
index 5be48dc..60896e9 100644
--- a/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c
+++ b/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c
@@ -755,7 +755,7 @@ DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb,
 /**
  * Worker for rtR0MemObjLinuxAllocPhysSub that tries one allocation strategy.
  *
- * @returns IPRT status.
+ * @returns IPRT status code.
  * @param   ppMemLnx    Where to
  * @param   enmType     The object type.
  * @param   cb          The size of the allocation.
@@ -807,7 +807,7 @@ static int rtR0MemObjLinuxAllocPhysSub2(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJTY
 /**
  * Worker for rtR0MemObjNativeAllocPhys and rtR0MemObjNativeAllocPhysNC.
  *
- * @returns IPRT status.
+ * @returns IPRT status code.
  * @param   ppMem       Where to store the memory object pointer on success.
  * @param   enmType     The object type.
  * @param   cb          The size of the allocation.
diff --git a/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp b/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp
index 5798f53..49070ba 100644
--- a/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp
+++ b/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp
@@ -135,8 +135,8 @@ static void rtR0NtGetOsVersionInfo(PRTNTSDBOSVER pOsVerInfo)
 /**
  * Tries a set against the current kernel.
  *
- * @retval @c true if it matched up, global variables are updated.
- * @retval @c false otherwise (no globals updated).
+ * @retval  true if it matched up, global variables are updated.
+ * @retval  false otherwise (no globals updated).
  * @param   pSet                The data set.
  * @param   pbPrcb              Pointer to the processor control block.
  * @param   pszVendor           Pointer to the processor vendor string.
diff --git a/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp b/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp
index d299ca1..b235a3c 100644
--- a/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp
+++ b/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp
@@ -302,14 +302,15 @@ static ULONG_PTR __stdcall rtmpNtOnSpecificBroadcastIpiWrapper(ULONG_PTR uUserCt
  * Internal worker for the RTMpOn* APIs using KeIpiGenericCall.
  *
  * @returns VINF_SUCCESS.
- * @param   pfnWorker   The callback.
- * @param   pvUser1     User argument 1.
- * @param   pvUser2     User argument 2.
- * @param   idCpu       First CPU to match, ultimately specific to the
- *                      pfnNativeWrapper used.
- * @param   idCpu2      Second CPU to match, ultimately specific to the
- *                      pfnNativeWrapper used.
- * @param   pcHits      Where to return the number of this. Optional.
+ * @param   pfnWorker           The callback.
+ * @param   pvUser1             User argument 1.
+ * @param   pvUser2             User argument 2.
+ * @param   pfnNativeWrapper    The wrapper between the NT and IPRT callbacks.
+ * @param   idCpu               First CPU to match, ultimately specific to the
+ *                              pfnNativeWrapper used.
+ * @param   idCpu2              Second CPU to match, ultimately specific to the
+ *                              pfnNativeWrapper used.
+ * @param   pcHits              Where to return the number of this. Optional.
  */
 static int rtMpCallUsingBroadcastIpi(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2,
                                      PKIPI_BROADCAST_WORKER pfnNativeWrapper, RTCPUID idCpu, RTCPUID idCpu2,
diff --git a/src/VBox/Runtime/r0drv/nt/ntBldSymDb.cpp b/src/VBox/Runtime/r0drv/nt/ntBldSymDb.cpp
index 60c06a9..8743aee 100644
--- a/src/VBox/Runtime/r0drv/nt/ntBldSymDb.cpp
+++ b/src/VBox/Runtime/r0drv/nt/ntBldSymDb.cpp
@@ -173,7 +173,7 @@ static const char *figureCStructName(MYSTRUCT const *pStruct)
 /**
  * Returns the name we wish to use in the C code.
  * @returns Member name.
- * @param   pStruct             The member descriptor.
+ * @param   pMember             The member descriptor.
  */
 static const char *figureCMemberName(MYMEMBER const *pMember)
 {
@@ -338,6 +338,8 @@ static void generateHeader(PRTSTREAM pOut)
  *
  * @returns Fully complained exit code.
  * @param   pOsVerInfo      The OS version info.
+ * @param   enmArch         The NT architecture of the incoming PDB.
+ * @param   pszPdb          The PDB file name.
  */
 static RTEXITCODE saveStructures(PRTNTSDBOSVER pOsVerInfo, MYARCH enmArch, const char *pszPdb)
 {
@@ -986,6 +988,7 @@ static bool isInterestingName(const char *pszName, size_t cchName)
  * @param   pszDir              Pointer to the directory buffer.
  * @param   cchDir              The length of pszDir in pszDir.
  * @param   pDirEntry           Pointer to the directory buffer.
+ * @param   iLogDepth           The logging depth.
  */
 static RTEXITCODE processDirSub(char *pszDir, size_t cchDir, PRTDIRENTRYEX pDirEntry, int iLogDepth)
 {
@@ -1147,7 +1150,7 @@ int main(int argc, char **argv)
                 break;
 
             case 'V':
-                RTPrintf("$Revision: 102121 $");
+                RTPrintf("$Revision: 103594 $");
                 break;
 
             case 'h':
diff --git a/src/VBox/Runtime/r0drv/solaris/semeventwait-r0drv-solaris.h b/src/VBox/Runtime/r0drv/solaris/semeventwait-r0drv-solaris.h
index 6c98e4b..459091e 100644
--- a/src/VBox/Runtime/r0drv/solaris/semeventwait-r0drv-solaris.h
+++ b/src/VBox/Runtime/r0drv/solaris/semeventwait-r0drv-solaris.h
@@ -100,7 +100,6 @@ typedef RTR0SEMSOLWAIT *PRTR0SEMSOLWAIT;
  * @param   pWait               The wait structure.
  * @param   fFlags              The wait flags.
  * @param   uTimeout            The timeout.
- * @param   pWaitQueue          The wait queue head.
  */
 DECLINLINE(int) rtR0SemSolWaitInit(PRTR0SEMSOLWAIT pWait, uint32_t fFlags, uint64_t uTimeout)
 {
diff --git a/src/VBox/Runtime/r3/init.cpp b/src/VBox/Runtime/r3/init.cpp
index 9236e88..415179e 100644
--- a/src/VBox/Runtime/r3/init.cpp
+++ b/src/VBox/Runtime/r3/init.cpp
@@ -368,7 +368,7 @@ static void rtR3SigChildHandler(int iSignal)
 /**
  * rtR3Init worker.
  */
-static int rtR3InitBody(uint32_t fFlags, int cArgs, char ***papszArgs, const char *pszProgramPath)
+static int rtR3InitBody(uint32_t fFlags, int cArgs, char ***ppapszArgs, const char *pszProgramPath)
 {
     /*
      * Early native initialization.
@@ -447,7 +447,7 @@ static int rtR3InitBody(uint32_t fFlags, int cArgs, char ***papszArgs, const cha
     rc = rtR3InitProgramPath(pszProgramPath);
     AssertLogRelMsgRCReturn(rc, ("Failed to get executable directory path, rc=%Rrc!\n", rc), rc);
 
-    rc = rtR3InitArgv(fFlags, cArgs, papszArgs);
+    rc = rtR3InitArgv(fFlags, cArgs, ppapszArgs);
     AssertLogRelMsgRCReturn(rc, ("Failed to convert the arguments, rc=%Rrc!\n", rc), rc);
 
 #if !defined(IN_GUEST) && !defined(RT_NO_GIP)
@@ -549,7 +549,7 @@ static int rtR3InitBody(uint32_t fFlags, int cArgs, char ***papszArgs, const cha
  * @param   pszProgramPath  The program path.  Pass NULL if we're to figure it
  *                          out ourselves.
  */
-static int rtR3Init(uint32_t fFlags, int cArgs, char ***papszArgs, const char *pszProgramPath)
+static int rtR3Init(uint32_t fFlags, int cArgs, char ***ppapszArgs, const char *pszProgramPath)
 {
     /* no entry log flow, because prefixes and thread may freak out. */
     Assert(!(fFlags & ~(  RTR3INIT_FLAGS_DLL
@@ -589,7 +589,7 @@ static int rtR3Init(uint32_t fFlags, int cArgs, char ***papszArgs, const char *p
         if (pszProgramPath)
             rc = rtR3InitProgramPath(pszProgramPath);
         if (RT_SUCCESS(rc))
-            rc = rtR3InitArgv(fFlags, cArgs, papszArgs);
+            rc = rtR3InitArgv(fFlags, cArgs, ppapszArgs);
         return rc;
     }
     ASMAtomicWriteBool(&g_fInitializing, true);
@@ -597,7 +597,7 @@ static int rtR3Init(uint32_t fFlags, int cArgs, char ***papszArgs, const char *p
     /*
      * Do the initialization.
      */
-    int rc = rtR3InitBody(fFlags, cArgs, papszArgs, pszProgramPath);
+    int rc = rtR3InitBody(fFlags, cArgs, ppapszArgs, pszProgramPath);
     if (RT_FAILURE(rc))
     {
         /* failure */
@@ -613,10 +613,10 @@ static int rtR3Init(uint32_t fFlags, int cArgs, char ***papszArgs, const char *p
 }
 
 
-RTR3DECL(int) RTR3InitExe(int cArgs, char ***papszArgs, uint32_t fFlags)
+RTR3DECL(int) RTR3InitExe(int cArgs, char ***ppapszArgs, uint32_t fFlags)
 {
     Assert(!(fFlags & RTR3INIT_FLAGS_DLL));
-    return rtR3Init(fFlags, cArgs, papszArgs, NULL);
+    return rtR3Init(fFlags, cArgs, ppapszArgs, NULL);
 }
 
 
@@ -634,10 +634,10 @@ RTR3DECL(int) RTR3InitDll(uint32_t fFlags)
 }
 
 
-RTR3DECL(int) RTR3InitEx(uint32_t iVersion, uint32_t fFlags, int cArgs, char ***papszArgs, const char *pszProgramPath)
+RTR3DECL(int) RTR3InitEx(uint32_t iVersion, uint32_t fFlags, int cArgs, char ***ppapszArgs, const char *pszProgramPath)
 {
     AssertReturn(iVersion == RTR3INIT_VER_CUR, VERR_NOT_SUPPORTED);
-    return rtR3Init(fFlags, cArgs, papszArgs, pszProgramPath);
+    return rtR3Init(fFlags, cArgs, ppapszArgs, pszProgramPath);
 }
 
 
diff --git a/src/VBox/Runtime/r3/isofs.cpp b/src/VBox/Runtime/r3/isofs.cpp
index a387636..83f8999 100644
--- a/src/VBox/Runtime/r3/isofs.cpp
+++ b/src/VBox/Runtime/r3/isofs.cpp
@@ -524,12 +524,11 @@ static int rtIsoFsGetDirectoryRecord(PRTISOFSFILE pFile, const char *pszPath,
 }
 
 
-RTR3DECL(int) RTIsoFsGetFileInfo(PRTISOFSFILE pFile, const char *pszPath,
-                                 uint32_t *pcbOffset, size_t *pcbLength)
+RTR3DECL(int) RTIsoFsGetFileInfo(PRTISOFSFILE pFile, const char *pszPath, uint32_t *poffInIso, size_t *pcbLength)
 {
     AssertPtrReturn(pFile, VERR_INVALID_PARAMETER);
     AssertPtrReturn(pszPath, VERR_INVALID_PARAMETER);
-    AssertPtrReturn(pcbOffset, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(poffInIso, VERR_INVALID_PARAMETER);
 
     PRTISOFSDIRRECORD pDirRecord;
     int rc = rtIsoFsGetDirectoryRecord(pFile, pszPath, &pDirRecord);
@@ -544,7 +543,7 @@ RTR3DECL(int) RTIsoFsGetFileInfo(PRTISOFSFILE pFile, const char *pszPath,
                               &pFileRecord);
         if (RT_SUCCESS(rc))
         {
-            *pcbOffset = pFileRecord->extent_location * RTISOFS_SECTOR_SIZE;
+            *poffInIso = pFileRecord->extent_location * RTISOFS_SECTOR_SIZE;
             *pcbLength = pFileRecord->extent_data_length;
             rtIsoFsFreeDirectoryRecord(pFileRecord);
         }
@@ -554,23 +553,22 @@ RTR3DECL(int) RTIsoFsGetFileInfo(PRTISOFSFILE pFile, const char *pszPath,
 }
 
 
-RTR3DECL(int) RTIsoFsExtractFile(PRTISOFSFILE pFile, const char *pszSource,
-                                 const char *pszDest)
+RTR3DECL(int) RTIsoFsExtractFile(PRTISOFSFILE pFile, const char *pszSrcPath, const char *pszDstPath)
 {
     AssertPtrReturn(pFile, VERR_INVALID_PARAMETER);
-    AssertPtrReturn(pszSource, VERR_INVALID_PARAMETER);
-    AssertPtrReturn(pszDest, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pszSrcPath, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pszDstPath, VERR_INVALID_PARAMETER);
 
     uint32_t cbOffset;
     size_t cbLength;
-    int rc = RTIsoFsGetFileInfo(pFile, pszSource, &cbOffset, &cbLength);
+    int rc = RTIsoFsGetFileInfo(pFile, pszSrcPath, &cbOffset, &cbLength);
     if (RT_SUCCESS(rc))
     {
         rc = RTFileSeek(pFile->file, cbOffset, RTFILE_SEEK_BEGIN, NULL);
         if (RT_SUCCESS(rc))
         {
             RTFILE fileDest;
-            rc = RTFileOpen(&fileDest, pszDest, RTFILE_O_CREATE | RTFILE_O_WRITE | RTFILE_O_DENY_WRITE);
+            rc = RTFileOpen(&fileDest, pszDstPath, RTFILE_O_CREATE | RTFILE_O_WRITE | RTFILE_O_DENY_WRITE);
             if (RT_SUCCESS(rc))
             {
                 size_t cbToRead, cbRead, cbWritten;
diff --git a/src/VBox/Runtime/r3/nt/internal-r3-nt.h b/src/VBox/Runtime/r3/nt/internal-r3-nt.h
index feb83e3..5bdebb1 100644
--- a/src/VBox/Runtime/r3/nt/internal-r3-nt.h
+++ b/src/VBox/Runtime/r3/nt/internal-r3-nt.h
@@ -48,7 +48,7 @@
  *
  * @returns @c true if equal, @c false if not.
  * @param   pwsz1               The first string.
- * @param   cb1                 The length of the first string, in bytes.
+ * @param   cch1                The length of the first string, in bytes.
  * @param   psz2                The second string.
  * @param   cch2                The length of the second string.
  */
diff --git a/src/VBox/Runtime/r3/nt/pathint-nt.cpp b/src/VBox/Runtime/r3/nt/pathint-nt.cpp
index d06b262..d90a165 100644
--- a/src/VBox/Runtime/r3/nt/pathint-nt.cpp
+++ b/src/VBox/Runtime/r3/nt/pathint-nt.cpp
@@ -46,6 +46,7 @@ static char const g_szPrefix[]    = "\\??\\";
 
 /**
  * Handles the pass thru case for UTF-8 input.
+ * Win32 path uses "\\?\" prefix which is converted to "\??\" NT prefix.
  *
  * @returns IPRT status code.
  * @param   pNtName             Where to return the NT name.
@@ -56,14 +57,15 @@ static int rtNtPathFromWinUtf8PassThru(struct _UNICODE_STRING *pNtName, PHANDLE
 {
     PRTUTF16 pwszPath = NULL;
     size_t   cwcLen;
-    int rc = RTStrToUtf16Ex(pszPath + 1, RTSTR_MAX, &pwszPath, 0, &cwcLen);
+    int rc = RTStrToUtf16Ex(pszPath, RTSTR_MAX, &pwszPath, 0, &cwcLen);
     if (RT_SUCCESS(rc))
     {
         if (cwcLen < _32K - 1)
         {
             pwszPath[0] = '\\';
-            pwszPath[1] = '.';
-            pwszPath[2] = '\\';
+            pwszPath[1] = '?';
+            pwszPath[2] = '?';
+            pwszPath[3] = '\\';
 
             pNtName->Buffer = pwszPath;
             pNtName->Length = (uint16_t)(cwcLen * sizeof(RTUTF16));
@@ -81,6 +83,7 @@ static int rtNtPathFromWinUtf8PassThru(struct _UNICODE_STRING *pNtName, PHANDLE
 
 /**
  * Handles the pass thru case for UTF-16 input.
+ * Win32 path uses "\\?\" prefix which is converted to "\??\" NT prefix.
  *
  * @returns IPRT status code.
  * @param   pNtName             Where to return the NT name.
@@ -91,10 +94,6 @@ static int rtNtPathFromWinUtf8PassThru(struct _UNICODE_STRING *pNtName, PHANDLE
 static int rtNtPathFromWinUtf16PassThru(struct _UNICODE_STRING *pNtName, PHANDLE phRootDir,
                                         PCRTUTF16 pwszWinPath, size_t cwcWinPath)
 {
-    /* Drop a character because: \\?\ -> \.\ */
-    pwszWinPath++;
-    cwcWinPath--;
-
     /* Check length and allocate memory for it. */
     int rc;
     if (cwcWinPath < _32K - 1)
@@ -104,9 +103,10 @@ static int rtNtPathFromWinUtf16PassThru(struct _UNICODE_STRING *pNtName, PHANDLE
         {
             /* Intialize the path. */
             pwszNtPath[0] = '\\';
-            pwszNtPath[1] = '.';
-            pwszNtPath[2] = '\\';
-            memcpy(pwszNtPath + 3, pwszWinPath + 3, (cwcWinPath - 3) * sizeof(RTUTF16));
+            pwszNtPath[1] = '?';
+            pwszNtPath[2] = '?';
+            pwszNtPath[3] = '\\';
+            memcpy(pwszNtPath + 4, pwszWinPath + 4, (cwcWinPath - 4) * sizeof(RTUTF16));
             pwszNtPath[cwcWinPath] = '\0';
 
             /* Initialize the return values. */
@@ -431,9 +431,7 @@ RTDECL(int) RTNtPathOpen(const char *pszPath, ACCESS_MASK fDesiredAccess, ULONG
  * @returns IPRT status code.
  * @param   pszPath             The UTF-8 path.
  * @param   fDesiredAccess      See NtCreateFile.
- * @param   fFileAttribs        See NtCreateFile.
  * @param   fShareAccess        See NtCreateFile.
- * @param   fCreateDisposition  See NtCreateFile.
  * @param   fCreateOptions      See NtCreateFile.
  * @param   fObjAttribs         The OBJECT_ATTRIBUTES::Attributes value, see
  *                              NtCreateFile and InitializeObjectAttributes.
diff --git a/src/VBox/Runtime/r3/socket.cpp b/src/VBox/Runtime/r3/socket.cpp
index c42d3bc..7475ca3 100644
--- a/src/VBox/Runtime/r3/socket.cpp
+++ b/src/VBox/Runtime/r3/socket.cpp
@@ -281,7 +281,7 @@ static int rtSocketNetAddrFromAddr(RTSOCKADDRUNION const *pSrc, size_t cbSrc, PR
  * @returns IPRT status code.
  * @param   pAddr               Pointer to the generic IPRT network address.
  * @param   pDst                The source address.
- * @param   cbSrc               The size of the source address.
+ * @param   cbDst               The size of the source address.
  * @param   pcbAddr             Where to store the size of the returned address.
  *                              Optional
  */
diff --git a/src/VBox/Runtime/r3/solaris/coredumper-solaris.cpp b/src/VBox/Runtime/r3/solaris/coredumper-solaris.cpp
index 8c0329e..5b4959e 100644
--- a/src/VBox/Runtime/r3/solaris/coredumper-solaris.cpp
+++ b/src/VBox/Runtime/r3/solaris/coredumper-solaris.cpp
@@ -398,7 +398,8 @@ static void *GetMemoryChunk(PRTSOLCORE pSolCore, size_t cb)
  * Reads the proc file's content into a newly allocated buffer.
  *
  * @param pSolCore          Pointer to the core object.
- * @param pszFileFmt        Only the name of the file to read from (/proc/<pid> will be prepended)
+ * @param pszProcFileName   Only the name of the file to read from
+ *                          (/proc/\<pid\> will be prepended)
  * @param ppv               Where to store the allocated buffer.
  * @param pcb               Where to store size of the buffer.
  *
@@ -512,10 +513,10 @@ static int ProcReadStatus(PRTSOLCORE pSolCore)
 /**
  * Read process credential information (format prcred_t + array of guid_t)
  *
+ * @return IPRT status code.
  * @param pSolCore          Pointer to the core object.
  *
  * @remarks Should not be called before successful call to @see AllocMemoryArea()
- * @return IPRT status code.
  */
 static int ProcReadCred(PRTSOLCORE pSolCore)
 {
@@ -529,10 +530,10 @@ static int ProcReadCred(PRTSOLCORE pSolCore)
 /**
  * Read process privilege information (format prpriv_t + array of priv_chunk_t)
  *
+ * @return IPRT status code.
  * @param pSolCore          Pointer to the core object.
  *
  * @remarks Should not be called before successful call to @see AllocMemoryArea()
- * @return IPRT status code.
  */
 static int ProcReadPriv(PRTSOLCORE pSolCore)
 {
@@ -555,10 +556,10 @@ static int ProcReadPriv(PRTSOLCORE pSolCore)
 /**
  * Read process LDT information (format array of struct ssd) from /proc.
  *
- * @param pSolProc         Pointer to the core object.
+ * @return  IPRT status code.
+ * @param   pSolCore        Pointer to the core object.
  *
  * @remarks Should not be called before successful call to @see AllocMemoryArea()
- * @return IPRT status code.
  */
 static int ProcReadLdt(PRTSOLCORE pSolCore)
 {
@@ -572,10 +573,10 @@ static int ProcReadLdt(PRTSOLCORE pSolCore)
 /**
  * Read process auxiliary vectors (format auxv_t) for the process.
  *
+ * @return IPRT status code.
  * @param pSolCore          Pointer to the core object.
  *
  * @remarks Should not be called before successful call to @see AllocMemoryArea()
- * @return IPRT status code.
  */
 static int ProcReadAuxVecs(PRTSOLCORE pSolCore)
 {
@@ -662,10 +663,10 @@ static long GetAuxVal(PRTSOLCOREPROCESS pSolProc, int Type)
 /**
  * Read the process mappings (format prmap_t array).
  *
+ * @return IPRT status code.
  * @param   pSolCore            Pointer to the core object.
  *
  * @remarks Should not be called before successful call to @see AllocMemoryArea()
- * @return IPRT status code.
  */
 static int ProcReadMappings(PRTSOLCORE pSolCore)
 {
@@ -800,10 +801,10 @@ static int ProcReadMappings(PRTSOLCORE pSolCore)
 /**
  * Reads the thread information for all threads in the process.
  *
+ * @return IPRT status code.
  * @param pSolCore          Pointer to the core object.
  *
  * @remarks Should not be called before successful call to @see AllocMemoryArea()
- * @return IPRT status code.
  */
 static int ProcReadThreads(PRTSOLCORE pSolCore)
 {
@@ -1842,12 +1843,12 @@ static int rtCoreDumperWriteCoreDoIt(PRTSOLCORE pSolCore, PFNRTCOREWRITER pfnWri
  * Write a prepared core file using a user-passed in writer function, requires all threads
  * to be in suspended state (i.e. called after CreateCore).
  *
+ * @return IPRT status code.
  * @param pSolCore          Pointer to the core object.
  * @param pfnWriter         Pointer to the writer function to override default writer (NULL uses default).
  *
  * @remarks Resumes all suspended threads, unless it's an invalid core. This
  *          function must be called only -after- rtCoreDumperCreateCore().
- * @return IPRT status.
  */
 static int rtCoreDumperWriteCore(PRTSOLCORE pSolCore, PFNRTCOREWRITER pfnWriter)
 {
@@ -1912,13 +1913,13 @@ static int rtCoreDumperWriteCore(PRTSOLCORE pSolCore, PFNRTCOREWRITER pfnWriter)
  * all threads which can lead to things like spurious wakeups of threads (if and when threads
  * are ultimately resumed en-masse) already suspended while calling this function.
  *
+ * @return IPRT status code.
  * @param pSolCore          Pointer to a core object.
  * @param pContext          Pointer to the caller context thread.
  * @param pszCoreFilePath   Path to the core file. If NULL is passed, the global
  *                          path specified in RTCoreDumperSetup() would be used.
  *
  * @remarks Halts all threads.
- * @return IPRT status code.
  */
 static int rtCoreDumperCreateCore(PRTSOLCORE pSolCore, ucontext_t *pContext, const char *pszCoreFilePath)
 {
diff --git a/src/VBox/Runtime/r3/stream.cpp b/src/VBox/Runtime/r3/stream.cpp
index 5487532..9c30eea 100644
--- a/src/VBox/Runtime/r3/stream.cpp
+++ b/src/VBox/Runtime/r3/stream.cpp
@@ -89,7 +89,7 @@ typedef struct RTSTREAM
     bool                fCurrentCodeSet;
     /** Whether the stream was opened in binary mode. */
     bool                fBinary;
-    /** Whether to recheck the stream mode before writing.. */
+    /** Whether to recheck the stream mode before writing. */
     bool                fRecheckMode;
 #ifndef HAVE_FWRITE_UNLOCKED
     /** Critical section for serializing access to the stream. */
@@ -157,7 +157,7 @@ RTDATADECL(PRTSTREAM)   g_pStdOut = &g_StdOut;
 /**
  * Allocates and acquires the lock for the stream.
  *
- * @returns IPRT status.
+ * @returns IPRT status code.
  * @param   pStream     The stream (valid).
  */
 static int rtStrmAllocLock(PRTSTREAM pStream)
diff --git a/src/VBox/Runtime/r3/tcp.cpp b/src/VBox/Runtime/r3/tcp.cpp
index 4131ecb..fa67e69 100644
--- a/src/VBox/Runtime/r3/tcp.cpp
+++ b/src/VBox/Runtime/r3/tcp.cpp
@@ -155,7 +155,7 @@ static int  rtTcpClose(RTSOCKET Sock, const char *pszMsg, bool fTryGracefulShutd
  * Atomicly updates a socket variable.
  * @returns The old handle value.
  * @param   phSock          The socket handle variable to update.
- * @param   hSock           The new socket handle value.
+ * @param   hNew            The new socket handle value.
  */
 DECLINLINE(RTSOCKET) rtTcpAtomicXchgSock(RTSOCKET volatile *phSock, const RTSOCKET hNew)
 {
diff --git a/src/VBox/Runtime/r3/test.cpp b/src/VBox/Runtime/r3/test.cpp
index 00410c6..4de7e74 100644
--- a/src/VBox/Runtime/r3/test.cpp
+++ b/src/VBox/Runtime/r3/test.cpp
@@ -426,13 +426,13 @@ RTR3DECL(RTEXITCODE) RTTestInitAndCreate(const char *pszTest, PRTTEST phTest)
 }
 
 
-RTR3DECL(RTEXITCODE) RTTestInitExAndCreate(int cArgs, char ***papszArgs, uint32_t fRtInit, const char *pszTest, PRTTEST phTest)
+RTR3DECL(RTEXITCODE) RTTestInitExAndCreate(int cArgs, char ***ppapszArgs, uint32_t fRtInit, const char *pszTest, PRTTEST phTest)
 {
     int rc;
-    if (cArgs <= 0 && papszArgs == NULL)
+    if (cArgs <= 0 && ppapszArgs == NULL)
         rc = RTR3InitExeNoArguments(fRtInit);
     else
-        rc = RTR3InitExe(cArgs, papszArgs, fRtInit);
+        rc = RTR3InitExe(cArgs, ppapszArgs, fRtInit);
     if (RT_FAILURE(rc))
     {
         RTStrmPrintf(g_pStdErr, "%s: fatal error: RTR3InitExe(,,%#x) failed with rc=%Rrc\n", pszTest, fRtInit, rc);
diff --git a/src/VBox/Runtime/r3/udp.cpp b/src/VBox/Runtime/r3/udp.cpp
index aa895e3..fa3e0ed 100644
--- a/src/VBox/Runtime/r3/udp.cpp
+++ b/src/VBox/Runtime/r3/udp.cpp
@@ -127,7 +127,7 @@ static int  rtUdpClose(RTSOCKET Sock, const char *pszMsg);
  * Atomicly updates a socket variable.
  * @returns The old handle value.
  * @param   phSock          The socket handle variable to update.
- * @param   hSock           The new socket handle value.
+ * @param   hNew            The new socket handle value.
  */
 DECLINLINE(RTSOCKET) rtUdpAtomicXchgSock(RTSOCKET volatile *phSock, const RTSOCKET hNew)
 {
diff --git a/src/VBox/Runtime/r3/win/fs-win.cpp b/src/VBox/Runtime/r3/win/fs-win.cpp
index ec53f55..791435f 100644
--- a/src/VBox/Runtime/r3/win/fs-win.cpp
+++ b/src/VBox/Runtime/r3/win/fs-win.cpp
@@ -61,7 +61,7 @@ typedef enum _FSINFOCLASS {
 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
     ULONG FileSystemAttributes;
     LONG MaximumComponentNameLength;
-    ULONG FIleSystemNameLength;
+    ULONG FileSystemNameLength;
     WCHAR FileSystemName[1];
 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
 
@@ -348,7 +348,7 @@ RTR3DECL(bool) RTFsIsCaseSensitive(const char *pszFsPath)
  *
  * @returns @c true if equal, @c false if not.
  * @param   pwsz1               The first string.
- * @param   cb1                 The length of the first string, in bytes.
+ * @param   cch1                The length of the first string, in bytes.
  * @param   psz2                The second string.
  * @param   cch2                The length of the second string.
  */
@@ -401,11 +401,8 @@ RTR3DECL(int) RTFsQueryType(const char *pszFsPath, PRTFSTYPE penmType)
             if (rcNt >= 0)
             {
                 PFILE_FS_ATTRIBUTE_INFORMATION pFsAttrInfo = (PFILE_FS_ATTRIBUTE_INFORMATION)abBuf;
-                if (pFsAttrInfo->FIleSystemNameLength)
-                {
-                }
 #define IS_FS(szName) \
-    rtFsWinAreEqual(pFsAttrInfo->FileSystemName, pFsAttrInfo->FIleSystemNameLength, szName, sizeof(szName) - 1)
+    rtFsWinAreEqual(pFsAttrInfo->FileSystemName, pFsAttrInfo->FileSystemNameLength, szName, sizeof(szName) - 1)
                 if (IS_FS("NTFS"))
                     *penmType = RTFSTYPE_NTFS;
                 else if (IS_FS("FAT"))
diff --git a/src/VBox/Runtime/r3/win/init-win.cpp b/src/VBox/Runtime/r3/win/init-win.cpp
index 47a1090..1c1e53c 100644
--- a/src/VBox/Runtime/r3/win/init-win.cpp
+++ b/src/VBox/Runtime/r3/win/init-win.cpp
@@ -257,7 +257,7 @@ static int rtR3InitNativeObtrusiveWorker(void)
             rc = VERR_INTERNAL_ERROR_3;
     }
 
-    /** @bugref 6861: Observed GUI issues on Vista (32-bit and 64-bit). */
+    /** @bugref{6861} Observed GUI issues on Vista (32-bit and 64-bit). */
     if (g_enmWinVer > kRTWinOSType_VISTA)
     {
         typedef BOOL(WINAPI *PFNSETDEFAULTDLLDIRECTORIES)(DWORD);
diff --git a/src/VBox/Runtime/r3/win/localipc-win.cpp b/src/VBox/Runtime/r3/win/localipc-win.cpp
index 193c86e..d038302 100644
--- a/src/VBox/Runtime/r3/win/localipc-win.cpp
+++ b/src/VBox/Runtime/r3/win/localipc-win.cpp
@@ -199,6 +199,7 @@ static int rtLocalIpcWinCreateSession(PRTLOCALIPCSESSION phClientSession, HANDLE
  * @return  IPRT status code.
  * @param   ppDesc              Where to store the allocated security descriptor on success.
  *                              Must be free'd using LocalFree().
+ * @param   fServer             Whether it's for a server or client instance.
  */
 static int rtLocalIpcServerWinAllocSecurityDescriptior(PSECURITY_DESCRIPTOR *ppDesc, bool fServer)
 {
@@ -223,9 +224,10 @@ static int rtLocalIpcServerWinAllocSecurityDescriptior(PSECURITY_DESCRIPTOR *ppD
          * makes some further restrictions to prevent non-authenticated
          * users from screwing around.
          */
+        /** @todo r=bird: Why do you convert a string litteral? the 'L' prefix should
+         *        be sufficient, shouldn't it?? */
         PRTUTF16 pwszSDDL;
-        rc = RTStrToUtf16(fServer
-                          ? RTLOCALIPC_WIN_SDDL_SERVER : RTLOCALIPC_WIN_SDDL_CLIENT, &pwszSDDL);
+        rc = RTStrToUtf16(fServer ? RTLOCALIPC_WIN_SDDL_SERVER : RTLOCALIPC_WIN_SDDL_CLIENT, &pwszSDDL);
         if (RT_SUCCESS(rc))
         {
             if (!pfnConvertStringSecurityDescriptorToSecurityDescriptor((LPCTSTR)pwszSDDL,
diff --git a/src/VBox/Runtime/r3/win/process-win.cpp b/src/VBox/Runtime/r3/win/process-win.cpp
index c77891c..42a55de 100644
--- a/src/VBox/Runtime/r3/win/process-win.cpp
+++ b/src/VBox/Runtime/r3/win/process-win.cpp
@@ -110,7 +110,7 @@ static struct RTPROCWINENTRY
  * They're all optional. So in addition to using g_rtProcWinResolveOnce, the
  * caller must also check if any of the necessary APIs are NULL pointers.
  * @{ */
-/** Init once structure for run-as-user functions we need.. */
+/** Init once structure for run-as-user functions we need. */
 static RTONCE                           g_rtProcWinResolveOnce          = RTONCE_INITIALIZER;
 /* kernel32.dll: */
 static PFNCREATETOOLHELP32SNAPSHOT      g_pfnCreateToolhelp32Snapshot   = NULL;
@@ -1153,7 +1153,7 @@ static bool rtProcWinAddSidToWinStation(HWINSTA hWinStation, PSID pSid)
  * Grants the given SID full access to the given desktop.
  *
  * @returns true on success, false on failure.
- * @param   hWinStation         The window station.
+ * @param   hDesktop            The desktop handle.
  * @param   pSid                The SID.
  */
 static bool rtProcWinAddSidToDesktop(HDESK hDesktop, PSID pSid)
diff --git a/src/VBox/Runtime/r3/xml.cpp b/src/VBox/Runtime/r3/xml.cpp
index 67de716..4f1db52 100644
--- a/src/VBox/Runtime/r3/xml.cpp
+++ b/src/VBox/Runtime/r3/xml.cpp
@@ -1439,8 +1439,8 @@ AttributeNode* ElementNode::setAttributeHex(const char *pcszName, uint32_t u)
  * otherwise a new attribute is created. Returns the attribute node
  * that was either created or changed.
  *
- * @param pcszName
- * @param i
+ * @param   pcszName    The attribute name.
+ * @param   f           The attribute value.
  * @return
  */
 AttributeNode* ElementNode::setAttribute(const char *pcszName, bool f)
@@ -1457,7 +1457,7 @@ AttributeNode* ElementNode::setAttribute(const char *pcszName, bool f)
  *                      despite the type).  NULL for the root node.
  * @param   pListAnchor Pointer to the m_children member of the parent.  NULL
  *                      for the root node.
- * @param   pLibNode    Pointer to the libxml2 node structure.
+ * @param   pLibAttr    Pointer to the libxml2 attribute structure.
  */
 AttributeNode::AttributeNode(const ElementNode *pElmRoot,
                              Node *pParent,
diff --git a/src/VBox/Runtime/testcase/tstIprtList.cpp b/src/VBox/Runtime/testcase/tstIprtList.cpp
index 9a266b3..048549d 100644
--- a/src/VBox/Runtime/testcase/tstIprtList.cpp
+++ b/src/VBox/Runtime/testcase/tstIprtList.cpp
@@ -338,7 +338,7 @@ static void test1(const char *pcszDesc, T3 paTestData[], size_t cTestItems)
         RTTESTI_CHECK(testList.at(i) == paTestData[cTestItems / 2 + i]);
 
     /*
-     * setCapacitiy
+     * setCapacity
      */
     testList.setCapacity(cTestItems * 5);
     RTTESTI_CHECK(testList.capacity()  == cTestItems * 5);
diff --git a/src/VBox/Runtime/testcase/tstRTNetIPv4.cpp b/src/VBox/Runtime/testcase/tstRTNetIPv4.cpp
index 34beab1..e5faa8a 100644
--- a/src/VBox/Runtime/testcase/tstRTNetIPv4.cpp
+++ b/src/VBox/Runtime/testcase/tstRTNetIPv4.cpp
@@ -96,6 +96,21 @@
     } while (0)
 
 
+#define CHECKANY(String, fExpected)                                     \
+    do {                                                                \
+        bool fRc = RTNetStrIsIPv4AddrAny(String);                       \
+        if (fRc != fExpected)                                           \
+        {                                                               \
+            RTTestIFailed("at line %d: '%s':"                           \
+                          " expected %RTbool got %RTbool\n",            \
+                          __LINE__, (String), fExpected, fRc);          \
+        }                                                               \
+    } while (0)
+
+#define IS_ANY(String)  CHECKANY((String), true)
+#define NOT_ANY(String) CHECKANY((String), false)
+
+
 int main()
 {
     RTTEST hTest;
@@ -130,5 +145,12 @@ int main()
     CHECKADDREX("1.2.3.4",  "x",  VINF_SUCCESS,           0x01020304);
     CHECKADDREX("1.2.3.444", "",  VERR_INVALID_PARAMETER,          0);
 
+
+    IS_ANY("0.0.0.0");
+    IS_ANY("\t 0.0.0.0 \t");
+
+    NOT_ANY("1.1.1.1");         /* good address, but not INADDR_ANY */
+    NOT_ANY("0.0.0.0x");        /* bad address */
+
     return RTTestSummaryAndDestroy(hTest);
 }
diff --git a/src/VBox/Runtime/testcase/tstRTNetIPv6.cpp b/src/VBox/Runtime/testcase/tstRTNetIPv6.cpp
index 1c86750..7399c42 100644
--- a/src/VBox/Runtime/testcase/tstRTNetIPv6.cpp
+++ b/src/VBox/Runtime/testcase/tstRTNetIPv6.cpp
@@ -72,6 +72,21 @@
     CHECKADDR(String, VERR_INVALID_PARAMETER, 0, 0, 0, 0)
 
 
+#define CHECKANY(String, fExpected)                                     \
+    do {                                                                \
+        bool fRc = RTNetStrIsIPv6AddrAny(String);                       \
+        if (fRc != fExpected)                                           \
+        {                                                               \
+            RTTestIFailed("at line %d: '%s':"                           \
+                          " expected %RTbool got %RTbool\n",            \
+                          __LINE__, (String), fExpected, fRc);          \
+        }                                                               \
+    } while (0)
+
+#define IS_ANY(String)  CHECKANY((String), true)
+#define NOT_ANY(String) CHECKANY((String), false)
+
+
 int main()
 {
     RTTEST hTest;
@@ -188,5 +203,20 @@ int main()
 
     GOODADDR(" ff01::1%net1.1\t", 0xff010000, 0, 0, 1);
 
+
+    IS_ANY("::");
+    IS_ANY("::0.0.0.0");
+    IS_ANY("0:0:0:0:0:0:0:0");
+    IS_ANY("0000:0000:0000:0000:0000:0000:0000:0000");
+
+    IS_ANY("\t :: \t");
+
+    NOT_ANY("::1");
+    NOT_ANY("0:0:0:0:0:0:0:1");
+
+    NOT_ANY(":: x");
+    NOT_ANY("::%");
+    NOT_ANY("::%eth0");         /* or is it? */
+
     return RTTestSummaryAndDestroy(hTest);
 }
diff --git a/src/VBox/Runtime/win/errmsgwin.cpp b/src/VBox/Runtime/win/errmsgwin.cpp
index e816fd6..1dd28bc 100644
--- a/src/VBox/Runtime/win/errmsgwin.cpp
+++ b/src/VBox/Runtime/win/errmsgwin.cpp
@@ -44,7 +44,7 @@
  */
 static const RTWINERRMSG  g_aStatusMsgs[] =
 {
-#ifndef IPRT_NO_ERROR_DATA
+#if !defined(IPRT_NO_ERROR_DATA) && !defined(DOXYGEN_RUNNING)
 # include "errmsgcomdata.h"
 # if defined(VBOX) && !defined(IN_GUEST)
 #  include "errmsgvboxcomdata.h"
diff --git a/src/VBox/Storage/DMG.cpp b/src/VBox/Storage/DMG.cpp
index a1187f8..caadcc6 100644
--- a/src/VBox/Storage/DMG.cpp
+++ b/src/VBox/Storage/DMG.cpp
@@ -2553,11 +2553,11 @@ const VBOXHDDBACKEND g_DmgBackend =
     dmgSetParentModificationUuid,
     /* pfnDump */
     dmgDump,
-    /* pfnGetTimeStamp */
+    /* pfnGetTimestamp */
     NULL,
-    /* pfnGetParentTimeStamp */
+    /* pfnGetParentTimestamp */
     NULL,
-    /* pfnSetParentTimeStamp */
+    /* pfnSetParentTimestamp */
     NULL,
     /* pfnGetParentFilename */
     NULL,
diff --git a/src/VBox/Storage/ISCSI.cpp b/src/VBox/Storage/ISCSI.cpp
index 93c6fbf..17d676a 100644
--- a/src/VBox/Storage/ISCSI.cpp
+++ b/src/VBox/Storage/ISCSI.cpp
@@ -1204,7 +1204,7 @@ static int iscsiTransportOpen(PISCSIIMAGE pImage)
  * Attach to an iSCSI target. Performs all operations necessary to enter
  * Full Feature Phase.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pImage      The iSCSI connection state to be used.
  */
 static DECLCALLBACK(int) iscsiAttach(void *pvUser)
@@ -1719,7 +1719,7 @@ out:
 /**
  * Detach from an iSCSI target.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pImage      The iSCSI connection state to be used.
  */
 static DECLCALLBACK(int) iscsiDetach(void *pvUser)
@@ -1809,7 +1809,7 @@ static DECLCALLBACK(int) iscsiDetach(void *pvUser)
  * Perform a command on an iSCSI target. Target must be already in
  * Full Feature Phase.
  *
- * @returns VBOX status.
+ * @returns VBox status code.
  * @param   pImage      The iSCSI connection state to be used.
  * @param   pRequest    Command descriptor. Contains all information about
  *                      the command, its transfer directions and pointers
@@ -2975,7 +2975,7 @@ static int iscsiTextAddKeyValue(uint8_t *pbBuf, size_t cbBuf, size_t *pcbBufCurr
 /**
  * Retrieve the value for a given key from the key=value buffer.
  *
- * @returns VBOX status.
+ * @returns VBox status code.
  * @param   pbBuf       Buffer containing key=value pairs.
  * @param   cbBuf       Length of buffer with key=value pairs.
  * @param   pszKey      Pointer to key for which to retrieve the value.
@@ -3107,7 +3107,7 @@ static int iscsiStrToBinary(const char *pcszValue, uint8_t *pbValue, size_t *pcb
 /**
  * Retrieve the relevant parameter values and update the initiator state.
  *
- * @returns VBOX status.
+ * @returns VBox status code.
  * @param   pImage      Current iSCSI initiator state.
  * @param   pbBuf       Buffer containing key=value pairs.
  * @param   cbBuf       Length of buffer with key=value pairs.
@@ -5538,11 +5538,11 @@ const VBOXHDDBACKEND g_ISCSIBackend =
     iscsiSetParentModificationUuid,
     /* pfnDump */
     iscsiDump,
-    /* pfnGetTimeStamp */
+    /* pfnGetTimestamp */
     NULL,
-    /* pfnGetParentTimeStamp */
+    /* pfnGetParentTimestamp */
     NULL,
-    /* pfnSetParentTimeStamp */
+    /* pfnSetParentTimestamp */
     NULL,
     /* pfnGetParentFilename */
     NULL,
diff --git a/src/VBox/Storage/Parallels.cpp b/src/VBox/Storage/Parallels.cpp
index 052122f..fe32889 100644
--- a/src/VBox/Storage/Parallels.cpp
+++ b/src/VBox/Storage/Parallels.cpp
@@ -1289,11 +1289,11 @@ const VBOXHDDBACKEND g_ParallelsBackend =
     parallelsSetParentModificationUuid,
     /* pfnDump */
     parallelsDump,
-    /* pfnGetTimeStamp */
+    /* pfnGetTimestamp */
     NULL,
-    /* pfnGetParentTimeStamp */
+    /* pfnGetParentTimestamp */
     NULL,
-    /* pfnSetParentTimeStamp */
+    /* pfnSetParentTimestamp */
     NULL,
     /* pfnGetParentFilename */
     NULL,
diff --git a/src/VBox/Storage/QCOW.cpp b/src/VBox/Storage/QCOW.cpp
index 7a7209f..9e1645b 100644
--- a/src/VBox/Storage/QCOW.cpp
+++ b/src/VBox/Storage/QCOW.cpp
@@ -2550,11 +2550,11 @@ const VBOXHDDBACKEND g_QCowBackend =
     qcowSetParentModificationUuid,
     /* pfnDump */
     qcowDump,
-    /* pfnGetTimeStamp */
+    /* pfnGetTimestamp */
     NULL,
-    /* pfnGetParentTimeStamp */
+    /* pfnGetParentTimestamp */
     NULL,
-    /* pfnSetParentTimeStamp */
+    /* pfnSetParentTimestamp */
     NULL,
     /* pfnGetParentFilename */
     qcowGetParentFilename,
diff --git a/src/VBox/Storage/QED.cpp b/src/VBox/Storage/QED.cpp
index 8296802..f6f577f 100644
--- a/src/VBox/Storage/QED.cpp
+++ b/src/VBox/Storage/QED.cpp
@@ -2695,11 +2695,11 @@ const VBOXHDDBACKEND g_QedBackend =
     qedSetParentModificationUuid,
     /* pfnDump */
     qedDump,
-    /* pfnGetTimeStamp */
+    /* pfnGetTimestamp */
     NULL,
-    /* pfnGetParentTimeStamp */
+    /* pfnGetParentTimestamp */
     NULL,
-    /* pfnSetParentTimeStamp */
+    /* pfnSetParentTimestamp */
     NULL,
     /* pfnGetParentFilename */
     qedGetParentFilename,
diff --git a/src/VBox/Storage/RAW.cpp b/src/VBox/Storage/RAW.cpp
index 7c8a312..977f8ca 100644
--- a/src/VBox/Storage/RAW.cpp
+++ b/src/VBox/Storage/RAW.cpp
@@ -150,7 +150,7 @@ static int rawFreeImage(PRAWIMAGE pImage, bool fDelete)
                     /* Write data to all image blocks. */
                     while (uOff < pImage->cbSize)
                     {
-                        unsigned cbChunk = (unsigned)RT_MIN(pImage->cbSize,
+                        unsigned cbChunk = (unsigned)RT_MIN(pImage->cbSize - uOff,
                                                             RAW_FILL_SIZE);
 
                         rc = vdIfIoIntFileWriteSync(pImage->pIfIo, pImage->pStorage,
@@ -1244,11 +1244,11 @@ const VBOXHDDBACKEND g_RawBackend =
     rawSetParentModificationUuid,
     /* pfnDump */
     rawDump,
-    /* pfnGetTimeStamp */
+    /* pfnGetTimestamp */
     NULL,
-    /* pfnGetParentTimeStamp */
+    /* pfnGetParentTimestamp */
     NULL,
-    /* pfnSetParentTimeStamp */
+    /* pfnSetParentTimestamp */
     NULL,
     /* pfnGetParentFilename */
     NULL,
diff --git a/src/VBox/Storage/VD.cpp b/src/VBox/Storage/VD.cpp
index b63d085..3c332dd 100644
--- a/src/VBox/Storage/VD.cpp
+++ b/src/VBox/Storage/VD.cpp
@@ -3502,8 +3502,9 @@ static DECLCALLBACK(int) vdDiscardHelperAsync(PVDIOCTX pIoCtx)
 }
 
 #ifndef VBOX_HDD_NO_DYNAMIC_BACKENDS
+
 /**
- * @copydoc VDPLUGIN::pfnRegisterImage
+ * @interface_method_impl{VDBACKENDREGISTER,pfnRegisterImage}
  */
 static DECLCALLBACK(int) vdPluginRegisterImage(void *pvUser, PCVBOXHDDBACKEND pBackend)
 {
@@ -3521,7 +3522,7 @@ static DECLCALLBACK(int) vdPluginRegisterImage(void *pvUser, PCVBOXHDDBACKEND pB
 }
 
 /**
- * @copydoc VDPLUGIN::pfnRegisterCache
+ * @interface_method_impl{VDBACKENDREGISTER,pfnRegisterCache}
  */
 static DECLCALLBACK(int) vdPluginRegisterCache(void *pvUser, PCVDCACHEBACKEND pBackend)
 {
@@ -3539,7 +3540,7 @@ static DECLCALLBACK(int) vdPluginRegisterCache(void *pvUser, PCVDCACHEBACKEND pB
 }
 
 /**
- * @copydoc VDPLUGIN::pfnRegisterFilter
+ * @interface_method_impl{VDBACKENDREGISTER,pfnRegisterFilter}
  */
 static DECLCALLBACK(int) vdPluginRegisterFilter(void *pvUser, PCVDFILTERBACKEND pBackend)
 {
@@ -3659,7 +3660,8 @@ static int vdRemovePlugin(const char *pszFilename)
 
     return VINF_SUCCESS;
 }
-#endif
+
+#endif /* !VBOX_HDD_NO_DYNAMIC_BACKENDS */
 
 /**
  * Worker for VDPluginLoadFromFilename() and vdPluginLoadFromPath().
@@ -7329,13 +7331,13 @@ VBOXDDU_DECL(int) VDCreateDiff(PVBOXHDD pDisk, const char *pszBackend,
             if (RT_SUCCESS(rc2))
                 pImage->Backend->pfnSetParentModificationUuid(pImage->pBackendData,
                                                               &Uuid);
-            if (pDisk->pLast->Backend->pfnGetTimeStamp)
-                rc2 = pDisk->pLast->Backend->pfnGetTimeStamp(pDisk->pLast->pBackendData,
+            if (pDisk->pLast->Backend->pfnGetTimestamp)
+                rc2 = pDisk->pLast->Backend->pfnGetTimestamp(pDisk->pLast->pBackendData,
                                                              &ts);
             else
                 rc2 = VERR_NOT_IMPLEMENTED;
-            if (RT_SUCCESS(rc2) && pImage->Backend->pfnSetParentTimeStamp)
-                pImage->Backend->pfnSetParentTimeStamp(pImage->pBackendData, &ts);
+            if (RT_SUCCESS(rc2) && pImage->Backend->pfnSetParentTimestamp)
+                pImage->Backend->pfnSetParentTimestamp(pImage->pBackendData, &ts);
 
             if (pImage->Backend->pfnSetParentFilename)
                 rc2 = pImage->Backend->pfnSetParentFilename(pImage->pBackendData, pDisk->pLast->pszFilename);
@@ -11057,19 +11059,26 @@ VBOXDDU_DECL(int) VDRepair(PVDINTERFACE pVDIfsDisk, PVDINTERFACE pVDIfsImage,
     return rc;
 }
 
-/**
+
+/*
  * generic plugin functions
  */
 
-/** @copydoc VBOXHDDBACKEND::pfnComposeLocation */
+/**
+ * @interface_method_impl{VBOXHDDBACKEND,pfnComposeLocation}
+ */
 DECLCALLBACK(int) genericFileComposeLocation(PVDINTERFACE pConfig, char **pszLocation)
 {
     *pszLocation = NULL;
     return VINF_SUCCESS;
 }
-/** @copydoc VBOXHDDBACKEND::pfnComposeName */
+
+/**
+ * @interface_method_impl{VBOXHDDBACKEND,pfnComposeName}
+ */
 DECLCALLBACK(int) genericFileComposeName(PVDINTERFACE pConfig, char **pszName)
 {
     *pszName = NULL;
     return VINF_SUCCESS;
 }
+
diff --git a/src/VBox/Storage/VDI.cpp b/src/VBox/Storage/VDI.cpp
index eecacad..e03a67e 100644
--- a/src/VBox/Storage/VDI.cpp
+++ b/src/VBox/Storage/VDI.cpp
@@ -3284,11 +3284,11 @@ const VBOXHDDBACKEND g_VDIBackend =
     vdiSetParentModificationUuid,
     /* pfnDump */
     vdiDump,
-    /* pfnGetTimeStamp */
+    /* pfnGetTimestamp */
     NULL,
-    /* pfnGetParentTimeStamp */
+    /* pfnGetParentTimestamp */
     NULL,
-    /* pfnSetParentTimeStamp */
+    /* pfnSetParentTimestamp */
     NULL,
     /* pfnGetParentFilename */
     NULL,
diff --git a/src/VBox/Storage/VDIfVfs.cpp b/src/VBox/Storage/VDIfVfs.cpp
index 3160610..84d2894 100644
--- a/src/VBox/Storage/VDIfVfs.cpp
+++ b/src/VBox/Storage/VDIfVfs.cpp
@@ -243,7 +243,7 @@ VBOXDDU_DECL(int) VDIfCreateVfsStream(PVDINTERFACEIO pVDIfsIo, void *pvStorage,
 
 
 /**
- * @interface_method_impl{RTVFSOBJSETOPS,pfnMode}
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnSetMode}
  */
 static DECLCALLBACK(int) vdIfVfsFile_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
 {
diff --git a/src/VBox/Storage/VDVfs.cpp b/src/VBox/Storage/VDVfs.cpp
index a2b313f..203810e 100644
--- a/src/VBox/Storage/VDVfs.cpp
+++ b/src/VBox/Storage/VDVfs.cpp
@@ -370,7 +370,7 @@ static DECLCALLBACK(int) vdVfsFile_Tell(void *pvThis, PRTFOFF poffActual)
 
 
 /**
- * @interface_method_impl{RTVFSOBJSETOPS,pfnMode}
+ * @interface_method_impl{RTVFSOBJSETOPS,pfnSetMode}
  */
 static DECLCALLBACK(int) vdVfsFile_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
 {
diff --git a/src/VBox/Storage/VHD.cpp b/src/VBox/Storage/VHD.cpp
index 03c5e96..0132100 100644
--- a/src/VBox/Storage/VHD.cpp
+++ b/src/VBox/Storage/VHD.cpp
@@ -48,7 +48,7 @@ typedef struct VHDFooter
     uint32_t Features;
     uint32_t Version;
     uint64_t DataOffset;
-    uint32_t TimeStamp;
+    uint32_t Timestamp;
     uint8_t  CreatorApp[4];
     uint32_t CreatorVer;
     uint32_t CreatorOS;
@@ -109,7 +109,7 @@ typedef struct VHDDynamicDiskHeader
     uint32_t BlockSize;
     uint32_t Checksum;
     uint8_t  ParentUuid[16];
-    uint32_t ParentTimeStamp;
+    uint32_t ParentTimestamp;
     uint32_t Reserved0;
     uint16_t ParentUnicodeName[256];
     VHDPLE   ParentLocatorEntry[VHD_MAX_LOCATOR_ENTRIES];
@@ -158,7 +158,7 @@ typedef struct VHDIMAGE
     RTUUID          ParentUuid;
 
     /** Parent's time stamp at the time of image creation. */
-    uint32_t        u32ParentTimeStamp;
+    uint32_t        u32ParentTimestamp;
     /** Relative path to the parent image. */
     char            *pszParentFilename;
 
@@ -431,7 +431,7 @@ static int vhdDynamicHeaderUpdate(PVHDIMAGE pImage)
         return VERR_VD_VHD_INVALID_HEADER;
 
     /* Update parent's timestamp. */
-    ddh.ParentTimeStamp = RT_H2BE_U32(pImage->u32ParentTimeStamp);
+    ddh.ParentTimestamp = RT_H2BE_U32(pImage->u32ParentTimestamp);
     /* Update parent's filename. */
     if (pImage->pszParentFilename)
     {
@@ -589,15 +589,15 @@ static int vhdFreeImage(PVHDIMAGE pImage, bool fDelete)
 /* 946684800 is the number of seconds between 1/1/1970 and 1/1/2000 */
 #define VHD_TO_UNIX_EPOCH_SECONDS UINT64_C(946684800)
 
-static uint32_t vhdRtTime2VhdTime(PCRTTIMESPEC pRtTimeStamp)
+static uint32_t vhdRtTime2VhdTime(PCRTTIMESPEC pRtTimestamp)
 {
-    uint64_t u64Seconds = RTTimeSpecGetSeconds(pRtTimeStamp);
+    uint64_t u64Seconds = RTTimeSpecGetSeconds(pRtTimestamp);
     return (uint32_t)(u64Seconds - VHD_TO_UNIX_EPOCH_SECONDS);
 }
 
-static void vhdTime2RtTime(PRTTIMESPEC pRtTimeStamp, uint32_t u32VhdTimeStamp)
+static void vhdTime2RtTime(PRTTIMESPEC pRtTimestamp, uint32_t u32VhdTimestamp)
 {
-    RTTimeSpecSetSeconds(pRtTimeStamp, VHD_TO_UNIX_EPOCH_SECONDS + u32VhdTimeStamp);
+    RTTimeSpecSetSeconds(pRtTimestamp, VHD_TO_UNIX_EPOCH_SECONDS + u32VhdTimestamp);
 }
 
 /**
@@ -1133,7 +1133,7 @@ static int vhdCreateImage(PVHDIMAGE pImage, uint64_t cbSize,
     memcpy(Footer.Cookie, VHD_FOOTER_COOKIE, sizeof(Footer.Cookie));
     Footer.Features = RT_H2BE_U32(0x2);
     Footer.Version  = RT_H2BE_U32(VHD_FOOTER_FILE_FORMAT_VERSION);
-    Footer.TimeStamp = RT_H2BE_U32(vhdRtTime2VhdTime(RTTimeNow(&now)));
+    Footer.Timestamp = RT_H2BE_U32(vhdRtTime2VhdTime(RTTimeNow(&now)));
     memcpy(Footer.CreatorApp, "vbox", sizeof(Footer.CreatorApp));
     Footer.CreatorVer = RT_H2BE_U32(VBOX_VERSION);
 #ifdef RT_OS_DARWIN
@@ -1237,7 +1237,7 @@ out:
 }
 
 
-/** @copydoc VBOXHDDBACKEND::pfnCheckIfValid */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnCheckIfValid} */
 static DECLCALLBACK(int) vhdCheckIfValid(const char *pszFilename, PVDINTERFACE pVDIfsDisk,
                                          PVDINTERFACE pVDIfsImage, VDTYPE *penmType)
 {
@@ -1294,7 +1294,7 @@ out:
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnOpen */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnOpen} */
 static DECLCALLBACK(int) vhdOpen(const char *pszFilename, unsigned uOpenFlags,
                                  PVDINTERFACE pVDIfsDisk, PVDINTERFACE pVDIfsImage,
                                  VDTYPE enmType, void **ppBackendData)
@@ -1343,7 +1343,7 @@ out:
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnCreate */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnCreate} */
 static DECLCALLBACK(int) vhdCreate(const char *pszFilename, uint64_t cbSize,
                                    unsigned uImageFlags, const char *pszComment,
                                    PCVDGEOMETRY pPCHSGeometry, PCVDGEOMETRY pLCHSGeometry,
@@ -1430,7 +1430,7 @@ out:
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnRename */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnRename} */
 static DECLCALLBACK(int) vhdRename(void *pBackendData, const char *pszFilename)
 {
     LogFlowFunc(("pBackendData=%#p pszFilename=%#p\n", pBackendData, pszFilename));
@@ -1476,7 +1476,7 @@ out:
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnClose */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnClose} */
 static DECLCALLBACK(int) vhdClose(void *pBackendData, bool fDelete)
 {
     LogFlowFunc(("pBackendData=%#p fDelete=%d\n", pBackendData, fDelete));
@@ -1490,7 +1490,7 @@ static DECLCALLBACK(int) vhdClose(void *pBackendData, bool fDelete)
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnRead */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnRead} */
 static DECLCALLBACK(int) vhdRead(void *pBackendData, uint64_t uOffset, size_t cbRead,
                                  PVDIOCTX pIoCtx, size_t *pcbActuallyRead)
 {
@@ -1606,7 +1606,7 @@ static DECLCALLBACK(int) vhdRead(void *pBackendData, uint64_t uOffset, size_t cb
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnWrite */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnWrite} */
 static DECLCALLBACK(int) vhdWrite(void *pBackendData, uint64_t uOffset, size_t cbWrite,
                          PVDIOCTX pIoCtx, size_t *pcbWriteProcess, size_t *pcbPreRead,
                          size_t *pcbPostRead, unsigned fWrite)
@@ -1840,7 +1840,7 @@ static DECLCALLBACK(int) vhdWrite(void *pBackendData, uint64_t uOffset, size_t c
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnFlush */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnFlush} */
 static DECLCALLBACK(int) vhdFlush(void *pBackendData, PVDIOCTX pIoCtx)
 {
     PVHDIMAGE pImage = (PVHDIMAGE)pBackendData;
@@ -1849,7 +1849,7 @@ static DECLCALLBACK(int) vhdFlush(void *pBackendData, PVDIOCTX pIoCtx)
     return vdIfIoIntFileFlush(pImage->pIfIo, pImage->pStorage, pIoCtx, NULL, NULL);
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetVersion */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetVersion} */
 static DECLCALLBACK(unsigned) vhdGetVersion(void *pBackendData)
 {
     LogFlowFunc(("pBackendData=%#p\n", pBackendData));
@@ -1865,7 +1865,7 @@ static DECLCALLBACK(unsigned) vhdGetVersion(void *pBackendData)
     return ver;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetSectorSize */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetSectorSize} */
 static DECLCALLBACK(uint32_t) vhdGetSectorSize(void *pBackendData)
 {
     LogFlowFunc(("pBackendData=%#p\n", pBackendData));
@@ -1881,7 +1881,7 @@ static DECLCALLBACK(uint32_t) vhdGetSectorSize(void *pBackendData)
     return cb;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetSize */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetSize} */
 static DECLCALLBACK(uint64_t) vhdGetSize(void *pBackendData)
 {
     LogFlowFunc(("pBackendData=%#p\n", pBackendData));
@@ -1897,7 +1897,7 @@ static DECLCALLBACK(uint64_t) vhdGetSize(void *pBackendData)
     return cb;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetFileSize */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetFileSize} */
 static DECLCALLBACK(uint64_t) vhdGetFileSize(void *pBackendData)
 {
     LogFlowFunc(("pBackendData=%#p\n", pBackendData));
@@ -1913,7 +1913,7 @@ static DECLCALLBACK(uint64_t) vhdGetFileSize(void *pBackendData)
     return cb;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetPCHSGeometry */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetPCHSGeometry} */
 static DECLCALLBACK(int) vhdGetPCHSGeometry(void *pBackendData, PVDGEOMETRY pPCHSGeometry)
 {
     LogFlowFunc(("pBackendData=%#p pPCHSGeometry=%#p\n", pBackendData, pPCHSGeometry));
@@ -1939,7 +1939,7 @@ static DECLCALLBACK(int) vhdGetPCHSGeometry(void *pBackendData, PVDGEOMETRY pPCH
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnSetPCHSGeometry */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnSetPCHSGeometry} */
 static DECLCALLBACK(int) vhdSetPCHSGeometry(void *pBackendData, PCVDGEOMETRY pPCHSGeometry)
 {
     LogFlowFunc(("pBackendData=%#p pPCHSGeometry=%#p PCHS=%u/%u/%u\n", pBackendData, pPCHSGeometry, pPCHSGeometry->cCylinders, pPCHSGeometry->cHeads, pPCHSGeometry->cSectors));
@@ -1967,7 +1967,7 @@ out:
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetLCHSGeometry */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetLCHSGeometry} */
 static DECLCALLBACK(int) vhdGetLCHSGeometry(void *pBackendData, PVDGEOMETRY pLCHSGeometry)
 {
 LogFlowFunc(("pBackendData=%#p pLCHSGeometry=%#p\n", pBackendData, pLCHSGeometry));
@@ -1993,7 +1993,7 @@ LogFlowFunc(("pBackendData=%#p pLCHSGeometry=%#p\n", pBackendData, pLCHSGeometry
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnSetLCHSGeometry */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnSetLCHSGeometry} */
 static DECLCALLBACK(int) vhdSetLCHSGeometry(void *pBackendData, PCVDGEOMETRY pLCHSGeometry)
 {
     PVHDIMAGE pImage = (PVHDIMAGE)pBackendData;
@@ -2020,7 +2020,7 @@ out:
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetImageFlags */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetImageFlags} */
 static DECLCALLBACK(unsigned) vhdGetImageFlags(void *pBackendData)
 {
     LogFlowFunc(("pBackendData=%#p\n", pBackendData));
@@ -2038,7 +2038,7 @@ static DECLCALLBACK(unsigned) vhdGetImageFlags(void *pBackendData)
     return uImageFlags;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetOpenFlags */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetOpenFlags} */
 static DECLCALLBACK(unsigned) vhdGetOpenFlags(void *pBackendData)
 {
     LogFlowFunc(("pBackendData=%#p\n", pBackendData));
@@ -2056,7 +2056,7 @@ static DECLCALLBACK(unsigned) vhdGetOpenFlags(void *pBackendData)
     return uOpenFlags;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnSetOpenFlags */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnSetOpenFlags} */
 static DECLCALLBACK(int) vhdSetOpenFlags(void *pBackendData, unsigned uOpenFlags)
 {
     LogFlowFunc(("pBackendData=%#p\n uOpenFlags=%#x", pBackendData, uOpenFlags));
@@ -2083,7 +2083,7 @@ out:
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetComment */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetComment} */
 static DECLCALLBACK(int) vhdGetComment(void *pBackendData, char *pszComment,
                                        size_t cbComment)
 {
@@ -2102,7 +2102,7 @@ static DECLCALLBACK(int) vhdGetComment(void *pBackendData, char *pszComment,
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnSetComment */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnSetComment} */
 static DECLCALLBACK(int) vhdSetComment(void *pBackendData, const char *pszComment)
 {
     LogFlowFunc(("pBackendData=%#p pszComment=\"%s\"\n", pBackendData, pszComment));
@@ -2125,7 +2125,7 @@ static DECLCALLBACK(int) vhdSetComment(void *pBackendData, const char *pszCommen
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetUuid */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetUuid} */
 static DECLCALLBACK(int) vhdGetUuid(void *pBackendData, PRTUUID pUuid)
 {
     LogFlowFunc(("pBackendData=%#p pUuid=%#p\n", pBackendData, pUuid));
@@ -2146,7 +2146,7 @@ static DECLCALLBACK(int) vhdGetUuid(void *pBackendData, PRTUUID pUuid)
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnSetUuid */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnSetUuid} */
 static DECLCALLBACK(int) vhdSetUuid(void *pBackendData, PCRTUUID pUuid)
 {
     LogFlowFunc(("pBackendData=%#p Uuid=%RTuuid\n", pBackendData, pUuid));
@@ -2181,7 +2181,7 @@ static DECLCALLBACK(int) vhdSetUuid(void *pBackendData, PCRTUUID pUuid)
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetModificationUuid */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetModificationUuid} */
 static DECLCALLBACK(int) vhdGetModificationUuid(void *pBackendData, PRTUUID pUuid)
 {
     LogFlowFunc(("pBackendData=%#p pUuid=%#p\n", pBackendData, pUuid));
@@ -2199,7 +2199,7 @@ static DECLCALLBACK(int) vhdGetModificationUuid(void *pBackendData, PRTUUID pUui
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnSetModificationUuid */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnSetModificationUuid} */
 static DECLCALLBACK(int) vhdSetModificationUuid(void *pBackendData, PCRTUUID pUuid)
 {
     LogFlowFunc(("pBackendData=%#p Uuid=%RTuuid\n", pBackendData, pUuid));
@@ -2222,7 +2222,7 @@ static DECLCALLBACK(int) vhdSetModificationUuid(void *pBackendData, PCRTUUID pUu
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetParentUuid */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetParentUuid} */
 static DECLCALLBACK(int) vhdGetParentUuid(void *pBackendData, PRTUUID pUuid)
 {
     LogFlowFunc(("pBackendData=%#p pUuid=%#p\n", pBackendData, pUuid));
@@ -2243,7 +2243,7 @@ static DECLCALLBACK(int) vhdGetParentUuid(void *pBackendData, PRTUUID pUuid)
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnSetParentUuid */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnSetParentUuid} */
 static DECLCALLBACK(int) vhdSetParentUuid(void *pBackendData, PCRTUUID pUuid)
 {
     LogFlowFunc(("pBackendData=%#p Uuid=%RTuuid\n", pBackendData, pUuid));
@@ -2269,7 +2269,7 @@ static DECLCALLBACK(int) vhdSetParentUuid(void *pBackendData, PCRTUUID pUuid)
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetParentModificationUuid */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetParentModificationUuid} */
 static DECLCALLBACK(int) vhdGetParentModificationUuid(void *pBackendData, PRTUUID pUuid)
 {
     LogFlowFunc(("pBackendData=%#p pUuid=%#p\n", pBackendData, pUuid));
@@ -2287,7 +2287,7 @@ static DECLCALLBACK(int) vhdGetParentModificationUuid(void *pBackendData, PRTUUI
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnSetParentModificationUuid */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnSetParentModificationUuid} */
 static DECLCALLBACK(int) vhdSetParentModificationUuid(void *pBackendData, PCRTUUID pUuid)
 {
     LogFlowFunc(("pBackendData=%#p Uuid=%RTuuid\n", pBackendData, pUuid));
@@ -2310,7 +2310,7 @@ static DECLCALLBACK(int) vhdSetParentModificationUuid(void *pBackendData, PCRTUU
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnDump */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnDump} */
 static DECLCALLBACK(void) vhdDump(void *pBackendData)
 {
     PVHDIMAGE pImage = (PVHDIMAGE)pBackendData;
@@ -2327,8 +2327,8 @@ static DECLCALLBACK(void) vhdDump(void *pBackendData)
     }
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetTimestamp */
-static DECLCALLBACK(int) vhdGetTimeStamp(void *pBackendData, PRTTIMESPEC pTimeStamp)
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetTimestamp} */
+static DECLCALLBACK(int) vhdGetTimestamp(void *pBackendData, PRTTIMESPEC pTimestamp)
 {
     int rc = VINF_SUCCESS;
     PVHDIMAGE pImage = (PVHDIMAGE)pBackendData;
@@ -2336,7 +2336,7 @@ static DECLCALLBACK(int) vhdGetTimeStamp(void *pBackendData, PRTTIMESPEC pTimeSt
     AssertPtr(pImage);
 
     if (pImage)
-        rc = vdIfIoIntFileGetModificationTime(pImage->pIfIo, pImage->pszFilename, pTimeStamp);
+        rc = vdIfIoIntFileGetModificationTime(pImage->pIfIo, pImage->pszFilename, pTimestamp);
     else
         rc = VERR_VD_NOT_OPENED;
 
@@ -2344,8 +2344,8 @@ static DECLCALLBACK(int) vhdGetTimeStamp(void *pBackendData, PRTTIMESPEC pTimeSt
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetParentTimeStamp */
-static DECLCALLBACK(int) vhdGetParentTimeStamp(void *pBackendData, PRTTIMESPEC pTimeStamp)
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetParentTimestamp} */
+static DECLCALLBACK(int) vhdGetParentTimestamp(void *pBackendData, PRTTIMESPEC pTimestamp)
 {
     int rc = VINF_SUCCESS;
     PVHDIMAGE pImage = (PVHDIMAGE)pBackendData;
@@ -2353,7 +2353,7 @@ static DECLCALLBACK(int) vhdGetParentTimeStamp(void *pBackendData, PRTTIMESPEC p
     AssertPtr(pImage);
 
     if (pImage)
-        vhdTime2RtTime(pTimeStamp, pImage->u32ParentTimeStamp);
+        vhdTime2RtTime(pTimestamp, pImage->u32ParentTimestamp);
     else
         rc = VERR_VD_NOT_OPENED;
 
@@ -2361,8 +2361,8 @@ static DECLCALLBACK(int) vhdGetParentTimeStamp(void *pBackendData, PRTTIMESPEC p
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnSetParentTimeStamp */
-static DECLCALLBACK(int) vhdSetParentTimeStamp(void *pBackendData, PCRTTIMESPEC pTimeStamp)
+/** @interface_method_impl{VBOXHDDBACKEND,pfnSetParentTimestamp} */
+static DECLCALLBACK(int) vhdSetParentTimestamp(void *pBackendData, PCRTTIMESPEC pTimestamp)
 {
     int rc = VINF_SUCCESS;
     PVHDIMAGE pImage = (PVHDIMAGE)pBackendData;
@@ -2374,7 +2374,7 @@ static DECLCALLBACK(int) vhdSetParentTimeStamp(void *pBackendData, PCRTTIMESPEC
             rc = VERR_VD_IMAGE_READ_ONLY;
         else
         {
-            pImage->u32ParentTimeStamp = vhdRtTime2VhdTime(pTimeStamp);
+            pImage->u32ParentTimestamp = vhdRtTime2VhdTime(pTimestamp);
             pImage->fDynHdrNeedsUpdate = true;
         }
     }
@@ -2385,7 +2385,7 @@ static DECLCALLBACK(int) vhdSetParentTimeStamp(void *pBackendData, PCRTTIMESPEC
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnGetParentFilename */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnGetParentFilename} */
 static DECLCALLBACK(int) vhdGetParentFilename(void *pBackendData, char **ppszParentFilename)
 {
     int rc = VINF_SUCCESS;
@@ -2401,7 +2401,7 @@ static DECLCALLBACK(int) vhdGetParentFilename(void *pBackendData, char **ppszPar
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnSetParentFilename */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnSetParentFilename} */
 static DECLCALLBACK(int) vhdSetParentFilename(void *pBackendData, const char *pszParentFilename)
 {
     int rc = VINF_SUCCESS;
@@ -2430,7 +2430,7 @@ static DECLCALLBACK(int) vhdSetParentFilename(void *pBackendData, const char *ps
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnCompact */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnCompact} */
 static DECLCALLBACK(int) vhdCompact(void *pBackendData, unsigned uPercentStart,
                                     unsigned uPercentSpan, PVDINTERFACE pVDIfsDisk,
                                     PVDINTERFACE pVDIfsImage, PVDINTERFACE pVDIfsOperation)
@@ -2669,7 +2669,7 @@ static DECLCALLBACK(int) vhdCompact(void *pBackendData, unsigned uPercentStart,
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnResize */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnResize} */
 static DECLCALLBACK(int) vhdResize(void *pBackendData, uint64_t cbSize,
                                    PCVDGEOMETRY pPCHSGeometry, PCVDGEOMETRY pLCHSGeometry,
                                    unsigned uPercentStart, unsigned uPercentSpan,
@@ -2853,7 +2853,7 @@ static DECLCALLBACK(int) vhdResize(void *pBackendData, uint64_t cbSize,
     return rc;
 }
 
-/** @copydoc VBOXHDDBACKEND::pfnRepair */
+/** @interface_method_impl{VBOXHDDBACKEND,pfnRepair} */
 static DECLCALLBACK(int) vhdRepair(const char *pszFilename, PVDINTERFACE pVDIfsDisk,
                                    PVDINTERFACE pVDIfsImage, uint32_t fFlags)
 {
@@ -3275,12 +3275,12 @@ const VBOXHDDBACKEND g_VhdBackend =
     vhdSetParentModificationUuid,
     /* pfnDump */
     vhdDump,
-    /* pfnGetTimeStamp */
-    vhdGetTimeStamp,
-    /* pfnGetParentTimeStamp */
-    vhdGetParentTimeStamp,
-    /* pfnSetParentTimeStamp */
-    vhdSetParentTimeStamp,
+    /* pfnGetTimestamp */
+    vhdGetTimestamp,
+    /* pfnGetParentTimestamp */
+    vhdGetParentTimestamp,
+    /* pfnSetParentTimestamp */
+    vhdSetParentTimestamp,
     /* pfnGetParentFilename */
     vhdGetParentFilename,
     /* pfnSetParentFilename */
diff --git a/src/VBox/Storage/VHDX.cpp b/src/VBox/Storage/VHDX.cpp
index 5a10e34..b64edfa 100644
--- a/src/VBox/Storage/VHDX.cpp
+++ b/src/VBox/Storage/VHDX.cpp
@@ -2529,11 +2529,11 @@ const VBOXHDDBACKEND g_VhdxBackend =
     vhdxSetParentModificationUuid,
     /* pfnDump */
     vhdxDump,
-    /* pfnGetTimeStamp */
+    /* pfnGetTimestamp */
     NULL,
-    /* pfnGetParentTimeStamp */
+    /* pfnGetParentTimestamp */
     NULL,
-    /* pfnSetParentTimeStamp */
+    /* pfnSetParentTimestamp */
     NULL,
     /* pfnGetParentFilename */
     NULL,
diff --git a/src/VBox/Storage/VMDK.cpp b/src/VBox/Storage/VMDK.cpp
index 141736d..4b9d6d3 100644
--- a/src/VBox/Storage/VMDK.cpp
+++ b/src/VBox/Storage/VMDK.cpp
@@ -6668,11 +6668,11 @@ const VBOXHDDBACKEND g_VmdkBackend =
     vmdkSetParentModificationUuid,
     /* pfnDump */
     vmdkDump,
-    /* pfnGetTimeStamp */
+    /* pfnGetTimestamp */
     NULL,
-    /* pfnGetParentTimeStamp */
+    /* pfnGetParentTimestamp */
     NULL,
-    /* pfnSetParentTimeStamp */
+    /* pfnSetParentTimestamp */
     NULL,
     /* pfnGetParentFilename */
     NULL,
diff --git a/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp b/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp
index 84c25c0..828afe1 100644
--- a/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp
+++ b/src/VBox/VMM/VMMAll/CPUMAllMsrs.cpp
@@ -62,7 +62,7 @@
  *          current context (raw-mode or ring-0).
  * @retval  VERR_CPUM_RAISE_GP_0 on failure (invalid MSR).
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idMsr       The MSR we're reading.
  * @param   pRange      The MSR range descriptor.
  * @param   puValue     Where to return the value.
@@ -80,7 +80,7 @@ typedef FNCPUMRDMSR *PFNCPUMRDMSR;
  *          current context (raw-mode or ring-0).
  * @retval  VERR_CPUM_RAISE_GP_0 on failure.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idMsr       The MSR we're writing.
  * @param   pRange      The MSR range descriptor.
  * @param   uValue      The value to set, ignored bits masked.
@@ -362,7 +362,7 @@ static DECLCALLBACK(VBOXSTRICTRC) cpumMsrWr_Ia32APerf(PVMCPU pVCpu, uint32_t idM
 }
 
 
-/** @callback_method_impl{FNCPUMWRMSR} */
+/** @callback_method_impl{FNCPUMRDMSR} */
 static DECLCALLBACK(VBOXSTRICTRC) cpumMsrRd_Ia32MtrrCap(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRANGE pRange, uint64_t *puValue)
 {
     /* This is currently a bit weird. :-) */
@@ -4906,7 +4906,7 @@ static const PFNCPUMWRMSR g_aCpumWrMsrFns[kCpumMsrWrFn_End] =
  * Looks up the range for the given MSR.
  *
  * @returns Pointer to the range if found, NULL if not.
- * @param   pVM                 The cross context VM structure.
+ * @param   pVM                The cross context VM structure.
  * @param   idMsr               The MSR to look up.
  */
 # ifndef IN_RING3
@@ -4979,7 +4979,7 @@ PCPUMMSRRANGE cpumLookupMsrRange(PVM pVM, uint32_t idMsr)
  *          current context (raw-mode or ring-0).
  * @retval  VERR_CPUM_RAISE_GP_0 on failure (invalid MSR), the caller is
  *          expected to take the appropriate actions. @a *puValue is set to 0.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   idMsr               The MSR.
  * @param   puValue             Where to return the value.
  *
@@ -5048,7 +5048,7 @@ VMMDECL(VBOXSTRICTRC) CPUMQueryGuestMsr(PVMCPU pVCpu, uint32_t idMsr, uint64_t *
  * @retval  VERR_CPUM_RAISE_GP_0 on failure, the caller is expected to take the
  *          appropriate actions.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idMsr       The MSR id.
  * @param   uValue      The value to set.
  *
@@ -5609,7 +5609,7 @@ int cpumR3MsrStrictInitChecks(void)
  * other frequency ratios.
  *
  * @returns Scalable bus frequency in Hz. Will not return CPUM_SBUSFREQ_UNKNOWN.
- * @param   pVM                 Pointer to the shared VM structure.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMDECL(uint64_t) CPUMGetGuestScalableBusFrequency(PVM pVM)
 {
@@ -5626,8 +5626,7 @@ VMMDECL(uint64_t) CPUMGetGuestScalableBusFrequency(PVM pVM)
  * Fast way for HM to access the MSR_K8_TSC_AUX register.
  *
  * @returns The register value.
- * @param   pVCpu               Pointer to the cross context CPU structure for
- *                              the calling EMT.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @thread  EMT(pVCpu)
  */
 VMMR0_INT_DECL(uint64_t) CPUMR0GetGuestTscAux(PVMCPU pVCpu)
@@ -5639,9 +5638,8 @@ VMMR0_INT_DECL(uint64_t) CPUMR0GetGuestTscAux(PVMCPU pVCpu)
 /**
  * Fast way for HM to access the MSR_K8_TSC_AUX register.
  *
- * @param   pVCpu               Pointer to the cross context CPU structure for
- *                              the calling EMT.
- * @param   uValue              The new value.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
+ * @param   uValue  The new value.
  * @thread  EMT(pVCpu)
  */
 VMMR0_INT_DECL(void) CPUMR0SetGuestTscAux(PVMCPU pVCpu, uint64_t uValue)
diff --git a/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp b/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
index badd7b8..5305b46 100644
--- a/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
+++ b/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
@@ -86,7 +86,7 @@ AssertCompile2MemberOffsets(VM, cpum.s.GuestFeatures, cpum.ro.GuestFeatures);
 /**
  * Does the lazy hidden selector register loading.
  *
- * @param   pVCpu       The current Virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pSReg       The selector register to lazily load hidden parts of.
  */
 static void cpumGuestLazyLoadHiddenSelectorReg(PVMCPU pVCpu, PCPUMSELREG pSReg)
@@ -140,7 +140,7 @@ static void cpumGuestLazyLoadHiddenSelectorReg(PVMCPU pVCpu, PCPUMSELREG pSReg)
  * Makes sure the hidden CS and SS selector registers are valid, loading them if
  * necessary.
  *
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  */
 VMM_INT_DECL(void) CPUMGuestLazyLoadHiddenCsAndSs(PVMCPU pVCpu)
 {
@@ -152,7 +152,7 @@ VMM_INT_DECL(void) CPUMGuestLazyLoadHiddenCsAndSs(PVMCPU pVCpu)
 /**
  * Loads a the hidden parts of a selector register.
  *
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  */
 VMM_INT_DECL(void) CPUMGuestLazyLoadHiddenSelectorReg(PVMCPU pVCpu, PCPUMSELREG pSReg)
 {
@@ -168,7 +168,7 @@ VMM_INT_DECL(void) CPUMGuestLazyLoadHiddenSelectorReg(PVMCPU pVCpu, PCPUMSELREG
  * We don't support nested hypervisor context interrupts or traps.  Life is much
  * simpler when we don't.  It's also slightly faster at times.
  *
- * @param   pVM         Handle to the virtual machine.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(PCCPUMCTXCORE) CPUMGetHyperCtxCore(PVMCPU pVCpu)
 {
@@ -179,7 +179,7 @@ VMMDECL(PCCPUMCTXCORE) CPUMGetHyperCtxCore(PVMCPU pVCpu)
 /**
  * Gets the pointer to the hypervisor CPU context structure of a virtual CPU.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(PCPUMCTX) CPUMGetHyperCtxPtr(PVMCPU pVCpu)
 {
@@ -286,7 +286,7 @@ VMMDECL(void) CPUMSetHyperEIP(PVMCPU pVCpu, uint32_t u32EIP)
  * register will be set to sane values for C/C++ code execution with interrupts
  * disabled and IOPL 0.
  *
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   u32EIP              The EIP value.
  * @param   u32ESP              The ESP value.
  * @param   u32EAX              The EAX value.
@@ -319,7 +319,7 @@ VMMDECL(void) CPUMSetHyperLDTR(PVMCPU pVCpu, RTSEL SelLDTR)
 }
 
 
-/** @MAYBE_LOAD_DRx
+/** @def MAYBE_LOAD_DRx
  * Macro for updating DRx values in raw-mode and ring-0 contexts.
  */
 #ifdef IN_RING0
@@ -556,7 +556,7 @@ VMMDECL(RTGCUINTREG) CPUMGetHyperDR7(PVMCPU pVCpu)
  * Gets the pointer to the internal CPUMCTXCORE structure.
  * This is only for reading in order to save a few calls.
  *
- * @param   pVCpu       Handle to the virtual cpu.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(PCCPUMCTXCORE) CPUMGetGuestCtxCore(PVMCPU pVCpu)
 {
@@ -568,7 +568,7 @@ VMMDECL(PCCPUMCTXCORE) CPUMGetGuestCtxCore(PVMCPU pVCpu)
  * Queries the pointer to the internal CPUMCTX structure.
  *
  * @returns The CPUMCTX pointer.
- * @param   pVCpu       Handle to the virtual cpu.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(PCPUMCTX) CPUMQueryGuestCtxPtr(PVMCPU pVCpu)
 {
@@ -643,7 +643,7 @@ VMMDECL(int) CPUMSetGuestLDTR(PVMCPU pVCpu, uint16_t ldtr)
  * WP, PG or PE changes.
  *
  * @returns VINF_SUCCESS (consider it void).
- * @param   pVCpu   Handle to the virtual cpu.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   cr0     The new CR0 value.
  */
 VMMDECL(int) CPUMSetGuestCR0(PVMCPU pVCpu, uint64_t cr0)
@@ -1148,7 +1148,7 @@ VMMDECL(uint64_t) CPUMGetGuestEFER(PVMCPU pVCpu)
  *
  * @returns Pointer to the leaf if found, NULL if not.
  *
- * @param   pVM                 Pointer to the cross context VM structure.
+ * @param   pVM                 The cross context VM structure.
  * @param   uLeaf               The leaf to get.
  */
 PCPUMCPUIDLEAF cpumCpuIdGetLeaf(PVM pVM, uint32_t uLeaf)
@@ -1202,7 +1202,7 @@ PCPUMCPUIDLEAF cpumCpuIdGetLeaf(PVM pVM, uint32_t uLeaf)
  *
  * @returns Pointer to the leaf if found, NULL if not.
  *
- * @param   pVM                 Pointer to the cross context VM structure.
+ * @param   pVM                 The cross context VM structure.
  * @param   uLeaf               The leaf to get.
  * @param   uSubLeaf            The subleaf, if applicable.  Just pass 0 if it
  *                              isn't.
@@ -1265,7 +1265,7 @@ PCPUMCPUIDLEAF cpumCpuIdGetLeafEx(PVM pVM, uint32_t uLeaf, uint32_t uSubLeaf, bo
 /**
  * Gets a CPUID leaf.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   uLeaf       The CPUID leaf to get.
  * @param   uSubLeaf    The CPUID sub-leaf to get, if applicable.
  * @param   pEax        Where to store the EAX value.
@@ -1367,7 +1367,7 @@ VMMDECL(void) CPUMGetGuestCpuId(PVMCPU pVCpu, uint32_t uLeaf, uint32_t uSubLeaf,
 /**
  * Sets a CPUID feature bit.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmFeature      The feature to set.
  */
 VMMDECL(void) CPUMSetGuestCpuIdFeature(PVM pVM, CPUMCPUIDFEATURE enmFeature)
@@ -1635,7 +1635,7 @@ VMMDECL(void) CPUMSetGuestCpuIdFeature(PVM pVM, CPUMCPUIDFEATURE enmFeature)
  * Queries a CPUID feature bit.
  *
  * @returns boolean for feature presence
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmFeature      The feature to query.
  */
 VMMDECL(bool) CPUMGetGuestCpuIdFeature(PVM pVM, CPUMCPUIDFEATURE enmFeature)
@@ -1668,7 +1668,7 @@ VMMDECL(bool) CPUMGetGuestCpuIdFeature(PVM pVM, CPUMCPUIDFEATURE enmFeature)
 /**
  * Clears a CPUID feature bit.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmFeature      The feature to clear.
  */
 VMMDECL(void) CPUMClearGuestCpuIdFeature(PVM pVM, CPUMCPUIDFEATURE enmFeature)
@@ -1796,7 +1796,7 @@ VMMDECL(void) CPUMClearGuestCpuIdFeature(PVM pVM, CPUMCPUIDFEATURE enmFeature)
  * Gets the host CPU vendor.
  *
  * @returns CPU vendor.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(CPUMCPUVENDOR) CPUMGetHostCpuVendor(PVM pVM)
 {
@@ -1808,7 +1808,7 @@ VMMDECL(CPUMCPUVENDOR) CPUMGetHostCpuVendor(PVM pVM)
  * Gets the CPU vendor.
  *
  * @returns CPU vendor.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(CPUMCPUVENDOR) CPUMGetGuestCpuVendor(PVM pVM)
 {
@@ -1893,7 +1893,7 @@ VMMDECL(int) CPUMSetGuestDRx(PVMCPU pVCpu, uint32_t iReg, uint64_t Value)
  * all the time.
  *
  * @returns VINF_SUCCESS.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   iGstReg     The guest debug register number that was modified.
  *                      UINT8_MAX if not guest register.
  * @param   fForceHyper Used in HM to force hyper registers because of single
@@ -2139,8 +2139,7 @@ VMMDECL(int) CPUMRecalcHyperDRx(PVMCPU pVCpu, uint8_t iGstReg, bool fForceHyper)
  *
  * @returns VINF_SUCCESS on success, VERR_CPUM_RAISE_GP_0 on invalid input
  *          value.
- * @param   pVCpu       Pointer to the cross context VMCPU structure for the
- *                      calling EMT.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   uNewValue   The new value.
  * @thread  EMT(pVCpu)
  */
@@ -2192,7 +2191,7 @@ VMM_INT_DECL(int)   CPUMSetGuestXcr0(PVMCPU pVCpu, uint64_t uNewValue)
  * Tests if the guest has No-Execute Page Protection Enabled (NXE).
  *
  * @returns true if in real mode, otherwise false.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestNXEnabled(PVMCPU pVCpu)
 {
@@ -2204,7 +2203,7 @@ VMMDECL(bool) CPUMIsGuestNXEnabled(PVMCPU pVCpu)
  * Tests if the guest has the Page Size Extension enabled (PSE).
  *
  * @returns true if in real mode, otherwise false.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestPageSizeExtEnabled(PVMCPU pVCpu)
 {
@@ -2217,7 +2216,7 @@ VMMDECL(bool) CPUMIsGuestPageSizeExtEnabled(PVMCPU pVCpu)
  * Tests if the guest has the paging enabled (PG).
  *
  * @returns true if in real mode, otherwise false.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestPagingEnabled(PVMCPU pVCpu)
 {
@@ -2229,7 +2228,7 @@ VMMDECL(bool) CPUMIsGuestPagingEnabled(PVMCPU pVCpu)
  * Tests if the guest has the paging enabled (PG).
  *
  * @returns true if in real mode, otherwise false.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestR0WriteProtEnabled(PVMCPU pVCpu)
 {
@@ -2241,7 +2240,7 @@ VMMDECL(bool) CPUMIsGuestR0WriteProtEnabled(PVMCPU pVCpu)
  * Tests if the guest is running in real mode or not.
  *
  * @returns true if in real mode, otherwise false.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestInRealMode(PVMCPU pVCpu)
 {
@@ -2253,7 +2252,7 @@ VMMDECL(bool) CPUMIsGuestInRealMode(PVMCPU pVCpu)
  * Tests if the guest is running in real or virtual 8086 mode.
  *
  * @returns @c true if it is, @c false if not.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestInRealOrV86Mode(PVMCPU pVCpu)
 {
@@ -2266,7 +2265,7 @@ VMMDECL(bool) CPUMIsGuestInRealOrV86Mode(PVMCPU pVCpu)
  * Tests if the guest is running in protected or not.
  *
  * @returns true if in protected mode, otherwise false.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestInProtectedMode(PVMCPU pVCpu)
 {
@@ -2278,7 +2277,7 @@ VMMDECL(bool) CPUMIsGuestInProtectedMode(PVMCPU pVCpu)
  * Tests if the guest is running in paged protected or not.
  *
  * @returns true if in paged protected mode, otherwise false.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestInPagedProtectedMode(PVMCPU pVCpu)
 {
@@ -2290,7 +2289,7 @@ VMMDECL(bool) CPUMIsGuestInPagedProtectedMode(PVMCPU pVCpu)
  * Tests if the guest is running in long mode or not.
  *
  * @returns true if in long mode, otherwise false.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestInLongMode(PVMCPU pVCpu)
 {
@@ -2302,7 +2301,7 @@ VMMDECL(bool) CPUMIsGuestInLongMode(PVMCPU pVCpu)
  * Tests if the guest is running in PAE mode or not.
  *
  * @returns true if in PAE mode, otherwise false.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestInPAEMode(PVMCPU pVCpu)
 {
@@ -2318,7 +2317,7 @@ VMMDECL(bool) CPUMIsGuestInPAEMode(PVMCPU pVCpu)
  * Tests if the guest is running in 64 bits mode or not.
  *
  * @returns true if in 64 bits protected mode, otherwise false.
- * @param   pVCpu       The current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(bool) CPUMIsGuestIn64BitCode(PVMCPU pVCpu)
 {
@@ -2347,7 +2346,7 @@ VMM_INT_DECL(bool) CPUMIsGuestIn64BitCodeSlow(PCPUMCTX pCtx)
  *
  * @returns @c true if we've entered raw-mode and selectors with RPL=1 are
  *          really RPL=0, @c false if we've not (RPL=1 really is RPL=1).
- * @param   pVCpu       The current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMM_INT_DECL(bool) CPUMIsGuestInRawMode(PVMCPU pVCpu)
 {
@@ -2359,8 +2358,8 @@ VMM_INT_DECL(bool) CPUMIsGuestInRawMode(PVMCPU pVCpu)
  *
  * This function will change the any of the cs and ss register with DPL=0 to DPL=1.
  *
- * @returns VBox status. (recompiler failure)
- * @param   pVCpu       Pointer to the VMCPU.
+ * @returns VBox status code. (recompiler failure)
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @see     @ref pg_raw
  */
 VMM_INT_DECL(int) CPUMRawEnter(PVMCPU pVCpu)
@@ -2434,7 +2433,7 @@ VMM_INT_DECL(int) CPUMRawEnter(PVMCPU pVCpu)
  * This function will change any selector registers with DPL=1 to DPL=0.
  *
  * @returns Adjusted rc.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   rc          Raw mode return code
  * @see     @ref pg_raw
  */
@@ -2539,7 +2538,7 @@ VMM_INT_DECL(int) CPUMRawLeave(PVMCPU pVCpu, int rc)
 /**
  * Updates the EFLAGS while we're in raw-mode.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   fEfl        The new EFLAGS value.
  */
 VMMDECL(void) CPUMRawSetEFlags(PVMCPU pVCpu, uint32_t fEfl)
@@ -2557,7 +2556,7 @@ VMMDECL(void) CPUMRawSetEFlags(PVMCPU pVCpu, uint32_t fEfl)
  * Gets the EFLAGS while we're in raw-mode.
  *
  * @returns The eflags.
- * @param   pVCpu       Pointer to the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(uint32_t) CPUMRawGetEFlags(PVMCPU pVCpu)
 {
@@ -2572,11 +2571,12 @@ VMMDECL(uint32_t) CPUMRawGetEFlags(PVMCPU pVCpu)
 /**
  * Sets the specified changed flags (CPUM_CHANGED_*).
  *
- * @param   pVCpu       Pointer to the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
+ * @param   fChangedAdd The changed flags to add.
  */
-VMMDECL(void) CPUMSetChangedFlags(PVMCPU pVCpu, uint32_t fChangedFlags)
+VMMDECL(void) CPUMSetChangedFlags(PVMCPU pVCpu, uint32_t fChangedAdd)
 {
-    pVCpu->cpum.s.fChanged |= fChangedFlags;
+    pVCpu->cpum.s.fChanged |= fChangedAdd;
 }
 
 
@@ -2585,7 +2585,7 @@ VMMDECL(void) CPUMSetChangedFlags(PVMCPU pVCpu, uint32_t fChangedFlags)
  *
  * @returns true if supported.
  * @returns false if not supported.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(bool) CPUMSupportsXSave(PVM pVM)
 {
@@ -2597,7 +2597,7 @@ VMMDECL(bool) CPUMSupportsXSave(PVM pVM)
  * Checks if the host OS uses the SYSENTER / SYSEXIT instructions.
  * @returns true if used.
  * @returns false if not used.
- * @param   pVM       Pointer to the VM.
+ * @param   pVM       The cross context VM structure.
  */
 VMMDECL(bool) CPUMIsHostUsingSysEnter(PVM pVM)
 {
@@ -2609,7 +2609,7 @@ VMMDECL(bool) CPUMIsHostUsingSysEnter(PVM pVM)
  * Checks if the host OS uses the SYSCALL / SYSRET instructions.
  * @returns true if used.
  * @returns false if not used.
- * @param   pVM       Pointer to the VM.
+ * @param   pVM       The cross context VM structure.
  */
 VMMDECL(bool) CPUMIsHostUsingSysCall(PVM pVM)
 {
@@ -2622,7 +2622,7 @@ VMMDECL(bool) CPUMIsHostUsingSysCall(PVM pVM)
  * Lazily sync in the FPU/XMM state.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(int) CPUMHandleLazyFPU(PVMCPU pVCpu)
 {
@@ -2635,7 +2635,7 @@ VMMDECL(int) CPUMHandleLazyFPU(PVMCPU pVCpu)
  * Checks if we activated the FPU/XMM state of the guest OS.
  * @returns true if we did.
  * @returns false if not.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 VMMDECL(bool) CPUMIsGuestFPUStateActive(PVMCPU pVCpu)
 {
@@ -2647,7 +2647,7 @@ VMMDECL(bool) CPUMIsGuestFPUStateActive(PVMCPU pVCpu)
  * Checks if the guest debug state is active.
  *
  * @returns boolean
- * @param   pVM         Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(bool) CPUMIsGuestDebugStateActive(PVMCPU pVCpu)
 {
@@ -2660,7 +2660,7 @@ VMMDECL(bool) CPUMIsGuestDebugStateActive(PVMCPU pVCpu)
  * (currently only used for the 32->64 switcher case).
  *
  * @returns boolean
- * @param   pVM         Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(bool) CPUMIsGuestDebugStateActivePending(PVMCPU pVCpu)
 {
@@ -2672,7 +2672,7 @@ VMMDECL(bool) CPUMIsGuestDebugStateActivePending(PVMCPU pVCpu)
  * Checks if the hyper debug state is active.
  *
  * @returns boolean
- * @param   pVM         Pointer to the VM.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(bool) CPUMIsHyperDebugStateActive(PVMCPU pVCpu)
 {
@@ -2685,7 +2685,7 @@ VMMDECL(bool) CPUMIsHyperDebugStateActive(PVMCPU pVCpu)
  * (currently only used for the 32->64 switcher case).
  *
  * @returns boolean
- * @param   pVM         Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(bool) CPUMIsHyperDebugStateActivePending(PVMCPU pVCpu)
 {
@@ -2697,7 +2697,7 @@ VMMDECL(bool) CPUMIsHyperDebugStateActivePending(PVMCPU pVCpu)
  * Mark the guest's debug state as inactive.
  *
  * @returns boolean
- * @param   pVM         Pointer to the VM.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @todo    This API doesn't make sense any more.
  */
 VMMDECL(void) CPUMDeactivateGuestDebugState(PVMCPU pVCpu)
@@ -2710,7 +2710,7 @@ VMMDECL(void) CPUMDeactivateGuestDebugState(PVMCPU pVCpu)
  * Get the current privilege level of the guest.
  *
  * @returns CPL
- * @param   pVCpu       Pointer to the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(uint32_t) CPUMGetGuestCPL(PVMCPU pVCpu)
 {
@@ -2786,7 +2786,7 @@ VMMDECL(uint32_t) CPUMGetGuestCPL(PVMCPU pVCpu)
  * If paging mode is what you need, check out PGMGetGuestMode().
  *
  * @returns The CPU mode.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(CPUMMODE) CPUMGetGuestMode(PVMCPU pVCpu)
 {
@@ -2806,7 +2806,7 @@ VMMDECL(CPUMMODE) CPUMGetGuestMode(PVMCPU pVCpu)
  * Figure whether the CPU is currently executing 16, 32 or 64 bit code.
  *
  * @returns 16, 32 or 64.
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(uint32_t)       CPUMGetGuestCodeBits(PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMAll/CSAMAll.cpp b/src/VBox/VMM/VMMAll/CSAMAll.cpp
index 6f4a3e7..6b09c14 100644
--- a/src/VBox/VMM/VMMAll/CSAMAll.cpp
+++ b/src/VBox/VMM/VMMAll/CSAMAll.cpp
@@ -53,23 +53,8 @@
 
 
 /**
- * Access handler callback for virtual access handler ranges.
- *
- * Important to realize that a physical page in a range can have aliases, and
- * for ALL and WRITE handlers these will also trigger.
- *
- * @returns VINF_SUCCESS if the handler have carried out the operation.
- * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu       Pointer to the cross context CPU context for the
- *                      calling EMT.
- * @param   GCPtr           The virtual address the guest is writing to. (not correct if it's an alias!)
- * @param   pvPtr           The HC mapping of that address.
- * @param   pvBuf           What the guest is reading/writing.
- * @param   cbBuf           How much it's reading/writing.
- * @param   enmAccessType   The access type.
- * @param   enmOrigin       Who is making this write.
- * @param   pvUser          The CSAMPAGEREC in ring-3, NIL in RC.
+ * @callback_method_impl{FNPGMVIRTHANDLER,
+ * Access handler callback for virtual access handler ranges.}
  */
 PGM_ALL_CB2_DECL(VBOXSTRICTRC)
 csamCodePageWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
@@ -170,7 +155,7 @@ csamCodePageWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void
  * Check if this page needs to be analysed by CSAM
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvFault     Fault address
  */
 VMM_INT_DECL(int) CSAMExecFault(PVM pVM, RTRCPTR pvFault)
@@ -198,7 +183,7 @@ VMM_INT_DECL(int) CSAMExecFault(PVM pVM, RTRCPTR pvFault)
  * Check if this page was previously scanned by CSAM
  *
  * @returns true -> scanned, false -> not scanned
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       GC page address
  */
 VMM_INT_DECL(bool) CSAMIsPageScanned(PVM pVM, RTRCPTR pPage)
@@ -225,7 +210,7 @@ VMM_INT_DECL(bool) CSAMIsPageScanned(PVM pVM, RTRCPTR pPage)
  * @note: we always mark it as scanned, even if we haven't completely done so
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       GC page address (not necessarily aligned)
  * @param   fScanned    Mark as scanned or not scanned
  *
@@ -297,7 +282,7 @@ VMM_INT_DECL(int) CSAMMarkPage(PVM pVM, RTRCUINTPTR pPage, bool fScanned)
  * @returns true if the page should be marked not present because
  *          CSAM want need to scan it.
  * @returns false if the page was already scanned.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       GC pointer of page
  */
 VMM_INT_DECL(bool) CSAMDoesPageNeedScanning(PVM pVM, RTRCUINTPTR GCPtr)
@@ -321,7 +306,7 @@ VMM_INT_DECL(bool) CSAMDoesPageNeedScanning(PVM pVM, RTRCUINTPTR GCPtr)
  * Remember a possible code page for later inspection
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       GC pointer of page
  */
 VMM_INT_DECL(void) CSAMMarkPossibleCodePage(PVM pVM, RTRCPTR GCPtr)
@@ -340,7 +325,7 @@ VMM_INT_DECL(void) CSAMMarkPossibleCodePage(PVM pVM, RTRCPTR GCPtr)
  * Turn on code scanning
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(int) CSAMEnableScanning(PVM pVM)
 {
@@ -353,7 +338,7 @@ VMM_INT_DECL(int) CSAMEnableScanning(PVM pVM)
  * Turn off code scanning
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(int) CSAMDisableScanning(PVM pVM)
 {
@@ -370,7 +355,7 @@ VMM_INT_DECL(int) CSAMDisableScanning(PVM pVM)
  * tree lookup is likely to be more expensive. (as it would also have to be offset based)
  *
  * @returns boolean
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       GC pointer of page table entry
  */
 VMM_INT_DECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RTRCUINTPTR GCPtr)
diff --git a/src/VBox/VMM/VMMAll/DBGFAll.cpp b/src/VBox/VMM/VMMAll/DBGFAll.cpp
index e72b508..3574430 100644
--- a/src/VBox/VMM/VMMAll/DBGFAll.cpp
+++ b/src/VBox/VMM/VMMAll/DBGFAll.cpp
@@ -31,7 +31,7 @@
  * Gets the hardware breakpoint configuration as DR7.
  *
  * @returns DR7 from the DBGF point of view.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(RTGCUINTREG) DBGFBpGetDR7(PVM pVM)
 {
@@ -62,7 +62,7 @@ VMM_INT_DECL(RTGCUINTREG) DBGFBpGetDR7(PVM pVM)
  * Gets the address of the hardware breakpoint number 0.
  *
  * @returns DR0 from the DBGF point of view.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(RTGCUINTREG) DBGFBpGetDR0(PVM pVM)
 {
@@ -76,7 +76,7 @@ VMM_INT_DECL(RTGCUINTREG) DBGFBpGetDR0(PVM pVM)
  * Gets the address of the hardware breakpoint number 1.
  *
  * @returns DR1 from the DBGF point of view.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(RTGCUINTREG) DBGFBpGetDR1(PVM pVM)
 {
@@ -90,7 +90,7 @@ VMM_INT_DECL(RTGCUINTREG) DBGFBpGetDR1(PVM pVM)
  * Gets the address of the hardware breakpoint number 2.
  *
  * @returns DR2 from the DBGF point of view.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(RTGCUINTREG) DBGFBpGetDR2(PVM pVM)
 {
@@ -104,7 +104,7 @@ VMM_INT_DECL(RTGCUINTREG) DBGFBpGetDR2(PVM pVM)
  * Gets the address of the hardware breakpoint number 3.
  *
  * @returns DR3 from the DBGF point of view.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(RTGCUINTREG) DBGFBpGetDR3(PVM pVM)
 {
@@ -118,7 +118,7 @@ VMM_INT_DECL(RTGCUINTREG) DBGFBpGetDR3(PVM pVM)
  * Checks if any of the hardware breakpoints are armed.
  *
  * @returns true if armed, false if not.
- * @param   pVM         The cross context VM structure.
+ * @param   pVM        The cross context VM structure.
  */
 VMM_INT_DECL(bool) DBGFBpIsHwArmed(PVM pVM)
 {
@@ -134,7 +134,7 @@ VMM_INT_DECL(bool) DBGFBpIsHwArmed(PVM pVM)
  * Checks if any of the hardware I/O breakpoints are armed.
  *
  * @returns true if armed, false if not.
- * @param   pVM         The cross context VM structure.
+ * @param   pVM        The cross context VM structure.
  */
 VMM_INT_DECL(bool) DBGFBpIsHwIoArmed(PVM pVM)
 {
@@ -168,8 +168,8 @@ VMM_INT_DECL(bool) DBGFBpIsHwIoArmed(PVM pVM)
  * @retval  VINF_EM_RAW_GUEST_TRAP guest breakpoint triggered, DR6 and DR7 have
  *          been updated appropriately.
  *
- * @param   pVM         The cross context VM structure.
- * @param   pVCpu       The cross context CPU structure for the calling EMT.
+ * @param   pVM        The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtx        The CPU context for the calling EMT.
  * @param   uIoPort     The I/O port being accessed.
  * @param   cbValue     The size/width of the access, in bytes.
@@ -258,7 +258,7 @@ VMM_INT_DECL(VBOXSTRICTRC)  DBGFBpCheckIo(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx,
  *
  * @returns stepping (true) or not (false).
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(bool) DBGFIsStepping(PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMAll/EMAll.cpp b/src/VBox/VMM/VMMAll/EMAll.cpp
index 6248a3f..b5ee145 100644
--- a/src/VBox/VMM/VMMAll/EMAll.cpp
+++ b/src/VBox/VMM/VMMAll/EMAll.cpp
@@ -121,17 +121,19 @@ static size_t  g_cbIemWrote;
  * Get the current execution manager status.
  *
  * @returns Current status.
- * @param   pVCpu         Pointer to the VMCPU.
+ * @param   pVCpu         The cross context virtual CPU structure.
  */
 VMM_INT_DECL(EMSTATE) EMGetState(PVMCPU pVCpu)
 {
     return pVCpu->em.s.enmState;
 }
 
+
 /**
  * Sets the current execution manager status. (use only when you know what you're doing!)
  *
- * @param   pVCpu         Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   enmNewState The new state, EMSTATE_WAIT_SIPI or EMSTATE_HALTED.
  */
 VMM_INT_DECL(void)    EMSetState(PVMCPU pVCpu, EMSTATE enmNewState)
 {
@@ -144,7 +146,7 @@ VMM_INT_DECL(void)    EMSetState(PVMCPU pVCpu, EMSTATE enmNewState)
 /**
  * Sets the PC for which interrupts should be inhibited.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   PC          The PC.
  */
 VMMDECL(void) EMSetInhibitInterruptsPC(PVMCPU pVCpu, RTGCUINTPTR PC)
@@ -164,7 +166,7 @@ VMMDECL(void) EMSetInhibitInterruptsPC(PVMCPU pVCpu, RTGCUINTPTR PC)
  *      - POP SS
  *
  * @returns The PC for which interrupts should be inhibited.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  */
 VMMDECL(RTGCUINTPTR) EMGetInhibitInterruptsPC(PVMCPU pVCpu)
@@ -177,7 +179,7 @@ VMMDECL(RTGCUINTPTR) EMGetInhibitInterruptsPC(PVMCPU pVCpu)
  * Prepare an MWAIT - essentials of the MONITOR instruction.
  *
  * @returns VINF_SUCCESS
- * @param   pVCpu               The current CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   rax                 The content of RAX.
  * @param   rcx                 The content of RCX.
  * @param   rdx                 The content of RDX.
@@ -200,7 +202,7 @@ VMM_INT_DECL(int) EMMonitorWaitPrepare(PVMCPU pVCpu, uint64_t rax, uint64_t rcx,
  * Performs an MWAIT.
  *
  * @returns VINF_SUCCESS
- * @param   pVCpu               The current CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   rax                 The content of RAX.
  * @param   rcx                 The content of RCX.
  */
@@ -225,7 +227,7 @@ VMM_INT_DECL(int) EMMonitorWaitPerform(PVMCPU pVCpu, uint64_t rax, uint64_t rcx)
  * Clears MWAIT flags if returning @c true.
  *
  * @returns true if we should continue, false if we should halt.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCtx            Current CPU context.
  */
 VMM_INT_DECL(bool) EMMonitorWaitShouldContinue(PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -249,7 +251,7 @@ VMM_INT_DECL(bool) EMMonitorWaitShouldContinue(PVMCPU pVCpu, PCPUMCTX pCtx)
  * Determine if we should continue after encountering a hlt instruction.
  *
  * @returns true if we should continue, false if we should halt.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCtx            Current CPU context.
  */
 VMM_INT_DECL(bool) EMShouldContinueAfterHalt(PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -263,7 +265,7 @@ VMM_INT_DECL(bool) EMShouldContinueAfterHalt(PVMCPU pVCpu, PCPUMCTX pCtx)
 /**
  * Locks REM execution to a single VCPU.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(void) EMRemLock(PVM pVM)
 {
@@ -282,7 +284,7 @@ VMMDECL(void) EMRemLock(PVM pVM)
 /**
  * Unlocks REM execution
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(void) EMRemUnlock(PVM pVM)
 {
@@ -299,7 +301,7 @@ VMMDECL(void) EMRemUnlock(PVM pVM)
  * Check if this VCPU currently owns the REM lock.
  *
  * @returns bool owner/not owner
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(bool) EMRemIsLockOwner(PVM pVM)
 {
@@ -318,7 +320,7 @@ VMMDECL(bool) EMRemIsLockOwner(PVM pVM)
  * Try to acquire the REM lock.
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(int) EMRemTryLock(PVM pVM)
 {
@@ -431,8 +433,8 @@ DECLINLINE(int) emDisCoreOne(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, RTGCUINTP
  * @returns VBox status code, see SELMToFlatEx and EMInterpretDisasOneEx for
  *          details.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pDis            Where to return the parsed instruction info.
  * @param   pcbInstr        Where to return the instruction size. (optional)
  */
@@ -464,8 +466,8 @@ VMM_INT_DECL(int) EMInterpretDisasCurrent(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pD
  *
  * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   GCPtrInstr      The flat address of the instruction.
  * @param   pCtxCore        The context core (used to determine the cpu mode).
  * @param   pDis            Where to return the parsed instruction info.
@@ -695,11 +697,10 @@ static void emCompareWithIem(PVMCPU pVCpu, PCCPUMCTX pEmCtx, PCCPUMCTX pIemCtx,
  * @retval  VERR_EM_INTERPRETER     Something we can't cope with.
  * @retval  VERR_*                  Fatal errors.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
  *                      Updates the EIP if an instruction was executed successfully.
  * @param   pvFault     The fault address (CR2).
- * @param   pcbSize     Size of the write (if applicable).
  *
  * @remark  Invalid opcode exceptions have a higher priority than GP (see Intel
  *          Architecture System Developers Manual, Vol 3, 5.5) so we don't need
@@ -823,8 +824,7 @@ VMM_INT_DECL(VBOXSTRICTRC) EMInterpretInstruction(PVMCPU pVCpu, PCPUMCTXCORE pRe
  * @retval  VERR_EM_INTERPRETER     Something we can't cope with.
  * @retval  VERR_*                  Fatal errors.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   The register frame.
  *                      Updates the EIP if an instruction was executed successfully.
  * @param   pvFault     The fault address (CR2).
@@ -960,13 +960,11 @@ VMM_INT_DECL(VBOXSTRICTRC) EMInterpretInstructionEx(PVMCPU pVCpu, PCPUMCTXCORE p
  * @retval  VERR_EM_INTERPRETER     Something we can't cope with.
  * @retval  VERR_*                  Fatal errors.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pDis        The disassembler cpu state for the instruction to be
  *                      interpreted.
  * @param   pRegFrame   The register frame. IP/EIP/RIP *IS* changed!
  * @param   pvFault     The fault address (CR2).
- * @param   pcbSize     Size of the write (if applicable).
  * @param   enmCodeType Code type (user/supervisor)
  *
  * @remark  Invalid opcode exceptions have a higher priority than GP (see Intel
@@ -1069,8 +1067,8 @@ DECLINLINE(int) emRCStackRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, void
  * Interpret IRET (currently only to V86 code) - PATM only.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
  *
  */
@@ -1206,8 +1204,8 @@ static int emInterpretIret(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCOR
  * Interpret CPUID given the parameters in the CPU context.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
  *
  */
@@ -1235,8 +1233,8 @@ VMM_INT_DECL(int) EMInterpretCpuId(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame
  * Interpret RDTSC.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
  *
  */
@@ -1265,8 +1263,8 @@ VMM_INT_DECL(int) EMInterpretRdtsc(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame
  * Interpret RDTSCP.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        The CPU context.
  *
  */
@@ -1303,8 +1301,8 @@ VMM_INT_DECL(int) EMInterpretRdtscp(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Interpret RDPMC.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
  *
  */
@@ -1324,8 +1322,8 @@ VMM_INT_DECL(int) EMInterpretRdpmc(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame
     /* Just return zero here; rather tricky to properly emulate this, especially as the specs are a mess. */
     pRegFrame->rax = 0;
     pRegFrame->rdx = 0;
-    /** @todo We should trigger a #GP here if the CPU doesn't support the index in ecx
-     *        but see @bugref{3472}! */
+    /** @todo We should trigger a \#GP here if the CPU doesn't support the index in
+     *        ecx but see @bugref{3472}! */
 
     NOREF(pVM);
     return VINF_SUCCESS;
@@ -1406,8 +1404,8 @@ VMM_INT_DECL(int) EMInterpretMonitor(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFra
  * Interpret INVLPG.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
  * @param   pAddrGC     Operand address.
  *
@@ -1437,10 +1435,10 @@ VMM_INT_DECL(VBOXSTRICTRC) EMInterpretInvlpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE
  * Update CRx.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
- * @param   DestRegCRx  CRx register index (DISUSE_REG_CR*)
+ * @param   DestRegCrx  CRx register index (DISUSE_REG_CR*)
  * @param   val         New CRx value
  *
  */
@@ -1491,14 +1489,14 @@ static int emUpdateCRx(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t D
                 if (pRegFrame->cs.Attr.n.u1Long)
                 {
                     AssertMsgFailed(("Illegal enabling of paging with CS.u1Long = 1!!\n"));
-                    return VERR_EM_INTERPRETER; /** @todo generate #GP(0) */
+                    return VERR_EM_INTERPRETER; /** @todo generate \#GP(0) */
                 }
 
                 /* Illegal to switch to long mode before activating PAE first (AMD Arch. Programmer's Manual Volume 2: Table 14-5) */
                 if (!(CPUMGetGuestCR4(pVCpu) & X86_CR4_PAE))
                 {
                     AssertMsgFailed(("Illegal enabling of paging with PAE disabled!!\n"));
-                    return VERR_EM_INTERPRETER; /** @todo generate #GP(0) */
+                    return VERR_EM_INTERPRETER; /** @todo generate \#GP(0) */
                 }
                 msrEFER |= MSR_K6_EFER_LMA;
             }
@@ -1540,7 +1538,7 @@ static int emUpdateCRx(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t D
             &&  (oldval & X86_CR4_PAE)
             &&  !(val & X86_CR4_PAE))
         {
-            return VERR_EM_INTERPRETER; /** @todo generate #GP(0) */
+            return VERR_EM_INTERPRETER; /** @todo generate \#GP(0) */
         }
 
         /* From IEM iemCImpl_load_CrX. */
@@ -1558,7 +1556,7 @@ static int emUpdateCRx(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t D
         if (val & ~(uint64_t)fValid)
         {
             Log(("Trying to set reserved CR4 bits: NewCR4=%#llx InvalidBits=%#llx\n", val, val & ~(uint64_t)fValid));
-            return VERR_EM_INTERPRETER; /** @todo generate #GP(0) */
+            return VERR_EM_INTERPRETER; /** @todo generate \#GP(0) */
         }
 
         rc = VINF_SUCCESS;
@@ -1603,10 +1601,10 @@ static int emUpdateCRx(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t D
  * Interpret CRx write.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
- * @param   DestRegCRx  CRx register index (DISUSE_REG_CR*)
+ * @param   DestRegCrx  CRx register index (DISUSE_REG_CR*)
  * @param   SrcRegGen   General purpose register index (USE_REG_E**))
  *
  */
@@ -1690,8 +1688,8 @@ static const char *emMSRtoString(uint32_t uMsr)
  * Interpret RDMSR
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
  */
 VMM_INT_DECL(int) EMInterpretRdmsr(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame)
@@ -1724,8 +1722,8 @@ VMM_INT_DECL(int) EMInterpretRdmsr(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame
  * Interpret WRMSR
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
  */
 VMM_INT_DECL(int) EMInterpretWrmsr(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame)
@@ -1757,11 +1755,11 @@ VMM_INT_DECL(int) EMInterpretWrmsr(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame
  * Interpret CRx read.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
  * @param   DestRegGen  General purpose register index (USE_REG_E**))
- * @param   SrcRegCRx   CRx register index (DISUSE_REG_CR*)
+ * @param   SrcRegCrx   CRx register index (DISUSE_REG_CR*)
  *
  */
 static int emInterpretCRxRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegGen, uint32_t SrcRegCrx)
@@ -1790,10 +1788,10 @@ static int emInterpretCRxRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uin
  * Interpret DRx write.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
- * @param   DestRegDRx  DRx register index (USE_REG_DR*)
+ * @param   DestRegDrx  DRx register index (USE_REG_DR*)
  * @param   SrcRegGen   General purpose register index (USE_REG_E**))
  *
  */
@@ -1840,12 +1838,11 @@ VMM_INT_DECL(int) EMInterpretDRxWrite(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFr
  * Interpret DRx read.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   The register frame.
  * @param   DestRegGen  General purpose register index (USE_REG_E**))
- * @param   SrcRegDRx   DRx register index (USE_REG_DR*)
- *
+ * @param   SrcRegDrx   DRx register index (USE_REG_DR*)
  */
 VMM_INT_DECL(int) EMInterpretDRxRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegGen, uint32_t SrcRegDrx)
 {
@@ -3642,6 +3639,7 @@ static int emInterpretWrmsr(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCO
 /**
  * Internal worker.
  * @copydoc emInterpretInstructionCPUOuter
+ * @param   pVM     The cross context VM structure.
  */
 DECLINLINE(VBOXSTRICTRC) emInterpretInstructionCPU(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame,
                                                    RTGCPTR pvFault, EMCODETYPE enmCodeType, uint32_t *pcbSize)
@@ -3932,7 +3930,7 @@ DECLINLINE(VBOXSTRICTRC) emInterpretInstructionCPU(PVM pVM, PVMCPU pVCpu, PDISCP
  * @retval  VERR_EM_INTERPRETER     Something we can't cope with.
  * @retval  VERR_*                  Fatal errors.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pDis        The disassembler cpu state for the instruction to be
  *                      interpreted.
  * @param   pRegFrame   The register frame. EIP is *NOT* changed!
diff --git a/src/VBox/VMM/VMMAll/FTMAll.cpp b/src/VBox/VMM/VMMAll/FTMAll.cpp
index ae3e260..ef0f768 100644
--- a/src/VBox/VMM/VMMAll/FTMAll.cpp
+++ b/src/VBox/VMM/VMMAll/FTMAll.cpp
@@ -35,7 +35,7 @@
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmType     Checkpoint type
  */
 VMM_INT_DECL(int) FTMSetCheckpoint(PVM pVM, FTMCHECKPOINTTYPE enmType)
@@ -56,7 +56,7 @@ VMM_INT_DECL(int) FTMSetCheckpoint(PVM pVM, FTMCHECKPOINTTYPE enmType)
  *
  * @returns true/false
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(bool) FTMIsDeltaLoadSaveActive(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMAll/GIMAll.cpp b/src/VBox/VMM/VMMAll/GIMAll.cpp
index 4184d7a..78a5805 100644
--- a/src/VBox/VMM/VMMAll/GIMAll.cpp
+++ b/src/VBox/VMM/VMMAll/GIMAll.cpp
@@ -32,10 +32,10 @@
 /**
  * Checks whether GIM is being used by this VM.
  *
- * @retval  @c true if used.
- * @retval  @c false if no GIM provider ("none") is used.
+ * @retval  true if used.
+ * @retval  false if no GIM provider ("none") is used.
  *
- * @param   pVM       Pointer to the VM.
+ * @param   pVM       The cross context VM structure.
  */
 VMMDECL(bool) GIMIsEnabled(PVM pVM)
 {
@@ -47,7 +47,7 @@ VMMDECL(bool) GIMIsEnabled(PVM pVM)
  * Gets the GIM provider configured for this VM.
  *
  * @returns The GIM provider Id.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(GIMPROVIDERID) GIMGetProvider(PVM pVM)
 {
@@ -59,7 +59,7 @@ VMMDECL(GIMPROVIDERID) GIMGetProvider(PVM pVM)
  * Returns whether the guest has configured and enabled calls to the hypervisor.
  *
  * @returns true if hypercalls are enabled and usable, false otherwise.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  */
 VMM_INT_DECL(bool) GIMAreHypercallsEnabled(PVMCPU pVCpu)
 {
@@ -85,7 +85,7 @@ VMM_INT_DECL(bool) GIMAreHypercallsEnabled(PVMCPU pVCpu)
  * Implements a GIM hypercall with the provider configured for the VM.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
 VMM_INT_DECL(int) GIMHypercall(PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -119,7 +119,7 @@ VMM_INT_DECL(int) GIMHypercall(PVMCPU pVCpu, PCPUMCTX pCtx)
  * relies on that.
  *
  * @returns true if enabled and usable, false otherwise.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(bool) GIMIsParavirtTscEnabled(PVM pVM)
 {
@@ -139,7 +139,7 @@ VMM_INT_DECL(bool) GIMIsParavirtTscEnabled(PVM pVM)
 
 
 /**
- * Whether #UD exceptions in the guest needs to be intercepted by the GIM
+ * Whether \#UD exceptions in the guest needs to be intercepted by the GIM
  * provider.
  *
  * At the moment, the reason why this isn't a more generic interface wrt to
@@ -148,7 +148,7 @@ VMM_INT_DECL(bool) GIMIsParavirtTscEnabled(PVM pVM)
  * really required.
  *
  * @returns true if needed, false otherwise.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(bool) GIMShouldTrapXcptUD(PVMCPU pVCpu)
 {
@@ -168,9 +168,9 @@ VMM_INT_DECL(bool) GIMShouldTrapXcptUD(PVMCPU pVCpu)
 
 
 /**
- * Exception handler for #UD when requested by the GIM provider.
+ * Exception handler for \#UD when requested by the GIM provider.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  * @param   pDis        Pointer to the disassembled instruction state at RIP.
  *                      Optional, can be NULL.
@@ -198,7 +198,7 @@ VMM_INT_DECL(int) GIMXcptUD(PVMCPU pVCpu, PCPUMCTX pCtx, PDISCPUSTATE pDis)
  * @retval  VINF_CPUM_R3_MSR_READ
  * @retval  VERR_CPUM_RAISE_GP_0
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idMsr       The MSR to read.
  * @param   pRange      The range this MSR belongs to.
  * @param   puValue     Where to store the MSR value read.
@@ -232,7 +232,7 @@ VMM_INT_DECL(VBOXSTRICTRC) GIMReadMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRRAN
  * @retval  VINF_CPUM_R3_MSR_WRITE
  * @retval  VERR_CPUM_RAISE_GP_0
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idMsr       The MSR to write.
  * @param   pRange      The range this MSR belongs to.
  * @param   uValue      The value to set, ignored bits masked.
diff --git a/src/VBox/VMM/VMMAll/GIMAllHv.cpp b/src/VBox/VMM/VMMAll/GIMAllHv.cpp
index a987d0c..65ac17f 100644
--- a/src/VBox/VMM/VMMAll/GIMAllHv.cpp
+++ b/src/VBox/VMM/VMMAll/GIMAllHv.cpp
@@ -38,7 +38,7 @@
  * Handles the Hyper-V hypercall.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCtx            Pointer to the guest-CPU context.
  */
 VMM_INT_DECL(int) gimHvHypercall(PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -57,7 +57,7 @@ VMM_INT_DECL(int) gimHvHypercall(PVMCPU pVCpu, PCPUMCTX pCtx)
  * hypercall interface.
  *
  * @returns true if hypercalls are enabled, false otherwise.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(bool) gimHvAreHypercallsEnabled(PVMCPU pVCpu)
 {
@@ -70,7 +70,7 @@ VMM_INT_DECL(bool) gimHvAreHypercallsEnabled(PVMCPU pVCpu)
  * paravirtualized TSC.
  *
  * @returns true if paravirt. TSC is enabled, false otherwise.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMM_INT_DECL(bool) gimHvIsParavirtTscEnabled(PVM pVM)
 {
@@ -114,7 +114,7 @@ static const char *gimHvGetGuestOsIdVariantName(uint64_t uGuestOsIdMsr)
  * @retval  VINF_CPUM_R3_MSR_READ
  * @retval  VERR_CPUM_RAISE_GP_0
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idMsr       The MSR being read.
  * @param   pRange      The range this MSR belongs to.
  * @param   puValue     Where to store the MSR value read.
@@ -214,7 +214,7 @@ VMM_INT_DECL(VBOXSTRICTRC) gimHvReadMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRR
  * @retval  VINF_CPUM_R3_MSR_WRITE
  * @retval  VERR_CPUM_RAISE_GP_0
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idMsr       The MSR being written.
  * @param   pRange      The range this MSR belongs to.
  * @param   uRawValue   The raw value with the ignored bits not masked.
diff --git a/src/VBox/VMM/VMMAll/GIMAllKvm.cpp b/src/VBox/VMM/VMMAll/GIMAllKvm.cpp
index 0f07374..0cfc4d1 100644
--- a/src/VBox/VMM/VMMAll/GIMAllKvm.cpp
+++ b/src/VBox/VMM/VMMAll/GIMAllKvm.cpp
@@ -42,7 +42,7 @@
  * Handles the KVM hypercall.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCtx            Pointer to the guest-CPU context.
  */
 VMM_INT_DECL(int) gimKvmHypercall(PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -130,7 +130,7 @@ VMM_INT_DECL(int) gimKvmHypercall(PVMCPU pVCpu, PCPUMCTX pCtx)
  * hypercall interface.
  *
  * @returns true if hypercalls are enabled, false otherwise.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(bool) gimKvmAreHypercallsEnabled(PVMCPU pVCpu)
 {
@@ -145,7 +145,7 @@ VMM_INT_DECL(bool) gimKvmAreHypercallsEnabled(PVMCPU pVCpu)
  * paravirtualized TSC.
  *
  * @returns true if paravirt. TSC is enabled, false otherwise.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMM_INT_DECL(bool) gimKvmIsParavirtTscEnabled(PVM pVM)
 {
@@ -168,7 +168,7 @@ VMM_INT_DECL(bool) gimKvmIsParavirtTscEnabled(PVM pVM)
  * @retval  VINF_CPUM_R3_MSR_READ
  * @retval  VERR_CPUM_RAISE_GP_0
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idMsr       The MSR being read.
  * @param   pRange      The range this MSR belongs to.
  * @param   puValue     Where to store the MSR value read.
@@ -215,7 +215,7 @@ VMM_INT_DECL(VBOXSTRICTRC) gimKvmReadMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSR
  * @retval  VINF_CPUM_R3_MSR_WRITE
  * @retval  VERR_CPUM_RAISE_GP_0
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idMsr       The MSR being written.
  * @param   pRange      The range this MSR belongs to.
  * @param   uRawValue   The raw value with the ignored bits not masked.
@@ -319,7 +319,7 @@ VMM_INT_DECL(VBOXSTRICTRC) gimKvmWriteMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMS
 
 
 /**
- * Whether we need to trap #UD exceptions in the guest.
+ * Whether we need to trap \#UD exceptions in the guest.
  *
  * On AMD-V we need to trap them because paravirtualized Linux/KVM guests use
  * the Intel VMCALL instruction to make hypercalls and we need to trap and
@@ -328,13 +328,13 @@ VMM_INT_DECL(VBOXSTRICTRC) gimKvmWriteMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMS
  *
  * I guess this was done so that guest teleporation between an AMD and an Intel
  * machine would working without any changes at the time of teleporation.
- * However, this also means we -always- need to intercept #UD exceptions on one
+ * However, this also means we -always- need to intercept \#UD exceptions on one
  * of the two CPU models (Intel or AMD). Hyper-V solves this problem more
  * elegantly by letting the hypervisor supply an opaque hypercall page.
  *
  * For raw-mode VMs, this function will always return true. See gimR3KvmInit().
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(bool) gimKvmShouldTrapXcptUD(PVMCPU pVCpu)
 {
@@ -344,9 +344,9 @@ VMM_INT_DECL(bool) gimKvmShouldTrapXcptUD(PVMCPU pVCpu)
 
 
 /**
- * Exception handler for #UD.
+ * Exception handler for \#UD.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  * @param   pDis        Pointer to the disassembled instruction state at RIP.
  *                      Optional, can be NULL.
diff --git a/src/VBox/VMM/VMMAll/HMAll.cpp b/src/VBox/VMM/VMMAll/HMAll.cpp
index c8506ef..227997f 100644
--- a/src/VBox/VMM/VMMAll/HMAll.cpp
+++ b/src/VBox/VMM/VMMAll/HMAll.cpp
@@ -40,9 +40,9 @@
 /**
  * Checks whether HM (VT-x/AMD-V) is being used by this VM.
  *
- * @retval  @c true if used.
- * @retval  @c false if software virtualization (raw-mode) is used.
- * @param   pVM         The cross context VM structure.
+ * @retval  true if used.
+ * @retval  false if software virtualization (raw-mode) is used.
+ * @param   pVM        The cross context VM structure.
  * @sa      HMIsEnabled, HMR3IsEnabled
  * @internal
  */
@@ -57,7 +57,7 @@ VMMDECL(bool) HMIsEnabledNotMacro(PVM pVM)
  * Queues a guest page for invalidation.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCVirt      Page to invalidate
  */
 static void hmQueueInvlPage(PVMCPU pVCpu, RTGCPTR GCVirt)
@@ -74,7 +74,7 @@ static void hmQueueInvlPage(PVMCPU pVCpu, RTGCPTR GCVirt)
  * Invalidates a guest page.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCVirt      Page to invalidate
  */
 VMM_INT_DECL(int) HMInvalidatePage(PVMCPU pVCpu, RTGCPTR GCVirt)
@@ -99,7 +99,7 @@ VMM_INT_DECL(int) HMInvalidatePage(PVMCPU pVCpu, RTGCPTR GCVirt)
  * Flushes the guest TLB.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(int) HMFlushTLB(PVMCPU pVCpu)
 {
@@ -110,8 +110,8 @@ VMM_INT_DECL(int) HMFlushTLB(PVMCPU pVCpu)
     return VINF_SUCCESS;
 }
 
-
 #ifdef IN_RING0
+
 /**
  * Dummy RTMpOnSpecific handler since RTMpPokeCpu couldn't be used.
  *
@@ -165,14 +165,15 @@ static void hmR0PokeCpu(PVMCPU pVCpu, RTCPUID idHostCpu)
             STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatSpinPokeFailed, z);
     }
 }
-#endif /* IN_RING0 */
-
 
+#endif /* IN_RING0 */
 #ifndef IN_RC
+
 /**
  * Poke an EMT so it can perform the appropriate TLB shootdowns.
  *
- * @param   pVCpu               The handle of the virtual CPU to poke.
+ * @param   pVCpu               The cross context virtual CPU structure of the
+ *                              EMT poke.
  * @param   fAccountFlushStat   Whether to account the call to
  *                              StatTlbShootdownFlush or StatTlbShootdown.
  */
@@ -201,7 +202,7 @@ static void hmPokeCpuForTlbFlush(PVMCPU pVCpu, bool fAccountFlushStat)
  * Invalidates a guest page on all VCPUs.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCVirt      Page to invalidate.
  */
 VMM_INT_DECL(int) HMInvalidatePageOnAllVCpus(PVM pVM, RTGCPTR GCVirt)
@@ -242,7 +243,7 @@ VMM_INT_DECL(int) HMInvalidatePageOnAllVCpus(PVM pVM, RTGCPTR GCVirt)
  * Flush the TLBs of all VCPUs.
  *
  * @returns VBox status code.
- * @param   pVM       Pointer to the VM.
+ * @param   pVM       The cross context VM structure.
  */
 VMM_INT_DECL(int) HMFlushTLBOnAllVCpus(PVM pVM)
 {
@@ -269,13 +270,14 @@ VMM_INT_DECL(int) HMFlushTLBOnAllVCpus(PVM pVM)
 
     return VINF_SUCCESS;
 }
+
 #endif /* !IN_RC */
 
 /**
  * Checks if nested paging is enabled.
  *
  * @returns true if nested paging is active, false otherwise.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  *
  * @remarks Works before hmR3InitFinalizeR0.
  */
@@ -291,7 +293,7 @@ VMM_INT_DECL(bool) HMIsNestedPagingActive(PVM pVM)
  * The almost complete guest execution in hardware is only applicable to VT-x.
  *
  * @returns true if we have both enabled, otherwise false.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  *
  * @remarks Works before hmR3InitFinalizeR0.
  */
@@ -308,7 +310,7 @@ VMM_INT_DECL(bool) HMAreNestedPagingAndFullGuestExecEnabled(PVM pVM)
  * Checks if this VM is long-mode capable.
  *
  * @returns true if long mode is allowed, false otherwise.
- * @param   pUVM        The user mode VM handle.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(bool) HMIsLongModeAllowed(PVM pVM)
 {
@@ -321,7 +323,7 @@ VMM_INT_DECL(bool) HMIsLongModeAllowed(PVM pVM)
  * it will be used as well.
  *
  * @returns true if MSR bitmaps are available, false otherwise.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(bool) HMAreMsrBitmapsAvailable(PVM pVM)
 {
@@ -344,7 +346,7 @@ VMM_INT_DECL(bool) HMAreMsrBitmapsAvailable(PVM pVM)
  * Return the shadow paging mode for nested paging/ept
  *
  * @returns shadow paging mode
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(PGMMODE) HMGetShwPagingMode(PVM pVM)
 {
@@ -362,7 +364,7 @@ VMM_INT_DECL(PGMMODE) HMGetShwPagingMode(PVM pVM)
  * NOTE: Assumes the current instruction references this physical page though a virtual address!!
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      Page to invalidate
  */
 VMM_INT_DECL(int) HMInvalidatePhysPage(PVM pVM, RTGCPHYS GCPhys)
@@ -409,7 +411,7 @@ VMM_INT_DECL(int) HMInvalidatePhysPage(PVM pVM, RTGCPHYS GCPhys)
  * Checks if an interrupt event is currently pending.
  *
  * @returns Interrupt event pending state.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(bool) HMHasPendingIrq(PVM pVM)
 {
@@ -422,7 +424,7 @@ VMM_INT_DECL(bool) HMHasPendingIrq(PVM pVM)
  * Return the PAE PDPE entries.
  *
  * @returns Pointer to the PAE PDPE array.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(PX86PDPE) HMGetPaePdpes(PVMCPU pVCpu)
 {
@@ -492,9 +494,8 @@ VMM_INT_DECL(int) HMAmdIsSubjectToErratum170(uint32_t *pu32Family, uint32_t *pu3
  * EMR3HmSingleInstruction.
  *
  * @returns The old flag state.
- * @param   pVCpu               Pointer to the cross context CPU structure of
- *                              the calling EMT.
- * @param   fEnable             The new flag state.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
+ * @param   fEnable The new flag state.
  */
 VMM_INT_DECL(bool) HMSetSingleInstruction(PVMCPU pVCpu, bool fEnable)
 {
@@ -508,7 +509,7 @@ VMM_INT_DECL(bool) HMSetSingleInstruction(PVMCPU pVCpu, bool fEnable)
 /**
  * Notifies HM that paravirtualized hypercalls are now enabled.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 VMM_INT_DECL(void) HMHypercallsEnable(PVMCPU pVCpu)
 {
@@ -519,7 +520,7 @@ VMM_INT_DECL(void) HMHypercallsEnable(PVMCPU pVCpu)
 /**
  * Notifies HM that paravirtualized hypercalls are now disabled.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 VMM_INT_DECL(void) HMHypercallsDisable(PVMCPU pVCpu)
 {
@@ -528,9 +529,9 @@ VMM_INT_DECL(void) HMHypercallsDisable(PVMCPU pVCpu)
 
 
 /**
- * Notifies HM that GIM provider wants to trap #UD.
+ * Notifies HM that GIM provider wants to trap \#UD.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 VMM_INT_DECL(void) HMTrapXcptUDForGIMEnable(PVMCPU pVCpu)
 {
@@ -540,9 +541,9 @@ VMM_INT_DECL(void) HMTrapXcptUDForGIMEnable(PVMCPU pVCpu)
 
 
 /**
- * Notifies HM that GIM provider no longer wants to trap #UD.
+ * Notifies HM that GIM provider no longer wants to trap \#UD.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 VMM_INT_DECL(void) HMTrapXcptUDForGIMDisable(PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMAll/IEMAll.cpp b/src/VBox/VMM/VMMAll/IEMAll.cpp
index 9493186..31b9e08 100644
--- a/src/VBox/VMM/VMMAll/IEMAll.cpp
+++ b/src/VBox/VMM/VMMAll/IEMAll.cpp
@@ -73,7 +73,9 @@
 /** @def IEM_VERIFICATION_MODE_MINIMAL
  * Use for pitting IEM against EM or something else in ring-0 or raw-mode
  * context. */
-//#define IEM_VERIFICATION_MODE_MINIMAL
+#if defined(DOXYGEN_RUNNING)
+# define IEM_VERIFICATION_MODE_MINIMAL
+#endif
 //#define IEM_LOG_MEMORY_WRITES
 #define IEM_IMPLEMENTS_TASKSWITCH
 
@@ -1284,7 +1286,7 @@ DECLINLINE(VBOXSTRICTRC) iemOpcodeGetNextS8(PIEMCPU pIemCpu, int8_t *pi8)
  * Fetches the next signed byte from the opcode stream, returning automatically
  * on failure.
  *
- * @param   pi8                 Where to return the signed byte.
+ * @param   a_pi8               Where to return the signed byte.
  * @remark Implicitly references pIemCpu.
  */
 #define IEM_OPCODE_GET_NEXT_S8(a_pi8) \
@@ -1337,7 +1339,7 @@ DECLINLINE(VBOXSTRICTRC) iemOpcodeGetNextS8SxU16(PIEMCPU pIemCpu, uint16_t *pu16
  * Fetches the next signed byte from the opcode stream and sign-extending it to
  * a word, returning automatically on failure.
  *
- * @param   pu16                Where to return the word.
+ * @param   a_pu16              Where to return the word.
  * @remark Implicitly references pIemCpu.
  */
 #define IEM_OPCODE_GET_NEXT_S8_SX_U16(a_pu16) \
@@ -1390,7 +1392,7 @@ DECLINLINE(VBOXSTRICTRC) iemOpcodeGetNextS8SxU32(PIEMCPU pIemCpu, uint32_t *pu32
  * Fetches the next signed byte from the opcode stream and sign-extending it to
  * a word, returning automatically on failure.
  *
- * @param   pu32                Where to return the word.
+ * @param   a_pu32              Where to return the word.
  * @remark Implicitly references pIemCpu.
  */
 #define IEM_OPCODE_GET_NEXT_S8_SX_U32(a_pu32) \
@@ -1443,7 +1445,7 @@ DECLINLINE(VBOXSTRICTRC) iemOpcodeGetNextS8SxU64(PIEMCPU pIemCpu, uint64_t *pu64
  * Fetches the next signed byte from the opcode stream and sign-extending it to
  * a word, returning automatically on failure.
  *
- * @param   pu64                Where to return the word.
+ * @param   a_pu64              Where to return the word.
  * @remark Implicitly references pIemCpu.
  */
 #define IEM_OPCODE_GET_NEXT_S8_SX_U64(a_pu64) \
@@ -1642,7 +1644,7 @@ DECLINLINE(VBOXSTRICTRC) iemOpcodeGetNextS16(PIEMCPU pIemCpu, int16_t *pi16)
  * Fetches the next signed word from the opcode stream, returning automatically
  * on failure.
  *
- * @param   pi16                Where to return the signed word.
+ * @param   a_pi16              Where to return the signed word.
  * @remark Implicitly references pIemCpu.
  */
 #define IEM_OPCODE_GET_NEXT_S16(a_pi16) \
@@ -1721,7 +1723,7 @@ DECLINLINE(VBOXSTRICTRC) iemOpcodeGetNextU32(PIEMCPU pIemCpu, uint32_t *pu32)
  *
  * @returns Strict VBox status code.
  * @param   pIemCpu             The IEM state.
- * @param   pu32                Where to return the opcode dword.
+ * @param   pu64                Where to return the opcode dword.
  */
 DECL_NO_INLINE(IEM_STATIC, VBOXSTRICTRC) iemOpcodeGetNextU32ZxU64Slow(PIEMCPU pIemCpu, uint64_t *pu64)
 {
@@ -1795,7 +1797,7 @@ DECLINLINE(VBOXSTRICTRC) iemOpcodeGetNextS32(PIEMCPU pIemCpu, int32_t *pi32)
  * Fetches the next signed double word from the opcode stream, returning
  * automatically on failure.
  *
- * @param   pi32                Where to return the signed double word.
+ * @param   a_pi32              Where to return the signed double word.
  * @remark Implicitly references pIemCpu.
  */
 #define IEM_OPCODE_GET_NEXT_S32(a_pi32) \
@@ -2037,6 +2039,7 @@ IEM_STATIC VBOXSTRICTRC iemMiscValidateNewSS(PIEMCPU pIemCpu, PCCPUMCTX pCtx, RT
  *
  * @param   a_pIemCpu           The IEM per CPU data.
  * @param   a_pCtx              The CPU context.
+ * @param   a_fEfl              The new EFLAGS.
  */
 #ifdef VBOX_WITH_RAW_MODE_NOT_R0
 # define IEMMISC_SET_EFL(a_pIemCpu, a_pCtx, a_fEfl) \
@@ -2361,15 +2364,17 @@ IEM_STATIC void iemHlpLoadNullDataSelectorProt(PIEMCPU pIemCpu, PCPUMSELREG pSRe
 
 
 /**
- * Loads a segment selector during a task switch in protected mode. In this task
- * switch scenario, we would throw #TS exceptions rather than #GPs.
+ * Loads a segment selector during a task switch in protected mode.
+ *
+ * In this task switch scenario, we would throw \#TS exceptions rather than
+ * \#GPs.
  *
  * @returns VBox strict status code.
  * @param   pIemCpu         The IEM per CPU instance data.
  * @param   pSReg           Pointer to the segment register.
  * @param   uSel            The new selector value.
  *
- * @remarks This does -NOT- handle CS or SS.
+ * @remarks This does _not_ handle CS or SS.
  * @remarks This expects pIemCpu->uCpl to be up to date.
  */
 IEM_STATIC VBOXSTRICTRC iemHlpTaskSwitchLoadDataSelectorInProtMode(PIEMCPU pIemCpu, PCPUMSELREG pSReg, uint16_t uSel)
@@ -3155,7 +3160,7 @@ iemTaskSwitch(PIEMCPU         pIemCpu,
             if (   pCtx->esp - 1 > cbLimitSS
                 || pCtx->esp < cbStackFrame)
             {
-                /** @todo Intel says #SS(EXT) for INT/XCPT, I couldn't figure out AMD yet. */
+                /** @todo Intel says \#SS(EXT) for INT/XCPT, I couldn't figure out AMD yet. */
                 Log(("iemTaskSwitch: SS=%#x ESP=%#x cbStackFrame=%#x is out of bounds -> #SS\n", pCtx->ss.Sel, pCtx->esp,
                      cbStackFrame));
                 return iemRaiseStackSelectorNotPresentWithErr(pIemCpu, uExt);
@@ -3190,7 +3195,7 @@ iemTaskSwitch(PIEMCPU         pIemCpu,
     {
         Log(("iemHlpTaskSwitchLoadDataSelectorInProtMode: New EIP exceeds CS limit. uNewEIP=%#RGv CS limit=%u -> #GP(0)\n",
              pCtx->eip, pCtx->cs.u32Limit));
-        /** @todo Intel says #GP(EXT) for INT/XCPT, I couldn't figure out AMD yet. */
+        /** @todo Intel says \#GP(EXT) for INT/XCPT, I couldn't figure out AMD yet. */
         return iemRaiseGeneralProtectionFault(pIemCpu, uExt);
     }
 
@@ -5083,9 +5088,9 @@ DECLINLINE(RTGCPTR) iemRegGetRspForPop(PCIEMCPU pIemCpu, PCCPUMCTX pCtx, uint8_t
  *
  * @returns Effective stack addressf for the push.
  * @param   pIemCpu             The per CPU data.
+ * @param   pCtx                Where to get the current stack mode.
  * @param   pTmpRsp             The temporary stack pointer.  This is updated.
  * @param   cbItem              The size of the stack item to pop.
- * @param   puNewRsp            Where to return the new RSP value.
  */
 DECLINLINE(RTGCPTR) iemRegGetRspForPushEx(PCIEMCPU pIemCpu, PCCPUMCTX pCtx, PRTUINT64U pTmpRsp, uint8_t cbItem)
 {
@@ -5107,8 +5112,8 @@ DECLINLINE(RTGCPTR) iemRegGetRspForPushEx(PCIEMCPU pIemCpu, PCCPUMCTX pCtx, PRTU
  *
  * @returns Current stack pointer.
  * @param   pIemCpu             The per CPU data.
- * @param   pTmpRsp             The temporary stack pointer.  This is updated.
  * @param   pCtx                Where to get the current stack mode.
+ * @param   pTmpRsp             The temporary stack pointer.  This is updated.
  * @param   cbItem              The size of the stack item to pop.
  */
 DECLINLINE(RTGCPTR) iemRegGetRspForPopEx(PCIEMCPU pIemCpu, PCCPUMCTX pCtx, PRTUINT64U pTmpRsp, uint8_t cbItem)
@@ -5496,7 +5501,6 @@ IEM_STATIC void iemFpuPushResultTwo(PIEMCPU pIemCpu, PIEMFPURESULTTWO pResult)
  * @param   pIemCpu             The IEM per CPU data.
  * @param   pResult             The result to store.
  * @param   iStReg              Which FPU register to store it in.
- * @param   pCtx                The CPU context.
  */
 IEM_STATIC void iemFpuStoreResult(PIEMCPU pIemCpu, PIEMFPURESULT pResult, uint8_t iStReg)
 {
@@ -5514,7 +5518,6 @@ IEM_STATIC void iemFpuStoreResult(PIEMCPU pIemCpu, PIEMFPURESULT pResult, uint8_
  * @param   pIemCpu             The IEM per CPU data.
  * @param   pResult             The result to store.
  * @param   iStReg              Which FPU register to store it in.
- * @param   pCtx                The CPU context.
  */
 IEM_STATIC void iemFpuStoreResultThenPop(PIEMCPU pIemCpu, PIEMFPURESULT pResult, uint8_t iStReg)
 {
@@ -5533,11 +5536,11 @@ IEM_STATIC void iemFpuStoreResultThenPop(PIEMCPU pIemCpu, PIEMFPURESULT pResult,
  * @param   pIemCpu             The IEM per CPU data.
  * @param   pResult             The result to store.
  * @param   iStReg              Which FPU register to store it in.
- * @param   pCtx                The CPU context.
  * @param   iEffSeg             The effective memory operand selector register.
  * @param   GCPtrEff            The effective memory operand offset.
  */
-IEM_STATIC void iemFpuStoreResultWithMemOp(PIEMCPU pIemCpu, PIEMFPURESULT pResult, uint8_t iStReg, uint8_t iEffSeg, RTGCPTR GCPtrEff)
+IEM_STATIC void iemFpuStoreResultWithMemOp(PIEMCPU pIemCpu, PIEMFPURESULT pResult, uint8_t iStReg,
+                                           uint8_t iEffSeg, RTGCPTR GCPtrEff)
 {
     PCPUMCTX    pCtx    = pIemCpu->CTX_SUFF(pCtx);
     PX86FXSTATE pFpuCtx = &pCtx->CTX_SUFF(pXState)->x87;
@@ -5554,7 +5557,6 @@ IEM_STATIC void iemFpuStoreResultWithMemOp(PIEMCPU pIemCpu, PIEMFPURESULT pResul
  * @param   pIemCpu             The IEM per CPU data.
  * @param   pResult             The result to store.
  * @param   iStReg              Which FPU register to store it in.
- * @param   pCtx                The CPU context.
  * @param   iEffSeg             The effective memory operand selector register.
  * @param   GCPtrEff            The effective memory operand offset.
  */
@@ -6154,6 +6156,7 @@ iemMemSegCheckReadAccessEx(PIEMCPU pIemCpu, PCCPUMSELREGHID pHid, uint8_t iSegRe
  * @param   iSegReg             The index of the segment register to apply.
  *                              This is UINT8_MAX if none (for IDT, GDT, LDT,
  *                              TSS, ++).
+ * @param   cbMem               The access size.
  * @param   pGCPtrMem           Pointer to the guest memory address to apply
  *                              segmentation to.  Input and output parameter.
  */
@@ -6948,7 +6951,7 @@ IEM_STATIC VBOXSTRICTRC iemMemBounceBufferMapPhys(PIEMCPU pIemCpu, unsigned iMem
  *                              Use UINT8_MAX to indicate that no segmentation
  *                              is required (for IDT, GDT and LDT accesses).
  * @param   GCPtrMem            The address of the guest memory.
- * @param   a_fAccess           How the memory is being accessed.  The
+ * @param   fAccess             How the memory is being accessed.  The
  *                              IEM_ACCESS_TYPE_XXX bit is used to figure out
  *                              how to map the memory, while the
  *                              IEM_ACCESS_WHAT_XXX bit is used when raising
@@ -7311,7 +7314,7 @@ IEM_STATIC VBOXSTRICTRC iemMemFetchDataU128AlignedSse(PIEMCPU pIemCpu, uint128_t
  * @returns Strict VBox status code.
  * @param   pIemCpu             The IEM per CPU data.
  * @param   pcbLimit            Where to return the limit.
- * @param   pGCPTrBase          Where to return the base.
+ * @param   pGCPtrBase          Where to return the base.
  * @param   iSegReg             The index of the segment register to use for
  *                              this access.  The base and limits are checked.
  * @param   GCPtrMem            The address of the guest memory.
@@ -7460,7 +7463,7 @@ IEM_STATIC VBOXSTRICTRC iemMemStoreDataU64(PIEMCPU pIemCpu, uint8_t iSegReg, RTG
  * @param   iSegReg             The index of the segment register to use for
  *                              this access.  The base and limits are checked.
  * @param   GCPtrMem            The address of the guest memory.
- * @param   u64Value            The value to store.
+ * @param   u128Value            The value to store.
  */
 IEM_STATIC VBOXSTRICTRC iemMemStoreDataU128(PIEMCPU pIemCpu, uint8_t iSegReg, RTGCPTR GCPtrMem, uint128_t u128Value)
 {
@@ -7484,7 +7487,7 @@ IEM_STATIC VBOXSTRICTRC iemMemStoreDataU128(PIEMCPU pIemCpu, uint8_t iSegReg, RT
  * @param   iSegReg             The index of the segment register to use for
  *                              this access.  The base and limits are checked.
  * @param   GCPtrMem            The address of the guest memory.
- * @param   u64Value            The value to store.
+ * @param   u128Value           The value to store.
  */
 IEM_STATIC VBOXSTRICTRC iemMemStoreDataU128AlignedSse(PIEMCPU pIemCpu, uint8_t iSegReg, RTGCPTR GCPtrMem, uint128_t u128Value)
 {
@@ -7510,7 +7513,7 @@ IEM_STATIC VBOXSTRICTRC iemMemStoreDataU128AlignedSse(PIEMCPU pIemCpu, uint8_t i
  * @returns Strict VBox status code.
  * @param   pIemCpu             The IEM per CPU data.
  * @param   cbLimit             The limit.
- * @param   GCPTrBase           The base address.
+ * @param   GCPtrBase           The base address.
  * @param   iSegReg             The index of the segment register to use for
  *                              this access.  The base and limits are checked.
  * @param   GCPtrMem            The address of the guest memory.
@@ -7623,7 +7626,7 @@ IEM_STATIC VBOXSTRICTRC iemMemStackPushU32(PIEMCPU pIemCpu, uint32_t u32Value)
  *
  * @returns Strict VBox status code.
  * @param   pIemCpu             The IEM per CPU data.
- * @param   u16Value            The value to push.
+ * @param   u32Value            The value to push.
  */
 IEM_STATIC VBOXSTRICTRC iemMemStackPushU32SReg(PIEMCPU pIemCpu, uint32_t u32Value)
 {
@@ -7989,7 +7992,7 @@ IEM_STATIC VBOXSTRICTRC iemMemStackPopU64Ex(PIEMCPU pIemCpu, uint64_t *pu64Value
 /**
  * Begin a special stack push (used by interrupt, exceptions and such).
  *
- * This will raise #SS or #PF if appropriate.
+ * This will raise \#SS or \#PF if appropriate.
  *
  * @returns Strict VBox status code.
  * @param   pIemCpu             The IEM per CPU data.
@@ -9287,7 +9290,7 @@ IEM_STATIC VBOXSTRICTRC iemMemMarkSelDescAccessed(PIEMCPU pIemCpu, uint16_t uSel
             return IEMOP_RAISE_INVALID_LOCK_PREFIX(); \
     } while (0)
 
-/** The instruction allows no lock prefixing (in this encoding), throw #UD if
+/** The instruction allows no lock prefixing (in this encoding), throw \#UD if
  * lock prefixed.
  * @deprecated  IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX */
 #define IEMOP_HLP_NO_LOCK_PREFIX() \
@@ -9297,7 +9300,7 @@ IEM_STATIC VBOXSTRICTRC iemMemMarkSelDescAccessed(PIEMCPU pIemCpu, uint16_t uSel
             return IEMOP_RAISE_INVALID_LOCK_PREFIX(); \
     } while (0)
 
-/** The instruction is not available in 64-bit mode, throw #UD if we're in
+/** The instruction is not available in 64-bit mode, throw \#UD if we're in
  * 64-bit mode. */
 #define IEMOP_HLP_NO_64BIT() \
     do \
@@ -9306,7 +9309,7 @@ IEM_STATIC VBOXSTRICTRC iemMemMarkSelDescAccessed(PIEMCPU pIemCpu, uint16_t uSel
             return IEMOP_RAISE_INVALID_OPCODE(); \
     } while (0)
 
-/** The instruction is only available in 64-bit mode, throw #UD if we're not in
+/** The instruction is only available in 64-bit mode, throw \#UD if we're not in
  * 64-bit mode. */
 #define IEMOP_HLP_ONLY_64BIT() \
     do \
@@ -10637,7 +10640,7 @@ IEM_STATIC VBOXSTRICTRC     iemVerifyFakeIOPortWrite(PIEMCPU pIemCpu, RTIOPORT P
 #ifdef LOG_ENABLED
 /**
  * Logs the current instruction.
- * @param   pVCpu       The cross context virtual CPU structure of the caller.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtx        The current CPU context.
  * @param   fSameCtx    Set if we have the same context information as the VMM,
  *                      clear if we may have already executed an instruction in
@@ -10777,7 +10780,7 @@ DECL_FORCE_INLINE(VBOXSTRICTRC) iemExecStatusCodeFiddling(PIEMCPU pIemCpu, VBOXS
  * IEMExecOneWithPrefetchedByPC.
  *
  * @return  Strict VBox status code.
- * @param   pVCpu       The current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pIemCpu     The IEM per CPU data.
  * @param   fExecuteInhibit     If set, execute the instruction following CLI,
  *                      POP SS and MOV SS,GR.
@@ -10840,7 +10843,7 @@ DECL_FORCE_INLINE(VBOXSTRICTRC) iemExecOneInner(PVMCPU pVCpu, PIEMCPU pIemCpu, b
  *
  * @returns rcStrict, maybe modified.
  * @param   pIemCpu     The IEM CPU structure.
- * @param   pVCpu       The cross context virtual CPU structure of the caller.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtx        The current CPU context.
  * @param   rcStrict    The status code returne by the interpreter.
  */
@@ -10857,7 +10860,7 @@ DECLINLINE(VBOXSTRICTRC) iemRCRawMaybeReenter(PIEMCPU pIemCpu, PVMCPU pVCpu, PCP
  * Execute one instruction.
  *
  * @return  Strict VBox status code.
- * @param   pVCpu       The current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(VBOXSTRICTRC) IEMExecOne(PVMCPU pVCpu)
 {
@@ -11067,7 +11070,7 @@ VMMDECL(VBOXSTRICTRC) IEMExecLots(PVMCPU pVCpu)
  * The parameter list matches TRPMQueryTrapAll pretty closely.
  *
  * @returns Strict VBox status code.
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   u8TrapNo            The trap number.
  * @param   enmType             What type is it (trap/fault/abort), software
  *                              interrupt or hardware interrupt.
@@ -11133,7 +11136,7 @@ VMM_INT_DECL(VBOXSTRICTRC) IEMInjectTrap(PVMCPU pVCpu, uint8_t u8TrapNo, TRPMEVE
  * Injects the active TRPM event.
  *
  * @returns Strict VBox status code.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  */
 VMMDECL(VBOXSTRICTRC) IEMInjectTrpmEvent(PVMCPU pVCpu)
 {
@@ -11182,7 +11185,7 @@ VMM_INT_DECL(int) IEMBreakpointClear(PVM pVM, RTGCPTR GCPtrBp)
  * This is for PATM.
  *
  * @returns VBox status code.
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   pCtxCore            The register frame.
  */
 VMM_INT_DECL(int) IEMExecInstr_iret(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore)
@@ -11224,7 +11227,7 @@ VMM_INT_DECL(int) IEMExecInstr_iret(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore)
  * guest state.)
  *
  * @returns Strict VBox status code.
- * @param   pVCpu               The cross context per virtual CPU structure.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   cbValue             The size of the I/O port access (1, 2, or 4).
  * @param   enmAddrMode         The addressing mode.
  * @param   fRepPrefix          Indicates whether a repeat prefix is used
@@ -11343,7 +11346,7 @@ VMM_INT_DECL(VBOXSTRICTRC) IEMExecStringIoWrite(PVMCPU pVCpu, uint8_t cbValue, I
  * guest state.)
  *
  * @returns Strict VBox status code.
- * @param   pVCpu               The cross context per virtual CPU structure.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   cbValue             The size of the I/O port access (1, 2, or 4).
  * @param   enmAddrMode         The addressing mode.
  * @param   fRepPrefix          Indicates whether a repeat prefix is used
@@ -11457,7 +11460,7 @@ VMM_INT_DECL(VBOXSTRICTRC) IEMExecStringIoRead(PVMCPU pVCpu, uint8_t cbValue, IE
  * Interface for HM and EM to write to a CRx register.
  *
  * @returns Strict VBox status code.
- * @param   pVCpu       The cross context per virtual CPU structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cbInstr     The instruction length in bytes.
  * @param   iCrReg      The control register number (destination).
  * @param   iGReg       The general purpose register number (source).
@@ -11481,7 +11484,7 @@ VMM_INT_DECL(VBOXSTRICTRC) IEMExecDecodedMovCRxWrite(PVMCPU pVCpu, uint8_t cbIns
  * Interface for HM and EM to read from a CRx register.
  *
  * @returns Strict VBox status code.
- * @param   pVCpu       The cross context per virtual CPU structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cbInstr     The instruction length in bytes.
  * @param   iGReg       The general purpose register number (destination).
  * @param   iCrReg      The control register number (source).
@@ -11505,7 +11508,7 @@ VMM_INT_DECL(VBOXSTRICTRC) IEMExecDecodedMovCRxRead(PVMCPU pVCpu, uint8_t cbInst
  * Interface for HM and EM to clear the CR0[TS] bit.
  *
  * @returns Strict VBox status code.
- * @param   pVCpu       The cross context per virtual CPU structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cbInstr     The instruction length in bytes.
  *
  * @remarks In ring-0 not all of the state needs to be synced in.
@@ -11525,7 +11528,7 @@ VMM_INT_DECL(VBOXSTRICTRC) IEMExecDecodedClts(PVMCPU pVCpu, uint8_t cbInstr)
  * Interface for HM and EM to emulate the LMSW instruction (loads CR0).
  *
  * @returns Strict VBox status code.
- * @param   pVCpu       The cross context per virtual CPU structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cbInstr     The instruction length in bytes.
  * @param   uValue      The value to load into CR0.
  *
@@ -11548,11 +11551,10 @@ VMM_INT_DECL(VBOXSTRICTRC) IEMExecDecodedLmsw(PVMCPU pVCpu, uint8_t cbInstr, uin
  * Takes input values in ecx and edx:eax of the CPU context of the calling EMT.
  *
  * @returns Strict VBox status code.
- * @param   pVCpu       The cross context per virtual CPU structure of the
- *                      calling EMT.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   cbInstr     The instruction length in bytes.
  * @remarks In ring-0 not all of the state needs to be synced in.
- * @threads EMT(pVCpu)
+ * @thread  EMT(pVCpu)
  */
 VMM_INT_DECL(VBOXSTRICTRC) IEMExecDecodedXsetbv(PVMCPU pVCpu, uint8_t cbInstr)
 {
@@ -11570,9 +11572,8 @@ VMM_INT_DECL(VBOXSTRICTRC) IEMExecDecodedXsetbv(PVMCPU pVCpu, uint8_t cbInstr)
  * Called by force-flag handling code when VMCPU_FF_IEM is set.
  *
  * @returns Merge between @a rcStrict and what the commit operation returned.
- * @param   pVCpu           Pointer to the cross context CPU structure for the
- *                          calling EMT.
- * @param   rcStrict        The status code returned by ring-0 or raw-mode.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
+ * @param   rcStrict    The status code returned by ring-0 or raw-mode.
  */
 VMMR3_INT_DECL(VBOXSTRICTRC) IEMR3DoPendingAction(PVMCPU pVCpu, VBOXSTRICTRC rcStrict)
 {
diff --git a/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h b/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
index 24def23..337acf1 100644
--- a/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
+++ b/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h
@@ -4906,7 +4906,9 @@ IEM_CIMPL_DEF_2(iemCImpl_load_CrX, uint8_t, iCrReg, uint64_t, uNewCrX)
         /*
          * CR3 is relatively simple, although AMD and Intel have different
          * accounts of how setting reserved bits are handled.  We take intel's
-         * word for the lower bits and AMD's for the high bits (63:52).
+         * word for the lower bits and AMD's for the high bits (63:52).  The
+         * lower reserved bits are ignored and left alone; OpenBSD 5.8 relies
+         * on this.
          */
         /** @todo Testcase: Setting reserved bits in CR3, especially before
          *        enabling paging. */
@@ -4922,14 +4924,12 @@ IEM_CIMPL_DEF_2(iemCImpl_load_CrX, uint8_t, iCrReg, uint64_t, uNewCrX)
             uint64_t fValid;
             if (   (pCtx->cr4 & X86_CR4_PAE)
                 && (pCtx->msrEFER & MSR_K6_EFER_LME))
-                fValid = UINT64_C(0x000ffffffffff014);
-            else if (pCtx->cr4 & X86_CR4_PAE)
-                fValid = UINT64_C(0xfffffff4);
+                fValid = UINT64_C(0x000fffffffffffff);
             else
-                fValid = UINT64_C(0xfffff014);
+                fValid = UINT64_C(0xffffffff);
             if (uNewCrX & ~fValid)
             {
-                Log(("Automatically clearing reserved bits in CR3 load: NewCR3=%#llx ClearedBits=%#llx\n",
+                Log(("Automatically clearing reserved MBZ bits in CR3 load: NewCR3=%#llx ClearedBits=%#llx\n",
                      uNewCrX, uNewCrX & ~fValid));
                 uNewCrX &= fValid;
             }
diff --git a/src/VBox/VMM/VMMAll/IOMAll.cpp b/src/VBox/VMM/VMMAll/IOMAll.cpp
index 056434d..577eace 100644
--- a/src/VBox/VMM/VMMAll/IOMAll.cpp
+++ b/src/VBox/VMM/VMMAll/IOMAll.cpp
@@ -44,7 +44,7 @@
  * Check if this VCPU currently owns the IOM lock exclusively.
  *
  * @returns bool owner/not owner
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(bool) IOMIsLockWriteOwner(PVM pVM)
 {
@@ -70,8 +70,8 @@ VMMDECL(bool) IOMIsLockWriteOwner(PVM pVM)
  *                                      status code must be passed on to EM.
  * @retval  VINF_IOM_R3_IOPORT_READ     Defer the read to ring-3. (R0/RC only)
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   Port        The port to read.
  * @param   pu32Value   Where to store the value read.
  * @param   cbValue     The size of the register to read in bytes. 1, 2 or 4 bytes.
@@ -237,9 +237,9 @@ VMMDECL(VBOXSTRICTRC) IOMIOPortRead(PVM pVM, PVMCPU pVCpu, RTIOPORT Port, uint32
  *                                      status code must be passed on to EM.
  * @retval  VINF_IOM_R3_IOPORT_READ     Defer the read to ring-3. (R0/RC only)
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
- * @param   Port        The port to read.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
+ * @param   uPort       The port to read.
  * @param   pvDst       Pointer to the destination buffer.
  * @param   pcTransfers Pointer to the number of transfer units to read, on return remaining transfer units.
  * @param   cb          Size of the transfer unit (1, 2 or 4 bytes).
@@ -298,10 +298,9 @@ VMM_INT_DECL(VBOXSTRICTRC) IOMIOPortReadString(PVM pVM, PVMCPU pVCpu, RTIOPORT u
         { /* likely */ }
         else
         {
-            STAM_STATS({ if (pStats)
-                    STAM_COUNTER_INC(&pStats->InRZToR3); });
+            STAM_STATS({ if (pStats) STAM_COUNTER_INC(&pStats->InRZToR3); });
             IOM_UNLOCK_SHARED(pVM);
-            return VINF_SUCCESS;
+            return VINF_IOM_R3_IOPORT_READ;
         }
 #endif
         void           *pvUser    = pRange->pvUser;
@@ -410,12 +409,13 @@ VMM_INT_DECL(VBOXSTRICTRC) IOMIOPortReadString(PVM pVM, PVMCPU pVCpu, RTIOPORT u
     /*
      * Ok, no handler for this port.
      */
+    *pcTransfers = 0;
+    memset(pvDst, 0xff, cRequestedTransfers * cb);
 #ifdef VBOX_WITH_STATISTICS
     if (pStats)
         STAM_COUNTER_INC(&pStats->CTX_SUFF_Z(In));
 #endif
-
-    Log3(("IOMIOPortReadStr: uPort=%RTiop pvDst=%p pcTransfer=%p:{%#x->%#x} cb=%d rc=VINF_SUCCESS\n",
+    Log3(("IOMIOPortReadStr: uPort=%RTiop (unused) pvDst=%p pcTransfer=%p:{%#x->%#x} cb=%d rc=VINF_SUCCESS\n",
           uPort, pvDst, pcTransfers, cRequestedTransfers, *pcTransfers, cb));
     IOM_UNLOCK_SHARED(pVM);
     return VINF_SUCCESS;
@@ -432,8 +432,8 @@ VMM_INT_DECL(VBOXSTRICTRC) IOMIOPortReadString(PVM pVM, PVMCPU pVCpu, RTIOPORT u
  *                                      status code must be passed on to EM.
  * @retval  VINF_IOM_R3_IOPORT_WRITE    Defer the write to ring-3. (R0/RC only)
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   Port        The port to write to.
  * @param   u32Value    The value to write.
  * @param   cbValue     The size of the register to read in bytes. 1, 2 or 4 bytes.
@@ -574,8 +574,8 @@ VMMDECL(VBOXSTRICTRC) IOMIOPortWrite(PVM pVM, PVMCPU pVCpu, RTIOPORT Port, uint3
  *                                      status code must be passed on to EM.
  * @retval  VINF_IOM_R3_IOPORT_WRITE    Defer the write to ring-3. (R0/RC only)
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   uPort       The port to write to.
  * @param   pvSrc       The guest page to read from.
  * @param   pcTransfers Pointer to the number of transfer units to write, on
@@ -640,7 +640,7 @@ VMM_INT_DECL(VBOXSTRICTRC) IOMIOPortWriteString(PVM pVM, PVMCPU pVCpu, RTIOPORT
         {
             STAM_STATS({ if (pStats) STAM_COUNTER_INC(&pStats->OutRZToR3); });
             IOM_UNLOCK_SHARED(pVM);
-            return VINF_SUCCESS;
+            return VINF_IOM_R3_IOPORT_WRITE;
         }
 #endif
         void           *pvUser    = pRange->pvUser;
@@ -743,12 +743,12 @@ VMM_INT_DECL(VBOXSTRICTRC) IOMIOPortWriteString(PVM pVM, PVMCPU pVCpu, RTIOPORT
     /*
      * Ok, no handler for this port.
      */
+    *pcTransfers = 0;
 #ifdef VBOX_WITH_STATISTICS
     if (pStats)
         STAM_COUNTER_INC(&pStats->CTX_SUFF_Z(Out));
 #endif
-
-    Log3(("IOMIOPortWriteStr: uPort=%RTiop pvSrc=%p pcTransfer=%p:{%#x->%#x} cb=%d rc=VINF_SUCCESS\n",
+    Log3(("IOMIOPortWriteStr: uPort=%RTiop (unused) pvSrc=%p pcTransfer=%p:{%#x->%#x} cb=%d rc=VINF_SUCCESS\n",
           uPort, pvSrc, pcTransfers, cRequestedTransfers, *pcTransfers, cb));
     IOM_UNLOCK_SHARED(pVM);
     return VINF_SUCCESS;
@@ -766,7 +766,7 @@ VMM_INT_DECL(VBOXSTRICTRC) IOMIOPortWriteString(PVM pVM, PVMCPU pVCpu, RTIOPORT
  * @retval  VINF_TRPM_XCPT_DISPATCHED   The exception was raised and dispatched for raw-mode execution. (TRPMRaiseXcptErr)
  * @retval  VINF_EM_RESCHEDULE_REM      The exception was dispatched and cannot be executed in raw-mode. (TRPMRaiseXcptErr)
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtxCore    Pointer to register frame.
  * @param   Port        The I/O port number.
  * @param   cb          The access size.
@@ -857,7 +857,7 @@ VMMDECL(VBOXSTRICTRC) IOMInterpretCheckPortIOAccess(PVM pVM, PCPUMCTXCORE pCtxCo
 /**
  * Fress an MMIO range after the reference counter has become zero.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pRange              The range to free.
  */
 void iomMmioFreeRange(PVM pVM, PIOMMMIORANGE pRange)
diff --git a/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp b/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp
index e4d45ec..dc2d5c4 100644
--- a/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp
+++ b/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp
@@ -54,7 +54,7 @@
  * Because of PATM/CSAM issues in raw-mode, we've split this up into 2nd and 3rd
  * IEM deployment step. */
 #if  ((defined(IN_RING3) || defined(IN_RING0)) && defined(VBOX_WITH_2ND_IEM_STEP)) \
-  || defined(VBOX_WITH_3RD_IEM_STEP)
+  || defined(VBOX_WITH_3RD_IEM_STEP) || defined(DOXYGEN_RUNNING)
 # define IEM_USE_IEM_INSTEAD
 #endif
 
@@ -245,7 +245,7 @@ bool iomSaveDataToReg(PDISCPUSTATE pCpu, PCDISOPPARAM pParam, PCPUMCTXCORE pRegF
  *          VINF_IOM_R3_MMIO_WRITE, VINF_IOM_R3_MMIO_READ_WRITE or
  *          VINF_IOM_R3_MMIO_READ may be returned.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pRange              The range to write to.
  * @param   GCPhys              The physical address to start writing.
  * @param   pvValue             Where to store the value.
@@ -483,7 +483,7 @@ static VBOXSTRICTRC iomMMIODoWrite(PVM pVM, PVMCPU pVCpu, PIOMMMIORANGE pRange,
  *          VINF_IOM_R3_MMIO_READ, VINF_IOM_R3_MMIO_READ_WRITE or
  *          VINF_IOM_R3_MMIO_WRITE may be returned.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pRange              The range to read from.
  * @param   GCPhys              The physical address to start reading.
  * @param   pvValue             Where to store the value.
@@ -741,8 +741,8 @@ DECLINLINE(void) iomMMIOStatLength(PVM pVM, unsigned cb)
  *
  * @returns VBox status code.
  *
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Pointer to CPUMCTXCORE guest registers structure.
  * @param   pCpu        Disassembler CPU state.
  * @param   pRange      Pointer MMIO range.
@@ -802,8 +802,8 @@ static int iomInterpretMOVxXRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame,
  *
  * @returns VBox status code.
  *
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Pointer to CPUMCTXCORE guest registers structure.
  * @param   pCpu        Disassembler CPU state.
  * @param   pRange      Pointer MMIO range.
@@ -877,7 +877,7 @@ DECLINLINE(int) iomRamWrite(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, RTGCPTR GCPtrDs
  *
  * @returns VBox status code.
  *
- * @param   pVM         The virtual machine.
+ * @param   pVM         The cross context VM structure.
  * @param   uErrorCode  CPU Error code.
  * @param   pRegFrame   Trap register frame.
  * @param   GCPhysFault The GC physical address corresponding to pvFault.
@@ -1138,8 +1138,8 @@ static uint64_t iomDisModeToMask(DISCPUMODE enmCpuMode)
  *
  * @returns VBox status code.
  *
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Trap register frame.
  * @param   GCPhysFault The GC physical address corresponding to pvFault.
  * @param   pCpu        Disassembler CPU state.
@@ -1272,8 +1272,8 @@ static int iomInterpretSTOS(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCP
  *
  * @returns VBox status code.
  *
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Trap register frame.
  * @param   GCPhysFault The GC physical address corresponding to pvFault.
  * @param   pCpu        Disassembler CPU state.
@@ -1326,7 +1326,7 @@ static int iomInterpretLODS(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCP
  *
  * @returns VBox status code.
  *
- * @param   pVM         The virtual machine.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegFrame   Trap register frame.
  * @param   GCPhysFault The GC physical address corresponding to pvFault.
  * @param   pCpu        Disassembler CPU state.
@@ -1385,8 +1385,8 @@ static int iomInterpretCMP(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPH
  *
  * @returns VBox status code.
  *
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Trap register frame.
  * @param   GCPhysFault The GC physical address corresponding to pvFault.
  * @param   pCpu        Disassembler CPU state.
@@ -1486,8 +1486,8 @@ static int iomInterpretOrXorAnd(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, R
  *
  * @returns VBox status code.
  *
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Trap register frame.
  * @param   GCPhysFault The GC physical address corresponding to pvFault.
  * @param   pCpu        Disassembler CPU state.
@@ -1546,8 +1546,8 @@ static int iomInterpretTEST(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCP
  *
  * @returns VBox status code.
  *
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Trap register frame.
  * @param   GCPhysFault The GC physical address corresponding to pvFault.
  * @param   pCpu        Disassembler CPU state.
@@ -1591,8 +1591,8 @@ static int iomInterpretBT(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPHY
  *
  * @returns VBox status code.
  *
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Trap register frame.
  * @param   GCPhysFault The GC physical address corresponding to pvFault.
  * @param   pCpu        Disassembler CPU state.
@@ -1665,8 +1665,8 @@ static int iomInterpretXCHG(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCP
  * Common worker for the \#PF handler and IOMMMIOPhysHandler (APIC+VT-x).
  *
  * @returns VBox status code (appropriate for GC return).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   uErrorCode  CPU Error code.  This is UINT32_MAX when we don't have
  *                      any error code (the EPT misconfig hack).
  * @param   pCtxCore    Trap register frame.
@@ -1940,8 +1940,8 @@ DECLEXPORT(VBOXSTRICTRC) iomMmioPfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uError
  * Physical access handler for MMIO ranges.
  *
  * @returns VBox status code (appropriate for GC return).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   uErrorCode  CPU Error code.
  * @param   pCtxCore    Trap register frame.
  * @param   GCPhysFault The GC physical address.
@@ -2049,8 +2049,8 @@ PGM_ALL_CB2_DECL(VBOXSTRICTRC) iomMmioHandler(PVM pVM, PVMCPU pVCpu, RTGCPHYS GC
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys      The physical address to read.
  * @param   pu32Value   Where to store the value read.
  * @param   cbValue     The size of the register to read in bytes. 1, 2 or 4 bytes.
@@ -2181,8 +2181,8 @@ VMMDECL(VBOXSTRICTRC) IOMMMIORead(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, uint32
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys      The physical address to write to.
  * @param   u32Value    The value to write.
  * @param   cbValue     The size of the register to read in bytes. 1, 2 or 4 bytes.
@@ -2302,8 +2302,8 @@ VMMDECL(VBOXSTRICTRC) IOMMMIOWrite(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, uint3
  * @retval  VINF_TRPM_XCPT_DISPATCHED   The exception was raised and dispatched for raw-mode execution. (TRPMRaiseXcptErr)
  * @retval  VINF_EM_RESCHEDULE_REM      The exception was dispatched and cannot be executed in raw-mode. (TRPMRaiseXcptErr)
  *
- * @param   pVM             The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame       Pointer to CPUMCTXCORE guest registers structure.
  * @param   uPort           IO Port
  * @param   uPrefix         IO instruction prefix
@@ -2465,8 +2465,8 @@ VMMDECL(VBOXSTRICTRC) IOMInterpretINSEx(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pReg
  * @retval  VINF_TRPM_XCPT_DISPATCHED   The exception was raised and dispatched for raw-mode execution. (TRPMRaiseXcptErr)
  * @retval  VINF_EM_RESCHEDULE_REM      The exception was dispatched and cannot be executed in raw-mode. (TRPMRaiseXcptErr)
  *
- * @param   pVM             The virtual machine.
- * @param   pVCpu           Pointer to the virtual CPU structure of the caller.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame       Pointer to CPUMCTXCORE guest registers structure.
  * @param   uPort           IO Port
  * @param   uPrefix         IO instruction prefix
@@ -2624,7 +2624,7 @@ VMMDECL(VBOXSTRICTRC) IOMInterpretOUTSEx(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRe
  * @returns VBox status code.  This API may return VINF_SUCCESS even if no
  *          remapping is made,.
  *
- * @param   pVM             The virtual machine.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          The address of the MMIO page to be changed.
  * @param   GCPhysRemapped  The address of the MMIO2 page.
  * @param   fPageFlags      Page flags to set. Must be (X86_PTE_RW | X86_PTE_P)
@@ -2698,8 +2698,8 @@ VMMDECL(int) IOMMMIOMapMMIO2Page(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS GCPhysRemapp
  *
  * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   GCPhys          The address of the MMIO page to be changed.
  * @param   HCPhys          The address of the host physical page.
  * @param   fPageFlags      Page flags to set. Must be (X86_PTE_RW | X86_PTE_P)
@@ -2752,7 +2752,7 @@ VMMDECL(int) IOMMMIOMapMMIOHCPage(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, RTHCPH
  *
  * @returns VBox status code.
  *
- * @param   pVM             The virtual machine.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Physical address that's part of the MMIO region to be reset.
  */
 VMMDECL(int) IOMMMIOResetRegion(PVM pVM, RTGCPHYS GCPhys)
diff --git a/src/VBox/VMM/VMMAll/MMAll.cpp b/src/VBox/VMM/VMMAll/MMAll.cpp
index 402fd6c..7b78e22 100644
--- a/src/VBox/VMM/VMMAll/MMAll.cpp
+++ b/src/VBox/VMM/VMMAll/MMAll.cpp
@@ -36,7 +36,7 @@
  *
  * @returns Pointer to the corresponding lookup record.
  * @returns NULL on failure.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   R3Ptr   The host context ring-3 address to lookup.
  * @param   poff    Where to store the offset into the HMA memory chunk.
  */
@@ -96,7 +96,7 @@ DECLINLINE(PMMLOOKUPHYPER) mmHyperLookupR3(PVM pVM, RTR3PTR R3Ptr, uint32_t *pof
  *
  * @returns Pointer to the corresponding lookup record.
  * @returns NULL on failure.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   R0Ptr   The host context ring-0 address to lookup.
  * @param   poff    Where to store the offset into the HMA memory chunk.
  */
@@ -158,7 +158,7 @@ DECLINLINE(PMMLOOKUPHYPER) mmHyperLookupR0(PVM pVM, RTR0PTR R0Ptr, uint32_t *pof
  *
  * @returns Pointer to the corresponding lookup record.
  * @returns NULL on failure.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   RCPtr   The raw-mode context address to lookup.
  * @param   poff    Where to store the offset into the HMA memory chunk.
  */
@@ -203,7 +203,7 @@ DECLINLINE(PMMLOOKUPHYPER) mmHyperLookupRC(PVM pVM, RTRCPTR RCPtr, uint32_t *pof
  *
  * @returns Pointer to the corresponding lookup record.
  * @returns NULL on failure.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pv      The current context address to lookup.
  * @param   poff    Where to store the offset into the HMA memory chunk.
  */
@@ -245,7 +245,7 @@ DECLINLINE(RTR3PTR) mmHyperLookupCalcR3(PMMLOOKUPHYPER pLookup, uint32_t off)
  * Calculate the host context ring-0 address of an offset into the HMA memory chunk.
  *
  * @returns the host context ring-0 address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pLookup     The HMA lookup record.
  * @param   off         The offset into the HMA memory chunk.
  */
@@ -280,7 +280,7 @@ DECLINLINE(RTR0PTR) mmHyperLookupCalcR0(PVM pVM, PMMLOOKUPHYPER pLookup, uint32_
  * Calculate the raw-mode context address of an offset into the HMA memory chunk.
  *
  * @returns the raw-mode context base address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pLookup     The HMA lookup record.
  * @param   off         The offset into the HMA memory chunk.
  */
@@ -294,7 +294,7 @@ DECLINLINE(RTRCPTR) mmHyperLookupCalcRC(PVM pVM, PMMLOOKUPHYPER pLookup, uint32_
  * Calculate the guest context address of an offset into the HMA memory chunk.
  *
  * @returns the guest context base address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pLookup     The HMA lookup record.
  * @param   off         The offset into the HMA memory chunk.
  */
@@ -315,7 +315,7 @@ DECLINLINE(void *) mmHyperLookupCalcCC(PVM pVM, PMMLOOKUPHYPER pLookup, uint32_t
  * Converts a ring-0 host context address in the Hypervisor memory region to a ring-3 host context address.
  *
  * @returns ring-3 host context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   R0Ptr       The ring-0 host context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
@@ -334,7 +334,7 @@ VMMDECL(RTR3PTR) MMHyperR0ToR3(PVM pVM, RTR0PTR R0Ptr)
  * Converts a ring-0 host context address in the Hypervisor memory region to a raw-mode context address.
  *
  * @returns raw-mode context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   R0Ptr       The ring-0 host context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
@@ -354,7 +354,7 @@ VMMDECL(RTRCPTR) MMHyperR0ToRC(PVM pVM, RTR0PTR R0Ptr)
  * Converts a ring-0 host context address in the Hypervisor memory region to a current context address.
  *
  * @returns current context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   R0Ptr       The ring-0 host context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
@@ -374,7 +374,7 @@ VMMDECL(void *) MMHyperR0ToCC(PVM pVM, RTR0PTR R0Ptr)
  * Converts a ring-3 host context address in the Hypervisor memory region to a ring-0 host context address.
  *
  * @returns ring-0 host context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   R3Ptr       The ring-3 host context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
@@ -394,7 +394,7 @@ VMMDECL(RTR0PTR) MMHyperR3ToR0(PVM pVM, RTR3PTR R3Ptr)
  * Converts a ring-3 host context address in the Hypervisor memory region to a guest context address.
  *
  * @returns guest context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   R3Ptr       The ring-3 host context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
@@ -415,7 +415,7 @@ VMMDECL(RTRCPTR) MMHyperR3ToRC(PVM pVM, RTR3PTR R3Ptr)
  * Converts a ring-3 host context address in the Hypervisor memory region to a current context address.
  *
  * @returns current context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   R3Ptr       The ring-3 host context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
@@ -435,8 +435,8 @@ VMMDECL(void *) MMHyperR3ToCC(PVM pVM, RTR3PTR R3Ptr)
  * Converts a raw-mode context address in the Hypervisor memory region to a ring-3 context address.
  *
  * @returns ring-3 host context address.
- * @param   pVM         Pointer to the VM.
- * @param   GCPtr       The raw-mode context address.
+ * @param   pVM         The cross context VM structure.
+ * @param   RCPtr       The raw-mode context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
  */
@@ -454,7 +454,7 @@ VMMDECL(RTR3PTR) MMHyperRCToR3(PVM pVM, RTRCPTR RCPtr)
  * Converts a raw-mode context address in the Hypervisor memory region to a ring-0 host context address.
  *
  * @returns ring-0 host context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   RCPtr       The raw-mode context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
@@ -473,7 +473,7 @@ VMMDECL(RTR0PTR) MMHyperRCToR0(PVM pVM, RTRCPTR RCPtr)
  * Converts a raw-mode context address in the Hypervisor memory region to a current context address.
  *
  * @returns current context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   RCPtr       The raw-mode host context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
@@ -493,7 +493,7 @@ VMMDECL(void *) MMHyperRCToCC(PVM pVM, RTRCPTR RCPtr)
  * Converts a current context address in the Hypervisor memory region to a ring-3 host context address.
  *
  * @returns ring-3 host context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pv          The current context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
@@ -513,7 +513,7 @@ VMMDECL(RTR3PTR) MMHyperCCToR3(PVM pVM, void *pv)
  * Converts a current context address in the Hypervisor memory region to a ring-0 host context address.
  *
  * @returns ring-0 host context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pv          The current context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
@@ -534,7 +534,7 @@ VMMDECL(RTR0PTR) MMHyperCCToR0(PVM pVM, void *pv)
  * Converts a current context address in the Hypervisor memory region to a raw-mode context address.
  *
  * @returns guest context address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pv          The current context address.
  *                      You'll be damned if this is not in the HMA! :-)
  * @thread  The Emulation Thread.
diff --git a/src/VBox/VMM/VMMAll/MMAllHyper.cpp b/src/VBox/VMM/VMMAll/MMAllHyper.cpp
index 1673f7c..89ced84 100644
--- a/src/VBox/VMM/VMMAll/MMAllHyper.cpp
+++ b/src/VBox/VMM/VMMAll/MMAllHyper.cpp
@@ -153,7 +153,7 @@ static void mmHyperHeapCheck(PMMHYPERHEAP pHeap);
  * Locks the hypervisor heap.
  * This might call back to Ring-3 in order to deal with lock contention in GC and R3.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 static int mmHyperLock(PVM pVM)
 {
@@ -178,7 +178,7 @@ static int mmHyperLock(PVM pVM)
 /**
  * Unlocks the hypervisor heap.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 static void mmHyperUnlock(PVM pVM)
 {
@@ -197,7 +197,7 @@ static void mmHyperUnlock(PVM pVM)
  * The returned memory is of course zeroed.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   cb          Number of bytes to allocate.
  * @param   uAlignment  Required memory alignment in bytes.
  *                      Values are 0,8,16,32,64 and PAGE_SIZE.
@@ -343,7 +343,7 @@ VMMDECL(int) MMHyperAlloc(PVM pVM, size_t cb, unsigned uAlignment, MMTAG enmTag,
  * Duplicates a block of memory.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSrc       The source memory block to copy from.
  * @param   cb          Size of the source memory block.
  * @param   uAlignment  Required memory alignment in bytes.
@@ -779,7 +779,7 @@ static void mmR3HyperStatRegisterOne(PVM pVM, PMMHYPERSTAT pStat)
  * The caller validates the parameters of this request.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pv          The memory to free.
  * @remark  Try avoid free hyper memory.
  */
@@ -1209,7 +1209,7 @@ static void mmHyperHeapCheck(PMMHYPERHEAP pHeap)
  * Performs consistency checks on the heap if MMHYPER_HEAP_STRICT was
  * defined at build time.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(void) MMHyperHeapCheck(PVM pVM)
 {
@@ -1227,7 +1227,7 @@ VMMDECL(void) MMHyperHeapCheck(PVM pVM)
 #ifdef DEBUG
 /**
  * Dumps the hypervisor heap to Log.
- * @param pVM       Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(void) MMHyperHeapDump(PVM pVM)
 {
@@ -1274,7 +1274,7 @@ VMMDECL(size_t) MMHyperHeapGetSize(PVM pVM)
  * Converts a context neutral heap offset into a pointer.
  *
  * @returns Pointer to hyper heap data.
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   offHeap     The hyper heap offset.
  */
 VMMDECL(void *) MMHyperHeapOffsetToPtr(PVM pVM, uint32_t offHeap)
@@ -1288,7 +1288,7 @@ VMMDECL(void *) MMHyperHeapOffsetToPtr(PVM pVM, uint32_t offHeap)
  * Converts a context specific heap pointer into a neutral heap offset.
  *
  * @returns Heap offset.
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   pv          Pointer to the heap data.
  */
 VMMDECL(uint32_t) MMHyperHeapPtrToOffset(PVM pVM, void *pv)
@@ -1303,7 +1303,7 @@ VMMDECL(uint32_t) MMHyperHeapPtrToOffset(PVM pVM, void *pv)
  * Query the address and size the hypervisor memory area.
  *
  * @returns Base address of the hypervisor area.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pcb         Where to store the size of the hypervisor area. (out)
  */
 VMMDECL(RTGCPTR) MMHyperGetArea(PVM pVM, size_t *pcb)
@@ -1319,7 +1319,7 @@ VMMDECL(RTGCPTR) MMHyperGetArea(PVM pVM, size_t *pcb)
  *
  * @returns true if inside.
  * @returns false if outside.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       The pointer to check.
  */
 VMMDECL(bool) MMHyperIsInsideArea(PVM pVM, RTGCPTR GCPtr)
diff --git a/src/VBox/VMM/VMMAll/MMAllPagePool.cpp b/src/VBox/VMM/VMMAll/MMAllPagePool.cpp
index b8a28ab..8601450 100644
--- a/src/VBox/VMM/VMMAll/MMAllPagePool.cpp
+++ b/src/VBox/VMM/VMMAll/MMAllPagePool.cpp
@@ -81,7 +81,7 @@ void *mmPagePoolPhys2Ptr(PMMPAGEPOOL pPool, RTHCPHYS HCPhys)
  * and MMR3PageAllocLow().
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   HCPhysPage  The physical address of a page.
  * @param   ppvPage     Where to store the address corresponding to HCPhysPage.
  * @thread  The Emulation Thread.
@@ -112,7 +112,7 @@ VMMDECL(int) MMPagePhys2PageEx(PVM pVM, RTHCPHYS HCPhysPage, void **ppvPage)
  * and MMR3PageAllocLow().
  *
  * @returns Pointer to the page at that physical address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   HCPhysPage  The physical address of a page.
  * @thread  The Emulation Thread.
  */
@@ -138,7 +138,7 @@ VMMDECL(void *) MMPagePhys2Page(PVM pVM, RTHCPHYS HCPhysPage)
  * and MMR3PageAllocLow().
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   HCPhysPage  The physical address of a page.
  * @param   ppvPage     Where to store the address corresponding to HCPhysPage.
  * @thread  The Emulation Thread.
@@ -203,7 +203,7 @@ RTHCPHYS mmPagePoolPtr2Phys(PMMPAGEPOOL pPool, void *pv)
  * and MMR3PageAllocLow().
  *
  * @returns Physical address for the specified page table.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvPage      Page which physical address we query.
  * @thread  The Emulation Thread.
  */
diff --git a/src/VBox/VMM/VMMAll/PATMAll.cpp b/src/VBox/VMM/VMMAll/PATMAll.cpp
index bf5b997..f1eef6f 100644
--- a/src/VBox/VMM/VMMAll/PATMAll.cpp
+++ b/src/VBox/VMM/VMMAll/PATMAll.cpp
@@ -73,7 +73,7 @@ patmVirtPageHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void *pvB
  * This function is called from CPUMRawEnter(). It doesn't have to update the
  * IF and IOPL eflags bits, the caller will enforce those to set and 0 respectively.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        The cpu context.
  * @see     pg_raw
  */
@@ -148,7 +148,7 @@ VMM_INT_DECL(void) PATMRawEnter(PVM pVM, PCPUMCTX pCtx)
  *
  ** @note Only here we are allowed to switch back to guest code (without a special reason such as a trap in patch code)!!
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        The cpu context.
  * @param   rawRC       Raw mode return code
  * @see     @ref pg_raw
@@ -247,7 +247,7 @@ VMM_INT_DECL(void) PATMRawLeave(PVM pVM, PCPUMCTX pCtx, int rawRC)
  * This is a worker for CPUMRawGetEFlags().
  *
  * @returns The eflags.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        The guest cpu context.
  */
 VMM_INT_DECL(uint32_t) PATMRawGetEFlags(PVM pVM, PCCPUMCTX pCtx)
@@ -263,7 +263,7 @@ VMM_INT_DECL(uint32_t) PATMRawGetEFlags(PVM pVM, PCCPUMCTX pCtx)
  * Updates the EFLAGS.
  * This is a worker for CPUMRawSetEFlags().
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        The guest cpu context.
  * @param   efl         The new EFLAGS value.
  */
@@ -279,7 +279,7 @@ VMM_INT_DECL(void) PATMRawSetEFlags(PVM pVM, PCPUMCTX pCtx, uint32_t efl)
 /**
  * Check if we must use raw mode (patch code being executed)
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pAddrGC     Guest context address
  */
 VMM_INT_DECL(bool) PATMShouldUseRawMode(PVM pVM, RTRCPTR pAddrGC)
@@ -293,7 +293,7 @@ VMM_INT_DECL(bool) PATMShouldUseRawMode(PVM pVM, RTRCPTR pAddrGC)
  * Returns the guest context pointer and size of the GC context structure
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(RCPTRTYPE(PPATMGCSTATE)) PATMGetGCState(PVM pVM)
 {
@@ -305,7 +305,7 @@ VMM_INT_DECL(RCPTRTYPE(PPATMGCSTATE)) PATMGetGCState(PVM pVM)
  * Checks whether the GC address is part of our patch or helper regions.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   uGCAddr     Guest context address.
  * @internal
  */
@@ -320,7 +320,7 @@ VMMDECL(bool) PATMIsPatchGCAddr(PVM pVM, RTRCUINTPTR uGCAddr)
  * Checks whether the GC address is part of our patch region.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   uGCAddr     Guest context address.
  * @internal
  */
@@ -337,7 +337,7 @@ VMMDECL(bool) PATMIsPatchGCAddrExclHelpers(PVM pVM, RTRCUINTPTR uGCAddr)
  * @retval  VERR_PATCH_NOT_FOUND if the request is entirely outside the patch
  *          code.
  *
- * @param   pVM             The cross context VM structure.
+ * @param   pVM            The cross context VM structure.
  * @param   GCPtrPatchCode  The patch address to start reading at.
  * @param   pvDst           Where to return the patch code.
  * @param   cbToRead        Number of bytes to read.
@@ -398,9 +398,9 @@ VMM_INT_DECL(int) PATMReadPatchCode(PVM pVM, RTGCPTR GCPtrPatchCode, void *pvDst
  * Set parameters for pending MMIO patch operation
  *
  * @returns VBox status code.
- * @param   pDevIns         Device instance.
- * @param   GCPhys          MMIO physical address
- * @param   pCachedData     GC pointer to cached data
+ * @param   pVM         The cross context VM structure.
+ * @param   GCPhys      MMIO physical address.
+ * @param   pCachedData RC pointer to cached data.
  */
 VMM_INT_DECL(int) PATMSetMMIOPatchInfo(PVM pVM, RTGCPHYS GCPhys, RTRCPTR pCachedData)
 {
@@ -419,7 +419,7 @@ VMM_INT_DECL(int) PATMSetMMIOPatchInfo(PVM pVM, RTGCPHYS GCPhys, RTRCPTR pCached
  * @returns true if it's enabled.
  * @returns false if it's disabled.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @todo CPUM should wrap this, EM.cpp shouldn't call us.
  */
 VMM_INT_DECL(bool) PATMAreInterruptsEnabled(PVM pVM)
@@ -435,7 +435,7 @@ VMM_INT_DECL(bool) PATMAreInterruptsEnabled(PVM pVM)
  * @returns true if it's enabled.
  * @returns false if it's disabled.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        The guest CPU context.
  * @todo CPUM should wrap this, EM.cpp shouldn't call us.
  */
@@ -454,7 +454,7 @@ VMM_INT_DECL(bool) PATMAreInterruptsEnabledByCtx(PVM pVM, PCPUMCTX pCtx)
  * Check if the instruction is patched as a duplicated function
  *
  * @returns patch record
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to the instruction
  *
  */
@@ -477,7 +477,7 @@ PPATMPATCHREC patmQueryFunctionPatch(PVM pVM, RTRCPTR pInstrGC)
  *
  * @returns VBox status
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Instruction pointer
  * @param   pOpcode     Original instruction opcode (out, optional)
  * @param   pSize       Original instruction size (out, optional)
@@ -505,7 +505,7 @@ VMM_INT_DECL(bool) PATMIsInt3Patch(PVM pVM, RTRCPTR pInstrGC, uint32_t *pOpcode,
  *
  * @returns VBox status
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        The relevant guest cpu context.
  * @param   pCpu        Disassembly state.
  */
@@ -578,7 +578,7 @@ end:
  * Adds branch pair to the lookup cache of the particular branch instruction
  *
  * @returns VBox status
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pJumpTableGC        Pointer to branch instruction lookup cache
  * @param   pBranchTarget       Original branch target
  * @param   pRelBranchPatch     Relative duplicated function address
diff --git a/src/VBox/VMM/VMMAll/PDMAll.cpp b/src/VBox/VMM/VMMAll/PDMAll.cpp
index 84006a0..802766a 100644
--- a/src/VBox/VMM/VMMAll/PDMAll.cpp
+++ b/src/VBox/VMM/VMMAll/PDMAll.cpp
@@ -39,7 +39,7 @@
  * Gets the pending interrupt.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pu8Interrupt    Where to store the interrupt on success.
  */
 VMMDECL(int) PDMGetInterrupt(PVMCPU pVCpu, uint8_t *pu8Interrupt)
@@ -99,7 +99,7 @@ VMMDECL(int) PDMGetInterrupt(PVMCPU pVCpu, uint8_t *pu8Interrupt)
  * Sets the pending interrupt coming from ISA source or HPET.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   u8Irq           The IRQ line.
  * @param   u8Level         The new level.
  * @param   uTagSrc         The IRQ tag and source tracer ID.
@@ -156,10 +156,10 @@ VMMDECL(int) PDMIsaSetIrq(PVM pVM, uint8_t u8Irq, uint8_t u8Level, uint32_t uTag
  * Sets the pending I/O APIC interrupt.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   u8Irq           The IRQ line.
- * @param   u8Level         The new level.
- * @param   uTagSrc         The IRQ tag and source tracer ID.
+ * @param   pVM         The cross context VM structure.
+ * @param   u8Irq       The IRQ line.
+ * @param   u8Level     The new level.
+ * @param   uTagSrc     The IRQ tag and source tracer ID.
  */
 VMM_INT_DECL(int) PDMIoApicSetIrq(PVM pVM, uint8_t u8Irq, uint8_t u8Level, uint32_t uTagSrc)
 {
@@ -178,10 +178,10 @@ VMM_INT_DECL(int) PDMIoApicSetIrq(PVM pVM, uint8_t u8Irq, uint8_t u8Level, uint3
  * Send a MSI to an I/O APIC.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   GCAddr          Request address.
- * @param   u8Value         Request value.
- * @param   uTagSrc         The IRQ tag and source tracer ID.
+ * @param   pVM         The cross context VM structure.
+ * @param   GCAddr      Request address.
+ * @param   uValue      Request value.
+ * @param   uTagSrc     The IRQ tag and source tracer ID.
  */
 VMM_INT_DECL(int) PDMIoApicSendMsi(PVM pVM, RTGCPHYS GCAddr, uint32_t uValue, uint32_t uTagSrc)
 {
@@ -202,7 +202,7 @@ VMM_INT_DECL(int) PDMIoApicSendMsi(PVM pVM, RTGCPHYS GCAddr, uint32_t uValue, ui
  * Returns the presence of an IO-APIC.
  *
  * @returns VBox true if an IO-APIC is present.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(bool) PDMHasIoApic(PVM pVM)
 {
@@ -214,7 +214,7 @@ VMM_INT_DECL(bool) PDMHasIoApic(PVM pVM)
  * Returns the presence of a Local APIC.
  *
  * @returns VBox true if a Local APIC is present.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(bool) PDMHasApic(PVM pVM)
 {
@@ -226,8 +226,8 @@ VMM_INT_DECL(bool) PDMHasApic(PVM pVM)
  * Set the APIC base.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VMCPU.
- * @param   u64Base         The new base.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   u64Base     The new base.
  */
 VMMDECL(int) PDMApicSetBase(PVMCPU pVCpu, uint64_t u64Base)
 {
@@ -257,8 +257,8 @@ VMMDECL(int) PDMApicSetBase(PVMCPU pVCpu, uint64_t u64Base)
  * PDMApicGetBase() and not this function.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VMCPU.
- * @param   pu64Base        Where to store the APIC base.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   pu64Base    Where to store the APIC base.
  */
 VMMDECL(int) PDMApicGetBase(PVMCPU pVCpu, uint64_t *pu64Base)
 {
@@ -280,8 +280,8 @@ VMMDECL(int) PDMApicGetBase(PVMCPU pVCpu, uint64_t *pu64Base)
  * Check if the APIC has a pending interrupt/if a TPR change would active one.
  *
  * @returns VINF_SUCCESS or VERR_PDM_NO_APIC_INSTANCE.
- * @param   pVCpu           Pointer to the VMCPU.
- * @param   pfPending       Pending state (out).
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   pfPending   Pending state (out).
  */
 VMM_INT_DECL(int) PDMApicHasPendingIrq(PVMCPU pVCpu, bool *pfPending)
 {
@@ -303,7 +303,7 @@ VMM_INT_DECL(int) PDMApicHasPendingIrq(PVMCPU pVCpu, bool *pfPending)
  * Set the TPR (task priority register?).
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   u8TPR           The new TPR.
  */
 VMMDECL(int) PDMApicSetTPR(PVMCPU pVCpu, uint8_t u8TPR)
@@ -325,7 +325,7 @@ VMMDECL(int) PDMApicSetTPR(PVMCPU pVCpu, uint8_t u8TPR)
  * Get the TPR (task priority register).
  *
  * @returns VINF_SUCCESS or VERR_PDM_NO_APIC_INSTANCE.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pu8TPR          Where to store the TRP.
  * @param   pfPending       Pending interrupt state (out, optional).
  * @param   pu8PendingIrq   Where to store the highest-priority pending IRQ
@@ -359,7 +359,7 @@ VMMDECL(int) PDMApicGetTPR(PVMCPU pVCpu, uint8_t *pu8TPR, bool *pfPending, uint8
  * Write a MSR in APIC range.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   iCpu            Target CPU.
  * @param   u32Reg          MSR to write.
  * @param   u64Value        Value to write.
@@ -379,7 +379,7 @@ VMM_INT_DECL(int) PDMApicWriteMSR(PVM pVM, VMCPUID iCpu, uint32_t u32Reg, uint64
  * Read a MSR in APIC range.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   iCpu            Target CPU.
  * @param   u32Reg          MSR to read.
  * @param   pu64Value       Value read.
@@ -400,7 +400,7 @@ VMM_INT_DECL(int) PDMApicReadMSR(PVM pVM, VMCPUID iCpu, uint32_t u32Reg, uint64_
  * Gets the frequency of the APIC timer.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pu64Value       Where to store the frequency.
  */
 VMM_INT_DECL(int) PDMApicGetTimerFreq(PVM pVM, uint64_t *pu64Value)
@@ -419,7 +419,7 @@ VMM_INT_DECL(int) PDMApicGetTimerFreq(PVM pVM, uint64_t *pu64Value)
  * Locks PDM.
  * This might call back to Ring-3 in order to deal with lock contention in GC and R3.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 void pdmLock(PVM pVM)
 {
@@ -439,7 +439,7 @@ void pdmLock(PVM pVM)
  *
  * @returns VINF_SUCCESS on success.
  * @returns rc if we're in GC or R0 and can't get the lock.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   rc      The RC to return in GC or R0 when we can't get the lock.
  */
 int pdmLockEx(PVM pVM, int rc)
@@ -451,7 +451,7 @@ int pdmLockEx(PVM pVM, int rc)
 /**
  * Unlocks PDM.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 void pdmUnlock(PVM pVM)
 {
@@ -463,7 +463,7 @@ void pdmUnlock(PVM pVM)
  * Converts ring 3 VMM heap pointer to a guest physical address
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pv              Ring-3 pointer.
  * @param   pGCPhys         GC phys address (out).
  */
@@ -485,7 +485,7 @@ VMM_INT_DECL(int) PDMVmmDevHeapR3ToGCPhys(PVM pVM, RTR3PTR pv, RTGCPHYS *pGCPhys
  * Checks if the vmm device heap is enabled (== vmm device's pci region mapped)
  *
  * @returns dev heap enabled status (true/false)
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMM_INT_DECL(bool) PDMVmmDevHeapIsEnabled(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp b/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
index ce9e8c4..870e40c 100644
--- a/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
+++ b/src/VBox/VMM/VMMAll/PDMAllCritSect.cpp
@@ -86,6 +86,7 @@ DECL_FORCE_INLINE(RTNATIVETHREAD) pdmCritSectGetNativeSelf(PCPDMCRITSECT pCritSe
  *
  * @param   pCritSect       The critical section.
  * @param   hNativeSelf     The native handle of this thread.
+ * @param   pSrcPos         The source position of the lock operation.
  */
 DECL_FORCE_INLINE(int) pdmCritSectEnterFirst(PPDMCRITSECT pCritSect, RTNATIVETHREAD hNativeSelf, PCRTLOCKVALSRCPOS pSrcPos)
 {
@@ -116,6 +117,7 @@ DECL_FORCE_INLINE(int) pdmCritSectEnterFirst(PPDMCRITSECT pCritSect, RTNATIVETHR
  *
  * @param   pCritSect           The critsect.
  * @param   hNativeSelf         The native thread handle.
+ * @param   pSrcPos             The source position of the lock operation.
  */
 static int pdmR3R0CritSectEnterContended(PPDMCRITSECT pCritSect, RTNATIVETHREAD hNativeSelf, PCRTLOCKVALSRCPOS pSrcPos)
 {
@@ -210,7 +212,7 @@ static int pdmR3R0CritSectEnterContended(PPDMCRITSECT pCritSect, RTNATIVETHREAD
  *
  * @param   pCritSect           The PDM critical section to enter.
  * @param   rcBusy              The status code to return when we're in GC or R0
- *                              and the section is busy.
+ * @param   pSrcPos             The source position of the lock operation.
  */
 DECL_FORCE_INLINE(int) pdmCritSectEnter(PPDMCRITSECT pCritSect, int rcBusy, PCRTLOCKVALSRCPOS pSrcPos)
 {
@@ -378,11 +380,8 @@ VMMDECL(int) PDMCritSectEnter(PPDMCRITSECT pCritSect, int rcBusy)
  *                              call if necessary.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where to lock is being
+ *                              acquired from.  Optional.
  */
 VMMDECL(int) PDMCritSectEnterDebug(PPDMCRITSECT pCritSect, int rcBusy, RTHCUINTPTR uId, RT_SRC_POS_DECL)
 {
@@ -406,6 +405,7 @@ VMMDECL(int) PDMCritSectEnterDebug(PPDMCRITSECT pCritSect, int rcBusy, RTHCUINTP
  *          during the operation.
  *
  * @param   pCritSect   The critical section.
+ * @param   pSrcPos     The source position of the lock operation.
  */
 static int pdmCritSectTryEnter(PPDMCRITSECT pCritSect, PCRTLOCKVALSRCPOS pSrcPos)
 {
@@ -486,11 +486,8 @@ VMMDECL(int) PDMCritSectTryEnter(PPDMCRITSECT pCritSect)
  * @param   pCritSect           The critical section.
  * @param   uId                 Some kind of locking location ID.  Typically a
  *                              return address up the stack.  Optional (0).
- * @param   pszFile             The file where the lock is being acquired from.
- *                              Optional.
- * @param   iLine               The line number in that file.  Optional (0).
- * @param   pszFunction         The function where the lock is being acquired
- *                              from.  Optional.
+ * @param   SRC_POS             The source position where to lock is being
+ *                              acquired from.  Optional.
  */
 VMMDECL(int) PDMCritSectTryEnterDebug(PPDMCRITSECT pCritSect, RTHCUINTPTR uId, RT_SRC_POS_DECL)
 {
@@ -731,7 +728,7 @@ VMMDECL(bool) PDMCritSectIsOwner(PCPDMCRITSECT pCritSect)
  * @returns true if owner.
  * @returns false if not owner.
  * @param   pCritSect   The critical section.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(bool) PDMCritSectIsOwnerEx(PCPDMCRITSECT pCritSect, PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMAll/PDMAllCritSectBoth.cpp b/src/VBox/VMM/VMMAll/PDMAllCritSectBoth.cpp
index 2e0ec84..2a5bffe 100644
--- a/src/VBox/VMM/VMMAll/PDMAllCritSectBoth.cpp
+++ b/src/VBox/VMM/VMMAll/PDMAllCritSectBoth.cpp
@@ -35,7 +35,7 @@
 /**
  * Process the critical sections (both types) queued for ring-3 'leave'.
  *
- * @param   pVCpu         Pointer to the VMCPU.
+ * @param   pVCpu         The cross context virtual CPU structure.
  */
 VMM_INT_DECL(void) PDMCritSectBothFF(PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMAll/PDMAllCritSectRw.cpp b/src/VBox/VMM/VMMAll/PDMAllCritSectRw.cpp
index 2413176..496b73d 100644
--- a/src/VBox/VMM/VMMAll/PDMAllCritSectRw.cpp
+++ b/src/VBox/VMM/VMMAll/PDMAllCritSectRw.cpp
@@ -402,7 +402,7 @@ static int pdmCritSectRwEnterShared(PPDMCRITSECTRW pThis, int rcBusy, bool fTryO
  *
  * @returns VBox status code.
  * @retval  VINF_SUCCESS on success.
- * @retval  @a rcBusy if in ring-0 or raw-mode context and it is busy.
+ * @retval  rcBusy if in ring-0 or raw-mode context and it is busy.
  * @retval  VERR_SEM_NESTED if nested enter on a no nesting section. (Asserted.)
  * @retval  VERR_SEM_DESTROYED if the critical section is delete before or
  *          during the operation.
@@ -411,10 +411,6 @@ static int pdmCritSectRwEnterShared(PPDMCRITSECTRW pThis, int rcBusy, bool fTryO
  * @param   rcBusy      The status code to return when we're in RC or R0 and the
  *                      section is busy.   Pass VINF_SUCCESS to acquired the
  *                      critical section thru a ring-3 call if necessary.
- * @param   uId         Where we're entering the section.
- * @param   pszFile     The source position - file.
- * @param   iLine       The source position - line.
- * @param   pszFunction The source position - function.
  * @sa      PDMCritSectRwEnterSharedDebug, PDMCritSectRwTryEnterShared,
  *          PDMCritSectRwTryEnterSharedDebug, PDMCritSectRwLeaveShared,
  *          RTCritSectRwEnterShared.
@@ -435,7 +431,7 @@ VMMDECL(int) PDMCritSectRwEnterShared(PPDMCRITSECTRW pThis, int rcBusy)
  *
  * @returns VBox status code.
  * @retval  VINF_SUCCESS on success.
- * @retval  @a rcBusy if in ring-0 or raw-mode context and it is busy.
+ * @retval  rcBusy if in ring-0 or raw-mode context and it is busy.
  * @retval  VERR_SEM_NESTED if nested enter on a no nesting section. (Asserted.)
  * @retval  VERR_SEM_DESTROYED if the critical section is delete before or
  *          during the operation.
@@ -445,9 +441,7 @@ VMMDECL(int) PDMCritSectRwEnterShared(PPDMCRITSECTRW pThis, int rcBusy)
  *                      section is busy.   Pass VINF_SUCCESS to acquired the
  *                      critical section thru a ring-3 call if necessary.
  * @param   uId         Where we're entering the section.
- * @param   pszFile     The source position - file.
- * @param   iLine       The source position - line.
- * @param   pszFunction The source position - function.
+ * @param   SRC_POS     The source position.
  * @sa      PDMCritSectRwEnterShared, PDMCritSectRwTryEnterShared,
  *          PDMCritSectRwTryEnterSharedDebug, PDMCritSectRwLeaveShared,
  *          RTCritSectRwEnterSharedDebug.
@@ -475,10 +469,6 @@ VMMDECL(int) PDMCritSectRwEnterSharedDebug(PPDMCRITSECTRW pThis, int rcBusy, RTH
  *          during the operation.
  *
  * @param   pThis       Pointer to the read/write critical section.
- * @param   uId         Where we're entering the section.
- * @param   pszFile     The source position - file.
- * @param   iLine       The source position - line.
- * @param   pszFunction The source position - function.
  * @sa      PDMCritSectRwTryEnterSharedDebug, PDMCritSectRwEnterShared,
  *          PDMCritSectRwEnterSharedDebug, PDMCritSectRwLeaveShared,
  *          RTCritSectRwTryEnterShared.
@@ -506,9 +496,7 @@ VMMDECL(int) PDMCritSectRwTryEnterShared(PPDMCRITSECTRW pThis)
  *
  * @param   pThis       Pointer to the read/write critical section.
  * @param   uId         Where we're entering the section.
- * @param   pszFile     The source position - file.
- * @param   iLine       The source position - line.
- * @param   pszFunction The source position - function.
+ * @param   SRC_POS     The source position.
  * @sa      PDMCritSectRwTryEnterShared, PDMCritSectRwEnterShared,
  *          PDMCritSectRwEnterSharedDebug, PDMCritSectRwLeaveShared,
  *          RTCritSectRwTryEnterSharedDebug.
@@ -946,7 +934,7 @@ static int pdmCritSectRwEnterExcl(PPDMCRITSECTRW pThis, int rcBusy, bool fTryOnl
  *
  * @returns VBox status code.
  * @retval  VINF_SUCCESS on success.
- * @retval  @a rcBusy if in ring-0 or raw-mode context and it is busy.
+ * @retval  rcBusy if in ring-0 or raw-mode context and it is busy.
  * @retval  VERR_SEM_NESTED if nested enter on a no nesting section. (Asserted.)
  * @retval  VERR_SEM_DESTROYED if the critical section is delete before or
  *          during the operation.
@@ -976,7 +964,7 @@ VMMDECL(int) PDMCritSectRwEnterExcl(PPDMCRITSECTRW pThis, int rcBusy)
  *
  * @returns VBox status code.
  * @retval  VINF_SUCCESS on success.
- * @retval  @a rcBusy if in ring-0 or raw-mode context and it is busy.
+ * @retval  rcBusy if in ring-0 or raw-mode context and it is busy.
  * @retval  VERR_SEM_NESTED if nested enter on a no nesting section. (Asserted.)
  * @retval  VERR_SEM_DESTROYED if the critical section is delete before or
  *          during the operation.
@@ -986,9 +974,7 @@ VMMDECL(int) PDMCritSectRwEnterExcl(PPDMCRITSECTRW pThis, int rcBusy)
  *                      section is busy.   Pass VINF_SUCCESS to acquired the
  *                      critical section thru a ring-3 call if necessary.
  * @param   uId         Where we're entering the section.
- * @param   pszFile     The source position - file.
- * @param   iLine       The source position - line.
- * @param   pszFunction The source position - function.
+ * @param   SRC_POS     The source position.
  * @sa      PDMCritSectRwEnterExcl, PDMCritSectRwTryEnterExcl,
  *          PDMCritSectRwTryEnterExclDebug,
  *          PDMCritSectEnterDebug, PDMCritSectEnter,
@@ -1043,9 +1029,7 @@ VMMDECL(int) PDMCritSectRwTryEnterExcl(PPDMCRITSECTRW pThis)
  *
  * @param   pThis       Pointer to the read/write critical section.
  * @param   uId         Where we're entering the section.
- * @param   pszFile     The source position - file.
- * @param   iLine       The source position - line.
- * @param   pszFunction The source position - function.
+ * @param   SRC_POS     The source position.
  * @sa      PDMCritSectRwTryEnterExcl, PDMCritSectRwEnterExcl,
  *          PDMCritSectRwEnterExclDebug,
  *          PDMCritSectTryEnterDebug, PDMCritSectTryEnter,
@@ -1255,8 +1239,8 @@ void pdmCritSectRwLeaveExclQueued(PPDMCRITSECTRW pThis)
 /**
  * Checks the caller is the exclusive (write) owner of the critical section.
  *
- * @retval  @c true if owner.
- * @retval  @c false if not owner.
+ * @retval  true if owner.
+ * @retval  false if not owner.
  * @param   pThis       Pointer to the read/write critical section.
  * @sa      PDMCritSectRwIsReadOwner, PDMCritSectIsOwner,
  *          RTCritSectRwIsWriteOwner.
@@ -1423,8 +1407,8 @@ VMMDECL(uint32_t) PDMCritSectRwGetReadCount(PPDMCRITSECTRW pThis)
 /**
  * Checks if the read/write critical section is initialized or not.
  *
- * @retval  @c true if initialized.
- * @retval  @c false if not initialized.
+ * @retval  true if initialized.
+ * @retval  false if not initialized.
  * @param   pThis       Pointer to the read/write critical section.
  * @sa      PDMCritSectIsInitialized, RTCritSectRwIsInitialized.
  */
diff --git a/src/VBox/VMM/VMMAll/PGMAll.cpp b/src/VBox/VMM/VMMAll/PGMAll.cpp
index af31b34..546e149 100644
--- a/src/VBox/VMM/VMMAll/PGMAll.cpp
+++ b/src/VBox/VMM/VMMAll/PGMAll.cpp
@@ -398,7 +398,7 @@ static int pgmShwGetEPTPDPtr(PVMCPU pVCpu, RTGCPTR64 GCPtr, PEPTPDPT *ppPdpt, PE
  * #PF Handler.
  *
  * @returns VBox status code (appropriate for trap handling and GC return).
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   uErr        The trap error code.
  * @param   pRegFrame   Trap register frame.
  * @param   pvFault     The fault address.
@@ -504,7 +504,7 @@ VMMDECL(int) PGMTrap0eHandler(PVMCPU pVCpu, RTGCUINT uErr, PCPUMCTXCORE pRegFram
  * @returns VBox status code suitable for scheduling.
  * @retval  VINF_SUCCESS on success.
  * @retval  VINF_PGM_SYNC_CR3 if we're out of shadow pages or something like that.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtrPage   Page to invalidate.
  */
 VMMDECL(int) PGMPrefetchPage(PVMCPU pVCpu, RTGCPTR GCPtrPage)
@@ -523,7 +523,7 @@ VMMDECL(int) PGMPrefetchPage(PVMCPU pVCpu, RTGCPTR GCPtrPage)
  * @returns Pointer to the mapping.
  * @returns NULL if not
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       The guest context pointer.
  */
 PPGMMAPPING pgmGetMapping(PVM pVM, RTGCPTR GCPtr)
@@ -547,7 +547,7 @@ PPGMMAPPING pgmGetMapping(PVM pVM, RTGCPTR GCPtr)
  * Only checks the guest's page tables
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   Addr        Guest virtual address to check
  * @param   cbSize      Access size
  * @param   fAccess     Access type (r/w, user/supervisor (X86_PTE_*))
@@ -600,7 +600,7 @@ VMMDECL(int) PGMIsValidAccess(PVMCPU pVCpu, RTGCPTR Addr, uint32_t cbSize, uint3
  * Supports handling of pages marked for dirty bit tracking and CSAM
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   Addr        Guest virtual address to check
  * @param   cbSize      Access size
  * @param   fAccess     Access type (r/w, user/supervisor (X86_PTE_*))
@@ -709,7 +709,7 @@ VMMDECL(int) PGMVerifyAccess(PVMCPU pVCpu, RTGCPTR Addr, uint32_t cbSize, uint32
  * @retval  VINF_EM_RAW_EMULATE_INSTR - not handled (RC only).
  * @retval  VERR_REM_FLUSHED_PAGES_OVERFLOW - not handled.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtrPage   Page to invalidate.
  *
  * @remark  ASSUMES the page table entry or page directory is valid. Fairly
@@ -802,8 +802,8 @@ VMMDECL(int) PGMInvalidatePage(PVMCPU pVCpu, RTGCPTR GCPtrPage)
  * Executes an instruction using the interpreter.
  *
  * @returns VBox status code (appropriate for trap handling and GC return).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   Register frame.
  * @param   pvFault     Fault address.
  */
@@ -822,8 +822,8 @@ VMMDECL(VBOXSTRICTRC) PGMInterpretInstruction(PVM pVM, PVMCPU pVCpu, PCPUMCTXCOR
 /**
  * Gets effective page information (from the VMM page directory).
  *
- * @returns VBox status.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Guest Context virtual address of the page.
  * @param   pfFlags     Where to store the flags. These are X86_PTE_*.
  * @param   pHCPhys     Where to store the HC physical address of the page.
@@ -845,7 +845,7 @@ VMMDECL(int) PGMShwGetPage(PVMCPU pVCpu, RTGCPTR GCPtr, uint64_t *pfFlags, PRTHC
  * The existing flags are ANDed with the fMask and ORed with the fFlags.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Virtual address of the first page in the range.
  * @param   fFlags      The OR  mask - page flags X86_PTE_*, excluding the page mask of course.
  * @param   fMask       The AND mask - page flags X86_PTE_*.
@@ -873,7 +873,7 @@ DECLINLINE(int) pdmShwModifyPage(PVMCPU pVCpu, RTGCPTR GCPtr, uint64_t fFlags, u
  * make it read-only.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Virtual address of the first page in the range.
  * @param   fOpFlags    A combination of the PGM_MK_PK_XXX flags.
  */
@@ -892,9 +892,8 @@ VMMDECL(int) PGMShwMakePageReadonly(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fOpFla
  * pages.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Virtual address of the first page in the range.
- * @param   fMmio2      Set if it is an MMIO2 page.
  * @param   fOpFlags    A combination of the PGM_MK_PK_XXX flags.
  */
 VMMDECL(int) PGMShwMakePageWritable(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fOpFlags)
@@ -908,7 +907,7 @@ VMMDECL(int) PGMShwMakePageWritable(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fOpFla
  * make it not present.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Virtual address of the first page in the range.
  * @param   fOpFlags    A combination of the PGM_MK_PG_XXX flags.
  */
@@ -925,7 +924,7 @@ VMMDECL(int) PGMShwMakePageNotPresent(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fOpF
  * This if for dealing with CR0.WP=0 and readonly user pages.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Virtual address of the first page in the range.
  * @param   fBigPage    Whether or not this is a big page. If it is, we have to
  *                      change the shadow PDE as well.  If it isn't, the caller
@@ -972,7 +971,7 @@ int pgmShwMakePageSupervisorAndWritable(PVMCPU pVCpu, RTGCPTR GCPtr, bool fBigPa
  * Gets the shadow page directory for the specified address, PAE.
  *
  * @returns Pointer to the shadow PD.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  * @param   uGstPdpe    Guest PDPT entry. Valid.
  * @param   ppPD        Receives address of page directory
@@ -1066,7 +1065,7 @@ int pgmShwSyncPaePDPtr(PVMCPU pVCpu, RTGCPTR GCPtr, X86PGPAEUINT uGstPdpe, PX86P
  * Gets the pointer to the shadow page directory entry for an address, PAE.
  *
  * @returns Pointer to the PDE.
- * @param   pVCpu       The current CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPtr       The address.
  * @param   ppShwPde    Receives the address of the pgm pool page for the shadow page directory
  */
@@ -1104,8 +1103,8 @@ DECLINLINE(int) pgmShwGetPaePoolPagePD(PVMCPU pVCpu, RTGCPTR GCPtr, PPGMPOOLPAGE
  * The caller is responsible for making sure the guest has a valid PD before
  * calling this function.
  *
- * @returns VBox status.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  * @param   uGstPml4e   Guest PML4 entry (valid).
  * @param   uGstPdpe    Guest PDPT entry (valid).
@@ -1207,8 +1206,8 @@ static int pgmShwSyncLongModePDPtr(PVMCPU pVCpu, RTGCPTR64 GCPtr, X86PGPAEUINT u
 /**
  * Gets the SHADOW page directory pointer for the specified address (long mode).
  *
- * @returns VBox status.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  * @param   ppPdpt      Receives address of pdpt
  * @param   ppPD        Receives address of page directory
@@ -1252,8 +1251,8 @@ DECLINLINE(int) pgmShwGetLongModePDPtr(PVMCPU pVCpu, RTGCPTR64 GCPtr, PX86PML4E
  * Syncs the SHADOW EPT page directory pointer for the specified address. Allocates
  * backing pages in case the PDPT or PML4 entry is missing.
  *
- * @returns VBox status.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  * @param   ppPdpt      Receives address of pdpt
  * @param   ppPD        Receives address of page directory
@@ -1342,13 +1341,13 @@ static int pgmShwGetEPTPDPtr(PVMCPU pVCpu, RTGCPTR64 GCPtr, PEPTPDPT *ppPdpt, PE
  *
  * The caller must own the PGM lock.
  *
- * @param   pVCpu               The current CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys              Where to start.
  * @param   cPages              How many pages which entries should be synced.
  * @param   enmShwPagingMode    The shadow paging mode (PGMMODE_EPT for VT-x,
  *                              host paging mode for AMD-V).
  */
-int pgmShwSyncNestedPageLocked(PVMCPU pVCpu, RTGCPHYS GCPhysFault, uint32_t cPages, PGMMODE enmShwPagingMode)
+int pgmShwSyncNestedPageLocked(PVMCPU pVCpu, RTGCPHYS GCPhys, uint32_t cPages, PGMMODE enmShwPagingMode)
 {
     PGM_LOCK_ASSERT_OWNER(pVCpu->CTX_SUFF(pVM));
 
@@ -1358,7 +1357,7 @@ int pgmShwSyncNestedPageLocked(PVMCPU pVCpu, RTGCPHYS GCPhysFault, uint32_t cPag
         case PGMMODE_32_BIT:
         {
             X86PDE PdeDummy = { X86_PDE_P | X86_PDE_US | X86_PDE_RW | X86_PDE_A };
-            rc = PGM_BTH_NAME_32BIT_PROT(SyncPage)(pVCpu, PdeDummy, GCPhysFault, cPages, ~0U /*uErr*/);
+            rc = PGM_BTH_NAME_32BIT_PROT(SyncPage)(pVCpu, PdeDummy, GCPhys, cPages, ~0U /*uErr*/);
             break;
         }
 
@@ -1366,7 +1365,7 @@ int pgmShwSyncNestedPageLocked(PVMCPU pVCpu, RTGCPHYS GCPhysFault, uint32_t cPag
         case PGMMODE_PAE_NX:
         {
             X86PDEPAE PdeDummy = { X86_PDE_P | X86_PDE_US | X86_PDE_RW | X86_PDE_A };
-            rc = PGM_BTH_NAME_PAE_PROT(SyncPage)(pVCpu, PdeDummy, GCPhysFault, cPages, ~0U /*uErr*/);
+            rc = PGM_BTH_NAME_PAE_PROT(SyncPage)(pVCpu, PdeDummy, GCPhys, cPages, ~0U /*uErr*/);
             break;
         }
 
@@ -1374,14 +1373,14 @@ int pgmShwSyncNestedPageLocked(PVMCPU pVCpu, RTGCPHYS GCPhysFault, uint32_t cPag
         case PGMMODE_AMD64_NX:
         {
             X86PDEPAE PdeDummy = { X86_PDE_P | X86_PDE_US | X86_PDE_RW | X86_PDE_A };
-            rc = PGM_BTH_NAME_AMD64_PROT(SyncPage)(pVCpu, PdeDummy, GCPhysFault, cPages, ~0U /*uErr*/);
+            rc = PGM_BTH_NAME_AMD64_PROT(SyncPage)(pVCpu, PdeDummy, GCPhys, cPages, ~0U /*uErr*/);
             break;
         }
 
         case PGMMODE_EPT:
         {
             X86PDEPAE PdeDummy = { X86_PDE_P | X86_PDE_US | X86_PDE_RW | X86_PDE_A };
-            rc = PGM_BTH_NAME_EPT_PROT(SyncPage)(pVCpu, PdeDummy, GCPhysFault, cPages, ~0U /*uErr*/);
+            rc = PGM_BTH_NAME_EPT_PROT(SyncPage)(pVCpu, PdeDummy, GCPhys, cPages, ~0U /*uErr*/);
             break;
         }
 
@@ -1401,8 +1400,8 @@ int pgmShwSyncNestedPageLocked(PVMCPU pVCpu, RTGCPHYS GCPhysFault, uint32_t cPag
  * necessary at a later point, a PGMGstGetPage() will be created for that
  * purpose.
  *
- * @returns VBox status.
- * @param   pVCpu       The current CPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPtr       Guest Context virtual address of the page.
  * @param   pfFlags     Where to store the flags. These are X86_PTE_*, even for big pages.
  * @param   pGCPhys     Where to store the GC physical address of the page.
@@ -1427,7 +1426,7 @@ VMMDECL(int) PGMGstGetPage(PVMCPU pVCpu, RTGCPTR GCPtr, uint64_t *pfFlags, PRTGC
  * @retval  VERR_PGM_NOT_USED_IN_MODE if not paging isn't enabled. @a pWalk is
  *          not valid, except enmType is PGMPTWALKGSTTYPE_INVALID.
  *
- * @param   pVCpu       The current CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPtr       The guest virtual address to walk by.
  * @param   pWalk       Where to return the walk result. This is valid on some
  *                      error codes as well.
@@ -1477,7 +1476,7 @@ int pgmGstPtWalk(PVMCPU pVCpu, RTGCPTR GCPtr, PPGMPTWALKGST pWalk)
  *
  * @returns true if the page is present.
  * @returns false if the page is not present.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Address within the page.
  */
 VMMDECL(bool) PGMGstIsPagePresent(PVMCPU pVCpu, RTGCPTR GCPtr)
@@ -1491,8 +1490,8 @@ VMMDECL(bool) PGMGstIsPagePresent(PVMCPU pVCpu, RTGCPTR GCPtr)
 /**
  * Sets (replaces) the page flags for a range of pages in the guest's tables.
  *
- * @returns VBox status.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address of the first page.
  * @param   cb          The size of the range in bytes.
  * @param   fFlags      Page flags X86_PTE_*, excluding the page mask of course.
@@ -1510,7 +1509,7 @@ VMMDECL(int)  PGMGstSetPage(PVMCPU pVCpu, RTGCPTR GCPtr, size_t cb, uint64_t fFl
  * The existing flags are ANDed with the fMask and ORed with the fFlags.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Virtual address of the first page in the range.
  * @param   cb          Size (in bytes) of the range to apply the modification to.
  * @param   fFlags      The OR  mask - page flags X86_PTE_*, excluding the page mask of course.
@@ -1553,7 +1552,7 @@ VMMDECL(int)  PGMGstModifyPage(PVMCPU pVCpu, RTGCPTR GCPtr, size_t cb, uint64_t
  * Performs the lazy mapping of the 32-bit guest PD.
  *
  * @returns VBox status code.
- * @param   pVCpu       The current CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   ppPd        Where to return the pointer to the mapping.  This is
  *                      always set.
  */
@@ -1596,7 +1595,7 @@ int pgmGstLazyMap32BitPD(PVMCPU pVCpu, PX86PD *ppPd)
  * Performs the lazy mapping of the PAE guest PDPT.
  *
  * @returns VBox status code.
- * @param   pVCpu       The current CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   ppPdpt      Where to return the pointer to the mapping.  This is
  *                      always set.
  */
@@ -1639,7 +1638,7 @@ int pgmGstLazyMapPaePDPT(PVMCPU pVCpu, PX86PDPT *ppPdpt)
  *
  * @returns Pointer to the mapping.
  * @returns VBox status code.
- * @param   pVCpu       The current CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   iPdpt       Which PD entry to map (0..3).
  * @param   ppPd        Where to return the pointer to the mapping.  This is
  *                      always set.
@@ -1706,7 +1705,7 @@ int pgmGstLazyMapPaePD(PVMCPU pVCpu, uint32_t iPdpt, PX86PDPAE *ppPd)
  * Performs the lazy mapping of the 32-bit guest PD.
  *
  * @returns VBox status code.
- * @param   pVCpu       The current CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   ppPml4      Where to return the pointer to the mapping.  This will
  *                      always be set.
  */
@@ -1747,7 +1746,7 @@ int pgmGstLazyMapPml4(PVMCPU pVCpu, PX86PML4 *ppPml4)
  * Gets the PAE PDPEs values cached by the CPU.
  *
  * @returns VBox status code.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   paPdpes             Where to return the four PDPEs. The array
  *                              pointed to must have 4 entries.
  */
@@ -1768,7 +1767,7 @@ VMM_INT_DECL(int) PGMGstGetPaePdpes(PVMCPU pVCpu, PX86PDPE paPdpes)
  *
  * @remarks This must be called *AFTER* PGMUpdateCR3.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   paPdpes             The four PDPE values. The array pointed to must
  *                              have exactly 4 entries.
  *
@@ -1801,7 +1800,7 @@ VMM_INT_DECL(void) PGMGstUpdatePaePdpes(PVMCPU pVCpu, PCX86PDPE paPdpes)
 /**
  * Gets the current CR3 register value for the shadow memory context.
  * @returns CR3 value.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(RTHCPHYS) PGMGetHyperCR3(PVMCPU pVCpu)
 {
@@ -1814,7 +1813,8 @@ VMMDECL(RTHCPHYS) PGMGetHyperCR3(PVMCPU pVCpu)
 /**
  * Gets the current CR3 register value for the nested memory context.
  * @returns CR3 value.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
+ * @param   enmShadowMode   The shadow paging mode.
  */
 VMMDECL(RTHCPHYS) PGMGetNestedCR3(PVMCPU pVCpu, PGMMODE enmShadowMode)
 {
@@ -1827,7 +1827,7 @@ VMMDECL(RTHCPHYS) PGMGetNestedCR3(PVMCPU pVCpu, PGMMODE enmShadowMode)
 /**
  * Gets the current CR3 register value for the HC intermediate memory context.
  * @returns CR3 value.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(RTHCPHYS) PGMGetInterHCCR3(PVM pVM)
 {
@@ -1859,8 +1859,8 @@ VMMDECL(RTHCPHYS) PGMGetInterHCCR3(PVM pVM)
 /**
  * Gets the current CR3 register value for the RC intermediate memory context.
  * @returns CR3 value.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(RTHCPHYS) PGMGetInterRCCR3(PVM pVM, PVMCPU pVCpu)
 {
@@ -1891,7 +1891,7 @@ VMMDECL(RTHCPHYS) PGMGetInterRCCR3(PVM pVM, PVMCPU pVCpu)
 /**
  * Gets the CR3 register value for the 32-Bit intermediate memory context.
  * @returns CR3 value.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(RTHCPHYS) PGMGetInter32BitCR3(PVM pVM)
 {
@@ -1902,7 +1902,7 @@ VMMDECL(RTHCPHYS) PGMGetInter32BitCR3(PVM pVM)
 /**
  * Gets the CR3 register value for the PAE intermediate memory context.
  * @returns CR3 value.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(RTHCPHYS) PGMGetInterPaeCR3(PVM pVM)
 {
@@ -1913,7 +1913,7 @@ VMMDECL(RTHCPHYS) PGMGetInterPaeCR3(PVM pVM)
 /**
  * Gets the CR3 register value for the AMD64 intermediate memory context.
  * @returns CR3 value.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(RTHCPHYS) PGMGetInterAmd64CR3(PVM pVM)
 {
@@ -1929,7 +1929,7 @@ VMMDECL(RTHCPHYS) PGMGetInterAmd64CR3(PVM pVM)
  * @returns VBox status code.
  * @retval  VINF_PGM_SYNC_CR3 if monitoring requires a CR3 sync. This can
  *          safely be ignored and overridden since the FF will be set too then.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cr3         The new cr3.
  * @param   fGlobal     Indicates whether this is a global flush or not.
  */
@@ -2039,7 +2039,7 @@ VMMDECL(int) PGMFlushTLB(PVMCPU pVCpu, uint64_t cr3, bool fGlobal)
  * @retval  VINF_PGM_SYNC_CR3 if monitoring requires a CR3 sync (not for nested
  *          paging modes).  This can safely be ignored and overridden since the
  *          FF will be set too then.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cr3         The new cr3.
  */
 VMMDECL(int) PGMUpdateCR3(PVMCPU pVCpu, uint64_t cr3)
@@ -2093,7 +2093,7 @@ VMMDECL(int) PGMUpdateCR3(PVMCPU pVCpu, uint64_t cr3)
  * in several places, most importantly whenever the CR3 is loaded.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cr0         Guest context CR0 register
  * @param   cr3         Guest context CR3 register
  * @param   cr4         Guest context CR4 register
@@ -2236,7 +2236,7 @@ VMMDECL(int) PGMSyncCR3(PVMCPU pVCpu, uint64_t cr0, uint64_t cr3, uint64_t cr4,
  *          (I.e. not in R3.)
  * @retval  VINF_EM_SUSPEND or VINF_EM_OFF on a fatal runtime error. (R3 only)
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cr0         The new cr0.
  * @param   cr4         The new cr4.
  * @param   efer        The new extended feature enable register.
@@ -2298,7 +2298,7 @@ VMMDECL(int) PGMChangeMode(PVMCPU pVCpu, uint64_t cr0, uint64_t cr4, uint64_t ef
 /**
  * Called by CPUM or REM when CR0.WP changes to 1.
  *
- * @param   pVCpu       The cross context virtual CPU structure of the caller.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @thread  EMT
  */
 VMMDECL(void) PGMCr0WpEnabled(PVMCPU pVCpu)
@@ -2329,7 +2329,7 @@ VMMDECL(void) PGMCr0WpEnabled(PVMCPU pVCpu)
  * If you just need the CPU mode (real/protected/long), use CPUMGetGuestMode().
  *
  * @returns The current paging mode.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(PGMMODE) PGMGetGuestMode(PVMCPU pVCpu)
 {
@@ -2341,7 +2341,7 @@ VMMDECL(PGMMODE) PGMGetGuestMode(PVMCPU pVCpu)
  * Gets the current shadow paging mode.
  *
  * @returns The current paging mode.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(PGMMODE) PGMGetShadowMode(PVMCPU pVCpu)
 {
@@ -2353,7 +2353,7 @@ VMMDECL(PGMMODE) PGMGetShadowMode(PVMCPU pVCpu)
  * Gets the current host paging mode.
  *
  * @returns The current paging mode.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMDECL(PGMMODE) PGMGetHostMode(PVM pVM)
 {
@@ -2414,7 +2414,8 @@ VMMDECL(const char *) PGMGetModeName(PGMMODE enmMode)
 /**
  * Notification from CPUM that the EFER.NXE bit has changed.
  *
- * @param   pVCpu       The virtual CPU for which EFER changed.
+ * @param   pVCpu       The cross context virtual CPU structure of the CPU for
+ *                      which EFER changed.
  * @param   fNxe        The new NXE state.
  */
 VMM_INT_DECL(void) PGMNotifyNxeChanged(PVMCPU pVCpu, bool fNxe)
@@ -2472,7 +2473,7 @@ VMM_INT_DECL(void) PGMNotifyNxeChanged(PVMCPU pVCpu, bool fNxe)
  * Check if any pgm pool pages are marked dirty (not monitored)
  *
  * @returns bool locked/not locked
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(bool) PGMHasDirtyPages(PVM pVM)
 {
@@ -2484,7 +2485,7 @@ VMMDECL(bool) PGMHasDirtyPages(PVM pVM)
  * Check if this VCPU currently owns the PGM lock.
  *
  * @returns bool owner/not owner
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(bool) PGMIsLockOwner(PVM pVM)
 {
@@ -2496,7 +2497,7 @@ VMMDECL(bool) PGMIsLockOwner(PVM pVM)
  * Enable or disable large page usage
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   fUseLargePages  Use/not use large pages
  */
 VMMDECL(int) PGMSetLargePageUsage(PVM pVM, bool fUseLargePages)
@@ -2512,9 +2513,10 @@ VMMDECL(int) PGMSetLargePageUsage(PVM pVM, bool fUseLargePages)
  * Acquire the PGM lock.
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
+ * @param   SRC_POS     The source position of the caller (RT_SRC_POS).
  */
-#if defined(VBOX_STRICT) && defined(IN_RING3)
+#if (defined(VBOX_STRICT) && defined(IN_RING3)) || defined(DOXYGEN_RUNNING)
 int pgmLockDebug(PVM pVM, RT_SRC_POS_DECL)
 #else
 int pgmLock(PVM pVM)
@@ -2538,7 +2540,7 @@ int pgmLock(PVM pVM)
  * Release the PGM lock.
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 void pgmUnlock(PVM pVM)
 {
@@ -2555,11 +2557,12 @@ void pgmUnlock(PVM pVM)
  * Common worker for pgmRZDynMapGCPageOffInlined and pgmRZDynMapGCPageV2Inlined.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The current CPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys      The guest physical address of the page to map.  The
  *                      offset bits are not ignored.
  * @param   ppv         Where to return the address corresponding to @a GCPhys.
+ * @param   SRC_POS     The source position of the caller (RT_SRC_POS).
  */
 int pgmRZDynMapGCPageCommon(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, void **ppv RTLOG_COMMA_SRC_POS_DECL)
 {
@@ -2754,7 +2757,7 @@ VMMDECL(void) PGMDeregisterStringFormatTypes(void)
  * Asserts that there are no mapping conflicts.
  *
  * @returns Number of conflicts.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(unsigned) PGMAssertNoMappingConflicts(PVM pVM)
 {
@@ -2798,8 +2801,8 @@ VMMDECL(unsigned) PGMAssertNoMappingConflicts(PVM pVM)
  * shadow page tables is in sync with the guest page tables.
  *
  * @returns Number of conflicts.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   cr3     The current guest CR3 register value.
  * @param   cr4     The current guest CR4 register value.
  */
diff --git a/src/VBox/VMM/VMMAll/PGMAllBth.h b/src/VBox/VMM/VMMAll/PGMAllBth.h
index 285a4d2..a52d2dc 100644
--- a/src/VBox/VMM/VMMAll/PGMAllBth.h
+++ b/src/VBox/VMM/VMMAll/PGMAllBth.h
@@ -90,7 +90,7 @@ RT_C_DECLS_END
  * @retval  VINF_EM_RAW_GUEST_TRAP
  * @retval  VINF_EM_RAW_EMULATE_INSTR
  *
- * @param   pVCpu           The current CPU.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pGstWalk        The guest page table walk result.
  * @param   uErr            The error code.
  */
@@ -143,7 +143,7 @@ PGM_BTH_DECL(VBOXSTRICTRC, Trap0eHandlerGuestFault)(PVMCPU pVCpu, PGSTPTWALK pGs
  *
  * @returns Strict VBox status code.
  *
- * @param   pVCpu           The current CPU.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   uErr            The error code.
  * @param   pRegFrame       The register frame.
  * @param   pvFault         The fault address.
@@ -154,7 +154,7 @@ PGM_BTH_DECL(VBOXSTRICTRC, Trap0eHandlerGuestFault)(PVMCPU pVCpu, PGSTPTWALK pGs
  */
 static VBOXSTRICTRC PGM_BTH_NAME(Trap0eHandlerDoAccessHandlers)(PVMCPU pVCpu, RTGCUINT uErr, PCPUMCTXCORE pRegFrame,
                                                                 RTGCPTR pvFault, PPGMPAGE pPage, bool *pfLockTaken
-# if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE)
+# if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) || defined(DOXYGEN_RUNNING)
                                                                 , PGSTPTWALK pGstWalk
 # endif
                                                                 )
@@ -438,11 +438,11 @@ static VBOXSTRICTRC PGM_BTH_NAME(Trap0eHandlerDoAccessHandlers)(PVMCPU pVCpu, RT
 
 
 /**
- * #PF Handler for raw-mode guest execution.
+ * \#PF Handler for raw-mode guest execution.
  *
  * @returns VBox status code (appropriate for trap handling and GC return).
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   uErr        The trap error code.
  * @param   pRegFrame   Trap register frame.
  * @param   pvFault     The fault address.
@@ -1177,7 +1177,7 @@ PGM_BTH_DECL(int, Trap0eHandler)(PVMCPU pVCpu, RTGCUINT uErr, PCPUMCTXCORE pRegF
  *
  * @returns VBox status code.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtrPage   Page to invalidate.
  *
  * @remark  ASSUMES that the guest is updating before invalidating. This order
@@ -1474,7 +1474,7 @@ PGM_BTH_DECL(int, InvalidatePage)(PVMCPU pVCpu, RTGCPTR GCPtrPage)
 /**
  * Update the tracking of shadowed pages.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pShwPage    The shadow page.
  * @param   HCPhys      The physical page we is being dereferenced.
  * @param   iPte        Shadow PTE index
@@ -1551,7 +1551,7 @@ DECLINLINE(void) PGM_BTH_NAME(SyncPageWorkerTrackDeref)(PVMCPU pVCpu, PPGMPOOLPA
 /**
  * Update the tracking of shadowed pages.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pShwPage    The shadow page.
  * @param   u16         The top 16-bit of the pPage->HCPhys.
  * @param   pPage       Pointer to the guest page. this will be modified.
@@ -1589,7 +1589,7 @@ DECLINLINE(void) PGM_BTH_NAME(SyncPageWorkerTrackAddref)(PVMCPU pVCpu, PPGMPOOLP
 /**
  * Modifies a shadow PTE to account for access handlers.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The page in question.
  * @param   fPteSrc     The shadowed flags of the source PTE.  Must include the
  *                      A (accessed) bit so it can be emulated correctly.
@@ -1664,7 +1664,7 @@ DECLINLINE(void) PGM_BTH_NAME(SyncHandlerPte)(PVM pVM, PCPGMPAGE pPage, uint64_t
  * physical address.  The PdeSrc argument only the flags are used.  No page
  * structured will be mapped in this function.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pPteDst     Destination page table entry.
  * @param   PdeSrc      Source page directory entry (i.e. Guest OS page directory entry).
  *                      Can safely assume that only the flags are being used.
@@ -1674,11 +1674,12 @@ DECLINLINE(void) PGM_BTH_NAME(SyncHandlerPte)(PVM pVM, PCPGMPAGE pPage, uint64_t
  *
  * @remark  Not used for 2/4MB pages!
  */
-#if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE)
+#if PGM_WITH_PAGING(PGM_GST_TYPE, PGM_SHW_TYPE) || defined(DOXYGEN_RUNNING)
 static void PGM_BTH_NAME(SyncPageWorker)(PVMCPU pVCpu, PSHWPTE pPteDst, GSTPDE PdeSrc, GSTPTE PteSrc,
                                          PPGMPOOLPAGE pShwPage, unsigned iPTDst)
 #else
-static void PGM_BTH_NAME(SyncPageWorker)(PVMCPU pVCpu, PSHWPTE pPteDst, RTGCPHYS GCPhysPage, PPGMPOOLPAGE pShwPage, unsigned iPTDst)
+static void PGM_BTH_NAME(SyncPageWorker)(PVMCPU pVCpu, PSHWPTE pPteDst, RTGCPHYS GCPhysPage,
+                                         PPGMPOOLPAGE pShwPage, unsigned iPTDst)
 #endif
 {
     PVM      pVM = pVCpu->CTX_SUFF(pVM);
@@ -1885,7 +1886,7 @@ static void PGM_BTH_NAME(SyncPageWorker)(PVMCPU pVCpu, PSHWPTE pPteDst, RTGCPHYS
  *
  * @returns VBox status code.
  * @returns VINF_PGM_SYNCPAGE_MODIFIED_PDE if it modifies the PDE in any way.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   PdeSrc      Page directory entry of the guest.
  * @param   GCPtrPage   Guest context page address.
  * @param   cPages      Number of pages to sync (PGM_SYNC_N_PAGES) (default=1).
@@ -2370,7 +2371,7 @@ static int PGM_BTH_NAME(SyncPage)(PVMCPU pVCpu, GSTPDE PdeSrc, RTGCPTR GCPtrPage
  * (NP) entry in the page translation structures.
  *
  * @returns VINF_EM_RAW_GUEST_TRAP.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   uErr            The error code of the shadow fault.  Corrections to
  *                          TRPM's copy will be made if necessary.
  * @param   GCPtrPage       For logging.
@@ -2394,7 +2395,7 @@ DECLINLINE(int) PGM_BTH_NAME(CheckPageFaultReturnNP)(PVMCPU pVCpu, uint32_t uErr
  * (RSVD) error in the page translation structures.
  *
  * @returns VINF_EM_RAW_GUEST_TRAP.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   uErr            The error code of the shadow fault.  Corrections to
  *                          TRPM's copy will be made if necessary.
  * @param   GCPtrPage       For logging.
@@ -2415,7 +2416,7 @@ DECLINLINE(int) PGM_BTH_NAME(CheckPageFaultReturnRSVD)(PVMCPU pVCpu, uint32_t uE
  * CheckPageFault helper for returning a page protection fault (P).
  *
  * @returns VINF_EM_RAW_GUEST_TRAP.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   uErr            The error code of the shadow fault.  Corrections to
  *                          TRPM's copy will be made if necessary.
  * @param   GCPtrPage       For logging.
@@ -2437,7 +2438,7 @@ DECLINLINE(int) PGM_BTH_NAME(CheckPageFaultReturnProt)(PVMCPU pVCpu, uint32_t uE
  * Handle dirty bit tracking faults.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   uErr        Page fault error code.
  * @param   pPdeSrc     Guest page directory entry.
  * @param   pPdeDst     Shadow page directory entry.
@@ -2626,8 +2627,8 @@ static int PGM_BTH_NAME(CheckDirtyPageFault)(PVMCPU pVCpu, uint32_t uErr, PSHWPD
  * when calling this method.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
- * @param   iPD         Page directory index.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   iPDSrc      Page directory index.
  * @param   pPDSrc      Source page directory (i.e. Guest OS page directory).
  *                      Assume this is a temporary mapping.
  * @param   GCPtrPage   GC Pointer of the page that caused the fault
@@ -3340,7 +3341,7 @@ static int PGM_BTH_NAME(SyncPT)(PVMCPU pVCpu, unsigned iPDSrc, PGSTPD pPDSrc, RT
  * after a CR3 reload.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtrPage   Page to invalidate.
  */
 PGM_BTH_DECL(int, PrefetchPage)(PVMCPU pVCpu, RTGCPTR GCPtrPage)
@@ -3480,7 +3481,7 @@ PGM_BTH_DECL(int, PrefetchPage)(PVMCPU pVCpu, RTGCPTR GCPtrPage)
  * Syncs a page during a PGMVerifyAccess() call.
  *
  * @returns VBox status code (informational included).
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtrPage   The address of the page to sync.
  * @param   fPage       The effective guest page flags.
  * @param   uErr        The trap error code.
@@ -3670,7 +3671,7 @@ PGM_BTH_DECL(int, VerifyAccessSyncPage)(PVMCPU pVCpu, RTGCPTR GCPtrPage, unsigne
  * Syncs the paging hierarchy starting at CR3.
  *
  * @returns VBox status code, no specials.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cr0         Guest context CR0 register.
  * @param   cr3         Guest context CR3 register. Not subjected to the A20
  *                      mask.
@@ -3761,8 +3762,7 @@ PGM_BTH_DECL(int, SyncCR3)(PVMCPU pVCpu, uint64_t cr0, uint64_t cr3, uint64_t cr
  * Checks that the shadow page table is in sync with the guest one.
  *
  * @returns The number of errors.
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cr3         Guest context CR3 register.
  * @param   cr4         Guest context CR4 register.
  * @param   GCPtr       Where to start. Defaults to 0.
@@ -4524,7 +4524,7 @@ PGM_BTH_DECL(unsigned, AssertCR3)(PVMCPU pVCpu, uint64_t cr3, uint64_t cr4, RTGC
  * @returns Strict VBox status code.
  * @retval  VINF_SUCCESS.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   GCPhysCR3       The physical address in the CR3 register.  (A20
  *                          mask already applied.)
  */
@@ -4755,7 +4755,7 @@ PGM_BTH_DECL(int, MapCR3)(PVMCPU pVCpu, RTGCPHYS GCPhysCR3)
  * Unmaps the shadow CR3.
  *
  * @returns VBox status, no specials.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 PGM_BTH_DECL(int, UnmapCR3)(PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMAll/PGMAllGst.h b/src/VBox/VMM/VMMAll/PGMAllGst.h
index d9a71fc..e7ad3bd 100644
--- a/src/VBox/VMM/VMMAll/PGMAllGst.h
+++ b/src/VBox/VMM/VMMAll/PGMAllGst.h
@@ -69,7 +69,7 @@ DECLINLINE(int) PGM_GST_NAME(WalkReturnRsvdError)(PVMCPU pVCpu, PGSTPTWALK pWalk
  * @retval  VINF_SUCCESS on success.
  * @retval  VERR_PAGE_TABLE_NOT_PRESENT on failure.  Check pWalk for details.
  *
- * @param   pVCpu       The current CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPtr       The guest virtual address to walk by.
  * @param   pWalk       Where to return the walk result. This is always set.
  */
@@ -252,8 +252,8 @@ static int PGM_GST_NAME(Walk)(PVMCPU pVCpu, RTGCPTR GCPtr, PGSTPTWALK pWalk)
  * necessary at a later point, a PGMGstGetPage Ex() will be created for that
  * purpose.
  *
- * @returns VBox status.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Guest Context virtual address of the page.
  * @param   pfFlags     Where to store the flags. These are X86_PTE_*, even for big pages.
  * @param   pGCPhys     Where to store the GC physical address of the page.
@@ -324,7 +324,7 @@ PGM_GST_DECL(int, GetPage)(PVMCPU pVCpu, RTGCPTR GCPtr, uint64_t *pfFlags, PRTGC
  * The existing flags are ANDed with the fMask and ORed with the fFlags.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Virtual address of the first page in the range. Page aligned!
  * @param   cb          Size (in bytes) of the page range to apply the modification to. Page aligned!
  * @param   fFlags      The OR  mask - page flags X86_PTE_*, excluding the page mask of course.
@@ -403,7 +403,7 @@ PGM_GST_DECL(int, ModifyPage)(PVMCPU pVCpu, RTGCPTR GCPtr, size_t cb, uint64_t f
  * Retrieve guest PDE information.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Guest context pointer.
  * @param   pPDE        Pointer to guest PDE structure.
  */
@@ -616,8 +616,7 @@ static DECLCALLBACK(int) PGM_GST_NAME(VirtHandlerUpdateOne)(PAVLROGCPTRNODECORE
  *
  * @returns true if bits were flushed.
  * @returns false if bits weren't flushed.
- * @param   pVM     Pointer to the VM.
- * @param   pPDSrc  The page directory.
+ * @param   pVM     The cross context VM structure.
  * @param   cr4     The cr4 register value.
  */
 PGM_GST_DECL(bool, HandlerVirtualUpdate)(PVM pVM, uint32_t cr4)
diff --git a/src/VBox/VMM/VMMAll/PGMAllHandler.cpp b/src/VBox/VMM/VMMAll/PGMAllHandler.cpp
index 6f67df6..adc11c0 100644
--- a/src/VBox/VMM/VMMAll/PGMAllHandler.cpp
+++ b/src/VBox/VMM/VMMAll/PGMAllHandler.cpp
@@ -58,7 +58,7 @@ static void pgmHandlerPhysicalResetRamFlags(PVM pVM, PPGMPHYSHANDLER pCur);
  * Internal worker for releasing a physical handler type registration reference.
  *
  * @returns New reference count. UINT32_MAX if invalid input (asserted).
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   pType       Pointer to the type registration.
  */
 DECLINLINE(uint32_t) pgmHandlerPhysicalTypeRelease(PVM pVM, PPGMPHYSHANDLERTYPEINT pType)
@@ -81,7 +81,7 @@ DECLINLINE(uint32_t) pgmHandlerPhysicalTypeRelease(PVM pVM, PPGMPHYSHANDLERTYPEI
  * Internal worker for retaining a physical handler type registration reference.
  *
  * @returns New reference count. UINT32_MAX if invalid input (asserted).
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   pType       Pointer to the type registration.
  */
 DECLINLINE(uint32_t) pgmHandlerPhysicalTypeRetain(PVM pVM, PPGMPHYSHANDLERTYPEINT pType)
@@ -97,7 +97,7 @@ DECLINLINE(uint32_t) pgmHandlerPhysicalTypeRetain(PVM pVM, PPGMPHYSHANDLERTYPEIN
  * Releases a reference to a physical handler type registration.
  *
  * @returns New reference count. UINT32_MAX if invalid input (asserted).
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   hType       The type regiration handle.
  */
 VMMDECL(uint32_t) PGMHandlerPhysicalTypeRelease(PVM pVM, PGMPHYSHANDLERTYPE hType)
@@ -112,7 +112,7 @@ VMMDECL(uint32_t) PGMHandlerPhysicalTypeRelease(PVM pVM, PGMPHYSHANDLERTYPE hTyp
  * Retains a reference to a physical handler type registration.
  *
  * @returns New reference count. UINT32_MAX if invalid input (asserted).
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   hType       The type regiration handle.
  */
 VMMDECL(uint32_t) PGMHandlerPhysicalTypeRetain(PVM pVM, PGMPHYSHANDLERTYPE hType)
@@ -133,7 +133,7 @@ VMMDECL(uint32_t) PGMHandlerPhysicalTypeRetain(PVM pVM, PGMPHYSHANDLERTYPE hType
  * @retval  VERR_PGM_HANDLER_PHYSICAL_CONFLICT if the range conflicts with an existing
  *          one. A debug assertion is raised.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Start physical address.
  * @param   GCPhysLast      Last physical address. (inclusive)
  * @param   hType           The handler type registration handle.
@@ -259,7 +259,7 @@ VMMDECL(int) PGMHandlerPhysicalRegister(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS GCPhy
  * @retval  VINF_SUCCESS when shadow PTs was successfully updated.
  * @retval  VINF_PGM_SYNC_CR3 when the shadow PTs could be updated because
  *          the guest page aliased or/and mapped by multiple PTs. FFs set.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pCur    The physical handler.
  * @param   pRam    The RAM range.
  */
@@ -314,7 +314,7 @@ static int pgmHandlerPhysicalSetRamFlagsAndFlushShadowPTs(PVM pVM, PPGMPHYSHANDL
  * Register a physical page access handler.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      Start physical address.
  */
 VMMDECL(int)  PGMHandlerPhysicalDeregister(PVM pVM, RTGCPHYS GCPhys)
@@ -479,7 +479,7 @@ DECLINLINE(void) pgmHandlerPhysicalRecalcPageState(PVM pVM, RTGCPHYS GCPhys, boo
 /**
  * Resets an aliased page.
  *
- * @param   pVM             The VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPage           The page.
  * @param   GCPhysPage      The page address in case it comes in handy.
  * @param   fDoAccounting   Whether to perform accounting.  (Only set during
@@ -539,7 +539,7 @@ void pgmHandlerPhysicalResetAliasedPage(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys
  *
  * @returns VBox status code.
  * @retval  VINF_SUCCESS when shadow PTs was successfully updated.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pCur    The physical handler.
  *
  * @remark  We don't start messing with the shadow page tables, as we've
@@ -605,7 +605,7 @@ static void pgmHandlerPhysicalResetRamFlags(PVM pVM, PPGMPHYSHANDLER pCur)
  * @returns VBox status code.
  *          For all return codes other than VERR_PGM_HANDLER_NOT_FOUND and VINF_SUCCESS the range is deregistered
  *          and a new registration must be performed!
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhysCurrent   Current location.
  * @param   GCPhys          New location.
  * @param   GCPhysLast      New last location.
@@ -715,7 +715,7 @@ VMMDECL(int) PGMHandlerPhysicalModify(PVM pVM, RTGCPHYS GCPhysCurrent, RTGCPHYS
  * handler.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Start physical address of the handler.
  * @param   pvUserR3        User argument to the R3 handler.
  * @param   pvUserR0        User argument to the R0 handler.
@@ -754,7 +754,7 @@ VMMDECL(int) PGMHandlerPhysicalChangeUserArgs(PVM pVM, RTGCPHYS GCPhys, RTR3PTR
  * Splits a physical access handler in two.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Start physical address of the handler.
  * @param   GCPhysSplit     The split address.
  */
@@ -820,7 +820,7 @@ VMMDECL(int) PGMHandlerPhysicalSplit(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS GCPhysSp
  * Joins up two adjacent physical access handlers which has the same callbacks.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys1         Start physical address of the first handler.
  * @param   GCPhys2         Start physical address of the second handler.
  */
@@ -901,7 +901,7 @@ VMMDECL(int) PGMHandlerPhysicalJoin(PVM pVM, RTGCPHYS GCPhys1, RTGCPHYS GCPhys2)
  * PGMHandlerPhysicalPageAlias() or PGMHandlerPhysicalPageAliasHC().
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The start address of the handler regions, i.e. what you
  *                      passed to PGMR3HandlerPhysicalRegister(),
  *                      PGMHandlerPhysicalRegisterEx() or
@@ -929,7 +929,7 @@ VMMDECL(int) PGMHandlerPhysicalReset(PVM pVM, RTGCPHYS GCPhys)
             case PGMPHYSHANDLERKIND_ALL:
             case PGMPHYSHANDLERKIND_MMIO: /* NOTE: Only use when clearing MMIO ranges with aliased MMIO2 pages! */
             {
-                STAM_COUNTER_INC(&pVM->pgm.s.CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysHandlerReset)); /**@Todo move out of switch */
+                STAM_COUNTER_INC(&pVM->pgm.s.CTX_SUFF(pStats)->CTX_MID_Z(Stat,PhysHandlerReset)); /** @todo move out of switch */
                 PPGMRAMRANGE pRam = pgmPhysGetRange(pVM, GCPhys);
                 Assert(pRam);
                 Assert(pRam->GCPhys     <= pCur->Core.Key);
@@ -1012,7 +1012,7 @@ VMMDECL(int) PGMHandlerPhysicalReset(PVM pVM, RTGCPHYS GCPhys)
  * The caller must do required page table modifications.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM
+ * @param   pVM                 The cross context VM structure.
  * @param   GCPhys              The start address of the access handler. This
  *                              must be a fully page aligned range or we risk
  *                              messing up other handlers installed for the
@@ -1089,7 +1089,7 @@ VMMDECL(int)  PGMHandlerPhysicalPageTempOff(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS G
  * save the change).
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   GCPhys              The start address of the access handler. This
  *                              must be a fully page aligned range or we risk
  *                              messing up other handlers installed for the
@@ -1214,7 +1214,7 @@ VMMDECL(int)  PGMHandlerPhysicalPageAlias(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS GCP
  *
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   GCPhys              The start address of the access handler. This
  *                              must be a fully page aligned range or we risk
  *                              messing up other handlers installed for the
@@ -1301,7 +1301,7 @@ VMMDECL(int)  PGMHandlerPhysicalPageAliasHC(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS G
  * Checks if a physical range is handled
  *
  * @returns boolean
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      Start physical address earlier passed to PGMR3HandlerPhysicalRegister().
  * @remarks Caller must take the PGM lock...
  * @thread  EMT.
@@ -1336,7 +1336,7 @@ VMMDECL(bool) PGMHandlerPhysicalIsRegistered(PVM pVM, RTGCPHYS GCPhys)
  *
  * @returns true if it's an all access handler, false if it's a write access
  *          handler.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The address of the page with a disabled handler.
  *
  * @remarks The caller, PGMR3PhysTlbGCPhys2Ptr, must hold the PGM lock.
@@ -1371,7 +1371,7 @@ bool pgmHandlerPhysicalIsAll(PVM pVM, RTGCPHYS GCPhys)
  * Internal worker for releasing a virtual handler type registration reference.
  *
  * @returns New reference count. UINT32_MAX if invalid input (asserted).
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   pType       Pointer to the type registration.
  */
 DECLINLINE(uint32_t) pgmHandlerVirtualTypeRelease(PVM pVM, PPGMVIRTHANDLERTYPEINT pType)
@@ -1394,7 +1394,7 @@ DECLINLINE(uint32_t) pgmHandlerVirtualTypeRelease(PVM pVM, PPGMVIRTHANDLERTYPEIN
  * Internal worker for retaining a virtual handler type registration reference.
  *
  * @returns New reference count. UINT32_MAX if invalid input (asserted).
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   pType       Pointer to the type registration.
  */
 DECLINLINE(uint32_t) pgmHandlerVirtualTypeRetain(PVM pVM, PPGMVIRTHANDLERTYPEINT pType)
@@ -1410,7 +1410,7 @@ DECLINLINE(uint32_t) pgmHandlerVirtualTypeRetain(PVM pVM, PPGMVIRTHANDLERTYPEINT
  * Releases a reference to a virtual handler type registration.
  *
  * @returns New reference count. UINT32_MAX if invalid input (asserted).
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   hType       The type regiration handle.
  */
 VMM_INT_DECL(uint32_t) PGMHandlerVirtualTypeRelease(PVM pVM, PGMVIRTHANDLERTYPE hType)
@@ -1425,7 +1425,7 @@ VMM_INT_DECL(uint32_t) PGMHandlerVirtualTypeRelease(PVM pVM, PGMVIRTHANDLERTYPE
  * Retains a reference to a virtual handler type registration.
  *
  * @returns New reference count. UINT32_MAX if invalid input (asserted).
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   hType       The type regiration handle.
  */
 VMM_INT_DECL(uint32_t) PGMHandlerVirtualTypeRetain(PVM pVM, PGMVIRTHANDLERTYPE hType)
@@ -1438,7 +1438,7 @@ VMM_INT_DECL(uint32_t) PGMHandlerVirtualTypeRetain(PVM pVM, PGMVIRTHANDLERTYPE h
  * Check if particular guest's VA is being monitored.
  *
  * @returns true or false
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPtr           Virtual address.
  * @remarks Will acquire the PGM lock.
  * @thread  Any.
@@ -1457,7 +1457,7 @@ VMM_INT_DECL(bool) PGMHandlerVirtualIsRegistered(PVM pVM, RTGCPTR GCPtr)
  * Search for virtual handler with matching physical address
  *
  * @returns Pointer to the virtual handler structure if found, otherwise NULL.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      GC physical address to search for.
  * @param   piPage      Where to store the pointer to the index of the cached physical page.
  */
@@ -1495,7 +1495,7 @@ PPGMVIRTHANDLER pgmHandlerVirtualFindByPhysAddr(PVM pVM, RTGCPHYS GCPhys, unsign
  * As pointed out by the various todos, this currently only deals with
  * aliases where the two ranges match 100%.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPhys2Virt      The node we failed insert.
  */
 static void pgmHandlerVirtualInsertAliased(PVM pVM, PPGMPHYS2VIRTHANDLER pPhys2Virt)
@@ -1636,7 +1636,7 @@ static DECLCALLBACK(int) pgmHandlerVirtualDumpPhysPagesCallback(PAVLROGCPHYSNODE
  * Assertion / logging helper for dumping all the
  * virtual handlers to the log.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 void pgmHandlerVirtualDumpPhysPages(PVM pVM)
 {
@@ -1814,7 +1814,7 @@ static DECLCALLBACK(int) pgmHandlerVirtualVerifyOne(PAVLROGCPTRNODECORE pNode, v
  * that the physical addresses associated with virtual handlers are correct.
  *
  * @returns Number of mismatches.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(unsigned) PGMAssertHandlerAndFlagsInSync(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMAll/PGMAllMap.cpp b/src/VBox/VMM/VMMAll/PGMAllMap.cpp
index 766c8e8..39b0b2a 100644
--- a/src/VBox/VMM/VMMAll/PGMAllMap.cpp
+++ b/src/VBox/VMM/VMMAll/PGMAllMap.cpp
@@ -37,7 +37,7 @@
  * The GC virtual address range must be within an existing mapping.
  *
  * @returns VBox status code.
- * @param   pVM         The virtual machine.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       Where to map the page(s). Must be page aligned.
  * @param   HCPhys      Start of the range of physical pages. Must be page aligned.
  * @param   cbPages     Number of bytes to map. Must be page aligned.
@@ -116,8 +116,8 @@ VMMDECL(int) PGMMap(PVM pVM, RTGCUINTPTR GCPtr, RTHCPHYS HCPhys, uint32_t cbPage
 /**
  * Sets (replaces) the page flags for a range of pages in a mapping.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       Virtual address of the first page in the range.
  * @param   cb          Size (in bytes) of the range to apply the modification to.
  * @param   fFlags      Page flags X86_PTE_*, excluding the page mask of course.
@@ -134,7 +134,7 @@ VMMDECL(int) PGMMapSetPage(PVM pVM, RTGCPTR GCPtr, uint64_t cb, uint64_t fFlags)
  * The existing flags are ANDed with the fMask and ORed with the fFlags.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       Virtual address of the first page in the range.
  * @param   cb          Size (in bytes) of the range to apply the modification to.
  * @param   fFlags      The OR  mask - page flags X86_PTE_*, excluding the page mask of course.
@@ -217,7 +217,7 @@ VMMDECL(int)  PGMMapModifyPage(PVM pVM, RTGCPTR GCPtr, size_t cb, uint64_t fFlag
  * the page table to calculate the flags.
  *
  * @returns VINF_SUCCESS, VERR_PAGE_NOT_PRESENT or VERR_NOT_FOUND.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   GCPtr               The page address.
  * @param   pfFlags             Where to return the flags.  Optional.
  * @param   pHCPhys             Where to return the address.  Optional.
@@ -266,7 +266,7 @@ VMMDECL(int) PGMMapGetPage(PVM pVM, RTGCPTR GCPtr, uint64_t *pfFlags, PRTHCPHYS
  *
  * Ignored if mappings are disabled (i.e. if HM is enabled).
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pMap        Pointer to the mapping in question.
  * @param   iNewPDE     The index of the 32-bit PDE corresponding to the base of the mapping.
  */
@@ -419,7 +419,7 @@ void pgmMapSetShadowPDEs(PVM pVM, PPGMMAPPING pMap, unsigned iNewPDE)
  *
  * Ignored if mappings are disabled (i.e. if HM is enabled).
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pShwPageCR3     CR3 root page
  * @param   pMap            Pointer to the mapping in question.
  * @param   iOldPDE         The index of the 32-bit PDE corresponding to the base of the mapping.
@@ -549,8 +549,8 @@ void pgmMapClearShadowPDEs(PVM pVM, PPGMPOOLPAGE pShwPageCR3, PPGMMAPPING pMap,
 /**
  * Clears all PDEs involved with the mapping in the shadow page table.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pShwPageCR3 CR3 root page
  * @param   pMap        Pointer to the mapping in question.
  * @param   iPDE        The index of the 32-bit PDE corresponding to the base of the mapping.
@@ -628,7 +628,7 @@ static void pgmMapCheckShadowPDEs(PVM pVM, PVMCPU pVCpu, PPGMPOOLPAGE pShwPageCR
  *
  * Ignored if mappings are disabled (i.e. if HM is enabled).
  *
- * @param   pVM         The virtual machine.
+ * @param   pVM         The cross context VM structure.
  */
 VMMDECL(void) PGMMapCheck(PVM pVM)
 {
@@ -663,8 +663,8 @@ VMMDECL(void) PGMMapCheck(PVM pVM)
  *
  * Ignored if mappings are disabled (i.e. if HM is enabled).
  *
- * @returns VBox status.
- * @param   pVM         The virtual machine.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pShwPageCR3 CR3 root page
  */
 int pgmMapActivateCR3(PVM pVM, PPGMPOOLPAGE pShwPageCR3)
@@ -701,8 +701,8 @@ int pgmMapActivateCR3(PVM pVM, PPGMPOOLPAGE pShwPageCR3)
  *
  * Ignored if mappings are disabled (i.e. if HM is enabled).
  *
- * @returns VBox status.
- * @param   pVM         The virtual machine.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pShwPageCR3 CR3 root page
  */
 int pgmMapDeactivateCR3(PVM pVM, PPGMPOOLPAGE pShwPageCR3)
@@ -733,7 +733,7 @@ int pgmMapDeactivateCR3(PVM pVM, PPGMPOOLPAGE pShwPageCR3)
  *
  * @returns true if conflict detected.
  * @returns false if not.
- * @param   pVM                 The virtual machine.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMDECL(bool) PGMMapHasConflicts(PVM pVM)
 {
@@ -827,8 +827,8 @@ VMMDECL(bool) PGMMapHasConflicts(PVM pVM)
 /**
  * Checks and resolves (ring 3 only) guest conflicts with the guest mappings.
  *
- * @returns VBox status.
- * @param   pVM                 The virtual machine.
+ * @returns VBox status code.
+ * @param   pVM                 The cross context VM structure.
  */
 int pgmMapResolveConflicts(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMAll/PGMAllPhys.cpp b/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
index 0036af4..c543a6a 100644
--- a/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
+++ b/src/VBox/VMM/VMMAll/PGMAllPhys.cpp
@@ -333,7 +333,7 @@ pgmPhysRomWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, void *pvPhys, voi
 /**
  * Invalidates the RAM range TLBs.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 void pgmPhysInvalidRamRangeTlbs(PVM pVM)
 {
@@ -514,7 +514,7 @@ int pgmPhysGetPageAndRangeExSlow(PVM pVM, RTGCPHYS GCPhys, PPPGMPAGE ppPage, PPG
  *
  * @returns true if enabled.
  * @returns false if disabled.
- * @param   pVCpu    Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 VMMDECL(bool) PGMPhysIsA20Enabled(PVMCPU pVCpu)
 {
@@ -528,7 +528,7 @@ VMMDECL(bool) PGMPhysIsA20Enabled(PVMCPU pVCpu)
  *
  * @returns true if valid.
  * @returns false if invalid.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   GCPhys  The physical address to validate.
  */
 VMMDECL(bool) PGMPhysIsGCPhysValid(PVM pVM, RTGCPHYS GCPhys)
@@ -544,7 +544,7 @@ VMMDECL(bool) PGMPhysIsGCPhysValid(PVM pVM, RTGCPHYS GCPhys)
  *
  * @returns true if normal.
  * @returns false if invalid, ROM, MMIO or reserved page.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   GCPhys  The physical address to check.
  */
 VMMDECL(bool) PGMPhysIsGCPhysNormal(PVM pVM, RTGCPHYS GCPhys)
@@ -564,7 +564,7 @@ VMMDECL(bool) PGMPhysIsGCPhysNormal(PVM pVM, RTGCPHYS GCPhys)
  * @returns VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid
  *          GC physical address.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   GCPhys  The GC physical address to convert.
  * @param   pHCPhys Where to store the HC physical address on success.
  */
@@ -583,7 +583,7 @@ VMM_INT_DECL(int) PGMPhysGCPhys2HCPhys(PVM pVM, RTGCPHYS GCPhys, PRTHCPHYS pHCPh
 /**
  * Invalidates all page mapping TLBs.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 void pgmPhysInvalidatePageMapTLB(PVM pVM)
 {
@@ -608,7 +608,7 @@ void pgmPhysInvalidatePageMapTLB(PVM pVM)
 /**
  * Invalidates a page mapping TLB entry
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   GCPhys  GCPhys entry to flush
  */
 void pgmPhysInvalidatePageMapTLBEntry(PVM pVM, RTGCPHYS GCPhys)
@@ -644,7 +644,7 @@ void pgmPhysInvalidatePageMapTLBEntry(PVM pVM, RTGCPHYS GCPhys)
  * @retval  VINF_SUCCESS on success.
  * @retval  VERR_EM_NO_MEMORY if we're really out of memory.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  *
  * @remarks Must be called from within the PGM critical section. It may
  *          nip back to ring-3/0 in some cases.
@@ -731,7 +731,7 @@ static int pgmPhysEnsureHandyPage(PVM pVM)
  *
  * @todo    Propagate VERR_EM_NO_MEMORY up the call tree.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The physical page tracking structure. This will
  *                      be modified on success.
  * @param   GCPhys      The address of the page.
@@ -887,7 +887,7 @@ int pgmPhysAllocPage(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys)
  *
  * @todo    Propagate VERR_EM_NO_MEMORY up the call tree.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The address of the page.
  *
  * @remarks Must be called from within the PGM critical section. It may
@@ -976,7 +976,7 @@ int pgmPhysAllocLargePage(PVM pVM, RTGCPHYS GCPhys)
  * @retval  VINF_SUCCESS on success, the large page can be used again
  * @retval  VERR_PGM_INVALID_LARGE_PAGE_RANGE if it can't be reused
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The address of the page.
  * @param   pLargePage  Page structure of the base page
  */
@@ -1037,7 +1037,7 @@ int pgmPhysRecheckLargePage(PVM pVM, RTGCPHYS GCPhys, PPGMPAGE pLargePage)
  *
  * @returns VBox strict status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The physical page tracking structure.
  *
  * @remarks Called from within the PGM critical section.
@@ -1061,7 +1061,7 @@ void pgmPhysPageMakeWriteMonitoredWritable(PVM pVM, PPGMPAGE pPage)
  * @retval  VINF_PGM_SYNC_CR3 on success and a page pool flush is pending.
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The physical page tracking structure.
  * @param   GCPhys      The address of the page.
  *
@@ -1105,7 +1105,7 @@ int pgmPhysPageMakeWritable(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys)
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idPage      The Page ID.
  * @param   HCPhys      The physical address (for RC).
  * @param   ppv         Where to store the mapping address.
@@ -1184,7 +1184,7 @@ int pgmPhysPageMapByPageID(PVM pVM, uint32_t idPage, RTHCPHYS HCPhys, void **ppv
  * @retval  VINF_SUCCESS on success.
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The physical page tracking structure.
  * @param   GCPhys      The address of the page.
  * @param   ppMap       Where to store the address of the mapping tracking structure.
@@ -1325,7 +1325,7 @@ static int pgmPhysPageMapCommon(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, PPPGMP
  * @retval  VINF_PGM_SYNC_CR3 on success and a page pool flush is pending.
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The physical page tracking structure.
  * @param   GCPhys      The address of the page.
  * @param   ppv         Where to store the mapping address of the page. The page
@@ -1360,7 +1360,7 @@ int pgmPhysPageMakeWritableAndMap(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, void
  * @retval  VINF_SUCCESS on success.
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The physical page tracking structure. Must be in the
  *                      allocated state.
  * @param   GCPhys      The address of the page.
@@ -1389,7 +1389,7 @@ int pgmPhysPageMap(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, void **ppv)
  * @retval  VINF_SUCCESS on success.
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The physical page tracking structure.
  * @param   GCPhys      The address of the page.
  * @param   ppv         Where to store the mapping address of the page. The page
@@ -1441,7 +1441,7 @@ int pgmPhysPageLoadIntoTlb(PVM pVM, RTGCPHYS GCPhys)
  * @retval  VINF_SUCCESS on success
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       Pointer to the PGMPAGE structure corresponding to
  *                      GCPhys.
  * @param   GCPhys      The guest physical address in question.
@@ -1498,7 +1498,7 @@ int pgmPhysPageLoadIntoTlbWithPage(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys)
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The guest physical address of the page that should be mapped.
  * @param   pPage       Pointer to the PGMPAGE structure for the page.
  * @param   ppv         Where to store the address corresponding to GCPhys.
@@ -1552,7 +1552,7 @@ int pgmPhysGCPhys2CCPtrInternalDepr(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, vo
 /**
  * Locks a page mapping for writing.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pPage               The page.
  * @param   pTlbe               The mapping TLB entry for the page.
  * @param   pLock               The lock structure (output).
@@ -1585,7 +1585,7 @@ DECLINLINE(void) pgmPhysPageMapLockForWriting(PVM pVM, PPGMPAGE pPage, PPGMPAGEM
 /**
  * Locks a page mapping for reading.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pPage               The page.
  * @param   pTlbe               The mapping TLB entry for the page.
  * @param   pLock               The lock structure (output).
@@ -1627,7 +1627,7 @@ DECLINLINE(void) pgmPhysPageMapLockForReading(PVM pVM, PPGMPAGE pPage, PPGMPAGEM
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The guest physical address of the page that should be mapped.
  * @param   pPage       Pointer to the PGMPAGE structure for the page.
  * @param   ppv         Where to store the address corresponding to GCPhys.
@@ -1691,7 +1691,7 @@ int pgmPhysGCPhys2CCPtrInternal(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys, void *
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The guest physical address of the page that should be mapped.
  * @param   pPage       Pointer to the PGMPAGE structure for the page.
  * @param   ppv         Where to store the address corresponding to GCPhys.
@@ -1750,7 +1750,7 @@ int pgmPhysGCPhys2CCPtrInternalReadOnly(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The guest physical address of the page that should be
  *                      mapped.
  * @param   ppv         Where to store the address corresponding to GCPhys.
@@ -1854,7 +1854,7 @@ VMM_INT_DECL(int) PGMPhysGCPhys2CCPtr(PVM pVM, RTGCPHYS GCPhys, void **ppv, PPGM
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The guest physical address of the page that should be
  *                      mapped.
  * @param   ppv         Where to store the address corresponding to GCPhys.
@@ -1951,8 +1951,9 @@ VMM_INT_DECL(int) PGMPhysGCPhys2CCPtrReadOnly(PVM pVM, RTGCPHYS GCPhys, void con
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVCpu       Pointer to the VMCPU.
- * @param   GCPhys      The guest physical address of the page that should be mapped.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   GCPtr       The guest physical address of the page that should be
+ *                      mapped.
  * @param   ppv         Where to store the address corresponding to GCPhys.
  * @param   pLock       Where to store the lock information that PGMPhysReleasePageMappingLock needs.
  *
@@ -1985,7 +1986,7 @@ VMM_INT_DECL(int) PGMPhysGCPtr2CCPtr(PVMCPU pVCpu, RTGCPTR GCPtr, void **ppv, PP
  * @retval  VERR_PGM_PHYS_PAGE_RESERVED it it's a valid page but has no physical backing.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The guest physical address of the page that should be
  *                      mapped.
  * @param   ppv         Where to store the address corresponding to GCPtr.
@@ -2012,7 +2013,7 @@ VMM_INT_DECL(int) PGMPhysGCPtr2CCPtrReadOnly(PVMCPU pVCpu, RTGCPTR GCPtr, void c
  * This is the counter part of PGMPhysGCPhys2CCPtr, PGMPhysGCPhys2CCPtrReadOnly
  * PGMPhysGCPtr2CCPtr and PGMPhysGCPtr2CCPtrReadOnly.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pLock       The lock structure initialized by the mapping function.
  */
 VMMDECL(void) PGMPhysReleasePageMappingLock(PVM pVM, PPGMPAGEMAPLOCK pLock)
@@ -2087,7 +2088,7 @@ VMMDECL(void) PGMPhysReleasePageMappingLock(PVM pVM, PPGMPAGEMAPLOCK pLock)
  * This is the counter part of pgmPhysGCPhys2CCPtrInternalEx and
  * pgmPhysGCPhys2CCPtrInternalReadOnly.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pLock       The lock structure initialized by the mapping function.
  *
  * @remarks Caller must hold the PGM lock.
@@ -2110,7 +2111,7 @@ void pgmPhysReleaseInternalPageMappingLock(PVM pVM, PPGMPAGEMAPLOCK pLock)
  * @returns VERR_PGM_GCPHYS_RANGE_CROSSES_BOUNDARY if the range crosses
  *          a dynamic ram chunk boundary
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address to convert.
  * @param   pR3Ptr      Where to store the R3 pointer on success.
  *
@@ -2155,7 +2156,7 @@ int pgmPhysGCPhys2R3Ptr(PVM pVM, RTGCPHYS GCPhys, PRTR3PTR pR3Ptr)
  * @returns VERR_PGM_GCPHYS_RANGE_CROSSES_BOUNDARY if the range crosses
  *          a dynamic ram chunk boundary
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address to convert.
  * @param   pR3Ptr      Where to store the R3 pointer on success.  This may or
  *                      may not be valid in ring-0 depending on the
@@ -2189,7 +2190,7 @@ int pgmPhysCr3ToHCPtr(PVM pVM, RTGCPHYS GCPhys, PRTR3PTR pR3Ptr)
  * This uses the current CR3/CR0/CR4 of the guest.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The guest pointer to convert.
  * @param   pGCPhys     Where to store the GC physical address.
  */
@@ -2208,7 +2209,7 @@ VMMDECL(int) PGMPhysGCPtr2GCPhys(PVMCPU pVCpu, RTGCPTR GCPtr, PRTGCPHYS pGCPhys)
  * This uses the current CR3/CR0/CR4 of the guest.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The guest pointer to convert.
  * @param   pHCPhys     Where to store the HC physical address.
  */
@@ -2232,7 +2233,7 @@ VMM_INT_DECL(int) PGMPhysGCPtr2HCPhys(PVMCPU pVCpu, RTGCPTR GCPtr, PRTHCPHYS pHC
 /**
  * Cache PGMPhys memory access
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pCache          Cache structure pointer
  * @param   GCPhys          GC physical address
  * @param   pbHC            HC pointer corresponding to physical page
@@ -2265,7 +2266,7 @@ static void pgmPhysCacheAdd(PVM pVM, PGMPHYSCACHE *pCache, RTGCPHYS GCPhys, uint
  *          See PGM_HANDLER_PHYS_IS_VALID_STATUS and
  *          PGM_HANDLER_VIRT_IS_VALID_STATUS for details.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The page descriptor.
  * @param   GCPhys      The physical address to start reading at.
  * @param   pvBuf       Where to put the bits we read.
@@ -2447,7 +2448,7 @@ static VBOXSTRICTRC pgmPhysReadHandler(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys,
  * @retval  VERR_PGM_PHYS_WR_HIT_HANDLER in RC and R0 for access origins that
  *          haven't been cleared for strict status codes yet.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Physical address start reading from.
  * @param   pvBuf           Where to put the read bits.
  * @param   cbRead          How many bytes to read.
@@ -2574,7 +2575,7 @@ VMMDECL(VBOXSTRICTRC) PGMPhysRead(PVM pVM, RTGCPHYS GCPhys, void *pvBuf, size_t
  *          See PGM_HANDLER_PHYS_IS_VALID_STATUS and
  *          PGM_HANDLER_VIRT_IS_VALID_STATUS for details.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The page descriptor.
  * @param   GCPhys      The physical address to start writing at.
  * @param   pvBuf       What to write.
@@ -3075,7 +3076,7 @@ static VBOXSTRICTRC pgmPhysWriteHandler(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhys
  *          haven't been cleared for strict status codes yet.
  *
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Physical address to write to.
  * @param   pvBuf           What to write.
  * @param   cbWrite         How many bytes to write.
@@ -3192,8 +3193,8 @@ VMMDECL(VBOXSTRICTRC) PGMPhysWrite(PVM pVM, RTGCPHYS GCPhys, const void *pvBuf,
  * Read from guest physical memory by GC physical address, bypassing
  * MMIO and access handlers.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pvDst       The destination address.
  * @param   GCPhysSrc   The source address (GC physical address).
  * @param   cb          The number of bytes to read.
@@ -3264,8 +3265,8 @@ VMMDECL(int) PGMPhysSimpleReadGCPhys(PVM pVM, void *pvDst, RTGCPHYS GCPhysSrc, s
  *
  * This will bypass MMIO and access handlers.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhysDst   The GC physical address of the destination.
  * @param   pvSrc       The source buffer.
  * @param   cb          The number of bytes to write.
@@ -3338,8 +3339,8 @@ VMMDECL(int) PGMPhysSimpleWriteGCPhys(PVM pVM, RTGCPHYS GCPhysDst, const void *p
  * This function uses the current CR3/CR0/CR4 of the guest and will
  * bypass access handlers and not set any accessed bits.
  *
- * @returns VBox status.
- * @param   pVCpu       Handle to the current virtual CPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pvDst       The destination address.
  * @param   GCPtrSrc    The source address (GC pointer).
  * @param   cb          The number of bytes to read.
@@ -3429,8 +3430,8 @@ VMMDECL(int) PGMPhysSimpleReadGCPtr(PVMCPU pVCpu, void *pvDst, RTGCPTR GCPtrSrc,
  * This function uses the current CR3/CR0/CR4 of the guest and will
  * bypass access handlers and not set dirty or accessed bits.
  *
- * @returns VBox status.
- * @param   pVCpu       Handle to the current virtual CPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPtrDst    The destination address (GC pointer).
  * @param   pvSrc       The source address.
  * @param   cb          The number of bytes to write.
@@ -3509,8 +3510,8 @@ VMMDECL(int) PGMPhysSimpleWriteGCPtr(PVMCPU pVCpu, RTGCPTR GCPtrDst, const void
  *
  * If you don't want to set the dirty bit, use PGMPhysSimpleWriteGCPtr().
  *
- * @returns VBox status.
- * @param   pVCpu       Handle to the current virtual CPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPtrDst    The destination address (GC pointer).
  * @param   pvSrc       The source address.
  * @param   cb          The number of bytes to write.
@@ -3593,7 +3594,7 @@ VMMDECL(int) PGMPhysSimpleDirtyWriteGCPtr(PVMCPU pVCpu, RTGCPTR GCPtrDst, const
  * @retval  VERR_PAGE_TABLE_NOT_PRESENT if there is no page mapped at the
  *          specified virtual address.
  *
- * @param   pVCpu       Handle to the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pvDst       The destination address.
  * @param   GCPtrSrc    The source address (GC pointer).
  * @param   cb          The number of bytes to read.
@@ -3685,7 +3686,7 @@ VMMDECL(VBOXSTRICTRC) PGMPhysReadGCPtr(PVMCPU pVCpu, void *pvDst, RTGCPTR GCPtrS
  * @retval  VERR_PAGE_TABLE_NOT_PRESENT if there is no page mapped at the
  *          specified virtual address.
  *
- * @param   pVCpu       Handle to the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPtrDst    The destination address (GC pointer).
  * @param   pvSrc       The source address.
  * @param   cb          The number of bytes to write.
@@ -3788,7 +3789,7 @@ VMMDECL(VBOXSTRICTRC) PGMPhysWriteGCPtr(PVMCPU pVCpu, RTGCPTR GCPtrDst, const vo
  * @retval  VINF_EM_RAW_GUEST_TRAP if an exception was raised but not dispatched yet.
  * @retval  VINF_TRPM_XCPT_DISPATCHED if an exception was raised and dispatched.
  *
- * @param   pVCpu       Handle to the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtxCore    The context core.
  * @param   pvDst       Where to put the bytes we've read.
  * @param   GCPtrSrc    The source address.
@@ -3962,7 +3963,7 @@ VMMDECL(int) PGMPhysInterpretedRead(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, void *p
  * @retval  VINF_EM_RAW_GUEST_TRAP if an exception was raised but not dispatched yet.
  * @retval  VINF_TRPM_XCPT_DISPATCHED if an exception was raised and dispatched.
  *
- * @param   pVCpu       Handle to the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtxCore    The context core.
  * @param   pvDst       Where to put the bytes we've read.
  * @param   GCPtrSrc    The source address.
@@ -4156,7 +4157,7 @@ VMMDECL(int) PGMPhysInterpretedReadNoHandlers(PVMCPU pVCpu, PCPUMCTXCORE pCtxCor
  * @retval  VINF_EM_RAW_GUEST_TRAP if an exception was raised but not dispatched yet.
  * @retval  VINF_TRPM_XCPT_DISPATCHED if an exception was raised and dispatched.
  *
- * @param   pVCpu       Handle to the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtxCore    The context core.
  * @param   GCPtrDst    The destination address.
  * @param   pvSrc       What to write.
@@ -4357,7 +4358,7 @@ VMMDECL(int) PGMPhysInterpretedWriteNoHandlers(PVMCPU pVCpu, PCPUMCTXCORE pCtxCo
  * Return the page type of the specified physical address.
  *
  * @returns The page type.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Guest physical address
  */
 VMM_INT_DECL(PGMPAGETYPE) PGMPhysGetPageType(PVM pVM, RTGCPHYS GCPhys)
@@ -4385,14 +4386,15 @@ VMM_INT_DECL(PGMPAGETYPE) PGMPhysGetPageType(PVM pVM, RTGCPHYS GCPhys)
  *          accesses or is odd in any way.
  * @retval  VERR_PGM_PHYS_TLB_UNASSIGNED if the page doesn't exist.
  *
- * @param   pVM         Pointer to the cross context VM structure.
- * @param   pVCpu       Pointer to the cross context virtual CPU structure of
- *                      the calling EMT.
- * @param   GCPhys      The GC physical address to convert.  This API mask the
- *                      A20 line when necessary.
- * @param   fWritable   Whether write access is required.
- * @param   ppv         Where to store the pointer corresponding to GCPhys on
- *                      success.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the
+ *                          calling EMT.
+ * @param   GCPhys          The GC physical address to convert.  This API mask
+ *                          the A20 line when necessary.
+ * @param   fWritable       Whether write access is required.
+ * @param   fByPassHandlers Whether to bypass access handlers.
+ * @param   ppv             Where to store the pointer corresponding to GCPhys
+ *                          on success.
  * @param   pLock
  *
  * @remarks This is more or a less a copy of PGMR3PhysTlbGCPhys2Ptr.
@@ -4503,11 +4505,12 @@ VMM_INT_DECL(int) PGMPhysIemGCPhys2Ptr(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, b
  *          accesses or is odd in any way.
  * @retval  VERR_PGM_PHYS_TLB_UNASSIGNED if the page doesn't exist.
  *
- * @param   pVM         Pointer to the VM.
- * @param   GCPhys      The GC physical address to convert.  Since this is only
- *                      used for filling the REM TLB, the A20 mask must be
- *                      applied before calling this API.
- * @param   fWritable   Whether write access is required.
+ * @param   pVM             The cross context VM structure.
+ * @param   GCPhys          The GC physical address to convert.  Since this is
+ *                          only used for filling the REM TLB, the A20 mask must
+ *                          be applied before calling this API.
+ * @param   fWritable       Whether write access is required.
+ * @param   fByPassHandlers Whether to bypass access handlers.
  *
  * @remarks This is a watered down version PGMPhysIemGCPhys2Ptr and really just
  *          a stop gap thing that should be removed once there is a better TLB
diff --git a/src/VBox/VMM/VMMAll/PGMAllPool.cpp b/src/VBox/VMM/VMMAll/PGMAllPool.cpp
index a119a24..ca96337 100644
--- a/src/VBox/VMM/VMMAll/PGMAllPool.cpp
+++ b/src/VBox/VMM/VMMAll/PGMAllPool.cpp
@@ -137,7 +137,7 @@ int pgmPoolMonitorChainFlush(PPGMPOOL pPool, PPGMPOOLPAGE pPage)
  * Wrapper for getting the current context pointer to the entry being modified.
  *
  * @returns VBox status code suitable for scheduling.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvDst       Destination address
  * @param   pvSrc       Pointer to the mapping of @a GCPhysSrc or NULL depending
  *                      on the context (e.g. \#PF in R0 & RC).
@@ -164,7 +164,7 @@ DECLINLINE(int) pgmPoolPhysSimpleReadGCPhys(PVM pVM, void *pvDst, void const *pv
  * For PT entries we will clear them. For PD entries, we'll simply check
  * for mapping conflicts and set the SyncCR3 FF if found.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pPool       The pool.
  * @param   pPage       The head page.
  * @param   GCPhysFault The guest physical fault address.
@@ -726,8 +726,8 @@ DECLINLINE(bool) pgmPoolMonitorIsForking(PPGMPOOL pPool, PDISCPUSTATE pDis, unsi
  *
  * @returns true if we consider the page as being reused for a different purpose.
  * @returns false if we consider it to still be a paging page.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   Trap register frame.
  * @param   pDis        The disassembly info for the faulting instruction.
  * @param   pvFault     The fault address.
@@ -808,8 +808,8 @@ DECLINLINE(bool) pgmPoolMonitorIsReused(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pReg
  * Flushes the page being accessed.
  *
  * @returns VBox status code suitable for scheduling.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pPool       The pool.
  * @param   pPage       The pool page (head).
  * @param   pDis        The disassembly of the write instruction.
@@ -876,7 +876,7 @@ static int pgmPoolAccessPfHandlerFlush(PVM pVM, PVMCPU pVCpu, PPGMPOOL pPool, PP
  * Handles the STOSD write accesses.
  *
  * @returns VBox status code suitable for scheduling.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPool       The pool.
  * @param   pPage       The pool page (head).
  * @param   pDis        The disassembly of the write instruction.
@@ -947,8 +947,8 @@ DECLINLINE(int) pgmPoolAccessPfHandlerSTOSD(PVM pVM, PPGMPOOL pPool, PPGMPOOLPAG
  * Handles the simple write accesses.
  *
  * @returns VBox status code suitable for scheduling.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pPool       The pool.
  * @param   pPage       The pool page (head).
  * @param   pDis        The disassembly of the write instruction.
@@ -1150,7 +1150,7 @@ DECLEXPORT(VBOXSTRICTRC) pgmPoolAccessPfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT
      */
     bool fReused = false;
     bool fNotReusedNotForking = false;
-    if (    (   pPage->cModifications < cMaxModifications   /** @todo #define */ /** @todo need to check that it's not mapping EIP. */ /** @todo adjust this! */
+    if (    (   pPage->cModifications < cMaxModifications   /** @todo \#define */ /** @todo need to check that it's not mapping EIP. */ /** @todo adjust this! */
              || pgmPoolIsPageLocked(pPage)
             )
         &&  !(fReused = pgmPoolMonitorIsReused(pVM, pVCpu, pRegFrame, pDis, pvFault))
@@ -1697,7 +1697,7 @@ DECLINLINE(unsigned) pgmPoolTrackFlushPTPae32Bit(PPGMPOOL pPool, PPGMPOOLPAGE pP
 /**
  * Flush a dirty page
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPool           The pool.
  * @param   idxSlot         Dirty array slot index
  * @param   fAllowRemoval   Allow a reused page table to be removed
@@ -1796,7 +1796,7 @@ static void pgmPoolFlushDirtyPage(PVM pVM, PPGMPOOL pPool, unsigned idxSlot, boo
 /**
  * Add a new dirty page
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPool       The pool.
  * @param   pPage       The page.
  */
@@ -1877,7 +1877,7 @@ void pgmPoolAddDirtyPage(PVM pVM, PPGMPOOL pPool, PPGMPOOLPAGE pPage)
  * Check if the specified page is dirty (not write monitored)
  *
  * @return dirty or not
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Guest physical address
  */
 bool pgmPoolIsDirtyPage(PVM pVM, RTGCPHYS GCPhys)
@@ -1908,7 +1908,7 @@ bool pgmPoolIsDirtyPage(PVM pVM, RTGCPHYS GCPhys)
 /**
  * Reset all dirty pages by reinstating page monitoring.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 void pgmPoolResetDirtyPages(PVM pVM)
 {
@@ -1947,7 +1947,7 @@ void pgmPoolResetDirtyPages(PVM pVM)
 /**
  * Invalidate the PT entry for the specified page
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPtrPage       Guest page to invalidate
  */
 void pgmPoolResetDirtyPage(PVM pVM, RTGCPTR GCPtrPage)
@@ -1969,7 +1969,7 @@ void pgmPoolResetDirtyPage(PVM pVM, RTGCPTR GCPtrPage)
 /**
  * Reset all dirty pages by reinstating page monitoring.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhysPT        Physical address of the page table
  */
 void pgmPoolInvalidateDirtyPage(PVM pVM, RTGCPHYS GCPhysPT)
@@ -2751,7 +2751,7 @@ static void pgmPoolMonitorModifiedRemove(PPGMPOOL pPool, PPGMPOOLPAGE pPage)
 /**
  * Zaps the list of modified pages, resetting their modification counters in the process.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 static void pgmPoolMonitorModifiedClearAll(PVM pVM)
 {
@@ -2788,9 +2788,9 @@ static void pgmPoolMonitorModifiedClearAll(PVM pVM)
  * @returns VBox status code.
  * @retval  VINF_SUCCESS if successfully added.
  * @retval  VINF_PGM_SYNC_CR3 is it needs to be deferred to ring 3 (GC only)
- * @param   pVCpu     Pointer to the VMCPU.
+ * @param   pVCpu     The cross context virtual CPU structure.
  * @remark  Should only be used when monitoring is available, thus placed in
- *          the PGMPOOL_WITH_MONITORING #ifdef.
+ *          the PGMPOOL_WITH_MONITORING \#ifdef.
  */
 int pgmPoolSyncCR3(PVMCPU pVCpu)
 {
@@ -3030,7 +3030,7 @@ static int pgmPoolTrackAddUser(PPGMPOOL pPool, PPGMPOOLPAGE pPage, uint16_t iUse
  * user record to the chain of free records.
  *
  * @param   pPool       The pool.
- * @param   HCPhys      The HC physical address of the shadow page.
+ * @param   pPage       The shadow page.
  * @param   iUser       The shadow page pool index of the user table.
  * @param   iUserTable  The index into the user table (shadowed).
  *
@@ -3196,7 +3196,7 @@ DECLINLINE(unsigned) pgmPoolTrackGetGuestEntrySize(PGMPOOLKIND enmKind)
  *
  * @returns true / false indicating removal of all relevant PTEs
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPhysPage   The guest page in question.
  * @param   fFlushPTEs  Flush PTEs or allow them to be updated (e.g. in case of an RW bit change)
  * @param   iShw        The shadow page table.
@@ -3448,7 +3448,7 @@ static bool pgmPoolTrackFlushGCPhysPTInt(PVM pVM, PCPGMPAGE pPhysPage, bool fFlu
 /**
  * Scans one shadow page table for mappings of a physical page.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPhysPage   The guest page in question.
  * @param   fFlushPTEs  Flush PTEs or allow them to be updated (e.g. in case of an RW bit change)
  * @param   iShw        The shadow page table.
@@ -3472,7 +3472,7 @@ static void pgmPoolTrackFlushGCPhysPT(PVM pVM, PPGMPAGE pPhysPage, bool fFlushPT
 /**
  * Flushes a list of shadow page tables mapping the same physical page.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPhysPage   The guest page in question.
  * @param   fFlushPTEs  Flush PTEs or allow them to be updated (e.g. in case of an RW bit change)
  * @param   iPhysExt    The physical cross reference extent list to flush.
@@ -3535,7 +3535,7 @@ static void pgmPoolTrackFlushGCPhysPTs(PVM pVM, PPGMPAGE pPhysPage, bool fFlushP
  * @retval  VINF_PGM_SYNC_CR3 if we're better off with a CR3 sync and a page
  *          pool cleaning. FF and sync flags are set.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhysPage  GC physical address of the page in question
  * @param   pPhysPage   The guest page in question.
  * @param   fFlushPTEs  Flush PTEs or allow them to be updated (e.g. in case of an RW bit change)
@@ -3648,7 +3648,7 @@ int pgmPoolTrackUpdateGCPhys(PVM pVM, RTGCPHYS GCPhysPage, PPGMPAGE pPhysPage, b
  * @retval  VINF_PGM_GCPHYS_ALIASED if we're better off with a CR3 sync and
  *          a page pool cleaning.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPhysPage   The guest page in question.
  */
 int pgmPoolTrackFlushGCPhysPTsSlow(PVM pVM, PPGMPAGE pPhysPage)
@@ -3961,7 +3961,7 @@ static void pgmPoolTrackClearPageUsers(PPGMPOOL pPool, PPGMPOOLPAGE pPage)
  * Allocates a new physical cross reference extent.
  *
  * @returns Pointer to the allocated extent on success. NULL if we're out of them.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   piPhysExt   Where to store the phys ext index.
  */
 PPGMPOOLPHYSEXT pgmPoolTrackPhysExtAlloc(PVM pVM, uint16_t *piPhysExt)
@@ -3985,7 +3985,7 @@ PPGMPOOLPHYSEXT pgmPoolTrackPhysExtAlloc(PVM pVM, uint16_t *piPhysExt)
 /**
  * Frees a physical cross reference extent.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iPhysExt    The extent to free.
  */
 void pgmPoolTrackPhysExtFree(PVM pVM, uint16_t iPhysExt)
@@ -4007,7 +4007,7 @@ void pgmPoolTrackPhysExtFree(PVM pVM, uint16_t iPhysExt)
 /**
  * Frees a physical cross reference extent.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iPhysExt    The extent to free.
  */
 void pgmPoolTrackPhysExtFreeList(PVM pVM, uint16_t iPhysExt)
@@ -4041,7 +4041,7 @@ void pgmPoolTrackPhysExtFreeList(PVM pVM, uint16_t iPhysExt)
  *
  * @returns The new tracking data for PGMPAGE.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iPhysExt    The physical extent index of the list head.
  * @param   iShwPT      The shadow page table index.
  * @param   iPte        Page table entry
@@ -4129,7 +4129,7 @@ static uint16_t pgmPoolTrackPhysExtInsert(PVM pVM, uint16_t iPhysExt, uint16_t i
  *
  * @returns The new tracking data for PGMPAGE.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPhysPage   Pointer to the aPages entry in the ram range.
  * @param   u16         The ram range flags (top 16-bits).
  * @param   iShwPT      The shadow page table index.
@@ -4506,7 +4506,8 @@ DECLINLINE(void) pgmPoolTrackDerefPTPaeBig(PPGMPOOL pPool, PPGMPOOLPAGE pPage, P
  *
  * @param   pPool       The pool.
  * @param   pPage       The page.
- * @param   pShwPML4    The shadow page directory pointer table (mapping of the page).
+ * @param   pShwPT      The shadow page directory pointer table (mapping of the
+ *                      page).
  */
 DECLINLINE(void) pgmPoolTrackDerefPTEPT(PPGMPOOL pPool, PPGMPOOLPAGE pPage, PEPTPT pShwPT)
 {
@@ -4865,7 +4866,7 @@ static void pgmPoolTrackDeref(PPGMPOOL pPool, PPGMPOOLPAGE pPage)
  * @returns VBox status code.
  * @retval  VINF_SUCCESS on success.
  * @param   pPool       The pool.
- * @param   HCPhys      The HC physical address of the shadow page.
+ * @param   pPage       The shadow page.
  * @param   fFlush      Flush the TLBS when required (should only be false in very specific use cases!!)
  */
 int pgmPoolFlushPage(PPGMPOOL pPool, PPGMPOOLPAGE pPage, bool fFlush)
@@ -4987,7 +4988,7 @@ int pgmPoolFlushPage(PPGMPOOL pPool, PPGMPOOLPAGE pPage, bool fFlush)
  * references the shadow page.
  *
  * @param   pPool       The pool.
- * @param   HCPhys      The HC physical address of the shadow page.
+ * @param   pPage       The shadow page.
  * @param   iUser       The shadow page pool index of the user table.
  *                      NIL_PGMPOOL_IDX for root pages.
  * @param   iUserTable  The index into the user table (shadowed). Ignored if
@@ -5071,7 +5072,7 @@ static int pgmPoolMakeMoreFreePages(PPGMPOOL pPool, PGMPOOLKIND enmKind, uint16_
  * @retval  VINF_PGM_CACHED_PAGE if a CACHED page was returned.
  * @retval  VERR_PGM_POOL_FLUSHED if the pool was flushed.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address of the page we're gonna shadow.
  *                      For 4MB and 2MB PD entries, it's the first address the
  *                      shadow PT is covering.
@@ -5211,7 +5212,7 @@ int pgmPoolAlloc(PVM pVM, RTGCPHYS GCPhys, PGMPOOLKIND enmKind, PGMPOOLACCESS en
 /**
  * Frees a usage of a pool page.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   HCPhys      The HC physical address of the shadow page.
  * @param   iUser       The shadow page pool index of the user table.
  *                      NIL_PGMPOOL_IDX if root page.
@@ -5265,7 +5266,7 @@ PPGMPOOLPAGE pgmPoolQueryPageForDbg(PPGMPOOL pPool, RTHCPHYS HCPhys)
 /**
  * Flush the specified page if present
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   GCPhys  Guest physical address of the page to flush
  */
 void pgmPoolFlushPageByGCPhys(PVM pVM, RTGCPHYS GCPhys)
@@ -5350,8 +5351,8 @@ void pgmPoolFlushPageByGCPhys(PVM pVM, RTGCPHYS GCPhys)
 /**
  * Reset CPU on hot plugging.
  *
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               The virtual CPU.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu              The cross context virtual CPU structure.
  */
 void pgmR3PoolResetUnpluggedCpu(PVM pVM, PVMCPU pVCpu)
 {
@@ -5369,7 +5370,7 @@ void pgmR3PoolResetUnpluggedCpu(PVM pVM, PVMCPU pVCpu)
  * It will assert a global CR3 flush (FF) and assumes the caller is aware of
  * this and execute this CR3 flush.
  *
- * @param   pPool       The pool.
+ * @param   pVM         The cross context VM structure.
  */
 void pgmR3PoolReset(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMAll/PGMAllShw.h b/src/VBox/VMM/VMMAll/PGMAllShw.h
index 557ca2b..069038f 100644
--- a/src/VBox/VMM/VMMAll/PGMAllShw.h
+++ b/src/VBox/VMM/VMMAll/PGMAllShw.h
@@ -180,8 +180,8 @@ RT_C_DECLS_END
 /**
  * Gets effective page information (from the VMM page directory).
  *
- * @returns VBox status.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @returns VBox status code.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Guest Context virtual address of the page.
  * @param   pfFlags     Where to store the flags. These are X86_PTE_*.
  * @param   pHCPhys     Where to store the HC physical address of the page.
@@ -344,7 +344,7 @@ PGM_SHW_DECL(int, GetPage)(PVMCPU pVCpu, RTGCUINTPTR GCPtr, uint64_t *pfFlags, P
  * The existing flags are ANDed with the fMask and ORed with the fFlags.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       Virtual address of the first page in the range. Page aligned!
  * @param   cb          Size (in bytes) of the range to apply the modification to. Page aligned!
  * @param   fFlags      The OR  mask - page flags X86_PTE_*, excluding the page mask of course.
diff --git a/src/VBox/VMM/VMMAll/REMAll.cpp b/src/VBox/VMM/VMMAll/REMAll.cpp
index 3426423..8ce68be 100644
--- a/src/VBox/VMM/VMMAll/REMAll.cpp
+++ b/src/VBox/VMM/VMMAll/REMAll.cpp
@@ -39,7 +39,7 @@
 /**
  * Records a invlpg instruction for replaying upon REM entry.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtrPage   The
  */
 VMMDECL(void) REMNotifyInvalidatePage(PVM pVM, RTGCPTR GCPtrPage)
@@ -79,7 +79,7 @@ VMMDECL(void) REMNotifyInvalidatePage(PVM pVM, RTGCPTR GCPtrPage)
 /**
  * Insert pending notification
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pRec            Notification record to insert
  */
 static void remNotifyHandlerInsert(PVM pVM, PREMHANDLERNOTIFICATION pRec)
@@ -131,7 +131,7 @@ static void remNotifyHandlerInsert(PVM pVM, PREMHANDLERNOTIFICATION pRec)
 /**
  * Notification about a successful PGMR3HandlerPhysicalRegister() call.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmKind         Kind of access handler.
  * @param   GCPhys          Handler range address.
  * @param   cb              Size of the handler range.
@@ -152,7 +152,7 @@ VMMDECL(void) REMNotifyHandlerPhysicalRegister(PVM pVM, PGMPHYSHANDLERKIND enmKi
 /**
  * Notification about a successful PGMR3HandlerPhysicalDeregister() operation.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmKind         Kind of access handler.
  * @param   GCPhys          Handler range address.
  * @param   cb              Size of the handler range.
@@ -175,7 +175,7 @@ VMMDECL(void) REMNotifyHandlerPhysicalDeregister(PVM pVM, PGMPHYSHANDLERKIND enm
 /**
  * Notification about a successful PGMR3HandlerPhysicalModify() call.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmKind         Kind of access handler.
  * @param   GCPhysOld       Old handler range address.
  * @param   GCPhysNew       New handler range address.
@@ -204,8 +204,8 @@ VMMDECL(void) REMNotifyHandlerPhysicalModify(PVM pVM, PGMPHYSHANDLERKIND enmKind
  *
  * This is for avoiding trouble in RC when changing CR3.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU of the calling EMT.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(void) REMNotifyHandlerPhysicalFlushIfAlmostFull(PVM pVM, PVMCPU pVCpu)
 {
@@ -238,7 +238,7 @@ VMMDECL(void) REMNotifyHandlerPhysicalFlushIfAlmostFull(PVM pVM, PVMCPU pVCpu)
 /**
  * Make REM flush all translation block upon the next call to REMR3State().
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMDECL(void) REMFlushTBs(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMAll/SELMAll.cpp b/src/VBox/VMM/VMMAll/SELMAll.cpp
index 9915b01..932ff84 100644
--- a/src/VBox/VMM/VMMAll/SELMAll.cpp
+++ b/src/VBox/VMM/VMMAll/SELMAll.cpp
@@ -151,7 +151,7 @@ selmGuestTSSWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void
  * for that.
  *
  * @returns Flat address.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   Sel     Selector part.
  * @param   Addr    Address part.
  * @remarks Don't use when in long mode.
@@ -184,7 +184,7 @@ VMMDECL(RTGCPTR) SELMToFlatBySel(PVM pVM, RTSEL Sel, RTGCPTR Addr)
  * for that.
  *
  * @returns Flat address.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   SelReg      Selector register
  * @param   pCtxCore    CPU context
  * @param   Addr        Address part.
@@ -249,7 +249,7 @@ VMMDECL(RTGCPTR) SELMToFlat(PVM pVM, DISSELREG SelReg, PCPUMCTXCORE pCtxCore, RT
  * Some basic checking is done, but not all kinds yet.
  *
  * @returns VBox status
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   SelReg      Selector register.
  * @param   pCtxCore    CPU context.
  * @param   Addr        Address part.
@@ -402,7 +402,7 @@ VMMDECL(int) SELMToFlatEx(PVMCPU pVCpu, DISSELREG SelReg, PCPUMCTXCORE pCtxCore,
  * Some basic checking is done, but not all kinds yet.
  *
  * @returns VBox status
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   eflags      Current eflags
  * @param   Sel         Selector part.
  * @param   Addr        Address part.
@@ -625,7 +625,7 @@ static void selLoadHiddenSelectorRegFromGuestTable(PVMCPU pVCpu, PCCPUMCTX pCtx,
  *
  * @remarks This is only used when in legacy protected mode!
  *
- * @param   pVCpu       Pointer to the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtx        The guest CPU context.
  * @param   pSReg       The selector register.
  *
@@ -698,9 +698,9 @@ VMM_INT_DECL(void) SELMLoadHiddenSelectorReg(PVMCPU pVCpu, PCCPUMCTX pCtx, PCPUM
  * address when in real or v8086 mode.
  *
  * @returns VINF_SUCCESS.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   SelCS   Selector part.
- * @param   pHidCS  The hidden CS register part. Optional.
+ * @param   pSReg   The hidden CS register part. Optional.
  * @param   Addr    Address part.
  * @param   ppvFlat Where to store the flat address.
  */
@@ -724,8 +724,8 @@ DECLINLINE(int) selmValidateAndConvertCSAddrRealMode(PVMCPU pVCpu, RTSEL SelCS,
  * when in protected/long mode using the raw-mode algorithm.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   SelCPL      Current privilege level. Get this from SS - CS might be
  *                      conforming! A full selector can be passed, we'll only
  *                      use the RPL part.
@@ -801,7 +801,7 @@ DECLINLINE(int) selmValidateAndConvertCSAddrRawMode(PVM pVM, PVMCPU pVCpu, RTSEL
  * when in protected/long mode using the standard hidden selector registers
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   SelCPL      Current privilege level.  Get this from SS - CS might be
  *                      conforming!  A full selector can be passed, we'll only
  *                      use the RPL part.
@@ -856,7 +856,7 @@ DECLINLINE(int) selmValidateAndConvertCSAddrHidden(PVMCPU pVCpu, RTSEL SelCPL, R
  * Validates and converts a GC selector based code address to a flat address.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   Efl         Current EFLAGS.
  * @param   SelCPL      Current privilege level.  Get this from SS - CS might be
  *                      conforming!  A full selector can be passed, we'll only
@@ -900,7 +900,7 @@ VMMDECL(int) SELMValidateAndConvertCSAddr(PVMCPU pVCpu, X86EFLAGS Efl, RTSEL Sel
  * Returns Hypervisor's Trap 08 (\#DF) selector.
  *
  * @returns Hypervisor's Trap 08 (\#DF) selector.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(RTSEL) SELMGetTrap8Selector(PVM pVM)
 {
@@ -911,7 +911,7 @@ VMMDECL(RTSEL) SELMGetTrap8Selector(PVM pVM)
 /**
  * Sets EIP of Hypervisor's Trap 08 (\#DF) TSS.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   u32EIP  EIP of Trap 08 handler.
  */
 VMMDECL(void) SELMSetTrap8EIP(PVM pVM, uint32_t u32EIP)
@@ -923,7 +923,7 @@ VMMDECL(void) SELMSetTrap8EIP(PVM pVM, uint32_t u32EIP)
 /**
  * Sets ss:esp for ring1 in main Hypervisor's TSS.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   ss      Ring1 SS register value. Pass 0 if invalid.
  * @param   esp     Ring1 ESP register value.
  */
@@ -940,7 +940,7 @@ void selmSetRing1Stack(PVM pVM, uint32_t ss, RTGCPTR32 esp)
 /**
  * Sets ss:esp for ring1 in main Hypervisor's TSS.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   ss      Ring2 SS register value. Pass 0 if invalid.
  * @param   esp     Ring2 ESP register value.
  */
@@ -961,7 +961,7 @@ void selmSetRing2Stack(PVM pVM, uint32_t ss, RTGCPTR32 esp)
  * Returns SS=0 if the ring-1 stack isn't valid.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pSS     Ring1 SS register value.
  * @param   pEsp    Ring1 ESP register value.
  */
@@ -1048,7 +1048,7 @@ l_tryagain:
 /**
  * Gets the hypervisor code selector (CS).
  * @returns CS selector.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(RTSEL) SELMGetHyperCS(PVM pVM)
 {
@@ -1059,7 +1059,7 @@ VMMDECL(RTSEL) SELMGetHyperCS(PVM pVM)
 /**
  * Gets the 64-mode hypervisor code selector (CS64).
  * @returns CS selector.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(RTSEL) SELMGetHyperCS64(PVM pVM)
 {
@@ -1070,7 +1070,7 @@ VMMDECL(RTSEL) SELMGetHyperCS64(PVM pVM)
 /**
  * Gets the hypervisor data selector (DS).
  * @returns DS selector.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(RTSEL) SELMGetHyperDS(PVM pVM)
 {
@@ -1081,7 +1081,7 @@ VMMDECL(RTSEL) SELMGetHyperDS(PVM pVM)
 /**
  * Gets the hypervisor TSS selector.
  * @returns TSS selector.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(RTSEL) SELMGetHyperTSS(PVM pVM)
 {
@@ -1092,7 +1092,7 @@ VMMDECL(RTSEL) SELMGetHyperTSS(PVM pVM)
 /**
  * Gets the hypervisor TSS Trap 8 selector.
  * @returns TSS Trap 8 selector.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(RTSEL) SELMGetHyperTSSTrap08(PVM pVM)
 {
@@ -1103,7 +1103,7 @@ VMMDECL(RTSEL) SELMGetHyperTSSTrap08(PVM pVM)
  * Gets the address for the hypervisor GDT.
  *
  * @returns The GDT address.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @remark  This is intended only for very special use, like in the world
  *          switchers. Don't exploit this API!
  */
@@ -1126,8 +1126,8 @@ VMMDECL(RTRCPTR) SELMGetHyperGDT(PVM pVM)
  * @retval  VINF_SUCCESS if we've got a TSS loaded.
  * @retval  VERR_SELM_NO_TSS if we haven't got a TSS (rather unlikely).
  *
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   pGCPtrTss           Where to store the TSS address.
  * @param   pcbTss              Where to store the TSS size limit.
  * @param   pfCanHaveIOBitmap   Where to store the can-have-I/O-bitmap indicator. (optional)
@@ -1159,8 +1159,8 @@ VMMDECL(int) SELMGetTSSInfo(PVM pVM, PVMCPU pVCpu, PRTGCUINTPTR pGCPtrTss, PRTGC
  * value might have changed.
  * This is called by PGM.
  *
- * @param   pVM       Pointer to the VM.
- * @param   pVCpu     Pointer to the VMCPU.
+ * @param   pVM       The cross context VM structure.
+ * @param   pVCpu     The cross context virtual CPU structure.
  */
 VMMDECL(void) SELMShadowCR3Changed(PVM pVM, PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMAll/TMAll.cpp b/src/VBox/VMM/VMMAll/TMAll.cpp
index c824e6b..724702d 100644
--- a/src/VBox/VMM/VMMAll/TMAll.cpp
+++ b/src/VBox/VMM/VMMAll/TMAll.cpp
@@ -115,7 +115,7 @@
  * The function may, depending on the configuration, resume the TSC and future
  * clocks that only ticks when we're executing guest code.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(void) TMNotifyStartOfExecution(PVMCPU pVCpu)
 {
@@ -137,7 +137,7 @@ VMMDECL(void) TMNotifyStartOfExecution(PVMCPU pVCpu)
  * The function may, depending on the configuration, suspend the TSC and future
  * clocks that only ticks when we're executing guest code.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(void) TMNotifyEndOfExecution(PVMCPU pVCpu)
 {
@@ -185,7 +185,7 @@ VMMDECL(void) TMNotifyEndOfExecution(PVMCPU pVCpu)
  * The function may, depending on the configuration, resume the TSC and future
  * clocks that only ticks when we're halted.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(void) TMNotifyStartOfHalt(PVMCPU pVCpu)
 {
@@ -209,7 +209,7 @@ VMM_INT_DECL(void) TMNotifyStartOfHalt(PVMCPU pVCpu)
  * The function may, depending on the configuration, suspend the TSC and future
  * clocks that only ticks when we're halted.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(void) TMNotifyEndOfHalt(PVMCPU pVCpu)
 {
@@ -247,7 +247,7 @@ VMM_INT_DECL(void) TMNotifyEndOfHalt(PVMCPU pVCpu)
 /**
  * Raise the timer force action flag and notify the dedicated timer EMT.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 DECLINLINE(void) tmScheduleNotify(PVM pVM)
 {
@@ -508,7 +508,7 @@ DECLINLINE(void) tmTimerQueueScheduleOne(PTMTIMERQUEUE pQueue, PTMTIMER pTimer)
 /**
  * Schedules the specified timer queue.
  *
- * @param   pVM             The VM to run the timers for.
+ * @param   pVM             The cross context VM structure.
  * @param   pQueue          The queue to schedule.
  *
  * @remarks Called while owning the lock.
@@ -551,7 +551,8 @@ void tmTimerQueueSchedule(PVM pVM, PTMTIMERQUEUE pQueue)
 /**
  * Checks that the timer queues are sane.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
+ * @param   pszWhere    Caller location clue.
  *
  * @remarks Called while owning the lock.
  */
@@ -670,12 +671,11 @@ void tmTimerQueuesSanityChecks(PVM pVM, const char *pszWhere)
  * EMT is polling.
  *
  * @returns See tmTimerPollInternal.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   u64Now              Current virtual clock timestamp.
  * @param   u64Delta            The delta to the next even in ticks of the
  *                              virtual clock.
  * @param   pu64Delta           Where to return the delta.
- * @param   pCounter            The statistics counter to update.
  */
 DECLINLINE(uint64_t) tmTimerPollReturnMiss(PVM pVM, uint64_t u64Now, uint64_t u64Delta, uint64_t *pu64Delta)
 {
@@ -717,7 +717,7 @@ DECLINLINE(uint64_t) tmTimerPollReturnMiss(PVM pVM, uint64_t u64Now, uint64_t u6
  * than the one dedicated to timer work.
  *
  * @returns See tmTimerPollInternal.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   u64Now              Current virtual clock timestamp.
  * @param   pu64Delta           Where to return the delta.
  */
@@ -733,14 +733,13 @@ DECL_FORCE_INLINE(uint64_t) tmTimerPollReturnOtherCpu(PVM pVM, uint64_t u64Now,
  * Worker for tmTimerPollInternal.
  *
  * @returns See tmTimerPollInternal.
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               Pointer to the shared VMCPU structure of the
- *                              caller.
- * @param   pVCpuDst            Pointer to the shared VMCPU structure of the
- *                              dedicated timer EMT.
- * @param   u64Now              Current virtual clock timestamp.
- * @param   pu64Delta           Where to return the delta.
- * @param   pCounter            The statistics counter to update.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
+ * @param   pVCpuDst    The cross context virtual CPU structure of the dedicated
+ *                      timer EMT.
+ * @param   u64Now      Current virtual clock timestamp.
+ * @param   pu64Delta   Where to return the delta.
+ * @param   pCounter    The statistics counter to update.
  */
 DECL_FORCE_INLINE(uint64_t) tmTimerPollReturnHit(PVM pVM, PVMCPU pVCpu, PVMCPU pVCpuDst, uint64_t u64Now,
                                                  uint64_t *pu64Delta, PSTAMCOUNTER pCounter)
@@ -760,8 +759,8 @@ DECL_FORCE_INLINE(uint64_t) tmTimerPollReturnHit(PVM pVM, PVMCPU pVCpu, PVMCPU p
  * @returns The GIP timestamp of the next event.
  *          0 if the next event has already expired.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the shared VMCPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pu64Delta   Where to store the delta.
  *
  * @thread  The emulation thread.
@@ -975,8 +974,8 @@ DECL_FORCE_INLINE(uint64_t) tmTimerPollInternal(PVM pVM, PVMCPU pVCpu, uint64_t
  *
  * @returns true if timers are pending, false if not.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the shared VMCPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @thread  The emulation thread.
  */
 VMMDECL(bool) TMTimerPollBool(PVM pVM, PVMCPU pVCpu)
@@ -993,8 +992,8 @@ VMMDECL(bool) TMTimerPollBool(PVM pVM, PVMCPU pVCpu)
  *
  * This function is called before FFs are checked in the inner execution EM loops.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the shared VMCPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @thread  The emulation thread.
  */
 VMM_INT_DECL(void) TMTimerPollVoid(PVM pVM, PVMCPU pVCpu)
@@ -1011,8 +1010,8 @@ VMM_INT_DECL(void) TMTimerPollVoid(PVM pVM, PVMCPU pVCpu)
  *
  * @returns The GIP timestamp of the next event.
  *          0 if the next event has already expired.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the shared VMCPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pu64Delta   Where to store the delta.
  * @thread  The emulation thread.
  */
@@ -1112,7 +1111,7 @@ VMMDECL(bool) TMTimerIsLockOwner(PTMTIMER pTimer)
  *
  * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pTimer          The timer handle.
  * @param   u64Expire       The new expire time.
  */
@@ -1155,7 +1154,7 @@ static int tmTimerSetOptimizedStart(PVM pVM, PTMTIMER pTimer, uint64_t u64Expire
  * queue lock and bypassing the scheduling list.
  *
  * @returns VBox status code
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pTimer              The timer handle.
  * @param   u64Expire           The expiration time.
  */
@@ -1222,7 +1221,7 @@ static int tmTimerVirtualSyncSet(PVM pVM, PTMTIMER pTimer, uint64_t u64Expire)
 /**
  * Arm a timer with a (new) expire time.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pTimer          Timer handle as returned by one of the create functions.
  * @param   u64Expire       New expire time.
  */
@@ -1381,7 +1380,7 @@ VMMDECL(int) TMTimerSet(PTMTIMER pTimer, uint64_t u64Expire)
  * Return the current time for the specified clock, setting pu64Now if not NULL.
  *
  * @returns Current time.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmClock        The clock to query.
  * @param   pu64Now         Optional pointer where to store the return time
  */
@@ -1414,7 +1413,7 @@ DECL_FORCE_INLINE(uint64_t) tmTimerSetRelativeNowWorker(PVM pVM, TMCLOCK enmCloc
  *
  * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pTimer          The timer handle.
  * @param   cTicksToNext    Clock ticks until the next time expiration.
  * @param   pu64Now         Where to return the current time stamp used.
@@ -1453,7 +1452,8 @@ static int tmTimerSetRelativeOptimizedStart(PVM pVM, PTMTIMER pTimer, uint64_t c
  * queue lock and bypassing the scheduling list.
  *
  * @returns VBox status code
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pTimer              The timer to (re-)arm.
  * @param   cTicksToNext        Clock ticks until the next time expiration.
  * @param   pu64Now             Where to return the current time stamp used.
  *                              Optional.
@@ -1525,7 +1525,7 @@ static int tmTimerVirtualSyncSetRelative(PVM pVM, PTMTIMER pTimer, uint64_t cTic
 /**
  * Arm a timer with a expire time relative to the current time.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pTimer          Timer handle as returned by one of the create functions.
  * @param   cTicksToNext    Clock ticks until the next time expiration.
  * @param   pu64Now         Where to return the current time stamp used.
@@ -1782,7 +1782,7 @@ VMMDECL(int) TMTimerSetFrequencyHint(PTMTIMER pTimer, uint32_t uHzHint)
  * queue lock and bypassing the scheduling list.
  *
  * @returns VBox status code
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pTimer              The timer handle.
  */
 static int tmTimerVirtualSyncStop(PVM pVM, PTMTIMER pTimer)
@@ -1850,7 +1850,7 @@ static int tmTimerVirtualSyncStop(PVM pVM, PTMTIMER pTimer)
  * Stop the timer.
  * Use TMR3TimerArm() to "un-stop" the timer.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pTimer          Timer handle as returned by one of the create functions.
  */
 VMMDECL(int) TMTimerStop(PTMTIMER pTimer)
@@ -2123,7 +2123,7 @@ VMMDECL(bool) TMTimerIsActive(PTMTIMER pTimer)
 /**
  * Arm a timer with a (new) expire time relative to current time.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pTimer          Timer handle as returned by one of the create functions.
  * @param   cMilliesToNext  Number of milliseconds to the next tick.
  */
@@ -2153,7 +2153,7 @@ VMMDECL(int) TMTimerSetMillies(PTMTIMER pTimer, uint32_t cMilliesToNext)
 /**
  * Arm a timer with a (new) expire time relative to current time.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pTimer          Timer handle as returned by one of the create functions.
  * @param   cMicrosToNext   Number of microseconds to the next tick.
  */
@@ -2183,7 +2183,7 @@ VMMDECL(int) TMTimerSetMicro(PTMTIMER pTimer, uint64_t cMicrosToNext)
 /**
  * Arm a timer with a (new) expire time relative to current time.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pTimer          Timer handle as returned by one of the create functions.
  * @param   cNanosToNext    Number of nanoseconds to the next tick.
  */
@@ -2455,7 +2455,7 @@ const char *tmTimerState(TMTIMERSTATE enmState)
  * Gets the highest frequency hint for all the important timers.
  *
  * @returns The highest frequency.  0 if no timers care.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static uint32_t tmGetFrequencyHint(PVM pVM)
 {
@@ -2525,8 +2525,8 @@ static uint32_t tmGetFrequencyHint(PVM pVM)
  * the result to adjust the per-cpu preemption timer.
  *
  * @returns The highest frequency.  0 if no important timers around.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The current CPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMM_INT_DECL(uint32_t) TMCalcHostTimerFrequency(PVM pVM, PVMCPU pVCpu)
 {
@@ -2580,7 +2580,7 @@ VMM_INT_DECL(uint32_t) TMCalcHostTimerFrequency(PVM pVM, PVMCPU pVCpu)
  * Whether the guest virtual clock is ticking.
  *
  * @returns true if ticking, false otherwise.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMM_INT_DECL(bool) TMVirtualIsTicking(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMAll/TMAllCpu.cpp b/src/VBox/VMM/VMMAll/TMAllCpu.cpp
index b89131c..7428302 100644
--- a/src/VBox/VMM/VMMAll/TMAllCpu.cpp
+++ b/src/VBox/VMM/VMMAll/TMAllCpu.cpp
@@ -36,6 +36,9 @@
 
 /**
  * Gets the raw cpu tick from current virtual time.
+ *
+ * @param   pVM             The cross context VM structure.
+ * @param   fCheckTimers    Whether to check timers.
  */
 DECLINLINE(uint64_t) tmCpuTickGetRawVirtual(PVM pVM, bool fCheckTimers)
 {
@@ -53,6 +56,8 @@ DECLINLINE(uint64_t) tmCpuTickGetRawVirtual(PVM pVM, bool fCheckTimers)
 #ifdef IN_RING3
 /**
  * Used by tmR3CpuTickParavirtEnable and tmR3CpuTickParavirtDisable.
+ *
+ * @param   pVM     The cross context VM structure.
  */
 uint64_t tmR3CpuTickGetRawVirtualNoCheck(PVM pVM)
 {
@@ -65,8 +70,8 @@ uint64_t tmR3CpuTickGetRawVirtualNoCheck(PVM pVM)
  * Resumes the CPU timestamp counter ticking.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @internal
  */
 int tmCpuTickResume(PVM pVM, PVMCPU pVCpu)
@@ -93,8 +98,8 @@ int tmCpuTickResume(PVM pVM, PVMCPU pVCpu)
  * Resumes the CPU timestamp counter ticking.
  *
  * @returns VINF_SUCCESS or VERR_TM_VIRTUAL_TICKING_IPE (asserted).
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 int tmCpuTickResumeLocked(PVM pVM, PVMCPU pVCpu)
 {
@@ -135,7 +140,7 @@ int tmCpuTickResumeLocked(PVM pVM, PVMCPU pVCpu)
  * Pauses the CPU timestamp counter ticking.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @internal
  */
 int tmCpuTickPause(PVMCPU pVCpu)
@@ -155,8 +160,8 @@ int tmCpuTickPause(PVMCPU pVCpu)
  * Pauses the CPU timestamp counter ticking.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @internal
  */
 int tmCpuTickPauseLocked(PVM pVM, PVMCPU pVCpu)
@@ -186,8 +191,8 @@ int tmCpuTickPauseLocked(PVM pVM, PVMCPU pVCpu)
  *
  * Used by TMCpuTickCanUseRealTSC() and TMCpuTickGetDeadlineAndTscOffset().
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The current CPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 DECLINLINE(void) tmCpuTickRecordOffsettedTscRefusal(PVM pVM, PVMCPU pVCpu)
 {
@@ -221,8 +226,8 @@ DECLINLINE(void) tmCpuTickRecordOffsettedTscRefusal(PVM pVM, PVMCPU pVCpu)
  * Checks if AMD-V / VT-x can use an offsetted hardware TSC or not.
  *
  * @returns true/false accordingly.
- * @param   pVM             Pointer to the cross context VM structure.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   poffRealTsc     The offset against the TSC of the current host CPU,
  *                          if pfOffsettedTsc is set to true.
  * @param   pfParavirtTsc   Where to return whether paravirt TSC is enabled.
@@ -303,7 +308,7 @@ VMM_INT_DECL(bool) TMCpuTickCanUseRealTSC(PVM pVM, PVMCPU pVCpu, uint64_t *poffR
  *          tick count for deadlines that are more than a second ahead.
  *
  * @returns The number of host cpu ticks to the next deadline.  Max one second.
- * @param   pVCpu           The current CPU.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   cNsToDeadline   The number of nano seconds to the next virtual
  *                          sync deadline.
  */
@@ -331,8 +336,8 @@ DECLINLINE(uint64_t) tmCpuCalcTicksToDeadline(PVMCPU pVCpu, uint64_t cNsToDeadli
  * use the raw TSC.
  *
  * @returns The number of host CPU clock ticks to the next timer deadline.
- * @param   pVM             Pointer to the cross context VM structure.
- * @param   pVCpu           The current CPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   poffRealTsc     The offset against the TSC of the current host CPU,
  *                          if pfOffsettedTsc is set to true.
  * @param   pfOffsettedTsc  Where to return whether TSC offsetting can be used.
@@ -397,7 +402,8 @@ VMM_INT_DECL(uint64_t) TMCpuTickGetDeadlineAndTscOffset(PVM pVM, PVMCPU pVCpu, u
  * Read the current CPU timestamp counter.
  *
  * @returns Gets the CPU tsc.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
+ * @param   fCheckTimers    Whether to check timers.
  */
 DECLINLINE(uint64_t) tmCpuTickGetInternal(PVMCPU pVCpu, bool fCheckTimers)
 {
@@ -432,7 +438,7 @@ DECLINLINE(uint64_t) tmCpuTickGetInternal(PVMCPU pVCpu, bool fCheckTimers)
  * Read the current CPU timestamp counter.
  *
  * @returns Gets the CPU tsc.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(uint64_t) TMCpuTickGet(PVMCPU pVCpu)
 {
@@ -444,7 +450,7 @@ VMMDECL(uint64_t) TMCpuTickGet(PVMCPU pVCpu)
  * Read the current CPU timestamp counter, don't check for expired timers.
  *
  * @returns Gets the CPU tsc.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(uint64_t) TMCpuTickGetNoCheck(PVMCPU pVCpu)
 {
@@ -456,8 +462,8 @@ VMM_INT_DECL(uint64_t) TMCpuTickGetNoCheck(PVMCPU pVCpu)
  * Sets the current CPU timestamp counter.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   u64Tick     The new timestamp value.
  *
  * @thread  EMT which TSC is to be set.
@@ -487,7 +493,7 @@ VMM_INT_DECL(int) TMCpuTickSet(PVM pVM, PVMCPU pVCpu, uint64_t u64Tick)
  * Sets the last seen CPU timestamp counter.
  *
  * @returns VBox status code.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   u64LastSeenTick     The last seen timestamp value.
  *
  * @thread  EMT which TSC is to be set.
@@ -506,7 +512,7 @@ VMM_INT_DECL(int) TMCpuTickSetLastSeen(PVMCPU pVCpu, uint64_t u64LastSeenTick)
  * Gets the last seen CPU timestamp counter of the guest.
  *
  * @returns the last seen TSC.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  *
  * @thread  EMT(pVCpu).
  */
@@ -522,7 +528,7 @@ VMM_INT_DECL(uint64_t) TMCpuTickGetLastSeen(PVMCPU pVCpu)
  * Get the timestamp frequency.
  *
  * @returns Number of ticks per second.
- * @param   pVM     The VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMDECL(uint64_t) TMCpuTicksPerSecond(PVM pVM)
 {
@@ -547,7 +553,7 @@ VMMDECL(uint64_t) TMCpuTicksPerSecond(PVM pVM)
  * Whether the TSC is ticking for the VCPU.
  *
  * @returns true if ticking, false otherwise.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  */
 VMM_INT_DECL(bool) TMCpuTickIsTicking(PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMAll/TMAllReal.cpp b/src/VBox/VMM/VMMAll/TMAllReal.cpp
index a31c935..43bb9e2 100644
--- a/src/VBox/VMM/VMMAll/TMAllReal.cpp
+++ b/src/VBox/VMM/VMMAll/TMAllReal.cpp
@@ -30,7 +30,7 @@
  * Gets the current TMCLOCK_REAL time.
  *
  * @returns Real time.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMM_INT_DECL(uint64_t) TMRealGet(PVM pVM)
 {
@@ -43,7 +43,7 @@ VMM_INT_DECL(uint64_t) TMRealGet(PVM pVM)
  * Gets the frequency of the TMCLOCK_REAL clock.
  *
  * @returns frequency.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMM_INT_DECL(uint64_t) TMRealGetFreq(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMAll/TMAllVirtual.cpp b/src/VBox/VMM/VMMAll/TMAllVirtual.cpp
index 011829f..411954b 100644
--- a/src/VBox/VMM/VMMAll/TMAllVirtual.cpp
+++ b/src/VBox/VMM/VMMAll/TMAllVirtual.cpp
@@ -43,10 +43,10 @@
 
 
 /**
- * @interface_method_impl{RTTIMENANOTSDATA, pfnBadPrev}
+ * @interface_method_impl{RTTIMENANOTSDATA,pfnBad}
  */
-DECLCALLBACK(DECLEXPORT(void)) tmVirtualNanoTSBadPrev(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev,
-                                                      uint64_t u64PrevNanoTS)
+DECLCALLBACK(DECLEXPORT(void)) tmVirtualNanoTSBad(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS, uint64_t u64DeltaPrev,
+                                                  uint64_t u64PrevNanoTS)
 {
     PVM pVM = RT_FROM_MEMBER(pData, VM, CTX_SUFF(tm.s.VirtualGetRawData));
     pData->cBadPrev++;
@@ -60,7 +60,7 @@ DECLCALLBACK(DECLEXPORT(void)) tmVirtualNanoTSBadPrev(PRTTIMENANOTSDATA pData, u
 
 
 /**
- * @interface_method_impl{RTTIMENANOTSDATA, pfnRediscover}
+ * @interface_method_impl{RTTIMENANOTSDATA,pfnRediscover}
  *
  * This is the initial worker, so the first call in each context ends up here.
  * It is also used should the delta rating of the host CPUs change or if the
@@ -136,7 +136,7 @@ DECLCALLBACK(DECLEXPORT(uint64_t)) tmVirtualNanoTSRediscover(PRTTIMENANOTSDATA p
 
 
 /**
- * @interface_method_impl{RTTIMENANOTSDATA, pfnBadGipIndex}
+ * @interface_method_impl{RTTIMENANOTSDATA,pfnBadCpuIndex}
  */
 DECLEXPORT(uint64_t) tmVirtualNanoTSBadCpuIndex(PRTTIMENANOTSDATA pData, uint16_t idApic, uint16_t iCpuSet, uint16_t iGipCpu)
 {
@@ -170,7 +170,7 @@ DECLINLINE(uint64_t) tmVirtualGetRawNanoTS(PVM pVM)
  * Get the time when we're not running at 100%
  *
  * @returns The timestamp.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 static uint64_t tmVirtualGetRawNonNormal(PVM pVM)
 {
@@ -198,7 +198,7 @@ static uint64_t tmVirtualGetRawNonNormal(PVM pVM)
  * Get the raw virtual time.
  *
  * @returns The current time stamp.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 DECLINLINE(uint64_t) tmVirtualGetRaw(PVM pVM)
 {
@@ -257,7 +257,7 @@ DECLINLINE(uint64_t) tmVirtualGet(PVM pVM, bool fCheckTimers)
  * Gets the current TMCLOCK_VIRTUAL time
  *
  * @returns The timestamp.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  *
  * @remark  While the flow of time will never go backwards, the speed of the
  *          progress varies due to inaccurate RTTimeNanoTS and TSC. The latter can be
@@ -277,7 +277,7 @@ VMM_INT_DECL(uint64_t) TMVirtualGet(PVM pVM)
  * Meaning, this has no side effect on FFs like TMVirtualGet may have.
  *
  * @returns The timestamp.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  *
  * @remarks See TMVirtualGet.
  */
@@ -291,7 +291,7 @@ VMM_INT_DECL(uint64_t) TMVirtualGetNoCheck(PVM pVM)
  * Converts the dead line interval from TMCLOCK_VIRTUAL to host nano seconds.
  *
  * @returns Host nano second count.
- * @param   pVM                     Pointer to the VM.
+ * @param   pVM                     The cross context VM structure.
  * @param   cVirtTicksToDeadline    The TMCLOCK_VIRTUAL interval.
  */
 DECLINLINE(uint64_t) tmVirtualVirtToNsDeadline(PVM pVM, uint64_t cVirtTicksToDeadline)
@@ -306,7 +306,7 @@ DECLINLINE(uint64_t) tmVirtualVirtToNsDeadline(PVM pVM, uint64_t cVirtTicksToDea
  * tmVirtualSyncGetLocked worker for handling catch-up when owning the lock.
  *
  * @returns The timestamp.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   u64                 raw virtual time.
  * @param   off                 offVirtualSync.
  * @param   pcNsToDeadline      Where to return the number of nano seconds to
@@ -420,7 +420,7 @@ DECLINLINE(uint64_t) tmVirtualSyncGetHandleCatchUpLocked(PVM pVM, uint64_t u64,
  * tmVirtualSyncGetEx worker for when we get the lock.
  *
  * @returns timesamp.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   u64                 The virtual clock timestamp.
  * @param   pcNsToDeadline      Where to return the number of nano seconds to
  *                              the next virtual sync timer deadline.  Can be
@@ -507,7 +507,7 @@ DECLINLINE(uint64_t) tmVirtualSyncGetLocked(PVM pVM, uint64_t u64, uint64_t *pcN
  * Gets the current TMCLOCK_VIRTUAL_SYNC time.
  *
  * @returns The timestamp.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   fCheckTimers        Check timers or not
  * @param   pcNsToDeadline      Where to return the number of nano seconds to
  *                              the next virtual sync timer deadline.  Can be
@@ -745,7 +745,7 @@ DECLINLINE(uint64_t) tmVirtualSyncGetEx(PVM pVM, bool fCheckTimers, uint64_t *pc
  * Gets the current TMCLOCK_VIRTUAL_SYNC time.
  *
  * @returns The timestamp.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @thread  EMT.
  * @remarks May set the timer and virtual sync FFs.
  */
@@ -760,7 +760,7 @@ VMM_INT_DECL(uint64_t) TMVirtualSyncGet(PVM pVM)
  * TMCLOCK_VIRTUAL.
  *
  * @returns The timestamp.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @thread  EMT.
  * @remarks May set the timer and virtual sync FFs.
  */
@@ -774,7 +774,7 @@ VMM_INT_DECL(uint64_t) TMVirtualSyncGetNoCheck(PVM pVM)
  * Gets the current TMCLOCK_VIRTUAL_SYNC time.
  *
  * @returns The timestamp.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   fCheckTimers    Check timers on the virtual clock or not.
  * @thread  EMT.
  * @remarks May set the timer and virtual sync FFs.
@@ -790,7 +790,7 @@ VMM_INT_DECL(uint64_t) TMVirtualSyncGetEx(PVM pVM, bool fCheckTimers)
  * without checking timers running on TMCLOCK_VIRTUAL.
  *
  * @returns The timestamp.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pcNsToDeadline      Where to return the number of nano seconds to
  *                              the next virtual sync timer deadline.
  * @thread  EMT.
@@ -809,7 +809,7 @@ VMM_INT_DECL(uint64_t) TMVirtualSyncGetWithDeadlineNoCheck(PVM pVM, uint64_t *pc
  * Gets the number of nano seconds to the next virtual sync deadline.
  *
  * @returns The number of TMCLOCK_VIRTUAL ticks.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @thread  EMT.
  * @remarks May set the timer and virtual sync FFs.
  */
@@ -825,7 +825,7 @@ VMMDECL(uint64_t) TMVirtualSyncGetNsToDeadline(PVM pVM)
  * Gets the current lag of the synchronous virtual clock (relative to the virtual clock).
  *
  * @return  The current lag.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMM_INT_DECL(uint64_t) TMVirtualSyncGetLag(PVM pVM)
 {
@@ -837,7 +837,7 @@ VMM_INT_DECL(uint64_t) TMVirtualSyncGetLag(PVM pVM)
  * Get the current catch-up percent.
  *
  * @return  The current catch0up percent. 0 means running at the same speed as the virtual clock.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMM_INT_DECL(uint32_t) TMVirtualSyncGetCatchUpPct(PVM pVM)
 {
@@ -851,7 +851,7 @@ VMM_INT_DECL(uint32_t) TMVirtualSyncGetCatchUpPct(PVM pVM)
  * Gets the current TMCLOCK_VIRTUAL frequency.
  *
  * @returns The frequency.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMM_INT_DECL(uint64_t) TMVirtualGetFreq(PVM pVM)
 {
@@ -864,7 +864,7 @@ VMM_INT_DECL(uint64_t) TMVirtualGetFreq(PVM pVM)
  * Worker for TMR3PauseClocks.
  *
  * @returns VINF_SUCCESS or VERR_TM_VIRTUAL_TICKING_IPE (asserted).
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int tmVirtualPauseLocked(PVM pVM)
 {
@@ -884,7 +884,7 @@ int tmVirtualPauseLocked(PVM pVM)
  * Worker for TMR3ResumeClocks.
  *
  * @returns VINF_SUCCESS or VERR_TM_VIRTUAL_TICKING_IPE (asserted).
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int tmVirtualResumeLocked(PVM pVM)
 {
@@ -906,7 +906,7 @@ int tmVirtualResumeLocked(PVM pVM)
  * Converts from virtual ticks to nanoseconds.
  *
  * @returns nanoseconds.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   u64VirtualTicks The virtual ticks to convert.
  * @remark  There could be rounding errors here. We just do a simple integer divide
  *          without any adjustments.
@@ -923,7 +923,7 @@ VMM_INT_DECL(uint64_t) TMVirtualToNano(PVM pVM, uint64_t u64VirtualTicks)
  * Converts from virtual ticks to microseconds.
  *
  * @returns microseconds.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   u64VirtualTicks The virtual ticks to convert.
  * @remark  There could be rounding errors here. We just do a simple integer divide
  *          without any adjustments.
@@ -940,7 +940,7 @@ VMM_INT_DECL(uint64_t) TMVirtualToMicro(PVM pVM, uint64_t u64VirtualTicks)
  * Converts from virtual ticks to milliseconds.
  *
  * @returns milliseconds.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   u64VirtualTicks The virtual ticks to convert.
  * @remark  There could be rounding errors here. We just do a simple integer divide
  *          without any adjustments.
@@ -957,7 +957,7 @@ VMM_INT_DECL(uint64_t) TMVirtualToMilli(PVM pVM, uint64_t u64VirtualTicks)
  * Converts from nanoseconds to virtual ticks.
  *
  * @returns virtual ticks.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   u64NanoTS       The nanosecond value ticks to convert.
  * @remark  There could be rounding and overflow errors here.
  */
@@ -973,7 +973,7 @@ VMM_INT_DECL(uint64_t) TMVirtualFromNano(PVM pVM, uint64_t u64NanoTS)
  * Converts from microseconds to virtual ticks.
  *
  * @returns virtual ticks.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   u64MicroTS      The microsecond value ticks to convert.
  * @remark  There could be rounding and overflow errors here.
  */
@@ -989,7 +989,7 @@ VMM_INT_DECL(uint64_t) TMVirtualFromMicro(PVM pVM, uint64_t u64MicroTS)
  * Converts from milliseconds to virtual ticks.
  *
  * @returns virtual ticks.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   u64MilliTS      The millisecond value ticks to convert.
  * @remark  There could be rounding and overflow errors here.
  */
diff --git a/src/VBox/VMM/VMMAll/TRPMAll.cpp b/src/VBox/VMM/VMMAll/TRPMAll.cpp
index 3465db3..085b358 100644
--- a/src/VBox/VMM/VMMAll/TRPMAll.cpp
+++ b/src/VBox/VMM/VMMAll/TRPMAll.cpp
@@ -44,23 +44,11 @@
 
 #if defined(TRPM_TRACK_GUEST_IDT_CHANGES) && !defined(IN_RING0)
 /**
- * \#PF Handler callback for virtual access handler ranges.
+ * @callback_method_impl{FNPGMVIRTPFHANDLER,
+ * \#PF Handler callback for virtual access handler ranges.}
  *
  * Important to realize that a physical page in a range can have aliases, and
  * for ALL and WRITE handlers these will also trigger.
- *
- * @returns VINF_SUCCESS if the handler have carried out the operation.
- * @returns VINF_PGM_HANDLER_DO_DEFAULT if the caller should carry out the access operation.
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the cross context CPU context for the
- *                          calling EMT.
- * @param   GCPtr           The virtual address the guest is writing to. (not correct if it's an alias!)
- * @param   pvPtr           The HC mapping of that address.
- * @param   pvBuf           What the guest is reading/writing.
- * @param   cbBuf           How much it's reading/writing.
- * @param   enmAccessType   The access type.
- * @param   enmOrigin       The origin of this call.
- * @param   pvUser          User argument.
  */
 PGM_ALL_CB2_DECL(VBOXSTRICTRC)
 trpmGuestIDTWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void *pvBuf, size_t cbBuf,
@@ -86,7 +74,7 @@ trpmGuestIDTWriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, void *pvPtr, void
  * If no trap is active active an error code is returned.
  *
  * @returns VBox status code.
- * @param   pVCpu                   Pointer to the VMCPU.
+ * @param   pVCpu                   The cross context virtual CPU structure.
  * @param   pu8TrapNo               Where to store the trap number.
  * @param   penmType                Where to store the trap type
  */
@@ -115,7 +103,7 @@ VMMDECL(int) TRPMQueryTrap(PVMCPU pVCpu, uint8_t *pu8TrapNo, TRPMEVENT *penmType
  * takes an error code when making this request.
  *
  * @returns The current trap number.
- * @param   pVCpu                   Pointer to the VMCPU.
+ * @param   pVCpu                   The cross context virtual CPU structure.
  */
 VMMDECL(uint8_t) TRPMGetTrapNo(PVMCPU pVCpu)
 {
@@ -131,7 +119,7 @@ VMMDECL(uint8_t) TRPMGetTrapNo(PVMCPU pVCpu)
  * takes an error code when making this request.
  *
  * @returns Error code.
- * @param   pVCpu                   Pointer to the VMCPU.
+ * @param   pVCpu                   The cross context virtual CPU structure.
  */
 VMMDECL(RTGCUINT) TRPMGetErrorCode(PVMCPU pVCpu)
 {
@@ -163,7 +151,7 @@ VMMDECL(RTGCUINT) TRPMGetErrorCode(PVMCPU pVCpu)
  * making this request.
  *
  * @returns Fault address associated with the trap.
- * @param   pVCpu                   Pointer to the VMCPU.
+ * @param   pVCpu                   The cross context virtual CPU structure.
  */
 VMMDECL(RTGCUINTPTR) TRPMGetFaultAddress(PVMCPU pVCpu)
 {
@@ -175,13 +163,13 @@ VMMDECL(RTGCUINTPTR) TRPMGetFaultAddress(PVMCPU pVCpu)
 
 /**
  * Gets the instruction-length for the current trap (only relevant for software
- * interrupts and software exceptions #BP and #OF).
+ * interrupts and software exceptions \#BP and \#OF).
  *
  * The caller is responsible for making sure there is an active trap 0x0e when
  * making this request.
  *
  * @returns Fault address associated with the trap.
- * @param   pVCpu                   Pointer to the VMCPU.
+ * @param   pVCpu                   The cross context virtual CPU structure.
  */
 VMMDECL(uint8_t) TRPMGetInstrLength(PVMCPU pVCpu)
 {
@@ -197,7 +185,7 @@ VMMDECL(uint8_t) TRPMGetInstrLength(PVMCPU pVCpu)
  * when making this request.
  *
  * @returns VBox status code.
- * @param   pVCpu                   Pointer to the VMCPU.
+ * @param   pVCpu                   The cross context virtual CPU structure.
  */
 VMMDECL(int) TRPMResetTrap(PVMCPU pVCpu)
 {
@@ -225,7 +213,7 @@ VMMDECL(int) TRPMResetTrap(PVMCPU pVCpu)
  * when making this request.
  *
  * @returns VBox status code.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   u8TrapNo            The trap vector to assert.
  * @param   enmType             Trap type.
  */
@@ -258,7 +246,7 @@ VMMDECL(int) TRPMAssertTrap(PVMCPU pVCpu, uint8_t u8TrapNo, TRPMEVENT enmType)
  * when making this request.
  *
  * @returns VBox status code.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   uCR2                The new fault address.
  * @param   uErrorCode          The error code for the page-fault.
  */
@@ -291,7 +279,7 @@ VMMDECL(int) TRPMAssertXcptPF(PVMCPU pVCpu, RTGCUINTPTR uCR2, RTGCUINT uErrorCod
  * The caller is responsible for making sure there is an active trap
  * which takes an errorcode when making this request.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   uErrorCode          The new error code.
  */
 VMMDECL(void) TRPMSetErrorCode(PVMCPU pVCpu, RTGCUINT uErrorCode)
@@ -317,13 +305,13 @@ VMMDECL(void) TRPMSetErrorCode(PVMCPU pVCpu, RTGCUINT uErrorCode)
 
 
 /**
- * Sets the fault address of the current #PF trap. (This function is for use in
+ * Sets the fault address of the current \#PF trap. (This function is for use in
  * trap handlers and such.)
  *
  * The caller is responsible for making sure there is an active trap 0e
  * when making this request.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   uCR2                The new fault address (cr2 register).
  */
 VMMDECL(void) TRPMSetFaultAddress(PVMCPU pVCpu, RTGCUINTPTR uCR2)
@@ -337,12 +325,12 @@ VMMDECL(void) TRPMSetFaultAddress(PVMCPU pVCpu, RTGCUINTPTR uCR2)
 
 /**
  * Sets the instruction-length of the current trap (relevant for software
- * interrupts and software exceptions like #BP, #OF).
+ * interrupts and software exceptions like \#BP, \#OF).
  *
  * The caller is responsible for making sure there is an active trap 0e
  * when making this request.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   cbInstr             The instruction length.
  */
 VMMDECL(void) TRPMSetInstrLength(PVMCPU pVCpu, uint8_t cbInstr)
@@ -367,7 +355,7 @@ VMMDECL(void) TRPMSetInstrLength(PVMCPU pVCpu, uint8_t cbInstr)
  *
  * @returns true if software interrupt, false if not.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  */
 VMMDECL(bool) TRPMIsSoftwareInterrupt(PVMCPU pVCpu)
 {
@@ -380,7 +368,7 @@ VMMDECL(bool) TRPMIsSoftwareInterrupt(PVMCPU pVCpu)
  * Check if there is an active trap.
  *
  * @returns true if trap active, false if not.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  */
 VMMDECL(bool) TRPMHasTrap(PVMCPU pVCpu)
 {
@@ -393,7 +381,7 @@ VMMDECL(bool) TRPMHasTrap(PVMCPU pVCpu)
  * If no trap is active active an error code is returned.
  *
  * @returns VBox status code.
- * @param   pVCpu                   Pointer to the VMCPU.
+ * @param   pVCpu                   The cross context virtual CPU structure.
  * @param   pu8TrapNo               Where to store the trap number.
  * @param   pEnmType                Where to store the trap type
  * @param   puErrorCode             Where to store the error code associated with some traps.
@@ -432,7 +420,7 @@ VMMDECL(int) TRPMQueryTrapAll(PVMCPU pVCpu, uint8_t *pu8TrapNo, TRPMEVENT *pEnmT
  * Any function which uses temporary trap handlers should
  * probably also use this facility to save the original trap.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(void) TRPMSaveTrap(PVMCPU pVCpu)
 {
@@ -449,7 +437,7 @@ VMMDECL(void) TRPMSaveTrap(PVMCPU pVCpu)
  *
  * Multiple restores of a saved trap is possible.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMDECL(void) TRPMRestoreTrap(PVMCPU pVCpu)
 {
@@ -469,7 +457,7 @@ VMMDECL(void) TRPMRestoreTrap(PVMCPU pVCpu)
  * @returns VBox status code.
  *  or does not return at all (when the trap is actually forwarded)
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegFrame   Pointer to the register frame for the trap.
  * @param   iGate       Trap or interrupt gate number
  * @param   cbInstr     Instruction size (only relevant for software interrupts)
@@ -896,7 +884,7 @@ failure:
  * @retval  VINF_TRPM_XCPT_DISPATCHED if the exception was raised and dispatched for raw-mode execution.
  * @retval  VINF_EM_RESCHEDULE_REM if the exception was dispatched and cannot be executed in raw-mode.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtxCore    The CPU context core.
  * @param   enmXcpt     The exception.
  */
@@ -924,7 +912,7 @@ VMMDECL(int) TRPMRaiseXcpt(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, X86XCPT enmXcpt)
  * @retval  VINF_TRPM_XCPT_DISPATCHED if the exception was raised and dispatched for raw-mode execution.
  * @retval  VINF_EM_RESCHEDULE_REM if the exception was dispatched and cannot be executed in raw-mode.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtxCore    The CPU context core.
  * @param   enmXcpt     The exception.
  * @param   uErr        The error code.
@@ -953,7 +941,7 @@ VMMDECL(int) TRPMRaiseXcptErr(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, X86XCPT enmXc
  * @retval  VINF_TRPM_XCPT_DISPATCHED if the exception was raised and dispatched for raw-mode execution.
  * @retval  VINF_EM_RESCHEDULE_REM if the exception was dispatched and cannot be executed in raw-mode.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtxCore    The CPU context core.
  * @param   enmXcpt     The exception.
  * @param   uErr        The error code.
@@ -978,7 +966,7 @@ VMMDECL(int) TRPMRaiseXcptErrCR2(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, X86XCPT en
  * Clear guest trap/interrupt gate handler
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iTrap       Interrupt/trap number.
  */
 VMMDECL(int) trpmClearGuestTrapHandler(PVM pVM, unsigned iTrap)
diff --git a/src/VBox/VMM/VMMAll/VMAll.cpp b/src/VBox/VMM/VMMAll/VMAll.cpp
index eae1351..101c541 100644
--- a/src/VBox/VMM/VMMAll/VMAll.cpp
+++ b/src/VBox/VMM/VMMAll/VMAll.cpp
@@ -41,9 +41,9 @@
  *    @code
  *    return VM_SET_ERROR(pVM, VERR_OF_YOUR_CHOICE, "descriptive message");
  *    @endcode
- * @param   pVM             Pointer to the VM. Must be non-NULL.
+ * @param   pVM             The cross context VM structure.
  * @param   rc              VBox status code.
- * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+ * @param   SRC_POS         Use RT_SRC_POS.
  * @param   pszFormat       Error message format string.
  * @param   ...             Error message arguments.
  * @thread  Any
@@ -65,9 +65,9 @@ VMMDECL(int) VMSetError(PVM pVM, int rc, RT_SRC_POS_DECL, const char *pszFormat,
  *    @code
  *    return VM_SET_ERROR(pVM, VERR_OF_YOUR_CHOICE, "descriptive message");
  *    @endcode
- * @param   pVM             Pointer to the VM. Must be non-NULL.
+ * @param   pVM             The cross context VM structure.
  * @param   rc              VBox status code.
- * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+ * @param   SRC_POS         Use RT_SRC_POS.
  * @param   pszFormat       Error message format string.
  * @param   args            Error message arguments.
  * @thread  Any
@@ -102,9 +102,9 @@ VMMDECL(int) VMSetErrorV(PVM pVM, int rc, RT_SRC_POS_DECL, const char *pszFormat
  * memory accessible from ring-3. But it's just possible that we might add
  * APIs for retrieving the VMERROR copy later.
  *
- * @param   pVM             Pointer to the VM. Must be non-NULL.
+ * @param   pVM             The cross context VM structure.
  * @param   rc              VBox status code.
- * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+ * @param   SRC_POS         Use RT_SRC_POS.
  * @param   pszFormat       Error message format string.
  * @param   args            Error message arguments.
  * @thread  EMT
@@ -184,7 +184,7 @@ void vmSetErrorCopy(PVM pVM, int rc, RT_SRC_POS_DECL, const char *pszFormat, va_
  * @returns VBox status code. For some flags the status code <b>must</b> be
  *          propagated up the stack.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  *
  * @param   fFlags          Flags indicating which actions to take.
  *                          See VMSETRTERR_FLAGS_* for details on each flag.
@@ -220,7 +220,7 @@ VMMDECL(int) VMSetRuntimeError(PVM pVM, uint32_t fFlags, const char *pszErrorId,
  * @returns VBox status code. For some flags the status code <b>must</b> be
  *          propagated up the stack.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   fFlags          Flags indicating which actions to take. See
  *                          VMSETRTERR_FLAGS_*.
  * @param   pszErrorId      Error ID string.
@@ -297,7 +297,7 @@ VMMDECL(int) VMSetRuntimeErrorV(PVM pVM, uint32_t fFlags, const char *pszErrorId
  * memory accessible from ring-3. But it's just possible that we might add
  * APIs for retrieving the VMRUNTIMEERROR copy later.
  *
- * @param   pVM             Pointer to the VM. Must be non-NULL.
+ * @param   pVM             The cross context VM structure.
  * @param   fFlags          The error flags.
  * @param   pszErrorId      Error ID string.
  * @param   pszFormat       Error message format string.
diff --git a/src/VBox/VMM/VMMAll/VMMAll.cpp b/src/VBox/VMM/VMMAll/VMMAll.cpp
index f7194ff..fc28406 100644
--- a/src/VBox/VMM/VMMAll/VMMAll.cpp
+++ b/src/VBox/VMM/VMMAll/VMMAll.cpp
@@ -42,7 +42,7 @@ static volatile uint32_t g_cFormatTypeUsers = 0;
  *
  * @returns The length of the formatted number.
  * @param   pszBuf              Output buffer with sufficient space.
- * @param   uNum                The number to format.
+ * @param   uNumber             The number to format.
  */
 static unsigned vmmFormatTypeShortNumber(char *pszBuf, uint32_t uNumber)
 {
@@ -174,7 +174,7 @@ void vmmTermFormatTypes(void)
  * by a push/ret/whatever does it become writable.)
  *
  * @returns bottom of the stack.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMM_INT_DECL(RTRCPTR) VMMGetStackRC(PVMCPU pVCpu)
 {
@@ -187,7 +187,7 @@ VMM_INT_DECL(RTRCPTR) VMMGetStackRC(PVMCPU pVCpu)
  *
  * @returns The CPU ID. NIL_VMCPUID if the thread isn't an EMT.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @internal
  */
 VMMDECL(VMCPUID) VMMGetCpuId(PVM pVM)
@@ -244,7 +244,7 @@ VMMDECL(VMCPUID) VMMGetCpuId(PVM pVM)
  *
  * @returns The VMCPU pointer. NULL if not an EMT.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @internal
  */
 VMMDECL(PVMCPU) VMMGetCpu(PVM pVM)
@@ -305,7 +305,7 @@ VMMDECL(PVMCPU) VMMGetCpu(PVM pVM)
  * Returns the VMCPU of the first EMT thread.
  *
  * @returns The VMCPU pointer.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @internal
  */
 VMMDECL(PVMCPU) VMMGetCpu0(PVM pVM)
@@ -320,7 +320,7 @@ VMMDECL(PVMCPU) VMMGetCpu0(PVM pVM)
  *
  * @returns The VMCPU pointer. NULL if idCpu is invalid.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idCpu       The ID of the virtual CPU.
  * @internal
  */
@@ -349,7 +349,7 @@ VMM_INT_DECL(uint32_t) VMMGetSvnRev(void)
  * Queries the current switcher
  *
  * @returns active switcher
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMM_INT_DECL(VMMSWITCHER) VMMGetSwitcher(PVM pVM)
 {
@@ -361,7 +361,7 @@ VMM_INT_DECL(VMMSWITCHER) VMMGetSwitcher(PVM pVM)
  * Checks whether we're in a ring-3 call or not.
  *
  * @returns true / false.
- * @param   pVCpu               The caller's cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @thread  EMT
  */
 VMM_INT_DECL(bool) VMMIsInRing3Call(PVMCPU pVCpu)
@@ -397,7 +397,7 @@ uint32_t vmmGetBuildType(void)
  * Used by GIM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvBuf       The buffer in the hypercall page(s) to be patched.
  * @param   cbBuf       The size of the buffer.
  * @param   pcbWritten  Where to store the number of bytes patched. This
@@ -438,7 +438,7 @@ VMM_INT_DECL(int) VMMPatchHypercall(PVM pVM, void *pvBuf, size_t cbBuf, size_t *
 /**
  * Notifies VMM that paravirtualized hypercalls are now enabled.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 VMM_INT_DECL(void) VMMHypercallsEnable(PVMCPU pVCpu)
 {
@@ -453,7 +453,7 @@ VMM_INT_DECL(void) VMMHypercallsEnable(PVMCPU pVCpu)
 /**
  * Notifies VMM that paravirtualized hypercalls are now disabled.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 VMM_INT_DECL(void) VMMHypercallsDisable(PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMR0/CPUMR0.cpp b/src/VBox/VMM/VMMR0/CPUMR0.cpp
index a894a96..6549e9e 100644
--- a/src/VBox/VMM/VMMR0/CPUMR0.cpp
+++ b/src/VBox/VMM/VMMR0/CPUMR0.cpp
@@ -182,7 +182,7 @@ static DECLCALLBACK(void) cpumR0CheckCpuid(RTCPUID idCpu, void *pvUser1, void *p
  * with VBox.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0_INT_DECL(int) CPUMR0InitVM(PVM pVM)
 {
@@ -321,15 +321,15 @@ VMMR0_INT_DECL(int) CPUMR0InitVM(PVM pVM)
 
 
 /**
- * Trap handler for device-not-available fault (#NM).
+ * Trap handler for device-not-available fault (\#NM).
  * Device not available, FP or (F)WAIT instruction.
  *
  * @returns VBox status code.
  * @retval VINF_SUCCESS           if the guest FPU state is loaded.
  * @retval VINF_EM_RAW_GUEST_TRAP if it is a guest trap.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
 VMMR0_INT_DECL(int) CPUMR0Trap07Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -388,9 +388,9 @@ VMMR0_INT_DECL(int) CPUMR0Trap07Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  *
  * @returns VBox status code.
  *
- * @param pVM       Pointer to the VM.
- * @param pVCpu     Pointer to the VMCPU.
- * @param pCtx      Pointer to the guest-CPU context.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
+ * @param   pCtx    Pointer to the guest-CPU context.
  */
 VMMR0_INT_DECL(int) CPUMR0LoadGuestFPU(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
 {
@@ -448,8 +448,8 @@ VMMR0_INT_DECL(int) CPUMR0LoadGuestFPU(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Save guest FPU/XMM state
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest CPU context.
  */
 VMMR0_INT_DECL(int) CPUMR0SaveGuestFPU(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -519,7 +519,7 @@ VMMR0_INT_DECL(int) CPUMR0SaveGuestFPU(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * DR7 with safe values.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int cpumR0SaveHostDebugState(PVMCPU pVCpu)
 {
@@ -558,7 +558,7 @@ static int cpumR0SaveHostDebugState(PVMCPU pVCpu)
  * (CPUMR0LoadHyperDebugState).
  *
  * @returns true if either guest or hypervisor debug registers were loaded.
- * @param   pVCpu       The cross context CPU structure for the calling EMT.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   fDr6        Whether to include DR6 or not.
  * @thread  EMT(pVCpu)
  */
@@ -629,7 +629,7 @@ VMMR0_INT_DECL(bool) CPUMR0DebugStateMaybeSaveGuestAndRestoreHost(PVMCPU pVCpu,
  * in the CPU context structure is up to date.
  *
  * @returns true if the host registers contains guest values, false if not.
- * @param   pVCpu       The cross context CPU structure for the calling EMT.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   fDr6        Whether to include DR6 or not.
  * @thread  EMT(pVCpu)
  */
@@ -668,7 +668,7 @@ VMMR0_INT_DECL(bool) CPUMR0DebugStateMaybeSaveGuest(PVMCPU pVCpu, bool fDr6)
 /**
  * Lazily sync in the debug state.
  *
- * @param   pVCpu       The cross context CPU structure for the calling EMT.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   fDr6        Whether to include DR6 or not.
  * @thread  EMT(pVCpu)
  */
@@ -706,7 +706,7 @@ VMMR0_INT_DECL(void) CPUMR0LoadGuestDebugState(PVMCPU pVCpu, bool fDr6)
  * Lazily sync in the hypervisor debug state
  *
  * @returns VBox status code.
- * @param   pVCpu       The cross context CPU structure for the calling EMT.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   fDr6        Whether to include DR6 or not.
  * @thread  EMT(pVCpu)
  */
@@ -976,8 +976,7 @@ static void cpumR0UnmapLocalApics(void)
  * disabling and re-enabling the NMIs.  Must be called with disabled preemption
  * or disabled interrupts!
  *
- * @param   pVCpu       Pointer to the cross context CPU structure of the
- *                      calling EMT.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   iHostCpuSet The CPU set index of the current host CPU.
  */
 VMMR0_INT_DECL(void) CPUMR0SetLApic(PVMCPU pVCpu, uint32_t iHostCpuSet)
diff --git a/src/VBox/VMM/VMMR0/GIMR0.cpp b/src/VBox/VMM/VMMR0/GIMR0.cpp
index cf82b9d..778c158 100644
--- a/src/VBox/VMM/VMMR0/GIMR0.cpp
+++ b/src/VBox/VMM/VMMR0/GIMR0.cpp
@@ -31,7 +31,7 @@
  * Does ring-0 per-VM GIM initialization.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR0_INT_DECL(int) GIMR0InitVM(PVM pVM)
 {
@@ -57,7 +57,7 @@ VMMR0_INT_DECL(int) GIMR0InitVM(PVM pVM)
  * Does ring-0 per-VM GIM termination.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR0_INT_DECL(int) GIMR0TermVM(PVM pVM)
 {
@@ -90,7 +90,7 @@ VMMR0_INT_DECL(int) GIMR0TermVM(PVM pVM)
  * @retval VERR_GIM_PVTSC_NOT_IN_USE if the GIM provider supports paravirt. TSC
  *         but the guest isn't currently using it.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   u64Offset   The computed TSC offset.
  *
  * @thread EMT(pVCpu)
diff --git a/src/VBox/VMM/VMMR0/GIMR0Hv.cpp b/src/VBox/VMM/VMMR0/GIMR0Hv.cpp
index 44b1a36..c743800 100644
--- a/src/VBox/VMM/VMMR0/GIMR0Hv.cpp
+++ b/src/VBox/VMM/VMMR0/GIMR0Hv.cpp
@@ -88,7 +88,7 @@ static void gimR0HvPageFree(PRTR0MEMOBJ pMemObj, PRTR0PTR ppVirt, PRTHCPHYS pHCP
  * Updates Hyper-V's reference TSC page.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   u64Offset   The computed TSC offset.
  * @thread  EMT.
  */
@@ -145,7 +145,7 @@ VMM_INT_DECL(int) gimR0HvUpdateParavirtTsc(PVM pVM, uint64_t u64Offset)
  * Does ring-0 per-VM GIM Hyper-V initialization.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR0_INT_DECL(int) gimR0HvInitVM(PVM pVM)
 {
@@ -164,7 +164,7 @@ VMMR0_INT_DECL(int) gimR0HvInitVM(PVM pVM)
  * Does ring-0 per-VM GIM Hyper-V termination.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR0_INT_DECL(int) gimR0HvTermVM(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR0/GIMR0Kvm.cpp b/src/VBox/VMM/VMMR0/GIMR0Kvm.cpp
index b3171b2..ee07819 100644
--- a/src/VBox/VMM/VMMR0/GIMR0Kvm.cpp
+++ b/src/VBox/VMM/VMMR0/GIMR0Kvm.cpp
@@ -35,8 +35,8 @@
  * Updates KVM's system time information globally for all VCPUs.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @thread  EMT.
  * @remarks Can be called with preemption disabled!
  */
@@ -84,7 +84,7 @@ VMM_INT_DECL(int) gimR0KvmUpdateSystemTime(PVM pVM, PVMCPU pVCpu)
  * Does ring-0 per-VM GIM KVM initialization.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR0_INT_DECL(int) gimR0KvmInitVM(PVM pVM)
 {
@@ -103,7 +103,7 @@ VMMR0_INT_DECL(int) gimR0KvmInitVM(PVM pVM)
  * Does ring-0 per-VM GIM KVM termination.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR0_INT_DECL(int) gimR0KvmTermVM(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR0/GMMR0.cpp b/src/VBox/VMM/VMMR0/GMMR0.cpp
index 7089ee3..d1cc175 100644
--- a/src/VBox/VMM/VMMR0/GMMR0.cpp
+++ b/src/VBox/VMM/VMMR0/GMMR0.cpp
@@ -111,9 +111,9 @@
  * @subsection sub_gmm_locking  Serializing
  *
  * One simple fast mutex will be employed in the initial implementation, not
- * two as mentioned in @ref subsec_pgmPhys_Serializing.
+ * two as mentioned in @ref sec_pgmPhys_Serializing.
  *
- * @see @ref subsec_pgmPhys_Serializing
+ * @see @ref sec_pgmPhys_Serializing
  *
  *
  * @section sec_gmm_overcommit  Memory Over-Commitment Management
@@ -521,8 +521,8 @@ typedef struct GMM
     RTLISTANCHOR        ChunkList;
 
     /** The maximum number of pages we're allowed to allocate.
-     * @gcfgm   64-bit GMM/MaxPages Direct.
-     * @gcfgm   32-bit GMM/PctPages Relative to the number of host pages. */
+     * @gcfgm{GMM/MaxPages,64-bit, Direct.}
+     * @gcfgm{GMM/PctPages,32-bit, Relative to the number of host pages.} */
     uint64_t            cMaxPages;
     /** The number of pages that has been reserved.
      * The deal is that cReservedPages - cOverCommittedPages <= cMaxPages. */
@@ -1131,7 +1131,7 @@ static int gmmR0ChunkMutexAcquire(PGMMR0CHUNKMTXSTATE pMtxState, PGMM pGMM, PGMM
  * Releases the GMM giant lock.
  *
  * @returns Assert status code from RTSemFastMutexRequest.
- * @param   pGMM        Pointer to the GMM instance.
+ * @param   pMtxState   Pointer to the chunk mutex state.
  * @param   pChunk      Pointer to the chunk if it's still
  *                      alive, NULL if it isn't.  This is used to deassociate
  *                      the chunk from the mutex on the way out so a new one
@@ -1539,7 +1539,7 @@ static bool gmmR0CleanupVMScanChunk(PGMM pGMM, PGVM pGVM, PGMMCHUNK pChunk)
  * @retval  VERR_GMM_MEMORY_RESERVATION_DECLINED
  * @retval  VERR_GMM_
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idCpu           The VCPU id.
  * @param   cBasePages      The number of pages that may be allocated for the base RAM and ROMs.
  *                          This does not include MMIO2 and similar.
@@ -1616,7 +1616,7 @@ GMMR0DECL(int) GMMR0InitialReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePag
  * VMMR0 request wrapper for GMMR0InitialReservation.
  *
  * @returns see GMMR0InitialReservation.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idCpu           The VCPU id.
  * @param   pReq            Pointer to the request packet.
  */
@@ -1639,7 +1639,7 @@ GMMR0DECL(int) GMMR0InitialReservationReq(PVM pVM, VMCPUID idCpu, PGMMINITIALRES
  * @returns VBox status code.
  * @retval  VERR_GMM_MEMORY_RESERVATION_DECLINED
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idCpu           The VCPU id.
  * @param   cBasePages      The number of pages that may be allocated for the base RAM and ROMs.
  *                          This does not include MMIO2 and similar.
@@ -1710,7 +1710,7 @@ GMMR0DECL(int) GMMR0UpdateReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePage
  * VMMR0 request wrapper for GMMR0UpdateReservation.
  *
  * @returns see GMMR0UpdateReservation.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idCpu           The VCPU id.
  * @param   pReq            Pointer to the request packet.
  */
@@ -1950,6 +1950,8 @@ DECLINLINE(void) gmmR0LinkChunk(PGMMCHUNK pChunk, PGMMCHUNKFREESET pSet)
  *
  * If no free entries, it's not linked into any list.
  *
+ * @param   pGMM        Pointer to the GMM instance.
+ * @param   pGVM        Pointer to the kernel-only VM instace data.
  * @param   pChunk      The allocation chunk.
  */
 DECLINLINE(void) gmmR0SelectSetAndLinkChunk(PGMM pGMM, PGVM pGVM, PGMMCHUNK pChunk)
@@ -2078,12 +2080,12 @@ static void gmmR0AllocatePage(PGMMCHUNK pChunk, uint32_t hGVM, PGMMPAGEDESC pPag
  * Picks the free pages from a chunk.
  *
  * @returns The new page descriptor table index.
- * @param   pGMM                Pointer to the GMM instance data.
- * @param   hGVM                The global VM handle.
- * @param   pChunk              The chunk.
- * @param   iPage               The current page descriptor table index.
- * @param   cPages              The total number of pages to allocate.
- * @param   paPages             The page descriptor table (input + ouput).
+ * @param   pChunk      The chunk.
+ * @param   hGVM        The affinity of the chunk. NIL_GVM_HANDLE for no
+ *                      affinity.
+ * @param   iPage       The current page descriptor table index.
+ * @param   cPages      The total number of pages to allocate.
+ * @param   paPages     The page descriptor table (input + ouput).
  */
 static uint32_t gmmR0AllocatePagesFromChunk(PGMMCHUNK pChunk, uint16_t const hGVM, uint32_t iPage, uint32_t cPages,
                                             PGMMPAGEDESC paPages)
@@ -2106,13 +2108,13 @@ static uint32_t gmmR0AllocatePagesFromChunk(PGMMCHUNK pChunk, uint16_t const hGV
  *
  * @returns VBox status code.  On success, the giant GMM lock will be held, the
  *          caller must release it (ugly).
- * @param   pGMM            Pointer to the GMM instance.
- * @param   pSet            Pointer to the set.
- * @param   MemObj          The memory object for the chunk.
- * @param   hGVM            The affinity of the chunk. NIL_GVM_HANDLE for no
- *                          affinity.
- * @param   fChunkFlags     The chunk flags, GMM_CHUNK_FLAGS_XXX.
- * @param   ppChunk         Chunk address (out).  Optional.
+ * @param   pGMM        Pointer to the GMM instance.
+ * @param   pSet        Pointer to the set.
+ * @param   MemObj      The memory object for the chunk.
+ * @param   hGVM        The affinity of the chunk. NIL_GVM_HANDLE for no
+ *                      affinity.
+ * @param   fChunkFlags The chunk flags, GMM_CHUNK_FLAGS_XXX.
+ * @param   ppChunk     Chunk address (out).  Optional.
  *
  * @remarks The caller must not own the giant GMM mutex.
  *          The giant GMM mutex will be acquired and returned acquired in
@@ -2195,13 +2197,13 @@ static int gmmR0RegisterChunk(PGMM pGMM, PGMMCHUNKFREESET pSet, RTR0MEMOBJ MemOb
  * @note    This will leave the giant mutex while allocating the new chunk!
  *
  * @returns VBox status code.
- * @param   pGMM                Pointer to the GMM instance data.
- * @param   pGVM                Pointer to the kernel-only VM instace data.
- * @param   pSet                Pointer to the free set.
- * @param   cPages              The number of pages requested.
- * @param   paPages             The page descriptor table (input + output).
- * @param   piPage              The pointer to the page descriptor table index
- *                              variable. This will be updated.
+ * @param   pGMM        Pointer to the GMM instance data.
+ * @param   pGVM        Pointer to the kernel-only VM instace data.
+ * @param   pSet        Pointer to the free set.
+ * @param   cPages      The number of pages requested.
+ * @param   paPages     The page descriptor table (input + output).
+ * @param   piPage      The pointer to the page descriptor table index variable.
+ *                      This will be updated.
  */
 static int gmmR0AllocateChunkNew(PGMM pGMM, PGVM pGVM, PGMMCHUNKFREESET pSet, uint32_t cPages,
                                  PGMMPAGEDESC paPages, uint32_t *piPage)
@@ -2238,11 +2240,11 @@ static int gmmR0AllocateChunkNew(PGMM pGMM, PGVM pGVM, PGMMCHUNKFREESET pSet, ui
  * As a last restort we'll pick any page we can get.
  *
  * @returns The new page descriptor table index.
- * @param   pSet                The set to pick from.
- * @param   pGVM                Pointer to the global VM structure.
- * @param   iPage               The current page descriptor table index.
- * @param   cPages              The total number of pages to allocate.
- * @param   paPages             The page descriptor table (input + ouput).
+ * @param   pSet        The set to pick from.
+ * @param   pGVM        Pointer to the global VM structure.
+ * @param   iPage       The current page descriptor table index.
+ * @param   cPages      The total number of pages to allocate.
+ * @param   paPages     The page descriptor table (input + ouput).
  */
 static uint32_t gmmR0AllocatePagesIndiscriminately(PGMMCHUNKFREESET pSet, PGVM pGVM,
                                                    uint32_t iPage, uint32_t cPages, PGMMPAGEDESC paPages)
@@ -2270,11 +2272,11 @@ static uint32_t gmmR0AllocatePagesIndiscriminately(PGMMCHUNKFREESET pSet, PGVM p
  * Pick pages from empty chunks on the same NUMA node.
  *
  * @returns The new page descriptor table index.
- * @param   pSet                The set to pick from.
- * @param   pGVM                Pointer to the global VM structure.
- * @param   iPage               The current page descriptor table index.
- * @param   cPages              The total number of pages to allocate.
- * @param   paPages             The page descriptor table (input + ouput).
+ * @param   pSet        The set to pick from.
+ * @param   pGVM        Pointer to the global VM structure.
+ * @param   iPage       The current page descriptor table index.
+ * @param   cPages      The total number of pages to allocate.
+ * @param   paPages     The page descriptor table (input + ouput).
  */
 static uint32_t gmmR0AllocatePagesFromEmptyChunksOnSameNode(PGMMCHUNKFREESET pSet, PGVM pGVM,
                                                             uint32_t iPage, uint32_t cPages, PGMMPAGEDESC paPages)
@@ -2309,11 +2311,11 @@ static uint32_t gmmR0AllocatePagesFromEmptyChunksOnSameNode(PGMMCHUNKFREESET pSe
  * Pick pages from non-empty chunks on the same NUMA node.
  *
  * @returns The new page descriptor table index.
- * @param   pSet                The set to pick from.
- * @param   pGVM                Pointer to the global VM structure.
- * @param   iPage               The current page descriptor table index.
- * @param   cPages              The total number of pages to allocate.
- * @param   paPages             The page descriptor table (input + ouput).
+ * @param   pSet        The set to pick from.
+ * @param   pGVM        Pointer to the global VM structure.
+ * @param   iPage       The current page descriptor table index.
+ * @param   cPages      The total number of pages to allocate.
+ * @param   paPages     The page descriptor table (input + ouput).
  */
 static uint32_t gmmR0AllocatePagesFromSameNode(PGMMCHUNKFREESET pSet, PGVM pGVM,
                                                uint32_t iPage, uint32_t cPages, PGMMPAGEDESC paPages)
@@ -2349,12 +2351,12 @@ static uint32_t gmmR0AllocatePagesFromSameNode(PGMMCHUNKFREESET pSet, PGVM pGVM,
  * Pick pages that are in chunks already associated with the VM.
  *
  * @returns The new page descriptor table index.
- * @param   pGMM                Pointer to the GMM instance data.
- * @param   pGVM                Pointer to the global VM structure.
- * @param   pSet                The set to pick from.
- * @param   iPage               The current page descriptor table index.
- * @param   cPages              The total number of pages to allocate.
- * @param   paPages             The page descriptor table (input + ouput).
+ * @param   pGMM        Pointer to the GMM instance data.
+ * @param   pGVM        Pointer to the global VM structure.
+ * @param   pSet        The set to pick from.
+ * @param   iPage       The current page descriptor table index.
+ * @param   cPages      The total number of pages to allocate.
+ * @param   paPages     The page descriptor table (input + ouput).
  */
 static uint32_t gmmR0AllocatePagesAssociatedWithVM(PGMM pGMM, PGVM pGVM, PGMMCHUNKFREESET pSet,
                                                    uint32_t iPage, uint32_t cPages, PGMMPAGEDESC paPages)
@@ -2403,10 +2405,10 @@ static uint32_t gmmR0AllocatePagesAssociatedWithVM(PGMM pGMM, PGVM pGVM, PGMMCHU
  * Pick pages in bound memory mode.
  *
  * @returns The new page descriptor table index.
- * @param   pGVM                Pointer to the global VM structure.
- * @param   iPage               The current page descriptor table index.
- * @param   cPages              The total number of pages to allocate.
- * @param   paPages             The page descriptor table (input + ouput).
+ * @param   pGVM        Pointer to the global VM structure.
+ * @param   iPage       The current page descriptor table index.
+ * @param   cPages      The total number of pages to allocate.
+ * @param   paPages     The page descriptor table (input + ouput).
  */
 static uint32_t gmmR0AllocatePagesInBoundMode(PGVM pGVM, uint32_t iPage, uint32_t cPages, PGMMPAGEDESC paPages)
 {
@@ -2490,12 +2492,12 @@ static bool gmmR0ShouldAllocatePagesInOtherChunksBecauseOfLotsFree(PGMM pGMM)
  * @retval  VERR_GMM_HIT_VM_ACCOUNT_LIMIT if we've hit the VM account limit,
  *          that is we're trying to allocate more than we've reserved.
  *
- * @param   pGMM                Pointer to the GMM instance data.
- * @param   pGVM                Pointer to the VM.
- * @param   cPages              The number of pages to allocate.
- * @param   paPages             Pointer to the page descriptors.
- *                              See GMMPAGEDESC for details on what is expected on input.
- * @param   enmAccount          The account to charge.
+ * @param   pGMM        Pointer to the GMM instance data.
+ * @param   pGVM        Pointer to the VM.
+ * @param   cPages      The number of pages to allocate.
+ * @param   paPages     Pointer to the page descriptors. See GMMPAGEDESC for
+ *                      details on what is expected on input.
+ * @param   enmAccount  The account to charge.
  *
  * @remarks Call takes the giant GMM lock.
  */
@@ -2718,7 +2720,7 @@ static int gmmR0AllocatePagesNew(PGMM pGMM, PGVM pGVM, uint32_t cPages, PGMMPAGE
  * @retval  VERR_GMM_HIT_VM_ACCOUNT_LIMIT if we've hit the VM account limit,
  *          that is we're trying to allocate more than we've reserved.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   idCpu               The VCPU id.
  * @param   cPagesToUpdate      The number of pages to update (starting from the head).
  * @param   cPagesToAlloc       The number of pages to allocate (starting from the head).
@@ -2913,12 +2915,13 @@ GMMR0DECL(int) GMMR0AllocateHandyPages(PVM pVM, VMCPUID idCpu, uint32_t cPagesTo
  * @retval  VERR_GMM_HIT_VM_ACCOUNT_LIMIT if we've hit the VM account limit,
  *          that is we're trying to allocate more than we've reserved.
  *
- * @param   pVM                 Pointer to the VM.
- * @param   idCpu               The VCPU id.
- * @param   cPages              The number of pages to allocate.
- * @param   paPages             Pointer to the page descriptors.
- *                              See GMMPAGEDESC for details on what is expected on input.
- * @param   enmAccount          The account to charge.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   cPages      The number of pages to allocate.
+ * @param   paPages     Pointer to the page descriptors.
+ *                      See GMMPAGEDESC for details on what is expected on
+ *                      input.
+ * @param   enmAccount  The account to charge.
  *
  * @thread  EMT.
  */
@@ -2978,9 +2981,9 @@ GMMR0DECL(int) GMMR0AllocatePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMP
  * VMMR0 request wrapper for GMMR0AllocatePages.
  *
  * @returns see GMMR0AllocatePages.
- * @param   pVM             Pointer to the VM.
- * @param   idCpu           The VCPU id.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int) GMMR0AllocatePagesReq(PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq)
 {
@@ -3013,9 +3016,12 @@ GMMR0DECL(int) GMMR0AllocatePagesReq(PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESRE
  * @retval  VERR_GMM_HIT_VM_ACCOUNT_LIMIT if we've hit the VM account limit,
  *          that is we're trying to allocate more than we've reserved.
  * @returns see GMMR0AllocatePages.
- * @param   pVM             Pointer to the VM.
- * @param   idCpu           The VCPU id.
- * @param   cbPage          Large page size.
+ *
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   cbPage      Large page size.
+ * @param   pIdPage     Where to return the GMM page ID of the page.
+ * @param   pHCPhys     Where to return the host physical address of the page.
  */
 GMMR0DECL(int)  GMMR0AllocateLargePage(PVM pVM, VMCPUID idCpu, uint32_t cbPage, uint32_t *pIdPage, RTHCPHYS *pHCPhys)
 {
@@ -3118,9 +3124,9 @@ GMMR0DECL(int)  GMMR0AllocateLargePage(PVM pVM, VMCPUID idCpu, uint32_t cbPage,
  * Free a large page.
  *
  * @returns VBox status code:
- * @param   pVM             Pointer to the VM.
- * @param   idCpu           The VCPU id.
- * @param   idPage          The large page id.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   idPage      The large page id.
  */
 GMMR0DECL(int)  GMMR0FreeLargePage(PVM pVM, VMCPUID idCpu, uint32_t idPage)
 {
@@ -3185,9 +3191,9 @@ GMMR0DECL(int)  GMMR0FreeLargePage(PVM pVM, VMCPUID idCpu, uint32_t idPage)
  * VMMR0 request wrapper for GMMR0FreeLargePage.
  *
  * @returns see GMMR0FreeLargePage.
- * @param   pVM             Pointer to the VM.
- * @param   idCpu           The VCPU id.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int) GMMR0FreeLargePageReq(PVM pVM, VMCPUID idCpu, PGMMFREELARGEPAGEREQ pReq)
 {
@@ -3412,11 +3418,11 @@ DECLINLINE(void) gmmR0FreePrivatePage(PGMM pGMM, PGVM pGVM, uint32_t idPage, PGM
  * @returns VBox status code:
  * @retval  xxx
  *
- * @param   pGMM                Pointer to the GMM instance data.
- * @param   pGVM                Pointer to the VM.
- * @param   cPages              The number of pages to free.
- * @param   paPages             Pointer to the page descriptors.
- * @param   enmAccount          The account this relates to.
+ * @param   pGMM        Pointer to the GMM instance data.
+ * @param   pGVM        Pointer to the VM.
+ * @param   cPages      The number of pages to free.
+ * @param   paPages     Pointer to the page descriptors.
+ * @param   enmAccount  The account this relates to.
  */
 static int gmmR0FreePages(PGMM pGMM, PGVM pGVM, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount)
 {
@@ -3546,11 +3552,12 @@ static int gmmR0FreePages(PGMM pGMM, PGVM pGVM, uint32_t cPages, PGMMFREEPAGEDES
  * @returns VBox status code:
  * @retval  xxx
  *
- * @param   pVM                 Pointer to the VM.
- * @param   idCpu               The VCPU id.
- * @param   cPages              The number of pages to allocate.
- * @param   paPages             Pointer to the page descriptors containing the Page IDs for each page.
- * @param   enmAccount          The account this relates to.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   cPages      The number of pages to allocate.
+ * @param   paPages     Pointer to the page descriptors containing the page IDs
+ *                      for each page.
+ * @param   enmAccount  The account this relates to.
  * @thread  EMT.
  */
 GMMR0DECL(int) GMMR0FreePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount)
@@ -3597,9 +3604,9 @@ GMMR0DECL(int) GMMR0FreePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEP
  * VMMR0 request wrapper for GMMR0FreePages.
  *
  * @returns see GMMR0FreePages.
- * @param   pVM             Pointer to the VM.
- * @param   idCpu           The VCPU id.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int) GMMR0FreePagesReq(PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq)
 {
@@ -3635,7 +3642,7 @@ GMMR0DECL(int) GMMR0FreePagesReq(PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq)
  *          balloon some other VM).  (For standard deflate we have little choice
  *          but to hope the VM won't use the memory that was returned to it.)
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   idCpu               The VCPU id.
  * @param   enmAction           Inflate/deflate/reset.
  * @param   cBalloonedPages     The number of pages that was ballooned.
@@ -3767,9 +3774,9 @@ GMMR0DECL(int) GMMR0BalloonedPages(PVM pVM, VMCPUID idCpu, GMMBALLOONACTION enmA
  * VMMR0 request wrapper for GMMR0BalloonedPages.
  *
  * @returns see GMMR0BalloonedPages.
- * @param   pVM             Pointer to the VM.
- * @param   idCpu           The VCPU id.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int) GMMR0BalloonedPagesReq(PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq)
 {
@@ -3789,8 +3796,8 @@ GMMR0DECL(int) GMMR0BalloonedPagesReq(PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGES
  * Return memory statistics for the hypervisor
  *
  * @returns VBox status code:
- * @param   pVM             Pointer to the VM.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int) GMMR0QueryHypervisorMemoryStatsReq(PVM pVM, PGMMMEMSTATSREQ pReq)
 {
@@ -3822,9 +3829,9 @@ GMMR0DECL(int) GMMR0QueryHypervisorMemoryStatsReq(PVM pVM, PGMMMEMSTATSREQ pReq)
  * Return memory statistics for the VM
  *
  * @returns VBox status code:
- * @param   pVM             Pointer to the VM.
- * @parma   idCpu           Cpu id.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       Cpu id.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int)  GMMR0QueryMemoryStatsReq(PVM pVM, VMCPUID idCpu, PGMMMEMSTATSREQ pReq)
 {
@@ -3920,6 +3927,8 @@ static int gmmR0UnmapChunkLocked(PGMM pGMM, PGVM pGVM, PGMMCHUNK pChunk)
  * @param   pGMM        Pointer to the GMM instance data.
  * @param   pGVM        Pointer to the Global VM structure.
  * @param   pChunk      Pointer to the chunk to be unmapped.
+ * @param   fRelaxedSem Whether we can release the semaphore while doing the
+ *                      mapping (@c true) or not.
  */
 static int gmmR0UnmapChunk(PGMM pGMM, PGVM pGVM, PGMMCHUNK pChunk, bool fRelaxedSem)
 {
@@ -4111,7 +4120,7 @@ static bool gmmR0IsChunkMapped(PGMM pGMM, PGVM pGVM, PGMMCHUNK pChunk, PRTR3PTR
  * when the ring-3 mapping cache is full.
  *
  * @returns VBox status code.
- * @param   pVM             The VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idChunkMap      The chunk to map. NIL_GMM_CHUNKID if nothing to map.
  * @param   idChunkUnmap    The chunk to unmap. NIL_GMM_CHUNKID if nothing to unmap.
  * @param   ppvR3           Where to store the address of the mapped chunk. NULL is ok if nothing to map.
@@ -4203,8 +4212,8 @@ GMMR0DECL(int) GMMR0MapUnmapChunk(PVM pVM, uint32_t idChunkMap, uint32_t idChunk
  * VMMR0 request wrapper for GMMR0MapUnmapChunk.
  *
  * @returns see GMMR0MapUnmapChunk.
- * @param   pVM             Pointer to the VM.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int)  GMMR0MapUnmapChunkReq(PVM pVM, PGMMMAPUNMAPCHUNKREQ pReq)
 {
@@ -4226,9 +4235,9 @@ GMMR0DECL(int)  GMMR0MapUnmapChunkReq(PVM pVM, PGMMMAPUNMAPCHUNKREQ pReq)
  * will be locked down and used by the GMM when the GM asks for pages.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   idCpu           The VCPU id.
- * @param   pvR3            Pointer to the chunk size memory block to lock down.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   pvR3        Pointer to the chunk size memory block to lock down.
  */
 GMMR0DECL(int) GMMR0SeedChunk(PVM pVM, VMCPUID idCpu, RTR3PTR pvR3)
 {
@@ -4279,8 +4288,9 @@ GMMR0DECL(int) GMMR0SeedChunk(PVM pVM, VMCPUID idCpu, RTR3PTR pvR3)
  * The purpose is making sure that a page doesn't change.
  *
  * @returns Checksum, 0 on failure.
- * @param   GMM                 The GMM instance data.
- * @param   idPage              The page ID.
+ * @param   pGMM        The GMM instance data.
+ * @param   pGVM        Pointer to the kernel-only VM instace data.
+ * @param   idPage      The page ID.
  */
 static uint32_t gmmR0StrictPageChecksum(PGMM pGMM, PGVM pGVM, uint32_t idPage)
 {
@@ -4318,8 +4328,10 @@ static uint32_t gmmR0ShModCalcHash(const char *pszModuleName, const char *pszVer
  * @param   uHash           The hash as calculated by gmmR0ShModCalcHash.
  * @param   cbModule        The module size.
  * @param   enmGuestOS      The guest OS type.
+ * @param   cRegions        The number of regions.
  * @param   pszModuleName   The module name.
  * @param   pszVersion      The module version.
+ * @param   paRegions       The region descriptions.
  */
 static PGMMSHAREDMODULE gmmR0ShModFindGlobal(PGMM pGMM, uint32_t uHash, uint32_t cbModule, VBOXOSFAMILY enmGuestOS,
                                              uint32_t cRegions, const char *pszModuleName, const char *pszVersion,
@@ -4507,15 +4519,15 @@ static void gmmR0ShModDeletePerVM(PGMM pGMM, PGVM pGVM, PGMMSHAREDMODULEPERVM pR
  * Registers a new shared module for the VM.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
- * @param   idCpu               The VCPU id.
- * @param   enmGuestOS          The guest OS type.
- * @param   pszModuleName       The module name.
- * @param   pszVersion          The module version.
- * @param   GCPtrModBase        The module base address.
- * @param   cbModule            The module size.
- * @param   cRegions            The mumber of shared region descriptors.
- * @param   paRegions           Pointer to an array of shared region(s).
+ * @param   pVM             The cross context VM structure.
+ * @param   idCpu           The VCPU id.
+ * @param   enmGuestOS      The guest OS type.
+ * @param   pszModuleName   The module name.
+ * @param   pszVersion      The module version.
+ * @param   GCPtrModBase    The module base address.
+ * @param   cbModule        The module size.
+ * @param   cRegions        The mumber of shared region descriptors.
+ * @param   paRegions       Pointer to an array of shared region(s).
  */
 GMMR0DECL(int) GMMR0RegisterSharedModule(PVM pVM, VMCPUID idCpu, VBOXOSFAMILY enmGuestOS, char *pszModuleName,
                                          char *pszVersion, RTGCPTR GCPtrModBase, uint32_t cbModule,
@@ -4654,9 +4666,9 @@ GMMR0DECL(int) GMMR0RegisterSharedModule(PVM pVM, VMCPUID idCpu, VBOXOSFAMILY en
  * VMMR0 request wrapper for GMMR0RegisterSharedModule.
  *
  * @returns see GMMR0RegisterSharedModule.
- * @param   pVM             Pointer to the VM.
- * @param   idCpu           The VCPU id.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int)  GMMR0RegisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq)
 {
@@ -4678,12 +4690,12 @@ GMMR0DECL(int)  GMMR0RegisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMREGISTE
  * Unregisters a shared module for the VM
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
- * @param   idCpu               The VCPU id.
- * @param   pszModuleName       The module name.
- * @param   pszVersion          The module version.
- * @param   GCPtrModBase        The module base address.
- * @param   cbModule            The module size.
+ * @param   pVM             The cross context VM structure.
+ * @param   idCpu           The VCPU id.
+ * @param   pszModuleName   The module name.
+ * @param   pszVersion      The module version.
+ * @param   GCPtrModBase    The module base address.
+ * @param   cbModule        The module size.
  */
 GMMR0DECL(int) GMMR0UnregisterSharedModule(PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion,
                                            RTGCPTR GCPtrModBase, uint32_t cbModule)
@@ -4747,9 +4759,9 @@ GMMR0DECL(int) GMMR0UnregisterSharedModule(PVM pVM, VMCPUID idCpu, char *pszModu
  * VMMR0 request wrapper for GMMR0UnregisterSharedModule.
  *
  * @returns see GMMR0UnregisterSharedModule.
- * @param   pVM             Pointer to the VM.
- * @param   idCpu           The VCPU id.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int)  GMMR0UnregisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq)
 {
@@ -4793,6 +4805,7 @@ DECLINLINE(void) gmmR0UseSharedPage(PGMM pGMM, PGVM pGVM, PGMMPAGE pPage)
  * @param   HCPhys      Host physical address
  * @param   idPage      The Page ID
  * @param   pPage       The page structure.
+ * @param   pPageDesc   Shared page descriptor
  */
 DECLINLINE(void) gmmR0ConvertToSharedPage(PGMM pGMM, PGVM pGVM, RTHCPHYS HCPhys, uint32_t idPage, PGMMPAGE pPage,
                                           PGMMSHAREDPAGEDESC pPageDesc)
@@ -4858,12 +4871,11 @@ static int gmmR0SharedModuleCheckPageFirstTime(PGMM pGMM, PGVM pGVM, PGMMSHAREDM
  * @remarks ASSUMES the caller has acquired the GMM semaphore!!
  *
  * @returns VBox status code.
- * @param   pGMM                Pointer to the GMM instance data.
- * @param   pGVM                Pointer to the GVM instance data.
- * @param   pModule             Module description
- * @param   idxRegion           Region index
- * @param   idxPage             Page index
- * @param   paPageDesc          Page descriptor
+ * @param   pGVM        Pointer to the GVM instance data.
+ * @param   pModule     Module description
+ * @param   idxRegion   Region index
+ * @param   idxPage     Page index
+ * @param   pPageDesc   Page descriptor
  */
 GMMR0DECL(int) GMMR0SharedModuleCheckPage(PGVM pGVM, PGMMSHAREDMODULE pModule, uint32_t idxRegion, uint32_t idxPage,
                                           PGMMSHAREDPAGEDESC pPageDesc)
@@ -5027,8 +5039,8 @@ static DECLCALLBACK(int) gmmR0CleanupSharedModule(PAVLGCPTRNODECORE pNode, void
  * This is called without taking the GMM lock so that it can be yielded as
  * needed here.
  *
- * @param   pGMM                The GMM handle.
- * @param   pGVM                The global VM handle.
+ * @param   pGMM        The GMM handle.
+ * @param   pGVM        The global VM handle.
  */
 static void gmmR0SharedModuleCleanup(PGMM pGMM, PGVM pGVM)
 {
@@ -5052,8 +5064,8 @@ static void gmmR0SharedModuleCleanup(PGMM pGMM, PGVM pGVM)
  * Removes all shared modules for the specified VM
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
- * @param   idCpu               The VCPU id.
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       The VCPU id.
  */
 GMMR0DECL(int) GMMR0ResetSharedModules(PVM pVM, VMCPUID idCpu)
 {
@@ -5122,7 +5134,7 @@ static DECLCALLBACK(int) gmmR0CheckSharedModule(PAVLGCPTRNODECORE pNode, void *p
  * Setup for a GMMR0CheckSharedModules call (to allow log flush jumps back to ring 3)
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 GMMR0DECL(int) GMMR0CheckSharedModulesStart(PVM pVM)
 {
@@ -5148,7 +5160,7 @@ GMMR0DECL(int) GMMR0CheckSharedModulesStart(PVM pVM)
  * Clean up after a GMMR0CheckSharedModules call (to allow log flush jumps back to ring 3)
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 GMMR0DECL(int) GMMR0CheckSharedModulesEnd(PVM pVM)
 {
@@ -5168,8 +5180,8 @@ GMMR0DECL(int) GMMR0CheckSharedModulesEnd(PVM pVM)
  * Check all shared modules for the specified VM.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 GMMR0DECL(int) GMMR0CheckSharedModules(PVM pVM, PVMCPU pVCpu)
 {
@@ -5269,8 +5281,8 @@ static DECLCALLBACK(int) gmmR0FindDupPageInChunk(PAVLU32NODECORE pNode, void *pv
  * Find a duplicate of the specified page in other active VMs
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
- * @param   pReq                Pointer to the request packet.
+ * @param   pVM         The cross context VM structure.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int) GMMR0FindDuplicatePageReq(PVM pVM, PGMMFINDDUPLICATEPAGEREQ pReq)
 {
@@ -5343,7 +5355,7 @@ GMMR0DECL(int) GMMR0FindDuplicatePageReq(PVM pVM, PGMMFINDDUPLICATEPAGEREQ pReq)
  *
  * @param   pStats      Where to put the statistics.
  * @param   pSession    The current session.
- * @param   pVM         Pointer to the VM to obtain statistics for. Optional.
+ * @param   pVM         The VM to obtain statistics for. Optional.
  */
 GMMR0DECL(int) GMMR0QueryStatistics(PGMMSTATS pStats, PSUPDRVSESSION pSession, PVM pVM)
 {
@@ -5410,8 +5422,8 @@ GMMR0DECL(int) GMMR0QueryStatistics(PGMMSTATS pStats, PSUPDRVSESSION pSession, P
  * VMMR0 request wrapper for GMMR0QueryStatistics.
  *
  * @returns see GMMR0QueryStatistics.
- * @param   pVM             Pointer to the VM. Optional.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure. Optional.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int) GMMR0QueryStatisticsReq(PVM pVM, PGMMQUERYSTATISTICSSREQ pReq)
 {
@@ -5447,8 +5459,8 @@ GMMR0DECL(int) GMMR0ResetStatistics(PCGMMSTATS pStats, PSUPDRVSESSION pSession,
  * VMMR0 request wrapper for GMMR0ResetStatistics.
  *
  * @returns see GMMR0ResetStatistics.
- * @param   pVM             Pointer to the VM. Optional.
- * @param   pReq            Pointer to the request packet.
+ * @param   pVM         The cross context VM structure. Optional.
+ * @param   pReq        Pointer to the request packet.
  */
 GMMR0DECL(int) GMMR0ResetStatisticsReq(PVM pVM, PGMMRESETSTATISTICSSREQ pReq)
 {
diff --git a/src/VBox/VMM/VMMR0/GVMMR0.cpp b/src/VBox/VMM/VMMR0/GVMMR0.cpp
index 4b868fb..762ce78 100644
--- a/src/VBox/VMM/VMMR0/GVMMR0.cpp
+++ b/src/VBox/VMM/VMMR0/GVMMR0.cpp
@@ -643,7 +643,7 @@ GVMMR0DECL(int) GVMMR0SetConfig(PSUPDRVSESSION pSession, const char *pszName, ui
  *
  * @param   pSession    The session handle. Used for authentication.
  * @param   pszName     The variable name.
- * @param   u64Value    The new value.
+ * @param   pu64Value   Where to return the value.
  */
 GVMMR0DECL(int) GVMMR0QueryConfig(PSUPDRVSESSION pSession, const char *pszName, uint64_t *pu64Value)
 {
@@ -1017,7 +1017,7 @@ static void gvmmR0InitPerVMData(PGVM pGVM)
  * Does the VM initialization.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 GVMMR0DECL(int) GVMMR0InitVM(PVM pVM)
 {
@@ -1057,7 +1057,7 @@ GVMMR0DECL(int) GVMMR0InitVM(PVM pVM)
  * Indicates that we're done with the ring-0 initialization
  * of the VM.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @thread  EMT(0)
  */
 GVMMR0DECL(void) GVMMR0DoneInitVM(PVM pVM)
@@ -1077,7 +1077,7 @@ GVMMR0DECL(void) GVMMR0DoneInitVM(PVM pVM)
  * Indicates that we're doing the ring-0 termination of the VM.
  *
  * @returns true if termination hasn't been done already, false if it has.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pGVM        Pointer to the global VM structure. Optional.
  * @thread  EMT(0)
  */
@@ -1110,7 +1110,7 @@ GVMMR0DECL(bool) GVMMR0DoingTermVM(PVM pVM, PGVM pGVM)
  * could've associated the calling thread with the VM up front.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  *
  * @thread  EMT(0) if it's associated with the VM, otherwise any thread.
  */
@@ -1211,21 +1211,21 @@ static void gvmmR0CleanupVM(PGVM pGVM)
 
 
 /**
- * Handle destructor.
+ * @callback_method_impl{FNSUPDRVDESTRUCTOR,VM handle destructor}
  *
- * @param   pvGVMM      The GVM instance pointer.
- * @param   pvHandle    The handle pointer.
+ * pvUser1 is the GVM instance pointer.
+ * pvUser2 is the handle pointer.
  */
-static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvGVMM, void *pvHandle)
+static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvUser1, void *pvUser2)
 {
-    LogFlow(("gvmmR0HandleObjDestructor: %p %p %p\n", pvObj, pvGVMM, pvHandle));
+    LogFlow(("gvmmR0HandleObjDestructor: %p %p %p\n", pvObj, pvUser1, pvUser2));
 
     /*
      * Some quick, paranoid, input validation.
      */
-    PGVMHANDLE pHandle = (PGVMHANDLE)pvHandle;
+    PGVMHANDLE pHandle = (PGVMHANDLE)pvUser2;
     AssertPtr(pHandle);
-    PGVMM pGVMM = (PGVMM)pvGVMM;
+    PGVMM pGVMM = (PGVMM)pvUser1;
     Assert(pGVMM == g_pGVMM);
     const uint16_t iHandle = pHandle - &pGVMM->aHandles[0];
     if (    !iHandle
@@ -1374,7 +1374,7 @@ static DECLCALLBACK(void) gvmmR0HandleObjDestructor(void *pvObj, void *pvGVMM, v
  * Note that VCPU 0 is automatically registered during VM creation.
  *
  * @returns VBox status code
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idCpu           VCPU id.
  */
 GVMMR0DECL(int) GVMMR0RegisterVCpu(PVM pVM, VMCPUID idCpu)
@@ -1439,7 +1439,7 @@ GVMMR0DECL(PGVM) GVMMR0ByHandle(uint32_t hGVM)
  * are by threads inside the same process, so this will not be an issue.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   ppGVM           Where to store the GVM pointer.
  * @param   ppGVMM          Where to store the pointer to the GVMM instance data.
  * @param   fTakeUsedLock   Whether to take the used lock or not.
@@ -1516,7 +1516,7 @@ static int gvmmR0ByVM(PVM pVM, PGVM *ppGVM, PGVMM *ppGVMM, bool fTakeUsedLock)
  * Lookup a GVM structure by the shared VM structure.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   ppGVM       Where to store the GVM pointer.
  *
  * @remark  This will not take the 'used'-lock because it doesn't do
@@ -1534,7 +1534,7 @@ GVMMR0DECL(int) GVMMR0ByVM(PVM pVM, PGVM *ppGVM)
  * caller is an EMT thread.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idCpu       The Virtual CPU ID of the calling EMT.
  * @param   ppGVM       Where to store the GVM pointer.
  * @param   ppGVMM      Where to store the pointer to the GVMM instance data.
@@ -1584,7 +1584,7 @@ static int gvmmR0ByVMAndEMT(PVM pVM, VMCPUID idCpu, PGVM *ppGVM, PGVMM *ppGVMM)
  * and ensuring that the caller is the EMT thread.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idCpu       The Virtual CPU ID of the calling EMT.
  * @param   ppGVM       Where to store the GVM pointer.
  * @thread  EMT
@@ -1815,7 +1815,7 @@ static unsigned gvmmR0SchedDoWakeUps(PGVMM pGVMM, uint64_t u64Now)
  *
  * @returns VINF_SUCCESS normal wakeup (timeout or kicked by other thread).
  *          VERR_INTERRUPTED if a signal was scheduled for the thread.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   idCpu               The Virtual CPU ID of the calling EMT.
  * @param   u64ExpireGipTime    The time for the sleep to expire expressed as GIP time.
  * @thread  EMT(idCpu).
@@ -1963,7 +1963,7 @@ DECLINLINE(int) gvmmR0SchedWakeUpOne(PGVM pGVM, PGVMCPU pGVCpu)
  * @retval  VINF_SUCCESS if successfully woken up.
  * @retval  VINF_GVM_NOT_BLOCKED if the EMT wasn't blocked.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   idCpu               The Virtual CPU ID of the EMT to wake up.
  * @param   fTakeUsedLock       Take the used lock or not
  * @thread  Any but EMT.
@@ -2024,7 +2024,7 @@ GVMMR0DECL(int) GVMMR0SchedWakeUpEx(PVM pVM, VMCPUID idCpu, bool fTakeUsedLock)
  * @retval  VINF_SUCCESS if successfully woken up.
  * @retval  VINF_GVM_NOT_BLOCKED if the EMT wasn't blocked.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   idCpu               The Virtual CPU ID of the EMT to wake up.
  * @thread  Any but EMT.
  */
@@ -2042,7 +2042,7 @@ GVMMR0DECL(int) GVMMR0SchedWakeUp(PVM pVM, VMCPUID idCpu)
  * @retval  VINF_GVM_NOT_BUSY_IN_GC if the EMT wasn't busy in GC.
  *
  * @param   pGVM                The global (ring-0) VM structure.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  */
 DECLINLINE(int) gvmmR0SchedPokeOne(PGVM pGVM, PVMCPU pVCpu)
 {
@@ -2068,7 +2068,7 @@ DECLINLINE(int) gvmmR0SchedPokeOne(PGVM pGVM, PVMCPU pVCpu)
  * @retval  VINF_SUCCESS if poked successfully.
  * @retval  VINF_GVM_NOT_BUSY_IN_GC if the EMT wasn't busy in GC.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   idCpu               The ID of the virtual CPU to poke.
  * @param   fTakeUsedLock       Take the used lock or not
  */
@@ -2106,7 +2106,7 @@ GVMMR0DECL(int) GVMMR0SchedPokeEx(PVM pVM, VMCPUID idCpu, bool fTakeUsedLock)
  * @retval  VINF_SUCCESS if poked successfully.
  * @retval  VINF_GVM_NOT_BUSY_IN_GC if the EMT wasn't busy in GC.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   idCpu               The ID of the virtual CPU to poke.
  */
 GVMMR0DECL(int) GVMMR0SchedPoke(PVM pVM, VMCPUID idCpu)
@@ -2120,7 +2120,7 @@ GVMMR0DECL(int) GVMMR0SchedPoke(PVM pVM, VMCPUID idCpu)
  *
  * @returns VBox status code, no informational stuff.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSleepSet           The set of sleepers to wake up.
  * @param   pPokeSet            The set of CPUs to poke.
  */
@@ -2176,7 +2176,7 @@ GVMMR0DECL(int) GVMMR0SchedWakeUpAndPokeCpus(PVM pVM, PCVMCPUSET pSleepSet, PCVM
  * VMMR0 request wrapper for GVMMR0SchedWakeUpAndPokeCpus.
  *
  * @returns see GVMMR0SchedWakeUpAndPokeCpus.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pReq            Pointer to the request packet.
  */
 GVMMR0DECL(int) GVMMR0SchedWakeUpAndPokeCpusReq(PVM pVM, PGVMMSCHEDWAKEUPANDPOKECPUSREQ pReq)
@@ -2200,11 +2200,10 @@ GVMMR0DECL(int) GVMMR0SchedWakeUpAndPokeCpusReq(PVM pVM, PGVMMSCHEDWAKEUPANDPOKE
  *
  * @returns VINF_SUCCESS if not yielded.
  *          VINF_GVM_YIELDED if an attempt to switch to a different VM task was made.
- * @param   pVM                 Pointer to the VM.
- * @param   idCpu               The Virtual CPU ID of the calling EMT.
- * @param   u64ExpireGipTime    The time for the sleep to expire expressed as GIP time.
- * @param   fYield              Whether to yield or not.
- *                              This is for when we're spinning in the halt loop.
+ * @param   pVM             The cross context VM structure.
+ * @param   idCpu           The Virtual CPU ID of the calling EMT.
+ * @param   fYield          Whether to yield or not.
+ *                          This is for when we're spinning in the halt loop.
  * @thread  EMT(idCpu).
  */
 GVMMR0DECL(int) GVMMR0SchedPoll(PVM pVM, VMCPUID idCpu, bool fYield)
@@ -2330,7 +2329,7 @@ static DECLCALLBACK(void) gvmmR0SchedPeriodicPreemptionTimerCallback(PRTTIMER pT
  * The caller must have disabled preemption!
  * The caller must check that the host can do high resolution timers.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idHostCpu   The current host CPU id.
  * @param   uHz         The desired frequency.
  */
@@ -2527,7 +2526,7 @@ GVMMR0DECL(int) GVMMR0QueryStatistics(PGVMMSTATS pStats, PSUPDRVSESSION pSession
  * VMMR0 request wrapper for GVMMR0QueryStatistics.
  *
  * @returns see GVMMR0QueryStatistics.
- * @param   pVM             Pointer to the VM. Optional.
+ * @param   pVM             The cross context VM structure. Optional.
  * @param   pReq            Pointer to the request packet.
  */
 GVMMR0DECL(int) GVMMR0QueryStatisticsReq(PVM pVM, PGVMMQUERYSTATISTICSSREQ pReq)
@@ -2642,7 +2641,7 @@ GVMMR0DECL(int) GVMMR0ResetStatistics(PCGVMMSTATS pStats, PSUPDRVSESSION pSessio
  * VMMR0 request wrapper for GVMMR0ResetStatistics.
  *
  * @returns see GVMMR0ResetStatistics.
- * @param   pVM             Pointer to the VM. Optional.
+ * @param   pVM             The cross context VM structure. Optional.
  * @param   pReq            Pointer to the request packet.
  */
 GVMMR0DECL(int) GVMMR0ResetStatisticsReq(PVM pVM, PGVMMRESETSTATISTICSSREQ pReq)
diff --git a/src/VBox/VMM/VMMR0/HMR0.cpp b/src/VBox/VMM/VMMR0/HMR0.cpp
index 071ced0..d26c5ee 100644
--- a/src/VBox/VMM/VMMR0/HMR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMR0.cpp
@@ -830,8 +830,8 @@ static DECLCALLBACK(void) hmR0InitAmdCpu(RTCPUID idCpu, void *pvUser1, void *pvU
  * Enable VT-x or AMD-V on the current CPU
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM (can be NULL).
- * @param   idCpu       The identifier for the CPU the function is called on.
+ * @param   pVM     The cross context VM structure. Can be NULL.
+ * @param   idCpu   The identifier for the CPU the function is called on.
  *
  * @remarks Maybe called with interrupts disabled!
  */
@@ -890,7 +890,6 @@ static DECLCALLBACK(void) hmR0EnableCpuCallback(RTCPUID idCpu, void *pvUser1, vo
  *
  * @returns VBox status code.
  * @param   pvUser          Pointer to the VM.
- * @param   pvUserIgnore    NULL, ignored.
  */
 static DECLCALLBACK(int32_t) hmR0EnableAllCpuOnce(void *pvUser)
 {
@@ -979,7 +978,7 @@ static DECLCALLBACK(int32_t) hmR0EnableAllCpuOnce(void *pvUser)
  * Sets up HM on all cpus.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMR0_INT_DECL(int) HMR0EnableAllCpus(PVM pVM)
 {
@@ -1179,7 +1178,7 @@ static DECLCALLBACK(void) hmR0PowerCallback(RTPOWEREVENT enmEvent, void *pvUser)
  * init routine which will allocate resources for each virtual CPU and such.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  *
  * @remarks This is called after HMR3Init(), see vmR3CreateU() and
  *          vmR3InitRing3().
@@ -1249,7 +1248,7 @@ VMMR0_INT_DECL(int) HMR0InitVM(PVM pVM)
  * Does ring-0 per VM HM termination.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0_INT_DECL(int) HMR0TermVM(PVM pVM)
 {
@@ -1272,7 +1271,7 @@ VMMR0_INT_DECL(int) HMR0TermVM(PVM pVM)
  * This is mostly about setting up the hardware VM state.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0_INT_DECL(int) HMR0SetupVM(PVM pVM)
 {
@@ -1328,7 +1327,7 @@ VMMR0_INT_DECL(int) HMR0SetupVM(PVM pVM)
  * required for entering HM context.
  *
  * @returns VBox status code.
- * @param   pvCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  */
@@ -1358,8 +1357,8 @@ VMMR0_INT_DECL(int) HMR0EnterCpu(PVMCPU pVCpu)
  * Enters the VT-x or AMD-V session.
  *
  * @returns VBox status code.
- * @param   pVM        Pointer to the VM.
- * @param   pVCpu      Pointer to the VMCPU.
+ * @param   pVM        The cross context VM structure.
+ * @param   pVCpu      The cross context virtual CPU structure.
  *
  * @remarks This is called with preemption disabled.
  */
@@ -1408,7 +1407,7 @@ VMMR0_INT_DECL(int) HMR0Enter(PVM pVM, PVMCPU pVCpu)
  * disable HM on the CPU.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  */
@@ -1459,8 +1458,8 @@ VMMR0_INT_DECL(void) HMR0ThreadCtxCallback(RTTHREADCTXEVENT enmEvent, void *pvUs
  * Runs guest code in a hardware accelerated VM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks Can be called with preemption enabled if thread-context hooks are
  *          used!!!
@@ -1498,8 +1497,8 @@ VMMR0_INT_DECL(int) HMR0RunGuestCode(PVM pVM, PVMCPU pVCpu)
  * Save guest FPU/XMM state (64 bits guest mode & 32 bits host only)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest CPU context.
  */
 VMMR0_INT_DECL(int)   HMR0SaveFPUState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -1515,8 +1514,8 @@ VMMR0_INT_DECL(int)   HMR0SaveFPUState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Save guest debug state (64 bits guest mode & 32 bits host only)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest CPU context.
  */
 VMMR0_INT_DECL(int)   HMR0SaveDebugState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -1532,7 +1531,7 @@ VMMR0_INT_DECL(int)   HMR0SaveDebugState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Test the 32->64 bits switcher.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0_INT_DECL(int)   HMR0TestSwitcher3264(PVM pVM)
 {
@@ -1596,7 +1595,7 @@ VMMR0DECL(PHMGLOBALCPUINFO) HMR0GetCurrentCpuEx(RTCPUID idCpu)
 /**
  * Save a pending IO read.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   GCPtrRip        Address of IO instruction.
  * @param   GCPtrRipNext    Address of the next instruction.
  * @param   uPort           Port address.
@@ -1619,8 +1618,9 @@ VMMR0_INT_DECL(void) HMR0SavePendingIOPortRead(PVMCPU pVCpu, RTGCPTR GCPtrRip, R
 /**
  * Save a pending IO write.
  *
- * @param   pVCpu           Pointer to the VMCPU.
- * @param   GCPtrRIP        Address of IO instruction.
+ * @param   pVCpu           The cross context virtual CPU structure.
+ * @param   GCPtrRip        Address of IO instruction.
+ * @param   GCPtrRipNext    Address of the next instruction.
  * @param   uPort           Port address.
  * @param   uAndVal         AND mask for fetching the result from eax.
  * @param   cbSize          Read size.
@@ -1644,7 +1644,7 @@ VMMR0_INT_DECL(void) HMR0SavePendingIOPortWrite(PVMCPU pVCpu, RTGCPTR GCPtrRip,
  * switcher turns off paging.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmSwitcher     The switcher we're about to use.
  * @param   pfVTxDisabled   Where to store whether VT-x was disabled or not.
  */
@@ -1711,7 +1711,7 @@ VMMR0_INT_DECL(int) HMR0EnterSwitcher(PVM pVM, VMMSWITCHER enmSwitcher, bool *pf
  * Raw-mode switcher hook - re-enable VT-x if was active *and* the current
  * switcher turned off paging.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   fVTxDisabled    Whether VT-x was disabled or not.
  */
 VMMR0_INT_DECL(void) HMR0LeaveSwitcher(PVM pVM, bool fVTxDisabled)
@@ -1863,8 +1863,8 @@ VMMR0DECL(void) HMR0DumpDescriptor(PCX86DESCHC pDesc, RTSEL Sel, const char *psz
 /**
  * Formats a full register dump.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the CPU context.
  */
 VMMR0DECL(void) HMDumpRegs(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
diff --git a/src/VBox/VMM/VMMR0/HMR0A.asm b/src/VBox/VMM/VMMR0/HMR0A.asm
index 6f5a484..189a48c 100644
--- a/src/VBox/VMM/VMMR0/HMR0A.asm
+++ b/src/VBox/VMM/VMMR0/HMR0A.asm
@@ -802,7 +802,7 @@ ENDPROC SVMR0InvlpgA
 ; @param        pCtx            msc:rdx
 ; @param        pVMCSCache      msc:r8
 ; @param        pVM             msc:r9
-; @param        pVCpu           msc:[rbp+30h]
+; @param        pVCpu           msc:[rbp+30h]   The cross context virtual CPU structure of the calling EMT.
 ; @param        pfnStartVM      msc:[rbp+38h]
 ;
 ; @remarks      This is essentially the same code as HMR0SVMRunWrapXMM, only the parameters differ a little bit.
@@ -970,7 +970,7 @@ ENDPROC   HMR0VMXStartVMWrapXMM
 ; @param        pVMCBPhys       msc:rdx
 ; @param        pCtx            msc:r8
 ; @param        pVM             msc:r9
-; @param        pVCpu           msc:[rbp+30h]
+; @param        pVCpu           msc:[rbp+30h]   The cross context virtual CPU structure of the calling EMT.
 ; @param        pfnVMRun        msc:[rbp+38h]
 ;
 ; @remarks      This is essentially the same code as HMR0VMXStartVMWrapXMM, only the parameters differ a little bit.
@@ -1236,8 +1236,8 @@ ALIGN(16)
 ; @param    fResume    x86:[ebp+8], msc:rcx,gcc:rdi     Whether to use vmlauch/vmresume.
 ; @param    pCtx       x86:[ebp+c], msc:rdx,gcc:rsi     Pointer to the guest-CPU context.
 ; @param    pCache     x86:[ebp+10],msc:r8, gcc:rdx     Pointer to the VMCS cache.
-; @param    pVM        x86:[ebp+14],msc:r9, gcc:rcx     Pointer to the cross context VM structure.
-; @param    pVCpu      x86:[ebp+18],msc:[ebp+30],gcc:r8 Pointer to the cross context VMCPU structure.
+; @param    pVM        x86:[ebp+14],msc:r9, gcc:rcx     The cross context VM structure.
+; @param    pVCpu      x86:[ebp+18],msc:[ebp+30],gcc:r8 The cross context virtual CPU structure of the calling EMT.
 ;
 ALIGNCODE(16)
 BEGINPROC VMXR0StartVM32
@@ -1544,8 +1544,8 @@ ALIGN(16)
 ; @param    fResume    msc:rcx, gcc:rdi     Whether to use vmlauch/vmresume.
 ; @param    pCtx       msc:rdx, gcc:rsi     Pointer to the guest-CPU context.
 ; @param    pCache     msc:r8,  gcc:rdx     Pointer to the VMCS cache.
-; @param    pVM        msc:r9,  gcc:rcx     Pointer to the cross context VM structure.
-; @param    pVCpu      msc:[ebp+30], gcc:r8 Pointer to the cross context VMCPU structure.
+; @param    pVM        msc:r9,  gcc:rcx     The cross context VM structure.
+; @param    pVCpu      msc:[ebp+30], gcc:r8 The cross context virtual CPU structure of the calling EMT.
 ;
 ALIGNCODE(16)
 BEGINPROC VMXR0StartVM64
@@ -1739,8 +1739,8 @@ ENDPROC VMXR0StartVM64
 ; @param    HCPhysVMCB      Physical address of host VMCB.
 ; @param    HCPhysVMCB      Physical address of guest VMCB.
 ; @param    pCtx            Pointer to the guest CPU-context.
-; @param    pVM             msc:r9, gcc:rcx     Pointer to the cross context VM structure.
-; @param    pVCpu           msc:[rsp+28],gcc:r8 Pointer to the cross context VMCPU structure.
+; @param    pVM             msc:r9, gcc:rcx     The cross context VM structure.
+; @param    pVCpu           msc:[rsp+28],gcc:r8 The cross context virtual CPU structure of the calling EMT.
 ;
 ALIGNCODE(16)
 BEGINPROC SVMR0VMRun
@@ -1891,8 +1891,8 @@ ENDPROC SVMR0VMRun
 ; @param    HCPhysVMCB      Physical address of host VMCB.
 ; @param    HCPhysVMCB      Physical address of guest VMCB.
 ; @param    pCtx            Pointer to the guest-CPU context.
-; @param    pVM             msc:r9, gcc:rcx     Pointer to the cross context VM structure.
-; @param    pVCpu           msc:[rsp+28],gcc:r8 Pointer to the cross context VMCPU structure.
+; @param    pVM             msc:r9, gcc:rcx     The cross context VM structure.
+; @param    pVCpu           msc:[rsp+28],gcc:r8 The cross context virtual CPU structure of the calling EMT.
 ;
 ALIGNCODE(16)
 BEGINPROC SVMR0VMRun64
diff --git a/src/VBox/VMM/VMMR0/HMSVMR0.cpp b/src/VBox/VMM/VMMR0/HMSVMR0.cpp
index acea0c5..0e5b29d 100644
--- a/src/VBox/VMM/VMMR0/HMSVMR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMSVMR0.cpp
@@ -106,9 +106,10 @@
     do \
     { \
         int rc = hmR0SvmCheckExitDueToEventDelivery(pVCpu, pCtx, pSvmTransient); \
-        if (RT_UNLIKELY(rc == VINF_HM_DOUBLE_FAULT)) \
+        if (RT_LIKELY(rc == VINF_SUCCESS)) { /* likely */ } \
+        else if (rc == VINF_HM_DOUBLE_FAULT) \
             return VINF_SUCCESS; \
-        else if (RT_UNLIKELY(rc == VINF_EM_RESET)) \
+        else \
             return rc; \
     } while (0)
 
@@ -190,7 +191,7 @@ PHYSICAL_TABLE and AVIC LOGICAL_TABLE Pointers). */
 /** @name SVM transient.
  *
  * A state structure for holding miscellaneous information across AMD-V
- * VMRUN/#VMEXIT operation, restored after the transition.
+ * VMRUN/\#VMEXIT operation, restored after the transition.
  *
  * @{ */
 typedef struct SVMTRANSIENT
@@ -201,27 +202,27 @@ typedef struct SVMTRANSIENT
     uint32_t        u32Alignment0;
 #endif
 
-    /** The #VMEXIT exit code (the EXITCODE field in the VMCB). */
+    /** The \#VMEXIT exit code (the EXITCODE field in the VMCB). */
     uint64_t        u64ExitCode;
     /** The guest's TPR value used for TPR shadowing. */
     uint8_t         u8GuestTpr;
     /** Alignment. */
     uint8_t         abAlignment0[7];
 
-    /** Whether the guest FPU state was active at the time of #VMEXIT. */
+    /** Whether the guest FPU state was active at the time of \#VMEXIT. */
     bool            fWasGuestFPUStateActive;
-    /** Whether the guest debug state was active at the time of #VMEXIT. */
+    /** Whether the guest debug state was active at the time of \#VMEXIT. */
     bool            fWasGuestDebugStateActive;
-    /** Whether the hyper debug state was active at the time of #VMEXIT. */
+    /** Whether the hyper debug state was active at the time of \#VMEXIT. */
     bool            fWasHyperDebugStateActive;
     /** Whether the TSC offset mode needs to be updated. */
     bool            fUpdateTscOffsetting;
-    /** Whether the TSC_AUX MSR needs restoring on #VMEXIT. */
+    /** Whether the TSC_AUX MSR needs restoring on \#VMEXIT. */
     bool            fRestoreTscAuxMsr;
-    /** Whether the #VMEXIT was caused by a page-fault during delivery of a
+    /** Whether the \#VMEXIT was caused by a page-fault during delivery of a
      *  contributary exception or a page-fault. */
     bool            fVectoringDoublePF;
-    /** Whether the #VMEXIT was caused by a page-fault during delivery of an
+    /** Whether the \#VMEXIT was caused by a page-fault during delivery of an
      *  external interrupt or NMI. */
     bool            fVectoringPF;
 } SVMTRANSIENT, *PSVMTRANSIENT;
@@ -234,9 +235,9 @@ AssertCompileMemberAlignment(SVMTRANSIENT, fWasGuestFPUStateActive, sizeof(uint6
  */
 typedef enum SVMMSREXITREAD
 {
-    /** Reading this MSR causes a #VMEXIT. */
+    /** Reading this MSR causes a \#VMEXIT. */
     SVMMSREXIT_INTERCEPT_READ = 0xb,
-    /** Reading this MSR does not cause a #VMEXIT. */
+    /** Reading this MSR does not cause a \#VMEXIT. */
     SVMMSREXIT_PASSTHRU_READ
 } SVMMSREXITREAD;
 
@@ -245,17 +246,17 @@ typedef enum SVMMSREXITREAD
  */
 typedef enum SVMMSREXITWRITE
 {
-    /** Writing to this MSR causes a #VMEXIT. */
+    /** Writing to this MSR causes a \#VMEXIT. */
     SVMMSREXIT_INTERCEPT_WRITE = 0xd,
-    /** Writing to this MSR does not cause a #VMEXIT. */
+    /** Writing to this MSR does not cause a \#VMEXIT. */
     SVMMSREXIT_PASSTHRU_WRITE
 } SVMMSREXITWRITE;
 
 /**
- * SVM #VMEXIT handler.
+ * SVM \#VMEXIT handler.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context.
  * @param   pSvmTransient   Pointer to the SVM-transient structure.
  */
@@ -269,7 +270,7 @@ static void hmR0SvmSetMsrPermission(PVMCPU pVCpu, unsigned uMsr, SVMMSREXITREAD
 static void hmR0SvmPendingEventToTrpmTrap(PVMCPU pVCpu);
 static void hmR0SvmLeave(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx);
 
-/** @name #VMEXIT handlers.
+/** @name \#VMEXIT handlers.
  * @{
  */
 static FNSVMEXITHANDLER hmR0SvmExitIntr;
@@ -302,6 +303,7 @@ static FNSVMEXITHANDLER hmR0SvmExitXcptNM;
 static FNSVMEXITHANDLER hmR0SvmExitXcptUD;
 static FNSVMEXITHANDLER hmR0SvmExitXcptMF;
 static FNSVMEXITHANDLER hmR0SvmExitXcptDB;
+static FNSVMEXITHANDLER hmR0SvmExitXcptAC;
 /** @} */
 
 DECLINLINE(int) hmR0SvmHandleExit(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PSVMTRANSIENT pSvmTransient);
@@ -323,7 +325,8 @@ R0PTRTYPE(void *)           g_pvIOBitmap      = NULL;
  *
  * @returns VBox status code.
  * @param   pCpu            Pointer to the CPU info struct.
- * @param   pVM             Pointer to the VM (can be NULL after a resume!).
+ * @param   pVM             The cross context VM structure. Can be
+ *                          NULL after a resume!
  * @param   pvCpuPage       Pointer to the global CPU page.
  * @param   HCPhysCpuPage   Physical address of the global CPU page.
  * @param   fEnabledByHost  Whether the host OS has already initialized AMD-V.
@@ -466,7 +469,7 @@ VMMR0DECL(void) SVMR0GlobalTerm(void)
 /**
  * Frees any allocated per-VCPU structures for a VM.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 DECLINLINE(void) hmR0SvmFreeStructs(PVM pVM)
 {
@@ -506,7 +509,7 @@ DECLINLINE(void) hmR0SvmFreeStructs(PVM pVM)
  * Does per-VM AMD-V initialization.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0DECL(int) SVMR0InitVM(PVM pVM)
 {
@@ -590,7 +593,7 @@ failure_cleanup:
  * Does per-VM AMD-V termination.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0DECL(int) SVMR0TermVM(PVM pVM)
 {
@@ -602,7 +605,7 @@ VMMR0DECL(int) SVMR0TermVM(PVM pVM)
 /**
  * Sets the permission bits for the specified MSR in the MSRPM.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   uMsr        The MSR for which the access permissions are being set.
  * @param   enmRead     MSR read permissions.
  * @param   enmWrite    MSR write permissions.
@@ -666,7 +669,7 @@ static void hmR0SvmSetMsrPermission(PVMCPU pVCpu, unsigned uMsr, SVMMSREXITREAD
  * This function is only called once per-VM during initalization.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0DECL(int) SVMR0SetupVM(PVM pVM)
 {
@@ -685,6 +688,12 @@ VMMR0DECL(int) SVMR0SetupVM(PVM pVM)
         Assert(!pVCpu->hm.s.idxExitHistoryFree);
         HMCPU_EXIT_HISTORY_RESET(pVCpu);
 
+        /* Always trap #AC for reasons of security. */
+        pVmcb->ctrl.u32InterceptException |= RT_BIT_32(X86_XCPT_AC);
+
+        /* Always trap #DB for reasons of security. */
+        pVmcb->ctrl.u32InterceptException |= RT_BIT_32(X86_XCPT_DB);
+
         /* Trap exceptions unconditionally (debug purposes). */
 #ifdef HMSVM_ALWAYS_TRAP_PF
         pVmcb->ctrl.u32InterceptException |=   RT_BIT(X86_XCPT_PF);
@@ -693,7 +702,6 @@ VMMR0DECL(int) SVMR0SetupVM(PVM pVM)
         /* If you add any exceptions here, make sure to update hmR0SvmHandleExit(). */
         pVmcb->ctrl.u32InterceptException |= 0
                                              | RT_BIT(X86_XCPT_BP)
-                                             | RT_BIT(X86_XCPT_DB)
                                              | RT_BIT(X86_XCPT_DE)
                                              | RT_BIT(X86_XCPT_NM)
                                              | RT_BIT(X86_XCPT_UD)
@@ -818,8 +826,8 @@ VMMR0DECL(int) SVMR0SetupVM(PVM pVM)
  * Invalidates a guest page by guest virtual address.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCVirt      Guest virtual address of the page to invalidate.
  */
 VMMR0DECL(int) SVMR0InvalidatePage(PVM pVM, PVMCPU pVCpu, RTGCPTR GCVirt)
@@ -855,8 +863,7 @@ VMMR0DECL(int) SVMR0InvalidatePage(PVM pVM, PVMCPU pVCpu, RTGCPTR GCVirt)
 /**
  * Flushes the appropriate tagged-TLB entries.
  *
- * @param    pVM        Pointer to the VM.
- * @param    pVCpu      Pointer to the VMCPU.
+ * @param    pVCpu      The cross context virtual CPU structure.
  */
 static void hmR0SvmFlushTaggedTlb(PVMCPU pVCpu)
 {
@@ -1007,8 +1014,8 @@ static void hmR0SvmFlushTaggedTlb(PVMCPU pVCpu)
  * @param   HCPhysVmcbHost  Physical address of host VMCB.
  * @param   HCPhysVmcb      Physical address of the VMCB.
  * @param   pCtx            Pointer to the guest-CPU context.
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  */
 DECLASM(int) SVMR0VMSwitcherRun64(RTHCPHYS HCPhysVmcbHost, RTHCPHYS HCPhysVmcb, PCPUMCTX pCtx, PVM pVM, PVMCPU pVCpu)
 {
@@ -1030,8 +1037,8 @@ DECLASM(int) SVMR0VMSwitcherRun64(RTHCPHYS HCPhysVmcbHost, RTHCPHYS HCPhysVmcb,
  * Executes the specified VMRUN handler in 64-bit mode.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  * @param   enmOp       The operation to perform.
  * @param   cParams     Number of parameters.
@@ -1096,6 +1103,8 @@ DECLINLINE(void) hmR0SvmAddXcptIntercept(PSVMVMCB pVmcb, uint32_t u32Xcpt)
  */
 DECLINLINE(void) hmR0SvmRemoveXcptIntercept(PSVMVMCB pVmcb, uint32_t u32Xcpt)
 {
+    Assert(u32Xcpt != X86_XCPT_DB);
+    Assert(u32Xcpt != X86_XCPT_AC);
 #ifndef HMSVM_ALWAYS_TRAP_ALL_XCPTS
     if (pVmcb->ctrl.u32InterceptException & RT_BIT(u32Xcpt))
     {
@@ -1112,7 +1121,7 @@ DECLINLINE(void) hmR0SvmRemoveXcptIntercept(PSVMVMCB pVmcb, uint32_t u32Xcpt)
  * the FPU state itself which is shared between the host and the guest.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pVmcb       Pointer to the VM control block.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
@@ -1186,7 +1195,7 @@ static void hmR0SvmLoadSharedCR0(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX pCtx)
  * Loads the guest control registers (CR2, CR3, CR4) into the VMCB.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pVmcb       Pointer to the VM control block.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
@@ -1291,7 +1300,7 @@ static int hmR0SvmLoadGuestControlRegs(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX pC
  * Loads the guest segment registers into the VMCB.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pVmcb       Pointer to the VM control block.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
@@ -1351,7 +1360,7 @@ static void hmR0SvmLoadGuestSegmentRegs(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX p
 /**
  * Loads the guest MSRs into the VMCB.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pVmcb       Pointer to the VM control block.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
@@ -1407,7 +1416,7 @@ static void hmR0SvmLoadGuestMsrs(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX pCtx)
  * Loads the guest state into the VMCB and programs the necessary intercepts
  * accordingly.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pVmcb       Pointer to the VM control block.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
@@ -1421,7 +1430,6 @@ static void hmR0SvmLoadSharedDebugState(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX p
     Assert((pCtx->dr[6] & X86_DR6_RA1_MASK) == X86_DR6_RA1_MASK); Assert((pCtx->dr[6] & X86_DR6_RAZ_MASK) == 0);
     Assert((pCtx->dr[7] & X86_DR7_RA1_MASK) == X86_DR7_RA1_MASK); Assert((pCtx->dr[7] & X86_DR7_RAZ_MASK) == 0);
 
-    bool fInterceptDB     = false;
     bool fInterceptMovDRx = false;
 
     /*
@@ -1434,7 +1442,6 @@ static void hmR0SvmLoadSharedDebugState(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX p
     {
         pVCpu->hm.s.fClearTrapFlag = true;
         pVmcb->guest.u64RFlags |= X86_EFL_TF;
-        fInterceptDB = true;
         fInterceptMovDRx = true; /* Need clean DR6, no guest mess. */
     }
 
@@ -1477,7 +1484,6 @@ static void hmR0SvmLoadSharedDebugState(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX p
 
         /** @todo If we cared, we could optimize to allow the guest to read registers
          *        with the same values. */
-        fInterceptDB = true;
         fInterceptMovDRx = true;
         Log5(("hmR0SvmLoadSharedDebugState: Loaded hyper DRx\n"));
     }
@@ -1524,6 +1530,10 @@ static void hmR0SvmLoadSharedDebugState(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX p
         /*
          * If no debugging enabled, we'll lazy load DR0-3. We don't need to
          * intercept #DB as DR6 is updated in the VMCB.
+         *
+         * Note! If we cared and dared, we could skip intercepting \#DB here.
+         *       However, \#DB shouldn't be performance critical, so we'll play safe
+         *       and keep the code similar to the VT-x code and always intercept it.
          */
 #if HC_ARCH_BITS == 32 && defined(VBOX_WITH_64_BITS_GUESTS)
         else if (   !CPUMIsGuestDebugStateActivePending(pVCpu)
@@ -1539,11 +1549,7 @@ static void hmR0SvmLoadSharedDebugState(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX p
     /*
      * Set up the intercepts.
      */
-    if (fInterceptDB)
-        hmR0SvmAddXcptIntercept(pVmcb, X86_XCPT_DB);
-    else
-        hmR0SvmRemoveXcptIntercept(pVmcb, X86_XCPT_DB);
-
+    Assert(pVmcb->ctrl.u32InterceptException & RT_BIT_32(X86_XCPT_DB));
     if (fInterceptMovDRx)
     {
         if (   pVmcb->ctrl.u16InterceptRdDRx != 0xffff
@@ -1573,7 +1579,7 @@ static void hmR0SvmLoadSharedDebugState(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX p
  * Loads the guest APIC state (currently just the TPR).
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pVmcb       Pointer to the VM control block.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
@@ -1632,7 +1638,7 @@ static int hmR0SvmLoadGuestApicState(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX pCtx
  * Loads the exception interrupts required for guest execution in the VMCB.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pVmcb       Pointer to the VM control block.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
@@ -1656,7 +1662,7 @@ static int hmR0SvmLoadGuestXcptIntercepts(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX
  * Sets up the appropriate function to run guest code.
  *
  * @returns VBox status code.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   pCtx    Pointer to the guest-CPU context.
  *
  * @remarks No-long-jump zone!!!
@@ -1690,8 +1696,8 @@ static int hmR0SvmSetupVMRunHandler(PVMCPU pVCpu, PCPUMCTX pCtx)
  * Enters the AMD-V session.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCpu        Pointer to the CPU info struct.
  */
 VMMR0DECL(int) SVMR0Enter(PVM pVM, PVMCPU pVCpu, PHMGLOBALCPUINFO pCpu)
@@ -1714,7 +1720,7 @@ VMMR0DECL(int) SVMR0Enter(PVM pVM, PVMCPU pVCpu, PHMGLOBALCPUINFO pCpu)
  * Thread-context callback for AMD-V.
  *
  * @param   enmEvent        The thread-context event.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   fGlobalInit     Whether global VT-x/AMD-V init. is used.
  * @thread  EMT(pVCpu)
  */
@@ -1786,8 +1792,8 @@ VMMR0DECL(void) SVMR0ThreadCtxCallback(RTTHREADCTXEVENT enmEvent, PVMCPU pVCpu,
  * Saves the host state.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  */
@@ -1809,8 +1815,8 @@ VMMR0DECL(int) SVMR0SaveHostState(PVM pVM, PVMCPU pVCpu)
  * the guest CPU mode.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
  * @remarks No-long-jump zone!!!
@@ -1870,7 +1876,7 @@ static int hmR0SvmLoadGuestState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Loads the state shared between the host and guest into the
  * VMCB.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pVmcb       Pointer to the VM control block.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
@@ -1901,7 +1907,7 @@ static void hmR0SvmLoadSharedState(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX pCtx)
  * is not updated in the VMCB.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -2051,9 +2057,9 @@ static void hmR0SvmSaveGuestState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Does the necessary state syncing before returning to ring-3 for any reason
  * (longjmp, preemption, voluntary exits to ring-3) from AMD-V.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
- * @param   pMixedCtx   Pointer to the guest-CPU context.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   pCtx        Pointer to the guest-CPU context.
  *
  * @remarks No-long-jmp zone!!!
  */
@@ -2107,8 +2113,8 @@ static void hmR0SvmLeave(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Leaves the AMD-V session.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
 static int hmR0SvmLeaveSession(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -2146,8 +2152,8 @@ static int hmR0SvmLeaveSession(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Does the necessary state syncing before doing a longjmp to ring-3.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
  * @remarks No-long-jmp zone!!!
@@ -2163,7 +2169,7 @@ static int hmR0SvmLongJmpToRing3(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * any remaining host state) before we longjump to ring-3 and possibly get
  * preempted.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   enmOperation    The operation causing the ring-3 longjump.
  * @param   pvUser          The user argument (pointer to the possibly
  *                          out-of-date guest-CPU context).
@@ -2223,8 +2229,8 @@ static DECLCALLBACK(int) hmR0SvmCallRing3Callback(PVMCPU pVCpu, VMMCALLRING3 enm
  * steps before we can safely return to ring-3. This is not the same as longjmps
  * to ring-3, this is voluntary.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  * @param   rcExit      The reason for exiting to ring-3. Can be
  *                      VINF_VMM_UNKNOWN_RING3_CALL.
@@ -2285,8 +2291,8 @@ static void hmR0SvmExitToRing3(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, int rcExit)
  * Updates the use of TSC offsetting mode for the CPU and adjusts the necessary
  * intercepts.
  *
- * @param   pVM         The shared VM handle.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  */
@@ -2327,7 +2333,7 @@ static void hmR0SvmUpdateTscOffsetting(PVM pVM, PVMCPU pVCpu)
 /**
  * Sets an event as a pending event to be injected into the guest.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   pEvent              Pointer to the SVM event.
  * @param   GCPtrFaultAddress   The fault-address (CR2) in case it's a
  *                              page-fault.
@@ -2355,7 +2361,7 @@ DECLINLINE(void) hmR0SvmSetPendingEvent(PVMCPU pVCpu, PSVMEVENT pEvent, RTGCUINT
  * Injects an event into the guest upon VMRUN by updating the relevant field
  * in the VMCB.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pVmcb       Pointer to the guest VM control block.
  * @param   pCtx        Pointer to the guest-CPU context.
  * @param   pEvent      Pointer to the event.
@@ -2380,7 +2386,7 @@ DECLINLINE(void) hmR0SvmInjectEventVmcb(PVMCPU pVCpu, PSVMVMCB pVmcb, PCPUMCTX p
  * Converts any TRPM trap into a pending HM event. This is typically used when
  * entering from ring-3 (not longjmp returns).
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  */
 static void hmR0SvmTrpmTrapToPendingEvent(PVMCPU pVCpu)
 {
@@ -2449,7 +2455,7 @@ static void hmR0SvmTrpmTrapToPendingEvent(PVMCPU pVCpu)
  * Converts any pending SVM event into a TRPM trap. Typically used when leaving
  * AMD-V to execute any instruction.
  *
- * @param   pvCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  */
 static void hmR0SvmPendingEventToTrpmTrap(PVMCPU pVCpu)
 {
@@ -2510,7 +2516,7 @@ static void hmR0SvmPendingEventToTrpmTrap(PVMCPU pVCpu)
  * Gets the guest's interrupt-shadow.
  *
  * @returns The guest's interrupt-shadow.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   pCtx    Pointer to the guest-CPU context.
  *
  * @remarks No-long-jump zone!!!
@@ -2542,10 +2548,10 @@ DECLINLINE(uint32_t) hmR0SvmGetGuestIntrShadow(PVMCPU pVCpu, PCPUMCTX pCtx)
 
 /**
  * Sets the virtual interrupt intercept control in the VMCB which
- * instructs AMD-V to cause a #VMEXIT as soon as the guest is in a state to
+ * instructs AMD-V to cause a \#VMEXIT as soon as the guest is in a state to
  * receive interrupts.
  *
- * @param pVmcb         Pointer to the VM control block.
+ * @param   pVmcb       Pointer to the VM control block.
  */
 DECLINLINE(void) hmR0SvmSetVirtIntrIntercept(PSVMVMCB pVmcb)
 {
@@ -2563,10 +2569,10 @@ DECLINLINE(void) hmR0SvmSetVirtIntrIntercept(PSVMVMCB pVmcb)
 
 /**
  * Sets the IRET intercept control in the VMCB which instructs AMD-V to cause a
- * #VMEXIT as soon as a guest starts executing an IRET. This is used to unblock
+ * \#VMEXIT as soon as a guest starts executing an IRET. This is used to unblock
  * virtual NMIs.
  *
- * @param pVmcb         Pointer to the VM control block.
+ * @param   pVmcb       Pointer to the VM control block.
  */
 DECLINLINE(void) hmR0SvmSetIretIntercept(PSVMVMCB pVmcb)
 {
@@ -2583,7 +2589,7 @@ DECLINLINE(void) hmR0SvmSetIretIntercept(PSVMVMCB pVmcb)
 /**
  * Clears the IRET intercept control in the VMCB.
  *
- * @param pVmcb         Pointer to the VM control block.
+ * @param   pVmcb       Pointer to the VM control block.
  */
 DECLINLINE(void) hmR0SvmClearIretIntercept(PSVMVMCB pVmcb)
 {
@@ -2601,7 +2607,7 @@ DECLINLINE(void) hmR0SvmClearIretIntercept(PSVMVMCB pVmcb)
  * Evaluates the event to be delivered to the guest and sets it as the pending
  * event.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
 static void hmR0SvmEvaluatePendingEvent(PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -2675,7 +2681,7 @@ static void hmR0SvmEvaluatePendingEvent(PVMCPU pVCpu, PCPUMCTX pCtx)
  * Injects any pending events into the guest if the guest is in a state to
  * receive them.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
 static void hmR0SvmInjectPendingEvent(PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -2723,8 +2729,8 @@ static void hmR0SvmInjectPendingEvent(PVMCPU pVCpu, PCPUMCTX pCtx)
 /**
  * Reports world-switch error and dumps some useful debug info.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   rcVMRun         The return code from VMRUN (or
  *                          VERR_SVM_INVALID_GUEST_STATE for invalid
  *                          guest-state).
@@ -2879,8 +2885,8 @@ static void hmR0SvmReportWorldSwitchError(PVM pVM, PVMCPU pVCpu, int rcVMRun, PC
  * @retval VINF_EM_NO_MEMORY PGM is out of memory, we need to return
  *         to the EM loop.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
 static int hmR0SvmCheckForceFlags(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -2961,8 +2967,8 @@ static int hmR0SvmCheckForceFlags(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * @retval VINF_SUCCESS if we can proceed with running the guest.
  * @retval VINF_* scheduling changes, we have to go back to ring-3.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCtx            Pointer to the guest-CPU context.
  * @param   pSvmTransient   Pointer to the SVM transient structure.
  */
@@ -3068,8 +3074,8 @@ static int hmR0SvmPreRunGuest(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIEN
  * means there is no backing out to ring-3 or anywhere else at this
  * point.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCtx            Pointer to the guest-CPU context.
  * @param   pSvmTransient   Pointer to the SVM transient structure.
  *
@@ -3171,8 +3177,8 @@ static void hmR0SvmPreRunGuestCommitted(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, PS
  * Wrapper for running the guest code in AMD-V.
  *
  * @returns VBox strict status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
  * @remarks No-long-jump zone!!!
@@ -3197,8 +3203,8 @@ DECLINLINE(int) hmR0SvmRunGuest(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Performs some essential restoration of state after running guest code in
  * AMD-V.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data maybe
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -3279,8 +3285,9 @@ static void hmR0SvmPostRunGuest(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx, PSVMT
  * Runs the guest code using AMD-V.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   pCtx        Pointer to the guest-CPU context.
  */
 static int hmR0SvmRunGuestCodeNormal(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
 {
@@ -3348,8 +3355,8 @@ static int hmR0SvmRunGuestCodeNormal(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Runs the guest code using AMD-V in single step mode.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
 static int hmR0SvmRunGuestCodeStep(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -3447,8 +3454,8 @@ static int hmR0SvmRunGuestCodeStep(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Runs the guest code using AMD-V.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
 VMMR0DECL(int) SVMR0RunGuestCode(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -3476,10 +3483,10 @@ VMMR0DECL(int) SVMR0RunGuestCode(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
 
 
 /**
- * Handles a #VMEXIT (for all EXITCODE values except SVM_EXIT_INVALID).
+ * Handles a \#VMEXIT (for all EXITCODE values except SVM_EXIT_INVALID).
  *
  * @returns VBox status code (informational status codes included).
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCtx            Pointer to the guest-CPU context.
  * @param   pSvmTransient   Pointer to the SVM transient structure.
  */
@@ -3525,6 +3532,9 @@ DECLINLINE(int) hmR0SvmHandleExit(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
         case SVM_EXIT_EXCEPTION_1:   /* X86_XCPT_DB */
             return hmR0SvmExitXcptDB(pVCpu, pCtx, pSvmTransient);
 
+        case SVM_EXIT_EXCEPTION_11:   /* X86_XCPT_AC */
+            return hmR0SvmExitXcptAC(pVCpu, pCtx, pSvmTransient);
+
         case SVM_EXIT_MONITOR:
             return hmR0SvmExitMonitor(pVCpu, pCtx, pSvmTransient);
 
@@ -3638,7 +3648,7 @@ DECLINLINE(int) hmR0SvmHandleExit(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
                 case SVM_EXIT_EXCEPTION_D:             /* X86_XCPT_GP */
                 /*   SVM_EXIT_EXCEPTION_E: */          /* X86_XCPT_PF - Handled above. */
                 /*   SVM_EXIT_EXCEPTION_10: */         /* X86_XCPT_MF - Handled above. */
-                case SVM_EXIT_EXCEPTION_11:            /* X86_XCPT_AC */
+                /*   SVM_EXIT_EXCEPTION_11: */         /* X86_XCPT_AC - Handled above. */
                 case SVM_EXIT_EXCEPTION_12:            /* X86_XCPT_MC */
                 case SVM_EXIT_EXCEPTION_13:            /* X86_XCPT_XF */
                 case SVM_EXIT_EXCEPTION_F:             /* Reserved */
@@ -3744,7 +3754,7 @@ DECLINLINE(int) hmR0SvmHandleExit(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
  * Worker for hmR0SvmInterpretInvlpg().
  *
  * @return VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCpu            Pointer to the disassembler state.
  * @param   pCtx            The guest CPU context.
  */
@@ -3785,7 +3795,8 @@ static int hmR0SvmInterpretInvlPgEx(PVMCPU pVCpu, PDISCPUSTATE pCpu, PCPUMCTX pC
  * @retval  VERR_EM_INTERPRETER     Something we can't cope with.
  * @retval  VERR_*                  Fatal errors.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        The guest CPU context.
  *
  * @remarks Updates the RIP if the instruction was executed successfully.
@@ -3813,9 +3824,9 @@ static int hmR0SvmInterpretInvlpg(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
 
 
 /**
- * Sets an invalid-opcode (#UD) exception as pending-for-injection into the VM.
+ * Sets an invalid-opcode (\#UD) exception as pending-for-injection into the VM.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(void) hmR0SvmSetPendingXcptUD(PVMCPU pVCpu)
 {
@@ -3829,9 +3840,9 @@ DECLINLINE(void) hmR0SvmSetPendingXcptUD(PVMCPU pVCpu)
 
 
 /**
- * Sets a debug (#DB) exception as pending-for-injection into the VM.
+ * Sets a debug (\#DB) exception as pending-for-injection into the VM.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(void) hmR0SvmSetPendingXcptDB(PVMCPU pVCpu)
 {
@@ -3845,9 +3856,9 @@ DECLINLINE(void) hmR0SvmSetPendingXcptDB(PVMCPU pVCpu)
 
 
 /**
- * Sets a page fault (#PF) exception as pending-for-injection into the VM.
+ * Sets a page fault (\#PF) exception as pending-for-injection into the VM.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCtx            Pointer to the guest-CPU context.
  * @param   u32ErrCode      The error-code for the page-fault.
  * @param   uFaultAddress   The page fault address (CR2).
@@ -3876,10 +3887,10 @@ DECLINLINE(void) hmR0SvmSetPendingXcptPF(PVMCPU pVCpu, PCPUMCTX pCtx, uint32_t u
 
 
 /**
- * Sets a device-not-available (#NM) exception as pending-for-injection into the
- * VM.
+ * Sets a device-not-available (\#NM) exception as pending-for-injection into
+ * the VM.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(void) hmR0SvmSetPendingXcptNM(PVMCPU pVCpu)
 {
@@ -3893,9 +3904,9 @@ DECLINLINE(void) hmR0SvmSetPendingXcptNM(PVMCPU pVCpu)
 
 
 /**
- * Sets a math-fault (#MF) exception as pending-for-injection into the VM.
+ * Sets a math-fault (\#MF) exception as pending-for-injection into the VM.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(void) hmR0SvmSetPendingXcptMF(PVMCPU pVCpu)
 {
@@ -3909,9 +3920,9 @@ DECLINLINE(void) hmR0SvmSetPendingXcptMF(PVMCPU pVCpu)
 
 
 /**
- * Sets a double fault (#DF) exception as pending-for-injection into the VM.
+ * Sets a double fault (\#DF) exception as pending-for-injection into the VM.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(void) hmR0SvmSetPendingXcptDF(PVMCPU pVCpu)
 {
@@ -3939,8 +3950,8 @@ DECLINLINE(void) hmR0SvmSetPendingXcptDF(PVMCPU pVCpu)
  * @retval VERR_NOT_FOUND if no patch record for this RIP could be found.
  * @retval VERR_SVM_UNEXPECTED_PATCH_TYPE if the found patch type is invalid.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
 static int hmR0SvmEmulateMovTpr(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -4041,12 +4052,13 @@ DECLINLINE(bool) hmR0SvmIsContributoryXcpt(const uint32_t uVector)
  * IDT.
  *
  * @returns VBox status code (informational error codes included).
- * @retval VINF_SUCCESS if we should continue handling the #VMEXIT.
- * @retval VINF_HM_DOUBLE_FAULT if a #DF condition was detected and we ought to
- *         continue execution of the guest which will delivery the #DF.
+ * @retval VINF_SUCCESS if we should continue handling the \#VMEXIT.
+ * @retval VINF_HM_DOUBLE_FAULT if a \#DF condition was detected and we ought to
+ *         continue execution of the guest which will delivery the \#DF.
  * @retval VINF_EM_RESET if we detected a triple-fault condition.
+ * @retval VERR_EM_GUEST_CPU_HANG if we detected a guest CPU hang.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCtx            Pointer to the guest-CPU context.
  * @param   pSvmTransient   Pointer to the SVM transient structure.
  *
@@ -4068,6 +4080,7 @@ static int hmR0SvmCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMT
             SVMREFLECTXCPT_XCPT,    /* Reflect the exception to the guest or for further evaluation by VMM. */
             SVMREFLECTXCPT_DF,      /* Reflect the exception as a double-fault to the guest. */
             SVMREFLECTXCPT_TF,      /* Indicate a triple faulted state to the VMM. */
+            SVMREFLECTXCPT_HANG,    /* Indicate bad VM trying to deadlock the CPU. */
             SVMREFLECTXCPT_NONE     /* Nothing to reflect. */
         } SVMREFLECTXCPT;
 
@@ -4092,6 +4105,12 @@ static int hmR0SvmCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMT
                     pSvmTransient->fVectoringDoublePF = true;
                     Log4(("IDT: Vectoring double #PF uCR2=%#RX64\n", pCtx->cr2));
                 }
+                else if (   uExitVector == X86_XCPT_AC
+                         && uIdtVector  == X86_XCPT_AC)
+                {
+                    Log4(("IDT: Nested #AC - bad guest\n"));
+                    enmReflect = SVMREFLECTXCPT_HANG;
+                }
                 else if (   (pVmcb->ctrl.u32InterceptException & HMSVM_CONTRIBUTORY_XCPT_MASK)
                          && hmR0SvmIsContributoryXcpt(uExitVector)
                          && (   hmR0SvmIsContributoryXcpt(uIdtVector)
@@ -4167,12 +4186,18 @@ static int hmR0SvmCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMT
                 break;
             }
 
+            case SVMREFLECTXCPT_HANG:
+            {
+                rc = VERR_EM_GUEST_CPU_HANG;
+                break;
+            }
+
             default:
                 Assert(rc == VINF_SUCCESS);
                 break;
         }
     }
-    Assert(rc == VINF_SUCCESS || rc == VINF_HM_DOUBLE_FAULT || rc == VINF_EM_RESET);
+    Assert(rc == VINF_SUCCESS || rc == VINF_HM_DOUBLE_FAULT || rc == VINF_EM_RESET || rc == VERR_EM_GUEST_CPU_HANG);
     NOREF(pCtx);
     return rc;
 }
@@ -4182,11 +4207,11 @@ static int hmR0SvmCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMT
  * Advances the guest RIP in the if the NRIP_SAVE feature is supported by the
  * CPU, otherwise advances the RIP by @a cb bytes.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  * @param   cb          RIP increment value in bytes.
  *
- * @remarks Use this function only from #VMEXIT's where the NRIP value is valid
+ * @remarks Use this function only from \#VMEXIT's where the NRIP value is valid
  *          when NRIP_SAVE is supported by the CPU!
  */
 DECLINLINE(void) hmR0SvmUpdateRip(PVMCPU pVCpu, PCPUMCTX pCtx, uint32_t cb)
@@ -4206,12 +4231,12 @@ DECLINLINE(void) hmR0SvmUpdateRip(PVMCPU pVCpu, PCPUMCTX pCtx, uint32_t cb)
 /* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #VMEXIT handlers -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
 /* -=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
 
-/** @name #VMEXIT handlers.
+/** @name \#VMEXIT handlers.
  * @{
  */
 
 /**
- * #VMEXIT handler for external interrupts, NMIs, FPU assertion freeze and INIT
+ * \#VMEXIT handler for external interrupts, NMIs, FPU assertion freeze and INIT
  * signals (SVM_EXIT_INTR, SVM_EXIT_NMI, SVM_EXIT_FERR_FREEZE, SVM_EXIT_INIT).
  */
 HMSVM_EXIT_DECL hmR0SvmExitIntr(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
@@ -4236,7 +4261,7 @@ HMSVM_EXIT_DECL hmR0SvmExitIntr(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmT
 
 
 /**
- * #VMEXIT handler for WBINVD (SVM_EXIT_WBINVD). Conditional #VMEXIT.
+ * \#VMEXIT handler for WBINVD (SVM_EXIT_WBINVD). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitWbinvd(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4251,7 +4276,7 @@ HMSVM_EXIT_DECL hmR0SvmExitWbinvd(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
 
 
 /**
- * #VMEXIT handler for INVD (SVM_EXIT_INVD). Unconditional #VMEXIT.
+ * \#VMEXIT handler for INVD (SVM_EXIT_INVD). Unconditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitInvd(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4266,7 +4291,7 @@ HMSVM_EXIT_DECL hmR0SvmExitInvd(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmT
 
 
 /**
- * #VMEXIT handler for INVD (SVM_EXIT_CPUID). Conditional #VMEXIT.
+ * \#VMEXIT handler for INVD (SVM_EXIT_CPUID). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitCpuid(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4289,7 +4314,7 @@ HMSVM_EXIT_DECL hmR0SvmExitCpuid(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvm
 
 
 /**
- * #VMEXIT handler for RDTSC (SVM_EXIT_RDTSC). Conditional #VMEXIT.
+ * \#VMEXIT handler for RDTSC (SVM_EXIT_RDTSC). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitRdtsc(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4315,7 +4340,7 @@ HMSVM_EXIT_DECL hmR0SvmExitRdtsc(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvm
 
 
 /**
- * #VMEXIT handler for RDTSCP (SVM_EXIT_RDTSCP). Conditional #VMEXIT.
+ * \#VMEXIT handler for RDTSCP (SVM_EXIT_RDTSCP). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitRdtscp(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4338,7 +4363,7 @@ HMSVM_EXIT_DECL hmR0SvmExitRdtscp(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
 
 
 /**
- * #VMEXIT handler for RDPMC (SVM_EXIT_RDPMC). Conditional #VMEXIT.
+ * \#VMEXIT handler for RDPMC (SVM_EXIT_RDPMC). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitRdpmc(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4360,7 +4385,7 @@ HMSVM_EXIT_DECL hmR0SvmExitRdpmc(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvm
 
 
 /**
- * #VMEXIT handler for INVLPG (SVM_EXIT_INVLPG). Conditional #VMEXIT.
+ * \#VMEXIT handler for INVLPG (SVM_EXIT_INVLPG). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitInvlpg(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4378,7 +4403,7 @@ HMSVM_EXIT_DECL hmR0SvmExitInvlpg(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
 
 
 /**
- * #VMEXIT handler for HLT (SVM_EXIT_HLT). Conditional #VMEXIT.
+ * \#VMEXIT handler for HLT (SVM_EXIT_HLT). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitHlt(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4395,7 +4420,7 @@ HMSVM_EXIT_DECL hmR0SvmExitHlt(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTr
 
 
 /**
- * #VMEXIT handler for MONITOR (SVM_EXIT_MONITOR). Conditional #VMEXIT.
+ * \#VMEXIT handler for MONITOR (SVM_EXIT_MONITOR). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitMonitor(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4417,7 +4442,7 @@ HMSVM_EXIT_DECL hmR0SvmExitMonitor(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
 
 
 /**
- * #VMEXIT handler for MWAIT (SVM_EXIT_MWAIT). Conditional #VMEXIT.
+ * \#VMEXIT handler for MWAIT (SVM_EXIT_MWAIT). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitMwait(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4449,8 +4474,8 @@ HMSVM_EXIT_DECL hmR0SvmExitMwait(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvm
 
 
 /**
- * #VMEXIT handler for shutdown (triple-fault) (SVM_EXIT_SHUTDOWN).
- * Conditional #VMEXIT.
+ * \#VMEXIT handler for shutdown (triple-fault) (SVM_EXIT_SHUTDOWN). Conditional
+ * \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitShutdown(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4460,7 +4485,7 @@ HMSVM_EXIT_DECL hmR0SvmExitShutdown(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT p
 
 
 /**
- * #VMEXIT handler for CRx reads (SVM_EXIT_READ_CR*). Conditional #VMEXIT.
+ * \#VMEXIT handler for CRx reads (SVM_EXIT_READ_CR*). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitReadCRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4481,7 +4506,7 @@ HMSVM_EXIT_DECL hmR0SvmExitReadCRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
 
 
 /**
- * #VMEXIT handler for CRx writes (SVM_EXIT_WRITE_CR*). Conditional #VMEXIT.
+ * \#VMEXIT handler for CRx writes (SVM_EXIT_WRITE_CR*). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitWriteCRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4529,8 +4554,8 @@ HMSVM_EXIT_DECL hmR0SvmExitWriteCRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT p
 
 
 /**
- * #VMEXIT handler for instructions that result in a #UD exception delivered to
- * the guest.
+ * \#VMEXIT handler for instructions that result in a \#UD exception delivered
+ * to the guest.
  */
 HMSVM_EXIT_DECL hmR0SvmExitSetPendingXcptUD(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4541,7 +4566,8 @@ HMSVM_EXIT_DECL hmR0SvmExitSetPendingXcptUD(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRA
 
 
 /**
- * #VMEXIT handler for MSR read and writes (SVM_EXIT_MSR). Conditional #VMEXIT.
+ * \#VMEXIT handler for MSR read and writes (SVM_EXIT_MSR). Conditional
+ * \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitMsr(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4643,7 +4669,7 @@ HMSVM_EXIT_DECL hmR0SvmExitMsr(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTr
 
 
 /**
- * #VMEXIT handler for DRx read (SVM_EXIT_READ_DRx). Conditional #VMEXIT.
+ * \#VMEXIT handler for DRx read (SVM_EXIT_READ_DRx). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitReadDRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4707,7 +4733,7 @@ HMSVM_EXIT_DECL hmR0SvmExitReadDRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
 
 
 /**
- * #VMEXIT handler for DRx write (SVM_EXIT_WRITE_DRx). Conditional #VMEXIT.
+ * \#VMEXIT handler for DRx write (SVM_EXIT_WRITE_DRx). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitWriteDRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4721,7 +4747,7 @@ HMSVM_EXIT_DECL hmR0SvmExitWriteDRx(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT p
 
 
 /**
- * #VMEXIT handler for XCRx write (SVM_EXIT_XSETBV). Conditional #VMEXIT.
+ * \#VMEXIT handler for XCRx write (SVM_EXIT_XSETBV). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitXsetbv(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4742,7 +4768,7 @@ HMSVM_EXIT_DECL hmR0SvmExitXsetbv(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
 
 
 /**
- * #VMEXIT handler for I/O instructions (SVM_EXIT_IOIO). Conditional #VMEXIT.
+ * \#VMEXIT handler for I/O instructions (SVM_EXIT_IOIO). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitIOInstr(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -4960,8 +4986,7 @@ HMSVM_EXIT_DECL hmR0SvmExitIOInstr(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
 
 
 /**
- * #VMEXIT handler for Nested Page-faults (SVM_EXIT_NPF). Conditional
- * #VMEXIT.
+ * \#VMEXIT handler for Nested Page-faults (SVM_EXIT_NPF). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitNestedPF(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -5064,7 +5089,8 @@ HMSVM_EXIT_DECL hmR0SvmExitNestedPF(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT p
 
 
 /**
- * #VMEXIT handler for virtual interrupt (SVM_EXIT_VINTR). Conditional #VMEXIT.
+ * \#VMEXIT handler for virtual interrupt (SVM_EXIT_VINTR). Conditional
+ * \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitVIntr(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -5085,7 +5111,8 @@ HMSVM_EXIT_DECL hmR0SvmExitVIntr(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvm
 
 
 /**
- * #VMEXIT handler for task switches (SVM_EXIT_TASK_SWITCH). Conditional #VMEXIT.
+ * \#VMEXIT handler for task switches (SVM_EXIT_TASK_SWITCH). Conditional
+ * \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitTaskSwitch(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -5117,7 +5144,7 @@ HMSVM_EXIT_DECL hmR0SvmExitTaskSwitch(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT
 
 
 /**
- * #VMEXIT handler for VMMCALL (SVM_EXIT_VMMCALL). Conditional #VMEXIT.
+ * \#VMEXIT handler for VMMCALL (SVM_EXIT_VMMCALL). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitVmmCall(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -5152,7 +5179,7 @@ HMSVM_EXIT_DECL hmR0SvmExitVmmCall(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pS
 
 
 /**
- * #VMEXIT handler for IRET (SVM_EXIT_IRET). Conditional #VMEXIT.
+ * \#VMEXIT handler for IRET (SVM_EXIT_IRET). Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitIret(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -5171,8 +5198,8 @@ HMSVM_EXIT_DECL hmR0SvmExitIret(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmT
 
 
 /**
- * #VMEXIT handler for page-fault exceptions (SVM_EXIT_EXCEPTION_E). Conditional
- * #VMEXIT.
+ * \#VMEXIT handler for page-fault exceptions (SVM_EXIT_EXCEPTION_E).
+ * Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitXcptPF(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -5291,8 +5318,8 @@ HMSVM_EXIT_DECL hmR0SvmExitXcptPF(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
 
 
 /**
- * #VMEXIT handler for device-not-available exceptions (SVM_EXIT_EXCEPTION_7).
- * Conditional #VMEXIT.
+ * \#VMEXIT handler for device-not-available exceptions (SVM_EXIT_EXCEPTION_7).
+ * Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitXcptNM(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -5342,8 +5369,8 @@ HMSVM_EXIT_DECL hmR0SvmExitXcptNM(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
 
 
 /**
- * #VMEXIT handler for undefined opcode (SVM_EXIT_EXCEPTION_6).
- * Conditional #VMEXIT.
+ * \#VMEXIT handler for undefined opcode (SVM_EXIT_EXCEPTION_6). Conditional
+ * \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitXcptUD(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -5362,8 +5389,8 @@ HMSVM_EXIT_DECL hmR0SvmExitXcptUD(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
 
 
 /**
- * #VMEXIT handler for math-fault exceptions (SVM_EXIT_EXCEPTION_10).
- * Conditional #VMEXIT.
+ * \#VMEXIT handler for math-fault exceptions (SVM_EXIT_EXCEPTION_10).
+ * Conditional \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitXcptMF(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -5397,8 +5424,8 @@ HMSVM_EXIT_DECL hmR0SvmExitXcptMF(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
 
 
 /**
- * #VMEXIT handler for debug exceptions (SVM_EXIT_EXCEPTION_1). Conditional
- * #VMEXIT.
+ * \#VMEXIT handler for debug exceptions (SVM_EXIT_EXCEPTION_1). Conditional
+ * \#VMEXIT.
  */
 HMSVM_EXIT_DECL hmR0SvmExitXcptDB(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
 {
@@ -5442,5 +5469,25 @@ HMSVM_EXIT_DECL hmR0SvmExitXcptDB(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
     return rc;
 }
 
+
+/**
+ * \#VMEXIT handler for alignment check exceptions (SVM_EXIT_EXCEPTION_11).
+ * Conditional \#VMEXIT.
+ */
+HMSVM_EXIT_DECL hmR0SvmExitXcptAC(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSvmTransient)
+{
+    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS();
+
+    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_AC;
+    hmR0SvmSetPendingEvent(pVCpu, &Event, 0 /* GCPtrFaultAddress */);
+    return VINF_SUCCESS;
+}
+
 /** @} */
 
diff --git a/src/VBox/VMM/VMMR0/HMSVMR0.h b/src/VBox/VMM/VMMR0/HMSVMR0.h
index 10d2f3b..b1e9146 100644
--- a/src/VBox/VMM/VMMR0/HMSVMR0.h
+++ b/src/VBox/VMM/VMMR0/HMSVMR0.h
@@ -63,8 +63,8 @@ VMMR0DECL(int) SVMR0Execute64BitsHandler(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, H
  * @param   pVMCBHostPhys   Physical address of host VMCB.
  * @param   pVMCBPhys       Physical address of the VMCB.
  * @param   pCtx            Pointer to the guest CPU context.
- * @param   pVM             Pointer to the VM. (not used)
- * @param   pVCpu           Pointer to the VMCPU. (not used)
+ * @param   pVM             The cross context VM structure. (Not used.)
+ * @param   pVCpu           The cross context virtual CPU structure. (Not used.)
  */
 DECLASM(int) SVMR0VMRun(RTHCPHYS pVMCBHostPhys, RTHCPHYS pVMCBPhys, PCPUMCTX pCtx, PVM pVM, PVMCPU pVCpu);
 
@@ -76,8 +76,8 @@ DECLASM(int) SVMR0VMRun(RTHCPHYS pVMCBHostPhys, RTHCPHYS pVMCBPhys, PCPUMCTX pCt
  * @param   pVMCBHostPhys   Physical address of host VMCB.
  * @param   pVMCBPhys       Physical address of the VMCB.
  * @param   pCtx            Pointer to the guest CPU context.
- * @param   pVM             Pointer to the VM. (not used)
- * @param   pVCpu           Pointer to the VMCPU. (not used)
+ * @param   pVM             The cross context VM structure. (Not used.)
+ * @param   pVCpu           The cross context virtual CPU structure. (Not used.)
  */
 DECLASM(int) SVMR0VMRun64(RTHCPHYS pVMCBHostPhys, RTHCPHYS pVMCBPhys, PCPUMCTX pCtx, PVM pVM, PVMCPU pVCpu);
 
@@ -95,5 +95,5 @@ DECLASM(void) SVMR0InvlpgA(RTGCPTR pPageGC, uint32_t u32ASID);
 
 RT_C_DECLS_END
 
-#endif /* ___HMSVMR0_h */
+#endif /* !___HMSVMR0_h */
 
diff --git a/src/VBox/VMM/VMMR0/HMVMXR0.cpp b/src/VBox/VMM/VMMR0/HMVMXR0.cpp
index d5f6765..7208c64 100644
--- a/src/VBox/VMM/VMMR0/HMVMXR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMVMXR0.cpp
@@ -137,17 +137,17 @@
  * Exception bitmap mask for real-mode guests (real-on-v86).
  *
  * We need to intercept all exceptions manually except:
- * - #NM, #MF handled in hmR0VmxLoadSharedCR0().
- * - #DB handled in hmR0VmxLoadSharedDebugState().
- * - #PF need not be intercepted even in real-mode if we have Nested Paging
+ * - \#NM, \#MF handled in hmR0VmxLoadSharedCR0().
+ * - \#DB handled in hmR0VmxLoadSharedDebugState().
+ * - \#PF need not be intercepted even in real-mode if we have Nested Paging
  * support.
  */
-#define HMVMX_REAL_MODE_XCPT_MASK    (  RT_BIT(X86_XCPT_DE)            /* RT_BIT(X86_XCPT_DB) */ | RT_BIT(X86_XCPT_NMI)   \
+#define HMVMX_REAL_MODE_XCPT_MASK    (  RT_BIT(X86_XCPT_DE)  /* always: | RT_BIT(X86_XCPT_DB) */ | RT_BIT(X86_XCPT_NMI)   \
                                       | RT_BIT(X86_XCPT_BP)             | RT_BIT(X86_XCPT_OF)    | RT_BIT(X86_XCPT_BR)    \
                                       | RT_BIT(X86_XCPT_UD)            /* RT_BIT(X86_XCPT_NM) */ | RT_BIT(X86_XCPT_DF)    \
                                       | RT_BIT(X86_XCPT_CO_SEG_OVERRUN) | RT_BIT(X86_XCPT_TS)    | RT_BIT(X86_XCPT_NP)    \
                                       | RT_BIT(X86_XCPT_SS)             | RT_BIT(X86_XCPT_GP)   /* RT_BIT(X86_XCPT_PF) */ \
-                                     /* RT_BIT(X86_XCPT_MF) */          | RT_BIT(X86_XCPT_AC)    | RT_BIT(X86_XCPT_MC)    \
+                                     /* RT_BIT(X86_XCPT_MF)     always: | RT_BIT(X86_XCPT_AC) */ | RT_BIT(X86_XCPT_MC)    \
                                       | RT_BIT(X86_XCPT_XF))
 
 /**
@@ -316,7 +316,7 @@ typedef VMXMSREXITWRITE* PVMXMSREXITWRITE;
  * VMX VM-exit handler.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required
  *                          fields before using them.
@@ -407,6 +407,7 @@ static int          hmR0VmxExitXcptMF(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRAN
 static int          hmR0VmxExitXcptDB(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient);
 static int          hmR0VmxExitXcptBP(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient);
 static int          hmR0VmxExitXcptGP(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient);
+static int          hmR0VmxExitXcptAC(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient);
 #ifdef HMVMX_ALWAYS_TRAP_ALL_XCPTS
 static int          hmR0VmxExitXcptGeneric(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient);
 #endif
@@ -529,15 +530,16 @@ static const char * const g_apszVmxInstrErrors[HMVMX_INSTR_ERROR_MAX + 1] =
 
 
 /**
- * Updates the VM's last error record. If there was a VMX instruction error,
- * reads the error data from the VMCS and updates VCPU's last error record as
- * well.
+ * Updates the VM's last error record.
  *
- * @param    pVM        Pointer to the VM.
- * @param    pVCpu      Pointer to the VMCPU (can be NULL if @a rc is not
- *                      VERR_VMX_UNABLE_TO_START_VM or
- *                      VERR_VMX_INVALID_VMCS_FIELD).
- * @param    rc         The error code.
+ * If there was a VMX instruction error, reads the error data from the VMCS and
+ * updates VCPU's last error record as well.
+ *
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
+ *                  Can be NULL if @a rc is not VERR_VMX_UNABLE_TO_START_VM or
+ *                  VERR_VMX_INVALID_VMCS_FIELD.
+ * @param   rc      The error code.
  */
 static void hmR0VmxUpdateErrorRecord(PVM pVM, PVMCPU pVCpu, int rc)
 {
@@ -646,7 +648,6 @@ DECLINLINE(int) hmR0VmxReadExitIntErrorCodeVmcs(PVMXTRANSIENT pVmxTransient)
  * transient structure.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
  * @param   pVmxTransient   Pointer to the VMX transient structure.
  */
 DECLINLINE(int) hmR0VmxReadExitInstrLenVmcs(PVMXTRANSIENT pVmxTransient)
@@ -685,8 +686,8 @@ DECLINLINE(int) hmR0VmxReadExitInstrInfoVmcs(PVMXTRANSIENT pVmxTransient)
  * structure.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU (required for the VMCS cache
- *                          case).
+ * @param   pVCpu           The cross context virtual CPU structure of the
+ *                          calling EMT. (Required for the VMCS cache case.)
  * @param   pVmxTransient   Pointer to the VMX transient structure.
  */
 DECLINLINE(int) hmR0VmxReadExitQualificationVmcs(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient)
@@ -745,10 +746,10 @@ DECLINLINE(int) hmR0VmxReadIdtVectoringErrorCodeVmcs(PVMXTRANSIENT pVmxTransient
  * Enters VMX root mode operation on the current CPU.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM (optional, can be NULL, after
- *                              a resume).
- * @param   HCPhysCpuPage       Physical address of the VMXON region.
- * @param   pvCpuPage           Pointer to the VMXON region.
+ * @param   pVM             The cross context VM structure. Can be
+ *                          NULL, after a resume.
+ * @param   HCPhysCpuPage   Physical address of the VMXON region.
+ * @param   pvCpuPage       Pointer to the VMXON region.
  */
 static int hmR0VmxEnterRootMode(PVM pVM, RTHCPHYS HCPhysCpuPage, void *pvCpuPage)
 {
@@ -826,7 +827,7 @@ static int hmR0VmxLeaveRootMode(void)
  * @param   pMemObj         Pointer to the ring-0 memory object.
  * @param   ppVirt          Where to store the virtual address of the
  *                          allocation.
- * @param   pPhys           Where to store the physical address of the
+ * @param   pHCPhys         Where to store the physical address of the
  *                          allocation.
  */
 DECLINLINE(int) hmR0VmxPageAllocZ(PRTR0MEMOBJ pMemObj, PRTR0PTR ppVirt, PRTHCPHYS pHCPhys)
@@ -874,7 +875,7 @@ DECLINLINE(void) hmR0VmxPageFree(PRTR0MEMOBJ pMemObj, PRTR0PTR ppVirt, PRTHCPHYS
  * Worker function to free VT-x related structures.
  *
  * @returns IPRT status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 static void hmR0VmxStructsFree(PVM pVM)
 {
@@ -904,7 +905,7 @@ static void hmR0VmxStructsFree(PVM pVM)
  * Worker function to allocate VT-x related VM structures.
  *
  * @returns IPRT status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 static int hmR0VmxStructsAlloc(PVM pVM)
 {
@@ -1054,12 +1055,12 @@ VMMR0DECL(void) VMXR0GlobalTerm()
  *
  * @returns VBox status code.
  * @param   pCpu            Pointer to the global CPU info struct.
- * @param   pVM             Pointer to the VM (can be NULL after a host resume
- *                          operation).
+ * @param   pVM             The cross context VM structure.  Can be
+ *                          NULL after a host resume operation.
  * @param   pvCpuPage       Pointer to the VMXON region (can be NULL if @a
- *                          fEnabledByHost is true).
+ *                          fEnabledByHost is @c true).
  * @param   HCPhysCpuPage   Physical address of the VMXON region (can be 0 if
- *                          @a fEnabledByHost is true).
+ *                          @a fEnabledByHost is @c true).
  * @param   fEnabledByHost  Set if SUPR0EnableVTx() or similar was used to
  *                          enable VT-x on the host.
  * @param   pvMsrs          Opaque pointer to VMXMSRS struct.
@@ -1124,8 +1125,8 @@ VMMR0DECL(int) VMXR0DisableCpu(PHMGLOBALCPUINFO pCpu, void *pvCpuPage, RTHCPHYS
 /**
  * Sets the permission bits for the specified MSR in the MSR bitmap.
  *
- * @param   pVCpu       Pointer to the VMCPU.
- * @param   uMSR        The MSR value.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   uMsr        The MSR value.
  * @param   enmRead     Whether reading this MSR causes a VM-exit.
  * @param   enmWrite    Whether writing this MSR causes a VM-exit.
  */
@@ -1174,7 +1175,7 @@ static void hmR0VmxSetMsrPermission(PVMCPU pVCpu, uint32_t uMsr, VMXMSREXITREAD
  * @retval VERR_NOT_FOUND      if the specified MSR is not found.
  * @retval VERR_NOT_SUPPORTED  if VT-x doesn't allow the MSR.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   uMsr            The MSR.
  * @param   penmRead        Where to store the read permissions.
  * @param   penmWrite       Where to store the write permissions.
@@ -1218,7 +1219,7 @@ static int hmR0VmxGetMsrPermission(PVMCPU pVCpu, uint32_t uMsr, PVMXMSREXITREAD
  * area.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   cMsrs       The number of MSRs.
  */
 DECLINLINE(int) hmR0VmxSetAutoLoadStoreMsrCount(PVMCPU pVCpu, uint32_t cMsrs)
@@ -1252,9 +1253,9 @@ DECLINLINE(int) hmR0VmxSetAutoLoadStoreMsrCount(PVMCPU pVCpu, uint32_t cMsrs)
  * auto-load/store MSR area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   uMsr                The MSR.
- * @param   uGuestMsr           Value of the guest MSR.
+ * @param   uGuestMsrValue      Value of the guest MSR.
  * @param   fUpdateHostMsr      Whether to update the value of the host MSR if
  *                              necessary.
  * @param   pfAddedAndUpdated   Where to store whether the MSR was added -and-
@@ -1322,7 +1323,7 @@ static int hmR0VmxAddAutoLoadStoreMsr(PVMCPU pVCpu, uint32_t uMsr, uint64_t uGue
  * auto-load/store MSR area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   uMsr        The MSR.
  */
 static int hmR0VmxRemoveAutoLoadStoreMsr(PVMCPU pVCpu, uint32_t uMsr)
@@ -1381,7 +1382,7 @@ static int hmR0VmxRemoveAutoLoadStoreMsr(PVMCPU pVCpu, uint32_t uMsr)
  * the VMCS.
  *
  * @returns true if found, false otherwise.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   uMsr        The MSR to find.
  */
 static bool hmR0VmxIsAutoLoadStoreGuestMsr(PVMCPU pVCpu, uint32_t uMsr)
@@ -1401,7 +1402,7 @@ static bool hmR0VmxIsAutoLoadStoreGuestMsr(PVMCPU pVCpu, uint32_t uMsr)
 /**
  * Updates the value of all host MSRs in the auto-load/store area in the VMCS.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  */
@@ -1435,7 +1436,7 @@ static void hmR0VmxUpdateAutoLoadStoreHostMsrs(PVMCPU pVCpu)
  * Saves a set of host MSRs to allow read/write passthru access to the guest and
  * perform lazy restoration of the host MSRs while leaving VT-x.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  */
@@ -1462,7 +1463,7 @@ static void hmR0VmxLazySaveHostMsrs(PVMCPU pVCpu)
  * lazily while leaving VT-x.
  *
  * @returns true if it does, false otherwise.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   uMsr        The MSR to check.
  */
 static bool hmR0VmxIsLazyGuestMsr(PVMCPU pVCpu, uint32_t uMsr)
@@ -1483,7 +1484,7 @@ static bool hmR0VmxIsLazyGuestMsr(PVMCPU pVCpu, uint32_t uMsr)
 /**
  * Saves a set of guest MSRs back into the guest-CPU context.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -1514,7 +1515,7 @@ static void hmR0VmxLazySaveGuestMsrs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * common prefix for functions dealing with "lazy restoration" of the shared
  * MSRs.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -1559,7 +1560,7 @@ static void hmR0VmxLazyLoadGuestMsrs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Performs lazy restoration of the set of host MSRs if they were previously
  * loaded with guest MSR values.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  * @remarks The guest MSRs should have been saved back into the guest-CPU
@@ -1588,7 +1589,7 @@ static void hmR0VmxLazyRestoreHostMsrs(PVMCPU pVCpu)
  * consistent with what's actually present in the VMCS.
  *
  * @returns VBox status code.
- * @param pVCpu     Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 static int hmR0VmxCheckVmcsCtls(PVMCPU pVCpu)
 {
@@ -1631,7 +1632,7 @@ static int hmR0VmxCheckVmcsCtls(PVMCPU pVCpu)
  * Verifies that our cached host EFER value has not changed
  * since we cached it.
  *
- * @param pVCpu         Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static void hmR0VmxCheckHostEferMsr(PVMCPU pVCpu)
 {
@@ -1653,7 +1654,7 @@ static void hmR0VmxCheckHostEferMsr(PVMCPU pVCpu)
  * Verifies whether the guest/host MSR pairs in the auto-load/store area in the
  * VMCS are correct.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static void hmR0VmxCheckAutoLoadStoreMsrs(PVMCPU pVCpu)
 {
@@ -1711,8 +1712,8 @@ static void hmR0VmxCheckAutoLoadStoreMsrs(PVMCPU pVCpu)
  * Flushes the TLB using EPT.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU (can be NULL depending on @a
- *                      enmFlush).
+ * @param   pVCpu       The cross context virtual CPU structure of the calling
+ *                      EMT.  Can be NULL depending on @a enmFlush.
  * @param   enmFlush    Type of flush.
  *
  * @remarks Caller is responsible for making sure this function is called only
@@ -1747,9 +1748,9 @@ static void hmR0VmxFlushEpt(PVMCPU pVCpu, VMXFLUSHEPT enmFlush)
  * Flushes the TLB using VPID.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU (can be NULL depending on @a
- *                      enmFlush).
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling
+ *                      EMT.  Can be NULL depending on @a enmFlush.
  * @param   enmFlush    Type of flush.
  * @param   GCPtr       Virtual address of the page to flush (can be 0 depending
  *                      on @a enmFlush).
@@ -1793,8 +1794,8 @@ static void hmR0VmxFlushVpid(PVM pVM, PVMCPU pVCpu, VMXFLUSHVPID enmFlush, RTGCP
  * EPT/VPID, otherwise there is nothing really to invalidate.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCVirt      Guest virtual address of the page to invalidate.
  */
 VMMR0DECL(int) VMXR0InvalidatePage(PVM pVM, PVMCPU pVCpu, RTGCPTR GCVirt)
@@ -1836,8 +1837,8 @@ VMMR0DECL(int) VMXR0InvalidatePage(PVM pVM, PVMCPU pVCpu, RTGCPTR GCVirt)
  * otherwise there is nothing really to invalidate.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPhys      Guest physical address of the page to invalidate.
  */
 VMMR0DECL(int) VMXR0InvalidatePhysPage(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys)
@@ -1860,8 +1861,8 @@ VMMR0DECL(int) VMXR0InvalidatePhysPage(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys)
  * Dummy placeholder for tagged-TLB flush handling before VM-entry. Used in the
  * case where neither EPT nor VPID is supported by the CPU.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pCpu            Pointer to the global HM struct.
  *
  * @remarks Called with interrupts disabled.
@@ -1885,8 +1886,8 @@ static void hmR0VmxFlushTaggedTlbNone(PVM pVM, PVMCPU pVCpu, PHMGLOBALCPUINFO pC
 /**
  * Flushes the tagged-TLB entries for EPT+VPID CPUs as necessary.
  *
- * @param    pVM            Pointer to the VM.
- * @param    pVCpu          Pointer to the VMCPU.
+ * @param    pVM            The cross context VM structure.
+ * @param    pVCpu          The cross context virtual CPU structure.
  * @param    pCpu           Pointer to the global HM CPU struct.
  * @remarks All references to "ASID" in this function pertains to "VPID" in
  *          Intel's nomenclature. The reason is, to avoid confusion in compare
@@ -1987,8 +1988,8 @@ static void hmR0VmxFlushTaggedTlbBoth(PVM pVM, PVMCPU pVCpu, PHMGLOBALCPUINFO pC
  * Flushes the tagged-TLB entries for EPT CPUs as necessary.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCpu        Pointer to the global HM CPU struct.
  *
  * @remarks Called with interrupts disabled.
@@ -2035,8 +2036,8 @@ static void hmR0VmxFlushTaggedTlbEpt(PVM pVM, PVMCPU pVCpu, PHMGLOBALCPUINFO pCp
  * Flushes the tagged-TLB entries for VPID CPUs as necessary.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCpu        Pointer to the global HM CPU struct.
  *
  * @remarks Called with interrupts disabled.
@@ -2121,7 +2122,7 @@ static void hmR0VmxFlushTaggedTlbVpid(PVM pVM, PVMCPU pVCpu, PHMGLOBALCPUINFO pC
 /**
  * Flushes the guest TLB entry based on CPU capabilities.
  *
- * @param   pVCpu     Pointer to the VMCPU.
+ * @param   pVCpu     The cross context virtual CPU structure.
  * @param   pCpu      Pointer to the global HM CPU struct.
  */
 DECLINLINE(void) hmR0VmxFlushTaggedTlb(PVMCPU pVCpu, PHMGLOBALCPUINFO pCpu)
@@ -2150,7 +2151,7 @@ DECLINLINE(void) hmR0VmxFlushTaggedTlb(PVMCPU pVCpu, PHMGLOBALCPUINFO pCpu)
  * TLB entries from the host TLB before VM-entry.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int hmR0VmxSetupTaggedTlb(PVM pVM)
 {
@@ -2240,8 +2241,8 @@ static int hmR0VmxSetupTaggedTlb(PVM pVM)
  * Sets up pin-based VM-execution controls in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int hmR0VmxSetupPinCtls(PVM pVM, PVMCPU pVCpu)
 {
@@ -2284,8 +2285,8 @@ static int hmR0VmxSetupPinCtls(PVM pVM, PVMCPU pVCpu)
  * Sets up processor-based VM-execution controls in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVMCPU      Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int hmR0VmxSetupProcCtls(PVM pVM, PVMCPU pVCpu)
 {
@@ -2475,8 +2476,8 @@ static int hmR0VmxSetupProcCtls(PVM pVM, PVMCPU pVCpu)
  * VM-execution) control fields in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int hmR0VmxSetupMiscCtls(PVM pVM, PVMCPU pVCpu)
 {
@@ -2545,8 +2546,8 @@ static int hmR0VmxSetupMiscCtls(PVM pVM, PVMCPU pVCpu)
  * Sets up the initial exception bitmap in the VMCS based on static conditions.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int hmR0VmxInitXcptBitmap(PVM pVM, PVMCPU pVCpu)
 {
@@ -2557,6 +2558,15 @@ static int hmR0VmxInitXcptBitmap(PVM pVM, PVMCPU pVCpu)
 
     uint32_t u32XcptBitmap = pVCpu->hm.s.fGIMTrapXcptUD ? RT_BIT(X86_XCPT_UD) : 0;
 
+    /* Must always intercept #AC to prevent the guest from hanging the CPU. */
+    u32XcptBitmap |= RT_BIT_32(X86_XCPT_AC);
+
+    /* Because we need to maintain the DR6 state even when intercepting DRx reads
+       and writes, and because recursive #DBs can cause the CPU hang, we must always
+       intercept #DB. */
+    u32XcptBitmap |= RT_BIT_32(X86_XCPT_DB);
+
+
     /* Without Nested Paging, #PF must cause a VM-exit so we can sync our shadow page tables. */
     if (!pVM->hm.s.fNestedPaging)
         u32XcptBitmap |= RT_BIT(X86_XCPT_PF);
@@ -2573,7 +2583,7 @@ static int hmR0VmxInitXcptBitmap(PVM pVM, PVMCPU pVCpu)
  * before reading guest-state fields from the VMCS as VMREADs can be expensive
  * for the nested virtualization case (as it would cause a VM-exit).
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int hmR0VmxInitUpdatedGuestStateMask(PVMCPU pVCpu)
 {
@@ -2587,7 +2597,7 @@ static int hmR0VmxInitUpdatedGuestStateMask(PVMCPU pVCpu)
  * Does per-VM VT-x initialization.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR0DECL(int) VMXR0InitVM(PVM pVM)
 {
@@ -2608,7 +2618,7 @@ VMMR0DECL(int) VMXR0InitVM(PVM pVM)
  * Does per-VM VT-x termination.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0DECL(int) VMXR0TermVM(PVM pVM)
 {
@@ -2628,7 +2638,7 @@ VMMR0DECL(int) VMXR0TermVM(PVM pVM)
  * This function is only called once per-VM during initialization.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0DECL(int) VMXR0SetupVM(PVM pVM)
 {
@@ -2743,8 +2753,8 @@ VMMR0DECL(int) VMXR0SetupVM(PVM pVM)
  * the VMCS.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(int) hmR0VmxSaveHostControlRegs(PVM pVM, PVMCPU pVCpu)
 {
@@ -2794,8 +2804,8 @@ DECLINLINE(int) hmR0VmxSaveHostControlRegs(PVM pVM, PVMCPU pVCpu)
  * the host-state area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(int) hmR0VmxSaveHostSegmentRegs(PVM pVM, PVMCPU pVCpu)
 {
@@ -2988,8 +2998,8 @@ DECLINLINE(int) hmR0VmxSaveHostSegmentRegs(PVM pVM, PVMCPU pVCpu)
  * the host after every successful VM-exit.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  */
@@ -3050,7 +3060,7 @@ DECLINLINE(int) hmR0VmxSaveHostMsrs(PVM pVM, PVMCPU pVCpu)
  * hmR0VMxLoadGuestEntryCtls().
  *
  * @returns true if we need to load guest EFER, false otherwise.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3110,7 +3120,7 @@ static bool hmR0VmxShouldSwapEferMsr(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * controls".
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3178,8 +3188,7 @@ DECLINLINE(int) hmR0VmxLoadGuestEntryCtls(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Sets up the VM-exit controls in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3260,8 +3269,7 @@ DECLINLINE(int) hmR0VmxLoadGuestExitCtls(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Loads the guest APIC and related state.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3318,7 +3326,7 @@ DECLINLINE(int) hmR0VmxLoadGuestApicState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Gets the guest's interruptibility-state ("interrupt shadow" as AMD calls it).
  *
  * @returns Guest's interruptibility-state.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3368,8 +3376,8 @@ DECLINLINE(uint32_t) hmR0VmxGetGuestIntrState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * VMCS.
  *
  * @returns VBox status code.
- * @param pVCpu         Pointer to the VMCPU.
- * @param uIntrState    The interruptibility-state to set.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   uIntrState  The interruptibility-state to set.
  */
 static int hmR0VmxLoadGuestIntrState(PVMCPU pVCpu, uint32_t uIntrState)
 {
@@ -3386,7 +3394,7 @@ static int hmR0VmxLoadGuestIntrState(PVMCPU pVCpu, uint32_t uIntrState)
  * Loads the exception intercepts required for guest execution in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3397,6 +3405,9 @@ static int hmR0VmxLoadGuestXcptIntercepts(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
     int rc = VINF_SUCCESS;
     if (HMCPU_CF_IS_PENDING(pVCpu, HM_CHANGED_GUEST_XCPT_INTERCEPTS))
     {
+        Assert(pVCpu->hm.s.vmx.u32XcptBitmap & RT_BIT_32(X86_XCPT_AC));
+        Assert(pVCpu->hm.s.vmx.u32XcptBitmap & RT_BIT_32(X86_XCPT_DB));
+
         /* The remaining exception intercepts are handled elsewhere, e.g. in hmR0VmxLoadSharedCR0(). */
         if (pVCpu->hm.s.fGIMTrapXcptUD)
             pVCpu->hm.s.vmx.u32XcptBitmap |= RT_BIT(X86_XCPT_UD);
@@ -3422,7 +3433,7 @@ static int hmR0VmxLoadGuestXcptIntercepts(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Loads the guest's RIP into the guest-state area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3449,7 +3460,7 @@ static int hmR0VmxLoadGuestRip(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Loads the guest's RSP into the guest-state area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3475,7 +3486,7 @@ static int hmR0VmxLoadGuestRsp(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Loads the guest's RFLAGS into the guest-state area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3528,7 +3539,7 @@ static int hmR0VmxLoadGuestRflags(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Loads the guest RIP, RSP and RFLAGS into the guest-state area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3552,8 +3563,7 @@ DECLINLINE(int) hmR0VmxLoadGuestRipRspRflags(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * CR0 is partially shared with the host and we have to consider the FPU bits.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3660,7 +3670,6 @@ static int hmR0VmxLoadSharedCR0(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
 #ifdef HMVMX_ALWAYS_TRAP_ALL_XCPTS
         pVCpu->hm.s.vmx.u32XcptBitmap |= 0
                                          | RT_BIT(X86_XCPT_BP)
-                                         | RT_BIT(X86_XCPT_DB)
                                          | RT_BIT(X86_XCPT_DE)
                                          | RT_BIT(X86_XCPT_NM)
                                          | RT_BIT(X86_XCPT_TS)
@@ -3676,6 +3685,8 @@ static int hmR0VmxLoadSharedCR0(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
 #endif
 
         Assert(pVM->hm.s.fNestedPaging || (pVCpu->hm.s.vmx.u32XcptBitmap & RT_BIT(X86_XCPT_PF)));
+        Assert(pVCpu->hm.s.vmx.u32XcptBitmap & RT_BIT_32(X86_XCPT_AC));
+        Assert(pVCpu->hm.s.vmx.u32XcptBitmap & RT_BIT_32(X86_XCPT_DB));
 
         /* Set/clear the CR0 specific bits along with their exceptions (PE, PG, CD, NW). */
         uint32_t uSetCR0 = (uint32_t)(pVM->hm.s.vmx.Msrs.u64Cr0Fixed0 & pVM->hm.s.vmx.Msrs.u64Cr0Fixed1);
@@ -3743,8 +3754,7 @@ static int hmR0VmxLoadSharedCR0(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3947,12 +3957,13 @@ static int hmR0VmxLoadGuestCR3AndCR4(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
 
 /**
  * Loads the guest debug registers into the guest-state area in the VMCS.
- * This also sets up whether #DB and MOV DRx accesses cause VM-exits.
+ *
+ * This also sets up whether \#DB and MOV DRx accesses cause VM-exits.
  *
  * The guest debug bits are partially shared with the host (e.g. DR6, DR0-3).
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -3976,7 +3987,7 @@ static int hmR0VmxLoadSharedDebugState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
 
     int  rc;
     PVM  pVM              = pVCpu->CTX_SUFF(pVM);
-    bool fInterceptDB     = false;
+    bool fSteppingDB      = false;
     bool fInterceptMovDRx = false;
     if (   pVCpu->hm.s.fSingleInstruction
         || DBGFIsStepping(pVCpu))
@@ -3987,18 +3998,18 @@ static int hmR0VmxLoadSharedDebugState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
             pVCpu->hm.s.vmx.u32ProcCtls |= VMX_VMCS_CTRL_PROC_EXEC_MONITOR_TRAP_FLAG;
             rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.u32ProcCtls);
             AssertRCReturn(rc, rc);
-            Assert(fInterceptDB == false);
+            Assert(fSteppingDB == false);
         }
         else
         {
             pMixedCtx->eflags.u32 |= X86_EFL_TF;
             pVCpu->hm.s.fClearTrapFlag = true;
             HMCPU_CF_SET(pVCpu, HM_CHANGED_GUEST_RFLAGS);
-            fInterceptDB = true;
+            fSteppingDB = true;
         }
     }
 
-    if (   fInterceptDB
+    if (   fSteppingDB
         || (CPUMGetHyperDR7(pVCpu) & X86_DR7_ENABLED_MASK))
     {
         /*
@@ -4030,7 +4041,6 @@ static int hmR0VmxLoadSharedDebugState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
         AssertRCReturn(rc, rc);
 
         pVCpu->hm.s.fUsingHyperDR7 = true;
-        fInterceptDB = true;
         fInterceptMovDRx = true;
     }
     else
@@ -4059,12 +4069,13 @@ static int hmR0VmxLoadSharedDebugState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
                 Assert(!CPUMIsHyperDebugStateActive(pVCpu));
                 STAM_COUNTER_INC(&pVCpu->hm.s.StatDRxArmed);
             }
-            Assert(!fInterceptDB);
             Assert(!fInterceptMovDRx);
         }
         /*
          * If no debugging enabled, we'll lazy load DR0-3.  Unlike on AMD-V, we
-         * must intercept #DB in order to maintain a correct DR6 guest value.
+         * must intercept #DB in order to maintain a correct DR6 guest value, and
+         * because we need to intercept it to prevent nested #DBs from hanging the
+         * CPU, we end up always having to intercept it.  See hmR0VmxInitXcptBitmap.
          */
 #if HC_ARCH_BITS == 32 && defined(VBOX_WITH_64_BITS_GUESTS)
         else if (   !CPUMIsGuestDebugStateActivePending(pVCpu)
@@ -4072,10 +4083,7 @@ static int hmR0VmxLoadSharedDebugState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
 #else
         else if (!CPUMIsGuestDebugStateActive(pVCpu))
 #endif
-        {
             fInterceptMovDRx = true;
-            fInterceptDB = true;
-        }
 
         /* Update guest DR7. */
         rc = VMXWriteVmcs32(VMX_VMCS_GUEST_DR7, pMixedCtx->dr[7]);
@@ -4085,23 +4093,6 @@ static int hmR0VmxLoadSharedDebugState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
     }
 
     /*
-     * Update the exception bitmap regarding intercepting #DB generated by the guest.
-     */
-    if (   fInterceptDB
-        || pVCpu->hm.s.vmx.RealMode.fRealOnV86Active)
-    {
-        pVCpu->hm.s.vmx.u32XcptBitmap |= RT_BIT(X86_XCPT_DB);
-        HMCPU_CF_SET(pVCpu, HM_CHANGED_GUEST_XCPT_INTERCEPTS);
-    }
-    else
-    {
-#ifndef HMVMX_ALWAYS_TRAP_ALL_XCPTS
-        pVCpu->hm.s.vmx.u32XcptBitmap &= ~RT_BIT(X86_XCPT_DB);
-        HMCPU_CF_SET(pVCpu, HM_CHANGED_GUEST_XCPT_INTERCEPTS);
-#endif
-    }
-
-    /*
      * Update the processor-based VM-execution controls regarding intercepting MOV DRx instructions.
      */
     if (fInterceptMovDRx)
@@ -4290,7 +4281,7 @@ static void hmR0VmxValidateSegmentRegs(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Writes a guest segment register into the guest-state area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idxSel      Index of the selector in the VMCS.
  * @param   idxLimit    Index of the segment limit in the VMCS.
  * @param   idxBase     Index of the segment base in the VMCS.
@@ -4344,8 +4335,7 @@ static int hmR0VmxWriteSegmentReg(PVMCPU pVCpu, uint32_t idxSel, uint32_t idxLim
  * into the guest-state area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCPU       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -4567,7 +4557,7 @@ static int hmR0VmxLoadGuestSegmentRegs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Also loads the sysenter MSRs into the guest-state area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -4671,16 +4661,16 @@ static int hmR0VmxLoadGuestMsrs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Loads the guest activity state into the guest-state area in the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
  *
  * @remarks No-long-jump zone!!!
  */
-static int hmR0VmxLoadGuestActivityState(PVMCPU pVCpu, PCPUMCTX pCtx)
+static int hmR0VmxLoadGuestActivityState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
 {
-    NOREF(pCtx);
+    NOREF(pMixedCtx);
     /** @todo See if we can make use of other states, e.g.
      *        VMX_VMCS_GUEST_ACTIVITY_SHUTDOWN or HLT.  */
     if (HMCPU_CF_IS_PENDING(pVCpu, HM_CHANGED_VMX_GUEST_ACTIVITY_STATE))
@@ -4698,7 +4688,7 @@ static int hmR0VmxLoadGuestActivityState(PVMCPU pVCpu, PCPUMCTX pCtx)
  * Sets up the appropriate function to run guest code.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -4755,8 +4745,8 @@ static int hmR0VmxSetupVMRunHandler(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Wrapper for running the guest code in VT-x.
  *
  * @returns VBox strict status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
  * @remarks No-long-jump zone!!!
@@ -4781,8 +4771,8 @@ DECLINLINE(int) hmR0VmxRunGuest(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
 /**
  * Reports world-switch error and dumps some useful debug info.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   rcVMRun         The return code from VMLAUNCH/VMRESUME.
  * @param   pCtx            Pointer to the guest-CPU context.
  * @param   pVmxTransient   Pointer to the VMX transient structure (only
@@ -5034,8 +5024,8 @@ static bool hmR0VmxIsValidReadField(uint32_t idxField)
  * Executes the specified handler in 64-bit mode.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest CPU context.
  * @param   enmOp       The operation to perform.
  * @param   cParams     Number of parameters.
@@ -5122,8 +5112,8 @@ VMMR0DECL(int) VMXR0Execute64BitsHandler(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, H
  * @param   fResume     Whether to VMLAUNCH or VMRESUME.
  * @param   pCtx        Pointer to the guest-CPU context.
  * @param   pCache      Pointer to the VMCS cache.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLASM(int) VMXR0SwitcherStartVM64(RTHCUINT fResume, PCPUMCTX pCtx, PVMCSCACHE pCache, PVM pVM, PVMCPU pVCpu)
 {
@@ -5201,8 +5191,8 @@ DECLASM(int) VMXR0SwitcherStartVM64(RTHCUINT fResume, PCPUMCTX pCtx, PVMCSCACHE
  * (those that have a 32-bit FULL & HIGH part).
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int hmR0VmxInitVmcsReadCache(PVM pVM, PVMCPU pVCpu)
 {
@@ -5294,7 +5284,7 @@ static int hmR0VmxInitVmcsReadCache(PVM pVM, PVMCPU pVCpu)
  * darwin, running 64-bit guests).
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   idxField        The VMCS field encoding.
  * @param   u64Val          16, 32 or 64-bit value.
  */
@@ -5391,7 +5381,7 @@ VMMR0DECL(int) VMXWriteVmcs64Ex(PVMCPU pVCpu, uint32_t idxField, uint64_t u64Val
  * Queue up a VMWRITE by using the VMCS write cache.
  * This is only used on 32-bit hosts (except darwin) for 64-bit guests.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idxField    The VMCS field encoding.
  * @param   u64Val      16, 32 or 64-bit value.
  */
@@ -5428,8 +5418,8 @@ VMMR0DECL(int) VMXWriteCachedVmcsEx(PVMCPU pVCpu, uint32_t idxField, uint64_t u6
  * VMX preemption timer.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the cross context VM structure.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  */
@@ -5517,7 +5507,7 @@ DECLINLINE(bool) hmR0VmxIsContributoryXcpt(const uint32_t uVector)
 /**
  * Sets an event as a pending event to be injected into the guest.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   u32IntInfo          The VM-entry interruption-information field.
  * @param   cbInstr             The VM-entry instruction length in bytes (for software
  *                              interrupts, exceptions and privileged software
@@ -5545,9 +5535,9 @@ DECLINLINE(void) hmR0VmxSetPendingEvent(PVMCPU pVCpu, uint32_t u32IntInfo, uint3
 
 
 /**
- * Sets a double-fault (#DF) exception as pending-for-injection into the VM.
+ * Sets a double-fault (\#DF) exception as pending-for-injection into the VM.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -5568,11 +5558,12 @@ DECLINLINE(void) hmR0VmxSetPendingXcptDF(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  *
  * @returns VBox status code (informational error codes included).
  * @retval VINF_SUCCESS if we should continue handling the VM-exit.
- * @retval VINF_HM_DOUBLE_FAULT if a #DF condition was detected and we ought to
- *         continue execution of the guest which will delivery the #DF.
+ * @retval VINF_HM_DOUBLE_FAULT if a \#DF condition was detected and we ought to
+ *         continue execution of the guest which will delivery the \#DF.
  * @retval VINF_EM_RESET if we detected a triple-fault condition.
+ * @retval VERR_EM_GUEST_CPU_HANG if we detected a guest CPU hang.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -5599,6 +5590,7 @@ static int hmR0VmxCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pMixedCtx,
             VMXREFLECTXCPT_XCPT,    /* Reflect the exception to the guest or for further evaluation by VMM. */
             VMXREFLECTXCPT_DF,      /* Reflect the exception as a double-fault to the guest. */
             VMXREFLECTXCPT_TF,      /* Indicate a triple faulted state to the VMM. */
+            VMXREFLECTXCPT_HANG,    /* Indicate bad VM trying to deadlock the CPU. */
             VMXREFLECTXCPT_NONE     /* Nothing to reflect. */
         } VMXREFLECTXCPT;
 
@@ -5622,6 +5614,12 @@ static int hmR0VmxCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pMixedCtx,
                     pVmxTransient->fVectoringDoublePF = true;
                     Log4(("IDT: vcpu[%RU32] Vectoring Double #PF uCR2=%#RX64\n", pVCpu->idCpu, pMixedCtx->cr2));
                 }
+                else if (   uExitVector == X86_XCPT_AC
+                         && uIdtVector  == X86_XCPT_AC)
+                {
+                    Log4(("IDT: Nested #AC - bad guest\n"));
+                    enmReflect = VMXREFLECTXCPT_HANG;
+                }
                 else if (   (pVCpu->hm.s.vmx.u32XcptBitmap & HMVMX_CONTRIBUTORY_XCPT_MASK)
                          && hmR0VmxIsContributoryXcpt(uExitVector)
                          && (   hmR0VmxIsContributoryXcpt(uIdtVector)
@@ -5719,6 +5717,12 @@ static int hmR0VmxCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pMixedCtx,
                 break;
             }
 
+            case VMXREFLECTXCPT_HANG:
+            {
+                rc = VERR_EM_GUEST_CPU_HANG;
+                break;
+            }
+
             default:
                 Assert(rc == VINF_SUCCESS);
                 break;
@@ -5742,7 +5746,7 @@ static int hmR0VmxCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pMixedCtx,
         }
     }
 
-    Assert(rc == VINF_SUCCESS || rc == VINF_HM_DOUBLE_FAULT || rc == VINF_EM_RESET);
+    Assert(rc == VINF_SUCCESS || rc == VINF_HM_DOUBLE_FAULT || rc == VINF_EM_RESET || rc == VERR_EM_GUEST_CPU_HANG);
     return rc;
 }
 
@@ -5751,7 +5755,7 @@ static int hmR0VmxCheckExitDueToEventDelivery(PVMCPU pVCpu, PCPUMCTX pMixedCtx,
  * Saves the guest's CR0 register from the VMCS into the guest-CPU context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -5794,7 +5798,7 @@ static int hmR0VmxSaveGuestCR0(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Saves the guest's CR4 register from the VMCS into the guest-CPU context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -5827,7 +5831,7 @@ static int hmR0VmxSaveGuestCR4(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Saves the guest's RIP register from the VMCS into the guest-CPU context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -5854,7 +5858,7 @@ static int hmR0VmxSaveGuestRip(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Saves the guest's RSP register from the VMCS into the guest-CPU context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -5881,7 +5885,7 @@ static int hmR0VmxSaveGuestRsp(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Saves the guest's RFLAGS from the VMCS into the guest-CPU context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -5929,7 +5933,7 @@ DECLINLINE(int) hmR0VmxSaveGuestRipRspRflags(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Saves the guest's interruptibility-state ("interrupt shadow" as AMD calls it)
  * from the guest-state area in the VMCS.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -5986,7 +5990,7 @@ static void hmR0VmxSaveGuestIntrState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Saves the guest's activity state.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -6007,7 +6011,7 @@ static int hmR0VmxSaveGuestActivityState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * the current VMCS into the guest-CPU context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -6047,7 +6051,7 @@ static int hmR0VmxSaveGuestSysenterMsrs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * the CPU back into the guest-CPU context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -6089,7 +6093,7 @@ static int hmR0VmxSaveGuestLazyMsrs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * the guest-CPU context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -6135,7 +6139,7 @@ static int hmR0VmxSaveGuestAutoLoadStoreMsrs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -6238,7 +6242,7 @@ static int hmR0VmxSaveGuestControlRegs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   idxSel      Index of the selector in the VMCS.
  * @param   idxLimit    Index of the segment limit in the VMCS.
  * @param   idxBase     Index of the segment base in the VMCS.
@@ -6328,7 +6332,7 @@ DECLINLINE(int) hmR0VmxReadSegmentReg(PVMCPU pVCpu, uint32_t idxSel, uint32_t id
  * context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -6370,7 +6374,7 @@ static int hmR0VmxSaveGuestSegmentRegs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * VMCS into the guest-CPU context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -6436,7 +6440,7 @@ static int hmR0VmxSaveGuestTableRegs(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -6465,7 +6469,7 @@ static int hmR0VmxSaveGuestDR7(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Saves the guest APIC state from the current VMCS into the guest-CPU context.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data maybe
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -6489,7 +6493,7 @@ static int hmR0VmxSaveGuestApicState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * This essentially VMREADs all guest-data.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -6554,8 +6558,7 @@ static int hmR0VmxSaveGuestState(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Saves basic guest registers needed for IEM instruction execution.
  *
  * @returns VBox status code (OR-able).
- * @param   pVCpu       Pointer to the cross context CPU data for the calling
- *                      EMT.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pMixedCtx   Pointer to the CPU context of the guest.
  * @param   fMemory     Whether the instruction being executed operates on
  *                      memory or not.  Only CR0 is synced up if clear.
@@ -6600,7 +6603,7 @@ static int hmR0VmxSaveGuestRegsForIemExec(PVMCPU pVCpu, PCPUMCTX pMixedCtx, bool
  * is for the interpreter.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU of the calling EMT.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pMixedCtx       Pointer to the guest-CPU context which may have data
  *                          needing to be synced in.
  * @thread  EMT(pVCpu)
@@ -6631,8 +6634,8 @@ VMMR0_INT_DECL(int) HMR0EnsureCompleteBasicContext(PVMCPU pVCpu, PCPUMCTX pMixed
  * @retval VINF_EM_NO_MEMORY PGM is out of memory, we need to return
  *         to the EM loop.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -6720,7 +6723,7 @@ static int hmR0VmxCheckForceFlags(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Converts any TRPM trap into a pending HM event. This is typically used when
  * entering from ring-3 (not longjmp returns).
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  */
 static void hmR0VmxTrpmTrapToPendingEvent(PVMCPU pVCpu)
 {
@@ -6786,7 +6789,7 @@ static void hmR0VmxTrpmTrapToPendingEvent(PVMCPU pVCpu)
  * Converts any pending HM event into a TRPM trap. Typically used when leaving
  * VT-x to execute any instruction.
  *
- * @param   pvCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  */
 static void hmR0VmxPendingEventToTrpmTrap(PVMCPU pVCpu)
 {
@@ -6855,8 +6858,8 @@ static void hmR0VmxPendingEventToTrpmTrap(PVMCPU pVCpu)
  * (longjmp, preemption, voluntary exits to ring-3) from VT-x.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   pMixedCtx           Pointer to the guest-CPU context. The data may
  *                              be out-of-sync. Make sure to update the required
  *                              fields before using them.
@@ -6976,8 +6979,8 @@ static int hmR0VmxLeave(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx, bool fSaveGue
  * Leaves the VT-x session.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -7024,8 +7027,8 @@ DECLINLINE(int) hmR0VmxLeaveSession(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Does the necessary state syncing before doing a longjmp to ring-3.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -7047,8 +7050,8 @@ DECLINLINE(int) hmR0VmxLongJmpToRing3(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * executing outside HM (recompiler/IEM).
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -7128,7 +7131,7 @@ static int hmR0VmxExitToRing3(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx, int rcE
  * longjump to ring-3 and possibly get preempted.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   enmOperation    The operation causing the ring-3 longjump.
  * @param   pvUser          Opaque pointer to the guest-CPU context. The data
  *                          may be out-of-sync. Make sure to update the required
@@ -7205,7 +7208,7 @@ static DECLCALLBACK(int) hmR0VmxCallRing3Callback(PVMCPU pVCpu, VMMCALLRING3 enm
  * Sets the interrupt-window exiting control in the VMCS which instructs VT-x to
  * cause a VM-exit as soon as the guest is in a state to receive interrupts.
  *
- * @param pVCpu         Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(void) hmR0VmxSetIntWindowExitVmcs(PVMCPU pVCpu)
 {
@@ -7225,7 +7228,7 @@ DECLINLINE(void) hmR0VmxSetIntWindowExitVmcs(PVMCPU pVCpu)
 /**
  * Clears the interrupt-window exiting control in the VMCS.
  *
- * @param pVCpu             Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  */
 DECLINLINE(void) hmR0VmxClearIntWindowExitVmcs(PVMCPU pVCpu)
 {
@@ -7241,7 +7244,7 @@ DECLINLINE(void) hmR0VmxClearIntWindowExitVmcs(PVMCPU pVCpu)
  * Sets the NMI-window exiting control in the VMCS which instructs VT-x to
  * cause a VM-exit as soon as the guest is in a state to receive NMIs.
  *
- * @param pVCpu         Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(void) hmR0VmxSetNmiWindowExitVmcs(PVMCPU pVCpu)
 {
@@ -7261,7 +7264,7 @@ DECLINLINE(void) hmR0VmxSetNmiWindowExitVmcs(PVMCPU pVCpu)
 /**
  * Clears the NMI-window exiting control in the VMCS.
  *
- * @param pVCpu             Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  */
 DECLINLINE(void) hmR0VmxClearNmiWindowExitVmcs(PVMCPU pVCpu)
 {
@@ -7277,7 +7280,7 @@ DECLINLINE(void) hmR0VmxClearNmiWindowExitVmcs(PVMCPU pVCpu)
  * Evaluates the event to be delivered to the guest and sets it as the pending
  * event.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -7360,7 +7363,7 @@ static void hmR0VmxEvaluatePendingEvent(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * Sets a pending-debug exception to be delivered to the guest if the guest is
  * single-stepping.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -7381,7 +7384,7 @@ DECLINLINE(void) hmR0VmxSetPendingDebugXcpt(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
  * receive them.
  *
  * @returns VBox status code (informational status codes included).
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -7496,9 +7499,9 @@ static int hmR0VmxInjectPendingEvent(PVMCPU pVCpu, PCPUMCTX pMixedCtx, bool fSte
 
 
 /**
- * Sets an invalid-opcode (#UD) exception as pending-for-injection into the VM.
+ * Sets an invalid-opcode (\#UD) exception as pending-for-injection into the VM.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -7512,10 +7515,10 @@ DECLINLINE(void) hmR0VmxSetPendingXcptUD(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
 
 
 /**
- * Injects a double-fault (#DF) exception into the VM.
+ * Injects a double-fault (\#DF) exception into the VM.
  *
  * @returns VBox status code (informational status code included).
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -7538,9 +7541,9 @@ DECLINLINE(int) hmR0VmxInjectXcptDF(PVMCPU pVCpu, PCPUMCTX pMixedCtx, bool fStep
 
 
 /**
- * Sets a debug (#DB) exception as pending-for-injection into the VM.
+ * Sets a debug (\#DB) exception as pending-for-injection into the VM.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -7555,9 +7558,9 @@ DECLINLINE(void) hmR0VmxSetPendingXcptDB(PVMCPU pVCpu, PCPUMCTX pMixedCtx)
 
 
 /**
- * Sets an overflow (#OF) exception as pending-for-injection into the VM.
+ * Sets an overflow (\#OF) exception as pending-for-injection into the VM.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -7574,16 +7577,16 @@ DECLINLINE(void) hmR0VmxSetPendingXcptOF(PVMCPU pVCpu, PCPUMCTX pMixedCtx, uint3
 
 
 /**
- * Injects a general-protection (#GP) fault into the VM.
+ * Injects a general-protection (\#GP) fault into the VM.
  *
  * @returns VBox status code (informational status code included).
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   pMixedCtx           Pointer to the guest-CPU context. The data may be
  *                              out-of-sync. Make sure to update the required fields
  *                              before using them.
  * @param   fErrorCodeValid     Whether the error code is valid (depends on the CPU
  *                              mode, i.e. in real-mode it's not valid).
- * @param   u32ErrorCode        The error code associated with the #GP.
+ * @param   u32ErrorCode        The error code associated with the \#GP.
  * @param   fStepping           Whether we're running in
  *                              hmR0VmxRunGuestCodeStep() and should return
  *                              VINF_EM_DBG_STEPPED if the event is injected
@@ -7606,14 +7609,14 @@ DECLINLINE(int) hmR0VmxInjectXcptGP(PVMCPU pVCpu, PCPUMCTX pMixedCtx, bool fErro
 
 
 /**
- * Sets a general-protection (#GP) exception as pending-for-injection into the
+ * Sets a general-protection (\#GP) exception as pending-for-injection into the
  * VM.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
- * @param   u32ErrorCode    The error code associated with the #GP.
+ * @param   u32ErrorCode    The error code associated with the \#GP.
  */
 DECLINLINE(void) hmR0VmxSetPendingXcptGP(PVMCPU pVCpu, PCPUMCTX pMixedCtx, uint32_t u32ErrorCode)
 {
@@ -7628,7 +7631,7 @@ DECLINLINE(void) hmR0VmxSetPendingXcptGP(PVMCPU pVCpu, PCPUMCTX pMixedCtx, uint3
 /**
  * Sets a software interrupt (INTn) as pending-for-injection into the VM.
  *
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -7655,7 +7658,7 @@ DECLINLINE(void) hmR0VmxSetPendingIntN(PVMCPU pVCpu, PCPUMCTX pMixedCtx, uint16_
  *
  * @returns VBox status code (information status code included).
  * @retval VINF_EM_RESET if pushing a value to the stack caused a triple-fault.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context.
  * @param   uValue      The value to push to the guest stack.
  */
@@ -7683,7 +7686,7 @@ DECLINLINE(int) hmR0VmxRealModeGuestStackPush(PVM pVM, PCPUMCTX pMixedCtx, uint1
  * @retval VINF_SUCCESS if the event is successfully injected into the VMCS.
  * @retval VINF_EM_RESET if event injection resulted in a triple-fault.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   pMixedCtx           Pointer to the guest-CPU context. The data may
  *                              be out-of-sync. Make sure to update the required
  *                              fields before using them.
@@ -7692,7 +7695,7 @@ DECLINLINE(int) hmR0VmxRealModeGuestStackPush(PVM pVM, PCPUMCTX pMixedCtx, uint1
  *                              software interrupts, exceptions and privileged
  *                              software exceptions).
  * @param   u32ErrCode          The VM-entry exception error code.
- * @param   GCPtrFaultAddress   The page-fault address for #PF exceptions.
+ * @param   GCPtrFaultAddress   The page-fault address for \#PF exceptions.
  * @param   puIntrState         Pointer to the current guest interruptibility-state.
  *                              This interruptibility-state will be updated if
  *                              necessary. This cannot not be NULL.
@@ -7887,7 +7890,7 @@ static int hmR0VmxInjectEventVmcs(PVMCPU pVCpu, PCPUMCTX pMixedCtx, uint64_t u64
  * clears the current event in the VMCS as well.
  *
  * @returns VBox status code.
- * @param   pVCpu         Pointer to the VMCPU.
+ * @param   pVCpu         The cross context virtual CPU structure.
  *
  * @remarks Use this function only to clear events that have not yet been
  *          delivered to the guest but are injected in the VMCS!
@@ -7929,8 +7932,8 @@ static void hmR0VmxClearEventVmcs(PVMCPU pVCpu)
  * Enters the VT-x session.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCpu        Pointer to the CPU info struct.
  */
 VMMR0DECL(int) VMXR0Enter(PVM pVM, PVMCPU pVCpu, PHMGLOBALCPUINFO pCpu)
@@ -7974,7 +7977,7 @@ VMMR0DECL(int) VMXR0Enter(PVM pVM, PVMCPU pVCpu, PHMGLOBALCPUINFO pCpu)
  * The thread-context callback (only on platforms which support it).
  *
  * @param   enmEvent        The thread-context event.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   fGlobalInit     Whether global VT-x/AMD-V init. was used.
  * @thread  EMT(pVCpu)
  */
@@ -8062,8 +8065,8 @@ VMMR0DECL(void) VMXR0ThreadCtxCallback(RTTHREADCTXEVENT enmEvent, PVMCPU pVCpu,
  * The CPU state will be loaded from these fields on every successful VM-exit.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  */
@@ -8092,8 +8095,8 @@ static int hmR0VmxSaveHostState(PVM pVM, PVMCPU pVCpu)
  * Saves the host state in the VMCS host-state.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks No-long-jump zone!!!
  */
@@ -8123,8 +8126,8 @@ VMMR0DECL(int) VMXR0SaveHostState(PVM pVM, PVMCPU pVCpu)
  * the guest CPU mode.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pMixedCtx   Pointer to the guest-CPU context. The data may be
  *                      out-of-sync. Make sure to update the required fields
  *                      before using them.
@@ -8210,8 +8213,8 @@ static int hmR0VmxLoadGuestState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx)
 /**
  * Loads the state shared between the host and guest into the VMCS.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
  * @remarks No-long-jump zone!!!
@@ -8254,6 +8257,8 @@ static void hmR0VmxLoadSharedState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
     /* Loading CR0, debug state might have changed intercepts, update VMCS. */
     if (HMCPU_CF_IS_PENDING(pVCpu, HM_CHANGED_GUEST_XCPT_INTERCEPTS))
     {
+        Assert(pVCpu->hm.s.vmx.u32XcptBitmap & RT_BIT_32(X86_XCPT_AC));
+        Assert(pVCpu->hm.s.vmx.u32XcptBitmap & RT_BIT_32(X86_XCPT_DB));
         int rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_EXCEPTION_BITMAP, pVCpu->hm.s.vmx.u32XcptBitmap);
         AssertRC(rc);
         HMCPU_CF_CLEAR(pVCpu, HM_CHANGED_GUEST_XCPT_INTERCEPTS);
@@ -8267,8 +8272,8 @@ static void hmR0VmxLoadSharedState(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
 /**
  * Worker for loading the guest-state bits in the inner VT-x execution loop.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -8324,8 +8329,8 @@ DECLINLINE(void) hmR0VmxLoadGuestStateOptimal(PVM pVM, PVMCPU pVCpu, PCPUMCTX pM
  *          dispatched directly.
  * @retval  VINF_* scheduling changes, we have to go back to ring-3.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -8447,8 +8452,8 @@ static int hmR0VmxPreRunGuest(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRA
  * means there is no backing out to ring-3 or anywhere else at this
  * point.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -8595,8 +8600,8 @@ static void hmR0VmxPreRunGuestCommitted(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCt
  * Performs some essential restoration of state after running guest code in
  * VT-x.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data maybe
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -8704,8 +8709,8 @@ static void hmR0VmxPostRunGuest(PVM pVM, PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXT
  * Runs the guest code using VT-x the normal way.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
  * @note    Mostly the same as hmR0VmxRunGuestCodeStep().
@@ -8786,8 +8791,8 @@ static int hmR0VmxRunGuestCodeNormal(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Single steps guest code using VT-x.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  *
  * @note    Mostly the same as hmR0VmxRunGuestCodeNormal().
@@ -8895,8 +8900,8 @@ static int hmR0VmxRunGuestCodeStep(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * Runs the guest code using VT-x.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  */
 VMMR0DECL(int) VMXR0RunGuestCode(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -9020,12 +9025,14 @@ DECLINLINE(int) hmR0VmxHandleExit(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIEN
  * performed.
  *
  * @returns Strict VBox status code.
- * @param   pVCpu           The virtual CPU of the calling EMT.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data may be
  *                          out-of-sync. Make sure to update the required
  *                          fields before using them.
  * @param   pVmxTransient   Pointer to the VMX-transient structure.
  * @param   uExitReason     The VM-exit reason.
+ * @param   uCsStart        The CS we started executing (stepping) on.
+ * @param   uRipStart       The RIP we started executing (stepping) on.
  */
 DECLINLINE(VBOXSTRICTRC) hmR0VmxHandleExitStep(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient,
                                                uint32_t uExitReason, uint16_t uCsStart, uint64_t uRipStart)
@@ -9154,7 +9161,7 @@ DECLINLINE(VBOXSTRICTRC) hmR0VmxHandleExitStep(PVMCPU pVCpu, PCPUMCTX pMixedCtx,
  * Advances the guest RIP after reading it from the VMCS.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pMixedCtx       Pointer to the guest-CPU context. The data maybe
  *                          out-of-sync. Make sure to update the required fields
  *                          before using them.
@@ -9192,8 +9199,8 @@ DECLINLINE(int) hmR0VmxAdvanceGuestRip(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRA
  * @retval VMX_IGS_REASON_NOT_FOUND if this function could not find anything
  *         wrong with the guest state.
  *
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   pCtx    Pointer to the guest-CPU state.
  *
  * @remarks This function assumes our cache of the VMCS controls
@@ -9867,6 +9874,7 @@ HMVMX_EXIT_DECL hmR0VmxExitXcptOrNmi(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANS
                 case X86_XCPT_MF: rc = hmR0VmxExitXcptMF(pVCpu, pMixedCtx, pVmxTransient);      break;
                 case X86_XCPT_DB: rc = hmR0VmxExitXcptDB(pVCpu, pMixedCtx, pVmxTransient);      break;
                 case X86_XCPT_BP: rc = hmR0VmxExitXcptBP(pVCpu, pMixedCtx, pVmxTransient);      break;
+                case X86_XCPT_AC: rc = hmR0VmxExitXcptAC(pVCpu, pMixedCtx, pVmxTransient);      break;
 #ifdef HMVMX_ALWAYS_TRAP_ALL_XCPTS
                 case X86_XCPT_XF: STAM_COUNTER_INC(&pVCpu->hm.s.StatExitGuestXF);
                                   rc = hmR0VmxExitXcptGeneric(pVCpu, pMixedCtx, pVmxTransient); break;
@@ -10366,7 +10374,7 @@ HMVMX_EXIT_DECL hmR0VmxExitHlt(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT p
 
 
 /**
- * VM-exit handler for instructions that result in a #UD exception delivered to
+ * VM-exit handler for instructions that result in a \#UD exception delivered to
  * the guest.
  */
 HMVMX_EXIT_DECL hmR0VmxExitSetPendingXcptUD(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient)
@@ -11283,19 +11291,13 @@ HMVMX_EXIT_DECL hmR0VmxExitMovDRx(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIEN
         && !pVCpu->hm.s.fSingleInstruction
         && !pVmxTransient->fWasHyperDebugStateActive)
     {
-        /* Don't intercept MOV DRx and #DB any more. */
+        Assert(pVCpu->hm.s.vmx.u32XcptBitmap & RT_BIT_32(X86_XCPT_DB));
+
+        /* Don't intercept MOV DRx any more. */
         pVCpu->hm.s.vmx.u32ProcCtls &= ~VMX_VMCS_CTRL_PROC_EXEC_MOV_DR_EXIT;
         rc = VMXWriteVmcs32(VMX_VMCS32_CTRL_PROC_EXEC, pVCpu->hm.s.vmx.u32ProcCtls);
         AssertRCReturn(rc, rc);
 
-        if (!pVCpu->hm.s.vmx.RealMode.fRealOnV86Active)
-        {
-#ifndef HMVMX_ALWAYS_TRAP_ALL_XCPTS
-            pVCpu->hm.s.vmx.u32XcptBitmap &= ~RT_BIT(X86_XCPT_DB);
-            HMCPU_CF_SET(pVCpu, HM_CHANGED_GUEST_XCPT_INTERCEPTS);
-#endif
-        }
-
         /* We're playing with the host CPU state here, make sure we can't preempt or longjmp. */
         VMMRZCallRing3Disable(pVCpu);
         HM_DISABLE_PREEMPT();
@@ -11494,7 +11496,7 @@ HMVMX_EXIT_DECL hmR0VmxExitEptViolation(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTR
  */
 
 /**
- * VM-exit exception handler for #MF (Math Fault: floating point exception).
+ * VM-exit exception handler for \#MF (Math Fault: floating point exception).
  */
 static int hmR0VmxExitXcptMF(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient)
 {
@@ -11524,7 +11526,7 @@ static int hmR0VmxExitXcptMF(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVm
 
 
 /**
- * VM-exit exception handler for #BP (Breakpoint exception).
+ * VM-exit exception handler for \#BP (Breakpoint exception).
  */
 static int hmR0VmxExitXcptBP(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient)
 {
@@ -11555,7 +11557,7 @@ static int hmR0VmxExitXcptBP(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVm
 
 
 /**
- * VM-exit exception handler for #DB (Debug exception).
+ * VM-exit exception handler for \#DB (Debug exception).
  */
 static int hmR0VmxExitXcptDB(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient)
 {
@@ -11638,7 +11640,7 @@ static int hmR0VmxExitXcptDB(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVm
 
 
 /**
- * VM-exit exception handler for #NM (Device-not-available exception: floating
+ * VM-exit exception handler for \#NM (Device-not-available exception: floating
  * point exception).
  */
 static int hmR0VmxExitXcptNM(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient)
@@ -11694,7 +11696,7 @@ static int hmR0VmxExitXcptNM(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVm
 
 
 /**
- * VM-exit exception handler for #GP (General-protection exception).
+ * VM-exit exception handler for \#GP (General-protection exception).
  *
  * @remarks Requires pVmxTransient->uExitIntInfo to be up-to-date.
  */
@@ -12009,7 +12011,7 @@ static int hmR0VmxExitXcptGeneric(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIEN
 
 
 /**
- * VM-exit exception handler for #PF (Page-fault exception).
+ * VM-exit exception handler for \#PF (Page-fault exception).
  */
 static int hmR0VmxExitXcptPF(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient)
 {
@@ -12107,5 +12109,26 @@ static int hmR0VmxExitXcptPF(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVm
     return rc;
 }
 
+
+/**
+ * VM-exit exception handler for \#AC (alignment check exception).
+ */
+static int hmR0VmxExitXcptAC(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient)
+{
+    HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS();
+
+    /*
+     * Re-inject it. We'll detect any nesting before getting here.
+     */
+    int rc = hmR0VmxReadExitIntErrorCodeVmcs(pVmxTransient);
+    rc    |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient);
+    AssertRCReturn(rc, rc);
+    Assert(pVmxTransient->fVmcsFieldsRead & HMVMX_UPDATED_TRANSIENT_EXIT_INTERRUPTION_INFO);
+
+    hmR0VmxSetPendingEvent(pVCpu, VMX_VMCS_CTRL_ENTRY_IRQ_INFO_FROM_EXIT_INT_INFO(pVmxTransient->uExitIntInfo),
+                           pVmxTransient->cbInstr, pVmxTransient->uExitIntErrorCode, 0 /* GCPtrFaultAddress */);
+    return VINF_SUCCESS;
+}
+
 /** @} */
 
diff --git a/src/VBox/VMM/VMMR0/HMVMXR0.h b/src/VBox/VMM/VMMR0/HMVMXR0.h
index 8d07556..ae13ccd 100644
--- a/src/VBox/VMM/VMMR0/HMVMXR0.h
+++ b/src/VBox/VMM/VMMR0/HMVMXR0.h
@@ -78,5 +78,5 @@ DECLINLINE(int) VMXReadCachedVmcsEx(PVMCPU pVCpu, uint32_t idxCache, RTGCUINTREG
 
 RT_C_DECLS_END
 
-#endif /* ___HMVMXR0_h */
+#endif /* !___HMVMXR0_h */
 
diff --git a/src/VBox/VMM/VMMR0/PDMR0Device.cpp b/src/VBox/VMM/VMMR0/PDMR0Device.cpp
index 098571b..a8b5c1d 100644
--- a/src/VBox/VMM/VMMR0/PDMR0Device.cpp
+++ b/src/VBox/VMM/VMMR0/PDMR0Device.cpp
@@ -90,7 +90,7 @@ static DECLCALLBACK(int) pdmR0DevHlp_PCIPhysRead(PPDMDEVINS pDevIns, RTGCPHYS GC
 }
 
 
-/** @interface_method_impl{PDMDEVHLPR0,pfnPCIPhysRead} */
+/** @interface_method_impl{PDMDEVHLPR0,pfnPCIPhysWrite} */
 static DECLCALLBACK(int) pdmR0DevHlp_PCIPhysWrite(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, const void *pvBuf, size_t cbWrite)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -896,7 +896,8 @@ static DECLCALLBACK(int) pdmR0DrvHlp_VMSetErrorV(PPDMDRVINS pDrvIns, int rc, RT_
 
 
 /** @interface_method_impl{PDMDRVHLPR0,pfnVMSetRuntimeError} */
-static DECLCALLBACK(int) pdmR0DrvHlp_VMSetRuntimeError(PPDMDRVINS pDrvIns, uint32_t fFlags, const char *pszErrorId, const char *pszFormat, ...)
+static DECLCALLBACK(int) pdmR0DrvHlp_VMSetRuntimeError(PPDMDRVINS pDrvIns, uint32_t fFlags, const char *pszErrorId,
+                                                       const char *pszFormat, ...)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
     va_list va;
@@ -907,8 +908,9 @@ static DECLCALLBACK(int) pdmR0DrvHlp_VMSetRuntimeError(PPDMDRVINS pDrvIns, uint3
 }
 
 
-/** @interface_method_impl{PDMDRVHLPR0,pfnVMSetErrorV} */
-static DECLCALLBACK(int) pdmR0DrvHlp_VMSetRuntimeErrorV(PPDMDRVINS pDrvIns, uint32_t fFlags, const char *pszErrorId, const char *pszFormat, va_list va)
+/** @interface_method_impl{PDMDRVHLPR0,pfnVMSetRuntimeErrorV} */
+static DECLCALLBACK(int) pdmR0DrvHlp_VMSetRuntimeErrorV(PPDMDRVINS pDrvIns, uint32_t fFlags, const char *pszErrorId,
+                                                        const char *pszFormat, va_list va)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
     int rc = VMSetRuntimeErrorV(pDrvIns->Internal.s.pVMR0, fFlags, pszErrorId, pszFormat, va);
@@ -975,7 +977,7 @@ extern DECLEXPORT(const PDMDRVHLPR0) g_pdmR0DrvHlp =
  * Sets an irq on the PIC and I/O APIC.
  *
  * @returns true if delivered, false if postponed.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iIrq        The irq.
  * @param   iLevel      The new level.
  * @param   uTagSrc     The IRQ tag and source.
@@ -1015,8 +1017,8 @@ static bool pdmR0IsaSetIrq(PVM pVM, int iIrq, int iLevel, uint32_t uTagSrc)
  * PDMDevHlpCallR0 helper.
  *
  * @returns See PFNPDMDEVREQHANDLERR0.
- * @param   pVM                 Pointer to the VM (for validation).
- * @param   pReq                Pointer to the request buffer.
+ * @param   pVM     The cross context VM structure. (For validation.)
+ * @param   pReq    Pointer to the request buffer.
  */
 VMMR0_INT_DECL(int) PDMR0DeviceCallReqHandler(PVM pVM, PPDMDEVICECALLREQHANDLERREQ pReq)
 {
diff --git a/src/VBox/VMM/VMMR0/PDMR0Driver.cpp b/src/VBox/VMM/VMMR0/PDMR0Driver.cpp
index e6cc960..04095e0 100644
--- a/src/VBox/VMM/VMMR0/PDMR0Driver.cpp
+++ b/src/VBox/VMM/VMMR0/PDMR0Driver.cpp
@@ -34,8 +34,8 @@
  * PDMDrvHlpCallR0 helper.
  *
  * @returns See PFNPDMDRVREQHANDLERR0.
- * @param   pVM                 Pointer to the VM (for validation).
- * @param   pReq                Pointer to the request buffer.
+ * @param   pVM     The cross context VM structure. (For validation.)
+ * @param   pReq    Pointer to the request buffer.
  */
 VMMR0_INT_DECL(int) PDMR0DriverCallReqHandler(PVM pVM, PPDMDRIVERCALLREQHANDLERREQ pReq)
 {
diff --git a/src/VBox/VMM/VMMR0/PGMR0.cpp b/src/VBox/VMM/VMMR0/PGMR0.cpp
index a3a7d14..11a0e31 100644
--- a/src/VBox/VMM/VMMR0/PGMR0.cpp
+++ b/src/VBox/VMM/VMMR0/PGMR0.cpp
@@ -60,8 +60,8 @@
  * @retval  VINF_SUCCESS on success. FF cleared.
  * @retval  VINF_EM_NO_MEMORY if we're out of memory. The FF is set in this case.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks Must be called from within the PGM critical section. The caller
  *          must clear the new pages.
@@ -176,8 +176,8 @@ VMMR0_INT_DECL(int) PGMR0PhysAllocateHandyPages(PVM pVM, PVMCPU pVCpu)
  * @returns The following VBox status codes.
  * @retval  VINF_SUCCESS on success. FF cleared.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks Must be called from within the PGM critical section.
  */
@@ -207,8 +207,8 @@ VMMR0_INT_DECL(int) PGMR0PhysFlushHandyPages(PVM pVM, PVMCPU pVCpu)
  * @retval  VINF_SUCCESS on success.
  * @retval  VINF_EM_NO_MEMORY if we're out of memory.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @remarks Must be called from within the PGM critical section. The caller
  *          must clear the new pages.
@@ -353,7 +353,7 @@ VMMR0_INT_DECL(int) GPciRawR0GuestPageUpdate(PGVM pGVM, RTGCPHYS GCPhys, RTHCPHY
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMR0_INT_DECL(int) PGMR0PhysSetupIommu(PVM pVM)
 {
@@ -408,11 +408,11 @@ VMMR0_INT_DECL(int) PGMR0PhysSetupIommu(PVM pVM)
 
 
 /**
- * #PF Handler for nested paging.
+ * \#PF Handler for nested paging.
  *
  * @returns VBox status code (appropriate for trap handling and GC return).
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   enmShwPagingMode    Paging mode for the nested page tables.
  * @param   uErr                The trap error code.
  * @param   pRegFrame           Trap register frame.
@@ -534,12 +534,12 @@ VMMR0DECL(int) PGMR0Trap0eHandlerNestedPaging(PVM pVM, PVMCPU pVCpu, PGMMODE enm
 
 
 /**
- * #PF Handler for deliberate nested paging misconfiguration (/reserved bit)
+ * \#PF Handler for deliberate nested paging misconfiguration (/reserved bit)
  * employed for MMIO pages.
  *
  * @returns VBox status code (appropriate for trap handling and GC return).
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   enmShwPagingMode    Paging mode for the nested page tables.
  * @param   pRegFrame           Trap register frame.
  * @param   GCPhysFault         The fault address.
diff --git a/src/VBox/VMM/VMMR0/PGMR0SharedPage.cpp b/src/VBox/VMM/VMMR0/PGMR0SharedPage.cpp
index 3ccf61b..0013cb1 100644
--- a/src/VBox/VMM/VMMR0/PGMR0SharedPage.cpp
+++ b/src/VBox/VMM/VMMR0/PGMR0SharedPage.cpp
@@ -39,7 +39,7 @@
  *
  * @returns The following VBox status codes.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pGVM                Pointer to the GVM instance data.
  * @param   idCpu               The ID of the calling virtual CPU.
  * @param   pModule             Global module description.
diff --git a/src/VBox/VMM/VMMR0/TRPMR0.cpp b/src/VBox/VMM/VMMR0/TRPMR0.cpp
index 5ababae..757455e 100644
--- a/src/VBox/VMM/VMMR0/TRPMR0.cpp
+++ b/src/VBox/VMM/VMMR0/TRPMR0.cpp
@@ -38,7 +38,7 @@
 /**
  * Dispatches an interrupt that arrived while we were in the guest context.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @remark  Must be called with interrupts disabled.
  */
 VMMR0DECL(void) TRPMR0DispatchHostInterrupt(PVM pVM)
diff --git a/src/VBox/VMM/VMMR0/VMMR0.cpp b/src/VBox/VMM/VMMR0/VMMR0.cpp
index c6b130d..d52084a 100644
--- a/src/VBox/VMM/VMMR0/VMMR0.cpp
+++ b/src/VBox/VMM/VMMR0/VMMR0.cpp
@@ -346,7 +346,7 @@ DECLEXPORT(void) ModuleTerm(void *hMod)
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   uSvnRev     The SVN revision of the ring-3 part.
  * @param   uBuildType  Build type indicator.
  * @thread  EMT.
@@ -500,7 +500,7 @@ static int vmmR0InitVM(PVM pVM, uint32_t uSvnRev, uint32_t uBuildType)
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pGVM        Pointer to the global VM structure. Optional.
  * @thread  EMT or session clean up thread.
  */
@@ -615,7 +615,7 @@ static DECLCALLBACK(void) vmmR0ThreadCtxCallback(RTTHREADCTXEVENT enmEvent, void
  * member set to NIL_RTTHREADCTXHOOK.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the cross context CPU structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @thread  EMT(pVCpu)
  */
 VMMR0_INT_DECL(int) VMMR0ThreadCtxHookCreateForEmt(PVMCPU pVCpu)
@@ -639,7 +639,7 @@ VMMR0_INT_DECL(int) VMMR0ThreadCtxHookCreateForEmt(PVMCPU pVCpu)
 /**
  * Destroys the thread switching hook for the specified VCPU.
  *
- * @param   pVCpu       Pointer to the cross context CPU structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @remarks Can be called from any thread.
  */
 VMMR0_INT_DECL(void) VMMR0ThreadCtxHookDestroyForEmt(PVMCPU pVCpu)
@@ -652,7 +652,7 @@ VMMR0_INT_DECL(void) VMMR0ThreadCtxHookDestroyForEmt(PVMCPU pVCpu)
 /**
  * Disables the thread switching hook for this VCPU (if we got one).
  *
- * @param   pVCpu       Pointer to the cross context CPU structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @thread  EMT(pVCpu)
  *
  * @remarks This also clears VMCPU::idHostCpu, so the mapping is invalid after
@@ -693,7 +693,7 @@ VMMR0_INT_DECL(void) VMMR0ThreadCtxHookDisable(PVMCPU pVCpu)
  * Internal version of VMMR0ThreadCtxHooksAreRegistered.
  *
  * @returns true if registered, false otherwise.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(bool) vmmR0ThreadCtxHookIsEnabled(PVMCPU pVCpu)
 {
@@ -705,7 +705,7 @@ DECLINLINE(bool) vmmR0ThreadCtxHookIsEnabled(PVMCPU pVCpu)
  * Whether thread-context hooks are registered for this VCPU.
  *
  * @returns true if registered, false otherwise.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR0_INT_DECL(bool) VMMR0ThreadCtxHookIsEnabled(PVMCPU pVCpu)
 {
@@ -716,8 +716,8 @@ VMMR0_INT_DECL(bool) VMMR0ThreadCtxHookIsEnabled(PVMCPU pVCpu)
 #ifdef VBOX_WITH_STATISTICS
 /**
  * Record return code statistics
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   rc          The status code.
  */
 static void vmmR0RecordRC(PVM pVM, PVMCPU pVCpu, int rc)
@@ -912,7 +912,7 @@ static void vmmR0RecordRC(PVM pVM, PVMCPU pVCpu, int rc)
 /**
  * The Ring 0 entry point, called by the fast-ioctl path.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  *                          The return code is stored in pVM->vmm.s.iLastGZRc.
  * @param   idCpu           The Virtual CPU ID of the calling EMT.
  * @param   enmOperation    Which operation to execute.
@@ -1264,8 +1264,9 @@ VMMR0DECL(void) VMMR0EntryFast(PVM pVM, VMCPUID idCpu, VMMR0OPERATION enmOperati
  * Validates a session or VM session argument.
  *
  * @returns true / false accordingly.
- * @param   pVM         Pointer to the VM.
- * @param   pSession    The session argument.
+ * @param   pVM             The cross context VM structure.
+ * @param   pClaimedSession The session claim to validate.
+ * @param   pSession        The session argument.
  */
 DECLINLINE(bool) vmmR0IsValidSession(PVM pVM, PSUPDRVSESSION pClaimedSession, PSUPDRVSESSION pSession)
 {
@@ -1287,7 +1288,7 @@ DECLINLINE(bool) vmmR0IsValidSession(PVM pVM, PSUPDRVSESSION pClaimedSession, PS
  * called thru a longjmp so we can exit safely on failure.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idCpu           Virtual CPU ID argument. Must be NIL_VMCPUID if pVM
  *                          is NIL_RTR0PTR, and may be NIL_VMCPUID if it isn't
  * @param   enmOperation    Which operation to execute.
@@ -1927,7 +1928,7 @@ static DECLCALLBACK(int) vmmR0EntryExWrapper(void *pvArgs)
  * The Ring 0 entry point, called by the support library (SUP).
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idCpu           Virtual CPU ID argument. Must be NIL_VMCPUID if pVM
  *                          is NIL_RTR0PTR, and may be NIL_VMCPUID if it isn't
  * @param   enmOperation    Which operation to execute.
@@ -1986,7 +1987,7 @@ VMMR0DECL(int) VMMR0EntryEx(PVM pVM, VMCPUID idCpu, VMMR0OPERATION enmOperation,
  * Checks whether we've armed the ring-0 long jump machinery.
  *
  * @returns @c true / @c false
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @thread  EMT
  * @sa      VMMIsLongJumpArmed
  */
@@ -2006,7 +2007,7 @@ VMMR0_INT_DECL(bool) VMMR0IsLongJumpArmed(PVMCPU pVCpu)
  * Checks whether we've done a ring-3 long jump.
  *
  * @returns @c true / @c false
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @thread  EMT
  */
 VMMR0_INT_DECL(bool) VMMR0IsInRing3LongJump(PVMCPU pVCpu)
@@ -2116,7 +2117,7 @@ VMMR0DECL(size_t) vmmR0LoggerPrefix(PRTLOGGER pLogger, char *pchBuf, size_t cchB
 /**
  * Disables flushing of the ring-0 debug log.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR0_INT_DECL(void) VMMR0LogFlushDisable(PVMCPU pVCpu)
 {
@@ -2128,7 +2129,7 @@ VMMR0_INT_DECL(void) VMMR0LogFlushDisable(PVMCPU pVCpu)
 /**
  * Enables flushing of the ring-0 debug log.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR0_INT_DECL(void) VMMR0LogFlushEnable(PVMCPU pVCpu)
 {
@@ -2140,7 +2141,7 @@ VMMR0_INT_DECL(void) VMMR0LogFlushEnable(PVMCPU pVCpu)
 /**
  * Checks if log flushing is disabled or not.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR0_INT_DECL(bool) VMMR0IsLogFlushDisabled(PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMR3/CFGM.cpp b/src/VBox/VMM/VMMR3/CFGM.cpp
index f712d2b..1241756 100644
--- a/src/VBox/VMM/VMMR3/CFGM.cpp
+++ b/src/VBox/VMM/VMMR3/CFGM.cpp
@@ -85,13 +85,16 @@ static void cfgmR3RemoveLeaf(PCFGMNODE pNode, PCFGMLEAF pLeaf);
 static void cfgmR3FreeValue(PVM pVM, PCFGMLEAF pLeaf);
 
 
+/** @todo replace pVM for pUVM !*/
+
 /**
  * Allocator wrapper.
  *
  * @returns Pointer to the allocated memory, NULL on failure.
- * @param   pVM                 The VM handle, if tree associated with one.
- * @param   enmTag              The allocation tag.
- * @param   cb                  The size of the allocation.
+ * @param   pVM         The cross context VM structure, if the tree
+ *                      is associated with one.
+ * @param   enmTag      The allocation tag.
+ * @param   cb          The size of the allocation.
  */
 static void *cfgmR3MemAlloc(PVM pVM, MMTAG enmTag, size_t cb)
 {
@@ -105,8 +108,9 @@ static void *cfgmR3MemAlloc(PVM pVM, MMTAG enmTag, size_t cb)
  * Free wrapper.
  *
  * @returns Pointer to the allocated memory, NULL on failure.
- * @param   pVM                 The VM handle, if tree associated with one.
- * @param   pv                  The memory block to free.
+ * @param   pVM         The cross context VM structure, if the tree
+ *                      is associated with one.
+ * @param   pv          The memory block to free.
  */
 static void cfgmR3MemFree(PVM pVM, void *pv)
 {
@@ -121,9 +125,10 @@ static void cfgmR3MemFree(PVM pVM, void *pv)
  * String allocator wrapper.
  *
  * @returns Pointer to the allocated memory, NULL on failure.
- * @param   pVM                 The VM handle, if tree associated with one.
- * @param   enmTag              The allocation tag.
- * @param   cbString            The size of the allocation, terminator included.
+ * @param   pVM         The cross context VM structure, if the tree
+ *                      is associated with one.
+ * @param   enmTag      The allocation tag.
+ * @param   cbString    The size of the allocation, terminator included.
  */
 static char *cfgmR3StrAlloc(PVM pVM, MMTAG enmTag,  size_t cbString)
 {
@@ -137,8 +142,9 @@ static char *cfgmR3StrAlloc(PVM pVM, MMTAG enmTag,  size_t cbString)
  * String free wrapper.
  *
  * @returns Pointer to the allocated memory, NULL on failure.
- * @param   pVM                 The VM handle, if tree associated with one.
- * @param   pszString           The memory block to free.
+ * @param   pVM         The cross context VM structure, if the tree
+ *                      is associated with one.
+ * @param   pszString   The memory block to free.
  */
 static void cfgmR3StrFree(PVM pVM, char *pszString)
 {
@@ -175,10 +181,13 @@ static void cfgmR3FreeNodeOnly(PCFGMNODE pNode)
 /**
  * Constructs the configuration for the VM.
  *
+ * This should only be called used once.
+ *
  * @returns VBox status code.
- * @param   pVM                 Pointer to VM which configuration has not yet been loaded.
- * @param   pfnCFGMConstructor  Pointer to callback function for constructing the VM configuration tree.
- *                              This is called in the EM.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pfnCFGMConstructor  Pointer to callback function for constructing
+ *                              the VM configuration tree.  This is called on
+ *                              the EMT.
  * @param   pvUser              The user argument passed to pfnCFGMConstructor.
  * @thread  EMT.
  * @internal
@@ -232,7 +241,7 @@ VMMR3DECL(int) CFGMR3Init(PVM pVM, PFNCFGMCONSTRUCTOR pfnCFGMConstructor, void *
  * Terminates the configuration manager.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @internal
  */
 VMMR3DECL(int) CFGMR3Term(PVM pVM)
@@ -247,7 +256,7 @@ VMMR3DECL(int) CFGMR3Term(PVM pVM)
  * Gets the root node for the VM.
  *
  * @returns Pointer to root node.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR3DECL(PCFGMNODE) CFGMR3GetRoot(PVM pVM)
 {
@@ -259,7 +268,7 @@ VMMR3DECL(PCFGMNODE) CFGMR3GetRoot(PVM pVM)
  * Gets the root node for the VM.
  *
  * @returns Pointer to root node.
- * @param   pVM             Pointer to the VM.
+ * @param   pUVM        The user mode VM structure.
  */
 VMMR3DECL(PCFGMNODE) CFGMR3GetRootU(PUVM pUVM)
 {
@@ -293,7 +302,8 @@ VMMR3DECL(PCFGMNODE) CFGMR3GetParent(PCFGMNODE pNode)
  * @returns Pointer to the parent node.
  * @returns NULL if pNode is Root or pVM is not correct.
  *
- * @param   pVM             The VM handle, used as token that the caller is trusted.
+ * @param   pVM             The cross context VM structure.  Used as token that
+ *                          the caller is trusted.
  * @param   pNode           The node which parent we query.
  */
 VMMR3DECL(PCFGMNODE) CFGMR3GetParentEx(PVM pVM, PCFGMNODE pNode)
@@ -941,7 +951,7 @@ VMMR3DECL(int) CFGMR3ValidateConfig(PCFGMNODE pNode, const char *pszNode,
  * need to do very small adjustments to the config.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @internal
  */
 VMMR3DECL(int) CFGMR3ConstructDefaultTree(PVM pVM)
@@ -2019,7 +2029,8 @@ static void cfgmR3RemoveLeaf(PCFGMNODE pNode, PCFGMLEAF pLeaf)
  * Use this before assigning a new value to a leaf.
  * The caller must either free the leaf or assign a new value to it.
  *
- * @param   pVM         Used to select the heap.
+ * @param   pVM         The cross context VM structure, if the tree
+ *                      is associated with one.
  * @param   pLeaf       Pointer to the leaf which value should be free.
  */
 static void cfgmR3FreeValue(PVM pVM, PCFGMLEAF pLeaf)
@@ -2544,7 +2555,7 @@ VMMR3DECL(int) CFGMR3QueryU16(PCFGMNODE pNode, const char *pszName, uint16_t *pu
  * @param   pNode           Which node to search for pszName in.
  * @param   pszName         Name of an integer value.
  * @param   pu16            Where to store the value. Set to default on failure.
- * @param   i16Def          The default value.
+ * @param   u16Def          The default value.
  */
 VMMR3DECL(int) CFGMR3QueryU16Def(PCFGMNODE pNode, const char *pszName, uint16_t *pu16, uint16_t u16Def)
 {
@@ -3160,7 +3171,7 @@ VMMR3DECL(void) CFGMR3Dump(PCFGMNODE pRoot)
 /**
  * Info handler, internal version.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        Callback functions for doing output.
  * @param   pszArgs     Argument string. Optional and specific to the handler.
  */
diff --git a/src/VBox/VMM/VMMR3/CPUM.cpp b/src/VBox/VMM/VMMR3/CPUM.cpp
index 5c9e320..a7f2149 100644
--- a/src/VBox/VMM/VMMR3/CPUM.cpp
+++ b/src/VBox/VMM/VMMR3/CPUM.cpp
@@ -654,7 +654,7 @@ static const SSMFIELD g_aCpumCtxFieldsV16[] =
  *
  * See AMD Instruction Reference for FXSAVE, FXRSTOR.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 static void cpumR3CheckLeakyFpu(PVM pVM)
 {
@@ -682,7 +682,7 @@ static void cpumR3CheckLeakyFpu(PVM pVM)
  * Initializes the CPUM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) CPUMR3Init(PVM pVM)
 {
@@ -862,7 +862,7 @@ VMMR3DECL(int) CPUMR3Init(PVM pVM)
  *
  * The CPUM will update the addresses used by the switcher.
  *
- * @param   pVM     The VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(void) CPUMR3Relocate(PVM pVM)
 {
@@ -887,7 +887,7 @@ VMMR3DECL(void) CPUMR3Relocate(PVM pVM)
 /**
  * Apply late CPUM property changes based on the fHWVirtEx setting
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   fHWVirtExEnabled    HWVirtEx enabled/disabled
  */
 VMMR3DECL(void) CPUMR3SetHWVirtEx(PVM pVM, bool fHWVirtExEnabled)
@@ -915,7 +915,7 @@ VMMR3DECL(void) CPUMR3SetHWVirtEx(PVM pVM, bool fHWVirtExEnabled)
  * the VM it self is at this point powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) CPUMR3Term(PVM pVM)
 {
@@ -941,10 +941,9 @@ VMMR3DECL(int) CPUMR3Term(PVM pVM)
  *
  * Used by CPUMR3Reset and CPU hot plugging.
  *
- * @param   pVM         Pointer to the cross context VM structure.
- * @param   pVCpu       Pointer to the cross context virtual CPU structure of
- *                      the CPU that is being reset.  This may differ from the
- *                      current EMT.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the CPU that is
+ *                  being reset.  This may differ from the current EMT.
  */
 VMMR3DECL(void) CPUMR3ResetCpu(PVM pVM, PVMCPU pVCpu)
 {
@@ -1090,7 +1089,7 @@ VMMR3DECL(void) CPUMR3ResetCpu(PVM pVM, PVMCPU pVCpu)
  * Resets the CPU.
  *
  * @returns VINF_SUCCESS.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(void) CPUMR3Reset(PVM pVM)
 {
@@ -1116,7 +1115,7 @@ VMMR3DECL(void) CPUMR3Reset(PVM pVM)
  * Pass 0 live exec callback.
  *
  * @returns VINF_SSM_DONT_CALL_AGAIN.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  * @param   uPass               The pass (0).
  */
@@ -1132,7 +1131,7 @@ static DECLCALLBACK(int) cpumR3LiveExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 static DECLCALLBACK(int) cpumR3SaveExec(PVM pVM, PSSMHANDLE pSSM)
@@ -1191,7 +1190,7 @@ static DECLCALLBACK(int) cpumR3SaveExec(PVM pVM, PSSMHANDLE pSSM)
 
 
 /**
- * @copydoc FNSSMINTLOADPREP
+ * @callback_method_impl{FNSSMINTLOADPREP}
  */
 static DECLCALLBACK(int) cpumR3LoadPrep(PVM pVM, PSSMHANDLE pSSM)
 {
@@ -1202,7 +1201,7 @@ static DECLCALLBACK(int) cpumR3LoadPrep(PVM pVM, PSSMHANDLE pSSM)
 
 
 /**
- * @copydoc FNSSMINTLOADEXEC
+ * @callback_method_impl{FNSSMINTLOADEXEC}
  */
 static DECLCALLBACK(int) cpumR3LoadExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
@@ -1508,7 +1507,7 @@ static DECLCALLBACK(int) cpumR3LoadExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uVers
 
 
 /**
- * @copydoc FNSSMINTLOADPREP
+ * @callback_method_impl{FNSSMINTLOADDONE}
  */
 static DECLCALLBACK(int) cpumR3LoadDone(PVM pVM, PSSMHANDLE pSSM)
 {
@@ -1545,7 +1544,7 @@ static DECLCALLBACK(int) cpumR3LoadDone(PVM pVM, PSSMHANDLE pSSM)
  * Checks if the CPUM state restore is still pending.
  *
  * @returns true / false.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMDECL(bool) CPUMR3IsStateRestorePending(PVM pVM)
 {
@@ -1603,7 +1602,7 @@ static void cpumR3InfoFormatFlags(char *pszEFlags, uint32_t efl)
 /**
  * Formats a full register dump.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        The context to format.
  * @param   pCtxCore    The context core to format.
  * @param   pHlp        Output functions.
@@ -1922,7 +1921,7 @@ static void cpumR3InfoOne(PVM pVM, PCPUMCTX pCtx, PCCPUMCTXCORE pCtxCore, PCDBGF
 /**
  * Display all cpu states and any other cpum info.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helper functions.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -1979,7 +1978,7 @@ static void cpumR3InfoParseArg(const char *pszArgs, CPUMDUMPTYPE *penmType, cons
 /**
  * Display the guest cpu state.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helper functions.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -2004,7 +2003,7 @@ static DECLCALLBACK(void) cpumR3InfoGuest(PVM pVM, PCDBGFINFOHLP pHlp, const cha
 /**
  * Display the current guest instruction
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helper functions.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -2027,7 +2026,7 @@ static DECLCALLBACK(void) cpumR3InfoGuestInstr(PVM pVM, PCDBGFINFOHLP pHlp, cons
 /**
  * Display the hypervisor cpu state.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helper functions.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -2048,7 +2047,7 @@ static DECLCALLBACK(void) cpumR3InfoHyper(PVM pVM, PCDBGFINFOHLP pHlp, const cha
 /**
  * Display the host cpu state.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helper functions.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -2239,8 +2238,8 @@ static DECLCALLBACK(int) cpumR3DisasInstrRead(PDISCPUSTATE pDis, uint8_t offInst
  * Disassemble an instruction and return the information in the provided structure.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest CPU context.
  * @param   GCPtrPC     Program counter (relative to CS) to disassemble from.
  * @param   pCpu        Disassembly state.
@@ -2336,7 +2335,7 @@ VMMR3DECL(int) CPUMR3DisasmInstrCPU(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, RTGCPT
  *
  * @returns VBox status code.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   fOr     The CR4 OR mask.
  * @param   fAnd    The CR4 AND mask.
  */
@@ -2358,7 +2357,7 @@ VMMR3DECL(int) CPUMR3SetCR4Feature(PVM pVM, RTHCUINTREG fOr, RTHCUINTREG fAnd)
  * Only REM should ever call this function!
  *
  * @returns The changed flags.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   puCpl       Where to return the current privilege level (CPL).
  */
 VMMR3DECL(uint32_t) CPUMR3RemEnter(PVMCPU pVCpu, uint32_t *puCpl)
@@ -2392,7 +2391,7 @@ VMMR3DECL(uint32_t) CPUMR3RemEnter(PVMCPU pVCpu, uint32_t *puCpl)
 /**
  * Leaves REM.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  * @param   fNoOutOfSyncSels    This is @c false if there are out of sync
  *                              registers.
  */
@@ -2409,7 +2408,7 @@ VMMR3DECL(void) CPUMR3RemLeave(PVMCPU pVCpu, bool fNoOutOfSyncSels)
  * Called when the ring-3 init phase completes.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMR3DECL(int) CPUMR3InitCompleted(PVM pVM)
 {
@@ -2439,7 +2438,7 @@ VMMR3DECL(int) CPUMR3InitCompleted(PVM pVM)
 /**
  * Called when the ring-0 init phases completed.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMR3DECL(void) CPUMR3LogCpuIds(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/CPUMDbg.cpp b/src/VBox/VMM/VMMR3/CPUMDbg.cpp
index bc3d662..b8228ba 100644
--- a/src/VBox/VMM/VMMR3/CPUMDbg.cpp
+++ b/src/VBox/VMM/VMMR3/CPUMDbg.cpp
@@ -34,7 +34,7 @@
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGet_Generic(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -57,7 +57,7 @@ static DECLCALLBACK(int) cpumR3RegGet_Generic(void *pvUser, PCDBGFREGDESC pDesc,
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnSet}
+ * @interface_method_impl{DBGFREGDESC,pfnSet}
  */
 static DECLCALLBACK(int) cpumR3RegSet_Generic(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -103,7 +103,7 @@ static DECLCALLBACK(int) cpumR3RegSet_Generic(void *pvUser, PCDBGFREGDESC pDesc,
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGet_XStateGeneric(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -126,7 +126,7 @@ static DECLCALLBACK(int) cpumR3RegGet_XStateGeneric(void *pvUser, PCDBGFREGDESC
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnSet}
+ * @interface_method_impl{DBGFREGDESC,pfnSet}
  */
 static DECLCALLBACK(int) cpumR3RegSet_XStateGeneric(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -173,7 +173,7 @@ static DECLCALLBACK(int) cpumR3RegSet_XStateGeneric(void *pvUser, PCDBGFREGDESC
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegSet_seg(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -184,7 +184,7 @@ static DECLCALLBACK(int) cpumR3RegSet_seg(void *pvUser, PCDBGFREGDESC pDesc, PCD
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGet_gdtr(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -201,7 +201,7 @@ static DECLCALLBACK(int) cpumR3RegGet_gdtr(void *pvUser, PCDBGFREGDESC pDesc, PD
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegSet_gdtr(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -211,7 +211,7 @@ static DECLCALLBACK(int) cpumR3RegSet_gdtr(void *pvUser, PCDBGFREGDESC pDesc, PC
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGet_idtr(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -228,7 +228,7 @@ static DECLCALLBACK(int) cpumR3RegGet_idtr(void *pvUser, PCDBGFREGDESC pDesc, PD
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegSet_idtr(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -272,7 +272,7 @@ DECLINLINE(uint16_t) cpumR3RegCalcFpuTagFromFxSave(PCX86FXSTATE pFpu, unsigned i
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGet_ftw(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -295,7 +295,7 @@ static DECLCALLBACK(int) cpumR3RegGet_ftw(void *pvUser, PCDBGFREGDESC pDesc, PDB
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegSet_ftw(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -305,7 +305,7 @@ static DECLCALLBACK(int) cpumR3RegSet_ftw(void *pvUser, PCDBGFREGDESC pDesc, PCD
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGet_Dummy(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -332,7 +332,7 @@ static DECLCALLBACK(int) cpumR3RegGet_Dummy(void *pvUser, PCDBGFREGDESC pDesc, P
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnSet}
+ * @interface_method_impl{DBGFREGDESC,pfnSet}
  */
 static DECLCALLBACK(int) cpumR3RegSet_Dummy(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -349,7 +349,7 @@ static DECLCALLBACK(int) cpumR3RegSet_Dummy(void *pvUser, PCDBGFREGDESC pDesc, P
  */
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGstGet_crX(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -371,7 +371,7 @@ static DECLCALLBACK(int) cpumR3RegGstGet_crX(void *pvUser, PCDBGFREGDESC pDesc,
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGstSet_crX(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -429,7 +429,7 @@ static DECLCALLBACK(int) cpumR3RegGstSet_crX(void *pvUser, PCDBGFREGDESC pDesc,
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGstGet_drX(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -451,7 +451,7 @@ static DECLCALLBACK(int) cpumR3RegGstGet_drX(void *pvUser, PCDBGFREGDESC pDesc,
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGstSet_drX(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -499,7 +499,7 @@ static DECLCALLBACK(int) cpumR3RegGstSet_drX(void *pvUser, PCDBGFREGDESC pDesc,
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGstGet_msr(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -528,7 +528,7 @@ static DECLCALLBACK(int) cpumR3RegGstGet_msr(void *pvUser, PCDBGFREGDESC pDesc,
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGstSet_msr(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -587,7 +587,7 @@ static DECLCALLBACK(int) cpumR3RegGstSet_msr(void *pvUser, PCDBGFREGDESC pDesc,
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGstGet_stN(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -606,7 +606,7 @@ static DECLCALLBACK(int) cpumR3RegGstGet_stN(void *pvUser, PCDBGFREGDESC pDesc,
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegGstSet_stN(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -623,7 +623,7 @@ static DECLCALLBACK(int) cpumR3RegGstSet_stN(void *pvUser, PCDBGFREGDESC pDesc,
  */
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegHyperGet_crX(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -653,7 +653,7 @@ static DECLCALLBACK(int) cpumR3RegHyperGet_crX(void *pvUser, PCDBGFREGDESC pDesc
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegHyperSet_crX(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -664,7 +664,7 @@ static DECLCALLBACK(int) cpumR3RegHyperSet_crX(void *pvUser, PCDBGFREGDESC pDesc
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegHyperGet_drX(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -695,7 +695,7 @@ static DECLCALLBACK(int) cpumR3RegHyperGet_drX(void *pvUser, PCDBGFREGDESC pDesc
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegHyperSet_drX(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -706,7 +706,7 @@ static DECLCALLBACK(int) cpumR3RegHyperSet_drX(void *pvUser, PCDBGFREGDESC pDesc
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegHyperGet_msr(void *pvUser, PCDBGFREGDESC pDesc, PDBGFREGVAL pValue)
 {
@@ -727,7 +727,7 @@ static DECLCALLBACK(int) cpumR3RegHyperGet_msr(void *pvUser, PCDBGFREGDESC pDesc
 
 
 /**
- * @interface_method_impl{DBGFREGDESC, pfnGet}
+ * @interface_method_impl{DBGFREGDESC,pfnGet}
  */
 static DECLCALLBACK(int) cpumR3RegHyperSet_msr(void *pvUser, PCDBGFREGDESC pDesc, PCDBGFREGVAL pValue, PCDBGFREGVAL pfMask)
 {
@@ -1379,7 +1379,7 @@ static DBGFREGDESC const g_aCpumRegHyperDescs[] =
  * Called by CPUMR3Init.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 int cpumR3DbgInit(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp b/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
index 050d65e..d318b69 100644
--- a/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
+++ b/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
@@ -592,9 +592,8 @@ static bool cpumR3CpuIdGetLeafLegacy(PCPUMCPUIDLEAF paLeaves, uint32_t cLeaves,
  *
  * @returns Pointer to the CPUID leaf array (*ppaLeaves) on success.  NULL on
  *          failure.
- * @param   pVM         Pointer to the VM, used as the heap selector. Passing
- *                      NULL uses the host-context heap, otherwise the VM's
- *                      hyper heap is used.
+ * @param   pVM         The cross context VM structure.  If NULL, use
+ *                      the process heap, otherwise the VM's hyper heap.
  * @param   ppaLeaves   Pointer to the variable holding the array pointer
  *                      (input/output).
  * @param   cLeaves     The current array size.
@@ -746,16 +745,15 @@ static void cpumR3CpuIdAssertOrder(PCPUMCPUIDLEAF paLeaves, uint32_t cLeaves)
  * cpumR3CpuIdEnsureSpace function.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM, used as the heap selector.
- *                          Passing NULL uses the host-context heap, otherwise
- *                          the VM's hyper heap is used.
- * @param   ppaLeaves       Pointer to the the pointer to the array of sorted
- *                          CPUID leaves and sub-leaves. Must be NULL if using
- *                          the hyper heap.
- * @param   pcLeaves        Where we keep the leaf count for *ppaLeaves. Must be
- *                          NULL if using the hyper heap.
- * @param   pNewLeaf        Pointer to the data of the new leaf we're about to
- *                          insert.
+ * @param   pVM         The cross context VM structure.  If NULL, use
+ *                      the process heap, otherwise the VM's hyper heap.
+ * @param   ppaLeaves   Pointer to the the pointer to the array of sorted
+ *                      CPUID leaves and sub-leaves. Must be NULL if using
+ *                      the hyper heap.
+ * @param   pcLeaves    Where we keep the leaf count for *ppaLeaves. Must
+ *                      be NULL if using the hyper heap.
+ * @param   pNewLeaf    Pointer to the data of the new leaf we're about to
+ *                      insert.
  */
 static int cpumR3CpuIdInsert(PVM pVM, PCPUMCPUIDLEAF *ppaLeaves, uint32_t *pcLeaves, PCPUMCPUIDLEAF pNewLeaf)
 {
@@ -1058,7 +1056,7 @@ static bool cpumR3IsEcxRelevantForCpuIdLeaf(uint32_t uLeaf, uint32_t *pcSubLeave
  * Gets a CPU ID leaf.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pLeaf       Where to store the found leaf.
  * @param   uLeaf       The leaf to locate.
  * @param   uSubLeaf    The subleaf to locate.  Pass 0 if no sub-leaves.
@@ -1081,7 +1079,7 @@ VMMR3DECL(int) CPUMR3CpuIdGetLeaf(PVM pVM, PCPUMCPUIDLEAF pLeaf, uint32_t uLeaf,
  * Inserts a CPU ID leaf, replacing any existing ones.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pNewLeaf    Pointer to the leaf being inserted.
  */
 VMMR3DECL(int) CPUMR3CpuIdInsert(PVM pVM, PCPUMCPUIDLEAF pNewLeaf)
@@ -1775,7 +1773,7 @@ static PCPUMCPUIDLEAF cpumR3CpuIdGetExactLeaf(PCPUM pCpum, uint32_t uLeaf, uint3
  * the hyper heap!
  *
  * @returns VBox status code (VMSetError called).
- * @param   pVM                 Pointer to the cross context VM structure
+ * @param   pVM                 The cross context VM structure.
  * @param   pMsrNode            The CFGM node with the MSR overrides.
  */
 static int cpumR3LoadMsrOverrides(PVM pVM, PCFGMNODE pMsrNode)
@@ -1853,7 +1851,7 @@ static int cpumR3LoadMsrOverrides(PVM pVM, PCFGMNODE pMsrNode)
  * heap to the hyper heap!
  *
  * @returns VBox status code (VMSetError called).
- * @param   pVM             Pointer to the cross context VM structure
+ * @param   pVM             The cross context VM structure.
  * @param   pParentNode     The CFGM node with the CPUID leaves.
  * @param   pszLabel        How to label the overrides we're loading.
  */
@@ -2033,7 +2031,7 @@ static int cpumR3CpuIdInitHostSet(uint32_t uStart, PCPUMCPUID paLeaves, uint32_t
  * GuestFeatures and CPUMCTX::aoffXState.
  *
  * @returns VBox status code.
- * @param   pVM         The cross context VM handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpum       The CPUM part of @a VM.
  * @param   paLeaves    The leaves.  These will be copied (but not freed).
  * @param   cLeaves     The number of leaves.
@@ -2487,7 +2485,7 @@ static PCPUMCPUIDLEAF cpumR3CpuIdMakeSingleLeaf(PCPUM pCpum, PCPUMCPUIDLEAF pLea
  * what means.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the cross context VM structure (for cCpus).
+ * @param   pVM         The cross context VM structure (for cCpus).
  * @param   pCpum       The CPUM instance data.
  * @param   pConfig     The CPUID configuration we've read from CFGM.
  */
@@ -3529,7 +3527,7 @@ static int cpumR3CpuIdSanitize(PVM pVM, PCPUM pCpum, PCPUMCPUIDCONFIG pConfig)
  * Reads a value in /CPUM/IsaExts/ node.
  *
  * @returns VBox status code (error message raised).
- * @param   pVM             The VM handle (for errors).
+ * @param   pVM             The cross context VM structure. (For errors.)
  * @param   pIsaExts        The /CPUM/IsaExts node (can be NULL).
  * @param   pszValueName    The value / extension name.
  * @param   penmValue       Where to return the choice.
@@ -3602,7 +3600,7 @@ static int cpumR3CpuIdReadIsaExtCfg(PVM pVM, PCFGMNODE pIsaExts, const char *psz
  * Reads a value in /CPUM/IsaExts/ node, forcing it to DISABLED if wanted.
  *
  * @returns VBox status code (error message raised).
- * @param   pVM             The VM handle (for errors).
+ * @param   pVM             The cross context VM structure. (For errors.)
  * @param   pIsaExts        The /CPUM/IsaExts node (can be NULL).
  * @param   pszValueName    The value / extension name.
  * @param   penmValue       Where to return the choice.
@@ -3631,7 +3629,7 @@ static int cpumR3CpuIdReadIsaExtCfgEx(PVM pVM, PCFGMNODE pIsaExts, const char *p
  * Reads a value in /CPUM/IsaExts/ node that used to be located in /CPUM/.
  *
  * @returns VBox status code (error message raised).
- * @param   pVM             The VM handle (for errors).
+ * @param   pVM             The cross context VM structure. (For errors.)
  * @param   pIsaExts        The /CPUM/IsaExts node (can be NULL).
  * @param   pCpumCfg        The /CPUM node (can be NULL).
  * @param   pszValueName    The value / extension name.
@@ -3943,7 +3941,7 @@ static int cpumR3CpuIdReadConfig(PVM pVM, PCPUMCPUIDCONFIG pConfig, PCFGMNODE pC
  * Initializes the emulated CPU's CPUID & MSR information.
  *
  * @returns VBox status code.
- * @param   pVM          Pointer to the VM.
+ * @param   pVM          The cross context VM structure.
  */
 int cpumR3InitCpuIdAndMsrs(PVM pVM)
 {
@@ -4108,7 +4106,7 @@ int cpumR3InitCpuIdAndMsrs(PVM pVM)
 /**
  * Called both in pass 0 and the final pass.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 void cpumR3SaveCpuId(PVM pVM, PSSMHANDLE pSSM)
@@ -4301,7 +4299,7 @@ static int cpumR3LoadGuestCpuIdArray(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion
  * Loads the CPU ID leaves saved by pass 0, inner worker.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  * @param   uVersion            The format version.
  * @param   paLeaves            Guest CPUID leaves loaded from the state.
@@ -5060,7 +5058,7 @@ int cpumR3LoadCpuIdInner(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, PCPUMCPUID
  * Loads the CPU ID leaves saved by pass 0.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  * @param   uVersion            The format version.
  */
@@ -5090,7 +5088,7 @@ int cpumR3LoadCpuId(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion)
  * Loads the CPU ID leaves saved by pass 0 in an pre 3.2 saved state.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  * @param   uVersion            The format version.
  */
@@ -5824,7 +5822,7 @@ static PCCPUMCPUIDLEAF cpumR3CpuIdInfoRawRange(PCDBGFINFOHLP pHlp, PCCPUMCPUIDLE
 /**
  * Display the guest CpuId leaves.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helper functions.
  * @param   pszArgs     "terse", "default" or "verbose".
  */
@@ -6309,7 +6307,7 @@ DECLCALLBACK(void) cpumR3CpuIdInfo(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszA
  * Gets a pointer to the default CPUID leaf.
  *
  * @returns Raw-mode pointer to the default CPUID leaf (read-only).
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @remark  Intended for PATM only.
  */
 VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmDefRCPtr(PVM pVM)
@@ -6322,7 +6320,7 @@ VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmDefRCPtr(PVM pVM)
  * Gets a number of standard CPUID leaves (PATM only).
  *
  * @returns Number of leaves.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @remark  Intended for PATM - legacy, don't use in new code.
  */
 VMMR3_INT_DECL(uint32_t) CPUMR3GetGuestCpuIdPatmStdMax(PVM pVM)
@@ -6335,7 +6333,7 @@ VMMR3_INT_DECL(uint32_t) CPUMR3GetGuestCpuIdPatmStdMax(PVM pVM)
  * Gets a number of extended CPUID leaves (PATM only).
  *
  * @returns Number of leaves.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @remark  Intended for PATM - legacy, don't use in new code.
  */
 VMMR3_INT_DECL(uint32_t) CPUMR3GetGuestCpuIdPatmExtMax(PVM pVM)
@@ -6348,7 +6346,7 @@ VMMR3_INT_DECL(uint32_t) CPUMR3GetGuestCpuIdPatmExtMax(PVM pVM)
  * Gets a number of centaur CPUID leaves.
  *
  * @returns Number of leaves.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @remark  Intended for PATM - legacy, don't use in new code.
  */
 VMMR3_INT_DECL(uint32_t) CPUMR3GetGuestCpuIdPatmCentaurMax(PVM pVM)
@@ -6363,7 +6361,7 @@ VMMR3_INT_DECL(uint32_t) CPUMR3GetGuestCpuIdPatmCentaurMax(PVM pVM)
  * CPUMR3GetGuestCpuIdStdMax() give the size of the array.
  *
  * @returns Raw-mode pointer to the standard CPUID leaves (read-only).
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @remark  Intended for PATM - legacy, don't use in new code.
  */
 VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmStdRCPtr(PVM pVM)
@@ -6378,7 +6376,7 @@ VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmStdRCPtr(PVM pVM)
  * CPUMGetGuestCpuIdExtMax() give the size of the array.
  *
  * @returns Raw-mode pointer to the extended CPUID leaves (read-only).
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @remark  Intended for PATM - legacy, don't use in new code.
  */
 VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmExtRCPtr(PVM pVM)
@@ -6393,7 +6391,7 @@ VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmExtRCPtr(PVM pVM)
  * CPUMGetGuestCpuIdCentaurMax() give the size of the array.
  *
  * @returns Raw-mode pointer to the centaur CPUID leaves (read-only).
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @remark  Intended for PATM - legacy, don't use in new code.
  */
 VMMR3_INT_DECL(RCPTRTYPE(PCCPUMCPUID)) CPUMR3GetGuestCpuIdPatmCentaurRCPtr(PVM pVM)
diff --git a/src/VBox/VMM/VMMR3/CPUMR3Db.cpp b/src/VBox/VMM/VMMR3/CPUMR3Db.cpp
index d3eb861..0302345 100644
--- a/src/VBox/VMM/VMMR3/CPUMR3Db.cpp
+++ b/src/VBox/VMM/VMMR3/CPUMR3Db.cpp
@@ -176,12 +176,14 @@ typedef struct CPUMDBENTRY
 /** @} */
 
 
+#include "cpus/Intel_Core_i7_5600U.h"
 #include "cpus/Intel_Core_i7_3960X.h"
 #include "cpus/Intel_Core_i5_3570.h"
 #include "cpus/Intel_Core_i7_2635QM.h"
 #include "cpus/Intel_Xeon_X5482_3_20GHz.h"
 #include "cpus/Intel_Pentium_M_processor_2_00GHz.h"
 #include "cpus/Intel_Pentium_4_3_00GHz.h"
+#include "cpus/Intel_Atom_330_1_60GHz.h"
 
 #include "cpus/AMD_FX_8150_Eight_Core.h"
 #include "cpus/AMD_Phenom_II_X6_1100T.h"
@@ -207,6 +209,9 @@ typedef struct CPUMDBENTRY
  */
 static CPUMDBENTRY const * const g_apCpumDbEntries[] =
 {
+#ifdef VBOX_CPUDB_Intel_Core_i7_5600U
+    &g_Entry_Intel_Core_i7_5600U,
+#endif
 #ifdef VBOX_CPUDB_Intel_Core_i5_3570
     &g_Entry_Intel_Core_i5_3570,
 #endif
@@ -216,6 +221,9 @@ static CPUMDBENTRY const * const g_apCpumDbEntries[] =
 #ifdef VBOX_CPUDB_Intel_Core_i7_2635QM
     &g_Entry_Intel_Core_i7_2635QM,
 #endif
+#ifdef VBOX_CPUDB_Intel_Atom_330_1_60GHz
+    &g_Entry_Intel_Atom_330_1_60GHz,
+#endif
 #ifdef Intel_Pentium_M_processor_2_00GHz
     &g_Entry_Intel_Pentium_M_processor_2_00GHz,
 #endif
@@ -298,9 +306,8 @@ static uint32_t cpumR3MsrRangesBinSearch(PCCPUMMSRRANGE paMsrRanges, uint32_t cM
  *
  * @returns Pointer to the MSR ranges on success, NULL on failure.  On failure
  *          @a *ppaMsrRanges is freed and set to NULL.
- * @param   pVM             Pointer to the VM, used as the heap selector.
- *                          Passing NULL uses the host-context heap, otherwise
- *                          the VM's hyper heap is used.
+ * @param   pVM             The cross context VM structure.  If NULL,
+ *                          use the process heap, otherwise the VM's hyper heap.
  * @param   ppaMsrRanges    The variable pointing to the ranges (input/output).
  * @param   cMsrRanges      The current number of ranges.
  * @param   cNewRanges      The number of ranges to be added.
@@ -376,9 +383,8 @@ static PCPUMMSRRANGE cpumR3MsrRangesEnsureSpace(PVM pVM, PCPUMMSRRANGE *ppaMsrRa
  * @retval  VINF_SUCCESS
  * @retval  VERR_NO_MEMORY
  *
- * @param   pVM             Pointer to the VM, used as the heap selector.
- *                          Passing NULL uses the host-context heap, otherwise
- *                          the hyper heap.
+ * @param   pVM             The cross context VM structure.  If NULL,
+ *                          use the process heap, otherwise the VM's hyper heap.
  * @param   ppaMsrRanges    The variable pointing to the ranges (input/output).
  *                          Must be NULL if using the hyper heap.
  * @param   pcMsrRanges     The variable holding number of ranges. Must be NULL
@@ -528,7 +534,7 @@ int cpumR3MsrRangesInsert(PVM pVM, PCPUMMSRRANGE *ppaMsrRanges, uint32_t *pcMsrR
  * Worker for cpumR3MsrApplyFudge that applies one table.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the cross context VM structure.
+ * @param   pVM                 The cross context VM structure.
  * @param   paRanges            Array of MSRs to fudge.
  * @param   cRanges             Number of MSRs in the array.
  */
@@ -554,7 +560,7 @@ static int cpumR3MsrApplyFudgeTable(PVM pVM, PCCPUMMSRRANGE paRanges, size_t cRa
  * for instance the cpu vendor differs.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the cross context VM structure.
+ * @param   pVM                 The cross context VM structure.
  */
 int cpumR3MsrApplyFudge(PVM pVM)
 {
@@ -601,6 +607,122 @@ int cpumR3MsrApplyFudge(PVM pVM)
 }
 
 
+/**
+ * Do we consider @a enmConsider a better match for @a enmTarget than
+ * @a enmFound?
+ *
+ * Only called when @a enmConsider isn't exactly what we're looking for.
+ *
+ * @returns true/false.
+ * @param   enmConsider         The new microarch to consider.
+ * @param   enmTarget           The target microarch.
+ * @param   enmFound            The best microarch match we've found thus far.
+ */
+DECLINLINE(bool) cpumR3DbIsBetterMarchMatch(CPUMMICROARCH enmConsider, CPUMMICROARCH enmTarget, CPUMMICROARCH enmFound)
+{
+    Assert(enmConsider != enmTarget);
+
+    /*
+     * If we've got an march match, don't bother with enmConsider.
+     */
+    if (enmFound == enmTarget)
+        return false;
+
+    /*
+     * Found is below: Pick 'consider' if it's closer to the target or above it.
+     */
+    if (enmFound < enmTarget)
+        return enmConsider > enmFound;
+
+    /*
+     * Found is above: Pick 'consider' if it's also above (paranoia: or equal)
+     *                 and but closer to the target.
+     */
+    return enmConsider >= enmTarget && enmConsider < enmFound;
+}
+
+
+/**
+ * Do we consider @a enmConsider a better match for @a enmTarget than
+ * @a enmFound?
+ *
+ * Only called for intel family 06h CPUs.
+ *
+ * @returns true/false.
+ * @param   enmConsider         The new microarch to consider.
+ * @param   enmTarget           The target microarch.
+ * @param   enmFound            The best microarch match we've found thus far.
+ */
+static bool cpumR3DbIsBetterIntelFam06Match(CPUMMICROARCH enmConsider, CPUMMICROARCH enmTarget, CPUMMICROARCH enmFound)
+{
+    /* Check intel family 06h claims. */
+    AssertReturn(enmConsider >= kCpumMicroarch_Intel_P6_Core_Atom_First && enmConsider <= kCpumMicroarch_Intel_P6_Core_Atom_End,
+                 false);
+    AssertReturn(enmTarget   >= kCpumMicroarch_Intel_P6_Core_Atom_First && enmTarget   <= kCpumMicroarch_Intel_P6_Core_Atom_End,
+                 false);
+
+    /* Put matches out of the way. */
+    if (enmConsider == enmTarget)
+        return true;
+    if (enmFound == enmTarget)
+        return false;
+
+    /* If found isn't a family 06h march, whatever we're considering must be a better choice. */
+    if (   enmFound < kCpumMicroarch_Intel_P6_Core_Atom_First
+        || enmFound > kCpumMicroarch_Intel_P6_Core_Atom_End)
+        return true;
+
+    /*
+     * The family 06h stuff is split into three categories:
+     *      - Common P6 heritage
+     *      - Core
+     *      - Atom
+     *
+     * Determin which of the three arguments are Atom marchs, because that's
+     * all we need to make the right choice.
+     */
+    bool const fConsiderAtom = enmConsider >= kCpumMicroarch_Intel_Atom_First;
+    bool const fTargetAtom   = enmTarget   >= kCpumMicroarch_Intel_Atom_First;
+    bool const fFoundAtom    = enmFound    >= kCpumMicroarch_Intel_Atom_First;
+
+    /*
+     * Want atom:
+     */
+    if (fTargetAtom)
+    {
+        /* Pick the atom if we've got one of each.*/
+        if (fConsiderAtom != fFoundAtom)
+            return fConsiderAtom;
+        /* If we haven't got any atoms under consideration, pick a P6 or the earlier core.
+           Note! Not entirely sure Dothan is the best choice, but it'll do for now. */
+        if (!fConsiderAtom)
+        {
+            if (enmConsider > enmFound)
+                return enmConsider <= kCpumMicroarch_Intel_P6_M_Dothan;
+            return enmFound > kCpumMicroarch_Intel_P6_M_Dothan;
+        }
+        /* else: same category, default comparison rules. */
+        Assert(fConsiderAtom && fFoundAtom);
+    }
+    /*
+     * Want non-atom:
+     */
+    /* Pick the non-atom if we've got one of each. */
+    else if (fConsiderAtom != fFoundAtom)
+        return fFoundAtom;
+    /* If we've only got atoms under consideration, pick the older one just to pick something. */
+    else if (fConsiderAtom)
+        return enmConsider < enmFound;
+    else
+        Assert(!fConsiderAtom && !fFoundAtom);
+
+    /*
+     * Same basic category.  Do same compare as caller.
+     */
+    return cpumR3DbIsBetterMarchMatch(enmConsider, enmTarget, enmFound);
+}
+
+
 int cpumR3DbGetCpuInfo(const char *pszName, PCPUMINFO pInfo)
 {
     CPUMDBENTRY const *pEntry = NULL;
@@ -674,9 +796,11 @@ int cpumR3DbGetCpuInfo(const char *pszName, PCPUMINFO pInfo)
                     else if (   !pEntry
                              || pEntry->uFamily != uFamily)
                         pEntry = pCur;
-                    else if (  pCur->enmMicroarch >= enmMicroarch
-                             ? pCur->enmMicroarch < pEntry->enmMicroarch || pEntry->enmMicroarch < enmMicroarch
-                             : pCur->enmMicroarch > pEntry->enmMicroarch)
+                    /* Special march matching rules applies to intel family 06h. */
+                    else if (     enmVendor == CPUMCPUVENDOR_INTEL
+                               && uFamily   == 6
+                             ? cpumR3DbIsBetterIntelFam06Match(pCur->enmMicroarch, enmMicroarch, pEntry->enmMicroarch)
+                             : cpumR3DbIsBetterMarchMatch(pCur->enmMicroarch, enmMicroarch, pEntry->enmMicroarch))
                         pEntry = pCur;
                 }
                 /* We don't do closeness matching on family, we use the first
@@ -781,7 +905,7 @@ int cpumR3DbGetCpuInfo(const char *pszName, PCPUMINFO pInfo)
  * adjusted/removed to fit in the new one.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the cross context VM structure.
+ * @param   pVM                 The cross context VM structure.
  * @param   pNewRange           Pointer to the MSR range being inserted.
  */
 VMMR3DECL(int) CPUMR3MsrRangesInsert(PVM pVM, PCCPUMMSRRANGE pNewRange)
@@ -800,7 +924,7 @@ VMMR3DECL(int) CPUMR3MsrRangesInsert(PVM pVM, PCCPUMMSRRANGE pNewRange)
  * hyper heap.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the cross context VM structure.
+ * @param   pVM                 The cross context VM structure.
  */
 int cpumR3MsrRegStats(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/CSAM.cpp b/src/VBox/VMM/VMMR3/CSAM.cpp
index 8ff930d..35a28c8 100644
--- a/src/VBox/VMM/VMMR3/CSAM.cpp
+++ b/src/VBox/VMM/VMMR3/CSAM.cpp
@@ -329,7 +329,7 @@ static const SSMFIELD g_aCsamPageRecFields[] =
  * Initializes the CSAM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) CSAMR3Init(PVM pVM)
 {
@@ -463,7 +463,7 @@ VMMR3_INT_DECL(int) CSAMR3Init(PVM pVM)
 /**
  * (Re)initializes CSAM
  *
- * @param   pVM     The VM.
+ * @param   pVM     The cross context VM structure.
  */
 static int csamReinit(PVM pVM)
 {
@@ -507,7 +507,7 @@ static int csamReinit(PVM pVM)
  *
  * The csam will update the addresses used by the switcher.
  *
- * @param   pVM      The VM.
+ * @param   pVM      The cross context VM structure.
  * @param   offDelta Relocation delta.
  */
 VMMR3_INT_DECL(void) CSAMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
@@ -536,7 +536,7 @@ VMMR3_INT_DECL(void) CSAMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
  * the VM it self is at this point powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) CSAMR3Term(PVM pVM)
 {
@@ -564,7 +564,7 @@ VMMR3_INT_DECL(int) CSAMR3Term(PVM pVM)
  * CSAM reset callback.
  *
  * @returns VBox status code.
- * @param   pVM     The VM which is reset.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) CSAMR3Reset(PVM pVM)
 {
@@ -639,7 +639,7 @@ static DECLCALLBACK(int) csamR3SavePageState(PAVLPVNODECORE pNode, void *pvVM)
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 static DECLCALLBACK(int) csamR3Save(PVM pVM, PSSMHANDLE pSSM)
@@ -688,7 +688,7 @@ static DECLCALLBACK(int) csamR3Save(PVM pVM, PSSMHANDLE pSSM)
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion        Data layout version.
  * @param   uPass           The data pass.
@@ -884,7 +884,7 @@ static DECLCALLBACK(int) csamR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion,
  *
  * @returns Byte pointer (ring-3 context) corresponding to pGCPtr on success,
  *          NULL on failure.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCacheRec   Address conversion cache record
  * @param   pGCPtr      Guest context pointer
  * @returns             Host context pointer or NULL in case of an error
@@ -1027,7 +1027,7 @@ DECLINLINE(int) csamR3DISInstr(PVM pVM, RTRCPTR InstrGC, uint8_t *InstrHC, DISCP
  * Analyses the instructions following the cli for compliance with our heuristics for cli
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpu        CPU disassembly state
  * @param   pInstrGC    Guest context pointer to privileged instruction
  * @param   pCurInstrGC Guest context pointer to the current instruction
@@ -1256,7 +1256,7 @@ static DECLCALLBACK(int) CSAMR3AnalyseCallback(PVM pVM, DISCPUSTATE *pCpu, RCPTR
  * Wrapper for csamAnalyseCodeStream for call instructions.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context pointer to privileged instruction
  * @param   pCurInstrGC Guest context pointer to the current instruction
  * @param   fCode32     16 or 32 bits code
@@ -1460,13 +1460,13 @@ done:
  * Disassembles the code stream until the callback function detects a failure or decides everything is acceptable
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context pointer to privileged instruction
  * @param   pCurInstrGC Guest context pointer to the current instruction
  * @param   fCode32     16 or 32 bits code
  * @param   pfnCSAMR3Analyse Callback for testing the disassembled instruction
  * @param   pUserData   User pointer (callback specific)
- *
+ * @param   pCacheRec   GC to HC cache record.
  */
 static int csamAnalyseCodeStream(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, bool fCode32,
                                    PFN_CSAMR3ANALYSE pfnCSAMR3Analyse, void *pUserData, PCSAMP2GLOOKUPREC pCacheRec)
@@ -1747,7 +1747,7 @@ done:
  * Calculates the 64 bits hash value for the current page
  *
  * @returns hash value
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstr      Page address
  */
 uint64_t csamR3CalcPageHash(PVM pVM, RTRCPTR pInstr)
@@ -1813,7 +1813,7 @@ uint64_t csamR3CalcPageHash(PVM pVM, RTRCPTR pInstr)
  * Notify CSAM of a page flush
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   addr        GC address of the page to flush
  * @param   fRemovePage Page removal flag
  */
@@ -1925,7 +1925,7 @@ static int csamFlushPage(PVM pVM, RTRCPTR addr, bool fRemovePage)
  * Notify CSAM of a page flush
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   addr        GC address of the page to flush
  */
 VMMR3_INT_DECL(int) CSAMR3FlushPage(PVM pVM, RTRCPTR addr)
@@ -1937,7 +1937,7 @@ VMMR3_INT_DECL(int) CSAMR3FlushPage(PVM pVM, RTRCPTR addr)
  * Remove a CSAM monitored page. Use with care!
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   addr        GC address of the page to flush
  */
 VMMR3_INT_DECL(int) CSAMR3RemovePage(PVM pVM, RTRCPTR addr)
@@ -1964,7 +1964,7 @@ VMMR3_INT_DECL(int) CSAMR3RemovePage(PVM pVM, RTRCPTR addr)
  * Check a page record in case a page has been changed
  *
  * @returns VBox status code. (trap handled or not)
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    GC instruction pointer
  */
 int csamR3CheckPageRecord(PVM pVM, RTRCPTR pInstrGC)
@@ -2008,7 +2008,7 @@ const char *csamGetMonitorDescription(CSAMTAG enmTag)
  * Adds page record to our lookup tree
  *
  * @returns CSAMPAGE ptr or NULL if failure
- * @param   pVM                     Pointer to the VM.
+ * @param   pVM                     The cross context VM structure.
  * @param   GCPtr                   Page address
  * @param   enmTag                  Owner tag
  * @param   fCode32                 16 or 32 bits code
@@ -2115,7 +2115,7 @@ static PCSAMPAGE csamR3CreatePageRecord(PVM pVM, RTRCPTR GCPtr, CSAMTAG enmTag,
  * Monitors a code page (if not already monitored)
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPageAddrGC The page to monitor
  * @param   enmTag      Monitor tag
  */
@@ -2243,7 +2243,7 @@ VMMR3DECL(int) CSAMR3MonitorPage(PVM pVM, RTRCPTR pPageAddrGC, CSAMTAG enmTag)
  * Unmonitors a code page
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPageAddrGC The page to monitor
  * @param   enmTag      Monitor tag
  */
@@ -2270,7 +2270,7 @@ VMMR3DECL(int) CSAMR3UnmonitorPage(PVM pVM, RTRCPTR pPageAddrGC, CSAMTAG enmTag)
  * Removes a page record from our lookup tree
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       Page address
  */
 static int csamRemovePageRecord(PVM pVM, RTRCPTR GCPtr)
@@ -2333,7 +2333,7 @@ static int csamRemovePageRecord(PVM pVM, RTRCPTR GCPtr)
 /**
  * Callback for delayed writes from non-EMT threads
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPtr           The virtual address the guest is writing to. (not correct if it's an alias!)
  * @param   cbBuf           How much it's reading/writing.
  */
@@ -2346,10 +2346,10 @@ static DECLCALLBACK(void) CSAMDelayedWriteHandler(PVM pVM, RTRCPTR GCPtr, size_t
 /**
  * \#PF Handler callback for invalidation of virtual access handler ranges.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the cross context CPU context for the
- *                          calling EMT.
- * @param   GCPtr           The virtual address the guest has changed.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
+ * @param   GCPtr   The virtual address the guest has changed.
+ * @param   pvUser  Ignored.
  *
  * @remarks Not currently called by PGM. It was actually only called for a month
  *          back in 2006...
@@ -2368,7 +2368,7 @@ static DECLCALLBACK(int) csamR3CodePageInvalidate(PVM pVM, PVMCPU pVCpu, RTGCPTR
  * Check if the current instruction has already been checked before
  *
  * @returns VBox status code. (trap handled or not)
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstr      Instruction pointer
  * @param   pPage       CSAM patch structure pointer
  */
@@ -2418,7 +2418,7 @@ bool csamIsCodeScanned(PVM pVM, RTRCPTR pInstr, PCSAMPAGE *pPage)
 /**
  * Mark an instruction in a page as scanned/not scanned
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       Patch structure pointer
  * @param   pInstr      Instruction pointer
  * @param   cbInstr      Instruction size
@@ -2458,7 +2458,7 @@ static void csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTRCPTR pInstr, uint32_t cbIn
  * Mark an instruction in a page as scanned/not scanned
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstr      Instruction pointer
  * @param   cbInstr      Instruction size
  * @param   fScanned    Mark as scanned or not
@@ -2487,7 +2487,7 @@ VMMR3_INT_DECL(int) CSAMR3MarkCode(PVM pVM, RTRCPTR pInstr, uint32_t cbInstr, bo
  * Scan and analyse code
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        Guest CPU context.
  * @param   pInstrGC    Instruction pointer.
  */
@@ -2515,7 +2515,7 @@ VMMR3_INT_DECL(int) CSAMR3CheckCodeEx(PVM pVM, PCPUMCTX pCtx, RTRCPTR pInstrGC)
  * Scan and analyse code
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Instruction pointer (0:32 virtual address)
  */
 VMMR3_INT_DECL(int) CSAMR3CheckCode(PVM pVM, RTRCPTR pInstrGC)
@@ -2556,7 +2556,7 @@ VMMR3_INT_DECL(int) CSAMR3CheckCode(PVM pVM, RTRCPTR pInstrGC)
  * Flush dirty code pages
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int csamR3FlushDirtyPages(PVM pVM)
 {
@@ -2609,7 +2609,7 @@ static int csamR3FlushDirtyPages(PVM pVM)
  * Flush potential new code pages
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int csamR3FlushCodePages(PVM pVM)
 {
@@ -2635,8 +2635,8 @@ static int csamR3FlushCodePages(PVM pVM)
  * Perform any pending actions
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3_INT_DECL(int) CSAMR3DoPendingAction(PVM pVM, PVMCPU pVCpu)
 {
@@ -2653,7 +2653,7 @@ VMMR3_INT_DECL(int) CSAMR3DoPendingAction(PVM pVM, PVMCPU pVCpu)
  * Analyse interrupt and trap gates
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iGate       Start gate
  * @param   cGates      Number of gates to check
  */
@@ -2873,7 +2873,7 @@ VMMR3_INT_DECL(int) CSAMR3CheckGates(PVM pVM, uint32_t iGate, uint32_t cGates)
  * Record previous call instruction addresses
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtrCall   Call address
  */
 VMMR3DECL(int) CSAMR3RecordCallAddress(PVM pVM, RTRCPTR GCPtrCall)
diff --git a/src/VBox/VMM/VMMR3/DBGF.cpp b/src/VBox/VMM/VMMR3/DBGF.cpp
index 908d56d..19e03ac 100644
--- a/src/VBox/VMM/VMMR3/DBGF.cpp
+++ b/src/VBox/VMM/VMMR3/DBGF.cpp
@@ -104,7 +104,7 @@ static DECLCALLBACK(int) dbgfR3Attach(PVM pVM);
  * Sets the VMM Debug Command variable.
  *
  * @returns Previous command.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   enmCmd  The command.
  */
 DECLINLINE(DBGFCMD) dbgfR3SetCmd(PVM pVM, DBGFCMD enmCmd)
@@ -132,7 +132,7 @@ DECLINLINE(DBGFCMD) dbgfR3SetCmd(PVM pVM, DBGFCMD enmCmd)
  * Initializes the DBGF.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) DBGFR3Init(PVM pVM)
 {
@@ -185,7 +185,7 @@ VMMR3_INT_DECL(int) DBGFR3Init(PVM pVM)
  * Terminates and cleans up resources allocated by the DBGF.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) DBGFR3Term(PVM pVM)
 {
@@ -205,7 +205,7 @@ VMMR3_INT_DECL(int) DBGFR3Term(PVM pVM)
 /**
  * Called when the VM is powered off to detach debuggers.
  *
- * @param   pVM     The VM handle.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(void) DBGFR3PowerOff(PVM pVM)
 {
@@ -304,7 +304,7 @@ VMMR3_INT_DECL(void) DBGFR3PowerOff(PVM pVM)
  * component. This function will be called at init and
  * whenever the VMM need to relocate it self inside the GC.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  */
 VMMR3_INT_DECL(void) DBGFR3Relocate(PVM pVM, RTGCINTPTR offDelta)
@@ -318,7 +318,7 @@ VMMR3_INT_DECL(void) DBGFR3Relocate(PVM pVM, RTGCINTPTR offDelta)
  * Waits a little while for a debuggger to attach.
  *
  * @returns True is a debugger have attached.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmEvent    Event.
  */
 bool dbgfR3WaitForAttach(PVM pVM, DBGFEVENTTYPE enmEvent)
@@ -375,7 +375,7 @@ bool dbgfR3WaitForAttach(PVM pVM, DBGFEVENTTYPE enmEvent)
  *
  * @returns VINF_SUCCESS normally.
  * @returns VERR_DBGF_RAISE_FATAL_ERROR to pretend a fatal error happened.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) DBGFR3VMMForcedAction(PVM pVM)
 {
@@ -406,7 +406,7 @@ VMMR3_INT_DECL(int) DBGFR3VMMForcedAction(PVM pVM)
  * Flag whether the event implies that we're stopped in the hypervisor code
  * and have to block certain operations.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmEvent    The event.
  */
 static void dbgfR3EventSetStoppedInHyperFlag(PVM pVM, DBGFEVENTTYPE enmEvent)
@@ -429,7 +429,7 @@ static void dbgfR3EventSetStoppedInHyperFlag(PVM pVM, DBGFEVENTTYPE enmEvent)
  * Try to determine the event context.
  *
  * @returns debug event context.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static DBGFEVENTCTX dbgfR3FigureEventCtx(PVM pVM)
 {
@@ -460,8 +460,8 @@ static DBGFEVENTCTX dbgfR3FigureEventCtx(PVM pVM)
  * It will set the 'stopped-in-hyper' flag, make sure someone is attached,
  * and perhaps process any high priority pending actions (none yet).
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   enmEvent    The event to be sent.
  */
 static int dbgfR3EventPrologue(PVM pVM, DBGFEVENTTYPE enmEvent)
@@ -501,7 +501,7 @@ static int dbgfR3EventPrologue(PVM pVM, DBGFEVENTTYPE enmEvent)
  * Sends the event in the event buffer.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 static int dbgfR3SendEvent(PVM pVM)
 {
@@ -518,8 +518,8 @@ static int dbgfR3SendEvent(PVM pVM)
 /**
  * Send a generic debugger event which takes no data.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   enmEvent    The event to send.
  * @internal
  */
@@ -541,8 +541,8 @@ VMMR3DECL(int) DBGFR3Event(PVM pVM, DBGFEVENTTYPE enmEvent)
 /**
  * Send a debugger event which takes the full source file location.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   enmEvent    The event to send.
  * @param   pszFile     Source file.
  * @param   uLine       Line number in source file.
@@ -564,8 +564,8 @@ VMMR3DECL(int) DBGFR3EventSrc(PVM pVM, DBGFEVENTTYPE enmEvent, const char *pszFi
 /**
  * Send a debugger event which takes the full source file location.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   enmEvent    The event to send.
  * @param   pszFile     Source file.
  * @param   uLine       Line number in source file.
@@ -607,8 +607,8 @@ VMMR3DECL(int) DBGFR3EventSrcV(PVM pVM, DBGFEVENTTYPE enmEvent, const char *pszF
 /**
  * Send a debugger event which takes the two assertion messages.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   enmEvent    The event to send.
  * @param   pszMsg1     First assertion message.
  * @param   pszMsg2     Second assertion message.
@@ -634,8 +634,8 @@ VMMR3_INT_DECL(int) DBGFR3EventAssertion(PVM pVM, DBGFEVENTTYPE enmEvent, const
  * Breakpoint was hit somewhere.
  * Figure out which breakpoint it is and notify the debugger.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   enmEvent    DBGFEVENT_BREAKPOINT_HYPER or DBGFEVENT_BREAKPOINT.
  */
 VMMR3_INT_DECL(int) DBGFR3EventBreakpoint(PVM pVM, DBGFEVENTTYPE enmEvent)
@@ -682,8 +682,8 @@ VMMR3_INT_DECL(int) DBGFR3EventBreakpoint(PVM pVM, DBGFEVENTTYPE enmEvent)
 /**
  * Waits for the debugger to respond.
  *
- * @returns VBox status. (clearify)
- * @param   pVM     Pointer to the VM.
+ * @returns VBox status code. (clearify)
+ * @param   pVM     The cross context VM structure.
  */
 static int dbgfR3VMMWait(PVM pVM)
 {
@@ -805,8 +805,8 @@ static int dbgfR3VMMWait(PVM pVM)
  * The caller is responsible for waiting or resuming execution based on the
  * value returned in the *pfResumeExecution indicator.
  *
- * @returns VBox status. (clearify!)
- * @param   pVM                 Pointer to the VM.
+ * @returns VBox status code. (clearify!)
+ * @param   pVM                 The cross context VM structure.
  * @param   enmCmd              The command in question.
  * @param   pCmdData            Pointer to the command data.
  * @param   pfResumeExecution   Where to store the resume execution / continue waiting indicator.
@@ -951,7 +951,7 @@ VMMR3DECL(int) DBGFR3Attach(PUVM pUVM)
  * EMT worker for DBGFR3Attach.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 static DECLCALLBACK(int) dbgfR3Attach(PVM pVM)
 {
@@ -1036,7 +1036,7 @@ VMMR3DECL(int) DBGFR3Detach(PUVM pUVM)
 /**
  * Wait for a debug event.
  *
- * @returns VBox status. Will not return VBOX_INTERRUPTED.
+ * @returns VBox status code. Will not return VBOX_INTERRUPTED.
  * @param   pUVM        The user mode VM handle.
  * @param   cMillies    Number of millis to wait.
  * @param   ppEvent     Where to store the event pointer.
@@ -1073,7 +1073,7 @@ VMMR3DECL(int) DBGFR3EventWait(PUVM pUVM, RTMSINTERVAL cMillies, PCDBGFEVENT *pp
  * After calling this the VM isn't actually halted till an DBGFEVENT_HALT_DONE
  * arrives. Until that time it's not possible to issue any new commands.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM        The user mode VM handle.
  */
 VMMR3DECL(int) DBGFR3Halt(PUVM pUVM)
@@ -1158,7 +1158,7 @@ VMMR3DECL(int) DBGFR3QueryWaitable(PUVM pUVM)
  *
  * There is no receipt event on this command.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM        The user mode VM handle.
  */
 VMMR3DECL(int) DBGFR3Resume(PUVM pUVM)
@@ -1189,8 +1189,8 @@ VMMR3DECL(int) DBGFR3Resume(PUVM pUVM)
  * A single step event is generated from this command.
  * The current implementation is not reliable, so don't rely on the event coming.
  *
- * @returns VBox status.
- * @param   pUVM        The user mode VM handle.
+ * @returns VBox status code.
+ * @param   pUVM    The user mode VM handle.
  * @param   idCpu   The ID of the CPU to single step on.
  */
 VMMR3DECL(int) DBGFR3Step(PUVM pUVM, VMCPUID idCpu)
@@ -1225,7 +1225,7 @@ VMMR3DECL(int) DBGFR3Step(PUVM pUVM, VMCPUID idCpu)
  *
  * @returns VINF_EM_DBG_STEP
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  *
  * @thread  VCpu EMT
  * @internal
@@ -1243,7 +1243,8 @@ VMMR3_INT_DECL(int) DBGFR3PrgStep(PVMCPU pVCpu)
  * Inject an NMI into a running VM (only VCPU 0!)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pUVM    The user mode VM structure.
+ * @param   idCpu   The ID of the CPU to inject the NMI on.
  */
 VMMR3DECL(int) DBGFR3InjectNMI(PUVM pUVM, VMCPUID idCpu)
 {
diff --git a/src/VBox/VMM/VMMR3/DBGFAddr.cpp b/src/VBox/VMM/VMMR3/DBGFAddr.cpp
index 14b81e3..c709e7c 100644
--- a/src/VBox/VMM/VMMR3/DBGFAddr.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFAddr.cpp
@@ -145,7 +145,6 @@ VMMR3DECL(int) DBGFR3AddrFromSelOff(PUVM pUVM, VMCPUID idCpu, PDBGFADDRESS pAddr
  *
  * @returns VBox status code.
  * @param   pUVM            The user mode VM handle.
- * @param   idCpu           The CPU ID.
  * @param   pAddress        Where to store the mixed address.
  * @param   pSelInfo        The selector info.
  * @param   off             The offset part.
@@ -234,7 +233,7 @@ VMMR3DECL(bool) DBGFR3AddrIsValid(PUVM pUVM, PCDBGFADDRESS pAddress)
  * Called on the EMT for the VCpu.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pAddress        The address.
  * @param   pGCPhys         Where to return the physical address.
  */
diff --git a/src/VBox/VMM/VMMR3/DBGFBp.cpp b/src/VBox/VMM/VMMR3/DBGFBp.cpp
index d560630..0112ac0 100644
--- a/src/VBox/VMM/VMMR3/DBGFBp.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFBp.cpp
@@ -52,7 +52,7 @@ RT_C_DECLS_END
  * Initialize the breakpoint stuff.
  *
  * @returns VINF_SUCCESS
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int dbgfR3BpInit(PVM pVM)
 {
@@ -94,7 +94,7 @@ int dbgfR3BpInit(PVM pVM)
  *
  * @returns Pointer to the allocated breakpoint.
  * @returns NULL if we're out of breakpoints.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   enmType The type to allocate.
  */
 static PDBGFBP dbgfR3BpAlloc(PVM pVM, DBGFBPTYPE enmType)
@@ -147,7 +147,7 @@ static PDBGFBP dbgfR3BpAlloc(PVM pVM, DBGFBPTYPE enmType)
  *
  * @returns Pointer to the allocated breakpoint.
  * @returns NULL if the breakpoint is invalid.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   iBp     The breakpoint id.
  */
 static PDBGFBP dbgfR3BpGet(PVM pVM, uint32_t iBp)
@@ -189,7 +189,7 @@ static PDBGFBP dbgfR3BpGet(PVM pVM, uint32_t iBp)
  *
  * @returns Pointer to the allocated breakpoint.
  * @returns NULL if the breakpoint is invalid.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   enmType The breakpoint type.
  * @param   GCPtr   The breakpoint address.
  */
@@ -235,7 +235,7 @@ static PDBGFBP dbgfR3BpGetByAddr(PVM pVM, DBGFBPTYPE enmType, RTGCUINTPTR GCPtr)
 /**
  * Frees a breakpoint.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pBp     The breakpoint to free.
  */
 static void dbgfR3BpFree(PVM pVM, PDBGFBP pBp)
@@ -561,7 +561,9 @@ VMMR3DECL(int) DBGFR3BpSetReg(PUVM pUVM, PCDBGFADDRESS pAddress, uint64_t iHitTr
 }
 
 
-/** @callback_method_impl{FNVMMEMTRENDEZVOUS}  */
+/**
+ * @callback_method_impl{FNVMMEMTRENDEZVOUS}
+ */
 DECLCALLBACK(VBOXSTRICTRC) dbgfR3BpRegRecalcOnCpu(PVM pVM, PVMCPU pVCpu, void *pvUser)
 {
     NOREF(pVM); NOREF(pvUser);
@@ -574,7 +576,7 @@ DECLCALLBACK(VBOXSTRICTRC) dbgfR3BpRegRecalcOnCpu(PVM pVM, PVMCPU pVCpu, void *p
  * This is used to implement both DBGFR3BpSetReg() and DBGFR3BpEnable().
  *
  * @returns VBox status code.
- * @param   pUVM        The user mode VM handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pBp         The breakpoint.
  */
 static int dbgfR3BpRegArm(PVM pVM, PDBGFBP pBp)
@@ -589,7 +591,7 @@ static int dbgfR3BpRegArm(PVM pVM, PDBGFBP pBp)
  * This is used to implement both DBGFR3BpClear() and DBGFR3BpDisable().
  *
  * @returns VBox status code.
- * @param   pUVM        The user mode VM handle.
+ * @param   pVM         The cross context VM structure.
  * @param   pBp         The breakpoint.
  */
 static int dbgfR3BpRegDisarm(PVM pVM, PDBGFBP pBp)
diff --git a/src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp b/src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp
index 99a2a3d..c5b85e1 100644
--- a/src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFCoreWrite.cpp
@@ -110,9 +110,9 @@ typedef DBGFCOREDATA *PDBGFCOREDATA;
 /**
  * ELF function to write 64-bit ELF header.
  *
- * @param hFile             The file to write to.
- * @param cProgHdrs         Number of program headers.
- * @param cSecHdrs          Number of section headers.
+ * @param   hFile           The file to write to.
+ * @param   cProgHdrs       Number of program headers.
+ * @param   cSecHdrs        Number of section headers.
  *
  * @return IPRT status code.
  */
@@ -148,13 +148,13 @@ static int Elf64WriteElfHdr(RTFILE hFile, uint16_t cProgHdrs, uint16_t cSecHdrs)
 /**
  * ELF function to write 64-bit program header.
  *
- * @param hFile             The file to write to.
- * @param Type              Type of program header (PT_*).
- * @param fFlags            Flags (access permissions, PF_*).
- * @param offFileData       File offset of contents.
- * @param cbFileData        Size of contents in the file.
- * @param cbMemData         Size of contents in memory.
- * @param Phys              Physical address, pass zero if not applicable.
+ * @param   hFile           The file to write to.
+ * @param   Type            Type of program header (PT_*).
+ * @param   fFlags          Flags (access permissions, PF_*).
+ * @param   offFileData     File offset of contents.
+ * @param   cbFileData      Size of contents in the file.
+ * @param   cbMemData       Size of contents in memory.
+ * @param   Phys            Physical address, pass zero if not applicable.
  *
  * @return IPRT status code.
  */
@@ -177,8 +177,8 @@ static int Elf64WriteProgHdr(RTFILE hFile, uint32_t Type, uint32_t fFlags, uint6
 /**
  * Returns the size of the NOTE section given the name and size of the data.
  *
- * @param pszName           Name of the note section.
- * @param cb                Size of the data portion of the note section.
+ * @param   pszName         Name of the note section.
+ * @param   cbData          Size of the data portion of the note section.
  *
  * @return The size of the NOTE section as rounded to the file alignment.
  */
@@ -198,17 +198,17 @@ static uint64_t Elf64NoteSectionSize(const char *pszName, uint64_t cbData)
 /**
  * Elf function to write 64-bit note header.
  *
- * @param hFile             The file to write to.
- * @param Type              Type of this section.
- * @param pszName           Name of this section.
- * @param pcv               Opaque pointer to the data, if NULL only computes size.
- * @param cbData            Size of the data.
+ * @param   hFile       The file to write to.
+ * @param   Type        Type of this section.
+ * @param   pszName     Name of this section.
+ * @param   pvData      Opaque pointer to the data, if NULL only computes size.
+ * @param   cbData      Size of the data.
  *
- * @return IPRT status code.
+ * @returns IPRT status code.
  */
-static int Elf64WriteNoteHdr(RTFILE hFile, uint16_t Type, const char *pszName, const void *pcvData, uint64_t cbData)
+static int Elf64WriteNoteHdr(RTFILE hFile, uint16_t Type, const char *pszName, const void *pvData, uint64_t cbData)
 {
-    AssertReturn(pcvData, VERR_INVALID_POINTER);
+    AssertReturn(pvData, VERR_INVALID_POINTER);
     AssertReturn(cbData > 0, VERR_NO_DATA);
 
     char szNoteName[g_cbNoteName];
@@ -270,7 +270,7 @@ static int Elf64WriteNoteHdr(RTFILE hFile, uint16_t Type, const char *pszName, c
                 /*
                  * Write note data.
                  */
-                rc = RTFileWrite(hFile, pcvData, cbData, NULL /* all */);
+                rc = RTFileWrite(hFile, pvData, cbData, NULL /* all */);
                 if (RT_SUCCESS(rc))
                 {
                     /*
@@ -300,7 +300,7 @@ static int Elf64WriteNoteHdr(RTFILE hFile, uint16_t Type, const char *pszName, c
  * offset. Instead we dump the memory in ranges. A memory range is a contiguous
  * memory area suitable for dumping to a core file.
  *
- * @param pVM               Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  *
  * @return Number of memory ranges
  */
@@ -313,7 +313,7 @@ static uint32_t dbgfR3GetRamRangeCount(PVM pVM)
 /**
  * Gets the guest-CPU context suitable for dumping into the core file.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        Pointer to the guest-CPU context.
  * @param   pDbgfCpu    Where to dump the guest-CPU data.
  */
@@ -389,7 +389,7 @@ static void dbgfR3GetCoreCpu(PVM pVM, PCPUMCTX pCtx, PDBGFCORECPU pDbgfCpu)
  * Worker function for dbgfR3CoreWrite() which does the writing.
  *
  * @returns VBox status code
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   hFile               The file to write to.  Caller closes this.
  */
 static int dbgfR3CoreWriteWorker(PVM pVM, RTFILE hFile)
@@ -591,8 +591,8 @@ static int dbgfR3CoreWriteWorker(PVM pVM, RTFILE hFile)
 /**
  * EMT Rendezvous worker function for DBGFR3CoreWrite().
  *
- * @param   pVM              Pointer to the VM.
- * @param   pVCpu            The handle of the calling VCPU.
+ * @param   pVM              The cross context VM structure.
+ * @param   pVCpu            The cross context virtual CPU structure of the calling EMT.
  * @param   pvData           Opaque data.
  *
  * @return VBox status code.
diff --git a/src/VBox/VMM/VMMR3/DBGFCpu.cpp b/src/VBox/VMM/VMMR3/DBGFCpu.cpp
index 2859582..5761e93 100644
--- a/src/VBox/VMM/VMMR3/DBGFCpu.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFCpu.cpp
@@ -35,7 +35,7 @@
  * Wrapper around CPUMGetGuestMode.
  *
  * @returns VINF_SUCCESS.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idCpu       The current CPU ID.
  * @param   penmMode    Where to return the mode.
  */
@@ -73,7 +73,7 @@ VMMR3DECL(CPUMMODE) DBGFR3CpuGetMode(PUVM pUVM, VMCPUID idCpu)
  * Wrapper around CPUMIsGuestIn64BitCode.
  *
  * @returns VINF_SUCCESS.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idCpu           The current CPU ID.
  * @param   pfIn64BitCode   Where to return the result.
  */
diff --git a/src/VBox/VMM/VMMR3/DBGFDisas.cpp b/src/VBox/VMM/VMMR3/DBGFDisas.cpp
index 2c945bc..6e15d2d 100644
--- a/src/VBox/VMM/VMMR3/DBGFDisas.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFDisas.cpp
@@ -55,9 +55,9 @@ typedef struct
 {
     /** The core structure. */
     DISCPUSTATE     Cpu;
-    /** Pointer to the VM. */
+    /** The cross context VM structure. */
     PVM             pVM;
-    /** Pointer to the VMCPU. */
+    /** The cross context virtual CPU structure. */
     PVMCPU          pVCpu;
     /** The address space for resolving symbol. */
     RTDBGAS         hDbgAs;
@@ -99,8 +99,8 @@ static FNDISREADBYTES dbgfR3DisasInstrRead;
  * Calls the disassembler with the proper reader functions and such for disa
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pSelInfo    The selector info.
  * @param   enmMode     The guest paging mode.
  * @param   fFlags      DBGF_DISAS_FLAGS_XXX.
@@ -323,12 +323,12 @@ static DECLCALLBACK(int) dbgfR3DisasInstrRead(PDISCPUSTATE pDis, uint8_t offInst
 
 
 /**
- * @copydoc FNDISGETSYMBOL
+ * @callback_method_impl{FNDISGETSYMBOL}
  */
-static DECLCALLBACK(int) dbgfR3DisasGetSymbol(PCDISCPUSTATE pCpu, uint32_t u32Sel, RTUINTPTR uAddress,
+static DECLCALLBACK(int) dbgfR3DisasGetSymbol(PCDISCPUSTATE pDis, uint32_t u32Sel, RTUINTPTR uAddress,
                                               char *pszBuf, size_t cchBuf, RTINTPTR *poff, void *pvUser)
 {
-    PDBGFDISASSTATE pState   = (PDBGFDISASSTATE)pCpu;
+    PDBGFDISASSTATE pState   = (PDBGFDISASSTATE)pDis;
     PCDBGFSELINFO   pSelInfo = (PCDBGFSELINFO)pvUser;
 
     /*
@@ -401,8 +401,8 @@ static DECLCALLBACK(int) dbgfR3DisasGetSymbol(PCDISCPUSTATE pCpu, uint32_t u32Se
  * address, internal worker executing on the EMT of the specified virtual CPU.
  *
  * @returns VBox status code.
- * @param       pVM             Pointer to the VM.
- * @param       pVCpu           Pointer to the VMCPU.
+ * @param       pVM             The cross context VM structure.
+ * @param       pVCpu           The cross context virtual CPU structure.
  * @param       Sel             The code selector. This used to determine the 32/16 bit ness and
  *                              calculation of the actual instruction address.
  * @param       pGCPtr          Pointer to the variable holding the code address
@@ -726,7 +726,7 @@ VMMR3DECL(int) DBGFR3DisasInstrEx(PUVM pUVM, VMCPUID idCpu, RTSEL Sel, RTGCPTR G
  * All registers and data will be displayed. Addresses will be attempted resolved to symbols.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pszOutput       Output buffer.  This will always be properly
  *                          terminated if @a cbOutput is greater than zero.
  * @param   cbOutput        Size of the output buffer.
@@ -751,7 +751,7 @@ VMMR3_INT_DECL(int) DBGFR3DisasInstrCurrent(PVMCPU pVCpu, char *pszOutput, uint3
  * All registers and data will be displayed. Addresses will be attempted resolved to symbols.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pszPrefix       Short prefix string to the disassembly string. (optional)
  * @thread  EMT(pVCpu)
  */
@@ -781,11 +781,14 @@ VMMR3DECL(int) DBGFR3DisasInstrCurrentLogInternal(PVMCPU pVCpu, const char *pszP
  * Addresses will be attempted resolved to symbols.
  *
  * @returns VBox status code.
- * @param   pVCpu           Pointer to the VMCPU, defaults to CPU 0 if NULL.
- * @param   Sel             The code selector. This used to determine the 32/16 bit-ness and
- *                          calculation of the actual instruction address.
- * @param   GCPtr           The code address relative to the base of Sel.
- * @param   pszPrefix       Short prefix string to the disassembly string. (optional)
+ * @param   pVCpu       The cross context virtual CPU structure of the calling
+ *                      EMT.
+ * @param   Sel         The code selector. This used to determine the 32/16
+ *                      bit-ness and calculation of the actual instruction
+ *                      address.
+ * @param   GCPtr       The code address relative to the base of Sel.
+ * @param   pszPrefix   Short prefix string to the disassembly string.
+ *                      (optional)
  * @thread  EMT(pVCpu)
  */
 VMMR3DECL(int) DBGFR3DisasInstrLogInternal(PVMCPU pVCpu, RTSEL Sel, RTGCPTR GCPtr, const char *pszPrefix)
diff --git a/src/VBox/VMM/VMMR3/DBGFInfo.cpp b/src/VBox/VMM/VMMR3/DBGFInfo.cpp
index 2ebba63..144c6a8 100644
--- a/src/VBox/VMM/VMMR3/DBGFInfo.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFInfo.cpp
@@ -283,7 +283,7 @@ static int dbgfR3InfoRegister(PUVM pUVM, const char *pszName, const char *pszDes
  * Register a info handler owned by a device.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pszName     The identifier of the info.
  * @param   pszDesc     The description of the info and any arguments the handler may take.
  * @param   pfnHandler  The handler function to be called to display the info.
@@ -322,7 +322,7 @@ VMMR3_INT_DECL(int) DBGFR3InfoRegisterDevice(PVM pVM, const char *pszName, const
  * Register a info handler owned by a driver.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pszName     The identifier of the info.
  * @param   pszDesc     The description of the info and any arguments the handler may take.
  * @param   pfnHandler  The handler function to be called to display the info.
@@ -360,7 +360,7 @@ VMMR3_INT_DECL(int) DBGFR3InfoRegisterDriver(PVM pVM, const char *pszName, const
  * Register a info handler owned by an internal component.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pszName     The identifier of the info.
  * @param   pszDesc     The description of the info and any arguments the handler may take.
  * @param   pfnHandler  The handler function to be called to display the info.
@@ -375,7 +375,7 @@ VMMR3_INT_DECL(int) DBGFR3InfoRegisterInternal(PVM pVM, const char *pszName, con
  * Register a info handler owned by an internal component.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pszName     The identifier of the info.
  * @param   pszDesc     The description of the info and any arguments the handler may take.
  * @param   pfnHandler  The handler function to be called to display the info.
@@ -451,7 +451,7 @@ VMMR3DECL(int) DBGFR3InfoRegisterExternal(PUVM pUVM, const char *pszName, const
  * Deregister one(/all) info handler(s) owned by a device.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDevIns     Device instance.
  * @param   pszName     The identifier of the info. If NULL all owned by the device.
  */
@@ -523,7 +523,7 @@ VMMR3_INT_DECL(int) DBGFR3InfoDeregisterDevice(PVM pVM, PPDMDEVINS pDevIns, cons
  * Deregister one(/all) info handler(s) owned by a driver.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDrvIns     Driver instance.
  * @param   pszName     The identifier of the info. If NULL all owned by the driver.
  */
@@ -641,7 +641,7 @@ static int dbgfR3InfoDeregister(PUVM pUVM, const char *pszName, DBGFINFOTYPE enm
  * Deregister a info handler owned by an internal component.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pszName     The identifier of the info. If NULL all owned by the device.
  */
 VMMR3_INT_DECL(int) DBGFR3InfoDeregisterInternal(PVM pVM, const char *pszName)
@@ -830,8 +830,8 @@ VMMR3DECL(int) DBGFR3InfoStdErr(PUVM pUVM, const char *pszName, const char *pszA
  *
  * This is intended used by the fatal error dump only.
  *
- * @returns
- * @param   pVM             Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pszIncludePat   Simple string pattern of info items to include.
  * @param   pszExcludePat   Simple string pattern of info items to exclude.
  * @param   pszSepFmt       Item separator format string.  The item name will be
@@ -839,7 +839,7 @@ VMMR3DECL(int) DBGFR3InfoStdErr(PUVM pUVM, const char *pszName, const char *pszA
  * @param   pHlp            The output helper functions.  If NULL the logger
  *                          will be used.
  *
- * @threads EMT
+ * @thread  EMT
  */
 VMMR3_INT_DECL(int) DBGFR3InfoMulti(PVM pVM, const char *pszIncludePat, const char *pszExcludePat, const char *pszSepFmt,
                                     PCDBGFINFOHLP pHlp)
@@ -968,7 +968,7 @@ VMMR3DECL(int) DBGFR3InfoEnum(PUVM pUVM, PFNDBGFINFOENUM pfnCallback, void *pvUs
 /**
  * Info handler, internal version.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        Callback functions for doing output.
  * @param   pszArgs     Argument string. Optional and specific to the handler.
  */
diff --git a/src/VBox/VMM/VMMR3/DBGFMem.cpp b/src/VBox/VMM/VMMR3/DBGFMem.cpp
index 6177385..403767c 100644
--- a/src/VBox/VMM/VMMR3/DBGFMem.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFMem.cpp
@@ -140,6 +140,7 @@ VMMR3DECL(int) DBGFR3MemScan(PUVM pUVM, VMCPUID idCpu, PCDBGFADDRESS pAddress, R
  *
  * @returns VBox status code.
  * @param   pUVM        The user mode VM handle.
+ * @param   idCpu       The ID of the CPU context to read memory from.
  * @param   pAddress    Where to start reading.
  * @param   pvBuf       Where to store the data we've read.
  * @param   cbRead      The number of bytes to read.
@@ -369,7 +370,7 @@ static DECLCALLBACK(int) dbgfR3MemWrite(PUVM pUVM, VMCPUID idCpu, PCDBGFADDRESS
  * @param   idCpu       The ID of the target CPU context (for the address).
  * @param   pAddress    Where to start writing.
  * @param   pvBuf       The data to write.
- * @param   cbRead      The number of bytes to write.
+ * @param   cbWrite     The number of bytes to write.
  */
 VMMR3DECL(int) DBGFR3MemWrite(PUVM pUVM, VMCPUID idCpu, PCDBGFADDRESS pAddress, void const *pvBuf, size_t cbWrite)
 {
diff --git a/src/VBox/VMM/VMMR3/DBGFR3PlugIn.cpp b/src/VBox/VMM/VMMR3/DBGFR3PlugIn.cpp
index 98bd4cd..6c185d0 100644
--- a/src/VBox/VMM/VMMR3/DBGFR3PlugIn.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFR3PlugIn.cpp
@@ -595,7 +595,7 @@ VMMR3DECL(void) DBGFR3PlugInUnloadAll(PUVM pUVM)
 
 
 /**
- * @interface_method_impl{FNDBGFHANDLERINT, The 'plugins' info item.}
+ * @callback_method_impl{FNDBGFHANDLERINT, The 'plugins' info item.}
  */
 static DECLCALLBACK(void) dbgfR3PlugInInfoList(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszArgs)
 {
diff --git a/src/VBox/VMM/VMMR3/DBGFR3Trace.cpp b/src/VBox/VMM/VMMR3/DBGFR3Trace.cpp
index 58b5da6..dc911d4 100644
--- a/src/VBox/VMM/VMMR3/DBGFR3Trace.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFR3Trace.cpp
@@ -69,7 +69,9 @@ static const struct
  * Initializes the tracing.
  *
  * @returns VBox status code
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
+ * @param   cbEntry     The trace entry size.
+ * @param   cEntries    The number of entries.
  */
 static int dbgfR3TraceEnable(PVM pVM, uint32_t cbEntry, uint32_t cEntries)
 {
@@ -133,7 +135,7 @@ static int dbgfR3TraceEnable(PVM pVM, uint32_t cbEntry, uint32_t cEntries)
  * Initializes the tracing.
  *
  * @returns VBox status code
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 int dbgfR3TraceInit(PVM pVM)
 {
@@ -198,7 +200,7 @@ int dbgfR3TraceInit(PVM pVM)
 /**
  * Terminates the tracing.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 void dbgfR3TraceTerm(PVM pVM)
 {
@@ -210,7 +212,7 @@ void dbgfR3TraceTerm(PVM pVM)
 /**
  * Relocates the trace buffer handle in RC.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 void dbgfR3TraceRelocate(PVM pVM)
 {
@@ -230,7 +232,7 @@ void dbgfR3TraceRelocate(PVM pVM)
  * @retval  VERR_INVALID_VM_HANDLE
  * @retval  VERR_INVALID_POINTER
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pszConfig   The configuration change specification.
  *
  *                      Trace point group names, optionally prefixed by a '-' to
@@ -357,7 +359,7 @@ VMMDECL(int) DBGFR3TraceConfig(PVM pVM, const char *pszConfig)
  * @retval  VERR_BUFFER_OVERFLOW if the buffer is too small. Buffer will be
  *          empty.
 
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pszConfig           Pointer to the output buffer.
  * @param   cbConfig            The size of the output buffer.
  */
diff --git a/src/VBox/VMM/VMMR3/DBGFReg.cpp b/src/VBox/VMM/VMMR3/DBGFReg.cpp
index 2f6bfad..14f7284 100644
--- a/src/VBox/VMM/VMMR3/DBGFReg.cpp
+++ b/src/VBox/VMM/VMMR3/DBGFReg.cpp
@@ -499,8 +499,8 @@ static int dbgfR3RegRegisterCommon(PUVM pUVM, PCDBGFREGDESC paRegisters, DBGFREG
  * Registers a set of registers for a CPU.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   paRegisters     The register descriptors.
  * @param   fGuestRegs      Set if it's the guest registers, clear if
  *                          hypervisor registers.
@@ -524,7 +524,7 @@ VMMR3_INT_DECL(int) DBGFR3RegRegisterCpu(PVM pVM, PVMCPU pVCpu, PCDBGFREGDESC pa
  * Registers a set of registers for a device.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   paRegisters     The register descriptors.
  * @param   pDevIns         The device instance. This will be the callback user
  *                          argument.
@@ -998,7 +998,7 @@ VMMR3DECL(int) DBGFR3RegCpuQueryU64(PUVM pUVM, VMCPUID idCpu, DBGFREG enmReg, ui
  * @retval  VINF_SUCCESS
  * @retval  VERR_DBGF_REGISTER_NOT_FOUND
  *
- * @param   pVCpu               The current CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   pReg                The where to store the register value and
  *                              size.
  * @param   idMsr               The MSR to get.
@@ -1909,7 +1909,7 @@ VMMR3DECL(int) DBGFR3RegNmQueryAll(PUVM pUVM, PDBGFREGENTRYNM paRegs, size_t cRe
  * @param   pLookupRec          The register lookup record. Maybe be modified,
  *                              so please pass a copy of the user's one.
  * @param   pValue              The new register value.
- * @param   enmType             The register value type.
+ * @param   pMask               Indicate which bits to modify.
  */
 static DECLCALLBACK(int) dbgfR3RegNmSetWorkerOnCpu(PUVM pUVM, PDBGFREGLOOKUP pLookupRec,
                                                    PCDBGFREGVAL pValue, PCDBGFREGVAL pMask)
@@ -2122,34 +2122,34 @@ VMMR3DECL(int) DBGFR3RegNmSet(PUVM pUVM, VMCPUID idDefCpu, const char *pszReg, P
 
 
 /**
- * Internal worker for DBGFR3RegFormatValue, cbTmp is sufficent.
+ * Internal worker for DBGFR3RegFormatValue, cbBuf is sufficent.
  *
- * @copydoc DBGFR3RegFormatValue
+ * @copydoc DBGFR3RegFormatValueEx
  */
-DECLINLINE(ssize_t) dbgfR3RegFormatValueInt(char *pszTmp, size_t cbTmp, PCDBGFREGVAL pValue, DBGFREGVALTYPE enmType,
+DECLINLINE(ssize_t) dbgfR3RegFormatValueInt(char *pszBuf, size_t cbBuf, PCDBGFREGVAL pValue, DBGFREGVALTYPE enmType,
                                             unsigned uBase, signed int cchWidth, signed int cchPrecision, uint32_t fFlags)
 {
     switch (enmType)
     {
         case DBGFREGVALTYPE_U8:
-            return RTStrFormatU8(pszTmp, cbTmp, pValue->u8, uBase, cchWidth, cchPrecision, fFlags);
+            return RTStrFormatU8(pszBuf, cbBuf, pValue->u8, uBase, cchWidth, cchPrecision, fFlags);
         case DBGFREGVALTYPE_U16:
-            return RTStrFormatU16(pszTmp, cbTmp, pValue->u16, uBase, cchWidth, cchPrecision, fFlags);
+            return RTStrFormatU16(pszBuf, cbBuf, pValue->u16, uBase, cchWidth, cchPrecision, fFlags);
         case DBGFREGVALTYPE_U32:
-            return RTStrFormatU32(pszTmp, cbTmp, pValue->u32, uBase, cchWidth, cchPrecision, fFlags);
+            return RTStrFormatU32(pszBuf, cbBuf, pValue->u32, uBase, cchWidth, cchPrecision, fFlags);
         case DBGFREGVALTYPE_U64:
-            return RTStrFormatU64(pszTmp, cbTmp, pValue->u64, uBase, cchWidth, cchPrecision, fFlags);
+            return RTStrFormatU64(pszBuf, cbBuf, pValue->u64, uBase, cchWidth, cchPrecision, fFlags);
         case DBGFREGVALTYPE_U128:
-            return RTStrFormatU128(pszTmp, cbTmp, &pValue->u128, uBase, cchWidth, cchPrecision, fFlags);
+            return RTStrFormatU128(pszBuf, cbBuf, &pValue->u128, uBase, cchWidth, cchPrecision, fFlags);
         case DBGFREGVALTYPE_R80:
-            return RTStrFormatR80u2(pszTmp, cbTmp, &pValue->r80Ex, cchWidth, cchPrecision, fFlags);
+            return RTStrFormatR80u2(pszBuf, cbBuf, &pValue->r80Ex, cchWidth, cchPrecision, fFlags);
         case DBGFREGVALTYPE_DTR:
         {
-            ssize_t cch = RTStrFormatU64(pszTmp, cbTmp, pValue->dtr.u64Base,
+            ssize_t cch = RTStrFormatU64(pszBuf, cbBuf, pValue->dtr.u64Base,
                                          16, 2+16, 0, RTSTR_F_SPECIAL | RTSTR_F_ZEROPAD);
             AssertReturn(cch > 0, VERR_DBGF_REG_IPE_1);
-            pszTmp[cch++] = ':';
-            cch += RTStrFormatU64(&pszTmp[cch], cbTmp - cch, pValue->dtr.u32Limit,
+            pszBuf[cch++] = ':';
+            cch += RTStrFormatU64(&pszBuf[cch], cbBuf - cch, pValue->dtr.u32Limit,
                                   16, 4, 0, RTSTR_F_ZEROPAD | RTSTR_F_32BIT);
             return cch;
         }
@@ -2161,7 +2161,7 @@ DECLINLINE(ssize_t) dbgfR3RegFormatValueInt(char *pszTmp, size_t cbTmp, PCDBGFRE
         /* no default, want gcc warnings */
     }
 
-    RTStrPrintf(pszTmp, cbTmp, "!enmType=%d!", enmType);
+    RTStrPrintf(pszBuf, cbBuf, "!enmType=%d!", enmType);
     return VERR_DBGF_REG_IPE_2;
 }
 
diff --git a/src/VBox/VMM/VMMR3/EM.cpp b/src/VBox/VMM/VMMR3/EM.cpp
index cdee17c..b0e61be 100644
--- a/src/VBox/VMM/VMMR3/EM.cpp
+++ b/src/VBox/VMM/VMMR3/EM.cpp
@@ -97,7 +97,7 @@ int emR3HighPriorityPostForcedActions(PVM pVM, PVMCPU pVCpu, int rc);
  * Initializes the EM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) EMR3Init(PVM pVM)
 {
@@ -451,7 +451,7 @@ VMMR3_INT_DECL(int) EMR3Init(PVM pVM)
  * component. This function will be called at init and
  * whenever the VMM need to relocate it self inside the GC.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(void) EMR3Relocate(PVM pVM)
 {
@@ -470,7 +470,7 @@ VMMR3_INT_DECL(void) EMR3Relocate(PVM pVM)
  *
  * Called by EMR3Reset and hot plugging.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 VMMR3_INT_DECL(void) EMR3ResetCpu(PVMCPU pVCpu)
 {
@@ -490,7 +490,7 @@ VMMR3_INT_DECL(void) EMR3ResetCpu(PVMCPU pVCpu)
 /**
  * Reset notification.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(void) EMR3Reset(PVM pVM)
 {
@@ -507,7 +507,7 @@ VMMR3_INT_DECL(void) EMR3Reset(PVM pVM)
  * the VM it self is at this point powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) EMR3Term(PVM pVM)
 {
@@ -524,7 +524,7 @@ VMMR3_INT_DECL(int) EMR3Term(PVM pVM)
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 static DECLCALLBACK(int) emR3Save(PVM pVM, PSSMHANDLE pSSM)
@@ -563,7 +563,7 @@ static DECLCALLBACK(int) emR3Save(PVM pVM, PSSMHANDLE pSSM)
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion        Data layout version.
  * @param   uPass           The data pass.
@@ -744,7 +744,7 @@ VMMR3DECL(int) EMR3QueryExecutionPolicy(PUVM pUVM, EMEXECPOLICY enmPolicy, bool
  * Safely terminate the VM with full state report and stuff. This function
  * will naturally never return.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   rc          VBox status code.
  */
 VMMR3DECL(void) EMR3FatalError(PVMCPU pVCpu, int rc)
@@ -792,8 +792,8 @@ static const char *emR3GetStateName(EMSTATE enmState)
  * Debug loop.
  *
  * @returns VBox status code for EM.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   rc      Current EM VBox status code.
  */
 static VBOXSTRICTRC emR3Debug(PVM pVM, PVMCPU pVCpu, VBOXSTRICTRC rc)
@@ -988,8 +988,8 @@ static VBOXSTRICTRC emR3Debug(PVM pVM, PVMCPU pVCpu, VBOXSTRICTRC rc)
  * @returns VBox status code. The most important ones are: VINF_EM_STEP_EVENT,
  *          VINF_EM_RESCHEDULE, VINF_EM_SUSPEND, VINF_EM_RESET and VINF_EM_TERMINATE.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int emR3RemStep(PVM pVM, PVMCPU pVCpu)
 {
@@ -1023,8 +1023,8 @@ static int emR3RemStep(PVM pVM, PVMCPU pVCpu)
  * critical section.
  *
  * @returns false - new fInREMState value.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(bool) emR3RemExecuteSyncBack(PVM pVM, PVMCPU pVCpu)
 {
@@ -1048,8 +1048,8 @@ DECLINLINE(bool) emR3RemExecuteSyncBack(PVM pVM, PVMCPU pVCpu)
  * @returns VBox status code. The most important ones are: VINF_EM_RESCHEDULE,
  *          VINF_EM_SUSPEND, VINF_EM_RESET and VINF_EM_TERMINATE.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pfFFDone    Where to store an indicator telling whether or not
  *                      FFs were done before returning.
  *
@@ -1258,8 +1258,8 @@ int emR3SingleStepExecRem(PVM pVM, PVMCPU pVCpu, uint32_t cIterations)
  * is too much of it or if IEM doesn't implement something.
  *
  * @returns Strict VBox status code from IEMExecLots.
- * @param   pVM         The cross context VM structure.
- * @param   pVCpu       The cross context CPU structure for the calling EMT.
+ * @param   pVM        The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pfFFDone    Force flags done indicator.
  *
  * @thread  EMT(pVCpu)
@@ -1319,8 +1319,8 @@ static VBOXSTRICTRC emR3ExecuteIemThenRem(PVM pVM, PVMCPU pVCpu, bool *pfFFDone)
  * Decides whether to execute RAW, HWACC or REM.
  *
  * @returns new EM state
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   pCtx    Pointer to the guest CPU context.
  */
 EMSTATE emR3Reschedule(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -1540,8 +1540,8 @@ EMSTATE emR3Reschedule(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  *
  * @returns rc or a fatal status code.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   rc          The current rc.
  */
 int emR3HighPriorityPostForcedActions(PVM pVM, PVMCPU pVCpu, int rc)
@@ -1609,8 +1609,8 @@ int emR3HighPriorityPostForcedActions(PVM pVM, PVMCPU pVCpu, int rc)
  *          The most important ones are: VINF_EM_RESCHEDULE,
  *          VINF_EM_SUSPEND, VINF_EM_RESET and VINF_EM_TERMINATE.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   rc          The current rc.
  *
  */
@@ -2060,8 +2060,8 @@ int emR3ForcedActions(PVM pVM, PVMCPU pVCpu, int rc)
  * Check if the preset execution time cap restricts guest execution scheduling.
  *
  * @returns true if allowed, false otherwise
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 bool emR3IsExecutionAllowed(PVM pVM, PVMCPU pVCpu)
 {
@@ -2102,8 +2102,8 @@ bool emR3IsExecutionAllowed(PVM pVM, PVMCPU pVCpu)
  * and signaling of the wait object.
  *
  * @returns VBox status code, informational status codes may indicate failure.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3_INT_DECL(int) EMR3ExecuteVM(PVM pVM, PVMCPU pVCpu)
 {
@@ -2676,7 +2676,7 @@ VMMR3_INT_DECL(int) EMR3ExecuteVM(PVM pVM, PVMCPU pVCpu)
 /**
  * Notify EM of a state change (used by FTM)
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR3_INT_DECL(int) EMR3NotifySuspend(PVM pVM)
 {
@@ -2691,7 +2691,7 @@ VMMR3_INT_DECL(int) EMR3NotifySuspend(PVM pVM)
 /**
  * Notify EM of a state change (used by FTM)
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR3_INT_DECL(int) EMR3NotifyResume(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/EMHM.cpp b/src/VBox/VMM/VMMR3/EMHM.cpp
index 54a8d68..436da99 100644
--- a/src/VBox/VMM/VMMR3/EMHM.cpp
+++ b/src/VBox/VMM/VMMR3/EMHM.cpp
@@ -81,10 +81,9 @@ static int      emR3HmForcedActions(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx);
  * @retval  VERR_EM_CANNOT_EXEC_GUEST if we cannot execute guest instructions in
  *          HM right now.
  *
- * @param   pVM                 Pointer to the cross context VM structure.
- * @param   pVCpu               Pointer to the cross context CPU structure for
- *                              the calling EMT.
- * @param   fFlags              Combinations of EM_ONE_INS_FLAGS_XXX.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure for the calling EMT.
+ * @param   fFlags  Combinations of EM_ONE_INS_FLAGS_XXX.
  * @thread  EMT.
  */
 VMMR3_INT_DECL(VBOXSTRICTRC) EMR3HmSingleInstruction(PVM pVM, PVMCPU pVCpu, uint32_t fFlags)
@@ -159,13 +158,13 @@ VMMR3_INT_DECL(VBOXSTRICTRC) EMR3HmSingleInstruction(PVM pVM, PVMCPU pVCpu, uint
  *
  * @returns VBox status code suitable for EM.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   rcRC        Return code from RC.
  * @param   pszPrefix   Disassembly prefix. If not NULL we'll disassemble the
  *                      instruction and prefix the log output with this text.
  */
-#ifdef LOG_ENABLED
+#if defined(LOG_ENABLED) || defined(DOXYGEN_RUNNING)
 static int emR3HmExecuteInstructionWorker(PVM pVM, PVMCPU pVCpu, int rcRC, const char *pszPrefix)
 #else
 static int emR3HmExecuteInstructionWorker(PVM pVM, PVMCPU pVCpu, int rcRC)
@@ -229,8 +228,8 @@ static int emR3HmExecuteInstructionWorker(PVM pVM, PVMCPU pVCpu, int rcRC)
  * This is just a wrapper for discarding pszPrefix in non-logging builds.
  *
  * @returns VBox status code suitable for EM.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pszPrefix   Disassembly prefix. If not NULL we'll disassemble the
  *                      instruction and prefix the log output with this text.
  * @param   rcGC        GC return code
@@ -248,8 +247,8 @@ DECLINLINE(int) emR3HmExecuteInstruction(PVM pVM, PVMCPU pVCpu, const char *pszP
  * Executes one (or perhaps a few more) IO instruction(s).
  *
  * @returns VBox status code suitable for EM.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int emR3HmExecuteIOInstruction(PVM pVM, PVMCPU pVCpu)
 {
@@ -288,8 +287,8 @@ static int emR3HmExecuteIOInstruction(PVM pVM, PVMCPU pVCpu)
  *
  * @returns VBox status code. May return VINF_EM_NO_MEMORY but none of the other
  *          EM statuses.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest CPU context.
  */
 static int emR3HmForcedActions(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -363,8 +362,8 @@ static int emR3HmForcedActions(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * @returns VBox status code. The most important ones are: VINF_EM_RESCHEDULE, VINF_EM_RESCHEDULE_RAW,
  *          VINF_EM_RESCHEDULE_REM, VINF_EM_SUSPEND, VINF_EM_RESET and VINF_EM_TERMINATE.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pfFFDone    Where to store an indicator telling whether or not
  *                      FFs were done before returning.
  */
diff --git a/src/VBox/VMM/VMMR3/EMRaw.cpp b/src/VBox/VMM/VMMR3/EMRaw.cpp
index e1c1e44..7f9630d 100644
--- a/src/VBox/VMM/VMMR3/EMRaw.cpp
+++ b/src/VBox/VMM/VMMR3/EMRaw.cpp
@@ -76,8 +76,8 @@ static int      emR3RawRingSwitch(PVM pVM, PVMCPU pVCpu);
 #ifdef VBOX_WITH_STATISTICS
 /**
  * Just a braindead function to keep track of cli addresses.
- * @param   pVM         Pointer to the VM.
- * @param   pVMCPU      Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtrInstr  The EIP of the cli instruction.
  */
 static void emR3RecordCli(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtrInstr)
@@ -115,8 +115,8 @@ static void emR3RecordCli(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtrInstr)
  * potentially out of sync.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 int emR3RawResumeHyper(PVM pVM, PVMCPU pVCpu)
 {
@@ -149,8 +149,8 @@ int emR3RawResumeHyper(PVM pVM, PVMCPU pVCpu)
  * Steps rawmode.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 int emR3RawStep(PVM pVM, PVMCPU pVCpu)
 {
@@ -258,13 +258,13 @@ int emR3SingleStepExecRaw(PVM pVM, PVMCPU pVCpu, uint32_t cIterations)
  *
  * @returns VBox status code suitable for EM.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   rcGC        GC return code
  * @param   pszPrefix   Disassembly prefix. If not NULL we'll disassemble the
  *                      instruction and prefix the log output with this text.
  */
-#ifdef LOG_ENABLED
+#if defined(LOG_ENABLED) || defined(DOXYGEN_RUNNING)
 static int emR3RawExecuteInstructionWorker(PVM pVM, PVMCPU pVCpu, int rcGC, const char *pszPrefix)
 #else
 static int emR3RawExecuteInstructionWorker(PVM pVM, PVMCPU pVCpu, int rcGC)
@@ -412,8 +412,8 @@ static int emR3RawExecuteInstructionWorker(PVM pVM, PVMCPU pVCpu, int rcGC)
  * This is just a wrapper for discarding pszPrefix in non-logging builds.
  *
  * @returns VBox status code suitable for EM.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pszPrefix   Disassembly prefix. If not NULL we'll disassemble the
  *                      instruction and prefix the log output with this text.
  * @param   rcGC        GC return code
@@ -431,8 +431,8 @@ DECLINLINE(int) emR3RawExecuteInstruction(PVM pVM, PVMCPU pVCpu, const char *psz
  * Executes one (or perhaps a few more) IO instruction(s).
  *
  * @returns VBox status code suitable for EM.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int emR3RawExecuteIOInstruction(PVM pVM, PVMCPU pVCpu)
 {
@@ -451,8 +451,8 @@ static int emR3RawExecuteIOInstruction(PVM pVM, PVMCPU pVCpu)
  * Handle a guest context trap.
  *
  * @returns VBox status code suitable for EM.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 static int emR3RawGuestTrap(PVM pVM, PVMCPU pVCpu)
 {
@@ -612,8 +612,8 @@ static int emR3RawGuestTrap(PVM pVM, PVMCPU pVCpu)
  * Need to do statistics and to install patches. The result is going to REM.
  *
  * @returns VBox status code suitable for EM.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 static int emR3RawRingSwitch(PVM pVM, PVMCPU pVCpu)
 {
@@ -671,8 +671,8 @@ static int emR3RawRingSwitch(PVM pVM, PVMCPU pVCpu)
  * Handle a trap (\#PF or \#GP) in patch code
  *
  * @returns VBox status code suitable for EM.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   pCtx    Pointer to the guest CPU context.
  * @param   gcret   GC return code.
  */
@@ -855,8 +855,8 @@ static int emR3RawPatchTrap(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, int gcret)
  * Handle a privileged instruction.
  *
  * @returns VBox status code suitable for EM.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 static int emR3RawPrivileged(PVM pVM, PVMCPU pVCpu)
 {
@@ -1107,8 +1107,8 @@ static int emR3RawPrivileged(PVM pVM, PVMCPU pVCpu)
  *
  * @returns Updated rc.
  *
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   pCtx    Pointer to the guest CPU context.
  * @param   rc      The result code.
  */
@@ -1138,8 +1138,8 @@ int emR3RawUpdateForceFlag(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, int rc)
  *
  * @returns VBox status code. May return VINF_EM_NO_MEMORY but none of the other
  *          EM statuses.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3_INT_DECL(int) EMR3CheckRawForcedActions(PVM pVM, PVMCPU pVCpu)
 {
@@ -1156,8 +1156,8 @@ VMMR3_INT_DECL(int) EMR3CheckRawForcedActions(PVM pVM, PVMCPU pVCpu)
  *
  * @returns VBox status code. May return VINF_EM_NO_MEMORY but none of the other
  *          EM statuses.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest CPU context.
  */
 static int emR3RawForcedActions(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -1276,8 +1276,8 @@ static int emR3RawForcedActions(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * @returns VBox status code. The most important ones are: VINF_EM_RESCHEDULE,
  *          VINF_EM_RESCHEDULE_REM, VINF_EM_SUSPEND, VINF_EM_RESET and VINF_EM_TERMINATE.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pfFFDone    Where to store an indicator telling whether or not
  *                      FFs were done before returning.
  */
diff --git a/src/VBox/VMM/VMMR3/FTM.cpp b/src/VBox/VMM/VMMR3/FTM.cpp
index bb3bb42..46f5f8a 100644
--- a/src/VBox/VMM/VMMR3/FTM.cpp
+++ b/src/VBox/VMM/VMMR3/FTM.cpp
@@ -101,7 +101,7 @@ static DECLCALLBACK(int) ftmR3PageTreeDestroyCallback(PAVLGCPHYSNODECORE pBaseNo
  * Initializes the FTM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) FTMR3Init(PVM pVM)
 {
@@ -157,7 +157,7 @@ VMMR3_INT_DECL(int) FTMR3Init(PVM pVM)
  * the VM itself is at this point powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) FTMR3Term(PVM pVM)
 {
@@ -231,7 +231,7 @@ static int ftmR3TcpWriteNACK(PVM pVM, int32_t rc2, const char *pszMsgText = NULL
  *
  * @returns VBox status code.
  *
- * @param   pState      The teleporter state structure.
+ * @param   pVM         The cross context VM structure.
  * @param   pszBuf      The output buffer.
  * @param   cchBuf      The size of the output buffer.
  *
@@ -272,7 +272,7 @@ static int ftmR3TcpReadLine(PVM pVM, char *pszBuf, size_t cchBuf)
  * Reads an ACK or NACK.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pszWhich            Which ACK is this this?
  * @param   pszNAckMsg          Optional NACK message.
  */
@@ -328,7 +328,7 @@ static int ftmR3TcpReadACK(PVM pVM, const char *pszWhich, const char *pszNAckMsg
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pszCommand          The command.
  * @param   fWaitForAck         Whether to wait for the ACK.
  */
@@ -343,7 +343,7 @@ static int ftmR3TcpSubmitCommand(PVM pVM, const char *pszCommand, bool fWaitForA
 }
 
 /**
- * @copydoc SSMSTRMOPS::pfnWrite
+ * @interface_method_impl{SSMSTRMOPS,pfnWrite}
  */
 static DECLCALLBACK(int) ftmR3TcpOpWrite(void *pvUser, uint64_t offStream, const void *pvBuf, size_t cbToWrite)
 {
@@ -387,7 +387,7 @@ static DECLCALLBACK(int) ftmR3TcpOpWrite(void *pvUser, uint64_t offStream, const
  *
  * @returns VBox status code.
  *
- * @param   pState          The teleporter state data.
+ * @param   pVM         The cross context VM structure.
  */
 static int ftmR3TcpReadSelect(PVM pVM)
 {
@@ -412,7 +412,7 @@ static int ftmR3TcpReadSelect(PVM pVM)
 
 
 /**
- * @copydoc SSMSTRMOPS::pfnRead
+ * @interface_method_impl{SSMSTRMOPS,pfnRead}
  */
 static DECLCALLBACK(int) ftmR3TcpOpRead(void *pvUser, uint64_t offStream, void *pvBuf, size_t cbToRead, size_t *pcbRead)
 {
@@ -513,7 +513,7 @@ static DECLCALLBACK(int) ftmR3TcpOpRead(void *pvUser, uint64_t offStream, void *
 
 
 /**
- * @copydoc SSMSTRMOPS::pfnSeek
+ * @interface_method_impl{SSMSTRMOPS,pfnSeek}
  */
 static DECLCALLBACK(int) ftmR3TcpOpSeek(void *pvUser, int64_t offSeek, unsigned uMethod, uint64_t *poffActual)
 {
@@ -523,7 +523,7 @@ static DECLCALLBACK(int) ftmR3TcpOpSeek(void *pvUser, int64_t offSeek, unsigned
 
 
 /**
- * @copydoc SSMSTRMOPS::pfnTell
+ * @interface_method_impl{SSMSTRMOPS,pfnTell}
  */
 static DECLCALLBACK(uint64_t) ftmR3TcpOpTell(void *pvUser)
 {
@@ -533,7 +533,7 @@ static DECLCALLBACK(uint64_t) ftmR3TcpOpTell(void *pvUser)
 
 
 /**
- * @copydoc SSMSTRMOPS::pfnSize
+ * @interface_method_impl{SSMSTRMOPS,pfnSize}
  */
 static DECLCALLBACK(int) ftmR3TcpOpSize(void *pvUser, uint64_t *pcb)
 {
@@ -543,7 +543,7 @@ static DECLCALLBACK(int) ftmR3TcpOpSize(void *pvUser, uint64_t *pcb)
 
 
 /**
- * @copydoc SSMSTRMOPS::pfnIsOk
+ * @interface_method_impl{SSMSTRMOPS,pfnIsOk}
  */
 static DECLCALLBACK(int) ftmR3TcpOpIsOk(void *pvUser)
 {
@@ -571,9 +571,9 @@ static DECLCALLBACK(int) ftmR3TcpOpIsOk(void *pvUser)
 
 
 /**
- * @copydoc SSMSTRMOPS::pfnClose
+ * @interface_method_impl{SSMSTRMOPS,pfnClose}
  */
-static DECLCALLBACK(int) ftmR3TcpOpClose(void *pvUser, bool fCanceled)
+static DECLCALLBACK(int) ftmR3TcpOpClose(void *pvUser, bool fCancelled)
 {
     PVM pVM = (PVM)pvUser;
 
@@ -581,7 +581,7 @@ static DECLCALLBACK(int) ftmR3TcpOpClose(void *pvUser, bool fCanceled)
     {
         FTMTCPHDR EofHdr;
         EofHdr.u32Magic = FTMTCPHDR_MAGIC;
-        EofHdr.cb       = fCanceled ? UINT32_MAX : 0;
+        EofHdr.cb       = fCancelled ? UINT32_MAX : 0;
         int rc = RTTcpWrite(pVM->ftm.s.hSocket, &EofHdr, sizeof(EofHdr));
         if (RT_FAILURE(rc))
         {
@@ -618,7 +618,7 @@ static SSMSTRMOPS const g_ftmR3TcpOps =
 /**
  * VMR3ReqCallWait callback
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  *
  */
 static DECLCALLBACK(void) ftmR3WriteProtectMemory(PVM pVM)
@@ -632,7 +632,7 @@ static DECLCALLBACK(void) ftmR3WriteProtectMemory(PVM pVM)
  * Sync the VM state
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int ftmR3PerformFullSync(PVM pVM)
 {
@@ -678,7 +678,7 @@ static int ftmR3PerformFullSync(PVM pVM)
 /**
  * PGMR3PhysEnumDirtyFTPages callback for syncing dirty physical pages
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          GC physical address
  * @param   pRange          HC virtual address of the page(s)
  * @param   cbRange         Size of the dirty range in bytes.
@@ -851,7 +851,7 @@ static DECLCALLBACK(int) ftmR3MasterThread(RTTHREAD hThread, void *pvUser)
  * Syncs memory from the master VM
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 static int ftmR3SyncMem(PVM pVM)
 {
@@ -980,20 +980,20 @@ static DECLCALLBACK(int) ftmR3StandbyThread(RTTHREAD hThread, void *pvUser)
  *
  * @returns VINF_SUCCESS or VERR_TCP_SERVER_STOP.
  */
-static DECLCALLBACK(int) ftmR3StandbyServeConnection(RTSOCKET Sock, void *pvUser)
+static DECLCALLBACK(int) ftmR3StandbyServeConnection(RTSOCKET hSocket, void *pvUser)
 {
     PVM pVM = (PVM)pvUser;
 
-    pVM->ftm.s.hSocket = Sock;
+    pVM->ftm.s.hSocket = hSocket;
 
     /*
      * Disable Nagle.
      */
-    int rc = RTTcpSetSendCoalescing(Sock, false /*fEnable*/);
+    int rc = RTTcpSetSendCoalescing(hSocket, false /*fEnable*/);
     AssertRC(rc);
 
     /* Send the welcome message to the master node. */
-    rc = RTTcpWrite(Sock, g_szWelcome, sizeof(g_szWelcome) - 1);
+    rc = RTTcpWrite(hSocket, g_szWelcome, sizeof(g_szWelcome) - 1);
     if (RT_FAILURE(rc))
     {
         LogRel(("Teleporter: Failed to write welcome message: %Rrc\n", rc));
@@ -1010,7 +1010,7 @@ static DECLCALLBACK(int) ftmR3StandbyServeConnection(RTSOCKET Sock, void *pvUser
         while (pszPassword[off])
         {
             char ch;
-            rc = RTTcpRead(Sock, &ch, sizeof(ch), NULL);
+            rc = RTTcpRead(hSocket, &ch, sizeof(ch), NULL);
             if (    RT_FAILURE(rc)
                 ||  pszPassword[off] != ch)
             {
@@ -1239,8 +1239,8 @@ VMMR3DECL(int) FTMR3CancelStandby(PUVM pUVM)
  * it to complete this function.
  *
  * @returns VINF_SUCCESS (VBox strict status code).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The VMCPU for the EMT we're being called on. Unused.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT. Unused.
  * @param   pvUser      Not used.
  */
 static DECLCALLBACK(VBOXSTRICTRC) ftmR3SetCheckpointRendezvous(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -1307,7 +1307,7 @@ static DECLCALLBACK(VBOXSTRICTRC) ftmR3SetCheckpointRendezvous(PVM pVM, PVMCPU p
  *
  * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmCheckpoint   Checkpoint type
  */
 VMMR3_INT_DECL(int) FTMR3SetCheckpoint(PVM pVM, FTMCHECKPOINTTYPE enmCheckpoint)
diff --git a/src/VBox/VMM/VMMR3/GIM.cpp b/src/VBox/VMM/VMMR3/GIM.cpp
index 964184b..4aa4768 100644
--- a/src/VBox/VMM/VMMR3/GIM.cpp
+++ b/src/VBox/VMM/VMMR3/GIM.cpp
@@ -69,8 +69,8 @@
 /*********************************************************************************************************************************
 *   Internal Functions                                                                                                           *
 *********************************************************************************************************************************/
-static DECLCALLBACK(int) gimR3Save(PVM pVM, PSSMHANDLE pSSM);
-static DECLCALLBACK(int) gimR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uSSMVersion, uint32_t uPass);
+static FNSSMINTSAVEEXEC  gimR3Save;
+static FNSSMINTLOADEXEC  gimR3Load;
 static FNPGMPHYSHANDLER gimR3Mmio2WriteHandler;
 
 
@@ -78,7 +78,7 @@ static FNPGMPHYSHANDLER gimR3Mmio2WriteHandler;
  * Initializes the GIM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) GIMR3Init(PVM pVM)
 {
@@ -162,8 +162,7 @@ VMMR3_INT_DECL(int) GIMR3Init(PVM pVM)
  * This is called after initializing HM and most other VMM components.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
- * @param   enmWhat             What has been completed.
+ * @param   pVM                 The cross context VM structure.
  * @thread  EMT(0)
  */
 VMMR3_INT_DECL(int) GIMR3InitCompleted(PVM pVM)
@@ -196,7 +195,7 @@ VMMR3_INT_DECL(int) GIMR3InitCompleted(PVM pVM)
  * This function will be called at init and whenever the VMM need to relocate
  * itself inside the GC.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  */
 VMM_INT_DECL(void) GIMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
@@ -237,13 +236,9 @@ VMM_INT_DECL(void) GIMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
 
 
 /**
- * Executes state-save operation.
- *
- * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   pSSM            SSM operation handle.
+ * @callback_method_impl{FNSSMINTSAVEEXEC}
  */
-DECLCALLBACK(int) gimR3Save(PVM pVM, PSSMHANDLE pSSM)
+static DECLCALLBACK(int) gimR3Save(PVM pVM, PSSMHANDLE pSSM)
 {
     AssertReturn(pVM,  VERR_INVALID_PARAMETER);
     AssertReturn(pSSM, VERR_SSM_INVALID_STATE);
@@ -288,19 +283,13 @@ DECLCALLBACK(int) gimR3Save(PVM pVM, PSSMHANDLE pSSM)
 
 
 /**
- * Execute state load operation.
- *
- * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   pSSM            SSM operation handle.
- * @param   uVersion        Data layout version.
- * @param   uPass           The data pass.
+ * @callback_method_impl{FNSSMINTLOADEXEC}
  */
-DECLCALLBACK(int) gimR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uSSMVersion, uint32_t uPass)
+static DECLCALLBACK(int) gimR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
     if (uPass != SSM_PASS_FINAL)
         return VINF_SUCCESS;
-    if (uSSMVersion != GIM_SAVED_STATE_VERSION)
+    if (uVersion != GIM_SAVED_STATE_VERSION)
         return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
 
     /** @todo Load per-CPU data. */
@@ -338,12 +327,12 @@ DECLCALLBACK(int) gimR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uSSMVersion, uint
     switch (pVM->gim.s.enmProviderId)
     {
         case GIMPROVIDERID_HYPERV:
-            rc = gimR3HvLoad(pVM, pSSM, uSSMVersion);
+            rc = gimR3HvLoad(pVM, pSSM, uVersion);
             AssertRCReturn(rc, rc);
             break;
 
         case GIMPROVIDERID_KVM:
-            rc = gimR3KvmLoad(pVM, pSSM, uSSMVersion);
+            rc = gimR3KvmLoad(pVM, pSSM, uVersion);
             AssertRCReturn(rc, rc);
             break;
 
@@ -362,7 +351,7 @@ DECLCALLBACK(int) gimR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uSSMVersion, uint
  * the VM itself is, at this point, powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) GIMR3Term(PVM pVM)
 {
@@ -388,7 +377,7 @@ VMMR3_INT_DECL(int) GIMR3Term(PVM pVM)
  * and other provider-specific resets.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(void) GIMR3Reset(PVM pVM)
 {
@@ -409,7 +398,7 @@ VMMR3_INT_DECL(void) GIMR3Reset(PVM pVM)
 /**
  * Registers the GIM device with VMM.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDevIns     Pointer to the GIM device instance.
  */
 VMMR3DECL(void) GIMR3GimDeviceRegister(PVM pVM, PPDMDEVINS pDevIns)
@@ -424,7 +413,7 @@ VMMR3DECL(void) GIMR3GimDeviceRegister(PVM pVM, PPDMDEVINS pDevIns)
  * configured for the VM.
  *
  * @returns Pointer to an array of GIM MMIO2 regions, may return NULL.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pcRegions   Where to store the number of items in the array.
  *
  * @remarks The caller does not own and therefore must -NOT- try to free the
@@ -454,7 +443,7 @@ VMMR3DECL(PGIMMMIO2REGION) GIMR3GetMmio2Regions(PVM pVM, uint32_t *pcRegions)
  * access handlers for it.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegion     Pointer to the GIM MMIO2 region.
  */
 VMMR3_INT_DECL(int) GIMR3Mmio2Unmap(PVM pVM, PGIMMMIO2REGION pRegion)
@@ -485,7 +474,7 @@ VMMR3_INT_DECL(int) GIMR3Mmio2Unmap(PVM pVM, PGIMMMIO2REGION pRegion)
  *      Write access handler for mapped MMIO2 pages.  Currently ignores writes.}
  *
  * @todo In the future we might want to let the GIM provider decide what the
- *       handler should do (like throwing #GP faults).
+ *       handler should do (like throwing \#GP faults).
  */
 static DECLCALLBACK(VBOXSTRICTRC)
 gimR3Mmio2WriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, void *pvPhys, void *pvBuf, size_t cbBuf,
@@ -495,16 +484,17 @@ gimR3Mmio2WriteHandler(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, void *pvPhys, voi
      * Ignore writes to the mapped MMIO2 page.
      */
     Assert(enmAccessType == PGMACCESSTYPE_WRITE);
-    return VINF_SUCCESS;        /** @todo Hyper-V says we should #GP(0) fault for writes to the Hypercall and TSC page. */
+    return VINF_SUCCESS;        /** @todo Hyper-V says we should \#GP(0) fault for writes to the Hypercall and TSC page. */
 }
 
 
 /**
- * Maps a registered MMIO2 region in the guest address space. The region will be
- * made read-only and writes from the guest will be ignored.
+ * Maps a registered MMIO2 region in the guest address space.
+ *
+ * The region will be made read-only and writes from the guest will be ignored.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pRegion         Pointer to the GIM MMIO2 region.
  * @param   GCPhysRegion    Where in the guest address space to map the region.
  */
@@ -577,7 +567,7 @@ VMMR3_INT_DECL(int) GIMR3Mmio2Map(PVM pVM, PGIMMMIO2REGION pRegion, RTGCPHYS GCP
  * Registers the physical handler for the registered and mapped MMIO2 region.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegion     Pointer to the GIM MMIO2 region.
  */
 VMMR3_INT_DECL(int) GIMR3Mmio2HandlerPhysicalRegister(PVM pVM, PGIMMMIO2REGION pRegion)
@@ -600,7 +590,7 @@ VMMR3_INT_DECL(int) GIMR3Mmio2HandlerPhysicalRegister(PVM pVM, PGIMMMIO2REGION p
  * Deregisters the physical handler for the MMIO2 region.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegion     Pointer to the GIM MMIO2 region.
  */
 VMMR3_INT_DECL(int) GIMR3Mmio2HandlerPhysicalDeregister(PVM pVM, PGIMMMIO2REGION pRegion)
diff --git a/src/VBox/VMM/VMMR3/GIMHv.cpp b/src/VBox/VMM/VMMR3/GIMHv.cpp
index 971f249..dc1495a 100644
--- a/src/VBox/VMM/VMMR3/GIMHv.cpp
+++ b/src/VBox/VMM/VMMR3/GIMHv.cpp
@@ -83,8 +83,7 @@ static CPUMMSRRANGE const g_aMsrRanges_HyperV[] =
  * Initializes the Hyper-V GIM provider.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   uVersion    The interface version this VM should use.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) gimR3HvInit(PVM pVM)
 {
@@ -267,7 +266,7 @@ VMMR3_INT_DECL(int) gimR3HvInit(PVM pVM)
  * This is called after initializing HM and almost all other VMM components.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) gimR3HvInitCompleted(PVM pVM)
 {
@@ -317,7 +316,7 @@ VMMR3_INT_DECL(int) gimR3HvInitFinalize(PVM pVM)
  * Terminates the Hyper-V GIM provider.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) gimR3HvTerm(PVM pVM)
 {
@@ -332,7 +331,7 @@ VMMR3_INT_DECL(int) gimR3HvTerm(PVM pVM)
  * This function will be called at init and whenever the VMM need to relocate
  * itself inside the GC.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  */
 VMMR3_INT_DECL(void) gimR3HvRelocate(PVM pVM, RTGCINTPTR offDelta)
@@ -350,7 +349,7 @@ VMMR3_INT_DECL(void) gimR3HvRelocate(PVM pVM, RTGCINTPTR offDelta)
  *
  * This is called when the VM is being reset.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @thread EMT(0).
  */
 VMMR3_INT_DECL(void) gimR3HvReset(PVM pVM)
@@ -391,7 +390,7 @@ VMMR3_INT_DECL(void) gimR3HvReset(PVM pVM)
  * Returns a pointer to the MMIO2 regions supported by Hyper-V.
  *
  * @returns Pointer to an array of MMIO2 regions.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pcRegions   Where to store the number of regions in the array.
  */
 VMMR3_INT_DECL(PGIMMMIO2REGION) gimR3HvGetMmio2Regions(PVM pVM, uint32_t *pcRegions)
@@ -409,7 +408,7 @@ VMMR3_INT_DECL(PGIMMMIO2REGION) gimR3HvGetMmio2Regions(PVM pVM, uint32_t *pcRegi
  * Hyper-V state-save operation.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pSSM    Pointer to the SSM handle.
  */
 VMMR3_INT_DECL(int) gimR3HvSave(PVM pVM, PSSMHANDLE pSSM)
@@ -474,7 +473,7 @@ VMMR3_INT_DECL(int) gimR3HvSave(PVM pVM, PSSMHANDLE pSSM)
  * Hyper-V state-load operation, final pass.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            Pointer to the SSM handle.
  * @param   uSSMVersion     The GIM saved-state version.
  */
@@ -582,7 +581,7 @@ VMMR3_INT_DECL(int) gimR3HvLoad(PVM pVM, PSSMHANDLE pSSM, uint32_t uSSMVersion)
  * Enables the Hyper-V TSC page.
  *
  * @returns VBox status code.
- * @param   pVM                Pointer to the VM.
+ * @param   pVM                The cross context VM structure.
  * @param   GCPhysTscPage      Where to map the TSC page.
  * @param   fUseThisTscSeq     Whether to set the TSC sequence number to the one
  *                             specified in @a uTscSeq.
@@ -698,7 +697,7 @@ VMMR3_INT_DECL(int) gimR3HvEnableTscPage(PVM pVM, RTGCPHYS GCPhysTscPage, bool f
  * Disables the Hyper-V TSC page.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) gimR3HvDisableTscPage(PVM pVM)
 {
@@ -751,7 +750,7 @@ VMMR3_INT_DECL(int) gimR3HvDisableHypercallPage(PVM pVM)
  * Enables the Hyper-V Hypercall page.
  *
  * @returns VBox status code.
- * @param   pVM                     Pointer to the VM.
+ * @param   pVM                     The cross context VM structure.
  * @param   GCPhysHypercallPage     Where to map the hypercall page.
  */
 VMMR3_INT_DECL(int) gimR3HvEnableHypercallPage(PVM pVM, RTGCPHYS GCPhysHypercallPage)
diff --git a/src/VBox/VMM/VMMR3/GIMKvm.cpp b/src/VBox/VMM/VMMR3/GIMKvm.cpp
index 5bc6332..6eaec79 100644
--- a/src/VBox/VMM/VMMR3/GIMKvm.cpp
+++ b/src/VBox/VMM/VMMR3/GIMKvm.cpp
@@ -86,8 +86,7 @@ static CPUMMSRRANGE const g_aMsrRanges_Kvm[] =
  * Initializes the KVM GIM provider.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   uVersion    The interface version this VM should use.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) gimR3KvmInit(PVM pVM)
 {
@@ -186,7 +185,7 @@ VMMR3_INT_DECL(int) gimR3KvmInit(PVM pVM)
  * This is called after initializing HM and almost all other VMM components.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) gimR3KvmInitCompleted(PVM pVM)
 {
@@ -219,7 +218,7 @@ VMMR3_INT_DECL(int) gimR3KvmInitCompleted(PVM pVM)
  * Terminates the KVM GIM provider.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) gimR3KvmTerm(PVM pVM)
 {
@@ -234,7 +233,7 @@ VMMR3_INT_DECL(int) gimR3KvmTerm(PVM pVM)
  * This function will be called at init and whenever the VMM need to relocate
  * itself inside the GC.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  */
 VMMR3_INT_DECL(void) gimR3KvmRelocate(PVM pVM, RTGCINTPTR offDelta)
@@ -249,7 +248,7 @@ VMMR3_INT_DECL(void) gimR3KvmRelocate(PVM pVM, RTGCINTPTR offDelta)
  *
  * This is called when the VM is being reset.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @thread EMT(0).
  */
 VMMR3_INT_DECL(void) gimR3KvmReset(PVM pVM)
@@ -279,7 +278,7 @@ VMMR3_INT_DECL(void) gimR3KvmReset(PVM pVM)
  * KVM state-save operation.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pSSM    Pointer to the SSM handle.
  */
 VMMR3_INT_DECL(int) gimR3KvmSave(PVM pVM, PSSMHANDLE pSSM)
@@ -327,7 +326,7 @@ VMMR3_INT_DECL(int) gimR3KvmSave(PVM pVM, PSSMHANDLE pSSM)
  * KVM state-load operation, final pass.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            Pointer to the SSM handle.
  * @param   uSSMVersion     The GIM saved-state version.
  */
@@ -394,8 +393,8 @@ VMMR3_INT_DECL(int) gimR3KvmLoad(PVM pVM, PSSMHANDLE pSSM, uint32_t uSSMVersion)
  * Enables the KVM VCPU system-time structure.
  *
  * @returns VBox status code.
- * @param   pVM                Pointer to the VM.
- * @param   pVCpu              Pointer to the VMCPU.
+ * @param   pVM                The cross context VM structure.
+ * @param   pVCpu              The cross context virtual CPU structure.
  *
  * @remarks Don't do any release assertions here, these can be triggered by
  *          guest R0 code.
@@ -474,7 +473,7 @@ VMMR3_INT_DECL(int) gimR3KvmEnableSystemTime(PVM pVM, PVMCPU pVCpu)
  * Disables the KVM system-time struct.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) gimR3KvmDisableSystemTime(PVM pVM)
 {
@@ -557,9 +556,8 @@ static DECLCALLBACK(VBOXSTRICTRC) gimR3KvmEnableWallClockCallback(PVM pVM, PVMCP
  * sure there is only 1 writer as well.
  *
  * @returns VBox status code.
- * @param   pVM                Pointer to the VM.
+ * @param   pVM                The cross context VM structure.
  * @param   GCPhysWallClock    Where the guest wall-clock structure is located.
- * @param   uVersion           The version (sequence number) value to use.
  *
  * @remarks Don't do any release assertions here, these can be triggered by
  *          guest R0 code.
diff --git a/src/VBox/VMM/VMMR3/GIMMinimal.cpp b/src/VBox/VMM/VMMR3/GIMMinimal.cpp
index 54dc5af..2e83ed6 100644
--- a/src/VBox/VMM/VMMR3/GIMMinimal.cpp
+++ b/src/VBox/VMM/VMMR3/GIMMinimal.cpp
@@ -41,7 +41,7 @@
  * Initializes the Minimal provider.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) gimR3MinimalInit(PVM pVM)
 {
@@ -62,7 +62,7 @@ VMMR3_INT_DECL(int) gimR3MinimalInit(PVM pVM)
  * This is called after initializing HM and almost all other VMM components.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) gimR3MinimalInitCompleted(PVM pVM)
 {
@@ -129,7 +129,7 @@ VMMR3_INT_DECL(int) gimR3MinimalInitCompleted(PVM pVM)
  * This function will be called at init and whenever the VMM need to relocate
  * itself inside the GC.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  */
 VMMR3_INT_DECL(void) gimR3MinimalRelocate(PVM pVM, RTGCINTPTR offDelta)
diff --git a/src/VBox/VMM/VMMR3/GMM.cpp b/src/VBox/VMM/VMMR3/GMM.cpp
index 7d9e0e0..ff4e9e2 100644
--- a/src/VBox/VMM/VMMR3/GMM.cpp
+++ b/src/VBox/VMM/VMMR3/GMM.cpp
@@ -70,7 +70,7 @@ GMMR3DECL(int)  GMMR3UpdateReservation(PVM pVM, uint64_t cBasePages, uint32_t cS
  * Prepares a GMMR0AllocatePages request.
  *
  * @returns VINF_SUCCESS or VERR_NO_TMP_MEMORY.
- * @param       pVM         Pointer to the VM.
+ * @param       pVM         The cross context VM structure.
  * @param[out]  ppReq       Where to store the pointer to the request packet.
  * @param       cPages      The number of pages that's to be allocated.
  * @param       enmAccount  The account to charge.
@@ -94,10 +94,11 @@ GMMR3DECL(int) GMMR3AllocatePagesPrepare(PVM pVM, PGMMALLOCATEPAGESREQ *ppReq, u
 
 /**
  * Performs a GMMR0AllocatePages request.
+ *
  * This will call VMSetError on failure.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pReq        Pointer to the request (returned by GMMR3AllocatePagesPrepare).
  */
 GMMR3DECL(int) GMMR3AllocatePagesPerform(PVM pVM, PGMMALLOCATEPAGESREQ pReq)
@@ -151,7 +152,7 @@ GMMR3DECL(void) GMMR3AllocatePagesCleanup(PGMMALLOCATEPAGESREQ pReq)
  * Prepares a GMMR0FreePages request.
  *
  * @returns VINF_SUCCESS or VERR_NO_TMP_MEMORY.
- * @param       pVM         Pointer to the VM.
+ * @param       pVM         The cross context VM structure.
  * @param[out]  ppReq       Where to store the pointer to the request packet.
  * @param       cPages      The number of pages that's to be freed.
  * @param       enmAccount  The account to charge.
@@ -177,7 +178,7 @@ GMMR3DECL(int) GMMR3FreePagesPrepare(PVM pVM, PGMMFREEPAGESREQ *ppReq, uint32_t
  * Re-prepares a GMMR0FreePages request.
  *
  * @returns VINF_SUCCESS or VERR_NO_TMP_MEMORY.
- * @param       pVM         Pointer to the VM.
+ * @param       pVM         The cross context VM structure.
  * @param       pReq        A request buffer previously returned by
  *                          GMMR3FreePagesPrepare().
  * @param       cPages      The number of pages originally passed to
@@ -199,7 +200,7 @@ GMMR3DECL(void) GMMR3FreePagesRePrep(PVM pVM, PGMMFREEPAGESREQ pReq, uint32_t cP
  * This will call VMSetError on failure.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pReq            Pointer to the request (returned by GMMR3FreePagesPrepare).
  * @param   cActualPages    The number of pages actually freed.
  */
@@ -245,7 +246,7 @@ GMMR3DECL(void) GMMR3FreePagesCleanup(PGMMFREEPAGESREQ pReq)
  *
  * This will not call VMSetError on failure but will use AssertLogRel instead.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pAllocReq   The allocation request to undo.
  */
 GMMR3DECL(void) GMMR3FreeAllocatedPages(PVM pVM, GMMALLOCATEPAGESREQ const *pAllocReq)
diff --git a/src/VBox/VMM/VMMR3/HM.cpp b/src/VBox/VMM/VMMR3/HM.cpp
index bb36bd7..56f9140 100644
--- a/src/VBox/VMM/VMMR3/HM.cpp
+++ b/src/VBox/VMM/VMMR3/HM.cpp
@@ -330,7 +330,7 @@ static int hmR3TermCPU(PVM pVM);
  * the ring-3 and ring-0 callback to HMR3InitCompleted.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  *
  * @remarks Be careful with what we call here, since most of the VMM components
  *          are uninitialized.
@@ -593,7 +593,7 @@ VMMR3_INT_DECL(int) HMR3Init(PVM pVM)
  * Initializes the per-VCPU HM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int hmR3InitCPU(PVM pVM)
 {
@@ -884,7 +884,7 @@ static int hmR3InitCPU(PVM pVM)
  * Called when a init phase has completed.
  *
  * @returns VBox status code.
- * @param   pVM                 The VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   enmWhat             The phase that completed.
  */
 VMMR3_INT_DECL(int) HMR3InitCompleted(PVM pVM, VMINITCOMPLETED enmWhat)
@@ -904,7 +904,7 @@ VMMR3_INT_DECL(int) HMR3InitCompleted(PVM pVM, VMINITCOMPLETED enmWhat)
 /**
  * Turns off normal raw mode features.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static void hmR3DisableRawMode(PVM pVM)
 {
@@ -922,7 +922,7 @@ static void hmR3DisableRawMode(PVM pVM)
  * Initialize VT-x or AMD-V.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int hmR3InitFinalizeR0(PVM pVM)
 {
@@ -1028,7 +1028,7 @@ static int hmR3InitFinalizeR0(PVM pVM)
  * Finish VT-x initialization (after ring-0 init).
  *
  * @returns VBox status code.
- * @param   pVM                 The cross context VM structure.
+ * @param   pVM                The cross context VM structure.
  */
 static int hmR3InitFinalizeR0Intel(PVM pVM)
 {
@@ -1408,7 +1408,7 @@ static int hmR3InitFinalizeR0Intel(PVM pVM)
  * Finish AMD-V initialization (after ring-0 init).
  *
  * @returns VBox status code.
- * @param   pVM                 The cross context VM structure.
+ * @param   pVM                The cross context VM structure.
  */
 static int hmR3InitFinalizeR0Amd(PVM pVM)
 {
@@ -1531,7 +1531,7 @@ static int hmR3InitFinalizeR0Amd(PVM pVM)
  * component. This function will be called at init and
  * whenever the VMM need to relocate it self inside the GC.
  *
- * @param   pVM     The VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(void) HMR3Relocate(PVM pVM)
 {
@@ -1576,8 +1576,8 @@ VMMR3_INT_DECL(void) HMR3Relocate(PVM pVM)
  *
  * This is called by PGM.
  *
- * @param   pVM            Pointer to the VM.
- * @param   pVCpu          Pointer to the VMCPU.
+ * @param   pVM            The cross context VM structure.
+ * @param   pVCpu          The cross context virtual CPU structure.
  * @param   enmShadowMode  New shadow paging mode.
  * @param   enmGuestMode   New guest paging mode.
  */
@@ -1619,7 +1619,7 @@ VMMR3_INT_DECL(void) HMR3PagingModeChanged(PVM pVM, PVMCPU pVCpu, PGMMODE enmSha
  * the VM itself is, at this point, powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) HMR3Term(PVM pVM)
 {
@@ -1637,7 +1637,7 @@ VMMR3_INT_DECL(int) HMR3Term(PVM pVM)
  * Terminates the per-VCPU HM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int hmR3TermCPU(PVM pVM)
 {
@@ -1675,7 +1675,7 @@ static int hmR3TermCPU(PVM pVM)
  *
  * Used by HMR3Reset and CPU hot plugging.
  *
- * @param   pVCpu   The CPU to reset.
+ * @param   pVCpu   The cross context virtual CPU structure to reset.
  */
 VMMR3_INT_DECL(void) HMR3ResetCpu(PVMCPU pVCpu)
 {
@@ -1709,7 +1709,7 @@ VMMR3_INT_DECL(void) HMR3ResetCpu(PVMCPU pVCpu)
  * For the HM component this means that any GDT/LDT/TSS monitors
  * needs to be removed.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(void) HMR3Reset(PVM pVM)
 {
@@ -1740,8 +1740,8 @@ VMMR3_INT_DECL(void) HMR3Reset(PVM pVM)
  * Callback to patch a TPR instruction (vmmcall or mov cr8).
  *
  * @returns VBox strict status code.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   The VMCPU for the EMT we're being called on.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser  Unused.
  */
 static DECLCALLBACK(VBOXSTRICTRC) hmR3RemovePatches(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -1805,7 +1805,7 @@ static DECLCALLBACK(VBOXSTRICTRC) hmR3RemovePatches(PVM pVM, PVMCPU pVCpu, void
  * Worker for enabling patching in a VT-x/AMD-V guest.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idCpu       VCPU to execute hmR3RemovePatches on.
  * @param   pPatchMem   Patch memory range.
  * @param   cbPatchMem  Size of the memory range.
@@ -1826,7 +1826,7 @@ static int hmR3EnablePatching(PVM pVM, VMCPUID idCpu, RTRCPTR pPatchMem, unsigne
  * Enable patching in a VT-x/AMD-V guest
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatchMem   Patch memory range.
  * @param   cbPatchMem  Size of the memory range.
  */
@@ -1850,7 +1850,7 @@ VMMR3_INT_DECL(int)  HMR3EnablePatching(PVM pVM, RTGCPTR pPatchMem, unsigned cbP
  * Disable patching in a VT-x/AMD-V guest.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatchMem   Patch memory range.
  * @param   cbPatchMem  Size of the memory range.
  */
@@ -1878,8 +1878,8 @@ VMMR3_INT_DECL(int)  HMR3DisablePatching(PVM pVM, RTGCPTR pPatchMem, unsigned cb
  * Callback to patch a TPR instruction (vmmcall or mov cr8).
  *
  * @returns VBox strict status code.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   The VMCPU for the EMT we're being called on.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser  User specified CPU context.
  *
  */
@@ -2052,8 +2052,8 @@ static DECLCALLBACK(VBOXSTRICTRC) hmR3ReplaceTprInstr(PVM pVM, PVMCPU pVCpu, voi
  * Callback to patch a TPR instruction (jump to generated code).
  *
  * @returns VBox strict status code.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   The VMCPU for the EMT we're being called on.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser  User specified CPU context.
  *
  */
@@ -2285,8 +2285,8 @@ static DECLCALLBACK(VBOXSTRICTRC) hmR3PatchTprInstr(PVM pVM, PVMCPU pVCpu, void
  * Attempt to patch TPR mmio instructions.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest CPU context.
  */
 VMMR3_INT_DECL(int) HMR3PatchTprInstr(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -2307,7 +2307,7 @@ VMMR3_INT_DECL(int) HMR3PatchTprInstr(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
  * @returns true if selector is suitable for VMX, otherwise
  *        false.
  * @param   pSel        Pointer to the selector to check (CS).
- *          uStackDpl   The CPL, aka the DPL of the stack segment.
+ * @param   uStackDpl   The CPL, aka the DPL of the stack segment.
  */
 static bool hmR3IsCodeSelectorOkForVmx(PCPUMSELREG pSel, unsigned uStackDpl)
 {
@@ -2453,7 +2453,7 @@ static bool hmR3IsStackSelectorOkForVmx(PCPUMSELREG pSel)
  * Force execution of the current IO code in the recompiler.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        Partial VM execution context.
  */
 VMMR3_INT_DECL(int) HMR3EmulateIoBlock(PVM pVM, PCPUMCTX pCtx)
@@ -2480,7 +2480,7 @@ VMMR3_INT_DECL(int) HMR3EmulateIoBlock(PVM pVM, PCPUMCTX pCtx)
  * Checks if we can currently use hardware accelerated raw mode.
  *
  * @returns true if we can currently use hardware acceleration, otherwise false.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        Partial VM execution context.
  */
 VMMR3DECL(bool) HMR3CanExecuteGuest(PVM pVM, PCPUMCTX pCtx)
@@ -2671,7 +2671,7 @@ VMMR3DECL(bool) HMR3CanExecuteGuest(PVM pVM, PCPUMCTX pCtx)
  * Checks if we need to reschedule due to VMM device heap changes.
  *
  * @returns true if a reschedule is required, otherwise false.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        VM execution context.
  */
 VMMR3_INT_DECL(bool) HMR3IsRescheduleRequired(PVM pVM, PCPUMCTX pCtx)
@@ -2696,7 +2696,7 @@ VMMR3_INT_DECL(bool) HMR3IsRescheduleRequired(PVM pVM, PCPUMCTX pCtx)
  * Notification from EM about a rescheduling into hardware assisted execution
  * mode.
  *
- * @param   pVCpu       Pointer to the current VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMR3_INT_DECL(void) HMR3NotifyScheduled(PVMCPU pVCpu)
 {
@@ -2707,7 +2707,7 @@ VMMR3_INT_DECL(void) HMR3NotifyScheduled(PVMCPU pVCpu)
 /**
  * Notification from EM about returning from instruction emulation (REM / EM).
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3_INT_DECL(void) HMR3NotifyEmulated(PVMCPU pVCpu)
 {
@@ -2719,7 +2719,7 @@ VMMR3_INT_DECL(void) HMR3NotifyEmulated(PVMCPU pVCpu)
  * Checks if we are currently using hardware acceleration.
  *
  * @returns true if hardware acceleration is being used, otherwise false.
- * @param   pVCpu        Pointer to the VMCPU.
+ * @param   pVCpu        The cross context virtual CPU structure.
  */
 VMMR3_INT_DECL(bool) HMR3IsActive(PVMCPU pVCpu)
 {
@@ -2829,7 +2829,7 @@ VMMR3DECL(bool) HMR3IsUXActive(PUVM pUVM)
  * Checks if internal events are pending. In that case we are not allowed to dispatch interrupts.
  *
  * @returns true if an internal event is pending, otherwise false.
- * @param   pVM         Pointer to the VM.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3_INT_DECL(bool) HMR3IsEventPending(PVMCPU pVCpu)
 {
@@ -2841,7 +2841,7 @@ VMMR3_INT_DECL(bool) HMR3IsEventPending(PVMCPU pVCpu)
  * Checks if the VMX-preemption timer is being used.
  *
  * @returns true if the VMX-preemption timer is being used, otherwise false.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(bool) HMR3IsVmxPreemptionTimerUsed(PVM pVM)
 {
@@ -2861,8 +2861,8 @@ VMMR3_INT_DECL(bool) HMR3IsVmxPreemptionTimerUsed(PVM pVM)
  *                                      status code must be passed on to EM.
  * @retval  VERR_NOT_FOUND if no pending I/O instruction.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtx        Pointer to the guest CPU context.
  */
 VMMR3_INT_DECL(VBOXSTRICTRC) HMR3RestartPendingIOInstr(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx)
@@ -2935,7 +2935,7 @@ VMMR3_INT_DECL(VBOXSTRICTRC) HMR3RestartPendingIOInstr(PVM pVM, PVMCPU pVCpu, PC
  * Check fatal VT-x/AMD-V error and produce some meaningful
  * log release message.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iStatusCode VBox status code.
  */
 VMMR3_INT_DECL(void) HMR3CheckError(PVM pVM, int iStatusCode)
@@ -3028,7 +3028,7 @@ VMMR3_INT_DECL(void) HMR3CheckError(PVM pVM, int iStatusCode)
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 static DECLCALLBACK(int) hmR3Save(PVM pVM, PSSMHANDLE pSSM)
@@ -3117,7 +3117,7 @@ static DECLCALLBACK(int) hmR3Save(PVM pVM, PSSMHANDLE pSSM)
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion        Data layout version.
  * @param   uPass           The data pass.
diff --git a/src/VBox/VMM/VMMR3/IEMR3.cpp b/src/VBox/VMM/VMMR3/IEMR3.cpp
index 2ef0599..e25c543 100644
--- a/src/VBox/VMM/VMMR3/IEMR3.cpp
+++ b/src/VBox/VMM/VMMR3/IEMR3.cpp
@@ -38,7 +38,7 @@
  * the guest and host CPUs.
  *
  * @returns VBox status code.
- * @param   pVM                 The cross context VM structure.
+ * @param   pVM                The cross context VM structure.
  */
 VMMR3DECL(int)      IEMR3Init(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/IOM.cpp b/src/VBox/VMM/VMMR3/IOM.cpp
index 6098f3a..309e68e 100644
--- a/src/VBox/VMM/VMMR3/IOM.cpp
+++ b/src/VBox/VMM/VMMR3/IOM.cpp
@@ -145,7 +145,7 @@ static const char *iomR3IOPortGetStandardName(RTIOPORT Port);
  * Initializes the IOM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) IOMR3Init(PVM pVM)
 {
@@ -245,7 +245,7 @@ VMMR3_INT_DECL(int) IOMR3Init(PVM pVM)
 /**
  * Flushes the IOM port & statistics lookup cache
  *
- * @param   pVM     The VM.
+ * @param   pVM     The cross context VM structure.
  */
 static void iomR3FlushCache(PVM pVM)
 {
@@ -290,7 +290,7 @@ static void iomR3FlushCache(PVM pVM)
 /**
  * The VM is being reset.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(void) IOMR3Reset(PVM pVM)
 {
@@ -305,7 +305,7 @@ VMMR3_INT_DECL(void) IOMR3Reset(PVM pVM)
  *
  * The IOM will update the addresses used by the switcher.
  *
- * @param   pVM     The VM.
+ * @param   pVM     The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  */
 VMMR3_INT_DECL(void) IOMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
@@ -400,7 +400,7 @@ static DECLCALLBACK(int) iomR3RelocateMMIOCallback(PAVLROGCPHYSNODECORE pNode, v
  * the VM it self is at this point powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) IOMR3Term(PVM pVM)
 {
@@ -419,7 +419,7 @@ VMMR3_INT_DECL(int) IOMR3Term(PVM pVM)
  *
  * @returns Pointer to new stats node.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   Port        Port.
  * @param   pszDesc     Description.
  */
@@ -480,7 +480,7 @@ static PIOMIOPORTSTATS iomR3IOPortStatsCreate(PVM pVM, RTIOPORT Port, const char
  *
  * @returns Pointer to new stats node.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The address.
  * @param   pszDesc     Description.
  */
@@ -536,7 +536,7 @@ PIOMMMIOSTATS iomR3MMIOStatsCreate(PVM pVM, RTGCPHYS GCPhys, const char *pszDesc
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             PDM device instance owning the port range.
  * @param   PortStart           First port number in the range.
  * @param   cPorts              Number of ports to register.
@@ -634,7 +634,7 @@ VMMR3_INT_DECL(int) IOMR3IOPortRegisterR3(PVM pVM, PPDMDEVINS pDevIns, RTIOPORT
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             PDM device instance owning the port range.
  * @param   PortStart           First port number in the range.
  * @param   cPorts              Number of ports to register.
@@ -749,7 +749,7 @@ VMMR3_INT_DECL(int) IOMR3IOPortRegisterRC(PVM pVM, PPDMDEVINS pDevIns, RTIOPORT
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             PDM device instance owning the port range.
  * @param   PortStart           First port number in the range.
  * @param   cPorts              Number of ports to register.
@@ -866,7 +866,7 @@ VMMR3_INT_DECL(int) IOMR3IOPortRegisterR0(PVM pVM, PPDMDEVINS pDevIns, RTIOPORT
  *
  * @returns VBox status code.
  *
- * @param   pVM                 The virtual machine.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             The device instance associated with the range.
  * @param   PortStart           First port number in the range.
  * @param   cPorts              Number of ports to remove starting at PortStart.
@@ -1292,7 +1292,7 @@ static DECLCALLBACK(int) iomR3IOPortInfoOneRC(PAVLROIOPORTNODECORE pNode, void *
 /**
  * Display all registered I/O port ranges.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -1339,7 +1339,7 @@ static DECLCALLBACK(void) iomR3IOPortInfo(PVM pVM, PCDBGFINFOHLP pHlp, const cha
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             PDM device instance owning the MMIO range.
  * @param   GCPhysStart         First physical address in the range.
  * @param   cbRange             The size of the range (in bytes).
@@ -1347,6 +1347,7 @@ static DECLCALLBACK(void) iomR3IOPortInfo(PVM pVM, PCDBGFINFOHLP pHlp, const cha
  * @param   pfnWriteCallback    Pointer to function which is gonna handle Write operations.
  * @param   pfnReadCallback     Pointer to function which is gonna handle Read operations.
  * @param   pfnFillCallback     Pointer to function which is gonna handle Fill/memset operations.
+ * @param   fFlags              Flags, see IOMMMIO_FLAGS_XXX.
  * @param   pszDesc             Pointer to description string. This must not be freed.
  */
 VMMR3_INT_DECL(int)
@@ -1442,7 +1443,7 @@ IOMR3MmioRegisterR3(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, uint32_t
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             PDM device instance owning the MMIO range.
  * @param   GCPhysStart         First physical address in the range.
  * @param   cbRange             The size of the range (in bytes).
@@ -1501,7 +1502,7 @@ IOMR3MmioRegisterRC(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, uint32_t
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             PDM device instance owning the MMIO range.
  * @param   GCPhysStart         First physical address in the range.
  * @param   cbRange             The size of the range (in bytes).
@@ -1558,7 +1559,7 @@ IOMR3MmioRegisterR0(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhysStart, uint32_t
  *
  * @returns VBox status code.
  *
- * @param   pVM                 The virtual machine.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             Device instance which the MMIO region is registered.
  * @param   GCPhysStart         First physical address (GC) in the range.
  * @param   cbRange             Number of bytes to deregister.
@@ -1687,7 +1688,7 @@ static DECLCALLBACK(int) iomR3MMIOInfoOne(PAVLROGCPHYSNODECORE pNode, void *pvUs
 /**
  * Display registered MMIO ranges to the log.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
diff --git a/src/VBox/VMM/VMMR3/MM.cpp b/src/VBox/VMM/VMMR3/MM.cpp
index 4f3108c..07dde00 100644
--- a/src/VBox/VMM/VMMR3/MM.cpp
+++ b/src/VBox/VMM/VMMR3/MM.cpp
@@ -226,7 +226,7 @@ VMMR3DECL(int) MMR3InitUVM(PUVM pUVM)
  * it will choose a default starting location, currently 0xa0000000.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) MMR3Init(PVM pVM)
 {
@@ -290,7 +290,7 @@ VMMR3DECL(int) MMR3Init(PVM pVM)
  * Initializes the MM parts which depends on PGM being initialized.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @remark  No cleanup necessary since MMR3Term() will be called on failure.
  */
 VMMR3DECL(int) MMR3InitPaging(PVM pVM)
@@ -445,7 +445,7 @@ VMMR3DECL(int) MMR3InitPaging(PVM pVM)
  * the VM it self is at this point powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) MMR3Term(PVM pVM)
 {
@@ -505,7 +505,7 @@ VMMR3DECL(void) MMR3TermUVM(PUVM pUVM)
  * Checks if the both VM and UVM parts of MM have been initialized.
  *
  * @returns true if initialized, false if not.
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(bool) MMR3IsInitialized(PVM pVM)
 {
@@ -517,7 +517,7 @@ VMMR3_INT_DECL(bool) MMR3IsInitialized(PVM pVM)
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 static DECLCALLBACK(int) mmR3Save(PVM pVM, PSSMHANDLE pSSM)
@@ -534,7 +534,7 @@ static DECLCALLBACK(int) mmR3Save(PVM pVM, PSSMHANDLE pSSM)
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion       Data layout version.
  * @param   uPass           The data pass.
@@ -598,7 +598,7 @@ static DECLCALLBACK(int) mmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, u
  * Called when MM::cbRamRegistered, MM::cShadowPages or MM::cFixedPages changes.
  *
  * @returns VBox status code - see GMMR0UpdateReservation.
- * @param   pVM             The shared VM structure.
+ * @param   pVM             The cross context VM structure.
  */
 int mmR3UpdateReservation(PVM pVM)
 {
@@ -618,7 +618,7 @@ int mmR3UpdateReservation(PVM pVM)
  * This can be called before MMR3InitPaging.
  *
  * @returns VBox status code. Will set VM error on failure.
- * @param   pVM             The shared VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   cAddBasePages   The number of pages to add.
  */
 VMMR3DECL(int) MMR3IncreaseBaseReservation(PVM pVM, uint64_t cAddBasePages)
@@ -644,7 +644,7 @@ VMMR3DECL(int) MMR3IncreaseBaseReservation(PVM pVM, uint64_t cAddBasePages)
  * This can be called before MMR3InitPaging.
  *
  * @returns VBox status code. Will set VM error on failure.
- * @param   pVM             The shared VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   cHandyPages     The number of handy pages.
  */
 VMMR3DECL(int) MMR3ReserveHandyPages(PVM pVM, uint32_t cHandyPages)
@@ -670,7 +670,7 @@ VMMR3DECL(int) MMR3ReserveHandyPages(PVM pVM, uint32_t cHandyPages)
  * This can be called before MMR3InitPaging.
  *
  * @returns VBox status code. Will set VM error on failure.
- * @param   pVM                 The shared VM structure.
+ * @param   pVM                 The cross context VM structure.
  * @param   cDeltaFixedPages    The number of pages to add (positive) or subtract (negative).
  * @param   pszDesc             Some description associated with the reservation.
  */
@@ -696,7 +696,7 @@ VMMR3DECL(int) MMR3AdjustFixedReservation(PVM pVM, int32_t cDeltaFixedPages, con
  * This can be called before MMR3InitPaging.
  *
  * @returns VBox status code. Will set VM error on failure.
- * @param   pVM             The shared VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   cShadowPages    The new page count.
  */
 VMMR3DECL(int) MMR3UpdateShadowReservation(PVM pVM, uint32_t cShadowPages)
@@ -717,8 +717,8 @@ VMMR3DECL(int) MMR3UpdateShadowReservation(PVM pVM, uint32_t cShadowPages)
 /**
  * Convert HC Physical address to HC Virtual address.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   HCPhys      The host context virtual address.
  * @param   ppv         Where to store the resulting address.
  * @thread  The Emulation Thread.
@@ -793,7 +793,7 @@ VMMR3DECL(int) MMR3HCPhys2HCVirt(PVM pVM, RTHCPHYS HCPhys, void **ppv)
  * This usually means the size of the first contiguous block of physical memory.
  *
  * @returns The guest base RAM size.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @thread  Any.
  *
  * @deprecated
diff --git a/src/VBox/VMM/VMMR3/MMHeap.cpp b/src/VBox/VMM/VMMR3/MMHeap.cpp
index 6c33d32..edb5047 100644
--- a/src/VBox/VMM/VMMR3/MMHeap.cpp
+++ b/src/VBox/VMM/VMMR3/MMHeap.cpp
@@ -45,8 +45,8 @@ static void *mmR3HeapAlloc(PMMHEAP pHeap, MMTAG enmTag, size_t cbSize, bool fZer
 /**
  * Allocate and initialize a heap structure and it's associated substructures.
  *
- * @returns VBox status.
- * @param   pVM     The handle to the VM the heap should be associated with.
+ * @returns VBox status code.
+ * @param   pUVM    Pointer to the user mode VM structure.
  * @param   ppHeap  Where to store the heap pointer.
  */
 int mmR3HeapCreateU(PUVM pUVM, PMMHEAP *ppHeap)
@@ -109,7 +109,7 @@ void mmR3HeapDestroy(PMMHEAP pHeap)
     }
 
     /*
-     * Free the stat nodes.
+     * Free the stat nodes.                                                                     e
      */
     /** @todo free all nodes in a AVL tree. */
     RTMemFree(pHeap);
@@ -151,7 +151,7 @@ VMMR3DECL(void *) MMR3HeapAllocU(PUVM pUVM, MMTAG enmTag, size_t cbSize)
  * freed during the life of the VM.
  *
  * @returns Pointer to allocated memory.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      Statistics tag. Statistics are collected on a per tag
  *                      basis in addition to a global one. Thus we can easily
  *                      identify how memory is used by the VM. See MM_TAG_*.
@@ -191,7 +191,7 @@ VMMR3DECL(int) MMR3HeapAllocExU(PUVM pUVM, MMTAG enmTag, size_t cbSize, void **p
  * Same as MMR3HeapAlloc().
  *
  * @returns Pointer to allocated memory.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      Statistics tag. Statistics are collected on a per tag
  *                      basis in addition to a global one. Thus we can easily
  *                      identify how memory is used by the VM. See MM_TAG_*.
@@ -230,7 +230,7 @@ VMMR3DECL(void *) MMR3HeapAllocZU(PUVM pUVM, MMTAG enmTag, size_t cbSize)
  * Same as MMR3HeapAlloc() only the memory is zeroed.
  *
  * @returns Pointer to allocated memory.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      Statistics tag. Statistics are collected on a per tag
  *                      basis in addition to a global one. Thus we can easily
  *                      identify how memory is used by the VM. See MM_TAG_*.
@@ -270,7 +270,7 @@ VMMR3DECL(int) MMR3HeapAllocZExU(PUVM pUVM, MMTAG enmTag, size_t cbSize, void **
  * Same as MMR3HeapAllocZ().
  *
  * @returns Pointer to allocated memory.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      Statistics tag. Statistics are collected on a per tag
  *                      basis in addition to a global one. Thus we can easily
  *                      identify how memory is used by the VM. See MM_TAG_*.
@@ -539,7 +539,7 @@ VMMR3DECL(char *) MMR3HeapStrDupU(PUVM pUVM, MMTAG enmTag, const char *psz)
  *
  * @returns Pointer to the duplicate.
  * @returns NULL on failure or when input NULL.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      Statistics tag. Statistics are collected on a per tag
  *                      basis in addition to a global one. Thus we can easily
  *                      identify how memory is used by the VM. See MM_TAG_*.
@@ -555,7 +555,7 @@ VMMR3DECL(char *) MMR3HeapStrDup(PVM pVM, MMTAG enmTag, const char *psz)
  * Allocating string printf.
  *
  * @returns Pointer to the string.
- * @param   pVM         The VM
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      The statistics tag.
  * @param   pszFormat   The format string.
  * @param   ...         Format arguments.
@@ -593,7 +593,7 @@ VMMR3DECL(char *)    MMR3HeapAPrintfU(PUVM pUVM, MMTAG enmTag, const char *pszFo
  * Allocating string printf.
  *
  * @returns Pointer to the string.
- * @param   pVM         The VM
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      The statistics tag.
  * @param   pszFormat   The format string.
  * @param   va          Format arguments.
diff --git a/src/VBox/VMM/VMMR3/MMHyper.cpp b/src/VBox/VMM/VMMR3/MMHyper.cpp
index 9525c94..2c9732e 100644
--- a/src/VBox/VMM/VMMR3/MMHyper.cpp
+++ b/src/VBox/VMM/VMMR3/MMHyper.cpp
@@ -50,7 +50,7 @@ static DECLCALLBACK(void) mmR3HyperInfoHma(PVM pVM, PCDBGFINFOHLP pHlp, const ch
  * Determin the default heap size.
  *
  * @returns The heap size in bytes.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 static uint32_t mmR3HyperComputeHeapSize(PVM pVM)
 {
@@ -103,7 +103,7 @@ static uint32_t mmR3HyperComputeHeapSize(PVM pVM)
  * PGM is not initialized at this  point, PGM relies on
  * the heap to initialize.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  */
 int mmR3HyperInit(PVM pVM)
 {
@@ -189,7 +189,7 @@ int mmR3HyperInit(PVM pVM)
 /**
  * Cleans up the hypervisor heap.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  */
 int mmR3HyperTerm(PVM pVM)
 {
@@ -206,7 +206,7 @@ int mmR3HyperTerm(PVM pVM)
  * This is called later during init, most (all) HMA allocations should be done
  * by the time this function is called.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  */
 VMMR3DECL(int) MMR3HyperInitFinalize(PVM pVM)
 {
@@ -325,7 +325,7 @@ VMMR3DECL(int) MMR3HyperInitFinalize(PVM pVM)
  *
  * @returns true if the location is ok.
  * @returns false if another location should be found.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtrOld    The old virtual address.
  * @param   GCPtrNew    The new virtual address.
  * @param   enmMode     Used to indicate the callback mode.
@@ -389,7 +389,7 @@ static DECLCALLBACK(bool) mmR3HyperRelocateCallback(PVM pVM, RTGCPTR GCPtrOld, R
  * Service a VMMCALLRING3_MMHYPER_LOCK call.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(int) MMR3LockCall(PVM pVM)
 {
@@ -405,7 +405,7 @@ VMMR3DECL(int) MMR3LockCall(PVM pVM)
  *
  * @return VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvR3        Ring-3 address of the memory. Must be page aligned!
  * @param   pvR0        Optional ring-0 address of the memory.
  * @param   HCPhys      Host context physical address of the memory to be
@@ -460,7 +460,7 @@ VMMR3DECL(int) MMR3HyperMapHCPhys(PVM pVM, void *pvR3, RTR0PTR pvR0, RTHCPHYS HC
  *
  * @return VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      Guest context physical address of the memory to be mapped. Must be page aligned!
  * @param   cb          Size of the memory. Will be rounded up to nearest page.
  * @param   pszDesc     Mapping description.
@@ -529,7 +529,7 @@ VMMR3DECL(int) MMR3HyperMapGCPhys(PVM pVM, RTGCPHYS GCPhys, size_t cb, const cha
  *
  * @return VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDevIns     The device owning the MMIO2 memory.
  * @param   iRegion     The region.
  * @param   off         The offset into the region. Will be rounded down to closest page boundary.
@@ -610,7 +610,7 @@ VMMR3DECL(int) MMR3HyperMapMMIO2(PVM pVM, PPDMDEVINS pDevIns, uint32_t iRegion,
  *
  * @return VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvR3        The ring-3 address of the memory, must be page aligned.
  * @param   pvR0        The ring-0 address of the memory, must be page aligned. (optional)
  * @param   cPages      The number of pages.
@@ -692,7 +692,7 @@ VMMR3DECL(int) MMR3HyperMapPages(PVM pVM, void *pvR3, RTR0PTR pvR0, size_t cPage
  *
  * @return VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   cb          Size of the memory. Will be rounded up to nearest page.
  * @param   pszDesc     Mapping description.
  * @param   pGCPtr      Where to store the assigned GC address. Optional.
@@ -733,7 +733,7 @@ VMMR3DECL(int) MMR3HyperReserve(PVM pVM, unsigned cb, const char *pszDesc, PRTGC
  * Adds memory to the hypervisor memory arena.
  *
  * @return VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   cb          Size of the memory. Will be rounded up to nearest page.
  * @param   pszDesc     The description of the memory.
  * @param   pGCPtr      Where to store the GC address.
@@ -793,7 +793,7 @@ static int mmR3HyperMap(PVM pVM, const size_t cb, const char *pszDesc, PRTGCPTR
  * Allocates a new heap.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   cb          The size of the new heap.
  * @param   ppHeap      Where to store the heap pointer on successful return.
  * @param   pR0PtrHeap  Where to store the ring-0 address of the heap on
@@ -907,7 +907,7 @@ static int mmR3HyperHeapMap(PVM pVM, PMMHYPERHEAP pHeap, PRTGCPTR ppHeapGC)
  * The returned memory is of course zeroed.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   cb          Number of bytes to allocate.
  * @param   uAlignment  Required memory alignment in bytes.
  *                      Values are 0,8,16,32 and PAGE_SIZE.
@@ -934,7 +934,7 @@ VMMR3DECL(int) MMR3HyperAllocOnceNoRel(PVM pVM, size_t cb, unsigned uAlignment,
  * The returned memory is of course zeroed.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   cb          Number of bytes to allocate.
  * @param   uAlignment  Required memory alignment in bytes.
  *                      Values are 0,8,16,32 and PAGE_SIZE.
@@ -1080,7 +1080,7 @@ VMMR3DECL(int) MMR3HyperAllocOnceNoRelEx(PVM pVM, size_t cb, unsigned uAlignment
  * Lookus up a ring-3 pointer to HMA.
  *
  * @returns The lookup record on success, NULL on failure.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pvR3                The ring-3 address to look up.
  */
 DECLINLINE(PMMLOOKUPHYPER) mmR3HyperLookupR3(PVM pVM, void *pvR3)
@@ -1129,7 +1129,7 @@ DECLINLINE(PMMLOOKUPHYPER) mmR3HyperLookupR3(PVM pVM, void *pvR3)
  * Set / unset guard status on one or more hyper heap pages.
  *
  * @returns VBox status code (first failure).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pvStart             The hyper heap page address. Must be page
  *                              aligned.
  * @param   cb                  The number of bytes. Must be page aligned.
@@ -1176,7 +1176,7 @@ VMMR3DECL(int) MMR3HyperSetGuard(PVM pVM, void *pvStart, size_t cb, bool fSet)
  * Convert hypervisor HC virtual address to HC physical address.
  *
  * @returns HC physical address.
- * @param   pVM         Pointer to the VM
+ * @param   pVM         The cross context VM structure.
  * @param   pvR3        Host context virtual address.
  */
 VMMR3DECL(RTHCPHYS) MMR3HyperHCVirt2HCPhys(PVM pVM, void *pvR3)
@@ -1228,7 +1228,7 @@ VMMR3DECL(RTHCPHYS) MMR3HyperHCVirt2HCPhys(PVM pVM, void *pvR3)
  * Implements the hcphys-not-found return case of MMR3HyperQueryInfoFromHCPhys.
  *
  * @returns VINF_SUCCESS, VINF_BUFFER_OVERFLOW.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   HCPhys              The host physical address to look for.
  * @param   pLookup             The HMA lookup entry corresponding to HCPhys.
  * @param   pszWhat             Where to return the description.
@@ -1249,7 +1249,7 @@ static int mmR3HyperQueryInfoFromHCPhysFound(PVM pVM, RTHCPHYS HCPhys, PMMLOOKUP
  * Scans the HMA for the physical page and reports back a description if found.
  *
  * @returns VINF_SUCCESS, VINF_BUFFER_OVERFLOW, VERR_NOT_FOUND.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   HCPhys              The host physical address to look for.
  * @param   pszWhat             Where to return the description.
  * @param   cbWhat              Size of the return buffer.
@@ -1314,7 +1314,7 @@ VMMR3_INT_DECL(int) MMR3HyperQueryInfoFromHCPhys(PVM pVM, RTHCPHYS HCPhys, char
  * Convert hypervisor HC physical address to HC virtual address.
  *
  * @returns HC virtual address.
- * @param   pVM         Pointer to the VM
+ * @param   pVM         The cross context VM structure.
  * @param   HCPhys      Host context physical address.
  */
 VMMR3DECL(void *) MMR3HyperHCPhys2HCVirt(PVM pVM, RTHCPHYS HCPhys)
@@ -1331,8 +1331,8 @@ VMMR3DECL(void *) MMR3HyperHCPhys2HCVirt(PVM pVM, RTHCPHYS HCPhys)
 /**
  * Convert hypervisor HC physical address to HC virtual address.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   HCPhys      Host context physical address.
  * @param   ppv         Where to store the HC virtual address.
  */
@@ -1350,8 +1350,8 @@ VMMR3DECL(int)   MMR3HyperHCPhys2HCVirtEx(PVM pVM, RTHCPHYS HCPhys, void **ppv)
 /**
  * Read hypervisor memory from GC virtual address.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pvDst       Destination address (HC of course).
  * @param   GCPtr       GC virtual address.
  * @param   cb          Number of bytes to read.
@@ -1369,7 +1369,7 @@ VMMR3DECL(int) MMR3HyperReadGCVirt(PVM pVM, void *pvDst, RTGCPTR GCPtr, size_t c
 /**
  * Info handler for 'hma', it dumps the list of lookup records for the hypervisor memory area.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        Callback functions for doing output.
  * @param   pszArgs     Argument string. Optional and specific to the handler.
  */
@@ -1449,7 +1449,7 @@ static DECLCALLBACK(void) mmR3HyperInfoHma(PVM pVM, PCDBGFINFOHLP pHlp, const ch
  * Re-allocates memory from the hyper heap.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pvOld           The existing block of memory in the hyper heap to
  *                          re-allocate (can be NULL).
  * @param   cbOld           Size of the existing block.
diff --git a/src/VBox/VMM/VMMR3/MMPagePool.cpp b/src/VBox/VMM/VMMR3/MMPagePool.cpp
index c3e0676..163c58c 100644
--- a/src/VBox/VMM/VMMR3/MMPagePool.cpp
+++ b/src/VBox/VMM/VMMR3/MMPagePool.cpp
@@ -51,8 +51,8 @@ static void     mmR3PagePoolFree(PMMPAGEPOOL pPool, void *pv);
 /**
  * Initializes the page pool
  *
- * @return  VBox status.
- * @param   pVM     Pointer to the VM.
+ * @return  VBox status code.
+ * @param   pVM     The cross context VM structure.
  * @thread  The Emulation Thread.
  */
 int mmR3PagePoolInit(PVM pVM)
@@ -62,8 +62,8 @@ int mmR3PagePoolInit(PVM pVM)
     /*
      * Allocate the pool structures.
      */
-    /** @todo @bufref{1865}, at bufref{3202}: mapping the page pool page into
-     *        ring-0. Need to change the ways we allocate it... */
+    /** @todo @bugref{1865}, at bugref{3202}: mapping the page pool page into ring-0.
+     *        Need to change the ways we allocate it... */
     AssertReleaseReturn(sizeof(*pVM->mm.s.pPagePoolR3) + sizeof(*pVM->mm.s.pPagePoolLowR3) < PAGE_SIZE, VERR_INTERNAL_ERROR);
     int rc = SUPR3PageAllocEx(1, 0 /*fFlags*/, (void **)&pVM->mm.s.pPagePoolR3, NULL /*pR0Ptr*/, NULL /*paPages*/);
     if (RT_FAILURE(rc))
@@ -104,7 +104,7 @@ int mmR3PagePoolInit(PVM pVM)
 /**
  * Release all locks and free the allocated memory.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @thread  The Emulation Thread.
  */
 void mmR3PagePoolTerm(PVM pVM)
@@ -389,7 +389,7 @@ DECLINLINE(void) mmR3PagePoolFree(PMMPAGEPOOL pPool, void *pv)
  *
  * @returns Pointer to the allocated page page.
  * @returns NULL on failure.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @thread  The Emulation Thread.
  */
 VMMR3DECL(void *) MMR3PageAlloc(PVM pVM)
@@ -408,7 +408,7 @@ VMMR3DECL(void *) MMR3PageAlloc(PVM pVM)
  *
  * @returns Pointer to the allocated page page.
  * @returns NIL_RTHCPHYS on failure.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @thread  The Emulation Thread.
  */
 VMMR3DECL(RTHCPHYS) MMR3PageAllocPhys(PVM pVM)
@@ -426,7 +426,7 @@ VMMR3DECL(RTHCPHYS) MMR3PageAllocPhys(PVM pVM)
  * Frees a page allocated from the page pool by MMR3PageAlloc() or
  * MMR3PageAllocPhys().
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvPage      Pointer to the page.
  * @thread  The Emulation Thread.
  */
@@ -441,7 +441,7 @@ VMMR3DECL(void) MMR3PageFree(PVM pVM, void *pvPage)
  *
  * @returns Pointer to the allocated page.
  * @returns NULL on failure.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @thread  The Emulation Thread.
  */
 VMMR3DECL(void *) MMR3PageAllocLow(PVM pVM)
@@ -453,7 +453,7 @@ VMMR3DECL(void *) MMR3PageAllocLow(PVM pVM)
 /**
  * Frees a page allocated from the page pool by MMR3PageAllocLow().
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvPage      Pointer to the page.
  * @thread  The Emulation Thread.
  */
@@ -468,7 +468,7 @@ VMMR3DECL(void) MMR3PageFreeLow(PVM pVM, void *pvPage)
  * This works for pages allocated by MMR3PageAlloc(), MMR3PageAllocPhys()
  * and MMR3PageAllocLow().
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   HCPhysPage  The physical address of the page to be freed.
  * @thread  The Emulation Thread.
  */
@@ -491,7 +491,7 @@ VMMR3DECL(void) MMR3PageFreeByPhys(PVM pVM, RTHCPHYS HCPhysPage)
  * from doing really bad things to the system.
  *
  * @returns Pointer to the dummy page.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @thread  The Emulation Thread.
  */
 VMMR3DECL(void *) MMR3PageDummyHCPtr(PVM pVM)
@@ -515,7 +515,7 @@ VMMR3DECL(void *) MMR3PageDummyHCPtr(PVM pVM)
  * from doing really bad things to the system.
  *
  * @returns Pointer to the dummy page.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @thread  The Emulation Thread.
  */
 VMMR3DECL(RTHCPHYS) MMR3PageDummyHCPhys(PVM pVM)
diff --git a/src/VBox/VMM/VMMR3/MMUkHeap.cpp b/src/VBox/VMM/VMMR3/MMUkHeap.cpp
index 0ffc30b..3701aa0 100644
--- a/src/VBox/VMM/VMMR3/MMUkHeap.cpp
+++ b/src/VBox/VMM/VMMR3/MMUkHeap.cpp
@@ -47,8 +47,8 @@ static void *mmR3UkHeapAlloc(PMMUKHEAP pHeap, MMTAG enmTag, size_t cb, bool fZer
  * This does not require SUPLib to be initialized as we'll lazily allocate the
  * kernel accessible memory on the first alloc call.
  *
- * @returns VBox status.
- * @param   pVM     The handle to the VM the heap should be associated with.
+ * @returns VBox status code.
+ * @param   pUVM    Pointer to the user mode VM structure.
  * @param   ppHeap  Where to store the heap pointer.
  */
 int mmR3UkHeapCreateU(PUVM pUVM, PMMUKHEAP *ppHeap)
@@ -124,7 +124,7 @@ void mmR3UkHeapDestroy(PMMUKHEAP pHeap)
  * freed during the life of the VM.
  *
  * @returns Pointer to allocated memory.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      Statistics tag. Statistics are collected on a per tag
  *                      basis in addition to a global one. Thus we can easily
  *                      identify how memory is used by the VM.
@@ -141,7 +141,7 @@ VMMR3DECL(void *) MMR3UkHeapAlloc(PVM pVM, MMTAG enmTag, size_t cbSize, PRTR0PTR
  * Same as MMR3UkHeapAlloc().
  *
  * @returns Pointer to allocated memory.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      Statistics tag. Statistics are collected on a per tag
  *                      basis in addition to a global one. Thus we can easily
  *                      identify how memory is used by the VM.
@@ -165,7 +165,7 @@ VMMR3DECL(int) MMR3UkHeapAllocEx(PVM pVM, MMTAG enmTag, size_t cbSize, void **pp
  * Same as MMR3UkHeapAlloc() only the memory is zeroed.
  *
  * @returns Pointer to allocated memory.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      Statistics tag. Statistics are collected on a per tag
  *                      basis in addition to a global one. Thus we can easily
  *                      identify how memory is used by the VM.
@@ -182,7 +182,7 @@ VMMR3DECL(void *) MMR3UkHeapAllocZ(PVM pVM, MMTAG enmTag, size_t cbSize, PRTR0PT
  * Same as MMR3UkHeapAllocZ().
  *
  * @returns Pointer to allocated memory.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmTag      Statistics tag. Statistics are collected on a per tag
  *                      basis in addition to a global one. Thus we can easily
  *                      identify how memory is used by the VM.
@@ -375,8 +375,9 @@ static void *mmR3UkHeapAlloc(PMMUKHEAP pHeap, MMTAG enmTag, size_t cb, bool fZer
 /**
  * Releases memory allocated with MMR3UkHeapAlloc() and MMR3UkHeapAllocZ()
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pv          Pointer to the memory block to free.
+ * @param   enmTag      The allocation accounting tag.
  */
 VMMR3DECL(void) MMR3UkHeapFree(PVM pVM, void *pv, MMTAG enmTag)
 {
diff --git a/src/VBox/VMM/VMMR3/PATM.cpp b/src/VBox/VMM/VMMR3/PATM.cpp
index 0e9ccca..eb5c061 100644
--- a/src/VBox/VMM/VMMR3/PATM.cpp
+++ b/src/VBox/VMM/VMMR3/PATM.cpp
@@ -134,7 +134,7 @@ static unsigned int cIDTHandlersDisabled = 0;
  * Initializes the PATM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) PATMR3Init(PVM pVM)
 {
@@ -334,7 +334,7 @@ VMMR3_INT_DECL(int) PATMR3Init(PVM pVM)
  * Finalizes HMA page attributes.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) PATMR3InitFinalize(PVM pVM)
 {
@@ -384,7 +384,7 @@ VMMR3_INT_DECL(int) PATMR3InitFinalize(PVM pVM)
 /**
  * (Re)initializes PATM
  *
- * @param   pVM     The VM.
+ * @param   pVM     The cross context VM structure.
  */
 static int patmReinit(PVM pVM)
 {
@@ -494,7 +494,7 @@ static int patmReinit(PVM pVM)
  *
  * The PATM will update the addresses used by the switcher.
  *
- * @param   pVM         The VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    The relocation delta.
  */
 VMMR3_INT_DECL(void) PATMR3Relocate(PVM pVM, RTRCINTPTR offDelta)
@@ -550,7 +550,7 @@ VMMR3_INT_DECL(void) PATMR3Relocate(PVM pVM, RTRCINTPTR offDelta)
  * the VM it self is at this point powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) PATMR3Term(PVM pVM)
 {
@@ -568,7 +568,7 @@ VMMR3_INT_DECL(int) PATMR3Term(PVM pVM)
  * PATM reset callback.
  *
  * @returns VBox status code.
- * @param   pVM     The VM which is reset.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) PATMR3Reset(PVM pVM)
 {
@@ -982,7 +982,7 @@ static DECLCALLBACK(int) patmR3RelocatePatches(PAVLOU32NODECORE pNode, void *pPa
  *
  * @returns 0 (continue enumeration).
  * @param   pNode       Current node
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static DECLCALLBACK(int) EnableAllPatches(PAVLOU32NODECORE pNode, void *pVM)
 {
@@ -1000,7 +1000,7 @@ static DECLCALLBACK(int) EnableAllPatches(PAVLOU32NODECORE pNode, void *pVM)
  *
  * @returns 0 (continue enumeration).
  * @param   pNode       Current node
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static DECLCALLBACK(int) DisableAllPatches(PAVLOU32NODECORE pNode, void *pVM)
 {
@@ -1016,7 +1016,7 @@ static DECLCALLBACK(int) DisableAllPatches(PAVLOU32NODECORE pNode, void *pVM)
  * Returns the host context pointer of the GC context structure
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(PPATMGCSTATE) PATMR3QueryGCStateHC(PVM pVM)
 {
@@ -1065,7 +1065,7 @@ VMMR3DECL(bool) PATMR3IsEnabled(PUVM pUVM)
  * Convert a GC patch block pointer to a HC patch pointer
  *
  * @returns HC pointer or NULL if it's not a GC patch pointer
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pAddrGC     GC pointer
  */
 VMMR3_INT_DECL(void *) PATMR3GCPtrToHCPtr(PVM pVM, RTRCPTR pAddrGC)
@@ -1087,7 +1087,7 @@ VMMR3_INT_DECL(void *) PATMR3GCPtrToHCPtr(PVM pVM, RTRCPTR pAddrGC)
  * Convert guest context address to host context pointer
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCacheRec   Address conversion cache record
  * @param   pGCPtr      Guest context pointer
  *
@@ -1138,7 +1138,7 @@ R3PTRTYPE(uint8_t *) patmR3GCVirtToHCVirt(PVM pVM, PPATMP2GLOOKUPREC pCacheRec,
  * Calculates and fills in all branch targets
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Current patch block pointer
  *
  */
@@ -1234,7 +1234,7 @@ static int patmr3SetBranchTargets(PVM pVM, PPATCHINFO pPatch)
 /**
  * Add an illegal instruction record
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPatch          Patch structure ptr
  * @param   pInstrGC        Guest context pointer to privileged instruction
  *
@@ -1266,7 +1266,7 @@ static bool patmIsIllegalInstr(PPATCHINFO pPatch, RTRCPTR pInstrGC)
 /**
  * Add a patch to guest lookup record
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPatch          Patch structure ptr
  * @param   pPatchInstrHC   Guest context pointer to patch block
  * @param   pInstrGC        Guest context pointer to privileged instruction
@@ -1334,7 +1334,7 @@ void patmR3AddP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, uint8_t *pPatchInstrHC
 /**
  * Removes a patch to guest lookup record
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPatch          Patch structure ptr
  * @param   pPatchInstrGC   Guest context pointer to patch block
  */
@@ -1378,7 +1378,7 @@ static DECLCALLBACK(int) patmEmptyTreePVCallback(PAVLPVNODECORE pNode, void *)
 /**
  * Empty the specified tree (PV tree, MMR3 heap)
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   ppTree          Tree to empty
  */
 static void patmEmptyTree(PVM pVM, PAVLPVNODECORE *ppTree)
@@ -1400,7 +1400,7 @@ static DECLCALLBACK(int) patmEmptyTreeU32Callback(PAVLU32NODECORE pNode, void *)
 /**
  * Empty the specified tree (U32 tree, MMR3 heap)
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   ppTree          Tree to empty
  */
 static void patmEmptyTreeU32(PVM pVM, PPAVLU32NODECORE ppTree)
@@ -1414,7 +1414,7 @@ static void patmEmptyTreeU32(PVM pVM, PPAVLU32NODECORE ppTree)
  * Analyses the instructions following the cli for compliance with our heuristics for cli & pushf
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpu        CPU disassembly state
  * @param   pInstrGC    Guest context pointer to privileged instruction
  * @param   pCurInstrGC Guest context pointer to the current instruction
@@ -1582,7 +1582,7 @@ static int patmAnalyseBlockCallback(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_
  * Analyses the instructions inside a function for compliance
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpu        CPU disassembly state
  * @param   pInstrGC    Guest context pointer to privileged instruction
  * @param   pCurInstrGC Guest context pointer to the current instruction
@@ -1693,7 +1693,7 @@ static int patmAnalyseFunctionCallback(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uin
  * Recompiles the instructions in a code block
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpu        CPU disassembly state
  * @param   pInstrGC    Guest context pointer to privileged instruction
  * @param   pCurInstrGC Guest context pointer to the current instruction
@@ -2139,7 +2139,7 @@ end:
 /**
  * Add a disasm jump record (temporary for prevent duplicate analysis)
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPatch          Patch structure ptr
  * @param   pInstrGC        Guest context pointer to privileged instruction
  *
@@ -2178,7 +2178,7 @@ static bool patmIsKnownDisasmJump(PPATCHINFO pPatch, RTRCPTR pInstrGC)
  * For proper disassembly of the final patch block
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpu        CPU disassembly state
  * @param   pInstrGC    Guest context pointer to privileged instruction
  * @param   pCurInstrGC Guest context pointer to the current instruction
@@ -2237,7 +2237,7 @@ DECLCALLBACK(int) patmR3DisasmCallback(PVM pVM, DISCPUSTATE *pCpu, RCPTRTYPE(uin
  * Disassembles the code stream until the callback function detects a failure or decides everything is acceptable
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context pointer to the initial privileged instruction
  * @param   pCurInstrGC Guest context pointer to the current instruction
  * @param   pfnPATMR3Disasm Callback for testing the disassembled instruction
@@ -2363,7 +2363,7 @@ end:
  * Disassembles the code stream until the callback function detects a failure or decides everything is acceptable
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context pointer to the initial privileged instruction
  * @param   pCurInstrGC Guest context pointer to the current instruction
  * @param   pfnPATMR3Disasm Callback for testing the disassembled instruction
@@ -2386,7 +2386,7 @@ int patmr3DisasmCodeStream(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uin
  * Detects it the specified address falls within a 5 byte jump generated for an active patch.
  * If so, this patch is permanently disabled.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context pointer to instruction
  * @param   pConflictGC Guest context pointer to check
  *
@@ -2406,7 +2406,7 @@ VMMR3_INT_DECL(int) PATMR3DetectConflict(PVM pVM, RTRCPTR pInstrGC, RTRCPTR pCon
  * Recompile the code stream until the callback function detects a failure or decides everything is acceptable
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context pointer to privileged instruction
  * @param   pCurInstrGC Guest context pointer to the current instruction
  * @param   pfnPATMR3Recompile Callback for testing the disassembled instruction
@@ -2603,9 +2603,10 @@ end:
  * Generate the jump from guest to patch code
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pCacheRec   Guest translation lookup cache record
+ * @param   fAddFixup   Whether to add a fixup record.
  */
 static int patmGenJumpToPatch(PVM pVM, PPATCHINFO pPatch, PPATMP2GLOOKUPREC pCacheRec, bool fAddFixup = true)
 {
@@ -2695,7 +2696,7 @@ static int patmGenJumpToPatch(PVM pVM, PPATCHINFO pPatch, PPATMP2GLOOKUPREC pCac
  * Remove the jump from guest to patch code
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  */
 static int patmRemoveJumpToPatch(PVM pVM, PPATCHINFO pPatch)
@@ -2746,10 +2747,12 @@ static int patmRemoveJumpToPatch(PVM pVM, PPATCHINFO pPatch)
  * Generate the call from guest to patch code
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
- * @param   pInstrHC    HC address where to insert the jump
+ * @param   pTargetGC   The target of the fixup (i.e. the patch code we're
+ *                      calling into).
  * @param   pCacheRec   Guest translation cache record
+ * @param   fAddFixup   Whether to add a fixup record.
  */
 static int patmGenCallToPatch(PVM pVM, PPATCHINFO pPatch, RTRCPTR pTargetGC, PPATMP2GLOOKUPREC pCacheRec, bool fAddFixup = true)
 {
@@ -2790,7 +2793,7 @@ static int patmGenCallToPatch(PVM pVM, PPATCHINFO pPatch, RTRCPTR pTargetGC, PPA
  * Patch cli/sti pushf/popf instruction block at specified location
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to privileged instruction
  * @param   pInstrHC    Host context point to privileged instruction
  * @param   uOpcode     Instruction opcode
@@ -3024,7 +3027,7 @@ failure:
  * Patch IDT handler
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to privileged instruction
  * @param   uOpSize     Size of starting instruction
  * @param   pPatchRec   Patch record
@@ -3155,7 +3158,7 @@ failure:
  * Install a trampoline to call a guest trap handler directly
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to privileged instruction
  * @param   pPatchRec   Patch record
  * @param   pCacheRec   Cache record ptr
@@ -3236,7 +3239,7 @@ failure:
  * Check if the instruction is patched as a common idt handler
  *
  * @returns true or false
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to the instruction
  *
  */
@@ -3256,7 +3259,7 @@ static bool patmIsCommonIDTHandlerPatch(PVM pVM, RTRCPTR pInstrGC)
  * Duplicates a complete function
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to privileged instruction
  * @param   pPatchRec   Patch record
  * @param   pCacheRec   Cache record ptr
@@ -3388,7 +3391,7 @@ failure:
  * Creates trampoline code to jump inside an existing patch
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to privileged instruction
  * @param   pPatchRec   Patch record
  *
@@ -3552,7 +3555,7 @@ failure:
  * (in responds to a VINF_PATM_DUPLICATE_FUNCTION GC exit reason)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        Pointer to the guest CPU context.
  *
  */
@@ -3634,7 +3637,7 @@ VMMR3_INT_DECL(int) PATMR3DuplicateFunctionRequest(PVM pVM, PCPUMCTX pCtx)
  * Replaces a function call by a call to an existing function duplicate (or jmp -> jmp)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpu        Disassembly CPU structure ptr
  * @param   pInstrGC    Guest context point to privileged instruction
  * @param   pCacheRec   Cache record ptr
@@ -3736,7 +3739,7 @@ failure:
  * Replace the address in an MMIO instruction with the cached version.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to privileged instruction
  * @param   pCpu        Disassembly CPU structure ptr
  * @param   pCacheRec   Cache record ptr
@@ -3803,7 +3806,7 @@ failure:
  * Replace the address in an MMIO instruction with the cached version. (instruction is part of an existing patch)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to privileged instruction
  * @param   pPatch      Patch record
  *
@@ -3861,7 +3864,7 @@ static int patmPatchPATMMMIOInstr(PVM pVM, RTRCPTR pInstrGC, PPATCHINFO pPatch)
  * Activates an int3 patch
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  */
 static int patmActivateInt3Patch(PVM pVM, PPATCHINFO pPatch)
@@ -3885,7 +3888,7 @@ static int patmActivateInt3Patch(PVM pVM, PPATCHINFO pPatch)
  * Deactivates an int3 patch
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  */
 static int patmDeactivateInt3Patch(PVM pVM, PPATCHINFO pPatch)
@@ -3907,7 +3910,7 @@ static int patmDeactivateInt3Patch(PVM pVM, PPATCHINFO pPatch)
  * in the raw-mode context.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to privileged instruction
  * @param   pInstrHC    Host context point to privileged instruction
  * @param   pCpu        Disassembly CPU structure ptr
@@ -3953,7 +3956,7 @@ failure:
  * Patch a jump instruction at specified location
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context point to privileged instruction
  * @param   pInstrHC    Host context point to privileged instruction
  * @param   pCpu        Disassembly CPU structure ptr
@@ -4078,8 +4081,8 @@ failure:
  * Gives hint to PATM about supervisor guest instructions
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pInstr      Guest context point to privileged instruction
+ * @param   pVM         The cross context VM structure.
+ * @param   pInstrGC    Guest context point to privileged instruction
  * @param   flags       Patch flags
  */
 VMMR3_INT_DECL(int) PATMR3AddHint(PVM pVM, RTRCPTR pInstrGC, uint32_t flags)
@@ -4095,8 +4098,9 @@ VMMR3_INT_DECL(int) PATMR3AddHint(PVM pVM, RTRCPTR pInstrGC, uint32_t flags)
  * Patch privileged instruction at specified location
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pInstr      Guest context point to privileged instruction (0:32 flat address)
+ * @param   pVM         The cross context VM structure.
+ * @param   pInstrGC    Guest context point to privileged instruction (0:32 flat
+ *                      address)
  * @param   flags       Patch flags
  *
  * @note    returns failure if patching is not allowed or possible
@@ -4594,7 +4598,7 @@ VMMR3_INT_DECL(int) PATMR3InstallPatch(PVM pVM, RTRCPTR pInstrGC, uint64_t flags
  * Query instruction size
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pInstrGC    Instruction address
  */
@@ -4622,7 +4626,7 @@ static uint32_t patmGetInstrSize(PVM pVM, PPATCHINFO pPatch, RTRCPTR pInstrGC)
  * Add patch to page record
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       Page address
  * @param   pPatch      Patch record
  */
@@ -4748,7 +4752,7 @@ int patmAddPatchToPage(PVM pVM, RTRCUINTPTR pPage, PPATCHINFO pPatch)
  * Remove patch from page record
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       Page address
  * @param   pPatch      Patch record
  */
@@ -4809,7 +4813,7 @@ int patmRemovePatchFromPage(PVM pVM, RTRCUINTPTR pPage, PPATCHINFO pPatch)
  * Insert page records for all guest pages that contain instructions that were recompiled for this patch
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  */
 int patmInsertPatchPages(PVM pVM, PPATCHINFO pPatch)
@@ -4843,7 +4847,7 @@ int patmInsertPatchPages(PVM pVM, PPATCHINFO pPatch)
  * Remove page records for all guest pages that contain instructions that were recompiled for this patch
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  */
 static int patmRemovePatchPages(PVM pVM, PPATCHINFO pPatch)
@@ -4876,7 +4880,7 @@ static int patmRemovePatchPages(PVM pVM, PPATCHINFO pPatch)
  * Notifies PATM about a (potential) write to code that has been patched.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       GC pointer to write address
  * @param   cbWrite     Nr of bytes to write
  *
@@ -5051,7 +5055,7 @@ invalid_write_loop_start:
  * Disable all patches in a flushed page
  *
  * @returns VBox status code
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   addr        GC address of the page to flush
  * @note    Currently only called by CSAMR3FlushPage; optimization to avoid
  *          having to double check if the physical address has changed
@@ -5087,7 +5091,7 @@ VMMR3_INT_DECL(int) PATMR3FlushPage(PVM pVM, RTRCPTR addr)
  * Checks if the instructions at the specified address has been patched already.
  *
  * @returns boolean, patched or not
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context pointer to instruction
  */
 VMMR3_INT_DECL(bool) PATMR3HasBeenPatched(PVM pVM, RTRCPTR pInstrGC)
@@ -5104,7 +5108,7 @@ VMMR3_INT_DECL(bool) PATMR3HasBeenPatched(PVM pVM, RTRCPTR pInstrGC)
  * Query the opcode of the original code that was overwritten by the 5 bytes patch jump
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    GC address of instr
  * @param   pByte       opcode byte pointer (OUT)
  *
@@ -5148,7 +5152,7 @@ VMMR3DECL(int) PATMR3QueryOpcode(PVM pVM, RTRCPTR pInstrGC, uint8_t *pByte)
  * bytes patch jump.
  *
  * @returns VINF_SUCCESS or VERR_PATCH_NOT_FOUND.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtrInstr  GC address of instr
  * @param   pbDst       The output buffer.
  * @param   cbToRead    The maximum number bytes to read.
@@ -5207,8 +5211,8 @@ VMMR3_INT_DECL(int) PATMR3ReadOrgInstr(PVM pVM, RTGCPTR32 GCPtrInstr, uint8_t *p
  * Disable patch for privileged instruction at specified location
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pInstr      Guest context point to privileged instruction
+ * @param   pVM         The cross context VM structure.
+ * @param   pInstrGC    Guest context point to privileged instruction
  *
  * @note    returns failure if patching is not allowed or possible
  *
@@ -5355,8 +5359,8 @@ VMMR3_INT_DECL(int) PATMR3DisablePatch(PVM pVM, RTRCPTR pInstrGC)
  * Permanently disable patch for privileged instruction at specified location
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pInstr      Guest context instruction pointer
+ * @param   pVM         The cross context VM structure.
+ * @param   pInstrGC    Guest context instruction pointer
  * @param   pConflictAddr  Guest context pointer which conflicts with specified patch
  * @param   pConflictPatch Conflicting patch
  *
@@ -5454,8 +5458,8 @@ static int patmDisableUnusablePatch(PVM pVM, RTRCPTR pInstrGC, RTRCPTR pConflict
  * Enable patch for privileged instruction at specified location
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pInstr      Guest context point to privileged instruction
+ * @param   pVM         The cross context VM structure.
+ * @param   pInstrGC    Guest context point to privileged instruction
  *
  * @note    returns failure if patching is not allowed or possible
  *
@@ -5576,7 +5580,7 @@ VMMR3_INT_DECL(int) PATMR3EnablePatch(PVM pVM, RTRCPTR pInstrGC)
  * Remove patch for privileged instruction at specified location
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPatchRec       Patch record
  * @param   fForceRemove    Remove *all* patches
  */
@@ -5683,7 +5687,7 @@ static DECLCALLBACK(int) patmR3PatchRefreshFindTrampolinePatch(PAVLU32NODECORE p
  * Attempt to refresh the patch by recompiling its entire code block
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPatchRec       Patch record
  */
 int patmR3RefreshPatch(PVM pVM, PPATMPATCHREC pPatchRec)
@@ -5834,10 +5838,10 @@ failure:
  * Find patch for privileged instruction at specified location
  *
  * @returns Patch structure pointer if found; else NULL
- * @param   pVM           Pointer to the VM.
- * @param   pInstr        Guest context point to instruction that might lie within 5 bytes of an existing patch jump
+ * @param   pVM           The cross context VM structure.
+ * @param   pInstrGC      Guest context point to instruction that might lie
+ *                        within 5 bytes of an existing patch jump
  * @param   fIncludeHints Include hinted patches or not
- *
  */
 PPATCHINFO patmFindActivePatchByEntrypoint(PVM pVM, RTRCPTR pInstrGC, bool fIncludeHints)
 {
@@ -5871,7 +5875,7 @@ PPATCHINFO patmFindActivePatchByEntrypoint(PVM pVM, RTRCPTR pInstrGC, bool fIncl
  * Checks whether the GC address is inside a generated patch jump
  *
  * @returns true -> yes, false -> no
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pAddr       Guest context address.
  * @param   pPatchAddr  Guest context patch address (if true).
  */
@@ -5900,8 +5904,8 @@ VMMR3_INT_DECL(bool) PATMR3IsInsidePatchJump(PVM pVM, RTRCPTR pAddr, PRTGCPTR32
  * Remove patch for privileged instruction at specified location
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pInstr      Guest context point to privileged instruction
+ * @param   pVM         The cross context VM structure.
+ * @param   pInstrGC    Guest context point to privileged instruction
  *
  * @note    returns failure if patching is not allowed or possible
  *
@@ -5928,7 +5932,7 @@ VMMR3_INT_DECL(int) PATMR3RemovePatch(PVM pVM, RTRCPTR pInstrGC)
  * Mark patch as dirty
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  *
  * @note    returns failure if patching is not allowed or possible
@@ -5970,7 +5974,7 @@ static int patmR3MarkDirtyPatch(PVM pVM, PPATCHINFO pPatch)
  * Query the corresponding GC instruction pointer from a pointer inside the patch block itself
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch block structure pointer
  * @param   pPatchGC    GC address in patch block
  */
@@ -5989,7 +5993,7 @@ RTRCPTR patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t
  * Converts Guest code GC ptr to Patch code GC ptr (if found)
  *
  * @returns corresponding GC pointer in patch block
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Current patch block pointer
  * @param   pInstrGC    Guest context pointer to privileged instruction
  *
@@ -6010,7 +6014,7 @@ RTRCPTR patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t
  * Converts Guest code GC ptr to Patch code GC ptr (if found)
  *
  * @returns corresponding GC pointer in patch block
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    Guest context pointer to privileged instruction
  */
 static RTRCPTR patmR3GuestGCPtrToPatchGCPtrSimple(PVM pVM, RCPTRTYPE(uint8_t*) pInstrGC)
@@ -6026,7 +6030,7 @@ static RTRCPTR patmR3GuestGCPtrToPatchGCPtrSimple(PVM pVM, RCPTRTYPE(uint8_t*) p
  * identical match)
  *
  * @returns corresponding GC pointer in patch block
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Current patch block pointer
  * @param   pInstrGC    Guest context pointer to privileged instruction
  *
@@ -6043,7 +6047,7 @@ RTRCPTR patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(
  * Query the corresponding GC instruction pointer from a pointer inside the patch block itself
  *
  * @returns original GC instruction pointer or 0 if not found
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatchGC    GC address in patch block
  * @param   pEnmState   State of the translated address (out)
  *
@@ -6112,7 +6116,7 @@ VMMR3_INT_DECL(RTRCPTR) PATMR3PatchToGCPtr(PVM pVM, RTRCPTR pPatchGC, PATMTRANSS
  * Returns the GC pointer of the patch for the specified GC address
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pAddrGC     Guest context address
  */
 VMMR3_INT_DECL(RTRCPTR) PATMR3QueryPatchGCPtr(PVM pVM, RTRCPTR pAddrGC)
@@ -6133,7 +6137,7 @@ VMMR3_INT_DECL(RTRCPTR) PATMR3QueryPatchGCPtr(PVM pVM, RTRCPTR pAddrGC)
  * Attempt to recover dirty instructions
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pCtx                Pointer to the guest CPU context.
  * @param   pPatch              Patch record.
  * @param   pPatchToGuestRec    Patch to guest address record.
@@ -6360,7 +6364,7 @@ static int patmR3HandleDirtyInstr(PVM pVM, PCPUMCTX pCtx, PPATMPATCHREC pPatch,
  * Handle trap inside patch code
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtx        Pointer to the guest CPU context.
  * @param   pEip        GC pointer of trapping instruction.
  * @param   ppNewEip    GC pointer to new instruction.
@@ -6658,7 +6662,7 @@ VMMR3_INT_DECL(int) PATMR3HandleTrap(PVM pVM, PCPUMCTX pCtx, RTRCPTR pEip, RTGCP
  * Handle page-fault in monitored page
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) PATMR3HandleMonitoredPage(PVM pVM)
 {
@@ -6767,7 +6771,7 @@ static const char *PATMPatchState(PVM pVM, PPATCHINFO pPatch)
 
 /**
  * Resets the sample.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    The sample registered using STAMR3RegisterCallback.
  */
 static void patmResetStat(PVM pVM, void *pvSample)
@@ -6782,7 +6786,7 @@ static void patmResetStat(PVM pVM, void *pvSample)
 /**
  * Prints the sample into the buffer.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    The sample registered using STAMR3RegisterCallback.
  * @param   pszBuf      The buffer to print into.
  * @param   cchBuf      The size of the buffer.
@@ -6804,7 +6808,7 @@ static void patmPrintStat(PVM pVM, void *pvSample, char *pszBuf, size_t cchBuf)
  * Returns the GC address of the corresponding patch statistics counter
  *
  * @returns Stat address
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  */
 RTRCPTR patmPatchQueryStatAddress(PVM pVM, PPATCHINFO pPatch)
@@ -6817,14 +6821,7 @@ RTRCPTR patmPatchQueryStatAddress(PVM pVM, PPATCHINFO pPatch)
 #ifdef VBOX_WITH_DEBUGGER
 
 /**
- * The '.patmoff' command.
- *
- * @returns VBox status.
- * @param   pCmd        Pointer to the command descriptor (as registered).
- * @param   pCmdHlp     Pointer to command helper functions.
- * @param   pVM         Pointer to the current VM (if any).
- * @param   paArgs      Pointer to (readonly) array of arguments.
- * @param   cArgs       Number of arguments in the array.
+ * @callback_method_impl{FNDBGCCMD, The '.patmoff' command.}
  */
 static DECLCALLBACK(int) patmr3CmdOff(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -6845,14 +6842,7 @@ static DECLCALLBACK(int) patmr3CmdOff(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM
 }
 
 /**
- * The '.patmon' command.
- *
- * @returns VBox status.
- * @param   pCmd        Pointer to the command descriptor (as registered).
- * @param   pCmdHlp     Pointer to command helper functions.
- * @param   pVM         Pointer to the current VM (if any).
- * @param   paArgs      Pointer to (readonly) array of arguments.
- * @param   cArgs       Number of arguments in the array.
+ * @callback_method_impl{FNDBGCCMD, The '.patmon' command.}
  */
 static DECLCALLBACK(int) patmr3CmdOn(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs)
 {
@@ -6873,3 +6863,4 @@ static DECLCALLBACK(int) patmr3CmdOn(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM p
 }
 
 #endif /* VBOX_WITH_DEBUGGER */
+
diff --git a/src/VBox/VMM/VMMR3/PATMGuest.cpp b/src/VBox/VMM/VMMR3/PATMGuest.cpp
index b38dba3..b5aefc6 100644
--- a/src/VBox/VMM/VMMR3/PATMGuest.cpp
+++ b/src/VBox/VMM/VMMR3/PATMGuest.cpp
@@ -81,7 +81,7 @@ static uint8_t uFnOpenBSDHandlerPrefix2[6] = { 0x0E, 0x56, 0x6A, 0x00, 0x6A, 0x0
  * Check Windows XP sysenter heuristics and install patch
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pInstrGC    GC Instruction pointer for sysenter
  * @param   pPatchRec   Patch structure
  *
@@ -170,7 +170,7 @@ int PATMPatchSysenterXP(PVM pVM, RTGCPTR32 pInstrGC, PPATMPATCHREC pPatchRec)
  * Patch OpenBSD interrupt handler prefix
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpu        Disassembly state of instruction.
  * @param   pInstrGC    GC Instruction pointer for instruction
  * @param   pInstrHC    GC Instruction pointer for instruction
@@ -202,11 +202,10 @@ int PATMPatchOpenBSDHandlerPrefix(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR32 pInstrGC
  * Install guest OS specific patch
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpu        Disassembly state of instruction.
  * @param   pInstrGC    GC Instruction pointer for instruction
  * @param   pInstrHC    GC Instruction pointer for instruction
- * @param   pCallerGC   GC address of caller; CODE32_UNKNOWN_CALLER if unknown
  * @param   pPatchRec   Patch structure
  *
  */
diff --git a/src/VBox/VMM/VMMR3/PATMPatch.cpp b/src/VBox/VMM/VMMR3/PATMPatch.cpp
index 7c1d332..6e1b5e8 100644
--- a/src/VBox/VMM/VMMR3/PATMPatch.cpp
+++ b/src/VBox/VMM/VMMR3/PATMPatch.cpp
@@ -811,7 +811,7 @@ int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR pCur
  * Generate indirect jump to unknown destination
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pCpu        Disassembly state
  * @param   pCurInstrGC Current instruction address
@@ -882,7 +882,7 @@ int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR pCur
  * Generate return instruction
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  * @param   pCpu        Disassembly struct
  * @param   pCurInstrGC Current instruction pointer
@@ -942,7 +942,7 @@ int patmPatchGenRet(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uin
  * Generate all global patm functions
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  *
  */
@@ -989,7 +989,7 @@ int patmPatchGenGlobalFunctions(PVM pVM, PPATCHINFO pPatch)
  * Generate illegal instruction (int 3)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  *
  */
@@ -1007,7 +1007,7 @@ int patmPatchGenIllegalInstr(PVM pVM, PPATCHINFO pPatch)
  * Check virtual IF flag and jump back to original guest code if set
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  * @param   pCurInstrGC Guest context pointer to the current instruction
  *
@@ -1032,7 +1032,7 @@ int patmPatchGenCheckIF(PVM pVM, PPATCHINFO pPatch, RTRCPTR pCurInstrGC)
  * Set PATM interrupt flag
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  * @param   pInstrGC    Corresponding guest instruction
  *
@@ -1053,7 +1053,7 @@ int patmPatchGenSetPIF(PVM pVM, PPATCHINFO pPatch, RTRCPTR pInstrGC)
  * Clear PATM interrupt flag
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  * @param   pInstrGC    Corresponding guest instruction
  *
@@ -1075,7 +1075,7 @@ int patmPatchGenClearPIF(PVM pVM, PPATCHINFO pPatch, RTRCPTR pInstrGC)
  * Clear PATM inhibit irq flag
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPatch          Patch structure
  * @param   pNextInstrGC    Next guest instruction
  */
@@ -1103,7 +1103,7 @@ int patmPatchGenClearInhibitIRQ(PVM pVM, PPATCHINFO pPatch, RTRCPTR pNextInstrGC
  * Generate an interrupt handler entrypoint
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pIntHandlerGC IDT handler address
  *
@@ -1142,7 +1142,7 @@ int patmPatchGenIntEntry(PVM pVM, PPATCHINFO pPatch, RTRCPTR pIntHandlerGC)
  * Generate a trap handler entrypoint
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pTrapHandlerGC  IDT handler address
  */
@@ -1352,7 +1352,7 @@ int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR
  * Generate an sldt or str patch instruction
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pCpu        Disassembly state
  * @param   pCurInstrGC Guest instruction address
@@ -1453,7 +1453,7 @@ int patmPatchGenSldtStr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR p
  * Generate an sgdt or sidt patch instruction
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pCpu        Disassembly state
  * @param   pCurInstrGC Guest instruction address
@@ -1548,7 +1548,7 @@ int patmPatchGenSxDT(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR pCur
  * Generate a cpuid patch instruction
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pCurInstrGC Guest instruction address
  */
@@ -1568,9 +1568,9 @@ int patmPatchGenCpuid(PVM pVM, PPATCHINFO pPatch, RTRCPTR pCurInstrGC)
  * Generate the jump from guest to patch code
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pPatch      Patch record
- * @param   pTargetGC   Guest target jump
+ * @param   pVM                 The cross context VM structure.
+ * @param   pPatch              Patch record
+ * @param   pReturnAddrGC       Guest code target of the jump.
  * @param   fClearInhibitIRQs   Clear inhibit irq flag
  */
 int patmPatchGenJumpToGuest(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pReturnAddrGC, bool fClearInhibitIRQs)
diff --git a/src/VBox/VMM/VMMR3/PATMPatch.h b/src/VBox/VMM/VMMR3/PATMPatch.h
index a3d75fb..eac3303 100644
--- a/src/VBox/VMM/VMMR3/PATMPatch.h
+++ b/src/VBox/VMM/VMMR3/PATMPatch.h
@@ -48,7 +48,7 @@ int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTRCPTR pCurInstrGC, RCPTR
  * Generate indirect jump to unknown destination
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pCpu        Disassembly state
  * @param   pCurInstrGC Current instruction address
@@ -59,7 +59,7 @@ int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR pCur
  * Generate a trap handler entrypoint
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pTrapHandlerGC  IDT handler address
  */
@@ -69,7 +69,7 @@ int patmPatchGenTrapEntry(PVM pVM, PPATCHINFO pPatch, RTRCPTR pTrapHandlerGC);
  * Generate an interrupt handler entrypoint
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch record
  * @param   pIntHandlerGC IDT handler address
  */
@@ -79,10 +79,10 @@ int patmPatchGenIntEntry(PVM pVM, PPATCHINFO pPatch, RTRCPTR pIntHandlerGC);
  * Generate the jump from guest to patch code
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pPatch      Patch record
- * @param   pTargetGC   Guest target jump
- * @param   fClearInhibitIRQs   Clear inhibit irq flag
+ * @param   pVM                 The cross context VM structure.
+ * @param   pPatch              Patch record.
+ * @param   pReturnAddrGC       Guest code target of the jump.
+ * @param   fClearInhibitIRQs   Clear inhibit irq flag.
  */
 int patmPatchGenJumpToGuest(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pReturnAddrGC, bool fClearInhibitIRQs = false);
 
@@ -90,7 +90,7 @@ int patmPatchGenJumpToGuest(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pRe
  * Generate illegal instruction (int 3)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  *
  */
@@ -100,7 +100,7 @@ int patmPatchGenIllegalInstr(PVM pVM, PPATCHINFO pPatch);
  * Set PATM interrupt flag
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  * @param   pInstrGC    Corresponding guest instruction
  *
@@ -111,7 +111,7 @@ int patmPatchGenSetPIF(PVM pVM, PPATCHINFO pPatch, RTRCPTR pInstrGC);
  * Clear PATM interrupt flag
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  * @param   pInstrGC    Corresponding guest instruction
  *
@@ -122,7 +122,7 @@ int patmPatchGenClearPIF(PVM pVM, PPATCHINFO pPatch, RTRCPTR pInstrGC);
  * Clear PATM inhibit irq flag
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pPatch          Patch structure
  * @param   pNextInstrGC    Next guest instruction
  */
@@ -132,7 +132,7 @@ int patmPatchGenClearInhibitIRQ(PVM pVM, PPATCHINFO pPatch, RTRCPTR pNextInstrGC
  * Check virtual IF flag and jump back to original guest code if set
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  * @param   pCurInstrGC Guest context pointer to the current instruction
  *
@@ -143,7 +143,7 @@ int patmPatchGenCheckIF(PVM pVM, PPATCHINFO pPatch, RTRCPTR pCurInstrGC);
  * Generate all global patm functions
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatch      Patch structure
  *
  */
diff --git a/src/VBox/VMM/VMMR3/PATMR3Dbg.cpp b/src/VBox/VMM/VMMR3/PATMR3Dbg.cpp
index cbf4b9c..1e08e07 100644
--- a/src/VBox/VMM/VMMR3/PATMR3Dbg.cpp
+++ b/src/VBox/VMM/VMMR3/PATMR3Dbg.cpp
@@ -59,7 +59,7 @@
 /**
  * Called by PATMR3Init.
  *
- * @param   pVM                 The cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  */
 void patmR3DbgInit(PVM pVM)
 {
@@ -70,7 +70,7 @@ void patmR3DbgInit(PVM pVM)
 /**
  * Called by PATMR3Term.
  *
- * @param   pVM                 The cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  */
 void patmR3DbgTerm(PVM pVM)
 {
@@ -85,7 +85,7 @@ void patmR3DbgTerm(PVM pVM)
 /**
  * Called by when the patch memory is reinitialized.
  *
- * @param   pVM                 The cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  */
 void patmR3DbgReset(PVM pVM)
 {
@@ -172,7 +172,7 @@ static size_t patmR3DbgDescribePatchAsSymbol(PPATMPATCHREC pPatchRec, char *pszN
 /**
  * Called when a new patch is added or when first populating the address space.
  *
- * @param   pVM                 The cross context VM structure.
+ * @param   pVM                The cross context VM structure.
  * @param   pPatchRec           The patch record.
  */
 void patmR3DbgAddPatch(PVM pVM, PPATMPATCHREC pPatchRec)
@@ -220,8 +220,8 @@ void patmR3DbgAddPatch(PVM pVM, PPATMPATCHREC pPatchRec)
  * Enumeration callback used by patmR3DbgAddPatches
  *
  * @returns 0 (continue enum)
- * @param   pNode               The patch record node.
- * @param   pvUser              The cross context VM structure.
+ * @param   pNode       The patch record node.
+ * @param   pvUser      The cross context VM structure.
  */
 static DECLCALLBACK(int) patmR3DbgAddPatchCallback(PAVLOU32NODECORE pNode, void *pvUser)
 {
@@ -233,8 +233,8 @@ static DECLCALLBACK(int) patmR3DbgAddPatchCallback(PAVLOU32NODECORE pNode, void
 /**
  * Populates an empty "patches" (hDbgModPatchMem) module with patch symbols.
  *
- * @param   pVM                 The cross context VM structure.
- * @param   hDbgMod             The debug module handle.
+ * @param   pVM         The cross context VM structure.
+ * @param   hDbgMod     The debug module handle.
  */
 static void patmR3DbgAddPatches(PVM pVM, RTDBGMOD hDbgMod)
 {
@@ -262,8 +262,8 @@ static void patmR3DbgAddPatches(PVM pVM, RTDBGMOD hDbgMod)
  * Called by dbgfR3AsLazyPopulate when DBGF_AS_RC or DBGF_AS_RC_AND_GC_GLOBAL is
  * accessed for the first time.
  *
- * @param   pVM                 The cross context VM structure.
- * @param   hDbgAs              The DBGF_AS_RC address space handle.
+ * @param   pVM         The cross context VM structure.
+ * @param   hDbgAs      The DBGF_AS_RC address space handle.
  */
 VMMR3_INT_DECL(void) PATMR3DbgPopulateAddrSpace(PVM pVM, RTDBGAS hDbgAs)
 {
@@ -294,7 +294,7 @@ VMMR3_INT_DECL(void) PATMR3DbgPopulateAddrSpace(PVM pVM, RTDBGAS hDbgAs)
         ADD_MEMBER(hDbgMod, PATMGCSTATE, Restore.eFlags,            "Restore.eFlags");
         ADD_MEMBER(hDbgMod, PATMGCSTATE, Restore.uFlags,            "Restore.uFlags");
 
-        rc = RTDbgAsModuleLink(hDbgAs, hDbgMod, pVM->patm.s.pGCStateGC, 0 /*fFlags/*/);
+        rc = RTDbgAsModuleLink(hDbgAs, hDbgMod, pVM->patm.s.pGCStateGC, 0 /*fFlags*/);
         AssertLogRelRC(rc);
         RTDbgModRelease(hDbgMod);
     }
@@ -308,7 +308,7 @@ VMMR3_INT_DECL(void) PATMR3DbgPopulateAddrSpace(PVM pVM, RTDBGAS hDbgAs)
     {
         ADD_FUNC(hDbgMod, pVM->patm.s.pStatsGC, pVM->patm.s.pStatsGC, PATM_STAT_MEMSIZE, "PATMMemStatsStart");
 
-        rc = RTDbgAsModuleLink(hDbgAs, hDbgMod, pVM->patm.s.pStatsGC, 0 /*fFlags/*/);
+        rc = RTDbgAsModuleLink(hDbgAs, hDbgMod, pVM->patm.s.pStatsGC, 0 /*fFlags*/);
         AssertLogRelRC(rc);
         RTDbgModRelease(hDbgMod);
     }
@@ -322,7 +322,7 @@ VMMR3_INT_DECL(void) PATMR3DbgPopulateAddrSpace(PVM pVM, RTDBGAS hDbgAs)
         pVM->patm.s.hDbgModPatchMem = hDbgMod;
         patmR3DbgAddPatches(pVM, hDbgMod);
 
-        rc = RTDbgAsModuleLink(hDbgAs, hDbgMod, pVM->patm.s.pPatchMemGC, 0 /*fFlags/*/);
+        rc = RTDbgAsModuleLink(hDbgAs, hDbgMod, pVM->patm.s.pPatchMemGC, 0 /*fFlags*/);
         AssertLogRelRC(rc);
     }
 }
@@ -331,14 +331,13 @@ VMMR3_INT_DECL(void) PATMR3DbgPopulateAddrSpace(PVM pVM, RTDBGAS hDbgAs)
 /**
  * Annotates an instruction if patched.
  *
- * @param   pVM                 The VM handle.
- * @param   RCPtr               The instruction address.
- * @param   cbInstr             The instruction length.
- * @param   pszBuf              The output buffer.  This will be an empty string
- *                              if the instruction wasn't patched.  If it's
- *                              patched, it will hold a symbol-like string
- *                              describing the patch.
- * @param   cbBuf               The size of the output buffer.
+ * @param   pVM         The cross context VM structure.
+ * @param   RCPtr       The instruction address.
+ * @param   cbInstr     The instruction length.
+ * @param   pszBuf      The output buffer.  This will be an empty string if the
+ *                      instruction wasn't patched.  If it's patched, it will
+ *                      hold a symbol-like string describing the patch.
+ * @param   cbBuf       The size of the output buffer.
  */
 VMMR3_INT_DECL(void) PATMR3DbgAnnotatePatchedInstruction(PVM pVM, RTRCPTR RCPtr, uint8_t cbInstr, char *pszBuf, size_t cbBuf)
 {
diff --git a/src/VBox/VMM/VMMR3/PATMSSM.cpp b/src/VBox/VMM/VMMR3/PATMSSM.cpp
index bf7ee2f..f1b1e0d 100644
--- a/src/VBox/VMM/VMMR3/PATMSSM.cpp
+++ b/src/VBox/VMM/VMMR3/PATMSSM.cpp
@@ -742,7 +742,7 @@ static DECLCALLBACK(int) patmSavePatchState(PAVLOU32NODECORE pNode, void *pvUser
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 DECLCALLBACK(int) patmR3Save(PVM pVM, PSSMHANDLE pSSM)
@@ -811,7 +811,7 @@ DECLCALLBACK(int) patmR3Save(PVM pVM, PSSMHANDLE pSSM)
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion        Data layout version.
  * @param   uPass           The data pass.
@@ -1112,7 +1112,7 @@ DECLCALLBACK(int) patmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32
  * Correct fixups to predefined hypervisor PATM regions. (their addresses might have changed)
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   uVersion        Saved state version.
  * @param   patmInfo        Saved PATM structure
  * @param   pPatch          Patch record
diff --git a/src/VBox/VMM/VMMR3/PDM.cpp b/src/VBox/VMM/VMMR3/PDM.cpp
index e570bb7..b179f0e 100644
--- a/src/VBox/VMM/VMMR3/PDM.cpp
+++ b/src/VBox/VMM/VMMR3/PDM.cpp
@@ -18,6 +18,8 @@
 
 /** @page   pg_pdm      PDM - The Pluggable Device & Driver Manager
  *
+ * The PDM handles devices and their drivers in a flexible and dynamic manner.
+ *
  * VirtualBox is designed to be very configurable, i.e. the ability to select
  * virtual devices and configure them uniquely for a VM.  For this reason
  * virtual devices are not statically linked with the VMM but loaded, linked and
@@ -356,7 +358,7 @@ VMMR3_INT_DECL(int) PDMR3InitUVM(PUVM pUVM)
  * Initializes the PDM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) PDMR3Init(PVM pVM)
 {
@@ -445,7 +447,7 @@ VMMR3_INT_DECL(int) PDMR3Init(PVM pVM)
  * component. This function will be called at init and
  * whenever the VMM need to relocate it self inside the GC.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  * @remark  The loader subcomponent is relocated by PDMR3LdrRelocate() very
  *          early in the relocation phase.
@@ -583,7 +585,7 @@ VMMR3_INT_DECL(void) PDMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
 /**
  * Worker for pdmR3Term that terminates a LUN chain.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pLun        The head of the chain.
  * @param   pszDevice   The name of the device (for logging).
  * @param   iInstance   The device instance number (for logging).
@@ -628,7 +630,7 @@ static void pdmR3TermLuns(PVM pVM, PPDMLUN pLun, const char *pszDevice, unsigned
  * the VM it self is at this point powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) PDMR3Term(PVM pVM)
 {
@@ -768,7 +770,7 @@ VMMR3_INT_DECL(void) PDMR3TermUVM(PUVM pUVM)
 /**
  * Bits that are saved in pass 0 and in the final pass.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The saved state handle.
  */
 static void pdmR3SaveBoth(PVM pVM, PSSMHANDLE pSSM)
@@ -792,7 +794,7 @@ static void pdmR3SaveBoth(PVM pVM, PSSMHANDLE pSSM)
  * Live save.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The saved state handle.
  * @param   uPass           The pass.
  */
@@ -809,7 +811,7 @@ static DECLCALLBACK(int) pdmR3LiveExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass)
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The saved state handle.
  */
 static DECLCALLBACK(int) pdmR3SaveExec(PVM pVM, PSSMHANDLE pSSM)
@@ -840,7 +842,7 @@ static DECLCALLBACK(int) pdmR3SaveExec(PVM pVM, PSSMHANDLE pSSM)
  * This will dispatch pending operations and clear the FFs governed by PDM and its devices.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pSSM        The SSM handle.
  */
 static DECLCALLBACK(int) pdmR3LoadPrep(PVM pVM, PSSMHANDLE pSSM)
@@ -885,7 +887,7 @@ static DECLCALLBACK(int) pdmR3LoadPrep(PVM pVM, PSSMHANDLE pSSM)
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion        Data layout version.
  * @param   uPass           The data pass.
@@ -1148,7 +1150,7 @@ DECLINLINE(int) pdmR3PowerOnDev(PPDMDEVINS pDevIns)
  * This function will notify all the devices and their
  * attached drivers about the VM now being powered on.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(void) PDMR3PowerOn(PVM pVM)
 {
@@ -1307,7 +1309,7 @@ static void pdmR3NotifyAsyncLog(PPDMNOTIFYASYNCSTATS pThis)
  * Wait for events and process pending requests.
  *
  * @param   pThis               The asynchronous notifification stats.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 static void pdmR3NotifyAsyncWaitAndProcessRequests(PPDMNOTIFYASYNCSTATS pThis, PVM pVM)
 {
@@ -1454,7 +1456,7 @@ DECLINLINE(void) pdmR3ResetDev(PPDMDEVINS pDevIns, PPDMNOTIFYASYNCSTATS pAsync)
  *
  * Used by PDMR3Reset and CPU hot plugging.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  */
 VMMR3_INT_DECL(void) PDMR3ResetCpu(PVMCPU pVCpu)
 {
@@ -1469,7 +1471,7 @@ VMMR3_INT_DECL(void) PDMR3ResetCpu(PVMCPU pVCpu)
  * This function will notify all the devices and their attached drivers about
  * the VM now being reset.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(void) PDMR3Reset(PVM pVM)
 {
@@ -1561,7 +1563,7 @@ VMMR3_INT_DECL(void) PDMR3Reset(PVM pVM)
  * This function will tell all the devices to setup up their memory structures
  * after VM construction and after VM reset.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   fAtReset    Indicates the context, after reset if @c true or after
  *                      construction if @c false.
  */
@@ -1730,7 +1732,7 @@ DECLINLINE(void) pdmR3SuspendDev(PPDMDEVINS pDevIns, PPDMNOTIFYASYNCSTATS pAsync
  * This function will notify all the devices and their attached drivers about
  * the VM now being suspended.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @thread  EMT(0)
  */
 VMMR3_INT_DECL(void) PDMR3Suspend(PVM pVM)
@@ -1892,7 +1894,7 @@ DECLINLINE(int) pdmR3ResumeDev(PPDMDEVINS pDevIns)
  * This function will notify all the devices and their
  * attached drivers about the VM now being resumed.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(void) PDMR3Resume(PVM pVM)
 {
@@ -2093,7 +2095,7 @@ DECLINLINE(void) pdmR3PowerOffDev(PPDMDEVINS pDevIns, PPDMNOTIFYASYNCSTATS pAsyn
  * This function will notify all the devices and their
  * attached drivers about the VM being powered off.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(void) PDMR3PowerOff(PVM pVM)
 {
@@ -2381,7 +2383,7 @@ VMMR3DECL(int) PDMR3QueryDriverOnLun(PUVM pUVM, const char *pszDevice, unsigned
  * Executes pending DMA transfers.
  * Forced Action handler.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR3DECL(void) PDMR3DmaRun(PVM pVM)
 {
@@ -2405,7 +2407,7 @@ VMMR3DECL(void) PDMR3DmaRun(PVM pVM)
  * Service a VMMCALLRING3_PDM_LOCK call.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) PDMR3LockCall(PVM pVM)
 {
@@ -2417,7 +2419,7 @@ VMMR3_INT_DECL(int) PDMR3LockCall(PVM pVM)
  * Registers the VMM device heap
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          The physical address.
  * @param   pvHeap          Ring-3 pointer.
  * @param   cbSize          Size of the heap.
@@ -2439,7 +2441,7 @@ VMMR3_INT_DECL(int) PDMR3VmmDevHeapRegister(PVM pVM, RTGCPHYS GCPhys, RTR3PTR pv
  * Unregisters the VMM device heap
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          The physical address.
  */
 VMMR3_INT_DECL(int) PDMR3VmmDevHeapUnregister(PVM pVM, RTGCPHYS GCPhys)
@@ -2459,9 +2461,9 @@ VMMR3_INT_DECL(int) PDMR3VmmDevHeapUnregister(PVM pVM, RTGCPHYS GCPhys)
  * Allocates memory from the VMM device heap
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   cbSize          Allocation size.
- * @param   pv              Ring-3 pointer. (out)
+ * @param   ppv             Ring-3 pointer. (out)
  */
 VMMR3_INT_DECL(int) PDMR3VmmDevHeapAlloc(PVM pVM, size_t cbSize, RTR3PTR *ppv)
 {
@@ -2485,7 +2487,7 @@ VMMR3_INT_DECL(int) PDMR3VmmDevHeapAlloc(PVM pVM, size_t cbSize, RTR3PTR *ppv)
  * Frees memory from the VMM device heap
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pv              Ring-3 pointer.
  */
 VMMR3_INT_DECL(int) PDMR3VmmDevHeapFree(PVM pVM, RTR3PTR pv)
@@ -2503,7 +2505,7 @@ VMMR3_INT_DECL(int) PDMR3VmmDevHeapFree(PVM pVM, RTR3PTR pv)
  * matches a device or driver name and applies the tracing config change.
  *
  * @returns VINF_SUCCESS or VERR_NOT_FOUND.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pszName             The tracing config group name.  This is NULL if
  *                              the operation applies to every device and
  *                              driver.
@@ -2639,7 +2641,7 @@ VMMR3_INT_DECL(int) PDMR3TracingConfig(PVM pVM, const char *pszName, size_t cchN
  * and USB device have the same tracing settings.
  *
  * @returns true / false.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   fEnabled            The tracing setting to check for.
  */
 VMMR3_INT_DECL(bool) PDMR3TracingAreAll(PVM pVM, bool fEnabled)
@@ -2715,7 +2717,7 @@ static int pdmR3TracingAdd(char **ppszDst, size_t *pcbDst, bool fSpace, const ch
  * or disabled.
  *
  * @returns VINF_SUCCESS or VERR_BUFFER_OVERFLOW
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pszConfig           Where to store the config spec.
  * @param   cbConfig            The size of the output buffer.
  */
@@ -2792,7 +2794,7 @@ bool pdmR3IsValidName(const char *pszName)
 /**
  * Info handler for 'pdmtracingids'.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The output helpers.
  * @param   pszArgs     The optional user arguments.
  *
diff --git a/src/VBox/VMM/VMMR3/PDMAsyncCompletion.cpp b/src/VBox/VMM/VMMR3/PDMAsyncCompletion.cpp
index 517accc..615a7f2 100644
--- a/src/VBox/VMM/VMMR3/PDMAsyncCompletion.cpp
+++ b/src/VBox/VMM/VMMR3/PDMAsyncCompletion.cpp
@@ -157,9 +157,10 @@ static void pdmR3AsyncCompletionPutTask(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, P
 /**
  * Internal worker for the creation apis
  *
- * @returns VBox status.
- * @param   pVM           Pointer to the VM.
- * @param   ppTemplate    Where to store the template handle.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
+ * @param   ppTemplate      Where to store the template handle.
+ * @param   enmType         Async completion template type (dev, drv, usb, int).
  */
 static int pdmR3AsyncCompletionTemplateCreate(PVM pVM, PPPDMASYNCCOMPLETIONTEMPLATE ppTemplate,
                                               PDMASYNCCOMPLETIONTEMPLATETYPE enmType)
@@ -202,7 +203,7 @@ static int pdmR3AsyncCompletionTemplateCreate(PVM pVM, PPPDMASYNCCOMPLETIONTEMPL
  * The template is used when creating new completion tasks.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         The device instance.
  * @param   ppTemplate      Where to store the template pointer on success.
  * @param   pfnCompleted    The completion callback routine.
@@ -247,7 +248,7 @@ int pdmR3AsyncCompletionTemplateCreateDevice(PVM pVM, PPDMDEVINS pDevIns, PPPDMA
  * The template is used when creating new completion tasks.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDrvIns         The driver instance.
  * @param   ppTemplate      Where to store the template pointer on success.
  * @param   pfnCompleted    The completion callback routine.
@@ -293,7 +294,7 @@ int pdmR3AsyncCompletionTemplateCreateDriver(PVM pVM, PPDMDRVINS pDrvIns, PPPDMA
  * The template is used when creating new completion tasks.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pUsbIns         The USB device instance.
  * @param   ppTemplate      Where to store the template pointer on success.
  * @param   pfnCompleted    The completion callback routine.
@@ -337,7 +338,7 @@ int pdmR3AsyncCompletionTemplateCreateUsb(PVM pVM, PPDMUSBINS pUsbIns, PPPDMASYN
  * The template is used when creating new completion tasks.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   ppTemplate      Where to store the template pointer on success.
  * @param   pfnCompleted    The completion callback routine.
  * @param   pvUser2         The 2nd user argument for the callback.
@@ -438,7 +439,7 @@ VMMR3DECL(int) PDMR3AsyncCompletionTemplateDestroy(PPDMASYNCCOMPLETIONTEMPLATE p
  * @retval  VINF_SUCCESS on success.
  * @retval  VERR_PDM_ASYNC_TEMPLATE_BUSY if one or more of the templates are still in use.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         The device instance.
  */
 int pdmR3AsyncCompletionTemplateDestroyDevice(PVM pVM, PPDMDEVINS pDevIns)
@@ -488,7 +489,7 @@ int pdmR3AsyncCompletionTemplateDestroyDevice(PVM pVM, PPDMDEVINS pDevIns)
  * @retval  VINF_SUCCESS on success.
  * @retval  VERR_PDM_ASYNC_TEMPLATE_BUSY if one or more of the templates are still in use.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDrvIns         The driver instance.
  */
 int pdmR3AsyncCompletionTemplateDestroyDriver(PVM pVM, PPDMDRVINS pDrvIns)
@@ -538,7 +539,7 @@ int pdmR3AsyncCompletionTemplateDestroyDriver(PVM pVM, PPDMDRVINS pDrvIns)
  * @retval  VINF_SUCCESS on success.
  * @retval  VERR_PDM_ASYNC_TEMPLATE_BUSY if one or more of the templates are still in use.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pUsbIns         The USB device instance.
  */
 int pdmR3AsyncCompletionTemplateDestroyUsb(PVM pVM, PPDMUSBINS pUsbIns)
@@ -815,9 +816,9 @@ void pdmR3AsyncCompletionCompleteTask(PPDMASYNCCOMPLETIONTASK pTask, int rc, boo
  * Worker initializing a endpoint class.
  *
  * @returns VBox status code.
- * @param   pVM        Pointer to the shared VM instance data.
- * @param   pEpClass   Pointer to the endpoint class structure.
- * @param   pCfgHandle Pointer to the CFGM tree.
+ * @param   pVM         The cross context VM structure.
+ * @param   pEpClassOps Pointer to the endpoint class structure.
+ * @param   pCfgHandle  Pointer to the CFGM tree.
  */
 int pdmR3AsyncCompletionEpClassInit(PVM pVM, PCPDMASYNCCOMPLETIONEPCLASSOPS pEpClassOps, PCFGMNODE pCfgHandle)
 {
@@ -1230,7 +1231,7 @@ static void pdmR3AsyncCompletionStatisticsDeregister(PPDMASYNCCOMPLETIONENDPOINT
  * Initialize the async completion manager.
  *
  * @returns VBox status code
- * @param   pVM Pointer to the VM.
+ * @param   pVM The cross context VM structure.
  */
 int pdmR3AsyncCompletionInit(PVM pVM)
 {
@@ -1251,7 +1252,7 @@ int pdmR3AsyncCompletionInit(PVM pVM)
  * Terminates the async completion manager.
  *
  * @returns VBox status code
- * @param   pVM Pointer to the VM.
+ * @param   pVM The cross context VM structure.
  */
 int pdmR3AsyncCompletionTerm(PVM pVM)
 {
@@ -1270,7 +1271,7 @@ int pdmR3AsyncCompletionTerm(PVM pVM)
  * Resume worker for the async completion manager.
  *
  * @returns nothing.
- * @param   pVM Pointer to the VM.
+ * @param   pVM The cross context VM structure.
  */
 void pdmR3AsyncCompletionResume(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/PDMAsyncCompletionFile.cpp b/src/VBox/VMM/VMMR3/PDMAsyncCompletionFile.cpp
index b3f0fbc..7392eea 100644
--- a/src/VBox/VMM/VMMR3/PDMAsyncCompletionFile.cpp
+++ b/src/VBox/VMM/VMMR3/PDMAsyncCompletionFile.cpp
@@ -508,7 +508,8 @@ int pdmacFileAioMgrCreate(PPDMASYNCCOMPLETIONEPCLASSFILE pEpClass, PPPDMACEPFILE
  * Destroys a async I/O manager.
  *
  * @returns nothing.
- * @param   pAioMgr    The async I/O manager to destroy.
+ * @param   pEpClassFile    Pointer to globals for the file endpoint class.
+ * @param   pAioMgr         The async I/O manager to destroy.
  */
 static void pdmacFileAioMgrDestroy(PPDMASYNCCOMPLETIONEPCLASSFILE pEpClassFile, PPDMACEPFILEMGR pAioMgr)
 {
diff --git a/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileNormal.cpp b/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileNormal.cpp
index 7cd0ba4..24d605b 100644
--- a/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileNormal.cpp
+++ b/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileNormal.cpp
@@ -433,8 +433,9 @@ DECLINLINE(bool) pdmacFileAioMgrNormalRcIsFatal(int rcReq)
  * Error handler which will create the failsafe managers and destroy the failed I/O manager.
  *
  * @returns VBox status code
- * @param   pAioMgr    The I/O manager the error occurred on.
- * @param   rc         The error code.
+ * @param   pAioMgr     The I/O manager the error occurred on.
+ * @param   rc          The error code.
+ * @param   SRC_POS     The source location of the error (use RT_SRC_POS).
  */
 static int pdmacFileAioMgrNormalErrorHandler(PPDMACEPFILEMGR pAioMgr, int rc, RT_SRC_POS_DECL)
 {
@@ -1604,8 +1605,8 @@ static void pdmacFileAioMgrNormalReqCompleteRc(PPDMACEPFILEMGR pAioMgr, RTFILEAI
  * The normal I/O manager using the RTFileAio* API
  *
  * @returns VBox status code.
- * @param hThreadSelf   Handle of the thread.
- * @param pvUser        Opaque user data.
+ * @param   hThreadSelf Handle of the thread.
+ * @param   pvUser      Opaque user data.
  */
 DECLCALLBACK(int) pdmacFileAioMgrNormal(RTTHREAD hThreadSelf, void *pvUser)
 {
diff --git a/src/VBox/VMM/VMMR3/PDMBlkCache.cpp b/src/VBox/VMM/VMMR3/PDMBlkCache.cpp
index 3031e36..a977570 100644
--- a/src/VBox/VMM/VMMR3/PDMBlkCache.cpp
+++ b/src/VBox/VMM/VMMR3/PDMBlkCache.cpp
@@ -310,11 +310,13 @@ static void pdmBlkCacheDestroyList(PPDMBLKLRULIST pList)
  * @param    pCache           Pointer to the global cache data.
  * @param    cbData           The amount of the data to free.
  * @param    pListSrc         The source list to evict data from.
- * @param    pGhostListSrc    The ghost list removed entries should be moved to
- *                            NULL if the entry should be freed.
- * @param    fReuseBuffer     Flag whether a buffer should be reused if it has the same size
- * @param    ppbBuf           Where to store the address of the buffer if an entry with the
- *                            same size was found and fReuseBuffer is true.
+ * @param    pGhostListDst    Where the ghost list removed entries should be
+ *                            moved to, NULL if the entry should be freed.
+ * @param    fReuseBuffer     Flag whether a buffer should be reused if it has
+ *                            the same size
+ * @param    ppbBuffer        Where to store the address of the buffer if an
+ *                            entry with the same size was found and
+ *                            fReuseBuffer is true.
  *
  * @note    This function may return fewer bytes than requested because entries
  *          may be marked as non evictable if they are used for I/O at the
@@ -592,16 +594,16 @@ static int pdmBlkCacheEntryWriteToMedium(PPDMBLKCACHEENTRY pEntry)
 }
 
 /**
- * Passthrough a part of a request directly to the I/O manager
- * handling the endpoint.
+ * Passthrough a part of a request directly to the I/O manager handling the
+ * endpoint.
  *
  * @returns VBox status code.
- * @param   pEndpoint          The endpoint.
- * @param   pTask              The task.
- * @param   pIoMemCtx          The I/O memory context to use.
- * @param   offStart           Offset to start transfer from.
- * @param   cbData             Amount of data to transfer.
- * @param   enmTransferType    The transfer type (read/write)
+ * @param   pBlkCache       The endpoint cache.
+ * @param   pReq            The request.
+ * @param   pSgBuf          The scatter/gather buffer.
+ * @param   offStart        Offset to start transfer from.
+ * @param   cbData          Amount of data to transfer.
+ * @param   enmXferDir      The transfer type (read/write)
  */
 static int pdmBlkCacheRequestPassthrough(PPDMBLKCACHE pBlkCache, PPDMBLKCACHEREQ pReq,
                                          PRTSGBUF pSgBuf, uint64_t offStart, size_t cbData,
@@ -1416,7 +1418,7 @@ static DECLCALLBACK(int) pdmBlkCacheEntryDestroy(PAVLRU64NODECORE pNode, void *p
  * Destroys all cache resources used by the given endpoint.
  *
  * @returns nothing.
- * @param    pEndpoint    The endpoint to the destroy.
+ * @param   pBlkCache       Block cache handle.
  */
 VMMR3DECL(void) PDMR3BlkCacheRelease(PPDMBLKCACHE pBlkCache)
 {
@@ -1563,12 +1565,11 @@ static PPDMBLKCACHEENTRY pdmBlkCacheGetCacheEntryByOffset(PPDMBLKCACHE pBlkCache
  *
  * @returns nothing.
  * @param   pBlkCache    The endpoint cache.
- * @param   off               The offset.
- * @param   pEntryAbove       Where to store the pointer to the best fit entry above the
- *                            the given offset. NULL if not required.
+ * @param   off          The offset.
+ * @param   ppEntryAbove Where to store the pointer to the best fit entry above
+ *                       the the given offset. NULL if not required.
  */
-static void pdmBlkCacheGetCacheBestFitEntryByOffset(PPDMBLKCACHE pBlkCache, uint64_t off,
-                                                    PPDMBLKCACHEENTRY *ppEntryAbove)
+static void pdmBlkCacheGetCacheBestFitEntryByOffset(PPDMBLKCACHE pBlkCache, uint64_t off, PPDMBLKCACHEENTRY *ppEntryAbove)
 {
     STAM_PROFILE_ADV_START(&pBlkCache->pCache->StatTreeGet, Cache);
 
@@ -1607,8 +1608,7 @@ static void pdmBlkCacheInsertEntry(PPDMBLKCACHE pBlkCache, PPDMBLKCACHEENTRY pEn
  *                    NULL if a new buffer should be allocated.
  *                    The buffer needs to have the same size of the entry.
  */
-static PPDMBLKCACHEENTRY pdmBlkCacheEntryAlloc(PPDMBLKCACHE pBlkCache,
-                                               uint64_t off, size_t cbData, uint8_t *pbBuffer)
+static PPDMBLKCACHEENTRY pdmBlkCacheEntryAlloc(PPDMBLKCACHE pBlkCache, uint64_t off, size_t cbData, uint8_t *pbBuffer)
 {
     AssertReturn(cbData <= UINT32_MAX, NULL);
     PPDMBLKCACHEENTRY pEntryNew = (PPDMBLKCACHEENTRY)RTMemAllocZ(sizeof(PDMBLKCACHEENTRY));
@@ -1680,8 +1680,8 @@ DECLINLINE(bool) pdmBlkCacheEntryFlagIsSetClearAcquireLock(PPDMBLKCACHE pBlkCach
  * which is currently in progress.
  *
  * @returns nothing.
- * @param   pEntry    The cache entry to add the segment to.
- * @param   pSeg      The segment to add.
+ * @param   pEntry      The cache entry to add the segment to.
+ * @param   pWaiter     The waiter entry to add.
  */
 DECLINLINE(void) pdmBlkCacheEntryAddWaiter(PPDMBLKCACHEENTRY pEntry,
                                            PPDMBLKCACHEWAITER pWaiter)
@@ -1709,19 +1709,16 @@ DECLINLINE(void) pdmBlkCacheEntryAddWaiter(PPDMBLKCACHEENTRY pEntry,
  * to the entry waiting for completion.
  *
  * @returns VBox status code.
- * @param   pEntry    The entry to add the buffer to.
- * @param   pTask     Task associated with the buffer.
- * @param   pIoMemCtx The memory context to use.
- * @param   offDiff   Offset from the start of the buffer
- *                    in the entry.
- * @param   cbData    Amount of data to wait for onthis entry.
- * @param   fWrite    Flag whether the task waits because it wants to write
- *                    to the cache entry.
+ * @param   pEntry      The entry to add the buffer to.
+ * @param   pReq        The request.
+ * @param   pSgBuf      The scatter/gather buffer. Will be advanced by cbData.
+ * @param   offDiff     Offset from the start of the buffer in the entry.
+ * @param   cbData      Amount of data to wait for onthis entry.
+ * @param   fWrite      Flag whether the task waits because it wants to write to
+ *                      the cache entry.
  */
-static int pdmBlkCacheEntryWaitersAdd(PPDMBLKCACHEENTRY pEntry,
-                                      PPDMBLKCACHEREQ pReq,
-                                      PRTSGBUF pSgBuf, uint64_t offDiff,
-                                      size_t cbData, bool fWrite)
+static int pdmBlkCacheEntryWaitersAdd(PPDMBLKCACHEENTRY pEntry, PPDMBLKCACHEREQ pReq,
+                                      PRTSGBUF pSgBuf, uint64_t offDiff, size_t cbData, bool fWrite)
 {
     PPDMBLKCACHEWAITER pWaiter  = (PPDMBLKCACHEWAITER)RTMemAllocZ(sizeof(PDMBLKCACHEWAITER));
     if (!pWaiter)
@@ -1746,7 +1743,6 @@ static int pdmBlkCacheEntryWaitersAdd(PPDMBLKCACHEENTRY pEntry,
  *
  * @returns The number of bytes the entry can hold of the requested amount
  *          of bytes.
- * @param   pEndpoint       The endpoint.
  * @param   pBlkCache       The endpoint cache.
  * @param   off             The start offset.
  * @param   cb              The number of bytes the entry needs to hold at
@@ -1804,17 +1800,15 @@ static uint32_t pdmBlkCacheEntryBoundariesCalc(PPDMBLKCACHE pBlkCache,
  *
  * @returns Pointer to the new cache entry or NULL
  *          if not enough bytes could be evicted from the cache.
- * @param   pEndpoint         The endpoint.
- * @param   pBlkCache    The endpoint cache.
- * @param   off               The offset.
- * @param   cb                Number of bytes the cache entry should have.
- * @param   pcbData           Where to store the number of bytes the new
- *                            entry can hold. May be lower than actually requested
- *                            due to another entry intersecting the access range.
+ * @param   pBlkCache       The endpoint cache.
+ * @param   off             The offset.
+ * @param   cb              Number of bytes the cache entry should have.
+ * @param   pcbData         Where to store the number of bytes the new
+ *                          entry can hold. May be lower than actually
+ *                          requested due to another entry intersecting the
+ *                          access range.
  */
-static PPDMBLKCACHEENTRY pdmBlkCacheEntryCreate(PPDMBLKCACHE pBlkCache,
-                                                uint64_t off, size_t cb,
-                                                size_t *pcbData)
+static PPDMBLKCACHEENTRY pdmBlkCacheEntryCreate(PPDMBLKCACHE pBlkCache, uint64_t off, size_t cb, size_t *pcbData)
 {
     uint32_t cbEntry  = 0;
 
@@ -1923,21 +1917,21 @@ static bool pdmBlkCacheReqUpdate(PPDMBLKCACHE pBlkCache, PPDMBLKCACHEREQ pReq,
 }
 
 VMMR3DECL(int) PDMR3BlkCacheRead(PPDMBLKCACHE pBlkCache, uint64_t off,
-                                 PCRTSGBUF pcSgBuf, size_t cbRead, void *pvUser)
+                                 PCRTSGBUF pSgBuf, size_t cbRead, void *pvUser)
 {
     int rc = VINF_SUCCESS;
     PPDMBLKCACHEGLOBAL pCache = pBlkCache->pCache;
     PPDMBLKCACHEENTRY  pEntry;
     PPDMBLKCACHEREQ    pReq;
 
-    LogFlowFunc((": pBlkCache=%#p{%s} off=%llu pcSgBuf=%#p cbRead=%u pvUser=%#p\n",
-                 pBlkCache, pBlkCache->pszId, off, pcSgBuf, cbRead, pvUser));
+    LogFlowFunc((": pBlkCache=%#p{%s} off=%llu pSgBuf=%#p cbRead=%u pvUser=%#p\n",
+                 pBlkCache, pBlkCache->pszId, off, pSgBuf, cbRead, pvUser));
 
     AssertPtrReturn(pBlkCache, VERR_INVALID_POINTER);
     AssertReturn(!pBlkCache->fSuspended, VERR_INVALID_STATE);
 
     RTSGBUF SgBuf;
-    RTSgBufClone(&SgBuf, pcSgBuf);
+    RTSgBufClone(&SgBuf, pSgBuf);
 
     /* Allocate new request structure. */
     pReq = pdmBlkCacheReqAlloc(pvUser);
@@ -2143,22 +2137,21 @@ VMMR3DECL(int) PDMR3BlkCacheRead(PPDMBLKCACHE pBlkCache, uint64_t off,
    return rc;
 }
 
-VMMR3DECL(int) PDMR3BlkCacheWrite(PPDMBLKCACHE pBlkCache, uint64_t off,
-                                  PCRTSGBUF pcSgBuf, size_t cbWrite, void *pvUser)
+VMMR3DECL(int) PDMR3BlkCacheWrite(PPDMBLKCACHE pBlkCache, uint64_t off, PCRTSGBUF pSgBuf, size_t cbWrite, void *pvUser)
 {
     int rc = VINF_SUCCESS;
     PPDMBLKCACHEGLOBAL pCache = pBlkCache->pCache;
     PPDMBLKCACHEENTRY pEntry;
     PPDMBLKCACHEREQ pReq;
 
-    LogFlowFunc((": pBlkCache=%#p{%s} off=%llu pcSgBuf=%#p cbWrite=%u pvUser=%#p\n",
-                 pBlkCache, pBlkCache->pszId, off, pcSgBuf, cbWrite, pvUser));
+    LogFlowFunc((": pBlkCache=%#p{%s} off=%llu pSgBuf=%#p cbWrite=%u pvUser=%#p\n",
+                 pBlkCache, pBlkCache->pszId, off, pSgBuf, cbWrite, pvUser));
 
     AssertPtrReturn(pBlkCache, VERR_INVALID_POINTER);
     AssertReturn(!pBlkCache->fSuspended, VERR_INVALID_STATE);
 
     RTSGBUF SgBuf;
-    RTSgBufClone(&SgBuf, pcSgBuf);
+    RTSgBufClone(&SgBuf, pSgBuf);
 
     /* Allocate new request structure. */
     pReq = pdmBlkCacheReqAlloc(pvUser);
@@ -2179,10 +2172,7 @@ VMMR3DECL(int) PDMR3BlkCacheWrite(PPDMBLKCACHE pBlkCache, uint64_t off,
             AssertPtr(pEntry->pList);
 
             uint64_t offDiff = off - pEntry->Core.Key;
-
-            AssertMsg(off >= pEntry->Core.Key,
-                      ("Overflow in calculation off=%llu OffsetAligned=%llu\n",
-                      off, pEntry->Core.Key));
+            AssertMsg(off >= pEntry->Core.Key, ("Overflow in calculation off=%llu OffsetAligned=%llu\n", off, pEntry->Core.Key));
 
             cbToWrite = RT_MIN(pEntry->cbData - offDiff, cbWrite);
             cbWrite  -= cbToWrite;
@@ -2562,12 +2552,11 @@ VMMR3DECL(int) PDMR3BlkCacheDiscard(PPDMBLKCACHE pBlkCache, PCRTRANGE paRanges,
  * if everything was transferred.
  *
  * @returns Next task segment handle.
- * @param   pTaskSeg          Task segment to complete.
+ * @param   pBlkCache         The endpoint block cache.
+ * @param   pWaiter           Task segment to complete.
  * @param   rc                Status code to set.
  */
-static PPDMBLKCACHEWAITER pdmBlkCacheWaiterComplete(PPDMBLKCACHE pBlkCache,
-                                                    PPDMBLKCACHEWAITER pWaiter,
-                                                    int rc)
+static PPDMBLKCACHEWAITER pdmBlkCacheWaiterComplete(PPDMBLKCACHE pBlkCache, PPDMBLKCACHEWAITER pWaiter, int rc)
 {
     PPDMBLKCACHEWAITER pNext = pWaiter->pNext;
     PPDMBLKCACHEREQ pReq = pWaiter->pReq;
diff --git a/src/VBox/VMM/VMMR3/PDMCritSect.cpp b/src/VBox/VMM/VMMR3/PDMCritSect.cpp
index decca4f..e497eb1 100644
--- a/src/VBox/VMM/VMMR3/PDMCritSect.cpp
+++ b/src/VBox/VMM/VMMR3/PDMCritSect.cpp
@@ -49,7 +49,7 @@ static int pdmR3CritSectRwDeleteOne(PVM pVM, PUVM pUVM, PPDMCRITSECTRWINT pCritS
  * Register statistics related to the critical sections.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 int pdmR3CritSectBothInitStats(PVM pVM)
 {
@@ -62,7 +62,7 @@ int pdmR3CritSectBothInitStats(PVM pVM)
 /**
  * Relocates all the critical sections.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 void pdmR3CritSectBothRelocate(PVM pVM)
 {
@@ -92,9 +92,9 @@ void pdmR3CritSectBothRelocate(PVM pVM)
  * latter call because other components expect the critical sections to be
  * automatically deleted.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *          First error code, rest is lost.
- * @param   pVMU        The user mode VM handle.
+ * @param   pVM             The cross context VM structure.
  * @remark  Don't confuse this with PDMR3CritSectDelete.
  */
 VMMR3_INT_DECL(int) PDMR3CritSectBothTerm(PVM pVM)
@@ -128,11 +128,10 @@ VMMR3_INT_DECL(int) PDMR3CritSectBothTerm(PVM pVM)
  * Initializes a critical section and inserts it into the list.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pCritSect       The critical section.
  * @param   pvKey           The owner key.
- * @param   RT_SRC_POS_DECL The source position.
- * @param   pszName         The name of the critical section (for statistics).
+ * @param   SRC_POS         The source position.
  * @param   pszNameFmt      Format string for naming the critical section.  For
  *                          statistics and lock validation.
  * @param   va              Arguments for the format string.
@@ -215,11 +214,10 @@ static int pdmR3CritSectInitOne(PVM pVM, PPDMCRITSECTINT pCritSect, void *pvKey,
  * Initializes a read/write critical section and inserts it into the list.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pCritSect       The read/write critical section.
  * @param   pvKey           The owner key.
- * @param   RT_SRC_POS_DECL The source position.
- * @param   pszName         The name of the critical section (for statistics).
+ * @param   SRC_POS         The source position.
  * @param   pszNameFmt      Format string for naming the critical section.  For
  *                          statistics and lock validation.
  * @param   va              Arguments for the format string.
@@ -321,10 +319,9 @@ static int pdmR3CritSectRwInitOne(PVM pVM, PPDMCRITSECTRWINT pCritSect, void *pv
  * works in ring-0 and raw-mode context as well.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   pDevIns         Device instance.
+ * @param   pVM             The cross context VM structure.
  * @param   pCritSect       Pointer to the critical section.
- * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+ * @param   SRC_POS         Use RT_SRC_POS.
  * @param   pszNameFmt      Format string for naming the critical section.  For
  *                          statistics and lock validation.
  * @param   ...             Arguments for the format string.
@@ -351,10 +348,9 @@ VMMR3DECL(int) PDMR3CritSectInit(PVM pVM, PPDMCRITSECT pCritSect, RT_SRC_POS_DEC
  * critical sections, but works in ring-0 and raw-mode context as well.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   pDevIns         Device instance.
+ * @param   pVM             The cross context VM structure.
  * @param   pCritSect       Pointer to the read/write critical section.
- * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+ * @param   SRC_POS         Use RT_SRC_POS.
  * @param   pszNameFmt      Format string for naming the critical section.  For
  *                          statistics and lock validation.
  * @param   ...             Arguments for the format string.
@@ -378,9 +374,10 @@ VMMR3DECL(int) PDMR3CritSectRwInit(PVM pVM, PPDMCRITSECTRW pCritSect, RT_SRC_POS
  * Initializes a PDM critical section for a device.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         Device instance.
  * @param   pCritSect       Pointer to the critical section.
+ * @param   SRC_POS         The source position.  Optional.
  * @param   pszNameFmt      Format string for naming the critical section.  For
  *                          statistics and lock validation.
  * @param   va              Arguments for the format string.
@@ -396,9 +393,10 @@ int pdmR3CritSectInitDevice(PVM pVM, PPDMDEVINS pDevIns, PPDMCRITSECT pCritSect,
  * Initializes a PDM read/write critical section for a device.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         Device instance.
  * @param   pCritSect       Pointer to the read/write critical section.
+ * @param   SRC_POS         The source position.  Optional.
  * @param   pszNameFmt      Format string for naming the critical section.  For
  *                          statistics and lock validation.
  * @param   va              Arguments for the format string.
@@ -414,9 +412,13 @@ int pdmR3CritSectRwInitDevice(PVM pVM, PPDMDEVINS pDevIns, PPDMCRITSECTRW pCritS
  * Initializes the automatic default PDM critical section for a device.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         Device instance.
+ * @param   SRC_POS         The source position.  Optional.
  * @param   pCritSect       Pointer to the critical section.
+ * @param   pszNameFmt      Format string for naming the critical section.  For
+ *                          statistics and lock validation.
+ * @param   ...             Arguments for the format string.
  */
 int pdmR3CritSectInitDeviceAuto(PVM pVM, PPDMDEVINS pDevIns, PPDMCRITSECT pCritSect, RT_SRC_POS_DECL,
                                 const char *pszNameFmt, ...)
@@ -435,9 +437,10 @@ int pdmR3CritSectInitDeviceAuto(PVM pVM, PPDMDEVINS pDevIns, PPDMCRITSECT pCritS
  * Initializes a PDM critical section for a driver.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDrvIns         Driver instance.
  * @param   pCritSect       Pointer to the critical section.
+ * @param   SRC_POS         The source position.  Optional.
  * @param   pszNameFmt      Format string for naming the critical section.  For
  *                          statistics and lock validation.
  * @param   ...             Arguments for the format string.
@@ -457,9 +460,10 @@ int pdmR3CritSectInitDriver(PVM pVM, PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect,
  * Initializes a PDM read/write critical section for a driver.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDrvIns         Driver instance.
  * @param   pCritSect       Pointer to the read/write critical section.
+ * @param   SRC_POS         The source position.  Optional.
  * @param   pszNameFmt      Format string for naming the critical section.  For
  *                          statistics and lock validation.
  * @param   ...             Arguments for the format string.
@@ -480,7 +484,8 @@ int pdmR3CritSectRwInitDriver(PVM pVM, PPDMDRVINS pDrvIns, PPDMCRITSECTRW pCritS
  *
  * @returns Return code from RTCritSectDelete.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
+ * @param   pUVM        The user mode VM handle.
  * @param   pCritSect   The critical section.
  * @param   pPrev       The previous critical section in the list.
  * @param   fFinal      Set if this is the final call and statistics shouldn't be deregistered.
@@ -537,7 +542,8 @@ static int pdmR3CritSectDeleteOne(PVM pVM, PUVM pUVM, PPDMCRITSECTINT pCritSect,
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
+ * @param   pUVM        The user mode VM handle.
  * @param   pCritSect   The read/write critical section.
  * @param   pPrev       The previous critical section in the list.
  * @param   fFinal      Set if this is the final call and statistics shouldn't be deregistered.
@@ -610,7 +616,7 @@ static int pdmR3CritSectRwDeleteOne(PVM pVM, PUVM pUVM, PPDMCRITSECTRWINT pCritS
  *          The entire list is processed on failure, so we'll only
  *          return the first error code. This shouldn't be a problem
  *          since errors really shouldn't happen here.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pvKey   The initializer key.
  */
 static int pdmR3CritSectDeleteByKey(PVM pVM, void *pvKey)
@@ -649,7 +655,7 @@ static int pdmR3CritSectDeleteByKey(PVM pVM, void *pvKey)
  *          The entire list is processed on failure, so we'll only
  *          return the first error code. This shouldn't be a problem
  *          since errors really shouldn't happen here.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pvKey   The initializer key.
  */
 static int pdmR3CritSectRwDeleteByKey(PVM pVM, void *pvKey)
@@ -686,7 +692,7 @@ static int pdmR3CritSectRwDeleteByKey(PVM pVM, void *pvKey)
  * device.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDevIns     The device handle.
  */
 int pdmR3CritSectBothDeleteDevice(PVM pVM, PPDMDEVINS pDevIns)
@@ -702,7 +708,7 @@ int pdmR3CritSectBothDeleteDevice(PVM pVM, PPDMDEVINS pDevIns)
  * driver.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDrvIns     The driver handle.
  */
 int pdmR3CritSectBothDeleteDriver(PVM pVM, PPDMDRVINS pDrvIns)
@@ -949,7 +955,7 @@ static void pdmR3CritSectAppendNameToList(char const *pszName, char **ppszNames,
  *
  * @returns Lock count.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszNames        Where to return the critical section names.
  * @param   cbNames         The size of the buffer.
  */
@@ -1006,7 +1012,7 @@ VMMR3DECL(uint32_t) PDMR3CritSectCountOwned(PVM pVM, char *pszNames, size_t cbNa
  * This is only used when entering guru meditation in order to prevent other
  * EMTs and I/O threads from deadlocking.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(void) PDMR3CritSectLeaveAll(PVM pVM)
 {
@@ -1033,7 +1039,7 @@ VMMR3_INT_DECL(void) PDMR3CritSectLeaveAll(PVM pVM)
  * all enter immediately and concurrently.
  *
  * @returns The address of the NOP critical section.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMR3DECL(PPDMCRITSECT)             PDMR3CritSectGetNop(PVM pVM)
 {
@@ -1046,7 +1052,7 @@ VMMR3DECL(PPDMCRITSECT)             PDMR3CritSectGetNop(PVM pVM)
  * Gets the ring-0 address of the NOP critical section.
  *
  * @returns The ring-0 address of the NOP critical section.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMR3DECL(R0PTRTYPE(PPDMCRITSECT))  PDMR3CritSectGetNopR0(PVM pVM)
 {
@@ -1059,7 +1065,7 @@ VMMR3DECL(R0PTRTYPE(PPDMCRITSECT))  PDMR3CritSectGetNopR0(PVM pVM)
  * Gets the raw-mode context address of the NOP critical section.
  *
  * @returns The raw-mode context address of the NOP critical section.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMR3DECL(RCPTRTYPE(PPDMCRITSECT))  PDMR3CritSectGetNopRC(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/PDMDevHlp.cpp b/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
index 587fb19..25cd67e 100644
--- a/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
+++ b/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
@@ -1402,7 +1402,7 @@ static DECLCALLBACK(int) pdmR3DevHlp_PCIPhysRead(PPDMDEVINS pDevIns, RTGCPHYS GC
 }
 
 
-/** @interface_method_impl{PDMDEVHLPR3,pfnPCIPhysRead} */
+/** @interface_method_impl{PDMDEVHLPR3,pfnPCIPhysWrite} */
 static DECLCALLBACK(int) pdmR3DevHlp_PCIPhysWrite(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, const void *pvBuf, size_t cbWrite)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -1637,11 +1637,11 @@ static DECLCALLBACK(int) pdmR3DevHlp_DriverAttach(PPDMDEVINS pDevIns, uint32_t i
 
 /** @interface_method_impl{PDMDEVHLPR3,pfnQueueCreate} */
 static DECLCALLBACK(int) pdmR3DevHlp_QueueCreate(PPDMDEVINS pDevIns, size_t cbItem, uint32_t cItems, uint32_t cMilliesInterval,
-                                                 PFNPDMQUEUEDEV pfnCallback, bool fGCEnabled, const char *pszName, PPDMQUEUE *ppQueue)
+                                                 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 fGCEnabled=%RTbool pszName=%p:{%s} ppQueue=%p\n",
-             pDevIns->pReg->szName, pDevIns->iInstance, cbItem, cItems, cMilliesInterval, pfnCallback, fGCEnabled, pszName, pszName, ppQueue));
+    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));
 
     PVM pVM = pDevIns->Internal.s.pVMR3;
     VM_ASSERT_EMT(pVM);
@@ -1652,7 +1652,7 @@ static DECLCALLBACK(int) pdmR3DevHlp_QueueCreate(PPDMDEVINS pDevIns, size_t cbIt
         AssertLogRelReturn(pszName, VERR_NO_MEMORY);
     }
 
-    int rc = PDMR3QueueCreateDevice(pVM, pDevIns, cbItem, cItems, cMilliesInterval, pfnCallback, fGCEnabled, pszName, ppQueue);
+    int rc = PDMR3QueueCreateDevice(pVM, pDevIns, cbItem, cItems, cMilliesInterval, pfnCallback, fRZEnabled, pszName, ppQueue);
 
     LogFlow(("pdmR3DevHlp_QueueCreate: caller='%s'/%d: returns %Rrc *ppQueue=%p\n", pDevIns->pReg->szName, pDevIns->iInstance, rc, *ppQueue));
     return rc;
@@ -2135,7 +2135,7 @@ static DECLCALLBACK(bool) pdmR3DevHlp_AssertOther(PPDMDEVINS pDevIns, const char
 }
 
 
-/** @interface_method_impl{PDMDEVHLP,pfnLdrGetRCInterfaceSymbols} */
+/** @interface_method_impl{PDMDEVHLPR3,pfnLdrGetRCInterfaceSymbols} */
 static DECLCALLBACK(int) pdmR3DevHlp_LdrGetRCInterfaceSymbols(PPDMDEVINS pDevIns, void *pvInterface, size_t cbInterface,
                                                               const char *pszSymPrefix, const char *pszSymList)
 {
@@ -2173,7 +2173,7 @@ static DECLCALLBACK(int) pdmR3DevHlp_LdrGetRCInterfaceSymbols(PPDMDEVINS pDevIns
 }
 
 
-/** @interface_method_impl{PDMDEVHLP,pfnLdrGetR0InterfaceSymbols} */
+/** @interface_method_impl{PDMDEVHLPR3,pfnLdrGetR0InterfaceSymbols} */
 static DECLCALLBACK(int) pdmR3DevHlp_LdrGetR0InterfaceSymbols(PPDMDEVINS pDevIns, void *pvInterface, size_t cbInterface,
                                                               const char *pszSymPrefix, const char *pszSymList)
 {
@@ -2211,7 +2211,7 @@ static DECLCALLBACK(int) pdmR3DevHlp_LdrGetR0InterfaceSymbols(PPDMDEVINS pDevIns
 }
 
 
-/** @interface_method_impl{PDMDEVHLP,pfnCallR0} */
+/** @interface_method_impl{PDMDEVHLPR3,pfnCallR0} */
 static DECLCALLBACK(int) pdmR3DevHlp_CallR0(PPDMDEVINS pDevIns, uint32_t uOperation, uint64_t u64Arg)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -2260,7 +2260,7 @@ static DECLCALLBACK(int) pdmR3DevHlp_CallR0(PPDMDEVINS pDevIns, uint32_t uOperat
 }
 
 
-/** @interface_method_impl{PDMDEVHLP,pfnVMGetSuspendReason} */
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMGetSuspendReason} */
 static DECLCALLBACK(VMSUSPENDREASON) pdmR3DevHlp_VMGetSuspendReason(PPDMDEVINS pDevIns)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -2273,7 +2273,7 @@ static DECLCALLBACK(VMSUSPENDREASON) pdmR3DevHlp_VMGetSuspendReason(PPDMDEVINS p
 }
 
 
-/** @interface_method_impl{PDMDEVHLP,pfnVMGetResumeReason} */
+/** @interface_method_impl{PDMDEVHLPR3,pfnVMGetResumeReason} */
 static DECLCALLBACK(VMRESUMEREASON) pdmR3DevHlp_VMGetResumeReason(PPDMDEVINS pDevIns)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -3331,7 +3331,7 @@ static DECLCALLBACK(int) pdmR3DevHlp_VMSuspend(PPDMDEVINS pDevIns)
  * EMT request to avoid deadlocks.
  *
  * @returns VBox status code fit for scheduling.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             The device that triggered this action.
  */
 static DECLCALLBACK(int) pdmR3DevHlp_VMSuspendSaveAndPowerOffWorker(PVM pVM, PPDMDEVINS pDevIns)
@@ -3839,7 +3839,7 @@ const PDMDEVHLPR3 g_pdmR3DevHlpUnTrusted =
  *
  * @returns Success indicator.
  *          If false the item will not be removed and the flushing will stop.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pItem       The item to consume. Upon return this item will be freed.
  */
 DECLCALLBACK(bool) pdmR3DevHlpQueueConsumer(PVM pVM, PPDMQUEUEITEMCORE pItem)
diff --git a/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp b/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp
index be28767..3ad89e9 100644
--- a/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp
+++ b/src/VBox/VMM/VMMR3/PDMDevMiscHlp.cpp
@@ -311,6 +311,7 @@ static DECLCALLBACK(void) pdmR3ApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCp
     VMMR3SendSipi(pDevIns->Internal.s.pVMR3, idCpu, uVector);
 }
 
+
 /** @interface_method_impl{PDMAPICHLPR3,pfnSendInitIpi} */
 static DECLCALLBACK(void) pdmR3ApicHlp_SendInitIpi(PPDMDEVINS pDevIns, VMCPUID idCpu)
 {
@@ -319,6 +320,7 @@ static DECLCALLBACK(void) pdmR3ApicHlp_SendInitIpi(PPDMDEVINS pDevIns, VMCPUID i
     VMMR3SendInitIpi(pDevIns->Internal.s.pVMR3, idCpu);
 }
 
+
 /** @interface_method_impl{PDMAPICHLPR3,pfnGetRCHelpers} */
 static DECLCALLBACK(PCPDMAPICHLPRC) pdmR3ApicHlp_GetRCHelpers(PPDMDEVINS pDevIns)
 {
@@ -528,11 +530,11 @@ static DECLCALLBACK(void) pdmR3PciHlp_IoApicSetIrq(PPDMDEVINS pDevIns, int iIrq,
 }
 
 /** @interface_method_impl{PDMPCIHLPR3,pfnIoApicSendMsi} */
-static DECLCALLBACK(void) pdmR3PciHlp_IoApicSendMsi(PPDMDEVINS pDevIns, RTGCPHYS GCAddr, uint32_t uValue, uint32_t uTagSrc)
+static DECLCALLBACK(void) pdmR3PciHlp_IoApicSendMsi(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, uint32_t uValue, uint32_t uTagSrc)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
-    Log4(("pdmR3PciHlp_IoApicSendMsi: address=%p value=%x uTagSrc=%#x\n", GCAddr, uValue, uTagSrc));
-    PDMIoApicSendMsi(pDevIns->Internal.s.pVMR3, GCAddr, uValue, uTagSrc);
+    Log4(("pdmR3PciHlp_IoApicSendMsi: address=%p value=%x uTagSrc=%#x\n", GCPhys, uValue, uTagSrc));
+    PDMIoApicSendMsi(pDevIns->Internal.s.pVMR3, GCPhys, uValue, uTagSrc);
 }
 
 /** @interface_method_impl{PDMPCIHLPR3,pfnIsMMIO2Base} */
diff --git a/src/VBox/VMM/VMMR3/PDMDevice.cpp b/src/VBox/VMM/VMMR3/PDMDevice.cpp
index 2e76d57..5759fa1 100644
--- a/src/VBox/VMM/VMMR3/PDMDevice.cpp
+++ b/src/VBox/VMM/VMMR3/PDMDevice.cpp
@@ -104,7 +104,7 @@ static int                  pdmR3DevLoad(PVM pVM, PPDMDEVREGCBINT pRegCB, const
  * are called.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int pdmR3DevInit(PVM pVM)
 {
@@ -473,7 +473,7 @@ PPDMDEV pdmR3DevLookup(PVM pVM, const char *pszName)
  * Loads the device modules.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 static int pdmR3DevLoadModules(PVM pVM)
 {
@@ -587,7 +587,7 @@ static int pdmR3DevLoadModules(PVM pVM)
  * Loads one device module and call the registration entry point.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pRegCB          The registration callback stuff.
  * @param   pszFilename     Module filename.
  * @param   pszName         Module name.
@@ -728,7 +728,7 @@ static DECLCALLBACK(int) pdmR3DevReg_Register(PPDMDEVREGCB pCallbacks, PCPDMDEVR
  * Locates a LUN.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszDevice       Device name.
  * @param   iInstance       Device instance.
  * @param   iLun            The Logical Unit to obtain the interface of.
@@ -860,7 +860,7 @@ VMMR3DECL(int) PDMR3DeviceDetach(PUVM pUVM, const char *pszDevice, unsigned iIns
  * timer or similar created by the device.
  *
  * @returns Pointer to the critical section.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         The device instance in question.
  *
  * @internal
diff --git a/src/VBox/VMM/VMMR3/PDMDriver.cpp b/src/VBox/VMM/VMMR3/PDMDriver.cpp
index f8faaac..1349f51 100644
--- a/src/VBox/VMM/VMMR3/PDMDriver.cpp
+++ b/src/VBox/VMM/VMMR3/PDMDriver.cpp
@@ -76,7 +76,7 @@ static int pdmR3DrvLoad(PVM pVM, PPDMDRVREGCBINT pRegCB, const char *pszFilename
  * Register drivers in a statically linked environment.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pfnCallback Driver registration callback
  */
 VMMR3DECL(int) PDMR3DrvStaticRegistration(PVM pVM, FNPDMVBOXDRIVERSREGISTER pfnCallback)
@@ -106,7 +106,7 @@ VMMR3DECL(int) PDMR3DrvStaticRegistration(PVM pVM, FNPDMVBOXDRIVERSREGISTER pfnC
  * loaded and called for registration.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int pdmR3DrvInit(PVM pVM)
 {
@@ -218,7 +218,7 @@ int pdmR3DrvInit(PVM pVM)
  * Loads one driver module and call the registration entry point.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pRegCB          The registration callback stuff.
  * @param   pszFilename     Module filename.
  * @param   pszName         Module name.
@@ -377,7 +377,7 @@ PPDMDRV pdmR3DrvLookup(PVM pVM, const char *pszName)
  * Worker for pdmR3DrvInstantiate.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDrvAbove           The driver above, NULL if top.
  * @param   pLun                The LUN.
  * @param   ppNode              The AttachedDriver node, replaced if any
@@ -618,7 +618,7 @@ static int pdmR3DrvMaybeTransformChain(PVM pVM, PPDMDRVINS pDrvAbove, PPDMLUN pL
  *
  * @returns VBox status code, including informational statuses.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pNode               The CFGM node for the driver.
  * @param   pBaseInterface      The base interface.
  * @param   pDrvAbove           The driver above it.  NULL if it's the top-most
@@ -984,7 +984,7 @@ void pdmR3DrvDestroyChain(PPDMDRVINS pDrvIns, uint32_t fFlags)
  * @{
  */
 
-/** @interface_method_impl{PDMDRVHLP,pfnAttach} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnAttach} */
 static DECLCALLBACK(int) pdmR3DrvHlp_Attach(PPDMDRVINS pDrvIns, uint32_t fFlags, PPDMIBASE *ppBaseInterface)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1022,7 +1022,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_Attach(PPDMDRVINS pDrvIns, uint32_t fFlags,
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnDetach} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnDetach} */
 static DECLCALLBACK(int) pdmR3DrvHlp_Detach(PPDMDRVINS pDrvIns, uint32_t fFlags)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1048,7 +1048,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_Detach(PPDMDRVINS pDrvIns, uint32_t fFlags)
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnDetachSelf} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnDetachSelf} */
 static DECLCALLBACK(int) pdmR3DrvHlp_DetachSelf(PPDMDRVINS pDrvIns, uint32_t fFlags)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1063,7 +1063,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_DetachSelf(PPDMDRVINS pDrvIns, uint32_t fFl
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnMountPrepare} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnMountPrepare} */
 static DECLCALLBACK(int) pdmR3DrvHlp_MountPrepare(PPDMDRVINS pDrvIns, const char *pszFilename, const char *pszCoreDriver)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1137,7 +1137,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_MountPrepare(PPDMDRVINS pDrvIns, const char
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnAssertEMT} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnAssertEMT} */
 static DECLCALLBACK(bool) pdmR3DrvHlp_AssertEMT(PPDMDRVINS pDrvIns, const char *pszFile, unsigned iLine, const char *pszFunction)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1153,7 +1153,7 @@ static DECLCALLBACK(bool) pdmR3DrvHlp_AssertEMT(PPDMDRVINS pDrvIns, const char *
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnAssertOther} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnAssertOther} */
 static DECLCALLBACK(bool) pdmR3DrvHlp_AssertOther(PPDMDRVINS pDrvIns, const char *pszFile, unsigned iLine, const char *pszFunction)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1169,7 +1169,7 @@ static DECLCALLBACK(bool) pdmR3DrvHlp_AssertOther(PPDMDRVINS pDrvIns, const char
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnVMSetError} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnVMSetError} */
 static DECLCALLBACK(int) pdmR3DrvHlp_VMSetError(PPDMDRVINS pDrvIns, int rc, RT_SRC_POS_DECL, const char *pszFormat, ...)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1181,7 +1181,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_VMSetError(PPDMDRVINS pDrvIns, int rc, RT_S
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnVMSetErrorV} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnVMSetErrorV} */
 static DECLCALLBACK(int) pdmR3DrvHlp_VMSetErrorV(PPDMDRVINS pDrvIns, int rc, RT_SRC_POS_DECL, const char *pszFormat, va_list va)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1190,7 +1190,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_VMSetErrorV(PPDMDRVINS pDrvIns, int rc, RT_
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnVMSetRuntimeError} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnVMSetRuntimeError} */
 static DECLCALLBACK(int) pdmR3DrvHlp_VMSetRuntimeError(PPDMDRVINS pDrvIns, uint32_t fFlags, const char *pszErrorId, const char *pszFormat, ...)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1202,7 +1202,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_VMSetRuntimeError(PPDMDRVINS pDrvIns, uint3
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnVMSetRuntimeErrorV} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnVMSetRuntimeErrorV} */
 static DECLCALLBACK(int) pdmR3DrvHlp_VMSetRuntimeErrorV(PPDMDRVINS pDrvIns, uint32_t fFlags, const char *pszErrorId, const char *pszFormat, va_list va)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1211,7 +1211,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_VMSetRuntimeErrorV(PPDMDRVINS pDrvIns, uint
 }
 
 
-/** @interface_method_impl{PDMDEVHLPR3,pfnVMState} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnVMState} */
 static DECLCALLBACK(VMSTATE) pdmR3DrvHlp_VMState(PPDMDRVINS pDrvIns)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1224,7 +1224,7 @@ static DECLCALLBACK(VMSTATE) pdmR3DrvHlp_VMState(PPDMDRVINS pDrvIns)
 }
 
 
-/** @interface_method_impl{PDMDEVHLPR3,pfnVMTeleportedAndNotFullyResumedYet} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnVMTeleportedAndNotFullyResumedYet} */
 static DECLCALLBACK(bool) pdmR3DrvHlp_VMTeleportedAndNotFullyResumedYet(PPDMDRVINS pDrvIns)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1237,7 +1237,7 @@ static DECLCALLBACK(bool) pdmR3DrvHlp_VMTeleportedAndNotFullyResumedYet(PPDMDRVI
 }
 
 
-/** @interface_method_impl{PDMDEVHLPR3,pfnGetSupDrvSession} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnGetSupDrvSession} */
 static DECLCALLBACK(PSUPDRVSESSION) pdmR3DrvHlp_GetSupDrvSession(PPDMDRVINS pDrvIns)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1249,7 +1249,7 @@ static DECLCALLBACK(PSUPDRVSESSION) pdmR3DrvHlp_GetSupDrvSession(PPDMDRVINS pDrv
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnQueueCreate} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnQueueCreate} */
 static DECLCALLBACK(int) pdmR3DrvHlp_QueueCreate(PPDMDRVINS pDrvIns, uint32_t cbItem, uint32_t cItems, uint32_t cMilliesInterval,
                                                  PFNPDMQUEUEDRV pfnCallback, const char *pszName, PPDMQUEUE *ppQueue)
 {
@@ -1272,7 +1272,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_QueueCreate(PPDMDRVINS pDrvIns, uint32_t cb
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnTMGetVirtualFreq} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnTMGetVirtualFreq} */
 static DECLCALLBACK(uint64_t) pdmR3DrvHlp_TMGetVirtualFreq(PPDMDRVINS pDrvIns)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1281,7 +1281,7 @@ static DECLCALLBACK(uint64_t) pdmR3DrvHlp_TMGetVirtualFreq(PPDMDRVINS pDrvIns)
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnTMGetVirtualTime} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnTMGetVirtualTime} */
 static DECLCALLBACK(uint64_t) pdmR3DrvHlp_TMGetVirtualTime(PPDMDRVINS pDrvIns)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1290,7 +1290,7 @@ static DECLCALLBACK(uint64_t) pdmR3DrvHlp_TMGetVirtualTime(PPDMDRVINS pDrvIns)
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnTMTimerCreate} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnTMTimerCreate} */
 static DECLCALLBACK(int) pdmR3DrvHlp_TMTimerCreate(PPDMDRVINS pDrvIns, TMCLOCK enmClock, PFNTMTIMERDRV pfnCallback, void *pvUser, uint32_t fFlags, const char *pszDesc, PPTMTIMERR3 ppTimer)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1305,7 +1305,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_TMTimerCreate(PPDMDRVINS pDrvIns, TMCLOCK e
 
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnSSMRegister} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnSSMRegister} */
 static DECLCALLBACK(int) pdmR3DrvHlp_SSMRegister(PPDMDRVINS pDrvIns, uint32_t uVersion, size_t cbGuess,
                                                  PFNSSMDRVLIVEPREP pfnLivePrep, PFNSSMDRVLIVEEXEC pfnLiveExec, PFNSSMDRVLIVEVOTE pfnLiveVote,
                                                  PFNSSMDRVSAVEPREP pfnSavePrep, PFNSSMDRVSAVEEXEC pfnSaveExec, PFNSSMDRVSAVEDONE pfnSaveDone,
@@ -1330,22 +1330,22 @@ static DECLCALLBACK(int) pdmR3DrvHlp_SSMRegister(PPDMDRVINS pDrvIns, uint32_t uV
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnSSMDeregister} */
-static DECLCALLBACK(int) pdmR3DrvHlp_SSMDeregister(PPDMDRVINS pDrvIns, const char *pszName, uint32_t u32Instance)
+/** @interface_method_impl{PDMDRVHLPR3,pfnSSMDeregister} */
+static DECLCALLBACK(int) pdmR3DrvHlp_SSMDeregister(PPDMDRVINS pDrvIns, const char *pszName, uint32_t uInstance)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
     VM_ASSERT_EMT(pDrvIns->Internal.s.pVMR3);
-    LogFlow(("pdmR3DrvHlp_SSMDeregister: caller='%s'/%d: pszName=%p:{%s} u32Instance=%#x\n",
-             pDrvIns->pReg->szName, pDrvIns->iInstance, pszName, pszName, u32Instance));
+    LogFlow(("pdmR3DrvHlp_SSMDeregister: caller='%s'/%d: pszName=%p:{%s} uInstance=%#x\n",
+             pDrvIns->pReg->szName, pDrvIns->iInstance, pszName, pszName, uInstance));
 
-    int rc = SSMR3DeregisterDriver(pDrvIns->Internal.s.pVMR3, pDrvIns, pszName, u32Instance);
+    int rc = SSMR3DeregisterDriver(pDrvIns->Internal.s.pVMR3, pDrvIns, pszName, uInstance);
 
     LogFlow(("pdmR3DrvHlp_SSMDeregister: caller='%s'/%d: returns %Rrc\n", pDrvIns->pReg->szName, pDrvIns->iInstance, rc));
     return rc;
 }
 
 
-/** @interface_method_impl{PDMDEVHLP,pfnDBGFInfoRegister} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnDBGFInfoRegister} */
 static DECLCALLBACK(int) pdmR3DrvHlp_DBGFInfoRegister(PPDMDRVINS pDrvIns, const char *pszName, const char *pszDesc, PFNDBGFHANDLERDRV pfnHandler)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1359,7 +1359,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_DBGFInfoRegister(PPDMDRVINS pDrvIns, const
 }
 
 
-/** @interface_method_impl{PDMDEVHLP,pfnDBGFInfoDeregister} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnDBGFInfoDeregister} */
 static DECLCALLBACK(int) pdmR3DrvHlp_DBGFInfoDeregister(PPDMDRVINS pDrvIns, const char *pszName)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1374,7 +1374,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_DBGFInfoDeregister(PPDMDRVINS pDrvIns, cons
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnSTAMRegister} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnSTAMRegister} */
 static DECLCALLBACK(void) pdmR3DrvHlp_STAMRegister(PPDMDRVINS pDrvIns, void *pvSample, STAMTYPE enmType, const char *pszName, STAMUNIT enmUnit, const char *pszDesc)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1386,7 +1386,7 @@ static DECLCALLBACK(void) pdmR3DrvHlp_STAMRegister(PPDMDRVINS pDrvIns, void *pvS
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnSTAMRegisterF} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnSTAMRegisterF} */
 static DECLCALLBACK(void) pdmR3DrvHlp_STAMRegisterF(PPDMDRVINS pDrvIns, void *pvSample, STAMTYPE enmType, STAMVISIBILITY enmVisibility,
                                                     STAMUNIT enmUnit, const char *pszDesc, const char *pszName, ...)
 {
@@ -1401,7 +1401,7 @@ static DECLCALLBACK(void) pdmR3DrvHlp_STAMRegisterF(PPDMDRVINS pDrvIns, void *pv
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnSTAMRegisterV} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnSTAMRegisterV} */
 static DECLCALLBACK(void) pdmR3DrvHlp_STAMRegisterV(PPDMDRVINS pDrvIns, void *pvSample, STAMTYPE enmType, STAMVISIBILITY enmVisibility,
                                                     STAMUNIT enmUnit, const char *pszDesc, const char *pszName, va_list args)
 {
@@ -1413,7 +1413,7 @@ static DECLCALLBACK(void) pdmR3DrvHlp_STAMRegisterV(PPDMDRVINS pDrvIns, void *pv
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnSTAMDeregister} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnSTAMDeregister} */
 static DECLCALLBACK(int) pdmR3DrvHlp_STAMDeregister(PPDMDRVINS pDrvIns, void *pvSample)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1425,7 +1425,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_STAMDeregister(PPDMDRVINS pDrvIns, void *pv
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnSUPCallVMMR0Ex} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnSUPCallVMMR0Ex} */
 static DECLCALLBACK(int) pdmR3DrvHlp_SUPCallVMMR0Ex(PPDMDRVINS pDrvIns, unsigned uOperation, void *pvArg, unsigned cbArg)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1446,7 +1446,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_SUPCallVMMR0Ex(PPDMDRVINS pDrvIns, unsigned
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnUSBRegisterHub} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnUSBRegisterHub} */
 static DECLCALLBACK(int) pdmR3DrvHlp_USBRegisterHub(PPDMDRVINS pDrvIns, uint32_t fVersions, uint32_t cPorts, PCPDMUSBHUBREG pUsbHubReg, PPCPDMUSBHUBHLP ppUsbHubHlp)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1465,7 +1465,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_USBRegisterHub(PPDMDRVINS pDrvIns, uint32_t
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnSetAsyncNotification} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnSetAsyncNotification} */
 static DECLCALLBACK(int) pdmR3DrvHlp_SetAsyncNotification(PPDMDRVINS pDrvIns, PFNPDMDRVASYNCNOTIFY pfnAsyncNotify)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1494,7 +1494,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_SetAsyncNotification(PPDMDRVINS pDrvIns, PF
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnAsyncNotificationCompleted} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnAsyncNotificationCompleted} */
 static DECLCALLBACK(void) pdmR3DrvHlp_AsyncNotificationCompleted(PPDMDRVINS pDrvIns)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1517,7 +1517,7 @@ static DECLCALLBACK(void) pdmR3DrvHlp_AsyncNotificationCompleted(PPDMDRVINS pDrv
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnThreadCreate} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnThreadCreate} */
 static DECLCALLBACK(int) pdmR3DrvHlp_ThreadCreate(PPDMDRVINS pDrvIns, PPPDMTHREAD ppThread, void *pvUser, PFNPDMTHREADDRV pfnThread,
                                                   PFNPDMTHREADWAKEUPDRV pfnWakeup, size_t cbStack, RTTHREADTYPE enmType, const char *pszName)
 {
@@ -1534,7 +1534,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_ThreadCreate(PPDMDRVINS pDrvIns, PPPDMTHREA
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnAsyncCompletionTemplateCreate} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnAsyncCompletionTemplateCreate} */
 static DECLCALLBACK(int) pdmR3DrvHlp_AsyncCompletionTemplateCreate(PPDMDRVINS pDrvIns, PPPDMASYNCCOMPLETIONTEMPLATE ppTemplate,
                                                                    PFNPDMASYNCCOMPLETEDRV pfnCompleted, void *pvTemplateUser,
                                                                    const char *pszDesc)
@@ -1552,7 +1552,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_AsyncCompletionTemplateCreate(PPDMDRVINS pD
 
 
 #ifdef VBOX_WITH_NETSHAPER
-/** @interface_method_impl{PDMDRVHLP,pfnNetShaperAttach} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnNetShaperAttach} */
 static DECLCALLBACK(int) pdmR3DrvHlp_NetShaperAttach(PPDMDRVINS pDrvIns, const char *pszBwGroup, PPDMNSFILTER pFilter)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1567,7 +1567,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_NetShaperAttach(PPDMDRVINS pDrvIns, const c
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnNetShaperDetach} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnNetShaperDetach} */
 static DECLCALLBACK(int) pdmR3DrvHlp_NetShaperDetach(PPDMDRVINS pDrvIns, PPDMNSFILTER pFilter)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1583,7 +1583,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_NetShaperDetach(PPDMDRVINS pDrvIns, PPDMNSF
 #endif /* VBOX_WITH_NETSHAPER */
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnLdrGetRCInterfaceSymbols} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnLdrGetRCInterfaceSymbols} */
 static DECLCALLBACK(int) pdmR3DrvHlp_LdrGetRCInterfaceSymbols(PPDMDRVINS pDrvIns, void *pvInterface, size_t cbInterface,
                                                               const char *pszSymPrefix, const char *pszSymList)
 {
@@ -1621,7 +1621,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_LdrGetRCInterfaceSymbols(PPDMDRVINS pDrvIns
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnLdrGetR0InterfaceSymbols} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnLdrGetR0InterfaceSymbols} */
 static DECLCALLBACK(int) pdmR3DrvHlp_LdrGetR0InterfaceSymbols(PPDMDRVINS pDrvIns, void *pvInterface, size_t cbInterface,
                                                               const char *pszSymPrefix, const char *pszSymList)
 {
@@ -1659,7 +1659,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_LdrGetR0InterfaceSymbols(PPDMDRVINS pDrvIns
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnCritSectInit} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnCritSectInit} */
 static DECLCALLBACK(int) pdmR3DrvHlp_CritSectInit(PPDMDRVINS pDrvIns, PPDMCRITSECT pCritSect,
                                                   RT_SRC_POS_DECL, const char *pszName)
 {
@@ -1677,7 +1677,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_CritSectInit(PPDMDRVINS pDrvIns, PPDMCRITSE
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnCallR0} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnCallR0} */
 static DECLCALLBACK(int) pdmR3DrvHlp_CallR0(PPDMDRVINS pDrvIns, uint32_t uOperation, uint64_t u64Arg)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1729,7 +1729,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_CallR0(PPDMDRVINS pDrvIns, uint32_t uOperat
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnFTSetCheckpoint} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnFTSetCheckpoint} */
 static DECLCALLBACK(int) pdmR3DrvHlp_FTSetCheckpoint(PPDMDRVINS pDrvIns, FTMCHECKPOINTTYPE enmType)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1737,7 +1737,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_FTSetCheckpoint(PPDMDRVINS pDrvIns, FTMCHEC
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnBlkCacheRetain} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnBlkCacheRetain} */
 static DECLCALLBACK(int) pdmR3DrvHlp_BlkCacheRetain(PPDMDRVINS pDrvIns, PPPDMBLKCACHE ppBlkCache,
                                                     PFNPDMBLKCACHEXFERCOMPLETEDRV pfnXferComplete,
                                                     PFNPDMBLKCACHEXFERENQUEUEDRV pfnXferEnqueue,
@@ -1751,7 +1751,7 @@ static DECLCALLBACK(int) pdmR3DrvHlp_BlkCacheRetain(PPDMDRVINS pDrvIns, PPPDMBLK
 
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnVMGetSuspendReason} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnVMGetSuspendReason} */
 static DECLCALLBACK(VMSUSPENDREASON) pdmR3DrvHlp_VMGetSuspendReason(PPDMDRVINS pDrvIns)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -1764,7 +1764,7 @@ static DECLCALLBACK(VMSUSPENDREASON) pdmR3DrvHlp_VMGetSuspendReason(PPDMDRVINS p
 }
 
 
-/** @interface_method_impl{PDMDRVHLP,pfnVMGetResumeReason} */
+/** @interface_method_impl{PDMDRVHLPR3,pfnVMGetResumeReason} */
 static DECLCALLBACK(VMRESUMEREASON) pdmR3DrvHlp_VMGetResumeReason(PPDMDRVINS pDrvIns)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
diff --git a/src/VBox/VMM/VMMR3/PDMLdr.cpp b/src/VBox/VMM/VMMR3/PDMLdr.cpp
index 8e5db78..14d68b6 100644
--- a/src/VBox/VMM/VMMR3/PDMLdr.cpp
+++ b/src/VBox/VMM/VMMR3/PDMLdr.cpp
@@ -91,8 +91,7 @@ VMMR3_INT_DECL(int) PDMR3LdrLoadVMMR0U(PUVM pUVM)
  * Context VMM modules.
  *
  * @returns VBox status code.
- * @param   pUVM        Pointer to the user mode VM structure.
- * @param   pvVMMR0Mod  The opaque returned by PDMR3LdrLoadVMMR0.
+ * @param   pUVM        The user mode VM structure.
  */
 int pdmR3LdrInitU(PUVM pUVM)
 {
@@ -117,7 +116,7 @@ int pdmR3LdrInitU(PUVM pUVM)
  *
  * This will unload and free all modules.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pUVM        The user mode VM structure.
  *
  * @remarks This is normally called twice during termination.
  */
@@ -448,7 +447,7 @@ static DECLCALLBACK(int) pdmR3GetImportRC(RTLDRMOD hLdrMod, const char *pszModul
  * @retval  VERR_PDM_MODULE_NAME_CLASH if a different file has already been
  *          loaded with the name module name.
  *
- * @param   pVM             The VM to load it into.
+ * @param   pVM             The cross context VM structure.
  * @param   pszFilename     Filename of the module binary.
  * @param   pszName         Module name. Case sensitive and the length is limited!
  */
@@ -734,7 +733,7 @@ static int pdmR3LoadR0U(PUVM pUVM, const char *pszFilename, const char *pszName,
  * Get the address of a symbol in a given HC ring 3 module.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszModule       Module name.
  * @param   pszSymbol       Symbol name. If it's value is less than 64k it's treated like a
  *                          ordinal value rather than a string pointer.
@@ -788,7 +787,7 @@ VMMR3_INT_DECL(int) PDMR3LdrGetSymbolR3(PVM pVM, const char *pszModule, const ch
  * Get the address of a symbol in a given HC ring 0 module.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszModule       Module name. If NULL the main R0 module (VMMR0.r0) is assumes.
  * @param   pszSymbol       Symbol name. If it's value is less than 64k it's treated like a
  *                          ordinal value rather than a string pointer.
@@ -843,7 +842,7 @@ VMMR3DECL(int) PDMR3LdrGetSymbolR0(PVM pVM, const char *pszModule, const char *p
  * Same as PDMR3LdrGetSymbolR0 except that the module will be attempted loaded if not found.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszModule       Module name. If NULL the main R0 module (VMMR0.r0) is assumed.
  * @param   pszSearchPath   List of directories to search if @a pszFile is
  *                          not qualified with a path.  Can be NULL, in which
@@ -896,7 +895,7 @@ VMMR3DECL(int) PDMR3LdrGetSymbolR0Lazy(PVM pVM, const char *pszModule, const cha
  * Get the address of a symbol in a given RC module.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszModule       Module name.  If NULL the main R0 module (VMMRC.rc)
  *                          is assumes.
  * @param   pszSymbol       Symbol name.  If it's value is less than 64k it's
@@ -962,7 +961,7 @@ VMMR3DECL(int) PDMR3LdrGetSymbolRC(PVM pVM, const char *pszModule, const char *p
  * Same as PDMR3LdrGetSymbolRC except that the module will be attempted loaded if not found.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszModule       Module name.  If NULL the main RC module (VMMRC.rc)
  *                          is assumed.
  * @param   pszSearchPath   List of directories to search if @a pszFile is
@@ -1022,7 +1021,10 @@ VMMR3DECL(int) PDMR3LdrGetSymbolRCLazy(PVM pVM, const char *pszModule, const cha
  *          Caller must free this using RTMemTmpFree().
  * @returns NULL on failure.
  *
- * @param   pszFile     File name (no path).
+ * @param   pszFile         File name (no path).
+ * @param   fShared         If true, search in the shared directory (/usr/lib on Unix), else
+ *                          search in the private directory (/usr/lib/virtualbox on Unix).
+ *                          Ignored if VBOX_PATH_SHARED_LIBS is not defined.
  */
 char *pdmR3FileR3(const char *pszFile, bool fShared)
 {
@@ -1283,7 +1285,7 @@ static DECLCALLBACK(int) pdmR3QueryModFromEIPEnumSymbols(RTLDRMOD hLdrMod, const
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM
+ * @param   pVM         The cross context VM structure.
  * @param   uPC         The program counter (eip/rip) to locate the module for.
  * @param   enmType     The module type.
  * @param   pszModName  Where to store the module name.
@@ -1373,7 +1375,7 @@ static int pdmR3LdrQueryModFromPC(PVM pVM, RTUINTPTR uPC, PDMMODTYPE enmType,
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM
+ * @param   pVM         The cross context VM structure.
  * @param   uPC         The program counter (eip/rip) to locate the module for.
  * @param   pszModName  Where to store the module name.
  * @param   cchModName  Size of the module name buffer.
@@ -1417,7 +1419,7 @@ VMMR3_INT_DECL(int) PDMR3LdrQueryRCModFromPC(PVM pVM, RTRCPTR uPC,
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM
+ * @param   pVM         The cross context VM structure.
  * @param   uPC         The program counter (eip/rip) to locate the module for.
  * @param   pszModName  Where to store the module name.
  * @param   cchModName  Size of the module name buffer.
@@ -1457,8 +1459,8 @@ VMMR3_INT_DECL(int) PDMR3LdrQueryR0ModFromPC(PVM pVM, RTR0PTR uPC,
 /**
  * Enumerate all PDM modules.
  *
- * @returns VBox status.
- * @param   pVM             Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pfnCallback     Function to call back for each of the modules.
  * @param   pvArg           User argument.
  */
@@ -1548,7 +1550,7 @@ static PPDMMOD pdmR3LdrFindModule(PUVM pUVM, const char *pszModule, PDMMODTYPE e
  * Resolves a ring-0 or raw-mode context interface.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pvInterface     Pointer to the interface structure.  The symbol list
  *                          describes the layout.
  * @param   cbInterface     The size of the structure pvInterface is pointing
diff --git a/src/VBox/VMM/VMMR3/PDMNetShaper.cpp b/src/VBox/VMM/VMMR3/PDMNetShaper.cpp
index 6aaab8e..8480f1d 100644
--- a/src/VBox/VMM/VMMR3/PDMNetShaper.cpp
+++ b/src/VBox/VMM/VMMR3/PDMNetShaper.cpp
@@ -294,10 +294,10 @@ static void pdmNsFilterUnlink(PPDMNSFILTER pFilter)
  * Attach network filter driver from bandwidth group.
  *
  * @returns VBox status code.
- * @param   pVM             Handle of VM.
- * @param   pDrvIns         The driver instance.
- * @param   pszBwGroup     Name of the bandwidth group to attach to.
- * @param   pFilter         Pointer to the filter we attach.
+ * @param   pUVM        The user mode VM structure.
+ * @param   pDrvIns     The driver instance.
+ * @param   pszBwGroup  Name of the bandwidth group to attach to.
+ * @param   pFilter     Pointer to the filter we attach.
  */
 VMMR3_INT_DECL(int) PDMR3NsAttach(PUVM pUVM, PPDMDRVINS pDrvIns, const char *pszBwGroup, PPDMNSFILTER pFilter)
 {
@@ -406,7 +406,7 @@ VMMR3DECL(int) PDMR3NsBwGroupSetLimit(PUVM pUVM, const char *pszBwGroup, uint64_
  * I/O thread for pending TX.
  *
  * @returns VINF_SUCCESS (ignored).
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pThread     The PDM thread data.
  */
 static DECLCALLBACK(int) pdmR3NsTxThread(PVM pVM, PPDMTHREAD pThread)
@@ -447,7 +447,7 @@ static DECLCALLBACK(int) pdmR3NsTxWakeUp(PVM pVM, PPDMTHREAD pThread)
  * Terminate the network shaper.
  *
  * @returns VBox error code.
- * @param   pVM  Pointer to VM.
+ * @param   pVM  The cross context VM structure.
  *
  * @remarks This method destroys all bandwidth group objects.
  */
@@ -478,7 +478,7 @@ int pdmR3NetShaperTerm(PVM pVM)
  * Initialize the network shaper.
  *
  * @returns VBox status code
- * @param   pVM Pointer to the VM.
+ * @param   pVM The cross context VM structure.
  */
 int pdmR3NetShaperInit(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/PDMQueue.cpp b/src/VBox/VMM/VMMR3/PDMQueue.cpp
index 5daff82..a158023 100644
--- a/src/VBox/VMM/VMMR3/PDMQueue.cpp
+++ b/src/VBox/VMM/VMMR3/PDMQueue.cpp
@@ -48,8 +48,8 @@ static DECLCALLBACK(void)   pdmR3QueueTimer(PVM pVM, PTMTIMER pTimer, void *pvUs
 /**
  * Internal worker for the queue creation apis.
  *
- * @returns VBox status.
- * @param   pVM                 Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM                 The cross context VM structure.
  * @param   cbItem              Item size.
  * @param   cItems              Number of items.
  * @param   cMilliesInterval    Number of milliseconds between polling the queue.
@@ -192,7 +192,7 @@ static int pdmR3QueueCreate(PVM pVM, size_t cbItem, uint32_t cItems, uint32_t cM
  * Create a queue with a device owner.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             Device instance.
  * @param   cbItem              Size a queue item.
  * @param   cItems              Number of items in the queue.
@@ -243,7 +243,7 @@ VMMR3_INT_DECL(int) PDMR3QueueCreateDevice(PVM pVM, PPDMDEVINS pDevIns, size_t c
  * Create a queue with a driver owner.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDrvIns             Driver instance.
  * @param   cbItem              Size a queue item.
  * @param   cItems              Number of items in the queue.
@@ -289,7 +289,7 @@ VMMR3_INT_DECL(int) PDMR3QueueCreateDriver(PVM pVM, PPDMDRVINS pDrvIns, size_t c
  * Create a queue with an internal owner.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   cbItem              Size a queue item.
  * @param   cItems              Number of items in the queue.
  * @param   cMilliesInterval    Number of milliseconds between polling the queue.
@@ -334,7 +334,7 @@ VMMR3_INT_DECL(int) PDMR3QueueCreateInternal(PVM pVM, size_t cbItem, uint32_t cI
  * Create a queue with an external owner.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   cbItem              Size a queue item.
  * @param   cItems              Number of items in the queue.
  * @param   cMilliesInterval    Number of milliseconds between polling the queue.
@@ -472,7 +472,7 @@ VMMR3_INT_DECL(int) PDMR3QueueDestroy(PPDMQUEUE pQueue)
  * Destroy a all queues owned by the specified device.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDevIns     Device instance.
  * @thread  Emulation thread only.
  */
@@ -524,7 +524,7 @@ VMMR3_INT_DECL(int) PDMR3QueueDestroyDevice(PVM pVM, PPDMDEVINS pDevIns)
  * Destroy a all queues owned by the specified driver.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDrvIns     Driver instance.
  * @thread  Emulation thread only.
  */
@@ -575,7 +575,7 @@ VMMR3_INT_DECL(int) PDMR3QueueDestroyDriver(PVM pVM, PPDMDRVINS pDrvIns)
 /**
  * Relocate the queues.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   offDelta        The relocation delta.
  */
 void pdmR3QueueRelocate(PVM pVM, RTGCINTPTR offDelta)
@@ -630,7 +630,7 @@ void pdmR3QueueRelocate(PVM pVM, RTGCINTPTR offDelta)
  * Flush pending queues.
  * This is a forced action callback.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @thread  Emulation thread only.
  */
 VMMR3_INT_DECL(void) PDMR3QueueFlushAll(PVM pVM)
@@ -861,7 +861,7 @@ DECLINLINE(void) pdmR3QueueFreeItem(PPDMQUEUE pQueue, PPDMQUEUEITEMCORE pItem)
  * Timer handler for PDM queues.
  * This is called by for a single queue.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pTimer  Pointer to timer.
  * @param   pvUser  Pointer to the queue.
  */
diff --git a/src/VBox/VMM/VMMR3/PDMThread.cpp b/src/VBox/VMM/VMMR3/PDMThread.cpp
index 698e871..7e640f5 100644
--- a/src/VBox/VMM/VMMR3/PDMThread.cpp
+++ b/src/VBox/VMM/VMMR3/PDMThread.cpp
@@ -19,7 +19,7 @@
 /*********************************************************************************************************************************
 *   Header Files                                                                                                                 *
 *********************************************************************************************************************************/
-///@todo #define LOG_GROUP LOG_GROUP_PDM_THREAD
+///@todo \#define LOG_GROUP LOG_GROUP_PDM_THREAD
 #include "PDMInternal.h"
 #include <VBox/vmm/pdm.h>
 #include <VBox/vmm/mm.h>
@@ -98,7 +98,7 @@ static DECLCALLBACK(int) pdmR3ThreadWakeUp(PPDMTHREAD pThread)
  * Allocates new thread instance.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   ppThread    Where to store the pointer to the instance.
  */
 static int pdmR3ThreadNew(PVM pVM, PPPDMTHREAD ppThread)
@@ -123,7 +123,7 @@ static int pdmR3ThreadNew(PVM pVM, PPPDMTHREAD ppThread)
  * Initialize a new thread, this actually creates the thread.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   ppThread    Where the thread instance data handle is.
  * @param   cbStack     The stack size, see RTThreadCreate().
  * @param   enmType     The thread type, see RTThreadCreate().
@@ -196,7 +196,7 @@ static int pdmR3ThreadInit(PVM pVM, PPPDMTHREAD ppThread, size_t cbStack, RTTHRE
  * Device Helper for creating a thread associated with a device.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDevIns     The device instance.
  * @param   ppThread    Where to store the thread 'handle'.
  * @param   pvUser      The user argument to the thread function.
@@ -229,7 +229,7 @@ int pdmR3ThreadCreateDevice(PVM pVM, PPDMDEVINS pDevIns, PPPDMTHREAD ppThread, v
  * USB Device Helper for creating a thread associated with an USB device.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pUsbIns     The USB device instance.
  * @param   ppThread    Where to store the thread 'handle'.
  * @param   pvUser      The user argument to the thread function.
@@ -262,7 +262,7 @@ int pdmR3ThreadCreateUsb(PVM pVM, PPDMUSBINS pUsbIns, PPPDMTHREAD ppThread, void
  * Driver Helper for creating a thread associated with a driver.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDrvIns     The driver instance.
  * @param   ppThread    Where to store the thread 'handle'.
  * @param   pvUser      The user argument to the thread function.
@@ -295,7 +295,7 @@ int pdmR3ThreadCreateDriver(PVM pVM, PPDMDRVINS pDrvIns, PPPDMTHREAD ppThread, v
  * Creates a PDM thread for internal use in the VM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   ppThread    Where to store the thread 'handle'.
  * @param   pvUser      The user argument to the thread function.
  * @param   pfnThread   The thread function.
@@ -326,7 +326,7 @@ VMMR3DECL(int) PDMR3ThreadCreate(PVM pVM, PPPDMTHREAD ppThread, void *pvUser, PF
  * Creates a PDM thread for VM use by some external party.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   ppThread    Where to store the thread 'handle'.
  * @param   pvUser      The user argument to the thread function.
  * @param   pfnThread   The thread function.
@@ -474,7 +474,7 @@ VMMR3DECL(int) PDMR3ThreadDestroy(PPDMTHREAD pThread, int *pRcThread)
  * destroyed (not currently implemented).
  *
  * @returns VBox status code of the first failure.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDevIns     the device instance.
  */
 int pdmR3ThreadDestroyDevice(PVM pVM, PPDMDEVINS pDevIns)
@@ -509,7 +509,7 @@ int pdmR3ThreadDestroyDevice(PVM pVM, PPDMDEVINS pDevIns)
  * This function is called by PDMUsb when a device is destroyed.
  *
  * @returns VBox status code of the first failure.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pUsbIns     The USB device instance.
  */
 int pdmR3ThreadDestroyUsb(PVM pVM, PPDMUSBINS pUsbIns)
@@ -544,7 +544,7 @@ int pdmR3ThreadDestroyUsb(PVM pVM, PPDMUSBINS pUsbIns)
  * This function is called by PDMDriver when a driver is destroyed.
  *
  * @returns VBox status code of the first failure.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDrvIns     The driver instance.
  */
 int pdmR3ThreadDestroyDriver(PVM pVM, PPDMDRVINS pDrvIns)
@@ -576,7 +576,7 @@ int pdmR3ThreadDestroyDriver(PVM pVM, PPDMDRVINS pDrvIns)
 /**
  * Called For VM power off.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 void pdmR3ThreadDestroyAll(PVM pVM)
 {
@@ -972,7 +972,7 @@ VMMR3DECL(int) PDMR3ThreadSuspend(PPDMTHREAD pThread)
  * and drivers have been notified about the suspend / power off.
  *
  * @return VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 int pdmR3ThreadSuspendAll(PVM pVM)
 {
@@ -1064,7 +1064,7 @@ VMMR3DECL(int) PDMR3ThreadResume(PPDMTHREAD pThread)
  * and drivers have been notified about the resume / power on .
  *
  * @return VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 int pdmR3ThreadResumeAll(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/PDMUsb.cpp b/src/VBox/VMM/VMMR3/PDMUsb.cpp
index 2314e0f..5244606 100644
--- a/src/VBox/VMM/VMMR3/PDMUsb.cpp
+++ b/src/VBox/VMM/VMMR3/PDMUsb.cpp
@@ -101,7 +101,7 @@ AssertCompile(sizeof(PDMUSBINSINT) <= RT_SIZEOFMEMB(PDMUSBINS, Internal.padding)
  * Registers a USB hub driver.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDrvIns         The driver instance of the hub.
  * @param   fVersions       Indicates the kinds of USB devices that can be attached to this HUB.
  * @param   cPorts          The number of ports.
@@ -168,7 +168,7 @@ int pdmR3UsbRegisterHub(PVM pVM, PPDMDRVINS pDrvIns, uint32_t fVersions, uint32_
  * Loads one device module and call the registration entry point.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pRegCB          The registration callback stuff.
  * @param   pszFilename     Module filename.
  * @param   pszName         Module name.
@@ -277,7 +277,7 @@ static DECLCALLBACK(int) pdmR3UsbReg_Register(PCPDMUSBREGCB pCallbacks, PCPDMUSB
  * This is called by pdmR3DevInit() after it has loaded it's device modules.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 int pdmR3UsbLoadModules(PVM pVM)
 {
@@ -387,7 +387,7 @@ int pdmR3UsbLoadModules(PVM pVM)
  * This is called from pdmR3DevInit() after it has do its notification round.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 int pdmR3UsbVMInitComplete(PVM pVM)
 {
@@ -428,7 +428,7 @@ PPDMUSB pdmR3UsbLookup(PVM pVM, const char *pszName)
  *
  * @returns VINF_SUCCESS and *ppHub on success.
  *          VERR_PDM_NO_USB_HUBS or VERR_PDM_NO_USB_PORTS on failure.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   iUsbVersion     The USB device version.
  * @param   ppHub           Where to store the pointer to the USB hub.
  */
@@ -486,7 +486,8 @@ static VUSBSPEED pdmR3UsbVer2Spd(uint32_t iUsbVersion)
  * Creates the device.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pHub                The USB hub it'll be attached to.
  * @param   pUsbDev             The USB device emulation.
  * @param   iInstance           -1 if not called by pdmR3UsbInstantiateDevices().
  * @param   pUuid               The UUID for this device.
@@ -698,7 +699,7 @@ static int pdmR3UsbCreateDevice(PVM pVM, PPDMUSBHUB pHub, PPDMUSB pUsbDev, int i
  * around, we'll silently skip the USB devices.
  *
  * @returns VBox status code.
- * @param   pVM
+ * @param   pVM        The cross context VM structure.
  */
 int pdmR3UsbInstantiateDevices(PVM pVM)
 {
@@ -1068,7 +1069,7 @@ VMMR3DECL(int) PDMR3UsbCreateProxyDevice(PUVM pUVM, PCRTUUID pUuid, bool fRemote
  *
  * The device must be detached from the HUB at this point.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pUsbIns         The USB device instance to destroy.
  * @thread  EMT
  */
@@ -1235,7 +1236,7 @@ VMMR3DECL(bool) PDMR3UsbHasHub(PUVM pUVM)
  * Locates a LUN.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszDevice       Device name.
  * @param   iInstance       Device instance.
  * @param   iLun            The Logical Unit to obtain the interface of.
@@ -1291,7 +1292,7 @@ static int pdmR3UsbFindLun(PVM pVM, const char *pszDevice, unsigned iInstance, u
  * @returns VBox status code.
  * @param   pUVM            The user mode VM handle.
  * @param   pszDevice       Device name.
- * @param   iInstance       Device instance.
+ * @param   iDevIns         Device instance.
  * @param   iLun            The Logical Unit to obtain the interface of.
  * @param   fFlags          Flags, combination of the PDM_TACH_FLAGS_* \#defines.
  * @param   ppBase          Where to store the base interface pointer. Optional.
@@ -1482,7 +1483,7 @@ VMMR3DECL(int)  PDMR3UsbQueryLun(PUVM pUVM, const char *pszDevice, unsigned iIns
  * @{
  */
 
-/** @interface_method_impl{PDMUSBHLPR3,pfnDriverAttach} */
+/** @interface_method_impl{PDMUSBHLP,pfnDriverAttach} */
 static DECLCALLBACK(int) pdmR3UsbHlp_DriverAttach(PPDMUSBINS pUsbIns, RTUINT iLun, PPDMIBASE pBaseInterface,
                                                   PPDMIBASE *ppBaseInterface, const char *pszDesc)
 {
@@ -1590,12 +1591,13 @@ static DECLCALLBACK(bool) pdmR3UsbHlp_AssertOther(PPDMUSBINS pUsbIns, const char
 
 
 /** @interface_method_impl{PDMUSBHLP,pfnDBGFStopV} */
-static DECLCALLBACK(int) pdmR3UsbHlp_DBGFStopV(PPDMUSBINS pUsbIns, const char *pszFile, unsigned iLine, const char *pszFunction, const char *pszFormat, va_list args)
+static DECLCALLBACK(int) pdmR3UsbHlp_DBGFStopV(PPDMUSBINS pUsbIns, const char *pszFile, unsigned iLine, const char *pszFunction,
+                                               const char *pszFormat, va_list va)
 {
     PDMUSB_ASSERT_USBINS(pUsbIns);
 #ifdef LOG_ENABLED
     va_list va2;
-    va_copy(va2, args);
+    va_copy(va2, va);
     LogFlow(("pdmR3UsbHlp_DBGFStopV: caller='%s'/%d: pszFile=%p:{%s} iLine=%d pszFunction=%p:{%s} pszFormat=%p:{%s} (%N)\n",
              pUsbIns->pReg->szName, pUsbIns->iInstance, pszFile, pszFile, iLine, pszFunction, pszFunction, pszFormat, pszFormat, pszFormat, &va2));
     va_end(va2);
@@ -1603,7 +1605,7 @@ static DECLCALLBACK(int) pdmR3UsbHlp_DBGFStopV(PPDMUSBINS pUsbIns, const char *p
 
     PVM pVM = pUsbIns->Internal.s.pVM;
     VM_ASSERT_EMT(pVM);
-    int rc = DBGFR3EventSrcV(pVM, DBGFEVENT_DEV_STOP, pszFile, iLine, pszFunction, pszFormat, args);
+    int rc = DBGFR3EventSrcV(pVM, DBGFEVENT_DEV_STOP, pszFile, iLine, pszFunction, pszFormat, va);
     if (rc == VERR_DBGF_NOT_ATTACHED)
         rc = VINF_SUCCESS;
 
@@ -1708,13 +1710,13 @@ static DECLCALLBACK(int) pdmR3UsbHlp_SSMRegister(PPDMUSBINS pUsbIns, uint32_t uV
 
 /** @interface_method_impl{PDMUSBHLP,pfnSTAMRegisterV} */
 static DECLCALLBACK(void) pdmR3UsbHlp_STAMRegisterV(PPDMUSBINS pUsbIns, void *pvSample, STAMTYPE enmType, STAMVISIBILITY enmVisibility,
-                                                    STAMUNIT enmUnit, const char *pszDesc, const char *pszName, va_list args)
+                                                    STAMUNIT enmUnit, const char *pszDesc, const char *pszName, va_list va)
 {
     PDMUSB_ASSERT_USBINS(pUsbIns);
     PVM pVM = pUsbIns->Internal.s.pVM;
     VM_ASSERT_EMT(pVM);
 
-    int rc = STAMR3RegisterV(pVM, pvSample, enmType, enmVisibility, enmUnit, pszDesc, pszName, args);
+    int rc = STAMR3RegisterV(pVM, pvSample, enmType, enmVisibility, enmUnit, pszDesc, pszName, va);
     AssertRC(rc);
 
     NOREF(pVM);
diff --git a/src/VBox/VMM/VMMR3/PGM.cpp b/src/VBox/VMM/VMMR3/PGM.cpp
index 441111b..cb52eb5 100644
--- a/src/VBox/VMM/VMMR3/PGM.cpp
+++ b/src/VBox/VMM/VMMR3/PGM.cpp
@@ -155,7 +155,7 @@
  * Placeholder.
  *
  *
- * @subsection      sec_pgm_handlers_virt   Virtual Access Handlers
+ * @subsection      sec_pgm_handlers_phys   Physical Access Handlers
  *
  * Placeholder.
  *
@@ -248,7 +248,7 @@
  *      - Moving or mirroring a VM onto a different physical machine.
  *
  *
- * @subsection subsec_pgmPhys_Definitions       Definitions
+ * @section sec_pgmPhys_Definitions       Definitions
  *
  * Allocation chunk - A RTR0MemObjAllocPhysNC object and the tracking
  * machinery associated with it.
@@ -256,7 +256,7 @@
  *
  *
  *
- * @subsection subsec_pgmPhys_AllocPage         Allocating a page.
+ * @section sec_pgmPhys_AllocPage         Allocating a page.
  *
  * Initially we map *all* guest memory to the (per VM) zero page, which
  * means that none of the read functions will cause pages to be allocated.
@@ -285,7 +285,7 @@
  * zeroed pages as they are going to be filled instantly.
  *
  *
- * @subsection subsec_pgmPhys_FreePage          Freeing a page
+ * @section sec_pgmPhys_FreePage          Freeing a page
  *
  * There are a few points where a page can be freed:
  *      - After being replaced by the zero page.
@@ -315,7 +315,7 @@
  * cpu time or memory into this.
  *
  *
- * @subsection subsec_pgmPhys_SharePage         Sharing a page
+ * @section sec_pgmPhys_SharePage         Sharing a page
  *
  * The basic idea is that there there will be a idle priority kernel
  * thread walking the non-shared VM pages hashing them and looking for
@@ -336,7 +336,7 @@
  * per-VM guest memory structures (presently called PGMRAMRANGE).
  *
  *
- * @subsection subsec_pgmPhys_Fragmentation     Fragmentation Concerns and Counter Measures
+ * @section sec_pgmPhys_Fragmentation     Fragmentation Concerns and Counter Measures
  *
  * The pages are organized in allocation chunks in ring-0, this is a necessity
  * if we wish to have an OS agnostic approach to this whole thing. (On Linux we
@@ -364,7 +364,7 @@
  * the same as when telling it to share/zero a page.
  *
  *
- * @subsection subsec_pgmPhys_Tracking      Tracking Structures And Their Cost
+ * @section sec_pgmPhys_Tracking      Tracking Structures And Their Cost
  *
  * There's a difficult balance between keeping the per-page tracking structures
  * (global and guest page) easy to use and keeping them from eating too much
@@ -374,11 +374,11 @@
  * to 32GB of memory on a 32-bit system and essentially unlimited on 64-bit ones.
  *
  *
- * @subsubsection subsubsec_pgmPhys_Tracking_Kernel     Kernel Space
+ * @subsection subsec_pgmPhys_Tracking_Kernel     Kernel Space
  *
  * @see pg_GMM
  *
- * @subsubsection subsubsec_pgmPhys_Tracking_PerVM      Per-VM
+ * @subsection subsec_pgmPhys_Tracking_PerVM      Per-VM
  *
  * Fixed info is the physical address of the page (HCPhys) and the page id
  * (described above). Theoretically we'll need 48(-12) bits for the HCPhys part.
@@ -470,7 +470,7 @@
  * than once will put the GMM off balance.
  *
  *
- * @subsection subsec_pgmPhys_Serializing       Serializing Access
+ * @section sec_pgmPhys_Serializing       Serializing Access
  *
  * Initially, we'll try a simple scheme:
  *
@@ -495,7 +495,7 @@
  *        one, but not the other way around.
  *
  *
- * @subsection subsec_pgmPhys_Request           VM Request interface
+ * @section sec_pgmPhys_Request           VM Request interface
  *
  * When in ring-0 it will become necessary to send requests to a VM so it can
  * for instance move a page while defragmenting during VM destroy. The idle
@@ -551,9 +551,9 @@
  *
  * The ring-0 will be tied to the page allocator since it will operate on the
  * memory objects it contains. It will therefore require the first ring-0 mutex
- * discussed in @ref subsec_pgmPhys_Serializing. We
- * some double house keeping wrt to who has mapped what I think, since both
- * VMMR0.r0 and RTR0MemObj will keep track of mapping relations
+ * discussed in @ref sec_pgmPhys_Serializing.  We some double house keeping wrt
+ * to who has mapped what I think, since both VMMR0.r0 and RTR0MemObj will keep
+ * track of mapping relations
  *
  * The ring-3 part will be protected by the pgm critsect. For simplicity, we'll
  * require anyone that desires to do changes to the mapping cache to do that
@@ -1232,7 +1232,7 @@ static const DBGCCMD    g_aCmds[] =
  * Initiates the paging of VM.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to VM structure.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(int) PGMR3Init(PVM pVM)
 {
@@ -1546,7 +1546,7 @@ VMMR3DECL(int) PGMR3Init(PVM pVM)
  * been initialized.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 static int pgmR3InitPaging(PVM pVM)
 {
@@ -2120,7 +2120,7 @@ static int pgmR3InitStats(PVM pVM)
  * page table entries with the dummy page.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(int) PGMR3InitDynMap(PVM pVM)
 {
@@ -2154,7 +2154,7 @@ VMMR3DECL(int) PGMR3InitDynMap(PVM pVM)
  * Ring-3 init finalizing.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) PGMR3InitFinalize(PVM pVM)
 {
@@ -2272,7 +2272,7 @@ VMMR3DECL(int) PGMR3InitFinalize(PVM pVM)
  * Init phase completed callback.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   enmWhat             What has been completed.
  * @thread  EMT(0)
  */
@@ -2317,7 +2317,7 @@ VMMR3_INT_DECL(int) PGMR3InitCompleted(PVM pVM, VMINITCOMPLETED enmWhat)
  * This function will be called at init and whenever the VMM need to relocate it
  * self inside the GC.
  *
- * @param   pVM     The VM.
+ * @param   pVM     The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  */
 VMMR3DECL(void) PGMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
@@ -2531,8 +2531,8 @@ static DECLCALLBACK(int) pgmR3RelocateHyperVirtHandler(PAVLROGCPTRNODECORE pNode
 /**
  * Resets a virtual CPU when unplugged.
  *
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure.
  */
 VMMR3DECL(void) PGMR3ResetCpu(PVM pVM, PVMCPU pVCpu)
 {
@@ -2566,7 +2566,7 @@ VMMR3DECL(void) PGMR3ResetCpu(PVM pVM, PVMCPU pVCpu)
  * For the PGM component this means that any PD write monitors
  * needs to be removed.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(void) PGMR3Reset(PVM pVM)
 {
@@ -2651,7 +2651,7 @@ VMMR3_INT_DECL(void) PGMR3Reset(PVM pVM)
 /**
  * Memory setup after VM construction or reset.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   fAtReset    Indicates the context, after reset if @c true or after
  *                      construction if @c false.
  */
@@ -2698,7 +2698,7 @@ VMMR3_INT_DECL(void) PGMR3ResetNoMorePhysWritesFlag(PVM pVM)
  * Terminates the PGM.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to VM structure.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(int) PGMR3Term(PVM pVM)
 {
@@ -2716,7 +2716,7 @@ VMMR3DECL(int) PGMR3Term(PVM pVM)
 /**
  * Show paging mode.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     "all" (default), "guest", "shadow" or "host".
  */
@@ -2773,7 +2773,7 @@ static DECLCALLBACK(void) pgmR3InfoMode(PVM pVM, PCDBGFINFOHLP pHlp, const char
 /**
  * Dump registered MMIO ranges to the log.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -2800,7 +2800,7 @@ static DECLCALLBACK(void) pgmR3PhysInfo(PVM pVM, PCDBGFINFOHLP pHlp, const char
 /**
  * Dump the page directory to the log.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -2855,7 +2855,7 @@ static DECLCALLBACK(void) pgmR3InfoCr3(PVM pVM, PCDBGFINFOHLP pHlp, const char *
  * Service a VMMCALLRING3_PGM_LOCK call.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(int) PGMR3LockCall(PVM pVM)
 {
@@ -2934,7 +2934,7 @@ DECLINLINE(unsigned) pgmModeDataMaxIndex(void)
 /**
  * Initializes the paging mode data kept in PGM::paModeData.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   fResolveGCAndR0 Indicate whether or not GC and Ring-0 symbols can be resolved now.
  *                          This is used early in the init process to avoid trouble with PDM
  *                          not being initialized yet.
@@ -3146,8 +3146,8 @@ static int pgmR3ModeDataInit(PVM pVM, bool fResolveGCAndR0)
 /**
  * Switch to different (or relocated in the relocate case) mode data.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   enmShw      The shadow paging mode.
  * @param   enmGst      The guest paging mode.
  */
@@ -3227,7 +3227,7 @@ static void pgmR3ModeDataSwitch(PVM pVM, PVMCPU pVCpu, PGMMODE enmShw, PGMMODE e
  * Calculates the shadow paging mode.
  *
  * @returns The shadow paging mode.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmGuestMode    The guest mode.
  * @param   enmHostMode     The host mode.
  * @param   enmShadowMode   The current shadow mode.
@@ -3421,8 +3421,8 @@ static PGMMODE pgmR3CalcShadowMode(PVM pVM, PGMMODE enmGuestMode, SUPPAGINGMODE
  * @returns VBox status code. May suspend or power off the VM on error, but this
  *          will trigger using FFs and not status codes.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   enmGuestMode    The new guest mode. This is assumed to be different from
  *                          the current mode.
  */
@@ -3717,7 +3717,7 @@ VMMR3DECL(int) PGMR3ChangeMode(PVM pVM, PVMCPU pVCpu, PGMMODE enmGuestMode)
  * Called by pgmPoolFlushAllInt prior to flushing the pool.
  *
  * @returns VBox status code, fully asserted.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 int pgmR3ExitShadowModeBeforePoolFlush(PVMCPU pVCpu)
 {
@@ -3737,8 +3737,8 @@ int pgmR3ExitShadowModeBeforePoolFlush(PVMCPU pVCpu)
  * Called by pgmPoolFlushAllInt after flushing the pool.
  *
  * @returns VBox status code, fully asserted.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 int pgmR3ReEnterShadowModeAfterPoolFlush(PVM pVM, PVMCPU pVCpu)
 {
@@ -3759,7 +3759,7 @@ int pgmR3ReEnterShadowModeAfterPoolFlush(PVM pVM, PVMCPU pVCpu)
 /**
  * Called by PGMR3PhysSetA20 after changing the A20 state.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 void pgmR3RefreshShadowModeAfterA20Change(PVMCPU pVCpu)
 {
@@ -4186,7 +4186,7 @@ static DECLCALLBACK(int) pgmR3CheckIntegrityPhysToVirtHandlerNode(PAVLROGCPHYSNO
  *
  * @returns VINF_SUCCESS if everything is fine.
  * @returns VBox error status after asserting on integrity breach.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(int) PGMR3CheckIntegrity(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/PGMBth.h b/src/VBox/VMM/VMMR3/PGMBth.h
index b39988d..6c368b7 100644
--- a/src/VBox/VMM/VMMR3/PGMBth.h
+++ b/src/VBox/VMM/VMMR3/PGMBth.h
@@ -39,7 +39,8 @@ RT_C_DECLS_END
  * Initializes the both bit of the paging mode data.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
+ * @param   pModeData       The pointer table to initialize.
  * @param   fResolveGCAndR0 Indicate whether or not GC and Ring-0 symbols can be resolved now.
  *                          This is used early in the init process to avoid trouble with PDM
  *                          not being initialized yet.
@@ -117,8 +118,7 @@ PGM_BTH_DECL(int, InitData)(PVM pVM, PPGMMODEDATA pModeData, bool fResolveGCAndR
  * Enters the shadow+guest mode.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPhysCR3   The physical address from the CR3 register.
  */
 PGM_BTH_DECL(int, Enter)(PVMCPU pVCpu, RTGCPHYS GCPhysCR3)
@@ -202,8 +202,7 @@ PGM_BTH_DECL(int, Enter)(PVMCPU pVCpu, RTGCPHYS GCPhysCR3)
  * Relocate any GC pointers related to shadow mode paging.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   offDelta    The relocation offset.
  */
 PGM_BTH_DECL(int, Relocate)(PVMCPU pVCpu, RTGCPTR offDelta)
diff --git a/src/VBox/VMM/VMMR3/PGMDbg.cpp b/src/VBox/VMM/VMMR3/PGMDbg.cpp
index 6bce863..40387b5 100644
--- a/src/VBox/VMM/VMMR3/PGMDbg.cpp
+++ b/src/VBox/VMM/VMMR3/PGMDbg.cpp
@@ -214,9 +214,9 @@ VMMR3DECL(int) PGMR3DbgHCPhys2GCPhys(PUVM pUVM, RTHCPHYS HCPhys, PRTGCPHYS pGCPh
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvDst       Where to store what's read.
- * @param   GCPhysDst   Where to start reading from.
+ * @param   GCPhysSrc   Where to start reading from.
  * @param   cb          The number of bytes to attempt reading.
  * @param   fFlags      Flags, MBZ.
  * @param   pcbRead     For store the actual number of bytes read, pass NULL if
@@ -265,7 +265,7 @@ VMMR3_INT_DECL(int) PGMR3DbgReadGCPhys(PVM pVM, void *pvDst, RTGCPHYS GCPhysSrc,
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhysDst   Where to start writing.
  * @param   pvSrc       What to write.
  * @param   cb          The number of bytes to attempt writing.
@@ -316,9 +316,9 @@ VMMR3_INT_DECL(int) PGMR3DbgWriteGCPhys(PVM pVM, RTGCPHYS GCPhysDst, const void
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvDst       Where to store what's read.
- * @param   GCPtrDst    Where to start reading from.
+ * @param   GCPtrSrc    Where to start reading from.
  * @param   cb          The number of bytes to attempt reading.
  * @param   fFlags      Flags, MBZ.
  * @param   pcbRead     For store the actual number of bytes read, pass NULL if
@@ -372,7 +372,7 @@ VMMR3_INT_DECL(int) PGMR3DbgReadGCPtr(PVM pVM, void *pvDst, RTGCPTR GCPtrSrc, si
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtrDst    Where to start writing.
  * @param   pvSrc       What to write.
  * @param   cb          The number of bytes to attempt writing.
@@ -488,6 +488,8 @@ static const uint8_t *pgmR3DbgAlignedMemChr(const uint8_t *pb, uint8_t b, size_t
  * @param   uAlign          The needle alignment. This is of course less than a page.
  * @param   pabNeedle       The byte string to search for.
  * @param   cbNeedle        The length of the byte string.
+ * @param   pfnFixedMemScan Pointer to assembly scan function, if available for
+ *                          the given needle and alignment combination.
  * @param   pabPrev         The buffer that keeps track of a partial match that we
  *                          bring over from the previous page. This buffer must be
  *                          at least cbNeedle - 1 big.
@@ -625,7 +627,7 @@ static void pgmR3DbgSelectMemScanFunction(PFNPGMR3DBGFIXEDMEMSCAN *ppfnMemScan,
  * @retval  VERR_INVALID_POINTER if any of the pointer arguments are invalid.
  * @retval  VERR_INVALID_ARGUMENT if any other arguments are invalid.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Where to start searching.
  * @param   cbRange         The number of bytes to search.
  * @param   GCPhysAlign     The alignment of the needle. Must be a power of two
@@ -787,8 +789,9 @@ VMMR3_INT_DECL(int) PGMR3DbgScanPhysical(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cbRa
  * @retval  VERR_INVALID_POINTER if any of the pointer arguments are invalid.
  * @retval  VERR_INVALID_ARGUMENT if any other arguments are invalid.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           The CPU context to search in.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the CPU
+ *                          context to search from.
  * @param   GCPtr           Where to start searching.
  * @param   GCPtrAlign      The alignment of the needle. Must be a power of two
  *                          and less or equal to 4GB.
@@ -992,7 +995,7 @@ VMMR3_INT_DECL(int) PGMR3DbgScanVirtual(PVM pVM, PVMCPU pVCpu, RTGCPTR GCPtr, RT
  * Initializes the dumper state.
  *
  * @param   pState          The state to initialize.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   fFlags          The flags.
  * @param   u64FirstAddr    The first address.
  * @param   u64LastAddr     The last address.
@@ -1469,7 +1472,7 @@ static int  pgmR3DumpHierarchyShwPaePDPT(PPGMR3DUMPHIERARCHYSTATE pState, RTHCPH
  * Dumps a 32-bit shadow page table.
  *
  * @returns VBox status code (VINF_SUCCESS).
- * @param   pVM         Pointer to the VM.
+ * @param   pState      The dumper state.
  * @param   HCPhys      The physical address of the table.
  * @param   cMaxDepth   The maximum depth.
  */
@@ -1546,8 +1549,8 @@ static int pgmR3DumpHierarchyShwPaePML4(PPGMR3DUMPHIERARCHYSTATE pState, RTHCPHY
  * Dumps a 32-bit shadow page table.
  *
  * @returns VBox status code (VINF_SUCCESS).
- * @param   pVM         Pointer to the VM.
- * @param   pPT         Pointer to the page table.
+ * @param   pState      The dumper state.
+ * @param   HCPhys      The physical address of the table.
  * @param   fMapping    Set if it's a guest mapping.
  */
 static int pgmR3DumpHierarchyShw32BitPT(PPGMR3DUMPHIERARCHYSTATE pState, RTHCPHYS HCPhys, bool fMapping)
@@ -1773,7 +1776,7 @@ static int pgmR3DumpHierarchyShwDoIt(PPGMR3DUMPHIERARCHYSTATE pState, uint64_t c
  * dbgfR3PagingDumpEx worker.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   cr3             The CR3 register value.
  * @param   fFlags          The flags, DBGFPGDMP_FLAGS_XXX.
  * @param   u64FirstAddr    The start address.
@@ -1801,7 +1804,7 @@ VMMR3_INT_DECL(int) PGMR3DumpHierarchyShw(PVM pVM, uint64_t cr3, uint32_t fFlags
  * Dumps a page table hierarchy use only physical addresses and cr4/lm flags.
  *
  * @returns VBox status code (VINF_SUCCESS).
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   cr3         The root of the hierarchy.
  * @param   cr4         The cr4, only PAE and PSE is currently used.
  * @param   fLongMode   Set if long mode, false if not long mode.
@@ -2142,7 +2145,7 @@ static int  pgmR3DumpHierarchyGstPaePDPT(PPGMR3DUMPHIERARCHYSTATE pState, RTGCPH
  * Dumps a 32-bit shadow page table.
  *
  * @returns VBox status code (VINF_SUCCESS).
- * @param   pVM         Pointer to the VM.
+ * @param   pState      The dumper state.
  * @param   GCPhys      The physical address of the table.
  * @param   cMaxDepth   The maximum depth.
  */
@@ -2451,7 +2454,7 @@ static int pgmR3DumpHierarchyGstDoIt(PPGMR3DUMPHIERARCHYSTATE pState, uint64_t c
  * dbgfR3PagingDumpEx worker.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   cr3             The CR3 register value.
  * @param   fFlags          The flags, DBGFPGDMP_FLAGS_XXX.
  * @param   FirstAddr       The start address.
diff --git a/src/VBox/VMM/VMMR3/PGMGst.h b/src/VBox/VMM/VMMR3/PGMGst.h
index 5b83554..b652fca 100644
--- a/src/VBox/VMM/VMMR3/PGMGst.h
+++ b/src/VBox/VMM/VMMR3/PGMGst.h
@@ -37,7 +37,8 @@ RT_C_DECLS_END
  * Initializes the guest bit of the paging mode data.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
+ * @param   pModeData       The pointer table to initialize (our members only).
  * @param   fResolveGCAndR0 Indicate whether or not GC and Ring-0 symbols can be resolved now.
  *                          This is used early in the init process to avoid trouble with PDM
  *                          not being initialized yet.
@@ -87,7 +88,7 @@ PGM_GST_DECL(int, InitData)(PVM pVM, PPGMMODEDATA pModeData, bool fResolveGCAndR
  * Enters the guest mode.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPhysCR3   The physical address from the CR3 register.
  */
 PGM_GST_DECL(int, Enter)(PVMCPU pVCpu, RTGCPHYS GCPhysCR3)
@@ -104,7 +105,7 @@ PGM_GST_DECL(int, Enter)(PVMCPU pVCpu, RTGCPHYS GCPhysCR3)
  * Relocate any GC pointers related to guest mode paging.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   offDelta    The relocation offset.
  */
 PGM_GST_DECL(int, Relocate)(PVMCPU pVCpu, RTGCPTR offDelta)
@@ -125,7 +126,7 @@ PGM_GST_DECL(int, Relocate)(PVMCPU pVCpu, RTGCPTR offDelta)
  * Exits the guest mode.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 PGM_GST_DECL(int, Exit)(PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMR3/PGMHandler.cpp b/src/VBox/VMM/VMMR3/PGMHandler.cpp
index be969e5..45d1ce2 100644
--- a/src/VBox/VMM/VMMR3/PGMHandler.cpp
+++ b/src/VBox/VMM/VMMR3/PGMHandler.cpp
@@ -71,7 +71,7 @@ static DECLCALLBACK(int) pgmR3InfoHandlersVirtualOne(PAVLROGCPTRNODECORE pNode,
  * Register a physical page access handler type, extended version.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the cross context VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   enmKind         The kind of access handler.
  * @param   pfnHandlerR3    Pointer to the ring-3 handler callback.
  * @param   pfnHandlerR0    Pointer to the ring-0 handler callback.
@@ -136,15 +136,19 @@ VMMR3_INT_DECL(int) PGMR3HandlerPhysicalTypeRegisterEx(PVM pVM, PGMPHYSHANDLERKI
  * Register a physical page access handler type.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the cross context VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   enmKind         The kind of access handler.
  * @param   pfnHandlerR3    Pointer to the ring-3 handler callback.
  * @param   pszModR0        The name of the ring-0 module, NULL is an alias for
  *                          the main ring-0 module.
+ * @param   pszHandlerR0    The name of the ring-0 handler, NULL if the ring-3
+ *                          handler should be called.
  * @param   pszPfHandlerR0  The name of the ring-0 \#PF handler, NULL if the
  *                          ring-3 handler should be called.
  * @param   pszModRC        The name of the raw-mode context module, NULL is an
  *                          alias for the main RC module.
+ * @param   pszHandlerRC    The name of the raw-mode context handler, NULL if
+ *                          the ring-3 handler should be called.
  * @param   pszPfHandlerRC  The name of the raw-mode context \#PF handler, NULL
  *                          if the ring-3 handler should be called.
  * @param   pszDesc         The type description.
@@ -226,7 +230,7 @@ VMMR3DECL(int) PGMR3HandlerPhysicalTypeRegister(PVM pVM, PGMPHYSHANDLERKIND enmK
 /**
  * Updates the physical page access handlers.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @remark  Only used when restoring a saved state.
  */
 void pgmR3HandlerPhysicalUpdateAll(PVM pVM)
@@ -311,7 +315,7 @@ static DECLCALLBACK(int) pgmR3HandlerPhysicalOneSet(PAVLROGCPHYSNODECORE pNode,
  * Register a virtual page access handler type, extended version.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the cross context VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   enmKind         The kind of access handler.
  * @param   fRelocUserRC    Whether the pvUserRC argument should be
  *                          automatically relocated or not.
@@ -387,7 +391,7 @@ VMMR3_INT_DECL(int) PGMR3HandlerVirtualTypeRegisterEx(PVM pVM, PGMVIRTHANDLERKIN
  * Register a physical page access handler type.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the cross context VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   enmKind         The kind of access handler.
  * @param   fRelocUserRC    Whether the pvUserRC argument should be
  *                          automatically relocated or not.
@@ -447,7 +451,7 @@ VMMR3_INT_DECL(int) PGMR3HandlerVirtualTypeRegister(PVM pVM, PGMVIRTHANDLERKIND
  * Register a access handler for a virtual range.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   hType           The handler type.
  * @param   GCPtr           Start address.
  * @param   GCPtrLast       Last address (inclusive).
@@ -580,7 +584,7 @@ VMMR3_INT_DECL(int) PGMR3HandlerVirtualRegister(PVM pVM, PVMCPU pVCpu, PGMVIRTHA
  * The new and old type must have the same access kind.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPtr           Start address of the virtual handler.
  * @param   hNewType        The new handler type.
  */
@@ -615,9 +619,9 @@ VMMR3_INT_DECL(int) PGMHandlerVirtualChangeType(PVM pVM, RTGCPTR GCPtr, PGMVIRTH
  * Deregister an access handler for a virtual range.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the cross context CPU structure for the
- *                      calling EMT.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling
+ *                      EMT.
  * @param   GCPtr       Start address.
  * @param   fHypervisor Set if PGMVIRTHANDLERKIND_HYPERVISOR, false if not.
  * @thread  EMT(pVCpu)
@@ -695,6 +699,7 @@ typedef struct PGMHANDLERINFOARG
 /**
  * Info callback for 'pgmhandlers'.
  *
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The output helpers.
  * @param   pszArgs     The arguments. phys or virt.
  */
diff --git a/src/VBox/VMM/VMMR3/PGMMap.cpp b/src/VBox/VMM/VMMR3/PGMMap.cpp
index 04679e1..77c7ff4 100644
--- a/src/VBox/VMM/VMMR3/PGMMap.cpp
+++ b/src/VBox/VMM/VMMR3/PGMMap.cpp
@@ -51,7 +51,7 @@ static void pgmR3MapIntermediateDoOne(PVM pVM, uintptr_t uAddress, RTHCPHYS HCPh
  * Creates a page table based mapping in GC.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPtr           Virtual Address. (Page table aligned!)
  * @param   cb              Size of the range. Must be a 4MB aligned!
  * @param   fFlags          PGMR3MAPPT_FLAGS_UNMAPPABLE or 0.
@@ -220,7 +220,7 @@ VMMR3DECL(int) PGMR3MapPT(PVM pVM, RTGCPTR GCPtr, uint32_t cb, uint32_t fFlags,
  * Removes a page table based mapping.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   GCPtr   Virtual Address. (Page table aligned!)
  *
  * @remarks Don't call this without passing PGMR3MAPPT_FLAGS_UNMAPPABLE to
@@ -296,7 +296,7 @@ VMMR3DECL(int)  PGMR3UnmapPT(PVM pVM, RTGCPTR GCPtr)
  * We're talking 32-bit PDEs here.
  *
  * @returns true/false.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iPD         The first PDE in the range.
  * @param   cPTs        The number of PDEs in the range.
  */
@@ -320,7 +320,7 @@ DECLINLINE(bool) pgmR3AreIntermediatePDEsUnused(PVM pVM, unsigned iPD, unsigned
  *
  * The mapping *must* be in the list.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pMapping        The mapping to unlink.
  */
 static void pgmR3MapUnlink(PVM pVM, PPGMMAPPING pMapping)
@@ -352,7 +352,7 @@ static void pgmR3MapUnlink(PVM pVM, PPGMMAPPING pMapping)
 /**
  * Links the mapping.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pMapping        The mapping to linked.
  */
 static void pgmR3MapLink(PVM pVM, PPGMMAPPING pMapping)
@@ -399,7 +399,7 @@ static void pgmR3MapLink(PVM pVM, PPGMMAPPING pMapping)
  * intermediate paging structures, relocating all the mappings in the process.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @thread  EMT(0)
  */
 VMMR3DECL(int) PGMR3FinalizeMappings(PVM pVM)
@@ -485,7 +485,7 @@ VMMR3DECL(int) PGMR3FinalizeMappings(PVM pVM)
  * put next to one another.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pcb     Where to store the size.
  */
 VMMR3DECL(int) PGMR3MappingsSize(PVM pVM, uint32_t *pcb)
@@ -507,7 +507,7 @@ VMMR3DECL(int) PGMR3MappingsSize(PVM pVM, uint32_t *pcb)
  * Fixates the guest context mappings in a range reserved from the Guest OS.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtrBase   The address of the reserved range of guest memory.
  * @param   cb          The size of the range starting at GCPtrBase.
  */
@@ -547,7 +547,7 @@ VMMR3DECL(int) PGMR3MappingsFix(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb)
  * (This does not perform a SyncCR3 before the fixation like PGMR3MappingsFix.)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtrBase   The address of the reserved range of guest memory.
  * @param   cb          The size of the range starting at GCPtrBase.
  */
@@ -691,7 +691,7 @@ int pgmR3MappingsFixInternal(PVM pVM, RTGCPTR GCPtrBase, uint32_t cb)
  * take place afterwards.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) PGMR3MappingsUnfix(PVM pVM)
 {
@@ -720,7 +720,7 @@ VMMR3DECL(int) PGMR3MappingsUnfix(PVM pVM)
  * Checks if the mappings needs re-fixing after a restore.
  *
  * @returns true if they need, false if not.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMR3DECL(bool) PGMR3MappingsNeedReFixing(PVM pVM)
 {
@@ -737,7 +737,7 @@ VMMR3DECL(bool) PGMR3MappingsNeedReFixing(PVM pVM)
  * address (for identity mapping).
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   Addr        Intermediate context address of the mapping.
  * @param   HCPhys      Start of the range of physical pages. This must be entriely below 4GB!
  * @param   cbPages     Number of bytes to map.
@@ -802,7 +802,7 @@ VMMR3DECL(int) PGMR3MapIntermediate(PVM pVM, RTUINTPTR Addr, RTHCPHYS HCPhys, un
  * Validates that there are no conflicts for this mapping into the intermediate context.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   uAddress        Address of the mapping.
  * @param   cPages          Number of pages.
  * @param   pPTDefault      Pointer to the default page table for this mapping.
@@ -884,7 +884,7 @@ static int pgmR3MapIntermediateCheckOne(PVM pVM, uintptr_t uAddress, unsigned cP
 /**
  * Sets up the intermediate page tables for a verified mapping.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   uAddress        Address of the mapping.
  * @param   HCPhys          The physical address of the page range.
  * @param   cPages          Number of pages.
@@ -941,7 +941,7 @@ static void pgmR3MapIntermediateDoOne(PVM pVM, uintptr_t uAddress, RTHCPHYS HCPh
 /**
  * Clears all PDEs involved with the mapping in the shadow and intermediate page tables.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pMap        Pointer to the mapping in question.
  * @param   iOldPDE     The index of the 32-bit PDE corresponding to the base of the mapping.
  */
@@ -981,7 +981,7 @@ static void pgmR3MapClearPDEs(PVM pVM, PPGMMAPPING pMap, unsigned iOldPDE)
 /**
  * Sets all PDEs involved with the mapping in the shadow and intermediate page tables.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pMap        Pointer to the mapping in question.
  * @param   iNewPDE     The index of the 32-bit PDE corresponding to the base of the mapping.
  */
@@ -1036,7 +1036,7 @@ static void pgmR3MapSetPDEs(PVM pVM, PPGMMAPPING pMap, unsigned iNewPDE)
 /**
  * Relocates a mapping to a new address.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pMapping            The mapping to relocate.
  * @param   GCPtrOldMapping     The address of the start of the old mapping.
  *                              NIL_RTGCPTR if not currently mapped.
@@ -1158,7 +1158,7 @@ bool pgmR3MapIsKnownConflictAddress(PPGMMAPPING pMapping, RTGCPTR GCPtr)
  * the Guest OS page tables. (32 bits version)
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pMapping            The mapping which conflicts.
  * @param   pPDSrc              The page directory of the guest OS.
  * @param   GCPtrOldMapping     The address of the start of the current mapping.
@@ -1235,7 +1235,7 @@ int pgmR3SyncPTResolveConflict(PVM pVM, PPGMMAPPING pMapping, PX86PD pPDSrc, RTG
  * the Guest OS page tables. (PAE bits version)
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pMapping            The mapping which conflicts.
  * @param   GCPtrOldMapping     The address of the start of the current mapping.
  */
@@ -1327,8 +1327,8 @@ int pgmR3SyncPTResolveConflictPAE(PVM pVM, PPGMMAPPING pMapping, RTGCPTR GCPtrOl
  * since we don't necessarily know how to convert that physical address
  * to a HC virtual one.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pvDst       The destination address (HC of course).
  * @param   GCPtrSrc    The source address (GC virtual address).
  * @param   cb          Number of bytes to read.
@@ -1409,6 +1409,7 @@ VMMR3DECL(int) PGMR3MapRead(PVM pVM, void *pvDst, RTGCPTR GCPtrSrc, size_t cb)
 /**
  * Info callback for 'pgmhandlers'.
  *
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The output helpers.
  * @param   pszArgs     The arguments. phys or virt.
  */
diff --git a/src/VBox/VMM/VMMR3/PGMPhys.cpp b/src/VBox/VMM/VMMR3/PGMPhys.cpp
index 2f1acd6..5b9a4f6 100644
--- a/src/VBox/VMM/VMMR3/PGMPhys.cpp
+++ b/src/VBox/VMM/VMMR3/PGMPhys.cpp
@@ -101,7 +101,7 @@ static DECLCALLBACK(int) pgmR3PhysReadExternalEMT(PVM pVM, PRTGCPHYS pGCPhys, vo
  * @returns VBox status code.
  * @retval  VINF_SUCCESS.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Physical address to read from.
  * @param   pvBuf           Where to read into.
  * @param   cbRead          How many bytes to read.
@@ -234,7 +234,7 @@ static DECLCALLBACK(int) pgmR3PhysWriteExternalEMT(PVM pVM, PRTGCPHYS pGCPhys, c
  * @retval  VINF_SUCCESS.
  * @retval  VERR_EM_NO_MEMORY.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Physical address to write to.
  * @param   pvBuf           What to write.
  * @param   cbWrite         How many bytes to write.
@@ -356,7 +356,7 @@ VMMDECL(int) PGMR3PhysWriteExternal(PVM pVM, RTGCPHYS GCPhys, const void *pvBuf,
  * VMR3ReqCall worker for PGMR3PhysGCPhys2CCPtrExternal to make pages writable.
  *
  * @returns see PGMR3PhysGCPhys2CCPtrExternal
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pGCPhys     Pointer to the guest physical address.
  * @param   ppv         Where to store the mapping address.
  * @param   pLock       Where to store the lock.
@@ -420,7 +420,7 @@ static DECLCALLBACK(int) pgmR3PhysGCPhys2CCPtrDelegated(PVM pVM, PRTGCPHYS pGCPh
  *          must fall back on using PGMR3PhysWriteExternal.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The guest physical address of the page that should be mapped.
  * @param   ppv         Where to store the address corresponding to GCPhys.
  * @param   pLock       Where to store the lock information that PGMPhysReleasePageMappingLock needs.
@@ -527,7 +527,7 @@ VMMR3DECL(int) PGMR3PhysGCPhys2CCPtrExternal(PVM pVM, RTGCPHYS GCPhys, void **pp
  *          must fall back on using PGMPhysRead.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The guest physical address of the page that should be mapped.
  * @param   ppv         Where to store the address corresponding to GCPhys.
  * @param   pLock       Where to store the lock information that PGMPhysReleasePageMappingLock needs.
@@ -620,8 +620,7 @@ VMMR3DECL(int) PGMR3PhysGCPhys2CCPtrReadOnlyExternal(PVM pVM, RTGCPHYS GCPhys, v
  * Recursive tree builder.
  *
  * @param   ppRam           Pointer to the iterator variable.
- * @param   iHeight         The hight about normal leaf nodes.  Inserts a leaf
- *                          node if 0.
+ * @param   iDepth          The current depth.  Inserts a leaf node if 0.
  */
 static PPGMRAMRANGE pgmR3PhysRebuildRamRangeSearchTreesRecursively(PPGMRAMRANGE *ppRam, int iDepth)
 {
@@ -664,7 +663,7 @@ static PPGMRAMRANGE pgmR3PhysRebuildRamRangeSearchTreesRecursively(PPGMRAMRANGE
 /**
  * Rebuilds the RAM range search trees.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static void pgmR3PhysRebuildRamRangeSearchTrees(PVM pVM)
 {
@@ -738,7 +737,7 @@ static void pgmR3PhysRebuildRamRangeSearchTrees(PVM pVM)
  *
  * Called when anything was relocated.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 void pgmR3PhysRelinkRamRanges(PVM pVM)
 {
@@ -788,7 +787,7 @@ void pgmR3PhysRelinkRamRanges(PVM pVM)
 /**
  * Links a new RAM range into the list.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pNew        Pointer to the new list entry.
  * @param   pPrev       Pointer to the previous list entry. If NULL, insert as head.
  */
@@ -827,7 +826,7 @@ static void pgmR3PhysLinkRamRange(PVM pVM, PPGMRAMRANGE pNew, PPGMRAMRANGE pPrev
 /**
  * Unlink an existing RAM range from the list.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRam        Pointer to the new list entry.
  * @param   pPrev       Pointer to the previous list entry. If NULL, insert as head.
  */
@@ -863,7 +862,7 @@ static void pgmR3PhysUnlinkRamRange2(PVM pVM, PPGMRAMRANGE pRam, PPGMRAMRANGE pP
 /**
  * Unlink an existing RAM range from the list.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRam        Pointer to the new list entry.
  */
 static void pgmR3PhysUnlinkRamRange(PVM pVM, PPGMRAMRANGE pRam)
@@ -889,7 +888,7 @@ static void pgmR3PhysUnlinkRamRange(PVM pVM, PPGMRAMRANGE pRam)
  * Frees a range of pages, replacing them with ZERO pages of the specified type.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRam        The RAM range in which the pages resides.
  * @param   GCPhys      The address of the first page.
  * @param   GCPhysLast  The address of the last page.
@@ -936,8 +935,8 @@ static int pgmR3PhysFreePageRange(PVM pVM, PPGMRAMRANGE pRam, RTGCPHYS GCPhys, R
  * it to complete this function.
  *
  * @returns VINF_SUCCESS (VBox strict status code).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The VMCPU for the EMT we're being called on. Unused.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT. Unused.
  * @param   pvUser      User parameter
  */
 static DECLCALLBACK(VBOXSTRICTRC) pgmR3PhysChangeMemBalloonRendezvous(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -1053,7 +1052,7 @@ static DECLCALLBACK(VBOXSTRICTRC) pgmR3PhysChangeMemBalloonRendezvous(PVM pVM, P
  * Frees a range of ram pages, replacing them with ZERO pages; helper for PGMR3PhysFreeRamPages
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   fInflate    Inflate or deflate memory balloon
  * @param   cPages      Number of pages to free
  * @param   paPhysPage  Array of guest physical addresses
@@ -1078,7 +1077,7 @@ static DECLCALLBACK(void) pgmR3PhysChangeMemBalloonHelper(PVM pVM, bool fInflate
  * Inflate or deflate a memory balloon
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   fInflate    Inflate or deflate memory balloon
  * @param   cPages      Number of pages to free
  * @param   paPhysPage  Array of guest physical addresses
@@ -1133,8 +1132,8 @@ VMMR3DECL(int) PGMR3PhysChangeMemBalloon(PVM pVM, bool fInflate, unsigned cPages
  * it to complete this function.
  *
  * @returns VINF_SUCCESS (VBox strict status code).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The VMCPU for the EMT we're being called on. Unused.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT. Unused.
  * @param   pvUser      User parameter, unused.
  */
 static DECLCALLBACK(VBOXSTRICTRC) pgmR3PhysWriteProtectRAMRendezvous(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -1204,7 +1203,7 @@ static DECLCALLBACK(VBOXSTRICTRC) pgmR3PhysWriteProtectRAMRendezvous(PVM pVM, PV
  * Protect all physical RAM to monitor writes
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) PGMR3PhysWriteProtectRAM(PVM pVM)
 {
@@ -1219,7 +1218,7 @@ VMMR3DECL(int) PGMR3PhysWriteProtectRAM(PVM pVM)
  * Enumerate all dirty FT pages.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pfnEnum     Enumerate callback handler.
  * @param   pvUser      Enumerate callback handler parameter.
  */
@@ -1303,7 +1302,7 @@ VMMR3DECL(int) PGMR3PhysEnumDirtyFTPages(PVM pVM, PFNPGMENUMDIRTYFTPAGES pfnEnum
  * Gets the number of ram ranges.
  *
  * @returns Number of ram ranges.  Returns UINT32_MAX if @a pVM is invalid.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR3DECL(uint32_t) PGMR3PhysGetRamRangeCount(PVM pVM)
 {
@@ -1322,11 +1321,12 @@ VMMR3DECL(uint32_t) PGMR3PhysGetRamRangeCount(PVM pVM)
  * Get information about a range.
  *
  * @returns VINF_SUCCESS or VERR_OUT_OF_RANGE.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   iRange          The ordinal of the range.
  * @param   pGCPhysStart    Where to return the start of the range. Optional.
  * @param   pGCPhysLast     Where to return the address of the last byte in the
  *                          range. Optional.
+ * @param   ppszDesc        Where to return the range description. Optional.
  * @param   pfIsMmio        Where to indicate that this is a pure MMIO range.
  *                          Optional.
  */
@@ -1455,7 +1455,7 @@ VMMR3DECL(int) PGMR3QueryMemoryStats(PUVM pUVM, uint64_t *pcbTotalMem, uint64_t
 /**
  * PGMR3PhysRegisterRam worker that initializes and links a RAM range.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pNew            The new RAM range.
  * @param   GCPhys          The address of the RAM range.
  * @param   GCPhysLast      The last address of the RAM range.
@@ -1500,9 +1500,10 @@ static void pgmR3PhysInitAndLinkRamRange(PVM pVM, PPGMRAMRANGE pNew, RTGCPHYS GC
 /**
  * Relocate a floating RAM range.
  *
- * @copydoc FNPGMRELOCATE.
+ * @copydoc FNPGMRELOCATE
  */
-static DECLCALLBACK(bool) pgmR3PhysRamRangeRelocate(PVM pVM, RTGCPTR GCPtrOld, RTGCPTR GCPtrNew, PGMRELOCATECALL enmMode, void *pvUser)
+static DECLCALLBACK(bool) pgmR3PhysRamRangeRelocate(PVM pVM, RTGCPTR GCPtrOld, RTGCPTR GCPtrNew,
+                                                    PGMRELOCATECALL enmMode, void *pvUser)
 {
     PPGMRAMRANGE pRam = (PPGMRAMRANGE)pvUser;
     Assert(pRam->fFlags & PGM_RAM_RANGE_FLAGS_FLOATING);
@@ -1540,7 +1541,7 @@ static DECLCALLBACK(bool) pgmR3PhysRamRangeRelocate(PVM pVM, RTGCPTR GCPtrOld, R
  * PGMR3PhysRegisterRam worker that registers a high chunk.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          The address of the RAM.
  * @param   cRamPages       The number of RAM pages to register.
  * @param   cbChunk         The size of the PGMRAMRANGE guest mapping.
@@ -1630,7 +1631,7 @@ static int pgmR3PhysRegisterHighRamChunk(PVM pVM, RTGCPHYS GCPhys, uint32_t cRam
  * tracking structures (PGMPAGE).
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          The physical address of the RAM.
  * @param   cb              The size of the RAM.
  * @param   pszDesc         The description - not copied, so, don't free or change it.
@@ -1767,7 +1768,7 @@ VMMR3DECL(int) PGMR3PhysRegisterRam(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cb, const
  *
  * @returns VBox status code.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int pgmR3PhysRamPreAllocate(PVM pVM)
 {
@@ -1831,7 +1832,7 @@ int pgmR3PhysRamPreAllocate(PVM pVM)
 /**
  * Checks shared page checksums.
  *
- * @param   pVM     Pointer to the shared VM structure.
+ * @param   pVM     The cross context VM structure.
  */
 void pgmR3PhysAssertSharedPageChecksums(PVM pVM)
 {
@@ -1893,7 +1894,7 @@ void pgmR3PhysAssertSharedPageChecksums(PVM pVM)
  * ASSUMES that the caller owns the PGM lock.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int pgmR3PhysRamReset(PVM pVM)
 {
@@ -1923,7 +1924,7 @@ int pgmR3PhysRamReset(PVM pVM)
  * ASSUMES that the caller owns the PGM lock.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int pgmR3PhysRamZeroAll(PVM pVM)
 {
@@ -2074,7 +2075,7 @@ int pgmR3PhysRamZeroAll(PVM pVM)
  * ASSUMES that the caller owns the PGM lock.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int pgmR3PhysRamTerm(PVM pVM)
 {
@@ -2166,7 +2167,7 @@ int pgmR3PhysRamTerm(PVM pVM)
  *
  * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          The start of the MMIO region.
  * @param   cb              The size of the MMIO region.
  * @param   hType           The physical access handler type registration.
@@ -2325,7 +2326,7 @@ VMMR3DECL(int) PGMR3PhysMMIORegister(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cb, PGMP
  * any ad hoc PGMRAMRANGE left behind.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          The start of the MMIO region.
  * @param   cb              The size of the MMIO region.
  */
@@ -2444,7 +2445,7 @@ VMMR3DECL(int) PGMR3PhysMMIODeregister(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cb)
  * Locate a MMIO2 range.
  *
  * @returns Pointer to the MMIO2 range.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         The device instance owning the region.
  * @param   iRegion         The region.
  */
@@ -2479,7 +2480,7 @@ DECLINLINE(PPGMMMIO2RANGE) pgmR3PhysMMIO2Find(PVM pVM, PPDMDEVINS pDevIns, uint3
  *          memory.
  * @retval  VERR_ALREADY_EXISTS if the region already exists.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         The device instance owning the region.
  * @param   iRegion         The region number.  If the MMIO2 memory is a PCI
  *                          I/O region this number has to be the number of that
@@ -2629,7 +2630,7 @@ VMMR3DECL(int) PGMR3PhysMMIO2Register(PVM pVM, PPDMDEVINS pDevIns, uint32_t iReg
  * be deregistered before calling this function.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         The device instance owning the region.
  * @param   iRegion         The region. If it's UINT32_MAX it'll be a wildcard match.
  */
@@ -2739,7 +2740,7 @@ VMMR3DECL(int) PGMR3PhysMMIO2Deregister(PVM pVM, PPDMDEVINS pDevIns, uint32_t iR
  *
  * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         The device instance owning the region.
  * @param   iRegion         The index of the registered region.
  * @param   GCPhys          The guest-physical address to be remapped.
@@ -3000,7 +3001,7 @@ VMMR3DECL(int) PGMR3PhysMMIO2Unmap(PVM pVM, PPDMDEVINS pDevIns, uint32_t iRegion
  * Checks if the given address is an MMIO2 base address or not.
  *
  * @returns true/false accordingly.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         The owner of the memory, optional.
  * @param   GCPhys          The address to check.
  */
@@ -3038,7 +3039,7 @@ VMMR3DECL(bool) PGMR3PhysMMIO2IsBase(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhy
  * by anyone else...
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         The owner of the memory, optional.
  * @param   iRegion         The region.
  * @param   off             The page expressed an offset into the MMIO2 region.
@@ -3073,7 +3074,7 @@ VMMR3DECL(int) PGMR3PhysMMIO2GetHCPhys(PVM pVM, PPDMDEVINS pDevIns, uint32_t iRe
  *
  * @return VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pDevIns     The device owning the MMIO2 memory.
  * @param   iRegion     The region.
  * @param   off         The offset into the region. Must be page aligned.
@@ -3114,8 +3115,8 @@ VMMR3DECL(int) PGMR3PhysMMIO2MapKernel(PVM pVM, PPDMDEVINS pDevIns, uint32_t iRe
  * locking and we can simply return without needing to remember to unlock
  * anything first.
  *
- * @returns VBox status.
- * @param   pVM                 Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             The device instance owning the ROM.
  * @param   GCPhys              First physical address in the range.
  *                              Must be page aligned!
@@ -3467,8 +3468,8 @@ static int pgmR3PhysRomRegister(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhys, RT
  * will allocate RAM pages for the changes on demand (unless all memory
  * is configured to be preallocated).
  *
- * @returns VBox status.
- * @param   pVM                 Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDevIns             The device instance owning the ROM.
  * @param   GCPhys              First physical address in the range.
  *                              Must be page aligned!
@@ -3505,7 +3506,7 @@ VMMR3DECL(int) PGMR3PhysRomRegister(PVM pVM, PPDMDEVINS pDevIns, RTGCPHYS GCPhys
  *
  * ASSUMES that the caller owns the PGM lock.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 int pgmR3PhysRomReset(PVM pVM)
 {
@@ -3614,7 +3615,7 @@ int pgmR3PhysRomReset(PVM pVM)
  *
  * ASSUMES that the caller owns the PGM lock.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 void pgmR3PhysRomTerm(PVM pVM)
 {
@@ -3645,7 +3646,7 @@ void pgmR3PhysRomTerm(PVM pVM)
  * @returns VBox status code.
  * @retval  VINF_PGM_SYNC_CR3
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      Where to start. Page aligned.
  * @param   cb          How much to change. Page aligned.
  * @param   enmProt     The new ROM protection.
@@ -3738,7 +3739,7 @@ VMMR3DECL(int) PGMR3PhysRomProtect(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cb, PGMROM
 /**
  * Sets the Address Gate 20 state.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   fEnable     True if the gate should be enabled.
  *                      False if the gate should be disabled.
  */
@@ -3849,7 +3850,7 @@ static DECLCALLBACK(int) pgmR3PhysChunkUnmapCandidateCallback(PAVLU32NODECORE pN
  * anything afterwards.
  *
  * @returns Chunk id.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int32_t pgmR3PhysChunkFindUnmapCandidate(PVM pVM)
 {
@@ -3884,8 +3885,8 @@ static int32_t pgmR3PhysChunkFindUnmapCandidate(PVM pVM)
  * it to complete this function.
  *
  * @returns VINF_SUCCESS (VBox strict status code).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The VMCPU for the EMT we're being called on. Unused.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT. Unused.
  * @param   pvUser      User pointer. Unused
  *
  */
@@ -3977,7 +3978,7 @@ static DECLCALLBACK(VBOXSTRICTRC) pgmR3PhysUnmapChunkRendezvous(PVM pVM, PVMCPU
  * Unmap a chunk to free up virtual address space (request packet handler for pgmR3PhysChunkMap)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 void pgmR3PhysUnmapChunk(PVM pVM)
 {
@@ -3992,7 +3993,7 @@ void pgmR3PhysUnmapChunk(PVM pVM)
  * This will call ring-0.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idChunk     The chunk in question.
  * @param   ppChunk     Where to store the chunk tracking structure.
  *
@@ -4117,7 +4118,7 @@ int pgmR3PhysChunkMap(PVM pVM, uint32_t idChunk, PPPGMCHUNKR3MAP ppChunk)
  * For VMMCALLRING3_PGM_MAP_CHUNK, considered internal.
  *
  * @returns see pgmR3PhysChunkMap.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idChunk     The chunk to map.
  */
 VMMR3DECL(int) PGMR3PhysChunkMap(PVM pVM, uint32_t idChunk)
@@ -4135,7 +4136,7 @@ VMMR3DECL(int) PGMR3PhysChunkMap(PVM pVM, uint32_t idChunk)
 /**
  * Invalidates the TLB for the ring-3 mapping cache.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(void) PGMR3PhysChunkInvalidateTLB(PVM pVM)
 {
@@ -4159,7 +4160,7 @@ VMMR3DECL(void) PGMR3PhysChunkInvalidateTLB(PVM pVM)
  * @retval  VINF_SUCCESS on success.
  * @retval  VINF_EM_NO_MEMORY if we're out of memory.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      GC physical start address of the 2 MB range
  */
 VMMR3DECL(int) PGMR3PhysAllocateLargeHandyPage(PVM pVM, RTGCPHYS GCPhys)
@@ -4284,7 +4285,7 @@ VMMR3DECL(int) PGMR3PhysAllocateLargeHandyPage(PVM pVM, RTGCPHYS GCPhys)
  * @retval  VINF_EM_NO_MEMORY if we're out of memory. The FF is not cleared in
  *          this case and it gets accompanied by VM_FF_PGM_NO_MEMORY.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  *
  * @remarks The VINF_EM_NO_MEMORY status is for the benefit of the FF processing
  *          in EM.cpp and shouldn't be propagated outside TRPM, HM, EM and
@@ -4442,7 +4443,7 @@ VMMR3DECL(int) PGMR3PhysAllocateHandyPages(PVM pVM)
  *
  * This is used by ballooning, remapping MMIO2, RAM reset and state loading.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pReq            Pointer to the request.
  * @param   pcPendingPages  Where the number of pages waiting to be freed are
  *                          kept.  This will normally be incremented.
@@ -4563,7 +4564,7 @@ int pgmPhysFreePage(PVM pVM, PGMMFREEPAGESREQ pReq, uint32_t *pcPendingPages, PP
  *          accesses or is odd in any way.
  * @retval  VERR_PGM_PHYS_TLB_UNASSIGNED if the page doesn't exist.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address to convert.  Since this is only
  *                      used for filling the REM TLB, the A20 mask must be
  *                      applied before calling this API.
diff --git a/src/VBox/VMM/VMMR3/PGMPhysRWTmpl.h b/src/VBox/VMM/VMMR3/PGMPhysRWTmpl.h
index 7f5899e..3ac9bd3 100644
--- a/src/VBox/VMM/VMMR3/PGMPhysRWTmpl.h
+++ b/src/VBox/VMM/VMMR3/PGMPhysRWTmpl.h
@@ -22,7 +22,7 @@
  * This API respects access handlers and MMIO. Use PGMPhysSimpleReadGCPhys() if you
  * want to ignore those.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Physical address start reading from.
  * @param   enmOrigin       Who is calling.
  */
@@ -42,7 +42,7 @@ VMMDECL(PGMPHYS_DATATYPE) PGMPHYSFN_READNAME(PVM pVM, RTGCPHYS GCPhys, PGMACCESS
  * This API respects access handlers and MMIO. Use PGMPhysSimpleReadGCPhys() if you
  * want to ignore those.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   GCPhys          Physical address to write to.
  * @param   val             What to write.
  * @param   enmOrigin       Who is calling.
diff --git a/src/VBox/VMM/VMMR3/PGMPool.cpp b/src/VBox/VMM/VMMR3/PGMPool.cpp
index 7513087..fdd2b19 100644
--- a/src/VBox/VMM/VMMR3/PGMPool.cpp
+++ b/src/VBox/VMM/VMMR3/PGMPool.cpp
@@ -69,7 +69,7 @@
  *    When caching is enabled, the page isn't flush but remains in the cache.
  *
  *
- * @section sec_pgm_pool_impl       Monitoring
+ * @section sec_pgm_pool_monitoring Monitoring
  *
  * We always monitor PAGE_SIZE chunks of memory. When we've got multiple shadow
  * pages for the same PAGE_SIZE of guest memory (PAE and mixed PD/PT) the pages
@@ -130,7 +130,7 @@ static const DBGCCMD    g_aCmds[] =
  * Initializes the pool
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int pgmR3PoolInit(PVM pVM)
 {
@@ -161,7 +161,7 @@ int pgmR3PoolInit(PVM pVM)
     else
         cMaxPages = (uint16_t)u64MaxPages;
 
-    /** @cfgm{/PGM/Pool/MaxPages, uint16_t, #pages, 16, 0x3fff, F(ram-size)}
+    /** @cfgm{/PGM/Pool/MaxPages, uint16_t, \#pages, 16, 0x3fff, F(ram-size)}
      * The max size of the shadow page pool in pages. The pool will grow dynamically
      * up to this limit.
      */
@@ -186,7 +186,7 @@ int pgmR3PoolInit(PVM pVM)
      * although that depends on the availability of 2 MB chunks on the host.
      */
 
-    /** @cfgm{/PGM/Pool/MaxUsers, uint16_t, #users, MaxUsers, 32K, MaxPages*2}
+    /** @cfgm{/PGM/Pool/MaxUsers, uint16_t, \#users, MaxUsers, 32K, MaxPages*2}
      * The max number of shadow page user tracking records. Each shadow page has
      * zero of other shadow pages (or CR3s) that references it, or uses it if you
      * like. The structures describing these relationships are allocated from a
@@ -198,7 +198,7 @@ int pgmR3PoolInit(PVM pVM)
     AssertLogRelMsgReturn(cMaxUsers >= cMaxPages && cMaxPages <= _32K,
                           ("cMaxUsers=%u (%#x)\n", cMaxUsers, cMaxUsers), VERR_INVALID_PARAMETER);
 
-    /** @cfgm{/PGM/Pool/MaxPhysExts, uint16_t, #extents, 16, MaxPages * 2, MIN(MaxPages*2,8192)}
+    /** @cfgm{/PGM/Pool/MaxPhysExts, uint16_t, \#extents, 16, MaxPages * 2, MIN(MaxPages*2\,8192)}
      * The max number of extents for tracking aliased guest pages.
      */
     uint16_t cMaxPhysExts;
@@ -409,7 +409,7 @@ int pgmR3PoolInit(PVM pVM)
 /**
  * Relocate the page pool data.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 void pgmR3PoolRelocate(PVM pVM)
 {
@@ -426,7 +426,7 @@ void pgmR3PoolRelocate(PVM pVM)
  * I.e. adds more pages to it, assuming that hasn't reached cMaxPages yet.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(int) PGMR3PoolGrow(PVM pVM)
 {
@@ -497,20 +497,20 @@ VMMR3DECL(int) PGMR3PoolGrow(PVM pVM)
  * it to complete this function.
  *
  * @returns VINF_SUCCESS (VBox strict status code).
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   The VMCPU for the EMT we're being called on. Unused.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT. Unused.
  * @param   fpvFlushRemTlb  When not NULL, we'll flush the REM TLB as well.
  *                          (This is the pvUser, so it has to be void *.)
  *
  */
-DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, void *fpvFlushRemTbl)
+DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, void *fpvFlushRemTlb)
 {
     PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool);
     STAM_PROFILE_START(&pPool->StatClearAll, c);
     NOREF(pVCpu);
 
     pgmLock(pVM);
-    Log(("pgmR3PoolClearAllRendezvous: cUsedPages=%d fpvFlushRemTbl=%RTbool\n", pPool->cUsedPages, !!fpvFlushRemTbl));
+    Log(("pgmR3PoolClearAllRendezvous: cUsedPages=%d fpvFlushRemTlb=%RTbool\n", pPool->cUsedPages, !!fpvFlushRemTlb));
 
     /*
      * Iterate all the pages until we've encountered all that are in use.
@@ -731,7 +731,7 @@ DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, vo
 
     PGM_INVL_ALL_VCPU_TLBS(pVM);
 
-    if (fpvFlushRemTbl)
+    if (fpvFlushRemTlb)
         for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
             CPUMSetChangedFlags(&pVM->aCpus[idCpu], CPUM_CHANGED_GLOBAL_TLB_FLUSH);
 
@@ -743,7 +743,7 @@ DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, vo
 /**
  * Clears the shadow page pool.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   fFlushRemTlb    When set, the REM TLB is scheduled for flushing as
  *                          well.
  */
@@ -757,7 +757,7 @@ void pgmR3PoolClearAll(PVM pVM, bool fFlushRemTlb)
 /**
  * Protect all pgm pool page table entries to monitor writes
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  *
  * @remarks ASSUMES the caller will flush all TLBs!!
  */
diff --git a/src/VBox/VMM/VMMR3/PGMSavedState.cpp b/src/VBox/VMM/VMMR3/PGMSavedState.cpp
index dceca8b..6fca2e7 100644
--- a/src/VBox/VMM/VMMR3/PGMSavedState.cpp
+++ b/src/VBox/VMM/VMMR3/PGMSavedState.cpp
@@ -208,7 +208,7 @@ static const SSMFIELD s_aPGMFields_Old[] =
  *
  * @returns Pointer to the ROM page structure. NULL if the caller didn't check
  *          that it's a ROM page.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The address of the ROM page.
  */
 static PPGMROMPAGE pgmR3GetRomPage(PVM pVM, RTGCPHYS GCPhys) /** @todo change this to take a hint. */
@@ -229,7 +229,7 @@ static PPGMROMPAGE pgmR3GetRomPage(PVM pVM, RTGCPHYS GCPhys) /** @todo change th
  * Prepares the ROM pages for a live save.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 static int pgmR3PrepRomPages(PVM pVM)
 {
@@ -280,7 +280,7 @@ static int pgmR3PrepRomPages(PVM pVM)
  * Assigns IDs to the ROM ranges and saves them.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                Saved state handle.
  */
 static int pgmR3SaveRomRanges(PVM pVM, PSSMHANDLE pSSM)
@@ -310,7 +310,7 @@ static int pgmR3SaveRomRanges(PVM pVM, PSSMHANDLE pSSM)
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int pgmR3LoadRomRanges(PVM pVM, PSSMHANDLE pSSM)
@@ -388,7 +388,7 @@ static int pgmR3LoadRomRanges(PVM pVM, PSSMHANDLE pSSM)
 /**
  * Scan ROM pages.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 static void pgmR3ScanRomPages(PVM pVM)
 {
@@ -431,7 +431,7 @@ static void pgmR3ScanRomPages(PVM pVM)
  * This ASSUMES that no new ROM ranges will be added and that they won't be
  * relinked in any way.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The SSM handle.
  * @param   fLiveSave           Whether we're in a live save or not.
  */
@@ -508,7 +508,7 @@ static int pgmR3SaveRomVirginPages(PVM pVM, PSSMHANDLE pSSM, bool fLiveSave)
  * Used by pgmR3LiveExecPart2 and pgmR3SaveExecMemory.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The SSM handle.
  * @param   fLiveSave           Whether it's a live save or not.
  * @param   fFinalPass          Whether this is the final pass or not.
@@ -620,7 +620,7 @@ static int pgmR3SaveShadowedRomPages(PVM pVM, PSSMHANDLE pSSM, bool fLiveSave, b
 /**
  * Cleans up ROM pages after a live save.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 static void pgmR3DoneRomPages(PVM pVM)
 {
@@ -632,7 +632,7 @@ static void pgmR3DoneRomPages(PVM pVM)
  * Prepares the MMIO2 pages for a live save.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 static int pgmR3PrepMmio2Pages(PVM pVM)
 {
@@ -672,7 +672,7 @@ static int pgmR3PrepMmio2Pages(PVM pVM)
  * Assigns IDs to the MMIO2 ranges and saves them.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                Saved state handle.
  */
 static int pgmR3SaveMmio2Ranges(PVM pVM, PSSMHANDLE pSSM)
@@ -701,7 +701,7 @@ static int pgmR3SaveMmio2Ranges(PVM pVM, PSSMHANDLE pSSM)
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int pgmR3LoadMmio2Ranges(PVM pVM, PSSMHANDLE pSSM)
@@ -785,7 +785,7 @@ static int pgmR3LoadMmio2Ranges(PVM pVM, PSSMHANDLE pSSM)
  *
  * @returns True if changed, false if unchanged.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pbPage              The page bits.
  * @param   pLSPage             The live save tracking structure for the page.
  *
@@ -858,7 +858,7 @@ DECLINLINE(bool) pgmR3ScanMmio2Page(PVM pVM, uint8_t const *pbPage, PPGMLIVESAVE
 /**
  * Scan for MMIO2 page modifications.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   uPass               The pass number.
  */
 static void pgmR3ScanMmio2Pages(PVM pVM, uint32_t uPass)
@@ -895,7 +895,7 @@ static void pgmR3ScanMmio2Pages(PVM pVM, uint32_t uPass)
  * Save quiescent MMIO2 pages.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The SSM handle.
  * @param   fLiveSave           Whether it's a live save or not.
  * @param   uPass               The pass number.
@@ -1034,7 +1034,7 @@ static int pgmR3SaveMmio2Pages(PVM pVM, PSSMHANDLE pSSM, bool fLiveSave, uint32_
 /**
  * Cleans up MMIO2 pages after a live save.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 static void pgmR3DoneMmio2Pages(PVM pVM)
 {
@@ -1062,7 +1062,7 @@ static void pgmR3DoneMmio2Pages(PVM pVM)
  * Prepares the RAM pages for a live save.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 static int pgmR3PrepRamPages(PVM pVM)
 {
@@ -1201,7 +1201,7 @@ static int pgmR3PrepRamPages(PVM pVM)
  * Saves the RAM configuration.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int pgmR3SaveRamConfig(PVM pVM, PSSMHANDLE pSSM)
@@ -1223,7 +1223,7 @@ static int pgmR3SaveRamConfig(PVM pVM, PSSMHANDLE pSSM)
  * Loads and verifies the RAM configuration.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int pgmR3LoadRamConfig(PVM pVM, PSSMHANDLE pSSM)
@@ -1256,7 +1256,7 @@ static int pgmR3LoadRamConfig(PVM pVM, PSSMHANDLE pSSM)
  * Calculates the CRC-32 for a RAM page and updates the live save page tracking
  * info with it.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pCur                The current RAM range.
  * @param   paLSPages           The current array of live save page tracking
  *                              structures.
@@ -1305,7 +1305,7 @@ static void pgmR3StateVerifyCrc32ForPage(void const *pvPage, PPGMRAMRANGE pCur,
 /**
  * Verifies the CRC-32 for a RAM page.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pCur                The current RAM range.
  * @param   paLSPages           The current array of live save page tracking
  *                              structures.
@@ -1332,7 +1332,7 @@ static void pgmR3StateVerifyCrc32ForRamPage(PVM pVM, PPGMRAMRANGE pCur, PPGMLIVE
 /**
  * Scan for RAM page modifications and reprotect them.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   fFinalPass          Whether this is the final pass or not.
  */
 static void pgmR3ScanRamPages(PVM pVM, bool fFinalPass)
@@ -1540,7 +1540,7 @@ static void pgmR3ScanRamPages(PVM pVM, bool fFinalPass)
  * Save quiescent RAM pages.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The SSM handle.
  * @param   fLiveSave           Whether it's a live save or not.
  * @param   uPass               The pass number.
@@ -1760,7 +1760,7 @@ static int pgmR3SaveRamPages(PVM pVM, PSSMHANDLE pSSM, bool fLiveSave, uint32_t
 /**
  * Cleans up RAM pages after a live save.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 static void pgmR3DoneRamPages(PVM pVM)
 {
@@ -1825,12 +1825,7 @@ static void pgmR3DoneRamPages(PVM pVM)
 
 
 /**
- * Execute a live save pass.
- *
- * @returns VBox status code.
- *
- * @param   pVM         Pointer to the VM.
- * @param   pSSM        The SSM handle.
+ * @callback_method_impl{FNSSMINTLIVEEXEC}
  */
 static DECLCALLBACK(int) pgmR3LiveExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass)
 {
@@ -1889,13 +1884,7 @@ static DECLCALLBACK(int) pgmR3LiveExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass)
 
 
 /**
- * Votes on whether the live save phase is done or not.
- *
- * @returns VBox status code.
- *
- * @param   pVM         Pointer to the VM.
- * @param   pSSM        The SSM handle.
- * @param   uPass       The data pass.
+ * @callback_method_impl{FNSSMINTLIVEVOTE}
  */
 static DECLCALLBACK(int)  pgmR3LiveVote(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass)
 {
@@ -1998,16 +1987,11 @@ static DECLCALLBACK(int)  pgmR3LiveVote(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass
 
 
 /**
- * Prepare for a live save operation.
+ * @callback_method_impl{FNSSMINTLIVEPREP}
  *
  * This will attempt to allocate and initialize the tracking structures.  It
  * will also prepare for write monitoring of pages and initialize PGM::LiveSave.
  * pgmR3SaveDone will do the cleanups.
- *
- * @returns VBox status code.
- *
- * @param   pVM         Pointer to the VM.
- * @param   pSSM        The SSM handle.
  */
 static DECLCALLBACK(int) pgmR3LivePrep(PVM pVM, PSSMHANDLE pSSM)
 {
@@ -2057,11 +2041,7 @@ static DECLCALLBACK(int) pgmR3LivePrep(PVM pVM, PSSMHANDLE pSSM)
 
 
 /**
- * Execute state save operation.
- *
- * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   pSSM            SSM operation handle.
+ * @callback_method_impl{FNSSMINTSAVEEXEC}
  */
 static DECLCALLBACK(int) pgmR3SaveExec(PVM pVM, PSSMHANDLE pSSM)
 {
@@ -2127,11 +2107,7 @@ static DECLCALLBACK(int) pgmR3SaveExec(PVM pVM, PSSMHANDLE pSSM)
 
 
 /**
- * Cleans up after an save state operation.
- *
- * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   pSSM            SSM operation handle.
+ * @callback_method_impl{FNSSMINTSAVEDONE}
  */
 static DECLCALLBACK(int) pgmR3SaveDone(PVM pVM, PSSMHANDLE pSSM)
 {
@@ -2161,11 +2137,7 @@ static DECLCALLBACK(int) pgmR3SaveDone(PVM pVM, PSSMHANDLE pSSM)
 
 
 /**
- * Prepare state load operation.
- *
- * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   pSSM            SSM operation handle.
+ * @callback_method_impl{FNSSMINTLOADPREP}
  */
 static DECLCALLBACK(int) pgmR3LoadPrep(PVM pVM, PSSMHANDLE pSSM)
 {
@@ -2226,7 +2198,7 @@ DECLINLINE(bool) pgmR3CompareNewAndOldPageTypes(PPGMPAGE pPage, uint8_t uOldType
  * really zero.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   uOldType        The page type or PGMPAGETYPE_OLD_INVALID (old saved
  *                          state).
  * @param   pPage           The guest page tracking structure.
@@ -2255,7 +2227,7 @@ static int pgmR3LoadPageZeroOld(PVM pVM, uint8_t uOldType, PPGMPAGE pPage, RTGCP
  * Loads a page from the saved state.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The SSM handle.
  * @param   uOldType        The page type or PGMPAGETYPE_OLD_INVALID (old saved
  *                          state).
@@ -2299,7 +2271,7 @@ static int pgmR3LoadPageBitsOld(PVM pVM, PSSMHANDLE pSSM, uint8_t uOldType, PPGM
  * Loads a page (counter part to pgmR3SavePage).
  *
  * @returns VBox status code, fully bitched errors.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The SSM handle.
  * @param   uOldType        The page type.
  * @param   pPage           The page.
@@ -2328,7 +2300,7 @@ static int pgmR3LoadPageOld(PVM pVM, PSSMHANDLE pSSM, uint8_t uOldType, PPGMPAGE
  * Loads a shadowed ROM page.
  *
  * @returns VBox status code, errors are fully bitched.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The saved state handle.
  * @param   pPage           The page.
  * @param   GCPhys          The page address.
@@ -2382,7 +2354,7 @@ static int pgmR3LoadShadowedRomPageOld(PVM pVM, PSSMHANDLE pSSM, PPGMPAGE pPage,
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pSSM        The SSM handle.
  * @param   uVersion    The saved state version.
  */
@@ -2625,7 +2597,7 @@ static int pgmR3LoadMemoryOld(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion)
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The SSM handle.
  * @param   uVersion            The PGM saved state unit version.
  * @param   uPass               The pass number.
@@ -2990,7 +2962,7 @@ static int pgmR3LoadMemory(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The SSM handle.
  * @param   uVersion            The saved state version.
  */
@@ -3144,13 +3116,7 @@ static int pgmR3LoadFinalLocked(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion)
 
 
 /**
- * Execute state load operation.
- *
- * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
- * @param   pSSM            SSM operation handle.
- * @param   uVersion        Data layout version.
- * @param   uPass           The data pass.
+ * @callback_method_impl{FNSSMINTLOADEXEC}
  */
 static DECLCALLBACK(int) pgmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass)
 {
@@ -3333,7 +3299,7 @@ static DECLCALLBACK(int) pgmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion,
  * Registers the saved state callbacks with SSM.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to VM.
+ * @param   pVM     The cross context VM structure.
  * @param   cbRam   The RAM size.
  */
 int pgmR3InitSavedState(PVM pVM, uint64_t cbRam)
diff --git a/src/VBox/VMM/VMMR3/PGMSharedPage.cpp b/src/VBox/VMM/VMMR3/PGMSharedPage.cpp
index 9efd8c4..056cd85 100644
--- a/src/VBox/VMM/VMMR3/PGMSharedPage.cpp
+++ b/src/VBox/VMM/VMMR3/PGMSharedPage.cpp
@@ -54,7 +54,7 @@ static unsigned                     g_cSharedModules = 0;
  * Registers a new shared module for the VM
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   enmGuestOS          Guest OS type.
  * @param   pszModuleName       Module name.
  * @param   pszVersion          Module version.
@@ -139,7 +139,7 @@ VMMR3DECL(int) PGMR3SharedModuleRegister(PVM pVM, VBOXOSFAMILY enmGuestOS, char
  * Unregisters a shared module for the VM
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pszModuleName       Module name.
  * @param   pszVersion          Module version.
  * @param   GCBaseAddr          Module base address.
@@ -204,8 +204,8 @@ VMMR3DECL(int) PGMR3SharedModuleUnregister(PVM pVM, char *pszModuleName, char *p
  * Rendezvous callback that will be called once.
  *
  * @returns VBox strict status code.
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               Pointer to the VMCPU of the calling EMT.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser              Pointer to a VMCPUID with the requester's ID.
  */
 static DECLCALLBACK(VBOXSTRICTRC) pgmR3SharedModuleRegRendezvous(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -243,8 +243,8 @@ static DECLCALLBACK(VBOXSTRICTRC) pgmR3SharedModuleRegRendezvous(PVM pVM, PVMCPU
 /**
  * Shared module check helper (called on the way out).
  *
- * @param   pVM         Pointer to the VM.
- * @param   VMCPUID     VCPU id
+ * @param   pVM         The cross context VM structure.
+ * @param   idCpu       VCPU id.
  */
 static DECLCALLBACK(void) pgmR3CheckSharedModulesHelper(PVM pVM, VMCPUID idCpu)
 {
@@ -260,7 +260,7 @@ static DECLCALLBACK(void) pgmR3CheckSharedModulesHelper(PVM pVM, VMCPUID idCpu)
  * Check all registered modules for changes.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM
+ * @param   pVM                 The cross context VM structure.
  */
 VMMR3DECL(int) PGMR3SharedModuleCheckAll(PVM pVM)
 {
@@ -277,7 +277,7 @@ VMMR3DECL(int) PGMR3SharedModuleCheckAll(PVM pVM)
  * Query the state of a page in a shared module
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   GCPtrPage           Page address.
  * @param   pfShared            Shared status (out).
  * @param   pfPageFlags         Page flags (out).
diff --git a/src/VBox/VMM/VMMR3/PGMShw.h b/src/VBox/VMM/VMMR3/PGMShw.h
index b0b1581..8593dbc 100644
--- a/src/VBox/VMM/VMMR3/PGMShw.h
+++ b/src/VBox/VMM/VMMR3/PGMShw.h
@@ -125,7 +125,8 @@ RT_C_DECLS_END
  * Initializes the guest bit of the paging mode data.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
+ * @param   pModeData       The pointer table to initialize (our members only).
  * @param   fResolveGCAndR0 Indicate whether or not GC and Ring-0 symbols can be resolved now.
  *                          This is used early in the init process to avoid trouble with PDM
  *                          not being initialized yet.
@@ -168,7 +169,7 @@ PGM_SHW_DECL(int, InitData)(PVM pVM, PPGMMODEDATA pModeData, bool fResolveGCAndR
  * Enters the shadow mode.
  *
  * @returns VBox status code.
- * @param   pVCpu                   Pointer to the VMCPU.
+ * @param   pVCpu                   The cross context virtual CPU structure.
  * @param   fIs64BitsPagingMode     New shadow paging mode is for 64 bits? (only relevant for 64 bits guests on a 32 bits AMD-V nested paging host)
  */
 PGM_SHW_DECL(int, Enter)(PVMCPU pVCpu, bool fIs64BitsPagingMode)
@@ -215,7 +216,7 @@ PGM_SHW_DECL(int, Enter)(PVMCPU pVCpu, bool fIs64BitsPagingMode)
  * Relocate any GC pointers related to shadow mode paging.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   offDelta    The relocation offset.
  */
 PGM_SHW_DECL(int, Relocate)(PVMCPU pVCpu, RTGCPTR offDelta)
@@ -229,7 +230,7 @@ PGM_SHW_DECL(int, Relocate)(PVMCPU pVCpu, RTGCPTR offDelta)
  * Exits the shadow mode.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 PGM_SHW_DECL(int, Exit)(PVMCPU pVCpu)
 {
diff --git a/src/VBox/VMM/VMMR3/SELM.cpp b/src/VBox/VMM/VMMR3/SELM.cpp
index e0bcb08..7cc7b2f 100644
--- a/src/VBox/VMM/VMMR3/SELM.cpp
+++ b/src/VBox/VMM/VMMR3/SELM.cpp
@@ -116,7 +116,7 @@ static char const g_aszSRegNms[X86_SREG_COUNT][4] = { "ES", "CS", "SS", "DS", "F
  * Initializes the SELM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) SELMR3Init(PVM pVM)
 {
@@ -327,7 +327,7 @@ VMMR3DECL(int) SELMR3Init(PVM pVM)
  * Finalizes HMA page attributes.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(int) SELMR3InitFinalize(PVM pVM)
 {
@@ -372,7 +372,7 @@ VMMR3DECL(int) SELMR3InitFinalize(PVM pVM)
 /**
  * Setup the hypervisor GDT selectors in our shadow table
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 static void selmR3SetupHyperGDTSelectors(PVM pVM)
 {
@@ -473,7 +473,7 @@ static void selmR3SetupHyperGDTSelectors(PVM pVM)
  * component. This function will be called at init and
  * whenever the VMM need to relocate it self inside the GC.
  *
- * @param   pVM     The VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(void) SELMR3Relocate(PVM pVM)
 {
@@ -605,7 +605,7 @@ VMMR3DECL(void) SELMR3Relocate(PVM pVM)
  * the VM it self is at this point powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) SELMR3Term(PVM pVM)
 {
@@ -620,7 +620,7 @@ VMMR3DECL(int) SELMR3Term(PVM pVM)
  * For the SELM component this means that any GDT/LDT/TSS monitors
  * needs to be removed.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(void) SELMR3Reset(PVM pVM)
 {
@@ -687,7 +687,7 @@ VMMR3DECL(void) SELMR3Reset(PVM pVM)
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 static DECLCALLBACK(int) selmR3Save(PVM pVM, PSSMHANDLE pSSM)
@@ -714,7 +714,7 @@ static DECLCALLBACK(int) selmR3Save(PVM pVM, PSSMHANDLE pSSM)
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion        Data layout version.
  * @param   uPass           The data pass.
@@ -780,7 +780,7 @@ static DECLCALLBACK(int) selmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion,
  * executing GC code.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 static DECLCALLBACK(int) selmR3LoadDone(PVM pVM, PSSMHANDLE pSSM)
@@ -827,8 +827,8 @@ static DECLCALLBACK(int) selmR3LoadDone(PVM pVM, PSSMHANDLE pSSM)
  * Updates (syncs) the shadow GDT.
  *
  * @returns VBox status code.
- * @param   pVM                 The VM handle.
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  */
 static int selmR3UpdateShadowGdt(PVM pVM, PVMCPU pVCpu)
 {
@@ -1086,8 +1086,8 @@ static int selmR3UpdateShadowGdt(PVM pVM, PVMCPU pVCpu)
  * Updates (syncs) the shadow LDT.
  *
  * @returns VBox status code.
- * @param   pVM                 The VM handle.
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  */
 static int selmR3UpdateShadowLdt(PVM pVM, PVMCPU pVCpu)
 {
@@ -1322,8 +1322,8 @@ static int selmR3UpdateShadowLdt(PVM pVM, PVMCPU pVCpu)
  * @returns VBox strict status code.
  * @retval  VINF_EM_RESCHEDULE_REM if a stale register was found.
  *
- * @param   pVM                 The VM handle.
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  */
 static VBOXSTRICTRC selmR3UpdateSegmentRegisters(PVM pVM, PVMCPU pVCpu)
 {
@@ -1425,8 +1425,8 @@ static VBOXSTRICTRC selmR3UpdateSegmentRegisters(PVM pVM, PVMCPU pVCpu)
  * Updates the Guest GDT & LDT virtualization based on current CPU state.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3DECL(VBOXSTRICTRC) SELMR3UpdateFromCPUM(PVM pVM, PVMCPU pVCpu)
 {
@@ -1486,8 +1486,8 @@ VMMR3DECL(VBOXSTRICTRC) SELMR3UpdateFromCPUM(PVM pVM, PVMCPU pVCpu)
  * loaded TR.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3DECL(int) SELMR3SyncTSS(PVM pVM, PVMCPU pVCpu)
 {
@@ -1723,7 +1723,7 @@ VMMR3DECL(int) SELMR3SyncTSS(PVM pVM, PVMCPU pVCpu)
  * This is a VBOX_STRICT only function.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) SELMR3DebugCheck(PVM pVM)
 {
@@ -1861,7 +1861,7 @@ VMMR3DECL(int) SELMR3DebugCheck(PVM pVM)
  *
  * @returns true if it matches.
  * @returns false and assertions on mismatch..
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(bool) SELMR3CheckTSS(PVM pVM)
 {
@@ -2004,7 +2004,7 @@ VMMR3DECL(bool) SELMR3CheckTSS(PVM pVM)
  *
  * @returns true if it matches.
  * @returns false and assertions on mismatch..
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(bool) SELMR3CheckShadowTR(PVM pVM)
 {
@@ -2049,7 +2049,7 @@ VMMR3DECL(bool) SELMR3CheckShadowTR(PVM pVM)
  *
  * @returns VBox status code, see SELMR3GetSelectorInfo for details.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   Sel         The selector to get info about.
  * @param   pSelInfo    Where to store the information.
  */
@@ -2209,8 +2209,8 @@ DECLINLINE(void) selmR3SelInfoFromDesc32(PDBGFSELINFO pSelInfo, PCX86DESC pDesc)
  *
  * @returns VBox status code, see SELMR3GetSelectorInfo for details.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   Sel         The selector to get info about.
  * @param   pSelInfo    Where to store the information.
  */
@@ -2316,8 +2316,8 @@ static int selmR3GetSelectorInfo32(PVM pVM, PVMCPU pVCpu, RTSEL Sel, PDBGFSELINF
  *          pagetable or page backing the selector table wasn't present.
  * @returns Other VBox status code on other errors.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   Sel         The selector to get info about.
  * @param   pSelInfo    Where to store the information.
  */
@@ -2346,7 +2346,7 @@ VMMR3DECL(int) SELMR3GetSelectorInfo(PVM pVM, PVMCPU pVCpu, RTSEL Sel, PDBGFSELI
  *          pagetable or page backing the selector table wasn't present.
  * @returns Other VBox status code on other errors.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   Sel         The selector to get info about.
  * @param   pSelInfo    Where to store the information.
  *
@@ -2507,7 +2507,7 @@ VMMR3DECL(void) SELMR3DumpDescriptor(X86DESC  Desc, RTSEL Sel, const char *pszMs
 /**
  * Display the shadow gdt.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -2541,7 +2541,7 @@ static DECLCALLBACK(void) selmR3InfoGdt(PVM pVM, PCDBGFINFOHLP pHlp, const char
 /**
  * Display the guest gdt.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -2584,7 +2584,7 @@ static DECLCALLBACK(void) selmR3InfoGdtGuest(PVM pVM, PCDBGFINFOHLP pHlp, const
 /**
  * Display the shadow ldt.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -2609,7 +2609,7 @@ static DECLCALLBACK(void) selmR3InfoLdt(PVM pVM, PCDBGFINFOHLP pHlp, const char
 /**
  * Display the guest ldt.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -2657,7 +2657,7 @@ static DECLCALLBACK(void) selmR3InfoLdtGuest(PVM pVM, PCDBGFINFOHLP pHlp, const
 /**
  * Dumps the hypervisor GDT
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(void) SELMR3DumpHyperGDT(PVM pVM)
 {
@@ -2668,7 +2668,7 @@ VMMR3DECL(void) SELMR3DumpHyperGDT(PVM pVM)
 /**
  * Dumps the hypervisor LDT
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(void) SELMR3DumpHyperLDT(PVM pVM)
 {
@@ -2679,7 +2679,7 @@ VMMR3DECL(void) SELMR3DumpHyperLDT(PVM pVM)
 /**
  * Dumps the guest GDT
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(void) SELMR3DumpGuestGDT(PVM pVM)
 {
@@ -2690,7 +2690,7 @@ VMMR3DECL(void) SELMR3DumpGuestGDT(PVM pVM)
 /**
  * Dumps the guest LDT
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(void) SELMR3DumpGuestLDT(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/SSM.cpp b/src/VBox/VMM/VMMR3/SSM.cpp
index dc6c98a..485d57b 100644
--- a/src/VBox/VMM/VMMR3/SSM.cpp
+++ b/src/VBox/VMM/VMMR3/SSM.cpp
@@ -900,7 +900,7 @@ static int                  ssmR3DataReadRecHdrV2(PSSMHANDLE pSSM);
 /**
  * Cleans up resources allocated by SSM on VM termination.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMR3_INT_DECL(void) SSMR3Term(PVM pVM)
 {
@@ -916,7 +916,7 @@ VMMR3_INT_DECL(void) SSMR3Term(PVM pVM)
  * Performs lazy initialization of the SSM.
  *
  * @returns VBox status code.
- * @param   pVM         The VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int ssmR3LazyInit(PVM pVM)
 {
@@ -954,7 +954,7 @@ static int ssmR3LazyInit(PVM pVM)
  * Do ssmR3SelfSaveExec in pass 0.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The SSM handle.
  * @param   uPass           The data pass number.
  */
@@ -977,7 +977,7 @@ static DECLCALLBACK(int) ssmR3SelfLiveExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uP
  * adding it to the header.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The SSM handle.
  */
 static DECLCALLBACK(int) ssmR3SelfSaveExec(PVM pVM, PSSMHANDLE pSSM)
@@ -1007,7 +1007,7 @@ static DECLCALLBACK(int) ssmR3SelfSaveExec(PVM pVM, PSSMHANDLE pSSM)
  * For load the version + revision and stuff.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The SSM handle.
  * @param   uVersion        The version (1).
  * @param   uPass           The pass.
@@ -1071,7 +1071,7 @@ static DECLCALLBACK(int) ssmR3SelfLoadExec(PVM pVM, PSSMHANDLE pSSM, uint32_t uV
  * This is saved by ssmR3LiveControlEmit().
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The SSM handle.
  * @param   uVersion        The version (1).
  * @param   uPass           The pass.
@@ -1105,7 +1105,7 @@ static DECLCALLBACK(int) ssmR3LiveControlLoadExec(PVM pVM, PSSMHANDLE pSSM, uint
  * Internal registration worker.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszName         Data unit name.
  * @param   uInstance       The instance id.
  * @param   uVersion        The data unit version.
@@ -1209,9 +1209,9 @@ static int ssmR3Register(PVM pVM, const char *pszName, uint32_t uInstance,
 /**
  * Register a PDM Devices data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         Device instance.
  * @param   pszName         Data unit name.
  * @param   uInstance       The instance identifier of the data unit.
@@ -1265,9 +1265,9 @@ SSMR3RegisterDevice(PVM pVM, PPDMDEVINS pDevIns, const char *pszName,
 /**
  * Register a PDM driver data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDrvIns         Driver instance.
  * @param   pszName         Data unit name.
  * @param   uInstance       The instance identifier of the data unit.
@@ -1317,9 +1317,9 @@ SSMR3RegisterDriver(PVM pVM, PPDMDRVINS pDrvIns, const char *pszName, uint32_t u
 /**
  * Register a PDM USB device data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pUsbIns         USB instance.
  * @param   pszName         Data unit name.
  * @param   uInstance       The instance identifier of the data unit.
@@ -1369,9 +1369,9 @@ SSMR3RegisterUsb(PVM pVM, PPDMUSBINS pUsbIns, const char *pszName, uint32_t uIns
 /**
  * Register a internal data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszName         Data unit name.
  * @param   uInstance       The instance identifier of the data unit.
  *                          This must together with the name be unique.
@@ -1418,7 +1418,7 @@ VMMR3DECL(int) SSMR3RegisterInternal(PVM pVM, const char *pszName, uint32_t uIns
 /**
  * Register an external data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
  * @param   pUVM            The user mode VM handle.
  * @param   pszName         Data unit name.
@@ -1488,7 +1488,7 @@ static DECLCALLBACK(int) ssmR3LoadExecStub(PVM pVM, PSSMHANDLE pSSM, uint32_t uV
  * mode and when built without raw-mode.
  *
  * @returns VBox status code.
- * @param   pVM                 The VM handle.
+ * @param   pVM                 The cross context VM structure.
  * @param   pszName             Data unit name.
  * @param   uInstance           Instance number.
  */
@@ -1504,9 +1504,9 @@ VMMR3DECL(int) SSMR3RegisterStub(PVM pVM, const char *pszName, uint32_t uInstanc
 /**
  * Deregister one or more PDM Device data units.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         Device instance.
  * @param   pszName         Data unit name.
  *                          Use NULL to deregister all data units for that device instance.
@@ -1581,8 +1581,8 @@ VMMR3_INT_DECL(int) SSMR3DeregisterDevice(PVM pVM, PPDMDEVINS pDevIns, const cha
 /**
  * Deregister one ore more PDM Driver data units.
  *
- * @returns VBox status.
- * @param   pVM             Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pDrvIns         Driver instance.
  * @param   pszName         Data unit name.
  *                          Use NULL to deregister all data units for that driver instance.
@@ -1655,8 +1655,8 @@ VMMR3_INT_DECL(int) SSMR3DeregisterDriver(PVM pVM, PPDMDRVINS pDrvIns, const cha
 /**
  * Deregister one or more PDM USB device data units.
  *
- * @returns VBox status.
- * @param   pVM             Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pUsbIns         USB device instance.
  * @param   pszName         Data unit name.
  *                          Use NULL to deregister all data units for that driver instance.
@@ -1725,8 +1725,8 @@ VMMR3_INT_DECL(int) SSMR3DeregisterUsb(PVM pVM, PPDMUSBINS pUsbIns, const char *
 /**
  * Deregister a data unit.
  *
- * @returns VBox status.
- * @param   pVM             Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   enmType         Unit type
  * @param   pszName         Data unit name.
  * @remark  Only for dynamic data units.
@@ -1782,8 +1782,8 @@ static int ssmR3DeregisterByNameAndType(PVM pVM, const char *pszName, SSMUNITTYP
 /**
  * Deregister an internal data unit.
  *
- * @returns VBox status.
- * @param   pVM             Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pszName         Data unit name.
  * @remark  Only for dynamic data units.
  */
@@ -1796,8 +1796,8 @@ VMMR3DECL(int) SSMR3DeregisterInternal(PVM pVM, const char *pszName)
 /**
  * Deregister an external data unit.
  *
- * @returns VBox status.
- * @param   pVM             Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pUVM            The user mode VM structure.
  * @param   pszName         Data unit name.
  * @remark  Only for dynamic data units.
  */
@@ -2186,7 +2186,8 @@ static PSSMSTRMBUF ssmR3StrmGetFreeBuf(PSSMSTRM pStrm)
 /**
  * Puts a buffer onto the queue.
  *
- * @param   pBuf        The buffer.
+ * @param   pStrm           The stream handle.
+ * @param   pBuf            The stream buffer to put.
  *
  * @thread  The producer.
  */
@@ -2231,7 +2232,7 @@ static PSSMSTRMBUF ssmR3StrmReverseList(PSSMSTRMBUF pHead)
  * necessary.
  *
  * @returns Pointer to the buffer on success. NULL if we're terminating.
- * @param   pBuf        The buffer.
+ * @param   pStrm           The stream handle.
  *
  * @thread  The consumer.
  */
@@ -3201,7 +3202,7 @@ static void ssmR3ProgressByByte(PSSMHANDLE pSSM, uint64_t cbAdvance)
 /**
  * Makes the SSM operation cancellable or not (via SSMR3Cancel).
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The saved state handle. (SSMHANDLE::rc may be set.)
  * @param   fCancellable    The new state.
  */
@@ -3270,7 +3271,7 @@ DECLINLINE(bool) ssmR3IsHostMsc32(PSSMHANDLE pSSM)
  * Finishes a data unit.
  * All buffers and compressor instances are flushed and destroyed.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  */
 static int ssmR3DataWriteFinish(PSSMHANDLE pSSM)
@@ -3991,7 +3992,7 @@ VMMR3DECL(int) SSMR3PutStructEx(PSSMHANDLE pSSM, const void *pvStruct, size_t cb
 /**
  * Saves a boolean item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   fBool           Item to save.
  */
@@ -4007,7 +4008,7 @@ VMMR3DECL(int) SSMR3PutBool(PSSMHANDLE pSSM, bool fBool)
 /**
  * Saves a 8-bit unsigned integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   u8              Item to save.
  */
@@ -4022,7 +4023,7 @@ VMMR3DECL(int) SSMR3PutU8(PSSMHANDLE pSSM, uint8_t u8)
 /**
  * Saves a 8-bit signed integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   i8              Item to save.
  */
@@ -4037,7 +4038,7 @@ VMMR3DECL(int) SSMR3PutS8(PSSMHANDLE pSSM, int8_t i8)
 /**
  * Saves a 16-bit unsigned integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   u16             Item to save.
  */
@@ -4052,7 +4053,7 @@ VMMR3DECL(int) SSMR3PutU16(PSSMHANDLE pSSM, uint16_t u16)
 /**
  * Saves a 16-bit signed integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   i16             Item to save.
  */
@@ -4067,7 +4068,7 @@ VMMR3DECL(int) SSMR3PutS16(PSSMHANDLE pSSM, int16_t i16)
 /**
  * Saves a 32-bit unsigned integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   u32             Item to save.
  */
@@ -4082,7 +4083,7 @@ VMMR3DECL(int) SSMR3PutU32(PSSMHANDLE pSSM, uint32_t u32)
 /**
  * Saves a 32-bit signed integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   i32             Item to save.
  */
@@ -4097,7 +4098,7 @@ VMMR3DECL(int) SSMR3PutS32(PSSMHANDLE pSSM, int32_t i32)
 /**
  * Saves a 64-bit unsigned integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   u64             Item to save.
  */
@@ -4112,7 +4113,7 @@ VMMR3DECL(int) SSMR3PutU64(PSSMHANDLE pSSM, uint64_t u64)
 /**
  * Saves a 64-bit signed integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   i64             Item to save.
  */
@@ -4127,7 +4128,7 @@ VMMR3DECL(int) SSMR3PutS64(PSSMHANDLE pSSM, int64_t i64)
 /**
  * Saves a 128-bit unsigned integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   u128            Item to save.
  */
@@ -4142,7 +4143,7 @@ VMMR3DECL(int) SSMR3PutU128(PSSMHANDLE pSSM, uint128_t u128)
 /**
  * Saves a 128-bit signed integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   i128            Item to save.
  */
@@ -4157,7 +4158,7 @@ VMMR3DECL(int) SSMR3PutS128(PSSMHANDLE pSSM, int128_t i128)
 /**
  * Saves a VBox unsigned integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   u               Item to save.
  */
@@ -4172,7 +4173,7 @@ VMMR3DECL(int) SSMR3PutUInt(PSSMHANDLE pSSM, RTUINT u)
 /**
  * Saves a VBox signed integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   i               Item to save.
  */
@@ -4187,7 +4188,7 @@ VMMR3DECL(int) SSMR3PutSInt(PSSMHANDLE pSSM, RTINT i)
 /**
  * Saves a GC natural unsigned integer item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   u               Item to save.
  *
@@ -4204,7 +4205,7 @@ VMMR3DECL(int) SSMR3PutGCUInt(PSSMHANDLE pSSM, RTGCUINT u)
 /**
  * Saves a GC unsigned integer register item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   u               Item to save.
  */
@@ -4219,7 +4220,7 @@ VMMR3DECL(int) SSMR3PutGCUIntReg(PSSMHANDLE pSSM, RTGCUINTREG u)
 /**
  * Saves a 32 bits GC physical address item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   GCPhys          The item to save
  */
@@ -4234,7 +4235,7 @@ VMMR3DECL(int) SSMR3PutGCPhys32(PSSMHANDLE pSSM, RTGCPHYS32 GCPhys)
 /**
  * Saves a 64 bits GC physical address item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   GCPhys          The item to save
  */
@@ -4249,7 +4250,7 @@ VMMR3DECL(int) SSMR3PutGCPhys64(PSSMHANDLE pSSM, RTGCPHYS64 GCPhys)
 /**
  * Saves a GC physical address item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   GCPhys          The item to save
  */
@@ -4264,7 +4265,7 @@ VMMR3DECL(int) SSMR3PutGCPhys(PSSMHANDLE pSSM, RTGCPHYS GCPhys)
 /**
  * Saves a GC virtual address item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   GCPtr           The item to save.
  */
@@ -4279,7 +4280,7 @@ VMMR3DECL(int) SSMR3PutGCPtr(PSSMHANDLE pSSM, RTGCPTR GCPtr)
 /**
  * Saves an RC virtual address item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   RCPtr           The item to save.
  */
@@ -4294,7 +4295,7 @@ VMMR3DECL(int) SSMR3PutRCPtr(PSSMHANDLE pSSM, RTRCPTR RCPtr)
 /**
  * Saves a GC virtual address (represented as an unsigned integer) item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   GCPtr           The item to save.
  */
@@ -4309,7 +4310,7 @@ VMMR3DECL(int) SSMR3PutGCUIntPtr(PSSMHANDLE pSSM, RTGCUINTPTR GCPtr)
 /**
  * Saves a I/O port address item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   IOPort          The item to save.
  */
@@ -4324,7 +4325,7 @@ VMMR3DECL(int) SSMR3PutIOPort(PSSMHANDLE pSSM, RTIOPORT IOPort)
 /**
  * Saves a selector item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   Sel             The item to save.
  */
@@ -4339,7 +4340,7 @@ VMMR3DECL(int) SSMR3PutSel(PSSMHANDLE pSSM, RTSEL Sel)
 /**
  * Saves a memory item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pv              Item to save.
  * @param   cb              Size of the item.
@@ -4355,7 +4356,7 @@ VMMR3DECL(int) SSMR3PutMem(PSSMHANDLE pSSM, const void *pv, size_t cb)
 /**
  * Saves a zero terminated string item to the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   psz             Item to save.
  */
@@ -4504,7 +4505,7 @@ DECLINLINE(void) ssmR3UnitCritSectLeave(PSSMUNIT pUnit)
  * Do the pfnSaveDone run.
  *
  * @returns VBox status code (pSSM->rc).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int ssmR3SaveDoDoneRun(PVM pVM, PSSMHANDLE pSSM)
@@ -4565,7 +4566,7 @@ static int ssmR3SaveDoDoneRun(PVM pVM, PSSMHANDLE pSSM)
  * saved state file on failure.
  *
  * @returns VBox status code (pSSM->rc).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int ssmR3SaveDoClose(PVM pVM, PSSMHANDLE pSSM)
@@ -4627,7 +4628,7 @@ static int ssmR3SaveDoClose(PVM pVM, PSSMHANDLE pSSM)
  *
  * This must always be called on a handled returned by SSMR3LiveSave.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
  * @param   pSSM            The SSM handle returned by SSMR3LiveSave.
  *
@@ -4664,7 +4665,7 @@ VMMR3_INT_DECL(int) SSMR3LiveDone(PSSMHANDLE pSSM)
  * Writes the directory.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The SSM handle.
  * @param   pcEntries           Where to return the number of directory entries.
  */
@@ -4719,7 +4720,7 @@ static int ssmR3WriteDirectory(PVM pVM, PSSMHANDLE pSSM, uint32_t *pcEntries)
  * and footer.
  *
  * @returns VBox status code (pSSM->rc).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int ssmR3SaveDoFinalization(PVM pVM, PSSMHANDLE pSSM)
@@ -4810,7 +4811,7 @@ static void ssmR3ProgressByUnit(PSSMHANDLE pSSM, uint32_t iUnit)
  * Do the pfnSaveExec run.
  *
  * @returns VBox status code (pSSM->rc).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int ssmR3SaveDoExecRun(PVM pVM, PSSMHANDLE pSSM)
@@ -4955,7 +4956,7 @@ static int ssmR3SaveDoExecRun(PVM pVM, PSSMHANDLE pSSM)
  * Do the pfnSavePrep run.
  *
  * @returns VBox status code (pSSM->rc).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int ssmR3SaveDoPrepRun(PVM pVM, PSSMHANDLE pSSM)
@@ -5021,7 +5022,7 @@ static int ssmR3SaveDoPrepRun(PVM pVM, PSSMHANDLE pSSM)
  * Common worker for SSMR3Save and SSMR3LiveSave.
  *
  * @returns VBox status code (no need to check pSSM->rc).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The state handle.
  *
  * @thread  EMT(0)
@@ -5052,7 +5053,7 @@ static int ssmR3SaveDoCommon(PVM pVM, PSSMHANDLE pSSM)
 /**
  * Saves the rest of the state on EMT0.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
  * @param   pSSM            The SSM handle returned by SSMR3LiveSave.
  *
@@ -5088,7 +5089,7 @@ VMMR3_INT_DECL(int) SSMR3LiveDoStep2(PSSMHANDLE pSSM)
  * Writes the file header and clear the per-unit data.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The SSM handle.
  */
 static int ssmR3WriteHeaderAndClearPerUnitData(PVM pVM, PSSMHANDLE pSSM)
@@ -5134,7 +5135,7 @@ static int ssmR3WriteHeaderAndClearPerUnitData(PVM pVM, PSSMHANDLE pSSM)
  * Creates a new saved state file.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pszFilename         The name of the file.  NULL if pStreamOps is
  *                              used.
  * @param   pStreamOps          The stream methods.  NULL if pszFilename is
@@ -5198,9 +5199,9 @@ static int ssmR3SaveDoCreateFile(PVM pVM, const char *pszFilename, PCSSMSTRMOPS
 /**
  * Start VM save operation.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszFilename     Name of the file to save the state in. NULL if pStreamOps is used.
  * @param   pStreamOps      The stream method table. NULL if pszFilename is
  *                          used.
@@ -5294,7 +5295,7 @@ VMMR3DECL(void) SSMR3HandleReportLivePercent(PSSMHANDLE pSSM, unsigned uPercent)
  * @retval  VINF_SUCCESS if we can pass on to step 2.
  * @retval  VINF_SSM_VOTE_FOR_ANOTHER_PASS if we need another pass.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  * @param   uPass               The current pass.
  */
@@ -5400,7 +5401,7 @@ static int ssmR3LiveDoVoteRun(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass)
  *
  * @returns VBox status code (no need to check pSSM->rc).
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  * @param   uPass               The current pass.
  */
@@ -5532,7 +5533,7 @@ static int ssmR3LiveDoExecRun(PVM pVM, PSSMHANDLE pSSM, uint32_t uPass)
  * Implements the live exec+vote loop.
  *
  * @returns VBox status code (no need to check pSSM->rc).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int ssmR3DoLiveExecVoteLoop(PVM pVM, PSSMHANDLE pSSM)
@@ -5604,7 +5605,7 @@ static int ssmR3DoLiveExecVoteLoop(PVM pVM, PSSMHANDLE pSSM)
  * Calls pfnLivePrep for all units.
  *
  * @returns VBox status code (no need to check pSSM->rc).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int ssmR3DoLivePrepRun(PVM pVM, PSSMHANDLE pSSM)
@@ -5671,7 +5672,7 @@ static int ssmR3DoLivePrepRun(PVM pVM, PSSMHANDLE pSSM)
 /**
  * Continue a live state saving operation on the worker thread.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
  * @param   pSSM            The SSM handle returned by SSMR3LiveSave.
  *
@@ -5713,9 +5714,9 @@ VMMR3_INT_DECL(int) SSMR3LiveDoStep1(PSSMHANDLE pSSM)
  * SSMR3LiveDone should be called even if SSMR3LiveDoStep1 or SSMR3LiveDoStep2
  * fails.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   cMsMaxDowntime  The maximum downtime given as milliseconds.
  * @param   pszFilename     Name of the file to save the state in. This string
  *                          must remain valid until SSMR3LiveDone is called.
@@ -5726,6 +5727,7 @@ VMMR3_INT_DECL(int) SSMR3LiveDoStep1(PSSMHANDLE pSSM)
  * @param   enmAfter        What is planned after a successful save operation.
  * @param   pfnProgress     Progress callback. Optional.
  * @param   pvProgressUser  User argument for the progress callback.
+ * @param   ppSSM           Where to return the saved state handle on success.
  *
  * @thread  EMT0
  */
@@ -5987,7 +5989,7 @@ static int ssmR3DataReadFinishV2(PSSMHANDLE pSSM)
  * @returns VBox status code. Does NOT set pSSM->rc.
  * @param   pSSM            The saved state handle.
  * @param   pvBuf           Where to put the bits
- * @param   cbBuf           How many bytes to read.
+ * @param   cbToRead        How many bytes to read.
  */
 DECLINLINE(int) ssmR3DataReadV2Raw(PSSMHANDLE pSSM, void *pvBuf, size_t cbToRead)
 {
@@ -6045,7 +6047,7 @@ DECLINLINE(int) ssmR3DataReadV2RawLzfHdr(PSSMHANDLE pSSM, uint32_t *pcbDecompr)
  * buffer.
  *
  * @returns VBox status code. Sets pSSM->rc on error.
- * @param   SSM             The saved state handle.
+ * @param   pSSM            The saved state handle.
  * @param   pvDst           Pointer to the output buffer.
  * @param   cbDecompr       The size of the decompressed data.
  */
@@ -6095,7 +6097,7 @@ static int ssmR3DataReadV2RawLzf(PSSMHANDLE pSSM, void *pvDst, size_t cbDecompr)
  *
  * @returns VBox status code. Sets pSSM->rc on error.
  * @param   pSSM            The saved state handle..
- * @param   pcbDecompr      Where to store the size of the zero data.
+ * @param   pcbZero         Where to store the size of the zero data.
  */
 DECLINLINE(int) ssmR3DataReadV2RawZeroHdr(PSSMHANDLE pSSM, uint32_t *pcbZero)
 {
@@ -6969,7 +6971,7 @@ VMMR3DECL(int) SSMR3GetStructEx(PSSMHANDLE pSSM, void *pvStruct, size_t cbStruct
 /**
  * Loads a boolean item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pfBool          Where to store the item.
  */
@@ -6991,7 +6993,7 @@ VMMR3DECL(int) SSMR3GetBool(PSSMHANDLE pSSM, bool *pfBool)
 /**
  * Loads a 8-bit unsigned integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pu8             Where to store the item.
  */
@@ -7006,7 +7008,7 @@ VMMR3DECL(int) SSMR3GetU8(PSSMHANDLE pSSM, uint8_t *pu8)
 /**
  * Loads a 8-bit signed integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pi8             Where to store the item.
  */
@@ -7021,7 +7023,7 @@ VMMR3DECL(int) SSMR3GetS8(PSSMHANDLE pSSM, int8_t *pi8)
 /**
  * Loads a 16-bit unsigned integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pu16            Where to store the item.
  */
@@ -7036,7 +7038,7 @@ VMMR3DECL(int) SSMR3GetU16(PSSMHANDLE pSSM, uint16_t *pu16)
 /**
  * Loads a 16-bit signed integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pi16            Where to store the item.
  */
@@ -7051,7 +7053,7 @@ VMMR3DECL(int) SSMR3GetS16(PSSMHANDLE pSSM, int16_t *pi16)
 /**
  * Loads a 32-bit unsigned integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pu32            Where to store the item.
  */
@@ -7066,7 +7068,7 @@ VMMR3DECL(int) SSMR3GetU32(PSSMHANDLE pSSM, uint32_t *pu32)
 /**
  * Loads a 32-bit signed integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pi32            Where to store the item.
  */
@@ -7081,7 +7083,7 @@ VMMR3DECL(int) SSMR3GetS32(PSSMHANDLE pSSM, int32_t *pi32)
 /**
  * Loads a 64-bit unsigned integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pu64            Where to store the item.
  */
@@ -7096,7 +7098,7 @@ VMMR3DECL(int) SSMR3GetU64(PSSMHANDLE pSSM, uint64_t *pu64)
 /**
  * Loads a 64-bit signed integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pi64            Where to store the item.
  */
@@ -7111,7 +7113,7 @@ VMMR3DECL(int) SSMR3GetS64(PSSMHANDLE pSSM, int64_t *pi64)
 /**
  * Loads a 128-bit unsigned integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pu128           Where to store the item.
  */
@@ -7126,7 +7128,7 @@ VMMR3DECL(int) SSMR3GetU128(PSSMHANDLE pSSM, uint128_t *pu128)
 /**
  * Loads a 128-bit signed integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pi128           Where to store the item.
  */
@@ -7141,7 +7143,7 @@ VMMR3DECL(int) SSMR3GetS128(PSSMHANDLE pSSM, int128_t *pi128)
 /**
  * Loads a VBox unsigned integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pu              Where to store the integer.
  */
@@ -7156,7 +7158,7 @@ VMMR3DECL(int) SSMR3GetUInt(PSSMHANDLE pSSM, PRTUINT pu)
 /**
  * Loads a VBox signed integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pi              Where to store the integer.
  */
@@ -7171,7 +7173,7 @@ VMMR3DECL(int) SSMR3GetSInt(PSSMHANDLE pSSM, PRTINT pi)
 /**
  * Loads a GC natural unsigned integer item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pu              Where to store the integer.
  *
@@ -7187,7 +7189,7 @@ VMMR3DECL(int) SSMR3GetGCUInt(PSSMHANDLE pSSM, PRTGCUINT pu)
 /**
  * Loads a GC unsigned integer register item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pu              Where to store the integer.
  */
@@ -7201,7 +7203,7 @@ VMMR3DECL(int) SSMR3GetGCUIntReg(PSSMHANDLE pSSM, PRTGCUINTREG pu)
 /**
  * Loads a 32 bits GC physical address item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pGCPhys         Where to store the GC physical address.
  */
@@ -7216,7 +7218,7 @@ VMMR3DECL(int) SSMR3GetGCPhys32(PSSMHANDLE pSSM, PRTGCPHYS32 pGCPhys)
 /**
  * Loads a 64 bits GC physical address item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pGCPhys         Where to store the GC physical address.
  */
@@ -7231,7 +7233,7 @@ VMMR3DECL(int) SSMR3GetGCPhys64(PSSMHANDLE pSSM, PRTGCPHYS64 pGCPhys)
 /**
  * Loads a GC physical address item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pGCPhys         Where to store the GC physical address.
  */
@@ -7281,7 +7283,7 @@ VMMR3DECL(int) SSMR3GetGCPhys(PSSMHANDLE pSSM, PRTGCPHYS pGCPhys)
  *
  * Put functions are not affected.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   cbGCPtr         Size of RTGCPTR
  *
@@ -7309,7 +7311,7 @@ VMMR3_INT_DECL(int) SSMR3HandleSetGCPtrSize(PSSMHANDLE pSSM, unsigned cbGCPtr)
 /**
  * Loads a GC virtual address item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pGCPtr          Where to store the GC virtual address.
  */
@@ -7351,7 +7353,7 @@ VMMR3DECL(int) SSMR3GetGCPtr(PSSMHANDLE pSSM, PRTGCPTR pGCPtr)
 /**
  * Loads a GC virtual address (represented as unsigned integer) item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pGCPtr          Where to store the GC virtual address.
  */
@@ -7365,7 +7367,7 @@ VMMR3DECL(int) SSMR3GetGCUIntPtr(PSSMHANDLE pSSM, PRTGCUINTPTR pGCPtr)
 /**
  * Loads an RC virtual address item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pRCPtr          Where to store the RC virtual address.
  */
@@ -7380,7 +7382,7 @@ VMMR3DECL(int) SSMR3GetRCPtr(PSSMHANDLE pSSM, PRTRCPTR pRCPtr)
 /**
  * Loads a I/O port address item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pIOPort         Where to store the I/O port address.
  */
@@ -7395,7 +7397,7 @@ VMMR3DECL(int) SSMR3GetIOPort(PSSMHANDLE pSSM, PRTIOPORT pIOPort)
 /**
  * Loads a selector item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pSel            Where to store the selector.
  */
@@ -7410,7 +7412,7 @@ VMMR3DECL(int) SSMR3GetSel(PSSMHANDLE pSSM, PRTSEL pSel)
 /**
  * Loads a memory item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   pv              Where to store the item.
  * @param   cb              Size of the item.
@@ -7426,7 +7428,7 @@ VMMR3DECL(int) SSMR3GetMem(PSSMHANDLE pSSM, void *pv, size_t cb)
 /**
  * Loads a string item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   psz             Where to store the item.
  * @param   cbMax           Max size of the item (including '\\0').
@@ -7440,7 +7442,7 @@ VMMR3DECL(int) SSMR3GetStrZ(PSSMHANDLE pSSM, char *psz, size_t cbMax)
 /**
  * Loads a string item from the current data unit.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM            The saved state handle.
  * @param   psz             Where to store the item.
  * @param   cbMax           Max size of the item (including '\\0').
@@ -7547,7 +7549,7 @@ VMMR3DECL(int) SSMR3SkipToEndOfUnit(PSSMHANDLE pSSM)
 /**
  * Calculate the checksum of a file portion.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pStrm       The stream handle
  * @param   off         Where to start checksumming.
  * @param   cb          How much to checksum.
@@ -7723,7 +7725,7 @@ static int ssmR3ValidateHeaderInfo(PSSMHANDLE pSSM, bool fHaveHostBits, bool fHa
  * Reads the header, detects the format version and performs integrity
  * validations.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pSSM                The saved state handle.  A number of field will
  *                              be updated, mostly header related information.
  *                              fLiveSave is also set if appropriate.
@@ -7732,7 +7734,6 @@ static int ssmR3ValidateHeaderInfo(PSSMHANDLE pSSM, bool fHaveHostBits, bool fHa
  * @param   fChecksumOnRead     Whether to validate the checksum while reading
  *                              the stream instead of up front. If not possible,
  *                              verify the checksum up front.
- * @param   pHdr                Where to store the file header.
  */
 static int ssmR3HeaderAndValidate(PSSMHANDLE pSSM, bool fChecksumIt, bool fChecksumOnRead)
 {
@@ -7997,7 +7998,7 @@ static int ssmR3HeaderAndValidate(PSSMHANDLE pSSM, bool fChecksumIt, bool fCheck
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pszFilename         The filename. NULL if pStreamOps is used.
  * @param   pStreamOps          The stream method table. NULL if pszFilename is
  *                              used.
@@ -8278,7 +8279,7 @@ static void ssmR3StrmLogUnitContent(PSSMHANDLE pSSM, SSMFILEUNITHDRV2 const *pUn
  * @returns Pointer to the unit.
  * @returns NULL if not found.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszName         Data unit name.
  * @param   uInstance       The data unit instance id.
  */
@@ -8299,7 +8300,7 @@ static PSSMUNIT ssmR3Find(PVM pVM, const char *pszName, uint32_t uInstance)
  * Executes the loading of a V1.X file.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int ssmR3LoadExecV1(PVM pVM, PSSMHANDLE pSSM)
@@ -8562,7 +8563,7 @@ static int ssmR3LoadDirectoryAndFooter(PSSMHANDLE pSSM)
  *
  * @returns VBox status code.  May or may not set pSSM->rc, the returned
  *          status code is ALWAYS the more accurate of the two.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pSSM                The saved state handle.
  */
 static int ssmR3LoadExecV2(PVM pVM, PSSMHANDLE pSSM)
@@ -8741,9 +8742,9 @@ static int ssmR3LoadExecV2(PVM pVM, PSSMHANDLE pSSM)
 /**
  * Load VM save operation.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszFilename     The name of the saved state file. NULL if pStreamOps
  *                          is used.
  * @param   pStreamOps      The stream method table. NULL if pszFilename is
@@ -8977,7 +8978,7 @@ VMMR3DECL(int) SSMR3Load(PVM pVM, const char *pszFilename, PCSSMSTRMOPS pStreamO
  * @returns rc.
  * @param   pSSM                The saved state handle.
  * @param   rc                  The status code of the error. Use RT_SRC_POS.
- * @param   RT_SRC_POS_DECL     The source location.
+ * @param   SRC_POS             The source location.
  * @param   pszFormat           The message format string.
  * @param   ...                 Variable argument list.
  */
@@ -8997,7 +8998,7 @@ VMMR3DECL(int) SSMR3SetLoadError(PSSMHANDLE pSSM, int rc, RT_SRC_POS_DECL, const
  * @returns rc.
  * @param   pSSM                The saved state handle.
  * @param   rc                  The status code of the error.
- * @param   RT_SRC_POS_DECL     The error location, use RT_SRC_POS.
+ * @param   SRC_POS             The error location, use RT_SRC_POS.
  * @param   pszFormat           The message format string.
  * @param   va                  Variable argument list.
  */
@@ -9057,9 +9058,9 @@ VMMR3DECL(int) SSMR3SetLoadErrorV(PSSMHANDLE pSSM, int rc, RT_SRC_POS_DECL, cons
  *
  * @returns VERR_SSM_LOAD_CONFIG_MISMATCH.
  * @param   pSSM                The saved state handle.
- * @param   RT_SRC_POS_DECL     The error location, use RT_SRC_POS.
+ * @param   SRC_POS             The error location, use RT_SRC_POS.
  * @param   pszFormat           The message format string.
- * @param   va                  Variable argument list.
+ * @param   ...                 Variable argument list.
  */
 VMMR3DECL(int) SSMR3SetCfgError(PSSMHANDLE pSSM, RT_SRC_POS_DECL, const char *pszFormat, ...)
 {
diff --git a/src/VBox/VMM/VMMR3/STAM.cpp b/src/VBox/VMM/VMMR3/STAM.cpp
index 02f4b93..72d9a50 100644
--- a/src/VBox/VMM/VMMR3/STAM.cpp
+++ b/src/VBox/VMM/VMMR3/STAM.cpp
@@ -269,7 +269,7 @@ static const STAMR0SAMPLE g_aGMMStats[] =
  * Initializes the STAM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pUVM        The user mode VM structure.
  */
 VMMR3DECL(int) STAMR3InitUVM(PUVM pUVM)
 {
@@ -378,7 +378,7 @@ VMMR3DECL(void) STAMR3TermUVM(PUVM pUVM)
  *
  * It is not possible to register the same sample twice.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM        Pointer to the user mode VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
@@ -408,8 +408,8 @@ VMMR3DECL(int)  STAMR3RegisterU(PUVM pUVM, void *pvSample, STAMTYPE enmType, STA
  *
  * It is not possible to register the same sample twice.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
  * @param   enmVisibility  Visibility type specifying whether unused statistics should be visible or not.
@@ -429,7 +429,7 @@ VMMR3DECL(int)  STAMR3Register(PVM pVM, void *pvSample, STAMTYPE enmType, STAMVI
  * Same as STAMR3RegisterU except that the name is specified in a
  * RTStrPrintf like fashion.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM        Pointer to the user mode VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
@@ -454,8 +454,8 @@ VMMR3DECL(int)  STAMR3RegisterFU(PUVM pUVM, void *pvSample, STAMTYPE enmType, ST
  * Same as STAMR3Register except that the name is specified in a
  * RTStrPrintf like fashion.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
  * @param   enmVisibility  Visibility type specifying whether unused statistics should be visible or not.
@@ -479,8 +479,8 @@ VMMR3DECL(int)  STAMR3RegisterF(PVM pVM, void *pvSample, STAMTYPE enmType, STAMV
  * Same as STAMR3Register except that the name is specified in a
  * RTStrPrintfV like fashion.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pUVM        The user mode VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
  * @param   enmVisibility  Visibility type specifying whether unused statistics should be visible or not.
@@ -506,8 +506,8 @@ VMMR3DECL(int)  STAMR3RegisterVU(PUVM pUVM, void *pvSample, STAMTYPE enmType, ST
  * Same as STAMR3Register except that the name is specified in a
  * RTStrPrintfV like fashion.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
  * @param   enmVisibility  Visibility type specifying whether unused statistics should be visible or not.
@@ -527,8 +527,8 @@ VMMR3DECL(int)  STAMR3RegisterV(PVM pVM, void *pvSample, STAMTYPE enmType, STAMV
  * Similar to STAMR3Register except for the two callbacks, the implied type (STAMTYPE_CALLBACK),
  * and name given in an RTStrPrintf like fashion.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmVisibility  Visibility type specifying whether unused statistics should be visible or not.
  * @param   enmUnit     Sample unit.
@@ -554,8 +554,8 @@ VMMR3DECL(int)  STAMR3RegisterCallback(PVM pVM, void *pvSample, STAMVISIBILITY e
 /**
  * Same as STAMR3RegisterCallback() except for the ellipsis which is a va_list here.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   enmVisibility  Visibility type specifying whether unused statistics should be visible or not.
  * @param   enmUnit     Sample unit.
@@ -1240,21 +1240,21 @@ static void stamR3LookupDestroyTree(PSTAMLOOKUP pRoot)
 /**
  * Internal worker for the different register calls.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM        Pointer to the user mode VM structure.
  * @param   pvSample    Pointer to the sample.
  * @param   pfnReset    Callback for resetting the sample. NULL should be used if the sample can't be reset.
  * @param   pfnPrint    Print the sample.
  * @param   enmType     Sample type. This indicates what pvSample is pointing at.
  * @param   enmVisibility  Visibility type specifying whether unused statistics should be visible or not.
+ * @param   pszName     The sample name format string.
  * @param   enmUnit     Sample unit.
  * @param   pszDesc     Sample description.
- * @param   pszName     The sample name format string.
- * @param   args        Arguments to the format string.
  * @remark  There is currently no device or driver variant of this API. Add one if it should become necessary!
  */
 static int stamR3RegisterU(PUVM pUVM, void *pvSample, PFNSTAMR3CALLBACKRESET pfnReset, PFNSTAMR3CALLBACKPRINT pfnPrint,
-                           STAMTYPE enmType, STAMVISIBILITY enmVisibility, const char *pszName, STAMUNIT enmUnit, const char *pszDesc)
+                           STAMTYPE enmType, STAMVISIBILITY enmVisibility,
+                           const char *pszName, STAMUNIT enmUnit, const char *pszDesc)
 {
     AssertReturn(pszName[0] == '/', VERR_INVALID_NAME);
     AssertReturn(pszName[1] != '/' && pszName[1], VERR_INVALID_NAME);
@@ -1469,7 +1469,7 @@ static int stamR3DestroyDesc(PUVM pUVM, PSTAMDESC pCur)
  * This is intended used for devices which can be unplugged and for
  * temporary samples.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM        Pointer to the user mode VM structure.
  * @param   pvSample    Pointer to the sample registered with STAMR3Register().
  */
@@ -1546,7 +1546,7 @@ static int stamR3DeregisterByPattern(PUVM pUVM, const char *pszPat)
  * Deregister zero or more samples given a (single) pattern matching their
  * names.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM        Pointer to the user mode VM structure.
  * @param   pszPat      The name pattern.
  * @sa      STAMR3DeregisterF, STAMR3DeregisterV
@@ -1568,7 +1568,7 @@ VMMR3DECL(int)  STAMR3Deregister(PUVM pUVM, const char *pszPat)
  * Deregister zero or more samples given a (single) pattern matching their
  * names.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM        Pointer to the user mode VM structure.
  * @param   pszPatFmt   The name pattern format string.
  * @param   ...         Format string arguments.
@@ -1588,7 +1588,7 @@ VMMR3DECL(int)  STAMR3DeregisterF(PUVM pUVM, const char *pszPatFmt, ...)
  * Deregister zero or more samples given a (single) pattern matching their
  * names.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM        Pointer to the user mode VM structure.
  * @param   pszPatFmt   The name pattern format string.
  * @param   va          Format string arguments.
@@ -1615,7 +1615,7 @@ VMMR3DECL(int)  STAMR3DeregisterV(PUVM pUVM, const char *pszPatFmt, va_list va)
  * Resets statistics for the specified VM.
  * It's possible to select a subset of the samples.
  *
- * @returns VBox status. (Basically, it cannot fail.)
+ * @returns VBox status code. (Basically, it cannot fail.)
  * @param   pUVM        The user mode VM handle.
  * @param   pszPat      The name matching pattern. See somewhere_where_this_is_described_in_detail.
  *                      If NULL all samples are reset.
@@ -1784,7 +1784,7 @@ static int stamR3ResetOne(PSTAMDESC pDesc, void *pvArg)
  * Get a snapshot of the statistics.
  * It's possible to select a subset of the samples.
  *
- * @returns VBox status. (Basically, it cannot fail.)
+ * @returns VBox status code. (Basically, it cannot fail.)
  * @param   pUVM            The user mode VM handle.
  * @param   pszPat          The name matching pattern. See somewhere_where_this_is_described_in_detail.
  *                          If NULL all samples are reset.
@@ -2072,7 +2072,7 @@ static int stamR3SnapshotPrintf(PSTAMR3SNAPSHOTONE pThis, const char *pszFormat,
 /**
  * Releases a statistics snapshot returned by STAMR3Snapshot().
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM            The user mode VM handle.
  * @param   pszSnapshot     The snapshot data pointer returned by STAMR3Snapshot().
  *                          NULL is allowed.
@@ -2089,7 +2089,7 @@ VMMR3DECL(int)  STAMR3SnapshotFree(PUVM pUVM, char *pszSnapshot)
 /**
  * Dumps the selected statistics to the log.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM            Pointer to the user mode VM structure.
  * @param   pszPat          The name matching pattern. See somewhere_where_this_is_described_in_detail.
  *                          If NULL all samples are written to the log.
@@ -2129,7 +2129,7 @@ static DECLCALLBACK(void) stamR3EnumLogPrintf(PSTAMR3PRINTONEARGS pArgs, const c
 /**
  * Dumps the selected statistics to the release log.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM            Pointer to the user mode VM structure.
  * @param   pszPat          The name matching pattern. See somewhere_where_this_is_described_in_detail.
  *                          If NULL all samples are written to the log.
@@ -2168,7 +2168,7 @@ static DECLCALLBACK(void) stamR3EnumRelLogPrintf(PSTAMR3PRINTONEARGS pArgs, cons
 /**
  * Prints the selected statistics to standard out.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pUVM            The user mode VM handle.
  * @param   pszPat          The name matching pattern. See somewhere_where_this_is_described_in_detail.
  *                          If NULL all samples are reset.
@@ -2425,7 +2425,7 @@ static bool stamR3MultiMatch(const char * const *papszExpressions, unsigned cExp
  * @returns Pointer to an array of single patterns. Free it with RTMemTmpFree.
  * @param   pszPat          The pattern to split.
  * @param   pcExpressions   The number of array elements.
- * @param   pszCopy         The pattern copy to free using RTStrFree.
+ * @param   ppszCopy        The pattern copy to free using RTStrFree.
  */
 static char **stamR3SplitPattern(const char *pszPat, unsigned *pcExpressions, char **ppszCopy)
 {
@@ -2643,8 +2643,9 @@ static void stamR3Ring0StatsUpdateU(PUVM pUVM, const char *pszPat)
  * The ring-0 statistics aren't directly addressable from ring-3 and must be
  * copied when needed.
  *
- * @param   pUVM        Pointer to the user mode VM structure.
- * @param   pszPat      The pattern (for knowing when to skip).
+ * @param   pUVM                Pointer to the user mode VM structure.
+ * @param   papszExpressions    The patterns (for knowing when to skip).
+ * @param   cExpressions        Number of patterns.
  */
 static void stamR3Ring0StatsUpdateMultiU(PUVM pUVM, const char * const *papszExpressions, unsigned cExpressions)
 {
diff --git a/src/VBox/VMM/VMMR3/TM.cpp b/src/VBox/VMM/VMMR3/TM.cpp
index 86434b1..0726027 100644
--- a/src/VBox/VMM/VMMR3/TM.cpp
+++ b/src/VBox/VMM/VMMR3/TM.cpp
@@ -189,7 +189,7 @@ static DECLCALLBACK(VBOXSTRICTRC) tmR3CpuTickParavirtDisable(PVM pVM, PVMCPU pVC
  * Initializes the TM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(int) TMR3Init(PVM pVM)
 {
@@ -284,7 +284,7 @@ VMM_INT_DECL(int) TMR3Init(PVM pVM)
      */
     pVM->tm.s.pfnVirtualGetRawR3                 = tmVirtualNanoTSRediscover;
     pVM->tm.s.VirtualGetRawDataR3.pfnRediscover  = tmVirtualNanoTSRediscover;
-    pVM->tm.s.VirtualGetRawDataR3.pfnBad         = tmVirtualNanoTSBadPrev;
+    pVM->tm.s.VirtualGetRawDataR3.pfnBad         = tmVirtualNanoTSBad;
     pVM->tm.s.VirtualGetRawDataR3.pfnBadCpuIndex = tmVirtualNanoTSBadCpuIndex;
     pVM->tm.s.VirtualGetRawDataR3.pu64Prev       = &pVM->tm.s.u64VirtualRawPrev;
     pVM->tm.s.VirtualGetRawDataRC.pu64Prev       = MMHyperR3ToRC(pVM, (void *)&pVM->tm.s.u64VirtualRawPrev);
@@ -1008,7 +1008,7 @@ static uint64_t tmR3CalibrateTSC(PVM pVM)
  * Finalizes the TM initialization.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(int) TMR3InitFinalize(PVM pVM)
 {
@@ -1019,7 +1019,7 @@ VMM_INT_DECL(int) TMR3InitFinalize(PVM pVM)
      */
     if (!HMIsEnabled(pVM))
     {
-        rc = PDMR3LdrGetSymbolRC(pVM, NULL, "tmVirtualNanoTSBadPrev",       &pVM->tm.s.VirtualGetRawDataRC.pfnBad);
+        rc = PDMR3LdrGetSymbolRC(pVM, NULL, "tmVirtualNanoTSBad",           &pVM->tm.s.VirtualGetRawDataRC.pfnBad);
         AssertRCReturn(rc, rc);
         rc = PDMR3LdrGetSymbolRC(pVM, NULL, "tmVirtualNanoTSBadCpuIndex",   &pVM->tm.s.VirtualGetRawDataRC.pfnBadCpuIndex);
         AssertRCReturn(rc, rc);
@@ -1028,7 +1028,7 @@ VMM_INT_DECL(int) TMR3InitFinalize(PVM pVM)
         pVM->tm.s.pfnVirtualGetRawRC = pVM->tm.s.VirtualGetRawDataRC.pfnRediscover;
     }
 
-    rc = PDMR3LdrGetSymbolR0(pVM, NULL, "tmVirtualNanoTSBadPrev",       &pVM->tm.s.VirtualGetRawDataR0.pfnBad);
+    rc = PDMR3LdrGetSymbolR0(pVM, NULL, "tmVirtualNanoTSBad",           &pVM->tm.s.VirtualGetRawDataR0.pfnBad);
     AssertRCReturn(rc, rc);
     rc = PDMR3LdrGetSymbolR0(pVM, NULL, "tmVirtualNanoTSBadCpuIndex",   &pVM->tm.s.VirtualGetRawDataR0.pfnBadCpuIndex);
     AssertRCReturn(rc, rc);
@@ -1060,7 +1060,7 @@ VMM_INT_DECL(int) TMR3InitFinalize(PVM pVM)
  * component. This function will be called at init and
  * whenever the VMM need to relocate it self inside the GC.
  *
- * @param   pVM     The VM.
+ * @param   pVM     The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  */
 VMM_INT_DECL(void) TMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
@@ -1098,7 +1098,7 @@ VMM_INT_DECL(void) TMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
  * the VM it self is at this point powered off or suspended.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMM_INT_DECL(int) TMR3Term(PVM pVM)
 {
@@ -1121,7 +1121,7 @@ VMM_INT_DECL(int) TMR3Term(PVM pVM)
  * the FF is cleared and but without running the queues. We'll have to
  * check if this makes sense or not, but it seems like a good idea now....
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMM_INT_DECL(void) TMR3Reset(PVM pVM)
 {
@@ -1185,7 +1185,7 @@ VMM_INT_DECL(void) TMR3Reset(PVM pVM)
  * Called by PDM when loading or relocating GC modules.
  *
  * @returns VBox status
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszSymbol       Symbol to resolve.
  * @param   pRCPtrValue     Where to store the symbol value.
  * @remark  This has to     work before TMR3Relocate() is called.
@@ -1205,7 +1205,7 @@ VMM_INT_DECL(int) TMR3GetImportRC(PVM pVM, const char *pszSymbol, PRTRCPTR pRCPt
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 static DECLCALLBACK(int) tmR3Save(PVM pVM, PSSMHANDLE pSSM)
@@ -1253,7 +1253,7 @@ static DECLCALLBACK(int) tmR3Save(PVM pVM, PSSMHANDLE pSSM)
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion        Data layout version.
  * @param   uPass           The data pass.
@@ -1398,7 +1398,7 @@ static DECLCALLBACK(int) tmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion, u
  * Internal TMR3TimerCreate worker.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmClock    The timer clock.
  * @param   pszDesc     The timer description.
  * @param   ppTimer     Where to store the timer pointer on success.
@@ -1462,8 +1462,8 @@ static int tmr3TimerCreate(PVM pVM, TMCLOCK enmClock, const char *pszDesc, PPTMT
 /**
  * Creates a device timer.
  *
- * @returns VBox status.
- * @param   pVM             The VM to create the timer in.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         Device instance.
  * @param   enmClock        The clock to use on this timer.
  * @param   pfnCallback     Callback function.
@@ -1503,8 +1503,8 @@ VMM_INT_DECL(int) TMR3TimerCreateDevice(PVM pVM, PPDMDEVINS pDevIns, TMCLOCK enm
 /**
  * Creates a USB device timer.
  *
- * @returns VBox status.
- * @param   pVM             The VM to create the timer in.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pUsbIns         The USB device instance.
  * @param   enmClock        The clock to use on this timer.
  * @param   pfnCallback     Callback function.
@@ -1547,8 +1547,8 @@ VMM_INT_DECL(int) TMR3TimerCreateUsb(PVM pVM, PPDMUSBINS pUsbIns, TMCLOCK enmClo
 /**
  * Creates a driver timer.
  *
- * @returns VBox status.
- * @param   pVM             The VM to create the timer in.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pDrvIns         Driver instance.
  * @param   enmClock        The clock to use on this timer.
  * @param   pfnCallback     Callback function.
@@ -1583,8 +1583,8 @@ VMM_INT_DECL(int) TMR3TimerCreateDriver(PVM pVM, PPDMDRVINS pDrvIns, TMCLOCK enm
 /**
  * Creates an internal timer.
  *
- * @returns VBox status.
- * @param   pVM             The VM to create the timer in.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   enmClock        The clock to use on this timer.
  * @param   pfnCallback     Callback function.
  * @param   pvUser          User argument to be passed to the callback.
@@ -1616,7 +1616,7 @@ VMMR3DECL(int) TMR3TimerCreateInternal(PVM pVM, TMCLOCK enmClock, PFNTMTIMERINT
  *
  * @returns Timer handle on success.
  * @returns NULL on failure.
- * @param   pVM             The VM to create the timer in.
+ * @param   pVM             The cross context VM structure.
  * @param   enmClock        The clock to use on this timer.
  * @param   pfnCallback     Callback function.
  * @param   pvUser          User argument.
@@ -1646,7 +1646,7 @@ VMMR3DECL(PTMTIMERR3) TMR3TimerCreateExternal(PVM pVM, TMCLOCK enmClock, PFNTMTI
 /**
  * Destroy a timer
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pTimer          Timer handle as returned by one of the create functions.
  */
 VMMR3DECL(int) TMR3TimerDestroy(PTMTIMER pTimer)
@@ -1810,8 +1810,8 @@ VMMR3DECL(int) TMR3TimerDestroy(PTMTIMER pTimer)
 /**
  * Destroy all timers owned by a device.
  *
- * @returns VBox status.
- * @param   pVM             Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pDevIns         Device which timers should be destroyed.
  */
 VMM_INT_DECL(int) TMR3TimerDestroyDevice(PVM pVM, PPDMDEVINS pDevIns)
@@ -1843,8 +1843,8 @@ VMM_INT_DECL(int) TMR3TimerDestroyDevice(PVM pVM, PPDMDEVINS pDevIns)
 /**
  * Destroy all timers owned by a USB device.
  *
- * @returns VBox status.
- * @param   pVM             Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pUsbIns         USB device which timers should be destroyed.
  */
 VMM_INT_DECL(int) TMR3TimerDestroyUsb(PVM pVM, PPDMUSBINS pUsbIns)
@@ -1876,8 +1876,8 @@ VMM_INT_DECL(int) TMR3TimerDestroyUsb(PVM pVM, PPDMUSBINS pUsbIns)
 /**
  * Destroy all timers owned by a driver.
  *
- * @returns VBox status.
- * @param   pVM             Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM             The cross context VM structure.
  * @param   pDrvIns         Driver which timers should be destroyed.
  */
 VMM_INT_DECL(int) TMR3TimerDestroyDriver(PVM pVM, PPDMDRVINS pDrvIns)
@@ -1910,7 +1910,7 @@ VMM_INT_DECL(int) TMR3TimerDestroyDriver(PVM pVM, PPDMDRVINS pDrvIns)
  * Internal function for getting the clock time.
  *
  * @returns clock time.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmClock    The clock.
  */
 DECLINLINE(uint64_t) tmClock(PVM pVM, TMCLOCK enmClock)
@@ -1933,7 +1933,7 @@ DECLINLINE(uint64_t) tmClock(PVM pVM, TMCLOCK enmClock)
  *
  * @returns true / false.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmClock    The queue.
  */
 DECLINLINE(bool) tmR3HasExpiredTimer(PVM pVM, TMCLOCK enmClock)
@@ -1947,7 +1947,7 @@ DECLINLINE(bool) tmR3HasExpiredTimer(PVM pVM, TMCLOCK enmClock)
  * Checks for expired timers in all the queues.
  *
  * @returns true / false.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 DECLINLINE(bool) tmR3AnyExpiredTimers(PVM pVM)
 {
@@ -2027,7 +2027,7 @@ static DECLCALLBACK(void) tmR3TimerCallback(PRTTIMER pTimer, void *pvUser, uint6
  *
  * This is normally called from a forced action handler in EMT.
  *
- * @param   pVM             The VM to run the timers for.
+ * @param   pVM             The cross context VM structure.
  *
  * @thread  EMT (actually EMT0, but we fend off the others)
  */
@@ -2110,7 +2110,7 @@ VMMR3DECL(void) TMR3TimerQueuesDo(PVM pVM)
  *
  * This is normally called from a forced action handler in EMT.
  *
- * @param   pVM             The VM to run the timers for.
+ * @param   pVM             The cross context VM structure.
  * @param   pQueue          The queue to run.
  */
 static void tmR3TimerQueueRun(PVM pVM, PTMTIMERQUEUE pQueue)
@@ -2194,7 +2194,7 @@ static void tmR3TimerQueueRun(PVM pVM, PTMTIMERQUEUE pQueue)
  * to implement the special requirements of the timer synchronous virtual
  * clock, thus this 2nd queue run function.
  *
- * @param   pVM             The VM to run the timers for.
+ * @param   pVM             The cross context VM structure.
  *
  * @remarks The caller must the Virtual Sync lock.  Owning the TM lock is no
  *          longer important.
@@ -2499,8 +2499,8 @@ static void tmR3TimerQueueRunVirtualSync(PVM pVM)
  * will block on the VirtualSyncLock until the pending timers has been executed
  * and the clock restarted.
  *
- * @param   pVM             The VM to run the timers for.
- * @param   pVCpu           The virtual CPU we're running at.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  *
  * @thread  EMTs
  */
@@ -2571,7 +2571,7 @@ VMMR3_INT_DECL(void) TMR3VirtualSyncFF(PVM pVM, PVMCPU pVCpu)
 /**
  * Saves the state of a timer to a saved state.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pTimer          Timer to save.
  * @param   pSSM            Save State Manager handle.
  */
@@ -2613,7 +2613,7 @@ VMMR3DECL(int) TMR3TimerSave(PTMTIMERR3 pTimer, PSSMHANDLE pSSM)
 /**
  * Loads the state of a timer from a saved state.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @param   pTimer          Timer to restore.
  * @param   pSSM            Save State Manager handle.
  */
@@ -2734,7 +2734,7 @@ VMMR3DECL(int) TMR3TimerSetCritSect(PTMTIMERR3 pTimer, PPDMCRITSECT pCritSect)
  * Get the real world UTC time adjusted for VM lag.
  *
  * @returns pTime.
- * @param   pVM             The VM instance.
+ * @param   pVM             The cross context VM structure.
  * @param   pTime           Where to store the time.
  */
 VMMR3_INT_DECL(PRTTIMESPEC) TMR3UtcNow(PVM pVM, PRTTIMESPEC pTime)
@@ -2762,8 +2762,8 @@ VMMR3_INT_DECL(PRTTIMESPEC) TMR3UtcNow(PVM pVM, PRTTIMESPEC pTime)
  * Pauses all clocks except TMCLOCK_REAL.
  *
  * @returns VBox status code, all errors are asserted.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @thread  EMT corresponding to Pointer to the VMCPU.
  */
 VMMR3DECL(int) TMR3NotifySuspend(PVM pVM, PVMCPU pVCpu)
@@ -2810,8 +2810,8 @@ VMMR3DECL(int) TMR3NotifySuspend(PVM pVM, PVMCPU pVCpu)
  * Resumes all clocks except TMCLOCK_REAL.
  *
  * @returns VBox status code, all errors are asserted.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @thread  EMT corresponding to Pointer to the VMCPU.
  */
 VMMR3DECL(int) TMR3NotifyResume(PVM pVM, PVMCPU pVCpu)
@@ -2856,7 +2856,7 @@ VMMR3DECL(int) TMR3NotifyResume(PVM pVM, PVMCPU pVCpu)
  * Sets the warp drive percent of the virtual time.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pUVM        The user mode VM structure.
  * @param   u32Percent  The new percentage. 100 means normal operation.
  */
 VMMDECL(int) TMR3SetWarpDrive(PUVM pUVM, uint32_t u32Percent)
@@ -2915,7 +2915,7 @@ static DECLCALLBACK(int) tmR3SetWarpDrive(PUVM pUVM, uint32_t u32Percent)
  * Gets the current warp drive percent.
  *
  * @returns The warp drive percent.
- * @param   pVM         Pointer to the VM.
+ * @param   pUVM        The user mode VM structure.
  */
 VMMR3DECL(uint32_t) TMR3GetWarpDrive(PUVM pUVM)
 {
@@ -2937,7 +2937,7 @@ VMMR3DECL(uint32_t) TMR3GetWarpDrive(PUVM pUVM)
  * @retval  VERR_INVALID_STATE if the VM handle is bad.
  * @retval  VERR_INVALID_PARAMETER if idCpu is out of range.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idCpu           The ID of the virtual CPU which times to get.
  * @param   pcNsTotal       Where to store the total run time (nano seconds) of
  *                          the CPU, i.e. the sum of the three other returns.
@@ -3002,15 +3002,12 @@ VMMR3DECL(int) TMR3GetCpuLoadTimes(PVM pVM, VMCPUID idCpu, uint64_t *pcNsTotal,
 /**
  * Helper for tmR3CpuLoadTimer.
  * @returns
- * @param   pState              The state to update.
- * @param   cNsTotalDelta       Total time.
- * @param   cNsExecutingDelta   Time executing.
- * @param   cNsHaltedDelta      Time halted.
+ * @param   pState          The state to update.
+ * @param   cNsTotal        Total time.
+ * @param   cNsExecuting    Time executing.
+ * @param   cNsHalted       Time halted.
  */
-DECLINLINE(void) tmR3CpuLoadTimerMakeUpdate(PTMCPULOADSTATE pState,
-                                            uint64_t cNsTotal,
-                                            uint64_t cNsExecuting,
-                                            uint64_t cNsHalted)
+DECLINLINE(void) tmR3CpuLoadTimerMakeUpdate(PTMCPULOADSTATE pState, uint64_t cNsTotal, uint64_t cNsExecuting, uint64_t cNsHalted)
 {
     /* Calc deltas */
     uint64_t cNsTotalDelta      = cNsTotal     - pState->cNsPrevTotal;
@@ -3048,7 +3045,7 @@ DECLINLINE(void) tmR3CpuLoadTimerMakeUpdate(PTMCPULOADSTATE pState,
  * Timer callback that calculates the CPU load since the last time it was
  * called.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pTimer              The timer.
  * @param   pvUser              NULL, unused.
  */
@@ -3159,7 +3156,7 @@ static DECLCALLBACK(VBOXSTRICTRC) tmR3CpuTickParavirtEnable(PVM pVM, PVMCPU pVCp
  * This may perform a EMT rendezvous and change the TSC virtualization mode.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) TMR3CpuTickParavirtEnable(PVM pVM)
 {
@@ -3219,7 +3216,7 @@ static DECLCALLBACK(VBOXSTRICTRC) tmR3CpuTickParavirtDisable(PVM pVM, PVMCPU pVC
  * perform an EMT  rendezvous to revert those changes.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) TMR3CpuTickParavirtDisable(PVM pVM)
 {
@@ -3237,7 +3234,7 @@ VMMR3_INT_DECL(int) TMR3CpuTickParavirtDisable(PVM pVM)
  * Check whether the guest can be presented a fixed rate & monotonic TSC.
  *
  * @returns true if TSC is stable, false otherwise.
- * @param   pVM                     Pointer to the VM.
+ * @param   pVM                     The cross context VM structure.
  * @param   fWithParavirtEnabled    Whether it's fixed & monotonic when
  *                                  paravirt. TSC is enabled or not.
  *
@@ -3274,7 +3271,7 @@ DECLINLINE(const char *) tmR3Get5CharClockName(TMCLOCK enmClock)
 /**
  * Display all timers.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -3316,7 +3313,7 @@ static DECLCALLBACK(void) tmR3TimerInfo(PVM pVM, PCDBGFINFOHLP pHlp, const char
 /**
  * Display all active timers.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -3363,7 +3360,7 @@ static DECLCALLBACK(void) tmR3TimerInfoActive(PVM pVM, PCDBGFINFOHLP pHlp, const
 /**
  * Display all clocks.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The info helpers.
  * @param   pszArgs     Arguments, ignored.
  */
@@ -3441,7 +3438,7 @@ static DECLCALLBACK(void) tmR3InfoClocks(PVM pVM, PCDBGFINFOHLP pHlp, const char
  * Gets the descriptive TM TSC mode name given the enum value.
  *
  * @returns The name.
- * @param   pVM      Pointer to the VM.
+ * @param   enmMode             The mode to name.
  */
 static const char *tmR3GetTSCModeNameEx(TMTSCMODE enmMode)
 {
@@ -3459,7 +3456,7 @@ static const char *tmR3GetTSCModeNameEx(TMTSCMODE enmMode)
  * Gets the descriptive TM TSC mode name.
  *
  * @returns The name.
- * @param   pVM      Pointer to the VM.
+ * @param   pVM      The cross context VM structure.
  */
 static const char *tmR3GetTSCModeName(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/TRPM.cpp b/src/VBox/VMM/VMMR3/TRPM.cpp
index c08202a..0cbc3ff 100644
--- a/src/VBox/VMM/VMMR3/TRPM.cpp
+++ b/src/VBox/VMM/VMMR3/TRPM.cpp
@@ -440,7 +440,7 @@ static DECLCALLBACK(int) trpmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion,
  * Initializes the Trap Manager
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) TRPMR3Init(PVM pVM)
 {
@@ -620,7 +620,7 @@ VMMR3DECL(int) TRPMR3Init(PVM pVM)
  * This function will be called at init and whenever the VMM need
  * to relocate itself inside the GC.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  */
 VMMR3DECL(void) TRPMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
@@ -750,7 +750,7 @@ VMMR3DECL(void) TRPMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
  * Terminates the Trap Manager
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) TRPMR3Term(PVM pVM)
 {
@@ -764,7 +764,7 @@ VMMR3DECL(int) TRPMR3Term(PVM pVM)
  *
  * Used by TRPMR3Reset and CPU hot plugging.
  *
- * @param   pVCpu               Pointer to the VMCPU.
+ * @param   pVCpu               The cross context virtual CPU structure.
  */
 VMMR3DECL(void) TRPMR3ResetCpu(PVMCPU pVCpu)
 {
@@ -778,7 +778,7 @@ VMMR3DECL(void) TRPMR3ResetCpu(PVMCPU pVCpu)
  * For the TRPM component this means that any IDT write monitors
  * needs to be removed, any pending trap cleared, and the IDT reset.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3DECL(void) TRPMR3Reset(PVM pVM)
 {
@@ -827,7 +827,7 @@ VMMR3DECL(void) TRPMR3Reset(PVM pVM)
  * Called by PDM when loading or relocating RC modules.
  *
  * @returns VBox status
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszSymbol       Symbol to resolv
  * @param   pRCPtrValue     Where to store the symbol value.
  *
@@ -870,7 +870,7 @@ VMMR3_INT_DECL(int) TRPMR3GetImportRC(PVM pVM, const char *pszSymbol, PRTRCPTR p
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 static DECLCALLBACK(int) trpmR3Save(PVM pVM, PSSMHANDLE pSSM)
@@ -921,7 +921,7 @@ static DECLCALLBACK(int) trpmR3Save(PVM pVM, PSSMHANDLE pSSM)
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion        Data layout version.
  * @param   uPass           The data pass.
@@ -1058,8 +1058,8 @@ static DECLCALLBACK(int) trpmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion,
  * (callback for the VMCPU_FF_TRPM_SYNC_IDT forced action).
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3DECL(int) TRPMR3SyncIDT(PVM pVM, PVMCPU pVCpu)
 {
@@ -1165,7 +1165,7 @@ VMMR3DECL(int) TRPMR3SyncIDT(PVM pVM, PVMCPU pVCpu)
  * Clear passthrough interrupt gate handler (reset to default handler)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iTrap       Trap/interrupt gate number.
  */
 int trpmR3ClearPassThroughHandler(PVM pVM, unsigned iTrap)
@@ -1228,7 +1228,7 @@ int trpmR3ClearPassThroughHandler(PVM pVM, unsigned iTrap)
  *
  * @returns gate nr or ~0 is not found
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       GC address to check.
  */
 VMMR3DECL(uint32_t) TRPMR3QueryGateByHandler(PVM pVM, RTRCPTR GCPtr)
@@ -1258,7 +1258,7 @@ VMMR3DECL(uint32_t) TRPMR3QueryGateByHandler(PVM pVM, RTRCPTR GCPtr)
  * Get guest trap/interrupt gate handler
  *
  * @returns Guest trap handler address or TRPM_INVALID_HANDLER if none installed
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iTrap       Interrupt/trap number.
  */
 VMMR3DECL(RTRCPTR) TRPMR3GetGuestTrapHandler(PVM pVM, unsigned iTrap)
@@ -1275,7 +1275,7 @@ VMMR3DECL(RTRCPTR) TRPMR3GetGuestTrapHandler(PVM pVM, unsigned iTrap)
  * Used for setting up trap gates used for kernel calls.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iTrap       Interrupt/trap number.
  * @param   pHandler    GC handler pointer
  */
@@ -1401,7 +1401,7 @@ VMMR3DECL(int) TRPMR3SetGuestTrapHandler(PVM pVM, unsigned iTrap, RTRCPTR pHandl
  *
  * @returns True is gate handler, false if not.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPtr       GC address to check.
  */
 VMMR3DECL(bool) TRPMR3IsGateHandler(PVM pVM, RTRCPTR GCPtr)
@@ -1480,8 +1480,8 @@ VMMR3DECL(bool) TRPMR3IsGateHandler(PVM pVM, RTRCPTR GCPtr)
  * Inject event (such as external irq or trap)
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   enmEvent    Trpm event type
  */
 VMMR3DECL(int) TRPMR3InjectEvent(PVM pVM, PVMCPU pVCpu, TRPMEVENT enmEvent)
diff --git a/src/VBox/VMM/VMMR3/VM.cpp b/src/VBox/VMM/VMMR3/VM.cpp
index 3264385..8034dc9 100644
--- a/src/VBox/VMM/VMMR3/VM.cpp
+++ b/src/VBox/VMM/VMMR3/VM.cpp
@@ -769,7 +769,7 @@ static int vmR3CreateU(PUVM pUVM, uint32_t cCpus, PFNCFGMCONSTRUCTOR pfnCFGMCons
  * Reads the base configuation from CFGM.
  *
  * @returns VBox status code.
- * @param   pVM                 The cross context VM structure.
+ * @param   pVM                The cross context VM structure.
  * @param   pUVM                The user mode VM structure.
  * @param   cCpus               The CPU count given to VMR3Create.
  */
@@ -855,7 +855,7 @@ static int vmR3ReadBaseConfig(PVM pVM, PUVM pUVM, uint32_t cCpus)
  * Register the calling EMT with GVM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idCpu       The Virtual CPU ID.
  */
 static DECLCALLBACK(int) vmR3RegisterEMT(PVM pVM, VMCPUID idCpu)
@@ -1165,7 +1165,7 @@ static int vmR3InitRC(PVM pVM)
  * Do init completed notifications.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmWhat     What's completed.
  */
 static int vmR3InitDoCompleted(PVM pVM, VMINITCOMPLETED enmWhat)
@@ -1230,7 +1230,7 @@ static DECLCALLBACK(size_t) vmR3LogPrefixCallback(PRTLOGGER pLogger, char *pchBu
  *
  * This is used both on init and on runtime relocations.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    Relocation delta relative to old location.
  */
 VMMR3_INT_DECL(void) VMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
@@ -1268,8 +1268,8 @@ VMMR3_INT_DECL(void) VMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
  * @returns VERR_VM_INVALID_VM_STATE or VINF_SUCCESS. (This is a strict return
  *          code, see FNVMMEMTRENDEZVOUS.)
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU of the EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser          Ignored.
  */
 static DECLCALLBACK(VBOXSTRICTRC) vmR3PowerOn(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -1344,7 +1344,7 @@ VMMR3DECL(int) VMR3PowerOn(PUVM pUVM)
 /**
  * Does the suspend notifications.
  *
- * @param  pVM      Pointer to the VM.
+ * @param  pVM      The cross context VM structure.
  * @thread  EMT(0)
  */
 static void vmR3SuspendDoWork(PVM pVM)
@@ -1359,8 +1359,8 @@ static void vmR3SuspendDoWork(PVM pVM)
  * @returns VERR_VM_INVALID_VM_STATE or VINF_EM_SUSPEND. (This is a strict
  *          return code, see FNVMMEMTRENDEZVOUS.)
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU of the EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser          Ignored.
  */
 static DECLCALLBACK(VBOXSTRICTRC) vmR3Suspend(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -1458,8 +1458,8 @@ VMMR3DECL(VMSUSPENDREASON) VMR3GetSuspendReason(PUVM pUVM)
  * @returns VERR_VM_INVALID_VM_STATE or VINF_EM_RESUME. (This is a strict
  *          return code, see FNVMMEMTRENDEZVOUS.)
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU of the EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser          Reason.
  */
 static DECLCALLBACK(VBOXSTRICTRC) vmR3Resume(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -1512,7 +1512,7 @@ static DECLCALLBACK(VBOXSTRICTRC) vmR3Resume(PVM pVM, PVMCPU pVCpu, void *pvUser
  * @returns VBox status code. When called on EMT, this will be a strict status
  *          code that has to be propagated up the call stack.
  *
- * @param   pVM         The VM to resume.
+ * @param   pUVM        The user mode VM handle.
  * @param   enmReason   The reason we're resuming.
  *
  * @thread      Any thread.
@@ -1559,8 +1559,8 @@ VMMR3DECL(VMRESUMEREASON) VMR3GetResumeReason(PUVM pUVM)
  * @returns VERR_VM_INVALID_VM_STATE or VINF_EM_RESUME. (This is a strict
  *          return code, see FNVMMEMTRENDEZVOUS.)
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU of the EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser          The pfSuspended argument of vmR3SaveTeleport.
  */
 static DECLCALLBACK(VBOXSTRICTRC) vmR3LiveDoSuspend(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -1659,8 +1659,8 @@ static DECLCALLBACK(VBOXSTRICTRC) vmR3LiveDoSuspend(PVM pVM, PVMCPU pVCpu, void
  * @returns VERR_VM_INVALID_VM_STATE, VINF_SUCCESS or some specific VERR_SSM_*
  *          status code. (This is a strict return code, see FNVMMEMTRENDEZVOUS.)
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU of the EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser          The pfSuspended argument of vmR3SaveTeleport.
  */
 static DECLCALLBACK(VBOXSTRICTRC) vmR3LiveDoStep1Cleanup(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -1701,7 +1701,7 @@ static DECLCALLBACK(VBOXSTRICTRC) vmR3LiveDoStep1Cleanup(PVM pVM, PVMCPU pVCpu,
  * @returns VBox status code.
  * @retval  VINF_SSM_LIVE_SUSPENDED if VMR3Suspend was called.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            The handle of saved state operation.
  *
  * @thread  EMT(0)
@@ -1751,7 +1751,7 @@ static DECLCALLBACK(int) vmR3LiveDoStep2(PVM pVM, PSSMHANDLE pSSM)
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   cMsMaxDowntime      The maximum downtime given as milliseconds.
  * @param   pszFilename         The name of the file.  NULL if pStreamOps is used.
  * @param   pStreamOps          The stream methods.  NULL if pszFilename is used.
@@ -1827,7 +1827,7 @@ static DECLCALLBACK(int) vmR3Save(PVM pVM, uint32_t cMsMaxDowntime, const char *
  *
  * @returns VBox status code.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   cMsMaxDowntime      The maximum downtime given as milliseconds.
  * @param   pszFilename         The name of the file.  NULL if pStreamOps is used.
  * @param   pStreamOps          The stream methods.  NULL if pszFilename is used.
@@ -1916,8 +1916,6 @@ static int vmR3SaveTeleport(PVM pVM, uint32_t cMsMaxDowntime,
  *
  * @param   pUVM                The VM which state should be saved.
  * @param   pszFilename         The name of the save state file.
- * @param   pStreamOps          The stream methods.
- * @param   pvStreamOpsUser     The user argument to the stream methods.
  * @param   fContinueAfterwards Whether continue execution afterwards or not.
  *                              When in doubt, set this to true.
  * @param   pfnProgress         Progress callback. Optional.
@@ -1929,7 +1927,8 @@ static int vmR3SaveTeleport(PVM pVM, uint32_t cMsMaxDowntime,
  * @vmstateto   Saving+Suspended or
  *              RunningLS+SuspendingLS+SuspendedLS+Saving+Suspended.
  */
-VMMR3DECL(int) VMR3Save(PUVM pUVM, const char *pszFilename, bool fContinueAfterwards, PFNVMPROGRESS pfnProgress, void *pvUser, bool *pfSuspended)
+VMMR3DECL(int) VMR3Save(PUVM pUVM, const char *pszFilename, bool fContinueAfterwards, PFNVMPROGRESS pfnProgress, void *pvUser,
+                        bool *pfSuspended)
 {
     LogFlow(("VMR3Save: pUVM=%p pszFilename=%p:{%s} fContinueAfterwards=%RTbool pfnProgress=%p pvUser=%p pfSuspended=%p\n",
              pUVM, pszFilename, pszFilename, fContinueAfterwards, pfnProgress, pvUser, pfSuspended));
@@ -1965,7 +1964,7 @@ VMMR3DECL(int) VMR3Save(PUVM pUVM, const char *pszFilename, bool fContinueAfterw
  *
  * @returns VBox status code.
  *
- * @param   pVM                 The VM which state should be saved.
+ * @param   pUVM                The user mode VM handle.
  * @param   pStreamOps          The stream methods.
  * @param   pvStreamOpsUser     The user argument to the stream methods.
  * @param   pfSuspended         Set if we suspended the VM.
@@ -2062,7 +2061,7 @@ VMMR3DECL(int) VMR3Teleport(PUVM pUVM, uint32_t cMsMaxDowntime, PCSSMSTRMOPS pSt
  * @param   pStreamOps          The stream methods.  NULL if pszFilename is used.
  * @param   pvStreamOpsUser     The user argument to the stream methods.
  * @param   pfnProgress         Progress callback. Optional.
- * @param   pvUser              User argument for the progress callback.
+ * @param   pvProgressUser      User argument for the progress callback.
  * @param   fTeleporting        Indicates whether we're teleporting or not.
  * @param   fSkipStateChanges   Set if we're supposed to skip state changes (FTM delta case)
  *
@@ -2137,7 +2136,7 @@ static DECLCALLBACK(int) vmR3Load(PUVM pUVM, const char *pszFilename, PCSSMSTRMO
  *
  * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pUVM            The user mode VM structure.
  * @param   pszFilename     The name of the save state file.
  * @param   pfnProgress     Progress callback. Optional.
  * @param   pvUser          User argument for the progress callback.
@@ -2216,8 +2215,6 @@ VMMR3DECL(int) VMR3LoadFromStream(PUVM pUVM, PCSSMSTRMOPS pStreamOps, void *pvSt
  * @param   pUVM            The VM handle.
  * @param   pStreamOps      The stream methods.
  * @param   pvStreamOpsUser The user argument to the stream methods.
- * @param   pfnProgress     Progress callback. Optional.
- * @param   pvProgressUser  User argument for the progress callback.
  *
  * @thread      Any thread.
  * @vmstate     Created, Suspended
@@ -2250,8 +2247,8 @@ VMMR3_INT_DECL(int) VMR3LoadFromStreamFT(PUVM pUVM, PCSSMSTRMOPS pStreamOps, voi
  * @returns VERR_VM_INVALID_VM_STATE or VINF_EM_OFF. (This is a strict
  *          return code, see FNVMMEMTRENDEZVOUS.)
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU of the EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser          Ignored.
  */
 static DECLCALLBACK(VBOXSTRICTRC) vmR3PowerOff(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -2417,7 +2414,7 @@ VMMR3DECL(int)   VMR3PowerOff(PUVM pUVM)
  *
  * @returns VBox status code.
  *
- * @param   pVM     The handle of the VM which should be destroyed.
+ * @param   pUVM    The user mode VM handle.
  *
  * @thread      Any none emulation thread.
  * @vmstate     Off, Created
@@ -2470,7 +2467,7 @@ VMMR3DECL(int) VMR3Destroy(PUVM pUVM)
  * to return VINF_EM_TERMINATE so they break out of their run loops.
  *
  * @returns VINF_EM_TERMINATE.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 DECLCALLBACK(int) vmR3Destroy(PVM pVM)
 {
@@ -2565,7 +2562,7 @@ DECLCALLBACK(int) vmR3Destroy(PVM pVM)
  * This is called as the final step in the VM destruction or as the cleanup
  * in case of a creation failure.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pUVM            The user mode VM structure.
  * @param   cMilliesEMTWait The number of milliseconds to wait for the emulation
  *                          threads.
  */
@@ -2741,8 +2738,8 @@ static void vmR3CheckIntegrity(PVM pVM)
  * @returns VERR_VM_INVALID_VM_STATE, VINF_EM_RESET or VINF_EM_SUSPEND. (This
  *          is a strict return code, see FNVMMEMTRENDEZVOUS.)
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU of the EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser          Ignored.
  */
 static DECLCALLBACK(VBOXSTRICTRC) vmR3Reset(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -2900,7 +2897,7 @@ VMMR3DECL(int) VMR3Reset(PUVM pUVM)
  *
  * @returns Pointer to the user mode VM structure on success. NULL if @a pVM is
  *          invalid (asserted).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @sa      VMR3GetVM, VMR3RetainUVM
  */
 VMMR3DECL(PUVM) VMR3GetUVM(PVM pVM)
@@ -3024,7 +3021,7 @@ VMMR3DECL(PRTUUID) VMR3GetUuid(PUVM pUVM, PRTUUID pUuid)
  * Gets the current VM state.
  *
  * @returns The current VM state.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @thread  Any
  */
 VMMR3DECL(VMSTATE) VMR3GetState(PVM pVM)
@@ -3302,7 +3299,7 @@ static bool vmR3ValidateStateTransition(VMSTATE enmStateOld, VMSTATE enmStateNew
  *
  * The caller owns the AtStateCritSect.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pUVM                The UVM handle.
  * @param   enmStateNew         The New state.
  * @param   enmStateOld         The old state.
@@ -3331,7 +3328,7 @@ static void vmR3DoAtState(PVM pVM, PUVM pUVM, VMSTATE enmStateNew, VMSTATE enmSt
 /**
  * Sets the current VM state, with the AtStatCritSect already entered.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pUVM                The UVM handle.
  * @param   enmStateNew         The new state.
  * @param   enmStateOld         The old state.
@@ -3353,7 +3350,7 @@ static void vmR3SetStateLocked(PVM pVM, PUVM pUVM, VMSTATE enmStateNew, VMSTATE
 /**
  * Sets the current VM state.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmStateNew     The new state.
  * @param   enmStateOld     The old state (for asserting only).
  */
@@ -3376,7 +3373,7 @@ static void vmR3SetState(PVM pVM, VMSTATE enmStateNew, VMSTATE enmStateOld)
  * @returns The 1-based ordinal of the succeeding transition.
  *          VERR_VM_INVALID_VM_STATE and Assert+LogRel on failure.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   pszWho              Who is trying to change it.
  * @param   cTransitions        The number of transitions in the ellipsis.
  * @param   ...                 Transition pairs; new, old.
@@ -3469,7 +3466,7 @@ static int vmR3TrySetState(PVM pVM, const char *pszWho, unsigned cTransitions, .
 /**
  * Flag a guru meditation ... a hack.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  *
  * @todo    Rewrite this part. The guru meditation should be flagged
  *          immediately by the VMM and not by VMEmt.cpp when it's all over.
@@ -3495,7 +3492,7 @@ void vmR3SetGuruMeditation(PVM pVM)
 /**
  * Called by vmR3EmulationThreadWithId just before the VM structure is freed.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 void vmR3SetTerminated(PVM pVM)
 {
@@ -3510,7 +3507,7 @@ void vmR3SetTerminated(PVM pVM)
  * clone behind and the user is allowed to resume this...
  *
  * @returns true / false.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @thread  Any thread.
  */
 VMMR3_INT_DECL(bool) VMR3TeleportedAndNotFullyResumedYet(PVM pVM)
@@ -3759,7 +3756,7 @@ static void vmR3SetErrorWorkerDoCall(PVM pVM, PVMATERROR pCur, int rc, RT_SRC_PO
  * This is a worker function for GC and Ring-0 calls to VMSetError and VMSetErrorV.
  * The message is found in VMINT.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @thread  EMT.
  */
 VMMR3_INT_DECL(void) VMR3SetErrorWorker(PVM pVM)
@@ -3826,7 +3823,7 @@ VMMR3_INT_DECL(uint32_t) VMR3GetErrorCount(PUVM pUVM)
  * @returns rc.
  * @param   pUVM            Pointer to the user mode VM structure.
  * @param   rc              The VBox status code.
- * @param   RT_SRC_POS_DECL The source position of this error.
+ * @param   SRC_POS         The source position of this error.
  * @param   pszFormat       Format string.
  * @param   ...             The arguments.
  * @thread  Any thread.
@@ -3846,7 +3843,7 @@ static int vmR3SetErrorU(PUVM pUVM, int rc, RT_SRC_POS_DECL, const char *pszForm
  *
  * @param   pUVM            Pointer to the user mode VM structure.
  * @param   rc              The VBox status code.
- * @param   RT_SRC_POS_DECL The source position of this error.
+ * @param   SRC_POS         The source position of this error.
  * @param   pszFormat       Format string.
  * @param   pArgs           Pointer to the format arguments.
  * @thread  EMT
@@ -3906,7 +3903,7 @@ DECLCALLBACK(void) vmR3SetErrorUV(PUVM pUVM, int rc, RT_SRC_POS_DECL, const char
  *    @endcode
  * @param   pUVM            The user mode VM handle.
  * @param   rc              VBox status code.
- * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+ * @param   SRC_POS         Use RT_SRC_POS.
  * @param   pszFormat       Error message format string.
  * @param   ...             Error message arguments.
  * @thread  Any
@@ -3930,7 +3927,7 @@ VMMR3DECL(int) VMR3SetError(PUVM pUVM, int rc, RT_SRC_POS_DECL, const char *pszF
  *    @endcode
  * @param   pUVM            The user mode VM handle.
  * @param   rc              VBox status code.
- * @param   RT_SRC_POS_DECL Use RT_SRC_POS.
+ * @param   SRC_POS         Use RT_SRC_POS.
  * @param   pszFormat       Error message format string.
  * @param   va              Error message arguments.
  * @thread  Any
@@ -3959,7 +3956,7 @@ VMMR3DECL(int) VMR3SetErrorV(PUVM pUVM, int rc, RT_SRC_POS_DECL, const char *psz
  * Registers a VM runtime error callback.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pUVM                The user mode VM structure.
  * @param   pfnAtRuntimeError   Pointer to callback.
  * @param   pvUser              User argument.
  * @thread  Any.
@@ -4072,8 +4069,8 @@ VMMR3DECL(int) VMR3AtRuntimeErrorDeregister(PUVM pUVM, PFNVMATRUNTIMEERROR pfnAt
  * @returns VERR_VM_INVALID_VM_STATE or VINF_EM_SUSPEND.  (This is a strict
  *          return code, see FNVMMEMTRENDEZVOUS.)
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU of the EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser          Ignored.
  */
 static DECLCALLBACK(VBOXSTRICTRC) vmR3SetRuntimeErrorChangeState(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -4109,7 +4106,7 @@ static DECLCALLBACK(VBOXSTRICTRC) vmR3SetRuntimeErrorChangeState(PVM pVM, PVMCPU
  *
  * @returns VBox status code with modifications, see VMSetRuntimeErrorV.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   fFlags          The error flags.
  * @param   pszErrorId      Error ID string.
  * @param   pszFormat       Format string.
@@ -4170,7 +4167,7 @@ static int vmR3SetRuntimeErrorCommonF(PVM pVM, uint32_t fFlags, const char *pszE
  * The message is found in VMINT.
  *
  * @returns VBox status code, see VMSetRuntimeError.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @thread  EMT.
  */
 VMMR3_INT_DECL(int) VMR3SetRuntimeErrorWorker(PVM pVM)
@@ -4207,7 +4204,7 @@ VMMR3_INT_DECL(int) VMR3SetRuntimeErrorWorker(PVM pVM)
  *
  * @returns VBox status code with modifications, see VMSetRuntimeErrorV.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   fFlags          The error flags.
  * @param   pszErrorId      Error ID string.
  * @param   pszMessage      The error message residing the MM heap.
@@ -4240,7 +4237,7 @@ DECLCALLBACK(int) vmR3SetRuntimeError(PVM pVM, uint32_t fFlags, const char *pszE
  *
  * @returns VBox status code with modifications, see VMSetRuntimeErrorV.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   fFlags          The error flags.
  * @param   pszErrorId      Error ID string.
  * @param   pszFormat       Format string.
@@ -4284,7 +4281,7 @@ VMMR3_INT_DECL(uint32_t) VMR3GetRuntimeErrorCount(PUVM pUVM)
  *
  * @returns The CPU ID. NIL_VMCPUID if the thread isn't an EMT.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR3_INT_DECL(RTCPUID) VMR3GetVMCPUId(PVM pVM)
 {
@@ -4300,7 +4297,7 @@ VMMR3_INT_DECL(RTCPUID) VMR3GetVMCPUId(PVM pVM)
  * @returns true if VM can operate in long-mode, false
  *        otherwise.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR3_INT_DECL(bool) VMR3IsLongModeAllowed(PVM pVM)
 {
@@ -4314,7 +4311,7 @@ VMMR3_INT_DECL(bool) VMR3IsLongModeAllowed(PVM pVM)
  * Returns the native handle of the current EMT VMCPU thread.
  *
  * @returns Handle if this is an EMT thread; NIL_RTNATIVETHREAD otherwise
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @thread  EMT
  */
 VMMR3DECL(RTNATIVETHREAD) VMR3GetVMCPUNativeThread(PVM pVM)
@@ -4332,7 +4329,7 @@ VMMR3DECL(RTNATIVETHREAD) VMR3GetVMCPUNativeThread(PVM pVM)
  * Returns the native handle of the current EMT VMCPU thread.
  *
  * @returns Handle if this is an EMT thread; NIL_RTNATIVETHREAD otherwise
- * @param   pVM             Pointer to the VM.
+ * @param   pUVM        The user mode VM structure.
  * @thread  EMT
  */
 VMMR3DECL(RTNATIVETHREAD) VMR3GetVMCPUNativeThreadU(PUVM pUVM)
@@ -4406,7 +4403,7 @@ VMMR3DECL(int) VMR3GetCpuCoreAndPackageIdFromCpuId(PUVM pUVM, VMCPUID idCpu, uin
  * Worker for VMR3HotUnplugCpu.
  *
  * @returns VINF_EM_WAIT_SPIP (strict status code).
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   idCpu               The current CPU.
  */
 static DECLCALLBACK(int) vmR3HotUnplugCpu(PVM pVM, VMCPUID idCpu)
@@ -4477,7 +4474,7 @@ VMMR3DECL(int) VMR3HotPlugCpu(PUVM pUVM, VMCPUID idCpu)
  * Changes the VMM execution cap.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pUVM                The user mode VM structure.
  * @param   uCpuExecutionCap    New CPU execution cap in precent, 1-100. Where
  *                              100 is max performance (default).
  */
diff --git a/src/VBox/VMM/VMMR3/VMEmt.cpp b/src/VBox/VMM/VMMR3/VMEmt.cpp
index 6dd6d00..f5f7ba0 100644
--- a/src/VBox/VMM/VMMR3/VMEmt.cpp
+++ b/src/VBox/VMM/VMMR3/VMEmt.cpp
@@ -404,7 +404,7 @@ static DECLCALLBACK(int) vmR3HaltOldDoHalt(PUVMCPU pUVCpu, const uint32_t fMask,
  * Initialize the configuration of halt method 1 & 2.
  *
  * @return VBox status code. Failure on invalid CFGM data.
- * @param   pVM     Pointer to the VM.
+ * @param   pUVM        The user mode VM structure.
  */
 static int vmR3HaltMethod12ReadConfigU(PUVM pUVM)
 {
@@ -837,7 +837,7 @@ static DECLCALLBACK(void) vmR3HaltGlobal1NotifyCpuFF(PUVMCPU pUVCpu, uint32_t fF
  * Bootstrap VMR3Wait() worker.
  *
  * @returns VBox status code.
- * @param   pUVMCPU            Pointer to the user mode VMCPU structure.
+ * @param   pUVCpu      Pointer to the user mode VMCPU structure.
  */
 static DECLCALLBACK(int) vmR3BootstrapWait(PUVMCPU pUVCpu)
 {
@@ -905,7 +905,7 @@ static DECLCALLBACK(void) vmR3BootstrapNotifyCpuFF(PUVMCPU pUVCpu, uint32_t fFla
  * Default VMR3Wait() worker.
  *
  * @returns VBox status code.
- * @param   pUVMCPU            Pointer to the user mode VMCPU structure.
+ * @param   pUVCpu          Pointer to the user mode VMCPU structure.
  */
 static DECLCALLBACK(int) vmR3DefaultWait(PUVMCPU pUVCpu)
 {
@@ -1041,8 +1041,8 @@ VMMR3_INT_DECL(void) VMR3NotifyCpuFFU(PUVMCPU pUVCpu, uint32_t fFlags)
  *
  * @returns VINF_SUCCESS unless a fatal error occurred. In the latter
  *          case an appropriate status code is returned.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   fIgnoreInterrupts   If set the VM_FF_INTERRUPT flags is ignored.
  * @thread  The emulation thread.
  * @remarks Made visible for implementing vmsvga sync register.
@@ -1193,8 +1193,8 @@ VMMR3_INT_DECL(void) VMR3AsyncPdmNotificationWakeupU(PUVM pUVM)
  * Rendezvous callback that will be called once.
  *
  * @returns VBox strict status code.
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               Pointer to the VMCPU of the calling EMT.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   pvUser              The new g_aHaltMethods index.
  */
 static DECLCALLBACK(VBOXSTRICTRC) vmR3SetHaltMethodCallback(PVM pVM, PVMCPU pVCpu, void *pvUser)
@@ -1307,7 +1307,7 @@ int vmR3SetHaltMethodU(PUVM pUVM, VMHALTMETHOD enmHaltMethod)
  * of the actual EFLAGS.IF state.
  *
  * @returns VBox error status (never informational statuses).
- * @param   pVM                 The VM handle.
+ * @param   pVM                 The cross context VM structure.
  * @param   idCpu               The id of the calling EMT.
  */
 VMMR3DECL(int) VMR3WaitForDeviceReady(PVM pVM, VMCPUID idCpu)
@@ -1334,7 +1334,7 @@ VMMR3DECL(int) VMR3WaitForDeviceReady(PVM pVM, VMCPUID idCpu)
  * Wakes up a CPU that has called VMR3WaitForDeviceReady.
  *
  * @returns VBox error status (never informational statuses).
- * @param   pVM                 The VM handle.
+ * @param   pVM                 The cross context VM structure.
  * @param   idCpu               The id of the calling EMT.
  */
 VMMR3DECL(int) VMR3NotifyCpuDeviceReady(PVM pVM, VMCPUID idCpu)
diff --git a/src/VBox/VMM/VMMR3/VMM.cpp b/src/VBox/VMM/VMMR3/VMM.cpp
index 54eaab9..e4d44eb 100644
--- a/src/VBox/VMM/VMMR3/VMM.cpp
+++ b/src/VBox/VMM/VMMR3/VMM.cpp
@@ -45,7 +45,7 @@
  * To be written.
  *
  *
- * @sections sec_vmm_limits     VMM Limits
+ * @section sec_vmm_limits     VMM Limits
  *
  * There are various resource limits imposed by the VMM and it's
  * sub-components.  We'll list some of them here.
@@ -148,7 +148,7 @@ static DECLCALLBACK(void)   vmmR3InfoFF(PVM pVM, PCDBGFINFOHLP pHlp, const char
  * Initializes the VMM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) VMMR3Init(PVM pVM)
 {
@@ -283,7 +283,7 @@ VMMR3_INT_DECL(int) VMMR3Init(PVM pVM)
  * The stacks are also used for long jumps in Ring-0.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  *
  * @remarks The optional guard page gets it protection setup up during R3 init
  *          completion because of init order issues.
@@ -335,7 +335,7 @@ static int vmmR3InitStacks(PVM pVM)
  * Initialize the loggers.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int vmmR3InitLoggers(PVM pVM)
 {
@@ -400,7 +400,7 @@ static int vmmR3InitLoggers(PVM pVM)
 /**
  * VMMR3Init worker that register the statistics with STAM.
  *
- * @param   pVM         The shared VM structure.
+ * @param   pVM         The cross context VM structure.
  */
 static void vmmR3InitRegisterStats(PVM pVM)
 {
@@ -483,7 +483,7 @@ static void vmmR3InitRegisterStats(PVM pVM)
  * Initializes the R0 VMM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) VMMR3InitR0(PVM pVM)
 {
@@ -554,7 +554,7 @@ VMMR3_INT_DECL(int) VMMR3InitR0(PVM pVM)
  * Initializes the RC VMM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) VMMR3InitRC(PVM pVM)
 {
@@ -633,7 +633,7 @@ VMMR3_INT_DECL(int) VMMR3InitRC(PVM pVM)
  * Called when an init phase completes.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   enmWhat             Which init phase.
  */
 VMMR3_INT_DECL(int) VMMR3InitCompleted(PVM pVM, VMINITCOMPLETED enmWhat)
@@ -735,7 +735,7 @@ VMMR3_INT_DECL(int) VMMR3InitCompleted(PVM pVM, VMINITCOMPLETED enmWhat)
  * Terminate the VMM bits.
  *
  * @returns VINF_SUCCESS.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3_INT_DECL(int) VMMR3Term(PVM pVM)
 {
@@ -818,7 +818,7 @@ VMMR3_INT_DECL(int) VMMR3Term(PVM pVM)
  *
  * The VMM will need to apply relocations to the core code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    The relocation delta.
  */
 VMMR3_INT_DECL(void) VMMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
@@ -873,7 +873,7 @@ VMMR3_INT_DECL(void) VMMR3Relocate(PVM pVM, RTGCINTPTR offDelta)
  * Updates the settings for the RC and R0 loggers.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 VMMR3_INT_DECL(int) VMMR3UpdateLoggers(PVM pVM)
 {
@@ -978,7 +978,7 @@ VMMR3_INT_DECL(int) VMMR3UpdateLoggers(PVM pVM)
  * Gets the pointer to a buffer containing the R0/RC RTAssertMsg1Weak output.
  *
  * @returns Pointer to the buffer.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(const char *) VMMR3GetRZAssertMsg1(PVM pVM)
 {
@@ -1015,7 +1015,7 @@ VMMR3DECL(PVMCPU) VMMR3GetCpuByIdU(PUVM pUVM, RTCPUID idCpu)
  * Gets the pointer to a buffer containing the R0/RC RTAssertMsg2Weak output.
  *
  * @returns Pointer to the buffer.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(const char *) VMMR3GetRZAssertMsg2(PVM pVM)
 {
@@ -1035,7 +1035,7 @@ VMMR3DECL(const char *) VMMR3GetRZAssertMsg2(PVM pVM)
  * Execute state save operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  */
 static DECLCALLBACK(int) vmmR3Save(PVM pVM, PSSMHANDLE pSSM)
@@ -1057,7 +1057,7 @@ static DECLCALLBACK(int) vmmR3Save(PVM pVM, PSSMHANDLE pSSM)
  * Execute state load operation.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pSSM            SSM operation handle.
  * @param   uVersion        Data layout version.
  * @param   uPass           The data pass.
@@ -1132,7 +1132,7 @@ static DECLCALLBACK(int) vmmR3Load(PVM pVM, PSSMHANDLE pSSM, uint32_t uVersion,
  * Called by PDM when loading or relocating RC modules.
  *
  * @returns VBox status
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pszSymbol       Symbol to resolv
  * @param   pRCPtrValue     Where to store the symbol value.
  *
@@ -1166,7 +1166,7 @@ VMMR3_INT_DECL(int) VMMR3GetImportRC(PVM pVM, const char *pszSymbol, PRTRCPTR pR
 /**
  * Suspends the CPU yielder.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR3_INT_DECL(void) VMMR3YieldSuspend(PVM pVM)
 {
@@ -1188,7 +1188,7 @@ VMMR3_INT_DECL(void) VMMR3YieldSuspend(PVM pVM)
 /**
  * Stops the CPU yielder.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR3_INT_DECL(void) VMMR3YieldStop(PVM pVM)
 {
@@ -1202,7 +1202,7 @@ VMMR3_INT_DECL(void) VMMR3YieldStop(PVM pVM)
 /**
  * Resumes the CPU yielder when it has been a suspended or stopped.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMR3_INT_DECL(void) VMMR3YieldResume(PVM pVM)
 {
@@ -1217,7 +1217,7 @@ VMMR3_INT_DECL(void) VMMR3YieldResume(PVM pVM)
 /**
  * Internal timer callback function.
  *
- * @param   pVM             The VM.
+ * @param   pVM             The cross context VM structure.
  * @param   pTimer          The timer handle.
  * @param   pvUser          User argument specified upon timer creation.
  */
@@ -1260,8 +1260,8 @@ static DECLCALLBACK(void) vmmR3YieldEMT(PVM pVM, PTMTIMER pTimer, void *pvUser)
 /**
  * Executes guest code in the raw-mode context.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3_INT_DECL(int) VMMR3RawRunGC(PVM pVM, PVMCPU pVCpu)
 {
@@ -1337,8 +1337,8 @@ VMMR3_INT_DECL(int) VMMR3RawRunGC(PVM pVM, PVMCPU pVCpu)
 /**
  * Executes guest code (Intel VT-x and AMD-V).
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3_INT_DECL(int) VMMR3HmRunGC(PVM pVM, PVMCPU pVCpu)
 {
@@ -1386,7 +1386,7 @@ VMMR3_INT_DECL(int) VMMR3HmRunGC(PVM pVM, PVMCPU pVCpu)
 /**
  * VCPU worker for VMMSendSipi.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idCpu       Virtual CPU to perform SIPI on
  * @param   uVector     SIPI vector
  */
@@ -1443,7 +1443,7 @@ static DECLCALLBACK(int) vmmR3SendInitIpi(PVM pVM, VMCPUID idCpu)
  * Sends SIPI to the virtual CPU by setting CS:EIP into vector-dependent state
  * and unhalting processor
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idCpu       Virtual CPU to perform SIPI on
  * @param   uVector     SIPI vector
  */
@@ -1458,7 +1458,7 @@ VMMR3_INT_DECL(void) VMMR3SendSipi(PVM pVM, VMCPUID idCpu,  uint32_t uVector)
 /**
  * Sends init IPI to the virtual CPU.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   idCpu       Virtual CPU to perform int IPI on
  */
 VMMR3_INT_DECL(void) VMMR3SendInitIpi(PVM pVM, VMCPUID idCpu)
@@ -1473,7 +1473,7 @@ VMMR3_INT_DECL(void) VMMR3SendInitIpi(PVM pVM, VMCPUID idCpu)
  * Registers the guest memory range that can be used for patching
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatchMem   Patch memory range
  * @param   cbPatchMem  Size of the memory range
  */
@@ -1490,7 +1490,7 @@ VMMR3DECL(int) VMMR3RegisterPatchMemory(PVM pVM, RTGCPTR pPatchMem, unsigned cbP
  * Deregisters the guest memory range that can be used for patching
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPatchMem   Patch memory range
  * @param   cbPatchMem  Size of the memory range
  */
@@ -1509,7 +1509,7 @@ VMMR3DECL(int) VMMR3DeregisterPatchMemory(PVM pVM, RTGCPTR pPatchMem, unsigned c
  * @returns VBox strict informational status code for EM scheduling. No failures
  *          will be returned here, those are for the caller only.
  *
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 DECL_FORCE_INLINE(int) vmmR3EmtRendezvousNonCallerReturn(PVM pVM)
 {
@@ -1536,8 +1536,8 @@ DECL_FORCE_INLINE(int) vmmR3EmtRendezvousNonCallerReturn(PVM pVM)
  *          will be returned here, those are for the caller only.  When
  *          fIsCaller is set, VINF_SUCCESS is always returned.
  *
- * @param   pVM                 Pointer to the VM.
- * @param   pVCpu               The VMCPU structure for the calling EMT.
+ * @param   pVM                 The cross context VM structure.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   fIsCaller           Whether we're the VMMR3EmtRendezvous caller or
  *                              not.
  * @param   fFlags              The flags.
@@ -1708,8 +1708,8 @@ static int vmmR3EmtRendezvousCommon(PVM pVM, PVMCPU pVCpu, bool fIsCaller,
  * @returns VBox strict status code - EM scheduling.  No errors will be returned
  *          here, nor will any non-EM scheduling status codes be returned.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The handle of the calling EMT.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  *
  * @thread  EMT
  */
@@ -1733,7 +1733,7 @@ VMMR3_INT_DECL(int) VMMR3EmtRendezvousFF(PVM pVM, PVMCPU pVCpu)
  * @returns VBox strict status code.  This will be the first error,
  *          VINF_SUCCESS, or an EM scheduling status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   fFlags          Flags indicating execution methods. See
  *                          grp_VMMR3EmtRendezvous_fFlags.
  * @param   pfnRendezvous   The callback.
@@ -1876,7 +1876,7 @@ VMMR3DECL(int) VMMR3EmtRendezvous(PVM pVM, uint32_t fFlags, PFNVMMEMTRENDEZVOUS
  * processing a priority request.
  *
  * @returns Old rendezvous-disabled state.
- * @param   pVCpu           The handle of the calling EMT.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   fDisabled       True if disabled, false if enabled.
  */
 VMMR3_INT_DECL(bool) VMMR3EmtRendezvousSetDisabled(PVMCPU pVCpu, bool fDisabled)
@@ -1893,7 +1893,7 @@ VMMR3_INT_DECL(bool) VMMR3EmtRendezvousSetDisabled(PVMCPU pVCpu, bool fDisabled)
  *
  * @returns VBox status code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idCpu           The ID of the source CPU context (for the address).
  * @param   R0Addr          Where to start reading.
  * @param   pvBuf           Where to store the data we've read.
@@ -1922,7 +1922,7 @@ VMMR3_INT_DECL(int) VMMR3ReadR0Stack(PVM pVM, VMCPUID idCpu, RTHCUINTPTR R0Addr,
 /**
  * Calls a RC function.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   RCPtrEntry  The address of the RC function.
  * @param   cArgs       The number of arguments in the ....
  * @param   ...         Arguments to the function.
@@ -1940,7 +1940,7 @@ VMMR3DECL(int) VMMR3CallRC(PVM pVM, RTRCPTR RCPtrEntry, unsigned cArgs, ...)
 /**
  * Calls a RC function.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   RCPtrEntry  The address of the RC function.
  * @param   cArgs       The number of arguments in the ....
  * @param   args        Arguments to the function.
@@ -2025,7 +2025,7 @@ VMMR3DECL(int) VMMR3CallRCV(PVM pVM, RTRCPTR RCPtrEntry, unsigned cArgs, va_list
  * Wrapper for SUPR3CallVMMR0Ex which will deal with VINF_VMM_CALL_HOST returns.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   uOperation  Operation to execute.
  * @param   u64Arg      Constant argument.
  * @param   pReqHdr     Pointer to a request header. See SUPR3CallVMMR0Ex for
@@ -2076,8 +2076,8 @@ VMMR3DECL(int) VMMR3CallR0(PVM pVM, uint32_t uOperation, uint64_t u64Arg, PSUPVM
  * debug event.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 VMMR3DECL(int) VMMR3ResumeHyper(PVM pVM, PVMCPU pVCpu)
 {
@@ -2135,8 +2135,8 @@ VMMR3DECL(int) VMMR3ResumeHyper(PVM pVM, PVMCPU pVCpu)
  * Service a call to the ring-3 host code.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @remark  Careful with critsects.
  */
 static int vmmR3ServiceCallRing3Request(PVM pVM, PVMCPU pVCpu)
@@ -2322,7 +2322,7 @@ static int vmmR3ServiceCallRing3Request(PVM pVM, PVMCPU pVCpu)
 /**
  * Displays the Force action Flags.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pHlp        The output helpers.
  * @param   pszArgs     The additional arguments (ignored).
  */
diff --git a/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp b/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp
index 02c3b6f..239b7d6 100644
--- a/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp
+++ b/src/VBox/VMM/VMMR3/VMMGuruMeditation.cpp
@@ -226,8 +226,8 @@ static void vmmR3FatalDumpInfoHlpDelete(PVMMR3FATALDUMPINFOHLP pHlp)
 /**
  * Dumps the VM state on a fatal error.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   rcErr       VBox status code.
  */
 VMMR3DECL(void) VMMR3FatalDump(PVM pVM, PVMCPU pVCpu, int rcErr)
@@ -602,6 +602,7 @@ VMMR3DECL(void) VMMR3FatalDump(PVM pVM, PVMCPU pVCpu, int rcErr)
         case VERR_IEM_INSTR_NOT_IMPLEMENTED:
         case VERR_IEM_ASPECT_NOT_IMPLEMENTED:
         case VERR_PATM_IPE_TRAP_IN_PATCH_CODE:
+        case VERR_EM_GUEST_CPU_HANG:
         {
             DBGFR3Info(pVM->pUVM, "cpumguest", NULL, pHlp);
             DBGFR3Info(pVM->pUVM, "cpumguestinstr", NULL, pHlp);
diff --git a/src/VBox/VMM/VMMR3/VMMSwitcher.cpp b/src/VBox/VMM/VMMR3/VMMSwitcher.cpp
index 396b375..fbb2aa8 100644
--- a/src/VBox/VMM/VMMR3/VMMSwitcher.cpp
+++ b/src/VBox/VMM/VMMR3/VMMSwitcher.cpp
@@ -136,7 +136,7 @@ static PVMMSWITCHERDEF g_apHmSwitchers[VMMSWITCHER_MAX] =
  * This is only used as a debugging aid when we cannot find out why something
  * goes haywire in the intermediate context.
  *
- * @param   pVM         The cross context VM structure.
+ * @param   pVM        The cross context VM structure.
  * @param   pSwitcher   The switcher descriptor.
  * @param   pbDst       Where the switcher code was just copied.
  * @param   HCPhysDst   The host physical address corresponding to @a pbDst.
@@ -176,7 +176,7 @@ static void vmmR3Switcher32On64IdtInit(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8
 /**
  * Relocates the 64-bit IDT for 64-bit guest on 32-bit host switchers.
  *
- * @param   pVM         The cross context VM structure.
+ * @param   pVM        The cross context VM structure.
  * @param   pSwitcher   The switcher descriptor.
  * @param   pbDst       Where the switcher code was just copied.
  * @param   HCPhysDst   The host physical address corresponding to @a pbDst.
@@ -208,7 +208,7 @@ static void vmmR3Switcher32On64IdtRelocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, u
  * put on linear contiguous backing.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  */
 int vmmR3SwitcherInit(PVM pVM)
 {
@@ -352,7 +352,7 @@ int vmmR3SwitcherInit(PVM pVM)
 /**
  * Relocate the switchers, called by VMMR#Relocate.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   offDelta    The relocation delta.
  */
 void vmmR3SwitcherRelocate(PVM pVM, RTGCINTPTR offDelta)
@@ -411,7 +411,7 @@ void vmmR3SwitcherRelocate(PVM pVM, RTGCINTPTR offDelta)
 /**
  * Generic switcher code relocator.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pSwitcher   The switcher definition.
  * @param   pu8CodeR3   Pointer to the core code block for the switcher, ring-3 mapping.
  * @param   R0PtrCode   Pointer to the core code block for the switcher, ring-0 mapping.
@@ -1001,7 +1001,7 @@ static void vmmR3SwitcherGenericRelocate(PVM pVM, PVMMSWITCHERDEF pSwitcher,
  * is not initialized.
  *
  * @returns Raw-mode contet GDT address. Null pointer if not applicable.
- * @param   pVM         The cross context VM structure.
+ * @param   pVM        The cross context VM structure.
  */
 static RTRCPTR vmmR3SwitcherGetHyperGDT(PVM pVM)
 {
@@ -1096,7 +1096,7 @@ DECLCALLBACK(void) vmmR3SwitcherAMD64ToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSw
  * Selects the switcher to be used for switching to raw-mode context.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmSwitcher     The new switcher.
  * @remark  This function may be called before the VMM is initialized.
  */
@@ -1149,7 +1149,7 @@ VMMR3_INT_DECL(int) VMMR3SelectSwitcher(PVM pVM, VMMSWITCHER enmSwitcher)
  * Gets the switcher to be used for switching to GC.
  *
  * @returns host to guest ring 0 switcher entrypoint
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmSwitcher     The new switcher.
  */
 VMMR3_INT_DECL(RTR0PTR) VMMR3GetHostToGuestSwitcher(PVM pVM, VMMSWITCHER enmSwitcher)
diff --git a/src/VBox/VMM/VMMR3/VMMTests.cpp b/src/VBox/VMM/VMMR3/VMMTests.cpp
index 7eb4f92..669bb13 100644
--- a/src/VBox/VMM/VMMR3/VMMTests.cpp
+++ b/src/VBox/VMM/VMMR3/VMMTests.cpp
@@ -134,7 +134,7 @@ static int vmmR3ReportMsrRange(PVM pVM, uint32_t uMsr, uint64_t cMsrs, PRTSTREAM
  * Produces a quick report of MSRs.
  *
  * @returns VBox status code.
- * @param   pVM             Pointer to the cross context VM structure.
+ * @param   pVM             The cross context VM structure.
  * @param   pReportStrm     Pointer to the report output stream. Optional.
  * @param   fWithCpuId      Whether CPUID should be included.
  */
@@ -188,7 +188,7 @@ static int vmmR3DoMsrQuickReport(PVM pVM, PRTSTREAM pReportStrm, bool fWithCpuId
  * Performs a testcase.
  *
  * @returns return value from the test.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   enmTestcase The testcase operation to perform.
  * @param   uVariation  The testcase variation id.
  */
@@ -238,7 +238,7 @@ static int vmmR3DoGCTest(PVM pVM, VMMRCOPERATION enmTestcase, unsigned uVariatio
  * Performs a trap test.
  *
  * @returns Return value from the trap test.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   u8Trap      The trap number to test.
  * @param   uVariation  The testcase variation.
  * @param   rcExpect    The expected result.
@@ -791,7 +791,7 @@ static DECLCALLBACK(void) vmmDoPrintfToStream(PCDBGFINFOHLP pHlp, const char *ps
  * writing the values and process to stdout.
  *
  * @returns VBox status code.
- * @param   pVM         The VM handle.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) VMMDoBruteForceMsrs(PVM pVM)
 {
@@ -831,7 +831,7 @@ VMMR3DECL(int) VMMDoBruteForceMsrs(PVM pVM)
  * well as writing the values and process to stdout.
  *
  * @returns VBox status code.
- * @param   pVM         The VM handle.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) VMMDoKnownMsrs(PVM pVM)
 {
@@ -854,7 +854,7 @@ VMMR3DECL(int) VMMDoKnownMsrs(PVM pVM)
  * MSR experimentation.
  *
  * @returns VBox status code.
- * @param   pVM         The VM handle.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR3DECL(int) VMMDoMsrExperiments(PVM pVM)
 {
diff --git a/src/VBox/VMM/VMMR3/VMReq.cpp b/src/VBox/VMM/VMMR3/VMReq.cpp
index 4064c65..873f2c7 100644
--- a/src/VBox/VMM/VMMR3/VMReq.cpp
+++ b/src/VBox/VMM/VMMR3/VMReq.cpp
@@ -54,7 +54,7 @@ static int  vmR3ReqProcessOneU(PUVM pUVM, PVMREQ pReq);
  *          its status code is return.  Otherwise, the status of pfnFunction is
  *          returned.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idDstCpu        The destination CPU(s). Either a specific CPU ID or
  *                          one of the following special values:
  *                              VMCPUID_ANY, VMCPUID_ANY_QUEUE, VMCPUID_ALL or VMCPUID_ALL_REVERSE.
@@ -91,7 +91,7 @@ VMMR3_INT_DECL(int) VMR3ReqCallWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunction
  *          its status code is return.  Otherwise, the status of pfnFunction is
  *          returned.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pUVM            The user mode VM structure.
  * @param   idDstCpu        The destination CPU(s). Either a specific CPU ID or
  *                          one of the following special values:
  *                              VMCPUID_ANY, VMCPUID_ANY_QUEUE, VMCPUID_ALL or VMCPUID_ALL_REVERSE.
@@ -125,7 +125,7 @@ VMMR3DECL(int) VMR3ReqCallWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction,
  *
  * @returns VBox status code returned by VMR3ReqCallVU.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idDstCpu        The destination CPU(s). Either a specific CPU ID or
  *                          one of the following special values:
  *                              VMCPUID_ANY, VMCPUID_ANY_QUEUE, VMCPUID_ALL or VMCPUID_ALL_REVERSE.
@@ -184,7 +184,7 @@ VMMR3DECL(int) VMR3ReqCallNoWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction
  *
  * @returns VBox status code of VMR3ReqCallVU.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idDstCpu        The destination CPU(s). Either a specific CPU ID or
  *                          one of the following special values:
  *                              VMCPUID_ANY, VMCPUID_ANY_QUEUE, VMCPUID_ALL or VMCPUID_ALL_REVERSE.
@@ -247,7 +247,7 @@ VMMR3DECL(int) VMR3ReqCallVoidWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFuncti
  *
  * @returns VBox status code of VMR3ReqCallVU.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idDstCpu        The destination CPU(s). Either a specific CPU ID or
  *                          one of the following special values:
  *                              VMCPUID_ANY, VMCPUID_ANY_QUEUE, VMCPUID_ALL or VMCPUID_ALL_REVERSE.
@@ -283,7 +283,7 @@ VMMR3DECL(int) VMR3ReqCallVoidNoWait(PVM pVM, VMCPUID idDstCpu, PFNRT pfnFunctio
  *          its status code is return.  Otherwise, the status of pfnFunction is
  *          returned.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   idDstCpu        The destination CPU(s). Either a specific CPU ID or
  *                          one of the following special values:
  *                              VMCPUID_ANY, VMCPUID_ANY_QUEUE, VMCPUID_ALL or VMCPUID_ALL_REVERSE.
@@ -1186,7 +1186,7 @@ VMMR3_INT_DECL(int) VMR3ReqProcessU(PUVM pUVM, VMCPUID idDstCpu, bool fPriorityO
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pUVM        The user mode VM structure.
  * @param   pReq        Request packet to process.
  */
 static int  vmR3ReqProcessOneU(PUVM pUVM, PVMREQ pReq)
diff --git a/src/VBox/VMM/VMMR3/cpus/Intel_Atom_330_1_60GHz.h b/src/VBox/VMM/VMMR3/cpus/Intel_Atom_330_1_60GHz.h
new file mode 100644
index 0000000..020e0fd
--- /dev/null
+++ b/src/VBox/VMM/VMMR3/cpus/Intel_Atom_330_1_60GHz.h
@@ -0,0 +1,206 @@
+/* $Id: Intel_Atom_330_1_60GHz.h $ */
+/** @file
+ * CPU database entry "Intel Atom 330 1.60GHz".
+ * Generated at 2015-11-04T12:58:59Z by VBoxCpuReport v5.0.51r103818 on linux.amd64.
+ */
+
+/*
+ * Copyright (C) 2013-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.
+ */
+
+#ifndef VBOX_CPUDB_Intel_Atom_330_1_60GHz
+#define VBOX_CPUDB_Intel_Atom_330_1_60GHz
+
+
+#ifndef CPUM_DB_STANDALONE
+/**
+ * CPUID leaves for Intel(R) Atom(TM) CPU  330   @ 1.60GHz.
+ */
+static CPUMCPUIDLEAF const g_aCpuIdLeaves_Intel_Atom_330_1_60GHz[] = 
+{
+    { 0x00000000, 0x00000000, 0x00000000, 0x0000000a, 0x756e6547, 0x6c65746e, 0x49656e69, 0 },
+    { 0x00000001, 0x00000000, 0x00000000, 0x000106c2, 0x01040800, 0x0040e31d, 0xbfe9fbff, 0 | CPUMCPUIDLEAF_F_CONTAINS_APIC_ID },
+    { 0x00000002, 0x00000000, 0x00000000, 0x4fba5901, 0x0e3080c0, 0x00000000, 0x00000000, 0 },
+    { 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000004, 0x00000000, UINT32_MAX, 0x04004121, 0x0140003f, 0x0000003f, 0x00000001, 0 },
+    { 0x00000004, 0x00000001, UINT32_MAX, 0x04004122, 0x01c0003f, 0x0000003f, 0x00000001, 0 },
+    { 0x00000004, 0x00000002, UINT32_MAX, 0x04004143, 0x01c0003f, 0x000003ff, 0x00000001, 0 },
+    { 0x00000004, 0x00000003, UINT32_MAX, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000005, 0x00000000, 0x00000000, 0x00000040, 0x00000040, 0x00000003, 0x00000010, 0 },
+    { 0x00000006, 0x00000000, 0x00000000, 0x00000001, 0x00000002, 0x00000001, 0x00000000, 0 },
+    { 0x00000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000009, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x0000000a, 0x00000000, 0x00000000, 0x07280203, 0x00000000, 0x00000000, 0x00002501, 0 },
+    { 0x80000000, 0x00000000, 0x00000000, 0x80000008, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x80000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x20100800, 0 },
+    { 0x80000002, 0x00000000, 0x00000000, 0x20202020, 0x20202020, 0x746e4920, 0x52286c65, 0 },
+    { 0x80000003, 0x00000000, 0x00000000, 0x74412029, 0x54286d6f, 0x4320294d, 0x20205550, 0 },
+    { 0x80000004, 0x00000000, 0x00000000, 0x20303333, 0x20402020, 0x30362e31, 0x007a4847, 0 },
+    { 0x80000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x80000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02008040, 0x00000000, 0 },
+    { 0x80000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x80000008, 0x00000000, 0x00000000, 0x00003020, 0x00000000, 0x00000000, 0x00000000, 0 },
+};
+#endif /* !CPUM_DB_STANDALONE */
+
+
+#ifndef CPUM_DB_STANDALONE
+/**
+ * MSR ranges for Intel(R) Atom(TM) CPU  330   @ 1.60GHz.
+ */
+static CPUMMSRRANGE const g_aMsrRanges_Intel_Atom_330_1_60GHz[] = 
+{
+    MFI(0x00000000, "IA32_P5_MC_ADDR", Ia32P5McAddr), /* value=0x0 */
+    MFX(0x00000001, "IA32_P5_MC_TYPE", Ia32P5McType, Ia32P5McType, 0, 0, UINT64_MAX), /* value=0x0 */
+    MFX(0x00000006, "IA32_MONITOR_FILTER_LINE_SIZE", Ia32MonitorFilterLineSize, Ia32MonitorFilterLineSize, 0, 0, UINT64_C(0xffffffffffff0000)), /* value=0x40 */
+    MFN(0x00000010, "IA32_TIME_STAMP_COUNTER", Ia32TimestampCounter, Ia32TimestampCounter), /* value=0x5a7`e94bd2c0 */
+    MFX(0x00000017, "IA32_PLATFORM_ID", Ia32PlatformId, ReadOnly, UINT64_C(0xc00008836ac1b), 0, 0), /* value=0xc0000`8836ac1b */
+    MFX(0x0000001b, "IA32_APIC_BASE", Ia32ApicBase, Ia32ApicBase, UINT32_C(0xfee00800), 0, UINT64_C(0xffffffff000006ff)),
+    MVX(0x00000033, "TEST_CTL", 0, 0, UINT64_C(0xffffffff7fffffff)),
+    MVO(0x00000039, "C2_UNK_0000_0039", 0x1),
+    MFO(0x0000003a, "IA32_FEATURE_CONTROL", Ia32FeatureControl), /* value=0x1 */
+    MVO(0x0000003f, "P6_UNK_0000_003f", 0),
+    RFN(0x00000040, 0x00000047, "MSR_LASTBRANCH_n_FROM_IP", IntelLastBranchToN, IntelLastBranchToN),
+    RFN(0x00000060, 0x00000067, "MSR_LASTBRANCH_n_TO_IP", IntelLastBranchFromN, IntelLastBranchFromN),
+    MFN(0x00000079, "IA32_BIOS_UPDT_TRIG", WriteOnly, IgnoreWrite),
+    MFX(0x0000008b, "BBL_CR_D3|BIOS_SIGN", Ia32BiosSignId, Ia32BiosSignId, 0, 0, UINT32_MAX), /* value=0x20d`00000000 */
+    RSN(0x000000c1, 0x000000c2, "IA32_PMCn", Ia32PmcN, Ia32PmcN, 0x0, ~(uint64_t)UINT32_MAX, 0),
+    MFX(0x000000c7, "IA32_PMC6", Ia32PmcN, Ia32PmcN, 0, UINT64_C(0xfff7bdefff7df7df), 0), /* value=0x16101c00`00000000 */
+    MFX(0x000000cd, "MSR_FSB_FREQ", IntelP6FsbFrequency, ReadOnly, 0x101, 0, 0), /* value=0x101 */
+    MVO(0x000000ce, "IA32_PLATFORM_INFO", UINT64_C(0x1b1b0c004e4e0000)),
+    MVO(0x000000cf, "C2_UNK_0000_00cf", 0x1f),
+    MVO(0x000000e0, "C2_UNK_0000_00e0", 0x6800f0),
+    MVO(0x000000e1, "C2_UNK_0000_00e1", UINT32_C(0xf0f00000)),
+    MFX(0x000000e2, "MSR_PKG_CST_CONFIG_CONTROL", IntelPkgCStConfigControl, IntelPkgCStConfigControl, 0, 0xbfff, UINT64_C(0xfffffffffc804000)), /* value=0x26b001 */
+    MFX(0x000000e3, "C2_SMM_CST_MISC_INFO", IntelCore2SmmCStMiscInfo, IntelCore2SmmCStMiscInfo, 0, 0, ~(uint64_t)UINT32_MAX), /* value=0x0 */
+    MFX(0x000000e4, "MSR_PMG_IO_CAPTURE_BASE", IntelPmgIoCaptureBase, IntelPmgIoCaptureBase, 0, 0, UINT64_C(0xffffffffff800000)), /* value=0x0 */
+    MVO(0x000000e5, "C2_UNK_0000_00e5", UINT32_C(0xd00a00f8)),
+    MFN(0x000000e7, "IA32_MPERF", Ia32MPerf, Ia32MPerf), /* value=0x63`19743600 */
+    MFN(0x000000e8, "IA32_APERF", Ia32APerf, Ia32APerf), /* value=0x63`199424b8 */
+    MFX(0x000000ee, "C1_EXT_CONFIG", IntelCore1ExtConfig, IntelCore1ExtConfig, 0, UINT64_C(0xff7bdeffffc5ffff), 0), /* value=0x3384103 */
+    MFX(0x000000fe, "IA32_MTRRCAP", Ia32MtrrCap, ReadOnly, 0x508, 0, 0), /* value=0x508 */
+    MVX(0x00000116, "BBL_CR_ADDR", 0x3fc0, UINT64_C(0xfffffff00000001f), 0),
+    MVX(0x00000118, "BBL_CR_DECC", 0, UINT64_C(0xfffc0000fffc0000), 0),
+    MFX(0x00000119, "BBL_CR_CTL", IntelBblCrCtl, IntelBblCrCtl, 0x938008, 0x4080017f, ~(uint64_t)UINT32_MAX), /* value=0x938008 */
+    MFN(0x0000011a, "BBL_CR_TRIG", WriteOnly, IgnoreWrite),
+    MVX(0x0000011b, "P6_UNK_0000_011b", 0, 0x1, UINT64_C(0xfffffffffffffffe)),
+    MVX(0x0000011c, "C2_UNK_0000_011c", 0xd96000, 0, UINT64_C(0xfffffffff0000000)),
+    MFX(0x0000011e, "BBL_CR_CTL3", IntelBblCrCtl3, IntelBblCrCtl3, 0x7f00011f, UINT32_C(0xff83f81f), UINT64_C(0xffffffff007c06e0)), /* value=0x7f00011f */
+    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`81573970 */
+    MFX(0x00000179, "IA32_MCG_CAP", Ia32McgCap, ReadOnly, 0x805, 0, 0), /* value=0x805 */
+    MFX(0x0000017a, "IA32_MCG_STATUS", Ia32McgStatus, Ia32McgStatus, 0, 0, UINT64_MAX), /* value=0x0 */
+    RSN(0x00000186, 0x00000187, "IA32_PERFEVTSELn", Ia32PerfEvtSelN, Ia32PerfEvtSelN, 0x0, 0, ~(uint64_t)UINT32_MAX),
+    MFX(0x00000194, "CLOCK_FLEX_MAX", IntelFlexRatio, IntelFlexRatio, 0, UINT32_C(0xfffee0c0), ~(uint64_t)UINT32_MAX), /* value=0x0 */
+    MFX(0x00000198, "IA32_PERF_STATUS", Ia32PerfStatus, ReadOnly, UINT64_C(0xc1b0c1b06000c1b), 0, 0), /* value=0xc1b0c1b`06000c1b */
+    MFX(0x00000199, "IA32_PERF_CTL", Ia32PerfCtl, Ia32PerfCtl, 0xc1b, 0, 0), /* Might bite. value=0xc1b */
+    MFX(0x0000019a, "IA32_CLOCK_MODULATION", Ia32ClockModulation, Ia32ClockModulation, 0x2, 0, UINT64_C(0xffffffffffffffe1)), /* value=0x2 */
+    MFX(0x0000019b, "IA32_THERM_INTERRUPT", Ia32ThermInterrupt, Ia32ThermInterrupt, 0x3, 0, UINT64_C(0xffffffffff0000e0)), /* value=0x3 */
+    MFX(0x0000019c, "IA32_THERM_STATUS", Ia32ThermStatus, Ia32ThermStatus, UINT32_C(0x884c0000), UINT32_C(0xf87f03ff), UINT64_C(0xffffffff0780fc00)), /* value=0x884c0000 */
+    MFX(0x0000019d, "IA32_THERM2_CTL", Ia32Therm2Ctl, ReadOnly, 0x61b, 0, 0), /* value=0x61b */
+    MVX(0x0000019e, "P6_UNK_0000_019e", 0, UINT32_C(0xffff0000), ~(uint64_t)UINT32_MAX),
+    MFX(0x000001a0, "IA32_MISC_ENABLE", Ia32MiscEnable, Ia32MiscEnable, 0x60940488, UINT64_C(0x366131884), UINT64_C(0xfffffff89908c372)), /* value=0x60940488 */
+    MVX(0x000001aa, "P6_PIC_SENS_CFG", UINT32_C(0x800f0421), UINT64_C(0xffffffffff80000e), 0),
+    MFX(0x000001c9, "MSR_LASTBRANCH_TOS", IntelLastBranchTos, IntelLastBranchTos, 0, 0, UINT64_C(0xfffffffffffffff8)), /* value=0x0 */
+    MFX(0x000001d9, "IA32_DEBUGCTL", Ia32DebugCtl, Ia32DebugCtl, 0, 0, UINT64_C(0xffffffffffffe03c)), /* value=0x0 */
+    MFO(0x000001db, "P6_LAST_BRANCH_FROM_IP", P6LastBranchFromIp), /* value=0xffffffff`a07ac16e */
+    MFO(0x000001dc, "P6_LAST_BRANCH_TO_IP", P6LastBranchToIp), /* value=0xffffffff`8105c4f0 */
+    MFN(0x000001dd, "P6_LAST_INT_FROM_IP", P6LastIntFromIp, P6LastIntFromIp), /* value=0x0 */
+    MFN(0x000001de, "P6_LAST_INT_TO_IP", P6LastIntToIp, P6LastIntToIp), /* value=0x0 */
+    MFX(0x00000200, "IA32_MTRR_PHYS_BASE0", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x0, 0, UINT64_C(0xffffffff00000ff8)), /* value=0xe0000000 */
+    MFX(0x00000201, "IA32_MTRR_PHYS_MASK0", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x0, 0, UINT64_C(0xfffffff0000007ff)), /* value=0xe0000800 */
+    MFX(0x00000202, "IA32_MTRR_PHYS_BASE1", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x1, 0, UINT64_C(0xffffffff00000ff8)), /* value=0x6 */
+    MFX(0x00000203, "IA32_MTRR_PHYS_MASK1", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x1, 0, UINT64_C(0xfffffff0000007ff)), /* value=0x800 */
+    MFX(0x00000204, "IA32_MTRR_PHYS_BASE2", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x2, 0, UINT64_C(0xffffffff00000ff8)), /* value=0x0 */
+    MFX(0x00000205, "IA32_MTRR_PHYS_MASK2", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x2, 0, UINT64_C(0xfffffff0000007ff)), /* value=0x0 */
+    MFX(0x00000206, "IA32_MTRR_PHYS_BASE3", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x3, 0, UINT64_C(0xffffffff00000ff8)), /* value=0x0 */
+    MFX(0x00000207, "IA32_MTRR_PHYS_MASK3", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x3, 0, UINT64_C(0xfffffff0000007ff)), /* value=0x0 */
+    MFX(0x00000208, "IA32_MTRR_PHYS_BASE4", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x4, 0, UINT64_C(0xffffffff00000ff8)), /* value=0x0 */
+    MFX(0x00000209, "IA32_MTRR_PHYS_MASK4", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x4, 0, UINT64_C(0xfffffff0000007ff)), /* value=0x0 */
+    MFX(0x0000020a, "IA32_MTRR_PHYS_BASE5", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x5, 0, UINT64_C(0xffffffff00000ff8)), /* value=0x0 */
+    MFX(0x0000020b, "IA32_MTRR_PHYS_MASK5", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x5, 0, UINT64_C(0xfffffff0000007ff)), /* value=0x0 */
+    MFX(0x0000020c, "IA32_MTRR_PHYS_BASE6", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x6, 0, UINT64_C(0xffffffff00000ff8)), /* 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(0xffffffff00000ff8)), /* 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),
+    MVX(0x000002e0, "I7_SB_NO_EVICT_MODE", 0, 0, UINT64_C(0xffffffff7ffffffc)),
+    MFZ(0x000002ff, "IA32_MTRR_DEF_TYPE", Ia32MtrrDefType, Ia32MtrrDefType, GuestMsrs.msr.MtrrDefType, 0, UINT64_C(0xfffffffffffff3f8)),
+    MFX(0x00000309, "IA32_FIXED_CTR0", Ia32FixedCtrN, Ia32FixedCtrN, 0x0, 0, UINT64_C(0xffffff0000000000)), /* value=0x8c */
+    MFX(0x0000030a, "IA32_FIXED_CTR1", Ia32FixedCtrN, Ia32FixedCtrN, 0x1, 0x81201, UINT64_C(0xffffff0000000000)), /* value=0xff`ad893763 */
+    MFX(0x0000030b, "IA32_FIXED_CTR2", Ia32FixedCtrN, Ia32FixedCtrN, 0x2, 0, UINT64_C(0xffffff0000000000)), /* value=0x8f4 */
+    MFX(0x00000345, "IA32_PERF_CAPABILITIES", Ia32PerfCapabilities, ReadOnly, 0xc1, 0, 0), /* value=0xc1 */
+    MFX(0x0000038d, "IA32_FIXED_CTR_CTRL", Ia32FixedCtrCtrl, Ia32FixedCtrCtrl, 0, 0, UINT64_C(0xfffffffffffff000)), /* value=0xb0 */
+    MFX(0x0000038e, "IA32_PERF_GLOBAL_STATUS", Ia32PerfGlobalStatus, ReadOnly, 0, 0, 0), /* value=0x0 */
+    MFX(0x0000038f, "IA32_PERF_GLOBAL_CTRL", Ia32PerfGlobalCtrl, Ia32PerfGlobalCtrl, 0, 0, UINT64_C(0xfffffff8fffffffc)), /* value=0x7`00000003 */
+    MFX(0x00000390, "IA32_PERF_GLOBAL_OVF_CTRL", Ia32PerfGlobalOvfCtrl, Ia32PerfGlobalOvfCtrl, 0, UINT64_C(0xc000000700000003), UINT64_C(0x3ffffff8fffffffc)), /* value=0x0 */
+    MVX(0x000003ca, "TODO_0000_03ca", 0x10510, 0, UINT64_C(0xffffffffffe00000)),
+    MFX(0x000003f1, "IA32_PEBS_ENABLE", Ia32PebsEnable, Ia32PebsEnable, 0, 0, UINT64_C(0xfffffffffffffffe)), /* value=0x0 */
+    RFN(0x00000400, 0x00000417, "IA32_MCi_CTL_STATUS_ADDR_MISC", Ia32McCtlStatusAddrMiscN, Ia32McCtlStatusAddrMiscN),
+    MVX(0x000004f8, "C2_UNK_0000_04f8", 0, 0, 0),
+    MVX(0x000004f9, "C2_UNK_0000_04f9", 0, 0, 0),
+    MVX(0x000004fa, "C2_UNK_0000_04fa", 0, 0, 0),
+    MVX(0x000004fb, "C2_UNK_0000_04fb", 0, 0, 0),
+    MVX(0x000004fc, "C2_UNK_0000_04fc", 0, 0, 0),
+    MVX(0x000004fd, "C2_UNK_0000_04fd", 0, 0, 0),
+    MVX(0x000004fe, "C2_UNK_0000_04fe", 0, 0, 0),
+    MVX(0x000004ff, "C2_UNK_0000_04ff", 0, 0, 0),
+    MFN(0x00000600, "IA32_DS_AREA", Ia32DsArea, Ia32DsArea), /* value=0xffff8800`d6ee1c00 */
+    MFX(0xc0000080, "AMD64_EFER", Amd64Efer, Amd64Efer, 0xd01, 0x400, UINT64_C(0xfffffffffffff2fe)),
+    MFN(0xc0000081, "AMD64_STAR", Amd64SyscallTarget, Amd64SyscallTarget), /* value=0x230010`00000000 */
+    MFN(0xc0000082, "AMD64_STAR64", Amd64LongSyscallTarget, Amd64LongSyscallTarget), /* value=0xffffffff`815715d0 */
+    MFN(0xc0000083, "AMD64_STARCOMPAT", Amd64CompSyscallTarget, Amd64CompSyscallTarget), /* value=0xffffffff`81573ad0 */
+    MFX(0xc0000084, "AMD64_SYSCALL_FLAG_MASK", Amd64SyscallFlagMask, Amd64SyscallFlagMask, 0, ~(uint64_t)UINT32_MAX, 0), /* value=0x47700 */
+    MFN(0xc0000100, "AMD64_FS_BASE", Amd64FsBase, Amd64FsBase), /* value=0x7fe4`93136740 */
+    MFN(0xc0000101, "AMD64_GS_BASE", Amd64GsBase, Amd64GsBase), /* value=0xffff8800`db500000 */
+    MFN(0xc0000102, "AMD64_KERNEL_GS_BASE", Amd64KernelGsBase, Amd64KernelGsBase), /* value=0x0 */
+};
+#endif /* !CPUM_DB_STANDALONE */
+
+
+/**
+ * Database entry for Intel(R) Atom(TM) CPU  330   @ 1.60GHz.
+ */
+static CPUMDBENTRY const g_Entry_Intel_Atom_330_1_60GHz = 
+{
+    /*.pszName          = */ "Intel Atom 330 1.60GHz",
+    /*.pszFullName      = */ "Intel(R) Atom(TM) CPU  330   @ 1.60GHz",
+    /*.enmVendor        = */ CPUMCPUVENDOR_INTEL,
+    /*.uFamily          = */ 6,
+    /*.uModel           = */ 28,
+    /*.uStepping        = */ 2,
+    /*.enmMicroarch     = */ kCpumMicroarch_Intel_Atom_Bonnell,
+    /*.uScalableBusFreq = */ CPUM_SBUSFREQ_133MHZ,
+    /*.fFlags           = */ 0,
+    /*.cMaxPhysAddrWidth= */ 32,
+    /*.paCpuIdLeaves    = */ NULL_ALONE(g_aCpuIdLeaves_Intel_Atom_330_1_60GHz),
+    /*.cCpuIdLeaves     = */ ZERO_ALONE(RT_ELEMENTS(g_aCpuIdLeaves_Intel_Atom_330_1_60GHz)),
+    /*.enmUnknownCpuId  = */ CPUMUNKNOWNCPUID_LAST_STD_LEAF,
+    /*.DefUnknownCpuId  = */ { 0x07280203, 0x00000000, 0x00000000, 0x00002501 },
+    /*.fMsrMask         = */ UINT32_MAX,
+    /*.cMsrRanges       = */ ZERO_ALONE(RT_ELEMENTS(g_aMsrRanges_Intel_Atom_330_1_60GHz)),
+    /*.paMsrRanges      = */ NULL_ALONE(g_aMsrRanges_Intel_Atom_330_1_60GHz),
+};
+
+#endif /* !VBOX_DB_Intel_Atom_330_1_60GHz */
+
diff --git a/src/VBox/VMM/VMMR3/cpus/Intel_Core_i7_5600U.h b/src/VBox/VMM/VMMR3/cpus/Intel_Core_i7_5600U.h
new file mode 100644
index 0000000..3a45da9
--- /dev/null
+++ b/src/VBox/VMM/VMMR3/cpus/Intel_Core_i7_5600U.h
@@ -0,0 +1,364 @@
+/* $Id: Intel_Core_i7_5600U.h $ */
+/** @file
+ * CPU database entry "Intel Core i7-5600U".
+ * Generated at 2015-11-04T14:14:27Z by VBoxCpuReport v5.0.51r103906 on win.amd64.
+ */
+
+/*
+ * Copyright (C) 2013-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.
+ */
+
+#ifndef VBOX_CPUDB_Intel_Core_i7_5600U
+#define VBOX_CPUDB_Intel_Core_i7_5600U
+
+
+#ifndef CPUM_DB_STANDALONE
+/**
+ * CPUID leaves for Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz.
+ */
+static CPUMCPUIDLEAF const g_aCpuIdLeaves_Intel_Core_i7_5600U[] = 
+{
+    { 0x00000000, 0x00000000, 0x00000000, 0x00000014, 0x756e6547, 0x6c65746e, 0x49656e69, 0 },
+    { 0x00000001, 0x00000000, 0x00000000, 0x000306d4, 0x00100800, 0x7ffafbff, 0xbfebfbff, 0 | CPUMCPUIDLEAF_F_CONTAINS_APIC_ID },
+    { 0x00000002, 0x00000000, 0x00000000, 0x76036301, 0x00f0b5ff, 0x00000000, 0x00c30000, 0 },
+    { 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000004, 0x00000000, UINT32_MAX, 0x1c004121, 0x01c0003f, 0x0000003f, 0x00000000, 0 },
+    { 0x00000004, 0x00000001, UINT32_MAX, 0x1c004122, 0x01c0003f, 0x0000003f, 0x00000000, 0 },
+    { 0x00000004, 0x00000002, UINT32_MAX, 0x1c004143, 0x01c0003f, 0x000001ff, 0x00000000, 0 },
+    { 0x00000004, 0x00000003, UINT32_MAX, 0x1c03c163, 0x03c0003f, 0x00000fff, 0x00000006, 0 },
+    { 0x00000004, 0x00000004, UINT32_MAX, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000005, 0x00000000, 0x00000000, 0x00000040, 0x00000040, 0x00000003, 0x11142120, 0 },
+    { 0x00000006, 0x00000000, 0x00000000, 0x00000077, 0x00000002, 0x00000009, 0x00000000, 0 },
+    { 0x00000007, 0x00000000, UINT32_MAX, 0x00000000, 0x021c2fbb, 0x00000000, 0x00000000, 0 },
+    { 0x00000007, 0x00000001, UINT32_MAX, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000009, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x0000000a, 0x00000000, 0x00000000, 0x07300403, 0x00000000, 0x00000000, 0x00000603, 0 },
+    { 0x0000000b, 0x00000000, UINT32_MAX, 0x00000001, 0x00000002, 0x00000100, 0x00000000, 0 | CPUMCPUIDLEAF_F_INTEL_TOPOLOGY_SUBLEAVES | CPUMCPUIDLEAF_F_CONTAINS_APIC_ID },
+    { 0x0000000b, 0x00000001, UINT32_MAX, 0x00000004, 0x00000004, 0x00000201, 0x00000000, 0 | CPUMCPUIDLEAF_F_INTEL_TOPOLOGY_SUBLEAVES | CPUMCPUIDLEAF_F_CONTAINS_APIC_ID },
+    { 0x0000000b, 0x00000002, UINT32_MAX, 0x00000000, 0x00000000, 0x00000002, 0x00000000, 0 | CPUMCPUIDLEAF_F_INTEL_TOPOLOGY_SUBLEAVES | CPUMCPUIDLEAF_F_CONTAINS_APIC_ID },
+    { 0x0000000c, 0x00000000, UINT32_MAX, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0 },
+    { 0x0000000c, 0x00000001, UINT32_MAX, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x0000000d, 0x00000000, UINT32_MAX, 0x00000007, 0x00000340, 0x00000340, 0x00000000, 0 },
+    { 0x0000000d, 0x00000001, UINT32_MAX, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x0000000d, 0x00000002, UINT32_MAX, 0x00000100, 0x00000240, 0x00000000, 0x00000000, 0 },
+    { 0x0000000d, 0x00000003, UINT32_MAX, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x0000000e, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x0000000f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000012, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000013, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x00000014, 0x00000000, UINT32_MAX, 0x00000000, 0x00000001, 0x00000001, 0x00000000, 0 },
+    { 0x00000014, 0x00000001, UINT32_MAX, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x80000000, 0x00000000, 0x00000000, 0x80000008, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x80000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000121, 0x2c100800, 0 },
+    { 0x80000002, 0x00000000, 0x00000000, 0x65746e49, 0x2952286c, 0x726f4320, 0x4d542865, 0 },
+    { 0x80000003, 0x00000000, 0x00000000, 0x37692029, 0x3036352d, 0x43205530, 0x40205550, 0 },
+    { 0x80000004, 0x00000000, 0x00000000, 0x362e3220, 0x7a484730, 0x00000000, 0x00000000, 0 },
+    { 0x80000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
+    { 0x80000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01006040, 0x00000000, 0 },
+    { 0x80000007, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0 },
+    { 0x80000008, 0x00000000, 0x00000000, 0x00003027, 0x00000000, 0x00000000, 0x00000000, 0 },
+};
+#endif /* !CPUM_DB_STANDALONE */
+
+
+#ifndef CPUM_DB_STANDALONE
+/**
+ * MSR ranges for Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz.
+ */
+static CPUMMSRRANGE const g_aMsrRanges_Intel_Core_i7_5600U[] = 
+{
+    MFX(0x00000000, "IA32_P5_MC_ADDR", Ia32P5McAddr, Ia32P5McAddr, 0, UINT64_C(0xffffffffffffff00), 0), /* value=0xff */
+    MFX(0x00000001, "IA32_P5_MC_TYPE", Ia32P5McType, Ia32P5McType, 0, 0, UINT64_MAX), /* value=0x0 */
+    MFX(0x00000006, "IA32_MONITOR_FILTER_LINE_SIZE", Ia32MonitorFilterLineSize, Ia32MonitorFilterLineSize, 0, 0, UINT64_C(0xffffffffffff0000)), /* value=0x40 */
+    MFN(0x00000010, "IA32_TIME_STAMP_COUNTER", Ia32TimestampCounter, Ia32TimestampCounter), /* value=0x1c93`50dd535c */
+    MFX(0x00000017, "IA32_PLATFORM_ID", Ia32PlatformId, ReadOnly, UINT64_C(0x18000000000000), 0, 0), /* value=0x180000`00000000 */
+    MFX(0x0000001b, "IA32_APIC_BASE", Ia32ApicBase, Ia32ApicBase, UINT32_C(0xfee00900), 0, UINT64_C(0xffffff80000002ff)),
+    MFX(0x0000002a, "EBL_CR_POWERON", IntelEblCrPowerOn, ReadOnly, 0, 0, 0), /* value=0x0 */
+    MVX(0x0000002e, "I7_UNK_0000_002e", 0, 0x400, UINT64_C(0xfffffffffffffbff)),
+    MVX(0x00000033, "TEST_CTL", 0, 0, UINT64_C(0xffffffff7fffffff)),
+    MVO(0x00000034, "P6_UNK_0000_0034", 0x97b),
+    MFO(0x00000035, "MSR_CORE_THREAD_COUNT", IntelI7CoreThreadCount), /* value=0x20004 */
+    MFO(0x0000003a, "IA32_FEATURE_CONTROL", Ia32FeatureControl), /* value=0x5 */
+    MVX(0x0000003b, "P6_UNK_0000_003b", UINT64_C(0xfffffffffffffffe), 0, 0),
+    MVX(0x0000003e, "I7_UNK_0000_003e", 0x1, 0, UINT64_C(0xfffffffffffffffe)),
+    MFN(0x00000079, "IA32_BIOS_UPDT_TRIG", WriteOnly, IgnoreWrite),
+    MFX(0x0000008b, "BBL_CR_D3|BIOS_SIGN", Ia32BiosSignId, Ia32BiosSignId, 0, 0, UINT32_MAX), /* value=0x1f`00000000 */
+    MVX(0x00000095, "TODO_0000_0095", 0, 0, UINT64_C(0xfffffffffffffffe)),
+    MFO(0x0000009b, "IA32_SMM_MONITOR_CTL", Ia32SmmMonitorCtl), /* value=0x0 */
+    RSN(0x000000c1, 0x000000c4, "IA32_PMCn", Ia32PmcN, Ia32PmcN, 0x0, ~(uint64_t)UINT32_MAX, 0),
+    MFO(0x000000ce, "IA32_PLATFORM_INFO", IntelPlatformInfo), /* value=0x5053b`f3011a00 */
+    MFX(0x000000e2, "MSR_PKG_CST_CONFIG_CONTROL", IntelPkgCStConfigControl, IntelPkgCStConfigControl, 0, 0, UINT64_C(0xffffffff01ffffff)), /* value=0x1e008408 */
+    MFX(0x000000e3, "C2_SMM_CST_MISC_INFO", IntelCore2SmmCStMiscInfo, IntelCore2SmmCStMiscInfo, 0, UINT32_C(0xffff7000), ~(uint64_t)UINT32_MAX), /* value=0x8b800000 */
+    MFX(0x000000e4, "MSR_PMG_IO_CAPTURE_BASE", IntelPmgIoCaptureBase, IntelPmgIoCaptureBase, 0, 0, UINT64_C(0xfffffffffff80000)), /* value=0x51814 */
+    MFN(0x000000e7, "IA32_MPERF", Ia32MPerf, Ia32MPerf), /* value=0x23c`764b31c5 */
+    MFN(0x000000e8, "IA32_APERF", Ia32APerf, Ia32APerf), /* value=0x2af`f518152c */
+    MFX(0x000000fe, "IA32_MTRRCAP", Ia32MtrrCap, ReadOnly, 0xd0a, 0, 0), /* value=0xd0a */
+    MVX(0x00000102, "I7_IB_UNK_0000_0102", 0, 0, UINT64_C(0xffffffff7fff8000)),
+    MVX(0x00000103, "I7_IB_UNK_0000_0103", 0, 0, UINT64_C(0xfffffffffffff000)),
+    MVX(0x00000104, "I7_IB_UNK_0000_0104", 0, 0, UINT64_C(0xfffffffffffffffe)),
+    MVO(0x00000110, "TODO_0000_0110", 0x3),
+    MVX(0x0000011f, "TODO_0000_011f", 0, 0, UINT64_C(0xffffffffffffff00)),
+    MVO(0x0000013a, "TODO_0000_013a", UINT64_C(0x30000007f)),
+    MFO(0x0000013c, "I7_SB_AES_NI_CTL", IntelI7SandyAesNiCtl), /* value=0x1 */
+    MVX(0x00000140, "I7_IB_UNK_0000_0140", 0, 0, UINT64_C(0xfffffffffffffffe)),
+    MVX(0x00000142, "I7_IB_UNK_0000_0142", 0, 0, UINT64_C(0xfffffffffffffffe)),
+    MVX(0x00000150, "P6_UNK_0000_0150", 0, UINT64_C(0x8000ffffffffffff), UINT64_C(0x7fff000000000000)),
+    MFX(0x00000174, "IA32_SYSENTER_CS", Ia32SysEnterCs, Ia32SysEnterCs, 0, ~(uint64_t)UINT32_MAX, 0), /* value=0x0 */
+    MFN(0x00000175, "IA32_SYSENTER_ESP", Ia32SysEnterEsp, Ia32SysEnterEsp), /* value=0x0 */
+    MFN(0x00000176, "IA32_SYSENTER_EIP", Ia32SysEnterEip, Ia32SysEnterEip), /* value=0x0 */
+    MVX(0x00000178, "TODO_0000_0178", 0, 0, UINT64_C(0xfffffffffffffffc)),
+    MFX(0x00000179, "IA32_MCG_CAP", Ia32McgCap, ReadOnly, 0x1000c07, 0, 0), /* value=0x1000c07 */
+    MFX(0x0000017a, "IA32_MCG_STATUS", Ia32McgStatus, Ia32McgStatus, 0, 0, UINT64_C(0xfffffffffffffff8)), /* value=0x0 */
+    RSN(0x00000186, 0x00000187, "IA32_PERFEVTSELn", Ia32PerfEvtSelN, Ia32PerfEvtSelN, 0x0, 0, UINT64_C(0xfffffffe00080000)), /* XXX: The range ended earlier than expected! */
+    MVX(0x00000188, "IA32_PERFEVTSEL2", 0, 0, UINT64_C(0xfffffffc00080000)),
+    MVX(0x00000189, "IA32_PERFEVTSEL3", 0, 0, UINT64_C(0xfffffffe00080000)),
+    MFX(0x00000194, "CLOCK_FLEX_MAX", IntelFlexRatio, IntelFlexRatio, 0x90000, 0xe0000, UINT64_C(0xffffffffffe00000)), /* value=0x90000 */
+    MFX(0x00000198, "IA32_PERF_STATUS", Ia32PerfStatus, ReadOnly, UINT64_C(0x273c00002000), 0, 0), /* value=0x273c`00002000 */
+    MFX(0x00000199, "IA32_PERF_CTL", Ia32PerfCtl, Ia32PerfCtl, 0x2000, 0, 0), /* Might bite. value=0x2000 */
+    MFX(0x0000019a, "IA32_CLOCK_MODULATION", Ia32ClockModulation, Ia32ClockModulation, 0, 0, UINT64_C(0xffffffffffffffe0)), /* value=0x0 */
+    MFX(0x0000019b, "IA32_THERM_INTERRUPT", Ia32ThermInterrupt, Ia32ThermInterrupt, 0x10, 0, UINT64_C(0xfffffffffe0000e8)), /* value=0x10 */
+    MFX(0x0000019c, "IA32_THERM_STATUS", Ia32ThermStatus, Ia32ThermStatus, UINT32_C(0x88150800), UINT32_C(0xf87f07fd), UINT64_C(0xffffffff0780f000)), /* value=0x88150800 */
+    MFX(0x0000019d, "IA32_THERM2_CTL", Ia32Therm2Ctl, ReadOnly, 0, 0, 0), /* value=0x0 */
+/// @todo WARNING: IA32_MISC_ENABLE probing needs hacking on this CPU!
+    MFX(0x000001a0, "IA32_MISC_ENABLE", Ia32MiscEnable, Ia32MiscEnable, 0x850089, 0x1080, UINT64_C(0xffffffbbff3aef72)), /* value=0x850089 */
+    MVO(0x000001a1, "P6_UNK_0000_01a1", 0x995),
+    MFX(0x000001a2, "I7_MSR_TEMPERATURE_TARGET", IntelI7TemperatureTarget, IntelI7TemperatureTarget, 0x5690000, 0xffff00, UINT64_C(0xffffffffc00000ff)), /* value=0x5690000 */
+    MVX(0x000001a4, "I7_UNK_0000_01a4", 0, 0, UINT64_C(0xfffffffffffff7f0)),
+    RSN(0x000001a6, 0x000001a7, "I7_MSR_OFFCORE_RSP_n", IntelI7MsrOffCoreResponseN, IntelI7MsrOffCoreResponseN, 0x0, 0, UINT64_C(0xffffffc000007000)),
+    MVX(0x000001a8, "I7_UNK_0000_01a8", 0, 0, UINT64_C(0xfffffffffffffffc)),
+    MFX(0x000001aa, "MSR_MISC_PWR_MGMT", IntelI7MiscPwrMgmt, IntelI7MiscPwrMgmt, 0, 0, UINT64_C(0xffffffffffbffffe)), /* value=0x400000 */
+    MFX(0x000001ad, "I7_MSR_TURBO_RATIO_LIMIT", IntelI7TurboRatioLimit, IntelI7TurboRatioLimit, UINT64_C(0x1f1f1f1f1f20), UINT64_MAX, 0), /* value=0x1f1f`1f1f1f20 */
+    MVX(0x000001b0, "IA32_ENERGY_PERF_BIAS", 0x6, 0, UINT64_C(0xfffffffffffffff0)),
+    MVX(0x000001b1, "IA32_PACKAGE_THERM_STATUS", UINT32_C(0x880d0802), UINT32_C(0xf87f07fd), UINT64_C(0xffffffff0780f000)),
+    MVX(0x000001b2, "IA32_PACKAGE_THERM_INTERRUPT", 0, 0, UINT64_C(0xfffffffffe0000e8)),
+    MVO(0x000001c6, "I7_UNK_0000_01c6", 0x3),
+    MFX(0x000001c8, "MSR_LBR_SELECT", IntelI7LbrSelect, IntelI7LbrSelect, 0, 0, UINT64_C(0xfffffffffffffc00)), /* value=0x0 */
+    MFX(0x000001c9, "MSR_LASTBRANCH_TOS", IntelLastBranchTos, IntelLastBranchTos, 0, 0, UINT64_C(0xfffffffffffffff0)), /* value=0x0 */
+    MFX(0x000001d9, "IA32_DEBUGCTL", Ia32DebugCtl, Ia32DebugCtl, 0, 0, UINT64_C(0xffffffffffff003c)), /* value=0x0 */
+    MFO(0x000001db, "P6_LAST_BRANCH_FROM_IP", P6LastBranchFromIp), /* value=0x0 */
+    MFO(0x000001dc, "P6_LAST_BRANCH_TO_IP", P6LastBranchToIp), /* value=0x0 */
+    MFX(0x000001dd, "P6_LAST_INT_FROM_IP", P6LastIntFromIp, P6LastIntFromIp, 0, 0, UINT64_C(0x1fff800000000000)), /* value=0x0 */
+    MFN(0x000001de, "P6_LAST_INT_TO_IP", P6LastIntToIp, P6LastIntToIp), /* value=0x0 */
+    MFO(0x000001f0, "I7_VLW_CAPABILITY", IntelI7VirtualLegacyWireCap), /* value=0x74 */
+    MFO(0x000001f2, "IA32_SMRR_PHYSBASE", Ia32SmrrPhysBase), /* value=0xdc000006 */
+    MFO(0x000001f3, "IA32_SMRR_PHYSMASK", Ia32SmrrPhysMask), /* value=0xff000800 */
+    MFX(0x000001fc, "I7_MSR_POWER_CTL", IntelI7PowerCtl, IntelI7PowerCtl, 0, UINT32_C(0x80000020), UINT64_C(0xffffffff3e100000)), /* value=0x4005f */
+    MFX(0x00000200, "IA32_MTRR_PHYS_BASE0", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x0, 0, UINT64_C(0xffffff8000000ff8)), /* value=0x6 */
+    MFX(0x00000201, "IA32_MTRR_PHYS_MASK0", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x0, 0, UINT64_C(0xffffff80000007ff)), /* value=0x7e`00000800 */
+    MFX(0x00000202, "IA32_MTRR_PHYS_BASE1", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x1, 0, UINT64_C(0xffffff8000000ff8)), /* value=0x2`00000006 */
+    MFX(0x00000203, "IA32_MTRR_PHYS_MASK1", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x1, 0, UINT64_C(0xffffff80000007ff)), /* value=0x7f`f0000800 */
+    MFX(0x00000204, "IA32_MTRR_PHYS_BASE2", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x2, 0, UINT64_C(0xffffff8000000ff8)), /* value=0x2`10000006 */
+    MFX(0x00000205, "IA32_MTRR_PHYS_MASK2", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x2, 0, UINT64_C(0xffffff80000007ff)), /* value=0x7f`f8000800 */
+    MFX(0x00000206, "IA32_MTRR_PHYS_BASE3", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x3, 0, UINT64_C(0xffffff8000000ff8)), /* value=0x2`18000006 */
+    MFX(0x00000207, "IA32_MTRR_PHYS_MASK3", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x3, 0, UINT64_C(0xffffff80000007ff)), /* value=0x7f`fc000800 */
+    MFX(0x00000208, "IA32_MTRR_PHYS_BASE4", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x4, 0, UINT64_C(0xffffff8000000ff8)), /* value=0x2`1c000006 */
+    MFX(0x00000209, "IA32_MTRR_PHYS_MASK4", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x4, 0, UINT64_C(0xffffff80000007ff)), /* value=0x7f`fe000800 */
+    MFX(0x0000020a, "IA32_MTRR_PHYS_BASE5", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x5, 0, UINT64_C(0xffffff8000000ff8)), /* value=0x2`1e000006 */
+    MFX(0x0000020b, "IA32_MTRR_PHYS_MASK5", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x5, 0, UINT64_C(0xffffff80000007ff)), /* value=0x7f`ff800800 */
+    MFX(0x0000020c, "IA32_MTRR_PHYS_BASE6", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x6, 0, UINT64_C(0xffffff8000000ff8)), /* value=0xe0000000 */
+    MFX(0x0000020d, "IA32_MTRR_PHYS_MASK6", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x6, 0, UINT64_C(0xffffff80000007ff)), /* value=0x7f`e0000800 */
+    MFX(0x0000020e, "IA32_MTRR_PHYS_BASE7", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x7, 0, UINT64_C(0xffffff8000000ff8)), /* value=0xde000000 */
+    MFX(0x0000020f, "IA32_MTRR_PHYS_MASK7", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x7, 0, UINT64_C(0xffffff80000007ff)), /* value=0x7f`fe000800 */
+    MFX(0x00000210, "IA32_MTRR_PHYS_BASE8", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x8, 0, UINT64_C(0xffffff8000000ff8)), /* value=0xdd000000 */
+    MFX(0x00000211, "IA32_MTRR_PHYS_MASK8", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x8, 0, UINT64_C(0xffffff80000007ff)), /* value=0x7f`ff000800 */
+    MFX(0x00000212, "IA32_MTRR_PHYS_BASE9", Ia32MtrrPhysBaseN, Ia32MtrrPhysBaseN, 0x9, 0, UINT64_C(0xffffff8000000ff8)), /* value=0x0 */
+    MFX(0x00000213, "IA32_MTRR_PHYS_MASK9", Ia32MtrrPhysMaskN, Ia32MtrrPhysMaskN, 0x9, 0, UINT64_C(0xffffff80000007ff)), /* 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),
+    MFX(0x00000280, "IA32_MC0_CTL2", Ia32McNCtl2, Ia32McNCtl2, 0x0, 0x40000000, UINT64_C(0xffffffffbfff8000)), /* value=0x0 */
+    RSN(0x00000281, 0x00000283, "IA32_MC1_CTLn", Ia32McNCtl2, Ia32McNCtl2, 0x1, 0, UINT64_C(0xffffffffbfff8000)),
+    MFX(0x00000284, "IA32_MC4_CTL2", Ia32McNCtl2, Ia32McNCtl2, 0x4, 0x40007fff, UINT64_C(0xffffffffbfff8000)), /* value=0x0 */
+    RSN(0x00000285, 0x00000286, "IA32_MC5_CTLn", Ia32McNCtl2, Ia32McNCtl2, 0x5, 0, UINT64_C(0xffffffffbfff8000)),
+    MVX(0x000002e0, "I7_SB_NO_EVICT_MODE", 0, 0, UINT64_C(0xfffffffffffffffc)),
+    MVX(0x000002e7, "I7_IB_UNK_0000_02e7", 0x1, 0x1, UINT64_C(0xfffffffffffffffe)),
+    MFZ(0x000002ff, "IA32_MTRR_DEF_TYPE", Ia32MtrrDefType, Ia32MtrrDefType, GuestMsrs.msr.MtrrDefType, 0, UINT64_C(0xfffffffffffff3f8)),
+    MVO(0x00000305, "I7_SB_UNK_0000_0305", 0),
+    RSN(0x00000309, 0x0000030b, "IA32_FIXED_CTRn", Ia32FixedCtrN, Ia32FixedCtrN, 0x0, 0, UINT64_C(0xffff000000000000)),
+    MFX(0x00000345, "IA32_PERF_CAPABILITIES", Ia32PerfCapabilities, ReadOnly, 0x32c4, 0, 0), /* value=0x32c4 */
+    MFX(0x0000038d, "IA32_FIXED_CTR_CTRL", Ia32FixedCtrCtrl, Ia32FixedCtrCtrl, 0, 0, UINT64_C(0xfffffffffffff000)), /* value=0x0 */
+    MFX(0x0000038e, "IA32_PERF_GLOBAL_STATUS", Ia32PerfGlobalStatus, ReadOnly, 0, 0, 0), /* value=0x0 */
+    MFX(0x0000038f, "IA32_PERF_GLOBAL_CTRL", Ia32PerfGlobalCtrl, Ia32PerfGlobalCtrl, 0, 0, UINT64_C(0xfffffff8fffffff0)), /* value=0xf */
+    MFX(0x00000390, "IA32_PERF_GLOBAL_OVF_CTRL", Ia32PerfGlobalOvfCtrl, Ia32PerfGlobalOvfCtrl, 0, UINT64_C(0xe08000070000000f), UINT64_C(0x1f7ffff8fffffff0)), /* value=0x0 */
+    MFX(0x00000391, "I7_UNC_PERF_GLOBAL_CTRL", IntelI7UncPerfGlobalCtrl, IntelI7UncPerfGlobalCtrl, 0, 0, UINT64_C(0xffffffff1fffff80)), /* value=0x0 */
+    MFX(0x00000392, "I7_UNC_PERF_GLOBAL_STATUS", IntelI7UncPerfGlobalStatus, IntelI7UncPerfGlobalStatus, 0, 0xf, UINT64_C(0xfffffffffffffff0)), /* value=0x0 */
+    MFX(0x00000393, "I7_UNC_PERF_GLOBAL_OVF_CTRL", IntelI7UncPerfGlobalOvfCtrl, IntelI7UncPerfGlobalOvfCtrl, 0, 0x3, UINT64_C(0xfffffffffffffffc)), /* value=0x0 */
+    MFX(0x00000394, "I7_UNC_PERF_FIXED_CTR_CTRL", IntelI7UncPerfFixedCtrCtrl, IntelI7UncPerfFixedCtrCtrl, 0, 0, UINT64_C(0xffffffffffafffff)), /* value=0x0 */
+    MFX(0x00000395, "I7_UNC_PERF_FIXED_CTR", IntelI7UncPerfFixedCtr, IntelI7UncPerfFixedCtr, 0, 0, UINT64_C(0xffff000000000000)), /* value=0x0 */
+    MFO(0x00000396, "I7_UNC_CBO_CONFIG", IntelI7UncCBoxConfig), /* value=0x3 */
+    MVX(0x00000397, "I7_SB_UNK_0000_0397", 0, 0, UINT64_C(0xfffffffffffffff0)),
+    MFX(0x000003b0, "I7_UNC_ARB_PERF_CTR0", IntelI7UncArbPerfCtrN, IntelI7UncArbPerfCtrN, 0, 0, UINT64_C(0xfffff00000000000)), /* value=0x0 */
+    MFX(0x000003b1, "I7_UNC_ARB_PERF_CTR1", IntelI7UncArbPerfCtrN, IntelI7UncArbPerfCtrN, 0, 0, UINT64_C(0xfffff00000000000)), /* value=0x0 */
+    MFX(0x000003b2, "I7_UNC_ARB_PERF_EVT_SEL0", IntelI7UncArbPerfEvtSelN, IntelI7UncArbPerfEvtSelN, 0, 0, UINT64_C(0xffffffffe0230000)), /* value=0x0 */
+    MFX(0x000003b3, "I7_UNC_ARB_PERF_EVT_SEL1", IntelI7UncArbPerfEvtSelN, IntelI7UncArbPerfEvtSelN, 0, 0, UINT64_C(0xffffffffe0230000)), /* value=0x0 */
+    MVO(0x000003f0, "TODO_0000_03f0", 0),
+    MFX(0x000003f1, "IA32_PEBS_ENABLE", Ia32PebsEnable, Ia32PebsEnable, 0, 0, UINT64_C(0xfffffff0fffffff0)), /* value=0x0 */
+    MFX(0x000003f6, "I7_MSR_PEBS_LD_LAT", IntelI7PebsLdLat, IntelI7PebsLdLat, 0, UINT64_C(0xffffffffffff0000), 0), /* value=0xffff */
+    MFX(0x000003f8, "I7_MSR_PKG_C3_RESIDENCY", IntelI7PkgCnResidencyN, ReadOnly, 0x3, 0, UINT64_MAX), /* value=0x4`465710e6 */
+    RSN(0x000003f9, 0x000003fa, "I7_MSR_PKG_Cn_RESIDENCY", IntelI7PkgCnResidencyN, ReadOnly, 0x6, 0, UINT64_MAX),
+    MFX(0x000003fc, "I7_MSR_CORE_C3_RESIDENCY", IntelI7CoreCnResidencyN, ReadOnly, 0x3, 0, UINT64_MAX), /* value=0x2`3a8a1eca */
+    RSN(0x000003fd, 0x000003fe, "I7_MSR_CORE_Cn_RESIDENCY", IntelI7CoreCnResidencyN, ReadOnly, 0x6, 0, UINT64_MAX),
+    RFN(0x00000400, 0x0000041b, "IA32_MCi_CTL_STATUS_ADDR_MISC", Ia32McCtlStatusAddrMiscN, Ia32McCtlStatusAddrMiscN),
+    MFX(0x00000480, "IA32_VMX_BASIC", Ia32VmxBase, ReadOnly, UINT64_C(0xda040000000012), 0, 0), /* value=0xda0400`00000012 */
+    MFX(0x00000481, "IA32_VMX_PINBASED_CTLS", Ia32VmxPinbasedCtls, ReadOnly, UINT64_C(0x7f00000016), 0, 0), /* value=0x7f`00000016 */
+    MFX(0x00000482, "IA32_VMX_PROCBASED_CTLS", Ia32VmxProcbasedCtls, ReadOnly, UINT64_C(0xfff9fffe0401e172), 0, 0), /* value=0xfff9fffe`0401e172 */
+    MFX(0x00000483, "IA32_VMX_EXIT_CTLS", Ia32VmxExitCtls, ReadOnly, UINT64_C(0x7fffff00036dff), 0, 0), /* value=0x7fffff`00036dff */
+    MFX(0x00000484, "IA32_VMX_ENTRY_CTLS", Ia32VmxEntryCtls, ReadOnly, UINT64_C(0xffff000011ff), 0, 0), /* value=0xffff`000011ff */
+    MFX(0x00000485, "IA32_VMX_MISC", Ia32VmxMisc, ReadOnly, 0x300481e5, 0, 0), /* value=0x300481e5 */
+    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, 0x3767ff, 0, 0), /* value=0x3767ff */
+    MFX(0x0000048a, "IA32_VMX_VMCS_ENUM", Ia32VmxVmcsEnum, ReadOnly, 0x2a, 0, 0), /* value=0x2a */
+    MFX(0x0000048b, "IA32_VMX_PROCBASED_CTLS2", Ia32VmxProcBasedCtls2, ReadOnly, UINT64_C(0x57cff00000000), 0, 0), /* value=0x57cff`00000000 */
+    MFX(0x0000048c, "IA32_VMX_EPT_VPID_CAP", Ia32VmxEptVpidCap, ReadOnly, UINT64_C(0xf0106334141), 0, 0), /* value=0xf01`06334141 */
+    MFX(0x0000048d, "IA32_VMX_TRUE_PINBASED_CTLS", Ia32VmxTruePinbasedCtls, ReadOnly, UINT64_C(0x7f00000016), 0, 0), /* value=0x7f`00000016 */
+    MFX(0x0000048e, "IA32_VMX_TRUE_PROCBASED_CTLS", Ia32VmxTrueProcbasedCtls, ReadOnly, UINT64_C(0xfff9fffe04006172), 0, 0), /* value=0xfff9fffe`04006172 */
+    MFX(0x0000048f, "IA32_VMX_TRUE_EXIT_CTLS", Ia32VmxTrueExitCtls, ReadOnly, UINT64_C(0x7fffff00036dfb), 0, 0), /* value=0x7fffff`00036dfb */
+    MFX(0x00000490, "IA32_VMX_TRUE_ENTRY_CTLS", Ia32VmxTrueEntryCtls, ReadOnly, UINT64_C(0xffff000011fb), 0, 0), /* value=0xffff`000011fb */
+    MVO(0x00000491, "TODO_0000_0491", 0x1),
+    RSN(0x000004c1, 0x000004c4, "IA32_A_PMCn", Ia32PmcN, Ia32PmcN, 0x0, 0, UINT64_C(0xffff000000000000)),
+    MVO(0x000004e0, "TODO_0000_04e0", 0x1),
+    MVO(0x000004e2, "TODO_0000_04e2", 0x5),
+    MVO(0x000004e3, "TODO_0000_04e3", 0xff0),
+    MVX(0x00000560, "TODO_0000_0560", 0, 0, UINT64_C(0xffffff800000007f)),
+    MVX(0x00000561, "TODO_0000_0561", 0x7f, UINT64_C(0x70000007f), UINT32_C(0xffffff80)),
+    MVX(0x00000570, "TODO_0000_0570", 0x2100, 0x2100, UINT64_C(0xffffffffffffd272)),
+    MVX(0x00000571, "TODO_0000_0571", 0, 0x7, UINT64_C(0xffffffffffffffc8)),
+    MVX(0x00000572, "TODO_0000_0572", 0, 0, UINT64_C(0xffff00000000001f)),
+    MFN(0x00000600, "IA32_DS_AREA", Ia32DsArea, Ia32DsArea), /* value=0x0 */
+    MFX(0x00000601, "I7_SB_MSR_VR_CURRENT_CONFIG", IntelI7SandyVrCurrentConfig, IntelI7SandyVrCurrentConfig, 0, UINT32_C(0x80001fff), UINT64_C(0x800000007fffe000)), /* value=0x40101414`80000100 */
+    MFX(0x00000603, "I7_SB_MSR_VR_MISC_CONFIG", IntelI7SandyVrMiscConfig, IntelI7SandyVrMiscConfig, 0, 0, UINT64_C(0xff80000000000000)), /* value=0x360000`00333333 */
+    MFO(0x00000606, "I7_SB_MSR_RAPL_POWER_UNIT", IntelI7SandyRaplPowerUnit), /* value=0xa0e03 */
+    MVX(0x00000609, "I7_SB_UNK_0000_0609", 0x1a, 0xc0, UINT64_C(0xffffffffffffff00)),
+    MFX(0x0000060a, "I7_SB_MSR_PKGC3_IRTL", IntelI7SandyPkgCnIrtlN, IntelI7SandyPkgCnIrtlN, 0x3, 0, UINT64_C(0xffffffffffff6000)), /* value=0x8842 */
+    RSN(0x0000060b, 0x0000060c, "I7_SB_MSR_PKGC6_IRTn", IntelI7SandyPkgCnIrtlN, IntelI7SandyPkgCnIrtlN, 0x6, 0, UINT64_C(0xffffffffffff6000)),
+    MFO(0x0000060d, "I7_SB_MSR_PKG_C2_RESIDENCY", IntelI7SandyPkgC2Residency), /* value=0x1b`88fad668 */
+    MFX(0x00000610, "I7_SB_MSR_PKG_POWER_LIMIT", IntelI7RaplPkgPowerLimit, IntelI7RaplPkgPowerLimit, 0, UINT64_C(0x80ffffff00ffffff), UINT64_C(0x7f000000ff000000)), /* value=0x804280c8`00dd8078 */
+    MFO(0x00000611, "I7_SB_MSR_PKG_ENERGY_STATUS", IntelI7RaplPkgEnergyStatus), /* value=0x7e40b254 */
+    MFO(0x00000613, "I7_SB_MSR_PKG_PERF_STATUS", IntelI7RaplPkgPerfStatus), /* value=0xff3 */
+    MFO(0x00000614, "I7_SB_MSR_PKG_POWER_INFO", IntelI7RaplPkgPowerInfo), /* value=0x78 */
+    MVX(0x00000615, "TODO_0000_0615", 0, 0, UINT64_C(0xffffffff00010000)),
+    MFX(0x00000618, "I7_SB_MSR_DRAM_POWER_LIMIT", IntelI7RaplDramPowerLimit, IntelI7RaplDramPowerLimit, 0, UINT64_C(0x80feffff00feffff), UINT64_C(0x7f010000ff010000)), /* value=0x805400de`00000000 */
+    MFO(0x00000619, "I7_SB_MSR_DRAM_ENERGY_STATUS", IntelI7RaplDramEnergyStatus), /* value=0x9dbe152 */
+    MFO(0x0000061b, "I7_SB_MSR_DRAM_PERF_STATUS", IntelI7RaplDramPerfStatus), /* value=0x0 */
+    MVO(0x0000061d, "TODO_0000_061d", UINT64_C(0x6e231cb3da)),
+    MVX(0x00000620, "TODO_0000_0620", 0x71d, 0, UINT64_C(0xffffffffffff8080)),
+    MVO(0x00000621, "TODO_0000_0621", 0x1d),
+    MVX(0x00000622, "TODO_0000_0622", 0x1, 0, UINT64_C(0xfffffffffffffffe)),
+    MVO(0x00000623, "TODO_0000_0623", 0x1),
+    MVO(0x00000630, "TODO_0000_0630", 0),
+    MVO(0x00000631, "TODO_0000_0631", 0),
+    MVO(0x00000632, "TODO_0000_0632", 0),
+    MVX(0x00000633, "TODO_0000_0633", 0x88e4, 0, UINT64_C(0xffffffffffff6000)),
+    MVX(0x00000634, "TODO_0000_0634", 0x8945, 0, UINT64_C(0xffffffffffff6000)),
+    MVX(0x00000635, "TODO_0000_0635", 0x89ef, 0, UINT64_C(0xffffffffffff6000)),
+    MVX(0x00000636, "TODO_0000_0636", 0x6a, 0, UINT64_C(0xffffffffffff0000)),
+    MVO(0x00000637, "TODO_0000_0637", UINT64_C(0x43af89cfdf)),
+    MFX(0x00000638, "I7_SB_MSR_PP0_POWER_LIMIT", IntelI7RaplPp0PowerLimit, IntelI7RaplPp0PowerLimit, 0, 0, UINT64_C(0xffffffff7f000000)), /* value=0x0 */
+    MFO(0x00000639, "I7_SB_MSR_PP0_ENERGY_STATUS", IntelI7RaplPp0EnergyStatus), /* value=0x6f9c685f */
+    MFX(0x0000063a, "I7_SB_MSR_PP0_POLICY", IntelI7RaplPp0Policy, IntelI7RaplPp0Policy, 0, 0, UINT64_C(0xffffffffffffffe0)), /* value=0x7 */
+    MFX(0x00000640, "I7_HW_MSR_PP0_POWER_LIMIT", IntelI7RaplPp1PowerLimit, IntelI7RaplPp1PowerLimit, 0, 0, UINT64_C(0xffffffff7f000000)), /* value=0x0 */
+    MFO(0x00000641, "I7_HW_MSR_PP0_ENERGY_STATUS", IntelI7RaplPp1EnergyStatus), /* value=0x4d471 */
+    MFX(0x00000642, "I7_HW_MSR_PP0_POLICY", IntelI7RaplPp1Policy, IntelI7RaplPp1Policy, 0, 0, UINT64_C(0xffffffffffffffe0)), /* value=0xb */
+    MFO(0x00000648, "I7_IB_MSR_CONFIG_TDP_NOMINAL", IntelI7IvyConfigTdpNominal), /* value=0x1a */
+    MFO(0x00000649, "I7_IB_MSR_CONFIG_TDP_LEVEL1", IntelI7IvyConfigTdpLevel1), /* value=0x6003c */
+    MFO(0x0000064a, "I7_IB_MSR_CONFIG_TDP_LEVEL2", IntelI7IvyConfigTdpLevel2), /* value=0x0 */
+    MFX(0x0000064b, "I7_IB_MSR_CONFIG_TDP_CONTROL", IntelI7IvyConfigTdpControl, IntelI7IvyConfigTdpControl, 0, 0, UINT64_C(0xffffffff7ffffffc)), /* value=0x80000000 */
+    MFX(0x0000064c, "I7_IB_MSR_TURBO_ACTIVATION_RATIO", IntelI7IvyTurboActivationRatio, IntelI7IvyTurboActivationRatio, 0, 0, UINT64_C(0xffffffff7fffff00)), /* value=0x80000019 */
+    RFN(0x00000680, 0x0000068f, "MSR_LASTBRANCH_n_FROM_IP", IntelLastBranchFromN, IntelLastBranchFromN),
+    MVX(0x00000690, "TODO_0000_0690", 0x1d200000, UINT32_C(0xe6dfffff), ~(uint64_t)UINT32_MAX),
+    MVX(0x000006b0, "TODO_0000_06b0", 0x1d000000, UINT32_C(0xe2ffffff), ~(uint64_t)UINT32_MAX),
+    MVX(0x000006b1, "TODO_0000_06b1", 0xd000000, UINT32_C(0xf2ffffff), ~(uint64_t)UINT32_MAX),
+    RFN(0x000006c0, 0x000006cf, "MSR_LASTBRANCH_n_TO_IP", IntelLastBranchToN, IntelLastBranchToN),
+    MFI(0x000006e0, "IA32_TSC_DEADLINE", Ia32TscDeadline), /* value=0x0 */
+    MVX(0x00000700, "TODO_0000_0700", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000701, "TODO_0000_0701", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000702, "TODO_0000_0702", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000703, "TODO_0000_0703", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000704, "TODO_0000_0704", 0, 0, UINT64_C(0xfffffffffffffff0)),
+    MVX(0x00000705, "TODO_0000_0705", 0, 0xf, UINT64_C(0xfffffffffffffff0)),
+    MVX(0x00000706, "TODO_0000_0706", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000707, "TODO_0000_0707", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000708, "TODO_0000_0708", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000709, "TODO_0000_0709", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000710, "TODO_0000_0710", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000711, "TODO_0000_0711", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000712, "TODO_0000_0712", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000713, "TODO_0000_0713", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000714, "TODO_0000_0714", 0, 0, UINT64_C(0xfffffffffffffff0)),
+    MVX(0x00000715, "TODO_0000_0715", 0, 0xf, UINT64_C(0xfffffffffffffff0)),
+    MVX(0x00000716, "TODO_0000_0716", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000717, "TODO_0000_0717", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000718, "TODO_0000_0718", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000719, "TODO_0000_0719", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000720, "TODO_0000_0720", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000721, "TODO_0000_0721", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000722, "TODO_0000_0722", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000723, "TODO_0000_0723", 0, 0, UINT64_C(0xffffffffe0230000)),
+    MVX(0x00000724, "TODO_0000_0724", 0, 0, UINT64_C(0xfffffffffffffff0)),
+    MVX(0x00000725, "TODO_0000_0725", 0, 0xf, UINT64_C(0xfffffffffffffff0)),
+    MVX(0x00000726, "TODO_0000_0726", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000727, "TODO_0000_0727", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000728, "TODO_0000_0728", 0, 0, UINT64_C(0xfffff00000000000)),
+    MVX(0x00000729, "TODO_0000_0729", 0, 0, UINT64_C(0xfffff00000000000)),
+    MFO(0x00000c80, "IA32_DEBUG_INTERFACE", Ia32DebugInterface), /* value=0x40000000 */
+    MFX(0xc0000080, "AMD64_EFER", Amd64Efer, Amd64Efer, 0xd01, 0x400, UINT64_C(0xfffffffffffff2fe)),
+    MFN(0xc0000081, "AMD64_STAR", Amd64SyscallTarget, Amd64SyscallTarget), /* value=0x230010`00000000 */
+    MFN(0xc0000082, "AMD64_STAR64", Amd64LongSyscallTarget, Amd64LongSyscallTarget), /* value=0xfffff802`f9b59200 */
+    MFN(0xc0000083, "AMD64_STARCOMPAT", Amd64CompSyscallTarget, Amd64CompSyscallTarget), /* value=0xfffff802`f9b58f40 */
+    MFX(0xc0000084, "AMD64_SYSCALL_FLAG_MASK", Amd64SyscallFlagMask, Amd64SyscallFlagMask, 0, ~(uint64_t)UINT32_MAX, 0), /* value=0x4700 */
+    MFN(0xc0000100, "AMD64_FS_BASE", Amd64FsBase, Amd64FsBase), /* value=0x212000 */
+    MFN(0xc0000101, "AMD64_GS_BASE", Amd64GsBase, Amd64GsBase), /* value=0xffffd001`83740000 */
+    MFN(0xc0000102, "AMD64_KERNEL_GS_BASE", Amd64KernelGsBase, Amd64KernelGsBase), /* value=0x210000 */
+    MFX(0xc0000103, "AMD64_TSC_AUX", Amd64TscAux, Amd64TscAux, 0, 0, ~(uint64_t)UINT32_MAX), /* value=0x0 */
+};
+#endif /* !CPUM_DB_STANDALONE */
+
+
+/**
+ * Database entry for Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz.
+ */
+static CPUMDBENTRY const g_Entry_Intel_Core_i7_5600U = 
+{
+    /*.pszName          = */ "Intel Core i7-5600U",
+    /*.pszFullName      = */ "Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz",
+    /*.enmVendor        = */ CPUMCPUVENDOR_INTEL,
+    /*.uFamily          = */ 6,
+    /*.uModel           = */ 61,
+    /*.uStepping        = */ 4,
+    /*.enmMicroarch     = */ kCpumMicroarch_Intel_Core7_Broadwell,
+    /*.uScalableBusFreq = */ CPUM_SBUSFREQ_100MHZ,
+    /*.fFlags           = */ 0,
+    /*.cMaxPhysAddrWidth= */ 39,
+    /*.paCpuIdLeaves    = */ NULL_ALONE(g_aCpuIdLeaves_Intel_Core_i7_5600U),
+    /*.cCpuIdLeaves     = */ ZERO_ALONE(RT_ELEMENTS(g_aCpuIdLeaves_Intel_Core_i7_5600U)),
+    /*.enmUnknownCpuId  = */ CPUMUNKNOWNCPUID_LAST_STD_LEAF_WITH_ECX,
+    /*.DefUnknownCpuId  = */ { 0x00000000, 0x00000001, 0x00000001, 0x00000000 },
+    /*.fMsrMask         = */ UINT32_MAX,
+    /*.cMsrRanges       = */ ZERO_ALONE(RT_ELEMENTS(g_aMsrRanges_Intel_Core_i7_5600U)),
+    /*.paMsrRanges      = */ NULL_ALONE(g_aMsrRanges_Intel_Core_i7_5600U),
+};
+
+#endif /* !VBOX_DB_Intel_Core_i7_5600U */
+
diff --git a/src/VBox/VMM/VMMRC/CPUMRC.cpp b/src/VBox/VMM/VMMRC/CPUMRC.cpp
index 0a5a14e..0459e57 100644
--- a/src/VBox/VMM/VMMRC/CPUMRC.cpp
+++ b/src/VBox/VMM/VMMRC/CPUMRC.cpp
@@ -45,7 +45,7 @@ RT_C_DECLS_END
  * context execution.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegFrame   The register frame.
  * @param   uUser       User argument. In this case a combination of the
  *                      CPUM_HANDLER_* \#defines.
@@ -82,7 +82,7 @@ DECLCALLBACK(int) cpumRCHandleNPAndGP(PVM pVM, PCPUMCTXCORE pRegFrame, uintptr_t
  * Called by TRPM and CPUM assembly code to make sure the guest state is
  * ready for execution.
  *
- * @param   pVM                 The VM handle.
+ * @param   pVM                 The cross context VM structure.
  */
 DECLASM(void) CPUMRCAssertPreExecutionSanity(PVM pVM)
 {
@@ -112,7 +112,7 @@ DECLASM(void) CPUMRCAssertPreExecutionSanity(PVM pVM)
  * Get the current privilege level of the guest.
  *
  * @returns CPL
- * @param   pVCpu       The current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Pointer to the register frame.
  *
  * @todo    r=bird: This is very similar to CPUMGetGuestCPL and I cannot quite
@@ -172,7 +172,7 @@ VMMDECL(uint32_t) CPUMRCGetGuestCPL(PVMCPU pVCpu, PCPUMCTXCORE pRegFrame)
  *
  * Used by emInterpretIret() after the new state has been loaded.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pCtxCore    The context core (for trap usage).
  * @see     @ref pg_raw
  * @remarks Will be probably obsoleted by #5653 (it will leave and reenter raw
diff --git a/src/VBox/VMM/VMMRC/CSAMRC.cpp b/src/VBox/VMM/VMMRC/CSAMRC.cpp
index 43e0d2f..8d47727 100644
--- a/src/VBox/VMM/VMMRC/CSAMRC.cpp
+++ b/src/VBox/VMM/VMMRC/CSAMRC.cpp
@@ -48,23 +48,12 @@
 
 
 /**
+ * @callback_method_impl{FNPGMRCVIRTPFHANDLER,
  * \#PF Handler callback for virtual access handler ranges. (CSAM self-modifying
- * code monitor)
+ * code monitor)}
  *
  * Important to realize that a physical page in a range can have aliases, and
  * for ALL and WRITE handlers these will also trigger.
- *
- * @returns VBox status code (appropriate for GC return).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the cross context CPU context for the calling
- *                      EMT.
- * @param   uErrorCode  CPU Error code.
- * @param   pRegFrame   Trap register frame.
- * @param   pvFault     The fault address (cr2).
- * @param   pvRange     The base address of the handled virtual range.
- * @param   offRange    The offset of the access into this range.
- *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
- * @param   pvUser      Ignored (NIL).
  */
 DECLEXPORT(VBOXSTRICTRC) csamRCCodePageWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame,
                                                       RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
diff --git a/src/VBox/VMM/VMMRC/IOMRC.cpp b/src/VBox/VMM/VMMRC/IOMRC.cpp
index 0dc19cf..6046eb7 100644
--- a/src/VBox/VMM/VMMRC/IOMRC.cpp
+++ b/src/VBox/VMM/VMMRC/IOMRC.cpp
@@ -77,8 +77,8 @@ DECLINLINE(IEMMODE) iomDisModeToIemMode(DISCPUMODE enmDisMode)
  * @retval  VINF_TRPM_XCPT_DISPATCHED   The exception was raised and dispatched for raw-mode execution. (TRPMRaiseXcptErr)
  * @retval  VINF_EM_RESCHEDULE_REM      The exception was dispatched and cannot be executed in raw-mode. (TRPMRaiseXcptErr)
  *
- * @param   pVM         The virtual machine (GC pointer of course).
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Pointer to CPUMCTXCORE guest registers structure.
  * @param   pCpu        Disassembler CPU state.
  */
@@ -138,8 +138,8 @@ static VBOXSTRICTRC iomRCInterpretIN(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFra
  * @retval  VINF_TRPM_XCPT_DISPATCHED   The exception was raised and dispatched for raw-mode execution. (TRPMRaiseXcptErr)
  * @retval  VINF_EM_RESCHEDULE_REM      The exception was dispatched and cannot be executed in raw-mode. (TRPMRaiseXcptErr)
  *
- * @param   pVM         The virtual machine (GC pointer of course).
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Pointer to CPUMCTXCORE guest registers structure.
  * @param   pCpu        Disassembler CPU state.
  */
@@ -192,8 +192,8 @@ static VBOXSTRICTRC iomRCInterpretOUT(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFr
  * @retval  VINF_TRPM_XCPT_DISPATCHED   The exception was raised and dispatched for raw-mode execution. (TRPMRaiseXcptErr)
  * @retval  VINF_EM_RESCHEDULE_REM      The exception was dispatched and cannot be executed in raw-mode. (TRPMRaiseXcptErr)
  *
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Pointer to CPUMCTXCORE guest registers structure.
  * @param   pCpu        Disassembler CPU state.
  */
@@ -246,8 +246,8 @@ static VBOXSTRICTRC iomRCInterpretINS(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFr
  * @retval  VINF_TRPM_XCPT_DISPATCHED   The exception was raised and dispatched for raw-mode execution. (TRPMRaiseXcptErr)
  * @retval  VINF_EM_RESCHEDULE_REM      The exception was dispatched and cannot be executed in raw-mode. (TRPMRaiseXcptErr)
  *
- * @param   pVM         The virtual machine.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Pointer to CPUMCTXCORE guest registers structure.
  * @param   pCpu        Disassembler CPU state.
  */
@@ -307,8 +307,8 @@ static VBOXSTRICTRC iomRCInterpretOUTS(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegF
  * @retval  VINF_EM_RAW_GUEST_TRAP      The exception was left pending. (TRPMRaiseXcptErr)
  * @retval  VINF_TRPM_XCPT_DISPATCHED   The exception was raised and dispatched for raw-mode execution. (TRPMRaiseXcptErr)
  *
- * @param   pVM         The virtual machine handle.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pRegFrame   Pointer to CPUMCTXCORE guest registers structure.
  * @param   pCpu        Disassembler CPU state.
  */
diff --git a/src/VBox/VMM/VMMRC/MMRamRC.cpp b/src/VBox/VMM/VMMRC/MMRamRC.cpp
index 7789347..f4c5824 100644
--- a/src/VBox/VMM/VMMRC/MMRamRC.cpp
+++ b/src/VBox/VMM/VMMRC/MMRamRC.cpp
@@ -51,7 +51,7 @@ DECLASM(void) MMGCRamWrite_Error(void);
  * This handler will be automatically removed at page fault.
  * In other case it must be removed by MMGCRamDeregisterTrapHandler call.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMRCDECL(void) MMGCRamRegisterTrapHandler(PVM pVM)
 {
@@ -63,7 +63,7 @@ VMMRCDECL(void) MMGCRamRegisterTrapHandler(PVM pVM)
  * Remove MMGCRam Hypervisor page fault handler.
  * See description of MMGCRamRegisterTrapHandler call.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMRCDECL(void) MMGCRamDeregisterTrapHandler(PVM pVM)
 {
@@ -72,10 +72,10 @@ VMMRCDECL(void) MMGCRamDeregisterTrapHandler(PVM pVM)
 
 
 /**
- * Read data in guest context with #PF control.
+ * Read data in guest context with \#PF control.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pDst        Where to store the read data.
  * @param   pSrc        Pointer to the data to read.
  * @param   cb          Size of data to read.
@@ -129,10 +129,10 @@ VMMRCDECL(int) MMGCRamRead(PVM pVM, void *pDst, void *pSrc, size_t cb)
 
 
 /**
- * Write data in guest context with #PF control.
+ * Write data in guest context with \#PF control.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   pDst        Where to write the data.
  * @param   pSrc        Pointer to the data to write.
  * @param   cb          Size of data to write, only 1/2/4 is valid.
diff --git a/src/VBox/VMM/VMMRC/PATMRC.cpp b/src/VBox/VMM/VMMRC/PATMRC.cpp
index fad2d38..d086c03 100644
--- a/src/VBox/VMM/VMMRC/PATMRC.cpp
+++ b/src/VBox/VMM/VMMRC/PATMRC.cpp
@@ -51,10 +51,10 @@
  * @remarks The @a pvUser argument is the base address of the page being
  *          monitored.
  */
-DECLEXPORT(VBOXSTRICTRC) patmRCVirtPagePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame,
+DECLEXPORT(VBOXSTRICTRC) patmRCVirtPagePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pCtxCore,
                                                  RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
 {
-    NOREF(pVCpu); NOREF(uErrorCode); NOREF(pRegFrame); NOREF(pvFault); NOREF(pvRange); NOREF(offRange);
+    NOREF(pVCpu); NOREF(uErrorCode); NOREF(pCtxCore); NOREF(pvFault); NOREF(pvRange); NOREF(offRange);
 
     Assert(pvUser);
     Assert(!((uintptr_t)pvUser & PAGE_OFFSET_MASK));
@@ -70,18 +70,18 @@ DECLEXPORT(VBOXSTRICTRC) patmRCVirtPagePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT
  * (if so, then we are not allowed to turn on r/w)
  *
  * @returns Strict VBox status code.
- * @retval  VINF_SUCCESS if access interpreted (@a pRegFrame != NULL).
- * @retval  VINF_PGM_HANDLER_DO_DEFAULT (@a pRegFrame == NULL).
+ * @retval  VINF_SUCCESS if access interpreted (@a pCtxCore != NULL).
+ * @retval  VINF_PGM_HANDLER_DO_DEFAULT (@a pCtxCore == NULL).
  * @retval  VINF_EM_RAW_EMULATE_INSTR on needing to go to ring-3 to do this.
  * @retval  VERR_PATCH_NOT_FOUND if no patch was found.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pRegFrame   CPU context if \#PF, NULL if other write..
+ * @param   pVM         The cross context VM structure.
+ * @param   pCtxCore   CPU context if \#PF, NULL if other write..
  * @param   GCPtr       GC pointer to write address.
  * @param   cbWrite     Number of bytes to write.
  *
  */
-VMMRC_INT_DECL(VBOXSTRICTRC) PATMRCHandleWriteToPatchPage(PVM pVM, PCPUMCTXCORE pRegFrame, RTRCPTR GCPtr, uint32_t cbWrite)
+VMMRC_INT_DECL(VBOXSTRICTRC) PATMRCHandleWriteToPatchPage(PVM pVM, PCPUMCTXCORE pCtxCore, RTRCPTR GCPtr, uint32_t cbWrite)
 {
     Assert(cbWrite > 0);
 
@@ -111,15 +111,15 @@ VMMRC_INT_DECL(VBOXSTRICTRC) PATMRCHandleWriteToPatchPage(PVM pVM, PCPUMCTXCORE
             || (RTRCUINTPTR)pPatchPage->pHighestAddrGC < (RTRCUINTPTR)GCPtr)
         {
             /* This part of the page was not patched; try to emulate the instruction / tell the caller to do so. */
-            if (!pRegFrame)
+            if (!pCtxCore)
             {
-                LogFlow(("PATMHandleWriteToPatchPage: Allow %#x writing %RRv LB %#x\n", pRegFrame->eip, GCPtr, cbWrite));
+                LogFlow(("PATMHandleWriteToPatchPage: Allow %#x writing %RRv LB %#x\n", pCtxCore->eip, GCPtr, cbWrite));
                 STAM_COUNTER_INC(&pVM->patm.s.StatPatchWriteInterpreted);
                 STAM_PROFILE_ADV_STOP(&pVM->patm.s.StatPatchWriteDetect, a);
                 return VINF_PGM_HANDLER_DO_DEFAULT;
             }
-            LogFlow(("PATMHandleWriteToPatchPage: Interpret %#x accessing %RRv\n", pRegFrame->eip, GCPtr));
-            int rc = VBOXSTRICTRC_TODO(EMInterpretInstruction(VMMGetCpu0(pVM), pRegFrame, (RTGCPTR)(RTRCUINTPTR)GCPtr));
+            LogFlow(("PATMHandleWriteToPatchPage: Interpret %#x accessing %RRv\n", pCtxCore->eip, GCPtr));
+            int rc = VBOXSTRICTRC_TODO(EMInterpretInstruction(VMMGetCpu0(pVM), pCtxCore, (RTGCPTR)(RTRCUINTPTR)GCPtr));
             if (rc == VINF_SUCCESS)
             {
                 STAM_COUNTER_INC(&pVM->patm.s.StatPatchWriteInterpreted);
@@ -152,37 +152,37 @@ VMMRC_INT_DECL(VBOXSTRICTRC) PATMRCHandleWriteToPatchPage(PVM pVM, PCPUMCTXCORE
  *
  * @returns VBox status
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtxCore    The relevant core context.
  */
-VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame)
+VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pCtxCore)
 {
     PPATMPATCHREC pRec;
     PVMCPU pVCpu = VMMGetCpu0(pVM);
     int rc;
 
     /* Very important check -> otherwise we have a security leak. */
-    AssertReturn(!pRegFrame->eflags.Bits.u1VM && (pRegFrame->ss.Sel & X86_SEL_RPL) <= (EMIsRawRing1Enabled(pVM) ? 2U : 1U),
+    AssertReturn(!pCtxCore->eflags.Bits.u1VM && (pCtxCore->ss.Sel & X86_SEL_RPL) <= (EMIsRawRing1Enabled(pVM) ? 2U : 1U),
                  VERR_ACCESS_DENIED);
-    Assert(PATMIsPatchGCAddr(pVM, pRegFrame->eip));
+    Assert(PATMIsPatchGCAddr(pVM, pCtxCore->eip));
 
     /* OP_ILLUD2 in PATM generated code? */
     if (CTXSUFF(pVM->patm.s.pGCState)->uPendingAction)
     {
-        LogFlow(("PATMRC: Pending action %x at %x\n", CTXSUFF(pVM->patm.s.pGCState)->uPendingAction, pRegFrame->eip));
+        LogFlow(("PATMRC: Pending action %x at %x\n", CTXSUFF(pVM->patm.s.pGCState)->uPendingAction, pCtxCore->eip));
 
         /* Private PATM interface (@todo hack due to lack of anything generic). */
         /* Parameters:
          *  eax = Pending action (currently PATM_ACTION_LOOKUP_ADDRESS)
          *  ecx = PATM_ACTION_MAGIC
          */
-        if (    (pRegFrame->eax & CTXSUFF(pVM->patm.s.pGCState)->uPendingAction)
-            &&   pRegFrame->ecx == PATM_ACTION_MAGIC
+        if (    (pCtxCore->eax & CTXSUFF(pVM->patm.s.pGCState)->uPendingAction)
+            &&   pCtxCore->ecx == PATM_ACTION_MAGIC
            )
         {
             CTXSUFF(pVM->patm.s.pGCState)->uPendingAction = 0;
 
-            switch (pRegFrame->eax)
+            switch (pCtxCore->eax)
             {
             case PATM_ACTION_LOOKUP_ADDRESS:
             {
@@ -190,24 +190,24 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
                  *  edx = GC address to find
                  *  edi = PATCHJUMPTABLE ptr
                  */
-                AssertMsg(!pRegFrame->edi || PATMIsPatchGCAddr(pVM, pRegFrame->edi), ("edi = %x\n", pRegFrame->edi));
+                AssertMsg(!pCtxCore->edi || PATMIsPatchGCAddr(pVM, pCtxCore->edi), ("edi = %x\n", pCtxCore->edi));
 
-                Log(("PATMRC: lookup %x jump table=%x\n", pRegFrame->edx, pRegFrame->edi));
+                Log(("PATMRC: lookup %x jump table=%x\n", pCtxCore->edx, pCtxCore->edi));
 
-                pRec = patmQueryFunctionPatch(pVM, (RTRCPTR)pRegFrame->edx);
+                pRec = patmQueryFunctionPatch(pVM, (RTRCPTR)pCtxCore->edx);
                 if (pRec)
                 {
                     if (pRec->patch.uState == PATCH_ENABLED)
                     {
                         RTGCUINTPTR pRelAddr = pRec->patch.pPatchBlockOffset;   /* make it relative */
-                        rc = patmAddBranchToLookupCache(pVM, (RTRCPTR)pRegFrame->edi, (RTRCPTR)pRegFrame->edx, pRelAddr);
+                        rc = patmAddBranchToLookupCache(pVM, (RTRCPTR)pCtxCore->edi, (RTRCPTR)pCtxCore->edx, pRelAddr);
                         if (rc == VINF_SUCCESS)
                         {
                             Log(("Patch block %RRv called as function\n", pRec->patch.pPrivInstrGC));
                             pRec->patch.flags |= PATMFL_CODE_REFERENCED;
 
-                            pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
-                            pRegFrame->eax = pRelAddr;
+                            pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
+                            pCtxCore->eax = pRelAddr;
                             STAM_COUNTER_INC(&pVM->patm.s.StatFunctionFound);
                             return VINF_SUCCESS;
                         }
@@ -215,8 +215,8 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
                     }
                     else
                     {
-                        pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
-                        pRegFrame->eax = 0;     /* make it fault */
+                        pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
+                        pCtxCore->eax = 0;     /* make it fault */
                         STAM_COUNTER_INC(&pVM->patm.s.StatFunctionNotFound);
                         return VINF_SUCCESS;
                     }
@@ -226,8 +226,8 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
                     /* Check first before trying to generate a function/trampoline patch. */
                     if (pVM->patm.s.fOutOfMemory)
                     {
-                        pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
-                        pRegFrame->eax = 0;     /* make it fault */
+                        pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
+                        pCtxCore->eax = 0;     /* make it fault */
                         STAM_COUNTER_INC(&pVM->patm.s.StatFunctionNotFound);
                         return VINF_SUCCESS;
                     }
@@ -240,17 +240,17 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
                 /* Parameters:
                  *  edi = GC address to jump to
                  */
-                Log(("PATMRC: Dispatch pending interrupt; eip=%x->%x\n", pRegFrame->eip, pRegFrame->edi));
+                Log(("PATMRC: Dispatch pending interrupt; eip=%x->%x\n", pCtxCore->eip, pCtxCore->edi));
 
                 /* Change EIP to the guest address the patch would normally jump to after setting IF. */
-                pRegFrame->eip = pRegFrame->edi;
+                pCtxCore->eip = pCtxCore->edi;
 
                 Assert(pVM->patm.s.CTXSUFF(pGCState)->Restore.uFlags == (PATM_RESTORE_EAX|PATM_RESTORE_ECX|PATM_RESTORE_EDI));
                 Assert(pVM->patm.s.CTXSUFF(pGCState)->fPIF == 0);
 
-                pRegFrame->eax = pVM->patm.s.CTXSUFF(pGCState)->Restore.uEAX;
-                pRegFrame->ecx = pVM->patm.s.CTXSUFF(pGCState)->Restore.uECX;
-                pRegFrame->edi = pVM->patm.s.CTXSUFF(pGCState)->Restore.uEDI;
+                pCtxCore->eax = pVM->patm.s.CTXSUFF(pGCState)->Restore.uEAX;
+                pCtxCore->ecx = pVM->patm.s.CTXSUFF(pGCState)->Restore.uECX;
+                pCtxCore->edi = pVM->patm.s.CTXSUFF(pGCState)->Restore.uEDI;
 
                 pVM->patm.s.CTXSUFF(pGCState)->Restore.uFlags = 0;
 
@@ -266,16 +266,16 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
                 /* Parameters:
                  *  edi = GC address to jump to
                  */
-                Log(("PATMRC: Dispatch pending interrupt (iret); eip=%x->%x\n", pRegFrame->eip, pRegFrame->edi));
+                Log(("PATMRC: Dispatch pending interrupt (iret); eip=%x->%x\n", pCtxCore->eip, pCtxCore->edi));
                 Assert(pVM->patm.s.CTXSUFF(pGCState)->Restore.uFlags == (PATM_RESTORE_EAX|PATM_RESTORE_ECX|PATM_RESTORE_EDI));
                 Assert(pVM->patm.s.CTXSUFF(pGCState)->fPIF == 0);
 
                 /* Change EIP to the guest address of the iret. */
-                pRegFrame->eip = pRegFrame->edi;
+                pCtxCore->eip = pCtxCore->edi;
 
-                pRegFrame->eax = pVM->patm.s.CTXSUFF(pGCState)->Restore.uEAX;
-                pRegFrame->ecx = pVM->patm.s.CTXSUFF(pGCState)->Restore.uECX;
-                pRegFrame->edi = pVM->patm.s.CTXSUFF(pGCState)->Restore.uEDI;
+                pCtxCore->eax = pVM->patm.s.CTXSUFF(pGCState)->Restore.uEAX;
+                pCtxCore->ecx = pVM->patm.s.CTXSUFF(pGCState)->Restore.uECX;
+                pCtxCore->edi = pVM->patm.s.CTXSUFF(pGCState)->Restore.uEDI;
                 pVM->patm.s.CTXSUFF(pGCState)->Restore.uFlags = 0;
 
                 /* We are no longer executing PATM code; set PIF again. */
@@ -285,15 +285,15 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
 
             case PATM_ACTION_DO_V86_IRET:
             {
-                Log(("PATMRC: Do iret to V86 code; eip=%x\n", pRegFrame->eip));
+                Log(("PATMRC: Do iret to V86 code; eip=%x\n", pCtxCore->eip));
                 Assert(pVM->patm.s.CTXSUFF(pGCState)->Restore.uFlags == (PATM_RESTORE_EAX|PATM_RESTORE_ECX));
                 Assert(pVM->patm.s.CTXSUFF(pGCState)->fPIF == 0);
 
-                pRegFrame->eax = pVM->patm.s.CTXSUFF(pGCState)->Restore.uEAX;
-                pRegFrame->ecx = pVM->patm.s.CTXSUFF(pGCState)->Restore.uECX;
+                pCtxCore->eax = pVM->patm.s.CTXSUFF(pGCState)->Restore.uEAX;
+                pCtxCore->ecx = pVM->patm.s.CTXSUFF(pGCState)->Restore.uECX;
                 pVM->patm.s.CTXSUFF(pGCState)->Restore.uFlags = 0;
 
-                rc = EMInterpretIretV86ForPatm(pVM, pVCpu, pRegFrame);
+                rc = EMInterpretIretV86ForPatm(pVM, pVCpu, pCtxCore);
                 if (RT_SUCCESS(rc))
                 {
                     STAM_COUNTER_INC(&pVM->patm.s.StatEmulIret);
@@ -301,7 +301,7 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
                     /* We are no longer executing PATM code; set PIF again. */
                     pVM->patm.s.CTXSUFF(pGCState)->fPIF = 1;
                     PGMRZDynMapReleaseAutoSet(pVCpu);
-                    CPUMGCCallV86Code(pRegFrame);
+                    CPUMGCCallV86Code(pCtxCore);
                     /* does not return */
                 }
                 else
@@ -311,38 +311,38 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
 
 #ifdef DEBUG
             case PATM_ACTION_LOG_CLI:
-                Log(("PATMRC: CLI at %x (current IF=%d iopl=%d)\n", pRegFrame->eip, !!(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags & X86_EFL_IF), X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags) ));
-                pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
+                Log(("PATMRC: CLI at %x (current IF=%d iopl=%d)\n", pCtxCore->eip, !!(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags & X86_EFL_IF), X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags) ));
+                pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
                 return VINF_SUCCESS;
 
             case PATM_ACTION_LOG_STI:
-                Log(("PATMRC: STI at %x (current IF=%d iopl=%d)\n", pRegFrame->eip, !!(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags & X86_EFL_IF), X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags) ));
-                pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
+                Log(("PATMRC: STI at %x (current IF=%d iopl=%d)\n", pCtxCore->eip, !!(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags & X86_EFL_IF), X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags) ));
+                pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
                 return VINF_SUCCESS;
 
             case PATM_ACTION_LOG_POPF_IF1:
-                Log(("PATMRC: POPF setting IF at %x (current IF=%d iopl=%d)\n", pRegFrame->eip, !!(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags & X86_EFL_IF), X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags)));
-                pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
+                Log(("PATMRC: POPF setting IF at %x (current IF=%d iopl=%d)\n", pCtxCore->eip, !!(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags & X86_EFL_IF), X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags)));
+                pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
                 return VINF_SUCCESS;
 
             case PATM_ACTION_LOG_POPF_IF0:
-                Log(("PATMRC: POPF at %x (current IF=%d iopl=%d)\n", pRegFrame->eip, !!(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags & X86_EFL_IF), X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags)));
-                pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
+                Log(("PATMRC: POPF at %x (current IF=%d iopl=%d)\n", pCtxCore->eip, !!(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags & X86_EFL_IF), X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags)));
+                pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
                 return VINF_SUCCESS;
 
             case PATM_ACTION_LOG_PUSHF:
-                Log(("PATMRC: PUSHF at %x (current IF=%d iopl=%d)\n", pRegFrame->eip, !!(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags & X86_EFL_IF), X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags) ));
-                pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
+                Log(("PATMRC: PUSHF at %x (current IF=%d iopl=%d)\n", pCtxCore->eip, !!(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags & X86_EFL_IF), X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags) ));
+                pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
                 return VINF_SUCCESS;
 
             case PATM_ACTION_LOG_IF1:
-                Log(("PATMRC: IF=1 escape from %x\n", pRegFrame->eip));
-                pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
+                Log(("PATMRC: IF=1 escape from %x\n", pCtxCore->eip));
+                pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
                 return VINF_SUCCESS;
 
             case PATM_ACTION_LOG_IRET:
             {
-                char    *pIretFrame = (char *)pRegFrame->edx;
+                char    *pIretFrame = (char *)pCtxCore->edx;
                 uint32_t eip, selCS, uEFlags;
 
                 rc  = MMGCRamRead(pVM, &eip,     pIretFrame, 4);
@@ -377,14 +377,14 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
                     else
                         Log(("PATMRC: IRET stack frame: return address %04X:%x eflags=%08x\n", selCS, eip, uEFlags));
                 }
-                Log(("PATMRC: IRET from %x (IF->1) current eflags=%x\n", pRegFrame->eip, pVM->patm.s.CTXSUFF(pGCState)->uVMFlags));
-                pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
+                Log(("PATMRC: IRET from %x (IF->1) current eflags=%x\n", pCtxCore->eip, pVM->patm.s.CTXSUFF(pGCState)->uVMFlags));
+                pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
                 return VINF_SUCCESS;
             }
 
             case PATM_ACTION_LOG_GATE_ENTRY:
             {
-                char    *pIretFrame = (char *)pRegFrame->edx;
+                char    *pIretFrame = (char *)pCtxCore->edx;
                 uint32_t eip, selCS, uEFlags;
 
                 rc  = MMGCRamRead(pVM, &eip,     pIretFrame, 4);
@@ -419,18 +419,18 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
                     else
                         Log(("PATMRC: GATE stack frame: return address %04X:%x eflags=%08x\n", selCS, eip, uEFlags));
                 }
-                pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
+                pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
                 return VINF_SUCCESS;
             }
 
             case PATM_ACTION_LOG_RET:
-                Log(("PATMRC: RET from %x to %x ESP=%x iopl=%d\n", pRegFrame->eip, pRegFrame->edx, pRegFrame->ebx, X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags)));
-                pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
+                Log(("PATMRC: RET from %x to %x ESP=%x iopl=%d\n", pCtxCore->eip, pCtxCore->edx, pCtxCore->ebx, X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags)));
+                pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
                 return VINF_SUCCESS;
 
             case PATM_ACTION_LOG_CALL:
-                Log(("PATMRC: CALL to %RRv return addr %RRv ESP=%x iopl=%d\n", pVM->patm.s.CTXSUFF(pGCState)->GCCallPatchTargetAddr, pVM->patm.s.CTXSUFF(pGCState)->GCCallReturnAddr, pRegFrame->edx, X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags)));
-                pRegFrame->eip += PATM_ILLEGAL_INSTR_SIZE;
+                Log(("PATMRC: CALL to %RRv return addr %RRv ESP=%x iopl=%d\n", pVM->patm.s.CTXSUFF(pGCState)->GCCallPatchTargetAddr, pVM->patm.s.CTXSUFF(pGCState)->GCCallReturnAddr, pCtxCore->edx, X86_EFL_GET_IOPL(pVM->patm.s.CTXSUFF(pGCState)->uVMFlags)));
+                pCtxCore->eip += PATM_ILLEGAL_INSTR_SIZE;
                 return VINF_SUCCESS;
 #endif
             default:
@@ -442,7 +442,7 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
             AssertFailed();
         CTXSUFF(pVM->patm.s.pGCState)->uPendingAction = 0;
     }
-    AssertMsgFailed(("Unexpected OP_ILLUD2 in patch code at %x (pending action %x)!!!!\n", pRegFrame->eip, CTXSUFF(pVM->patm.s.pGCState)->uPendingAction));
+    AssertMsgFailed(("Unexpected OP_ILLUD2 in patch code at %x (pending action %x)!!!!\n", pCtxCore->eip, CTXSUFF(pVM->patm.s.pGCState)->uPendingAction));
     return VINF_EM_RAW_EMULATE_INSTR;
 }
 
@@ -455,46 +455,46 @@ VMMRC_INT_DECL(int) PATMRCHandleIllegalInstrTrap(PVM pVM, PCPUMCTXCORE pRegFrame
  * @retval  VINF_PATM_PATCH_INT3
  * @retval  VINF_EM_RAW_EMULATE_INSTR
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCtxCore    The relevant core context.
  */
-VMMRC_INT_DECL(int) PATMRCHandleInt3PatchTrap(PVM pVM, PCPUMCTXCORE pRegFrame)
+VMMRC_INT_DECL(int) PATMRCHandleInt3PatchTrap(PVM pVM, PCPUMCTXCORE pCtxCore)
 {
     PPATMPATCHREC pRec;
     int rc;
 
-    AssertReturn(!pRegFrame->eflags.Bits.u1VM
-                 && (   (pRegFrame->ss.Sel & X86_SEL_RPL) == 1
-                     || (EMIsRawRing1Enabled(pVM) && (pRegFrame->ss.Sel & X86_SEL_RPL) == 2)), VERR_ACCESS_DENIED);
+    AssertReturn(!pCtxCore->eflags.Bits.u1VM
+                 && (   (pCtxCore->ss.Sel & X86_SEL_RPL) == 1
+                     || (EMIsRawRing1Enabled(pVM) && (pCtxCore->ss.Sel & X86_SEL_RPL) == 2)), VERR_ACCESS_DENIED);
 
     /* Int 3 in PATM generated code? (most common case) */
-    if (PATMIsPatchGCAddr(pVM, pRegFrame->eip))
+    if (PATMIsPatchGCAddr(pVM, pCtxCore->eip))
     {
         /* Note! Hardcoded assumption about it being a single byte int 3 instruction. */
-        pRegFrame->eip--;
+        pCtxCore->eip--;
         return VINF_PATM_PATCH_INT3;
     }
 
     /** @todo could use simple caching here to speed things up. */
-    pRec = (PPATMPATCHREC)RTAvloU32Get(&CTXSUFF(pVM->patm.s.PatchLookupTree)->PatchTree, (AVLOU32KEY)(pRegFrame->eip - 1));  /* eip is pointing to the instruction *after* 'int 3' already */
+    pRec = (PPATMPATCHREC)RTAvloU32Get(&CTXSUFF(pVM->patm.s.PatchLookupTree)->PatchTree, (AVLOU32KEY)(pCtxCore->eip - 1));  /* eip is pointing to the instruction *after* 'int 3' already */
     if (pRec && pRec->patch.uState == PATCH_ENABLED)
     {
         if (pRec->patch.flags & PATMFL_INT3_REPLACEMENT_BLOCK)
         {
             Assert(pRec->patch.opcode == OP_CLI);
             /* This is a special cli block that was turned into an int 3 patch. We jump to the generated code manually. */
-            pRegFrame->eip = (uint32_t)PATCHCODE_PTR_GC(&pRec->patch);
+            pCtxCore->eip = (uint32_t)PATCHCODE_PTR_GC(&pRec->patch);
             STAM_COUNTER_INC(&pVM->patm.s.StatInt3BlockRun);
             return VINF_SUCCESS;
         }
         if (pRec->patch.flags & PATMFL_INT3_REPLACEMENT)
         {
             /* eip is pointing to the instruction *after* 'int 3' already */
-            pRegFrame->eip = pRegFrame->eip - 1;
+            pCtxCore->eip = pCtxCore->eip - 1;
 
             PATM_STAT_RUN_INC(&pRec->patch);
 
-            Log(("PATMHandleInt3PatchTrap found int3 for %s at %x\n", patmGetInstructionString(pRec->patch.opcode, 0), pRegFrame->eip));
+            Log(("PATMHandleInt3PatchTrap found int3 for %s at %x\n", patmGetInstructionString(pRec->patch.opcode, 0), pCtxCore->eip));
 
             switch(pRec->patch.opcode)
             {
@@ -533,7 +533,7 @@ VMMRC_INT_DECL(int) PATMRCHandleInt3PatchTrap(PVM pVM, PCPUMCTXCORE pRegFrame)
 
 #ifdef VBOX_WITH_IEM
             VBOXSTRICTRC rcStrict;
-            rcStrict = IEMExecOneBypassWithPrefetchedByPC(pVCpu, pRegFrame, pRegFrame->rip,
+            rcStrict = IEMExecOneBypassWithPrefetchedByPC(pVCpu, pCtxCore, pCtxCore->rip,
                                                           pRec->patch.aPrivInstr, pRec->patch.cbPrivInstr);
             rc = VBOXSTRICTRC_TODO(rcStrict);
 #else
@@ -548,7 +548,7 @@ VMMRC_INT_DECL(int) PATMRCHandleInt3PatchTrap(PVM pVM, PCPUMCTXCORE pRegFrame)
                 return VINF_EM_RAW_EMULATE_INSTR;
             }
 
-            rc = VBOXSTRICTRC_TODO(EMInterpretInstructionDisasState(pVCpu, &cpu, pRegFrame, 0 /* not relevant here */,
+            rc = VBOXSTRICTRC_TODO(EMInterpretInstructionDisasState(pVCpu, &cpu, pCtxCore, 0 /* not relevant here */,
                                                                     EMCODETYPE_SUPERVISOR));
 #endif
             if (RT_FAILURE(rc))
diff --git a/src/VBox/VMM/VMMRC/PDMRCDevice.cpp b/src/VBox/VMM/VMMRC/PDMRCDevice.cpp
index e28d5b3..67eded7 100644
--- a/src/VBox/VMM/VMMRC/PDMRCDevice.cpp
+++ b/src/VBox/VMM/VMMRC/PDMRCDevice.cpp
@@ -87,7 +87,7 @@ static DECLCALLBACK(int) pdmRCDevHlp_PCIPhysRead(PPDMDEVINS pDevIns, RTGCPHYS GC
 }
 
 
-/** @interface_method_impl{PDMDEVHLPRC,pfnPCIPhysRead} */
+/** @interface_method_impl{PDMDEVHLPRC,pfnPCIPhysWrite} */
 static DECLCALLBACK(int) pdmRCDevHlp_PCIPhysWrite(PPDMDEVINS pDevIns, RTGCPHYS GCPhys, const void *pvBuf, size_t cbWrite)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -164,7 +164,7 @@ static DECLCALLBACK(void) pdmRCDevHlp_PCISetIrq(PPDMDEVINS pDevIns, int iIrq, in
 }
 
 
-/** @interface_method_impl{PDMDRVHLPRC,pfnPCISetIrq} */
+/** @interface_method_impl{PDMDEVHLPRC,pfnISASetIrq} */
 static DECLCALLBACK(void) pdmRCDevHlp_ISASetIrq(PPDMDEVINS pDevIns, int iIrq, int iLevel)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -281,7 +281,7 @@ static DECLCALLBACK(int) pdmRCDevHlp_VMSetRuntimeError(PPDMDEVINS pDevIns, uint3
 }
 
 
-/** @interface_method_impl{PDMDEVHLPRC,pfnVMSetErrorV} */
+/** @interface_method_impl{PDMDEVHLPRC,pfnVMSetRuntimeErrorV} */
 static DECLCALLBACK(int) pdmRCDevHlp_VMSetRuntimeErrorV(PPDMDEVINS pDevIns, uint32_t fFlags, const char *pszErrorId, const char *pszFormat, va_list va)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -403,7 +403,7 @@ extern DECLEXPORT(const PDMDEVHLPRC) g_pdmRCDevHlp =
  * @{
  */
 
-/** @interface_method_impl{PDMPICHLPGC,pfnSetInterruptFF} */
+/** @interface_method_impl{PDMPICHLPRC,pfnSetInterruptFF} */
 static DECLCALLBACK(void) pdmRCPicHlp_SetInterruptFF(PPDMDEVINS pDevIns)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -427,7 +427,7 @@ static DECLCALLBACK(void) pdmRCPicHlp_SetInterruptFF(PPDMDEVINS pDevIns)
 }
 
 
-/** @interface_method_impl{PDMPICHLPGC,pfnClearInterruptFF} */
+/** @interface_method_impl{PDMPICHLPRC,pfnClearInterruptFF} */
 static DECLCALLBACK(void) pdmRCPicHlp_ClearInterruptFF(PPDMDEVINS pDevIns)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -452,7 +452,7 @@ static DECLCALLBACK(void) pdmRCPicHlp_ClearInterruptFF(PPDMDEVINS pDevIns)
 }
 
 
-/** @interface_method_impl{PDMPICHLPGC,pfnLock} */
+/** @interface_method_impl{PDMPICHLPRC,pfnLock} */
 static DECLCALLBACK(int) pdmRCPicHlp_Lock(PPDMDEVINS pDevIns, int rc)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -460,7 +460,7 @@ static DECLCALLBACK(int) pdmRCPicHlp_Lock(PPDMDEVINS pDevIns, int rc)
 }
 
 
-/** @interface_method_impl{PDMPICHLPGC,pfnUnlock} */
+/** @interface_method_impl{PDMPICHLPRC,pfnUnlock} */
 static DECLCALLBACK(void) pdmRCPicHlp_Unlock(PPDMDEVINS pDevIns)
 {
     PDMDEV_ASSERT_DEVINS(pDevIns);
@@ -856,7 +856,7 @@ static DECLCALLBACK(int) pdmRCDrvHlp_VMSetRuntimeError(PPDMDRVINS pDrvIns, uint3
 }
 
 
-/** @interface_method_impl{PDMDRVHLPRC,pfnVMSetErrorV} */
+/** @interface_method_impl{PDMDRVHLPRC,pfnVMSetRuntimeErrorV} */
 static DECLCALLBACK(int) pdmRCDrvHlp_VMSetRuntimeErrorV(PPDMDRVINS pDrvIns, uint32_t fFlags, const char *pszErrorId, const char *pszFormat, va_list va)
 {
     PDMDRV_ASSERT_DRVINS(pDrvIns);
@@ -926,7 +926,7 @@ extern DECLEXPORT(const PDMDRVHLPRC) g_pdmRCDrvHlp =
  * Sets an irq on the PIC and I/O APIC.
  *
  * @returns true if     delivered, false if postponed.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iIrq        The irq.
  * @param   iLevel      The new level.
  * @param   uTagSrc     The IRQ tag and source.
diff --git a/src/VBox/VMM/VMMRC/SELMRC.cpp b/src/VBox/VMM/VMMRC/SELMRC.cpp
index f733bb7..bd2b4d7 100644
--- a/src/VBox/VMM/VMMRC/SELMRC.cpp
+++ b/src/VBox/VMM/VMMRC/SELMRC.cpp
@@ -58,8 +58,8 @@ static char const g_aszSRegNms[X86_SREG_COUNT][4] = { "ES", "CS", "SS", "DS", "F
  * @retval  VINF_EM_RAW_EMULATE_INSTR_GDT_FAULT
  * @retval  VINF_SELM_SYNC_GDT
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The current virtual CPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtx        CPU context for the current CPU.
  * @param   iGDTEntry   The GDT entry to sync.
  *
@@ -179,8 +179,8 @@ static VBOXSTRICTRC selmRCSyncGDTEntry(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, uns
  * look in both the shadow and guest descriptor table entries for hidden
  * register content.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The current virtual CPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   pCtx        The CPU context.
  * @param   iGDTEntry   The GDT entry to sync.
  */
@@ -228,8 +228,8 @@ void selmRCSyncGdtSegRegs(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, unsigned iGDTEnt
  * This is shared between the selmRCGuestGDTWritePfHandler and
  * selmGuestGDTWriteHandler.
  *
- * @param   pVM             Pointer to the cross context VM structure.
- * @param   pVCpu           Pointer to the cross context virtual CPU structure.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   offGuestTss     The offset into the TSS of the write that was made.
  * @param   cbWrite         The number of bytes written.
  * @param   pCtx            The current CPU context.
@@ -257,8 +257,8 @@ void selmRCGuestGdtPreWriteCheck(PVM pVM, PVMCPU pVCpu, uint32_t offGuestGdt, ui
  * @retval  VINF_SELM_SYNC_GDT
  * @retval  VINF_EM_RAW_EMULATE_INSTR_GDT_FAULT
  *
- * @param   pVM             Pointer to the cross context VM structure.
- * @param   pVCpu           Pointer to the cross context virtual CPU structure.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   offGuestTss     The offset into the TSS of the write that was made.
  * @param   cbWrite         The number of bytes written.
  * @param   pCtx            The current CPU context.
@@ -362,7 +362,7 @@ DECLEXPORT(VBOXSTRICTRC) selmRCGuestLDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTG
 /**
  * Read wrapper used by selmRCGuestTSSWriteHandler.
  * @returns VBox status code (appropriate for trap handling and GC return).
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pvDst       Where to put the bits we read.
  * @param   pvSrc       Guest address to read from.
  * @param   cb          The number of bytes to read.
@@ -391,8 +391,8 @@ DECLINLINE(int) selmRCReadTssBits(PVM pVM, PVMCPU pVCpu, void *pvDst, void const
  * This is shared between the
  *
  * @returns Strict VBox status code appropriate for raw-mode returns.
- * @param   pVM             Pointer to the cross context VM structure.
- * @param   pVCpu           Pointer to the cross context virtual CPU structure.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   offGuestTss     The offset into the TSS of the write that was made.
  * @param   cbWrite         The number of bytes written.
  */
@@ -545,19 +545,8 @@ DECLEXPORT(VBOXSTRICTRC) selmRCGuestTSSWritePfHandler(PVM pVM, PVMCPU pVCpu, RTG
 
 #ifdef SELM_TRACK_SHADOW_GDT_CHANGES
 /**
- * \#PF Virtual Handler callback for Guest write access to the VBox shadow GDT.
- *
- * @returns VBox status code (appropriate for trap handling and GC return).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the cross context CPU context for the
- *                      calling EMT.
- * @param   uErrorCode   CPU Error code.
- * @param   pRegFrame   Trap register frame.
- * @param   pvFault     The fault address (cr2).
- * @param   pvRange     The base address of the handled virtual range.
- * @param   offRange    The offset of the access into this range.
- *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
- * @param   pvUser      Unused.
+ * @callback_method_impl{FNPGMRCVIRTPFHANDLER,
+ * \#PF Virtual Handler callback for Guest write access to the VBox shadow GDT.}
  */
 DECLEXPORT(VBOXSTRICTRC) selmRCShadowGDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame,
                                                        RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
@@ -571,19 +560,8 @@ DECLEXPORT(VBOXSTRICTRC) selmRCShadowGDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RT
 
 #ifdef SELM_TRACK_SHADOW_LDT_CHANGES
 /**
- * \#PF Virtual Handler callback for Guest write access to the VBox shadow LDT.
- *
- * @returns VBox status code (appropriate for trap handling and GC return).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the cross context CPU context for the
- *                      calling EMT.
- * @param   uErrorCode   CPU Error code.
- * @param   pRegFrame   Trap register frame.
- * @param   pvFault     The fault address (cr2).
- * @param   pvRange     The base address of the handled virtual range.
- * @param   offRange    The offset of the access into this range.
- *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
- * @param   pvUser      Unused.
+ * @callback_method_impl{FNPGMRCVIRTPFHANDLER,
+ * \#PF Virtual Handler callback for Guest write access to the VBox shadow LDT.}
  */
 DECLEXPORT(VBOXSTRICTRC) selmRCShadowLDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame,
                                                        RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
@@ -598,19 +576,8 @@ DECLEXPORT(VBOXSTRICTRC) selmRCShadowLDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RT
 
 #ifdef SELM_TRACK_SHADOW_TSS_CHANGES
 /**
- * \#PF Virtual Handler callback for Guest write access to the VBox shadow TSS.
- *
- * @returns VBox status code (appropriate for trap handling and GC return).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the cross context CPU context for the
- *                      calling EMT.
- * @param   uErrorCode   CPU Error code.
- * @param   pRegFrame   Trap register frame.
- * @param   pvFault     The fault address (cr2).
- * @param   pvRange     The base address of the handled virtual range.
- * @param   offRange    The offset of the access into this range.
- *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
- * @param   pvUser      Unused.
+ * @callback_method_impl{FNPGMRCVIRTPFHANDLER,
+ * \#PF Virtual Handler callback for Guest write access to the VBox shadow TSS.}
  */
 DECLEXPORT(VBOXSTRICTRC) selmRCShadowTSSWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame,
                                                        RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
diff --git a/src/VBox/VMM/VMMRC/TRPMRC.cpp b/src/VBox/VMM/VMMRC/TRPMRC.cpp
index 2032840..31abb1a 100644
--- a/src/VBox/VMM/VMMRC/TRPMRC.cpp
+++ b/src/VBox/VMM/VMMRC/TRPMRC.cpp
@@ -45,8 +45,8 @@
  *
  * To uninstall the temporary handler, call this function with pfnHandler set to NULL.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   iTrap       Trap number to install handler [0..255].
  * @param   pfnHandler  Pointer to the handler. Use NULL for uninstalling the handler.
  */
@@ -75,7 +75,7 @@ VMMRCDECL(int) TRPMGCSetTempHandler(PVM pVM, unsigned iTrap, PFNTRPMGCTRAPHANDLE
  * This function will *never* return.
  * It will also reset any traps that are pending.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   rc      The return code for host context.
  */
 VMMRCDECL(void) TRPMGCHyperReturnToHost(PVM pVM, int rc)
@@ -90,19 +90,8 @@ VMMRCDECL(void) TRPMGCHyperReturnToHost(PVM pVM, int rc)
 
 
 /**
- * \#PF Virtual Handler callback for Guest write access to the Guest's own current IDT.
- *
- * @returns VBox status code (appropriate for trap handling and GC return).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the cross context CPU context for the
- *                      calling EMT.
- * @param   uErrorCode   CPU Error code.
- * @param   pRegFrame   Trap register frame.
- * @param   pvFault     The fault address (cr2).
- * @param   pvRange     The base address of the handled virtual range.
- * @param   offRange    The offset of the access into this range.
- *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
- * @param   pvUser      Unused.
+ * @callback_method_impl{FNPGMRCVIRTPFHANDLER,
+ * \#PF Virtual Handler callback for Guest write access to the Guest's own current IDT.}
  */
 DECLEXPORT(VBOXSTRICTRC) trpmRCGuestIDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame,
                                                       RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
@@ -156,19 +145,8 @@ DECLEXPORT(VBOXSTRICTRC) trpmRCGuestIDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTG
 
 
 /**
- * \#PF Virtual Handler callback for Guest write access to the VBox shadow IDT.
- *
- * @returns VBox status code (appropriate for trap handling and GC return).
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the cross context CPU context for the
- *                      calling EMT.
- * @param   uErrorCode  CPU Error code.
- * @param   pRegFrame   Trap register frame.
- * @param   pvFault     The fault address (cr2).
- * @param   pvRange     The base address of the handled virtual range.
- * @param   offRange    The offset of the access into this range.
- *                      (If it's a EIP range this is the EIP, if not it's pvFault.)
- * @param   pvUser      Unused.
+ * @callback_method_impl{FNPGMRCVIRTPFHANDLER,
+ * \#PF Virtual Handler callback for Guest write access to the VBox shadow IDT.}
  */
 DECLEXPORT(VBOXSTRICTRC) trpmRCShadowIDTWritePfHandler(PVM pVM, PVMCPU pVCpu, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame,
                                                        RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange, void *pvUser)
diff --git a/src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp b/src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp
index f8382f9..d054c35 100644
--- a/src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp
+++ b/src/VBox/VMM/VMMRC/TRPMRCHandlers.cpp
@@ -107,7 +107,7 @@ typedef struct TRPMGCHYPER
      * @returns VBox status code
      *          VINF_SUCCESS means we've handled the trap.
      *          Any other error code means returning to the host context.
-     * @param   pVM             Pointer to the VM.
+     * @param   pVM             The cross context VM structure.
      * @param   pRegFrame       The register frame.
      * @param   uUser           The user argument.
      */
@@ -150,8 +150,8 @@ RT_C_DECLS_END
  *
  * @returns rc, can be adjusted if its VINF_SUCCESS or something really bad
  *          happened.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   rc          The VBox status code to return.
  * @param   pRegFrame   Pointer to the register frame for the trap.
  *
@@ -788,8 +788,8 @@ DECLASM(int) TRPMGCTrap0bHandler(PTRPMCPU pTrpmCpu, PCPUMCTXCORE pRegFrame)
  *          VINF_SUCCESS means we completely handled this trap,
  *          other codes are passed execution to host context.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   Pointer to the register frame for the trap.
  * @param   pCpu        The opcode info.
  * @param   PC          The program counter corresponding to cs:eip in pRegFrame.
@@ -896,8 +896,8 @@ static int trpmGCTrap0dHandlerRing0(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFram
  *          VINF_SUCCESS means we completely handled this trap,
  *          other codes are passed execution to host context.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   Pointer to the register frame for the trap.
  * @param   pCpu        The opcode info.
  * @param   PC          The program counter corresponding to cs:eip in pRegFrame.
@@ -1002,8 +1002,8 @@ static int trpmGCTrap0dHandlerRing3(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFram
  *
  * @returns VINF_SUCCESS or VINF_EM_RAW_EMULATE_INSTR.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   Pointer to the register frame for the trap.
  *                      This will be updated on successful return.
  */
@@ -1034,7 +1034,7 @@ DECLINLINE(int) trpmGCTrap0dHandlerRdTsc(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRe
  *          VINF_SUCCESS means we completely handled this trap,
  *          other codes are passed execution to host context.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pTrpmCpu    Pointer to TRPMCPU data (within VM).
  * @param   pRegFrame   Pointer to the register frame for the trap.
  */
@@ -1325,7 +1325,7 @@ DECLASM(int) TRPMGCTrap0eHandler(PTRPMCPU pTrpmCpu, PCPUMCTXCORE pRegFrame)
  *
  * @returns VBox status code.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegFrame   Pointer to the register frame for the trap.
  * @param   paHandlers  The array of trap handler records.
  * @param   pEndRecord  The end record (exclusive).
@@ -1428,7 +1428,7 @@ DECLASM(int) TRPMGCHyperTrap0eHandler(PTRPMCPU pTrpmCpu, PCPUMCTXCORE pRegFrame)
  * So, do NOT use this for handling RC traps!
  *
  * @returns VBox status code.  (Anything but VINF_SUCCESS will cause guru.)
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegFrame   Register frame.
  * @param   uUser       User arg.
  */
@@ -1473,7 +1473,7 @@ DECLCALLBACK(int) trpmRCTrapInGeneric(PVM pVM, PCPUMCTXCORE pRegFrame, uintptr_t
  * Generic hyper trap handler that sets the EIP to @a uUser.
  *
  * @returns VBox status code.  (Anything but VINF_SUCCESS will cause guru.)
- * @param   pVM         Pointer to the cross context VM structure.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegFrame   Pointer to the register frame (within VM)
  * @param   uUser       The user arg, which should be the new EIP address.
  */
diff --git a/src/VBox/VMM/VMMRC/VMMRC.cpp b/src/VBox/VMM/VMMRC/VMMRC.cpp
index 15ced1c..b5035d0 100644
--- a/src/VBox/VMM/VMMRC/VMMRC.cpp
+++ b/src/VBox/VMM/VMMRC/VMMRC.cpp
@@ -56,7 +56,7 @@ DECLASM(bool)   vmmRCSafeMsrWrite(uint32_t uMsr, uint64_t u64Value);
  * The GC entry point.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   uOperation  Which operation to execute (VMMRCOPERATION).
  * @param   uArg        Argument to that operation.
  */
@@ -189,7 +189,7 @@ VMMRCDECL(int) vmmGCLoggerFlush(PRTLOGGERRC pLogger)
 /**
  * Flush logger if almost full.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 VMMRCDECL(void) VMMRCLogFlushIfFull(PVM pVM)
 {
@@ -206,7 +206,7 @@ VMMRCDECL(void) VMMRCLogFlushIfFull(PVM pVM)
 /**
  * Switches from guest context to host context.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   rc          The status code.
  */
 VMMRCDECL(void) VMMRCGuestToHost(PVM pVM, int rc)
@@ -218,7 +218,7 @@ VMMRCDECL(void) VMMRCGuestToHost(PVM pVM, int rc)
 /**
  * Calls the ring-0 host code.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  */
 DECLASM(void) vmmRCProbeFireHelper(PVM pVM)
 {
@@ -238,7 +238,7 @@ DECLASM(void) vmmRCProbeFireHelper(PVM pVM)
  * @returns VERR_NOT_IMPLEMENTED if the testcase wasn't implemented.
  * @returns VERR_GENERAL_FAILURE if the testcase continued when it shouldn't.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   uOperation  The testcase.
  * @param   uArg        The variation. See function description for odd / even details.
  *
@@ -352,7 +352,7 @@ static int vmmGCTest(PVM pVM, unsigned uOperation, unsigned uArg)
  * This is called directly via VMMR3CallRC.
  *
  * @returns VBox status code.
- * @param   pVM             The VM handle.
+ * @param   pVM             The cross context VM structure.
  * @param   uMsr            The MSR to start at.
  * @param   cMsrs           The number of MSRs to read.
  * @param   paResults       Where to store the results.  This must be large
@@ -385,7 +385,7 @@ VMMRCTestReadMsrs(PVM pVM, uint32_t uMsr, uint32_t cMsrs, PVMMTESTMSRENTRY paRes
  * This is called directly via VMMR3CallRC.
  *
  * @returns VBox status code.
- * @param   pVM             The VM handle.
+ * @param   pVM             The cross context VM structure.
  * @param   uMsr            The MSR to start at.
  * @param   u32ValueLow     The low part of the value to write.
  * @param   u32ValueHi      The high part of the value to write.
@@ -426,7 +426,7 @@ VMMRCTestTestWriteMsr(PVM pVM, uint32_t uMsr, uint32_t u32ValueLow, uint32_t u32
  *
  * @returns VBox status code (appropriate for GC return).
  *          In this context RT_SUCCESS means to restart the instruction.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegFrame   Trap register frame.
  */
 static DECLCALLBACK(int) vmmGCTestTmpPFHandler(PVM pVM, PCPUMCTXCORE pRegFrame)
@@ -447,7 +447,7 @@ static DECLCALLBACK(int) vmmGCTestTmpPFHandler(PVM pVM, PCPUMCTXCORE pRegFrame)
  *
  * @returns VBox status code (appropriate for GC return).
  *          In this context RT_SUCCESS means to restart the instruction.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pRegFrame   Trap register frame.
  */
 static DECLCALLBACK(int) vmmGCTestTmpPFHandlerCorruptFS(PVM pVM, PCPUMCTXCORE pRegFrame)
diff --git a/src/VBox/VMM/VMMRZ/DBGFRZ.cpp b/src/VBox/VMM/VMMRZ/DBGFRZ.cpp
index 77ccbfb..398267d 100644
--- a/src/VBox/VMM/VMMRZ/DBGFRZ.cpp
+++ b/src/VBox/VMM/VMMRZ/DBGFRZ.cpp
@@ -37,8 +37,8 @@
  *          VINF_SUCCESS means we completely handled this trap,
  *          other codes are passed execution to host context.
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure.
  * @param   pRegFrame       Pointer to the register frame for the trap.
  * @param   uDr6            The DR6 hypervisor register value.
  * @param   fAltStepping    Alternative stepping indicator.
@@ -107,8 +107,8 @@ VMMRZ_INT_DECL(int) DBGFRZTrap01Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pReg
  *          VINF_SUCCESS means we completely handled this trap,
  *          other codes are passed execution to host context.
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pRegFrame   Pointer to the register frame for the trap.
  */
 VMMRZ_INT_DECL(int) DBGFRZTrap03Handler(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame)
diff --git a/src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp b/src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp
index 2ce5700..b116f74 100644
--- a/src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp
+++ b/src/VBox/VMM/VMMRZ/PGMRZDynMap.cpp
@@ -338,7 +338,7 @@ static int  pgmR0DynMapTest(PVM pVM);
  * Initializes the auto mapping sets for a VM.
  *
  * @returns VINF_SUCCESS on success, VERR_PGM_DYNMAP_IPE on failure.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 static int pgmRZDynMapInitAutoSetsForVM(PVM pVM)
 {
@@ -465,7 +465,7 @@ VMMR0DECL(void) PGMR0DynMapTerm(void)
  * Initializes the dynamic mapping cache for a new VM.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0DECL(int) PGMR0DynMapInitVM(PVM pVM)
 {
@@ -520,7 +520,7 @@ VMMR0DECL(int) PGMR0DynMapInitVM(PVM pVM)
 /**
  * Terminates the dynamic mapping cache usage for a VM.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 VMMR0DECL(void) PGMR0DynMapTermVM(PVM pVM)
 {
@@ -1252,7 +1252,7 @@ static void pgmR0DynMapTearDown(PPGMRZDYNMAP pThis)
  * Initializes the dynamic mapping cache in raw-mode context.
  *
  * @returns VBox status code.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  */
 VMMRCDECL(int) PGMRCDynMapInit(PVM pVM)
 {
@@ -1340,12 +1340,13 @@ static void pgmRZDynMapReleasePage(PPGMRZDYNMAP pThis, uint32_t iPage, uint32_t
  * pgmR0DynMapPage worker that deals with the tedious bits.
  *
  * @returns The page index on success, UINT32_MAX on failure.
- * @param   pThis       The dynamic mapping cache instance.
- * @param   HCPhys      The address of the page to be mapped.
- * @param   iPage       The page index pgmR0DynMapPage hashed HCPhys to.
- * @param   pVCpu       The current CPU, for statistics.
- * @param   pfNew       Set to @c true if a new entry was made and @c false if
- *                      an old entry was found and reused.
+ * @param   pThis   The dynamic mapping cache instance.
+ * @param   HCPhys  The address of the page to be mapped.
+ * @param   iPage   The page index pgmR0DynMapPage hashed HCPhys to.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
+ *                  For statistics.
+ * @param   pfNew   Set to @c true if a new entry was made and @c false if
+ *                  an old entry was found and reused.
  */
 static uint32_t pgmR0DynMapPageSlow(PPGMRZDYNMAP pThis, RTHCPHYS HCPhys, uint32_t iPage, PVMCPU pVCpu, bool *pfNew)
 {
@@ -1450,7 +1451,8 @@ static uint32_t pgmR0DynMapPageSlow(PPGMRZDYNMAP pThis, RTHCPHYS HCPhys, uint32_
  * @param   pThis       The dynamic mapping cache instance.
  * @param   HCPhys      The address of the page to be mapped.
  * @param   iRealCpu    The real cpu set index. (optimization)
- * @param   pVCpu       The current CPU (for statistics).
+ * @param   pVCpu       The cross context virtual CPU structure of the calling
+ *                      EMT.  For statistics.
  * @param   ppvPage     Where to the page address.
  */
 DECLINLINE(uint32_t) pgmR0DynMapPage(PPGMRZDYNMAP pThis, RTHCPHYS HCPhys, int32_t iRealCpu, PVMCPU pVCpu, void **ppvPage)
@@ -1826,7 +1828,7 @@ static void pgmDynMapOptimizeAutoSet(PPGMMAPSET pSet)
  * Mostly for strictness. PGMDynMapHCPage won't work unless this
  * API is called.
  *
- * @param   pVCpu       The shared data for the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(void) PGMRZDynMapStartAutoSet(PVMCPU pVCpu)
 {
@@ -1848,7 +1850,7 @@ VMMDECL(void) PGMRZDynMapStartAutoSet(PVMCPU pVCpu)
  * guest memory.
  *
  * @returns @c true if started, @c false if migrated.
- * @param   pVCpu       The shared data for the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @thread  EMT
  */
 VMMR0DECL(bool) PGMR0DynMapStartOrMigrateAutoSet(PVMCPU pVCpu)
@@ -1925,7 +1927,7 @@ DECLINLINE(void) pgmDynMapFlushAutoSetWorker(PPGMMAPSET pSet, uint32_t cEntries)
  * Releases the dynamic memory mappings made by PGMDynMapHCPage and associates
  * since the PGMDynMapStartAutoSet call.
  *
- * @param   pVCpu       The shared data for the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(void) PGMRZDynMapReleaseAutoSet(PVMCPU pVCpu)
 {
@@ -1958,7 +1960,7 @@ VMMDECL(void) PGMRZDynMapReleaseAutoSet(PVMCPU pVCpu)
 /**
  * Flushes the set if it's above a certain threshold.
  *
- * @param   pVCpu       The shared data for the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(void) PGMRZDynMapFlushAutoSet(PVMCPU pVCpu)
 {
@@ -2000,7 +2002,7 @@ VMMDECL(void) PGMRZDynMapFlushAutoSet(PVMCPU pVCpu)
  * be valid on the new CPU.  If the cpu didn't change nothing will happen as all
  * the entries will have been flagged as invalidated.
  *
- * @param   pVCpu       The shared data for the current virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @thread  EMT
  */
 VMMR0DECL(void) PGMR0DynMapMigrateAutoSet(PVMCPU pVCpu)
@@ -2097,7 +2099,7 @@ static void pgmDynMapFlushSubset(PPGMMAPSET pSet)
  *
  * @returns The index of the previous subset. Pass this to
  *          PGMDynMapPopAutoSubset when popping it.
- * @param   pVCpu           Pointer to the virtual cpu data.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  */
 VMMDECL(uint32_t) PGMRZDynMapPushAutoSubset(PVMCPU pVCpu)
 {
@@ -2128,7 +2130,7 @@ VMMDECL(uint32_t) PGMRZDynMapPushAutoSubset(PVMCPU pVCpu)
 /**
  * Pops a subset created by a previous call to PGMDynMapPushAutoSubset.
  *
- * @param   pVCpu           Pointer to the virtual cpu data.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   iPrevSubset     What PGMDynMapPushAutoSubset returned.
  */
 VMMDECL(void) PGMRZDynMapPopAutoSubset(PVMCPU pVCpu, uint32_t iPrevSubset)
@@ -2157,7 +2159,7 @@ VMMDECL(void) PGMRZDynMapPopAutoSubset(PVMCPU pVCpu, uint32_t iPrevSubset)
 /**
  * Indicates that the given page is unused and its mapping can be re-used.
  *
- * @param   pVCpu           The current CPU.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   pvHint          The page that is now unused.  This does not have to
  *                          point at the start of the page.  NULL is ignored.
  */
diff --git a/src/VBox/VMM/VMMRZ/VMMRZ.cpp b/src/VBox/VMM/VMMRZ/VMMRZ.cpp
index cbe2178..dde009a 100644
--- a/src/VBox/VMM/VMMRZ/VMMRZ.cpp
+++ b/src/VBox/VMM/VMMRZ/VMMRZ.cpp
@@ -38,8 +38,8 @@
  *          needs to change it into an assertion.
  *
  *
- * @param   pVM             Pointer to the VM.
- * @param   pVCpu           Pointer to the VMCPU of the calling EMT.
+ * @param   pVM             The cross context VM structure.
+ * @param   pVCpu           The cross context virtual CPU structure of the calling EMT.
  * @param   enmOperation    The operation.
  * @param   uArg            The argument to the operation.
  */
@@ -109,7 +109,7 @@ VMMRZDECL(int) VMMRZCallRing3(PVM pVM, PVMCPU pVCpu, VMMCALLRING3 enmOperation,
  *          be passed up the stack, or if that isn't possible then VMMRZCallRing3
  *          needs to change it into an assertion.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   enmOperation    The operation.
  * @param   uArg            The argument to the operation.
  */
@@ -122,7 +122,7 @@ VMMRZDECL(int) VMMRZCallRing3NoCpu(PVM pVM, VMMCALLRING3 enmOperation, uint64_t
 /**
  * Disables all host calls, except certain fatal ones.
  *
- * @param   pVCpu               The CPU struct for the calling EMT.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @thread  EMT.
  */
 VMMRZDECL(void) VMMRZCallRing3Disable(PVMCPU pVCpu)
@@ -156,7 +156,7 @@ VMMRZDECL(void) VMMRZCallRing3Disable(PVMCPU pVCpu)
 /**
  * Counters VMMRZCallRing3Disable() and re-enables host calls.
  *
- * @param   pVCpu               The CPU struct for the calling EMT.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @thread  EMT.
  */
 VMMRZDECL(void) VMMRZCallRing3Enable(PVMCPU pVCpu)
@@ -189,7 +189,7 @@ VMMRZDECL(void) VMMRZCallRing3Enable(PVMCPU pVCpu)
  * Checks whether its possible to call host context or not.
  *
  * @returns true if it's safe, false if it isn't.
- * @param   pVCpu               The CPU struct for the calling EMT.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  */
 VMMRZDECL(bool) VMMRZCallRing3IsEnabled(PVMCPU pVCpu)
 {
@@ -202,7 +202,7 @@ VMMRZDECL(bool) VMMRZCallRing3IsEnabled(PVMCPU pVCpu)
 /**
  * Sets the ring-0 callback before doing the ring-3 call.
  *
- * @param   pVCpu         Pointer to the VMCPU.
+ * @param   pVCpu         The cross context virtual CPU structure.
  * @param   pfnCallback   Pointer to the callback.
  * @param   pvUser        The user argument.
  *
@@ -225,7 +225,7 @@ VMMRZDECL(int) VMMRZCallRing3SetNotification(PVMCPU pVCpu, R0PTRTYPE(PFNVMMR0CAL
 /**
  * Removes the ring-0 callback.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 VMMRZDECL(void) VMMRZCallRing3RemoveNotification(PVMCPU pVCpu)
 {
@@ -236,7 +236,7 @@ VMMRZDECL(void) VMMRZCallRing3RemoveNotification(PVMCPU pVCpu)
 /**
  * Checks whether there is a ring-0 callback notification active.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @returns true if there the notification is active, false otherwise.
  */
 VMMRZDECL(bool) VMMRZCallRing3IsNotificationSet(PVMCPU pVCpu)
diff --git a/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac b/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac
index 3f9428e..df66975 100644
--- a/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac
+++ b/src/VBox/VMM/VMMSwitcher/AMD64andLegacy.mac
@@ -51,7 +51,7 @@ BITS 64
 ;;
 ; The C interface.
 ;
-; @param    pVM  gcc: rdi  msc:rcx  The VM handle.
+; @param    pVM  gcc: rdi  msc:rcx  The cross context VM structure.
 ;
 BEGINPROC vmmR0ToRawMode
 %ifdef DEBUG_STUFF
diff --git a/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac b/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac
index d607fc9..192fcf9 100644
--- a/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac
+++ b/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac
@@ -805,11 +805,11 @@ ENDPROC vmmR0ToRawModeAsm
 ; * Prepares for and executes VMLAUNCH/VMRESUME (64 bits guest mode)
 ; *
 ; * @returns VBox status code
-; * @param   HCPhysCpuPage  VMXON physical address  [rsp+8]
-; * @param   HCPhysVmcs     VMCS physical address   [rsp+16]
-; * @param   pCache         VMCS cache              [rsp+24]
-; * @param   pVM            The VM handle           [rbp+28h]
-; * @param   pVM            The VMCPU handle.       [rbp+30h]
+; * @param   HCPhysCpuPage  VMXON physical address              [rsp+8]
+; * @param   HCPhysVmcs     VMCS physical address               [rsp+16]
+; * @param   pCache         VMCS cache                          [rsp+24]
+; * @param   pVM            The cross context VM structure.     [rbp+28h]
+; * @param   pVCpu          The cross context virtual CPU structure.  [rbp+30h]
 ; * @param   pCtx           Guest context (rsi)
 ; */
 BEGINPROC VMXRCStartVM64
@@ -1219,8 +1219,8 @@ ENDPROC VMXRCStartVM64
 ; @returns  VBox status code
 ; @param    HCPhysVMCB      Physical address of host VMCB       [rbp+10h]
 ; @param    HCPhysVMCB      Physical address of guest VMCB      [rbp+18h]
-; @param    pVM             The VM handle                       [rbp+20h]
-; @param    pVCpu           The VMCPU handle.                   [rbp+28h]
+; @param    pVM             The cross context VM structure.     [rbp+20h]
+; @param    pVCpu           The cross context virtual CPU structure.  [rbp+28h]
 ; @param    pCtx            Guest context                       [rsi]
 ;
 BEGINPROC SVMRCVMRun64
diff --git a/src/VBox/VMM/include/CSAMInternal.h b/src/VBox/VMM/include/CSAMInternal.h
index aa3d4e3..0ee44d5 100644
--- a/src/VBox/VMM/include/CSAMInternal.h
+++ b/src/VBox/VMM/include/CSAMInternal.h
@@ -238,7 +238,7 @@ typedef struct CSAM
  * Call for analyzing the instructions following the privileged instr. for compliance with our heuristics
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpu        CPU disassembly state
  * @param   pInstrHC    Guest context pointer to privileged instruction
  * @param   pCurInstrGC Guest context pointer to current instruction
diff --git a/src/VBox/VMM/include/EMHandleRCTmpl.h b/src/VBox/VMM/include/EMHandleRCTmpl.h
index fe55be9..6a8abfa 100644
--- a/src/VBox/VMM/include/EMHandleRCTmpl.h
+++ b/src/VBox/VMM/include/EMHandleRCTmpl.h
@@ -32,14 +32,14 @@
  * @returns VINF_SUCCESS if it's ok to continue raw mode.
  * @returns VBox status code to return to the EM main loop.
  *
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the VMCPU.
- * @param   rc      The return code.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   pCtx    Pointer to the guest CPU context.
+ * @param   rc      The return code.
  */
 #ifdef EMHANDLERC_WITH_PATM
 int emR3RawHandleRC(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, int rc)
-#elif defined(EMHANDLERC_WITH_HM)
+#elif defined(EMHANDLERC_WITH_HM) || defined(DOXYGEN_RUNNING)
 int emR3HmHandleRC(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, int rc)
 #endif
 {
@@ -346,6 +346,7 @@ int emR3HmHandleRC(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx, int rc)
         case VERR_VMM_RING3_CALL_DISABLED:
         case VERR_IEM_INSTR_NOT_IMPLEMENTED:
         case VERR_IEM_ASPECT_NOT_IMPLEMENTED:
+        case VERR_EM_GUEST_CPU_HANG:
             break;
 
 #ifdef EMHANDLERC_WITH_HM
diff --git a/src/VBox/VMM/include/GIMKvmInternal.h b/src/VBox/VMM/include/GIMKvmInternal.h
index 799b8ba..fe18122 100644
--- a/src/VBox/VMM/include/GIMKvmInternal.h
+++ b/src/VBox/VMM/include/GIMKvmInternal.h
@@ -196,7 +196,7 @@ typedef struct GIMKVM
     uint64_t                    u64WallClockMsr;
     /**  CPUID features: Basic. */
     uint32_t                    uBaseFeat;
-    /** Whether GIM needs to trap #UD exceptions. */
+    /** Whether GIM needs to trap \#UD exceptions. */
     bool                        fTrapXcptUD;
     /** Disassembler opcode of hypercall instruction native for this host CPU. */
     uint16_t                    uOpCodeNative;
diff --git a/src/VBox/VMM/include/HMInternal.h b/src/VBox/VMM/include/HMInternal.h
index 83fcc33..374f225 100644
--- a/src/VBox/VMM/include/HMInternal.h
+++ b/src/VBox/VMM/include/HMInternal.h
@@ -48,7 +48,7 @@
 
 /** @def HM_PROFILE_EXIT_DISPATCH
  * Enables profiling of the VM exit handler dispatching. */
-#if 0
+#if 0 || defined(DOXYGEN_RUNNING)
 # define HM_PROFILE_EXIT_DISPATCH
 #endif
 
@@ -64,7 +64,7 @@ RT_C_DECLS_BEGIN
 /** @def HMCPU_CF_CLEAR
  * Clears a HM-context flag.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlag   The flag to clear.
  */
 #define HMCPU_CF_CLEAR(pVCpu, fFlag)              (ASMAtomicUoAndU32(&(pVCpu)->hm.s.fContextUseFlags, ~(fFlag)))
@@ -72,7 +72,7 @@ RT_C_DECLS_BEGIN
 /** @def HMCPU_CF_SET
  * Sets a HM-context flag.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlag   The flag to set.
  */
 #define HMCPU_CF_SET(pVCpu, fFlag)                (ASMAtomicUoOrU32(&(pVCpu)->hm.s.fContextUseFlags, (fFlag)))
@@ -80,7 +80,7 @@ RT_C_DECLS_BEGIN
 /** @def HMCPU_CF_IS_SET
  * Checks if all the flags in the specified HM-context set is pending.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlag   The flag to check.
  */
 #define HMCPU_CF_IS_SET(pVCpu, fFlag)             ((ASMAtomicUoReadU32(&(pVCpu)->hm.s.fContextUseFlags) & (fFlag)) == (fFlag))
@@ -89,7 +89,7 @@ RT_C_DECLS_BEGIN
  * Checks if one or more of the flags in the specified HM-context set is
  * pending.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlags  The flags to check for.
  */
 #define HMCPU_CF_IS_PENDING(pVCpu, fFlags)        RT_BOOL(ASMAtomicUoReadU32(&(pVCpu)->hm.s.fContextUseFlags) & (fFlags))
@@ -97,7 +97,7 @@ RT_C_DECLS_BEGIN
 /** @def HMCPU_CF_IS_PENDING_ONLY
  * Checks if -only- one or more of the specified HM-context flags is pending.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlags  The flags to check for.
  */
 #define HMCPU_CF_IS_PENDING_ONLY(pVCpu, fFlags)   !RT_BOOL(ASMAtomicUoReadU32(&(pVCpu)->hm.s.fContextUseFlags) & ~(fFlags))
@@ -105,7 +105,7 @@ RT_C_DECLS_BEGIN
 /** @def HMCPU_CF_IS_SET_ONLY
  * Checks if -only- all the flags in the specified HM-context set is pending.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlags  The flags to check for.
  */
 #define HMCPU_CF_IS_SET_ONLY(pVCpu, fFlags)       (ASMAtomicUoReadU32(&(pVCpu)->hm.s.fContextUseFlags) == (fFlags))
@@ -113,7 +113,7 @@ RT_C_DECLS_BEGIN
 /** @def HMCPU_CF_RESET_TO
  * Resets the HM-context flags to the specified value.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  * @param   fFlags  The new value.
  */
 #define HMCPU_CF_RESET_TO(pVCpu, fFlags)          (ASMAtomicUoWriteU32(&(pVCpu)->hm.s.fContextUseFlags, (fFlags)))
@@ -121,15 +121,15 @@ RT_C_DECLS_BEGIN
 /** @def HMCPU_CF_VALUE
  * Returns the current HM-context flags value.
  *
- * @param   pVCpu   Pointer to the VMCPU.
+ * @param   pVCpu   The cross context virtual CPU structure.
  */
 #define HMCPU_CF_VALUE(pVCpu)                     (ASMAtomicUoReadU32(&(pVCpu)->hm.s.fContextUseFlags))
 
 
-/** Resets/initializes the VM-exit/#VMEXIT history array. */
+/** Resets/initializes the VM-exit/\#VMEXIT history array. */
 #define HMCPU_EXIT_HISTORY_RESET(pVCpu)           (memset(&(pVCpu)->hm.s.auExitHistory, 0xff, sizeof((pVCpu)->hm.s.auExitHistory)))
 
-/** Updates the VM-exit/#VMEXIT history array. */
+/** Updates the VM-exit/\#VMEXIT history array. */
 #define HMCPU_EXIT_HISTORY_ADD(pVCpu, a_ExitReason) \
     do { \
         AssertMsg((pVCpu)->hm.s.idxExitHistoryFree < RT_ELEMENTS((pVCpu)->hm.s.auExitHistory), ("%u\n", (pVCpu)->hm.s.idxExitHistoryFree)); \
@@ -334,7 +334,7 @@ typedef HMTPRPATCH *PHMTPRPATCH;
 /**
  * Switcher function, HC to the special 64-bit RC.
  *
- * @param   pVM             Pointer to the VM.
+ * @param   pVM             The cross context VM structure.
  * @param   offCpumVCpu     Offset from pVM->cpum to pVM->aCpus[idCpu].cpum.
  * @returns Return code indicating the action to take.
  */
@@ -609,13 +609,13 @@ typedef struct HMCPU
     bool                        fLeaveDone;
     /** Whether we're using the hyper DR7 or guest DR7. */
     bool                        fUsingHyperDR7;
-    /** Whether to preload the guest-FPU state to avoid #NM VM-exit overhead. */
+    /** Whether to preload the guest-FPU state to avoid \#NM VM-exit overhead. */
     bool                        fPreloadGuestFpu;
     /** Set if XCR0 needs to be loaded and saved when entering and exiting guest
      * code execution. */
     bool                        fLoadSaveGuestXcr0;
 
-    /** Whether #UD needs to be intercepted (required by certain GIM providers). */
+    /** Whether \#UD needs to be intercepted (required by certain GIM providers). */
     bool                        fGIMTrapXcptUD;
     /** Whether paravirt. hypercalls are enabled. */
     bool                        fHypercallsEnabled;
@@ -857,7 +857,7 @@ typedef struct HMCPU
      * HMR0Enter and cleared in HMR0Leave. */
     RTCPUID                 idEnteredCpu;
 
-    /** VT-x/AMD-V VM-exit/#VMXEXIT history, circular array. */
+    /** VT-x/AMD-V VM-exit/\#VMXEXIT history, circular array. */
     uint16_t                auExitHistory[31];
     /** The index of the next free slot in the history array. */
     uint16_t                idxExitHistoryFree;
@@ -889,7 +889,7 @@ typedef struct HMCPU
     STAMCOUNTER             StatExitAll;
     STAMCOUNTER             StatExitShadowNM;
     STAMCOUNTER             StatExitGuestNM;
-    STAMCOUNTER             StatExitShadowPF;       /* Misleading, currently used for MMIO #PFs as well. */
+    STAMCOUNTER             StatExitShadowPF;       /**< Misleading, currently used for MMIO \#PFs as well. */
     STAMCOUNTER             StatExitShadowPFEM;
     STAMCOUNTER             StatExitGuestPF;
     STAMCOUNTER             StatExitGuestUD;
diff --git a/src/VBox/VMM/include/IEMInternal.h b/src/VBox/VMM/include/IEMInternal.h
index 4f94da9..1e7dd37 100644
--- a/src/VBox/VMM/include/IEMInternal.h
+++ b/src/VBox/VMM/include/IEMInternal.h
@@ -43,7 +43,8 @@ RT_C_DECLS_BEGIN
  * Shorthand for:
  *    defined(IEM_VERIFICATION_MODE) && !defined(IEM_VERIFICATION_MODE_MINIMAL)
  */
-#if defined(IEM_VERIFICATION_MODE) && !defined(IEM_VERIFICATION_MODE_MINIMAL) && !defined(IEM_VERIFICATION_MODE_FULL)
+#if (defined(IEM_VERIFICATION_MODE) && !defined(IEM_VERIFICATION_MODE_MINIMAL) && !defined(IEM_VERIFICATION_MODE_FULL)) \
+  || defined(DOXYGEN_RUNNING)
 # define IEM_VERIFICATION_MODE_FULL
 #endif
 
@@ -630,7 +631,8 @@ AssertCompileSize(IEMTASKSWITCH, 4);
 /** @def IEM_VERIFICATION_MODE
  * Indicates that one of the verfication modes are enabled.
  */
-#if (defined(IEM_VERIFICATION_MODE_FULL) || defined(IEM_VERIFICATION_MODE_MINIMAL)) && !defined(IEM_VERIFICATION_MODE)
+#if (defined(IEM_VERIFICATION_MODE_FULL) || defined(IEM_VERIFICATION_MODE_MINIMAL)) && !defined(IEM_VERIFICATION_MODE) \
+ || defined(DOXYGEN_RUNNING)
 # define IEM_VERIFICATION_MODE
 #endif
 
diff --git a/src/VBox/VMM/include/IOMInline.h b/src/VBox/VMM/include/IOMInline.h
index f6829c6..ee2234f 100644
--- a/src/VBox/VMM/include/IOMInline.h
+++ b/src/VBox/VMM/include/IOMInline.h
@@ -29,7 +29,7 @@
  * @returns Pointer to I/O port range.
  * @returns NULL if no port registered.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   Port    The I/O port lookup.
  */
 DECLINLINE(CTX_SUFF(PIOMIOPORTRANGE)) iomIOPortGetRange(PVM pVM, RTIOPORT Port)
@@ -45,7 +45,7 @@ DECLINLINE(CTX_SUFF(PIOMIOPORTRANGE)) iomIOPortGetRange(PVM pVM, RTIOPORT Port)
  * @returns Pointer to I/O port range.
  * @returns NULL if no port registered.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   Port    The I/O port to lookup.
  */
 DECLINLINE(PIOMIOPORTRANGER3) iomIOPortGetRangeR3(PVM pVM, RTIOPORT Port)
@@ -61,8 +61,8 @@ DECLINLINE(PIOMIOPORTRANGER3) iomIOPortGetRangeR3(PVM pVM, RTIOPORT Port)
  * @returns Pointer to MMIO range.
  * @returns NULL if address not in a MMIO range.
  *
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the virtual CPU structure of the caller.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys  Physical address to lookup.
  */
 DECLINLINE(PIOMMMIORANGE) iomMmioGetRange(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys)
@@ -97,8 +97,8 @@ DECLINLINE(void) iomMmioRetainRange(PIOMMMIORANGE pRange)
  * @returns Pointer to MMIO range.
  * @returns NULL if address not in a MMIO range.
  *
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the virtual CPU structure of the caller.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys  Physical address to lookup.
  */
 DECLINLINE(PIOMMMIORANGE) iomMmioGetRangeWithRef(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys)
@@ -122,7 +122,7 @@ DECLINLINE(PIOMMMIORANGE) iomMmioGetRangeWithRef(PVM pVM, PVMCPU pVCpu, RTGCPHYS
 /**
  * Releases a MMIO range.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pRange  The range to release.
  */
 DECLINLINE(void) iomMmioReleaseRange(PVM pVM, PIOMMMIORANGE pRange)
@@ -140,8 +140,8 @@ DECLINLINE(void) iomMmioReleaseRange(PVM pVM, PIOMMMIORANGE pRange)
  * @returns Pointer to MMIO range.
  * @returns NULL if address not in a MMIO range.
  *
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   Pointer to the virtual CPU structure of the caller.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys  Physical address to lookup.
  */
 DECLINLINE(PIOMMMIORANGE) iomMMIOGetRangeUnsafe(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys)
@@ -166,8 +166,8 @@ DECLINLINE(PIOMMMIORANGE) iomMMIOGetRangeUnsafe(PVM pVM, PVMCPU pVCpu, RTGCPHYS
  * @returns Pointer to MMIO stats.
  * @returns NULL if not found (R0/GC), or out of memory (R3).
  *
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the virtual CPU structure of the caller.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys      Physical address to lookup.
  * @param   pRange      The MMIO range.
  *
diff --git a/src/VBox/VMM/include/MMInternal.h b/src/VBox/VMM/include/MMInternal.h
index 953ae35..2a05d4e 100644
--- a/src/VBox/VMM/include/MMInternal.h
+++ b/src/VBox/VMM/include/MMInternal.h
@@ -30,8 +30,8 @@
 
 
 /** @defgroup grp_mm_int   Internals
- * @internal
  * @ingroup grp_mm
+ * @internal
  * @{
  */
 
diff --git a/src/VBox/VMM/include/PATMInternal.h b/src/VBox/VMM/include/PATMInternal.h
index b3a7a1a..699b547 100644
--- a/src/VBox/VMM/include/PATMInternal.h
+++ b/src/VBox/VMM/include/PATMInternal.h
@@ -617,7 +617,7 @@ int             patmR3RemovePatch(PVM pVM, PPATMPATCHREC pPatchRec, bool fForceR
  * Call for analysing the instructions following the privileged instr. for compliance with our heuristics
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCpu        CPU disassembly state
  * @param   pInstrHC    Guest context pointer to privileged instruction
  * @param   pCurInstrHC Guest context pointer to current instruction
diff --git a/src/VBox/VMM/include/PDMBlkCacheInternal.h b/src/VBox/VMM/include/PDMBlkCacheInternal.h
index c1afc72..5af318a 100644
--- a/src/VBox/VMM/include/PDMBlkCacheInternal.h
+++ b/src/VBox/VMM/include/PDMBlkCacheInternal.h
@@ -59,7 +59,7 @@ typedef struct PDMBLKCACHEENTRY
     PPDMBLKLRULIST                  pList;
     /** Cache the entry belongs to. */
     PPDMBLKCACHE                    pBlkCache;
-    /** Flags for this entry. Combinations of PDMACFILECACHE_* #defines */
+    /** Flags for this entry. Combinations of PDMACFILECACHE_* \#defines */
     volatile uint32_t               fFlags;
     /** Reference counter. Prevents eviction of the entry if > 0. */
     volatile uint32_t               cRefs;
diff --git a/src/VBox/VMM/include/PDMInline.h b/src/VBox/VMM/include/PDMInline.h
index 08b4c23..59e47e9 100644
--- a/src/VBox/VMM/include/PDMInline.h
+++ b/src/VBox/VMM/include/PDMInline.h
@@ -22,7 +22,7 @@
  * Calculates the next IRQ tag.
  *
  * @returns IRQ tag.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   idTracer            The ID of the source device.
  */
 DECLINLINE(uint32_t) pdmCalcIrqTag(PVM pVM, uint32_t idTracer)
diff --git a/src/VBox/VMM/include/PDMInternal.h b/src/VBox/VMM/include/PDMInternal.h
index 932a7cc..a555154 100644
--- a/src/VBox/VMM/include/PDMInternal.h
+++ b/src/VBox/VMM/include/PDMInternal.h
@@ -293,7 +293,7 @@ typedef struct PDMCRITSECTINT
     /** Pointer to the VM - GCPtr. */
     PVMRC                           pVMRC;
     /** Set if this critical section is the automatically created default
-     * section of a device.. */
+     * section of a device. */
     bool                            fAutomaticDefaultCritsect;
     /** Set if the critical section is used by a timer or similar.
      * See PDMR3DevGetCritSect.  */
@@ -688,7 +688,7 @@ typedef struct PDMPCIBUS
     DECLR3CALLBACKMEMBER(void,      pfnSetIrqR3,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iIrq, int iLevel, uint32_t uTagSrc));
     /** @copydoc PDMPCIBUSREG::pfnRegisterR3 */
     DECLR3CALLBACKMEMBER(int,       pfnRegisterR3,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, const char *pszName, int iDev));
-    /** @copydoc PDMPCIBUSREG::pfnPCIRegisterMsiR3 */
+    /** @copydoc PDMPCIBUSREG::pfnRegisterMsiR3 */
     DECLR3CALLBACKMEMBER(int,       pfnRegisterMsiR3,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, PPDMMSIREG pMsiReg));
     /** @copydoc PDMPCIBUSREG::pfnIORegionRegisterR3 */
     DECLR3CALLBACKMEMBER(int,       pfnIORegionRegisterR3,(PPDMDEVINS pDevIns, PPCIDEVICE pPciDev, int iRegion, uint32_t cbRegion,
@@ -976,7 +976,7 @@ typedef struct PDMDEVHLPTASK
             uint32_t                uTagSrc;
         } SetIRQ;
 
-        /** Expanding the structure.. */
+        /** Expanding the structure. */
         uint64_t    au64[2];
     } u;
 } PDMDEVHLPTASK;
diff --git a/src/VBox/VMM/include/PGMInline.h b/src/VBox/VMM/include/PGMInline.h
index 00090ee..01a0a1b 100644
--- a/src/VBox/VMM/include/PGMInline.h
+++ b/src/VBox/VMM/include/PGMInline.h
@@ -51,7 +51,7 @@
  * @returns Pointer to the RAM range on success.
  * @returns NULL on a VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS condition.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address.
  */
 DECLINLINE(PPGMRAMRANGE) pgmPhysGetRange(PVM pVM, RTGCPHYS GCPhys)
@@ -71,7 +71,7 @@ DECLINLINE(PPGMRAMRANGE) pgmPhysGetRange(PVM pVM, RTGCPHYS GCPhys)
  * @returns Pointer to the RAM range on success.
  * @returns NULL if the address is located after the last range.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address.
  */
 DECLINLINE(PPGMRAMRANGE) pgmPhysGetRangeAtOrAbove(PVM pVM, RTGCPHYS GCPhys)
@@ -91,7 +91,7 @@ DECLINLINE(PPGMRAMRANGE) pgmPhysGetRangeAtOrAbove(PVM pVM, RTGCPHYS GCPhys)
  * @returns Pointer to the page on success.
  * @returns NULL on a VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS condition.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address.
  */
 DECLINLINE(PPGMPAGE) pgmPhysGetPage(PVM pVM, RTGCPHYS GCPhys)
@@ -115,7 +115,7 @@ DECLINLINE(PPGMPAGE) pgmPhysGetPage(PVM pVM, RTGCPHYS GCPhys)
  * @retval  VINF_SUCCESS and a valid *ppPage on success.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if the address isn't valid.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address.
  * @param   ppPage      Where to store the page pointer on success.
  */
@@ -141,7 +141,7 @@ DECLINLINE(int) pgmPhysGetPageEx(PVM pVM, RTGCPHYS GCPhys, PPPGMPAGE ppPage)
  * @retval  VINF_SUCCESS and a valid *ppPage on success.
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if the address isn't valid.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address.
  * @param   ppPage      Where to store the page pointer on success.
  * @param   ppRamHint   Where to read and store the ram list hint.
@@ -173,7 +173,7 @@ DECLINLINE(int) pgmPhysGetPageWithHintEx(PVM pVM, RTGCPHYS GCPhys, PPPGMPAGE ppP
  * @returns Pointer to the page on success.
  * @returns NULL on a VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS condition.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address.
  * @param   ppPage      Where to store the pointer to the PGMPAGE structure.
  * @param   ppRam       Where to store the pointer to the PGMRAMRANGE structure.
@@ -196,8 +196,8 @@ DECLINLINE(int) pgmPhysGetPageAndRangeEx(PVM pVM, RTGCPHYS GCPhys, PPPGMPAGE ppP
 /**
  * Convert GC Phys to HC Phys.
  *
- * @returns VBox status.
- * @param   pVM         Pointer to the VM.
+ * @returns VBox status code.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The GC physical address.
  * @param   pHCPhys     Where to store the corresponding HC physical address.
  *
@@ -221,9 +221,10 @@ DECLINLINE(int) pgmRamGCPhys2HCPhys(PVM pVM, RTGCPHYS GCPhys, PRTHCPHYS pHCPhys)
  * that optimizes access to pages already in the set.
  *
  * @returns VINF_SUCCESS. Will bail out to ring-3 on failure.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   HCPhys      The physical address of the page.
  * @param   ppv         Where to store the mapping address.
+ * @param   SRC_POS     The source location of the caller.
  */
 DECLINLINE(int) pgmRZDynMapHCPageInlined(PVMCPU pVCpu, RTHCPHYS HCPhys, void **ppv RTLOG_COMMA_SRC_POS_DECL)
 {
@@ -259,10 +260,11 @@ DECLINLINE(int) pgmRZDynMapHCPageInlined(PVMCPU pVCpu, RTHCPHYS HCPhys, void **p
  * already in the set.
  *
  * @returns VBox status code, see pgmRZDynMapGCPageCommon for details.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPhys      The guest physical address of the page.
  * @param   ppv         Where to store the mapping address.
+ * @param   SRC_POS     The source location of the caller.
  */
 DECLINLINE(int) pgmRZDynMapGCPageV2Inlined(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhys, void **ppv RTLOG_COMMA_SRC_POS_DECL)
 {
@@ -320,9 +322,10 @@ DECLINLINE(int) pgmRZDynMapGCPageV2Inlined(PVM pVM, PVMCPU pVCpu, RTGCPHYS GCPhy
  * access to pages already in the set.
  *
  * @returns VBox status code, see pgmRZDynMapGCPageCommon for details.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPhys      The guest physical address of the page.
  * @param   ppv         Where to store the mapping address.
+ * @param   SRC_POS     The source location of the caller.
  */
 DECLINLINE(int) pgmRZDynMapGCPageInlined(PVMCPU pVCpu, RTGCPHYS GCPhys, void **ppv RTLOG_COMMA_SRC_POS_DECL)
 {
@@ -335,10 +338,11 @@ DECLINLINE(int) pgmRZDynMapGCPageInlined(PVMCPU pVCpu, RTGCPHYS GCPhys, void **p
  * that optimizes access to pages already in the set.
  *
  * @returns VBox status code, see pgmRZDynMapGCPageCommon for details.
- * @param   pVCpu       Pointer to the VMCPU.
- * @param   HCPhys      The physical address of the page.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   GCPhys      The guest physical address of the page.
  * @param   ppv         Where to store the mapping address. The offset is
  *                      preserved.
+ * @param   SRC_POS     The source location of the caller.
  */
 DECLINLINE(int) pgmRZDynMapGCPageOffInlined(PVMCPU pVCpu, RTGCPHYS GCPhys, void **ppv RTLOG_COMMA_SRC_POS_DECL)
 {
@@ -398,8 +402,9 @@ DECLINLINE(int) pgmRZDynMapGCPageOffInlined(PVMCPU pVCpu, RTGCPHYS GCPhys, void
  * Maps the page into current context (RC and maybe R0).
  *
  * @returns pointer to the mapping.
- * @param   pVM         Pointer to the PGM instance data.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The page.
+ * @param   SRC_POS     The source location of the caller.
  */
 DECLINLINE(void *) pgmPoolMapPageInlined(PVM pVM, PPGMPOOLPAGE pPage RTLOG_COMMA_SRC_POS_DECL)
 {
@@ -418,9 +423,10 @@ DECLINLINE(void *) pgmPoolMapPageInlined(PVM pVM, PPGMPOOLPAGE pPage RTLOG_COMMA
  * Maps the page into current context (RC and maybe R0).
  *
  * @returns pointer to the mapping.
- * @param   pVM         Pointer to the PGM instance data.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   pPage       The page.
+ * @param   SRC_POS     The source location of the caller.
  */
 DECLINLINE(void *) pgmPoolMapPageV2Inlined(PVM pVM, PVMCPU pVCpu, PPGMPOOLPAGE pPage RTLOG_COMMA_SRC_POS_DECL)
 {
@@ -446,7 +452,7 @@ DECLINLINE(void *) pgmPoolMapPageV2Inlined(PVM pVM, PVMCPU pVCpu, PPGMPOOLPAGE p
  * @retval  VINF_SUCCESS on success
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCPhys      The address of the guest page.
  * @param   ppTlbe      Where to store the pointer to the TLB entry.
  */
@@ -474,7 +480,7 @@ DECLINLINE(int) pgmPhysPageQueryTlbe(PVM pVM, RTGCPHYS GCPhys, PPPGMPAGEMAPTLBE
  * @retval  VINF_SUCCESS on success
  * @retval  VERR_PGM_INVALID_GC_PHYSICAL_ADDRESS if it's not a valid physical address.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       Pointer to the PGMPAGE structure corresponding to
  *                      GCPhys.
  * @param   GCPhys      The address of the guest page.
@@ -514,7 +520,7 @@ DECLINLINE(int) pgmPhysPageQueryTlbeWithPage(PVM pVM, PPGMPAGE pPage, RTGCPHYS G
  *
  * The caller is responsible for updating the shadow page tables.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pPage       The page to write monitor.
  * @param   GCPhysPage  The address of the page.
  */
@@ -549,7 +555,7 @@ DECLINLINE(void) pgmPhysPageWriteMonitor(PVM pVM, PPGMPAGE pPage, RTGCPHYS GCPhy
  * can perform consistency checks in debug builds.
  *
  * @returns true if it is, false if it isn't.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECL_FORCE_INLINE(bool) pgmGstIsNoExecuteActive(PVMCPU pVCpu)
 {
@@ -566,7 +572,7 @@ DECL_FORCE_INLINE(bool) pgmGstIsNoExecuteActive(PVMCPU pVCpu)
  * we can perform consistency checks in debug builds.
  *
  * @returns true if it is, false if it isn't.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECL_FORCE_INLINE(bool) pgmGst32BitIsPageSizeExtActive(PVMCPU pVCpu)
 {
@@ -582,7 +588,7 @@ DECL_FORCE_INLINE(bool) pgmGst32BitIsPageSizeExtActive(PVMCPU pVCpu)
  * Takes PSE-36 into account.
  *
  * @returns guest physical address
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   Pde         Guest Pde
  */
 DECLINLINE(RTGCPHYS) pgmGstGet4MBPhysPage(PVM pVM, X86PDE Pde)
@@ -598,7 +604,7 @@ DECLINLINE(RTGCPHYS) pgmGstGet4MBPhysPage(PVM pVM, X86PDE Pde)
  * Gets the address the guest page directory (32-bit paging).
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   ppPd        Where to return the mapping. This is always set.
  */
 DECLINLINE(int) pgmGstGet32bitPDPtrEx(PVMCPU pVCpu, PX86PD *ppPd)
@@ -623,7 +629,7 @@ DECLINLINE(int) pgmGstGet32bitPDPtrEx(PVMCPU pVCpu, PX86PD *ppPd)
  * Gets the address the guest page directory (32-bit paging).
  *
  * @returns Pointer to the page directory entry in question.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(PX86PD) pgmGstGet32bitPDPtr(PVMCPU pVCpu)
 {
@@ -652,7 +658,7 @@ DECLINLINE(PX86PD) pgmGstGet32bitPDPtr(PVMCPU pVCpu)
  * Gets the guest page directory pointer table.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   ppPdpt      Where to return the mapping.  This is always set.
  */
 DECLINLINE(int) pgmGstGetPaePDPTPtrEx(PVMCPU pVCpu, PX86PDPT *ppPdpt)
@@ -678,7 +684,7 @@ DECLINLINE(int) pgmGstGetPaePDPTPtrEx(PVMCPU pVCpu, PX86PDPT *ppPdpt)
  *
  * @returns Pointer to the page directory in question.
  * @returns NULL if the page directory is not present or on an invalid page.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(PX86PDPT) pgmGstGetPaePDPTPtr(PVMCPU pVCpu)
 {
@@ -694,7 +700,7 @@ DECLINLINE(PX86PDPT) pgmGstGetPaePDPTPtr(PVMCPU pVCpu)
  *
  * @returns Pointer to the page directory in question.
  * @returns NULL if the page directory is not present or on an invalid page.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  */
 DECLINLINE(PX86PDPE) pgmGstGetPaePDPEPtr(PVMCPU pVCpu, RTGCPTR GCPtr)
@@ -723,7 +729,7 @@ DECLINLINE(PX86PDPE) pgmGstGetPaePDPEPtr(PVMCPU pVCpu, RTGCPTR GCPtr)
  *
  * @returns The page directory entry in question.
  * @returns A non-present entry if the page directory is not present or on an invalid page.
- * @param   pVCpu       The handle of the virtual CPU.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   GCPtr       The address.
  */
 DECLINLINE(X86PDEPAE) pgmGstGetPaePDE(PVMCPU pVCpu, RTGCPTR GCPtr)
@@ -768,7 +774,7 @@ DECLINLINE(X86PDEPAE) pgmGstGetPaePDE(PVMCPU pVCpu, RTGCPTR GCPtr)
  *
  * @returns Pointer to the page directory in question.
  * @returns NULL if the page directory is not present or on an invalid page.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  * @param   piPD        Receives the index into the returned page directory
  * @param   pPdpe       Receives the page directory pointer entry. Optional.
@@ -818,7 +824,7 @@ DECLINLINE(PX86PDPAE) pgmGstGetPaePDPtr(PVMCPU pVCpu, RTGCPTR GCPtr, unsigned *p
  * Gets the page map level-4 pointer for the guest.
  *
  * @returns VBox status code.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   ppPml4      Where to return the mapping.  Always set.
  */
 DECLINLINE(int) pgmGstGetLongModePML4PtrEx(PVMCPU pVCpu, PX86PML4 *ppPml4)
@@ -843,7 +849,7 @@ DECLINLINE(int) pgmGstGetLongModePML4PtrEx(PVMCPU pVCpu, PX86PML4 *ppPml4)
  * Gets the page map level-4 pointer for the guest.
  *
  * @returns Pointer to the PML4 page.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(PX86PML4) pgmGstGetLongModePML4Ptr(PVMCPU pVCpu)
 {
@@ -858,7 +864,7 @@ DECLINLINE(PX86PML4) pgmGstGetLongModePML4Ptr(PVMCPU pVCpu)
  * Gets the pointer to a page map level-4 entry.
  *
  * @returns Pointer to the PML4 entry.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   iPml4       The index.
  * @remarks Only used by AssertCR3.
  */
@@ -885,7 +891,7 @@ DECLINLINE(PX86PML4E) pgmGstGetLongModePML4EPtr(PVMCPU pVCpu, unsigned int iPml4
  *
  * @returns The page directory entry in question.
  * @returns A non-present entry if the page directory is not present or on an invalid page.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  */
 DECLINLINE(X86PDEPAE) pgmGstGetLongModePDE(PVMCPU pVCpu, RTGCPTR64 GCPtr)
@@ -931,7 +937,7 @@ DECLINLINE(X86PDEPAE) pgmGstGetLongModePDE(PVMCPU pVCpu, RTGCPTR64 GCPtr)
  *
  * @returns The page directory in question.
  * @returns NULL if the page directory is not present or on an invalid page.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  * @param   ppPml4e     Page Map Level-4 Entry (out)
  * @param   pPdpe       Page directory pointer table entry (out)
@@ -984,7 +990,7 @@ DECLINLINE(PX86PDPAE) pgmGstGetLongModePDPtr(PVMCPU pVCpu, RTGCPTR64 GCPtr, PX86
  * Gets the shadow page directory, 32-bit.
  *
  * @returns Pointer to the shadow 32-bit PD.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(PX86PD) pgmShwGet32BitPDPtr(PVMCPU pVCpu)
 {
@@ -996,7 +1002,7 @@ DECLINLINE(PX86PD) pgmShwGet32BitPDPtr(PVMCPU pVCpu)
  * Gets the shadow page directory entry for the specified address, 32-bit.
  *
  * @returns Shadow 32-bit PDE.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  */
 DECLINLINE(X86PDE) pgmShwGet32BitPDE(PVMCPU pVCpu, RTGCPTR GCPtr)
@@ -1018,7 +1024,7 @@ DECLINLINE(X86PDE) pgmShwGet32BitPDE(PVMCPU pVCpu, RTGCPTR GCPtr)
  * address, 32-bit.
  *
  * @returns Pointer to the shadow 32-bit PDE.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  */
 DECLINLINE(PX86PDE) pgmShwGet32BitPDEPtr(PVMCPU pVCpu, RTGCPTR GCPtr)
@@ -1035,7 +1041,7 @@ DECLINLINE(PX86PDE) pgmShwGet32BitPDEPtr(PVMCPU pVCpu, RTGCPTR GCPtr)
  * Gets the shadow page pointer table, PAE.
  *
  * @returns Pointer to the shadow PAE PDPT.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(PX86PDPT) pgmShwGetPaePDPTPtr(PVMCPU pVCpu)
 {
@@ -1047,7 +1053,7 @@ DECLINLINE(PX86PDPT) pgmShwGetPaePDPTPtr(PVMCPU pVCpu)
  * Gets the shadow page directory for the specified address, PAE.
  *
  * @returns Pointer to the shadow PD.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  */
 DECLINLINE(PX86PDPAE) pgmShwGetPaePDPtr(PVMCPU pVCpu, RTGCPTR GCPtr)
@@ -1071,7 +1077,8 @@ DECLINLINE(PX86PDPAE) pgmShwGetPaePDPtr(PVMCPU pVCpu, RTGCPTR GCPtr)
  * Gets the shadow page directory for the specified address, PAE.
  *
  * @returns Pointer to the shadow PD.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
+ * @param   pPdpt       Pointer to the page directory pointer table.
  * @param   GCPtr       The address.
  */
 DECLINLINE(PX86PDPAE) pgmShwGetPaePDPtr(PVMCPU pVCpu, PX86PDPT pPdpt, RTGCPTR GCPtr)
@@ -1094,7 +1101,7 @@ DECLINLINE(PX86PDPAE) pgmShwGetPaePDPtr(PVMCPU pVCpu, PX86PDPT pPdpt, RTGCPTR GC
  * Gets the shadow page directory entry, PAE.
  *
  * @returns PDE.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  */
 DECLINLINE(X86PDEPAE) pgmShwGetPaePDE(PVMCPU pVCpu, RTGCPTR GCPtr)
@@ -1115,7 +1122,7 @@ DECLINLINE(X86PDEPAE) pgmShwGetPaePDE(PVMCPU pVCpu, RTGCPTR GCPtr)
  * Gets the pointer to the shadow page directory entry for an address, PAE.
  *
  * @returns Pointer to the PDE.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  * @remarks Only used by AssertCR3.
  */
@@ -1134,7 +1141,7 @@ DECLINLINE(PX86PDEPAE) pgmShwGetPaePDEPtr(PVMCPU pVCpu, RTGCPTR GCPtr)
  * Gets the shadow page map level-4 pointer.
  *
  * @returns Pointer to the shadow PML4.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 DECLINLINE(PX86PML4) pgmShwGetLongModePML4Ptr(PVMCPU pVCpu)
 {
@@ -1146,7 +1153,7 @@ DECLINLINE(PX86PML4) pgmShwGetLongModePML4Ptr(PVMCPU pVCpu)
  * Gets the shadow page map level-4 entry for the specified address.
  *
  * @returns The entry.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCPtr       The address.
  */
 DECLINLINE(X86PML4E) pgmShwGetLongModePML4E(PVMCPU pVCpu, RTGCPTR GCPtr)
@@ -1167,7 +1174,7 @@ DECLINLINE(X86PML4E) pgmShwGetLongModePML4E(PVMCPU pVCpu, RTGCPTR GCPtr)
  * Gets the pointer to the specified shadow page map level-4 entry.
  *
  * @returns The entry.
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   iPml4       The PML4 index.
  */
 DECLINLINE(PX86PML4E) pgmShwGetLongModePML4EPtr(PVMCPU pVCpu, unsigned int iPml4)
@@ -1184,7 +1191,7 @@ DECLINLINE(PX86PML4E) pgmShwGetLongModePML4EPtr(PVMCPU pVCpu, unsigned int iPml4
  * Cached physical handler lookup.
  *
  * @returns Physical handler covering @a GCPhys.
- * @param   pVM                 Pointer to the VM.
+ * @param   pVM                 The cross context VM structure.
  * @param   GCPhys              The lookup address.
  */
 DECLINLINE(PPGMPHYSHANDLER) pgmHandlerPhysicalLookup(PVM pVM, RTGCPHYS GCPhys)
@@ -1210,7 +1217,7 @@ DECLINLINE(PPGMPHYSHANDLER) pgmHandlerPhysicalLookup(PVM pVM, RTGCPHYS GCPhys)
 /**
  * Clears one physical page of a virtual handler.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pCur        Virtual handler structure.
  * @param   iPage       Physical page index.
  *
@@ -1397,7 +1404,7 @@ DECLINLINE(void) pgmPoolCacheUsed(PPGMPOOL pPool, PPGMPOOLPAGE pPage)
 /**
  * Locks a page to prevent flushing (important for cr3 root pages or shadow pae pd pages).
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pPool       The pool.
  * @param   pPage       PGM pool page
  */
 DECLINLINE(void) pgmPoolLockPage(PPGMPOOL pPool, PPGMPOOLPAGE pPage)
@@ -1410,7 +1417,7 @@ DECLINLINE(void) pgmPoolLockPage(PPGMPOOL pPool, PPGMPOOLPAGE pPage)
 /**
  * Unlocks a page to allow flushing again
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pPool       The pool.
  * @param   pPage       PGM pool page
  */
 DECLINLINE(void) pgmPoolUnlockPage(PPGMPOOL pPool, PPGMPOOLPAGE pPage)
@@ -1444,7 +1451,7 @@ DECLINLINE(bool) pgmPoolIsPageLocked(PPGMPOOLPAGE pPage)
  * Tells if mappings are to be put into the shadow page table or not.
  *
  * @returns boolean result
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 DECL_FORCE_INLINE(bool) pgmMapAreMappingsEnabled(PVM pVM)
 {
@@ -1463,7 +1470,7 @@ DECL_FORCE_INLINE(bool) pgmMapAreMappingsEnabled(PVM pVM)
  * Checks if the mappings are floating and enabled.
  *
  * @returns true / false.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 DECL_FORCE_INLINE(bool) pgmMapAreMappingsFloating(PVM pVM)
 {
diff --git a/src/VBox/VMM/include/PGMInternal.h b/src/VBox/VMM/include/PGMInternal.h
index 94c59fe..640fd52 100644
--- a/src/VBox/VMM/include/PGMInternal.h
+++ b/src/VBox/VMM/include/PGMInternal.h
@@ -151,11 +151,13 @@
 
 /** @def VBOX_WITH_NEW_LAZY_PAGE_ALLOC
  * Enables the experimental lazy page allocation code. */
-/*#define VBOX_WITH_NEW_LAZY_PAGE_ALLOC */
+#ifdef DOXYGEN_RUNNING
+# define VBOX_WITH_NEW_LAZY_PAGE_ALLOC
+#endif
 
 /** @def VBOX_WITH_REAL_WRITE_MONITORED_PAGES
  * Enables real write monitoring of pages, i.e. mapping them read-only and
- * only making them writable when getting a write access #PF. */
+ * only making them writable when getting a write access \#PF. */
 #define VBOX_WITH_REAL_WRITE_MONITORED_PAGES
 
 /** @} */
@@ -211,8 +213,8 @@
 /** @} */
 
 /** Macro for checking if the guest is using paging.
- * @param uGstType     PGM_TYPE_*
- * @param uShwType     PGM_TYPE_*
+ * @param   uGstType   PGM_TYPE_*
+ * @param   uShwType   PGM_TYPE_*
  * @remark  ASSUMES certain order of the PGM_TYPE_* values.
  */
 #define PGM_WITH_PAGING(uGstType, uShwType)  \
@@ -221,8 +223,8 @@
      && (uShwType) != PGM_TYPE_EPT)
 
 /** Macro for checking if the guest supports the NX bit.
- * @param uGstType     PGM_TYPE_*
- * @param uShwType     PGM_TYPE_*
+ * @param   uGstType   PGM_TYPE_*
+ * @param   uShwType   PGM_TYPE_*
  * @remark  ASSUMES certain order of the PGM_TYPE_* values.
  */
 #define PGM_WITH_NX(uGstType, uShwType)  \
@@ -235,8 +237,8 @@
  * Maps a HC physical page pool address to a virtual address.
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
- * @param   pVCpu       The current CPU.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  * @param   HCPhys      The HC physical address to map to a virtual one.
  * @param   ppv         Where to store the virtual address. No need to cast
  *                      this.
@@ -257,8 +259,8 @@
  * Maps a GC physical page address to a virtual address.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
- * @param   pVCpu   The current CPU.
+ * @param   pVM     The cross context VM structure.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys  The GC physical address to map to a virtual one.
  * @param   ppv     Where to store the virtual address. No need to cast this.
  *
@@ -278,7 +280,7 @@
  * Maps a GC physical page address to a virtual address.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   GCPhys  The GC physical address to map to a virtual one.
  * @param   ppv     Where to store the virtual address. No need to cast this.
  *
@@ -292,7 +294,7 @@
  * Maps a GC physical page address to a virtual address.
  *
  * @returns VBox status code.
- * @param   pVCpu   The current CPU.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @param   GCPhys  The GC physical address to map to a virtual one.
  * @param   ppv     Where to store the virtual address. No need to cast this.
  *
@@ -306,7 +308,7 @@
  * Maps a unaligned GC physical page address to a virtual address.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   GCPhys  The GC physical address to map to a virtual one.
  * @param   ppv     Where to store the virtual address. No need to cast this.
  *
@@ -328,7 +330,7 @@
  *
  * For best effect only apply this to the page that was mapped most recently.
  *
- * @param   pVCpu   The current CPU.
+ * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
  * @param   pvPage  The pool page.
  */
 #if defined(IN_RC) || defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0)
@@ -347,7 +349,7 @@
  *
  * For best effect only apply this to the page that was mapped most recently.
  *
- * @param   pVM     Pointer to the VM.
+ * @param   pVM     The cross context VM structure.
  * @param   pvPage  The pool page.
  */
 #define PGM_DYNMAP_UNUSED_HINT_VM(pVM, pvPage)  PGM_DYNMAP_UNUSED_HINT(VMMGetCpu(pVM), pvPage)
@@ -356,7 +358,7 @@
 /** @def PGM_INVL_PG
  * Invalidates a page.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCVirt      The virtual address of the page to invalidate.
  */
 #ifdef IN_RC
@@ -370,7 +372,7 @@
 /** @def PGM_INVL_PG_ALL_VCPU
  * Invalidates a page on all VCPUs
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   GCVirt      The virtual address of the page to invalidate.
  */
 #ifdef IN_RC
@@ -384,7 +386,7 @@
 /** @def PGM_INVL_BIG_PG
  * Invalidates a 4MB page directory entry.
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  * @param   GCVirt      The virtual address within the page directory to invalidate.
  */
 #ifdef IN_RC
@@ -398,7 +400,7 @@
 /** @def PGM_INVL_VCPU_TLBS()
  * Invalidates the TLBs of the specified VCPU
  *
- * @param   pVCpu       Pointer to the VMCPU.
+ * @param   pVCpu       The cross context virtual CPU structure.
  */
 #ifdef IN_RC
 # define PGM_INVL_VCPU_TLBS(pVCpu)             ASMReloadCR3()
@@ -411,7 +413,7 @@
 /** @def PGM_INVL_ALL_VCPU_TLBS()
  * Invalidates the TLBs of all VCPUs
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 #ifdef IN_RC
 # define PGM_INVL_ALL_VCPU_TLBS(pVM)            ASMReloadCR3()
@@ -608,7 +610,7 @@ typedef PGMPHYSHANDLERTYPEINT *PPGMPHYSHANDLERTYPEINT;
 /**
  * Converts a handle to a pointer.
  * @returns PPGMPHYSHANDLERTYPEINT
- * @param   a_pVM           Pointer to the cross context VM structure.
+ * @param   a_pVM           The cross context VM structure.
  * @param   a_hType         Physical access handler type handle.
  */
 #define PGMPHYSHANDLERTYPEINT_FROM_HANDLE(a_pVM, a_hType) ((PPGMPHYSHANDLERTYPEINT)MMHyperHeapOffsetToPtr(a_pVM, a_hType))
@@ -653,7 +655,7 @@ typedef PGMPHYSHANDLER *PPGMPHYSHANDLER;
 /**
  * Gets the type record for a physical handler (no reference added).
  * @returns PPGMPHYSHANDLERTYPEINT
- * @param   a_pVM           Pointer to the cross context VM structure.
+ * @param   a_pVM           The cross context VM structure.
  * @param   a_pPhysHandler  Pointer to the physical handler structure
  *                          (PGMPHYSHANDLER).
  */
@@ -730,7 +732,7 @@ typedef PGMVIRTHANDLERTYPEINT *PPGMVIRTHANDLERTYPEINT;
 /**
  * Converts a handle to a pointer.
  * @returns PPGMVIRTHANDLERTYPEINT
- * @param   a_pVM           Pointer to the cross context VM structure.
+ * @param   a_pVM           The cross context VM structure.
  * @param   a_hType         Vitual access handler type handle.
  */
 # define PGMVIRTHANDLERTYPEINT_FROM_HANDLE(a_pVM, a_hType) ((PPGMVIRTHANDLERTYPEINT)MMHyperHeapOffsetToPtr(a_pVM, a_hType))
@@ -771,7 +773,7 @@ typedef PGMVIRTHANDLER *PPGMVIRTHANDLER;
 /**
  * Gets the type record for a virtual handler (no reference added).
  * @returns PPGMVIRTHANDLERTYPEINT
- * @param   a_pVM           Pointer to the cross context VM structure.
+ * @param   a_pVM           The cross context VM structure.
  * @param   a_pVirtHandler  Pointer to the virtual handler structure
  *                          (PGMVIRTHANDLER).
  */
@@ -875,6 +877,10 @@ typedef PPGMPAGE *PPPGMPAGE;
 /**
  * Initializes the page structure.
  * @param   a_pPage     Pointer to the physical guest page tracking structure.
+ * @param   a_HCPhys    The host physical address of the page.
+ * @param   a_idPage    The (GMM) page ID of the page.
+ * @param   a_uType     The page type (PGMPAGETYPE).
+ * @param   a_uState    The page state (PGM_PAGE_STATE_XXX).
  */
 #define PGM_PAGE_INIT(a_pPage, a_HCPhys, a_idPage, a_uType, a_uState) \
     do { \
@@ -1552,7 +1558,7 @@ typedef PGMRAMRANGE *PPGMRAMRANGE;
  * Calculates the RAM range TLB index for the physical address.
  *
  * @returns RAM range TLB index.
- * @param   GCPhys      The guest physical address.
+ * @param   a_GCPhys    The guest physical address.
  */
 #define PGM_RAMRANGE_TLB_IDX(a_GCPhys)      ( ((a_GCPhys) >> 20) & (PGM_RAMRANGE_TLB_ENTRIES - 1) )
 
@@ -2073,7 +2079,7 @@ typedef PGMMAPSET *PPGMMAPSET;
  * Pointer to a page mapper unit for current context. */
 /** @typedef PPPGMPAGEMAP
  * Pointer to a page mapper unit pointer for current context. */
-#ifdef IN_RC
+#if defined(IN_RC) && !defined(DOXYGEN_RUNNING)
 // typedef PPGMPAGEGCMAPTLB               PPGMPAGEMAPTLB;
 // typedef PPGMPAGEGCMAPTLBE              PPGMPAGEMAPTLBE;
 // typedef PPGMPAGEGCMAPTLBE             *PPPGMPAGEMAPTLBE;
@@ -3716,7 +3722,7 @@ typedef struct PGMCPUSTATS
     STAMCOUNTER StatRZSyncPagePDNAs;                /**< RC/R0: The number of time we've marked a PD not present from SyncPage to virtualize the accessed bit. */
     STAMCOUNTER StatRZSyncPagePDOutOfSync;          /**< RC/R0: The number of time we've encountered an out-of-sync PD in SyncPage. */
     STAMCOUNTER StatRZAccessedPage;                 /**< RC/R0: The number of pages marked not present for accessed bit emulation. */
-    STAMPROFILE StatRZDirtyBitTracking;             /**< RC/R0: Profiling the dirty bit tracking in CheckPageFault().. */
+    STAMPROFILE StatRZDirtyBitTracking;             /**< RC/R0: Profiling the dirty bit tracking in CheckPageFault(). */
     STAMCOUNTER StatRZDirtyPage;                    /**< RC/R0: The number of pages marked read-only for dirty bit tracking. */
     STAMCOUNTER StatRZDirtyPageBig;                 /**< RC/R0: The number of pages marked read-only for dirty bit tracking. */
     STAMCOUNTER StatRZDirtyPageSkipped;             /**< RC/R0: The number of pages already dirty or readonly. */
@@ -3800,14 +3806,14 @@ typedef struct PGMCPUSTATS
 /**
  * Converts a PGMCPU pointer into a VM pointer.
  * @returns Pointer to the VM structure the PGM is part of.
- * @param   pPGM   Pointer to PGMCPU instance data.
+ * @param   pPGM    Pointer to PGMCPU instance data.
  */
 #define PGMCPU2VM(pPGM)         ( (PVM)((char*)(pPGM) - (pPGM)->offVM) )
 
 /**
  * Converts a PGMCPU pointer into a PGM pointer.
  * @returns Pointer to the VM structure the PGM is part of.
- * @param   pPGM   Pointer to PGMCPU instance data.
+ * @param   pPGMCpu Pointer to PGMCPU instance data.
  */
 #define PGMCPU2PGM(pPGMCpu)     ( (PPGM)((char *)(pPGMCpu) - (pPGMCpu)->offPGM) )
 
diff --git a/src/VBox/VMM/include/SELMInline.h b/src/VBox/VMM/include/SELMInline.h
index 1dc97a9..7b8408b 100644
--- a/src/VBox/VMM/include/SELMInline.h
+++ b/src/VBox/VMM/include/SELMInline.h
@@ -98,7 +98,7 @@ DECLINLINE(bool) selmIsShwDescGoodForSReg(PCCPUMSELREG pSReg, PCX86DESC pShwDesc
  * register.
  *
  * @returns @c true if good, @c false if not.
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   pSReg               The segment register.
  * @param   pGstDesc            The guest descriptor table entry.
  * @param   iSReg               The segment register index (X86_SREG_XXX).
@@ -173,7 +173,7 @@ DECLINLINE(bool) selmIsGstDescGoodForSReg(PVMCPU pVCpu, PCCPUMSELREG pSReg, PCX8
 /**
  * Converts a guest GDT or LDT entry to a shadow table entry.
  *
- * @param   pVM                 The VM handle.
+ * @param   pVM                 The cross context VM structure.
  * @param   pDesc       Guest entry on input, shadow entry on return.
  */
 DECL_FORCE_INLINE(void) selmGuestToShadowDesc(PVM pVM, PX86DESC pDesc)
@@ -292,7 +292,7 @@ DECLINLINE(void) selmLoadHiddenSRegFromShadowDesc(PCPUMSELREG pSReg, PCX86DESC p
  * Loads the hidden bits of a selector register from a guest descriptor table
  * entry.
  *
- * @param   pVCpu               The current virtual CPU.
+ * @param   pVCpu               The cross context virtual CPU structure of the calling EMT.
  * @param   pSReg               The segment register in question.
  * @param   pGstDesc            The guest descriptor table entry.
  */
diff --git a/src/VBox/VMM/include/TMInternal.h b/src/VBox/VMM/include/TMInternal.h
index 6028f70..db8161e 100644
--- a/src/VBox/VMM/include/TMInternal.h
+++ b/src/VBox/VMM/include/TMInternal.h
@@ -766,8 +766,8 @@ int                     tmCpuTickResumeLocked(PVM pVM, PVMCPU pVCpu);
 
 int                     tmVirtualPauseLocked(PVM pVM);
 int                     tmVirtualResumeLocked(PVM pVM);
-DECLCALLBACK(DECLEXPORT(void))      tmVirtualNanoTSBadPrev(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS,
-                                                           uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS);
+DECLCALLBACK(DECLEXPORT(void))      tmVirtualNanoTSBad(PRTTIMENANOTSDATA pData, uint64_t u64NanoTS,
+                                                       uint64_t u64DeltaPrev, uint64_t u64PrevNanoTS);
 DECLCALLBACK(DECLEXPORT(uint64_t))  tmVirtualNanoTSRediscover(PRTTIMENANOTSDATA pData);
 DECLCALLBACK(DECLEXPORT(uint64_t))  tmVirtualNanoTSBadCpuIndex(PRTTIMENANOTSDATA pData, uint16_t idApic,
                                                                uint16_t iCpuSet, uint16_t iGipCpu);
diff --git a/src/VBox/VMM/include/TRPMInternal.h b/src/VBox/VMM/include/TRPMInternal.h
index d095455..38b88f4 100644
--- a/src/VBox/VMM/include/TRPMInternal.h
+++ b/src/VBox/VMM/include/TRPMInternal.h
@@ -75,7 +75,7 @@ RT_C_DECLS_BEGIN
 /**
  * Converts a TRPM pointer into a VM pointer.
  * @returns Pointer to the VM structure the TRPM is part of.
- * @param   pTRPM   Pointer to TRPM instance data.
+ * @param   pTRPM       Pointer to TRPM instance data.
  */
 #define TRPM_2_VM(pTRPM)            ( (PVM)((uint8_t *)(pTRPM) - (pTRPM)->offVM) )
 #endif
@@ -83,7 +83,7 @@ RT_C_DECLS_BEGIN
 /**
  * Converts a TRPM pointer into a TRPMCPU pointer.
  * @returns Pointer to the VM structure the TRPMCPU is part of.
- * @param   pTRPM   Pointer to TRPMCPU instance data.
+ * @param   pTrpmCpu    Pointer to TRPMCPU instance data.
  * @remarks Raw-mode only, not SMP safe.
  */
 #define TRPM_2_TRPMCPU(pTrpmCpu)     ( (PTRPMCPU)((uint8_t *)(pTrpmCpu) + (pTrpmCpu)->offTRPMCPU) )
@@ -108,13 +108,13 @@ typedef struct TRPM
      *
      * This configuration option is provided for speeding up guest like Solaris
      * that put the IDT on the same page as a whole lot of other data that is
-     * frequently updated. The updates will cause #PFs and have to be interpreted
+     * frequently updated. The updates will cause \#PFs and have to be interpreted
      * by PGMInterpretInstruction which is slow compared to raw execution.
      *
      * If the guest is well behaved and doesn't change the IDT after loading it,
      * there is no problem with dropping the IDT monitoring.
      *
-     * @cfgm    /TRPM/SafeToDropGuestIDTMonitoring   boolean     defaults to false.
+     * @cfgm{/TRPM/SafeToDropGuestIDTMonitoring, boolean, defaults to false.}
      */
     bool                    fSafeToDropGuestIDTMonitoring;
 
@@ -161,7 +161,7 @@ typedef struct TRPM
     STAMCOUNTER             StatForwardFailRZ;
 
     STAMPROFILE             StatTrap0dDisasm;
-    STAMCOUNTER             StatTrap0dRdTsc;    /**< Number of RDTSC #GPs. */
+    STAMCOUNTER             StatTrap0dRdTsc;    /**< Number of RDTSC \#GPs. */
 
 #ifdef VBOX_WITH_STATISTICS
     /** Statistics for interrupt handlers (allocated on the hypervisor heap) - R3
@@ -184,14 +184,14 @@ typedef TRPM *PTRPM;
 /**
  * Converts a TRPMCPU pointer into a VM pointer.
  * @returns Pointer to the VM structure the TRPMCPU is part of.
- * @param   pTRPM   Pointer to TRPMCPU instance data.
+ * @param   pTrpmCpu    Pointer to TRPMCPU instance data.
  */
 #define TRPMCPU_2_VM(pTrpmCpu)      ( (PVM)((uint8_t *)(pTrpmCpu) - (pTrpmCpu)->offVM) )
 
 /**
  * Converts a TRPMCPU pointer into a VMCPU pointer.
  * @returns Pointer to the VMCPU structure the TRPMCPU is part of.
- * @param   pTRPM   Pointer to TRPMCPU instance data.
+ * @param   pTrpmCpu    Pointer to TRPMCPU instance data.
  */
 #define TRPMCPU_2_VMCPU(pTrpmCpu)   ( (PVMCPU)((uint8_t *)(pTrpmCpu) - (pTrpmCpu)->offVMCpu) )
 
@@ -239,8 +239,8 @@ typedef struct TRPMCPU
     /** Previous trap vector # - for debugging. */
     RTGCUINT                uPrevVector;
 
-    /** Instruction length for software interrupts and software exceptions (#BP,
-     *  #OF) */
+    /** Instruction length for software interrupts and software exceptions
+     * (\#BP, \#OF) */
     uint8_t                 cbInstr;
 
     /** Saved instruction length. */
@@ -264,7 +264,7 @@ DECLEXPORT(FNPGMRCVIRTPFHANDLER)    trpmRCShadowIDTWritePfHandler;
  * Clear guest trap/interrupt gate handler
  *
  * @returns VBox status code.
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   iTrap       Interrupt/trap number.
  */
 VMMDECL(int) trpmClearGuestTrapHandler(PVM pVM, unsigned iTrap);
diff --git a/src/VBox/VMM/include/VMMInternal.h b/src/VBox/VMM/include/VMMInternal.h
index 45abd3b..1b698e1 100644
--- a/src/VBox/VMM/include/VMMInternal.h
+++ b/src/VBox/VMM/include/VMMInternal.h
@@ -49,7 +49,7 @@
  *
  * Ring-0 logging isn't 100% safe yet (thread id reuse / process exit cleanup),
  * so you have to sign up here by adding your defined(DEBUG_<userid>) to the
- * #if, or by adding VBOX_WITH_R0_LOGGING to your LocalConfig.kmk.
+ * \#if, or by adding VBOX_WITH_R0_LOGGING to your LocalConfig.kmk.
  */
 #if defined(DEBUG_sandervl) || defined(DEBUG_frank) || defined(DEBUG_ramshankar) || defined(DOXYGEN_RUNNING)
 # define VBOX_WITH_R0_LOGGING
@@ -73,7 +73,7 @@
 /**
  * Switcher function, HC to RC.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @returns Return code indicating the action to take.
  */
 typedef DECLASMTYPE(int) FNVMMSWITCHERHC(PVM pVM);
@@ -513,7 +513,7 @@ typedef enum VMMRCOPERATION
     VMMRC_DO_TESTCASE_HYPER_INTERRUPT,
     /** Switching testing and profiling stub. */
     VMMRC_DO_TESTCASE_NOP,
-    /** Testcase for checking interrupt masking.. */
+    /** Testcase for checking interrupt masking. */
     VMMRC_DO_TESTCASE_INTERRUPT_MASKING,
     /** Switching testing and profiling stub. */
     VMMRC_DO_TESTCASE_HM_NOP,
@@ -557,8 +557,8 @@ void vmmR3SwitcherRelocate(PVM pVM, RTGCINTPTR offDelta);
  * It will call VMMRCEntry().
  *
  * @returns return code from VMMRCEntry().
- * @param   pVM     Pointer to the VM.
- * @param   uArg    See VMMRCEntry().
+ * @param   pVM         The cross context VM structure.
+ * @param   uArg        See VMMRCEntry().
  * @internal
  */
 DECLASM(int)    vmmR0WorldSwitch(PVM pVM, unsigned uArg);
@@ -567,7 +567,7 @@ DECLASM(int)    vmmR0WorldSwitch(PVM pVM, unsigned uArg);
  * Callback function for vmmR0CallRing3SetJmp.
  *
  * @returns VBox status code.
- * @param   pVM     Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  */
 typedef DECLCALLBACK(int) FNVMMR0SETJMP(PVM pVM, PVMCPU pVCpu);
 /** Pointer to FNVMMR0SETJMP(). */
@@ -582,8 +582,9 @@ typedef FNVMMR0SETJMP *PFNVMMR0SETJMP;
  *
  * @returns VINF_SUCCESS on success or whatever is passed to vmmR0CallRing3LongJmp.
  * @param   pJmpBuf     The jmp_buf to set.
- * @param   pfn         The function to be called when not resuming..
- * @param   pVM         The argument of that function.
+ * @param   pfn         The function to be called when not resuming.
+ * @param   pVM         The cross context VM structure.
+ * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
  */
 DECLASM(int)    vmmR0CallRing3SetJmp(PVMMR0JMPBUF pJmpBuf, PFNVMMR0SETJMP pfn, PVM pVM, PVMCPU pVCpu);
 
@@ -602,7 +603,7 @@ typedef FNVMMR0SETJMPEX *PFNVMMR0SETJMPEX;
  *
  * @returns VINF_SUCCESS on success or whatever is passed to vmmR0CallRing3LongJmp.
  * @param   pJmpBuf     The jmp_buf to set.
- * @param   pfn         The function to be called when not resuming..
+ * @param   pfn         The function to be called when not resuming.
  * @param   pvUser      The argument of that function.
  */
 DECLASM(int)    vmmR0CallRing3SetJmpEx(PVMMR0JMPBUF pJmpBuf, PFNVMMR0SETJMPEX pfn, void *pvUser);
@@ -613,8 +614,8 @@ DECLASM(int)    vmmR0CallRing3SetJmpEx(PVMMR0JMPBUF pJmpBuf, PFNVMMR0SETJMPEX pf
  * This will save the stack and registers.
  *
  * @returns rc.
- * @param   pJmpBuf         Pointer to the jump buffer.
- * @param   rc              The return code.
+ * @param   pJmpBuf     Pointer to the jump buffer.
+ * @param   rc          The return code.
  */
 DECLASM(int)    vmmR0CallRing3LongJmp(PVMMR0JMPBUF pJmpBuf, int rc);
 
diff --git a/src/VBox/VMM/include/VMMSwitcher.h b/src/VBox/VMM/include/VMMSwitcher.h
index 2141d41..accb0d0 100644
--- a/src/VBox/VMM/include/VMMSwitcher.h
+++ b/src/VBox/VMM/include/VMMSwitcher.h
@@ -67,7 +67,7 @@ typedef struct VMMSWITCHERDEF *PVMMSWITCHERDEF;
 /**
  * Callback function for relocating the core code belonging to a switcher.
  *
- * @param   pVM         Pointer to the VM.
+ * @param   pVM         The cross context VM structure.
  * @param   pSwitcher   Pointer to the switcher structure.
  * @param   R0PtrCode   Pointer to the first code byte in the ring-0 mapping.
  * @param   pu8CodeR3   Pointer to the first code byte in the ring-3 mapping.
diff --git a/src/VBox/VMM/tools/VBoxCpuReport.cpp b/src/VBox/VMM/tools/VBoxCpuReport.cpp
index d2fea48..32acaf4 100644
--- a/src/VBox/VMM/tools/VBoxCpuReport.cpp
+++ b/src/VBox/VMM/tools/VBoxCpuReport.cpp
@@ -507,7 +507,11 @@ static int findMsrs(VBCPUREPMSR **ppaMsrs, uint32_t *pcMsrs, uint32_t fMsrMask)
             }
 #endif
             /* Skip 0xc0011012..13 as it seems to be bad for our health (Phenom II X6 1100T). */
-            if ((uMsr >= 0xc0011012 && uMsr <= 0xc0011013) && g_enmVendor == CPUMCPUVENDOR_AMD)
+            /* Ditto for 0x0000002a (EBL_CR_POWERON) and 0x00000277 (MSR_IA32_CR_PAT) on Intel (Atom 330). */
+            if (   ((uMsr >= 0xc0011012 && uMsr <= 0xc0011013) && g_enmVendor == CPUMCPUVENDOR_AMD)
+                || (   (uMsr == 0x2a || uMsr == 0x277)
+                    && g_enmVendor == CPUMCPUVENDOR_INTEL
+                    && g_enmMicroarch == kCpumMicroarch_Intel_Atom_Bonnell))
                 vbCpuRepDebug("Skipping %#x\n", uMsr);
             else
             {
@@ -3516,7 +3520,9 @@ static int reportMsr_Ia32McCtlStatusAddrMiscN(VBCPUREPMSR const *paMsrs, uint32_
     while (   cDetectedRegs < cMsrs
            && (   paMsrs[cDetectedRegs].uMsr == uMsr + cRegs
                || (cRegs & 3) == 2 /* ADDR may or may not be there, depends on STATUS and CPU. */
-               || (cRegs & 3) == 3 /* MISC may or may not be there, depends on STATUS and CPU. */)
+               || (cRegs & 3) == 3 /* MISC may or may not be there, depends on STATUS and CPU. */
+               || cRegs == 0x13 /* MC4_MISC may not be there, depends on CPU. */
+               || cRegs == 0x14 /* MC5_CTL may not be there, depends on CPU. */)
            && cRegs < 0x7f )
     {
         if (paMsrs[cDetectedRegs].uMsr == uMsr + cRegs)
diff --git a/src/VBox/ValidationKit/utils/TestExecServ/TestExecServiceTcp.cpp b/src/VBox/ValidationKit/utils/TestExecServ/TestExecServiceTcp.cpp
index 116d1af..6f0cb44 100644
--- a/src/VBox/ValidationKit/utils/TestExecServ/TestExecServiceTcp.cpp
+++ b/src/VBox/ValidationKit/utils/TestExecServ/TestExecServiceTcp.cpp
@@ -169,7 +169,7 @@ static DECLCALLBACK(int) txsTcpServerConnectThread(RTTHREAD hSelf, void *pvUser)
  * Checks if it's a fatal RTTcpClientConnect return code.
  *
  * @returns true / false.
- * @param   rc              The iprt status.
+ * @param   rc              The IPRT status code.
  */
 static bool txsTcpIsFatalClientConnectStatus(int rc)
 {
diff --git a/src/VBox/ValidationKit/utils/cpu/cidet.h b/src/VBox/ValidationKit/utils/cpu/cidet.h
index 7a6c996..751288e 100644
--- a/src/VBox/ValidationKit/utils/cpu/cidet.h
+++ b/src/VBox/ValidationKit/utils/cpu/cidet.h
@@ -106,7 +106,7 @@
 /**
  * Callback function for setting up the input and expected output CPU contexts.
  *
- * @returns VBox status.
+ * @returns VBox status code.
  * @retval  VINF_EOF when static test data wraps (first entry is returned).
  * @retval  VERR_NO_DATA if @a fInvalid is set and there are no invalid operand
  *          values for this instruction.
diff --git a/src/VBox/ValidationKit/utils/network/NetPerf.cpp b/src/VBox/ValidationKit/utils/network/NetPerf.cpp
index 4a328a1..1064b9b 100644
--- a/src/VBox/ValidationKit/utils/network/NetPerf.cpp
+++ b/src/VBox/ValidationKit/utils/network/NetPerf.cpp
@@ -330,7 +330,7 @@ static DECLCALLBACK(void) netperfStopTimerCallback(RTTIMERLR hTimer, void *pvUse
 /**
  * Sends a statistics packet to our peer.
  *
- * @returns IPRT status.
+ * @returns IPRT status code.
  * @param   pStats              The stats to send.
  * @param   hSocket             The TCP socket to send them to.
  */
@@ -1863,7 +1863,7 @@ int main(int argc, char *argv[])
                 return RTEXITCODE_SUCCESS;
 
             case 'V':
-                RTPrintf("$Revision: 102181 $\n");
+                RTPrintf("$Revision: 103604 $\n");
                 return RTEXITCODE_SUCCESS;
 
             case 'w':
diff --git a/src/libs/xpcom18a4/nsprpub/lib/ds/plarena.c b/src/libs/xpcom18a4/nsprpub/lib/ds/plarena.c
index 34d675f..e61efbe 100644
--- a/src/libs/xpcom18a4/nsprpub/lib/ds/plarena.c
+++ b/src/libs/xpcom18a4/nsprpub/lib/ds/plarena.c
@@ -115,6 +115,9 @@ PR_IMPLEMENT(void) PL_InitArenaPool(
         align = PL_ARENA_DEFAULT_ALIGN;
     pool->mask = PR_BITMASK(PR_CeilingLog2(align));
     pool->first.next = NULL;
+    /* Set all three addresses in pool->first to the same dummy value.
+     * These addresses are only compared with each other, but never
+     * dereferenced. */
     pool->first.base = pool->first.avail = pool->first.limit =
         (PRUword)PL_ARENA_ALIGN(pool, &pool->first + 1);
     pool->current = &pool->first;
@@ -158,10 +161,14 @@ PR_IMPLEMENT(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb)
 {
     PLArena *a;   
     char *rp;     /* returned pointer */
+    PRUint32 nbOld;
 
     PR_ASSERT((nb & pool->mask) == 0);
     
+    nbOld = nb;
     nb = (PRUword)PL_ARENA_ALIGN(pool, nb); /* force alignment */
+    if (nb < nbOld)
+        return NULL;
 
     /* attempt to allocate from arenas at pool->current */
     {
@@ -217,6 +224,7 @@ PR_IMPLEMENT(void *) PL_ArenaAllocate(PLArenaPool *pool, PRUint32 nb)
             a->base = a->avail = (PRUword)PL_ARENA_ALIGN(pool, a + 1);
             rp = (char *)a->avail;
             a->avail += nb;
+            PR_ASSERT(a->avail <= a->limit);
             /* the newly allocated arena is linked after pool->current 
             *  and becomes pool->current */
             a->next = pool->current->next;
@@ -239,6 +247,8 @@ PR_IMPLEMENT(void *) PL_ArenaGrow(
 {
     void *newp;
 
+    if (PR_UINT32_MAX - size < incr)
+        return NULL;
     PL_ARENA_ALLOCATE(newp, pool, size + incr);
     if (newp)
         memcpy(newp, p, size);
diff --git a/src/libs/xpcom18a4/nsprpub/lib/ds/plarena.h b/src/libs/xpcom18a4/nsprpub/lib/ds/plarena.h
index 38f3e39..174bd97 100644
--- a/src/libs/xpcom18a4/nsprpub/lib/ds/plarena.h
+++ b/src/libs/xpcom18a4/nsprpub/lib/ds/plarena.h
@@ -108,31 +108,37 @@ struct PLArenaPool {
 #define PL_ARENA_ALLOCATE(p, pool, nb) \
     PR_BEGIN_MACRO \
         PLArena *_a = (pool)->current; \
-        PRUint32 _nb = PL_ARENA_ALIGN(pool, nb); \
+        PRUint32 _nb = PL_ARENA_ALIGN(pool, (PRUint32)nb); \
         PRUword _p = _a->avail; \
-        PRUword _q = _p + _nb; \
-        if (_q > _a->limit) \
+        if (_nb < (PRUint32)nb) { \
+            _p = 0; \
+        } else if (_nb > (_a->limit - _a->avail)) { \
             _p = (PRUword)PL_ArenaAllocate(pool, _nb); \
-        else \
-            _a->avail = _q; \
+        } else { \
+            _a->avail += _nb; \
+        } \
         p = (void *)_p; \
-        PL_ArenaCountAllocation(pool, nb); \
+        if (p) { \
+            PL_ArenaCountAllocation(pool, nb); \
+        } \
     PR_END_MACRO
 
 #define PL_ARENA_GROW(p, pool, size, incr) \
     PR_BEGIN_MACRO \
         PLArena *_a = (pool)->current; \
-        PRUint32 _incr = PL_ARENA_ALIGN(pool, incr); \
-        PRUword _p = _a->avail; \
-        PRUword _q = _p + _incr; \
-        if (_p == (PRUword)(p) + PL_ARENA_ALIGN(pool, size) && \
-            _q <= _a->limit) { \
-            _a->avail = _q; \
-            PL_ArenaCountInplaceGrowth(pool, size, incr); \
+        PRUint32 _incr = PL_ARENA_ALIGN(pool, (PRUint32)incr); \
+        if (_incr < (PRUint32)incr) { \
+            p = NULL; \
+        } else if (_a->avail == (PRUword)(p) + PL_ARENA_ALIGN(pool, size) && \
+            _incr <= (_a->limit - _a->avail)) { \
+            _a->avail = _incr; \
+            PL_ArenaCountInplaceGrowth(pool, size, (RTUint32)incr); \
         } else { \
-            p = PL_ArenaGrow(pool, p, size, incr); \
+            p = PL_ArenaGrow(pool, p, size, (PRUint32)incr); \
+        } \
+        if (p) { \
+            PL_ArenaCountGrowth(pool, size, (PRUint32)incr); \
         } \
-        PL_ArenaCountGrowth(pool, size, incr); \
     PR_END_MACRO
 
 #define PL_ARENA_MARK(pool) ((void *) (pool)->current->avail)
diff --git a/src/recompiler/VBoxRecompiler.c b/src/recompiler/VBoxRecompiler.c
index 3d87415..595a62d 100644
--- a/src/recompiler/VBoxRecompiler.c
+++ b/src/recompiler/VBoxRecompiler.c
@@ -3524,25 +3524,26 @@ REMR3DECL(bool) REMR3IsPageAccessHandled(PVM pVM, RTGCPHYS GCPhys)
  * @param   env         The cpu environment.
  * @param   addr        The virtual address.
  * @param   pTLBEntry   The TLB entry.
+ * @param   IoTlbEntry  The I/O TLB entry address.
  */
 target_ulong remR3PhysGetPhysicalAddressCode(CPUX86State       *env,
                                              target_ulong       addr,
                                              CPUTLBEntry       *pTLBEntry,
-                                             target_phys_addr_t ioTLBEntry)
+                                             target_phys_addr_t IoTlbEntry)
 {
     PVM pVM = env->pVM;
 
-    if ((ioTLBEntry & ~TARGET_PAGE_MASK) == pVM->rem.s.iHandlerMemType)
+    if ((IoTlbEntry & ~TARGET_PAGE_MASK) == pVM->rem.s.iHandlerMemType)
     {
         /* If code memory is being monitored, appropriate IOTLB entry will have
            handler IO type, and addend will provide real physical address, no
            matter if we store VA in TLB or not, as handlers are always passed PA */
-        target_ulong ret = (ioTLBEntry & TARGET_PAGE_MASK) + addr;
+        target_ulong ret = (IoTlbEntry & TARGET_PAGE_MASK) + addr;
         return ret;
     }
     LogRel(("\nTrying to execute code with memory type addr_code=%RGv addend=%RGp at %RGv! (iHandlerMemType=%#x iMMIOMemType=%#x IOTLB=%RGp)\n"
             "*** handlers\n",
-            (RTGCPTR)pTLBEntry->addr_code, (RTGCPHYS)pTLBEntry->addend, (RTGCPTR)addr, pVM->rem.s.iHandlerMemType, pVM->rem.s.iMMIOMemType, (RTGCPHYS)ioTLBEntry));
+            (RTGCPTR)pTLBEntry->addr_code, (RTGCPHYS)pTLBEntry->addend, (RTGCPTR)addr, pVM->rem.s.iHandlerMemType, pVM->rem.s.iMMIOMemType, (RTGCPHYS)IoTlbEntry));
     DBGFR3Info(pVM->pUVM, "handlers", NULL, DBGFR3InfoLogRelHlp());
     LogRel(("*** mmio\n"));
     DBGFR3Info(pVM->pUVM, "mmio", NULL, DBGFR3InfoLogRelHlp());
@@ -4093,7 +4094,7 @@ bool remR3DisasInstr(CPUX86State *env, int f32BitCode, char *pszPrefix)
  * @param   pvCode          Pointer to the code block.
  * @param   cb              Size of the code block.
  */
-void disas(FILE *phFile, void *pvCode, unsigned long cb)
+void disas(FILE *phFileIgnored, void *pvCode, unsigned long cb)
 {
     if (LogIs2Enabled())
     {
@@ -4133,7 +4134,7 @@ void disas(FILE *phFile, void *pvCode, unsigned long cb)
  * @param   cb              Number of bytes to disassemble.
  * @param   fFlags          Flags, probably something which tells if this is 16, 32 or 64 bit code.
  */
-void target_disas(FILE *phFile, target_ulong uCode, target_ulong cb, int fFlags)
+void target_disas(FILE *phFileIgnored, target_ulong uCode, target_ulong cb, int fFlags)
 {
     if (LogIs2Enabled())
     {
@@ -4582,8 +4583,8 @@ int cpu_rdmsr(CPUX86State *env, uint32_t idMsr, uint64_t *puValue)
  * @retval 0 success.
  * @retval -1 failure, raise \#GP(0).
  * @param   env     The cpu state.
- * @param   idMsr   The MSR to read.
- * @param   puValue Where to return the value.
+ * @param   idMsr   The MSR to write to.
+ * @param   uValue  The value to write.
  */
 int cpu_wrmsr(CPUX86State *env, uint32_t idMsr, uint64_t uValue)
 {
@@ -4716,10 +4717,10 @@ uint32_t cpu_inl(CPUX86State *env, pio_addr_t addr)
  * @param   env         Pointer to the recompiler CPU structure.
  * @param   idx         The CPUID leaf (eax).
  * @param   idxSub      The CPUID sub-leaf (ecx) where applicable.
- * @param   pvEAX       Where to store eax.
- * @param   pvEBX       Where to store ebx.
- * @param   pvECX       Where to store ecx.
- * @param   pvEDX       Where to store edx.
+ * @param   pEAX        Where to store eax.
+ * @param   pEBX        Where to store ebx.
+ * @param   pECX        Where to store ecx.
+ * @param   pEDX        Where to store edx.
  */
 void cpu_x86_cpuid(CPUX86State *env, uint32_t idx, uint32_t idxSub,
                    uint32_t *pEAX, uint32_t *pEBX, uint32_t *pECX, uint32_t *pEDX)

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