[Pkg-virtualbox-commits] [virtualbox] 01/03: Imported Upstream version 5.0.16-dfsg

Gianfranco Costamagna locutusofborg-guest at moszumanska.debian.org
Sat Mar 5 10:01:02 UTC 2016


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

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

commit 5b9ed2710f939884115f8b4e4320fd29907410dd
Author: Gianfranco Costamagna <costamagnagianfranco at yahoo.it>
Date:   Sat Mar 5 10:48:51 2016 +0100

    Imported Upstream version 5.0.16-dfsg
---
 Config.kmk                                         |   91 +-
 doc/manual/docbook2latex.xsl                       |    1 +
 doc/manual/en_US/user_AdvancedTopics.xml           |  150 +-
 doc/manual/en_US/user_BasicConcepts.xml            |    4 +-
 doc/manual/en_US/user_GuestAdditions.xml           |    7 +
 doc/manual/user_ChangeLogImpl.xml                  |  139 +-
 include/VBox/vmm/pdmaudioifs.h                     |   26 +-
 include/VBox/vmm/pdmdev.h                          |   24 +-
 include/iprt/process.h                             |    3 +-
 include/iprt/x86.h                                 |   91 +-
 .../common/VBoxService/VBoxServiceControl.h        |    2 +
 .../VBoxService/VBoxServiceControlProcess.cpp      |   46 +-
 .../VBoxService/VBoxServiceControlSession.cpp      |   61 +-
 .../common/VBoxService/VBoxServiceVMInfo-win.cpp   |    2 +-
 src/VBox/Debugger/Makefile.kmk                     |    1 +
 src/VBox/Devices/Audio/DevIchAc97.cpp              |  101 +-
 src/VBox/Devices/Audio/DevIchHda.cpp               |  341 +-
 src/VBox/Devices/Audio/DevIchHdaCodec.h            |    2 +-
 src/VBox/Devices/Audio/DevSB16.cpp                 |    8 +-
 src/VBox/Devices/Audio/DrvAudio.cpp                |  391 +-
 src/VBox/Devices/Audio/DrvAudio.h                  |   22 +-
 src/VBox/Devices/Audio/DrvAudioCommon.cpp          |    5 -
 src/VBox/Devices/Audio/DrvHostALSAAudio.cpp        |   52 +-
 src/VBox/Devices/Audio/DrvHostCoreAudio.cpp        |  178 +-
 src/VBox/Devices/Audio/DrvHostDSound.cpp           |  497 ++-
 src/VBox/Devices/Audio/DrvHostPulseAudio.cpp       |   10 +-
 src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd      |  Bin 1048576 -> 1048576 bytes
 src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd      |  Bin 1048576 -> 1048576 bytes
 .../Graphics/BIOS/VBoxVgaBiosAlternative.asm       |    6 +-
 .../Graphics/BIOS/VBoxVgaBiosAlternative.md5sum    |    2 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA.cpp          |   47 +-
 src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp    |  120 +-
 src/VBox/Devices/Graphics/VBoxSVGA3D.def           |    2 +
 src/VBox/Devices/Graphics/shaderlib/glsl_shader.c  |   47 +
 src/VBox/Devices/Graphics/shaderlib/shaderapi.c    |   47 +-
 src/VBox/Devices/Graphics/shaderlib/shaderlib.h    |    4 +-
 src/VBox/Devices/Input/testcase/Makefile.kmk       |    4 +-
 src/VBox/Devices/Network/DevEEPROM.cpp             |    5 +-
 src/VBox/Devices/Network/slirp/tcp_input.c         |   10 +-
 src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm   |    8 +-
 .../Devices/PC/BIOS/VBoxBiosAlternative.md5sum     |    2 +-
 src/VBox/Devices/PC/BIOS/system.c                  |    4 +-
 src/VBox/Devices/PC/DevACPI.cpp                    |   75 +-
 src/VBox/Devices/PC/DevPit-i8254.cpp               |  216 +-
 src/VBox/Devices/PC/ipxe/iPxeBiosBin.rom           |  Bin 53248 -> 54272 bytes
 src/VBox/Devices/PC/vbox.dsl                       |   75 +-
 src/VBox/Devices/Serial/DrvTCP.cpp                 |   14 +
 .../Devices/testcase/tstDeviceStructSizeRC.cpp     |    2 +-
 src/VBox/Frontends/Makefile.kmk                    |    1 +
 .../VBoxBugReport}/Makefile.kmk                    |   26 +-
 src/VBox/Frontends/VBoxBugReport/VBoxBugReport.cpp |  636 ++++
 src/VBox/Frontends/VBoxBugReport/VBoxBugReport.h   |  231 ++
 .../Frontends/VBoxBugReport/VBoxBugReportWin.cpp   |  585 +++
 src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp   |    2 +-
 src/VBox/Frontends/VirtualBox/Makefile.kmk         |    3 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts | 3725 +++++++++-----------
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts |   10 +-
 src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts |   46 +-
 src/VBox/Frontends/VirtualBox/nls/qt_el.ts         |  126 +-
 .../VirtualBox/src/extradata/UIExtraDataDefs.cpp   |    1 +
 .../VirtualBox/src/extradata/UIExtraDataDefs.h     |    2 +
 .../src/extradata/UIExtraDataManager.cpp           |   59 +-
 .../VirtualBox/src/extradata/UIExtraDataManager.h  |    7 +
 .../VirtualBox/src/globals/UIMessageCenter.cpp     |    1 +
 .../VirtualBox/src/globals/VBoxGlobal.cpp          |   30 +-
 .../Frontends/VirtualBox/src/globals/VBoxGlobal.h  |    8 +-
 src/VBox/Frontends/VirtualBox/src/main.cpp         |   12 +-
 .../VirtualBox/src/medium/UIMediumEnumerator.cpp   |    6 +-
 .../platform/darwin/UIAbstractDockIconPreview.cpp  |   83 +-
 .../platform/darwin/UIAbstractDockIconPreview.h    |    5 -
 .../VirtualBox/src/runtime/UIActionPoolRuntime.cpp |   24 +-
 .../VirtualBox/src/runtime/UIActionPoolRuntime.h   |    1 +
 .../Frontends/VirtualBox/src/runtime/UIMachine.cpp |    8 +-
 .../VirtualBox/src/runtime/UIMachineLogic.cpp      |   63 +-
 .../VirtualBox/src/runtime/UIMachineLogic.h        |    4 +
 .../VirtualBox/src/runtime/UIMachineWindow.cpp     |    4 +
 .../Frontends/VirtualBox/src/runtime/UISession.cpp |   17 +
 .../VirtualBox/src/selector/UISelectorWindow.cpp   |    4 +
 .../settings/machine/UIMachineSettingsSystem.cpp   |    6 +
 .../settings/machine/UIMachineSettingsSystem.ui    |   89 +-
 src/VBox/HostDrivers/Support/SUPLibInternal.h      |    2 +-
 src/VBox/HostDrivers/Support/linux/Makefile        |    4 +-
 .../Support/win/SUPHardenedVerifyImage-win.cpp     |   10 +-
 src/VBox/HostDrivers/Support/win/SUPLib-win.cpp    |    2 +-
 .../Support/win/SUPR3HardenedMain-win.cpp          |    8 +-
 src/VBox/HostDrivers/VBoxNetAdp/linux/Makefile     |    4 +-
 .../HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.cpp  |   10 +-
 src/VBox/HostDrivers/VBoxNetFlt/linux/Makefile     |    4 +-
 .../VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp          |  164 +-
 .../HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf  |   10 +-
 src/VBox/HostDrivers/VBoxPci/linux/Makefile        |    4 +-
 src/VBox/HostServices/SharedFolders/mappings.cpp   |   66 +-
 src/VBox/HostServices/SharedFolders/mappings.h     |    6 +-
 src/VBox/HostServices/SharedFolders/service.cpp    |   24 +-
 src/VBox/HostServices/SharedFolders/vbsf.cpp       |   17 +-
 src/VBox/Installer/common/vboxapisetup.py          |    6 +-
 src/VBox/Installer/linux/Makefile.include.footer   |    5 +-
 src/VBox/Installer/linux/install.sh                |    2 +-
 src/VBox/Installer/linux/postinst-common.sh        |    5 +-
 src/VBox/Installer/linux/prerm-common.sh           |    5 +-
 src/VBox/Installer/linux/routines.sh               |    5 +-
 src/VBox/Installer/linux/rpm/rules                 |    1 +
 src/VBox/Installer/win/Makefile.kmk                |    6 +-
 src/VBox/Installer/win/VBoxMergeApp.wxi            |    2 +
 src/VBox/Main/include/ConsoleImpl.h                |    2 -
 src/VBox/Main/include/ParallelPortImpl.h           |    9 +-
 src/VBox/Main/include/SerialPortImpl.h             |   31 +-
 src/VBox/Main/include/VirtualBoxImpl.h             |    1 +
 src/VBox/Main/src-client/ConsoleImpl.cpp           |    1 +
 src/VBox/Main/src-client/ConsoleImpl2.cpp          |  158 +-
 src/VBox/Main/src-client/DisplayImpl.cpp           |    1 +
 src/VBox/Main/src-client/DrvAudioVRDE.cpp          |    2 +-
 src/VBox/Main/src-server/MachineImpl.cpp           |   53 +-
 src/VBox/Main/src-server/ParallelPortImpl.cpp      |   59 +-
 src/VBox/Main/src-server/SerialPortImpl.cpp        |  103 +-
 src/VBox/Main/src-server/VirtualBoxImpl.cpp        |  148 +
 src/VBox/Main/webservice/Makefile.kmk              |    4 +-
 src/VBox/Main/webservice/vboxweb.cpp               |  168 +-
 src/VBox/Main/webservice/vboxweb.h                 |   11 +-
 src/VBox/Main/webservice/websrv-python.xsl         |   13 +-
 src/VBox/Main/xml/VirtualBox-settings.xsd          |    6 +-
 src/VBox/Runtime/common/crypto/pkcs7-sanity.cpp    |    2 -
 src/VBox/Runtime/r3/win/VBoxRT-openssl.def         |   33 +-
 src/VBox/Runtime/r3/win/process-win.cpp            |  342 +-
 src/VBox/Runtime/win/RTErrConvertFromWin32.cpp     |    5 +-
 src/VBox/VMM/VMMAll/GIMAllHv.cpp                   |   18 +-
 src/VBox/VMM/VMMR0/HMSVMR0.cpp                     |    1 +
 src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp                 |    2 +-
 src/VBox/VMM/VMMR3/PDMDevHlp.cpp                   |    6 +-
 src/libs/Makefile.kmk                              |    6 +-
 130 files changed, 6834 insertions(+), 3493 deletions(-)

diff --git a/Config.kmk b/Config.kmk
index 49e397e..29f8056 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 = 14
+VBOX_VERSION_BUILD = 16
 # 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.
@@ -2734,13 +2734,26 @@ ifdef VBOX_SIGNING_MODE
 
   # VBOX_PATH_SELFSIGN points to the Vista WDK bin/SelfSign directory.
   ifndef VBOX_PATH_SELFSIGN
-   VBOX_PATH_SELFSIGN := $(lastword $(sort $(wildcard $(KBUILD_DEVTOOLS)/win.x86/selfsign/*)))
+   VBOX_PATH_SELFSIGN := $(firstword $(rsort $(wildcard $(KBUILD_DEVTOOLS)/win.x86/selfsign/*)))
    ifeq ($(VBOX_PATH_SELFSIGN),)
     VBOX_PATH_SELFSIGN := $(KBUILD_DEVTOOLS)/win.x86/selfsign/r1
    endif
   endif
-  VBOX_SIGNTOOL ?= $(KBUILD_DEVTOOLS)/bin/retry.cmd $(VBOX_PATH_SELFSIGN)/SignTool.exe
-  VBOX_INF2CAT  ?= $(VBOX_PATH_SELFSIGN)/Inf2Cat.exe
+  ifndef VBOX_PATH_SIGN_TOOLS
+   VBOX_PATH_SIGN_TOOLS := $(firstword $(rsort $(wildcard \
+   	$(addprefix $(KBUILD_DEVTOOLS)/win.x86/sdk/v8.1*/Bin/, x86 $(if-expr $(KBUILD_HOST_ARCH)=="amd64",x64,) ) )))
+   ifeq ($(VBOX_PATH_SIGN_TOOLS),)
+    VBOX_PATH_SIGN_TOOLS := $(firstword $(rsort $(wildcard \
+    	$(addprefix $(KBUILD_DEVTOOLS)/win.x86/sdk/v10*/Bin/, x86 $(if-expr $(KBUILD_HOST_ARCH)=="amd64",x64,) ) )))
+    ifeq ($(VBOX_PATH_SIGN_TOOLS),)
+     VBOX_PATH_SIGN_TOOLS := $(VBOX_PATH_SELFSIGN)
+    endif
+   endif
+  endif
+
+  VBOX_RETRY    ?= $(ASH) $(KBUILD_DEVTOOLS)/bin/retry.sh
+  VBOX_SIGNTOOL ?= $(VBOX_RETRY) "$(VBOX_PATH_SIGN_TOOLS)/signtool.exe"
+  VBOX_INF2CAT  ?= $(VBOX_PATH_SELFSIGN)/inf2cat.exe
 
   ifeq ($(VBOX_SIGNING_MODE),test)
    VBOX_CERTIFICATE_SUBJECT_NAME ?= MyTestCertificate
@@ -2748,6 +2761,7 @@ ifdef VBOX_SIGNING_MODE
   else # release
    VBOX_CERTIFICATE_SUBJECT_NAME ?= Oracle Corporation
    VBOX_CERTIFICATE_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SUBJECT_NAME)" /a
+   VBOX_CERTIFICATE_FINGERPRINT ?= 7e 92 b6 6b e5 1b 79 d8 ce 3f f2 5c 15 c2 df 6a b8 c7 f2 f2
    # TEMPORARY HACK!
    if defined(VBOX_ONLY_VALIDATIONKIT)
     VBOX_CROSS_CERTIFICATE_FILE ?= $(VBOX_PATH_SELFSIGN)/MSCV-VSClass3.cer
@@ -2763,13 +2777,61 @@ ifdef VBOX_SIGNING_MODE
   VBOX_CERTIFICATE_FINGERPRINT_ARGS := $(if-expr "$(VBOX_CERTIFICATE_FINGERPRINT)" != "" \
   	,/sha1 "$(subst $(SP),,$(VBOX_CERTIFICATE_FINGERPRINT))",)
 
+  ifeq ($(VBOX_SIGNING_MODE),test)
+   #VBOX_CERTIFICATE_SHA2_SUBJECT_NAME ?= MyTestCertificateSha2
+   VBOX_CERTIFICATE_SHA2_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SHA2_SUBJECT_NAME)"
+  else # release
+   VBOX_CERTIFICATE_SHA2_SUBJECT_NAME_ARGS ?= /n "$(VBOX_CERTIFICATE_SHA2_SUBJECT_NAME)" /a
+   VBOX_CERTIFICATE_SHA2_FINGERPRINT ?= 31 31 bb 58 8b 19 9e 6e 85 0f d3 35 82 b0 c5 82 55 e1 6c 49
+   # TEMPORARY HACK for the validation kitty! The build box is too old.
+   if defined(VBOX_ONLY_VALIDATIONKIT)
+    VBOX_CROSS_CERTIFICATE_SHA2_FILE ?= $(VBOX_PATH_SELFSIGN)/MSCV-VSClass3.cer
+   else
+    VBOX_CERTIFICATE_SHA2_SUBJECT_NAME ?= Oracle Corporation
+    VBOX_CROSS_CERTIFICATE_SHA2_FILE ?= $(VBOX_PATH_SELFSIGN)/VeriSign Class 3 Public Primary Certification Authority - G5.cer
+   endif
+   VBOX_CROSS_CERTIFICATE_SHA2_FILE_ARGS ?= /ac "$(VBOX_CROSS_CERTIFICATE_SHA2_FILE)"
+   VBOX_TSA_SHA2_URL ?= http://sha256timestamp.ws.symantec.com/sha256/timestamp
+   VBOX_TSA_SHA2_URL_ARGS ?= /tr "$(VBOX_TSA_SHA2_URL)"
+  endif
+  VBOX_CERTIFICATE_SHA2_STORE ?= my
+  VBOX_CERTIFICATE_SHA2_STORE_ARGS ?= /s "$(VBOX_CERTIFICATE_SHA2_STORE)"
+  VBOX_CERTIFICATE_SHA2_FINGERPRINT_ARGS := $(if-expr "$(VBOX_CERTIFICATE_SHA2_FINGERPRINT)" != "" \
+  	,/sha1 "$(subst $(SP),,$(VBOX_CERTIFICATE_SHA2_FINGERPRINT))",) # Still using SHA-1 for fingerprinting, it's good enough for that!
+
   ## Commands for signing a driver image after link.
-  VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_IMAGE_FN,$(out)))
+  VBOX_SIGN_DRIVER_CMDS ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_IMAGE_FN,$(out),,2))
   ## Sign a file (generic).
   # @param 1  The file to sign.
   # @param 2  File description. Optional.
   # @param 3  Additional parameters. Optional.
-  VBOX_SIGN_FILE_FN     ?= $(VBOX_SIGNTOOL) sign \
+  # @param 4  Set to 2 if the expression will be expanded twice before chopped into commands (for _CMDS).
+  # @param 5  Disables dual signing if non-empty.
+  ifndef VBOX_SIGN_FILE_FN
+   ifdef VBOX_CERTIFICATE_SHA2_SUBJECT_NAME
+    VBOX_SIGN_FILE_FN     = $(VBOX_SIGNTOOL) \
+    	sign /fd sha1\
+	$(VBOX_CROSS_CERTIFICATE_FILE_ARGS) \
+	$(VBOX_CERTIFICATE_STORE_ARGS) \
+	$(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
+       $(VBOX_CERTIFICATE_FINGERPRINT_ARGS) \
+	$(VBOX_TSA_URL_ARGS) \
+	$(if $(strip $(2)),/d "$(strip $(2))",) \
+	$(3) \
+	$(1) \
+    	$(if-expr "$5" == "",\
+	$(if-expr "$4" == "2",$$(NLTAB),$(NLTAB))$(VBOX_SIGNTOOL) \
+    	sign /as /fd sha256 \
+	$(VBOX_CROSS_CERTIFICATE_SHA2_FILE_ARGS) \
+	$(VBOX_CERTIFICATE_SHA2_STORE_ARGS) \
+	$(VBOX_CERTIFICATE_SHA2_SUBJECT_NAME_ARGS) \
+       $(VBOX_CERTIFICATE_SHA2_FINGERPRINT_ARGS) \
+	$(VBOX_TSA_SHA2_URL_ARGS) \
+	$(if $(strip $(2)),/d "$(strip $(2))",) \
+	$(3) \
+	$(1),)
+   else
+    VBOX_SIGN_FILE_FN     = $(VBOX_SIGNTOOL) sign \
 	$(VBOX_CROSS_CERTIFICATE_FILE_ARGS) \
 	$(VBOX_CERTIFICATE_STORE_ARGS) \
 	$(VBOX_CERTIFICATE_SUBJECT_NAME_ARGS) \
@@ -2778,10 +2840,14 @@ ifdef VBOX_SIGNING_MODE
 	$(if $(strip $(2)),/d "$(strip $(2))",) \
 	$(3) \
 	$(1)
+   endif
+  endif
+
   ## Sign an executable image.
   # @param 1  The file to sign.
   # @param 2  File description. Optional.
-  VBOX_SIGN_IMAGE_FN     ?= $(call VBOX_SIGN_FILE_FN,$(1),$(2),/ph)
+  # @param 3  Set to 2 if the expression will be expanded twice before chopped into commands (for _CMDS).
+  VBOX_SIGN_IMAGE_FN     ?= $(call VBOX_SIGN_FILE_FN,$(1),$(2),/ph,$(3))
 
   ## Create a security catalog file.
   # @param 1  The directory containing the stuff to sign.
@@ -2791,7 +2857,7 @@ ifdef VBOX_SIGNING_MODE
 	$(RM) -f $(2)\
 	$(NL)$(TAB)$(VBOX_INF2CAT) /driver:$(strip $(1)) /os:$(strip $(subst ;,$(COMMA),$(3))) /verbose \
 	$(NL)$(TAB)$(MV) $(2) $(2) \
-	$(NL)$(TAB)$(call VBOX_SIGN_FILE_FN,$(2))
+	$(NL)$(TAB)$(call VBOX_SIGN_FILE_FN,$(2),,,$(NL)$(TAB))
   VBOX_MAKE_CAT64_FN   ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),XP_X64;Server2003_X64;Vista_X64)
   VBOX_MAKE_CAT32_FN   ?= $(call VBOX_MAKE_CAT_HLP_FN,$(1),$(2),2000;XP_X86;Server2003_X86;Vista_X86)
   ifeq ($(KBUILD_TARGET_ARCH),x86)
@@ -2803,7 +2869,7 @@ ifdef VBOX_SIGNING_MODE
   # Go nuts, sign everything.
   if "$(VBOX_SIGNING_MODE)" == "release" || defined(VBOX_WITH_HARDENING)
    ## Commands for signing an executable or a dll image after link.
-   VBOX_SIGN_IMAGE_CMDS  ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_IMAGE_FN,$(out)))
+   VBOX_SIGN_IMAGE_CMDS  ?= $(if $(eq $(tool_do),LINK_LIBRARY),,$(call VBOX_SIGN_IMAGE_FN,$(out),,2))
   endif
   ## Enable signing of the additions.
   VBOX_SIGN_ADDITIONS   ?= 1
@@ -3249,12 +3315,12 @@ SDK_VBoxOpenSslExtPack_LIBS    = \
 ifdef VBOX_WITH_S3
 VBOX_WITH_LIBCURL = 1
 SDK_VBOX_LIBCURL       = .
-SDK_VBOX_LIBCURL_INCS ?= $(PATH_ROOT)/src/libs/curl-7.45.0/include
+SDK_VBOX_LIBCURL_INCS ?= $(PATH_ROOT)/src/libs/curl-7.47.0/include
 SDK_VBOX_LIBCURL_LIBS ?= $(PATH_STAGE_LIB)/VBox-libcurl$(VBOX_SUFF_LIB)
 SDK_VBOX_LIBCURL_DEFS ?= BUILDING_LIBCURL
 
 SDK_VBOX_LIBCURL-x86           = .
-SDK_VBOX_LIBCURL-x86_INCS     ?= $(PATH_ROOT)/src/libs/curl-7.45.0/include
+SDK_VBOX_LIBCURL-x86_INCS     ?= $(PATH_ROOT)/src/libs/curl-7.47.0/include
 SDK_VBOX_LIBCURL-x86_LIBS.x86 ?= $(PATH_STAGE_LIB)/VBox-libcurl-x86$(VBOX_SUFF_LIB)
 SDK_VBOX_LIBCURL-x86_DEFS     ?= BUILDING_LIBCURL
 endif
@@ -6167,7 +6233,7 @@ endif
 SVN                    ?= svn$(HOSTSUFF_EXE)
 VBOX_SVN_REV_KMK        = $(PATH_OUT)/revision.kmk
 ifndef VBOX_SVN_REV
- VBOX_SVN_REV_FALLBACK := $(patsubst %:,,  $Rev: 105127 $  )
+ VBOX_SVN_REV_FALLBACK := $(patsubst %:,,  $Rev: 105871 $  )
  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         :=
@@ -6319,3 +6385,4 @@ st stat status:
 quick:
 	$(MAKE) VBOX_QUICK=1
 
+
diff --git a/doc/manual/docbook2latex.xsl b/doc/manual/docbook2latex.xsl
index 43b49d4..cc0f8fa 100644
--- a/doc/manual/docbook2latex.xsl
+++ b/doc/manual/docbook2latex.xsl
@@ -119,6 +119,7 @@
 \usepackage{color}
 \usepackage{scrextend}
 \definecolor{darkgreen}{rgb}{0,0.6,0}
+\tymin=21pt
 
 </xsl:text>
   <xsl:if test="$TARGETLANG='de_DE'">\usepackage[ngerman]{babel}
\PrerenderUnicode{ü}</xsl:if>
diff --git a/doc/manual/en_US/user_AdvancedTopics.xml b/doc/manual/en_US/user_AdvancedTopics.xml
index 0cd9940..07843c6 100644
--- a/doc/manual/en_US/user_AdvancedTopics.xml
+++ b/doc/manual/en_US/user_AdvancedTopics.xml
@@ -1427,30 +1427,30 @@ VBoxManage modifyvm "VM name" --nattftpfile1 /srv/tftp/boot/MyPXEBoot.pxe</scree
             <para>
               The following command sets a rule for mapping a name to a specified IP:</para>
             <screen>VBoxManage setextradata "VM name" \
-      "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/Config/HostResolverMappings/ \
-      <uniq name of interception rule>/HostIP" <IPv4>
+      "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
+      <unique rule name of interception rule>/HostIP" <IPv4>
 VBoxManage setextradata "VM name" \
-      "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/Config/HostResolverMappings/ \
-      <uniq name of interception rule>/HostName" <name of host></screen>
+      "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
+      <unique rule name>/HostName" <name of host></screen>
     <para>The following command sets a rule for mapping a pattern name to a specified IP:</para>
             <screen>VBoxManage setextradata "VM name" \
-      "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/Config/HostResolverMappings/ \
-      <uniq name of interception rule>/HostIP" <IPv4>
+      "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
+      <unique rule name>/HostIP" <IPv4>
 VBoxManage setextradata "VM name" \
-      "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/Config/HostResolverMappings/ \
-      <uniq name of interception rule>/HostNamePattern" <hostpattern></screen>
+      "VBoxInternal/Devices/{pcnet,e1000}/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
+      <unique rule name>/HostNamePattern" <hostpattern></screen>
     <para>The host pattern may include <computeroutput>"|", "?" and "*"</computeroutput>.</para>
     <para>This example demonstrates how to instruct the host-resolver mechanism to resolve
       all domain and probably some mirrors of www.blocked-site.info site with IP 127.0.0.1:</para>
-            <screen>VBoxManage setextradata "VM name" \
-      "VBoxInternal/Devices/e1000/0/LUN#0/Config/HostResolverMappings/ \
+    <screen>VBoxManage setextradata "VM name" \
+      "VBoxInternal/Devices/e1000/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
       all_blocked_site/HostIP" 127.0.0.1
 VBoxManage setextradata "VM name" \
-      "VBoxInternal/Devices/e1000/0/LUN#0/Config/HostResolverMappings/ \
+      "VBoxInternal/Devices/e1000/0/LUN#0/AttachedDriver/Config/HostResolverMappings/ \
       all_blocked_site/HostNamePattern" "*.blocked-site.*|*.fb.org"</screen>
-           <note><para>The host resolver mechanism should be enabled to use user-defined
-             mapping rules (please see
-             <xref linkend="nat_host_resolver_proxy" /> for more details).</para></note>
+
+    <para>The host resolver mechanism should be enabled to use user-defined
+      mapping rules, otherwise they don't have any effect.</para>
         </sect3>
     </sect2>
 
@@ -1771,9 +1771,7 @@ VBoxManage setextradata "VM name"
         clock:</para>
 
       <screen>VBoxManage setextradata "VM name" "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1</screen>
-
     </sect2>
-
   </sect1>
 
   <sect1 id="vboxbowsolaris11">
@@ -3032,9 +3030,7 @@ VBoxManage setextradata "VM name" VBoxInternal2/CoreDumpLive 1</screen>At
       <para><screen>VBoxManage setextradata global GUI/Fullscreen/LegacyMode</screen></para>
 
       <para>This is a global setting.</para>
-
     </sect2>
-
   </sect1>
 
   <sect1 id="vboxwebsrv-daemon">
@@ -3446,7 +3442,6 @@ svccfg -s svc:/application/virtualbox/balloonctrl:default setprop config/balloon
       <para>For more information about SMF, please refer to the Solaris
       documentation.</para>
     </sect2>
-
   </sect1>
 
   <sect1 id="otherextpacks">
@@ -3655,7 +3650,6 @@ VBoxManage setextradata "foo" "VBoxInternal2/SavestateOnBatteryLow" 0</screen>
          </glossentry>
        </glosslist>
      </para>
-
    </sect1>
 
    <sect1 id="sse412passthrough">
@@ -3687,7 +3681,6 @@ VBoxManage setextradata "VM name" VBoxInternal/CPUM/SSE4.2 1</screen>
       In order to disable it, use the same command but change "1" to "0", or use the VBoxManage
       command to remove the extra data. This is a per-VM setting and it is disabled by default.
     </para>
-
   </sect1>
 
   <sect1 id="usbtrafficcapturing">
@@ -3714,7 +3707,6 @@ VBoxManage setextradata "VM name" VBoxInternal/CPUM/SSE4.2 1</screen>
     <para>The command above enables capturing on the root hub attached to the EHCI controller.
     To enable it for the OHCI or XHCI controller replace <computeroutput>usb-ehci</computeroutput>
     with <computeroutput>usb-ohci</computeroutput> or <computeroutput>usb-xhci</computeroutput> respectively.</para>
-
   </sect1>
 
   <sect1 id="heartbeatservice">
@@ -3751,7 +3743,6 @@ VBoxManage setextradata "VM name" VBoxInternal/CPUM/SSE4.2 1</screen>
       message like
       <emphasis>VMMDev: GuestHeartBeat: Guest is alive.</emphasis>
     </para>
-
   </sect1>
 
   <sect1 id="diskencryption">
@@ -3911,4 +3902,117 @@ VBoxManage setextradata "VM name" VBoxInternal/CPUM/SSE4.2 1</screen>
     </sect2>
   </sect1>
 
+  <sect1 id="pcspeaker_passthrough">
+    <title>PC speaker passthrough</title>
+
+    <para>As an experimental feature (primarily due to being limited to Linux
+    host only and unknown Linux distribution coverage) VirtualBox supports
+    passing through the PC speaker to the host. The PC speaker (sometimes
+    called system speaker) is a way to produce audible feedback such as beeps
+    without the need for regular audio/sound card support.</para>
+
+    <para>The PC speaker passthrough feature in VirtualBox handles beeps only.
+    Advanced PC speaker use by the VM (such as PCM audio) will not work,
+    resulting in undefined host behavior.</para>
+
+    <para>Producing beeps on Linux is unfortunately a very complex topic.
+    VirtualBox offers a collection of options, in an attempt to make this work
+    deterministically and reliably on as many Linux distributions and system
+    configurations as possible:
+      <table>
+        <title>PC speaker configuration options</title>
+        <tgroup cols="3">
+          <thead>
+            <row>
+              <entry><emphasis role="bold">Code</emphasis></entry>
+              <entry><emphasis role="bold">Device</emphasis></entry>
+              <entry><emphasis role="bold">Notes</emphasis></entry>
+            </row>
+          </thead>
+          <tbody>
+            <row>
+              <entry>1</entry>
+              <entry><computeroutput>/dev/input/ by-path/platform- pcspkr-event-spkr</computeroutput></entry>
+              <entry>Direct host PC speaker use.</entry>
+            </row>
+            <row>
+              <entry>2</entry>
+              <entry><computeroutput>/dev/tty</computeroutput></entry>
+              <entry>Uses the terminal association of the VM process. VM needs
+              to be started on a virtual console.</entry>
+            </row>
+            <row>
+              <entry>3</entry>
+              <entry><computeroutput>/dev/tty0</computeroutput> or
+              <computeroutput>/dev/vc/0</computeroutput></entry>
+              <entry>Can only be used by user <computeroutput>root</computeroutput>
+              or users with capability <computeroutput>cap_sys_tty_config</computeroutput></entry>
+            </row>
+            <row>
+              <entry>9</entry>
+              <entry>user specified console or evdev device path</entry>
+              <entry>Like 1-3, just with a custom device path.</entry>
+            </row>
+            <row>
+              <entry>70</entry>
+              <entry><computeroutput>/dev/tty</computeroutput></entry>
+              <entry>Standard beep only. Loses frequency and length. See code
+              2.</entry>
+            </row>
+            <row>
+              <entry>79</entry>
+              <entry>user specified terminal device path</entry>
+              <entry>Like 70, just with a custom device path.</entry>
+            </row>
+            <row>
+              <entry>100</entry>
+              <entry>all of the above</entry>
+              <entry>Tries all above codes.</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </table>
+    </para>
+
+    <para>To enable PC speaker passthrough use the following command:
+      <screen>VBoxManage setextradata "VM name" "VBoxInternal/Devices/i8254/0/Config/PassthroughSpeaker" N</screen>
+    Replace <computeroutput>N</computeroutput> with the code representing the
+    case you want to use. Changing this setting will take effect when the VM is
+    started next. It is safe to enable PC speaker passthrough on all host OSes.
+    It will only have an effect on Linux.</para>
+
+    <para>The VM log file, <computeroutput>VBox.log</computeroutput>, will
+    contain lines with the prefix <computeroutput>PIT: speaker:</computeroutput>
+    showing the PC speaker passthrough setup activities. It gives hints which
+    device it picked or why it failed.</para>
+
+    <para>Enabling PC speaker passthrough for the VM is usually the simple
+    part. The real difficulty is making sure that VirtualBox can access the
+    necessary device, because in a typical Linux install most of them can only
+    be accessed by user <computeroutput>root</computeroutput>. You should
+    follow the preferred way to persistently change this, e.g by referring to
+    your distribution's documentation. Since there are countless Linux
+    distribution variants, we can only give the general hints that there is
+    often a way to give the X11 session user access to additional devices, or
+    you need to find a working solution using a udev configuration file. If
+    everything fails you might try setting the permissions using a script
+    which is run late enough in the host system startup.</para>
+
+    <para>Sometimes additional rules are applied by the kernel to limit access
+    (e.g. that the VM process must have the same controlling terminal as the
+    device configured to be used for beeping, something which is often very
+    difficult to achieve for GUI applications such as VirtualBox). The table
+    above contains some hints, but generally refer to the Linux
+    documentation.</para>
+
+    <para>If you have trouble getting any beeps even if the device permissions
+    are set up and VBox.log confirms that it uses evdev or console for the
+    PC speaker control, check if your system has a PC speaker. Some systems do
+    not have one. Other complications can arise from Linux rerouting the PC
+    speaker output to a sound card. Check if the beeps are audible if you
+    connect speakers to your sound card. Today almost all systems have one.
+    Finally, check if the audio mixer control has a channel named "beep"
+    (could be hidden in the mixer settings) and that it isn't muted.</para>
+  </sect1>
+
 </chapter>
diff --git a/doc/manual/en_US/user_BasicConcepts.xml b/doc/manual/en_US/user_BasicConcepts.xml
index 9e93aa9..899cbcb 100644
--- a/doc/manual/en_US/user_BasicConcepts.xml
+++ b/doc/manual/en_US/user_BasicConcepts.xml
@@ -1074,7 +1074,7 @@
     <computeroutput>--uart</computeroutput> and
     <computeroutput>--uartmode</computeroutput> options.</para>
 
-    <para>In either case, you can configure up to two virtual serial ports per
+    <para>In either case, you can configure up to four virtual serial ports per
     virtual machine. For each such device, you will need to
     determine<orderedlist>
         <listitem>
@@ -1211,7 +1211,7 @@
 
             </itemizedlist></para>
         </listitem>
-      </orderedlist>Up to two serial ports can be configured per virtual
+      </orderedlist>Up to four serial ports can be configured per virtual
       machine, but you can pick any port numbers out of the above. However,
       serial ports cannot reliably share interrupts; if both ports are to be
       used at the same time, they must use different interrupt levels, for
diff --git a/doc/manual/en_US/user_GuestAdditions.xml b/doc/manual/en_US/user_GuestAdditions.xml
index d355d02..7d0e51f 100644
--- a/doc/manual/en_US/user_GuestAdditions.xml
+++ b/doc/manual/en_US/user_GuestAdditions.xml
@@ -1758,6 +1758,13 @@ Name: /VirtualBox/GuestInfo/OS/Version, value: #59-Ubuntu SMP Thu Jan 28 01:23:0
         it is not supported on Mac OS X hosts.</para>
       </note>
 
+      <note>
+        <para>Memory ballooning does not work with large pages enabled. To
+        turn off large pages support for a VM, run
+        <computeroutput>VBoxManage modifyvm <VM name> --largepages off</computeroutput>
+        </para>
+      </note>
+
       <para>Normally, to change the amount of memory allocated to a virtual
       machine, one has to shut down the virtual machine entirely and modify
       its settings. With memory ballooning, memory that was allocated for a
diff --git a/doc/manual/user_ChangeLogImpl.xml b/doc/manual/user_ChangeLogImpl.xml
index 3916ec9..4ef2362 100644
--- a/doc/manual/user_ChangeLogImpl.xml
+++ b/doc/manual/user_ChangeLogImpl.xml
@@ -3,6 +3,143 @@
 <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.16 (2016-03-04)</title>
+
+    <para>This is a maintenance release. The following items were fixed and/or
+      added:</para>
+
+    <itemizedlist>
+
+      <listitem>
+        <para>VMM: fixed a problem which could lead to a wrong guest behavior on
+          AMD CPUs (tickets #14831 and #15186)</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: don't try to synchronize the HID LEDs if the VM window is not
+          active or if it's minimized (Windows / Mac OS X hosts only; bug #14302)</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: prevent a crash during startup under rare conditions</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: sub-menu option to disable the guest-OS type overlay in the
+          application dock icon on Mac OS X</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: position off-screen windows to be fully visible again on relaunch</para>
+      </listitem>
+
+      <listitem>
+        <para>GUI: hide the VT-x/AMD-V checkbox if raw-mode is not supported
+          (usually Mac OS X hosts; bug #15178)</para>
+      </listitem>
+
+      <listitem>
+        <para>PC speaker passthrough: new experimental feature, available on
+          Linux host only</para>
+      </listitem>
+
+      <listitem>
+        <para>Audio: several fixes for Mac OS X hosts + guests</para>
+      </listitem>
+
+      <listitem>
+        <para>Audio: properly handle default audio device changes (Windows hosts)</para>
+      </listitem>
+
+      <listitem>
+        <para>USB: serveral fixes for the xHCI controller (e.g. for webcam
+          passthrough)</para>
+      </listitem>
+
+      <listitem>
+        <para>BIOS: fixed int15/AH=83/AL=00 function (4.2.0 regression)</para>
+      </listitem>
+
+      <listitem>
+        <para>iPXE: enable the HTTP download protocol on non-Linux hosts (bug #13628)</para>
+      </listitem>
+
+      <listitem>
+        <para>Shared folders: fixed a failure to load the saved state under
+          certain circumstances (bug #6314)</para>
+      </listitem>
+
+      <listitem>
+        <para>Guest Control: added support for (cached) Active Directory authentication
+          in case the domain controller is not reachable (anymore)</para>
+      </listitem>
+
+      <listitem>
+        <para>Serial ports: raised the number of serial ports per VM from 2 to 4
+          (bug #9109)</para>
+      </listitem>
+
+      <listitem>
+        <para>Serial ports: fix for the TCP/IP backend (Windows hosts only; bug #15188)</para>
+      </listitem>
+
+      <listitem>
+        <para>SDK: make the Python webservice API binding work again (5.0 regression)</para>
+      </listitem>
+
+      <listitem>
+        <para>Seamless mode: fixed a crash under certain circumstances
+          (bug #15106)</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux hosts: fixed the /sbin/rcvboxdrv script as well as the missing
+          shebang in two scripts (bugs #15055 and #15057)</para>
+      </listitem>
+
+      <listitem>
+        <para>Linux hosts: properly uninstall Python files installed by the
+          .run installer</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: hardening fix required for recent Windows insider
+          builds (bug #14052)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: fixed Python installation path (bug #13131)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts: support MTU larger than 2 KB with bridged
+          networking (bug #15140)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows hosts / guests: properly sign binaries using a sha-256
+          certificate (bug #15054)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows Additions: fixed guest property enumeration of logged-in
+          users</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows Additions: fixed sporadical failure of the graphics driver
+          in Windows 10 guests (bug #14409)</para>
+      </listitem>
+
+      <listitem>
+        <para>Windows Additions: under rare circumstances no mouse movement
+          events were delivered to the guest</para>
+      </listitem>
+
+    </itemizedlist>
+  </sect1>
+
+  <sect1>
     <title>Version 5.0.14 (2016-01-19)</title>
 
     <para>This is a maintenance release. The following items were fixed and/or
@@ -1187,7 +1324,7 @@
       </listitem>
 
       <listitem>
-        <para>Serial: new TCP/IP backend (see <xref linkend="serialports"/>)</para>
+        <para>Serial ports: new TCP/IP backend (see <xref linkend="serialports"/>)</para>
       </listitem>
 
       <listitem>
diff --git a/include/VBox/vmm/pdmaudioifs.h b/include/VBox/vmm/pdmaudioifs.h
index 8c7bb4c..78292cb 100644
--- a/include/VBox/vmm/pdmaudioifs.h
+++ b/include/VBox/vmm/pdmaudioifs.h
@@ -27,6 +27,7 @@
 #define ___VBox_vmm_pdmaudioifs_h
 
 #include <VBox/types.h>
+#include <iprt/critsect.h>
 #include <iprt/list.h>
 
 
@@ -66,10 +67,10 @@ typedef enum PDMAUDIOFMT
  */
 typedef struct PDMAUDIOBACKENDCFG
 {
-    uint32_t    cbStreamOut;
-    uint32_t    cbStreamIn;
-    uint32_t    cMaxHstStrmsOut;
-    uint32_t    cMaxHstStrmsIn;
+    size_t   cbStreamOut;
+    size_t   cbStreamIn;
+    uint32_t cMaxHstStrmsOut;
+    uint32_t cMaxHstStrmsIn;
 } PDMAUDIOBACKENDCFG, *PPDMAUDIOBACKENDCFG;
 
 /**
@@ -338,6 +339,8 @@ typedef struct PDMAUDIOHSTSTRMIN
     PDMPCMPROPS            Props;
     /** Stream status flag. */
     PDMAUDIOSTRMSTS        fStatus;
+    /** Critical section for serializing access. */
+    RTCRITSECT             CritSect;
     /** This stream's mixing buffer. */
     PDMAUDIOMIXBUF         MixBuf;
     /** Pointer to (parent) guest stream. */
@@ -359,6 +362,8 @@ typedef struct PDMAUDIOHSTSTRMOUT
     PDMPCMPROPS            Props;
     /** Stream status flag. */
     PDMAUDIOSTRMSTS        fStatus;
+    /** Critical section for serializing access. */
+    RTCRITSECT             CritSect;
     /** This stream's mixing buffer. */
     PDMAUDIOMIXBUF         MixBuf;
     /** Associated guest output streams. */
@@ -502,6 +507,16 @@ typedef struct PDMIAUDIOCONNECTOR
     DECLR3CALLBACKMEMBER(int, pfnWrite, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut, const void *pvBuf, uint32_t cbBuf, uint32_t *pcbWritten));
 
     /**
+     * Retrieves the current configuration of the host audio backend.
+     *
+     * @returns VBox status code.
+     *
+     * @param   pInterface      Pointer to the interface structure containing the called function pointer.
+     * @param   pCfg            Where to store the host audio backend configuration data.
+     */
+    DECLR3CALLBACKMEMBER(int, pfnGetConfiguration, (PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOBACKENDCFG pCfg));
+
+    /**
      * Checks whether a specific guest input stream is active or not.
      *
      * @returns Whether the specified stream is active or not.
@@ -570,7 +585,6 @@ typedef struct PDMIAUDIOCONNECTOR
     DECLR3CALLBACKMEMBER(int, pfnCreateIn, (PPDMIAUDIOCONNECTOR pInterface, const char *pszName,
                                             PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg,
                                             PPDMAUDIOGSTSTRMIN *ppGstStrmIn));
-
     /**
      * Creates a guest output stream.
      *
@@ -616,7 +630,7 @@ typedef struct PDMIAUDIOCONNECTOR
 } PDMIAUDIOCONNECTOR;
 
 /** PDMIAUDIOCONNECTOR interface ID. */
-#define PDMIAUDIOCONNECTOR_IID                  "7040b289-306f-454e-87ff-e90889004464"
+#define PDMIAUDIOCONNECTOR_IID                  "8f8ca10e-9039-423c-9a77-0014aaa98626"
 
 
 /**
diff --git a/include/VBox/vmm/pdmdev.h b/include/VBox/vmm/pdmdev.h
index 867aef2..033d454 100644
--- a/include/VBox/vmm/pdmdev.h
+++ b/include/VBox/vmm/pdmdev.h
@@ -3067,16 +3067,6 @@ typedef struct PDMDEVHLPR3
                                                PPDMIBASE *ppBaseInterface, const char *pszDesc));
 
     /**
-     * Detaches an attached driver (chain) from the device again.
-     *
-     * @returns VBox status code.
-     * @param   pDevIns             The device instance.
-     * @param   pDrvIns             The driver instance to detach.
-     * @param   fFlags              Flags, combination of the PDMDEVATT_FLAGS_* \#defines.
-     */
-    DECLR3CALLBACKMEMBER(int, pfnDriverDetach,(PPDMDEVINS pDevIns, PPDMDRVINS pDrvIns, uint32_t fFlags));
-
-    /**
      * Create a queue.
      *
      * @returns VBox status code.
@@ -3486,6 +3476,16 @@ typedef struct PDMDEVHLPR3
      */
     DECLR3CALLBACKMEMBER(VMRESUMEREASON, pfnVMGetResumeReason,(PPDMDEVINS pDevIns));
 
+    /**
+     * Detaches an attached driver (chain) from the device again.
+     *
+     * @returns VBox status code.
+     * @param   pDevIns             The device instance.
+     * @param   pDrvIns             The driver instance to detach.
+     * @param   fFlags              Flags, combination of the PDMDEVATT_FLAGS_* \#defines.
+     */
+    DECLR3CALLBACKMEMBER(int, pfnDriverDetach,(PPDMDEVINS pDevIns, PPDMDRVINS pDrvIns, uint32_t fFlags));
+
 
     /** Space reserved for future members.
      * @{ */
@@ -3495,7 +3495,7 @@ typedef struct PDMDEVHLPR3
     DECLR3CALLBACKMEMBER(void, pfnReserved4,(void));
     DECLR3CALLBACKMEMBER(void, pfnReserved5,(void));
     DECLR3CALLBACKMEMBER(void, pfnReserved6,(void));
-    DECLR3CALLBACKMEMBER(void, pfnReserved7,(void));
+    /*DECLR3CALLBACKMEMBER(void, pfnReserved7,(void));*/
     /*DECLR3CALLBACKMEMBER(void, pfnReserved8,(void));
     DECLR3CALLBACKMEMBER(void, pfnReserved9,(void));*/
     /*DECLR3CALLBACKMEMBER(void, pfnReserved10,(void));*/
@@ -3681,7 +3681,7 @@ typedef R3PTRTYPE(struct PDMDEVHLPR3 *) PPDMDEVHLPR3;
 typedef R3PTRTYPE(const struct PDMDEVHLPR3 *) PCPDMDEVHLPR3;
 
 /** Current PDMDEVHLPR3 version number. */
-#define PDM_DEVHLPR3_VERSION                    PDM_VERSION_MAKE(0xffe7, 15, 1)
+#define PDM_DEVHLPR3_VERSION                    PDM_VERSION_MAKE(0xffe7, 14, 2)
 
 
 /**
diff --git a/include/iprt/process.h b/include/iprt/process.h
index fe096fe..2678a03 100644
--- a/include/iprt/process.h
+++ b/include/iprt/process.h
@@ -159,7 +159,8 @@ 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\@domain format to specify a domain.
+ *                      Windows: Use user\@domain (UPN, User Principal Name)
+ *                      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.
diff --git a/include/iprt/x86.h b/include/iprt/x86.h
index f828473..125f257 100644
--- a/include/iprt/x86.h
+++ b/include/iprt/x86.h
@@ -1250,9 +1250,98 @@ AssertCompile(X86_DR7_ANY_RW_IO(UINT32_C(0x00040000)) == 0);
 #define MSR_IA32_DS_AREA                    0x600
 /** Running Average Power Limit (RAPL) power units. */
 #define MSR_RAPL_POWER_UNIT                 0x606
-/** X2APIC MSR ranges. */
+
+/** X2APIC MSR range start. */
 #define MSR_IA32_X2APIC_START               0x800
+/** X2APIC MSR -  APIC ID Register. */
+#define MSR_IA32_X2APIC_ID                  0x802
+/** X2APIC MSR -  APIC Version Register. */
+#define MSR_IA32_X2APIC_VERSION             0x803
+/** X2APIC MSR -  Task Priority Register. */
 #define MSR_IA32_X2APIC_TPR                 0x808
+/** X2APIC MSR -  Processor Priority register. */
+#define MSR_IA32_X2APIC_PPR                 0x80A
+/** X2APIC MSR -  End Of Interrupt register. */
+#define MSR_IA32_X2APIC_EOI                 0x80B
+/** X2APIC MSR -  Logical Destination Register. */
+#define MSR_IA32_X2APIC_LDR                 0x80D
+/** X2APIC MSR -  Spurious Interrupt Vector Register. */
+#define MSR_IA32_X2APIC_SVR                 0x80F
+/** X2APIC MSR -  In-service Register (bits 31:0). */
+#define MSR_IA32_X2APIC_ISR0                0x810
+/** X2APIC MSR -  In-service Register (bits 63:32). */
+#define MSR_IA32_X2APIC_ISR1                0x811
+/** X2APIC MSR -  In-service Register (bits 95:64). */
+#define MSR_IA32_X2APIC_ISR2                0x812
+/** X2APIC MSR -  In-service Register (bits 127:96). */
+#define MSR_IA32_X2APIC_ISR3                0x813
+/** X2APIC MSR -  In-service Register (bits 159:128). */
+#define MSR_IA32_X2APIC_ISR4                0x814
+/** X2APIC MSR -  In-service Register (bits 191:160). */
+#define MSR_IA32_X2APIC_ISR5                0x815
+/** X2APIC MSR -  In-service Register (bits 223:192). */
+#define MSR_IA32_X2APIC_ISR6                0x816
+/** X2APIC MSR -  In-service Register (bits 255:224). */
+#define MSR_IA32_X2APIC_ISR7                0x817
+/** X2APIC MSR -  Trigger Mode Register (bits 31:0). */
+#define MSR_IA32_X2APIC_TMR0                0x818
+/** X2APIC MSR -  Trigger Mode Register (bits 63:32). */
+#define MSR_IA32_X2APIC_TMR1                0x819
+/** X2APIC MSR -  Trigger Mode Register (bits 95:64). */
+#define MSR_IA32_X2APIC_TMR2                0x81A
+/** X2APIC MSR -  Trigger Mode Register (bits 127:96). */
+#define MSR_IA32_X2APIC_TMR3                0x81B
+/** X2APIC MSR -  Trigger Mode Register (bits 159:128). */
+#define MSR_IA32_X2APIC_TMR4                0x81C
+/** X2APIC MSR -  Trigger Mode Register (bits 191:160). */
+#define MSR_IA32_X2APIC_TMR5                0x81D
+/** X2APIC MSR -  Trigger Mode Register (bits 223:192). */
+#define MSR_IA32_X2APIC_TMR6                0x81E
+/** X2APIC MSR -  Trigger Mode Register (bits 255:224). */
+#define MSR_IA32_X2APIC_TMR7                0x81F
+/** X2APIC MSR -  Interrupt Request Register (bits 31:0). */
+#define MSR_IA32_X2APIC_IRR0                0x820
+/** X2APIC MSR -  Interrupt Request Register (bits 63:32). */
+#define MSR_IA32_X2APIC_IRR1                0x821
+/** X2APIC MSR -  Interrupt Request Register (bits 95:64). */
+#define MSR_IA32_X2APIC_IRR2                0x822
+/** X2APIC MSR -  Interrupt Request Register (bits 127:96). */
+#define MSR_IA32_X2APIC_IRR3                0x823
+/** X2APIC MSR -  Interrupt Request Register (bits 159:128). */
+#define MSR_IA32_X2APIC_IRR4                0x824
+/** X2APIC MSR -  Interrupt Request Register (bits 191:160). */
+#define MSR_IA32_X2APIC_IRR5                0x825
+/** X2APIC MSR -  Interrupt Request Register (bits 223:192). */
+#define MSR_IA32_X2APIC_IRR6                0x826
+/** X2APIC MSR -  Interrupt Request Register (bits 255:224). */
+#define MSR_IA32_X2APIC_IRR7                0x827
+/** X2APIC MSR -  Error Status Register. */
+#define MSR_IA32_X2APIC_ESR                 0x828
+/** X2APIC MSR - LVT CMCI Register. */
+#define MSR_IA32_X2APIC_LVT_CMCI            0x82F
+/** X2APIC MSR -  Interrupt Command Register. */
+#define MSR_IA32_X2APIC_ICR                 0x830
+/** X2APIC MSR -  LVT Timer Register. */
+#define MSR_IA32_X2APIC_LVT_TIMER           0x832
+/** X2APIC MSR -  LVT Thermal Sensor Register. */
+#define MSR_IA32_X2APIC_LVT_THERMAL         0x833
+/** X2APIC MSR -  LVT Performance Counter Register. */
+#define MSR_IA32_X2APIC_LVT_PERF            0x834
+/** X2APIC MSR -  LVT LINT0 Register. */
+#define MSR_IA32_X2APIC_LVT_LINT0           0x835
+/** X2APIC MSR -  LVT LINT1 Register. */
+#define MSR_IA32_X2APIC_LVT_LINT1           0x836
+/** X2APIC MSR -  LVT Error Register . */
+#define MSR_IA32_X2APIC_LVT_ERROR           0x837
+/** X2APIC MSR -  Timer Initial Count Register. */
+#define MSR_IA32_X2APIC_TIMER_ICR           0x838
+/** X2APIC MSR -  Timer Current Count Register. */
+#define MSR_IA32_X2APIC_TIMER_CCR           0x839
+/** X2APIC MSR -  Timer Divide Configuration Register. */
+#define MSR_IA32_X2APIC_TIMER_DFR           0x83E
+/** X2APIC MSR - Self IPI. */
+#define MSR_IA32_X2APIC_SELF_IPI            0x83F
+/** X2APIC MSR range end. */
 #define MSR_IA32_X2APIC_END                 0xBFF
 
 /** K6 EFER - Extended Feature Enable Register. */
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h
index d7c0570..3858f08 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h
@@ -208,6 +208,8 @@ typedef struct VBOXSERVICECTRLPROCSTARTUPINFO
     char szUser[GUESTPROCESS_MAX_USER_LEN];
     /** Password of specified user name (account). */
     char szPassword[GUESTPROCESS_MAX_PASSWORD_LEN];
+    /** Domain to be used for authenticating the specified user name (account). */
+    char szDomain[GUESTPROCESS_MAX_DOMAIN_LEN];
     /** Time limit (in ms) of the process' life time. */
     uint32_t uTimeLimitMS;
     /** Process priority. */
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp
index 6b861f7..aa7169f 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControlProcess.cpp
@@ -1205,20 +1205,32 @@ static void vgsvcGstCtrlProcessFreeArgv(char **papszArgv)
  * @param   phStdErr                    Handle for the process' stderr pipe.
  * @param   pszAsUser                   User name (account) to start the process under.
  * @param   pszPassword                 Password of the specified user.
+ * @param   pszDomain                   Domain to use for authentication.
  * @param   phProcess                   Pointer which will receive the process handle after
  *                                      successful process start.
  */
 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)
+                                            PCRTHANDLE phStdIn, PCRTHANDLE phStdOut, PCRTHANDLE phStdErr,
+                                            const char *pszAsUser, const char *pszPassword, const char *pszDomain,
+                                            PRTPROCESS phProcess)
 {
     AssertPtrReturn(pszExec, VERR_INVALID_PARAMETER);
     AssertPtrReturn(papszArgs, VERR_INVALID_PARAMETER);
+    /* phStdIn is optional. */
+    /* phStdOut is optional. */
+    /* phStdErr is optional. */
+    /* pszPassword is optional. */
+    /* pszDomain is optional. */
     AssertPtrReturn(phProcess, VERR_INVALID_PARAMETER);
 
     int  rc = VINF_SUCCESS;
     char szExecExp[RTPATH_MAX];
 
+#ifdef DEBUG
+    /* Never log this in release mode! */
+    VGSvcVerbose(4, "pszUser=%s, pszPassword=%s, pszDomain=%s\n", pszAsUser, pszPassword, pszDomain);
+#endif
+
 #ifdef RT_OS_WINDOWS
     /*
      * If sysprep should be executed do this in the context of VBoxService, which
@@ -1351,13 +1363,36 @@ static int vgsvcGstCtrlProcessCreateProcess(const char *pszExec, const char * co
 #endif
             VGSvcVerbose(3, "Starting process '%s' ...\n", szExecExp);
 
+            const char *pszUser;
+#ifdef RT_OS_WINDOWS
+            /* If a domain name is given, construct an UPN (User Principle Name) with
+             * the domain name built-in, e.g. "joedoe at example.com". */
+            char *pszUserUPN = NULL;
+            if (   pszDomain
+                && strlen(pszDomain))
+            {
+                int cbUserUPN = RTStrAPrintf(&pszUserUPN, "%s@%s", pszAsUser, pszDomain);
+                if (cbUserUPN > 0)
+                {
+                    pszUser = pszUserUPN;
+                    VGSvcVerbose(3, "Using UPN: %s\n", pszUserUPN);
+                }
+            }
+
+            if (!pszUserUPN) /* Fallback */
+#endif
+                pszUser = pszAsUser;
+
             /* Do normal execution. */
             rc = RTProcCreateEx(szExecExp, papszArgsExp, hEnv, uProcFlags,
                                 phStdIn, phStdOut, phStdErr,
-                                pszAsUser   && *pszAsUser   ? pszAsUser   : NULL,
+                                pszUser,
                                 pszPassword && *pszPassword ? pszPassword : NULL,
                                 phProcess);
-
+#ifdef RT_OS_WINDOWS
+            if (pszUserUPN)
+                RTStrFree(pszUserUPN);
+#endif
             VGSvcVerbose(3, "Starting process '%s' returned rc=%Rrc\n", szExecExp, rc);
 
             vgsvcGstCtrlProcessFreeArgv(papszArgsExp);
@@ -1576,8 +1611,9 @@ static int vgsvcGstCtrlProcessProcessWorker(PVBOXSERVICECTRLPROCESS pProcess)
                                 rc = vgsvcGstCtrlProcessCreateProcess(pProcess->StartupInfo.szCmd, papszArgs, hEnv,
                                                                  pProcess->StartupInfo.uFlags,
                                                                  phStdIn, phStdOut, phStdErr,
-                                                                 fNeedsImpersonation ? pProcess->StartupInfo.szUser : NULL,
+                                                                 fNeedsImpersonation ? pProcess->StartupInfo.szUser     : NULL,
                                                                  fNeedsImpersonation ? pProcess->StartupInfo.szPassword : NULL,
+                                                                 fNeedsImpersonation ? pProcess->StartupInfo.szDomain   : NULL,
                                                                  &pProcess->hProcess);
                                 if (RT_FAILURE(rc))
                                     VGSvcError("Error starting process, rc=%Rrc\n", rc);
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
index 23327f8..0e3c2f6 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp
@@ -47,6 +47,7 @@ using namespace guestControl;
 enum
 {
     VBOXSERVICESESSIONOPT_FIRST = 1000, /* For initialization. */
+    VBOXSERVICESESSIONOPT_DOMAIN,
 #ifdef DEBUG
     VBOXSERVICESESSIONOPT_DUMP_STDOUT,
     VBOXSERVICESESSIONOPT_DUMP_STDERR,
@@ -1711,6 +1712,12 @@ static int vgsvcVGSvcGstCtrlSessionThreadCreateProcess(const PVBOXSERVICECTRLSES
         {
             apszArgs[idxArg++] = "--user";
             apszArgs[idxArg++] = pSessionThread->StartupInfo.szUser;
+
+            if (strlen(pSessionThread->StartupInfo.szDomain))
+            {
+                apszArgs[idxArg++] = "--domain";
+                apszArgs[idxArg++] = pSessionThread->StartupInfo.szDomain;
+            }
         }
 
         /* Add same verbose flags as parent process. */
@@ -1835,12 +1842,36 @@ static int vgsvcVGSvcGstCtrlSessionThreadCreateProcess(const PVBOXSERVICECTRLSES
             {
                 hStdOutAndErr.enmType = RTHANDLETYPE_FILE;
 
+                const char *pszUser;
+# ifdef RT_OS_WINDOWS
+                /* If a domain name is given, construct an UPN (User Principle Name) with
+                 * the domain name built-in, e.g. "joedoe at example.com". */
+                char *pszUserUPN = NULL;
+                if (strlen(pSessionThread->StartupInfo.szDomain))
+                {
+                    int cbUserUPN = RTStrAPrintf(&pszUserUPN, "%s@%s",
+                                                 pSessionThread->StartupInfo.szUser,
+                                                 pSessionThread->StartupInfo.szDomain);
+                    if (cbUserUPN > 0)
+                    {
+                        pszUser = pszUserUPN;
+                        VGSvcVerbose(3, "Using UPN: %s\n", pszUserUPN);
+                    }
+                }
+
+                if (!pszUserUPN) /* Fallback */
+# endif
+                    pszUser = pSessionThread->StartupInfo.szUser;
+
                 rc = RTProcCreateEx(pszExeName, apszArgs, RTENV_DEFAULT, fProcCreate,
                                     &hStdIn, &hStdOutAndErr, &hStdOutAndErr,
-                                    !fAnonymous ? pSessionThread->StartupInfo.szUser : NULL,
+                                    !fAnonymous ? pszUser : NULL,
                                     !fAnonymous ? pSessionThread->StartupInfo.szPassword : NULL,
                                     &pSessionThread->hProcess);
-
+# ifdef RT_OS_WINDOWS
+                if (pszUserUPN)
+                    RTStrFree(pszUserUPN);
+# endif
                 RTFileClose(hStdOutAndErr.u.hFile);
             }
 
@@ -2085,6 +2116,7 @@ RTEXITCODE VGSvcGstCtrlSessionSpawnInit(int argc, char **argv)
 {
     static const RTGETOPTDEF s_aOptions[] =
     {
+        { "--domain",          VBOXSERVICESESSIONOPT_DOMAIN,          RTGETOPT_REQ_STRING },
 #ifdef DEBUG
         { "--dump-stdout",     VBOXSERVICESESSIONOPT_DUMP_STDOUT,     RTGETOPT_REQ_NOTHING },
         { "--dump-stderr",     VBOXSERVICESESSIONOPT_DUMP_STDERR,     RTGETOPT_REQ_NOTHING },
@@ -2117,13 +2149,9 @@ RTEXITCODE VGSvcGstCtrlSessionSpawnInit(int argc, char **argv)
         /* For options that require an argument, ValueUnion has received the value. */
         switch (ch)
         {
-            case VBOXSERVICESESSIONOPT_LOG_FILE:
-            {
-                int rc = RTStrCopy(g_szLogFile, sizeof(g_szLogFile), ValueUnion.psz);
-                if (RT_FAILURE(rc))
-                    return RTMsgErrorExit(RTEXITCODE_FAILURE, "Error copying log file name: %Rrc", rc);
+            case VBOXSERVICESESSIONOPT_DOMAIN:
+                /* Information not needed right now, skip. */
                 break;
-            }
 #ifdef DEBUG
             case VBOXSERVICESESSIONOPT_DUMP_STDOUT:
                 fSession |= VBOXSERVICECTRLSESSION_FLAG_DUMPSTDOUT;
@@ -2133,10 +2161,6 @@ RTEXITCODE VGSvcGstCtrlSessionSpawnInit(int argc, char **argv)
                 fSession |= VBOXSERVICECTRLSESSION_FLAG_DUMPSTDERR;
                 break;
 #endif
-            case VBOXSERVICESESSIONOPT_USERNAME:
-                /* Information not needed right now, skip. */
-                break;
-
             case VBOXSERVICESESSIONOPT_SESSION_ID:
                 g_Session.StartupInfo.uSessionID = ValueUnion.u32;
                 break;
@@ -2144,12 +2168,23 @@ RTEXITCODE VGSvcGstCtrlSessionSpawnInit(int argc, char **argv)
             case VBOXSERVICESESSIONOPT_SESSION_PROTO:
                 g_Session.StartupInfo.uProtocol = ValueUnion.u32;
                 break;
-
 #ifdef DEBUG
             case VBOXSERVICESESSIONOPT_THREAD_ID:
                 /* Not handled. Mainly for processs listing. */
                 break;
 #endif
+            case VBOXSERVICESESSIONOPT_LOG_FILE:
+            {
+                int rc = RTStrCopy(g_szLogFile, sizeof(g_szLogFile), ValueUnion.psz);
+                if (RT_FAILURE(rc))
+                    return RTMsgErrorExit(RTEXITCODE_FAILURE, "Error copying log file name: %Rrc", rc);
+                break;
+            }
+
+            case VBOXSERVICESESSIONOPT_USERNAME:
+                /* Information not needed right now, skip. */
+                break;
+
             /** @todo Implement help? */
 
             case 'v':
diff --git a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
index bf3d549..d89c8ae 100644
--- a/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
+++ b/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp
@@ -199,7 +199,7 @@ static DECLCALLBACK(int) vgsvcWinVmInfoInitOnce(void *pvIgnored)
     }
 
     /* Kernel32: */
-    rc = RTLdrLoadSystem("kerne32.dll", true, &hLdrMod);
+    rc = RTLdrLoadSystem("kernel32.dll", true, &hLdrMod);
     AssertRCReturn(rc, rc);
     rc = RTLdrGetSymbol(hLdrMod, "QueryFullProcessImageNameW", (void **)&g_pfnQueryFullProcessImageNameW);
     if (RT_FAILURE(rc))
diff --git a/src/VBox/Debugger/Makefile.kmk b/src/VBox/Debugger/Makefile.kmk
index f12559f..b3920f4 100644
--- a/src/VBox/Debugger/Makefile.kmk
+++ b/src/VBox/Debugger/Makefile.kmk
@@ -123,6 +123,7 @@ tstVBoxDbg_QT_MODULES   = Core Gui
 tstVBoxDbg_SOURCES      = testcase/tstVBoxDbg.cpp
 tstVBoxDbg_LIBS         = \
 	$(LIB_VMM) \
+	$(LIB_REM) \
 	$(LIB_RUNTIME)
   ifeq ($(KBUILD_TARGET),win)
 tstVBoxDbg_LIBS        += \
diff --git a/src/VBox/Devices/Audio/DevIchAc97.cpp b/src/VBox/Devices/Audio/DevIchAc97.cpp
index b136965..f51f5ac 100644
--- a/src/VBox/Devices/Audio/DevIchAc97.cpp
+++ b/src/VBox/Devices/Audio/DevIchAc97.cpp
@@ -2238,12 +2238,7 @@ static DECLCALLBACK(int) ichac97AttachInternal(PPDMDEVINS pDevIns, PAC97DRIVER p
             rc = VERR_NO_MEMORY;
     }
     else if (rc == VERR_PDM_NO_ATTACHED_DRIVER)
-    {
         LogFunc(("No attached driver for LUN #%u\n", uLUN));
-    }
-    else if (RT_FAILURE(rc))
-        AssertMsgFailed(("Failed to attach AC'97 LUN #%u (\"%s\"), rc=%Rrc\n",
-                        uLUN, pszDesc, rc));
 
     if (RT_FAILURE(rc))
     {
@@ -2538,15 +2533,13 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
             PPDMIAUDIOCONNECTOR pCon = pDrv->pConnector;
             AssertPtr(pCon);
 
-            uint8_t cFailed = 0;
-            if (!pCon->pfnIsValidIn (pCon, pDrv->LineIn.pStrmIn))
-                cFailed++;
-            if (!pCon->pfnIsValidIn (pCon, pDrv->MicIn.pStrmIn))
-                cFailed++;
-            if (!pCon->pfnIsValidOut(pCon, pDrv->Out.pStrmOut))
-                cFailed++;
+            bool fValidLineIn = pCon->pfnIsValidIn(pCon, pDrv->LineIn.pStrmIn);
+            bool fValidMicIn  = pCon->pfnIsValidIn (pCon, pDrv->MicIn.pStrmIn);
+            bool fValidOut    = pCon->pfnIsValidOut(pCon, pDrv->Out.pStrmOut);
 
-            if (cFailed == 3)
+            if (    !fValidLineIn
+                 && !fValidMicIn
+                 && !fValidOut)
             {
                 LogRel(("AC97: Falling back to NULL backend (no sound audible)\n"));
 
@@ -2557,32 +2550,66 @@ static DECLCALLBACK(int) ichac97Construct(PPDMDEVINS pDevIns, int iInstance, PCF
                     N_("No audio devices could be opened. Selecting the NULL audio backend "
                        "with the consequence that no sound is audible"));
             }
-            else if (cFailed)
+            else
             {
-                if (!pDrv->pConnector->pfnIsValidIn (pCon, pDrv->LineIn.pStrmIn))
-                    LogRel(("AC97: WARNING: Unable to open PCM line input for LUN #%RU32!\n",       pDrv->uLUN));
-                if (!pDrv->pConnector->pfnIsValidIn (pCon, pDrv->MicIn.pStrmIn))
-                    LogRel(("AC97: WARNING: Unable to open PCM microphone input for LUN #%RU32!\n", pDrv->uLUN));
-                if (!pDrv->pConnector->pfnIsValidOut(pCon, pDrv->Out.pStrmOut))
-                    LogRel(("AC97: WARNING: Unable to open PCM output for LUN #%RU32!\n",           pDrv->uLUN));
-
-                char   szMissingStreams[255];
-                size_t len = 0;
-                if (!pCon->pfnIsValidIn (pCon, pDrv->LineIn.pStrmIn))
-                    len = RTStrPrintf(szMissingStreams,
-                                      sizeof(szMissingStreams), "PCM Input");
-                if (!pCon->pfnIsValidIn (pCon, pDrv->MicIn.pStrmIn))
-                    len += RTStrPrintf(szMissingStreams + len,
-                                       sizeof(szMissingStreams) - len, len ? ", PCM Microphone" : "PCM Microphone");
-                if (!pCon->pfnIsValidOut(pCon, pDrv->Out.pStrmOut))
-                    len += RTStrPrintf(szMissingStreams + len,
-                                       sizeof(szMissingStreams) - len, len ? ", PCM Output" : "PCM Output");
+                bool fWarn = false;
 
-                PDMDevHlpVMSetRuntimeError(pDevIns, 0 /*fFlags*/, "HostAudioNotResponding",
-                    N_("Some AC'97 audio streams (%s) could not be opened. Guest applications generating audio "
-                    "output or depending on audio input may hang. Make sure your host audio device "
-                    "is working properly. Check the logfile for error messages of the audio "
-                    "subsystem"), szMissingStreams);
+                PDMAUDIOBACKENDCFG backendCfg;
+                int rc2 = pCon->pfnGetConfiguration(pCon, &backendCfg);
+                if (RT_SUCCESS(rc2))
+                {
+                    if (backendCfg.cMaxHstStrmsIn)
+                    {
+                        /* If the audio backend supports two or more input streams at once,
+                         * warn if one of our two inputs (microphone-in and line-in) failed to initialize. */
+                        if (backendCfg.cMaxHstStrmsIn >= 2)
+                            fWarn = !fValidLineIn || !fValidMicIn;
+                        /* If the audio backend only supports one input stream at once (e.g. pure ALSA, and
+                         * *not* ALSA via PulseAudio plugin!), only warn if both of our inputs failed to initialize.
+                         * One of the two simply is not in use then. */
+                        else if (backendCfg.cMaxHstStrmsIn == 1)
+                            fWarn = !fValidLineIn && !fValidMicIn;
+                        /* Don't warn if our backend is not able of supporting any input streams at all. */
+                    }
+
+                    if (   !fWarn
+                        && backendCfg.cMaxHstStrmsOut)
+                    {
+                        fWarn = !fValidOut;
+                    }
+                }
+                else
+                    AssertReleaseMsgFailed(("Unable to retrieve audio backend configuration for LUN #%RU8, rc=%Rrc\n",
+                                            pDrv->uLUN, rc2));
+
+                if (fWarn)
+                {
+                    char   szMissingStreams[255];
+                    size_t len = 0;
+                    if (!fValidLineIn)
+                    {
+                        LogRel(("AC97: WARNING: Unable to open PCM line input for LUN #%RU8!\n", pDrv->uLUN));
+                        len = RTStrPrintf(szMissingStreams, sizeof(szMissingStreams), "PCM Input");
+                    }
+                    if (!fValidMicIn)
+                    {
+                        LogRel(("AC97: WARNING: Unable to open PCM microphone input for LUN #%RU8!\n", pDrv->uLUN));
+                        len += RTStrPrintf(szMissingStreams + len,
+                                           sizeof(szMissingStreams) - len, len ? ", PCM Microphone" : "PCM Microphone");
+                    }
+                    if (!fValidOut)
+                    {
+                        LogRel(("AC97: WARNING: Unable to open PCM output for LUN #%RU8!\n", pDrv->uLUN));
+                        len += RTStrPrintf(szMissingStreams + len,
+                                           sizeof(szMissingStreams) - len, len ? ", PCM Output" : "PCM Output");
+                    }
+
+                    PDMDevHlpVMSetRuntimeError(pDevIns, 0 /*fFlags*/, "HostAudioNotResponding",
+                                               N_("Some AC'97 audio streams (%s) could not be opened. Guest applications generating audio "
+                                                  "output or depending on audio input may hang. Make sure your host audio device "
+                                                  "is working properly. Check the logfile for error messages of the audio "
+                                                  "subsystem"), szMissingStreams);
+                }
             }
         }
     }
diff --git a/src/VBox/Devices/Audio/DevIchHda.cpp b/src/VBox/Devices/Audio/DevIchHda.cpp
index f310b2e..2e610e0 100644
--- a/src/VBox/Devices/Audio/DevIchHda.cpp
+++ b/src/VBox/Devices/Audio/DevIchHda.cpp
@@ -602,7 +602,7 @@ typedef struct HDASTREAM
     uint8_t        u8Strm;
     uint8_t        Padding0[7];
     /** DMA base address (SDnBDPU - SDnBDPL). */
-    uint64_t       u64BaseDMA;
+    uint64_t       u64BDLBase;
     /** Cyclic Buffer Length (SDnCBL).
      *  Represents the size of the ring buffer. */
     uint32_t       u32CBL;
@@ -835,10 +835,10 @@ static int hdaTransfer(PHDASTATE pThis, ENMSOUNDSOURCE enmSrc, uint32_t cbToProc
 #endif
 
 #ifdef IN_RING3
-static int hdaBDLEFetch(PHDASTATE pThis, PHDABDLE pBDLE, uint64_t u64BaseDMA, uint16_t u16Entry);
-static void hdaStreamUpdateLPIB(PHDASTATE pThis, PHDASTREAM pStrmSt, uint32_t u32LPIB);
+static int       hdaBDLEFetch(PHDASTATE pThis, PHDABDLE pBDLE, uint64_t u64BaseDMA, uint16_t u16Entry);
+DECLINLINE(void) hdaStreamUpdateLPIB(PHDASTATE pThis, PHDASTREAM pStrmSt, uint32_t u32LPIB);
 # ifdef LOG_ENABLED
-static void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BaseDMA, uint16_t cBDLE);
+static void             hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BaseDMA, uint16_t cBDLE);
 # endif
 #endif
 
@@ -870,7 +870,7 @@ static void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BaseDMA, uint16_t cBDLE)
     /* Offset 0x84 (SD0) */ \
     { offset + 0x4,  0x00004, 0xFFFFFFFF, 0x00000000, hdaRegReadLPIB, hdaRegWriteU32   , HDA_REG_IDX_STRM(name, LPIB) , #name " Link Position In Buffer" }, \
     /* Offset 0x88 (SD0) */ \
-    { offset + 0x8,  0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32, hdaRegWriteU32    , HDA_REG_IDX_STRM(name, CBL)  , #name " Cyclic Buffer Length" }, \
+    { offset + 0x8,  0x00004, 0xFFFFFFFF, 0xFFFFFFFF, hdaRegReadU32, hdaRegWriteSDCBL  , HDA_REG_IDX_STRM(name, CBL)  , #name " Cyclic Buffer Length" }, \
     /* Offset 0x8C (SD0) */ \
     { offset + 0xC,  0x00002, 0x0000FFFF, 0x0000FFFF, hdaRegReadU16, hdaRegWriteSDLVI  , HDA_REG_IDX_STRM(name, LVI)  , #name " Last Valid Index" }, \
     /* Reserved: FIFO Watermark. ** @todo Document this! */ \
@@ -878,7 +878,7 @@ static void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BaseDMA, uint16_t cBDLE)
     /* Offset 0x90 (SD0) */ \
     { offset + 0x10, 0x00002, 0x000000FF, 0x00000000, hdaRegReadU16, hdaRegWriteSDFIFOS, HDA_REG_IDX_STRM(name, FIFOS), #name " FIFO Size" }, \
     /* Offset 0x92 (SD0) */ \
-    { offset + 0x12, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16, hdaRegWriteSDFMT  , HDA_REG_IDX_STRM(name, FMT)  , #name " Format" }, \
+    { offset + 0x12, 0x00002, 0x00007F7F, 0x00007F7F, hdaRegReadU16, hdaRegWriteSDFMT  , HDA_REG_IDX_STRM(name, FMT)  , #name " Stream Format" }, \
     /* Reserved: 0x94 - 0x98. */ \
     /* Offset 0x98 (SD0) */ \
     { offset + 0x18, 0x00004, 0xFFFFFF80, 0xFFFFFF80, hdaRegReadU32, hdaRegWriteSDBDPL , HDA_REG_IDX_STRM(name, BDPL) , #name " Buffer Descriptor List Pointer-Lower Base Address" }, \
@@ -1031,7 +1031,7 @@ DECLINLINE(void) hdaStreamUpdateLPIB(PHDASTATE pThis, PHDASTREAM pStrmSt, uint32
 
     Assert(u32LPIB <= pStrmSt->u32CBL);
 
-    LogFlowFunc(("uStrm=%RU8, LPIB=%RU32 (DMA Position Buffer Enabled: %RTbool)\n",
+    LogFlowFunc(("[SD%RU8]: LPIB=%RU32 (DMA Position Buffer Enabled: %RTbool)\n",
                  pStrmSt->u8Strm, u32LPIB, pThis->fDMAPosition));
 
     /* Update LPIB in any case. */
@@ -1045,7 +1045,7 @@ DECLINLINE(void) hdaStreamUpdateLPIB(PHDASTATE pThis, PHDASTREAM pStrmSt, uint32
                                         (void *)&u32LPIB, sizeof(uint32_t));
         AssertRC(rc2);
 #ifdef DEBUG
-        hdaBDLEDumpAll(pThis, pStrmSt->u64BaseDMA, pStrmSt->State.uCurBDLE);
+        hdaBDLEDumpAll(pThis, pStrmSt->u64BDLBase, pStrmSt->State.uCurBDLE);
 #endif
     }
 }
@@ -1137,7 +1137,7 @@ DECLINLINE(int) hdaStreamGetNextBDLE(PHDASTATE pThis, PHDASTREAM pStrmSt)
 
     Assert(pStrmSt->State.uCurBDLE < pStrmSt->u16LVI + 1);
 
-    int rc = hdaBDLEFetch(pThis, &pStrmSt->State.BDLE, pStrmSt->u64BaseDMA, pStrmSt->State.uCurBDLE);
+    int rc = hdaBDLEFetch(pThis, &pStrmSt->State.BDLE, pStrmSt->u64BDLBase, pStrmSt->State.uCurBDLE);
 
 #ifdef DEBUG
     LogFlowFunc(("[SD%RU8]: uOldBDLE=%RU16, uCurBDLE=%RU16, LVI=%RU32, %R[bdle]\n",
@@ -1147,6 +1147,41 @@ DECLINLINE(int) hdaStreamGetNextBDLE(PHDASTATE pThis, PHDASTREAM pStrmSt)
 }
 #endif
 
+DECLINLINE(PHDASTREAM) hdaStreamFromID(PHDASTATE pThis, uint8_t uStreamID)
+{
+    PHDASTREAM pStrmSt;
+
+    switch (uStreamID)
+    {
+        case 0: /** @todo Use dynamic indices, based on stream assignment. */
+        {
+            pStrmSt = &pThis->StrmStLineIn;
+            break;
+        }
+# ifdef VBOX_WITH_HDA_MIC_IN
+        case 2: /** @todo Use dynamic indices, based on stream assignment. */
+        {
+            pStrmSt = &pThis->StrmStMicIn;
+            break;
+        }
+# endif
+        case 4: /** @todo Use dynamic indices, based on stream assignment. */
+        {
+            pStrmSt = &pThis->StrmStOut;
+            break;
+        }
+
+        default:
+        {
+            pStrmSt = NULL;
+            LogFunc(("Warning: Stream with ID=%RU8 not handled\n", uStreamID));
+            break;
+        }
+    }
+
+    return pStrmSt;
+}
+
 /**
  * Retrieves the minimum number of bytes accumulated/free in the
  * FIFO before the controller will start a fetch/eviction of data.
@@ -1477,7 +1512,7 @@ static int hdaStreamInit(PHDASTATE pThis, PHDASTREAM pStrmSt, uint8_t u8Strm)
     AssertPtrReturn(pStrmSt, VERR_INVALID_POINTER);
 
     pStrmSt->u8Strm     = u8Strm;
-    pStrmSt->u64BaseDMA = RT_MAKE_U64(HDA_STREAM_REG(pThis, BDPL, pStrmSt->u8Strm),
+    pStrmSt->u64BDLBase = RT_MAKE_U64(HDA_STREAM_REG(pThis, BDPL, pStrmSt->u8Strm),
                                       HDA_STREAM_REG(pThis, BDPU, pStrmSt->u8Strm));
     pStrmSt->u16LVI     = HDA_STREAM_REG(pThis, LVI, pStrmSt->u8Strm);
     pStrmSt->u32CBL     = HDA_STREAM_REG(pThis, CBL, pStrmSt->u8Strm);
@@ -1487,7 +1522,7 @@ static int hdaStreamInit(PHDASTATE pThis, PHDASTREAM pStrmSt, uint8_t u8Strm)
     pStrmSt->State.uCurBDLE = 0;
 
     LogFlowFunc(("[SD%RU8]: DMA @ 0x%x (%RU32 bytes), LVI=%RU16, FIFOS=%RU16\n",
-                 pStrmSt->u8Strm, pStrmSt->u64BaseDMA, pStrmSt->u32CBL, pStrmSt->u16LVI, pStrmSt->u16FIFOS));
+                 pStrmSt->u8Strm, pStrmSt->u64BDLBase, pStrmSt->u32CBL, pStrmSt->u16LVI, pStrmSt->u16FIFOS));
 
 #ifdef DEBUG
     uint64_t u64BaseDMA = RT_MAKE_U64(HDA_STREAM_REG(pThis, BDPL, u8Strm),
@@ -1851,12 +1886,27 @@ static int hdaRegWriteCORBWP(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 
 static int hdaRegWriteSDCBL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
-    const uint8_t  u8Strm  = HDA_SD_NUM_FROM_REG(pThis, CBL, iReg);
-          uint32_t u32LPIB = HDA_STREAM_REG(pThis, LPIB, u8Strm);
+    int rc = hdaRegWriteU32(pThis, iReg, u32Value);
+    if (RT_SUCCESS(rc))
+    {
+        uint8_t u8Strm  = HDA_SD_NUM_FROM_REG(pThis, CBL, iReg);
+
+        PHDASTREAM pStrmSt = hdaStreamFromID(pThis, u8Strm);
+        if (pStrmSt)
+        {
+            pStrmSt->u32CBL = u32Value;
 
-    LogFlowFunc(("[SD%RU8]: LPIB=%RU32, CBL=%RU32\n", u8Strm, u32LPIB, u32Value));
+            /* Reset BDLE state. */
+            RT_ZERO(pStrmSt->State.BDLE);
+            pStrmSt->State.uCurBDLE = 0;
+        }
 
-    return hdaRegWriteU32(pThis, iReg, u32Value);
+        LogFlowFunc(("[SD%RU8]: CBL=%RU32\n", u8Strm, u32Value));
+    }
+    else
+        AssertRCReturn(rc, VINF_SUCCESS);
+
+    return rc;
 }
 
 static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
@@ -1868,32 +1918,11 @@ static int hdaRegWriteSDCTL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 
     uint8_t u8Strm = HDA_SD_NUM_FROM_REG(pThis, CTL, iReg);
 
-    PHDASTREAM pStrmSt;
-    switch (u8Strm)
+    PHDASTREAM pStrmSt = hdaStreamFromID(pThis, u8Strm);
+    if (!pStrmSt)
     {
-        case 0: /** @todo Use dynamic indices, based on stream assignment. */
-        {
-            pStrmSt = &pThis->StrmStLineIn;
-            break;
-        }
-# ifdef VBOX_WITH_HDA_MIC_IN
-        case 2: /** @todo Use dynamic indices, based on stream assignment. */
-        {
-            pStrmSt = &pThis->StrmStMicIn;
-            break;
-        }
-# endif
-        case 4: /** @todo Use dynamic indices, based on stream assignment. */
-        {
-            pStrmSt = &pThis->StrmStOut;
-            break;
-        }
-
-        default:
-        {
-            LogFunc(("Warning: Changing SDCTL on non-attached stream (iReg=0x%x)\n", iReg));
-            return hdaRegWriteU24(pThis, iReg, u32Value); /* Write 3 bytes. */
-        }
+        LogFunc(("Warning: Changing SDCTL on non-attached stream with ID=%RU8 (iReg=0x%x)\n", u8Strm, iReg));
+        return hdaRegWriteU24(pThis, iReg, u32Value); /* Write 3 bytes. */
     }
 
     LogFunc(("[SD%RU8]: fRun=%RTbool, fInRun=%RTbool, fReset=%RTbool, fInReset=%RTbool, %R[sdctl]\n",
@@ -1985,9 +2014,26 @@ static int hdaRegWriteSDLVI(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
     if (!hdaRegWriteSDIsAllowed(pThis, iReg, u32Value))
         return VINF_SUCCESS;
 
-    int rc = hdaRegWriteU32(pThis, iReg, u32Value);
-    if (RT_FAILURE(rc))
+    int rc = hdaRegWriteU16(pThis, iReg, u32Value);
+    if (RT_SUCCESS(rc))
+    {
+        uint8_t u8Strm = HDA_SD_NUM_FROM_REG(pThis, LVI, iReg);
+
+        PHDASTREAM pStrmSt = hdaStreamFromID(pThis, u8Strm);
+        if (pStrmSt)
+        {
+            pStrmSt->u16LVI = u32Value;
+
+            /* Reset BDLE state. */
+            RT_ZERO(pStrmSt->State.BDLE);
+            pStrmSt->State.uCurBDLE = 0;
+        }
+
+        LogFlowFunc(("[SD%RU8]: CBL=%RU32\n", u8Strm, u32Value));
+    }
+    else
         AssertRCReturn(rc, VINF_SUCCESS);
+
     return rc;
 }
 
@@ -2070,7 +2116,7 @@ static int hdaRegWriteSDFIFOS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 }
 
 #ifdef IN_RING3
-static int hdaSDFMTToStrmCfg(uint32_t u32SdFmt, PPDMAUDIOSTREAMCFG pCfg)
+static int hdaSDFMTToStrmCfg(uint32_t u32SDFMT, PPDMAUDIOSTREAMCFG pCfg)
 {
     AssertPtrReturn(pCfg, VERR_INVALID_POINTER);
 
@@ -2078,11 +2124,11 @@ static int hdaSDFMTToStrmCfg(uint32_t u32SdFmt, PPDMAUDIOSTREAMCFG pCfg)
 
     int rc = VINF_SUCCESS;
 
-    uint32_t u32Hz     = (u32SdFmt & HDA_SDFMT_BASE_RATE_SHIFT) ? 44100 : 48000;
+    uint32_t u32Hz     = (u32SDFMT & HDA_SDFMT_BASE_RATE_SHIFT) ? 44100 : 48000;
     uint32_t u32HzMult = 1;
     uint32_t u32HzDiv  = 1;
 
-    switch (EXTRACT_VALUE(u32SdFmt, HDA_SDFMT_MULT_MASK, HDA_SDFMT_MULT_SHIFT))
+    switch (EXTRACT_VALUE(u32SDFMT, HDA_SDFMT_MULT_MASK, HDA_SDFMT_MULT_SHIFT))
     {
         case 0: u32HzMult = 1; break;
         case 1: u32HzMult = 2; break;
@@ -2090,11 +2136,11 @@ static int hdaSDFMTToStrmCfg(uint32_t u32SdFmt, PPDMAUDIOSTREAMCFG pCfg)
         case 3: u32HzMult = 4; break;
         default:
             LogFunc(("Unsupported multiplier %x\n",
-                     EXTRACT_VALUE(u32SdFmt, HDA_SDFMT_MULT_MASK, HDA_SDFMT_MULT_SHIFT)));
+                     EXTRACT_VALUE(u32SDFMT, HDA_SDFMT_MULT_MASK, HDA_SDFMT_MULT_SHIFT)));
             rc = VERR_NOT_SUPPORTED;
             break;
     }
-    switch (EXTRACT_VALUE(u32SdFmt, HDA_SDFMT_DIV_MASK, HDA_SDFMT_DIV_SHIFT))
+    switch (EXTRACT_VALUE(u32SDFMT, HDA_SDFMT_DIV_MASK, HDA_SDFMT_DIV_SHIFT))
     {
         case 0: u32HzDiv = 1; break;
         case 1: u32HzDiv = 2; break;
@@ -2106,13 +2152,13 @@ static int hdaSDFMTToStrmCfg(uint32_t u32SdFmt, PPDMAUDIOSTREAMCFG pCfg)
         case 7: u32HzDiv = 8; break;
         default:
             LogFunc(("Unsupported divisor %x\n",
-                     EXTRACT_VALUE(u32SdFmt, HDA_SDFMT_DIV_MASK, HDA_SDFMT_DIV_SHIFT)));
+                     EXTRACT_VALUE(u32SDFMT, HDA_SDFMT_DIV_MASK, HDA_SDFMT_DIV_SHIFT)));
             rc = VERR_NOT_SUPPORTED;
             break;
     }
 
     PDMAUDIOFMT enmFmt = AUD_FMT_S16; /* Default to 16-bit signed. */
-    switch (EXTRACT_VALUE(u32SdFmt, HDA_SDFMT_BITS_MASK, HDA_SDFMT_BITS_SHIFT))
+    switch (EXTRACT_VALUE(u32SDFMT, HDA_SDFMT_BITS_MASK, HDA_SDFMT_BITS_SHIFT))
     {
         case 0:
             LogFunc(("Requested 8-bit\n"));
@@ -2134,7 +2180,7 @@ static int hdaSDFMTToStrmCfg(uint32_t u32SdFmt, PPDMAUDIOSTREAMCFG pCfg)
             break;
         default:
             AssertMsgFailed(("Unsupported bits shift %x\n",
-                             EXTRACT_VALUE(u32SdFmt, HDA_SDFMT_BITS_MASK, HDA_SDFMT_BITS_SHIFT)));
+                             EXTRACT_VALUE(u32SDFMT, HDA_SDFMT_BITS_MASK, HDA_SDFMT_BITS_SHIFT)));
             rc = VERR_NOT_SUPPORTED;
             break;
     }
@@ -2142,7 +2188,7 @@ static int hdaSDFMTToStrmCfg(uint32_t u32SdFmt, PPDMAUDIOSTREAMCFG pCfg)
     if (RT_SUCCESS(rc))
     {
         pCfg->uHz           = u32Hz * u32HzMult / u32HzDiv;
-        pCfg->cChannels     = (u32SdFmt & 0xf) + 1;
+        pCfg->cChannels     = (u32SDFMT & 0xf) + 1;
         pCfg->enmFormat     = enmFmt;
         pCfg->enmEndianness = PDMAUDIOHOSTENDIANNESS;
     }
@@ -2165,7 +2211,9 @@ static int hdaRegWriteSDFMT(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
     PDMAUDIOSTREAMCFG strmCfg;
     int rc = hdaSDFMTToStrmCfg(u32Value, &strmCfg);
     if (RT_FAILURE(rc))
-        return rc;
+        return VINF_SUCCESS; /* Always return success to the MMIO handler. */
+
+    uint8_t u8Strm = HDA_SD_NUM_FROM_REG(pThis, FMT, iReg);
 
     PHDADRIVER pDrv;
     switch (iReg)
@@ -2180,8 +2228,12 @@ static int hdaRegWriteSDFMT(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
                 rc = hdaCodecOpenStream(pThis->pCodec, MC_INDEX, &strmCfg);
             break;
 #  endif
+        case HDA_REG_SD4FMT:
+            RTListForEach(&pThis->lstDrv, pDrv, HDADRIVER, Node)
+                rc = hdaCodecOpenStream(pThis->pCodec, PO_INDEX, &strmCfg);
+            break;
         default:
-            LogFunc(("Warning: Attempt to change format on register %RU32\n", iReg));
+            LogFunc(("Warning: Changing SDFMT on non-attached stream with ID=%RU8 (iReg=0x%x)\n", u8Strm, iReg));
             break;
     }
 
@@ -2195,30 +2247,39 @@ static int hdaRegWriteSDFMT(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 #endif
 }
 
-static int hdaRegWriteSDBDPL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+/* Note: Will be called for both, BDPL and BDPU, registers. */
+DECLINLINE(int) hdaRegWriteSDBDPX(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value, uint8_t u8Strm)
 {
     if (!hdaRegWriteSDIsAllowed(pThis, iReg, u32Value))
         return VINF_SUCCESS;
 
-    LogFlowFunc(("[SD%RU8]: DMA BDPL -> 0x%x\n", HDA_SD_NUM_FROM_REG(pThis, CTL, iReg), u32Value));
-
     int rc = hdaRegWriteU32(pThis, iReg, u32Value);
-    if (RT_FAILURE(rc))
+    if (RT_SUCCESS(rc))
+    {
+        PHDASTREAM pStrmSt = hdaStreamFromID(pThis, u8Strm);
+        if (pStrmSt)
+        {
+            pStrmSt->u64BDLBase = RT_MAKE_U64(HDA_STREAM_REG(pThis, BDPL, u8Strm),
+                                              HDA_STREAM_REG(pThis, BDPU, u8Strm));
+            /* Reset BDLE state. */
+            RT_ZERO(pStrmSt->State.BDLE);
+            pStrmSt->State.uCurBDLE = 0;
+        }
+    }
+    else
         AssertRCReturn(rc, VINF_SUCCESS);
+
     return rc;
 }
 
-static int hdaRegWriteSDBDPU(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+static int hdaRegWriteSDBDPL(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 {
-    if (!hdaRegWriteSDIsAllowed(pThis, iReg, u32Value))
-        return VINF_SUCCESS;
-
-    LogFlowFunc(("[SD%RU8]: DMA BDPU -> 0x%x\n", HDA_SD_NUM_FROM_REG(pThis, CTL, iReg), u32Value));
+    return hdaRegWriteSDBDPX(pThis, iReg, u32Value, HDA_SD_NUM_FROM_REG(pThis, BDPL, iReg));
+}
 
-    int rc = hdaRegWriteU32(pThis, iReg, u32Value);
-    if (RT_FAILURE(rc))
-        AssertRCReturn(rc, VINF_SUCCESS);
-    return rc;
+static int hdaRegWriteSDBDPU(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
+{
+    return hdaRegWriteSDBDPX(pThis, iReg, u32Value, HDA_SD_NUM_FROM_REG(pThis, BDPU, iReg));
 }
 
 /**
@@ -2380,17 +2441,17 @@ static int hdaRegWriteRIRBSTS(PHDASTATE pThis, uint32_t iReg, uint32_t u32Value)
 
 #ifdef IN_RING3
 #ifdef LOG_ENABLED
-static void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BaseDMA, uint16_t cBDLE)
+static void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BDLBase, uint16_t cBDLE)
 {
-    LogFlowFunc(("BDLEs @ 0x%x (%RU16):\n", u64BaseDMA, cBDLE));
-    if (!u64BaseDMA)
+    LogFlowFunc(("BDLEs @ 0x%x (%RU16):\n", u64BDLBase, cBDLE));
+    if (!u64BDLBase)
         return;
 
     uint32_t cbBDLE = 0;
     for (uint16_t i = 0; i < cBDLE; i++)
     {
         uint8_t bdle[16]; /** @todo Use a define. */
-        PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), u64BaseDMA + i * 16, bdle, 16); /** @todo Use a define. */
+        PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), u64BDLBase + i * 16, bdle, 16); /** @todo Use a define. */
 
         uint64_t addr = *(uint64_t *)bdle;
         uint32_t len  = *(uint32_t *)&bdle[8];
@@ -2407,13 +2468,13 @@ static void hdaBDLEDumpAll(PHDASTATE pThis, uint64_t u64BaseDMA, uint16_t cBDLE)
     if (!pThis->u64DPBase) /* No DMA base given? Bail out. */
         return;
 
-    LogFlowFunc(("DMA counters:\n", cbBDLE));
+    LogFlowFunc(("DMA counters:\n"));
 
-    for (int i = 0; i < 8; i++) /** @todo Use a define for MAX_STREAMS! */
+    for (int i = 0; i < cBDLE; i++)
     {
         uint32_t uDMACnt;
         PDMDevHlpPhysRead(pThis->CTX_SUFF(pDevIns), (pThis->u64DPBase & DPBASE_ADDR_MASK) + (i * 2 * sizeof(uint32_t)),
-                          &uDMACnt, sizeof(&uDMACnt));
+                          &uDMACnt, sizeof(uDMACnt));
 
         LogFlowFunc(("\t#%03d DMA @ 0x%x\n", i , uDMACnt));
     }
@@ -3178,7 +3239,7 @@ static int hdaTransfer(PHDASTATE pThis, ENMSOUNDSOURCE enmSrc, uint32_t cbToProc
 
     /* Sanity checks. */
     Assert(pStrmSt->u8Strm <= 7); /** @todo Use a define for MAX_STREAMS! */
-    Assert(pStrmSt->u64BaseDMA);
+    Assert(pStrmSt->u64BDLBase);
     Assert(pStrmSt->u32CBL);
 
     /* State sanity checks. */
@@ -3571,7 +3632,7 @@ static int hdaSaveStream(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, PHDASTREAM pStrm)
 
     hdaBDLEDumpAll(pThis, u64BaseDMA, u16LVI + 1);
 
-    Assert(u64BaseDMA == pStrm->u64BaseDMA);
+    Assert(u64BaseDMA == pStrm->u64BDLBase);
     Assert(u16LVI     == pStrm->u16LVI);
     Assert(u32CBL     == pStrm->u32CBL);
 #endif
@@ -3803,28 +3864,14 @@ static DECLCALLBACK(int) hdaLoadExec(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, uint32
                 if (RT_FAILURE(rc))
                     break;
 
-                PHDASTREAM pStrm;
+                PHDASTREAM pStrm = hdaStreamFromID(pThis, uStreamID);
                 HDASTREAM  StreamDummy;
 
-                switch (uStreamID)
+                if (!pStrm)
                 {
-                    case 0: /** @todo Implement dynamic stream IDs. */
-                        pStrm = &pThis->StrmStLineIn;
-                        break;
-#ifdef VBOX_WITH_HDA_MIC_IN
-                    case 2: /** @todo Implement dynamic stream IDs. */
-                        pStrm = &pThis->StrmStMicIn;
-                        break;
-#endif
-                    case 4: /** @todo Implement dynamic stream IDs. */
-                        pStrm = &pThis->StrmStOut;
-                        break;
-
-                    default:
-                        pStrm = &StreamDummy;
-
-                        LogRel2(("HDA: Warning: Stream ID=%RU32 not supported, skipping to load ...\n", uStreamID));
-                        break;
+                    pStrm = &StreamDummy;
+                    LogRel2(("HDA: Warning: Stream ID=%RU32 not supported, skipping to load ...\n", uStreamID));
+                    break;
                 }
 
                 RT_BZERO(pStrm, sizeof(HDASTREAM));
@@ -4371,12 +4418,7 @@ static int hdaAttachInternal(PPDMDEVINS pDevIns, PHDADRIVER pDrv, unsigned uLUN,
             rc = VERR_NO_MEMORY;
     }
     else if (rc == VERR_PDM_NO_ATTACHED_DRIVER)
-    {
         LogFunc(("No attached driver for LUN #%u\n", uLUN));
-    }
-    else if (RT_FAILURE(rc))
-        AssertMsgFailed(("Failed to attach HDA LUN #%u (\"%s\"), rc=%Rrc\n",
-                        uLUN, pszDesc, rc));
 
     if (RT_FAILURE(rc))
     {
@@ -4735,21 +4777,17 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
             PPDMIAUDIOCONNECTOR pCon = pDrv->pConnector;
             AssertPtr(pCon);
 
-            uint8_t cFailed = 0;
-            if (!pCon->pfnIsValidIn (pCon, pDrv->LineIn.pStrmIn))
-                cFailed++;
+            bool fValidLineIn = pCon->pfnIsValidIn(pCon, pDrv->LineIn.pStrmIn);
 #ifdef VBOX_WITH_HDA_MIC_IN
-            if (!pCon->pfnIsValidIn (pCon, pDrv->MicIn.pStrmIn))
-                cFailed++;
+            bool fValidMicIn  = pCon->pfnIsValidIn (pCon, pDrv->MicIn.pStrmIn);
 #endif
-            if (!pCon->pfnIsValidOut(pCon, pDrv->Out.pStrmOut))
-                cFailed++;
+            bool fValidOut    = pCon->pfnIsValidOut(pCon, pDrv->Out.pStrmOut);
 
+            if (    !fValidLineIn
 #ifdef VBOX_WITH_HDA_MIC_IN
-            if (cFailed == 3)
-#else
-            if (cFailed == 2)
+                 && !fValidMicIn
 #endif
+                 && !fValidOut)
             {
                 LogRel(("HDA: Falling back to NULL backend (no sound audible)\n"));
 
@@ -4760,36 +4798,73 @@ static DECLCALLBACK(int) hdaConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMNO
                     N_("No audio devices could be opened. Selecting the NULL audio backend "
                        "with the consequence that no sound is audible"));
             }
-            else if (cFailed)
+            else
             {
-                if (!pDrv->pConnector->pfnIsValidIn (pDrv->pConnector, pDrv->LineIn.pStrmIn))
-                    LogRel(("HDA: WARNING: Unable to open PCM line input for LUN #%RU32!\n",       pDrv->uLUN));
+                bool fWarn = false;
+
+                PDMAUDIOBACKENDCFG backendCfg;
+                int rc2 = pCon->pfnGetConfiguration(pCon, &backendCfg);
+                if (RT_SUCCESS(rc2))
+                {
+                    if (backendCfg.cMaxHstStrmsIn)
+                    {
 #ifdef VBOX_WITH_HDA_MIC_IN
-                if (!pDrv->pConnector->pfnIsValidIn (pDrv->pConnector, pDrv->MicIn.pStrmIn))
-                    LogRel(("HDA: WARNING: Unable to open PCM microphone input for LUN #%RU32!\n", pDrv->uLUN));
+                        /* If the audio backend supports two or more input streams at once,
+                         * warn if one of our two inputs (microphone-in and line-in) failed to initialize. */
+                        if (backendCfg.cMaxHstStrmsIn >= 2)
+                            fWarn = !fValidLineIn || !fValidMicIn;
+                        /* If the audio backend only supports one input stream at once (e.g. pure ALSA, and
+                         * *not* ALSA via PulseAudio plugin!), only warn if both of our inputs failed to initialize.
+                         * One of the two simply is not in use then. */
+                        else if (backendCfg.cMaxHstStrmsIn == 1)
+                            fWarn = !fValidLineIn && !fValidMicIn;
+                        /* Don't warn if our backend is not able of supporting any input streams at all. */
+#else
+                        /* We only have line-in as input source. */
+                        fWarn = !fValidLineIn;
 #endif
-                if (!pDrv->pConnector->pfnIsValidOut(pDrv->pConnector, pDrv->Out.pStrmOut))
-                    LogRel(("HDA: WARNING: Unable to open PCM output for LUN #%RU32!\n",           pDrv->uLUN));
-
-                char   szMissingStreams[255];
-                size_t len = 0;
-                if (!pCon->pfnIsValidIn (pCon, pDrv->LineIn.pStrmIn))
-                    len = RTStrPrintf(szMissingStreams,
-                                      sizeof(szMissingStreams), "PCM Input");
+                    }
+
+                    if (   !fWarn
+                        && backendCfg.cMaxHstStrmsOut)
+                    {
+                        fWarn = !fValidOut;
+                    }
+                }
+                else
+                    AssertReleaseMsgFailed(("Unable to retrieve audio backend configuration for LUN #%RU8, rc=%Rrc\n",
+                                            pDrv->uLUN, rc2));
+
+                if (fWarn)
+                {
+                    char   szMissingStreams[255];
+                    size_t len = 0;
+                    if (!fValidLineIn)
+                    {
+                        LogRel(("HDA: WARNING: Unable to open PCM line input for LUN #%RU8!\n", pDrv->uLUN));
+                        len = RTStrPrintf(szMissingStreams, sizeof(szMissingStreams), "PCM Input");
+                    }
 #ifdef VBOX_WITH_HDA_MIC_IN
-                if (!pCon->pfnIsValidIn (pCon, pDrv->MicIn.pStrmIn))
-                    len += RTStrPrintf(szMissingStreams + len,
-                                       sizeof(szMissingStreams) - len, len ? ", PCM Microphone" : "PCM Microphone");
+                    if (!fValidMicIn)
+                    {
+                        LogRel(("HDA: WARNING: Unable to open PCM microphone input for LUN #%RU8!\n", pDrv->uLUN));
+                        len += RTStrPrintf(szMissingStreams + len,
+                                           sizeof(szMissingStreams) - len, len ? ", PCM Microphone" : "PCM Microphone");
+                    }
 #endif
-                if (!pCon->pfnIsValidOut(pCon, pDrv->Out.pStrmOut))
-                    len += RTStrPrintf(szMissingStreams + len,
-                                       sizeof(szMissingStreams) - len, len ? ", PCM Output" : "PCM Output");
+                    if (!fValidOut)
+                    {
+                        LogRel(("HDA: WARNING: Unable to open PCM output for LUN #%RU8!\n", pDrv->uLUN));
+                        len += RTStrPrintf(szMissingStreams + len,
+                                           sizeof(szMissingStreams) - len, len ? ", PCM Output" : "PCM Output");
+                    }
 
-                PDMDevHlpVMSetRuntimeError(pDevIns, 0 /*fFlags*/, "HostAudioNotResponding",
-                    N_("Some HDA audio streams (%s) could not be opened. Guest applications generating audio "
-                    "output or depending on audio input may hang. Make sure your host audio device "
-                    "is working properly. Check the logfile for error messages of the audio "
-                    "subsystem"), szMissingStreams);
+                    PDMDevHlpVMSetRuntimeError(pDevIns, 0 /*fFlags*/, "HostAudioNotResponding",
+                                               N_("Some HDA audio streams (%s) could not be opened. Guest applications generating audio "
+                                                  "output or depending on audio input may hang. Make sure your host audio device "
+                                                  "is working properly. Check the logfile for error messages of the audio "
+                                                  "subsystem"), szMissingStreams);
+                }
             }
         }
     }
diff --git a/src/VBox/Devices/Audio/DevIchHdaCodec.h b/src/VBox/Devices/Audio/DevIchHdaCodec.h
index bc33e98..825a553 100644
--- a/src/VBox/Devices/Audio/DevIchHdaCodec.h
+++ b/src/VBox/Devices/Audio/DevIchHdaCodec.h
@@ -129,7 +129,7 @@ int hdaCodecConstruct(PPDMDEVINS pDevIns, PHDACODEC pThis, uint16_t uLUN, PCFGMN
 int hdaCodecDestruct(PHDACODEC pThis);
 int hdaCodecSaveState(PHDACODEC pThis, PSSMHANDLE pSSM);
 int hdaCodecLoadState(PHDACODEC pThis, PSSMHANDLE pSSM, uint32_t uVersion);
-int hdaCodecOpenStream(PHDACODEC pThis, PDMAUDIORECSOURCE enmRecSource, PDMAUDIOSTREAMCFG *pAudioSettings);
+int hdaCodecOpenStream(PHDACODEC pThis, ENMSOUNDSOURCE enmSoundSource, PPDMAUDIOSTREAMCFG pCfg);
 
 #define HDA_SSM_VERSION   6
 /** Introduced dynamic number of streams + stream identifiers for serialization.
diff --git a/src/VBox/Devices/Audio/DevSB16.cpp b/src/VBox/Devices/Audio/DevSB16.cpp
index b006c48..06c538e 100644
--- a/src/VBox/Devices/Audio/DevSB16.cpp
+++ b/src/VBox/Devices/Audio/DevSB16.cpp
@@ -2316,11 +2316,9 @@ static DECLCALLBACK(int) sb16Construct(PPDMDEVINS pDevIns, int iInstance, PCFGMN
         PPDMIAUDIOCONNECTOR pCon = pDrv->pConnector;
         AssertPtr(pCon);
 
-        uint8_t cFailed = 0;
-        if (!pCon->pfnIsValidOut(pCon, pDrv->Out.pStrmOut))
-            cFailed++;
-
-        if (cFailed)
+        /* Note: No input streams available for SB16 yet. */
+        bool fValidOut = pCon->pfnIsValidOut(pCon, pDrv->Out.pStrmOut);
+        if (!fValidOut)
         {
             LogRel(("SB16: Falling back to NULL backend (no sound audible)\n"));
 
diff --git a/src/VBox/Devices/Audio/DrvAudio.cpp b/src/VBox/Devices/Audio/DrvAudio.cpp
index 3e66079..ea7af74 100644
--- a/src/VBox/Devices/Audio/DrvAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvAudio.cpp
@@ -2,12 +2,12 @@
 /** @file
  * Intermediate audio driver header.
  *
- * @remarks Intermediate audio driver having audio device as one of the sink and
- *          host backend as other.
+ * @remarks Intermediate audio driver for connecting the audio device emulation
+ *          with the host backend.
  */
 
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -387,7 +387,9 @@ static int drvAudioControlHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHstStrmIn,
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
     AssertPtrReturn(pHstStrmIn, VERR_INVALID_POINTER);
 
-    int rc;
+    int rc = RTCritSectEnter(&pHstStrmIn->CritSect);
+    if (RT_FAILURE(rc))
+        return rc;
 
     switch (enmStreamCmd)
     {
@@ -474,6 +476,10 @@ static int drvAudioControlHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHstStrmIn,
             break;
     }
 
+    int rc2 = RTCritSectLeave(&pHstStrmIn->CritSect);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
+
     return rc;
 }
 
@@ -482,7 +488,9 @@ static int drvAudioControlHstOut(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMOUT pHstStrmOu
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
     AssertPtrReturn(pHstStrmOut, VERR_INVALID_POINTER);
 
-    int rc;
+    int rc = RTCritSectEnter(&pHstStrmOut->CritSect);
+    if (RT_FAILURE(rc))
+        return rc;
 
     switch (enmStreamCmd)
     {
@@ -574,6 +582,10 @@ static int drvAudioControlHstOut(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMOUT pHstStrmOu
             break;
     }
 
+    int rc2 = RTCritSectLeave(&pHstStrmOut->CritSect);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
+
     return rc;
 }
 
@@ -595,6 +607,12 @@ int drvAudioDestroyHstOut(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMOUT pHstStrmOut)
             /* Remove from driver instance list. */
             RTListNodeRemove(&pHstStrmOut->Node);
 
+            if (RTCritSectIsInitialized(&pHstStrmOut->CritSect))
+            {
+                int rc2 = RTCritSectDelete(&pHstStrmOut->CritSect);
+                AssertRC(rc2);
+            }
+
             RTMemFree(pHstStrmOut);
             pThis->cFreeOutputStreams++;
             return VINF_SUCCESS;
@@ -777,6 +795,9 @@ int drvAudioAllocHstOut(PDRVAUDIO pThis, const char *pszName, PPDMAUDIOSTREAMCFG
 
         rc = AudioMixBufInit(&pHstStrmOut->MixBuf, pszTemp, &pHstStrmOut->Props, cSamples);
         if (RT_SUCCESS(rc))
+            rc = RTCritSectInit(&pHstStrmOut->CritSect);
+
+        if (RT_SUCCESS(rc))
         {
             RTListPrepend(&pThis->lstHstStrmOut, &pHstStrmOut->Node);
             pThis->cFreeOutputStreams--;
@@ -1030,6 +1051,9 @@ static int drvAudioAllocHstIn(PDRVAUDIO pThis, const char *pszName, PPDMAUDIOSTR
 
         rc = AudioMixBufInit(&pHstStrmIn->MixBuf, pszTemp, &pHstStrmIn->Props, cSamples);
         if (RT_SUCCESS(rc))
+            rc = RTCritSectInit(&pHstStrmIn->CritSect);
+
+        if (RT_SUCCESS(rc))
         {
             RTListPrepend(&pThis->lstHstStrmIn, &pHstStrmIn->Node);
             pThis->cFreeInputStreams--;
@@ -1078,12 +1102,21 @@ static DECLCALLBACK(int) drvAudioWrite(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIO
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
 
     AssertPtrReturn(pGstStrmOut, VERR_INVALID_POINTER);
-    AssertPtrReturn(pvBuf, VERR_INVALID_POINTER);
-    AssertReturn(cbBuf, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pvBuf,       VERR_INVALID_POINTER);
+    AssertReturn(cbBuf,          VERR_INVALID_PARAMETER);
     /* pcbWritten is optional. */
 
+    int rc = RTCritSectEnter(&pThis->CritSect);
+    if (RT_FAILURE(rc))
+        return rc;
+
     if (!pThis->pHostDrvAudio->pfnIsEnabled(pThis->pHostDrvAudio, PDMAUDIODIR_OUT))
+    {
+        rc = RTCritSectLeave(&pThis->CritSect);
+        AssertRC(rc);
+
         return VERR_NOT_AVAILABLE;
+    }
 
     PPDMAUDIOHSTSTRMOUT pHstStrmOut = pGstStrmOut->pHstStrmOut;
     AssertPtrReturn(pHstStrmOut, VERR_INVALID_POINTER);
@@ -1096,7 +1129,8 @@ static DECLCALLBACK(int) drvAudioWrite(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIO
     {
         if (pcbWritten)
             *pcbWritten = 0;
-        return VINF_SUCCESS;
+
+        return RTCritSectLeave(&pThis->CritSect);
     }
 
     /*
@@ -1104,7 +1138,7 @@ static DECLCALLBACK(int) drvAudioWrite(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIO
      * guest mixing buffer.
      */
     uint32_t cWritten;
-    int rc = AudioMixBufWriteAt(&pGstStrmOut->MixBuf, 0 /* Offset in samples */, pvBuf, cbBuf, &cWritten);
+    rc = AudioMixBufWriteAt(&pGstStrmOut->MixBuf, 0 /* Offset in samples */, pvBuf, cbBuf, &cWritten);
 
     /*
      * Second, mix the guest mixing buffer with the host mixing
@@ -1133,6 +1167,11 @@ static DECLCALLBACK(int) drvAudioWrite(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIO
     LogFlowFunc(("%s -> %s: Written pvBuf=%p, cbBuf=%RU32, cWritten=%RU32 (%RU32 bytes), cMixed=%RU32, rc=%Rrc\n",
                  pGstStrmOut->MixBuf.pszName, pHstStrmOut->MixBuf.pszName, pvBuf, cbBuf, cWritten,
                  AUDIOMIXBUF_S2B(&pGstStrmOut->MixBuf, cWritten), cMixed, rc));
+
+    int rc2 = RTCritSectLeave(&pThis->CritSect);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
+
     return rc;
 }
 
@@ -1187,6 +1226,12 @@ int drvAudioDestroyHstIn(PDRVAUDIO pThis, PPDMAUDIOHSTSTRMIN pHstStrmIn)
         {
             drvAudioHstInFreeRes(pHstStrmIn);
 
+            if (RTCritSectIsInitialized(&pHstStrmIn->CritSect))
+            {
+                int rc2 = RTCritSectDelete(&pHstStrmIn->CritSect);
+                AssertRC(rc2);
+            }
+
             /* Remove from driver instance list. */
             RTListNodeRemove(&pHstStrmIn->Node);
 
@@ -1244,13 +1289,15 @@ static DECLCALLBACK(int) drvAudioQueryStatus(PPDMIAUDIOCONNECTOR pInterface,
 
     PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
 
-    int rc = VINF_SUCCESS;
-    uint32_t cSamplesLive = 0;
+    int rc = RTCritSectEnter(&pThis->CritSect);
+    if (RT_FAILURE(rc))
+        return rc;
 
     /*
      * Playback.
      */
-    uint32_t cbFreeOut = UINT32_MAX;
+    uint32_t cSamplesLive = 0;
+    uint32_t cbFreeOut    = UINT32_MAX;
 
     PPDMAUDIOHSTSTRMOUT pHstStrmOut = NULL;
     while ((pHstStrmOut = drvAudioHstFindAnyEnabledOut(pThis, pHstStrmOut)))
@@ -1347,6 +1394,13 @@ static DECLCALLBACK(int) drvAudioQueryStatus(PPDMIAUDIOCONNECTOR pInterface,
             *pcSamplesLive = cSamplesLive;
     }
 
+    int rc2 = RTCritSectLeave(&pThis->CritSect);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
+
+    if (RT_FAILURE(rc))
+        LogFlowFuncLeaveRC(rc);
+
     return rc;
 }
 
@@ -1357,13 +1411,30 @@ static DECLCALLBACK(int) drvAudioPlayOut(PPDMIAUDIOCONNECTOR pInterface, uint32_
 
     PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
 
-    int rc = VINF_SUCCESS;
-    uint32_t cSamplesPlayedMax = 0;
+    int rc = RTCritSectEnter(&pThis->CritSect);
+    if (RT_FAILURE(rc))
+        return rc;
+
+    /* Backend output (temporarily) disabled / unavailable? */
+    if (!pThis->pHostDrvAudio->pfnIsEnabled(pThis->pHostDrvAudio, PDMAUDIODIR_OUT))
+    {
+        rc = pThis->pHostDrvAudio->pfnGetConf(pThis->pHostDrvAudio, &pThis->BackendCfg);
+        AssertRC(rc);
+
+        if (!pThis->BackendCfg.cMaxHstStrmsOut)
+        {
+            int rc2 = RTCritSectLeave(&pThis->CritSect);
+            AssertRC(rc2);
+
+            return VERR_NOT_AVAILABLE;
+        }
+    }
 
     /*
      * Process all enabled host output streams.
      */
-    PPDMAUDIOHSTSTRMOUT pHstStrmOut = NULL;
+    uint32_t            cSamplesPlayedMax = 0;
+    PPDMAUDIOHSTSTRMOUT pHstStrmOut       = NULL;
     while ((pHstStrmOut = drvAudioHstFindAnyEnabledOut(pThis, pHstStrmOut)))
     {
 #if 0
@@ -1396,9 +1467,13 @@ static DECLCALLBACK(int) drvAudioPlayOut(PPDMIAUDIOCONNECTOR pInterface, uint32_
 #endif
 
         uint32_t cSamplesPlayed = 0;
-        int rc2 = pThis->pHostDrvAudio->pfnPlayOut(pThis->pHostDrvAudio, pHstStrmOut,
-                                                   &cSamplesPlayed);
-        if (RT_SUCCESS(rc2))
+        int rc2 = pThis->pHostDrvAudio->pfnPlayOut(pThis->pHostDrvAudio, pHstStrmOut, &cSamplesPlayed);
+        if (RT_FAILURE(rc2))
+        {
+            rc2 = pThis->pHostDrvAudio->pfnControlOut(pThis->pHostDrvAudio, pHstStrmOut, PDMAUDIOSTREAMCMD_DISABLE);
+            AssertRC(rc2);
+        }
+        else
             cSamplesPlayedMax = RT_MAX(cSamplesPlayed, cSamplesPlayedMax);
 
         LogFlowFunc(("\t[%s] cSamplesPlayed=%RU32, cSamplesPlayedMax=%RU32, rc=%Rrc\n",
@@ -1436,6 +1511,13 @@ static DECLCALLBACK(int) drvAudioPlayOut(PPDMIAUDIOCONNECTOR pInterface, uint32_
             *pcSamplesPlayed = cSamplesPlayedMax;
     }
 
+    int rc2 = RTCritSectLeave(&pThis->CritSect);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
+
+    if (RT_FAILURE(rc))
+        LogFlowFuncLeaveRC(rc);
+
     return rc;
 }
 
@@ -1483,7 +1565,10 @@ static DECLCALLBACK(int) drvAudioRegisterCallbacks(PPDMIAUDIOCONNECTOR pInterfac
     AssertReturn(cCallbacks,     VERR_INVALID_PARAMETER);
 
     PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
-    int          rc = VINF_SUCCESS;
+
+    int rc = RTCritSectEnter(&pThis->CritSect);
+    if (RT_FAILURE(rc))
+        return rc;
 
     for (size_t i = 0; i < cCallbacks; i++)
     {
@@ -1512,6 +1597,10 @@ static DECLCALLBACK(int) drvAudioRegisterCallbacks(PPDMIAUDIOCONNECTOR pInterfac
 
     /** @todo Undo allocations on error. */
 
+    int rc2 = RTCritSectLeave(&pThis->CritSect);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
+
     return rc;
 }
 
@@ -1563,6 +1652,7 @@ static int drvAudioHostInit(PCFGMNODE pCfgHandle, PDRVAUDIO pThis)
 
     LogFlowFuncEnter();
 
+    AssertPtr(pThis->pHostDrvAudio);
     int rc = pThis->pHostDrvAudio->pfnInit(pThis->pHostDrvAudio);
     if (RT_FAILURE(rc))
     {
@@ -1570,49 +1660,49 @@ static int drvAudioHostInit(PCFGMNODE pCfgHandle, PDRVAUDIO pThis)
         return rc;
     }
 
+    /* Get the configuration data from backend. */
+    rc = pThis->pHostDrvAudio->pfnGetConf(pThis->pHostDrvAudio, &pThis->BackendCfg);
+    if (RT_FAILURE(rc))
+    {
+        LogFlowFunc(("Getting backend configuration failed with rc=%Rrc\n", rc));
+        return rc;
+    }
+
     uint32_t cMaxHstStrmsOut = pThis->BackendCfg.cMaxHstStrmsOut;
-    uint32_t cbHstStrmsOut = pThis->BackendCfg.cbStreamOut;
+    size_t cbHstStrmsOut     = pThis->BackendCfg.cbStreamOut;
 
     if (cbHstStrmsOut)
     {
-        pThis->cFreeOutputStreams = 1; /** @todo Make this configurable. */
-        if (pThis->cFreeOutputStreams > cMaxHstStrmsOut)
-        {
-            LogRel(("Audio: Warning: %RU32 output streams were requested, host driver only supports %RU32\n",
-                    pThis->cFreeOutputStreams, cMaxHstStrmsOut));
-            pThis->cFreeOutputStreams = cMaxHstStrmsOut;
-        }
+        pThis->cFreeOutputStreams = cMaxHstStrmsOut;
     }
     else
         pThis->cFreeOutputStreams = 0;
 
     uint32_t cMaxHstStrmsIn = pThis->BackendCfg.cMaxHstStrmsIn;
-    uint32_t cbHstStrmIn = pThis->BackendCfg.cbStreamIn;
+    size_t cbHstStrmIn      = pThis->BackendCfg.cbStreamIn;
 
     if (cbHstStrmIn)
     {
         /*
          * Note:
-         *  - Our AC'97 emulation has two inputs, line (P.IN) and microphone (P.MIC).
-         ** @todo Document HDA.
+         *  - Our AC'97 emulation has two inputs, line (ac97.pi) and microphone (ac97.mc).
+         *  - Our HDA emulation currently has only line input (hda.pi).
          */
-        pThis->cFreeInputStreams = 2; /** @todo Make this configurable. */
-        if (pThis->cFreeInputStreams > cMaxHstStrmsIn)
-        {
-            LogRel(("Audio: Warning: %RU32 input streams were requested, host driver only supports %RU32\n",
-                    pThis->cFreeInputStreams, cMaxHstStrmsIn));
-            pThis->cFreeInputStreams = cMaxHstStrmsIn;
-        }
+        pThis->cFreeInputStreams = cMaxHstStrmsIn;
     }
     else
         pThis->cFreeInputStreams = 0;
 
-    LogFlowFunc(("cMaxHstStrmsOut=%RU32 (cb=%RU32), cMaxHstStrmsIn=%RU32 (cb=%RU32)\n",
+    LogFlowFunc(("cMaxHstStrmsOut=%RU32 (cb=%zu), cMaxHstStrmsIn=%RU32 (cb=%zu)\n",
                  cMaxHstStrmsOut, cbHstStrmsOut, cMaxHstStrmsIn, cbHstStrmIn));
 
     LogFlowFunc(("cFreeInputStreams=%RU8, cFreeOutputStreams=%RU8\n",
                  pThis->cFreeInputStreams, pThis->cFreeOutputStreams));
 
+    LogRel(("Audio: Host audio backend supports %RU32 output streams and %RU32 input streams at once\n",
+            /* Clamp for logging. Unlimited streams are defined by UINT32_MAX. */
+            RT_MIN(64, cMaxHstStrmsOut), RT_MIN(64, cMaxHstStrmsIn)));
+
     LogFlowFuncLeave();
     return VINF_SUCCESS;
 }
@@ -1695,13 +1785,7 @@ static DECLCALLBACK(int) drvAudioInit(PCFGMNODE pCfgHandle, PPDMDRVINS pDrvIns)
     RTListInit(&pThis->lstCBOut);
 #endif
 
-    int rc = VINF_SUCCESS;
-
-    /* Get the configuration data from the selected backend (if available). */
-    AssertPtr(pThis->pHostDrvAudio);
-    if (RT_LIKELY(pThis->pHostDrvAudio->pfnGetConf))
-        rc = pThis->pHostDrvAudio->pfnGetConf(pThis->pHostDrvAudio, &pThis->BackendCfg);
-
+    int rc = RTCritSectInit(&pThis->CritSect);
     if (RT_SUCCESS(rc))
     {
         rc = drvAudioProcessOptions(pCfgHandle, "AUDIO", audio_options);
@@ -1734,15 +1818,20 @@ static DECLCALLBACK(int) drvAudioRead(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOG
     AssertPtrReturn(pThis, VERR_INVALID_POINTER);
 
     AssertPtrReturn(pGstStrmIn, VERR_INVALID_POINTER);
-    AssertPtrReturn(pvBuf, VERR_INVALID_POINTER);
-    AssertReturn(cbBuf, VERR_INVALID_PARAMETER);
+    AssertPtrReturn(pvBuf,      VERR_INVALID_POINTER);
+    AssertReturn(cbBuf,         VERR_INVALID_PARAMETER);
     /* pcbWritten is optional. */
 
+    int rc = RTCritSectEnter(&pThis->CritSect);
+    if (RT_FAILURE(rc))
+        return rc;
+
     if (!pThis->pHostDrvAudio->pfnIsEnabled(pThis->pHostDrvAudio, PDMAUDIODIR_IN))
     {
         if (pcbRead)
             *pcbRead = 0;
-        return VINF_SUCCESS;
+
+        return RTCritSectLeave(&pThis->CritSect);
     }
 
     PPDMAUDIOHSTSTRMIN pHstStrmIn = pGstStrmIn->pHstStrmIn;
@@ -1756,8 +1845,7 @@ static DECLCALLBACK(int) drvAudioRead(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOG
      * should have the audio data in the format the guest needs.
      */
     uint32_t cRead;
-    int rc = AudioMixBufReadCirc(&pGstStrmIn->MixBuf,
-                                 pvBuf, cbBuf, &cRead);
+    rc = AudioMixBufReadCirc(&pGstStrmIn->MixBuf, pvBuf, cbBuf, &cRead);
     if (RT_SUCCESS(rc))
     {
         AudioMixBufFinish(&pGstStrmIn->MixBuf, cRead);
@@ -1768,6 +1856,11 @@ static DECLCALLBACK(int) drvAudioRead(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOG
 
     LogFlowFunc(("cRead=%RU32 (%RU32 bytes), rc=%Rrc\n",
                  cRead, AUDIOMIXBUF_S2B(&pGstStrmIn->MixBuf, cRead), rc));
+
+    int rc2 = RTCritSectLeave(&pThis->CritSect);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
+
     return rc;
 }
 
@@ -1886,29 +1979,42 @@ static DECLCALLBACK(int) drvAudioCreateIn(PPDMIAUDIOCONNECTOR pInterface, const
                                           PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg,
                                           PPDMAUDIOGSTSTRMIN *ppGstStrmIn)
 {
-    AssertPtrReturn(pInterface, VERR_INVALID_POINTER);
+    AssertPtrReturn(pInterface,  VERR_INVALID_POINTER);
     AssertPtrReturn(ppGstStrmIn, VERR_INVALID_POINTER);
-    AssertPtrReturn(pszName, VERR_INVALID_POINTER);
-    AssertPtrReturn(pCfg, VERR_INVALID_POINTER);
+    AssertPtrReturn(pszName,     VERR_INVALID_POINTER);
+    AssertPtrReturn(pCfg,        VERR_INVALID_POINTER);
     AssertPtrReturn(ppGstStrmIn, VERR_INVALID_POINTER);
 
     PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
 
+    int rc = RTCritSectEnter(&pThis->CritSect);
+    if (RT_FAILURE(rc))
+        return rc;
+
     LogFlowFunc(("pszName=%s, pCfg=%p\n", pszName, pCfg));
 
     if (!drvAudioStreamCfgIsValid(pCfg))
     {
         LogFunc(("Input stream configuration is not valid, bailing out\n"));
-        return VERR_INVALID_PARAMETER;
+        rc = VERR_INVALID_PARAMETER;
     }
 
     PPDMAUDIOGSTSTRMIN pGstStrmIn = *ppGstStrmIn;
-    if (   pGstStrmIn
+    if (   RT_SUCCESS(rc)
+        && pGstStrmIn
         && drvAudioPCMPropsAreEqual(&pGstStrmIn->Props, pCfg))
     {
         LogFunc(("[%s] Exists and matches required configuration, skipping creation\n",
                  pGstStrmIn->MixBuf.pszName));
-        return VWRN_ALREADY_EXISTS;
+        rc = VWRN_ALREADY_EXISTS;
+    }
+
+    if (rc != VINF_SUCCESS) /* Note: Can be VWRN_ALREADY_EXISTS, so don't use VINF_SUCCESS here. */
+    {
+        int rc2 = RTCritSectLeave(&pThis->CritSect);
+        AssertRC(rc2);
+
+        return rc;
     }
 
     if (   !conf.fixed_in.enabled
@@ -1918,8 +2024,6 @@ static DECLCALLBACK(int) drvAudioCreateIn(PPDMIAUDIOCONNECTOR pInterface, const
         pGstStrmIn = NULL;
     }
 
-    int rc;
-
     if (pGstStrmIn)
     {
         PPDMAUDIOHSTSTRMIN pHstStrmIn = pGstStrmIn->pHstStrmIn;
@@ -1931,6 +2035,10 @@ static DECLCALLBACK(int) drvAudioCreateIn(PPDMIAUDIOCONNECTOR pInterface, const
         if (RTStrAPrintf(&pszTemp, "%s (Guest)", pszName) <= 0)
         {
             RTMemFree(pGstStrmIn);
+
+            int rc2 = RTCritSectLeave(&pThis->CritSect);
+            AssertRC(rc2);
+
             return VERR_NO_MEMORY;
         }
 
@@ -1941,8 +2049,28 @@ static DECLCALLBACK(int) drvAudioCreateIn(PPDMIAUDIOCONNECTOR pInterface, const
     else
         rc = drvAudioCreateStreamPairIn(pThis, pszName, enmRecSource, pCfg, &pGstStrmIn);
 
-    if (pGstStrmIn)
-        *ppGstStrmIn = pGstStrmIn;
+    if (RT_SUCCESS(rc))
+    {
+        if (pGstStrmIn)
+            *ppGstStrmIn = pGstStrmIn;
+    }
+    else
+    {
+        switch (rc)
+        {
+            case VERR_NO_MORE_HANDLES: /** @todo Find a better rc. */
+                LogRel(("Audio: Skipping to create input stream \"%s\", " \
+                        "as the host audio backend reached its maximum of concurrent audio input streams\n", pszName));
+                break;
+
+            default:
+                break;
+        }
+    }
+
+    int rc2 = RTCritSectLeave(&pThis->CritSect);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
 
     LogFlowFuncLeaveRC(rc);
     return rc;
@@ -1951,28 +2079,42 @@ static DECLCALLBACK(int) drvAudioCreateIn(PPDMIAUDIOCONNECTOR pInterface, const
 static DECLCALLBACK(int) drvAudioCreateOut(PPDMIAUDIOCONNECTOR pInterface, const char *pszName,
                                            PPDMAUDIOSTREAMCFG pCfg, PPDMAUDIOGSTSTRMOUT *ppGstStrmOut)
 {
-    AssertPtrReturn(pInterface, VERR_INVALID_POINTER);
-    AssertPtrReturn(pszName, VERR_INVALID_POINTER);
-    AssertPtrReturn(pCfg, VERR_INVALID_POINTER);
+    AssertPtrReturn(pInterface,   VERR_INVALID_POINTER);
+    AssertPtrReturn(pszName,      VERR_INVALID_POINTER);
+    AssertPtrReturn(pCfg,         VERR_INVALID_POINTER);
     AssertPtrReturn(ppGstStrmOut, VERR_INVALID_POINTER);
 
     PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
 
+    int rc = RTCritSectEnter(&pThis->CritSect);
+    if (RT_FAILURE(rc))
+        return rc;
+
     LogFlowFunc(("pszName=%s, pCfg=%p\n", pszName, pCfg));
 
     if (!drvAudioStreamCfgIsValid(pCfg))
     {
         LogFunc(("Output stream configuration is not valid, bailing out\n"));
-        return VERR_INVALID_PARAMETER;
+        rc = VERR_INVALID_PARAMETER;
     }
 
     PPDMAUDIOGSTSTRMOUT pGstStrmOut = *ppGstStrmOut;
-    if (   pGstStrmOut
+    if (   RT_SUCCESS(rc)
+        && pGstStrmOut
         && drvAudioPCMPropsAreEqual(&pGstStrmOut->Props, pCfg))
     {
         LogFunc(("[%s] Exists and matches required configuration, skipping creation\n",
                  pGstStrmOut->MixBuf.pszName));
-        return VWRN_ALREADY_EXISTS;
+
+        rc = VWRN_ALREADY_EXISTS;
+    }
+
+    if (rc != VINF_SUCCESS) /* Note: Can be VWRN_ALREADY_EXISTS, so don't use VINF_SUCCESS here. */
+    {
+        int rc2 = RTCritSectLeave(&pThis->CritSect);
+        AssertRC(rc2);
+
+        return rc;
     }
 
 #if 0
@@ -2002,7 +2144,6 @@ static DECLCALLBACK(int) drvAudioCreateOut(PPDMIAUDIOCONNECTOR pInterface, const
         pGstStrmOut = NULL;
     }
 
-    int rc;
     if (pGstStrmOut)
     {
         PPDMAUDIOHSTSTRMOUT pHstStrmOut = pGstStrmOut->pHstStrmOut;
@@ -2021,8 +2162,8 @@ static DECLCALLBACK(int) drvAudioCreateOut(PPDMIAUDIOCONNECTOR pInterface, const
 
     if (RT_SUCCESS(rc))
     {
-        AssertPtr(pGstStrmOut);
-        *ppGstStrmOut = pGstStrmOut;
+        if (pGstStrmOut)
+            *ppGstStrmOut = pGstStrmOut;
 #if 0
         /* Update remaining live samples with new rate. */
         if (cLiveSamples)
@@ -2038,6 +2179,44 @@ static DECLCALLBACK(int) drvAudioCreateOut(PPDMIAUDIOCONNECTOR pInterface, const
         }
 #endif
     }
+    else
+    {
+        switch (rc)
+        {
+            case VERR_NO_MORE_HANDLES: /** @todo Find a better rc. */
+                LogRel(("Audio: Skipping to create output stream \"%s\", " \
+                        "as the host audio backend reached its maximum of concurrent audio output streams\n", pszName));
+                break;
+
+            default:
+                break;
+        }
+    }
+
+    int rc2 = RTCritSectLeave(&pThis->CritSect);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
+
+    LogFlowFuncLeaveRC(rc);
+    return rc;
+}
+
+static DECLCALLBACK(int) drvAudioGetConfiguration(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOBACKENDCFG pCfg)
+{
+    AssertPtrReturn(pInterface, VERR_INVALID_POINTER);
+    AssertPtrReturn(pCfg,       VERR_INVALID_POINTER);
+
+    PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
+
+    int rc = RTCritSectEnter(&pThis->CritSect);
+    if (RT_FAILURE(rc))
+        return rc;
+
+    rc = pThis->pHostDrvAudio->pfnGetConf(pThis->pHostDrvAudio, pCfg);
+
+    int rc2 = RTCritSectLeave(&pThis->CritSect);
+    if (RT_SUCCESS(rc))
+        rc = rc2;
 
     LogFlowFuncLeaveRC(rc);
     return rc;
@@ -2045,26 +2224,72 @@ static DECLCALLBACK(int) drvAudioCreateOut(PPDMIAUDIOCONNECTOR pInterface, const
 
 static DECLCALLBACK(bool) drvAudioIsActiveIn(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn)
 {
-    return pGstStrmIn ? pGstStrmIn->State.fActive : false;
+    AssertPtrReturn(pInterface, false);
+    /* pGstStrmIn is optional. */
+
+    PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
+
+    int rc2 = RTCritSectEnter(&pThis->CritSect);
+    AssertRC(rc2);
+
+    bool fRet = pGstStrmIn ? pGstStrmIn->State.fActive : false;
+
+    rc2 = RTCritSectLeave(&pThis->CritSect);
+    AssertRC(rc2);
+
+    return fRet;
 }
 
 static DECLCALLBACK(bool) drvAudioIsActiveOut(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut)
 {
-    return pGstStrmOut ? pGstStrmOut->State.fActive : false;
+    AssertPtrReturn(pInterface,  false);
+    /* pGstStrmOut is optional. */
+
+    PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
+
+    int rc2 = RTCritSectEnter(&pThis->CritSect);
+    AssertRC(rc2);
+
+    bool fRet = pGstStrmOut ? pGstStrmOut->State.fActive : false;
+
+    rc2 = RTCritSectLeave(&pThis->CritSect);
+    AssertRC(rc2);
+
+    return fRet;
 }
 
 static DECLCALLBACK(void) drvAudioDestroyIn(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMIN pGstStrmIn)
 {
+    AssertPtrReturnVoid(pInterface);
+    /* pGstStrmIn is optional. */
+
     PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
+
+    int rc2 = RTCritSectEnter(&pThis->CritSect);
+    AssertRC(rc2);
+
     if (pGstStrmIn)
         drvAudioDestroyGstIn(pThis, pGstStrmIn);
+
+    rc2 = RTCritSectLeave(&pThis->CritSect);
+    AssertRC(rc2);
 }
 
 static DECLCALLBACK(void) drvAudioDestroyOut(PPDMIAUDIOCONNECTOR pInterface, PPDMAUDIOGSTSTRMOUT pGstStrmOut)
 {
+    AssertPtrReturnVoid(pInterface);
+    /* pGstStrmOut is optional. */
+
     PDRVAUDIO pThis = PDMIAUDIOCONNECTOR_2_DRVAUDIO(pInterface);
+
+    int rc2 = RTCritSectEnter(&pThis->CritSect);
+    AssertRC(rc2);
+
     if (pGstStrmOut)
         drvAudioDestroyGstOut(pThis, pGstStrmOut);
+
+    rc2 = RTCritSectLeave(&pThis->CritSect);
+    AssertRC(rc2);
 }
 
 /********************************************************************/
@@ -2153,6 +2378,7 @@ static DECLCALLBACK(int) drvAudioConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHan
     pThis->IAudioConnector.pfnQueryStatus            = drvAudioQueryStatus;
     pThis->IAudioConnector.pfnRead                   = drvAudioRead;
     pThis->IAudioConnector.pfnWrite                  = drvAudioWrite;
+    pThis->IAudioConnector.pfnGetConfiguration       = drvAudioGetConfiguration;
     pThis->IAudioConnector.pfnIsActiveIn             = drvAudioIsActiveIn;
     pThis->IAudioConnector.pfnIsActiveOut            = drvAudioIsActiveOut;
     pThis->IAudioConnector.pfnIsValidIn              = drvAudioIsValidIn;
@@ -2205,6 +2431,25 @@ static DECLCALLBACK(int) drvAudioConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfgHan
 }
 
 /**
+ * Destructs an audio driver instance.
+ *
+ * @copydoc FNPDMDRVDESTRUCT
+ */
+static DECLCALLBACK(void) drvAudioDestruct(PPDMDRVINS pDrvIns)
+{
+    LogFlowFuncEnter();
+
+    PDMDRV_CHECK_VERSIONS_RETURN_VOID(pDrvIns);
+    PDRVAUDIO pThis = PDMINS_2_DATA(pDrvIns, PDRVAUDIO);
+
+    if (RTCritSectIsInitialized(&pThis->CritSect))
+    {
+        int rc2 = RTCritSectDelete(&pThis->CritSect);
+        AssertRC(rc2);
+    }
+}
+
+/**
  * Suspend notification.
  *
  * @param   pDrvIns     The driver instance data.
@@ -2241,7 +2486,7 @@ const PDMDRVREG g_DrvAUDIO =
     "Audio connector driver",
     /* fFlags */
     PDM_DRVREG_FLAGS_HOST_BITS_DEFAULT,
-    /* fClass. */
+    /* fClass */
     PDM_DRVREG_CLASS_AUDIO,
     /* cMaxInstances */
     2,
@@ -2250,7 +2495,7 @@ const PDMDRVREG g_DrvAUDIO =
     /* pfnConstruct */
     drvAudioConstruct,
     /* pfnDestruct */
-    NULL,
+    drvAudioDestruct,
     /* pfnRelocate */
     NULL,
     /* pfnIOCtl */
diff --git a/src/VBox/Devices/Audio/DrvAudio.h b/src/VBox/Devices/Audio/DrvAudio.h
index 85812f8..383bb13 100644
--- a/src/VBox/Devices/Audio/DrvAudio.h
+++ b/src/VBox/Devices/Audio/DrvAudio.h
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -46,6 +46,7 @@
 #include <limits.h>
 
 #include <iprt/circbuf.h>
+#include <iprt/critsect.h>
 
 #include <VBox/vmm/pdmdev.h>
 #include <VBox/vmm/pdm.h>
@@ -78,8 +79,8 @@ typedef struct DRVAUDIO
 {
     /** Input/output processing thread. */
     RTTHREAD                hThread;
-    /** Event for input/ouput processing. */
-    RTSEMEVENT              hEvent;
+    /** Critical section for serializing access. */
+    RTCRITSECT              CritSect;
     /** Shutdown indicator. */
     bool                    fTerminate;
     /** Our audio connector interface. */
@@ -88,14 +89,17 @@ typedef struct DRVAUDIO
     PPDMDRVINS              pDrvIns;
     /** Pointer to audio driver below us. */
     PPDMIHOSTAUDIO          pHostDrvAudio;
+    /** List of host input streams. */
     RTLISTANCHOR            lstHstStrmIn;
+    /** List of host output streams. */
     RTLISTANCHOR            lstHstStrmOut;
-    /** Max. number of free input streams. */
-    uint8_t                 cFreeInputStreams;
-    /** Max. number of free output streams. */
-    uint8_t                 cFreeOutputStreams;
-    /** Audio configuration settings retrieved
-     *  from the backend. */
+    /** Max. number of free input streams.
+     *  UINT32_MAX for unlimited streams. */
+    uint32_t                cFreeInputStreams;
+    /** Max. number of free output streams.
+     *  UINT32_MAX for unlimited streams. */
+    uint32_t                cFreeOutputStreams;
+    /** Audio configuration settings retrieved from the backend. */
     PDMAUDIOBACKENDCFG      BackendCfg;
 #ifdef VBOX_WITH_AUDIO_CALLBACKS
     /** @todo Use a map with primary key set to the callback type? */
diff --git a/src/VBox/Devices/Audio/DrvAudioCommon.cpp b/src/VBox/Devices/Audio/DrvAudioCommon.cpp
index 599b863..12c1e2c 100644
--- a/src/VBox/Devices/Audio/DrvAudioCommon.cpp
+++ b/src/VBox/Devices/Audio/DrvAudioCommon.cpp
@@ -364,11 +364,6 @@ int DrvAudioStreamCfgToProps(PPDMAUDIOSTREAMCFG pCfg, PPDMPCMPROPS pProps)
         pProps->fSwapEndian = pCfg->enmEndianness != PDMAUDIOHOSTENDIANNESS;
     }
 
-#ifdef DEBUG
-    drvAudioStreamCfgPrint(pCfg);
-#endif
-
-    LogFlowFunc(("rc=%Rrc\n", rc));
     return rc;
 }
 
diff --git a/src/VBox/Devices/Audio/DrvHostALSAAudio.cpp b/src/VBox/Devices/Audio/DrvHostALSAAudio.cpp
index dcf6e05..ff78688 100644
--- a/src/VBox/Devices/Audio/DrvHostALSAAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvHostALSAAudio.cpp
@@ -170,8 +170,7 @@ static int drvHostALSAAudioClose(snd_pcm_t **pphPCM)
     int rc2 = snd_pcm_close(*pphPCM);
     if (rc2)
     {
-        LogRel(("ALSA: Closing PCM descriptor failed: %s\n",
-                 snd_strerror(rc2)));
+        LogRel(("ALSA: Closing PCM descriptor failed: %s\n", snd_strerror(rc2)));
         rc = VERR_GENERAL_FAILURE; /** @todo */
     }
     else
@@ -385,8 +384,7 @@ static int drvHostALSAAudioOpen(bool fIn,
         const char *pszDev = fIn ? s_ALSAConf.pcm_name_in : s_ALSAConf.pcm_name_out;
         if (!pszDev)
         {
-            LogRel(("ALSA: Invalid or no %s device name set\n",
-                    fIn ? "input" : "output"));
+            LogRel(("ALSA: Invalid or no %s device name set\n", fIn ? "input" : "output"));
             rc = VERR_INVALID_PARAMETER;
             break;
         }
@@ -396,19 +394,19 @@ static int drvHostALSAAudioOpen(bool fIn,
                                SND_PCM_NONBLOCK);
         if (err < 0)
         {
-            LogRel(("ALSA: Failed to open \"%s\" as %s: %s\n", pszDev,
-                    fIn ? "ADC" : "DAC", snd_strerror(err)));
+            LogRel(("ALSA: Failed to open \"%s\" as %s device: %s\n", pszDev, fIn ? "input" : "output", snd_strerror(err)));
             rc = VERR_AUDIO_BACKEND_INIT_FAILED;
             break;
         }
 
+        LogRel(("ALSA: Using %s device \"%s\"\n", fIn ? "input" : "output", pszDev));
+
         snd_pcm_hw_params_t *pHWParms;
         snd_pcm_hw_params_alloca(&pHWParms); /** @todo Check for successful allocation? */
         err = snd_pcm_hw_params_any(phPCM, pHWParms);
         if (err < 0)
         {
-            LogRel(("ALSA: Failed to initialize hardware parameters: %s\n",
-                    snd_strerror(err)));
+            LogRel(("ALSA: Failed to initialize hardware parameters: %s\n", snd_strerror(err)));
             rc = VERR_AUDIO_BACKEND_INIT_FAILED;
             break;
         }
@@ -425,8 +423,7 @@ static int drvHostALSAAudioOpen(bool fIn,
         err = snd_pcm_hw_params_set_format(phPCM, pHWParms, pCfgReq->fmt);
         if (err < 0)
         {
-            LogRel(("ALSA: Failed to set audio format to %d: %s\n",
-                    pCfgReq->fmt, snd_strerror(err)));
+            LogRel(("ALSA: Failed to set audio format to %d: %s\n", pCfgReq->fmt, snd_strerror(err)));
             rc = VERR_AUDIO_BACKEND_INIT_FAILED;
             break;
         }
@@ -434,8 +431,7 @@ static int drvHostALSAAudioOpen(bool fIn,
         err = snd_pcm_hw_params_set_rate_near(phPCM, pHWParms, &uFreq, 0);
         if (err < 0)
         {
-            LogRel(("ALSA: Failed to set frequency to %dHz: %s\n",
-                    pCfgReq->freq, snd_strerror(err)));
+            LogRel(("ALSA: Failed to set frequency to %uHz: %s\n", pCfgReq->freq, snd_strerror(err)));
             rc = VERR_AUDIO_BACKEND_INIT_FAILED;
             break;
         }
@@ -705,8 +701,7 @@ static int drvHostALSAAudioRecover(snd_pcm_t *phPCM)
     int err = snd_pcm_prepare(phPCM);
     if (err < 0)
     {
-        LogFunc(("Failed to recover stream %p: %s\n",
-                 phPCM, snd_strerror(err)));
+        LogFunc(("Failed to recover stream %p: %s\n", phPCM, snd_strerror(err)));
         return VERR_ACCESS_DENIED; /** @todo Find a better rc. */
     }
 
@@ -720,8 +715,7 @@ static int drvHostALSAAudioResume(snd_pcm_t *phPCM)
     int err = snd_pcm_resume(phPCM);
     if (err < 0)
     {
-        LogFunc(("Failed to resume stream %p: %s\n",
-                 phPCM, snd_strerror(err)));
+        LogFunc(("Failed to resume stream %p: %s\n", phPCM, snd_strerror(err)));
         return VERR_ACCESS_DENIED; /** @todo Find a better rc. */
     }
 
@@ -736,18 +730,16 @@ static int drvHostALSAAudioStreamCtl(snd_pcm_t *phPCM, bool fPause)
         err = snd_pcm_drop(phPCM);
         if (err < 0)
         {
-            LogFlow(("Error stopping stream %p: %s\n",
-                     phPCM, snd_strerror(err)));
+            LogRel(("ALSA: Error stopping stream %p: %s\n", phPCM, snd_strerror(err)));
             return VERR_ACCESS_DENIED;
         }
     }
     else
     {
-        err = snd_pcm_prepare (phPCM);
+        err = snd_pcm_prepare(phPCM);
         if (err < 0)
         {
-            LogFlow(("Error preparing stream %p: %s\n",
-                     phPCM, snd_strerror(err)));
+            LogRel(("ALSA: Error preparing stream %p: %s\n", phPCM, snd_strerror(err)));
             return VERR_ACCESS_DENIED;
         }
     }
@@ -855,6 +847,7 @@ static DECLCALLBACK(int) drvHostALSAAudioCaptureIn(PPDMIHOSTAUDIO pInterface, PP
                 }
 
                 case -EAGAIN:
+                {
                     /*
                      * Don't set error here because EAGAIN means there are no further frames
                      * available at the moment, try later. As we might have read some frames
@@ -862,6 +855,7 @@ static DECLCALLBACK(int) drvHostALSAAudioCaptureIn(PPDMIHOSTAUDIO pInterface, PP
                      */
                     cbToRead = 0;
                     break;
+                }
 
                 case -EPIPE:
                 {
@@ -874,10 +868,11 @@ static DECLCALLBACK(int) drvHostALSAAudioCaptureIn(PPDMIHOSTAUDIO pInterface, PP
                 }
 
                 default:
+                {
                     LogFunc(("Failed to read input frames: %s\n", snd_strerror(cRead)));
-                    rc = VERR_AUDIO_BACKEND_INIT_FAILED;
-                    VERR_GENERAL_FAILURE; /** @todo Fudge! */
+                    rc = VERR_GENERAL_FAILURE; /** @todo Fudge! */
                     break;
+                }
             }
         }
         else
@@ -1294,10 +1289,13 @@ static DECLCALLBACK(int) drvHostALSAAudioGetConf(PPDMIHOSTAUDIO pInterface, PPDM
     NOREF(pInterface);
     AssertPtrReturn(pCfg, VERR_INVALID_POINTER);
 
-    pCfg->cbStreamOut = sizeof(ALSAAUDIOSTREAMOUT);
-    pCfg->cbStreamIn = sizeof(ALSAAUDIOSTREAMIN);
-    pCfg->cMaxHstStrmsOut = INT_MAX;
-    pCfg->cMaxHstStrmsIn = INT_MAX;
+    pCfg->cbStreamIn      = sizeof(ALSAAUDIOSTREAMIN);
+    pCfg->cbStreamOut     = sizeof(ALSAAUDIOSTREAMOUT);
+
+    /* ALSA only allows one input and one output used at a time for
+     * the selected device. */
+    pCfg->cMaxHstStrmsIn  = 1;
+    pCfg->cMaxHstStrmsOut = 1;
 
     return VINF_SUCCESS;
 }
diff --git a/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp b/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp
index 82809f1..bd4a851 100644
--- a/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvHostCoreAudio.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2010-2015 Oracle Corporation
+ * Copyright (C) 2010-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -65,41 +65,39 @@ typedef struct DRVHOSTCOREAUDIO
  *
  ******************************************************************************/
 
-#ifdef DEBUG
 static void drvHostCoreAudioPrintASBDesc(const char *pszDesc, const AudioStreamBasicDescription *pStreamDesc)
 {
     char pszSampleRate[32];
-    Log(("%s AudioStreamBasicDescription:\n", pszDesc));
-    LogFlowFunc(("Format ID: %RU32 (%c%c%c%c)\n", pStreamDesc->mFormatID,
-                 RT_BYTE4(pStreamDesc->mFormatID), RT_BYTE3(pStreamDesc->mFormatID),
-                 RT_BYTE2(pStreamDesc->mFormatID), RT_BYTE1(pStreamDesc->mFormatID)));
-    LogFlowFunc(("Flags: %RU32", pStreamDesc->mFormatFlags));
+    LogRel2(("CoreAudio: %s description:\n", pszDesc));
+    LogRel2(("CoreAudio: Format ID: %RU32 (%c%c%c%c)\n", pStreamDesc->mFormatID,
+             RT_BYTE4(pStreamDesc->mFormatID), RT_BYTE3(pStreamDesc->mFormatID),
+             RT_BYTE2(pStreamDesc->mFormatID), RT_BYTE1(pStreamDesc->mFormatID)));
+    LogRel2(("CoreAudio: Flags: %RU32", pStreamDesc->mFormatFlags));
     if (pStreamDesc->mFormatFlags & kAudioFormatFlagIsFloat)
-        Log((" Float"));
+        LogRel2((" Float"));
     if (pStreamDesc->mFormatFlags & kAudioFormatFlagIsBigEndian)
-        Log((" BigEndian"));
+        LogRel2((" BigEndian"));
     if (pStreamDesc->mFormatFlags & kAudioFormatFlagIsSignedInteger)
-        Log((" SignedInteger"));
+        LogRel2((" SignedInteger"));
     if (pStreamDesc->mFormatFlags & kAudioFormatFlagIsPacked)
-        Log((" Packed"));
+        LogRel2((" Packed"));
     if (pStreamDesc->mFormatFlags & kAudioFormatFlagIsAlignedHigh)
-        Log((" AlignedHigh"));
+        LogRel2((" AlignedHigh"));
     if (pStreamDesc->mFormatFlags & kAudioFormatFlagIsNonInterleaved)
-        Log((" NonInterleaved"));
+        LogRel2((" NonInterleaved"));
     if (pStreamDesc->mFormatFlags & kAudioFormatFlagIsNonMixable)
-        Log((" NonMixable"));
+        LogRel2((" NonMixable"));
     if (pStreamDesc->mFormatFlags & kAudioFormatFlagsAreAllClear)
-        Log((" AllClear"));
-    Log(("\n"));
+        LogRel2((" AllClear"));
+    LogRel2(("\n"));
     snprintf(pszSampleRate, 32, "%.2f", (float)pStreamDesc->mSampleRate); /** @todo r=andy Use RTStrPrint*. */
-    LogFlowFunc(("SampleRate      : %s\n", pszSampleRate));
-    LogFlowFunc(("ChannelsPerFrame: %RU32\n", pStreamDesc->mChannelsPerFrame));
-    LogFlowFunc(("FramesPerPacket : %RU32\n", pStreamDesc->mFramesPerPacket));
-    LogFlowFunc(("BitsPerChannel  : %RU32\n", pStreamDesc->mBitsPerChannel));
-    LogFlowFunc(("BytesPerFrame   : %RU32\n", pStreamDesc->mBytesPerFrame));
-    LogFlowFunc(("BytesPerPacket  : %RU32\n", pStreamDesc->mBytesPerPacket));
+    LogRel2(("CoreAudio: SampleRate      : %s\n", pszSampleRate));
+    LogRel2(("CoreAudio: ChannelsPerFrame: %RU32\n", pStreamDesc->mChannelsPerFrame));
+    LogRel2(("CoreAudio: FramesPerPacket : %RU32\n", pStreamDesc->mFramesPerPacket));
+    LogRel2(("CoreAudio: BitsPerChannel  : %RU32\n", pStreamDesc->mBitsPerChannel));
+    LogRel2(("CoreAudio: BytesPerFrame   : %RU32\n", pStreamDesc->mBytesPerFrame));
+    LogRel2(("CoreAudio: BytesPerPacket  : %RU32\n", pStreamDesc->mBytesPerPacket));
 }
-#endif /* DEBUG */
 
 static void drvHostCoreAudioPCMInfoToASBDesc(PDMPCMPROPS *pPcmProperties, AudioStreamBasicDescription *pStreamDesc)
 {
@@ -266,18 +264,18 @@ typedef struct COREAUDIOSTREAMOUT
 {
     /** Host stream out. */
     PDMAUDIOHSTSTRMOUT          streamOut;
-    /* Stream description which is default on the device */
+    /** Stream description which is default on the device. */
     AudioStreamBasicDescription deviceFormat;
-    /* Stream description which is selected for using by VBox */
+    /** Stream description which is selected for using with VBox. */
     AudioStreamBasicDescription streamFormat;
-    /* The audio device ID of the currently used device */
+    /** The audio device ID of the currently used device. */
     AudioDeviceID               deviceID;
-    /* The AudioUnit used */
+    /** The AudioUnit being used. */
     AudioUnit                   audioUnit;
-    /* A ring buffer for transferring data to the playback thread. */
+    /** A ring buffer for transferring data to the playback thread. */
     PRTCIRCBUF                  pBuf;
-    /* Initialization status tracker. Used when some of the device parameters
-     * or the device itself is changed during the runtime. */
+    /** Initialization status tracker. Used when some of the device parameters
+     *  or the device itself is changed during the runtime. */
     volatile uint32_t           status;
     /** Flag whether the "default device changed" listener was registered. */
     bool                        fDefDevChgListReg;
@@ -287,26 +285,26 @@ typedef struct COREAUDIOSTREAMIN
 {
     /** Host stream in. */
     PDMAUDIOHSTSTRMIN           streamIn;
-    /* Stream description which is default on the device */
+    /** Stream description which is default on the device. */
     AudioStreamBasicDescription deviceFormat;
-    /* Stream description which is selected for using by VBox */
+    /** Stream description which is selected for using with VBox. */
     AudioStreamBasicDescription streamFormat;
-    /* The audio device ID of the currently used device */
+    /** The audio device ID of the currently used device. */
     AudioDeviceID               deviceID;
-    /* The AudioUnit used */
+    /** The AudioUnit used. */
     AudioUnit                   audioUnit;
-    /* The audio converter if necessary */
+    /** The audio converter if necessary. */
     AudioConverterRef           converter;
-    /* A temporary position value used in the caConverterCallback function */
-    uint32_t                    rpos;
-    /* The ratio between the device & the stream sample rate */
-    Float64                     sampleRatio;
-    /* An extra buffer used for render the audio data in the recording thread */
+    /** Native buffer used for render the audio data in the recording thread. */
     AudioBufferList             bufferList;
-    /* A ring buffer for transferring data from the recording thread */
+    /** Reading offset for the bufferList's buffer. */
+    uint32_t                    offBufferRead;
+    /** The ratio between the device & the stream sample rate. */
+    Float64                     sampleRatio;
+    /** A ring buffer for transferring data from the recording thread. */
     PRTCIRCBUF                  pBuf;
-    /* Initialization status tracker. Used when some of the device parameters
-     * or the device itself is changed during the runtime. */
+    /** Initialization status tracker. Used when some of the device parameters
+     *  or the device itself is changed during the runtime. */
     volatile uint32_t           status;
     /** Flag whether the "default device changed" listener was registered. */
     bool                        fDefDevChgListReg;
@@ -488,9 +486,9 @@ static DECLCALLBACK(OSStatus) drvHostCoreAudioConverterCallback(AudioConverterRe
      *        so go through all buffers not only the first one like now. */
 
     /* Use the lower one of the packets to process & the available packets in the buffer. */
-    Assert(pBufferList->mBuffers[0].mDataByteSize >= pStreamIn->rpos);
+    Assert(pBufferList->mBuffers[0].mDataByteSize >= pStreamIn->offBufferRead);
     UInt32 cSize = RT_MIN(*pcPackets * pStreamIn->deviceFormat.mBytesPerPacket,
-                          pBufferList->mBuffers[0].mDataByteSize - pStreamIn->rpos);
+                          pBufferList->mBuffers[0].mDataByteSize - pStreamIn->offBufferRead);
 
     /* Set the new size on output, so the caller know what we have processed. */
     Assert(pStreamIn->deviceFormat.mBytesPerPacket);
@@ -511,9 +509,9 @@ static DECLCALLBACK(OSStatus) drvHostCoreAudioConverterCallback(AudioConverterRe
     {
         pBufData->mBuffers[0].mNumberChannels = pBufferList->mBuffers[0].mNumberChannels;
         pBufData->mBuffers[0].mDataByteSize   = cSize;
-        pBufData->mBuffers[0].mData           = (uint8_t *)pBufferList->mBuffers[0].mData + pStreamIn->rpos;
+        pBufData->mBuffers[0].mData           = (uint8_t *)pBufferList->mBuffers[0].mData + pStreamIn->offBufferRead;
 
-        pStreamIn->rpos += cSize;
+        pStreamIn->offBufferRead += cSize;
 
         err = noErr;
     }
@@ -573,6 +571,9 @@ static DECLCALLBACK(OSStatus) drvHostCoreAudioRecordingCallback(void
             tmpList.mNumberBuffers = 1;
             tmpList.mBuffers[0].mNumberChannels = pStreamIn->streamFormat.mChannelsPerFrame;
 
+            /* Set the read position to zero. */
+            pStreamIn->offBufferRead = 0;
+
             /* Iterate as long as data is available. */
             uint8_t *puDst = NULL;
             while (cbAvail)
@@ -806,7 +807,7 @@ static int drvHostCoreAudioInitInput(PPDMAUDIOHSTSTRMIN pHstStrmIn, uint32_t *pc
         return VERR_AUDIO_BACKEND_INIT_FAILED;
     }
 
-    /* Switch the I/O mode for input to off. This is important, as this is a pure input stream. */
+    /* Switch the I/O mode for output to off. This is important, as this is a pure input stream. */
     uFlag = 0;
     err = AudioUnitSetProperty(pStreamIn->audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output,
                                0, &uFlag, sizeof(uFlag));
@@ -855,21 +856,20 @@ static int drvHostCoreAudioInitInput(PPDMAUDIOHSTSTRMIN pHstStrmIn, uint32_t *pc
     /* Create an AudioStreamBasicDescription based on our required audio settings. */
     drvHostCoreAudioPCMInfoToASBDesc(&pStreamIn->streamIn.Props, &pStreamIn->streamFormat);
 
-#ifdef DEBUG
     drvHostCoreAudioPrintASBDesc("CoreAudio: Input device", &pStreamIn->deviceFormat);
     drvHostCoreAudioPrintASBDesc("CoreAudio: Input stream", &pStreamIn->streamFormat);
-#endif /* DEBUG */
 
     /* If the frequency of the device is different from the requested one we
      * need a converter. The same count if the number of channels is different. */
     if (   pStreamIn->deviceFormat.mSampleRate       != pStreamIn->streamFormat.mSampleRate
         || pStreamIn->deviceFormat.mChannelsPerFrame != pStreamIn->streamFormat.mChannelsPerFrame)
     {
+        LogRel(("CoreAudio: Input converter is active\n"));
+
         err = AudioConverterNew(&pStreamIn->deviceFormat, &pStreamIn->streamFormat, &pStreamIn->converter);
         if (RT_UNLIKELY(err != noErr))
         {
-            LogRel(("CoreAudio: Failed to create the audio converte(%RI32). Input Format=%d, Output Foramt=%d\n",
-                     err, pStreamIn->deviceFormat, pStreamIn->streamFormat));
+            LogRel(("CoreAudio: Failed to create the audio converter (%RI32)\n", err));
             return VERR_AUDIO_BACKEND_INIT_FAILED;
         }
 
@@ -888,19 +888,10 @@ static int drvHostCoreAudioInitInput(PPDMAUDIOHSTSTRMIN pHstStrmIn, uint32_t *pc
             err = AudioConverterSetProperty(pStreamIn->converter, kAudioConverterChannelMap, sizeof(channelMap), channelMap);
             if (err != noErr)
             {
-                LogRel(("CoreAudio: Failed to set channel mapping for the audio input converter (%RI32)\n", err));
+                LogRel(("CoreAudio: Failed to set channel mapping (mono -> stereo) for the audio input converter (%RI32)\n", err));
                 return VERR_AUDIO_BACKEND_INIT_FAILED;
             }
         }
-
-        /* Set the new input format description for the stream. */
-        err = AudioUnitSetProperty(pStreamIn->audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input,
-                                   1, &pStreamIn->streamFormat, sizeof(pStreamIn->streamFormat));
-        if (err != noErr)
-        {
-            LogRel(("CoreAudio: Failed to set input format for input stream (%RI32)\n", err));
-            return VERR_AUDIO_BACKEND_INIT_FAILED;
-        }
 #if 0
         /* Set sample rate converter quality to maximum */
         uFlag = kAudioConverterQuality_Max;
@@ -909,17 +900,42 @@ static int drvHostCoreAudioInitInput(PPDMAUDIOHSTSTRMIN pHstStrmIn, uint32_t *pc
         if (err != noErr)
             LogRel(("CoreAudio: Failed to set input audio converter quality to the maximum (%RI32)\n", err));
 #endif
-        LogRel(("CoreAudio: Input converter is active\n"));
+
+        /* Set the new format description for the stream. */
+        err = AudioUnitSetProperty(pStreamIn->audioUnit,
+                                   kAudioUnitProperty_StreamFormat,
+                                   kAudioUnitScope_Output,
+                                   1,
+                                   &pStreamIn->deviceFormat,
+                                   sizeof(pStreamIn->deviceFormat));
+        if (RT_UNLIKELY(err != noErr))
+        {
+            LogRel(("CoreAudio: Failed to set input stream output format (%RI32)\n", err));
+            return VERR_AUDIO_BACKEND_INIT_FAILED;
+        }
+
+        err = AudioUnitSetProperty(pStreamIn->audioUnit,
+                                   kAudioUnitProperty_StreamFormat,
+                                   kAudioUnitScope_Input,
+                                   1,
+                                   &pStreamIn->deviceFormat,
+                                   sizeof(pStreamIn->deviceFormat));
+        if (RT_UNLIKELY(err != noErr))
+        {
+            LogRel(("CoreAudio: Failed to set stream input format (%RI32)\n", err));
+            return VERR_AUDIO_BACKEND_INIT_FAILED;
+        }
     }
     else
     {
-        /* Set the new output format description for the stream. */
+
+        /* Set the new output format description for the input stream. */
         err = AudioUnitSetProperty(pStreamIn->audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output,
                                    1, &pStreamIn->streamFormat, sizeof(pStreamIn->streamFormat));
         if (err != noErr)
         {
             LogRel(("CoreAudio: Failed to set output format for input stream (%RI32)\n", err));
-            return VERR_AUDIO_BACKEND_INIT_FAILED; /** @todo Fudge! */
+            return VERR_AUDIO_BACKEND_INIT_FAILED;
         }
     }
 
@@ -1195,10 +1211,8 @@ static int drvHostCoreAudioInitOutput(PPDMAUDIOHSTSTRMOUT pHstStrmOut, uint32_t
     /* Create an AudioStreamBasicDescription based on our required audio settings. */
     drvHostCoreAudioPCMInfoToASBDesc(&pStreamOut->streamOut.Props, &pStreamOut->streamFormat);
 
-#ifdef DEBUG
     drvHostCoreAudioPrintASBDesc("CoreAudio: Output device", &pStreamOut->deviceFormat);
     drvHostCoreAudioPrintASBDesc("CoreAudio: Output format", &pStreamOut->streamFormat);
-#endif /* DEBUG */
 
     /* Set the new output format description for the stream. */
     err = AudioUnitSetProperty(pStreamOut->audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input,
@@ -1375,8 +1389,12 @@ static DECLCALLBACK(int) drvHostCoreAudioCaptureIn(PPDMIHOSTAUDIO pInterface, PP
             }
 
             rc = AudioMixBufWriteCirc(&pHstStrmIn->MixBuf, puBuf, cbToRead, &cWritten);
-            if (RT_FAILURE(rc))
+            if (   RT_FAILURE(rc)
+                || !cWritten)
+            {
+                RTCircBufReleaseReadBlock(pStreamIn->pBuf, cbToRead);
                 break;
+            }
 
             cbWritten = AUDIOMIXBUF_S2B(&pHstStrmIn->MixBuf, cWritten);
 
@@ -1388,7 +1406,7 @@ static DECLCALLBACK(int) drvHostCoreAudioCaptureIn(PPDMIHOSTAUDIO pInterface, PP
             cbWrittenTotal += cbWritten;
         }
 
-        LogFlowFunc(("cbToWrite=%zu, cbWrittenTotal=%RU32\n", cbToWrite, cbWrittenTotal));
+        LogFlowFunc(("cbToWrite=%zu, cbToRead=%zu, cbWrittenTotal=%RU32, rc=%Rrc\n", cbToWrite, cbToRead, cbWrittenTotal, rc));
     }
     while (0);
 
@@ -1399,7 +1417,7 @@ static DECLCALLBACK(int) drvHostCoreAudioCaptureIn(PPDMIHOSTAUDIO pInterface, PP
         if (cWrittenTotal)
             rc = AudioMixBufMixToParent(&pHstStrmIn->MixBuf, cWrittenTotal, &cCaptured);
 
-        LogFlowFunc(("cWrittenTotal=%RU32 (%RU32 bytes), cCaptured, rc=%Rrc\n", cWrittenTotal, cbWrittenTotal, cCaptured, rc));
+        LogFlowFunc(("cWrittenTotal=%RU32 (%RU32 bytes), cCaptured=%RU32, rc=%Rrc\n", cWrittenTotal, cbWrittenTotal, cCaptured, rc));
 
         if (pcSamplesCaptured)
             *pcSamplesCaptured = cCaptured;
@@ -1793,11 +1811,11 @@ static DECLCALLBACK(int) drvHostCoreAudioFiniIn(PPDMIHOSTAUDIO pInterface, PPDMA
             {
                 RTCircBufDestroy(pStreamIn->pBuf);
 
-                pStreamIn->audioUnit   = NULL;
-                pStreamIn->deviceID    = kAudioDeviceUnknown;
-                pStreamIn->pBuf        = NULL;
-                pStreamIn->sampleRatio = 1;
-                pStreamIn->rpos        = 0;
+                pStreamIn->audioUnit     = NULL;
+                pStreamIn->deviceID      = kAudioDeviceUnknown;
+                pStreamIn->pBuf          = NULL;
+                pStreamIn->sampleRatio   = 1;
+                pStreamIn->offBufferRead = 0;
 
                 ASMAtomicXchgU32(&pStreamIn->status, CA_STATUS_UNINIT);
             }
@@ -1919,11 +1937,11 @@ static DECLCALLBACK(int) drvHostCoreAudioInitIn(PPDMIHOSTAUDIO pInterface,
 
     ASMAtomicXchgU32(&pStreamIn->status, CA_STATUS_UNINIT);
 
-    pStreamIn->audioUnit   = NULL;
-    pStreamIn->deviceID    = kAudioDeviceUnknown;
-    pStreamIn->converter   = NULL;
-    pStreamIn->sampleRatio = 1;
-    pStreamIn->rpos        = 0;
+    pStreamIn->audioUnit     = NULL;
+    pStreamIn->deviceID      = kAudioDeviceUnknown;
+    pStreamIn->converter     = NULL;
+    pStreamIn->sampleRatio   = 1;
+    pStreamIn->offBufferRead = 0;
 
     bool fDeviceByUser = false;
 
diff --git a/src/VBox/Devices/Audio/DrvHostDSound.cpp b/src/VBox/Devices/Audio/DrvHostDSound.cpp
index c207358..01c04da 100644
--- a/src/VBox/Devices/Audio/DrvHostDSound.cpp
+++ b/src/VBox/Devices/Audio/DrvHostDSound.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -94,6 +94,7 @@ typedef struct DSOUNDSTREAMOUT
     LPDIRECTSOUNDBUFFER8 pDSB;
     DWORD                cbPlayWritePos;
     DWORD                csPlaybackBufferSize;
+    bool                 fEnabled;
     bool                 fRestartPlayback;
     PDMAUDIOSTREAMCFG    streamCfg;
 } DSOUNDSTREAMOUT, *PDSOUNDSTREAMOUT;
@@ -107,6 +108,7 @@ typedef struct DSOUNDSTREAMIN
     DWORD                       csCaptureBufferSize;
     HRESULT                     hrLastCaptureIn;
     PDMAUDIORECSOURCE           enmRecSource;
+    bool                        fEnabled;
     PDMAUDIOSTREAMCFG           streamCfg;
 } DSOUNDSTREAMIN, *PDSOUNDSTREAMIN;
 
@@ -122,11 +124,9 @@ typedef struct DRVHOSTDSOUND
     RTLISTANCHOR        lstDevOutput;
     /** DirectSound configuration options. */
     DSOUNDHOSTCFG       cfg;
-    /** Whether the input currently is in an enabled (working)
-     *  state or not. */
+    /** Whether this backend supports any audio input. */
     bool                fEnabledIn;
-    /** Whether the output currently is in an enabled (working)
-     *  state or not. */
+    /** Whether this backend supports any audio output. */
     bool                fEnabledOut;
 #ifdef VBOX_WITH_AUDIO_CALLBACKS
     /** Pointer to the audio connector interface of the driver/device above us. */
@@ -149,6 +149,11 @@ typedef struct DRVHOSTDSOUND
 #endif
 } DRVHOSTDSOUND, *PDRVHOSTDSOUND;
 
+/** No flags specified. */
+#define DSOUNDENUMCBFLAGS_NONE          0
+/** (Release) log found devices. */
+#define DSOUNDENUMCBFLAGS_LOG           RT_BIT(0)
+
 /**
  * Callback context for enumeration callbacks
  */
@@ -156,6 +161,8 @@ typedef struct DSOUNDENUMCBCTX
 {
     PDRVHOSTDSOUND      pDrv;
     PPDMAUDIOBACKENDCFG pCfg;
+    /** Enumeration flags. */
+    uint32_t            fFlags;
 } DSOUNDENUMCBCTX, *PDSOUNDENUMCBCTX;
 
 typedef struct DSOUNDDEV
@@ -165,13 +172,17 @@ typedef struct DSOUNDDEV
     GUID        Guid;
 } DSOUNDDEV, *PDSOUNDDEV;
 
+/** Maximum number of attempts to restore the sound buffer before giving up. */
+#define DRV_DSOUND_RESTORE_ATTEMPTS_MAX         3
+
 /** Makes DRVHOSTDSOUND out of PDMIHOSTAUDIO. */
 #define PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface) \
     ( (PDRVHOSTDSOUND)((uintptr_t)pInterface - RT_OFFSETOF(DRVHOSTDSOUND, IHostAudio)) )
 
-static HRESULT directSoundPlayRestore(LPDIRECTSOUNDBUFFER8 pDSB);
+static HRESULT directSoundPlayRestore(PDRVHOSTDSOUND pThis, LPDIRECTSOUNDBUFFER8 pDSB);
 
-static void dsoundDevRemove(PDSOUNDDEV pDev);
+static void dsoundDeviceRemove(PDSOUNDDEV pDev);
+static int dsoundDevicesEnumerate(PDRVHOSTDSOUND pThis, PPDMAUDIOBACKENDCFG pCfg);
 #ifdef VBOX_WITH_AUDIO_CALLBACKS
 static int dsoundNotifyThread(PDRVHOSTDSOUND pThis, bool fShutdown);
 #endif
@@ -224,8 +235,10 @@ static int dsoundWaveFmtFromCfg(PPDMAUDIOSTREAMCFG pCfg, PWAVEFORMATEX pFmt)
     return VINF_SUCCESS;
 }
 
-static int dsoundGetStatusOut(PDSOUNDSTREAMOUT pDSoundStrmOut, DWORD *pdwBuffer, DWORD *pdwFree, DWORD *pdwPlayPos)
+static int dsoundGetPosOut(PDRVHOSTDSOUND   pThis,
+                           PDSOUNDSTREAMOUT pDSoundStrmOut, DWORD *pdwBuffer, DWORD *pdwFree, DWORD *pdwPlayPos)
 {
+    AssertPtrReturn(pThis,          VERR_INVALID_POINTER);
     AssertPtrReturn(pDSoundStrmOut, VERR_INVALID_POINTER);
 
     LPDIRECTSOUNDBUFFER8 pDSB = pDSoundStrmOut->pDSB;
@@ -236,32 +249,47 @@ static int dsoundGetStatusOut(PDSOUNDSTREAMOUT pDSoundStrmOut, DWORD *pdwBuffer,
 
     /* Get the current play position which is used for calculating the free space in the buffer. */
     DWORD cbPlayPos;
-    HRESULT hr = IDirectSoundBuffer8_GetCurrentPosition(pDSB, &cbPlayPos, NULL);
-    if (hr == DSERR_BUFFERLOST)
+
+    HRESULT hr;
+    for (unsigned i = 0; i < DRV_DSOUND_RESTORE_ATTEMPTS_MAX; i++)
     {
-        hr = directSoundPlayRestore(pDSB);
-        if (SUCCEEDED(hr))
-            hr = IDirectSoundBuffer8_GetCurrentPosition(pDSB, &cbPlayPos, NULL);
+        hr = IDirectSoundBuffer8_GetCurrentPosition(pDSB, &cbPlayPos, NULL);
+        if (   SUCCEEDED(hr)
+            || hr != DSERR_BUFFERLOST) /** @todo: MSDN doesn't state this error for GetCurrentPosition(). */
+        {
+            break;
+        }
+        else
+        {
+            LogFlowFunc(("Getting playing position failed due to lost buffer, restoring ...\n"));
+            directSoundPlayRestore(pThis, pDSB);
+        }
     }
 
+    int rc = VINF_SUCCESS;
+
     if (FAILED(hr))
     {
         if (hr != DSERR_BUFFERLOST) /* Avoid log flooding if the error is still there. */
             DSLOGREL(("DSound: Getting current playback position failed with %Rhrc\n", hr));
         LogFlowFunc(("Failed with %Rhrc\n", hr));
-        return VERR_NOT_AVAILABLE;
-    }
 
-    if (pdwBuffer)
-        *pdwBuffer = cbBuffer;
+        rc = VERR_NOT_AVAILABLE;
+    }
+    else
+    {
+        if (pdwBuffer)
+            *pdwBuffer = cbBuffer;
 
-    if (pdwFree)
-        *pdwFree = cbBuffer - dsoundRingDistance(pDSoundStrmOut->cbPlayWritePos, cbPlayPos, cbBuffer);
+        if (pdwFree)
+            *pdwFree = cbBuffer - dsoundRingDistance(pDSoundStrmOut->cbPlayWritePos, cbPlayPos, cbBuffer);
 
-    if (pdwPlayPos)
-        *pdwPlayPos = cbPlayPos;
+        if (pdwPlayPos)
+            *pdwPlayPos = cbPlayPos;
+    }
 
-    return VINF_SUCCESS;
+    LogFlowFuncLeaveRC(rc);
+    return rc;
 }
 
 static char *dsoundGUIDToUtf8StrA(LPCGUID lpGUID)
@@ -283,23 +311,30 @@ static char *dsoundGUIDToUtf8StrA(LPCGUID lpGUID)
     return RTStrDup("{Default device}");
 }
 
-static void dsoundFreeDeviceLists(PDRVHOSTDSOUND pThis)
+/**
+ * Clears the list of the host's playback + capturing devices.
+ *
+ * @param   pThis               Host audio driver instance.
+ */
+static void dsoundDevicesClear(PDRVHOSTDSOUND pThis)
 {
+    AssertPtrReturnVoid(pThis);
+
     PDSOUNDDEV pDev;
     while (!RTListIsEmpty(&pThis->lstDevInput))
     {
         pDev = RTListGetFirst(&pThis->lstDevInput, DSOUNDDEV, Node);
-        dsoundDevRemove(pDev);
+        dsoundDeviceRemove(pDev);
     }
 
     while (!RTListIsEmpty(&pThis->lstDevOutput))
     {
         pDev = RTListGetFirst(&pThis->lstDevOutput, DSOUNDDEV, Node);
-        dsoundDevRemove(pDev);
+        dsoundDeviceRemove(pDev);
     }
 }
 
-static HRESULT directSoundPlayRestore(LPDIRECTSOUNDBUFFER8 pDSB)
+static HRESULT directSoundPlayRestore(PDRVHOSTDSOUND pThis, LPDIRECTSOUNDBUFFER8 pDSB)
 {
     HRESULT hr = IDirectSoundBuffer8_Restore(pDSB);
     if (FAILED(hr))
@@ -307,7 +342,7 @@ static HRESULT directSoundPlayRestore(LPDIRECTSOUNDBUFFER8 pDSB)
     return hr;
 }
 
-static HRESULT directSoundPlayUnlock(LPDIRECTSOUNDBUFFER8 pDSB,
+static HRESULT directSoundPlayUnlock(PDRVHOSTDSOUND pThis, LPDIRECTSOUNDBUFFER8 pDSB,
                                      LPVOID pv1, LPVOID pv2,
                                      DWORD cb1, DWORD cb2)
 {
@@ -327,7 +362,8 @@ static HRESULT directSoundCaptureUnlock(LPDIRECTSOUNDCAPTUREBUFFER8 pDSCB,
     return hr;
 }
 
-static HRESULT directSoundPlayLock(LPDIRECTSOUNDBUFFER8 pDSB, PDMPCMPROPS *pProps,
+static HRESULT directSoundPlayLock(PDRVHOSTDSOUND pThis,
+                                   LPDIRECTSOUNDBUFFER8 pDSB, PDMPCMPROPS *pProps,
                                    DWORD dwOffset, DWORD dwBytes,
                                    LPVOID *ppv1, LPVOID *ppv2,
                                    DWORD *pcb1, DWORD *pcb2,
@@ -338,13 +374,17 @@ static HRESULT directSoundPlayLock(LPDIRECTSOUNDBUFFER8 pDSB, PDMPCMPROPS *pProp
     DWORD cb1 = 0;
     DWORD cb2 = 0;
 
-    HRESULT hr = IDirectSoundBuffer8_Lock(pDSB, dwOffset, dwBytes, &pv1, &cb1, &pv2, &cb2, dwFlags);
-    if (hr == DSERR_BUFFERLOST)
+    HRESULT hr;
+    for (unsigned i = 0; i < DRV_DSOUND_RESTORE_ATTEMPTS_MAX; i++)
     {
-        hr = directSoundPlayRestore(pDSB);
-        if (SUCCEEDED(hr))
+        hr = IDirectSoundBuffer8_Lock(pDSB, dwOffset, dwBytes, &pv1, &cb1, &pv2, &cb2, dwFlags);
+        if (   SUCCEEDED(hr)
+            || hr != DSERR_BUFFERLOST)
+            break;
+        else
         {
-            hr = IDirectSoundBuffer8_Lock(pDSB, dwOffset, dwBytes, &pv1, &cb1, &pv2, &cb2, dwFlags);
+            LogFlowFunc(("Locking failed due to lost buffer, restoring ...\n"));
+            directSoundPlayRestore(pThis, pDSB);
         }
     }
 
@@ -359,7 +399,7 @@ static HRESULT directSoundPlayLock(LPDIRECTSOUNDBUFFER8 pDSB, PDMPCMPROPS *pProp
     {
         DSLOGREL(("DSound: Locking playback buffer returned misaligned buffer: cb1=%RI32, cb2=%RI32 (alignment: %RU32)\n",
                   cb1, cb2, pProps->uAlign));
-        directSoundPlayUnlock(pDSB, pv1, pv2, cb1, cb2);
+        directSoundPlayUnlock(pThis, pDSB, pv1, pv2, cb1, cb2);
         return E_FAIL;
     }
 
@@ -537,11 +577,23 @@ static HRESULT directSoundPlayOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoun
 
         DSBUFFERDESC bd;
         RT_ZERO(bd);
-        bd.dwSize = sizeof(bd);
+        bd.dwSize      = sizeof(bd);
         bd.lpwfxFormat = &wfx;
-        bd.dwFlags = DSBCAPS_GLOBALFOCUS | DSBCAPS_GETCURRENTPOSITION2;
+
+        /*
+         * As we reuse our (secondary) buffer for playing out data as it comes in,
+         * we're using this buffer as a so-called static buffer.
+         *
+         * However, as we do not want to use memory on the sound device directly
+         * (as most modern audio hardware on the host doesn't have this anyway),
+         * we're *not* going to use DSBCAPS_STATIC for that.
+         *
+         * Instead we're specifying DSBCAPS_LOCSOFTWARE, as this fits the bill
+         * of copying own buffer data (from AudioMixBuf) to our secondary's Direct Sound buffer.
+         */
+        bd.dwFlags     = DSBCAPS_GLOBALFOCUS | DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_LOCSOFTWARE;
 #ifdef VBOX_WITH_AUDIO_CALLBACKS
-        bd.dwFlags      |= DSBCAPS_CTRLPOSITIONNOTIFY;
+        bd.dwFlags    |= DSBCAPS_CTRLPOSITIONNOTIFY;
 #endif
         bd.dwBufferBytes = pThis->cfg.cbBufferOut;
 
@@ -583,6 +635,7 @@ static HRESULT directSoundPlayOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoun
 
         DSLOG(("DSound: Playback format:\n"
                "  dwBufferBytes   = %RI32\n"
+               "  dwFlags         = 0x%x\n"
                "  wFormatTag      = %RI16\n"
                "  nChannels       = %RI16\n"
                "  nSamplesPerSec  = %RU32\n"
@@ -591,6 +644,7 @@ static HRESULT directSoundPlayOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoun
                "  wBitsPerSample  = %RI16\n"
                "  cbSize          = %RI16\n",
                bc.dwBufferBytes,
+               bc.dwFlags,
                wfx.wFormatTag,
                wfx.nChannels,
                wfx.nSamplesPerSec,
@@ -671,7 +725,7 @@ static HRESULT directSoundPlayOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoun
     return hr;
 }
 
-static void dsoundPlayClearSamples(PDSOUNDSTREAMOUT pDSoundStrmOut)
+static void dsoundPlayClearSamples(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoundStrmOut)
 {
     AssertPtrReturnVoid(pDSoundStrmOut);
 
@@ -679,7 +733,7 @@ static void dsoundPlayClearSamples(PDSOUNDSTREAMOUT pDSoundStrmOut)
 
     LPVOID pv1, pv2;
     DWORD cb1, cb2;
-    HRESULT hr = directSoundPlayLock(pDSoundStrmOut->pDSB, &pDSoundStrmOut->strmOut.Props,
+    HRESULT hr = directSoundPlayLock(pThis, pDSoundStrmOut->pDSB, &pDSoundStrmOut->strmOut.Props,
                                      0 /* dwOffset */, AUDIOMIXBUF_S2B(&pStrmOut->MixBuf, pDSoundStrmOut->csPlaybackBufferSize),
                                      &pv1, &pv2, &cb1, &cb2, DSBLOCK_ENTIREBUFFER);
     if (SUCCEEDED(hr))
@@ -693,31 +747,31 @@ static void dsoundPlayClearSamples(PDSOUNDSTREAMOUT pDSoundStrmOut)
         if (pv2 && len2)
             DrvAudioClearBuf(&pDSoundStrmOut->strmOut.Props, pv2, cb2, len2);
 
-        directSoundPlayUnlock(pDSoundStrmOut->pDSB, pv1, pv2, cb1, cb2);
+        directSoundPlayUnlock(pThis, pDSoundStrmOut->pDSB, pv1, pv2, cb1, cb2);
     }
 }
 
-static HRESULT directSoundPlayGetStatus(LPDIRECTSOUNDBUFFER8 pDSB, DWORD *pdwStatus)
+static HRESULT directSoundPlayGetStatus(PDRVHOSTDSOUND pThis, LPDIRECTSOUNDBUFFER8 pDSB, DWORD *pdwStatus)
 {
-    AssertPtrReturn(pDSB, E_POINTER);
+    AssertPtrReturn(pThis, E_POINTER);
+    AssertPtrReturn(pDSB,  E_POINTER);
     /* pdwStatus is optional. */
 
-    bool fRestoreBuffer = false;
-
     DWORD dwStatus = 0;
-    HRESULT hr = IDirectSoundBuffer8_GetStatus(pDSB, &dwStatus);
-    if (SUCCEEDED(hr))
-    {
-        fRestoreBuffer = RT_BOOL(dwStatus & DSBSTATUS_BUFFERLOST);
-    }
-    else if (hr == DSERR_BUFFERLOST)
-        fRestoreBuffer = true;
 
-    if (fRestoreBuffer)
+    HRESULT hr;
+    for (unsigned i = 0; i < DRV_DSOUND_RESTORE_ATTEMPTS_MAX; i++)
     {
-        hr = directSoundPlayRestore(pDSB);
-        if (SUCCEEDED(hr))
-            hr = IDirectSoundBuffer8_GetStatus(pDSB, &dwStatus);
+        hr = IDirectSoundBuffer8_GetStatus(pDSB, &dwStatus);
+        if (   hr == DSERR_BUFFERLOST
+            || (   SUCCEEDED(hr)
+                && (dwStatus & DSBSTATUS_BUFFERLOST)))
+        {
+            LogFlowFunc(("Getting status failed due to lost buffer, restoring ...\n"));
+            directSoundPlayRestore(pThis, pDSB);
+        }
+        else
+            break;
     }
 
     if (SUCCEEDED(hr))
@@ -733,40 +787,52 @@ static HRESULT directSoundPlayGetStatus(LPDIRECTSOUNDBUFFER8 pDSB, DWORD *pdwSta
 
 static HRESULT directSoundPlayStop(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoundStrmOut)
 {
-    AssertPtrReturn(pThis, E_POINTER);
+    AssertPtrReturn(pThis,          E_POINTER);
     AssertPtrReturn(pDSoundStrmOut, E_POINTER);
 
     HRESULT hr;
 
     if (pDSoundStrmOut->pDSB != NULL)
     {
-        /* This performs some restore, so call it anyway and ignore result. */
-        directSoundPlayGetStatus(pDSoundStrmOut->pDSB, NULL /* Status */);
-
         DSLOG(("DSound: Stopping playback\n"));
 
-        /** @todo Wait until all data in the buffer has been played. */
-        hr = IDirectSoundBuffer8_Stop(pDSoundStrmOut->pDSB);
-        if (SUCCEEDED(hr))
-            dsoundPlayClearSamples(pDSoundStrmOut);
-        else
-            DSLOGREL(("DSound: Stopping playback failed with %Rhrc\n", hr));
+        HRESULT hr2 = IDirectSoundBuffer8_Stop(pDSoundStrmOut->pDSB);
+        if (FAILED(hr2))
+        {
+            hr2 = directSoundPlayRestore(pThis, pDSoundStrmOut->pDSB);
+            if (FAILED(hr2))
+                hr2 = IDirectSoundBuffer8_Stop(pDSoundStrmOut->pDSB);
+        }
+
+        if (FAILED(hr2))
+            DSLOG(("DSound: Stopping playback failed with %Rhrc\n", hr2));
+
+        hr = S_OK; /* Always report success here. */
     }
     else
         hr = E_UNEXPECTED;
 
+    if (SUCCEEDED(hr))
+    {
+        dsoundPlayClearSamples(pThis, pDSoundStrmOut);
+        pDSoundStrmOut->fEnabled = false;
+    }
+    else
+        DSLOGREL(("DSound: Stopping playback failed with %Rhrc\n", hr));
+
     return hr;
 }
 
-static HRESULT directSoundPlayStart(PDSOUNDSTREAMOUT pDSoundStrmOut)
+static HRESULT directSoundPlayStart(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMOUT pDSoundStrmOut)
 {
+    AssertPtrReturn(pThis,          E_POINTER);
     AssertPtrReturn(pDSoundStrmOut, E_POINTER);
 
     HRESULT hr;
     if (pDSoundStrmOut->pDSB != NULL)
     {
         DWORD dwStatus;
-        hr = directSoundPlayGetStatus(pDSoundStrmOut->pDSB, &dwStatus);
+        hr = directSoundPlayGetStatus(pThis, pDSoundStrmOut->pDSB, &dwStatus);
         if (SUCCEEDED(hr))
         {
             if (dwStatus & DSBSTATUS_PLAYING)
@@ -775,13 +841,15 @@ static HRESULT directSoundPlayStart(PDSOUNDSTREAMOUT pDSoundStrmOut)
             }
             else
             {
-                dsoundPlayClearSamples(pDSoundStrmOut);
+                dsoundPlayClearSamples(pThis, pDSoundStrmOut);
 
                 pDSoundStrmOut->fRestartPlayback = true;
+                pDSoundStrmOut->fEnabled         = true;
 
-                DSLOG(("DSound: Playback start\n"));
+                DSLOG(("DSound: Playback started\n"));
 
-                /* The actual IDirectSoundBuffer8_Play call will be made in drvHostDSoundPlayOut,
+                /*
+                 * The actual IDirectSoundBuffer8_Play call will be made in drvHostDSoundPlayOut,
                  * because it is necessary to put some samples into the buffer first.
                  */
             }
@@ -790,6 +858,9 @@ static HRESULT directSoundPlayStart(PDSOUNDSTREAMOUT pDSoundStrmOut)
     else
         hr = E_UNEXPECTED;
 
+    if (FAILED(hr))
+        DSLOGREL(("DSound: Starting playback failed with %Rhrc\n", hr));
+
     return hr;
 }
 
@@ -1006,6 +1077,7 @@ static HRESULT directSoundCaptureOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMIN pDSo
 
         DSLOG(("DSound: Capture format:\n"
                "  dwBufferBytes   = %RI32\n"
+               "  dwFlags         = 0x%x\n"
                "  wFormatTag      = %RI16\n"
                "  nChannels       = %RI16\n"
                "  nSamplesPerSec  = %RU32\n"
@@ -1014,6 +1086,7 @@ static HRESULT directSoundCaptureOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMIN pDSo
                "  wBitsPerSample  = %RI16\n"
                "  cbSize          = %RI16\n",
                bc.dwBufferBytes,
+               bc.dwFlags,
                wfx.wFormatTag,
                wfx.nChannels,
                wfx.nSamplesPerSec,
@@ -1047,10 +1120,13 @@ static HRESULT directSoundCaptureOpen(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMIN pDSo
     return hr;
 }
 
-static HRESULT directSoundCaptureStop(PDSOUNDSTREAMIN pDSoundStrmIn)
+static HRESULT directSoundCaptureStop(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMIN pDSoundStrmIn)
 {
+    AssertPtrReturn(pThis        , E_POINTER);
     AssertPtrReturn(pDSoundStrmIn, E_POINTER);
 
+    NOREF(pThis);
+
     HRESULT hr;
 
     if (pDSoundStrmIn->pDSCB)
@@ -1064,6 +1140,9 @@ static HRESULT directSoundCaptureStop(PDSOUNDSTREAMIN pDSoundStrmIn)
     else
         hr = E_UNEXPECTED;
 
+    if (SUCCEEDED(hr))
+        pDSoundStrmIn->fEnabled = false;
+
     LogFlowFunc(("Returning %Rhrc\n", hr));
     return hr;
 }
@@ -1104,6 +1183,9 @@ static HRESULT directSoundCaptureStart(PDRVHOSTDSOUND pThis, PDSOUNDSTREAMIN pDS
     else
         hr = E_UNEXPECTED;
 
+    if (SUCCEEDED(hr))
+        pDSoundStrmIn->fEnabled = true;
+
     LogFlowFunc(("Returning %Rhrc\n", hr));
     return hr;
 }
@@ -1132,7 +1214,7 @@ static int dsoundDevAdd(PRTLISTANCHOR pList, LPGUID lpGUID,
     return rc;
 }
 
-static void dsoundDevRemove(PDSOUNDDEV pDev)
+static void dsoundDeviceRemove(PDSOUNDDEV pDev)
 {
     if (pDev)
     {
@@ -1154,8 +1236,8 @@ static void dsoundLogDevice(const char *pszType, LPGUID lpGUID, LPCWSTR lpwstrDe
     RTStrFree(pszGUID);
 }
 
-static BOOL CALLBACK dsoundEnumCallback(LPGUID lpGUID, LPCWSTR lpwstrDescription,
-                                        LPCWSTR lpwstrModule, LPVOID lpContext)
+static BOOL CALLBACK dsoundDevicesEnumCbPlayback(LPGUID lpGUID, LPCWSTR lpwstrDescription,
+                                                 LPCWSTR lpwstrModule, LPVOID lpContext)
 {
     PDSOUNDENUMCBCTX pCtx = (PDSOUNDENUMCBCTX)lpContext;
     AssertPtrReturn(pCtx, FALSE);
@@ -1166,9 +1248,10 @@ static BOOL CALLBACK dsoundEnumCallback(LPGUID lpGUID, LPCWSTR lpwstrDescription
         return TRUE;
 
     AssertPtrReturn(lpwstrDescription, FALSE);
-    /* Do not care about lpwstrModule */
+    /* Do not care about lpwstrModule. */
 
-    dsoundLogDevice("Output", lpGUID, lpwstrDescription, lpwstrModule);
+    if (pCtx->fFlags & DSOUNDENUMCBFLAGS_LOG)
+        dsoundLogDevice("Output", lpGUID, lpwstrDescription, lpwstrModule);
 
     int rc = dsoundDevAdd(&pCtx->pDrv->lstDevOutput,
                           lpGUID, lpwstrDescription, NULL /* ppDev */);
@@ -1180,8 +1263,8 @@ static BOOL CALLBACK dsoundEnumCallback(LPGUID lpGUID, LPCWSTR lpwstrDescription
     return TRUE;
 }
 
-static BOOL CALLBACK dsoundCaptureEnumCallback(LPGUID lpGUID, LPCWSTR lpwstrDescription,
-                                               LPCWSTR lpwstrModule, LPVOID lpContext)
+static BOOL CALLBACK dsoundDevicesEnumCbCapture(LPGUID lpGUID, LPCWSTR lpwstrDescription,
+                                                LPCWSTR lpwstrModule, LPVOID lpContext)
 {
     PDSOUNDENUMCBCTX pCtx = (PDSOUNDENUMCBCTX)lpContext;
     AssertPtrReturn(pCtx, FALSE);
@@ -1191,7 +1274,8 @@ static BOOL CALLBACK dsoundCaptureEnumCallback(LPGUID lpGUID, LPCWSTR lpwstrDesc
     if (!lpGUID)
         return TRUE;
 
-    dsoundLogDevice("Input", lpGUID, lpwstrDescription, lpwstrModule);
+    if (pCtx->fFlags & DSOUNDENUMCBFLAGS_LOG)
+        dsoundLogDevice("Input", lpGUID, lpwstrDescription, lpwstrModule);
 
     int rc = dsoundDevAdd(&pCtx->pDrv->lstDevInput,
                           lpGUID, lpwstrDescription, NULL /* ppDev */);
@@ -1203,6 +1287,103 @@ static BOOL CALLBACK dsoundCaptureEnumCallback(LPGUID lpGUID, LPCWSTR lpwstrDesc
     return TRUE;
 }
 
+/**
+ * Does a (Re-)enumeration of the host's playback + capturing devices.
+ *
+ * @return  IPRT status code.
+ * @param   pThis               Host audio driver instance.
+ * @param   pCfg                Where to store the enumeration results.
+ * @param   fEnum               Enumeration flags.
+ */
+static int dsoundDevicesEnumerate(PDRVHOSTDSOUND pThis, PPDMAUDIOBACKENDCFG pCfg, uint32_t fEnum)
+{
+    AssertPtrReturn(pThis, VERR_INVALID_POINTER);
+    AssertPtrReturn(pCfg,  VERR_INVALID_POINTER);
+
+    dsoundDevicesClear(pThis);
+
+    pCfg->cMaxHstStrmsOut = 0;
+    pCfg->cMaxHstStrmsIn  = 0;
+
+    RTLDRMOD hDSound = NULL;
+    int rc = RTLdrLoadSystem("dsound.dll", true /*fNoUnload*/, &hDSound);
+    if (RT_SUCCESS(rc))
+    {
+        PFNDIRECTSOUNDENUMERATEW pfnDirectSoundEnumerateW = NULL;
+        PFNDIRECTSOUNDCAPTUREENUMERATEW pfnDirectSoundCaptureEnumerateW = NULL;
+
+        rc = RTLdrGetSymbol(hDSound, "DirectSoundEnumerateW", (void**)&pfnDirectSoundEnumerateW);
+        if (RT_SUCCESS(rc))
+            rc = RTLdrGetSymbol(hDSound, "DirectSoundCaptureEnumerateW", (void**)&pfnDirectSoundCaptureEnumerateW);
+
+        if (RT_SUCCESS(rc))
+        {
+            DSOUNDENUMCBCTX ctx = { pThis, pCfg, fEnum };
+
+            HRESULT hr = pfnDirectSoundEnumerateW(&dsoundDevicesEnumCbPlayback, &ctx);
+            if (FAILED(hr))
+                LogRel2(("DSound: Error enumerating host playback devices: %Rhrc\n", hr));
+
+            hr = pfnDirectSoundCaptureEnumerateW(&dsoundDevicesEnumCbCapture, &ctx);
+            if (FAILED(hr))
+                LogRel2(("DSound: Error enumerating host capturing devices: %Rhrc\n", hr));
+        }
+
+        RTLdrClose(hDSound);
+    }
+    else
+    {
+        /* No dsound.dll on this system. */
+        LogRel2(("DSound: Could not load dsound.dll: %Rrc\n", rc));
+    }
+
+    return rc;
+}
+
+/**
+ * Updates this host driver's internal status, according to the global, overall input/output
+ * state and all connected (native) audio streams.
+ *
+ * @param   pThis               Host audio driver instance.
+ * @param   pCfg                Where to store the backend configuration. Optional.
+ * @param   fEnum               Enumeration flags.
+ */
+void dsoundUpdateStatusInternalEx(PDRVHOSTDSOUND pThis, PPDMAUDIOBACKENDCFG pCfg, uint32_t fEnum)
+{
+    AssertPtrReturnVoid(pThis);
+    /* pCfg is optional. */
+
+    PDMAUDIOBACKENDCFG Cfg;
+    RT_ZERO(Cfg);
+
+    Cfg.cbStreamOut = sizeof(DSOUNDSTREAMOUT);
+    Cfg.cbStreamIn  = sizeof(DSOUNDSTREAMIN);
+
+    int rc = dsoundDevicesEnumerate(pThis, &Cfg, fEnum);
+    AssertRC(rc);
+
+#ifdef VBOX_WITH_AUDIO_CALLBACKS
+    if (   pThis->fEnabledOut != RT_BOOL(Cfg.cMaxHstStrmsOut)
+        || pThis->fEnabledIn  != RT_BOOL(Cfg.cMaxHstStrmsIn))
+    {
+        /** @todo Use a registered callback to the audio connector (e.g "OnConfigurationChanged") to
+         *        let the connector know that something has changed within the host backend. */
+    }
+#else
+    pThis->fEnabledOut = RT_BOOL(Cfg.cMaxHstStrmsOut);
+    pThis->fEnabledIn  = RT_BOOL(Cfg.cMaxHstStrmsIn);
+#endif
+
+    if (pCfg)
+        memcpy(pCfg, &Cfg, sizeof(PDMAUDIOBACKENDCFG));
+
+    LogFlowFuncLeaveRC(rc);
+}
+
+void dsoundUpdateStatusInternal(PDRVHOSTDSOUND pThis)
+{
+    dsoundUpdateStatusInternalEx(pThis, NULL /* pCfg */, 0 /* fEnum */);
+}
 
 /*
  * PDMIHOSTAUDIO
@@ -1257,7 +1438,7 @@ static DECLCALLBACK(int) drvHostDSoundControlOut(PPDMIHOSTAUDIO pInterface,
 
     LogFlowFunc(("pHstStrmOut=%p, cmd=%d\n", pHstStrmOut, enmStreamCmd));
 
-    PDRVHOSTDSOUND pThis = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
+    PDRVHOSTDSOUND   pThis          = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
     PDSOUNDSTREAMOUT pDSoundStrmOut = (PDSOUNDSTREAMOUT)pHstStrmOut;
 
     int rc = VINF_SUCCESS;
@@ -1268,32 +1449,30 @@ static DECLCALLBACK(int) drvHostDSoundControlOut(PPDMIHOSTAUDIO pInterface,
         case PDMAUDIOSTREAMCMD_ENABLE:
         case PDMAUDIOSTREAMCMD_RESUME:
         {
+            DSLOG(("DSound: Playback PDMAUDIOSTREAMCMD_ENABLE\n"));
             /* Try to start playback. If it fails, then reopen and try again. */
-            hr = directSoundPlayStart(pDSoundStrmOut);
+            hr = directSoundPlayStart(pThis, pDSoundStrmOut);
             if (FAILED(hr))
             {
                 hr = directSoundPlayClose(pThis, pDSoundStrmOut);
                 if (SUCCEEDED(hr))
-                {
                     hr = directSoundPlayOpen(pThis, pDSoundStrmOut);
-                    if (SUCCEEDED(hr))
-                        hr = directSoundPlayStart(pDSoundStrmOut);
-                }
+                if (SUCCEEDED(hr))
+                    hr = directSoundPlayStart(pThis, pDSoundStrmOut);
             }
 
             if (FAILED(hr))
                 rc = VERR_NOT_SUPPORTED;
-
-            pThis->fEnabledOut = RT_SUCCESS(rc);
             break;
         }
 
         case PDMAUDIOSTREAMCMD_DISABLE:
         case PDMAUDIOSTREAMCMD_PAUSE:
         {
+            DSLOG(("DSound: Playback PDMAUDIOSTREAMCMD_DISABLE\n"));
             hr = directSoundPlayStop(pThis, pDSoundStrmOut);
-            if (SUCCEEDED(hr))
-                pThis->fEnabledOut = false;
+            if (FAILED(hr))
+                rc = VERR_NOT_SUPPORTED;
             break;
         }
 
@@ -1322,17 +1501,16 @@ static DECLCALLBACK(int) drvHostDSoundPlayOut(PPDMIHOSTAUDIO pInterface, PPDMAUD
     int rc = VINF_SUCCESS;
     uint32_t cReadTotal = 0;
 
+#ifdef DEBUG_andy
+    LogFlowFuncEnter();
+#endif
+
     do /* to use 'break' */
     {
         DWORD cbBuffer, cbFree, cbPlayPos;
-        rc = dsoundGetStatusOut(pDSoundStrmOut, &cbBuffer, &cbFree, &cbPlayPos);
+        rc = dsoundGetPosOut(pThis, pDSoundStrmOut, &cbBuffer, &cbFree, &cbPlayPos);
         if (RT_FAILURE(rc))
-        {
-            /* Set the output status to disabled, as we are not able to retrieve the current
-             * status (anymore). */
-            pThis->fEnabledOut = false;
             break;
-        }
 
         /*
          * Check for full buffer, do not allow the cbPlayWritePos to catch cbPlayPos during playback,
@@ -1362,8 +1540,8 @@ static DECLCALLBACK(int) drvHostDSoundPlayOut(PPDMIHOSTAUDIO pInterface, PPDMAUD
 
         LPVOID pv1, pv2;
         DWORD cb1, cb2;
-        HRESULT hr = directSoundPlayLock(pDSB, &pHstStrmOut->Props, pDSoundStrmOut->cbPlayWritePos, cbLive,
-                                 &pv1, &pv2, &cb1, &cb2, 0 /* dwFlags */);
+        HRESULT hr = directSoundPlayLock(pThis, pDSB, &pHstStrmOut->Props, pDSoundStrmOut->cbPlayWritePos, cbLive,
+                                         &pv1, &pv2, &cb1, &cb2, 0 /* dwFlags */);
         if (FAILED(hr))
         {
             rc = VERR_ACCESS_DENIED;
@@ -1391,7 +1569,7 @@ static DECLCALLBACK(int) drvHostDSoundPlayOut(PPDMIHOSTAUDIO pInterface, PPDMAUD
                 cReadTotal += cRead;
         }
 
-        directSoundPlayUnlock(pDSB, pv1, pv2, cb1, cb2);
+        directSoundPlayUnlock(pThis, pDSB, pv1, pv2, cb1, cb2);
 
         pDSoundStrmOut->cbPlayWritePos =
             (pDSoundStrmOut->cbPlayWritePos + AUDIOMIXBUF_S2B(&pHstStrmOut->MixBuf, cReadTotal)) % cbBuffer;
@@ -1423,7 +1601,19 @@ static DECLCALLBACK(int) drvHostDSoundPlayOut(PPDMIHOSTAUDIO pInterface, PPDMAUD
 #ifndef VBOX_WITH_AUDIO_CALLBACKS
             fFlags |= DSCBSTART_LOOPING;
 #endif
-            hr = IDirectSoundBuffer8_Play(pDSoundStrmOut->pDSB, 0, 0, fFlags);
+            for (unsigned i = 0; i < DRV_DSOUND_RESTORE_ATTEMPTS_MAX; i++)
+            {
+                hr = IDirectSoundBuffer8_Play(pDSoundStrmOut->pDSB, 0, 0, fFlags);
+                if (   SUCCEEDED(hr)
+                    || hr != DSERR_BUFFERLOST)
+                    break;
+                else
+                {
+                    LogFlowFunc(("Restarting playback failed due to lost buffer, restoring ...\n"));
+                    directSoundPlayRestore(pThis, pDSoundStrmOut->pDSB);
+                }
+            }
+
             if (FAILED(hr))
             {
                 DSLOGREL(("DSound: Starting playback failed with %Rhrc\n", hr));
@@ -1434,12 +1624,17 @@ static DECLCALLBACK(int) drvHostDSoundPlayOut(PPDMIHOSTAUDIO pInterface, PPDMAUD
 
     } while (0);
 
-    if (RT_SUCCESS(rc))
+    if (RT_FAILURE(rc))
+    {
+        dsoundUpdateStatusInternal(pThis);
+    }
+    else
     {
         if (pcSamplesPlayed)
             *pcSamplesPlayed = cReadTotal;
     }
 
+    LogFlowFuncLeaveRC(rc);
     return rc;
 }
 
@@ -1508,7 +1703,7 @@ static DECLCALLBACK(int) drvHostDSoundControlIn(PPDMIHOSTAUDIO pInterface, PPDMA
 
     LogFlowFunc(("pHstStrmIn=%p, enmStreamCmd=%ld\n", pHstStrmIn, enmStreamCmd));
 
-    PDRVHOSTDSOUND pThis = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
+    PDRVHOSTDSOUND  pThis         = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
     PDSOUNDSTREAMIN pDSoundStrmIn = (PDSOUNDSTREAMIN)pHstStrmIn;
 
     int rc = VINF_SUCCESS;
@@ -1534,17 +1729,15 @@ static DECLCALLBACK(int) drvHostDSoundControlIn(PPDMIHOSTAUDIO pInterface, PPDMA
 
             if (FAILED(hr))
                 rc = VERR_NOT_SUPPORTED;
-
-            pThis->fEnabledIn = RT_SUCCESS(rc);
             break;
         }
 
         case PDMAUDIOSTREAMCMD_DISABLE:
         case PDMAUDIOSTREAMCMD_PAUSE:
         {
-            hr = directSoundCaptureStop(pDSoundStrmIn);
-            if (SUCCEEDED(hr))
-                pThis->fEnabledIn = false;
+            hr = directSoundCaptureStop(pThis, pDSoundStrmIn);
+            if (FAILED(hr))
+                rc = VERR_NOT_SUPPORTED;
             break;
         }
 
@@ -1563,8 +1756,9 @@ static DECLCALLBACK(int) drvHostDSoundCaptureIn(PPDMIHOSTAUDIO pInterface, PPDMA
                                                 uint32_t *pcSamplesCaptured)
 {
     PDRVHOSTDSOUND pThis = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
-    PDSOUNDSTREAMIN pDSoundStrmIn = (PDSOUNDSTREAMIN)pHstStrmIn;
-    LPDIRECTSOUNDCAPTUREBUFFER8 pDSCB = pDSoundStrmIn->pDSCB;
+
+    PDSOUNDSTREAMIN             pDSoundStrmIn = (PDSOUNDSTREAMIN)pHstStrmIn;
+    LPDIRECTSOUNDCAPTUREBUFFER8 pDSCB         = pDSoundStrmIn->pDSCB;
 
     int rc = VINF_SUCCESS;
 
@@ -1574,8 +1768,6 @@ static DECLCALLBACK(int) drvHostDSoundCaptureIn(PPDMIHOSTAUDIO pInterface, PPDMA
     {
         if (pDSCB == NULL)
         {
-            pThis->fEnabledIn = false;
-
             rc = VERR_NOT_AVAILABLE;
             break;
         }
@@ -1676,9 +1868,17 @@ static DECLCALLBACK(int) drvHostDSoundCaptureIn(PPDMIHOSTAUDIO pInterface, PPDMA
 
     } while (0);
 
-    if (pcSamplesCaptured)
-        *pcSamplesCaptured = cCaptured;
+    if (RT_FAILURE(rc))
+    {
+        dsoundUpdateStatusInternal(pThis);
+    }
+    else
+    {
+        if (pcSamplesCaptured)
+            *pcSamplesCaptured = cCaptured;
+    }
 
+    LogFlowFuncLeaveRC(rc);
     return rc;
 }
 
@@ -1716,64 +1916,7 @@ static DECLCALLBACK(int) drvHostDSoundGetConf(PPDMIHOSTAUDIO pInterface, PPDMAUD
 
     PDRVHOSTDSOUND pThis = PDMIHOSTAUDIO_2_DRVHOSTDSOUND(pInterface);
 
-    dsoundFreeDeviceLists(pThis);
-
-    pCfg->cbStreamOut = sizeof(DSOUNDSTREAMOUT);
-    pCfg->cbStreamIn  = sizeof(DSOUNDSTREAMIN);
-
-    pCfg->cMaxHstStrmsOut = 0;
-    pCfg->cMaxHstStrmsIn  = 0;
-
-    RTLDRMOD hDSound = NULL;
-    int rc = RTLdrLoadSystem("dsound.dll", true /*fNoUnload*/, &hDSound);
-    if (RT_SUCCESS(rc))
-    {
-        PFNDIRECTSOUNDENUMERATEW pfnDirectSoundEnumerateW = NULL;
-        PFNDIRECTSOUNDCAPTUREENUMERATEW pfnDirectSoundCaptureEnumerateW = NULL;
-
-        rc = RTLdrGetSymbol(hDSound, "DirectSoundEnumerateW", (void**)&pfnDirectSoundEnumerateW);
-        if (RT_SUCCESS(rc))
-        {
-            rc = RTLdrGetSymbol(hDSound, "DirectSoundCaptureEnumerateW", (void**)&pfnDirectSoundCaptureEnumerateW);
-        }
-
-        if (RT_SUCCESS(rc))
-        {
-            DSOUNDENUMCBCTX ctx = { pThis, pCfg };
-
-            HRESULT hr = pfnDirectSoundEnumerateW(&dsoundEnumCallback, &ctx);
-            if (FAILED(hr))
-                LogRel(("DSound: Error enumerating host playback devices: %Rhrc\n", hr));
-
-            LogRel(("DSound: Found %RU32 host playback devices\n", pCfg->cMaxHstStrmsOut));
-
-            hr = pfnDirectSoundCaptureEnumerateW(&dsoundCaptureEnumCallback, &ctx);
-            if (FAILED(hr))
-                LogRel(("DSound: Error enumerating host capturing devices: %Rhrc\n", hr));
-
-            LogRel(("DSound: Found %RU32 host capturing devices\n", pCfg->cMaxHstStrmsIn));
-        }
-
-        RTLdrClose(hDSound);
-    }
-    else
-    {
-        /* No dsound.dll on this system.  */
-        LogRel(("DSound: Could not load dsound.dll %Rrc\n", rc));
-    }
-
-    /* Always return success and at least default values to make the caller happy. */
-    if (pCfg->cMaxHstStrmsOut == 0)
-    {
-        LogRel(("DSound: Adjusting the number of host playback devices to 1\n"));
-        pCfg->cMaxHstStrmsOut = 1; /* Support at least one stream. */
-    }
-
-    if (pCfg->cMaxHstStrmsIn < 2)
-    {
-        LogRel(("DSound: Adjusting the number of host capturing devices from %RU32 to 2\n", pCfg->cMaxHstStrmsIn));
-        pCfg->cMaxHstStrmsIn = 2; /* Support at least two streams (line in + mic). */
-    }
+    dsoundUpdateStatusInternalEx(pThis, pCfg, 0 /* fEnum */);
 
     return VINF_SUCCESS;
 }
@@ -1849,7 +1992,7 @@ static DECLCALLBACK(int) drvHostDSoundThread(RTTHREAD hThreadSelf, void *pvUser)
                 else if (aEvents[dwObj] == pThis->aEvents[DSOUNDEVENT_OUTPUT])
                 {
                     DWORD cbBuffer, cbFree, cbPlayPos;
-                    rc = dsoundGetStatusOut(pThis->pDSStrmOut, &cbBuffer, &cbFree, &cbPlayPos);
+                    rc = dsoundGetPosOut(pThis->pDSStrmOut, &cbBuffer, &cbFree, &cbPlayPos);
                     if (   RT_SUCCESS(rc)
                         && cbFree)
                     {
@@ -1951,6 +2094,12 @@ static DECLCALLBACK(int) drvHostDSoundInit(PPDMIHOSTAUDIO pInterface)
 #else
         rc = VINF_SUCCESS;
 #endif
+
+        PDMAUDIOBACKENDCFG Cfg;
+        dsoundUpdateStatusInternalEx(pThis, &Cfg, DSOUNDENUMCBFLAGS_LOG /* fEnum */);
+
+        DSLOGREL(("DSound: Found %RU32 host playback devices\n",  Cfg.cMaxHstStrmsOut));
+        DSLOGREL(("DSound: Found %RU32 host capturing devices\n", Cfg.cMaxHstStrmsIn));
     }
     else
     {
@@ -1980,7 +2129,7 @@ static LPCGUID dsoundConfigQueryGUID(PCFGMNODE pCfg, const char *pszName, RTUUID
     int rc = CFGMR3QueryStringAlloc(pCfg, pszName, &pszGuid);
     if (RT_SUCCESS(rc))
     {
-        int rc = RTUuidFromStr(pUuid, pszGuid);
+        rc = RTUuidFromStr(pUuid, pszGuid);
         if (RT_SUCCESS(rc))
             pGuid = (LPCGUID)&pUuid;
         else
@@ -2073,8 +2222,8 @@ static DECLCALLBACK(int) drvHostDSoundConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pC
     pThis->fEnabledIn  = false;
     pThis->fEnabledOut = false;
 #ifdef VBOX_WITH_AUDIO_CALLBACKS
-    pThis->fStopped  = false;
-    pThis->fShutdown = false;
+    pThis->fStopped    = false;
+    pThis->fShutdown   = false;
 
     RT_ZERO(pThis->aEvents);
     pThis->cEvents = 0;
diff --git a/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp b/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp
index dce8a98..8ee40ad 100644
--- a/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp
+++ b/src/VBox/Devices/Audio/DrvHostPulseAudio.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -1101,10 +1101,10 @@ static DECLCALLBACK(int) drvHostPulseAudioGetConf(PPDMIHOSTAUDIO pInterface, PPD
     NOREF(pInterface);
     AssertPtrReturn(pCfg, VERR_INVALID_POINTER);
 
-    pCfg->cbStreamOut = sizeof(PULSEAUDIOSTREAM);
-    pCfg->cbStreamIn = sizeof(PULSEAUDIOSTREAM);
-    pCfg->cMaxHstStrmsOut = INT_MAX;
-    pCfg->cMaxHstStrmsIn = INT_MAX;
+    pCfg->cbStreamOut     = sizeof(PULSEAUDIOSTREAM);
+    pCfg->cbStreamIn      = sizeof(PULSEAUDIOSTREAM);
+    pCfg->cMaxHstStrmsOut = UINT32_MAX;
+    pCfg->cMaxHstStrmsIn  = UINT32_MAX;
 
     return VINF_SUCCESS;
 }
diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd
index 1d0a43e..0dd6a53 100644
Binary files a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd and b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI32.fd differ
diff --git a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd
index 38aa8a4..42750e8 100644
Binary files a/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd and b/src/VBox/Devices/EFI/FirmwareBin/VBoxEFI64.fd differ
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
index 6bbbadc..3d2611e 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.asm
@@ -6769,7 +6769,7 @@ vesa_pm_end:                                 ; 0xc4514 LB 0x1
 
 section _DATA progbits vstart=0x4600 align=1 ; size=0x371f class=DATA group=DGROUP
 _msg_vga_init:                               ; 0xc4600 LB 0x2f
-    db  'Oracle VM VirtualBox Version 5.0.14 VGA BIOS', 00dh, 00ah, 000h
+    db  'Oracle VM VirtualBox Version 5.0.16 VGA BIOS', 00dh, 00ah, 000h
 _vga_modes:                                  ; 0xc462f LB 0x80
     db  000h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 001h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
     db  002h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h, 003h, 000h, 000h, 004h, 000h, 0b8h, 0ffh, 002h
@@ -7664,7 +7664,7 @@ _vbebios_vendor_name:                        ; 0xc7c73 LB 0x13
 _vbebios_product_name:                       ; 0xc7c86 LB 0x21
     db  'Oracle VM VirtualBox VBE Adapter', 000h
 _vbebios_product_revision:                   ; 0xc7ca7 LB 0x24
-    db  'Oracle VM VirtualBox Version 5.0.14', 000h
+    db  'Oracle VM VirtualBox Version 5.0.16', 000h
 _vbebios_info_string:                        ; 0xc7ccb LB 0x2b
     db  'VirtualBox VBE Display Adapter enabled', 00dh, 00ah, 00dh, 00ah, 000h
 _no_vbebios_info_string:                     ; 0xc7cf6 LB 0x29
@@ -7723,4 +7723,4 @@ section CONST2 progbits vstart=0x7d20 align=1 ; size=0x0 class=DATA group=DGROUP
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
     db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
-    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0fah
+    db  000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 0f6h
diff --git a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
index 30da53f..679999f 100644
--- a/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
+++ b/src/VBox/Devices/Graphics/BIOS/VBoxVgaBiosAlternative.md5sum
@@ -1 +1 @@
-674df19b0fcc79d5d91e4a697824ae8a *VBoxVgaBios.rom
+7c187a1f2eaa0b22af05b5b839c1344f *VBoxVgaBios.rom
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
index fb28a1e..373c9ea 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
@@ -2363,6 +2363,7 @@ static void *vmsvgaFIFOGetCmdPayload(uint32_t cbPayloadReq, uint32_t volatile *p
         /*
          * Insufficient, must wait for it to arrive.
          */
+/** @todo Should clear the busy flag here to maybe encourage the guest to wake us up. */
         STAM_REL_PROFILE_START(&pSVGAState->StatFifoStalls, Stall);
         for (uint32_t i = 0;; i++)
         {
@@ -2447,7 +2448,7 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
 
 
     /*
-     * Signal the semaphore to make sure we don't wait for 250 after a
+     * Signal the semaphore to make sure we don't wait for 250ms after a
      * suspend & resume scenario (see vmsvgaFIFOGetCmdPayload).
      */
     SUPSemEventSignal(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem);
@@ -2459,7 +2460,25 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
     uint8_t *pbBounceBuf = (uint8_t *)RTMemAllocZ(VMSVGA_FIFO_SIZE);
     AssertReturn(pbBounceBuf, VERR_NO_MEMORY);
 
+    /*
+     * Polling/sleep interval config.
+     *
+     * We wait for an a short interval if the guest has recently given us work
+     * to do, but the interval increases the longer we're kept idle.  With the
+     * current parameters we'll be at a 64ms poll interval after 1 idle second,
+     * at 90ms after 2 seconds, and reach the max 250ms interval after about
+     * 16 seconds.
+     */
+    RTMSINTERVAL const  cMsMinSleep = 16;
+    RTMSINTERVAL const  cMsIncSleep = 2;
+    RTMSINTERVAL const  cMsMaxSleep = 250;
+    RTMSINTERVAL        cMsSleep    = cMsMaxSleep;
+
+    /*
+     * The FIFO loop.
+     */
     LogFlow(("vmsvgaFIFOLoop: started loop\n"));
+    bool fBadOrDisabledFifo = false;
     uint32_t volatile * const pFIFO = pThis->svga.pFIFOR3;
     while (pThread->enmState == PDMTHREADSTATE_RUNNING)
     {
@@ -2472,25 +2491,37 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
 # endif
 
         /*
-         * Wait for at most 250 ms to start polling.
+         * Unless there's already work pending, go to sleep for a short while.
+         * (See polling/sleep interval config above.)
          */
-        rc = SUPSemEventWaitNoResume(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem, 250);
-        AssertBreak(RT_SUCCESS(rc) || rc == VERR_TIMEOUT || rc == VERR_INTERRUPTED);
-        if (pThread->enmState != PDMTHREADSTATE_RUNNING)
+        if (   fBadOrDisabledFifo
+            || pFIFO[SVGA_FIFO_NEXT_CMD] == pFIFO[SVGA_FIFO_STOP])
         {
-            LogFlow(("vmsvgaFIFOLoop: thread state %x\n", pThread->enmState));
-            break;
+            rc = SUPSemEventWaitNoResume(pThis->svga.pSupDrvSession, pThis->svga.FIFORequestSem, cMsSleep);
+            AssertBreak(RT_SUCCESS(rc) || rc == VERR_TIMEOUT || rc == VERR_INTERRUPTED);
+            if (pThread->enmState != PDMTHREADSTATE_RUNNING)
+            {
+                LogFlow(("vmsvgaFIFOLoop: thread state %x\n", pThread->enmState));
+                break;
+            }
         }
+        else
+            rc = VINF_SUCCESS;
+        fBadOrDisabledFifo = false;
         if (rc == VERR_TIMEOUT)
         {
             if (pFIFO[SVGA_FIFO_NEXT_CMD] == pFIFO[SVGA_FIFO_STOP])
+            {
+                cMsSleep = RT_MIN(cMsSleep + cMsIncSleep, cMsMaxSleep);
                 continue;
+            }
             STAM_REL_COUNTER_INC(&pSVGAState->StatFifoTodoTimeout);
 
             Log(("vmsvgaFIFOLoop: timeout\n"));
         }
         else if (pFIFO[SVGA_FIFO_NEXT_CMD] != pFIFO[SVGA_FIFO_STOP])
             STAM_REL_COUNTER_INC(&pSVGAState->StatFifoTodoWoken);
+        cMsSleep = cMsMinSleep;
 
         Log(("vmsvgaFIFOLoop: enabled=%d configured=%d busy=%d\n", pThis->svga.fEnabled, pThis->svga.fConfigured, pThis->svga.pFIFOR3[SVGA_FIFO_BUSY]));
         Log(("vmsvgaFIFOLoop: min  %x max  %x\n", pFIFO[SVGA_FIFO_MIN], pFIFO[SVGA_FIFO_MAX]));
@@ -2512,6 +2543,7 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
             || !pThis->svga.fConfigured)
         {
             vmsvgaFifoSetNotBusy(pThis, pSVGAState, pFIFO[SVGA_FIFO_MIN]);
+            fBadOrDisabledFifo = true;
             continue;
         }
 
@@ -2535,6 +2567,7 @@ static DECLCALLBACK(int) vmsvgaFIFOLoop(PPDMDEVINS pDevIns, PPDMTHREAD pThread)
             STAM_REL_COUNTER_INC(&pSVGAState->StatFifoErrors);
             LogRelMax(8, ("vmsvgaFIFOLoop: Bad fifo: min=%#x stop=%#x max=%#x\n", offFifoMin, offCurrentCmd, offFifoMax));
             vmsvgaFifoSetNotBusy(pThis, pSVGAState, offFifoMin);
+            fBadOrDisabledFifo = true;
             continue;
         }
         if (RT_UNLIKELY(offCurrentCmd & 3))
diff --git a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
index e3069cf..6c2f679 100644
--- a/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
+++ b/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
@@ -3661,7 +3661,7 @@ int vmsvga3dSetTransform(PVGASTATE pThis, uint32_t cid, SVGA3dTransformType type
 
     case SVGA3D_TRANSFORM_PROJECTION:
     {
-        int rc = ShaderTransformProjection(pContext->state.RectViewPort.w, pContext->state.RectViewPort.h, matrix);
+        int rc = ShaderTransformProjection(pContext->state.RectViewPort.w, pContext->state.RectViewPort.h, matrix, false /* fPretransformed */);
         AssertRCReturn(rc, rc);
         break;
     }
@@ -5861,8 +5861,52 @@ int vmsvga3dPrimitiveType2OGL(SVGA3dPrimitiveType PrimitiveType, GLenum *pMode,
     return VINF_SUCCESS;
 }
 
-int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t iVertexDeclBase, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl)
+int vmsvga3dResetTransformMatrices(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext)
 {
+    int rc;
+
+    /* Reset the view matrix (also takes the world matrix into account). */
+    if (pContext->state.aTransformState[SVGA3D_TRANSFORM_VIEW].fValid == true)
+    {
+        rc = vmsvga3dSetTransform(pThis, pContext->id, SVGA3D_TRANSFORM_VIEW, pContext->state.aTransformState[SVGA3D_TRANSFORM_VIEW].matrix);
+    }
+    else
+    {
+        float matrix[16];
+
+        /* identity matrix if no matrix set. */
+        memset(matrix, 0, sizeof(matrix));
+        matrix[0]  = 1.0;
+        matrix[5]  = 1.0;
+        matrix[10] = 1.0;
+        matrix[15] = 1.0;
+        rc = vmsvga3dSetTransform(pThis, pContext->id, SVGA3D_TRANSFORM_VIEW, matrix);
+    }
+
+    /* Reset the projection matrix. */
+    if (pContext->state.aTransformState[SVGA3D_TRANSFORM_PROJECTION].fValid == true)
+    {
+        rc = vmsvga3dSetTransform(pThis, pContext->id, SVGA3D_TRANSFORM_PROJECTION, pContext->state.aTransformState[SVGA3D_TRANSFORM_PROJECTION].matrix);
+    }
+    else
+    {
+        float matrix[16];
+
+        /* identity matrix if no matrix set. */
+        memset(matrix, 0, sizeof(matrix));
+        matrix[0]  = 1.0;
+        matrix[5]  = 1.0;
+        matrix[10] = 1.0;
+        matrix[15] = 1.0;
+        rc = vmsvga3dSetTransform(pThis, pContext->id, SVGA3D_TRANSFORM_PROJECTION, matrix);
+    }
+    AssertRC(rc);
+    return rc;
+}
+
+int vmsvga3dDrawPrimitivesProcessVertexDecls(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext, uint32_t iVertexDeclBase, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl)
+{
+    PVMSVGA3DSTATE      pState = pThis->svga.p3dState;
     unsigned            sidVertex = pVertexDecl[0].array.surfaceId;
     PVMSVGA3DSURFACE    pVertexSurface;
 
@@ -5935,13 +5979,16 @@ int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCON
             /* Use the predefined selection of vertex streams for the fixed pipeline. */
             switch (pVertexDecl[iVertex].identity.usage)
             {
+            case SVGA3D_DECLUSAGE_POSITIONT:
             case SVGA3D_DECLUSAGE_POSITION:
+            {
                 glEnableClientState(GL_VERTEX_ARRAY);
                 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
                 glVertexPointer(size, type, pVertexDecl[iVertex].array.stride,
                                 (const GLvoid *)(uintptr_t)pVertexDecl[iVertex].array.offset);
                 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
                 break;
+            }
             case SVGA3D_DECLUSAGE_BLENDWEIGHT:
                 AssertFailed();
                 break;
@@ -5980,9 +6027,6 @@ int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCON
             case SVGA3D_DECLUSAGE_TESSFACTOR:
                 AssertFailed();
                 break;
-            case SVGA3D_DECLUSAGE_POSITIONT:
-                AssertFailed(); /* see position_transformed in Wine */
-                break;
             case SVGA3D_DECLUSAGE_COLOR:    /** @todo color component order not identical!! test GL_BGRA!! */
                 glEnableClientState(GL_COLOR_ARRAY);
                 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
@@ -6016,11 +6060,20 @@ int vmsvga3dDrawPrimitivesProcessVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCON
     return VINF_SUCCESS;
 }
 
-int vmsvga3dDrawPrimitivesCleanupVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCONTEXT pContext, uint32_t iVertexDeclBase, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl)
+int vmsvga3dDrawPrimitivesCleanupVertexDecls(PVGASTATE pThis, PVMSVGA3DCONTEXT pContext, uint32_t iVertexDeclBase, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl)
 {
-    /* Setup the vertex declarations. */
+    PVMSVGA3DSTATE pState = pThis->svga.p3dState;
+
+    /* Clean up the vertex declarations. */
     for (unsigned iVertex = 0; iVertex < numVertexDecls; iVertex++)
     {
+        if (pVertexDecl[iVertex].identity.usage == SVGA3D_DECLUSAGE_POSITIONT)
+        {
+            /* Reset the transformation matrices in case of a switch back from pretransformed mode. */
+            Log(("vmsvga3dDrawPrimitivesCleanupVertexDecls: reset world and projection matrices after transformation reset (pre-transformed -> transformed)\n"));
+            vmsvga3dResetTransformMatrices(pThis, pContext);
+        }
+
         if (pContext->state.shidVertex != SVGA_ID_INVALID)
         {
             /* Use numbered vertex arrays when shaders are active. */
@@ -6033,6 +6086,7 @@ int vmsvga3dDrawPrimitivesCleanupVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCON
             switch (pVertexDecl[iVertex].identity.usage)
             {
             case SVGA3D_DECLUSAGE_POSITION:
+            case SVGA3D_DECLUSAGE_POSITIONT:
                 glDisableClientState(GL_VERTEX_ARRAY);
                 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
                 break;
@@ -6062,8 +6116,6 @@ int vmsvga3dDrawPrimitivesCleanupVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCON
                 break;
             case SVGA3D_DECLUSAGE_TESSFACTOR:
                 break;
-            case SVGA3D_DECLUSAGE_POSITIONT:
-                break;
             case SVGA3D_DECLUSAGE_COLOR:    /** @todo color component order not identical!! */
                 glDisableClientState(GL_COLOR_ARRAY);
                 VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
@@ -6088,8 +6140,8 @@ int vmsvga3dDrawPrimitivesCleanupVertexDecls(PVMSVGA3DSTATE pState, PVMSVGA3DCON
 
 int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecls, SVGA3dVertexDecl *pVertexDecl, uint32_t numRanges, SVGA3dPrimitiveRange *pRange, uint32_t cVertexDivisor, SVGA3dVertexDivisor *pVertexDivisor)
 {
-    PVMSVGA3DCONTEXT             pContext;
     PVMSVGA3DSTATE               pState = pThis->svga.p3dState;
+    PVMSVGA3DCONTEXT             pContext;
     AssertReturn(pState, VERR_INTERNAL_ERROR);
     int                          rc = VERR_NOT_IMPLEMENTED;
     uint32_t                     iCurrentVertex;
@@ -6111,7 +6163,21 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
     pContext = pState->papContexts[cid];
     VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
 
-    /* Flush any shader changes. */
+    /* Check for pretransformed vertex declarations. */
+    for (unsigned iVertex = 0; iVertex < numVertexDecls; iVertex++)
+    {
+        switch (pVertexDecl[iVertex].identity.usage)
+        {
+        case SVGA3D_DECLUSAGE_POSITIONT:
+            Log(("ShaderSetPositionTransformed: (%d,%d)\n", pContext->state.RectViewPort.w, pContext->state.RectViewPort.h));
+        case SVGA3D_DECLUSAGE_POSITION:
+            ShaderSetPositionTransformed(pContext->pShaderContext, pContext->state.RectViewPort.w, pContext->state.RectViewPort.h, 
+                                         pVertexDecl[iVertex].identity.usage == SVGA3D_DECLUSAGE_POSITIONT);
+            break;
+        }
+    }
+
+    /* Flush any shader changes; after (!) checking the vertex declarations to deal with pre-transformed vertices. */
     if (pContext->pShaderContext)
     {
         uint32_t rtHeight = 0;
@@ -6141,7 +6207,7 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
             sidVertex = pVertexDecl[iVertex].array.surfaceId;
         }
 
-        rc = vmsvga3dDrawPrimitivesProcessVertexDecls(pState, pContext, iCurrentVertex, iVertex - iCurrentVertex, &pVertexDecl[iCurrentVertex]);
+        rc = vmsvga3dDrawPrimitivesProcessVertexDecls(pThis, pContext, iCurrentVertex, iVertex - iCurrentVertex, &pVertexDecl[iCurrentVertex]);
         AssertRCReturn(rc, rc);
 
         iCurrentVertex = iVertex;
@@ -6222,20 +6288,37 @@ int vmsvga3dDrawPrimitives(PVGASTATE pThis, uint32_t cid, uint32_t numVertexDecl
         }
         else
         {
+            GLenum indexType;
+
             Assert(pRange[iPrimitive].indexBias >= 0);  /** @todo  indexBias */
             Assert(pRange[iPrimitive].indexWidth == pRange[iPrimitive].indexArray.stride);
 
+            if (pRange[iPrimitive].indexWidth == sizeof(uint8_t))
+            {
+                indexType = GL_UNSIGNED_BYTE;
+            }
+            else
+            if (pRange[iPrimitive].indexWidth == sizeof(uint16_t))
+            {
+                indexType = GL_UNSIGNED_SHORT;
+            }
+            else
+            {
+                Assert(pRange[iPrimitive].indexWidth == sizeof(uint32_t));
+                indexType = GL_UNSIGNED_INT;
+            }
+
             /* Render with an index buffer */
             Log(("DrawIndexedPrimitive %x cPrimitives=%d cVertices=%d hint.first=%d hint.last=%d index offset=%d primitivecount=%d index width=%d index bias=%d\n", modeDraw, pRange[iPrimitive].primitiveCount, cVertices, pVertexDecl[0].rangeHint.first,  pVertexDecl[0].rangeHint.last,  pRange[iPrimitive].indexArray.offset, pRange[iPrimitive].primitiveCount,  pRange[iPrimitive].indexWidth, pRange[iPrimitive].indexBias));
             if (pRange[iPrimitive].indexBias == 0)
                 glDrawElements(modeDraw,
                                cVertices,
-                               (pRange[iPrimitive].indexWidth == sizeof(uint16_t)) ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT,
+                               indexType,
                                (GLvoid *)(uintptr_t)pRange[iPrimitive].indexArray.offset);   /* byte offset in indices buffer */
             else
                 pState->ext.glDrawElementsBaseVertex(modeDraw,
                                                      cVertices,
-                                                     (pRange[iPrimitive].indexWidth == sizeof(uint16_t)) ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT,
+                                                     indexType,
                                                      (GLvoid *)(uintptr_t)pRange[iPrimitive].indexArray.offset, /* byte offset in indices buffer */
                                                      pRange[iPrimitive].indexBias);  /* basevertex */
 
@@ -6264,7 +6347,7 @@ internal_error:
             sidVertex = pVertexDecl[iVertex].array.surfaceId;
         }
 
-        rc = vmsvga3dDrawPrimitivesCleanupVertexDecls(pState, pContext, iCurrentVertex, iVertex - iCurrentVertex, &pVertexDecl[iCurrentVertex]);
+        rc = vmsvga3dDrawPrimitivesCleanupVertexDecls(pThis, pContext, iCurrentVertex, iVertex - iCurrentVertex, &pVertexDecl[iCurrentVertex]);
         AssertRCReturn(rc, rc);
 
         iCurrentVertex = iVertex;
@@ -6307,16 +6390,17 @@ internal_error:
 #endif
 
 #ifdef DEBUG_GFX_WINDOW
-    if (pContext->aSidActiveTexture[0])
+    if (pContext->sidRenderTarget)
     {
         SVGA3dCopyRect rect;
 
         rect.srcx = rect.srcy = rect.x = rect.y = 0;
-        rect.w = 800;
-        rect.h = 600;
+        rect.w = pContext->state.RectViewPort.w;
+        rect.h = pContext->state.RectViewPort.h;
         vmsvga3dCommandPresent(pThis, pContext->sidRenderTarget, 0, NULL);
     }
 #endif
+
     return rc;
 }
 
diff --git a/src/VBox/Devices/Graphics/VBoxSVGA3D.def b/src/VBox/Devices/Graphics/VBoxSVGA3D.def
index e709519..35b6c96 100644
--- a/src/VBox/Devices/Graphics/VBoxSVGA3D.def
+++ b/src/VBox/Devices/Graphics/VBoxSVGA3D.def
@@ -35,4 +35,6 @@ EXPORTS
     ShaderSetPixelShaderConstantF
     ShaderUpdateState
     ShaderTransformProjection
+    ShaderSetPositionTransformed
+
 
diff --git a/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c b/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c
index 05e3634..534e942 100644
--- a/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c
+++ b/src/VBox/Devices/Graphics/shaderlib/glsl_shader.c
@@ -4261,6 +4261,36 @@ static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer
     return ret;
 }
 
+#ifdef VBOX_WITH_VMSVGA
+static GLhandleARB generate_passthrough_vshader(const struct wined3d_gl_info *gl_info)
+{
+    GLhandleARB ret = 0;
+    static const char *passthrough_vshader[] =
+    {
+        "#version 120\n"
+        "vec4 R0;\n"
+        "void main(void)\n"
+        "{\n"
+        "    R0   = gl_Vertex;\n"
+        "    R0.w = 1.0;\n"
+        "    R0.z = 0.0;\n"
+        "    gl_Position   = gl_ModelViewProjectionMatrix * R0;\n"
+        "}\n"
+    };
+
+    ret = GL_EXTCALL(glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB));
+    checkGLcall("glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB)");
+    GL_EXTCALL(glShaderSourceARB(ret, 1, passthrough_vshader, NULL));
+    checkGLcall("glShaderSourceARB(ret, 1, passthrough_vshader, NULL)");
+    GL_EXTCALL(glCompileShaderARB(ret));
+    checkGLcall("glCompileShaderARB(ret)");
+    shader_glsl_validate_compile_link(gl_info, ret, FALSE);
+
+    return ret;
+}
+
+#endif
+
 /* GL locking is done by the caller */
 static void hardcode_local_constants(IWineD3DBaseShaderImpl *shader, const struct wined3d_gl_info *gl_info,
         GLhandleARB programId, char prefix)
@@ -4709,6 +4739,23 @@ static void set_glsl_shader_program(const struct wined3d_context *context,
 
         list_add_head(&((IWineD3DBaseShaderImpl *)vshader)->baseShader.linked_programs, &entry->vshader_entry);
     }
+#ifdef VBOX_WITH_VMSVGA
+    else
+    if (device->strided_streams.position_transformed)
+    {
+        GLhandleARB passthrough_vshader_id;
+
+        passthrough_vshader_id = generate_passthrough_vshader(gl_info);
+        TRACE("Attaching GLSL shader object %p to program %p\n", (void *)(uintptr_t)passthrough_vshader_id, (void *)(uintptr_t)programId);
+        GL_EXTCALL(glAttachObjectARB(programId, passthrough_vshader_id));
+        checkGLcall("glAttachObjectARB");
+        /* Flag the reorder function for deletion, then it will be freed automatically when the program
+         * is destroyed
+         */
+        GL_EXTCALL(glDeleteObjectARB(passthrough_vshader_id));
+    }
+#endif
+
 
     /* Attach GLSL pshader */
     if (pshader)
diff --git a/src/VBox/Devices/Graphics/shaderlib/shaderapi.c b/src/VBox/Devices/Graphics/shaderlib/shaderapi.c
index c5ac4d7..469684e 100644
--- a/src/VBox/Devices/Graphics/shaderlib/shaderapi.c
+++ b/src/VBox/Devices/Graphics/shaderlib/shaderapi.c
@@ -14,7 +14,6 @@
  * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
-
 #include <iprt/err.h>
 #include <iprt/mem.h>
 #include <iprt/assert.h>
@@ -625,6 +624,35 @@ SHADERDECL(int) ShaderSetPixelShaderConstantF(void *pShaderContext, uint32_t sta
     return VINF_SUCCESS;
 }
 
+SHADERDECL(int) ShaderSetPositionTransformed(void *pShaderContext, unsigned cxViewPort, unsigned cyViewPort, bool fPreTransformed)
+{
+    IWineD3DDeviceImpl *This;
+    int rc;
+
+    SHADER_SET_CURRENT_CONTEXT(pShaderContext);
+    This = g_pCurrentContext->pDeviceContext;
+
+    if (This->strided_streams.position_transformed == fPreTransformed)
+        return VINF_SUCCESS;    /* no changes; nothing to do. */
+
+    Log(("ShaderSetPositionTransformed viewport (%d,%d) fPreTransformed=%d\n", cxViewPort, cyViewPort, fPreTransformed));
+    
+    if (fPreTransformed)
+    {   /* In the pre-transformed vertex coordinate case we need to disable all transformations as we're already using screen coordinates. */
+        /* Load the identity matrix for the model view */
+        glMatrixMode(GL_MODELVIEW);
+        glLoadIdentity();
+
+        /* Reset the projection matrix too */
+        rc = ShaderTransformProjection(cxViewPort, cyViewPort, NULL, fPreTransformed);
+        AssertRCReturn(rc, rc);
+    }
+
+    This->strided_streams.position_transformed = fPreTransformed;
+    ((IWineD3DVertexDeclarationImpl *)(This->stateBlock->vertexDecl))->position_transformed = fPreTransformed;
+    return VINF_SUCCESS;
+}
+
 SHADERDECL(int) ShaderUpdateState(void *pShaderContext, uint32_t rtHeight)
 {
     IWineD3DDeviceImpl *pThis;
@@ -667,7 +695,7 @@ SHADERDECL(int) ShaderUpdateState(void *pShaderContext, uint32_t rtHeight)
     return VINF_SUCCESS;
 }
 
-SHADERDECL(int) ShaderTransformProjection(unsigned cxViewPort, unsigned cyViewPort, float matrix[16])
+SHADERDECL(int) ShaderTransformProjection(unsigned cxViewPort, unsigned cyViewPort, float matrix[16], bool fPretransformed)
 {
 #ifdef DEBUG
     GLenum lastError;
@@ -722,11 +750,20 @@ SHADERDECL(int) ShaderTransformProjection(unsigned cxViewPort, unsigned cyViewPo
     yoffset = -(63.0f / 64.0f) / cyViewPort;
 
     glTranslatef(xoffset, -yoffset, -1.0f);
-    /* flip y coordinate origin too */
-    glScalef(1.0f, -1.0f, 2.0f);
 
-    glMultMatrixf(matrix);
+    if (fPretransformed) 
+    {
+        /* One world coordinate equals one screen pixel; y-inversion no longer an issue */
+        glOrtho(0, cxViewPort, 0, cyViewPort, -1, 1);
+    }
+    else
+    {
+        /* flip y coordinate origin too */
+        glScalef(1.0f, -1.0f, 2.0f);
 
+        /* Apply the supplied projection matrix */
+        glMultMatrixf(matrix);
+    }
 #ifdef DEBUG
     lastError = glGetError();                                     \
     AssertMsgReturn(lastError == GL_NO_ERROR, ("%s (%d): last error 0x%x\n", __FUNCTION__, __LINE__, lastError), VERR_INTERNAL_ERROR);
diff --git a/src/VBox/Devices/Graphics/shaderlib/shaderlib.h b/src/VBox/Devices/Graphics/shaderlib/shaderlib.h
index 24692c5..45f8d99 100644
--- a/src/VBox/Devices/Graphics/shaderlib/shaderlib.h
+++ b/src/VBox/Devices/Graphics/shaderlib/shaderlib.h
@@ -86,9 +86,11 @@ SHADERDECL(int) ShaderSetPixelShaderConstantB(void *pShaderContext, uint32_t reg
 SHADERDECL(int) ShaderSetPixelShaderConstantI(void *pShaderContext, uint32_t reg, const int32_t *pValues, uint32_t cRegisters);
 SHADERDECL(int) ShaderSetPixelShaderConstantF(void *pShaderContext, uint32_t reg, const float *pValues, uint32_t cRegisters);
 
+SHADERDECL(int) ShaderSetPositionTransformed(void *pShaderContext, unsigned cxViewPort, unsigned cyViewPort, bool fPreTransformed);
+
 SHADERDECL(int) ShaderUpdateState(void *pShaderContext, uint32_t rtHeight);
 
-SHADERDECL(int) ShaderTransformProjection(unsigned cxViewPort, unsigned cyViewPort, float matrix[16]);
+SHADERDECL(int) ShaderTransformProjection(unsigned cxViewPort, unsigned cyViewPort, float matrix[16], bool fPretransformed);
 
 RT_C_DECLS_END
 
diff --git a/src/VBox/Devices/Input/testcase/Makefile.kmk b/src/VBox/Devices/Input/testcase/Makefile.kmk
index 7dbdae6..cc45cb5 100644
--- a/src/VBox/Devices/Input/testcase/Makefile.kmk
+++ b/src/VBox/Devices/Input/testcase/Makefile.kmk
@@ -15,7 +15,7 @@
 # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 #
 
-SUB_DEPTH = ../../../..
+SUB_DEPTH = ../../../../..
 include $(KBUILD_PATH)/subheader.kmk
 
 if defined(VBOX_WITH_TESTCASES) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBOX_ONLY_SDK)
@@ -25,7 +25,7 @@ tstUsbMouse_TEMPLATE = VBOXR3TSTEXE
 tstUsbMouse_DEFS     = VBOX_WITH_VUSB
 tstUsbMouse_INCS     = \
         ../../build
-tstUsbMouse_LIBS     = $(LIB_VMM)
+tstUsbMouse_LIBS     = $(LIB_VMM) $(LIB_REM)
 tstUsbMouse_SOURCES  = \
         tstUsbMouse.cpp \
         ../UsbMouse.cpp
diff --git a/src/VBox/Devices/Network/DevEEPROM.cpp b/src/VBox/Devices/Network/DevEEPROM.cpp
index 04202e2..a689488 100644
--- a/src/VBox/Devices/Network/DevEEPROM.cpp
+++ b/src/VBox/Devices/Network/DevEEPROM.cpp
@@ -85,8 +85,9 @@ bool EEPROM93C46::readWord(uint32_t u32Addr, uint16_t *pu16Value)
  */
 EEPROM93C46::State EEPROM93C46::opRead()
 {
-    m_u16Word = m_au16Data[m_u16Addr++];
-    E1kLog(("EEPROM: Reading word %04x at %08x\n", m_u16Word, m_u16Addr-1));
+    m_u16Word = m_au16Data[m_u16Addr];
+    E1kLog(("EEPROM: Reading word %04x at %08x\n", m_u16Word, m_u16Addr));
+    m_u16Addr = (m_u16Addr + 1) & ADDR_MASK;
     m_u16Mask = DATA_MSB;
     return WRITING_DO;
 }
diff --git a/src/VBox/Devices/Network/slirp/tcp_input.c b/src/VBox/Devices/Network/slirp/tcp_input.c
index b7168ff..2355e21 100644
--- a/src/VBox/Devices/Network/slirp/tcp_input.c
+++ b/src/VBox/Devices/Network/slirp/tcp_input.c
@@ -696,7 +696,7 @@ findso:
             }
         }
         else if (   ti->ti_ack == tp->snd_una
-                 && LIST_FIRST(&tp->t_segq)
+                 && LIST_EMPTY(&tp->t_segq)
                  && ti->ti_len <= sbspace(&so->so_rcv))
         {
             /*
@@ -1557,7 +1557,13 @@ dodata:
      *      congestion avoidance sender won't send more until
      *      he gets an ACK.
      *
-     * See above.
+     * XXX: In case you wonder...  The magic "27" below is ESC that
+     * presumably starts a terminal escape-sequence and that we want
+     * to ACK ASAP.  [Original slirp code had three different
+     * heuristics to chose from here and in the header prediction case
+     * above, but the commented out alternatives were lost and the
+     * header prediction case that had an expanded comment about this
+     * has been modified to always send an ACK].
      */
     if (   ti->ti_len
         && (unsigned)ti->ti_len <= 5
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
index 119847d..b51d33b 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.asm
@@ -420,7 +420,7 @@
 ; Source file: system.c
 ;
 ;  
-;  Copyright (C) 2006-2015 Oracle Corporation
+;  Copyright (C) 2006-2016 Oracle Corporation
 ;  
 ;  This file is part of VirtualBox Open Source Edition (OSE), as
 ;  available from http://www.virtualbox.org. This file is free software;
@@ -983,7 +983,7 @@ section CONST progbits vstart=0xb0 align=1 ; size=0xcde class=DATA group=DGROUP
 
 section CONST2 progbits vstart=0xd8e align=1 ; size=0x3fa class=DATA group=DGROUP
 _bios_cvs_version_string:                    ; 0xf0d8e LB 0x12
-    db  'VirtualBox 5.0.14', 000h
+    db  'VirtualBox 5.0.16', 000h
 _bios_prefix_string:                         ; 0xf0da0 LB 0x8
     db  'BIOS: ', 000h, 000h
 _isotag:                                     ; 0xf0da8 LB 0x6
@@ -9089,7 +9089,7 @@ _int15_function:                             ; 0xf64bb LB 0x4cd
     mov word [bp+018h], cx                    ; 89 4e 18
     jmp short 06598h                          ; eb e6
     test byte [bp+012h], 0ffh                 ; f6 46 12 ff
-    je short 06624h                           ; 74 6c
+    jne short 06624h                          ; 75 6c
     mov dx, 000a0h                            ; ba a0 00
     mov ax, strict word 00040h                ; b8 40 00
     call 01650h                               ; e8 8f b0
@@ -16860,4 +16860,4 @@ dummy_iret:                                  ; 0xfff53 LB 0x9d
     db  'XM'
 cpu_reset:                                   ; 0xffff0 LB 0x10
     jmp far 0f000h:0e05bh                     ; ea 5b e0 00 f0
-    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 083h
+    db  030h, 036h, 02fh, 032h, 033h, 02fh, 039h, 039h, 000h, 0fch, 080h
diff --git a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
index d33acab..bf8bc8f 100644
--- a/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
+++ b/src/VBox/Devices/PC/BIOS/VBoxBiosAlternative.md5sum
@@ -1 +1 @@
-0fa5579b48d5f07707253bdc09d7e103 *VBoxPcBios.rom
+a34603bfdda9702fd16a40b630e14c12 *VBoxPcBios.rom
diff --git a/src/VBox/Devices/PC/BIOS/system.c b/src/VBox/Devices/PC/BIOS/system.c
index f10ab8f..6cc5c5a 100644
--- a/src/VBox/Devices/PC/BIOS/system.c
+++ b/src/VBox/Devices/PC/BIOS/system.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -355,7 +355,7 @@ void BIOSCALL int15_function(sys_regs_t r)
         break;
 
     case 0x83: {
-        if( GET_AL() ) {
+        if( GET_AL() == 0 ) {
             // Set Interval requested.
             if( ( read_byte( 0x40, 0xA0 ) & 1 ) == 0 ) {
                 // Interval not already set.
diff --git a/src/VBox/Devices/PC/DevACPI.cpp b/src/VBox/Devices/PC/DevACPI.cpp
index f4025d9..de93478 100644
--- a/src/VBox/Devices/PC/DevACPI.cpp
+++ b/src/VBox/Devices/PC/DevACPI.cpp
@@ -161,10 +161,10 @@ enum
     SYSTEM_INFO_INDEX_HPET_STATUS       = 2,
     SYSTEM_INFO_INDEX_SMC_STATUS        = 3,
     SYSTEM_INFO_INDEX_FDC_STATUS        = 4,
-    SYSTEM_INFO_INDEX_CPU0_STATUS       = 5,  /**< For compatibility with older saved states. */
-    SYSTEM_INFO_INDEX_CPU1_STATUS       = 6,  /**< For compatibility with older saved states. */
-    SYSTEM_INFO_INDEX_CPU2_STATUS       = 7,  /**< For compatibility with older saved states. */
-    SYSTEM_INFO_INDEX_CPU3_STATUS       = 8,  /**< For compatibility with older saved states. */
+    SYSTEM_INFO_INDEX_SERIAL2_IOBASE    = 5,
+    SYSTEM_INFO_INDEX_SERIAL2_IRQ       = 6,
+    SYSTEM_INFO_INDEX_SERIAL3_IOBASE    = 7,
+    SYSTEM_INFO_INDEX_SERIAL3_IRQ       = 8,
     SYSTEM_INFO_INDEX_HIGH_MEMORY_LENGTH= 9,
     SYSTEM_INFO_INDEX_RTC_STATUS        = 10,
     SYSTEM_INFO_INDEX_CPU_LOCKED        = 11, /**< Contains a flag indicating whether the CPU is locked or not */
@@ -312,10 +312,18 @@ typedef struct ACPIState
     uint8_t             uSerial0Irq;
     /** Serial 1 IRQ number */
     uint8_t             uSerial1Irq;
+    /** Serial 2 IRQ number */
+    uint8_t             uSerial2Irq;
+    /** Serial 3 IRQ number */
+    uint8_t             uSerial3Irq;
     /** Serial 0 IO port base */
     RTIOPORT            uSerial0IoPortBase;
     /** Serial 1 IO port base */
     RTIOPORT            uSerial1IoPortBase;
+    /** Serial 2 IO port base */
+    RTIOPORT            uSerial2IoPortBase;
+    /** Serial 3 IO port base */
+    RTIOPORT            uSerial3IoPortBase;
 
     /** @name Parallel port config bits
      * @{ */
@@ -1271,24 +1279,6 @@ PDMBOTHCBDECL(int) acpiR3SysInfoDataRead(PPDMDEVINS pDevIns, void *pvUser, RTIOP
             *pu32 = (uint32_t)pThis->u64PciConfigMMioLength;
             break;
 
-        /* This is only for compatibility with older saved states that
-           may include ACPI code that read these values.  Legacy is
-           a wonderful thing, isn't it? :-) */
-        case SYSTEM_INFO_INDEX_CPU0_STATUS:
-        case SYSTEM_INFO_INDEX_CPU1_STATUS:
-        case SYSTEM_INFO_INDEX_CPU2_STATUS:
-        case SYSTEM_INFO_INDEX_CPU3_STATUS:
-            *pu32 = (   pThis->fShowCpu
-                     && pThis->uSystemInfoIndex - SYSTEM_INFO_INDEX_CPU0_STATUS < pThis->cCpus
-                     && VMCPUSET_IS_PRESENT(&pThis->CpuSetAttached,
-                                            pThis->uSystemInfoIndex - SYSTEM_INFO_INDEX_CPU0_STATUS) )
-                  ? (  STA_DEVICE_PRESENT_MASK
-                     | STA_DEVICE_ENABLED_MASK
-                     | STA_DEVICE_SHOW_IN_UI_MASK
-                     | STA_DEVICE_FUNCTIONING_PROPERLY_MASK)
-                  : 0;
-            break;
-
         case SYSTEM_INFO_INDEX_RTC_STATUS:
             *pu32 = pThis->fShowRtc
                   ? (  STA_DEVICE_PRESENT_MASK
@@ -1337,6 +1327,22 @@ PDMBOTHCBDECL(int) acpiR3SysInfoDataRead(PPDMDEVINS pDevIns, void *pvUser, RTIOP
             *pu32 = pThis->uSerial1Irq;
             break;
 
+        case SYSTEM_INFO_INDEX_SERIAL2_IOBASE:
+            *pu32 = pThis->uSerial2IoPortBase;
+            break;
+
+        case SYSTEM_INFO_INDEX_SERIAL2_IRQ:
+            *pu32 = pThis->uSerial2Irq;
+            break;
+
+        case SYSTEM_INFO_INDEX_SERIAL3_IOBASE:
+            *pu32 = pThis->uSerial3IoPortBase;
+            break;
+
+        case SYSTEM_INFO_INDEX_SERIAL3_IRQ:
+            *pu32 = pThis->uSerial3Irq;
+            break;
+
         case SYSTEM_INFO_INDEX_PARALLEL0_IOBASE:
             *pu32 = pThis->uParallel0IoPortBase;
             break;
@@ -3084,8 +3090,12 @@ static DECLCALLBACK(int) acpiR3Construct(PPDMDEVINS pDevIns, int iInstance, PCFG
                               "AmlFilePath\0"
                               "Serial0IoPortBase\0"
                               "Serial1IoPortBase\0"
+                              "Serial2IoPortBase\0"
+                              "Serial3IoPortBase\0"
                               "Serial0Irq\0"
                               "Serial1Irq\0"
+                              "Serial2Irq\0"
+                              "Serial3Irq\0"
                               "AcpiOemId\0"
                               "AcpiCreatorId\0"
                               "AcpiCreatorRev\0"
@@ -3233,6 +3243,27 @@ static DECLCALLBACK(int) acpiR3Construct(PPDMDEVINS pDevIns, int iInstance, PCFG
         return PDMDEV_SET_ERROR(pDevIns, rc,
                                 N_("Configuration error: Failed to read \"Serial1IoPortBase\""));
 
+    /* Read serial port 2 settings; disabled if CFGM keys do not exist. */
+    rc = CFGMR3QueryU8Def(pCfg, "Serial2Irq", &pThis->uSerial2Irq, 0);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("Configuration error: Failed to read \"Serial2Irq\""));
+
+    rc = CFGMR3QueryU16Def(pCfg, "Serial2IoPortBase", &pThis->uSerial2IoPortBase, 0);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("Configuration error: Failed to read \"Serial2IoPortBase\""));
+
+    /* Read serial port 3 settings; disabled if CFGM keys do not exist. */
+    rc = CFGMR3QueryU8Def(pCfg, "Serial3Irq", &pThis->uSerial3Irq, 0);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("Configuration error: Failed to read \"Serial3Irq\""));
+
+    rc = CFGMR3QueryU16Def(pCfg, "Serial3IoPortBase", &pThis->uSerial3IoPortBase, 0);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("Configuration error: Failed to read \"Serial3IoPortBase\""));
     /*
      * Query settings for both parallel ports, if the CFGM keys don't exist pretend that
      * the corresponding parallel port is not enabled.
diff --git a/src/VBox/Devices/PC/DevPit-i8254.cpp b/src/VBox/Devices/PC/DevPit-i8254.cpp
index 56a50c3..feff4ca 100644
--- a/src/VBox/Devices/PC/DevPit-i8254.cpp
+++ b/src/VBox/Devices/PC/DevPit-i8254.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -52,6 +52,15 @@
 #include <iprt/asm-math.h>
 
 #ifdef IN_RING3
+# ifdef RT_OS_LINUX
+#  include <fcntl.h>
+#  include <errno.h>
+#  include <unistd.h>
+#  include <stdio.h>
+#  include <linux/kd.h>
+#  include <linux/input.h>
+#  include <sys/ioctl.h>
+# endif
 # include <iprt/alloc.h>
 # include <iprt/string.h>
 # include <iprt/uuid.h>
@@ -203,6 +212,15 @@ typedef struct PITCHANNEL
 /** Pointer to the state of one PIT channel. */
 typedef PITCHANNEL *PPITCHANNEL;
 
+/** Speaker emulation state. */
+typedef enum PITSPEAKEREMU
+{
+    PIT_SPEAKER_EMU_NONE = 0,
+    PIT_SPEAKER_EMU_CONSOLE,
+    PIT_SPEAKER_EMU_EVDEV,
+    PIT_SPEAKER_EMU_TTY
+} PITSPEAKEREMU;
+
 /**
  * The whole PIT state.
  */
@@ -213,7 +231,7 @@ typedef struct PITSTATE
     /** Speaker data. */
     int32_t                 speaker_data_on;
 #ifdef FAKE_REFRESH_CLOCK
-    /** Speaker dummy. */
+    /** Refresh dummy. */
     int32_t                 dummy_refresh_clock;
 #else
     uint32_t                Alignment1;
@@ -222,8 +240,15 @@ typedef struct PITSTATE
     RTIOPORT                IOPortBaseCfg;
     /** Config: Speaker enabled. */
     bool                    fSpeakerCfg;
+    /** Disconnect PIT from the interrupt controllers if requested by HPET. */
     bool                    fDisabledByHpet;
-    bool                    afAlignment0[HC_ARCH_BITS == 32 ? 4 : 4];
+    /** Config: What to do with speaker activity. */
+    PITSPEAKEREMU           enmSpeakerEmu;
+#ifdef RT_OS_LINUX
+    /** File handle for host speaker functionality. */
+    int                     hHostSpeaker;
+    int                     afAlignment2;
+#endif
     /** PIT port interface. */
     PDMIHPETLEGACYNOTIFY    IHpetLegacyNotify;
     /** Pointer to the device instance. */
@@ -250,6 +275,48 @@ static void pit_irq_timer_update(PPITCHANNEL pChan, uint64_t current_time, uint6
 #endif
 
 
+#ifdef IN_RING3
+# ifdef RT_OS_LINUX
+static int pitTryDeviceOpen(const char *pszPath, int flags)
+{
+    int fd = open(pszPath, flags);
+    if (fd == -1)
+        LogRel(("PIT: speaker: cannot open \"%s\", errno=%d\n", pszPath, errno));
+    else
+        LogRel(("PIT: speaker: opened \"%s\"\n", pszPath));
+    return fd;
+}
+
+static int pitTryDeviceOpenSanitizeIoctl(const char *pszPath, int flags)
+{
+    int fd = open(pszPath, flags);
+    if (fd == -1)
+        LogRel(("PIT: speaker: cannot open \"%s\", errno=%d\n", pszPath, errno));
+    else
+    {
+        int errno_eviocgsnd0 = 0;
+        int errno_kiocsound = 0;
+        if (ioctl(fd, EVIOCGSND(0)) != -1)
+        {
+            errno_eviocgsnd0 = errno;
+            if (ioctl(fd, KIOCSOUND, 1) == -1)
+                errno_kiocsound = errno;
+            else
+                ioctl(fd, KIOCSOUND, 0);
+        }
+        if (errno_eviocgsnd0 && errno_kiocsound)
+        {
+            LogRel(("PIT: speaker: cannot use \"%s\", ioctl failed errno=%d/errno=%d\n", pszPath, errno_eviocgsnd0, errno_kiocsound));
+            close(fd);
+            fd = -1;
+        }
+        else
+            LogRel(("PIT: speaker: opened \"%s\"\n", pszPath));
+    }
+    return fd;
+}
+# endif /* RT_OS_LINUX */
+#endif /* IN_RING3 */
 
 static int pit_get_count(PPITCHANNEL pChan)
 {
@@ -841,6 +908,78 @@ PDMBOTHCBDECL(int) pitIOPortSpeakerWrite(PPDMDEVINS pDevIns, void *pvUser, RTIOP
         pThis->speaker_data_on = (u32 >> 1) & 1;
         pit_set_gate(pThis, 2, u32 & 1);
 
+        /** @todo r=klaus move this to a (system-specific) driver, which can
+         * abstract the details, and if necessary create a thread to minimize
+         * impact on VM execution. */
+#ifdef RT_OS_LINUX
+        if (pThis->enmSpeakerEmu != PIT_SPEAKER_EMU_NONE)
+        {
+            PPITCHANNEL pChan = &pThis->channels[2];
+            if (pThis->speaker_data_on)
+            {
+                Log2Func(("starting beep freq=%d\n", PIT_FREQ / pChan->count));
+                switch (pThis->enmSpeakerEmu)
+                {
+                    case PIT_SPEAKER_EMU_CONSOLE:
+                        int res;
+                        res = ioctl(pThis->hHostSpeaker, KIOCSOUND, pChan->count);
+                        if (res == -1)
+                        {
+                            LogRel(("PIT: speaker: ioctl failed errno=%d, disabling emulation\n", errno));
+                            pThis->enmSpeakerEmu = PIT_SPEAKER_EMU_NONE;
+                        }
+                        break;
+                    case PIT_SPEAKER_EMU_EVDEV:
+                        struct input_event e;
+                        e.type = EV_SND;
+                        e.code = SND_TONE;
+                        e.value = PIT_FREQ / pChan->count;
+                        write(pThis->hHostSpeaker, &e, sizeof(struct input_event));
+                        break;
+                    case PIT_SPEAKER_EMU_TTY:
+                        write(pThis->hHostSpeaker, "\a", 1);
+                        break;
+                    case PIT_SPEAKER_EMU_NONE:
+                        break;
+                    default:
+                        Log2Func(("unknown speaker emulation %d, disabling emulation\n", pThis->enmSpeakerEmu));
+                        pThis->enmSpeakerEmu = PIT_SPEAKER_EMU_NONE;
+                }
+            }
+            else
+            {
+                Log2Func(("stopping beep\n"));
+                switch (pThis->enmSpeakerEmu)
+                {
+                    case PIT_SPEAKER_EMU_CONSOLE:
+                        /* No error checking here. The Linux device driver
+                         * implementation considers it an error (errno=22,
+                         * EINVAL) to stop sound if it hasn't been started.
+                         * Of course we could detect this by checking only
+                         * for enabled->disabled transitions and ignoring
+                         * disabled->disabled ones, but it's not worth the
+                         * effort. */
+                        ioctl(pThis->hHostSpeaker, KIOCSOUND, 0);
+                        break;
+                    case PIT_SPEAKER_EMU_EVDEV:
+                        struct input_event e;
+                        e.type = EV_SND;
+                        e.code = SND_TONE;
+                        e.value = 0;
+                        write(pThis->hHostSpeaker, &e, sizeof(struct input_event));
+                        break;
+                    case PIT_SPEAKER_EMU_TTY:
+                        break;
+                    case PIT_SPEAKER_EMU_NONE:
+                        break;
+                    default:
+                        Log2Func(("unknown speaker emulation %d, disabling emulation\n", pThis->enmSpeakerEmu));
+                        pThis->enmSpeakerEmu = PIT_SPEAKER_EMU_NONE;
+                }
+            }
+        }
+#endif
+
         DEVPIT_UNLOCK_BOTH(pThis);
     }
     Log(("pitIOPortSpeakerWrite: Port=%#x cb=%x u32=%#x\n", Port, cb, u32));
@@ -1165,7 +1304,9 @@ static DECLCALLBACK(int)  pitConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMN
     /*
      * Validate configuration.
      */
-    if (!CFGMR3AreValuesValid(pCfg, "Irq\0" "Base\0" "SpeakerEnabled\0" "GCEnabled\0" "R0Enabled\0"))
+    if (!CFGMR3AreValuesValid(pCfg, "Irq\0" "Base\0"
+                                    "SpeakerEnabled\0" "PassthroughSpeaker\0" "PassthroughSpeakerDevice\0"
+                                    "R0Enabled\0" "GCEnabled\0"))
         return VERR_PDM_DEVINS_UNKNOWN_CFG_VALUES;
 
     /*
@@ -1186,6 +1327,20 @@ static DECLCALLBACK(int)  pitConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMN
         return PDMDEV_SET_ERROR(pDevIns, rc,
                                 N_("Configuration error: Querying \"SpeakerEnabled\" as a bool failed"));
 
+    uint8_t uPassthroughSpeaker;
+    char *pszPassthroughSpeakerDevice = NULL;
+    rc = CFGMR3QueryU8Def(pCfg, "PassthroughSpeaker", &uPassthroughSpeaker, 0);
+    if (RT_FAILURE(rc))
+        return PDMDEV_SET_ERROR(pDevIns, rc,
+                                N_("Configuration error: failed to read PassthroughSpeaker as uint8_t"));
+    if (uPassthroughSpeaker)
+    {
+        rc = CFGMR3QueryStringAllocDef(pCfg, "PassthroughSpeakerDevice", &pszPassthroughSpeakerDevice, NULL);
+        if (RT_FAILURE(rc))
+            return PDMDEV_SET_ERROR(pDevIns, rc,
+                                    N_("Configuration error: failed to read PassthroughSpeakerDevice as string"));
+    }
+
     rc = CFGMR3QueryBoolDef(pCfg, "GCEnabled", &fGCEnabled, true);
     if (RT_FAILURE(rc))
         return PDMDEV_SET_ERROR(pDevIns, rc,
@@ -1199,6 +1354,59 @@ static DECLCALLBACK(int)  pitConstruct(PPDMDEVINS pDevIns, int iInstance, PCFGMN
     pThis->pDevIns         = pDevIns;
     pThis->IOPortBaseCfg   = u16Base;
     pThis->fSpeakerCfg     = fSpeaker;
+    pThis->enmSpeakerEmu   = PIT_SPEAKER_EMU_NONE;
+    if (uPassthroughSpeaker)
+    {
+        /** @todo r=klaus move this to a (system-specific) driver */
+#ifdef RT_OS_LINUX
+        int fd = -1;
+        if ((uPassthroughSpeaker == 1 || uPassthroughSpeaker == 100) && fd == -1)
+            fd = pitTryDeviceOpenSanitizeIoctl("/dev/input/by-path/platform-pcspkr-event-spkr", O_WRONLY);
+        if ((uPassthroughSpeaker == 2 || uPassthroughSpeaker == 100) && fd == -1)
+            fd = pitTryDeviceOpenSanitizeIoctl("/dev/tty", O_WRONLY);
+        if ((uPassthroughSpeaker == 3 || uPassthroughSpeaker == 100) && fd == -1)
+        {
+            fd = pitTryDeviceOpenSanitizeIoctl("/dev/tty0", O_WRONLY);
+            if (fd == -1)
+                fd = pitTryDeviceOpenSanitizeIoctl("/dev/vc/0", O_WRONLY);
+        }
+        if ((uPassthroughSpeaker == 9 || uPassthroughSpeaker == 100) && pszPassthroughSpeakerDevice && fd == -1)
+            fd = pitTryDeviceOpenSanitizeIoctl(pszPassthroughSpeakerDevice, O_WRONLY);
+        if (pThis->enmSpeakerEmu == PIT_SPEAKER_EMU_NONE && fd != -1)
+        {
+            pThis->hHostSpeaker = fd;
+            if (ioctl(fd, EVIOCGSND(0)) != -1)
+            {
+                pThis->enmSpeakerEmu = PIT_SPEAKER_EMU_EVDEV;
+                LogRel(("PIT: speaker: emulation mode evdev\n"));
+            }
+            else
+            {
+                pThis->enmSpeakerEmu = PIT_SPEAKER_EMU_CONSOLE;
+                LogRel(("PIT: speaker: emulation mode console\n"));
+            }
+        }
+        if ((uPassthroughSpeaker == 70 || uPassthroughSpeaker == 100) && fd == -1)
+            fd = pitTryDeviceOpen("/dev/tty", O_WRONLY);
+        if ((uPassthroughSpeaker == 79 || uPassthroughSpeaker == 100) && pszPassthroughSpeakerDevice && fd == -1)
+            fd = pitTryDeviceOpen(pszPassthroughSpeakerDevice, O_WRONLY);
+        if (pThis->enmSpeakerEmu == PIT_SPEAKER_EMU_NONE && fd != -1)
+        {
+            pThis->hHostSpeaker = fd;
+            pThis->enmSpeakerEmu = PIT_SPEAKER_EMU_TTY;
+            LogRel(("PIT: speaker: emulation mode tty\n"));
+        }
+        if (pThis->enmSpeakerEmu == PIT_SPEAKER_EMU_NONE)
+        {
+            Assert(fd == -1);
+            LogRel(("PIT: speaker: no emulation possible\n"));
+        }
+#else
+        LogRel(("PIT: speaker: emulation deactivated\n"));
+#endif
+        RTStrFree(pszPassthroughSpeakerDevice);
+        pszPassthroughSpeakerDevice = NULL;
+    }
     pThis->channels[0].irq = u8Irq;
     for (i = 0; i < RT_ELEMENTS(pThis->channels); i++)
     {
diff --git a/src/VBox/Devices/PC/ipxe/iPxeBiosBin.rom b/src/VBox/Devices/PC/ipxe/iPxeBiosBin.rom
index 1731e2e..9a59c28 100644
Binary files a/src/VBox/Devices/PC/ipxe/iPxeBiosBin.rom and b/src/VBox/Devices/PC/ipxe/iPxeBiosBin.rom differ
diff --git a/src/VBox/Devices/PC/vbox.dsl b/src/VBox/Devices/PC/vbox.dsl
index 1c0f5ad..b5b768d 100644
--- a/src/VBox/Devices/PC/vbox.dsl
+++ b/src/VBox/Devices/PC/vbox.dsl
@@ -131,11 +131,10 @@ DefinitionBlock ("DSDT.aml", "DSDT", 1, "VBOX  ", "VBOXBIOS", 2)
         UHPT,  32, // if HPET enabled
         USMC,  32, // if SMC enabled
         UFDC,  32, // if floppy controller enabled
-        // UCP0-UCP3 no longer used and only kept here for saved state compatibility
-        UCP0,  32,
-        UCP1,  32,
-        UCP2,  32,
-        UCP3,  32,
+        SL2B,  32, // Serial2 base IO address  
+        SL2I,  32, // Serial2 IRQ
+        SL3B,  32, // Serial3 base IO address  
+        SL3I,  32, // Serial3 IRQ
         MEMH,  32,
         URTC,  32, // if RTC shown in tables
         CPUL,  32, // flag of CPU lock state
@@ -803,6 +802,72 @@ DefinitionBlock ("DSDT.aml", "DSDT", 1, "VBOX  ", "VBOXBIOS", 2)
                     }
                 }
 
+                // Serial port 2
+                Device (^SRL2)
+                {
+                    Name (_HID, EisaId ("PNP0501"))
+                    Name (_UID, 0x03)
+                    Method (_STA, 0, NotSerialized)
+                    {
+                        If (LEqual (SL2B, Zero))
+                        {
+                            Return (0x00)
+                        }
+                        Else
+                        {
+                            Return (0x0F)
+                        }
+                    }
+                    Name (CRS, ResourceTemplate ()
+                    {
+                        IO (Decode16, 0x03E8, 0x03E8, 0x01, 0x08, _Y22) 
+                        IRQNoFlags (_Y23) {3}
+                    })
+                    Method (_CRS, 0, NotSerialized)
+                    {
+                        CreateWordField (CRS, \_SB.PCI0.SRL2._Y22._MIN, MIN1)
+                        CreateWordField (CRS, \_SB.PCI0.SRL2._Y22._MAX, MAX1)
+                        CreateWordField (CRS, \_SB.PCI0.SRL2._Y23._INT, IRQ1)
+                        Store (SL2B, MIN1)
+                        Store (SL2B, MAX1)
+                        ShiftLeft (0x01, SL2I, IRQ1)
+                        Return (CRS)
+                    }
+                }
+
+                // Serial port 3
+                Device (^SRL3)
+                {
+                    Name (_HID, EisaId ("PNP0501"))
+                    Name (_UID, 0x04)
+                    Method (_STA, 0, NotSerialized)
+                    {
+                        If (LEqual (SL3B, Zero))
+                        {
+                            Return (0x00)
+                        }
+                        Else
+                        {
+                            Return (0x0F)
+                        }
+                    }
+                    Name (CRS, ResourceTemplate ()
+                    {
+                        IO (Decode16, 0x02E8, 0x02E8, 0x01, 0x08, _Y24)
+                        IRQNoFlags (_Y25) {3}
+                    })
+                    Method (_CRS, 0, NotSerialized)
+                    {
+                        CreateWordField (CRS, \_SB.PCI0.SRL3._Y24._MIN, MIN1)
+                        CreateWordField (CRS, \_SB.PCI0.SRL3._Y24._MAX, MAX1)
+                        CreateWordField (CRS, \_SB.PCI0.SRL3._Y25._INT, IRQ1)
+                        Store (SL3B, MIN1)
+                        Store (SL3B, MAX1)
+                        ShiftLeft (0x01, SL3I, IRQ1)
+                        Return (CRS)
+                    }
+                }
+
                 // Programmable Interval Timer (i8254)
                 Device (TIMR)
                 {
diff --git a/src/VBox/Devices/Serial/DrvTCP.cpp b/src/VBox/Devices/Serial/DrvTCP.cpp
index d573a16..21d4ddb 100644
--- a/src/VBox/Devices/Serial/DrvTCP.cpp
+++ b/src/VBox/Devices/Serial/DrvTCP.cpp
@@ -349,6 +349,20 @@ static DECLCALLBACK(int) drvTCPConstruct(PPDMDRVINS pDrvIns, PCFGMNODE pCfg, uin
     PDRVTCP pThis = PDMINS_2_DATA(pDrvIns, PDRVTCP);
     PDMDRV_CHECK_VERSIONS_RETURN(pDrvIns);
 
+#ifdef RT_OS_WINDOWS
+    {
+        WSADATA wsaData;
+        int err;
+
+        err = WSAStartup(MAKEWORD(2,2), &wsaData);
+        if (err != 0)
+        {
+            LogRel(("DrvTCP: Failed to initialize Winsock, error %d\n", err));
+            /* XXX: let socket creation fail below */
+        }
+    }
+#endif
+
     /*
      * Init the static parts.
      */
diff --git a/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp b/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
index 2bd778c..71a5842 100644
--- a/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
+++ b/src/VBox/Devices/testcase/tstDeviceStructSizeRC.cpp
@@ -1886,7 +1886,7 @@ int main()
 
     GEN_CHECK_SIZE(HDASTREAM);
     GEN_CHECK_OFF(HDASTREAM, u8Strm);
-    GEN_CHECK_OFF(HDASTREAM, u64BaseDMA);
+    GEN_CHECK_OFF(HDASTREAM, u64BDLBase);
     GEN_CHECK_OFF(HDASTREAM, u16FMT);
     GEN_CHECK_OFF(HDASTREAM, u16FIFOS);
     GEN_CHECK_OFF(HDASTREAM, u16LVI);
diff --git a/src/VBox/Frontends/Makefile.kmk b/src/VBox/Frontends/Makefile.kmk
index 069883b..763bf54 100644
--- a/src/VBox/Frontends/Makefile.kmk
+++ b/src/VBox/Frontends/Makefile.kmk
@@ -26,6 +26,7 @@ ifndef VBOX_ONLY_DOCS
  ifdef VBOX_WITH_MAIN
   include $(PATH_SUB_CURRENT)/VBoxBalloonCtrl/Makefile.kmk
   include $(PATH_SUB_CURRENT)/VBoxAutostart/Makefile.kmk
+  include $(PATH_SUB_CURRENT)/VBoxBugReport/Makefile.kmk
  endif
  ifdef VBOX_WITH_VBOXSDL
   include $(PATH_SUB_CURRENT)/VBoxSDL/Makefile.kmk
diff --git a/src/VBox/Devices/Input/testcase/Makefile.kmk b/src/VBox/Frontends/VBoxBugReport/Makefile.kmk
similarity index 55%
copy from src/VBox/Devices/Input/testcase/Makefile.kmk
copy to src/VBox/Frontends/VBoxBugReport/Makefile.kmk
index 7dbdae6..6e7cfb3 100644
--- a/src/VBox/Devices/Input/testcase/Makefile.kmk
+++ b/src/VBox/Frontends/VBoxBugReport/Makefile.kmk
@@ -1,10 +1,12 @@
 # $Id: Makefile.kmk $
 ## @file
-# Sub-makefile for input test cases.
+# Sub-Makefile for VBoxBugReport
+#
+# VBoxBugReport is a tool for collecting useful information on the host.
 #
 
 #
-# Copyright (C) 2013-2015 Oracle Corporation
+# Copyright (C) 2006-2016 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
 # available from http://www.virtualbox.org. This file is free software;
@@ -18,17 +20,15 @@
 SUB_DEPTH = ../../../..
 include $(KBUILD_PATH)/subheader.kmk
 
-if defined(VBOX_WITH_TESTCASES) && !defined(VBOX_ONLY_ADDITIONS) && !defined(VBOX_ONLY_SDK)
- PROGRAMS += tstUsbMouse
-endif
-tstUsbMouse_TEMPLATE = VBOXR3TSTEXE
-tstUsbMouse_DEFS     = VBOX_WITH_VUSB
-tstUsbMouse_INCS     = \
-        ../../build
-tstUsbMouse_LIBS     = $(LIB_VMM)
-tstUsbMouse_SOURCES  = \
-        tstUsbMouse.cpp \
-        ../UsbMouse.cpp
+PROGRAMS += VBoxBugReport
+ VBoxBugReport_TEMPLATE   = VBOXMAINCLIENTEXE
+# VBoxBugReport_DEFS      += \
+	VBOX_WATCHDOG_GLOBAL_PERFCOL VBOX_BUILD_TARGET=\"$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)\"
+ VBoxBugReport_DEFS.win   = _WIN32_WINNT=0x0501
+ VBoxBugReport_SOURCES    = \
+	VBoxBugReport.cpp
+ VBoxBugReport_SOURCES.win = \
+	VBoxBugReportWin.cpp
 
 include $(FILE_KBUILD_SUB_FOOTER)
 
diff --git a/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.cpp b/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.cpp
new file mode 100644
index 0000000..c8f8fb8
--- /dev/null
+++ b/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.cpp
@@ -0,0 +1,636 @@
+/* $Id: VBoxBugReport.cpp $ */
+/** @file
+ * VBoxBugReport - VirtualBox command-line diagnostics tool, main file.
+ */
+
+/*
+ * Copyright (C) 2006-2016 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+
+#include <VBox/com/com.h>
+#include <VBox/com/string.h>
+#include <VBox/com/array.h>
+//#include <VBox/com/Guid.h>
+#include <VBox/com/ErrorInfo.h>
+#include <VBox/com/errorprint.h>
+#include <VBox/com/VirtualBox.h>
+
+#include <VBox/version.h>
+
+#include <iprt/buildconfig.h>
+#include <iprt/env.h>
+#include <iprt/file.h>
+#include <iprt/getopt.h>
+#include <iprt/initterm.h>
+#include <iprt/path.h>
+#include <iprt/process.h>
+#include <iprt/zip.h>
+#include <iprt/cpp/exception.h>
+
+#include <list>
+
+#include "VBoxBugReport.h"
+
+/* Implementation - Base */
+
+#ifndef RT_OS_WINDOWS
+/* @todo Replace with platform-specific implementations. */
+void createBugReportOsSpecific(BugReport* report, const char *pszHome)
+{
+}
+#endif /* !RT_OS_WINDOWS */
+
+
+/* Globals */
+
+static char *g_pszVBoxManage = NULL;
+
+static const RTGETOPTDEF g_aOptions[] =
+{
+    { "-all",     'A', RTGETOPT_REQ_NOTHING },
+    { "--all",    'A', RTGETOPT_REQ_NOTHING },
+    { "-output",  'o', RTGETOPT_REQ_STRING },
+    { "--output", 'o', RTGETOPT_REQ_STRING },
+    { "-text",    't', RTGETOPT_REQ_NOTHING },
+    { "--text",   't', RTGETOPT_REQ_NOTHING }
+};
+
+static const char g_szUsage[] =
+    "Usage: %s [-h|-?|--help] [-A|--all|<vmname>...] [-o <file>|--output=<file>]\n"
+    "   Several VM names can be specified at once to be included into single report.\n"
+    "   If none is given then no machines will be included. Specifying -A overrides\n"
+    "   any VM names provided and included all registered machines.\n"
+    "Options:\n"
+    "   -h, -help,    --help     Print usage information\n"
+    "   -A, -all,     --all      Include all registered machines\n"
+    "   -o, -output,  --output   Specifies the name of the output file\n"
+    "   -t, -text,    --text     Produce a single text file instead of compressed TAR\n"
+    "   -V, -version, --version  Print version number and exit\n"
+    "\n";
+
+
+/*
+ * This class stores machine-specific file paths that are obtained via
+ * VirtualBox API. In case API is not functioning properly these paths
+ * will be deduced on the best effort basis.
+ */
+class MachineInfo
+{
+public:
+    MachineInfo(const char *name, const char *logFolder, const char *settingsFile);
+    ~MachineInfo();
+    const char *getName() const { return m_name; };
+    const char *getLogPath() const { return m_logpath; };
+    const char *getSettingsFile() const { return m_settings; };
+private:
+    char *m_name;
+    char *m_logpath;
+    char *m_settings;
+};
+
+MachineInfo::MachineInfo(const char *name, const char *logFolder, const char *settingsFile)
+{
+    m_name = RTStrDup(name);
+    m_logpath = RTStrDup(logFolder);
+    m_settings = RTStrDup(settingsFile);
+}
+
+MachineInfo::~MachineInfo()
+{
+    RTStrFree(m_logpath);
+    RTStrFree(m_name);
+    RTStrFree(m_settings);
+    m_logpath = m_name = m_settings = 0;
+}
+
+typedef std::list<MachineInfo*> MachineInfoList;
+
+
+/*
+ * An abstract class serving as the root of the bug report item tree.
+ */
+BugReportItem::BugReportItem(const char *pszTitle)
+{
+    m_pszTitle = RTStrDup(pszTitle);
+}
+
+BugReportItem::~BugReportItem()
+{
+    RTStrFree(m_pszTitle);
+}
+
+const char * BugReportItem::getTitle(void)
+{
+    return m_pszTitle;
+}
+
+
+BugReport::BugReport(const char *pszFileName)
+{
+    m_pszFileName = RTStrDup(pszFileName);
+}
+
+BugReport::~BugReport()
+{
+    for (unsigned i = 0; i < m_Items.size(); ++i)
+    {
+        delete m_Items[i];
+    }
+    RTStrFree(m_pszFileName);
+}
+
+int BugReport::getItemCount(void)
+{
+    return (int)m_Items.size();
+}
+
+void BugReport::addItem(BugReportItem* item)
+{
+    if (item)
+        m_Items.append(item);
+}
+
+void BugReport::process(void)
+{
+    for (unsigned i = 0; i < m_Items.size(); ++i)
+    {
+        BugReportItem *pItem = m_Items[i];
+        RTPrintf("%3u%% - collecting %s...\n", i * 100 / m_Items.size(), pItem->getTitle());
+        processItem(pItem);
+    }
+    RTPrintf("100%% - compressing...\n\n");
+}
+
+
+BugReportStream::BugReportStream(const char *pszTitle) : BugReportItem(pszTitle)
+{
+    handleRtError(RTPathTemp(m_szFileName, RTPATH_MAX),
+                  "Failed to obtain path to temporary folder");
+    handleRtError(RTPathAppend(m_szFileName, RTPATH_MAX, "BugRepXXXXX.tmp"),
+                  "Failed to append path");
+    handleRtError(RTFileCreateTemp(m_szFileName, 0600),
+                  "Failed to create temporary file '%s'", m_szFileName);
+    handleRtError(RTStrmOpen(m_szFileName, "w", &m_Strm),
+                  "Failed to open '%s'", m_szFileName);
+}
+
+BugReportStream::~BugReportStream()
+{
+    if (m_Strm)
+        RTStrmClose(m_Strm);
+    RTFileDelete(m_szFileName);
+}
+
+int BugReportStream::printf(const char *pszFmt, ...)
+{
+    va_list va;
+    va_start(va, pszFmt);
+    int cb = RTStrmPrintfV(m_Strm, pszFmt, va);
+    va_end(va);
+    return cb;
+}
+
+int BugReportStream::putStr(const char *pszString)
+{
+    return RTStrmPutStr(m_Strm, pszString);
+}
+
+PRTSTREAM BugReportStream::getStream(void)
+{
+    RTStrmClose(m_Strm);
+    handleRtError(RTStrmOpen(m_szFileName, "r", &m_Strm),
+                  "Failed to open '%s'", m_szFileName);
+    return m_Strm;
+}
+
+
+/* Implementation - Generic */
+
+BugReportFile::BugReportFile(const char *pszPath, const char *pszShortName) : BugReportItem(pszShortName)
+{
+    m_Strm = 0;
+    m_pszPath = RTStrDup(pszPath);
+}
+
+BugReportFile::~BugReportFile()
+{
+    if (m_Strm)
+        RTStrmClose(m_Strm);
+    if (m_pszPath)
+        RTStrFree(m_pszPath);
+}
+
+PRTSTREAM BugReportFile::getStream(void)
+{
+    handleRtError(RTStrmOpen(m_pszPath, "rb", &m_Strm),
+                  "Failed to open '%s'", m_pszPath);
+    return m_Strm;
+}
+
+
+BugReportCommand::BugReportCommand(const char *pszTitle, const char *pszExec, ...)
+    : BugReportItem(pszTitle)
+{
+    unsigned cArgs = 0;
+    m_papszArgs[cArgs++] = RTStrDup(pszExec);
+
+    const char *pszArg;
+    va_list va;
+    va_start(va, pszExec);
+    do
+    {
+        if (cArgs >= RT_ELEMENTS(m_papszArgs))
+            throw RTCError(com::Utf8StrFmt("Too many arguments (%u > %u)\n", cArgs+1, RT_ELEMENTS(m_papszArgs)));
+        pszArg = va_arg(va, const char *);
+        m_papszArgs[cArgs++] = pszArg ? RTStrDup(pszArg) : NULL;
+    } while (pszArg);
+    va_end(va);
+}
+
+BugReportCommand::~BugReportCommand()
+{
+    if (m_Strm)
+        RTStrmClose(m_Strm);
+    RTFileDelete(m_szFileName);
+    for (size_t i = 0; i < RT_ELEMENTS(m_papszArgs) && m_papszArgs[i]; ++i)
+        RTStrFree(m_papszArgs[i]);
+}
+
+PRTSTREAM BugReportCommand::getStream(void)
+{
+    handleRtError(RTPathTemp(m_szFileName, RTPATH_MAX),
+                  "Failed to obtain path to temporary folder");
+    handleRtError(RTPathAppend(m_szFileName, RTPATH_MAX, "BugRepXXXXX.tmp"),
+                  "Failed to append path");
+    handleRtError(RTFileCreateTemp(m_szFileName, 0600),
+                  "Failed to create temporary file '%s'", m_szFileName);
+
+    RTHANDLE hStdOutErr;
+    hStdOutErr.enmType = RTHANDLETYPE_FILE;
+    handleRtError(RTFileOpen(&hStdOutErr.u.hFile, m_szFileName,
+                             RTFILE_O_WRITE | RTFILE_O_CREATE_REPLACE | RTFILE_O_DENY_WRITE),
+                  "Failed to open temporary file '%s'", m_szFileName);
+
+    RTPROCESS hProcess;
+    handleRtError(RTProcCreateEx(m_papszArgs[0], m_papszArgs, RTENV_DEFAULT, 0,
+                                 NULL, &hStdOutErr, &hStdOutErr,
+                                 NULL, NULL, &hProcess),
+                  "Failed to create process '%s'", m_papszArgs[0]);
+    RTPROCSTATUS status;
+    handleRtError(RTProcWait(hProcess, RTPROCWAIT_FLAGS_BLOCK, &status),
+                  "Process wait failed");
+    //if (status.enmReason == RTPROCEXITREASON_NORMAL) {}
+    RTFileClose(hStdOutErr.u.hFile);
+
+    handleRtError(RTStrmOpen(m_szFileName, "r", &m_Strm),
+                  "Failed to open '%s'", m_szFileName);
+    return m_Strm;
+}
+
+
+BugReportText::BugReportText(const char *pszFileName) : BugReport(pszFileName)
+{
+    handleRtError(RTStrmOpen(pszFileName, "w", &m_StrmTxt),
+                  "Failed to open '%s'", pszFileName);
+}
+
+BugReportText::~BugReportText()
+{
+    if (m_StrmTxt)
+        RTStrmClose(m_StrmTxt);
+}
+
+void BugReportText::processItem(BugReportItem* item)
+{
+    int cb = RTStrmPrintf(m_StrmTxt, "[ %s ] -------------------------------------------\n", item->getTitle());
+    if (!cb)
+        throw RTCError(com::Utf8StrFmt("Write failure (cb=%d)\n", cb));
+
+    PRTSTREAM strmIn = NULL;
+    try
+    {
+        strmIn = item->getStream();
+    }
+    catch (RTCError &e)
+    {
+        strmIn = NULL;
+        RTStrmPutStr(m_StrmTxt, e.what());
+    }
+
+    int rc = VINF_SUCCESS;
+
+    if (strmIn)
+    {
+        char buf[64*1024];
+        size_t cbRead, cbWritten;
+        cbRead = cbWritten = 0;
+        while (RT_SUCCESS(rc = RTStrmReadEx(strmIn, buf, sizeof(buf), &cbRead)) && cbRead)
+        {
+            rc = RTStrmWriteEx(m_StrmTxt, buf, cbRead, &cbWritten);
+            if (RT_FAILURE(rc) || cbRead != cbWritten)
+                throw RTCError(com::Utf8StrFmt("Write failure (rc=%d, cbRead=%lu, cbWritten=%lu)\n",
+                                               rc, cbRead, cbWritten));
+        }
+    }
+
+    handleRtError(RTStrmPutCh(m_StrmTxt, '\n'), "Write failure");
+}
+
+
+BugReportTarGzip::BugReportTarGzip(const char *pszFileName)
+    : BugReport(pszFileName), m_hTar(NIL_RTTAR), m_hTarFile(NIL_RTTARFILE)
+{
+    VfsIoStreamHandle hVfsOut;
+    handleRtError(RTVfsIoStrmOpenNormal(pszFileName, RTFILE_O_WRITE | RTFILE_O_CREATE | RTFILE_O_DENY_WRITE,
+                                        hVfsOut.getPtr()),
+                  "Failed to create output file '%s'", pszFileName);
+    handleRtError(RTZipGzipCompressIoStream(hVfsOut.get(), 0, 6, m_hVfsGzip.getPtr()),
+                  "Failed to create compressed stream for '%s'", pszFileName);
+
+    handleRtError(RTPathTemp(m_szTarName, RTPATH_MAX),
+                  "Failed to obtain path to temporary folder");
+    handleRtError(RTPathAppend(m_szTarName, RTPATH_MAX, "BugRepXXXXX.tar"),
+                  "Failed to append path");
+    handleRtError(RTFileCreateTemp(m_szTarName, 0600),
+                  "Failed to create temporary file '%s'", m_szTarName);
+    handleRtError(RTFileDelete(m_szTarName),
+                  "Failed to delete temporary file '%s'", m_szTarName);
+    handleRtError(RTTarOpen(&m_hTar, m_szTarName,  RTFILE_O_CREATE | RTFILE_O_WRITE | RTFILE_O_DENY_ALL),
+                  "Failed to create TAR file '%s'", m_szTarName);
+
+}
+
+BugReportTarGzip::~BugReportTarGzip()
+{
+    if (m_hTarFile != NIL_RTTARFILE)
+        RTTarFileClose(m_hTarFile);
+    if (m_hTar != NIL_RTTAR)
+        RTTarClose(m_hTar);
+}
+
+void BugReportTarGzip::processItem(BugReportItem* item)
+{
+    /*
+     * @todo Our TAR implementation does not support names larger than 100 characters.
+     * We truncate the title to make sure it will fit into 100-character field of TAR header.
+     */
+    RTCString strTarFile = RTCString(item->getTitle()).substr(0, RTStrNLen(item->getTitle(), 99));
+    handleRtError(RTTarFileOpen(m_hTar, &m_hTarFile, strTarFile.c_str(),
+                                RTFILE_O_CREATE | RTFILE_O_WRITE | RTFILE_O_DENY_NONE),
+                  "Failed to open '%s' in TAR", strTarFile.c_str());
+
+    PRTSTREAM strmIn = NULL;
+    try
+    {
+        strmIn = item->getStream();
+    }
+    catch (RTCError &e)
+    {
+        strmIn = NULL;
+        handleRtError(RTTarFileWriteAt(m_hTarFile, 0, e.what(), RTStrNLen(e.what(), 1024), NULL),
+                      "Failed to write %u bytes to TAR", RTStrNLen(e.what(), 1024));
+    }
+
+    int rc = VINF_SUCCESS;
+
+    if (strmIn)
+    {
+        char buf[64*1024];
+        size_t cbRead = 0;
+        for (uint64_t offset = 0;
+             RT_SUCCESS(rc = RTStrmReadEx(strmIn, buf, sizeof(buf), &cbRead)) && cbRead;
+             offset += cbRead)
+        {
+            handleRtError(RTTarFileWriteAt(m_hTarFile, offset, buf, cbRead, NULL),
+                          "Failed to write %u bytes to TAR", cbRead);
+        }
+    }
+
+    if (m_hTarFile)
+    {
+        handleRtError(RTTarFileClose(m_hTarFile), "Failed to close '%s' in TAR", strTarFile.c_str());
+        m_hTarFile = NIL_RTTARFILE;
+    }
+}
+
+void BugReportTarGzip::complete(void)
+{
+    if (m_hTarFile != NIL_RTTARFILE)
+    {
+        RTTarFileClose(m_hTarFile);
+        m_hTarFile = NIL_RTTARFILE;
+    }
+    if (m_hTar != NIL_RTTAR)
+    {
+        RTTarClose(m_hTar);
+        m_hTar = NIL_RTTAR;
+    }
+
+    VfsIoStreamHandle hVfsIn;
+    handleRtError(RTVfsIoStrmOpenNormal(m_szTarName, RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_NONE,
+                                        hVfsIn.getPtr()),
+                  "Failed to open TAR file '%s'", m_szTarName);
+
+    int rc;
+    char buf[_64K];
+    size_t cbRead = 0;
+    while (RT_SUCCESS(rc = RTVfsIoStrmRead(hVfsIn.get(), buf, sizeof(buf), true, &cbRead)) && cbRead)
+        handleRtError(RTVfsIoStrmWrite(m_hVfsGzip.get(), buf, cbRead, true, NULL),
+                      "Failed to write into compressed stream");
+    handleRtError(rc, "Failed to read from TAR stream");
+    handleRtError(RTVfsIoStrmFlush(m_hVfsGzip.get()), "Failed to flush output stream");
+    m_hVfsGzip.release();
+}
+
+
+/* Implementation - Main */
+
+void createBugReport(BugReport* report, const char *pszHome, MachineInfoList& machines)
+{
+    report->addItem(new BugReportFile(PathJoin(pszHome, "VBoxSVC.log"), "VBoxSVC.log"));
+    report->addItem(new BugReportFile(PathJoin(pszHome, "VBoxSVC.log.1"), "VBoxSVC.log.1"));
+    report->addItem(new BugReportFile(PathJoin(pszHome, "VirtualBox.xml"), "VirtualBox.xml"));
+    report->addItem(new BugReportCommand("HostUsbDevices", g_pszVBoxManage, "list", "usbhost", NULL));
+    report->addItem(new BugReportCommand("HostUsbFilters", g_pszVBoxManage, "list", "usbfilters", NULL));
+    for (MachineInfoList::iterator it = machines.begin(); it != machines.end(); ++it)
+    {
+        report->addItem(new BugReportFile(PathJoin((*it)->getLogPath(), "VBox.log"),
+                                         PathJoin((*it)->getName(),    "VBox.log")));
+        report->addItem(new BugReportFile((*it)->getSettingsFile(),
+                                         PathJoin((*it)->getName(), RTPathFilename((*it)->getSettingsFile()))));
+        report->addItem(new BugReportCommand(PathJoin((*it)->getName(), "GuestProperties"),
+                                            g_pszVBoxManage, "guestproperty", "enumerate",
+                                            (*it)->getName(), NULL));
+    }
+
+    createBugReportOsSpecific(report, pszHome);
+}
+
+void addMachine(MachineInfoList& list, ComPtr<IMachine> machine)
+{
+    com::Bstr name, logFolder, settingsFile;
+    handleComError(machine->COMGETTER(Name)(name.asOutParam()),
+                   "Failed to get VM name");
+    handleComError(machine->COMGETTER(LogFolder)(logFolder.asOutParam()),
+                   "Failed to get VM log folder");
+    handleComError(machine->COMGETTER(SettingsFilePath)(settingsFile.asOutParam()),
+                   "Failed to get VM settings file path");
+    list.push_back(new MachineInfo(com::Utf8Str(name).c_str(),
+                                   com::Utf8Str(logFolder).c_str(),
+                                   com::Utf8Str(settingsFile).c_str()));
+}
+
+
+static void printHeader(void)
+{
+    RTStrmPrintf(g_pStdErr, VBOX_PRODUCT " Bug Report Tool " VBOX_VERSION_STRING "\n"
+                 "(C) " VBOX_C_YEAR " " VBOX_VENDOR "\n"
+                 "All rights reserved.\n\n");
+}
+
+int main(int argc, char *argv[])
+{
+    /*
+     * Initialize the VBox runtime without loading
+     * the support driver.
+     */
+    RTR3InitExe(argc, &argv, 0);
+
+    bool fAllMachines = false;
+    bool fTextOutput  = false;
+    const char *pszOutputFile = NULL;
+    std::list<const char *> nameList;
+    RTGETOPTUNION ValueUnion;
+    RTGETOPTSTATE GetState;
+    int ret = RTGetOptInit(&GetState, argc, argv,
+                          g_aOptions, RT_ELEMENTS(g_aOptions),
+                          1 /* First */, 0 /*fFlags*/);
+    if (RT_FAILURE(ret))
+        return ret;
+    int ch;
+    while ((ch = RTGetOpt(&GetState, &ValueUnion)))
+    {
+        switch(ch)
+        {
+            case 'h':
+                printHeader();
+                RTStrmPrintf(g_pStdErr, g_szUsage, argv[0]);
+                return 0;
+            case 'A':
+                fAllMachines = true;
+                break;
+            case 'o':
+                pszOutputFile = ValueUnion.psz;
+                break;
+            case 't':
+                fTextOutput = true;
+                break;
+            case 'V':
+                RTPrintf("%sr%s\n", RTBldCfgVersion(), RTBldCfgRevisionStr());
+                return 0;
+            case VINF_GETOPT_NOT_OPTION:
+                nameList.push_back(ValueUnion.psz);
+                break;
+            default:
+                return RTGetOptPrintError(ch, &ValueUnion);
+        }
+    }
+
+    printHeader();
+
+    HRESULT hr = S_OK;
+    char homeDir[RTPATH_MAX];
+    com::GetVBoxUserHomeDirectory(homeDir, sizeof(homeDir));
+
+    try
+    {
+        /* Figure out full path to VBoxManage */
+        char *pszVBoxBin = RTStrDup(argv[0]);
+        if (!pszVBoxBin)
+            throw RTCError("Out of memory\n");
+        RTPathStripFilename(pszVBoxBin);
+        g_pszVBoxManage = RTPathJoinA(pszVBoxBin, VBOXMANAGE);
+        if (!g_pszVBoxManage)
+            throw RTCError("Out of memory\n");
+        RTStrFree(pszVBoxBin);
+
+        handleComError(com::Initialize(), "Failed to initialize COM");
+
+        MachineInfoList list;
+
+        do
+        {
+            ComPtr<IVirtualBox> virtualBox;
+            ComPtr<ISession> session;
+
+            hr = virtualBox.createLocalObject(CLSID_VirtualBox);
+            if (FAILED(hr))
+                RTStrmPrintf(g_pStdErr, "WARNING: failed to create the VirtualBox object (hr=0x%x)\n", hr);
+            else
+            {
+                hr = session.createInprocObject(CLSID_Session);
+                if (FAILED(hr))
+                    RTStrmPrintf(g_pStdErr, "WARNING: failed to create a session object (hr=0x%x)\n", hr);
+            }
+
+            if (SUCCEEDED(hr))
+            {
+                if (fAllMachines)
+                {
+                    com::SafeIfaceArray<IMachine> machines;
+                    hr = virtualBox->COMGETTER(Machines)(ComSafeArrayAsOutParam(machines));
+                    if (SUCCEEDED(hr))
+                    {
+                        for (size_t i = 0; i < machines.size(); ++i)
+                        {
+                            if (machines[i])
+                                addMachine(list, machines[i]);
+                        }
+                    }
+                }
+                else
+                {
+                    for ( std::list<const char *>::iterator it = nameList.begin(); it != nameList.end(); ++it)
+                    {
+                        ComPtr<IMachine> machine;
+                        handleComError(virtualBox->FindMachine(com::Bstr(*it).raw(), machine.asOutParam()),
+                                       "No such machine '%s'", *it);
+                        addMachine(list, machine);
+                    }
+                }
+            }
+
+        }
+        while(0);
+
+        BugReport *pReport;
+        if (fTextOutput)
+            pReport = new BugReportText(pszOutputFile ? pszOutputFile : "bugreport.txt");
+        else
+            pReport = new BugReportTarGzip(pszOutputFile ? pszOutputFile : "bugreport.tgz");
+        createBugReport(pReport, homeDir, list);
+        pReport->process();
+        pReport->complete();
+        delete pReport;
+    }
+    catch (RTCError &e)
+    {
+        RTStrmPrintf(g_pStdErr, "ERROR: %s\n", e.what());
+    }
+
+    com::Shutdown();
+
+    if (g_pszVBoxManage)
+        RTStrFree(g_pszVBoxManage);
+
+    return SUCCEEDED(hr) ? 0 : 1;
+}
diff --git a/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.h b/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.h
new file mode 100644
index 0000000..5e335b5
--- /dev/null
+++ b/src/VBox/Frontends/VBoxBugReport/VBoxBugReport.h
@@ -0,0 +1,231 @@
+/* $Id: VBoxBugReport.h $ */
+/** @file
+ * VBoxBugReport - VirtualBox command-line diagnostics tool, internal header file.
+ */
+
+/*
+ * Copyright (C) 2006-2016 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___H_VBOXBUGREPORT
+#define ___H_VBOXBUGREPORT
+
+/*
+ * Introduction.
+ *
+ * In the most general sense a bug report is a collection of data obtained from
+ * the user's host system. It may include files common for all VMs, like the
+ * VBoxSVC.log file, as well as files related to particular machines. It may
+ * also contain the output of commands executed on the host, as well as data
+ * collected via OS APIs.
+ */
+
+/* @todo not sure if using a separate namespace would be beneficial */
+
+#include <iprt/path.h>
+#include <iprt/stream.h>
+#include <iprt/tar.h>
+#include <iprt/vfs.h>
+#include <iprt/cpp/list.h>
+
+#ifdef RT_OS_WINDOWS
+#define VBOXMANAGE "VBoxManage.exe"
+#else /* !RT_OS_WINDOWS */
+#define VBOXMANAGE "VBoxManage"
+#endif /* !RT_OS_WINDOWS */
+
+/* Base */
+
+inline void handleRtError(int rc, const char *pszMsgFmt, ...)
+{
+    if (RT_FAILURE(rc))
+    {
+        va_list va;
+        va_start(va, pszMsgFmt);
+        RTCString msgArgs(pszMsgFmt, va);
+        va_end(va);
+        RTCStringFmt msg("%s (rc=%d)\n", msgArgs.c_str(), rc);
+        throw RTCError(msg.c_str());
+    }
+}
+
+inline void handleComError(HRESULT hr, const char *pszMsgFmt, ...)
+{
+    if (FAILED(hr))
+    {
+        va_list va;
+        va_start(va, pszMsgFmt);
+        RTCString msgArgs(pszMsgFmt, va);
+        va_end(va);
+        RTCStringFmt msg("%s (hr=0x%x)\n", msgArgs.c_str(), hr);
+        throw RTCError(msg.c_str());
+    }
+}
+
+/*
+ * An auxiliary class to facilitate in-place path joins.
+ */
+class PathJoin
+{
+public:
+    PathJoin(const char *folder, const char *file) { m_path = RTPathJoinA(folder, file); }
+    ~PathJoin() { RTStrFree(m_path); };
+    operator char*() const { return m_path; };
+private:
+    char *m_path;
+};
+
+
+/*
+ * An abstract class serving as the root of the bug report item tree.
+ */
+class BugReportItem
+{
+public:
+    BugReportItem(const char *pszTitle);
+    virtual ~BugReportItem();
+    virtual const char *getTitle(void);
+    virtual PRTSTREAM getStream(void) = 0;
+private:
+    char *m_pszTitle;
+};
+
+/*
+ * An abstract class to serve as a base class for all report types.
+ */
+class BugReport
+{
+public:
+    BugReport(const char *pszFileName);
+    virtual ~BugReport();
+
+    void addItem(BugReportItem* item);
+    int  getItemCount(void);
+    void process();
+
+    virtual void processItem(BugReportItem* item) = 0;
+    virtual void complete(void) = 0;
+
+protected:
+    char *m_pszFileName;
+    RTCList<BugReportItem*> m_Items;
+};
+
+/*
+ * An auxiliary class providing formatted output into a temporary file for item
+ * classes that obtain data via host OS APIs.
+ */
+class BugReportStream : public BugReportItem
+{
+public:
+    BugReportStream(const char *pszTitle);
+    virtual ~BugReportStream();
+    virtual PRTSTREAM getStream(void);
+protected:
+    int printf(const char *pszFmt, ...);
+    int putStr(const char *pszString);
+private:
+    PRTSTREAM m_Strm;
+    char m_szFileName[RTPATH_MAX];
+};
+
+
+/* Generic */
+
+/*
+ * This class reports everything into a single text file.
+ */
+class BugReportText : public BugReport
+{
+public:
+    BugReportText(const char *pszFileName);
+    virtual ~BugReportText();
+    virtual void processItem(BugReportItem* item);
+    virtual void complete(void) {};
+private:
+    PRTSTREAM m_StrmTxt;
+};
+
+/*
+ * This class reports items as individual files archived into a single compressed TAR file.
+ */
+class BugReportTarGzip : public BugReport
+{
+public:
+    BugReportTarGzip(const char *pszFileName);
+    virtual ~BugReportTarGzip();
+    virtual void processItem(BugReportItem* item);
+    virtual void complete(void);
+private:
+    /*
+     * Helper class to release handles going out of scope.
+     */
+    class VfsIoStreamHandle
+    {
+    public:
+        VfsIoStreamHandle() : m_hVfsStream(NIL_RTVFSIOSTREAM) {};
+        ~VfsIoStreamHandle() { release(); }
+        PRTVFSIOSTREAM getPtr(void) { return &m_hVfsStream; };
+        RTVFSIOSTREAM get(void) { return m_hVfsStream; };
+        void release(void)
+        {
+            if (m_hVfsStream != NIL_RTVFSIOSTREAM)
+                RTVfsIoStrmRelease(m_hVfsStream);
+            m_hVfsStream = NIL_RTVFSIOSTREAM;
+        };
+    private:
+        RTVFSIOSTREAM m_hVfsStream;
+    };
+
+    VfsIoStreamHandle m_hVfsGzip;
+
+    RTTAR m_hTar;
+    RTTARFILE m_hTarFile;
+    char m_szTarName[RTPATH_MAX];
+};
+
+
+/*
+ * BugReportFile adds a file as an item to a report.
+ */
+class BugReportFile : public BugReportItem
+{
+public:
+    BugReportFile(const char *pszPath, const char *pcszName);
+    virtual ~BugReportFile();
+    virtual PRTSTREAM getStream(void);
+
+private:
+    char *m_pszPath;
+    PRTSTREAM m_Strm;
+};
+
+/*
+ * A base class for item classes that collect CLI output.
+ */
+class BugReportCommand : public BugReportItem
+{
+public:
+    BugReportCommand(const char *pszTitle, const char *pszExec, ...);
+    virtual ~BugReportCommand();
+    virtual PRTSTREAM getStream(void);
+private:
+    PRTSTREAM m_Strm;
+    char m_szFileName[RTPATH_MAX];
+    char *m_papszArgs[32];
+};
+
+
+/* Platform-specific */
+
+void createBugReportOsSpecific(BugReport* report, const char *pszHome);
+
+#endif /* !___H_VBOXBUGREPORT */
diff --git a/src/VBox/Frontends/VBoxBugReport/VBoxBugReportWin.cpp b/src/VBox/Frontends/VBoxBugReport/VBoxBugReportWin.cpp
new file mode 100644
index 0000000..56c9b38
--- /dev/null
+++ b/src/VBox/Frontends/VBoxBugReport/VBoxBugReportWin.cpp
@@ -0,0 +1,585 @@
+/* $Id: VBoxBugReportWin.cpp $ */
+/** @file
+ * VBoxBugReportWin - VirtualBox command-line diagnostics tool,
+ * Windows-specific part.
+ */
+
+/*
+ * Copyright (C) 2006-2016 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#include <VBox/com/com.h>
+#include <VBox/com/string.h>
+
+#include <iprt/cpp/exception.h>
+
+#include "VBoxBugReport.h"
+
+#include <netcfgx.h>
+#include <setupapi.h>
+#include <initguid.h>
+#include <devguid.h>
+#include <usbiodef.h>
+#include <usbioctl.h>
+
+#define ReleaseAndReset(obj) \
+    if (obj) \
+        obj->Release(); \
+    obj = NULL;
+
+
+class BugReportNetworkAdaptersWin : public BugReportStream
+{
+public:
+    BugReportNetworkAdaptersWin() : BugReportStream("NetworkAdapters") {};
+    virtual ~BugReportNetworkAdaptersWin() {};
+    virtual PRTSTREAM getStream(void) { collect(); return BugReportStream::getStream(); };
+private:
+    struct CharacteristicsName
+    {
+        DWORD dwChar;
+        const char *szName;
+    };
+    void printCharteristics(DWORD dwChars);
+    void collect();
+    void collectNetCfgComponentInfo(int ident, bool fEnabled, INetCfgComponent *pComponent);
+};
+
+
+
+void BugReportNetworkAdaptersWin::printCharteristics(DWORD dwChars)
+{
+    static CharacteristicsName cMap[] =
+    {
+        { NCF_VIRTUAL, "virtual" },
+	{ NCF_SOFTWARE_ENUMERATED, "software_enumerated" },
+	{ NCF_PHYSICAL, "physical" },
+        { NCF_HIDDEN, "hidden" },
+	{ NCF_NO_SERVICE, "no_service" },
+	{ NCF_NOT_USER_REMOVABLE, "not_user_removable" },
+	{ NCF_MULTIPORT_INSTANCED_ADAPTER, "multiport_instanced_adapter" },
+	{ NCF_HAS_UI, "has_ui" },
+	{ NCF_SINGLE_INSTANCE, "single_instance" },
+	{ NCF_FILTER, "filter" },
+	{ NCF_DONTEXPOSELOWER, "dontexposelower" },
+	{ NCF_HIDE_BINDING, "hide_binding" },
+	{ NCF_NDIS_PROTOCOL, "ndis_protocol" },
+	{ NCF_FIXED_BINDING, "fixed_binding" },
+	{ NCF_LW_FILTER, "lw_filter" }
+    };
+    bool fPrintDelim = false;
+
+    for (int i = 0; i < RT_ELEMENTS(cMap); ++i)
+    {
+        if (dwChars & cMap[i].dwChar)
+        {
+            if (fPrintDelim)
+            {
+                putStr(", ");
+                fPrintDelim = false;
+            }
+            putStr(cMap[i].szName);
+            fPrintDelim = true;
+        }
+    }
+}
+
+void BugReportNetworkAdaptersWin::collectNetCfgComponentInfo(int ident, bool fEnabled, INetCfgComponent *pComponent)
+{
+    LPWSTR pwszName = NULL;
+    HRESULT hr = pComponent->GetDisplayName(&pwszName);
+    if (FAILED(hr))
+        throw RTCError(com::Utf8StrFmt("Failed to get component display name, hr=0x%x.\n", hr));
+    printf("%s%c %ls [", RTCString(ident, ' ').c_str(), fEnabled ? '+' : '-', pwszName);
+    if (pwszName)
+        CoTaskMemFree(pwszName);
+
+    DWORD dwChars = 0;
+    hr = pComponent->GetCharacteristics(&dwChars);
+    if (FAILED(hr))
+        throw RTCError(com::Utf8StrFmt("Failed to get component characteristics, hr=0x%x.\n", hr));
+    printCharteristics(dwChars);
+    putStr("]\n");
+}
+
+void BugReportNetworkAdaptersWin::collect(void)
+{
+    INetCfg                     *pNetCfg          = NULL;
+    IEnumNetCfgComponent        *pEnumAdapters    = NULL;
+    INetCfgComponent            *pNetCfgAdapter   = NULL;
+    INetCfgComponentBindings    *pAdapterBindings = NULL;
+    IEnumNetCfgBindingPath      *pEnumBp          = NULL;
+    INetCfgBindingPath          *pBp              = NULL;
+    IEnumNetCfgBindingInterface *pEnumBi          = NULL;
+    INetCfgBindingInterface     *pBi              = NULL;
+    INetCfgComponent            *pUpperComponent  = NULL;
+
+    try
+    {
+        HRESULT hr = CoCreateInstance(CLSID_CNetCfg, NULL, CLSCTX_INPROC_SERVER, IID_INetCfg, (PVOID*)&pNetCfg);
+        if (FAILED(hr))
+            throw RTCError(com::Utf8StrFmt("Failed to create instance of INetCfg, hr=0x%x.\n", hr));
+        hr = pNetCfg->Initialize(NULL);
+        if (FAILED(hr))
+            throw RTCError(com::Utf8StrFmt("Failed to initialize instance of INetCfg, hr=0x%x.\n", hr));
+
+        hr = pNetCfg->EnumComponents(&GUID_DEVCLASS_NET, &pEnumAdapters);
+        if (FAILED(hr))
+            throw RTCError(com::Utf8StrFmt("Failed enumerate network adapters, hr=0x%x.\n", hr));
+
+        hr = pEnumAdapters->Reset();
+        Assert(SUCCEEDED(hr));
+        do
+        {
+            hr = pEnumAdapters->Next(1, &pNetCfgAdapter, NULL);
+            if (hr == S_FALSE)
+                break;
+            if (hr != S_OK)
+                throw RTCError(com::Utf8StrFmt("Failed to get next network adapter, hr=0x%x.\n", hr));
+            hr = pNetCfgAdapter->QueryInterface(IID_INetCfgComponentBindings, (PVOID*)&pAdapterBindings);
+            if (FAILED(hr))
+                throw RTCError(com::Utf8StrFmt("Failed to query INetCfgComponentBindings, hr=0x%x.\n", hr));
+            hr = pAdapterBindings->EnumBindingPaths(EBP_ABOVE, &pEnumBp);
+            if (FAILED(hr))
+                throw RTCError(com::Utf8StrFmt("Failed to enumerate binding paths, hr=0x%x.\n", hr));
+            hr = pEnumBp->Reset();
+            if (FAILED(hr))
+                throw RTCError(com::Utf8StrFmt("Failed to reset enumeration of binding paths (0x%x)\n", hr));
+            do
+            {
+                hr = pEnumBp->Next(1, &pBp, NULL);
+                if (hr == S_FALSE)
+                    break;
+                if (hr != S_OK)
+                    throw RTCError(com::Utf8StrFmt("Failed to get next network adapter, hr=0x%x.\n", hr));
+                bool fBpEnabled;
+                hr =  pBp->IsEnabled();
+                if (hr == S_FALSE)
+                    fBpEnabled = false;
+                else if (hr != S_OK)
+                    throw RTCError(com::Utf8StrFmt("Failed to check if bind path is enabled, hr=0x%x.\n", hr));
+                else
+                    fBpEnabled = true;
+                hr = pBp->EnumBindingInterfaces(&pEnumBi);
+                if (FAILED(hr))
+                    throw RTCError(com::Utf8StrFmt("Failed to enumerate binding interfaces (0x%x)\n", hr));
+                hr = pEnumBi->Reset();
+                if (FAILED(hr))
+                    throw RTCError(com::Utf8StrFmt("Failed to reset enumeration of binding interfaces (0x%x)\n", hr));
+                int ident;
+                for (ident = 0;; ++ident)
+                {
+                    hr = pEnumBi->Next(1, &pBi, NULL);
+                    if (hr == S_FALSE)
+                        break;
+                    if (hr != S_OK)
+                        throw RTCError(com::Utf8StrFmt("Failed to get next binding interface, hr=0x%x.\n", hr));
+                    hr = pBi->GetUpperComponent(&pUpperComponent);
+                    if (FAILED(hr))
+                        throw RTCError(com::Utf8StrFmt("Failed to get upper component, hr=0x%x.\n", hr));
+                    collectNetCfgComponentInfo(ident, fBpEnabled, pUpperComponent);
+                    ReleaseAndReset(pUpperComponent);
+                    ReleaseAndReset(pBi);
+                }
+                collectNetCfgComponentInfo(ident, fBpEnabled, pNetCfgAdapter);
+                ReleaseAndReset(pEnumBi);
+                ReleaseAndReset(pBp);
+            } while (true);
+
+            ReleaseAndReset(pEnumBp);
+            ReleaseAndReset(pAdapterBindings);
+            ReleaseAndReset(pNetCfgAdapter);
+        } while (true);
+        ReleaseAndReset(pEnumAdapters);
+        ReleaseAndReset(pNetCfg);
+    }
+
+    catch (RTCError &e)
+    {
+        ReleaseAndReset(pUpperComponent);
+        ReleaseAndReset(pBi);
+        ReleaseAndReset(pEnumBi);
+        ReleaseAndReset(pBp);
+        ReleaseAndReset(pEnumBp);
+        ReleaseAndReset(pAdapterBindings);
+        ReleaseAndReset(pNetCfgAdapter);
+        ReleaseAndReset(pEnumAdapters);
+        ReleaseAndReset(pNetCfg);
+        RTPrintf("ERROR in osCollect: %s\n", e.what());
+        throw;
+    }
+            
+}
+
+
+class ErrorHandler
+{
+public:
+    ErrorHandler(const char *pszFunction, int iLine)
+        : m_function(pszFunction), m_line(iLine) {};
+    void handleWinError(DWORD uError, const char *pszMsgFmt, ...)
+        {
+            if (uError != ERROR_SUCCESS)
+            {
+                va_list va;
+                va_start(va, pszMsgFmt);
+                RTCString msgArgs(pszMsgFmt, va);
+                va_end(va);
+                LPSTR pBuf = NULL;
+                DWORD cb = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+                                          NULL, uError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&pBuf, 0, NULL);
+                RTCStringFmt msg("%s at %s(%d): err=%u %s", msgArgs.c_str(), m_function, m_line, uError, pBuf);
+                LocalFree(pBuf);
+                throw RTCError(msg.c_str());
+            }
+        };
+private:
+    const char *m_function;
+    int m_line;
+};
+#define handleWinError ErrorHandler(__FUNCTION__, __LINE__).handleWinError
+
+
+class BugReportUsbTreeWin : public BugReportStream
+{
+public:
+    BugReportUsbTreeWin();
+    virtual ~BugReportUsbTreeWin();
+    virtual PRTSTREAM getStream(void) { enumerate(); return BugReportStream::getStream(); };
+private:
+    class AutoHandle {
+    public:
+        AutoHandle(HANDLE h) { m_h = h; };
+        ~AutoHandle() { close(); };
+        bool isValid() { return m_h != INVALID_HANDLE_VALUE; };
+        operator HANDLE() { return m_h; };
+        void close(void) { if (isValid()) { CloseHandle(m_h); m_h = INVALID_HANDLE_VALUE; } };
+    private:
+        HANDLE m_h;
+    };
+    void enumerate();
+
+    void enumerateController(PSP_DEVINFO_DATA pInfoData, PSP_DEVICE_INTERFACE_DATA pInterfaceData);
+    void enumerateHub(RTCString strFullName, RTCString strPrefix);
+    void enumeratePorts(HANDLE hHub, unsigned cPorts, RTCString strPrefix);
+    PBYTE getDeviceRegistryProperty(HDEVINFO hDev, PSP_DEVINFO_DATA pInfoData, DWORD uProperty,
+                                    DWORD uExpectedType, PDWORD puSize);
+    RTCString getDeviceRegistryPropertyString(HDEVINFO hDev, PSP_DEVINFO_DATA pInfoData, DWORD uProperty);
+
+    RTCString getDeviceDescByDriverName(RTCString strDrvName);
+    RTCString getDriverKeyName(HANDLE hHub, int iPort);
+    RTCString getExternalHubName(HANDLE hHub, int iPort);
+
+    HDEVINFO m_hDevInfo;
+    PSP_DEVICE_INTERFACE_DETAIL_DATA m_pDetailData;
+    HANDLE m_hHostCtrlDev;
+};
+
+BugReportUsbTreeWin::BugReportUsbTreeWin() : BugReportStream("HostUsbTree")
+{
+    m_hDevInfo = INVALID_HANDLE_VALUE;
+    m_pDetailData = NULL;
+    m_hHostCtrlDev = INVALID_HANDLE_VALUE;
+}
+
+BugReportUsbTreeWin::~BugReportUsbTreeWin()
+{
+    if (m_hHostCtrlDev != INVALID_HANDLE_VALUE)
+        CloseHandle(m_hHostCtrlDev);
+    if (m_pDetailData)
+        RTMemFree(m_pDetailData);
+    if (m_hDevInfo != INVALID_HANDLE_VALUE)
+        SetupDiDestroyDeviceInfoList(m_hDevInfo);
+}
+
+
+PBYTE BugReportUsbTreeWin::getDeviceRegistryProperty(HDEVINFO hDev,
+                                                     PSP_DEVINFO_DATA pInfoData,
+                                                     DWORD uProperty,
+                                                     DWORD uExpectedType,
+                                                     PDWORD puSize)
+{
+    DWORD uActualType, cbNeeded = 0;
+    if (!SetupDiGetDeviceRegistryProperty(hDev, pInfoData, uProperty, &uActualType,
+                                          NULL, 0, &cbNeeded)
+        && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
+    {
+        if (GetLastError() == ERROR_INVALID_DATA)
+            return NULL;
+        handleWinError(GetLastError(), "SetupDiGetDeviceRegistryProperty(0x%x) failed", uProperty);
+    }
+    if (uExpectedType != REG_NONE && uActualType != uExpectedType)
+        throw RTCError(RTCStringFmt("SetupDiGetDeviceRegistryProperty(0x%x) returned type %d instead of %d",
+                                    uActualType, uExpectedType).c_str());    
+    PBYTE pBuffer = (PBYTE)RTMemAlloc(cbNeeded);
+    if (!pBuffer)
+        throw RTCError(RTCStringFmt("Failed to allocate %u bytes", cbNeeded).c_str());
+    if (!SetupDiGetDeviceRegistryProperty(hDev, pInfoData, uProperty, NULL,
+                                          pBuffer, cbNeeded, &cbNeeded))
+    {
+        DWORD dwErr = GetLastError();
+        RTMemFree(pBuffer);
+        pBuffer = NULL;
+        handleWinError(dwErr, "SetupDiGetDeviceRegistryProperty(0x%x) failed", uProperty);
+    }
+    if (puSize)
+        *puSize = cbNeeded;
+
+    return pBuffer;
+}
+
+RTCString BugReportUsbTreeWin::getDeviceRegistryPropertyString(HDEVINFO hDev, PSP_DEVINFO_DATA pInfoData, DWORD uProperty)
+{
+    DWORD cbString = 0;
+    PWSTR pUnicodeString = (PWSTR)getDeviceRegistryProperty(hDev, pInfoData, uProperty, REG_SZ, NULL);
+
+    if (!pUnicodeString)
+        return RTCString();
+
+    RTCStringFmt utf8string("%ls", pUnicodeString);
+    RTMemFree(pUnicodeString);
+    return utf8string;
+}
+
+
+RTCString BugReportUsbTreeWin::getDeviceDescByDriverName(RTCString strDrvName)
+{
+    DWORD dwErr;
+    SP_DEVINFO_DATA devInfoData;
+    HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
+
+    if (hDevInfo == INVALID_HANDLE_VALUE)
+        handleWinError(GetLastError(), "SetupDiGetClassDevs failed");
+
+    bool fFound = false;
+    devInfoData.cbSize = sizeof(devInfoData);
+    for (int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &devInfoData); ++i)
+    {
+        if (getDeviceRegistryPropertyString(hDevInfo, &devInfoData, SPDRP_DRIVER).equals(strDrvName))
+        {
+            fFound = true;
+            break;
+        }
+    }
+    if (!fFound)
+    {
+        dwErr = GetLastError();
+        SetupDiDestroyDeviceInfoList(hDevInfo);
+        handleWinError(dwErr, "SetupDiEnumDeviceInfo failed");
+    }
+
+    RTCString strDesc = getDeviceRegistryPropertyString(hDevInfo, &devInfoData, SPDRP_DEVICEDESC);
+    SetupDiDestroyDeviceInfoList(hDevInfo);
+    return strDesc;
+}
+
+
+RTCString BugReportUsbTreeWin::getDriverKeyName(HANDLE hHub, int iPort)
+{
+    USB_NODE_CONNECTION_DRIVERKEY_NAME name;
+    ULONG cbNeeded = 0;
+
+    name.ConnectionIndex = iPort;
+    if (!DeviceIoControl(hHub, IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME,
+                         &name, sizeof(name), &name, sizeof(name), &cbNeeded, NULL))
+        handleWinError(GetLastError(), "DeviceIoControl(IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME) failed");
+    cbNeeded = name.ActualLength;
+    PUSB_NODE_CONNECTION_DRIVERKEY_NAME pName = (PUSB_NODE_CONNECTION_DRIVERKEY_NAME)RTMemAlloc(cbNeeded);
+    if (!pName)
+        throw RTCError(RTCStringFmt("Failed to allocate %u bytes", cbNeeded).c_str());
+    pName->ConnectionIndex = iPort;
+    if (!DeviceIoControl(hHub, IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME,
+                         pName, cbNeeded, pName, cbNeeded, &cbNeeded, NULL))
+    {
+        DWORD dwErr = GetLastError();
+        RTMemFree(pName);
+        handleWinError(dwErr, "DeviceIoControl(IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME) failed");
+    }
+    RTCStringFmt strName("%ls", pName->DriverKeyName);
+    RTMemFree(pName);
+    return strName;
+}
+    
+
+RTCString BugReportUsbTreeWin::getExternalHubName(HANDLE hHub, int iPort)
+{
+    USB_NODE_CONNECTION_NAME name;
+    ULONG cbNeeded = 0;
+
+    name.ConnectionIndex = iPort;
+    if (!DeviceIoControl(hHub, IOCTL_USB_GET_NODE_CONNECTION_NAME,
+                         &name, sizeof(name), &name, sizeof(name), &cbNeeded, NULL))
+        handleWinError(GetLastError(), "DeviceIoControl(IOCTL_USB_GET_NODE_CONNECTION_NAME) failed");
+    cbNeeded = name.ActualLength;
+    PUSB_NODE_CONNECTION_NAME pName = (PUSB_NODE_CONNECTION_NAME)RTMemAlloc(cbNeeded);
+    if (!pName)
+        throw RTCError(RTCStringFmt("Failed to allocate %u bytes", cbNeeded).c_str());
+    pName->ConnectionIndex = iPort;
+    if (!DeviceIoControl(hHub, IOCTL_USB_GET_NODE_CONNECTION_NAME,
+                         pName, cbNeeded, pName, cbNeeded, &cbNeeded, NULL))
+    {
+        DWORD dwErr = GetLastError();
+        RTMemFree(pName);
+        handleWinError(dwErr, "DeviceIoControl(IOCTL_USB_GET_NODE_CONNECTION_NAME) failed");
+    }
+    RTCStringFmt strName("%ls", pName->NodeName);
+    RTMemFree(pName);
+    return strName;
+}
+
+
+void BugReportUsbTreeWin::enumeratePorts(HANDLE hHub, unsigned cPorts, RTCString strPrefix)
+{
+    DWORD cbInfo = sizeof(USB_NODE_CONNECTION_INFORMATION_EX) + 30 * sizeof(USB_PIPE_INFO);
+    PUSB_NODE_CONNECTION_INFORMATION_EX pInfo = (PUSB_NODE_CONNECTION_INFORMATION_EX)RTMemAlloc(cbInfo);
+    if (!pInfo)
+        throw RTCError(RTCStringFmt("Failed to allocate %u bytes", cbInfo).c_str());
+    for (unsigned i = 1; i <= cPorts; ++i)
+    {
+        pInfo->ConnectionIndex = i;
+        if (!DeviceIoControl(hHub, IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX,
+                             pInfo, cbInfo, pInfo, cbInfo, &cbInfo, NULL))
+        {
+            DWORD dwErr = GetLastError();
+            RTMemFree(pInfo);
+            handleWinError(dwErr, "DeviceIoControl(IOCTL_USB_GET_NODE_CONNECTION_INFORMATION) failed");
+        }
+        if (pInfo->ConnectionStatus == NoDeviceConnected)
+            printf("%s[Port %d]\n", strPrefix.c_str(), i);
+        else
+        {
+            RTCString strName = getDeviceDescByDriverName(getDriverKeyName(hHub, i));
+            printf("%s[Port %d] %s\n", strPrefix.c_str(), i, strName.c_str());
+            if (pInfo->DeviceIsHub)
+                enumerateHub(getExternalHubName(hHub, i), strPrefix + "   ");
+        }
+    }
+    RTMemFree(pInfo);
+}
+
+void BugReportUsbTreeWin::enumerateHub(RTCString strFullName, RTCString strPrefix)
+{
+    AutoHandle hHubDev(CreateFileA(RTCString("\\\\.\\").append(strFullName).c_str(),
+                                   GENERIC_WRITE, FILE_SHARE_WRITE,
+                                   NULL, OPEN_EXISTING, 0, NULL));
+    if (!hHubDev.isValid())
+        handleWinError(GetLastError(), "CreateFile(%s) failed", strFullName.c_str());
+    ULONG cb;
+    USB_NODE_INFORMATION hubInfo;
+    if (!DeviceIoControl(hHubDev,
+                         IOCTL_USB_GET_NODE_INFORMATION,
+                         &hubInfo,
+                         sizeof(USB_NODE_INFORMATION),
+                         &hubInfo,
+                         sizeof(USB_NODE_INFORMATION),
+                         &cb,
+                         NULL))
+        handleWinError(GetLastError(), "DeviceIoControl(IOCTL_USB_GET_NODE_INFORMATION) failed");
+    enumeratePorts(hHubDev, hubInfo.u.HubInformation.HubDescriptor.bNumberOfPorts, strPrefix);
+}
+
+void BugReportUsbTreeWin::enumerateController(PSP_DEVINFO_DATA pInfoData, PSP_DEVICE_INTERFACE_DATA pInterfaceData)
+{
+    RTCString strCtrlDesc = getDeviceRegistryPropertyString(m_hDevInfo, pInfoData, SPDRP_DEVICEDESC);
+    printf("%s\n", strCtrlDesc.c_str());
+
+    ULONG cbNeeded;
+    USB_ROOT_HUB_NAME rootHub;
+    /* Find out the name length first */
+    if (!DeviceIoControl(m_hHostCtrlDev, IOCTL_USB_GET_ROOT_HUB_NAME, NULL, 0,
+                         &rootHub, sizeof(rootHub),
+                         &cbNeeded, NULL))
+        handleWinError(GetLastError(), "DeviceIoControl(IOCTL_USB_GET_ROOT_HUB_NAME) failed");
+    cbNeeded = rootHub.ActualLength;
+    PUSB_ROOT_HUB_NAME pUnicodeName = (PUSB_ROOT_HUB_NAME)RTMemAlloc(cbNeeded);
+    if (!pUnicodeName)
+        throw RTCError(RTCStringFmt("Failed to allocate %u bytes", cbNeeded).c_str());
+
+    if (!DeviceIoControl(m_hHostCtrlDev, IOCTL_USB_GET_ROOT_HUB_NAME, NULL, 0,
+                         pUnicodeName, cbNeeded,
+                         &cbNeeded, NULL))
+    {
+        DWORD dwErr = GetLastError();
+        RTMemFree(pUnicodeName);
+        handleWinError(dwErr, "DeviceIoControl(IOCTL_USB_GET_ROOT_HUB_NAME) failed");
+    }
+
+    RTCStringFmt strRootHubName("%ls", pUnicodeName->RootHubName);
+    RTMemFree(pUnicodeName);
+    printf("   Root Hub\n");
+    enumerateHub(strRootHubName, "      ");
+}
+
+void BugReportUsbTreeWin::enumerate()
+{
+    m_hDevInfo = SetupDiGetClassDevs((LPGUID)&GUID_DEVINTERFACE_USB_HOST_CONTROLLER, NULL, NULL,
+                                     DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
+    if (m_hDevInfo == INVALID_HANDLE_VALUE)
+        handleWinError(GetLastError(), "SetupDiGetClassDevs(GUID_DEVINTERFACE_USB_HOST_CONTROLLER) failed");
+
+    SP_DEVINFO_DATA deviceInfoData;
+    deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+    for (int i = 0; SetupDiEnumDeviceInfo(m_hDevInfo, i, &deviceInfoData); ++i)
+    {
+        SP_DEVICE_INTERFACE_DATA deviceInterfaceData;
+        deviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
+        if (!SetupDiEnumDeviceInterfaces(m_hDevInfo, 0, (LPGUID)&GUID_DEVINTERFACE_USB_HOST_CONTROLLER,
+                                         i, &deviceInterfaceData))
+            handleWinError(GetLastError(), "SetupDiEnumDeviceInterfaces(GUID_DEVINTERFACE_USB_HOST_CONTROLLER) failed");
+
+        ULONG cbNeeded = 0;
+        if (!SetupDiGetDeviceInterfaceDetail(m_hDevInfo, &deviceInterfaceData, NULL, 0, &cbNeeded, NULL)
+            && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
+            handleWinError(GetLastError(), "SetupDiGetDeviceInterfaceDetail failed");
+
+        m_pDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)RTMemAlloc(cbNeeded);
+        if (!m_pDetailData)
+            throw RTCError(RTCStringFmt("Failed to allocate %u bytes", cbNeeded).c_str());
+
+        m_pDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
+        if (!SetupDiGetDeviceInterfaceDetail(m_hDevInfo, &deviceInterfaceData, m_pDetailData, cbNeeded, &cbNeeded, NULL))
+            handleWinError(GetLastError(), "SetupDiGetDeviceInterfaceDetail failed");
+
+        m_hHostCtrlDev = CreateFile(m_pDetailData->DevicePath, GENERIC_WRITE, FILE_SHARE_WRITE,
+                                    NULL, OPEN_EXISTING, 0, NULL);
+        if (m_hHostCtrlDev == INVALID_HANDLE_VALUE)
+            handleWinError(GetLastError(), "CreateFile(%ls) failed", m_pDetailData);
+
+        enumerateController(&deviceInfoData, &deviceInterfaceData);
+    }
+}
+
+
+void createBugReportOsSpecific(BugReport* report, const char *pszHome)
+{
+    TCHAR szWinDir[MAX_PATH];
+
+    int cbNeeded = GetWindowsDirectory(szWinDir, RT_ELEMENTS(szWinDir));
+    if (cbNeeded == 0)
+        throw RTCError(RTCStringFmt("Failed to get Windows directory (err=%d)\n", GetLastError()));
+    if (cbNeeded > MAX_PATH)
+        throw RTCError(RTCStringFmt("Failed to get Windows directory (needed %d-byte buffer)\n", cbNeeded));
+    RTCStringFmt WinInfDir("%ls/inf", szWinDir);
+    report->addItem(new BugReportFile(PathJoin(WinInfDir.c_str(), "setupapi.app.log"), "setupapi.app.log"));
+    report->addItem(new BugReportFile(PathJoin(WinInfDir.c_str(), "setupapi.dev.log"), "setupapi.dev.log"));
+    report->addItem(new BugReportNetworkAdaptersWin);
+    RTCStringFmt WinSysDir("%ls/System32", szWinDir);
+    report->addItem(new BugReportCommand("IpConfig", PathJoin(WinSysDir.c_str(), "ipconfig.exe"), "/all", NULL));
+    report->addItem(new BugReportCommand("RouteTable", PathJoin(WinSysDir.c_str(), "netstat.exe"), "-rn", NULL));
+    report->addItem(new BugReportCommand("SystemEvents", PathJoin(WinSysDir.c_str(), "wevtutil.exe"),
+                                         "qe", "System",
+                                         "/q:*[System[Provider[@Name='VBoxUSBMon' or @Name='VBoxNetLwf']]]", NULL));
+    report->addItem(new BugReportCommand("UpdateHistory", PathJoin(WinSysDir.c_str(), "wbem/wmic.exe"),
+                                         "qfe", "list", "brief", NULL));
+    report->addItem(new BugReportCommand("DriverServices", PathJoin(WinSysDir.c_str(), "sc.exe"),
+                                         "query", "type=", "driver", "state=", "all", NULL));
+    report->addItem(new BugReportUsbTreeWin);
+}
diff --git a/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp b/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp
index 7600310..22fd1e8 100644
--- a/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp
+++ b/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp
@@ -603,7 +603,7 @@ RTEXITCODE handleStartVM(HandlerArg *a)
                         CHECK_ERROR(progress, COMGETTER(ResultCode)(&iRc));
                         if (SUCCEEDED(rc))
                         {
-                            if (SUCCEEDED(rc))
+                            if (SUCCEEDED(iRc))
                                 RTPrintf("VM \"%s\" has been successfully started.\n", pszVM);
                             else
                             {
diff --git a/src/VBox/Frontends/VirtualBox/Makefile.kmk b/src/VBox/Frontends/VirtualBox/Makefile.kmk
index 688a892..1c15cd4 100644
--- a/src/VBox/Frontends/VirtualBox/Makefile.kmk
+++ b/src/VBox/Frontends/VirtualBox/Makefile.kmk
@@ -133,7 +133,8 @@ VirtualBox_DEFS          += \
 	$(if $(VBOX_GUI_WITH_HIDPI),VBOX_GUI_WITH_HIDPI) \
 	$(if $(VBOX_GUI_WITH_PIDFILE),VBOX_GUI_WITH_PIDFILE) \
 	$(if $(VBOX_GUI_WITH_KEYS_RESET_HANDLER),VBOX_GUI_WITH_KEYS_RESET_HANDLER) \
-	$(if $(VBOX_GUI_WITH_CUSTOMIZATIONS1),VBOX_GUI_WITH_CUSTOMIZATIONS1)
+	$(if $(VBOX_GUI_WITH_CUSTOMIZATIONS1),VBOX_GUI_WITH_CUSTOMIZATIONS1) \
+	$(if $(VBOX_WITH_RAW_MODE),VBOX_WITH_RAW_MODE)
 ifdef VBOX_WITH_DEBUGGER_GUI
  VirtualBox_DEFS        += VBOX_WITH_DEBUGGER_GUI
  if "$(KBUILD_TYPE)" != "release"
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts
index 02d13df..8557d0c 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_el.ts
@@ -26,7 +26,7 @@
     <message>
         <source>Oracle Corporation</source>
         <comment>Comma-separated list of translators</comment>
-        <translation>Oracle Corporation, Andreas Mastichis, Spiros Vlachos, Socratis Kalogrianitis</translation>
+        <translation>Socratis Kalogrianitis, Andreas Mastichis, Spiros Vlachos</translation>
     </message>
 </context>
 <context>
@@ -73,27 +73,19 @@
     </message>
     <message>
         <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Please try completely uninstalling and reinstalling VirtualBox.</source>
-        <translation>Ο οδηγός πυρήνα δεν ταιριάζει με αυτή την έκδοση του VirtualBox. Η εγκατάσταση του VirtualBox δεν ήταν μάλλον επιτυχημένη. Παρακαλούμε απεγκατήστε πλήρως και επανεγγατήστε το VirtualBox.</translation>
+        <translation>Ο οδηγός πυρήνα δεν ταιριάζει με αυτή την έκδοση του VirtualBox. Η εγκατάσταση του VirtualBox δεν ήταν μάλλον επιτυχημένη. Παρακαλούμε απεγκαταστήστε πλήρως και επανεγκαταστήστε το VirtualBox.</translation>
     </message>
     <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation type="obsolete">Ο οδηγός πυρήνα δεν ταιριάζει με αυτή την έκδοση του VirtualBox. Η εγκατάσταση του VirtualBox δεν ήταν μάλλον επιτυχημένη. Εκτελώντας το <br/><br/> <font color="blue">'/etc/init.d/vboxdrv setup'</font><br/><br/>ίσως να το διορθώσει. Σιγουρευτείτε οτι δεν αναμειγνύετε την OSE με την PUEL έκδοση του VirtualBox.</translation>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation>Ο οδηγός πυρήνα δεν ταιριάζει με αυτή την έκδοση του VirtualBox. Η εγκατάσταση του VirtualBox δεν ήταν μάλλον επιτυχημένη. Τρέχοντας<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>μπορεί να το διορθώσει. Σιγουρευτείτε οτι δεν αναμειγνύετε την έκδοση OSE και την έκδοση PUEL του VirtualBox.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
         <translation>Αυτό το λάθος σημαίνει οτι ο οδηγός πυρήνα είτε δεν μπόρεσε να δεσμεύσει αρκετή μνήμη ή κάποια διαδικασία χαρτογράφησης απέτυχε.</translation>
     </message>
     <message>
-        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/etc/init.d/vboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necess [...]
-        <translation type="obsolete">Ο οδηγός πυρήνα του VirtualBox Linux (vboxdrv) δεν φορτώθηκε ή υπάρχει πρόβλημα με δικαιώματα του /dev/vboxdrv. Εγκαταστήστε ξανά την υπομονάδα του πυρήνα εκτελώντας<br/><br/>  <font color="blue">'/etc/init.d/vboxdrv setup'</font><br/><br/>σαν διαχειριστής. Χρήστες των Ubuntu, Fedora ή Mandriva θα έπρεπε να εγκαταστήσουν πρώτα το πακέτο DKMS. Αυτό το πακέτο διατηρεί ένα αρχείο με τις αλλαγές στον [...]
-    </message>
-    <message>
         <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ο οδηγός πυρήνα του VirtualBox Linux (vboxdrv) δεν φορτώθηκε ή υπάρχει πρόβλημα με δικαιώματα του /dev/vboxdrv. Εγκαταστήστε ξανά την υπομονάδα του πυρήνα εκτελώντας<br/><br/>  <font color="blue">'/sbin/rcvboxdrv setup'</font><br/><br/>σαν διαχειριστής. Αν είναι διαθέσιμο για την έκδοσή σας, θα πρέπει να εγκαταστήσετε πρώτα το πακέτο DKMS. Αυτό το πακέτο διατηρεί ένα αρχείο με τις αλλαγές στον πυρήνα του Linux κ [...]
     </message>
 </context>
 <context>
@@ -167,10 +159,6 @@
         <translation>Μηχανή</translation>
     </message>
     <message>
-        <source>Automatically resize the guest display when the window is resized (requires Guest Additions)</source>
-        <translation type="obsolete">Αυτόματα αλλάζει η ανάλυση του επισκέπτη όταν το αλλάζει το παράθυρο (απαιτεί τις Προσθήκες Επισκέπτη)</translation>
-    </message>
-    <message>
         <source>&Adjust Window Size</source>
         <translation>Ρύθμιση Μεγέθους Παράθυρου</translation>
     </message>
@@ -179,26 +167,6 @@
         <translation>Ρύθμιση παραθύρου για τη καλύτερη ομοιότητα με την οθόνη επισκέπτη</translation>
     </message>
     <message>
-        <source>Disable &Mouse Integration</source>
-        <translation type="obsolete">Απενεργοποίηση ενσωμάτωσης ποντικιού</translation>
-    </message>
-    <message>
-        <source>Temporarily disable host mouse pointer integration</source>
-        <translation type="obsolete">Προσωρινή απενεργοποίηση ενσωμάτωσης δείκτη ποντικιού</translation>
-    </message>
-    <message>
-        <source>&Insert Ctrl-Alt-Del</source>
-        <translation type="obsolete">Εισαγωγή Ctrl-Alt-Del</translation>
-    </message>
-    <message>
-        <source>Send the Ctrl-Alt-Del sequence to the virtual machine</source>
-        <translation type="obsolete">Στείλτε την ακολουθία Ctrl-Alt-Del στην εικονική μηχανή</translation>
-    </message>
-    <message>
-        <source>Send the Ctrl-Alt-Backspace sequence to the virtual machine</source>
-        <translation type="obsolete">Στείλτε την ακολουθία Ctrl-Alt-Backspace στην εικονική μηχανή</translation>
-    </message>
-    <message>
         <source>Take a snapshot of the virtual machine</source>
         <translation>Πάρτε ένα στιγμιότυπο της εικονικής μηχανής</translation>
     </message>
@@ -223,16 +191,12 @@
         <translation>Τερματισμός ACPI</translation>
     </message>
     <message>
-        <source>Send the ACPI Power Button press event to the virtual machine</source>
-        <translation type="obsolete">Στείλτε την σήμανση πατήματος του κουμπιού ACPI στην εικονική μηχανή</translation>
-    </message>
-    <message>
         <source>&Close...</source>
         <translation>Κλείσιμο...</translation>
     </message>
     <message>
         <source>Close the virtual machine</source>
-        <translation>Κλείστε την εικονική μηχανή</translation>
+        <translation>Κλείσιμο εικονικής μηχανής</translation>
     </message>
     <message>
         <source>&View</source>
@@ -243,28 +207,8 @@
         <translation>Συσκευές</translation>
     </message>
     <message>
-        <source>&CD/DVD Devices</source>
-        <translation type="obsolete">Συσκευές CD/DVD</translation>
-    </message>
-    <message>
-        <source>&Floppy Devices</source>
-        <translation type="obsolete">Συσκευές δισκέτας</translation>
-    </message>
-    <message>
-        <source>&USB Devices</source>
-        <translation type="obsolete">Συσκευές USB</translation>
-    </message>
-    <message>
-        <source>Change the settings of network adapters</source>
-        <translation type="obsolete">Αλλαγή ρυθμίσεων προσαρμογέα</translation>
-    </message>
-    <message>
-        <source>Create or modify shared folders</source>
-        <translation type="obsolete">Δημιουργήστε ή αλλάξτε τους κοινούς φακέλους</translation>
-    </message>
-    <message>
         <source>De&bug</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποσφαλμάτωση</translation>
     </message>
     <message>
         <source>&Statistics...</source>
@@ -293,26 +237,10 @@
         <translation>Δείξτε το Εικονίδιο της Εφαρμογής</translation>
     </message>
     <message>
-        <source>Switch to &Fullscreen</source>
-        <translation type="obsolete">Αλλαγή σε πλήρη οθόνη</translation>
-    </message>
-    <message>
-        <source>Switch between normal and fullscreen mode</source>
-        <translation type="obsolete">Αλλαγή μεταξύ κανονικής και πλήρης οθόνης</translation>
-    </message>
-    <message>
-        <source>Switch to Seam&less Mode</source>
-        <translation type="obsolete">Αλλαγή σε ενσωματωμένη οθόνη</translation>
-    </message>
-    <message>
         <source>Switch between normal and seamless desktop integration mode</source>
         <translation>Αλλαγή μεταξύ κανονικής και ενσωματωμένης οθόνης</translation>
     </message>
     <message>
-        <source>Switch to &Scaled Mode</source>
-        <translation type="obsolete">Αλλαγή σε κλιμακώμενη οθόνη</translation>
-    </message>
-    <message>
         <source>Switch between normal and scaled mode</source>
         <translation>Αλλαγή μεταξύ κανονικής και κλιμακώμενης οθόνης</translation>
     </message>
@@ -325,10 +253,6 @@
         <translation>Ρυθμίσεις...</translation>
     </message>
     <message>
-        <source>Manage the virtual machine settings</source>
-        <translation type="obsolete">Διαχειριστείτε τις προτιμήσεις της εικονικής μηχανής</translation>
-    </message>
-    <message>
         <source>Session I&nformation...</source>
         <translation>Πληροφορίες συνεδρίας...</translation>
     </message>
@@ -350,11 +274,7 @@
     </message>
     <message>
         <source>&Network Operations Manager...</source>
-        <translation>Διαχειριστής Δικτυακών Επιχειρήσεων...</translation>
-    </message>
-    <message>
-        <source>Show Network Operations Manager</source>
-        <translation type="obsolete">Δείξτε τον Διαχειριστής Δικτυακών Επιχειρήσεων</translation>
+        <translation>Διαχειριστής Διαδικασιών Δικτύου...</translation>
     </message>
     <message>
         <source>Check for a new VirtualBox version</source>
@@ -365,10 +285,6 @@
         <translation>Πληροφορίες για το VirtualBox...</translation>
     </message>
     <message>
-        <source>Show a window with product information</source>
-        <translation type="obsolete">Δείξτε ένα παράθυρο με πληροφορίες για το προϊόν</translation>
-    </message>
-    <message>
         <source>Take Sn&apshot...</source>
         <translation>Νέο Στιγμιότυπο...</translation>
     </message>
@@ -377,14 +293,6 @@
         <translation>Νέο Στιγμιότυπο οθόνης...</translation>
     </message>
     <message>
-        <source>Take a screenshot of the virtual machine</source>
-        <translation type="obsolete">Πάρτε ένα στιγμιότυπο οθόνης της εικονικής μηχανής</translation>
-    </message>
-    <message>
-        <source>Ins&ert Ctrl-Alt-Backspace</source>
-        <translation type="obsolete">Εισαγωγή Ctrl-Alt-Del</translation>
-    </message>
-    <message>
         <source>&File</source>
         <comment>Mac OS X version</comment>
         <translation>Αρχείο</translation>
@@ -419,15 +327,6 @@
         <translation>Εξάγετε μία ή περισότερες εικονικές μηχανές του VirtualBox σαν συσκευή</translation>
     </message>
     <message>
-        <source>&Preferences...</source>
-        <comment>global settings</comment>
-        <translation type="obsolete">Προτιμήσεις...</translation>
-    </message>
-    <message>
-        <source>Display the global settings window</source>
-        <translation type="obsolete">Εμφανίστε το παράθυρο των προτιμήσεων του προγράμματος</translation>
-    </message>
-    <message>
         <source>E&xit</source>
         <translation>Έξοδος</translation>
     </message>
@@ -440,18 +339,6 @@
         <translation>Ομάδα</translation>
     </message>
     <message>
-        <source>Create a new virtual machine</source>
-        <translation type="obsolete">Δημιουργείστε μία καινούρια εικονική μηχανή</translation>
-    </message>
-    <message>
-        <source>Add an existing virtual machine</source>
-        <translation type="obsolete">Προσθέστε μία υπάρχουσα εικονική μηχανή</translation>
-    </message>
-    <message>
-        <source>Rename the selected virtual machine group</source>
-        <translation type="obsolete">Μετονομάστε την επιλεγμένη ομάδα μηχανών</translation>
-    </message>
-    <message>
         <source>S&tart</source>
         <translation>Ξεκίνημα</translation>
     </message>
@@ -460,26 +347,6 @@
         <translation>Εμφάνιση</translation>
     </message>
     <message>
-        <source>Re&fresh...</source>
-        <translation type="obsolete">Ανανέωση...</translation>
-    </message>
-    <message>
-        <source>Show in Finder</source>
-        <translation type="obsolete">Εμφάνιση στο Finder</translation>
-    </message>
-    <message>
-        <source>Show in Explorer</source>
-        <translation type="obsolete">Εμφάνιση στον Explorer</translation>
-    </message>
-    <message>
-        <source>Show in File Manager</source>
-        <translation type="obsolete">Εμφάνιση στο File Manager</translation>
-    </message>
-    <message>
-        <source>Show the VirtualBox Machine Definition file in the File Manager</source>
-        <translation type="obsolete">Δείξε το αρχείο ορισμού της Εικονικής Μηχανής VirtualBox στο File Manager</translation>
-    </message>
-    <message>
         <source>&New...</source>
         <translation>Νέα...</translation>
     </message>
@@ -488,18 +355,10 @@
         <translation>Προσθήκη...</translation>
     </message>
     <message>
-        <source>Add a new group based on the items selected</source>
-        <translation type="obsolete">Προσθέστε μία ομάδα βάσει των επιλεγμένων</translation>
-    </message>
-    <message>
         <source>Cl&one...</source>
         <translation>Κλωνοποίηση...</translation>
     </message>
     <message>
-        <source>Clone the selected virtual machine</source>
-        <translation type="obsolete">Κλωνοποιήστε την επιλεγμένη εικονική μηχανή</translation>
-    </message>
-    <message>
         <source>&Remove...</source>
         <translation>Αφαίρεση...</translation>
     </message>
@@ -508,16 +367,12 @@
         <translation>Αναίρεση</translation>
     </message>
     <message>
-        <source>D&iscard saved state...</source>
-        <translation type="obsolete">Αναίρεση σωσμένης κατάστασης...</translation>
-    </message>
-    <message>
         <source>&Close</source>
         <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Show &Log...</source>
-        <translation>Εμφάνιση αρχείου...</translation>
+        <translation>Εμφάνιση καταγραφής...</translation>
     </message>
     <message>
         <source>&VirtualBox Web Site...</source>
@@ -536,648 +391,539 @@
         <translation>Μετονομάστε την Ομάδα...</translation>
     </message>
     <message>
-        <source>Sort the items of the selected virtual machine group alphabetically</source>
-        <translation type="obsolete">Ταξινομήστε τις επιλεγμένες εικονικές μηχανές αλφαβητικά</translation>
+        <source>Po&wer Off</source>
+        <translation>Σβήσιμο</translation>
     </message>
     <message>
-        <source>Remove the selected virtual machines</source>
-        <translation type="obsolete">Αφαιρέστε τις επιλεγμένες εικονικές μηχανές</translation>
+        <source>&New Machine...</source>
+        <translation>Νέα Μηχανή...</translation>
     </message>
     <message>
-        <source>Start the selected virtual machines</source>
-        <translation type="obsolete">Αρχίστε τις επιλεγμένες εικονικές μηχανές</translation>
+        <source>&Add Machine...</source>
+        <translation>Προσθήκη Μηχανής...</translation>
     </message>
     <message>
-        <source>Switch to the windows of the selected virtual machines</source>
-        <translation type="obsolete">Αλλαγή στα παράθυρα των επιλεγμένων εικονικών μηχανών</translation>
+        <source>Gro&up</source>
+        <translation>Ομαδοποίηση</translation>
     </message>
     <message>
-        <source>Suspend the execution of the selected virtual machines</source>
-        <translation type="obsolete">Παγώστε τη λειτουργία των επιλεγμένων εικονικών μηχανών</translation>
+        <source>Shared &Clipboard</source>
+        <translation>Κοινά Πρόχειρα</translation>
     </message>
     <message>
-        <source>Reset the selected virtual machines</source>
-        <translation type="obsolete">Επαναφέρετε τις επιλεγμένες εικονικές μηχανές</translation>
+        <source>Power off the virtual machine</source>
+        <translation>Τερματισμός της εικονικής μηχανής</translation>
+    </message>
+    <message>
+        <source>&Network Settings...</source>
+        <translation>Ρυθμίσεις Δικτύου...</translation>
+    </message>
+    <message>
+        <source>&Shared Folders Settings...</source>
+        <translation>Ρυθμίσεις Κοινών Φακέλων...</translation>
+    </message>
+    <message>
+        <source>R&emote Display</source>
+        <translation>Απομακρυσμένη Οθόνη</translation>
     </message>
     <message>
-        <source>Discard the saved state of the selected virtual machines</source>
-        <translation type="obsolete">Αναιρέστε την σωσμένης κατάστασης των επιλεγμένων εικονικών μηχανών</translation>
+        <source>&Video Capture</source>
+        <translation>Μαγνητοσκόπηση</translation>
     </message>
     <message>
-        <source>Show the VirtualBox Machine Definition file in Finder</source>
-        <translation type="obsolete">Δείξε το αρχείο ορισμού της Εικονικής Μηχανής VirtualBox στο Finder</translation>
+        <source>&Video Capture Settings...</source>
+        <translation>Ρυθμίσεις μαγνητοσκόπησης...</translation>
     </message>
     <message>
-        <source>Show the VirtualBox Machine Definition file in Explorer</source>
-        <translation type="obsolete">Δείξε το αρχείο ορισμού της Εικονικής Μηχανής VirtualBox στον Explorer</translation>
+        <source>Popup Menu</source>
+        <translation>Αναδυόμενος κατάλογος επιλογών</translation>
     </message>
     <message>
-        <source>Create Alias on Desktop</source>
-        <translation type="obsolete">Δημιουργήστε μία συντόμευση στην επιφάνεια εργασίας</translation>
+        <source>&Webcams</source>
+        <translation>Κάμερες</translation>
     </message>
     <message>
-        <source>Creates an alias file to the VirtualBox Machine Definition file on your desktop</source>
-        <translation type="obsolete">Δημιουργήστε μία συντόμευση του αρχείου ορισμού της Εικονικής Μηχανής VirtualBox στην επιφάνεια εργασίας</translation>
+        <source>&Insert Guest Additions CD image...</source>
+        <translation>Εισάγετε τον δίσκο με τις Προσθήκες Επισκέπτη...</translation>
     </message>
     <message>
-        <source>Create Shortcut on Desktop</source>
-        <translation type="obsolete">Δημιουργήστε μία συντόμευση στην επιφάνεια εργασίας</translation>
+        <source>&VirtualBox</source>
+        <translation>&VirtualBox</translation>
     </message>
     <message>
-        <source>Creates an shortcut file to the VirtualBox Machine Definition file on your desktop</source>
-        <translation type="obsolete">Δημιουργήστε μία συντόμευση του αρχείου ορισμού της Εικονικής Μηχανής VirtualBox στην επιφάνεια εργασίας</translation>
+        <source>&Menu Bar</source>
+        <translation>Γραμμή κατάλογου επιλογών</translation>
     </message>
     <message>
-        <source>Save State</source>
-        <translation type="obsolete">Σώστε την κατάσταση</translation>
+        <source>&Menu Bar Settings...</source>
+        <translation>Ρυθμίσεις κατάλογου επιλογών...</translation>
     </message>
     <message>
-        <source>Save the machine state of the selected virtual machines</source>
-        <translation type="obsolete">Σώστε την κατάσταση των επιλεγμένων εικονικών μηχανών</translation>
+        <source>Show Menu &Bar</source>
+        <translation>Εμφάνιση κατάλογου επιλογών</translation>
     </message>
     <message>
-        <source>Send the ACPI Power Button press event to the selected virtual machines</source>
-        <translation type="obsolete">Στείλτε την σήμανση πατήματος του κουμπιού ACPI στην εικονική μηχανή</translation>
+        <source>&Status Bar</source>
+        <translation>Γραμμή κατάστασης</translation>
     </message>
     <message>
-        <source>Po&wer Off</source>
-        <translation>Σβήσιμο</translation>
+        <source>&Status Bar Settings...</source>
+        <translation>Ρυθμίσεις γραμμής κατάστασης...</translation>
     </message>
     <message>
-        <source>Power off the selected virtual machines</source>
-        <translation type="obsolete">Σβήστε τις επιλεγμένες εικονικές μηχανές</translation>
+        <source>Show Status &Bar</source>
+        <translation>Εμφάνιση γραμμής κατάστασης</translation>
     </message>
     <message>
-        <source>Show the log files of the selected virtual machine</source>
-        <translation type="obsolete">Δείξτε τα αρχεία συστήματος των επιλεγμένων εικονικών μηχανών</translation>
+        <source>&Input</source>
+        <translation>Είσοδος</translation>
     </message>
     <message>
-        <source>&New Machine...</source>
-        <translation>Νέα Μηχανή...</translation>
+        <source>&Keyboard</source>
+        <translation>Πληκτρολόγιο</translation>
     </message>
     <message>
-        <source>&Add Machine...</source>
-        <translation>Προσθήκη Μηχανής...</translation>
+        <source>&Keyboard Settings...</source>
+        <translation>Ρυθμίσεις πληκτρολογίου...</translation>
     </message>
     <message>
-        <source>&Ungroup...</source>
-        <translation type="obsolete">Απομαδοποίηση...</translation>
+        <source>&Mouse</source>
+        <translation>Ποντίκι</translation>
     </message>
     <message>
-        <source>Ungroup items of the selected virtual machine group</source>
-        <translation type="obsolete">Απομαδοποιήστε τις επιλεγμένες εικονικές μηχανές</translation>
+        <source>&USB Settings...</source>
+        <translation>Ρυθμίσεις USB...</translation>
     </message>
     <message>
-        <source>Sort</source>
-        <translation type="obsolete">Ταξινόμηση</translation>
+        <source>&Shared Folders</source>
+        <translation>Κοινοί Φάκελοι</translation>
     </message>
     <message>
-        <source>Gro&up</source>
-        <translation>Ομαδοποίηση</translation>
+        <source>Show &Log...</source>
+        <comment>debug action</comment>
+        <translation>Εμφάνιση καταγραφής...</translation>
     </message>
     <message>
-        <source>Sort the group of the first selected machine alphabetically</source>
-        <translation type="obsolete">Ταξινομήστε την ομάδα της πρώτης επιλεγμένης μηχανής αλφαβητικά</translation>
+        <source>E&xtra Data Manager...</source>
+        <translation>Διαχειριστής Επιπλέον Δεδομένων...</translation>
     </message>
     <message>
-        <source>Shared &Clipboard</source>
-        <translation>Κοινά Πρόχειρα</translation>
+        <source>Display the Extra Data Manager window</source>
+        <translation>Εμφανίστε τον Διαχειριστή Επιπλέον Δεδομένων</translation>
     </message>
     <message>
-        <source>Save the machine state of the virtual machine</source>
-        <translation type="obsolete">Σώστε την κατάσταση της εικονικής μηχανής</translation>
+        <source>&File</source>
+        <translation>Αρχείο</translation>
     </message>
     <message>
-        <source>Power off the virtual machine</source>
-        <translation>Σβήστε την εικονική μηχανή</translation>
+        <source>&Window</source>
+        <translation>Παράθυρο</translation>
     </message>
     <message>
-        <source>&Network Settings...</source>
-        <translation>Ρυθμίσεις Δικτύου...</translation>
+        <source>&Minimize</source>
+        <translation>Ελαχιστοποίηση</translation>
     </message>
     <message>
-        <source>&Shared Folders Settings...</source>
-        <translation>Ρυθμίσεις Κοινών Φακέλων...</translation>
+        <source>&Full-screen Mode</source>
+        <translation>Κατάσταση πλήρους οθόνης</translation>
     </message>
     <message>
-        <source>R&emote Display</source>
-        <translation>Απομακρυσμένη Οθόνη</translation>
+        <source>Switch between normal and full-screen mode</source>
+        <translation>Αλλαγή μεταξύ κανονικής και πλήρης οθόνης</translation>
     </message>
     <message>
-        <source>&Video Capture</source>
-        <translation>Εγγραφή βίντεο</translation>
+        <source>Seam&less Mode</source>
+        <translation>Ενσωματωμένη οθόνη</translation>
     </message>
     <message>
-        <source>Toggle video capture</source>
-        <translation type="obsolete">Εναλλαγή εγγραφής βίντεο</translation>
+        <source>S&caled Mode</source>
+        <translation>Κλιμακώμενη οθόνη</translation>
     </message>
     <message>
-        <source>&Video Capture Settings...</source>
-        <translation>Ρυθμίσεις εγγραφής βίντεο...</translation>
+        <source>S&cale Factor</source>
+        <translation>Συντελεστής κλίμακας</translation>
     </message>
     <message>
-        <source>&Logging...</source>
-        <comment>debug action</comment>
-        <translation type="obsolete">Αρχείο συστήματος...</translation>
+        <source>Send the %1 sequence to the virtual machine</source>
+        <translation>Στείλτε την %1 ακολουθία στην εικονική μηχανή</translation>
     </message>
     <message>
-        <source>Popup Menu</source>
-        <translation type="unfinished"></translation>
+        <source>&Mouse Integration</source>
+        <translation>Ενσωμάτωση ποντικιού</translation>
     </message>
     <message>
-        <source>Insert the Guest Additions disk file into the virtual drive</source>
-        <translation type="obsolete">Εισάγετε τον δίσκο με τις Προσθήκες Επισκέπτη στον εικονικό δίσκο</translation>
+        <source>Enable host mouse pointer integration</source>
+        <translation>Ενεργοποίηση ενσωμάτωσης δείκτη ποντικιού</translation>
     </message>
     <message>
-        <source>&Insert Guest Additions CD image...</source>
-        <translation>Εισάγετε τον δίσκο με τις Προσθήκες Επισκέπτη...</translation>
+        <source>&Optical Drives</source>
+        <translation>Οπτικές συσκευές</translation>
     </message>
     <message>
-        <source>Show Session Information Window</source>
-        <translation type="obsolete">Δείξτε το παράθυρο με τις πληροφορίες της συνερδίας</translation>
+        <source>&Floppy Drives</source>
+        <translation>Συσκευές δισκέτας</translation>
     </message>
     <message>
-        <source>&Webcams</source>
-        <translation>Κάμερες</translation>
+        <source>&USB</source>
+        <translation>&USB</translation>
     </message>
     <message>
-        <source>&VirtualBox</source>
-        <translation type="unfinished"></translation>
+        <source>&Logging</source>
+        <comment>debug action</comment>
+        <translation>Καταγραφή</translation>
     </message>
     <message>
-        <source>&File</source>
-        <translation type="unfinished">Αρχείο</translation>
+        <source>&Normal Start</source>
+        <translation>Κανονική εκκίνηση</translation>
     </message>
     <message>
-        <source>&Window</source>
-        <translation type="unfinished"></translation>
+        <source>&Headless Start</source>
+        <translation>Ακέφαλη εκκίνηση</translation>
     </message>
     <message>
-        <source>&Minimize</source>
-        <translation type="unfinished"></translation>
+        <source>&Detachable Start</source>
+        <translation>Αποσπώμενη εκκίνηση</translation>
     </message>
     <message>
         <source>Minimize active window</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελαχιστοποίηση ενεργού παραθύρου</translation>
     </message>
     <message>
         <source>Display the Network Operations Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε το παράθυρο του Διαχειριστή Διαδικασιών Δικτύου</translation>
     </message>
     <message>
         <source>Display a window with product information</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε ένα παράθυρο με πληροφορίες για το προϊόν</translation>
     </message>
     <message>
         <source>&Preferences...</source>
         <comment>global preferences window</comment>
-        <translation type="unfinished">Προτιμήσεις...</translation>
+        <translation>Προτιμήσεις...</translation>
     </message>
     <message>
         <source>Display the global preferences window</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε το παράθυρο των γενικών επιλογών</translation>
     </message>
     <message>
         <source>Display the virtual machine settings window</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε το παράθυρο των ρυθμίσεων της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>Display the virtual machine session information window</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε το παράθυρο με τις πληροφορίες της συνεδρίας της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>&Save State</source>
-        <translation type="unfinished"></translation>
+        <translation>Σώστε την κατάσταση</translation>
     </message>
     <message>
         <source>Save the state of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποθήκευση της κατάστασης της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>Send the ACPI Shutdown signal to the virtual machine</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Full-screen Mode</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Switch between normal and full-screen mode</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Seam&less Mode</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>S&caled Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Στείλτε το σήμα τερματισμού ACPI στην εικονική μηχανή</translation>
     </message>
     <message>
         <source>&Minimize Window</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελαχιστοποίηση παραθύρου</translation>
     </message>
     <message>
         <source>Automatically resize the guest display when the window is resized</source>
-        <translation type="unfinished"></translation>
+        <translation>Αυτόματα αλλάζει η ανάλυση του επισκέπτη όταν το αλλάζει το παράθυρο</translation>
     </message>
     <message>
         <source>Take guest display screenshot</source>
-        <translation type="unfinished"></translation>
+        <translation>Πάρτε ένα στιγμιότυπο οθόνης του επισκέπτη</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure video capture</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε το παράθυρο ρυθμίσεων της εικονικής μηχανής για τη διαμόρφωση της μαγνητοσκόπησης</translation>
     </message>
     <message>
         <source>Enable guest display video capture</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση μαγνητοσκόπησης επισκέπτη</translation>
     </message>
     <message>
         <source>Allow remote desktop (RDP) connections to this machine</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Menu Bar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Menu Bar Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιτρέπει συνδέσεις απομακρυσμένης οθόνης (RDP) σε αυτή τη μηχανή</translation>
     </message>
     <message>
         <source>Display window to configure menu-bar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Show Menu &Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίζει το παράθυρο για να διαμορφώσετε τον κατάλογο επιλογών</translation>
     </message>
     <message>
         <source>Enable menu-bar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Status Bar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Status Bar Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση κατάλογου επιλογών</translation>
     </message>
     <message>
         <source>Display window to configure status-bar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Show Status &Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίζει το παράθυρο για να διαμορφώσετε τη γραμμή κατάστασης</translation>
     </message>
     <message>
         <source>Enable status-bar</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>S&cale Factor</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Input</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Keyboard</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Keyboard Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση γραμμής κατάστασης</translation>
     </message>
     <message>
         <source>Display global preferences window to configure keyboard shortcuts</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε το παράθυρο των ρυθμίσεων συντομεύσεων πληκτρολογίου</translation>
     </message>
     <message>
         <source>&Insert %1</source>
         <comment>that means send the %1 key sequence to the virtual machine</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Send the %1 sequence to the virtual machine</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Mouse</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Mouse Integration</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Enable host mouse pointer integration</source>
-        <translation type="unfinished"></translation>
+        <translation>Εισάγετε %1</translation>
     </message>
     <message>
         <source>&Hard Disks</source>
-        <translation type="unfinished"></translation>
+        <translation>Σκληροί δίσκοι</translation>
     </message>
     <message>
         <source>&Hard Disk Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίσεις Σκληρών Δίσκων...</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure hard disks</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Optical Drives</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Floppy Drives</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε το παράθυρο των ρυθμίσεων σκληρών δίσκων της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>&Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυο</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure network adapters</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&USB</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&USB Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε το παράθυρο των ρυθμίσεων καρτών δικτύου της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure USB devices</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε το παράθυρο των ρυθμίσεων συσκευών USB της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>&Drag and Drop</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Shared Folders</source>
-        <translation type="unfinished"></translation>
+        <translation>Μεταφορά και απόθεση</translation>
     </message>
     <message>
         <source>Display virtual machine settings window to configure shared folders</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίστε το παράθυρο των ρυθμίσεων κοινών φακέλων της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>Insert the Guest Additions disk file into the virtual optical drive</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Logging</source>
-        <comment>debug action</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Show &Log...</source>
-        <comment>debug action</comment>
-        <translation type="unfinished">Εμφάνιση αρχείου...</translation>
+        <translation>Εισάγετε τον δίσκο με τις Προσθήκες Επισκέπτη στον εικονικό οπτικό δίσκο</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"></translation>
+        <translation>Ενεργοποίηση</translation>
     </message>
     <message>
         <source>Resize to %1x%2</source>
         <comment>Virtual Screen</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ανάλυση σε %1x%2</translation>
     </message>
     <message>
         <source>Preview Monitor %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Προεπισκόπηση οθόνης %1</translation>
     </message>
     <message>
         <source>&Connect Network Adapter</source>
-        <translation type="unfinished"></translation>
+        <translation>Σύνδεση Κάρτας Δικτύου</translation>
     </message>
     <message>
         <source>Connect Network Adapter &%1</source>
-        <translation type="unfinished"></translation>
+        <translation>Σύνδεση Κάρτας Δικτύου %1</translation>
     </message>
     <message>
         <source>No USB Devices Connected</source>
-        <translation type="unfinished"></translation>
+        <translation>Καμμία συνδεδεμένη συσκευή USB</translation>
     </message>
     <message>
         <source>No supported devices connected to the host PC</source>
-        <translation type="unfinished"></translation>
+        <translation>Καμμία συνδεδεμένη υποστηριζόμενη συσκευή στον οικοδεσπότη</translation>
     </message>
     <message>
         <source>No Webcams Connected</source>
-        <translation type="unfinished"></translation>
+        <translation>Καμμία συνδεδεμένη κάμερα</translation>
     </message>
     <message>
         <source>No supported webcams connected to the host PC</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>E&xtra Data Manager...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Display the Extra Data Manager window</source>
-        <translation type="unfinished"></translation>
+        <translation>Καμμία συνδεδεμένη υποστηριζόμενη κάμερα στον οικοδεσπότη</translation>
     </message>
     <message>
         <source>Create new virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργήστε νέα εικονική μηχανή</translation>
     </message>
     <message>
         <source>Add existing virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθέστε υπάρχουσα εικονική μηχανή</translation>
     </message>
     <message>
         <source>Rename selected virtual machine group</source>
-        <translation type="unfinished"></translation>
+        <translation>Μετονομάστε την επιλεγμένη ομάδα εικονικών μηχανών</translation>
     </message>
     <message>
         <source>&Ungroup</source>
-        <translation type="unfinished"></translation>
+        <translation>Απο-ομαδοποίηση</translation>
     </message>
     <message>
         <source>Ungroup items of selected virtual machine group</source>
-        <translation type="unfinished"></translation>
+        <translation>Απο-ομαδοποίηστε την επιλεγμένη ομάδα εικονικών μηχανών</translation>
     </message>
     <message>
         <source>&Sort</source>
-        <translation type="unfinished"></translation>
+        <translation>Ταξινόμηση</translation>
     </message>
     <message>
         <source>Sort items of selected virtual machine group alphabetically</source>
-        <translation type="unfinished"></translation>
+        <translation>Ταξινομήστε τις επιλεγμένες εικονικές μηχανές αλφαβητικά</translation>
     </message>
     <message>
         <source>Add new group based on selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη νέας ομάδας βάσει των επιλεγμένων εικονικών μηχανών</translation>
     </message>
     <message>
         <source>Clone selected virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλωνοποιήστε την επιλεγμένη εικονική μηχανή</translation>
     </message>
     <message>
         <source>Remove selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαιρέστε τις επιλεγμένες εικονικές μηχανές</translation>
     </message>
     <message>
         <source>Start selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Εκκίνηση των επιλεγμένων εικονικών μηχανών</translation>
     </message>
     <message>
         <source>Switch to the windows of selected virtual machines</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Normal Start</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Headless Start</source>
-        <translation type="unfinished"></translation>
+        <translation>Αλλαγή στα παράθυρα των επιλεγμένων εικονικών μηχανών</translation>
     </message>
     <message>
         <source>Start selected virtual machines in the background</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Detachable Start</source>
-        <translation type="unfinished"></translation>
+        <translation>Εκκίνηση των επιλεγμένων εικονικών μηχανών στο παρασκήνιο</translation>
     </message>
     <message>
         <source>Start selected virtual machines with option of continuing in background</source>
-        <translation type="unfinished"></translation>
+        <translation>Εκκίνηση των επιλεγμένων εικονικών μηχανών με επιλογή συνέχειας στο παρασκήνιο</translation>
     </message>
     <message>
         <source>Suspend execution of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Παγώστε τη λειτουργία των επιλεγμένων εικονικών μηχανών</translation>
     </message>
     <message>
         <source>Reset selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά των επιλεγμένων εικονικών μηχανών</translation>
     </message>
     <message>
         <source>D&iscard Saved State...</source>
-        <translation type="unfinished"></translation>
+        <translation>Απόρριψη της αποθηκευμένης κατάστασης...</translation>
     </message>
     <message>
         <source>Discard saved state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Απορρίψτε την σωσμένη κατάσταση των επιλεγμένων εικονικών μηχανών</translation>
     </message>
     <message>
         <source>Show log files of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση καταγραφών των επιλεγμένων εικονικών μηχανών</translation>
     </message>
     <message>
         <source>Re&fresh</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανανέωση</translation>
     </message>
     <message>
         <source>Refresh accessibility state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανανεώστε την κατάσταση προσβασιμότητας των επιλεγμένων εικονικών μηχανών</translation>
     </message>
     <message>
         <source>S&how in Finder</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση στον Finder</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in Finder</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείξε το αρχείο ορισμού της εικονικής μηχανής VirtualBox στον Finder</translation>
     </message>
     <message>
         <source>S&how in Explorer</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση στον Explorer</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in Explorer</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείξε το αρχείο ορισμού της εικονικής μηχανής VirtualBox στον Explorer</translation>
     </message>
     <message>
         <source>S&how in File Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση στον File Manager</translation>
     </message>
     <message>
         <source>Show the VirtualBox Machine Definition files in the File Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείξε το αρχείο ορισμού της εικονικής μηχανής VirtualBox στον File Manager</translation>
     </message>
     <message>
         <source>Cr&eate Alias on Desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργήστε μία συντόμευση στην επιφάνεια εργασίας</translation>
     </message>
     <message>
         <source>Create alias files to the VirtualBox Machine Definition files on your desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργήστε μία συντόμευση του αρχείου ορισμού της Εικονικής Μηχανής VirtualBox στην επιφάνεια εργασίας</translation>
     </message>
     <message>
         <source>Cr&eate Shortcut on Desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργήστε μία συντόμευση στην επιφάνεια εργασίας</translation>
     </message>
     <message>
         <source>Create shortcut files to the VirtualBox Machine Definition files on your desktop</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργήστε μία συντόμευση του αρχείου ορισμού της Εικονικής Μηχανής VirtualBox στην επιφάνεια εργασίας</translation>
     </message>
     <message>
         <source>Sort group of first selected virtual machine alphabetically</source>
-        <translation type="unfinished"></translation>
+        <translation>Ταξινομήστε την ομάδα της πρώτης εικονικής μηχανής αλφαβητικά</translation>
     </message>
     <message>
         <source>Save state of selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Σώστε την κατάσταση της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>Send ACPI Shutdown signal to selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Στείλτε το σήμα τερματισμού ACPI στην επιλεγμένη εικονική μηχανή</translation>
     </message>
     <message>
         <source>Power off selected virtual machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Τερματισμός των επιλεγμένων εικονικών μηχανών</translation>
     </message>
 </context>
 <context>
     <name>UIAddDiskEncryptionPasswordDialog</name>
     <message>
+        <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>Η εικονική μηχανή είναι προστατευμένη με κωδικό. Παρακαλούμε εισάγετε τον κωδικό κρυπρογράφησης πιο κάτω.</numerusform>
+            <numerusform>Η εικονική μηχανή είναι προστατευμένη με κωδικό. Παρακαλούμε εισάγετε τους %n κωδικούς κρυπρογράφησης πιο κάτω.</numerusform>
+        </translation>
+    </message>
+    <message>
         <source>ID</source>
         <comment>password table field</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αναγνωριστικό</translation>
     </message>
     <message>
         <source>Password</source>
         <comment>password table field</comment>
-        <translation type="unfinished"></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>
-    </message>
-    <message>
-        <source>%1 - Disk Encryption</source>
-        <translation type="unfinished"></translation>
+        <translation>Κωδικός</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>
+        <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>Χρησιμοποιείται από τον σκληρό δίσκο:</nobr><br>%1</numerusform>
+            <numerusform><nobr>Χρησιμοποιείται από τους %n σκληρούς δίσκους:</nobr><br>%1</numerusform>
         </translation>
     </message>
 </context>
@@ -1232,18 +978,6 @@
         <translation>Μνήμη</translation>
     </message>
     <message>
-        <source>Hard Disk Controller (IDE)</source>
-        <translation type="obsolete">Ελεγκτής Σκληρού Δίσκου (IDE)</translation>
-    </message>
-    <message>
-        <source>Hard Disk Controller (SATA)</source>
-        <translation type="obsolete">Ελεγκτής Σκληρού Δίσκου (SATA)</translation>
-    </message>
-    <message>
-        <source>Hard Disk Controller (SCSI)</source>
-        <translation type="obsolete">Ελεγκτής Σκληρού Δίσκου (SCSI)</translation>
-    </message>
-    <message>
         <source>DVD</source>
         <translation>DVD</translation>
     </message>
@@ -1284,32 +1018,28 @@
         <translation>Προειδοποιήσεις:</translation>
     </message>
     <message>
-        <source>Hard Disk Controller (SAS)</source>
-        <translation type="obsolete">Ελεγκτής Σκληρού Δίσκου (SAS)</translation>
-    </message>
-    <message>
         <source>When checked a new unique MAC address will assigned to all configured network cards.</source>
         <translation>Όταν επιλεγεί, μία νέα μοναδική διεύθυνση MAC θα ανατεθεί σε όλες τις ρυθμισμένες κάρτες δικτύου.</translation>
     </message>
     <message>
         <source>&Reinitialize the MAC address of all network cards</source>
-        <translation>Επαναρχικοποίησε τις διευθύνσεις MAC όλων των καρτών δικτύου</translation>
+        <translation>Επαναρχικοποιήστε τις διευθύνσεις MAC όλων των καρτών δικτύου</translation>
     </message>
     <message>
         <source>Storage Controller (IDE)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελεγκτής Αποθήκευσης (IDE)</translation>
     </message>
     <message>
         <source>Storage Controller (SATA)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελεγκτής Αποθήκευσης (SATA)</translation>
     </message>
     <message>
         <source>Storage Controller (SCSI)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελεγκτής Αποθήκευσης (SCSI)</translation>
     </message>
     <message>
         <source>Storage Controller (SAS)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελεγκτής Αποθήκευσης (SAS)</translation>
     </message>
 </context>
 <context>
@@ -1334,11 +1064,11 @@
     <name>UIDnDHandler</name>
     <message>
         <source>Dropping data ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Απόθεση δεδομένων...</translation>
     </message>
     <message>
         <source>Retrieving data ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανάκτηση δεδομένων...</translation>
     </message>
 </context>
 <context>
@@ -1349,7 +1079,7 @@
     </message>
     <message>
         <source>Downloading %1...</source>
-        <translation>Κατεβάζω %1...</translation>
+        <translation>Κατεβάζω το %1...</translation>
     </message>
 </context>
 <context>
@@ -1518,11 +1248,6 @@
         <translation>Απενεργοποιημένο</translation>
     </message>
     <message>
-        <source>[CD/DVD]</source>
-        <comment>details (storage)</comment>
-        <translation type="obsolete">[CD/DVD]</translation>
-    </message>
-    <message>
         <source>Controller</source>
         <comment>details (audio)</comment>
         <translation>Ελεγκτής</translation>
@@ -1610,27 +1335,27 @@
     <message>
         <source>Nested Paging</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ένθετη σελιδοποίηση</translation>
     </message>
     <message>
         <source>Video Memory</source>
         <comment>details (display)</comment>
-        <translation>Βιντεακή Μνήμη</translation>
+        <translation>Μνήμη Γραφικών</translation>
     </message>
     <message>
         <source>2D Video</source>
         <comment>details (display)</comment>
-        <translation>Βίντεο 2Δ</translation>
+        <translation>2Δ Γραφικά</translation>
     </message>
     <message>
         <source>Remote Desktop Server Port</source>
         <comment>details (display/vrde)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα διακομιστή απομακρυσμένης οθόνης</translation>
     </message>
     <message>
         <source>Remote Desktop Server</source>
         <comment>details (display/vrde)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Διακομιστής απομακρυσμένης οθόνης</translation>
     </message>
     <message>
         <source>Not Attached</source>
@@ -1645,7 +1370,7 @@
     <message>
         <source>Bridged Adapter, %1</source>
         <comment>details (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γεφυρωμένη Κάρτα, '%1'</translation>
     </message>
     <message>
         <source>Internal Network, '%1'</source>
@@ -1655,7 +1380,7 @@
     <message>
         <source>Host-only Adapter, '%1'</source>
         <comment>details (network)</comment>
-        <translation>Μόνο-με-οικοδεσπότη δίκτυο, '%1'</translation>
+        <translation>Μόνο-με-οικοδεσπότη κάρτα, '%1'</translation>
     </message>
     <message>
         <source>Generic Driver, '%1'</source>
@@ -1663,11 +1388,6 @@
         <translation>Γενικός Οδηγός, '%1'</translation>
     </message>
     <message>
-        <source>Generic Driver, '%1' {&nbsp;%2&nbsp;}</source>
-        <comment>details (network)</comment>
-        <translation type="obsolete">Γενικός Οδηγός, '%1' {&nbsp;%2&nbsp;}</translation>
-    </message>
-    <message>
         <source>Device Filters</source>
         <comment>details (usb)</comment>
         <translation>Φίλτρα Συσκευών</translation>
@@ -1685,17 +1405,17 @@
     <message>
         <source>Video Capture File</source>
         <comment>details (display/video capture)</comment>
-        <translation>Αρχείο εγγραφής βίντεο</translation>
+        <translation>Αρχείο Μαγνητοσκόπησης</translation>
     </message>
     <message>
         <source>Video Capture Attributes</source>
         <comment>details (display/video capture)</comment>
-        <translation>Ιδιότητες εγγραφής βίντεο</translation>
+        <translation>Ιδιότητες Μαγνητοσκόπησης</translation>
     </message>
     <message>
         <source>Video Capture</source>
         <comment>details (display/video capture)</comment>
-        <translation>Εγγραφή βίντεο</translation>
+        <translation>Μαγνητοσκόπηση</translation>
     </message>
     <message>
         <source>Disabled</source>
@@ -1714,102 +1434,102 @@
     <message>
         <source>Minimal Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ελάχιστη παραεικονοποίηση</translation>
     </message>
     <message>
         <source>Hyper-V Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Παραεικονοποίηση Hyper-V</translation>
     </message>
     <message>
         <source>KVM Paravirtualization</source>
         <comment>details (system)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Παραεικονοποίηση KVM</translation>
     </message>
     <message>
-        <source>Scale-factor</source>
-        <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <source>[Optical Drive]</source>
+        <comment>details (storage)</comment>
+        <translation>[Οπτική συσκευή]</translation>
     </message>
     <message>
-        <source>Unscaled HiDPI Video Output</source>
-        <comment>details (display)</comment>
-        <translation type="unfinished"></translation>
+        <source>USB Controller</source>
+        <comment>details (usb)</comment>
+        <translation>Ελεγκτής USB</translation>
     </message>
     <message>
-        <source>Enabled</source>
-        <comment>details (display/Unscaled HiDPI Video Output)</comment>
-        <translation type="unfinished"></translation>
+        <source>Mini-toolbar Position</source>
+        <comment>details (user interface)</comment>
+        <translation>Θέση μικρογραμμής εργαλείων</translation>
     </message>
     <message>
-        <source>[Optical Drive]</source>
-        <comment>details (storage)</comment>
-        <translation type="unfinished"></translation>
+        <source>Top</source>
+        <comment>details (user interface/mini-toolbar position)</comment>
+        <translation>Πάνω</translation>
     </message>
     <message>
-        <source>Generic Driver, '%1' { %2 }</source>
-        <comment>details (network)</comment>
-        <translation type="unfinished"></translation>
+        <source>Bottom</source>
+        <comment>details (user interface/mini-toolbar position)</comment>
+        <translation>Κάτω</translation>
     </message>
     <message>
-        <source>USB Controller</source>
-        <comment>details (usb)</comment>
-        <translation type="unfinished">Ελεγκτής USB</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>
+    </message>
+    <message>
+        <source>Scale-factor</source>
+        <comment>details (display)</comment>
+        <translation>Συντελεστής κλίμακας</translation>
+    </message>
+    <message>
+        <source>Unscaled HiDPI Video Output</source>
+        <comment>details (display)</comment>
+        <translation>Μη-κλιμακούμενη έξοδος γραφικών</translation>
+    </message>
+    <message>
+        <source>Enabled</source>
+        <comment>details (display/Unscaled HiDPI Video Output)</comment>
+        <translation>Ενεργοποιημένη</translation>
     </message>
     <message>
         <source>Menu-bar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γραμμή κατάλογου επιλογών</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (user interface/menu-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένη</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/menu-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>Status-bar</source>
         <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γραμμή κατάστασης</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details (user interface/status-bar)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποιημένη</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details (user interface/status-bar)</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Mini-toolbar Position</source>
-        <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Top</source>
-        <comment>details (user interface/mini-toolbar position)</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Bottom</source>
-        <comment>details (user interface/mini-toolbar position)</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Mini-toolbar</source>
-        <comment>details (user interface)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
-        <source>Disabled</source>
-        <comment>details (user interface/mini-toolbar)</comment>
-        <translation type="unfinished"></translation>
+        <source>Generic Driver, '%1' { %2 }</source>
+        <comment>details (network)</comment>
+        <translation>Γενικός Οδηγός, '%1' { %2 }</translation>
     </message>
 </context>
 <context>
@@ -1836,7 +1556,7 @@
     </message>
     <message>
         <source>Update disabled</source>
-        <translation>Απενεργοποιημένη ανανέωση</translation>
+        <translation>Απενεργοποιημένη ενημερώση</translation>
     </message>
     <message>
         <source>No preview</source>
@@ -1854,18 +1574,10 @@
         <translation>Πλάτος:</translation>
     </message>
     <message>
-        <source>Specifies the maximum width which we would like the guest to use.</source>
-        <translation type="obsolete">Προσδιορίζει το μέγιστο πλάτος που θέλουμε τον επισκέπτη να χρησιμοποιήσει.</translation>
-    </message>
-    <message>
         <source>&Height:</source>
         <translation>Ύψος:</translation>
     </message>
     <message>
-        <source>Specifies the maximum height which we would like the guest to use.</source>
-        <translation type="obsolete">Προσδιορίζει το μέγιστο ύψος που θέλουμε τον επισκέπτη να χρησιμοποιήσει.</translation>
-    </message>
-    <message>
         <source>Automatic</source>
         <comment>Maximum Guest Screen Size</comment>
         <translation>Αυτόματο</translation>
@@ -1881,7 +1593,7 @@
     </message>
     <message>
         <source>Do not attempt to limit the size of the guest screen.</source>
-        <translation>Μην επιχειρείς τον περιορισμό του μεγέθους της οθόνης του επισκέπτη.</translation>
+        <translation>Μην επιχειρείσετε τον περιορισμό του μεγέθους της οθόνης του επισκέπτη.</translation>
     </message>
     <message>
         <source>Hint</source>
@@ -1893,24 +1605,24 @@
         <translation>Προτείνει ένα μέγιστο μέγεθος οθόνης στον επισκέπτη. Ο επισκέπτης θα δει αυτή την πρόταση μόνο όταν έχουν εγκατασταθεί οι Προσθήκες Επισκέπτη.</translation>
     </message>
     <message>
-        <source>Holds the maximum width which we would like the guest to use.</source>
-        <translation type="unfinished"></translation>
+        <source>Machine Windows:</source>
+        <translation>Παράθυρα Μηχανής:</translation>
     </message>
     <message>
-        <source>Holds the maximum height which we would like the guest to use.</source>
-        <translation type="unfinished"></translation>
+        <source>&Raise Window Under Mouse</source>
+        <translation>Ανύψωση του παραθύρου κάτω απ' το ποντίκι</translation>
     </message>
     <message>
-        <source>Machine Windows:</source>
-        <translation type="unfinished"></translation>
+        <source>Holds the maximum width 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 type="unfinished"></translation>
+        <source>Holds the maximum height which we would like the guest to use.</source>
+        <translation>Δείχνει το μέγιστο ύψος που θέλουμε τον επισκέπτη να χρησιμοποιήσει.</translation>
     </message>
     <message>
-        <source>&Raise Window Under Mouse</source>
-        <translation type="unfinished"></translation>
+        <source>When checked, machine windows will be raised when the mouse pointer moves over them.</source>
+        <translation>Όταν επιλεγεί, τα παράθυρα των μηχανών θα ανυψώνονται όταν το ποντίκι είναι πάνω τους.</translation>
     </message>
 </context>
 <context>
@@ -1932,16 +1644,8 @@
         <translation>Έκδοση</translation>
     </message>
     <message>
-        <source>Add package</source>
-        <translation type="obsolete">Προσθήκη πακέτου</translation>
-    </message>
-    <message>
-        <source>Remove package</source>
-        <translation type="obsolete">Αφαίρεση πακέτου</translation>
-    </message>
-    <message>
         <source>Select an extension package file</source>
-        <translation>Επιλέξτε ένα αρχείο πακέτου επέκτασης</translation>
+        <translation>Επιλογή αρχείου πακέτου επέκτασης</translation>
     </message>
     <message>
         <source>Extension package files (%1)</source>
@@ -1957,30 +1661,30 @@
     </message>
     <message>
         <source>Add Package</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Πακέτου</translation>
     </message>
     <message>
         <source>Remove Package</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση Πακέτου</translation>
     </message>
     <message>
         <source>Adds new package.</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη νέου πακέτου.</translation>
     </message>
     <message>
         <source>Removes selected package.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαιρεί το επιλεγμένο πακέτο.</translation>
     </message>
 </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 type="unfinished"></translation>
+        <translation>Δείχνει τη διαδρομή για τον προεπιλεγμένο φάκελο των εικονικών μηχανών. Ο φάκελος χρησιμοποιείται, εκτός αν διευκρινιστεί ρητά αλλιώς, όταν δημιουργούνται νέες εικονικές μηχανές.</translation>
     </message>
     <message>
         <source>Holds the path to the library that provides authentication for Remote Display (VRDP) clients.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει τη διαδρομή για τη βιβλιοθήκη που παρέχει πιστοποίηση για τους πελάτες απομακρυσμένης οθόνης (VRDP).</translation>
     </message>
     <message>
         <source>Default &Machine Folder:</source>
@@ -1988,54 +1692,54 @@
     </message>
     <message>
         <source>V&RDP Authentication Library:</source>
-        <translation type="unfinished"></translation>
+        <translation>Βιβλιοθήκη πιστοποίησης V&RDP:</translation>
     </message>
     <message>
         <source>When checked, the host screensaver will be disabled whenever a virtual machine is running.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, η προστασία οθόνης του οικοδεσπότη είναι απενεργοποιημένη όταν τρέχει μία εικονική μηχανή.</translation>
     </message>
     <message>
         <source>Host Screensaver:</source>
-        <translation type="unfinished"></translation>
+        <translation>Προστασία οθόνης οικοδεσπότη:</translation>
     </message>
     <message>
         <source>&Disable When Running Virtual Machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποίηση όταν τρέχουν εικονικές μηχανές</translation>
     </message>
 </context>
 <context>
     <name>UIGlobalSettingsInput</name>
     <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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, το πληκτρολόγιο δεσμεύεται αυτόματα κάθε φορά που ενεργοποιείται το παράθυρο της ΕΜ. Όταν το πληκτρολόγιο δεσμεύεται, όλη η πληκτρολόγηση (συμπεριλαμβανομένου του συστήματος όπως Alt-Tab) κατευθύνονται στην ΕΜ.</translation>
     </message>
     <message>
         <source>&Auto Capture Keyboard</source>
-        <translation type="unfinished"></translation>
+        <translation>Αυτόματη Δέσμευση Πληκτρολογίου</translation>
     </message>
     <message>
         <source>Host Key Combination</source>
-        <translation type="unfinished"></translation>
+        <translation>Συνδυασμός Πλήκτρων Οικοδεσπότη</translation>
     </message>
     <message>
         <source>Some items have the same shortcuts assigned.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μερικά στοιχεία έχουν την ίδια συντόμευση.</translation>
     </message>
     <message>
         <source>&VirtualBox Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαχειριστής &VirtualBox</translation>
     </message>
     <message>
         <source>Virtual &Machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Εικονική Μηχανή</translation>
     </message>
     <message>
         <source>Lists all available shortcuts which can be configured.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει όλες τις διαθέσιμες συντομεύσεις που μπορούν να ρυθμιστούν.</translation>
     </message>
     <message>
         <source>Holds a sequence to filter the shortcut list.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει την ακολουθία φιλτραρίσματος των συντομεύσεων.</translation>
     </message>
 </context>
 <context>
@@ -2053,7 +1757,7 @@
     <message>
         <source><unknown></source>
         <comment>Author(s)</comment>
-        <translation><Άγνωστη></translation>
+        <translation><Άγνωστος></translation>
     </message>
     <message>
         <source>Default</source>
@@ -2138,7 +1842,7 @@
     <message>
         <source>Not set</source>
         <comment>length</comment>
-        <translation>Μη ορισμένη</translation>
+        <translation>Μη ορισμένο</translation>
     </message>
     <message>
         <source>DHCP Server</source>
@@ -2176,18 +1880,6 @@
         <translation>Ανώτερο όριο</translation>
     </message>
     <message>
-        <source>&Add host-only network</source>
-        <translation type="obsolete">Προσθήκη μόνο-με-οικοδεσπότη δίκτυο</translation>
-    </message>
-    <message>
-        <source>&Remove host-only network</source>
-        <translation type="obsolete">Αφαίρεση μόνο-με-οικοδεσπότη δίκτυο</translation>
-    </message>
-    <message>
-        <source>&Edit host-only network</source>
-        <translation type="obsolete">Επεξεργασία μόνο-με-οικοδεσπότη δικτύου</translation>
-    </message>
-    <message>
         <source>Lists all available host-only networks.</source>
         <translation>Δείχνει όλα τα διαθέσιμα μόνο-με-οικοδεσπότη δίκτυα.</translation>
     </message>
@@ -2213,23 +1905,23 @@
     </message>
     <message>
         <source>No new name specified for the NAT network previously called <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν καθορίστηκε καινούριο όνομα για το δίκτυο NAT που ονομαζόταν <b>%1</b>.</translation>
     </message>
     <message>
         <source>No CIDR specified for the NAT network <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν καθορίστηκε CIDR για το δίκτυο NAT <b>%1</b>.</translation>
     </message>
     <message>
         <source>No CIDR specified for the NAT network previously called <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Μη έγκυρη CIDR (<i>%1</i>) καθορίστηκε για το δίκτυο NAT <b>%2</b>.</translation>
     </message>
     <message>
         <source>Invalid CIDR specified (<i>%1</i>) for the NAT network previously called <b>%2</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μη έγκυρη CIDR (<i>%1</i>) καθορίστηκε για το δίκτυο NAT που ονομαζόταν <b>%2</b>.</translation>
     </message>
     <message>
         <source>Network Name</source>
@@ -2277,502 +1969,502 @@
     </message>
     <message>
         <source>Host interface <b>%1</b> does not currently have a valid IPv4 address.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Η κάρτα δικτύου <b>%1</b> δεν έχει έγκυρη μάσκα δικτύου IPv4.</translation>
     </message>
     <message>
         <source>Host interface <b>%1</b> does not currently have a valid IPv6 address.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Η κάρτα δικτύου <b>%1</b> δεν έχει έγκυρο ανώτατο όριο διεύθυνσης του διακομιστή DHCP.</translation>
     </message>
     <message>
         <source>The name <b>%1</b> is being used for several NAT networks.</source>
-        <translation type="unfinished"></translation>
+        <translation>Το όνομα <b>%1</b> χρησιμοποιείται για πολλαπλά δίκτυα NAT.</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>NAT network</comment>
-        <translation type="unfinished">Ενεργό</translation>
+        <translation>Ενεργό</translation>
     </message>
     <message>
         <source>Add NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Δικτύου NAT</translation>
     </message>
     <message>
         <source>Remove NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση Δικτύου NAT</translation>
     </message>
     <message>
         <source>Edit NAT Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία Δικτύου NAT</translation>
     </message>
     <message>
         <source>Adds new NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη νέου Δικτύου NAT.</translation>
     </message>
     <message>
         <source>Removes selected NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση του επιλεγμένου Δικτύου NAT.</translation>
     </message>
     <message>
         <source>Edits selected NAT network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία του επιλεγμένου Δικτύου NAT.</translation>
     </message>
     <message>
         <source>Add Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη μόνο-με-οικοδεσπότη δίκτυο</translation>
     </message>
     <message>
         <source>Remove Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση μόνο-με-οικοδεσπότη δίκτυο</translation>
     </message>
     <message>
         <source>Edit Host-only Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία μόνο-με-οικοδεσπότη δίκτυο</translation>
     </message>
     <message>
         <source>Adds new host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη νέου μόνο-με-οικοδεσπότη δίκτυο.</translation>
     </message>
     <message>
         <source>Removes selected host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση του επιλεγμένου μόνο-με-οικοδεσπότη δίκτυο.</translation>
     </message>
     <message>
         <source>Edits selected host-only network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία του επιλεγμένου μόνο-με-οικοδεσπότη δίκτυο.</translation>
     </message>
 </context>
 <context>
     <name>UIGlobalSettingsNetworkDetailsHost</name>
     <message>
         <source>Host-only Network Details</source>
-        <translation type="unfinished"></translation>
+        <translation>Λεπτομέρειες μόνο-με-οικοδεσπότη δικτύου</translation>
     </message>
     <message>
         <source>&Adapter</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάρτα δικτύου</translation>
     </message>
     <message>
         <source>Manual &Configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>Μη-αυτόματη ρύθμιση</translation>
     </message>
     <message>
         <source>&IPv4 Address:</source>
-        <translation type="unfinished"></translation>
+        <translation>Διεύθυνση IPv4:</translation>
     </message>
     <message>
         <source>Holds the host IPv4 address for this adapter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει τη διεύθυνση IPv4 του οικοδεσπότη για αυτή την κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>IPv4 Network &Mask:</source>
-        <translation type="unfinished"></translation>
+        <translation>Μάσκα Δικτύου IPv4:</translation>
     </message>
     <message>
         <source>Holds the host IPv4 network mask for this adapter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει τη μάσκα δικτύου IPv4 του οικοδεσπότη για αυτή την κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>I&Pv6 Address:</source>
-        <translation type="unfinished"></translation>
+        <translation>Διεύθυνση IPv6:</translation>
     </message>
     <message>
         <source>Holds the host IPv6 address for this adapter if IPv6 is supported.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει τη διεύθυνση IPv6 του οικοδεσπότη για αυτή την κάρτα δικτύου αν το IPv6 υποστηρίζεται.</translation>
     </message>
     <message>
         <source>IPv6 Network Mask &Length:</source>
-        <translation type="unfinished"></translation>
+        <translation>Μήκος Μάσκας Δικτύου IPv6:</translation>
     </message>
     <message>
         <source>Holds the host IPv6 network mask prefix length for this adapter if IPv6 is supported.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει το μήκος προθέματος της μάσκας δικτύου IPv6 του οικοδεσπότη για αυτή την κάρτα δικτύου αν το IPv6 υποστηρίζεται.</translation>
     </message>
     <message>
         <source>&DHCP Server</source>
-        <translation type="unfinished"></translation>
+        <translation>Διακομιστής DHCP</translation>
     </message>
     <message>
         <source>&Enable Server</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Διακομιστή</translation>
     </message>
     <message>
         <source>Server Add&ress:</source>
-        <translation type="unfinished"></translation>
+        <translation>Διεύθυνση Διακομιστή:</translation>
     </message>
     <message>
         <source>Holds the address of the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει τη διεύθυνση του διακομιστή DHCP που εξυπηρετεί το δίκτυο σχετιζόμενο με την μόνο-με-οικοδεσπότη κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>Server &Mask:</source>
-        <translation type="unfinished"></translation>
+        <translation>Μάσκα Διακομιστή:</translation>
     </message>
     <message>
         <source>Holds the network mask of the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει τη μάσκα δικτύου του διακομιστή DHCP που εξυπηρετεί το δίκτυο σχετιζόμενο με την μόνο-με-οικοδεσπότη κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>&Lower Address Bound:</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατώτερο Όριο Διευθύνσεων:</translation>
     </message>
     <message>
         <source>Holds the lower address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει το κατώτατο όριο διεύθυνσης του διακομιστή DHCP που εξυπηρετεί το δίκτυο σχετιζόμενο με την μόνο-με-οικοδεσπότη κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>&Upper Address Bound:</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανώτερο Όριο Διευθύνσεων:</translation>
     </message>
     <message>
         <source>Holds the upper address bound offered by the DHCP server servicing the network associated with this host-only adapter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει το ανώτατο όριο διεύθυνσης του διακομιστή DHCP που εξυπηρετεί το δίκτυο σχετιζόμενο με την μόνο-με-οικοδεσπότη κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>When checked, manual configuration will be used for this network adapter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, θα χρησιμοποιηθεί μη-αυτόματη ρύθμιση για αυτή την κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>When checked, the DHCP Server will be enabled for this network on machine start-up.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, θα ενεργοποιηθεί ο διακομιστής DHCP για αυτό το δίκτυο κατά την εκκίνηση της μηχανής.</translation>
     </message>
 </context>
 <context>
     <name>UIGlobalSettingsNetworkDetailsNAT</name>
     <message>
         <source>NAT Network Details</source>
-        <translation type="unfinished"></translation>
+        <translation>Λεπτομέρειες Δικτύου NAT</translation>
     </message>
     <message>
         <source>&Enable Network</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Δικτύου</translation>
     </message>
     <message>
         <source>Network &Name:</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα Δικτύου:</translation>
     </message>
     <message>
         <source>Holds the name for this network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει το όνομα αυτού του δικτύου.</translation>
     </message>
     <message>
         <source>Network &CIDR:</source>
-        <translation type="unfinished"></translation>
+        <translation>Δίκτυο CIDR:</translation>
     </message>
     <message>
         <source>Holds the CIDR for this network.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει το CIDR αυτού του δικτύου.</translation>
     </message>
     <message>
         <source>Network Options:</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογές Δικτύου:</translation>
     </message>
     <message>
         <source>Supports &DHCP</source>
-        <translation type="unfinished"></translation>
+        <translation>Υποστηρίζει &DHCP</translation>
     </message>
     <message>
         <source>Supports &IPv6</source>
-        <translation type="unfinished"></translation>
+        <translation>Υποστηρίζει &IPv6</translation>
     </message>
     <message>
         <source>Advertise Default IPv6 &Route</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαλάληση του προεπιλεγμένου δρομολογητή IPv6</translation>
     </message>
     <message>
         <source>&Port Forwarding</source>
-        <translation type="unfinished"></translation>
+        <translation>Προώθηση θύρας</translation>
     </message>
     <message>
         <source>When checked, this network will be enabled.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, αυτό το δίκτυο θα ενεργοποιηθεί.</translation>
     </message>
     <message>
         <source>When checked, this network will support DHCP.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, αυτό το δίκτυο θα υποστηρίζει DHCP.</translation>
     </message>
     <message>
         <source>When checked, this network will support IPv6.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, αυτό το δίκτυο θα υποστηρίζει IPv6.</translation>
     </message>
     <message>
         <source>When checked, this network will be advertised as the default IPv6 route.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, αυτό το δίκτυο θα διαλαλείται σαν τον προεπιλεγμένο δρομολογητή IPv6.</translation>
     </message>
     <message>
         <source>Displays a window to configure port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίζει το παράθυρο για τη διαμόρφωση των κανόνων προώθησης θυρών.</translation>
     </message>
 </context>
 <context>
     <name>UIGlobalSettingsPortForwardingDlg</name>
     <message>
         <source>Port Forwarding Rules</source>
-        <translation type="unfinished"></translation>
+        <translation>Κανόνες προώθησης θυρών</translation>
     </message>
     <message>
         <source>IPv4</source>
-        <translation type="unfinished"></translation>
+        <translation>IPv4</translation>
     </message>
     <message>
         <source>IPv6</source>
-        <translation type="unfinished"></translation>
+        <translation>IPv6</translation>
     </message>
 </context>
 <context>
     <name>UIGlobalSettingsProxy</name>
     <message>
         <source>Ho&st:</source>
-        <translation type="unfinished"></translation>
+        <translation>Οικοδεσπότης:</translation>
     </message>
     <message>
         <source>&Port:</source>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα:</translation>
     </message>
     <message>
         <source>No proxy host is currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν καθορίστηκε διακομιστής μεσολάβησης.</translation>
     </message>
     <message>
         <source>No proxy port is currently specified.</source>
-        <translation type="unfinished"></translation>
+        <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>
+        <source>Holds the proxy host.</source>
+        <translation>Δείχνει τον διακομιστή μεσολάβησης.</translation>
     </message>
     <message>
-        <source>&Auto-detect Host Proxy Settings</source>
-        <translation type="unfinished"></translation>
+        <source>Holds the proxy port.</source>
+        <translation>Δείχνει τον θύρα μεσολάβησης.</translation>
     </message>
     <message>
-        <source>When chosen, VirtualBox will use direct Internet connection for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <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>Όταν επιλεγεί, το VirtualBox θα προσπαθήσει να εντοπίσει αυτόματα τις ρυθμίσεις μεσολάβησης του οικοδεσπότη για ενέργειες όπως το κατέβασμα των Προσθηκών Επισκέπτη ή τον έλεγχο ενημερώσεων.</translation>
     </message>
     <message>
-        <source>&Direct Connection to the Internet</source>
-        <translation type="unfinished"></translation>
+        <source>&Auto-detect Host Proxy Settings</source>
+        <translation>Αυτόματη εντοπίση ρυθμίσεων μεσολάβησης του οικοδεσπότη</translation>
     </message>
     <message>
-        <source>When chosen, VirtualBox will use the proxy settings supplied for tasks like downloading Guest Additions from the network or checking for updates.</source>
-        <translation type="unfinished"></translation>
+        <source>When chosen, VirtualBox will use direct Internet connection for tasks like downloading Guest Additions from the network or checking for updates.</source>
+        <translation>Όταν επιλεγεί, το VirtualBox θα χρησιμοποιήσει απευθείας τη σύνδεση Internet για ενέργειες όπως το κατέβασμα των Προσθηκών Επισκέπτη ή τον έλεγχο ενημερώσεων.</translation>
     </message>
     <message>
-        <source>&Manual Proxy Configuration</source>
-        <translation type="unfinished"></translation>
+        <source>&Direct Connection to the Internet</source>
+        <translation>Απευθείας σύνδεση Internet</translation>
     </message>
     <message>
-        <source>Holds the proxy host.</source>
-        <translation type="unfinished"></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>Όταν επιλεγεί, το VirtualBox θα χρησιμοποιήσει τις παρεχόμενες ρυθμίσεις μεσολάβησης του οικοδεσπότη για ενέργειες όπως το κατέβασμα των Προσθηκών Επισκέπτη ή τον έλεγχο ενημερώσεων.</translation>
     </message>
     <message>
-        <source>Holds the proxy port.</source>
-        <translation type="unfinished"></translation>
+        <source>&Manual Proxy Configuration</source>
+        <translation>Μη-αυτόματη ρύθμιση μεσολάβησης</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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, η εφαρμογή θα συνδέεται περιοδικά στην ιστοσελίδα του VirtualBox και θα ελέγχει αν υπάρχει καινούρια έκδοση του VirtualBox.</translation>
     </message>
     <message>
         <source>&Check for Updates</source>
-        <translation type="unfinished"></translation>
+        <translation>Έλεγχος για ενημερώσεις</translation>
     </message>
     <message>
         <source>&Once per:</source>
-        <translation type="unfinished"></translation>
+        <translation>Κάθε:</translation>
     </message>
     <message>
         <source>Next Check:</source>
-        <translation type="unfinished"></translation>
+        <translation>Επόμενος έλεγχος:</translation>
     </message>
     <message>
         <source>Check for:</source>
-        <translation type="unfinished"></translation>
+        <translation>Έλεγχος για:</translation>
     </message>
     <message>
         <source><p>Choose this if you only wish to be notified about stable updates to VirtualBox.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Επιλέξτε το αν θέλετε να ειδοποιείστε μόνο για τις σταθερές ενημερώσεις του VirtualBox.</p></translation>
     </message>
     <message>
         <source>&Stable Release Versions</source>
-        <translation type="unfinished"></translation>
+        <translation>Σταθερές εκδόσεις</translation>
     </message>
     <message>
         <source><p>Choose this if you wish to be notified about all new VirtualBox releases.</p></source>
-        <translation type="unfinished"></translation>
+        <translation><p>Επιλέξτε το αν θέλετε να ειδοποιείστε για όλες τις εκδόσεις του VirtualBox.</p></translation>
     </message>
     <message>
         <source>&All New Releases</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Επιλέξτε το αν θέλετε να ειδοποιείστε για όλες τις εκδόσεις και προ-εκδόσεις του VirtualBox.</p></translation>
     </message>
     <message>
         <source>All New Releases and &Pre-Releases</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέγετε πόσο συχνά θα γίνεται ο έλεγχος για τις νέες εκδόσεις. Αν θέλετε να απενεργοποιήσετε εντελώς τον έλεγχο, απλώς καθαρίστε το παραπάνω κουτάκι.</translation>
     </message>
 </context>
 <context>
     <name>UIHelpButton</name>
     <message>
         <source>&Help</source>
-        <translation type="unfinished">Βοήθεια</translation>
+        <translation>Βοήθεια</translation>
     </message>
 </context>
 <context>
     <name>UIHostComboEditor</name>
     <message>
         <source><key_%1></source>
-        <translation type="unfinished"></translation>
+        <translation><key_%1></translation>
     </message>
     <message>
         <source>Left </source>
-        <translation type="unfinished"></translation>
+        <translation>Αριστερά</translation>
     </message>
     <message>
         <source>Right </source>
-        <translation type="unfinished"></translation>
+        <translation>Δεξιά</translation>
     </message>
     <message>
         <source>Left Shift</source>
-        <translation type="unfinished"></translation>
+        <translation>Αριστερό Shift</translation>
     </message>
     <message>
         <source>Right Shift</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεξιό Shift</translation>
     </message>
     <message>
         <source>Left Ctrl</source>
-        <translation type="unfinished"></translation>
+        <translation>Αριστερό Ctrl</translation>
     </message>
     <message>
         <source>Right Ctrl</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεξιό Ctrl</translation>
     </message>
     <message>
         <source>Left Alt</source>
-        <translation type="unfinished"></translation>
+        <translation>Αριστερό Alt</translation>
     </message>
     <message>
         <source>Right Alt</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεξιό Alt</translation>
     </message>
     <message>
         <source>Left WinKey</source>
-        <translation type="unfinished"></translation>
+        <translation>Αριστερό WinKey</translation>
     </message>
     <message>
         <source>Right WinKey</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεξιό WinKey</translation>
     </message>
     <message>
         <source>Menu key</source>
-        <translation type="unfinished"></translation>
+        <translation>Πλήκτρο Menu</translation>
     </message>
     <message>
         <source>Alt Gr</source>
-        <translation type="unfinished"></translation>
+        <translation>Alt Gr</translation>
     </message>
     <message>
         <source>Caps Lock</source>
-        <translation type="unfinished"></translation>
+        <translation>Κεφαλαία</translation>
     </message>
     <message>
         <source>Scroll Lock</source>
-        <translation type="unfinished"></translation>
+        <translation>Scroll Lock</translation>
     </message>
     <message>
         <source>Host+</source>
-        <translation type="unfinished"></translation>
+        <translation>Πλήκτρο οικοδεσπότη+</translation>
     </message>
     <message>
         <source>None</source>
-        <translation type="unfinished"></translation>
+        <translation>Κανένα</translation>
     </message>
 </context>
 <context>
     <name>UIHotKeyEditor</name>
     <message>
         <source>Reset shortcut to default</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά συντόμευσης στο προεπιλεγμένο</translation>
     </message>
     <message>
         <source>Unset shortcut</source>
-        <translation type="unfinished"></translation>
+        <translation>Απενεργοποίηση συντόμευσης</translation>
     </message>
 </context>
 <context>
     <name>UIHotKeyTableModel</name>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Όνομα</translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Shortcut</source>
-        <translation type="unfinished"></translation>
+        <translation>Συντόμευση</translation>
     </message>
 </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 type="unfinished"></translation>
+        <translation><b>Το εικονικό σύστημα "%1" απαιτεί να συμφωνήσετε με τους όρους και τις προϋποθέσεις της άδειας χρήσης λογισμικού πιο κάτω.</b><br /><br />Κάντε κλικ στο <b>Συμφωνώ</b> για να συνεχίσετε ή κάντε κλικ στο <b>Διαφωνώ</b> για να ακυρώσετε την εισαγωγή.</translation>
     </message>
     <message>
         <source>Software License Agreement</source>
-        <translation type="unfinished"></translation>
+        <translation>Άδεια χρήσης λογισμικού</translation>
     </message>
     <message>
         <source>&Disagree</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαφωνώ</translation>
     </message>
     <message>
         <source>&Agree</source>
-        <translation type="unfinished"></translation>
+        <translation>&Συμφωνώ</translation>
     </message>
     <message>
         <source>&Print...</source>
-        <translation type="unfinished"></translation>
+        <translation>Εκτύπωση...</translation>
     </message>
     <message>
         <source>&Save...</source>
-        <translation type="unfinished"></translation>
+        <translation>Σώσιμο...</translation>
     </message>
     <message>
         <source>Text (*.txt)</source>
-        <translation type="unfinished"></translation>
+        <translation>Κείμενο (*.txt)</translation>
     </message>
     <message>
         <source>Save license to file...</source>
-        <translation type="unfinished"></translation>
+        <translation>Σώστε την άδεια σε αρχείο...</translation>
     </message>
 </context>
 <context>
@@ -2780,674 +2472,674 @@
     <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><br><nobr><b>Κάρτα %1 (%2)</b>: %3 καλώδιο %4</nobr></translation>
     </message>
     <message>
         <source>connected</source>
         <comment>Network adapters tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>συνδεδεμένο</translation>
     </message>
     <message>
         <source>disconnected</source>
         <comment>Network adapters tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>αποσυνδεδεμένο</translation>
     </message>
     <message>
         <source><br><nobr><b>All network adapters are disabled</b></nobr></source>
         <comment>Network adapters tooltip</comment>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p style='white-space:pre'><nobr>Δείχνει δραστηριότητα των συνδεδεμένων συσκευών USB:</nobr>%1</p></translation>
     </message>
     <message>
         <source><br><nobr><b>No USB devices attached</b></nobr></source>
         <comment>USB device tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation><br><nobr><b>Καμμία συνδεδεμένη συσκευή USB</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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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_ [...]
-        <translation type="unfinished"></translation>
+        <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;η ενσωμάτωση ποντικιού (ΕΠ) είναι Ενεργή</nobr><br&g [...]
     </message>
     <message>
         <source><nobr>Indicates video capturing activity:</nobr><br>%1</source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Δείχνει δραστηριότητα μαγνητοσκόπησης:</nobr><br>%1</translation>
     </message>
     <message>
         <source><nobr><b>Video capture disabled</b></nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr><b>Η μαγνητοσκόπηση είναι ανενεργή</b></nobr></translation>
     </message>
     <message>
         <source><nobr><b>Video capture file:</b> %1</nobr></source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></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><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>Δείχνει δραστηριότητα των οπτικών δίσκων:</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>Δείχνει δραστηριότητα των δισκετών:</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>
+        <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>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>Δείχνει αν το πληκτρολόγιο του οικοδεσπότη είναι δεσμευμένο από τον επισκέπτη:<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>
     <name>UILineTextEdit</name>
     <message>
         <source>&Edit</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία</translation>
     </message>
 </context>
 <context>
     <name>UIMachineLogic</name>
     <message>
         <source>Select a filename for the screenshot ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογή ονόματος αρχείου για το στιγμιότυπου οθόνης ...</translation>
     </message>
 </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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, μία εικονική κάρτα ήχου PCI θα εμφανίζεται στην εικονική μηχανή και θα επικοινωνεί με το σύστημα ήχου του οικοδεσπότη χρησιμοποιώντας τον προσδιορισμένο οδηγό.</translation>
     </message>
     <message>
         <source>Enable &Audio</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Ήχου</translation>
     </message>
     <message>
         <source>Host Audio &Driver:</source>
-        <translation type="unfinished"></translation>
+        <translation>Οδηγός ήχου οικοδεσπότη:</translation>
     </message>
     <message>
         <source>Audio &Controller:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέγετε τον τύπο της εικονικής κάρτας ήχου. Αναλόγως με την τιμή, το VirtualBox θα παρέχει διαφορετική κάρτα ήχου στην εικονική μηχανή.</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 type="unfinished"></translation>
+        <translation>Επιλέγετε τον οδηγό ήχου εξόδου. Ο <b>Κενός οδηγός ήχουr</b> κάνει τον επισκέπτη να βλέπει μία κάρτα ήχου, αλλά οποιαδήποτε πρόσβαση σ' αυτή θα αγνοείται.</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsDisplay</name>
     <message>
         <source>Video &Memory:</source>
-        <translation type="unfinished"></translation>
+        <translation>Μνήμη Γραφικών:</translation>
     </message>
     <message>
         <source>Controls the amount of video memory provided to the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελέγχει το μέγεθος της μνήμης γραφικών που παρέχεται στην εικονική μηχανή.</translation>
     </message>
     <message>
         <source>MB</source>
-        <translation type="unfinished">MB</translation>
+        <translation>MB</translation>
     </message>
     <message>
         <source>Extended Features:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, η εικονική μηχανή θα έχει πρόσβαση στις 3Δ γραφικές δυνατότητες που είναι διαθέσιμες στον οικοδεσπότη.</translation>
     </message>
     <message>
         <source>Enable &3D Acceleration</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση 3Δ επιτάχυνσης</translation>
     </message>
     <message>
         <source>&Remote Display</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, η ΕΜ θα ενεργεί σαν διακομιστής απομακρυσμένης οθόνης (RDP server), επιτρέποντας σε απομακρυσμένους πελάτες να συνδεθούν και να διαχειριστούν την ΕΜ (όταν τρέχει) χρησιμοποιώντας κάποιο τυποποιημένο πρόγραμμα RDP.</translation>
     </message>
     <message>
         <source>&Enable Server</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Διακομιστή</translation>
     </message>
     <message>
         <source>Server &Port:</source>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα Διακομιστή:</translation>
     </message>
     <message>
         <source>Authentication &Method:</source>
-        <translation type="unfinished"></translation>
+        <translation>Μέθοδος πιστοποίησης:</translation>
     </message>
     <message>
         <source>Authentication &Timeout:</source>
-        <translation type="unfinished"></translation>
+        <translation>Χρονικό όριο πιστοποίησης:</translation>
     </message>
     <message>
         <source>When checked, the virtual machine will be given access to the Video Acceleration capabilities available on the host.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, η εικονική μηχανή θα έχει πρόσβαση στις δυνατότητες Επιτάχυνσης Γραφικών που είναι διαθέσιμες στον οικοδεσπότη.</translation>
     </message>
     <message>
         <source>Enable &2D Video Acceleration</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση 2Δ επιτάχυνσης</translation>
     </message>
     <message>
         <source>Mo&nitor Count:</source>
-        <translation type="unfinished"></translation>
+        <translation>Αριθμός Οθονών:</translation>
     </message>
     <message>
         <source>Controls the amount of virtual monitors provided to the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελέγχει τον αριθμό των εικονικών οθονών που παρέχονται στην εικονική μηχανή.</translation>
     </message>
     <message>
         <source>&Allow Multiple Connections</source>
-        <translation type="unfinished"></translation>
+        <translation>Επέτρεψε Πολλαπλές Συνδέσεις</translation>
     </message>
     <message>
         <source>Video &Capture</source>
-        <translation type="unfinished"></translation>
+        <translation>Μαγνητοσκόπηση</translation>
     </message>
     <message>
         <source>When checked, VirtualBox will record the virtual machine session as a video file.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, το VirtualBox θα καταγράφει τη συνεδρία της εικονικής μηχανής σε ένα αρχείο μαγνητοσκόπησης.</translation>
     </message>
     <message>
         <source>&Enable Video Capture</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Μαγνητοσκόπησης</translation>
     </message>
     <message>
         <source>File &Path:</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαδρομή αρχείου:</translation>
     </message>
     <message>
         <source>Frame &Size:</source>
-        <translation type="unfinished"></translation>
+        <translation>Μέγεθος εικόνας:</translation>
     </message>
     <message>
         <source>&Frame Rate:</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμός εικόνας:</translation>
     </message>
     <message>
         <source>&Quality:</source>
-        <translation type="unfinished"></translation>
+        <translation>Ποιότητα:</translation>
     </message>
     <message>
         <source>&Screens:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 for High Definition Video to be played efficiently.</source>
-        <translation type="unfinished"></translation>
+        <translation>Στην εικονική μηχανή έχει εκχωρηθεί λιγότερο από <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 type="unfinished"></translation>
+        <translation>Η εικονική μηχανή έχει ρυθμίσεις που χρησιμοποιούνε την Επιτάχυνση Βίντεο Συνεχούς Ροής (Video Stream). Μιας και αυτό το χαρακτηριστικό δουλεύει μόνο με συστήματα επισκεπτών Windows θα απενεργοποιηθεί.</translation>
     </message>
     <message>
         <source>The VRDE server port value is not currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Η τιμή της θύρας του διακομιστή VRDE δεν έχει καθοριστεί.</translation>
     </message>
     <message>
         <source>The VRDE authentication timeout value is not currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Η τιμή του χρονικού όριου πιστοποίησης του διακομιστή VRDE δεν έχει καθοριστεί.</translation>
     </message>
     <message>
         <source>User Defined</source>
-        <translation type="unfinished"></translation>
+        <translation>Καθορισμένο από τον χρήστη</translation>
     </message>
     <message>
         <source>%1 fps</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 fps</translation>
     </message>
     <message>
         <source>fps</source>
-        <translation type="unfinished"></translation>
+        <translation>fps</translation>
     </message>
     <message>
         <source>low</source>
         <comment>quality</comment>
-        <translation type="unfinished"></translation>
+        <translation>Χαμηλή</translation>
     </message>
     <message>
         <source>medium</source>
         <comment>quality</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μεσαία</translation>
     </message>
     <message>
         <source>high</source>
         <comment>quality</comment>
-        <translation type="unfinished"></translation>
+        <translation>Υψηλή</translation>
     </message>
     <message>
         <source>kbps</source>
-        <translation type="unfinished"></translation>
+        <translation>kbps</translation>
     </message>
     <message>
         <source>Screen %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Οθόνη %1</translation>
+    </message>
+    <message>
+        <source><i>About %1MB per 5 minute video</i></source>
+        <translation><i>Περίπου %1MB ανά 5 λεπτά μαγνητοσκόπησης</i></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>Η απομακρυσμένη οθόνη είναι ενεργοποιημένη για την εικονική μηχανή. Ωστόσο, αυτό απαιτεί να έχει εγκατασταθεί το <i>%1</i>. Παρακαλούμε εγκαταστήστε το Πακέτο Επέκτασης από τον ιστότοπο του VirtualBox γιατί διαφορετικά η ΕΜ θα ξεκινήσει με την απομακρυσμένη οθόνη απενεργοποιημένη.</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>Η εικονική μηχανή έχει ρυθμίσεις που χρησιμοποιούνε το υλικό της γραφικής επιτάχυνσης και η υπόδειξη για το λειτουργικό σύστημα είναι για Windows Vista ή μεταγενέστερο. Για την καλύτερη επίδοση επιλέξτε μνήμη γραφικών τουλάχιστον <b>%1</b>.</translation>
     </message>
     <message>
         <source>&Screen</source>
-        <translation type="unfinished"></translation>
+        <translation>Οθόνη</translation>
     </message>
     <message>
         <source>Scale Factor:</source>
-        <translation type="unfinished"></translation>
+        <translation>Συντελεστής κλίμακας:</translation>
     </message>
     <message>
         <source>Controls the guest screen scale factor.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελέγχει τον συντελεστή κλίμακας του επισκέπτη.</translation>
     </message>
     <message>
         <source>%</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>HiDPI Support:</source>
-        <translation type="unfinished"></translation>
+        <translation>%</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>Όταν επιλεγεί, τα περιεχόμενα της οθόνης του επισκέπτη δεν θα κλιμακωθούν για να αντισταθμίσουν την υψηλή ανάλυση οθόνης του οικοδεσπότη.</translation>
     </message>
     <message>
         <source>Use &Unscaled HiDPI Output</source>
-        <translation type="unfinished"></translation>
+        <translation>Μη-κλιμακούμενη έξοδος γραφικών</translation>
     </message>
     <message>
         <source>Acceleration:</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιτάχυνση:</translation>
+    </message>
+    <message>
+        <source>HiDPI Support:</source>
+        <translation>Υποστηρίζει HiDPI:</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>Δείχνει την θύρα του διακομιστή VRDP. Μπορείτε να προσδιορίσετε <tt>0</tt> (μηδέν), για να διαλέξετε την θύρα 3389, την τυπική θύρα για RDP.</translation>
     </message>
     <message>
         <source>Selects the VRDP authentication method.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέγει τη μέθοδο πιστοποίησης VRDP.</translation>
     </message>
     <message>
         <source>Holds the timeout for guest authentication, in milliseconds.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει το χρονικό όριο πιστοποίησης του επισκέπτη, σε χιλιοστά του δευτερολέπτου.</translation>
     </message>
     <message>
         <source>When checked, multiple simultaneous connections to the VM are permitted.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, επιτρέπονται πολλαπλές σύγχρονες συνδέσεις στην ΕΜ.</translation>
     </message>
     <message>
         <source>Holds the filename VirtualBox uses to save the recorded content.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει το όνομα του αρχείου στο οποίο το VirtualBox σώζει τα περιεχόμενα της μαγνητοσκόπησης.</translation>
     </message>
     <message>
         <source>Selects the resolution (frame size) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε την ανάλυση (μέγεθος εικόνας) της μαγνητοσκόπησης.</translation>
     </message>
     <message>
         <source>Holds the <b>horizontal</b> resolution (frame width) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει την <b>οριζόντια</b> ανάλυση (πλάτος εικόνας) της μαγνητοσκόπησης.</translation>
     </message>
     <message>
         <source>Holds the <b>vertical</b> resolution (frame height) of the recorded video.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Δείχνει το ρυθμό μετάδοσης σε <b>kilobits ανά δευτερόλεπτο</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 type="unfinished"></translation>
-    </message>
-    <message>
-        <source>The virtual machine is set up to use hardware graphics acceleration and the operating system hint is set to Windows Vista or later. For best performance you should set the machine's video memory to at least <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>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>Στην εικονική μηχανή έχει εκχωρηθεί λιγότερο από <b>%1</b> μνήμης γραφικών, το οποίο είναι το ελάχιστο ποσό που απαιτείται για να αλλάξετε σε πλήρη ή ενσωματωμένη οθόνη.</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>
-    </message>
-    <message>
-        <source><i>About %1MB per 5 minute video</i></source>
-        <translation type="unfinished"></translation>
+        <translation>%1%</translation>
     </message>
     <message>
         <source>When checked, enables video recording for screen %1.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, ενεργοποιεί τη μαγνητοσκόπηση για την οθόνη %1.</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsGeneral</name>
     <message>
-        <source>&Shared Clipboard:</source>
-        <translation type="unfinished"></translation>
+        <source>Basi&c</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 type="unfinished"></translation>
+        <source>A&dvanced</source>
+        <translation>Προχωρημένο</translation>
     </message>
     <message>
-        <source>S&napshot Folder:</source>
-        <translation type="unfinished"></translation>
+        <source>&Shared Clipboard:</source>
+        <translation>Κοινά Πρόχειρα:</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 type="unfinished"></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>Selects which data will be copied between the guest and the host OS by drag'n'drop. This feature requires Guest Additions to be installed in the guest OS.</source>
-        <translation type="unfinished"></translation>
+        <source>S&napshot Folder:</source>
+        <translation>Φάκελος Στιγμιότυπων:</translation>
     </message>
     <message>
-        <source>No name specified for the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <source>D&escription</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 type="unfinished"></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>Basi&c</source>
-        <translation type="unfinished"></translation>
+        <source>D&rag'n'Drop:</source>
+        <translation>Μεταφορά και απόθεση:</translation>
     </message>
     <message>
-        <source>A&dvanced</source>
-        <translation type="unfinished"></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>D&rag'n'Drop:</source>
-        <translation type="unfinished"></translation>
+        <source>No name specified for the virtual machine.</source>
+        <translation>Δεν καθορίστηκε όνομα για την εικονική μηχανή.</translation>
     </message>
     <message>
-        <source>D&escription</source>
-        <translation type="unfinished"></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-bit. Τα συστήματα 64-bit απαιτούνε εικονοποίηση του υλικού, οπότε αυτό θα ενεργοποιηθεί αυτόματα αν επιβεβαιώσετε τις αλλαγές.</translation>
     </message>
     <message>
         <source>Enc&ryption</source>
-        <translation type="unfinished"></translation>
+        <translation>Κρυπτογράφηση</translation>
     </message>
     <message>
         <source>When checked, enables encryption for this virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, ενεργοποιεί την κρυπτογράφηση για αυτή την εικονική μηχανή.</translation>
     </message>
     <message>
         <source>En&able Encryption</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Κρυπτογράφησης</translation>
     </message>
     <message>
         <source>Encryption C&ipher:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Selects the cipher to be used for encrypting the virtual machine disks.</source>
-        <translation type="unfinished"></translation>
+        <translation>Κωδικοποίηση κρυπρογράφησης:</translation>
     </message>
     <message>
         <source>E&nter New Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>Εισάγετε το Νέο Κωδικό:</translation>
     </message>
     <message>
         <source>Holds the password to be assigned to the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει τον κωδικό που θα χρησιμοποιηθεί στην εικονική μηχανή.</translation>
     </message>
     <message>
         <source>C&onfirm New Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιβεβαιώστε το Νέο Κωδικό:</translation>
     </message>
     <message>
         <source>Confirms the password to be assigned to the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Προσπαθείτε να κρυπτογραφήσετε την εικονική μηχανή. Ωστόσο, αυτό απαιτεί να έχει εγκατασταθεί το <i>%1</i>. Παρακαλούμε εγκαταστήστε το Πακέτο Επέκτασης από τον ιστότοπο του VirtualBox.</translation>
     </message>
     <message>
         <source>Encryption cipher type not specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ο τύπος της κωδικοποίηση κρυπρογράφησης δεν έχει καθοριστεί.</translation>
     </message>
     <message>
         <source>Encryption password empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>Κενός κωδικός κρυπτογράφησης.</translation>
     </message>
     <message>
         <source>Encryption passwords do not match.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Holds the path where snapshots of this virtual machine will be stored. Be aware that snapshots can take quite a lot of storage space.</source>
-        <translation type="unfinished"></translation>
+        <translation>Οι κωδικοί κρυπτογράφησης δεν ταιριάζουν.</translation>
     </message>
     <message>
         <source>Leave Unchanged</source>
         <comment>cipher type</comment>
-        <translation type="unfinished"></translation>
+        <translation>Χωρίς αλλαγή</translation>
+    </message>
+    <message>
+        <source>Selects the cipher to be used for encrypting the virtual machine disks.</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>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsInterface</name>
     <message>
         <source>Allows to modify VM menu-bar contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιτρέπει να αλλάξετε τα περιεχόμενα του κατάλογου επιλογών της ΕΜ.</translation>
     </message>
     <message>
         <source>Mini ToolBar:</source>
-        <translation type="unfinished"></translation>
+        <translation>Μικρογραμμή εργαλείων:</translation>
     </message>
     <message>
-        <source>When checked, show the Mini ToolBar in full-screen and seamless modes.</source>
-        <translation type="unfinished"></translation>
+        <source>Show at &Top of Screen</source>
+        <translation>Εμφάνιση στο Πάνω μέρος της Οθόνης</translation>
     </message>
     <message>
-        <source>Show in &Full-screen/Seamless</source>
-        <translation type="unfinished"></translation>
+        <source>Allows to modify VM status-bar contents.</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 type="unfinished"></translation>
+        <source>When checked, show the Mini ToolBar in full-screen and seamless modes.</source>
+        <translation>Όταν επιλεγεί, δείχνει την μικρογραμμή εργαλείων σε πλήρη και ενσωματωμένη λειτουργία.</translation>
     </message>
     <message>
-        <source>Show at &Top of Screen</source>
-        <translation type="unfinished"></translation>
+        <source>Show in &Full-screen/Seamless</source>
+        <translation>Εμφάνιση σε Πλήρη/Ενσωματωμένη Οθόνη</translation>
     </message>
     <message>
-        <source>Allows to modify VM status-bar contents.</source>
-        <translation type="unfinished"></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>
 </context>
 <context>
     <name>UIMachineSettingsNetwork</name>
     <message>
         <source>When checked, plugs this virtual network adapter into the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, ενεργοποιεί την εικονική κάρτα δικτύου στην εικονική μηχανή.</translation>
     </message>
     <message>
         <source>&Enable Network Adapter</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέγετε τον τύπο της εικονικής κάρτας δικτύου. Ανάλογα με την τιμή, το VirtualBox θα προσφέρει διαφορετικό υλικό δικτύου στην εικονική μηχανή.</translation>
     </message>
     <message>
         <source>&Attached to:</source>
-        <translation type="unfinished"></translation>
+        <translation>Συνδεδεμένη σε:</translation>
     </message>
     <message>
         <source>Adapter &Type:</source>
-        <translation type="unfinished"></translation>
+        <translation>Τύπος κάρτας:</translation>
     </message>
     <message>
         <source>Not selected</source>
         <comment>network adapter name</comment>
-        <translation type="unfinished"></translation>
+        <translation>Μη επιλεγμένο</translation>
     </message>
     <message>
         <source>&Name:</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα:</translation>
     </message>
     <message>
         <source>A&dvanced</source>
-        <translation type="unfinished"></translation>
+        <translation>Προχωρημένο</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 type="unfinished"></translation>
+        <translation>Δείχνει τη διεύθυνση MAC αυτής της κάρτας. Περιέχει ακριβώς 12 χαρακτήρες από το σύνολο {0-9,A-F}. Σημειώνεται οτι ο δεύτερος χαρακτήρας πρέπει να είναι ζυγός.</translation>
     </message>
     <message>
         <source>Generates a new random MAC address.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργεί μία νέα τυχαία διεύθυνση MAC.</translation>
     </message>
     <message>
         <source>&Cable Connected</source>
-        <translation type="unfinished"></translation>
+        <translation>Καλώδιο συνδεδεμένο</translation>
     </message>
     <message>
         <source>&Port Forwarding</source>
-        <translation type="unfinished"></translation>
+        <translation>Προώθηση θύρας</translation>
     </message>
     <message>
         <source>&Promiscuous Mode:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέγει την πολιτική λειτουργίας χωρίς κριτήρια για την κάρτα δικτύου όταν αυτή είναι συνδεδεμένη σε εσωτερικό, μόνο-με-οικοδεσπότη ή γεφυρωμένο δίκτυο.</translation>
     </message>
     <message>
         <source>Generic Properties:</source>
-        <translation type="unfinished"></translation>
+        <translation>Γενικές Ιδιότητες:</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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέγει την εικονική κάρτα δικτύου στον οικοδεσπότη από την οποία θα περάσει όλη η κίνηση από και πρός την κάρτα δικτύου. Μπορείτε να δημιουργήσετε και να αφαιρέσετε κάρτες χρησιμοποιόντας τις γενικές ρυθμίσεις δικτύου στο παράθυρο διαχείρισης εικονικών μηχανών.</translation>
     </message>
     <message>
         <source>Selects the driver to be used with this network card.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέγει τον οδηγό που θα χρησιμοποιηθεί μ' αυτή την κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>&MAC Address:</source>
-        <translation type="unfinished"></translation>
+        <translation>Διεύθυνση MAC:</translation>
     </message>
     <message>
         <source>No bridged network adapter is currently selected.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν έχει επιλεγεί γεφυρωμένη κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>No internal network name is currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν έχει προσδιοριστεί το όνομα του εσωτερικού δικτύου.</translation>
     </message>
     <message>
         <source>No host-only network adapter is currently selected.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν έχει επιλεγεί μόνο-με-οικοδεσπότη κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>No generic driver is currently selected.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν έχει επιλεγεί κάρτα δικτύου.</translation>
     </message>
     <message>
         <source>The MAC address must be 12 hexadecimal digits long.</source>
-        <translation type="unfinished"></translation>
+        <translation>Η διευθύνση MAC πρέπει να έχει μήκος 12 δεκαεξαεδικών ψηφίων.</translation>
     </message>
     <message>
         <source>The second digit in the MAC address may not be odd as only unicast addresses are allowed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Το δεύτερο ψηφίο στη διεύθυνση MAC δεν μπορεί να είναι μονός αριθμός καθώς μόνο μονοδιαδρομικές (unicast) διευθύνσεις επιτρέπονται.</translation>
     </message>
     <message>
         <source>No NAT network name is currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν έχει προσδιοριστεί το όνομα του δικτύου NAT.</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 type="unfinished"></translation>
+        <translation>Δείχνει το όνομα του δικτύου NAT στο οποίο θα συνδέεται αυτή η κάρτα δικτύου. Μπορείτε να δημιουργήσετε και να αφαιρέσετε δίκτυα χρησιμοποιόντας τις γενικές ρυθμίσεις δικτύου στο παράθυρο διαχείρισης εικονικών μηχανών.</translation>
     </message>
     <message>
         <source>Selects how this virtual adapter is attached to the real network of the Host OS.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέγει πώς αυτή η εικονική κάρτα είναι συνδεδεμένη στο πραγματικό δίκτυο του ΛΣ του οικοδεσπότη.</translation>
     </message>
     <message>
         <source>Shows additional network adapter options.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Δείχνει τις ρυθμίσεις του συνδεδεμένου οδηγού δικτύου. Οι ρυθμίσεις θα πρέπει να έχουν τη μορφή <b>όνομα=τιμή</b> και εξαρτώνται από τον οδηγό. Χρησιμοποιείστε <b>shift-enter</b> για να προσθέστε μία καινούρια καταχώρηση.</translation>
     </message>
     <message>
         <source>When checked, the virtual network cable is plugged in.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, το καλώδιο του εικονικού δικτύου είναι συνδεδεμένο.</translation>
     </message>
     <message>
         <source>Displays a window to configure port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφανίζει το παράθυρο για τη διαμόρφωση των κανόνων προώθησης θυρών.</translation>
     </message>
 </context>
 <context>
@@ -3455,192 +3147,192 @@
     <message>
         <source>Port %1</source>
         <comment>parallel ports</comment>
-        <translation type="unfinished">Θύρα %1</translation>
+        <translation>Θύρα %1</translation>
     </message>
     <message>
         <source>When checked, enables the given parallel port of the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, ενεργοποιεί την παράλληλη θύρα της εικονικής μηχανής.</translation>
     </message>
     <message>
         <source>&Enable Parallel Port</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Παράλληλης Θύρας</translation>
     </message>
     <message>
         <source>Port &Number:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Δείχνει τον αριθμό της παράλληλης θύρας. Μπορείτε να επιλέξετε μία από τις τυπικές παράλληλες πόρτες ή να επιλέξετε <b>Καθορισμένη από τον χρήστη</b> και να προσδιορίσετε εσείς τις παραμέτρους της θύρας.</translation>
     </message>
     <message>
         <source>&IRQ:</source>
-        <translation type="unfinished"></translation>
+        <translation>&IRQ:</translation>
     </message>
     <message>
         <source>I/O Po&rt:</source>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα Ε/Ε:</translation>
     </message>
     <message>
         <source>Port &Path:</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαδρομή θύρας:</translation>
     </message>
     <message>
         <source>Holds the host parallel device name.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Δείχνει το διεύθυνση θύρας Ε/Ε για αυτή την παράλληλη θύρα. Πρέπει να είναι ακέραιος αριθμός ανάμεσα στο <tt>0</tt> και το <tt>0xFFFF</tt>.</translation>
     </message>
     <message>
         <source>No IRQ is currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν καθορίστηκε το IRQ.</translation>
     </message>
     <message>
         <source>No I/O port is currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν καθορίστηκε θύρα Ε/Ε.</translation>
     </message>
     <message>
         <source>Two or more ports have the same settings.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δύο ή περισότερες θύρες έχουν τις ίδιες ρυθμίσεις.</translation>
     </message>
     <message>
         <source>No port path is currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν καθορίστηκε η διαδρομή της θύρας.</translation>
     </message>
     <message>
         <source>There are currently duplicate port paths specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Υπάρχουν διπλοκαθορισμένες διαδρομές θύρας.</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsPortForwardingDlg</name>
     <message>
         <source>Port Forwarding Rules</source>
-        <translation type="unfinished"></translation>
+        <translation>Κανόνες προώθησης θυρών</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsSF</name>
     <message>
         <source> Machine Folders</source>
-        <translation type="unfinished"></translation>
+        <translation> Φάκελοι Μηχανής</translation>
     </message>
     <message>
         <source> Transient Folders</source>
-        <translation type="unfinished"></translation>
+        <translation> Φάκελοι Μεταβατικοί</translation>
     </message>
     <message>
         <source>Full</source>
-        <translation type="unfinished"></translation>
+        <translation>Πλήρης</translation>
     </message>
     <message>
         <source>Read-only</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Δείχνει όλους τους κοινούς φακέλους προσβάσιμους απ' αυτή τη μηχανή. Χρησιμοποιήστε 'net use x: \\vboxsvr\share' για πρόσβαση του κοινού φακέλου ονόματι <i>share</i> από ένα λειτουργικό βασισμένο στο DOS, ή 'mount -t vboxsf share mount_point' για πρόσβαση του κοινού φακέλου από ένα λειτουργικό βασισμένο στο Linux. Αυτό το χαρακτηριστικό απαιτεί τις Προσθήκες Επισκέπτη.</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Όνομα</translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Path</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαδρομή</translation>
     </message>
     <message>
         <source>Access</source>
-        <translation type="unfinished"></translation>
+        <translation>Πρόσβαση</translation>
     </message>
     <message>
         <source>&Folders List</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατάλογος Φακέλων</translation>
     </message>
     <message>
         <source>Auto-mount</source>
-        <translation type="unfinished"></translation>
+        <translation>Αυτόματη προσάρτηση</translation>
     </message>
     <message>
         <source>Yes</source>
-        <translation type="unfinished">Ναι</translation>
+        <translation>Ναι</translation>
     </message>
     <message>
         <source>Add Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Κοινού Φακέλου</translation>
     </message>
     <message>
         <source>Edit Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία Κοινού Φακέλου</translation>
     </message>
     <message>
         <source>Remove Shared Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση Κοινού Φακέλου</translation>
     </message>
     <message>
         <source>Adds new shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθέτει έναν καινούριο κοινό φάκελο.</translation>
     </message>
     <message>
         <source>Edits selected shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία του επιλεγμένου κοινού φακέλου.</translation>
     </message>
     <message>
         <source>Removes selected shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαιρεί τον επιλεγμένο κοινό φάκελο.</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsSFDetails</name>
     <message>
         <source>Add Share</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Κοινού</translation>
     </message>
     <message>
         <source>Edit Share</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία Κοινού</translation>
     </message>
     <message>
         <source>Folder Path:</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαδρομή φακέλου:</translation>
     </message>
     <message>
         <source>Folder Name:</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα φακέλου:</translation>
     </message>
     <message>
         <source>Holds the name of the shared folder (as it will be seen by the guest OS).</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει το όνομα του κοινού φακέλου (όπως θα φαίνεται στο ΛΣ του επισκέπτη).</translation>
     </message>
     <message>
         <source>When checked, the guest OS will not be able to write to the specified shared folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, το ΛΣ του επισκέπτη δεν θα έχει δικαίωμα εγγραφής στον συγκεκριμένο κοινό φάκελο.</translation>
     </message>
     <message>
         <source>&Read-only</source>
-        <translation type="unfinished"></translation>
+        <translation>Μόνο ανάγνωση</translation>
     </message>
     <message>
         <source>&Make Permanent</source>
-        <translation type="unfinished"></translation>
+        <translation>Μόνιμος</translation>
     </message>
     <message>
         <source>When checked, the guest OS will try to automatically mount the shared folder on startup.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, το ΛΣ του επισκέπτη θα προσπαθήσει να προσαρτήσει τον κοινό φάκελο κατά την εκκίνηση.</translation>
     </message>
     <message>
         <source>&Auto-mount</source>
-        <translation type="unfinished"></translation>
+        <translation>Αυτόματη προσάρτηση</translation>
     </message>
     <message>
         <source>When checked, this shared folder will be permanent.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, ο κοινός φάκελος θα είναι μόνιμος.</translation>
     </message>
 </context>
 <context>
@@ -3648,591 +3340,591 @@
     <message>
         <source>Port %1</source>
         <comment>serial ports</comment>
-        <translation type="unfinished">Θύρα %1</translation>
+        <translation>Θύρα %1</translation>
     </message>
     <message>
         <source>When checked, enables the given serial port of the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, ενεργοποιεί την σειριακή θύρα της εικονικής μηχανής.</translation>
     </message>
     <message>
         <source>&Enable Serial Port</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Σειριακής Θύρας</translation>
     </message>
     <message>
         <source>Port &Number:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέγει τον αριθμό της σειριακής θύρας. Μπορείτε να διαλέξετε μία από τις τυπικές σειριακές θύρες ή να διαλέξετε <b>Καθορισμένη από τον χρήστη</b> και να προσδιορίσετε εσείς τις παραμέτρους της θύρας.</translation>
     </message>
     <message>
         <source>&IRQ:</source>
-        <translation type="unfinished"></translation>
+        <translation>&IRQ:</translation>
     </message>
     <message>
         <source>I/O Po&rt:</source>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα Ε/Ε:</translation>
     </message>
     <message>
         <source>Port &Mode:</source>
-        <translation type="unfinished"></translation>
+        <translation>Λειτουργία Θύρας:</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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <source>&Connect to existing pipe/socket</source>
+        <translation>Σύνδεση σε υπάρχων αγωγό/υποδοχή</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>
+        <source>&Path/Address:</source>
+        <translation>Διαδρομή/Διεύθυνση:</translation>
     </message>
     <message>
-        <source>&Connect to existing pipe/socket</source>
-        <translation type="unfinished"></translation>
+        <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" για συστήματα Windows και UNIX, αντίστοιχα.</p><p>Σε λειτουργία <b>Συσκευής Οικοδεσπότη</b>: Δείχνει το όνομα της σειριακής συσκευής του οικοδεσπότη. Παραδείγματα: "COM1" ή "/dev/ttyS0".</p><p>Σε λειτουργία <b&gt [...]
     </message>
     <message>
-        <source>&Path/Address:</source>
-        <translation type="unfinished"></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><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>
+        <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>No IRQ is currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν καθορίστηκε το IRQ.</translation>
     </message>
     <message>
         <source>No I/O port is currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν καθορίστηκε θύρα Ε/Ε.</translation>
     </message>
     <message>
         <source>Two or more ports have the same settings.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δύο ή περισότερες θύρες έχουν τις ίδιες ρυθμίσεις.</translation>
     </message>
     <message>
         <source>No port path is currently specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν καθορίστηκε η διαδρομή της θύρας.</translation>
     </message>
     <message>
         <source>There are currently duplicate port paths specified.</source>
-        <translation type="unfinished"></translation>
+        <translation>Υπάρχουν διπλοκαθορισμένες διαδρομές θύρας.</translation>
     </message>
 </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 type="unfinished"></translation>
+        <translation><nobr><b>%1</b></nobr><br><nobr>Δίαυλος:&nbsp;&nbsp;%2</nobr><br><nobr>Τύπος:&nbsp;&nbsp;%3</nobr></translation>
     </message>
     <message>
         <source>Add Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Ελεγκτή</translation>
     </message>
     <message>
         <source>Add IDE Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Ελεγκτή IDE</translation>
     </message>
     <message>
         <source>Add SATA Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Ελεγκτή SATA</translation>
     </message>
     <message>
         <source>Add SCSI Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Ελεγκτή SCSI</translation>
     </message>
     <message>
         <source>Add Floppy Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Ελεγκτή Δισκέτας</translation>
     </message>
     <message>
         <source>Remove Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση Ελεγκτή</translation>
     </message>
     <message>
         <source>Add Attachment</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Προσαρτήματος</translation>
     </message>
     <message>
         <source>Add Hard Disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Σκληρού Δίσκου</translation>
     </message>
     <message>
         <source>Remove Attachment</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση Προσαρτήματος</translation>
     </message>
     <message>
         <source>Hard &Disk:</source>
-        <translation type="unfinished"></translation>
+        <translation>Σκληρός δίσκος:</translation>
     </message>
     <message>
         <source>&Storage Tree</source>
-        <translation type="unfinished"></translation>
+        <translation>Δέντρο Αποθήκευσης</translation>
     </message>
     <message>
         <source>Information</source>
-        <translation type="unfinished"></translation>
+        <translation>Πληροφορίες</translation>
     </message>
     <message>
         <source>The Storage Tree can contain several controllers of different types. This machine currently has no controllers.</source>
-        <translation type="unfinished"></translation>
+        <translation>Το Δέντρο Αποθήκευσης μπορεί να περιέχει ελεγκτές διαφορετικών τύπων. Η μηχανή αυτή τη στιγμή δεν έχει ελεγκτές.</translation>
     </message>
     <message>
         <source>Attributes</source>
-        <translation type="unfinished"></translation>
+        <translation>Ιδιότητες</translation>
     </message>
     <message>
         <source>&Name:</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα:</translation>
     </message>
     <message>
         <source>&Type:</source>
-        <translation type="unfinished"></translation>
+        <translation>Τύπος:</translation>
     </message>
     <message>
         <source>Selects the sub-type of the storage controller currently selected in the Storage Tree.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, επιτρέπει στον επισκέπτη να στείλει εντολές ATAPI απ' ευθείας στον οδηγό του οικοδεσπότη, το οποίο κάνει δυνατή τη χρήση εγγραφής CD/DVD του οικοδεσπότη από την ΕΜ. Σημειώστε οτι η εγγραφή CD ήχου δεν υποστηρίζεται ακόμα.</translation>
     </message>
     <message>
         <source>&Passthrough</source>
-        <translation type="unfinished"></translation>
+        <translation>Διερχόμενο</translation>
     </message>
     <message>
         <source>Virtual Size:</source>
-        <translation type="unfinished"></translation>
+        <translation>Εικονικό Μέγεθος:</translation>
     </message>
     <message>
         <source>Actual Size:</source>
-        <translation type="unfinished"></translation>
+        <translation>Πραγματικό μέγεθος:</translation>
     </message>
     <message>
         <source>Size:</source>
-        <translation type="unfinished"></translation>
+        <translation>Μέγεθος:</translation>
     </message>
     <message>
         <source>Location:</source>
-        <translation type="unfinished"></translation>
+        <translation>Τοποθεσία:</translation>
     </message>
     <message>
         <source>Type (Format):</source>
-        <translation type="unfinished"></translation>
+        <translation>Τύπος (Διαμόρφωση):</translation>
     </message>
     <message>
         <source>Attached to:</source>
-        <translation type="unfinished"></translation>
+        <translation>Συνδεδεμένο σε:</translation>
     </message>
     <message>
         <source>Use Host I/O Cache</source>
-        <translation type="unfinished"></translation>
+        <translation>Χρήση προσωρινής μνήμης Ε/Ε οικοδεσπότη</translation>
     </message>
     <message>
         <source>Add SAS Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Ελεγκτή SAS</translation>
     </message>
     <message>
         <source>Type:</source>
-        <translation type="unfinished"></translation>
+        <translation>Τύπος:</translation>
     </message>
     <message>
         <source>Host Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Οδηγός Οικοδεσπότη</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 type="unfinished"></translation>
+        <translation>Επιλέξτε ή δημιουργήστε έναν αρχείο εικονικού σκληρού δίσκου. Η εικονική μηχανή θα βλέπει τα δεδομένα στο αρχείο σαν τα περιεχόμενα του εικονικού δίσκου.</translation>
     </message>
     <message>
         <source>Floppy &Drive:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέξτε μία εικονική δισκέτα ή ένα πραγματικό οδηγό για χρήση από τον εικονικό οδηγό. Η εικονική μηχανή θα δει ένα δίσκο στον οδηγό, με περιεχόμενα τα δεδομένα στην εικονική δισκέτα ή στον πραγματικό οδηγό.</translation>
     </message>
     <message>
         <source>Remove disk from virtual drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση δίσκου από τον εικονικό οδηγό</translation>
     </message>
     <message>
         <source>&Live CD/DVD</source>
-        <translation type="unfinished"></translation>
+        <translation>Ζωντανό CD/DVD</translation>
     </message>
     <message>
         <source>&Solid-state Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Δίσκος στερεάς κατάστασης</translation>
     </message>
     <message>
         <source>Details:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Λεπτομέρειες:</translation>
     </message>
     <message>
         <source>at most one supported</source>
         <comment>controller</comment>
-        <translation type="unfinished"></translation>
+        <translation>υποστηρίζεται ένας το πολύ</translation>
     </message>
     <message>
         <source>up to %1 supported</source>
         <comment>controllers</comment>
-        <translation type="unfinished"></translation>
+        <translation>μέχρι %1 υποστηρίζονται</translation>
     </message>
     <message>
         <source>&Port Count:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέγει τον αριθμό θυρών του ελεγκτή SATA που έχει επιλεγεί στο Δέντρο Αποθήκευσης. Ο αριθμός πρέπει να είναι τουλάχιστον ένας παραπάνω από το μέγιστο αριθμό θυρών που χρειάζεστε.</translation>
     </message>
     <message>
         <source>Controller: %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελεγκτής: %1</translation>
     </message>
     <message>
         <source>No name is currently specified for the controller at position <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Ο ελεγκτής στη θέση <b>%1</b> έχει το ίδιο όνομα με τον ελεγκτή στη θέση <b>%2</b>.</translation>
     </message>
     <message>
         <source>No hard disk is selected for <i>%1</i>.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <source>Add USB Controller</source>
+        <translation>Προσθήκη Ελεγκτή USB</translation>
     </message>
     <message>
-        <source>Holds the name of the storage controller currently selected in the Storage Tree.</source>
-        <translation type="unfinished"></translation>
+        <source>&Hot-pluggable</source>
+        <translation>Άμεσης σύνδεσης</translation>
     </message>
     <message>
-        <source>When checked, allows to use host I/O caching capabilities.</source>
-        <translation type="unfinished"></translation>
+        <source>Add Optical Drive</source>
+        <translation>Προσθήκη Οπτικής Συσκευής</translation>
     </message>
     <message>
-        <source>When checked, the virtual disk will not be removed when the guest system ejects it.</source>
-        <translation type="unfinished"></translation>
+        <source>Add Floppy Drive</source>
+        <translation>Προσθήκη Συσκευής δισκέτας</translation>
     </message>
     <message>
-        <source>When checked, the guest system will see the virtual disk as a solid-state device.</source>
-        <translation type="unfinished"></translation>
+        <source>Optical &Drive:</source>
+        <translation>Οπτική συσκευή:</translation>
     </message>
     <message>
-        <source>When checked, the guest system will see the virtual disk as a hot-pluggable device.</source>
-        <translation type="unfinished"></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>&Hot-pluggable</source>
-        <translation type="unfinished"></translation>
+        <source>Encrypted with key:</source>
+        <translation>Κρυπτογραφημένο με κλειδί:</translation>
     </message>
     <message>
-        <source>Encrypted with key:</source>
-        <translation type="unfinished"></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>Choose disk image...</source>
-        <comment>This is used for hard disks, optical media and floppies</comment>
-        <translation type="unfinished"></translation>
+        <source>Holds the name of the storage controller currently selected in the Storage Tree.</source>
+        <translation>Δείχνει τον ελεγκτή αποθήκευσης που είναι επιλεγμένος στο Δέντρο Αποθήκευσης.</translation>
     </message>
     <message>
-        <source>Image</source>
-        <comment>storage image</comment>
-        <translation type="unfinished"></translation>
+        <source>When checked, allows to use host I/O caching capabilities.</source>
+        <translation>Όταν επιλεγεί, επιτρέπει τη χρήση προσωρινής μνήμης Ε/Ε του οικοδεσπότη.</translation>
     </message>
     <message>
-        <source><nobr>Expands/Collapses&nbsp;item.</nobr></source>
-        <translation type="unfinished"></translation>
+        <source>When checked, the virtual disk will not be removed when the guest system ejects it.</source>
+        <translation>Όταν επιλεγεί, ο εικονικός δίσκος δεν θα αφαιρεθεί όταν ο επισκέπτης τον εξάγει.</translation>
     </message>
     <message>
-        <source><nobr>Adds&nbsp;hard&nbsp;disk.</nobr></source>
-        <translation type="unfinished"></translation>
+        <source>When checked, the guest system will see the virtual disk as a solid-state device.</source>
+        <translation>Όταν επιλεγεί, ο επισκέπτης θα βλέπει τον εικονικό δίσκο σαν δίσκο στερεάς κατάστασης.</translation>
     </message>
     <message>
-        <source><nobr>Adds&nbsp;optical&nbsp;drive.</nobr></source>
-        <translation type="unfinished"></translation>
+        <source>When checked, the guest system will see the virtual disk as a hot-pluggable device.</source>
+        <translation>Όταν επιλεγεί, ο επισκέπτης θα βλέπει τον εικονικό δίσκο σαν δίσκο άμεσης σύνδεσης.</translation>
     </message>
     <message>
-        <source><nobr>Adds&nbsp;floppy&nbsp;drive.</nobr></source>
-        <translation type="unfinished"></translation>
+        <source>Image</source>
+        <comment>storage image</comment>
+        <translation>Εικόνα</translation>
     </message>
     <message>
-        <source>Add USB Controller</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>Expands/Collapses&nbsp;item.</nobr></source>
+        <translation><nobr>Ανάπτυξη/Σύμπτυξη&nbsp;αντικειμένου.</nobr></translation>
     </message>
     <message>
-        <source>Add Optical Drive</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>Adds&nbsp;hard&nbsp;disk.</nobr></source>
+        <translation><nobr>Πρόσθεση&nbsp;σκληρού&nbsp;δίσκου.</nobr></translation>
     </message>
     <message>
-        <source>Add Floppy Drive</source>
-        <translation type="unfinished"></translation>
+        <source><nobr>Adds&nbsp;optical&nbsp;drive.</nobr></source>
+        <translation><nobr>Πρόσθεση&nbsp;οπτικού&nbsp;οδηγού.</nobr></translation>
+    </message>
+    <message>
+        <source><nobr>Adds&nbsp;floppy&nbsp;drive.</nobr></source>
+        <translation><nobr>Πρόσθεση&nbsp;οδηγού&nbsp;δισκέτας.</nobr></translation>
     </message>
     <message>
         <source>Adds new storage controller.</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη νέου ελεγκτή αποθήκευσης.</translation>
     </message>
     <message>
         <source>Removes selected storage controller.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση του επιλεγμένου ελεγκτή αποθήκευσης.</translation>
     </message>
     <message>
         <source>Adds new storage attachment.</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη νέου προσαρτήματος αποθήκευσης.</translation>
     </message>
     <message>
         <source>Removes selected storage attachment.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Optical &Drive:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Choose a virtual optical disk or a physical drive to use with the virtual drive. The virtual machine will see a disk inserted into the drive with the data in the file or on the disk in the physical drive as its contents.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση του επιλεγμένου προσαρτήματος αποθήκευσης.</translation>
     </message>
     <message>
         <source>Create New Hard Disk...</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργείστε Νέο Σκληρό Δίσκο...</translation>
     </message>
     <message>
         <source>Choose Virtual Hard Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε Αρχείο Εικονικού Σκληρού Δίσκου...</translation>
     </message>
     <message>
         <source>Choose Virtual Optical Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε Αρχείο Εικονικού Οπτικού Δίσκου...</translation>
     </message>
     <message>
         <source>Remove Disk from Virtual Drive</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση Δίσκου από τον Εικονικό Οδηγό</translation>
     </message>
     <message>
         <source>Choose Virtual Floppy Disk File...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε Αρχείο Εικονικής Δισκέτας...</translation>
+    </message>
+    <message>
+        <source>Choose disk image...</source>
+        <comment>This is used for hard disks, optical media and floppies</comment>
+        <translation>Επιλέξτε εικόνα δίσκου...</translation>
     </message>
 </context>
 <context>
     <name>UIMachineSettingsSystem</name>
     <message>
         <source>&Motherboard</source>
-        <translation type="unfinished"></translation>
+        <translation>Μητρική</translation>
     </message>
     <message>
         <source>Base &Memory:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Ελέγχει το μέγεθος της μνήμης που παρέχεται στην εικονική μηχανή. Αν εκχωρήσετε πολύ, η μηχανή μπορεί να μην ξεκινήσει.</translation>
     </message>
     <message>
         <source>MB</source>
-        <translation type="unfinished">MB</translation>
+        <translation>MB</translation>
     </message>
     <message>
         <source>&Boot Order:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Καθορίζει τη σειρά εκκίνησης. Χρησιμοποιήστε τα πλαίσια ελέγχου στα αριστερά για να ενεργοποιήσετε/απενενεργοποιήσετε επιλεγμένες συσκευές. Μετακινήστε τις συσκευές προς τα πάνω ή κάτω για να αλλάξετε τη σειρά των συσκευών.</translation>
     </message>
     <message>
         <source>Moves the selected boot device down.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μετακινεί την επιλεγμένη συσκευή προς τα κάτω.</translation>
     </message>
     <message>
         <source>Moves the selected boot device up.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μετακινεί την επιλεγμένη συσκευή προς τα πάνω.</translation>
     </message>
     <message>
         <source>Extended Features:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, η εικονική μηχανή θα υποστηρίζει το πρωτόκολλο Εισόδου/Εξόδου APIC (I/O APIC), το οποίο μπορεί να μειώσει ελαφρώς τις επιδόσεις. <b>Σημείωση:</b> Μην απενεργοποιήσετε την επιλογή αυτή έχοντας εγκαταστήσει έναν επισκέπτη με λειτουργικό Windows!</translation>
     </message>
     <message>
         <source>Enable &I/O APIC</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση πρωτόκολλο Εισόδου/Εξόδου APIC (I/O APIC)</translation>
     </message>
     <message>
         <source>&Processor</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργαστής</translation>
     </message>
     <message>
         <source>&Processor(s):</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, η δυνατότητα Επεκτάσεων Φυσικής Διεύθυνσης (PAE) του επεξεργαστή του οικοδεσπότη θα είναι διαθέσιμη στην εικονική μηχανή.</translation>
     </message>
     <message>
         <source>Enable PA&E/NX</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση PA&E/NX</translation>
     </message>
     <message>
         <source>Acce&leration</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιτάχυνση</translation>
     </message>
     <message>
         <source>Hardware Virtualization:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, η εικονική μηχανή θα προσπαθήσει να χρησιμοποιήσει τις επεκτάσεις εικονοποίησης του επεξεργαστή του οικοδεσπότη, όπως Intel VT-x και AMD-V.</translation>
     </message>
     <message>
         <source>Enable &VT-x/AMD-V</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, η εικονική μηχανή θα προσπαθήσει να χρησιμοποιήσει την επέκταση ένθετης σελιδοποίησης των Intel VT-x και AMD-V.</translation>
     </message>
     <message>
         <source>Enable Nested Pa&ging</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Ένθετης Σελιδοποίησης</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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, ο επισκέπτης θα υποστηρίζει την Επεκταμένη Διεπαφή Υλικολογισμικού (Extended Firmware Interface, EFI), η οποία είναι απαραίτητη για την εκκίνηση ορισμένων λειτουργικών συστημάτων (ΛΣ). ΛΣ χωρίς γνώση του EFI δεν θα μπορέσουν να ξεκινήσουν.</translation>
     </message>
     <message>
         <source>Enable &EFI (special OSes only)</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση EFI (μόνο για συγκεκριμένα λειτουργικά)</translation>
     </message>
     <message>
         <source>Hardware Clock in &UTC Time</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρολόι συστήματος σε ώρα &UTC</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 type="unfinished"></translation>
+        <translation>Ελέγχει τον αριθμό των εικονικών επεξεργαστών της εικονικής μηχανής. Χρειάζεται υποστήριξη εικονοποίησης του υλικού από τον οικοδεσπότη για να χρησιμοποιήσετε πάνω από έναν εικονικό επεξεργαστή.</translation>
     </message>
     <message>
         <source>&Chipset:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέγει το ολοκληρωμένο κύκλωμα που θα προσομοιωθεί στην εικονική μηχανή. Σημειώστε οτι η προσωμοίωση του κυκλώματος ICH9 είναι πειραματική και δεν προτείνεται εκτός από επισκέπτες που το απαιτούν (όπως το Mac OS X).</translation>
     </message>
     <message>
         <source>&Execution Cap:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Περιορίζει το ποσοστό του χρόνου που επιτρέπεται να τρέξει ο κάθε εικονικός επεξεργαστής. Κάθε εικονικός επεξεργαστής επιτρέπεται να χρησιμοποιεί μέχρι το συγκεκριμένο ποσοστό του υπολογιστικού χρόνου διαθέσιμο στον φυσικό επεξεργαστή. Ο περιορισμός της εκτέλεσης μπορεί να απενεργοποιηθεί βάζοντάς το στο 100%. Βάζοντας τον περιορισμό πολύ χαμηλά κάνει αργή την ανταπόκριση της μηχανής.</translation>
     </message>
     <message>
         <source>&Pointing Device:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Καθορίζει αν η εξομοιωμένη συσκευή του δείκτη είναι ένα τυπικό ποντίκι PS/2, ένα πινάκιο USB ή ένα πινάκιο USB πολλαπλής αφής.</translation>
     </message>
     <message>
         <source>More than <b>%1%</b> of the host computer's memory (<b>%2</b>) is assigned to the virtual machine. Not enough memory is left for the host operating system. Please select a smaller amount.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Πάνω από <b>%1%</b> της μνήμης του οικοδεσπότη (<b>%2</b>) έχει ανατεθεί στην εικονική μηχανή. Μπορεί να μην έχει μείνει αρκετή μνήμη για το λειτουργικό του οικοδεσπότη. Παρακαλώ αναλογιστείτε ένα μικρότερο ποσό.</translation>
     </message>
     <message>
         <source>For performance reasons, the number of virtual CPUs attached to the virtual machine may not be more than twice the number of physical CPUs on the host (<b>%1</b>). Please reduce the number of virtual CPUs.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Έχετε αναθέσει περισότερους εικονικούς επεξεργαστές στην εικονική μηχανή απ' ότι ο αριθμός των φυσικών επεξεργαστών του οικοδεσπότη. (<b>%1</b>). Αυτό πιθανόν να μειώσει τις επιδόσεις της εικονικής σας μηχανής. Παρακαλούμε να μειώσετε τον αριθμό των εικονικών επεξεργαστών.</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 type="unfinished"></translation>
-    </message>
-    <message>
-        <source>When checked, the RTC device will report the time in UTC, otherwise in local (host) time. Unix usually expects the hardware clock to be set to UTC.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>%</source>
-        <translation type="unfinished"></translation>
+        <translation>Ο περιορισμός της εκτέλεσης είναι πολύ χαμηλά. Αυτό ίσως κάνει αργή την ανταπόκριση της μηχανής.</translation>
     </message>
     <message>
         <source>&Paravirtualization Interface:</source>
-        <translation type="unfinished"></translation>
+        <translation>Διασύνδεση παραεικονοποίησης:</translation>
     </message>
     <message>
         <source>Selects the paravirtualization guest interface provider to be used by this virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέγει την διασύνδεση της παραεικονοποίησης του επισκέπτη που θα χρησιμοποιηθεί από την εικονική μηχανή.</translation>
     </message>
     <message>
         <source>The I/O APIC feature is not currently enabled in the Motherboard section of the System page. This is needed 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>Το πρωτόκολλο Εισόδου/Εξόδου APIC (I/O 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 type="unfinished"></translation>
+        <translation>Ο ελεγκτής USB δεν είναι ενεργοποιημένος στην σελίδα USB. Αυτό είναι απαραίτητο για να υποστηρίξει την εξομοιωμένη συσκευή USB που έχετε ενεργοποιήσει γι αυτή την ΕΜ. Θα ενεργοποιηθεί αυτόματα αν επιβεβαιώσετε τις αλλαγές σας.</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>Το πρωτόκολλο Εισόδου/Εξόδου APIC (I/O 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 type="unfinished"></translation>
+        <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) θα δηλώνει την ώρα σε UTC, αλλιώς σε τοπική ώρα (του οικοδεσπότη). Το Unix συνήθως αναμένει το ρολόι να είναι σε UTC.</translation>
+    </message>
+    <message>
+        <source>%</source>
+        <translation>%</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 επεξεργαστή</translation>
     </message>
     <message>
         <source>%1 CPUs</source>
         <comment>%1 is host cpu count * 2 for now</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 επεξεργαστές</translation>
     </message>
     <message>
         <source>%1%</source>
-        <translation type="unfinished">%1%</translation>
+        <translation>%1%</translation>
     </message>
 </context>
 <context>
@@ -4240,143 +3932,143 @@
     <message>
         <source>New Filter %1</source>
         <comment>usb</comment>
-        <translation type="unfinished"></translation>
+        <translation>Νέο Φίλτρο %1</translation>
     </message>
     <message>
         <source>When checked, enables the virtual USB controller of this machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, ενεργοποιεί την ελεγκτή USB της εικονικής μηχανής.</translation>
     </message>
     <message>
         <source>Enable &USB Controller</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Ελεγκτή USB</translation>
     </message>
     <message>
         <source>USB Device &Filters</source>
-        <translation type="unfinished"></translation>
+        <translation>Φίλτρα Συσκευών USB</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 type="unfinished"></translation>
+        <translation>Δείχνει όλα τα φίλτρα USB στη μηχανή. Το πλαίσιο ελέγχου στα αριστερά καθορίζει αν το συγκεκριμένο φίλτρο είναι ενεργοποιημένο ή όχι. Χρησιμοποιείστε το σχετικό κατάλογο ή τα κουμπιά στα δεξιά για να προσθέσετε ή να αφαιρέσετε φίλτρα USB.</translation>
     </message>
     <message>
         <source>[filter]</source>
-        <translation type="unfinished"></translation>
+        <translation>[φίλτρο]</translation>
     </message>
     <message>
         <source><nobr>Vendor ID: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"><nobr>Αναγνωριστικό προμηθευτή: %1</nobr></translation>
+        <translation><nobr>Αναγνωριστικό προμηθευτή: %1</nobr></translation>
     </message>
     <message>
         <source><nobr>Product ID: %2</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"><nobr>Αναγνωριστικό προϊόντος: %2</nobr></translation>
+        <translation><nobr>Αναγνωριστικό προϊόντος: %2</nobr></translation>
     </message>
     <message>
         <source><nobr>Revision: %3</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"><nobr>Έκδοση: %3</nobr></translation>
+        <translation><nobr>Έκδοση: %3</nobr></translation>
     </message>
     <message>
         <source><nobr>Product: %4</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"><nobr>Προϊόν: %4</nobr></translation>
+        <translation><nobr>Προϊόν: %4</nobr></translation>
     </message>
     <message>
         <source><nobr>Manufacturer: %5</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"><nobr>Κατασκευαστής: %5</nobr></translation>
+        <translation><nobr>Κατασκευαστής: %5</nobr></translation>
     </message>
     <message>
         <source><nobr>Serial No.: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"><br><nobr>Σειριακό Νο. %1</nobr></translation>
+        <translation><br><nobr>Σειριακό Νο. %1</nobr></translation>
     </message>
     <message>
         <source><nobr>Port: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"><nobr>Πόρτα: %1</nobr></translation>
+        <translation><nobr>Θύρα: %1</nobr></translation>
     </message>
     <message>
         <source><nobr>State: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation type="unfinished"><nobr>Κατάσταση: %1</nobr></translation>
+        <translation><nobr>Κατάσταση: %1</nobr></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 type="unfinished"></translation>
+        <source>USB &1.1 (OHCI) Controller</source>
+        <translation>Ελεγκτής USB &1.1 (OHCI)</translation>
     </message>
     <message>
-        <source>USB &1.1 (OHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <source>USB &2.0 (EHCI) Controller</source>
+        <translation>Ελεγκτής USB &2.0 (EHCI)</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>
+        <source>USB &3.0 (xHCI) Controller</source>
+        <translation>Ελεγκτής USB &3.0 (xHCI)</translation>
     </message>
     <message>
-        <source>USB &2.0 (EHCI) Controller</source>
-        <translation type="unfinished"></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>Το USB 2.0/3.0 είναι ενεργοποιημένο για την εικονική μηχανή. Ωστόσο, αυτό απαιτεί να έχει εγκατασταθεί το <i>%1</i>. Παρακαλούμε εγκαταστήστε το Πακέτο Επέκτασης από τον ιστότοπο του VirtualBox ή απενεργοποιήστε το USB 2.0/3.0 για να μπορέσετε να ξεκινήσετε τη μηχανή.</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>
+        <source>When chosen, enables the virtual USB OHCI controller of this machine. The USB OHCI controller provides USB 1.0 support.</source>
+        <translation>Όταν επιλεγεί, ενεργοποιείται ο εικονικός ελεγκτής USB OHCI της μηχανής. Ο ελεγκτής USB OHCI προσφέρει υποστήριξη για το USB 1.0.</translation>
     </message>
     <message>
-        <source>USB &3.0 (xHCI) Controller</source>
-        <translation type="unfinished"></translation>
+        <source>When chosen, enables the virtual USB EHCI controller of this machine. The USB EHCI controller provides USB 2.0 support.</source>
+        <translation>Όταν επιλεγεί, ενεργοποιείται ο εικονικός ελεγκτής USB EHCI της μηχανής. Ο ελεγκτής USB EHCI προσφέρει υποστήριξη για το USB 2.0.</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>
+        <source>When chosen, enables the virtual USB xHCI controller of this machine. The USB xHCI controller provides USB 3.0 support.</source>
+        <translation>Όταν επιλεγεί, ενεργοποιείται ο εικονικός ελεγκτής USB xHCI της μηχανής. Ο ελεγκτής USB xHCI προσφέρει υποστήριξη για το USB 3.0.</translation>
     </message>
     <message>
         <source>Add Empty Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Άδειου Φίλτρου</translation>
     </message>
     <message>
         <source>Add Filter From Device</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Φίλτρου από Συσκευή</translation>
     </message>
     <message>
         <source>Edit Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία Φίλτρου</translation>
     </message>
     <message>
         <source>Remove Filter</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση Φίλτρου</translation>
     </message>
     <message>
         <source>Move Filter Up</source>
-        <translation type="unfinished"></translation>
+        <translation>Μετακίνηση Φίλτρου Πάνω</translation>
     </message>
     <message>
         <source>Move Filter Down</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Προσθέτει ένα νέο φίλτρο USB με όλα τα πεδία αρχικά κενά. Σημειώστε οτι ένα τέτοιο φίλτρο θα πιάσει οποιαδήποτε συσκευή USB.</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>Προσθέτει ένα καινούριο φίλτρο USB με όλα τα πεδία συμπληρωμένα με τις τιμές της επιλεγμένης συσκευής USB.</translation>
     </message>
     <message>
         <source>Edits selected USB filter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία του επιλεγμένου φίλτρου USB.</translation>
     </message>
     <message>
         <source>Removes selected USB filter.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση του επιλεγμένου φίλτρου USB.</translation>
     </message>
     <message>
         <source>Moves selected USB filter up.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μετακινεί το επιλεγμένο φίλτρου USB προς τα πάνω.</translation>
     </message>
     <message>
         <source>Moves selected USB filter down.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μετακινεί το επιλεγμένο φίλτρου USB προς τα κάτω.</translation>
     </message>
 </context>
 <context>
@@ -4384,164 +4076,164 @@
     <message>
         <source>Any</source>
         <comment>remote</comment>
-        <translation type="unfinished"></translation>
+        <translation>Όλοι</translation>
     </message>
     <message>
         <source>Yes</source>
         <comment>remote</comment>
-        <translation type="unfinished">Ναι</translation>
+        <translation>Ναι</translation>
     </message>
     <message>
         <source>No</source>
         <comment>remote</comment>
-        <translation type="unfinished">Όχι</translation>
+        <translation>Όχι</translation>
     </message>
     <message>
         <source>&Name:</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα:</translation>
     </message>
     <message>
         <source>Holds the filter name.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει το όνομα του φίλτρου.</translation>
     </message>
     <message>
         <source>&Vendor ID:</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναγνωριστικό Κατασκευαστή:</translation>
     </message>
     <message>
         <source>&Product ID:</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναγνωριστικό Προϊόντος:</translation>
     </message>
     <message>
         <source>&Revision:</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναθεώρηση:</translation>
     </message>
     <message>
         <source>&Manufacturer:</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατασκευαστής:</translation>
     </message>
     <message>
         <source>Pro&duct:</source>
-        <translation type="unfinished"></translation>
+        <translation>Προϊόν:</translation>
     </message>
     <message>
         <source>&Serial No.:</source>
-        <translation type="unfinished"></translation>
+        <translation>Σειριακός Αρθ.:</translation>
     </message>
     <message>
         <source>Por&t:</source>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα:</translation>
     </message>
     <message>
         <source>R&emote:</source>
-        <translation type="unfinished"></translation>
+        <translation>Απομακρυσμένη:</translation>
     </message>
     <message>
         <source>USB Filter Details</source>
-        <translation type="unfinished"></translation>
+        <translation>Λεπτομέρειες Φίλτρων USB</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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Δείχνει το φίλτρο της θύρας USB με την <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 type="unfinished"></translation>
+        <translation>Δείχνει αν το φίλτρο εφαρμόζει σε συσκευές USB προσαρτημένες τοπικά στον οικοδεσπότη (<i>Όχι</i>), σε έναν άλλο υπολογιστή με VRDP (<i>Ναι</i>), ή και τα δύο (<i>Όλα</i>).</translation>
     </message>
 </context>
 <context>
     <name>UIMachineWindow</name>
     <message>
         <source> EXPERIMENTAL build %1r%2 - %3</source>
-        <translation type="unfinished"></translation>
+        <translation> ΠΕΙΡΑΜΑΤΙΚΗ έκδοση %1r%2 - %3</translation>
     </message>
 </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 type="unfinished"></translation>
+        <translation>Δείχνει το τρέχον Πλήκτρο Οικοδεσπότη.<br> Το πλήκτρο αυτό, όταν πατηθεί μόνο του, εναλλάσει τη δέσμευση του πληκτρολογίου και του ποντικιού. Μπορεί επίσης να χρησιμοποιηθεί σε συνδυασμό με άλλα πλήκτρα για γρήγορη πρόσβαση σε ενέργειες από τον κεντρικό κατάλογο επιλογών.</translation>
     </message>
 </context>
 <context>
     <name>UIMediumManager</name>
     <message>
         <source>&Optical disks</source>
-        <translation type="unfinished"></translation>
+        <translation>Οπτικοί δίσκοι</translation>
     </message>
     <message>
         <source>&Floppy disks</source>
-        <translation type="unfinished"></translation>
+        <translation>Συσκευές δισκέτας</translation>
     </message>
     <message>
         <source>Removing medium...</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση μέσου...</translation>
     </message>
     <message>
         <source>&Hard disks</source>
-        <translation type="unfinished"></translation>
+        <translation>Σκληροί δίσκοι</translation>
     </message>
 </context>
 <context>
     <name>UIMediumTypeChangeDialog</name>
     <message>
         <source>Modify medium attributes</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Πρόκειται να αλλάξετε τις ρυθμίσεις του αρχείου εικόνας δίσκου <b>%1</b>.</p><p>Επιλέξτε έναν από τις παρακάτω λειτουργίες και πατήστε <b>%2</b> για να προχωρήσετε ή <b>%3</b> αλλιώς.</p></translation>
     </message>
     <message>
         <source>Choose mode:</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε λειτουργία:</translation>
     </message>
 </context>
 <context>
     <name>UIMenuBarEditorWidget</name>
     <message>
         <source>Virtual Screen Resize</source>
-        <translation type="unfinished"></translation>
+        <translation>Αλλαγή μεγέθους Εικονικής Οθόνης</translation>
     </message>
     <message>
         <source>Virtual Screen Mapping</source>
-        <translation type="unfinished"></translation>
+        <translation></translation>
     </message>
     <message>
-        <source>Switch</source>
-        <translation type="unfinished"></translation>
+        <source>Close</source>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
-        <source>Close</source>
-        <translation type="unfinished"></translation>
+        <source>Switch</source>
+        <translation>Αλλαγή</translation>
     </message>
     <message>
         <source>Enable Menu Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση Κατάλογου Επιλογών</translation>
     </message>
 </context>
 <context>
@@ -4549,177 +4241,177 @@
     <message>
         <source>VirtualBox - Information</source>
         <comment>msg box title</comment>
-        <translation type="unfinished"></translation>
+        <translation>VirtualBox - Πληροφορίες</translation>
     </message>
     <message>
         <source>VirtualBox - Question</source>
         <comment>msg box title</comment>
-        <translation type="unfinished"></translation>
+        <translation>VirtualBox - Ερώτηση</translation>
     </message>
     <message>
         <source>VirtualBox - Warning</source>
         <comment>msg box title</comment>
-        <translation type="unfinished"></translation>
+        <translation>VirtualBox - Προειδοποίηση</translation>
     </message>
     <message>
         <source>VirtualBox - Error</source>
         <comment>msg box title</comment>
-        <translation type="unfinished"></translation>
+        <translation>VirtualBox - Λάθος</translation>
     </message>
     <message>
         <source>VirtualBox - Critical Error</source>
         <comment>msg box title</comment>
-        <translation type="unfinished"></translation>
+        <translation>VirtualBox - Κριτικό λάθος</translation>
     </message>
     <message>
         <source>Do not show this message again</source>
         <comment>msg box flag</comment>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Αποτυχία να ανοίξει το <tt>%1</tt>. Σιγουρευτείτε οτι το περιβάλλον του Η/Υ μπορεί να διαχειριστεί URL τέτοιας μορφής.</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 type="unfinished"></translation>
+        <translation><p>Απέτυχε η εκκίνηση του COM ή η εύρεση του διακομιστή COM του VirtualBox. Το πιο πιθανό είναι οτι ο διακομιστής του VirtualBox είτε δεν τρέχει ή απέτυχε να ξεκινήσει.</p><p>Η εφαρμογή θα τερματιστεί τώρα.</p></translation>
     </message>
     <message>
         <source>Failed to set global VirtualBox properties.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία ορισμού γενικών ιδιοτήτων του VirtualBox.</translation>
     </message>
     <message>
         <source>Failed to access the USB subsystem.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία πρόσβασης στο υποσύστημα USB.</translation>
     </message>
     <message>
         <source>Failed to create a new virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία δημιουργίας νέας εικονικής μηχανής.</translation>
     </message>
     <message>
         <source>Failed to start the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία εκκίνησης της εικονικής μηχανής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to pause the execution of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία παύσης λειτουργίας της εικονικής μηχανής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to resume the execution of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία συνέχισης λειτουργίας της εικονικής μηχανής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to save the state of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία να σωθεί η κατάσταση της εικονικής μηχανής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to create a snapshot of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία δημιουργίας στιγμιότυπου της εικονικής μηχανής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to stop the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία σταματήματος της εικονικής μηχανής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to remove the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία αφαίρεσης της εικονικής μηχανής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to discard the saved state of the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία αναίρεσης της σωσμένης κατάστασης της εικονικής μηχανής <b>%1</b>.</translation>
     </message>
     <message>
         <source>There is no virtual machine named <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν υπάρχει εικονική μηχανή ονόματι <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to create a new session.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία δημιουργίας νέας συνεδρίας.</translation>
     </message>
     <message>
         <source>Failed to open a session for the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία ανοίγματος συνεδρία για την εικονική μηχανή <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to remove the host network interface <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Αποτυχία σύνδεσης της συσκευής USB <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 type="unfinished"></translation>
+        <translation>Αποτυχία αποσύνδεσης της συσκευής USB <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 type="unfinished"></translation>
+        <translation>Αποτυχία δημιουργίας του κοινού φακέλου <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Η Εικονική Μηχανή (ΕΜ) είναι σε κατάσταση <b>Παύσης</b> και δεν μπορεί να αντιληφθεί το πληκτρολόγιο ή το ποντίκι. Αν θέλετε να συνεχίσετε να δουλεύετε με την ΕΜ, θα πρέπει να συνεχίσετε τη λειτουργία της επιλέγοντας την κατάλληλη δράση από τον κατάλογο επιλογών.</p></translation>
     </message>
     <message>
         <source><nobr>Fatal Error</nobr></source>
         <comment>runtime error info</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Κρίσιμο σφάλμα</nobr></translation>
     </message>
     <message>
         <source><nobr>Non-Fatal Error</nobr></source>
         <comment>runtime error info</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Μη-κρίσιμο σφάλμα</nobr></translation>
     </message>
     <message>
         <source><nobr>Warning</nobr></source>
         <comment>runtime error info</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Προειδοποίηση</nobr></translation>
     </message>
     <message>
         <source><nobr>Error ID: </nobr></source>
         <comment>runtime error info</comment>
-        <translation type="unfinished"></translation>
+        <translation><nobr>Τύπος λάθους: </nobr></translation>
     </message>
     <message>
         <source>Severity: </source>
         <comment>runtime error info</comment>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Η εκτέλεση της εικονικής μηχανής αντιμετώπισε το σφάλμα που περιγράφεται παρακάτω. Προτείνουμε να λάβετε τα αναγκαία μέτρα για την πρόληψη του λάθους.</p></translation>
     </message>
     <message>
         <source>Result&nbsp;Code: </source>
         <comment>error info</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κώδικας&nbsp;Αποτελέσματος: </translation>
     </message>
     <message>
         <source>Component: </source>
         <comment>error info</comment>
-        <translation type="unfinished"></translation>
+        <translation>Συστατικό:</translation>
     </message>
     <message>
         <source>Interface: </source>
         <comment>error info</comment>
-        <translation type="unfinished"></translation>
+        <translation>Περιβάλλον:</translation>
     </message>
     <message>
         <source>Callee: </source>
         <comment>error info</comment>
-        <translation type="unfinished"></translation>
+        <translation>Καλέστηκε από:</translation>
     </message>
     <message>
         <source>Callee&nbsp;RC: </source>
@@ -4728,70 +4420,70 @@
     </message>
     <message>
         <source><p>Failed to remove the shared folder <b>%1</b> (pointing to <nobr><b>%2</b></nobr>) from the virtual machine <b>%3</b>.</p><p>Please close all programs in the guest OS that may be using this shared folder and try again.</p></source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία αφαίρεσης του κοινού φακέλου <b>%1</b> (δείχνει το <nobr><b>%2</b></nobr>) από την εικονική μηχανή <b>%3</b>.</p><p>Παρακαλούμε κλείστε όλα τα προγράμματα στον επισκέπτη που μπορεί να χρησιμοποιούνε τον κοινό φάκελο και ξαναπροσπαθήστε.</p></translation>
     </message>
     <message>
         <source>Failed to open the license file <nobr><b>%1</b></nobr>. Check file permissions.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Αποτυχία αποστολής του σήματος ACPI στην εικονική μηχανή <b>%1</b>.</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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Αποτυχία σωσίματος των ρυθμίσεων της εικονικής μηχανής <b>%1</b> στο <b><nobr>%2</nobr></b>.</translation>
     </message>
     <message>
         <source>Discard</source>
         <comment>saved state</comment>
-        <translation type="unfinished">Αναίρεση</translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Το τρέχων πλήκτρο οικοδεσπότη είναι ορισμένο ως <b>%1</b>.</p></translation>
     </message>
     <message>
         <source>Capture</source>
         <comment>do input capture</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δέσμευση</translation>
     </message>
     <message>
         <source>Check</source>
         <comment>inaccessible media message box</comment>
-        <translation type="unfinished"></translation>
+        <translation>Έλεγχος</translation>
     </message>
     <message>
         <source>Reset</source>
         <comment>machine</comment>
-        <translation type="unfinished">Επαναφορά</translation>
+        <translation>Επαναφορά</translation>
     </message>
     <message>
         <source>Continue</source>
         <comment>no hard disk attached</comment>
-        <translation type="unfinished"></translation>
+        <translation>Συνέχεια</translation>
     </message>
     <message>
         <source>Go Back</source>
         <comment>no hard disk attached</comment>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Δεν είναι δυνατή η λειτουργία ενσωματωμένης οθόνης λόγω ανεπαρκούς μνήμης γραφικών.</p><p>Πρέπει να ρυθμίσετε την εικονική μηχανή ώστε να έχει τουλάχιστον <b>%1</b> μνήμη γραφικών.</p></translation>
     </message>
     <message>
         <source>You are already running the most recent version of VirtualBox.</source>
-        <translation type="unfinished"></translation>
+        <translation>Τρέχετε ήδη την πιο πρόσφατη έκδοση του VirtualBox.</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  [...]
@@ -4808,82 +4500,82 @@
     <message>
         <source>Release</source>
         <comment>detach medium</comment>
-        <translation type="unfinished"></translation>
+        <translation>Απελευθέρωση</translation>
     </message>
     <message>
         <source>Remove</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Ο σκληρός δίσκος στην τοποθεσία <b>%1</b> υπάρχει ήδη. Δεν μπορείτε να δημιουργήσετε ένα καινούριο σκληρό δίσκο σ' αυτή την τοποθεσία γιατί μπορεί να χρησιμοποιείται ήδη από έναν άλλο σκληρό δίσκο.</p><p>Παρακαλώ ορίστε μία διαφορετική τοποθεσία.</p></translation>
     </message>
     <message>
         <source>Delete</source>
         <comment>hard disk storage</comment>
-        <translation type="unfinished"></translation>
+        <translation>Διαγραφή</translation>
     </message>
     <message>
         <source>Keep</source>
         <comment>hard disk storage</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κράτηση</translation>
     </message>
     <message>
         <source>Failed to delete the storage unit of the hard disk <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία διαγραφής της μονάδας αποθήκευσης του σκληρού δίσκου <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to create the hard disk storage <nobr><b>%1</b>.</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία δημιουργίας της αποθήκευσης του σκληρού δίσκου <nobr><b>%1</b>.</nobr></translation>
     </message>
     <message>
         <source>Failed to access the disk image file <nobr><b>%1</b></nobr>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία πρόσβασης της εικόνας του δίσκου <nobr><b>%1</b></nobr>.</translation>
     </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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Τρέχετε μία προ-έκδοση του VirtualBox. Αυτή η έκδοση δεν είναι κατάλληλη για χρήση σε συστήματα παραγωγής.</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 type="unfinished"></translation>
+        <translation>Προσπαθείτε να σβήσετε τον επισκέπτη με τη χρήση του κουμπιού ACPI. Αυτό δεν είναι δυνατό, γιατί ο επισκέπτης δεν υποστηρίζει λογισμικό σβήσιμο.</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 type="unfinished"></translation>
+        <translation><p>Η επιτάχυνση εξοπλισμού VT-x/AMD-V έχει ενεργοποιηθεί, αλλά δεν είναι λειτουργική. Ο 64-bit επισκέπτης θα αποτύχει να δει τον επεξεργαστή σαν 64-bit και δεν θα ξεκινήσει.</p><p>Παρακαλούμε επιβεβαιώστε οτι έχετε ενεργοποιήσει το VT-x/AMD-V στο BIOS του οικοδεσπότη.</p></translation>
     </message>
     <message>
         <source>Close VM</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο ΕΜ</translation>
     </message>
     <message>
         <source>Continue</source>
-        <translation type="unfinished"></translation>
+        <translation>Συνέχεια</translation>
     </message>
     <message>
         <source>Cancel</source>
-        <translation type="unfinished">Ακύρωση</translation>
+        <translation>Ακύρωση</translation>
     </message>
     <message>
         <source>Failed to open/interpret appliance <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία ανοίγματος/κατανόησης της συσκευής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to import appliance <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία εισαγωγής της συσκευής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to prepare the export of the appliance <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία προετοιμασίας εξαγωγής της συσκευής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to export appliance <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <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 in [...]
@@ -4891,132 +4583,132 @@
     </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 type="unfinished"></translation>
+        <translation>Το αρχείο <b>%1</b> υπάρχει ήδη. Είστε σίγουροι οτι θέλετε να το αντικαταστήσετε? Αντικαθιστώντας το θα διαγράψετε τα περιεχόμενά του.</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 type="unfinished"></translation>
+        <translation><p>Η επιτάχυνση εξοπλισμού VT-x/AMD-V έχει ενεργοποιηθεί, αλλά δεν είναι λειτουργική. Ορισμένοι επισκέπτες (π.χ. OS/2 και QNX) απαιτούν αυτό το χαρακτηριστικό</p><p>Παρακαλούμε επιβεβαιώστε οτι έχετε ενεργοποιήσει το VT-x/AMD-V στο BIOS του οικοδεσπότη.</p></translation>
     </message>
     <message>
         <source>Failed to check files.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία ελέγχου των αρχείων.</translation>
     </message>
     <message>
         <source>Failed to remove file.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Φαίνεται οτι έχετε το σύστημα USBFS φορτωμένο στο /sys/bus/usb/drivers. Σας προτείνουμε να το αλλάξετε άμεσα, μιας και είναι αρκετά λανθασμένη ρύθμιση του συστήματος που θα μπορούσε να οδηγήσει σε απρόβλεπτες αποτυχίες των συσκευών USB.</translation>
     </message>
     <message>
         <source>You are running an EXPERIMENTAL build of VirtualBox. This version is not suitable for production use.</source>
-        <translation type="unfinished"></translation>
+        <translation>Τρέχετε μία ΠΕΙΡΑΜΑΤΙΚΗ έκδοση του VirtualBox. Αυτή η έκδοση δεν είναι κατάλληλη για χρήση σε συστήματα παραγωγής.</translation>
     </message>
     <message>
         <source>Restore</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά</translation>
     </message>
     <message>
         <source>Delete</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαγραφή</translation>
     </message>
     <message>
         <source>Failed to restore the snapshot <b>%1</b> of the virtual machine <b>%2</b>.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Αποτυχία διαγραφής του στιγμιότυπου <b>%1</b> της εικονικής μηχανής <b>%2</b>.</translation>
     </message>
     <message>
         <source>Force Unmount</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναγκαστική Αποπροσάρτηση</translation>
     </message>
     <message>
         <source>&Remove</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></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.</p></source>
+        <translation type="obsolete"><p>Η επιτάχυνση εξοπλισμού VT-x/AMD-V δεν είναι διαθέσιμη στο σύστημά σας. Ο 64-bit επισκέπτης θα αποτύχει να δει τον επεξεργαστή σαν 64-bit και δεν θα ξεκινήσει.</p></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 type="unfinished"></translation>
+        <translation><p>Η επιτάχυνση εξοπλισμού VT-x/AMD-V δεν είναι διαθέσιμη στο σύστημά σας. Ορισμένοι επισκέπτες (π.χ. OS/2 και QNX) απαιτούν αυτό το χαρακτηριστικό και θα αποτύχουν να ξεκινήσουν χωρίς αυτό.</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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Δεν μπορεί να αλλάξει η οθόνη του επισκέπτη σε αυτή του οικοδεσπότη λόγω ανεπαρκούς μνήμης γραφικών.</p><p>Πρέπει να ρυθμίσετε την εικονική μηχανή ώστε να έχει τουλάχιστον <b>%1</b> μνήμη γραφικών.</p><p>Πατήστε <b>Αγνοήστε</b> για να αλλάξετε την οθόνη ούτως ή άλλως ή πατήστε <b>Άκυρο</b> για να ακυρώσετε τη διαδικασία.</p></translation>
     </message>
     <message>
         <source>Failed to open virtual machine located in %1.</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Αποτυχία προσθήκς της εικονικής συσκευής <b>%1</b> που βρίσκεται στο <b>%2</b> γιατί ήδη υπάρχει.</translation>
     </message>
     <message>
         <source>Delete all files</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαγραφή όλων των αρχείων</translation>
     </message>
     <message>
         <source>Remove only</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση μόνο</translation>
     </message>
     <message>
         <source>Remove</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Θα προσθέσετε ένα εικονικό σκληρό δίσκο στον ελεγκτή <b>%1</b>.</p><p>Θέλετε να δημιουργήσετε ένα καινούριο, κενό αρχείο με τα περιεχόμενα του δίσκου ή να επιλέξετε ένα υπάρχον;</p></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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Αποτυχία αποσύνδεσης του σκληρού δίσκου (<nobr><b>%1</b></nobr>) από την θυρίδα <b>%2</b> της μηχανής <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 type="unfinished"></translation>
+        <translation>Αποτυχία αναβάθμισης των Προσθηκών Επισκέπτη. Ο δίσκος των Προσθηκών Επισκέπτη θα είναι διαθέσιμος για εγκατάσταση από τον χρήστη.</translation>
     </message>
     <message>
         <source>Failed to install the Extension Pack <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία εγκατάστασης του Πακέτου Επέκτασης <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to uninstall the Extension Pack <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία απεγκατάστασης του Πακέτου Επέκτασης <b>%1</b>.</translation>
     </message>
     <message>
         <source>&Remove</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Αποτυχία σύνδεσης του σκληρού δίσκου (<nobr><b>%1</b></nobr>) στη θυρίδα <b>%2</b> της μηχανής <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 type="unfinished"></translation>
+        <translation><p>Σημειώστε οτι η αποθηκευτική μονάδα αυτού του μέσου δεν θα διαγραφεί και θα είναι δυνατό να τη χρησιμοποιήσετε αργότερα.</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>
@@ -5028,79 +4720,79 @@
     </message>
     <message>
         <source>Failed to open the Extension Pack <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <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< [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Πρόκειται να εγκαταστήσετε ένα Πακέτο Επέκτασης του VirtualBox. Τα Πακέτα Επέκτασης συμπληρώνουν τη λειτουργικότητα του VirtualBox και μπορεί να περιέχουν λογισμικό επιπέδου συστήματος, που μπορεί να είναι πιθανόν επικίνδυνο για το σύστημά σας. Παρακαλώ ξανακοιτάστε την περιγραφή και προχωρείστε μόνο αν έχετε πάρει το πακέτο από πηγή που εμπιστεύεστε.</p><p><table cellpadding=0 cellspacing=0><tr><td><b>Όνομα:&nbsp;&amp [...]
     </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 type="unfinished"></translation>
+        <translation>Τα Πακέτα Επέκτασης συμπληρώνουν τη λειτουργικότητα του VirtualBox και μπορεί να περιέχουν λογισμικό επιπέδου συστήματος, που μπορεί να είναι πιθανόν επικίνδυνο για το σύστημά σας. Παρακαλώ ξανακοιτάστε την περιγραφή και προχωρείστε μόνο αν έχετε πάρει το πακέτο από πηγή που εμπιστεύεστε.</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& [...]
-        <translation type="unfinished"></translation>
+        <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;</ [...]
     </message>
     <message>
         <source>&Upgrade</source>
-        <translation type="unfinished"></translation>
+        <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></t [...]
-        <translation type="unfinished"></translation>
+        <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& [...]
     </message>
     <message>
         <source>&Downgrade</source>
-        <translation type="unfinished"></translation>
+        <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>& [...]
-        <translation type="unfinished"></translation>
+        <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>&lt [...]
     </message>
     <message>
         <source>&Reinstall</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Είστε έτοιμοι να απεγκαταστήσετε το πακέτο επέκτασης VirtualBox <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Οι ρυθμίσεις της μηχανής άλλαξαν ενώ τις ρυθμίζατε. Υπάρχουν ρυθμίσεις που δεν έχουν σωθεί.</p><p>Θέλετε να επαναφορτώσετε τις ρυθμίσεις ή να κρατήσετε τις δικές σας αλλαγές;</p></translation>
     </message>
     <message>
         <source>Reload settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφόρτωση ρυθμίσεων</translation>
     </message>
     <message>
         <source>Keep changes</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Η εικονική μηχανή που αλλάζετε έχει ήδη ξεκινήσει. Μόνο ορισμένες ρυθμίσεις μπορούν να αλλάξουν ενώ η μηχανή τρέχει. Όλες οι άλλες αλλαγές θα χαθούν αν κλείσετε το παράθυρο τώρα.</translation>
     </message>
     <message>
         <source>Failed to clone the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία κλωνοποίησης της εικονικής μηχανής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Create a snapshot of the current machine state</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργείστε ένα στιγμιότυπο της τρέχουσας κατάστασης της μηχανής</translation>
     </message>
     <message>
         <source><p>Error changing disk image mode from <b>%1</b> to <b>%2</b>.</p></source>
@@ -5108,52 +4800,52 @@
     </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 type="unfinished"></translation>
+        <translation>Δεν φορτώθηκε η υπηρεσία μεσολάβησης USB του οικοδεσπότη (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 type="unfinished"></translation>
+        <translation>Το VirtualBox δεν έχει αυτή τη στιγμή πρόσβαση στις συσκευές USB. Μπορείτε να το αλλάξετε προσθέτοντας τον χρήστη στην ομάδα '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 type="unfinished"></translation>
+        <translation>Το VirtualBox δεν έχει αυτή τη στιγμή πρόσβαση στις συσκευές USB. Μπορείτε να το αλλάξετε επιτρέποντας στον χρήστη την πρόσβαση στους φακέλους και αρχεία 'usbfs'. Δείτε το εγχειρίδιο για λεπτομερέστερη εξήγηση</translation>
     </message>
     <message>
         <source>The USB Proxy Service has not yet been ported to this host</source>
-        <translation type="unfinished"></translation>
+        <translation>Η υπηρεσία μεσολάβησης USB του οικοδεσπότη δεν υποστηρίζεται σ' αυτόν τον οικοδεσπότη</translation>
     </message>
     <message>
         <source>Could not load the Host USB Proxy service</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν μπόρεσε να φορτωθεί η υπηρεσία μεσολάβησης USB του οικοδεσπότη</translation>
     </message>
     <message>
         <source>Can't find snapshot named <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν μπορεί να βρεθεί το στιγμιότυπο <b>%1</b>.</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 type="unfinished"></translation>
+        <translation><p>Έχετε μία παλιά έκδοση (%1) του <b><nobr>%2</nobr></b> εγκατεστημένη.</p><p>Θέλετε να κατεβάσετε την τελευταία έκδοση από το δίκτυο;</p></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 type="unfinished"></translation>
+        <translation><p>Είστε σίγουροι οτι θέλετε να κατεβάσετε το <b><nobr>%1</nobr></b> από <nobr><a href="%2">%2</a></nobr> (μέγεθος %3 bytes)?</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 type="unfinished"></translation>
+        <translation><p>Το <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Το <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 type="unfinished"></translation>
+        <translation><p>Έχετε την έκδοση %1 του <b><nobr>%2</nobr></b> εγκατεστημένη.</p><p>Πρέπει να κατεβάσετε και να εγκαταστήσετε την έκδοση %3 του πακέτου επέκτρασης από την Oracle!</p></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>
@@ -5182,12 +4874,12 @@
     <message>
         <source>ACPI Shutdown</source>
         <comment>machine</comment>
-        <translation type="unfinished"></translation>
+        <translation>Τερματισμός ACPI</translation>
     </message>
     <message>
         <source>Power Off</source>
         <comment>machine</comment>
-        <translation type="unfinished"></translation>
+        <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>
@@ -5207,7 +4899,7 @@
     </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 type="unfinished"></translation>
+        <translation>Θέλετε να στείλετε το σήμα ACPI στις παρακάτω εικονικές μηχανές; </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>
@@ -5223,7 +4915,7 @@
     </message>
     <message>
         <source>Rename</source>
-        <translation type="unfinished"></translation>
+        <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>
@@ -5243,7 +4935,7 @@
     </message>
     <message>
         <source>Change Network Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Αλλαγή Ρυθμίσεων Δικτύου</translation>
     </message>
     <message>
         <source><p>Cannot start the VirtualBox Manager due to local restrictions.</p><p>The application will now terminate.</p></source>
@@ -5263,7 +4955,7 @@
     </message>
     <message>
         <source>Ignore</source>
-        <translation type="unfinished">Αγνόησε</translation>
+        <translation>Αγνόησε</translation>
     </message>
     <message>
         <source>Failed to create NAT network.</source>
@@ -5287,19 +4979,19 @@
     </message>
     <message>
         <source>Create &new disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργείστε νέο δίσκο</translation>
     </message>
     <message>
         <source>&Choose existing disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε υπάρχοντα δίσκο</translation>
     </message>
     <message>
         <source>Leave &empty</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφήστε κενό</translation>
     </message>
     <message>
         <source>&Choose disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε δίσκο</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>
@@ -5351,7 +5043,7 @@
     </message>
     <message>
         <source>Switch</source>
-        <translation type="unfinished"></translation>
+        <translation>Αλλαγή</translation>
     </message>
     <message>
         <source>Failed to enable the remote desktop server for the virtual machine <b>%1</b>.</source>
@@ -5363,11 +5055,11 @@
     </message>
     <message>
         <source>Failed to enable video capturing for the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία ενεργοποίησης της μαγνητοσκόπησης της εικονικής μηχανής <b>%1</b>.</translation>
     </message>
     <message>
         <source>Failed to disable video capturing for the virtual machine <b>%1</b>.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία απενεργοποίησης της μαγνητοσκόπησης της εικονικής μηχανής <b>%1</b>.</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>
@@ -5375,7 +5067,7 @@
     </message>
     <message>
         <source>Download</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατεβάστε</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>
@@ -5403,23 +5095,26 @@
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Ok</source>
-        <translation type="unfinished"></translation>
+        <translation>Εντάξει</translation>
     </message>
     <message>
         <source>Do not show this message again</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
     </message>
     <message>
-        <source>Insert</source>
-        <comment>additions</comment>
+        <source>Failed to attach the webcam <b>%1</b> to the virtual machine <b>%2</b>.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Failed to detach the webcam <b>%1</b> from the virtual machine <b>%2</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -5427,15 +5122,20 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to attach the webcam <b>%1</b> to the virtual machine <b>%2</b>.</source>
+        <source>Insert</source>
+        <comment>additions</comment>
+        <translation>Εισάγετε</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>
     </message>
     <message>
-        <source>Failed to detach the webcam <b>%1</b> from the virtual machine <b>%2</b>.</source>
+        <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
         <translation type="unfinished"></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>
+        <source>The current port forwarding rules are not valid. Few rules have same host ports and conflicting IP addresses.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -5451,135 +5151,131 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source><p>One or more disk image files are not currently accessible. As a result, you will not be able to operate virtual machines that use these files until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see which files are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source>
+        <source>Failed to save the settings.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and storage data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source>
+        <source><p>You are about to add a new optical drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual optical disk to put in the drive or to leave it empty for now?</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
+        <source><p>Are you sure you want to delete the optical drive?</p><p>You will not be able to insert any optical disks or ISO images or install the Guest Additions without it!</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to save the settings.</source>
+        <source>Failed to attach the optical drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>You are about to add a new optical drive to controller <b>%1</b>.</p><p>Would you like to choose a virtual optical disk to put in the drive or to leave it empty for now?</p></source>
+        <source>Failed to attach the floppy drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Are you sure you want to delete the optical drive?</p><p>You will not be able to insert any optical disks or ISO images or install the Guest Additions without it!</p></source>
+        <source>Failed to detach the optical drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to attach the optical drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <source>Failed to detach the floppy drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to attach the floppy drive (<nobr><b>%1</b></nobr>) to the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <source><p>Could not insert the <b>VirtualBox Guest Additions</b> disk image file into the virtual machine <b>%1</b>, as the machine has no optical drives. Please add a drive using the storage page of the virtual machine settings window.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
+        <source><p>The <b>VirtualBox Guest Additions</b> disk image file has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>.</nobr></p><p>Do you wish to register this disk image file and insert it into the virtual optical drive?</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
+        <source>Bad password or authentication failure.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The current port forwarding rules are not valid. Rule names should be unique.</source>
+        <source><p>A critical error has occurred while running the virtual machine and the machine execution has been stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, which you can find in the <nobr><b>%1</b></nob [...]
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The current port forwarding rules are not valid. Few rules have same host ports and conflicting IP addresses.</source>
+        <source><p>A critical error has occurred while running the virtual machine and the machine execution should be stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt>, which you can find in the virtual machine log directory, as well as a description of what you were doing when this  [...]
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
+        <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="https://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version using the link:</p><p><a href=%2>%3</a></p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Do you want to delete the storage unit of the virtual hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which mak [...]
+        <source>Drag and drop operation from host to guest failed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to detach the optical drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <source>Unable to cancel host to guest drag and drop operation.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to detach the floppy drive (<nobr><b>%1</b></nobr>) from the slot <i>%2</i> of the machine <b>%3</b>.</source>
+        <source>Drag and drop operation from guest to host failed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to open the disk image file <nobr><b>%1</b></nobr>.</source>
+        <source>Failed to connect the network adapter cable of the virtual machine <b>%1</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to close the disk image file <nobr><b>%1</b></nobr>.</source>
+        <source>Failed to disconnect the network adapter cable of the virtual machine <b>%1</b>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>You are about to create a new virtual machine without a hard disk. You will not be able to install an operating system on the machine until you add one. In the mean time you will only be able to start the machine using a virtual optical disk or from the network.</source>
+        <source><p>One or more disk image files are not currently accessible. As a result, you will not be able to operate virtual machines that use these files until they become accessible later.</p><p>Press <b>Check</b> to open the Virtual Media Manager window and see which files are inaccessible, or press <b>Ignore</b> to ignore this message.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Bad password or authentication failure.</source>
+        <source><p>Deleting the snapshot will cause the state information saved in it to be lost, and storage data spread over several image files that VirtualBox has created together with the snapshot will be merged into one file. This can be a lengthy process, and the information in the snapshot cannot be recovered.</p></p>Are you sure you want to delete the selected snapshot <b>%1</b>?</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>A critical error has occurred while running the virtual machine and the machine execution has been stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt> and the image file <tt>VBox.png</tt>, which you can find in the <nobr><b>%1</b></nob [...]
+        <source><p>Deleting the snapshot %1 will temporarily need more storage space. In the worst case the size of image %2 will grow by %3, however on this filesystem there is only %4 free.</p><p>Running out of storage space during the merge operation can result in corruption of the image and the VM configuration, i.e. loss of the VM and its data.</p><p>You may continue with deleting the snapshot at your own risk.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>A critical error has occurred while running the virtual machine and the machine execution should be stopped.</p><p>For help, please see the Community section on <a href=https://www.virtualbox.org>https://www.virtualbox.org</a> or your support contract. Please provide the contents of the log file <tt>VBox.log</tt>, which you can find in the virtual machine log directory, as well as a description of what you were doing when this  [...]
+        <source><p>Are you sure you want to release the disk image file <nobr><b>%1</b></nobr>?</p><p>This will detach it from the following virtual machine(s): <b>%2</b>.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>The virtual machine window will be now switched to <b>full-screen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in full-screen mode. You can access it by pressing <b>Host+Home</b>.</p></source>
+        <source><p>Do you want to delete the storage unit of the virtual hard disk <nobr><b>%1</b></nobr>?</p><p>If you select <b>Delete</b> then the specified storage unit will be permanently deleted. This operation <b>cannot be undone</b>.</p><p>If you select <b>Keep</b> then the hard disk will be only removed from the list of known hard disks, but the storage unit will be left untouched which mak [...]
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Could not switch the guest display to full-screen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to full-screen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
+        <source>Failed to open the disk image file <nobr><b>%1</b></nobr>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to connect the network adapter cable of the virtual machine <b>%1</b>.</source>
+        <source>Failed to close the disk image file <nobr><b>%1</b></nobr>.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Failed to disconnect the network adapter cable of the virtual machine <b>%1</b>.</source>
+        <source>You are about to create a new virtual machine without a hard disk. You will not be able to install an operating system on the machine until you add one. In the mean time you will only be able to start the machine using a virtual optical disk or from the network.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>Could not insert the <b>VirtualBox Guest Additions</b> disk image file into the virtual machine <b>%1</b>, as the machine has no optical drives. Please add a drive using the storage page of the virtual machine settings window.</p></source>
+        <source><p>The virtual machine window will be now switched to <b>full-screen</b> mode. You can go back to windowed mode at any time by pressing <b>%1</b>.</p><p>Note that the <i>Host</i> key is currently defined as <b>%2</b>.</p><p>Note that the main menu bar is hidden in full-screen mode. You can access it by pressing <b>Host+Home</b>.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>A new version of VirtualBox has been released! Version <b>%1</b> is available at <a href="https://www.virtualbox.org/">virtualbox.org</a>.</p><p>You can download this version using the link:</p><p><a href=%2>%3</a></p></source>
+        <source><p>Could not switch the guest display to full-screen mode due to insufficient guest video memory.</p><p>You should configure the virtual machine to have at least <b>%1</b> of video memory.</p><p>Press <b>Ignore</b> to switch to full-screen mode anyway or press <b>Cancel</b> to cancel the operation.</p></source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source><p>The <b>VirtualBox Guest Additions</b> disk image file has been successfully downloaded from <nobr><a href="%1">%1</a></nobr> and saved locally as <nobr><b>%2</b>.</nobr></p><p>Do you wish to register this disk image file and insert it into the virtual optical drive?</p></source>
+        <source>Encryption password for <nobr>ID = '%1'</nobr> is invalid.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Drag and drop operation from host to guest failed.</source>
+        <source>The current port forwarding rules are not valid. All of the host or guest address values should be correct or empty.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Unable to cancel host to guest drag and drop operation.</source>
+        <source>The current port forwarding rules are not valid. None of the guest address values may be empty.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Drag and drop operation from guest to host failed.</source>
+        <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 type="unfinished"></translation>
     </message>
 </context>
@@ -5587,891 +5283,895 @@
     <name>UIMiniToolBar</name>
     <message>
         <source>Always show the toolbar</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση γραμμής εργαλείων πάντα</translation>
     </message>
     <message>
         <source>Minimize Window</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελαχιστοποίηση παραθύρου</translation>
     </message>
     <message>
         <source>Exit Full Screen or Seamless Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Έξοδος από Πλήρη ή Ενσωματωμένη Λειτουργία</translation>
     </message>
     <message>
         <source>Close VM</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο ΕΜ</translation>
     </message>
 </context>
 <context>
     <name>UIMultiScreenLayout</name>
     <message>
         <source>Virtual Screen %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Εικονική Οθόνη %1</translation>
     </message>
     <message>
         <source>Use Host Screen %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Χρησιμοποιήστε την Οθόνη Οικοδεσπότη %1</translation>
     </message>
 </context>
 <context>
     <name>UINameAndSystemEditor</name>
     <message>
+        <source>N&ame:</source>
+        <translation>Όνομα:</translation>
+    </message>
+    <message>
         <source>Holds the name of the virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει το όνομα της εικονικής μηχανής.</translation>
     </message>
     <message>
         <source>&Type:</source>
-        <translation type="unfinished"></translation>
+        <translation>Τύπος:</translation>
     </message>
     <message>
         <source>Selects the operating system family that you plan to install into this virtual machine.</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέγει την οικογένεια λειτουργικού συστήματος που σκοπεύετε να εγκαταστήσετε σ' αυτή την εικονική μηχανή.</translation>
     </message>
     <message>
         <source>&Version:</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
-    </message>
-    <message>
-        <source>N&ame:</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέγει τον τύπο του λειτουργικού συστήματος που σκοπεύετε να εγκαταστήσετε σ' αυτή την εικονική μηχανή (λέγεται λειτουργικό σύστημα επισκέπτη).</translation>
     </message>
 </context>
 <context>
     <name>UINetworkManagerDialog</name>
     <message>
         <source>Network Operations Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαχειριστής Διαδικασιών Δικτύου</translation>
     </message>
     <message>
         <source>There are no active network operations.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν υπάρχουν ενεργές διαδικασίες δικτύου.</translation>
     </message>
     <message>
         <source>&Cancel All</source>
-        <translation type="unfinished"></translation>
+        <translation>Ακύρωση Όλων</translation>
     </message>
     <message>
         <source>Cancel all active network operations</source>
-        <translation type="unfinished"></translation>
+        <translation>Ακύρωση όλων των ενεργών διαδικασιών δικτύου</translation>
     </message>
     <message>
         <source>Network Operation</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαδικασίες Δικτύου</translation>
     </message>
     <message>
         <source>Restart network operation</source>
-        <translation type="unfinished"></translation>
+        <translation>Επανεκκίνηση της διαδικασίας δικτύου</translation>
     </message>
     <message>
         <source>Cancel network operation</source>
-        <translation type="unfinished"></translation>
+        <translation>Ακύρωση της διαδικασίας δικτύου</translation>
     </message>
     <message>
         <source>The network operation failed with the following error: %1.</source>
-        <translation type="unfinished"></translation>
+        <translation>Η διαδικασία δικτύου απέτυχε με το λάθος: %1.</translation>
     </message>
 </context>
 <context>
     <name>UINetworkManagerIndicator</name>
     <message>
         <source>Current network operations:</source>
-        <translation type="unfinished"></translation>
+        <translation>Τρέχοντες διαδικασίες δικτύου:</translation>
     </message>
     <message>
         <source>failed</source>
         <comment>network operation</comment>
-        <translation type="unfinished"></translation>
+        <translation>απέτυχε</translation>
     </message>
     <message>
         <source>(%1 of %2)</source>
-        <translation type="unfinished"></translation>
+        <translation>(%1 από %2)</translation>
     </message>
     <message>
         <source>Double-click for more information.</source>
-        <translation type="unfinished"></translation>
+        <translation>Διπλό-κλικ για περισότερες πληροφορίες.</translation>
     </message>
 </context>
 <context>
     <name>UINetworkReplyPrivate</name>
     <message>
         <source>Host not found</source>
-        <translation type="unfinished"></translation>
+        <translation>Ο οικοδεσπότης δεν βρέθηκε</translation>
     </message>
     <message>
         <source>Content access denied</source>
-        <translation type="unfinished"></translation>
+        <translation>Άρνηση πρόσβασης στο περιεχόμενο</translation>
     </message>
     <message>
         <source>Protocol failure</source>
-        <translation type="unfinished"></translation>
+        <translation>Αποτυχία πρωτόκολλου</translation>
     </message>
     <message>
         <source>Wrong SSL certificate format</source>
-        <translation type="unfinished"></translation>
+        <translation>Λανθασμένη μορφή πιστοποιητικού SSL</translation>
     </message>
     <message>
         <source>SSL authentication failed</source>
-        <translation type="unfinished"></translation>
+        <translation>Απέτυχε η πιστοποίηση SSL</translation>
     </message>
     <message>
         <source>Unknown reason</source>
-        <translation type="unfinished"></translation>
+        <translation>Άγνωστος λόγος</translation>
     </message>
     <message>
         <source>%1: %2</source>
         <comment>Context description: Error description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1: %2</translation>
     </message>
     <message>
         <source>Unable to initialize HTTP library</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Url not found on the server</source>
-        <translation type="unfinished"></translation>
+        <translation>Αδύνατη η εκκίνηση της βιβλιοθήκης HTTP</translation>
     </message>
     <message>
         <source>Connection refused</source>
-        <translation type="unfinished"></translation>
+        <translation>Η σύνδεση απορρίφθηκε</translation>
     </message>
     <message>
         <source>Content moved</source>
-        <translation type="unfinished"></translation>
+        <translation>Το περιεχόμενα μετακινήθηκε</translation>
     </message>
     <message>
         <source>Proxy not found</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν βρέθεκε μεσολάβηση</translation>
+    </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation>Δεν βρέθηκε το URL στον διακομιστή</translation>
     </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
     <message>
         <source>During proxy configuration</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατά τη διάρκεια της ρύθμισης μεσολάβησης</translation>
     </message>
     <message>
         <source>During certificate downloading</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατά τη διάρκεια του κατεβάσματος του πιστοποιητικού</translation>
     </message>
     <message>
         <source>During network request</source>
-        <translation type="unfinished"></translation>
+        <translation>Κατά τη διάρκεια της αίτησης δικτύου</translation>
     </message>
 </context>
 <context>
     <name>UIPopupCenter</name>
     <message>
         <source>Click for full details</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλικ για πλήρεις λεπτομέρειες</translation>
     </message>
 </context>
 <context>
     <name>UIPortForwardingTable</name>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Όνομα</translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Protocol</source>
-        <translation type="unfinished"></translation>
+        <translation>Πρωτόκολλο</translation>
     </message>
     <message>
         <source>Host IP</source>
-        <translation type="unfinished"></translation>
+        <translation>IP Οικοδεσπότη</translation>
     </message>
     <message>
         <source>Host Port</source>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα Οικοδεσπότη</translation>
     </message>
     <message>
         <source>Guest IP</source>
-        <translation type="unfinished"></translation>
+        <translation>IP Επισκέπτη</translation>
     </message>
     <message>
         <source>Guest Port</source>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα Επισκέπτη</translation>
     </message>
     <message>
         <source>Contains a list of port forwarding rules.</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιέχει ένα κατάλογο με τους κανόνες προώθησης θυρών.</translation>
     </message>
     <message>
         <source>Add New Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθήκη Καινούριου Κανόνα</translation>
     </message>
     <message>
         <source>Copy Selected Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή του Επιλεγμένου Κανόνα</translation>
     </message>
     <message>
         <source>Remove Selected Rule</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση του Επιλεγμένου Κανόνα</translation>
     </message>
     <message>
         <source>Adds new port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Προσθέτει καινούριο κανόνα προώθησης θυρών.</translation>
     </message>
     <message>
         <source>Copies selected port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγράφει τον επιλεγμένο κανόνα προώθησης θυρών.</translation>
     </message>
     <message>
         <source>Removes selected port forwarding rule.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαιρεί τον επιλεγμένο κανόνα προώθησης θυρών.</translation>
     </message>
 </context>
 <context>
     <name>UIProgressDialog</name>
     <message>
         <source>A few seconds remaining</source>
-        <translation type="unfinished"></translation>
+        <translation>Λίγα δευτερόλεπτα παραμένουν</translation>
     </message>
     <message>
         <source>Canceling...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ακυρώνεται...</translation>
     </message>
     <message>
         <source>&Cancel</source>
-        <translation type="unfinished"></translation>
+        <translation>Ακύρωση</translation>
     </message>
     <message>
         <source>Cancel the current operation</source>
-        <translation type="unfinished"></translation>
+        <translation>Ακύρωση της διαδικασίας δικτύου</translation>
     </message>
     <message>
         <source>%1, %2 remaining</source>
         <comment>You may wish to translate this more like "Time remaining: %1, %2"</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1, %2 παραμένει</translation>
     </message>
     <message>
         <source>%1 remaining</source>
         <comment>You may wish to translate this more like "Time remaining: %1"</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 παραμένει</translation>
     </message>
 </context>
 <context>
     <name>UISelectorWindow</name>
     <message>
         <source>Show Toolbar</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση γραμμής εργαλείων</translation>
     </message>
     <message>
         <source>Show Statusbar</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση γραμμής κατάστασης</translation>
     </message>
     <message>
         <source>Select a virtual machine file</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογή αρχείου εικονικής μηχανής</translation>
     </message>
     <message>
         <source>Virtual machine files (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Αρχεία εικονικής μηχανής (%1)</translation>
     </message>
     <message>
         <source>Manager</source>
         <comment>Note: main window title which is pretended by the product name.</comment>
-        <translation type="unfinished"></translation>
+        <translation>Διαχειριστής</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 [...]
-        <translation type="unfinished"></translation>
+        <translation><h3>Καλώς ήρθατε στο VirtualBox!</h3><p>Το αριστερό τμήμα του παραθύρου περιέχει ένα κατάλογο με όλες τις εικονικές μηχανές στον υπολογιστή σας. Ο κατάλογος είναι άδειος τώρα γιατί δεν έχετε δημιουργήσει ακόμα καμμία εικονική μηχανή.<img src=:/welcome.png align=right/></p><p>Για να δημιουργήσετε μία καινούρια εικονική μηχανή, πατήστε το κουμπί <b>Νέα</b> στον γραμμή εργαλείων που βρίσκεται στο πάνω μέρος του παραθύρου.& [...]
     </message>
 </context>
 <context>
     <name>UISession</name>
     <message>
         <source>Updating Guest Additions</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναβάθμιση Προσθηκών Επισκέπτη</translation>
     </message>
 </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 type="unfinished"></translation>
+        <translation><i>Διαλέξτε μία κατηγορία ρυθμίσεων από τον κατάλογο στα αριστερά και κουνήστε το ποντίκι πάνω από μία ρύθμιση για περισσότερες πληροφορίες.</i></translation>
     </message>
     <message>
         <source>Invalid settings detected</source>
-        <translation type="unfinished"></translation>
+        <translation>Εντοπίστηκαν μη έγκυρες ρυθμίσεις</translation>
     </message>
     <message>
         <source><b>%1</b> page:</source>
-        <translation type="unfinished"></translation>
+        <translation><b>%1</b> σελίδα:</translation>
     </message>
     <message>
         <source><b>%1: %2</b> page:</source>
-        <translation type="unfinished"></translation>
+        <translation><b>%1: %2</b> σελίδα:</translation>
     </message>
 </context>
 <context>
     <name>UISettingsDialogGlobal</name>
     <message>
         <source>General</source>
-        <translation type="unfinished">Γενικά</translation>
+        <translation>Γενικά</translation>
     </message>
     <message>
         <source>Input</source>
-        <translation type="unfinished"></translation>
+        <translation>Είσοδος</translation>
     </message>
     <message>
         <source>Update</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενημερώση</translation>
     </message>
     <message>
         <source>Language</source>
-        <translation type="unfinished">Γλώσσα</translation>
+        <translation>Γλώσσα</translation>
     </message>
     <message>
         <source>Network</source>
-        <translation type="unfinished">Δίκτυο</translation>
+        <translation>Δίκτυο</translation>
     </message>
     <message>
         <source>Extensions</source>
-        <translation type="unfinished">Επεκτάσεις</translation>
+        <translation>Επεκτάσεις</translation>
     </message>
     <message>
         <source>VirtualBox - %1</source>
-        <translation type="unfinished"></translation>
+        <translation>VirtualBox - %1</translation>
     </message>
     <message>
         <source>Proxy</source>
-        <translation type="unfinished"></translation>
+        <translation>Μεσολάβηση</translation>
     </message>
     <message>
         <source>Display</source>
-        <translation type="unfinished">Οθόνη</translation>
+        <translation>Οθόνη</translation>
     </message>
     <message>
         <source>Preferences</source>
-        <translation type="unfinished"></translation>
+        <translation>Προτιμήσεις</translation>
     </message>
 </context>
 <context>
     <name>UISettingsDialogMachine</name>
     <message>
         <source>General</source>
-        <translation type="unfinished">Γενικά</translation>
+        <translation>Γενικά</translation>
     </message>
     <message>
         <source>System</source>
-        <translation type="unfinished">Σύστημα</translation>
+        <translation>Σύστημα</translation>
     </message>
     <message>
         <source>Display</source>
-        <translation type="unfinished">Οθόνη</translation>
+        <translation>Οθόνη</translation>
     </message>
     <message>
         <source>Storage</source>
-        <translation type="unfinished">Αποθήκευση</translation>
+        <translation>Αποθήκευση</translation>
     </message>
     <message>
         <source>Audio</source>
-        <translation type="unfinished">Ήχος</translation>
+        <translation>Ήχος</translation>
     </message>
     <message>
         <source>Network</source>
-        <translation type="unfinished">Δίκτυο</translation>
+        <translation>Δίκτυο</translation>
     </message>
     <message>
         <source>Ports</source>
-        <translation type="unfinished"></translation>
+        <translation>Θύρες</translation>
     </message>
     <message>
         <source>Serial Ports</source>
-        <translation type="unfinished">Σειριακές Θύρες</translation>
+        <translation>Σειριακές Θύρες</translation>
     </message>
     <message>
         <source>Parallel Ports</source>
-        <translation type="unfinished">Παράλληλες Θύρες</translation>
+        <translation>Παράλληλες Θύρες</translation>
     </message>
     <message>
         <source>USB</source>
-        <translation type="unfinished">USB</translation>
+        <translation>USB</translation>
     </message>
     <message>
         <source>Shared Folders</source>
-        <translation type="unfinished">Κοινοί Φάκελοι</translation>
+        <translation>Κοινοί Φάκελοι</translation>
     </message>
     <message>
         <source>%1 - %2</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 - %2</translation>
     </message>
     <message>
         <source>User Interface</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιβάλλον χρήστη</translation>
     </message>
     <message>
         <source>Settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίσεις</translation>
     </message>
 </context>
 <context>
     <name>UISettingsSerializerProgress</name>
     <message>
         <source>Loading Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Φορτώνονται οι Ρυθμίσεις...</translation>
     </message>
     <message>
         <source>Saving Settings...</source>
-        <translation type="unfinished"></translation>
+        <translation>Σώζονται οι Ρυθμίσεις...</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>
-    </message>
-    <message>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο</translation>
     </message>
     <message>
         <source>Enable Status Bar</source>
-        <translation type="unfinished"></translation>
+        <translation>Ενεργοποίηση γραμμής κατάστασης</translation>
+    </message>
+    <message>
+        <source><nobr><b>Click</b> to toggle indicator presence.</nobr><br><nobr><b>Drag&Drop</b> to change indicator position.</nobr></source>
+        <translation><nobr><b>Κάντε κλικ</b> για εναλλαγή του ενδεικτικού.</nobr><br><nobr><b>Μεταφορά&Απόθεση</b> για αλλαγή της θέσης του ενδεικτικού.</nobr></translation>
     </message>
 </context>
 <context>
     <name>UITextEditor</name>
     <message>
         <source>Edit text</source>
-        <translation type="unfinished"></translation>
+        <translation>Επεξεργασία κειμένου</translation>
     </message>
     <message>
         <source>&Replace...</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντικατάσταση...</translation>
     </message>
     <message>
         <source>Replaces the current text with the content of a file.</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντικαθιστά το παρών κείμενο με τα περιεχόμενα ενός αρχείου.</translation>
     </message>
     <message>
         <source>Text (*.txt);;All (*.*)</source>
-        <translation type="unfinished"></translation>
+        <translation>Κείμενο (*.txt);;Όλα (*.*)</translation>
     </message>
     <message>
         <source>Select a file to open...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλογή αρχείου για άνοιγμα...</translation>
     </message>
 </context>
 <context>
     <name>UIUpdateManager</name>
     <message>
         <source>1 day</source>
-        <translation type="unfinished"></translation>
+        <translation>1 ημέρα</translation>
     </message>
     <message>
         <source>2 days</source>
-        <translation type="unfinished"></translation>
+        <translation>2 ημέρες</translation>
     </message>
     <message>
         <source>3 days</source>
-        <translation type="unfinished"></translation>
+        <translation>3 ημέρες</translation>
     </message>
     <message>
         <source>4 days</source>
-        <translation type="unfinished"></translation>
+        <translation>4 ημέρες</translation>
     </message>
     <message>
         <source>5 days</source>
-        <translation type="unfinished"></translation>
+        <translation>5 ημέρες</translation>
     </message>
     <message>
         <source>6 days</source>
-        <translation type="unfinished"></translation>
+        <translation>6 ημέρες</translation>
     </message>
     <message>
         <source>1 week</source>
-        <translation type="unfinished"></translation>
+        <translation>1 εβδομάδα</translation>
     </message>
     <message>
         <source>2 weeks</source>
-        <translation type="unfinished"></translation>
+        <translation>2 εβδομάδες</translation>
     </message>
     <message>
         <source>3 weeks</source>
-        <translation type="unfinished"></translation>
+        <translation>3 εβδομάδες</translation>
     </message>
     <message>
         <source>1 month</source>
-        <translation type="unfinished"></translation>
+        <translation>1 μήνα</translation>
     </message>
     <message>
         <source>Never</source>
-        <translation type="unfinished"></translation>
+        <translation>Ποτέ</translation>
     </message>
 </context>
 <context>
     <name>UIUpdateStepVirtualBox</name>
     <message>
         <source>Checking for a new VirtualBox version...</source>
-        <translation type="unfinished"></translation>
+        <translation>Έλεγχος για νεότερη έκδοση του VirtualBox</translation>
     </message>
 </context>
 <context>
     <name>UIVMCloseDialog</name>
     <message>
         <source>Close Virtual Machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο Εικονικής Μηχανής</translation>
     </message>
     <message>
         <source>You want to:</source>
-        <translation type="unfinished"></translation>
+        <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 th [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Σώζει την τρέχουσα κατάσταση εκτέλεσης της εικονικής μηχανής στον φυσικό σκληρό δίσκο του οικοδεσπότη.</p><p>Την επόμενη φορά που θα ξεκινήσει η μηχανή, θα αποκατασταθεί από τη σωσμένη κατάσταση και θα συνεχίσει την εκτέλεση από το ίδιο σημείο που τη σώσατε, το οποίο θα σας επιτρέψει να συνεχίσετε τη δουλειά σας άμεσα.</p><p>Σημειώνεται οτι το να σώσετε την κατάσταση της μηχανής μπορεί να πάρει πολύ χρόνο, κάτι το οποίο εξαρτάται από  [...]
     </message>
     <message>
         <source>&Save the machine state</source>
-        <translation type="unfinished"></translation>
+        <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  [...]
-        <translation type="unfinished"></translation>
+        <translation>Στέλνει το σήμα τερματισμού ACPI στην εικονική μηχανή.</p><p>Κανονικά, το λειτουργικό σύστημα του επισκέπτη θα αναγνωρίσει το σήμα και θα πραγματοποιήσει μία διαδικασία τερματισμού. Αυτός είναι ο προτινόμενος τρόπος να τερματίσετε μία εικονική μηχανή γιατί όλες οι εφαρμογές που τρέχουν στην ΕΜ θα έχουν την ευκαιρία να σώσουν τα αρχεία τους και τα δεδομένα τους.</p><p>Αν η ΕΜ δεν ανταποκριθεί στο σήμα, τότε μπορεί το λειτουργικό σύστημα του επι [...]
     </message>
     <message>
         <source>S&end the shutdown signal</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Σβήστε την εικονική μηχανή.</p><p>Σημειώνεται οτι αυτή η ενέργεια θα σταματήσει την εκτέλεση της μηχανής αμέσως και το λειτουργικό σύστημα του επισκέπτη δεν θα μπορέσει να ακολουθήσει μία κανονική διαδικασία τερματισμού, το οποίο μπορεί να έχει αποτέλεσμα την <i>απώλεια δεδομένων</i> στην εικονική μηχανή. Επιλογή αυτής της ενέργειας μόνο αν η εικονική μηχανή δεν ανταποκρίνεται στην ενέργεια <b>Στείλτε το σήμα τερματισμού</b&g [...]
     </message>
     <message>
         <source>&Power off the machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Τερματισμός της μηχανής</translation>
     </message>
     <message>
         <source>Restore the machine state stored in the current snapshot</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, η μηχανή θα επανέρθει στην αποθηκευμένη κατάσταση του τρέχοντος στιγμιότυπου. Αυτό είναι χρήσιμο αν είστε σίγουροι οτι θέλετε να απορρίψετε τις τελευταίες συνεδρίες και να ξεκινήσετε ξανά στο αποθηκευμένο στιγμιότυπο.</p></translation>
     </message>
     <message>
         <source>&Restore current snapshot '%1'</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά τρέχοντος στιγμιότυπου '%1'</translation>
     </message>
     <message>
         <source>&Continue running in the background</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Κλείστε τα παράθυρα της εικονικής μηχανής αλλά διατηρείστε τη σε λειτουργία.</p><p>Μπορείτε να χρησιμοποιήσετε τον Διαχειριστή του VirtualBox για να επαναφέρετε το παράθυρο της εικονικής μηχανής.</p></translation>
     </message>
 </context>
 <context>
     <name>UIVMDesktop</name>
     <message>
         <source>&Details</source>
-        <translation type="unfinished">&Λεπτομέρειες</translation>
+        <translation>&Λεπτομέρειες</translation>
     </message>
     <message>
         <source>&Snapshots</source>
-        <translation type="unfinished"></translation>
+        <translation>&Στιγμιότυπα</translation>
     </message>
 </context>
 <context>
     <name>UIVMInfoDialog</name>
     <message>
         <source>%1 - Session Information</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Configuration &Details</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>&Runtime Information</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 - Πληροφορίες συνεδρίας</translation>
     </message>
     <message>
         <source>DMA Transfers</source>
-        <translation type="unfinished"></translation>
+        <translation>Μεταφορές DMA</translation>
     </message>
     <message>
         <source>PIO Transfers</source>
-        <translation type="unfinished"></translation>
+        <translation>Μεταφορές PIO</translation>
     </message>
     <message>
         <source>Data Read</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεδομένα που διαβάστηκαν</translation>
     </message>
     <message>
         <source>Data Written</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεδομένα που γράφηκαν</translation>
     </message>
     <message>
         <source>Data Transmitted</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεδομένα που στάλθηκαν</translation>
     </message>
     <message>
         <source>Data Received</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεδομένα που λήφθηκαν</translation>
+    </message>
+    <message>
+        <source>Runtime Attributes</source>
+        <translation>Ιδιότητες Εκτέλεσης</translation>
+    </message>
+    <message>
+        <source>Screen Resolution</source>
+        <translation>Ανάλυση οθόνης</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest additions</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δεν εντοπίστηκαν</translation>
     </message>
     <message>
         <source>Not Detected</source>
         <comment>guest os type</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δεν εντοπίστηκε</translation>
     </message>
     <message>
-        <source>Not Available</source>
-        <comment>details report (VRDE server port)</comment>
-        <translation type="unfinished"></translation>
+        <source>Guest Additions</source>
+        <translation>Προσθήκες Επισκέπτη</translation>
     </message>
     <message>
-        <source>Runtime Attributes</source>
-        <translation type="unfinished"></translation>
+        <source>Guest OS Type</source>
+        <translation>Τύπος ΛΣ Επισκέπτη</translation>
     </message>
     <message>
-        <source>Screen Resolution</source>
-        <translation type="unfinished"></translation>
+        <source>No Network Adapters</source>
+        <translation>Όχι Κάρτες Δικτύου</translation>
     </message>
     <message>
-        <source>VM Uptime</source>
-        <translation type="unfinished"></translation>
+        <source>Storage Statistics</source>
+        <translation>Στατιστικά αποθήκευσης</translation>
     </message>
     <message>
-        <source>Clipboard Mode</source>
-        <translation type="unfinished"></translation>
+        <source>No Storage Devices</source>
+        <translation>Όχι Συσκευές Αποθήκευσης</translation>
     </message>
     <message>
-        <source>Drag and Drop Mode</source>
-        <translation type="unfinished"></translation>
+        <source>Network Statistics</source>
+        <translation>Στατιστικά δικτύου</translation>
     </message>
     <message>
-        <source>Guest Additions</source>
-        <translation type="unfinished"></translation>
+        <source>Not Available</source>
+        <comment>details report (VRDE server port)</comment>
+        <translation>Μη διαθέσιμη</translation>
     </message>
     <message>
-        <source>Guest OS Type</source>
-        <translation type="unfinished">Τύπος ΛΣ Επισκέπτη</translation>
+        <source>Clipboard Mode</source>
+        <translation>Λειτουργία Κοινών Πρόχειρων</translation>
     </message>
     <message>
-        <source>Storage Statistics</source>
-        <translation type="unfinished"></translation>
+        <source>Configuration &Details</source>
+        <translation>Λεπτομέρειες Ρυθμίσεων</translation>
     </message>
     <message>
-        <source>No Storage Devices</source>
-        <translation type="unfinished"></translation>
+        <source>&Runtime Information</source>
+        <translation>Πληροφορίες Εκτέλεσης</translation>
     </message>
     <message>
-        <source>Network Statistics</source>
-        <translation type="unfinished"></translation>
+        <source>VM Uptime</source>
+        <translation>Χρόνος λειτουργίας ΕΜ</translation>
     </message>
     <message>
-        <source>No Network Adapters</source>
-        <translation type="unfinished"></translation>
+        <source>Drag and Drop Mode</source>
+        <translation>Λειτουργία Μεταφοράς και Απόθεσης</translation>
     </message>
 </context>
 <context>
     <name>UIVMListView</name>
     <message>
         <source>Inaccessible</source>
-        <translation type="unfinished">Μη προσβάσιμο</translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><nobr><b>%1</b><br></nobr><nobr>Μη προσβάσιμη από %2</nobr></translation>
     </message>
 </context>
 <context>
     <name>UIVMLogViewer</name>
     <message>
         <source>Close the search panel</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο του πίνακα αναζήτησης</translation>
     </message>
     <message>
         <source>&Find</source>
-        <translation type="unfinished"></translation>
+        <translation>Εύρεση</translation>
     </message>
     <message>
         <source>Enter a search string here</source>
-        <translation type="unfinished"></translation>
+        <translation>Εισάγετε μία ακολουθία αναζήτησης</translation>
     </message>
     <message>
         <source>&Previous</source>
-        <translation type="unfinished"></translation>
+        <translation>&Προηγούμενο</translation>
     </message>
     <message>
         <source>Search for the previous occurrence of the string</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναζήτηση προηγούμενου αποτελέσματος ακολουθίας</translation>
     </message>
     <message>
         <source>&Next</source>
-        <translation type="unfinished">&Επόμενο</translation>
+        <translation>&Επόμενο</translation>
     </message>
     <message>
         <source>Search for the next occurrence of the string</source>
-        <translation type="unfinished"></translation>
+        <translation>Αναζήτηση επόμενου αποτελέσματος ακολουθίας</translation>
     </message>
     <message>
         <source>C&ase Sensitive</source>
-        <translation type="unfinished"></translation>
+        <translation>Ταίριασμα πεζών/κεφαλαίων</translation>
     </message>
     <message>
         <source>Perform case sensitive search (when checked)</source>
-        <translation type="unfinished"></translation>
+        <translation>Πραγματοποιήτε αναζήτηση με ταίριασμα πεζών/κεφαλαίων (όταν είναι επιλεγμένο)</translation>
     </message>
     <message>
         <source>String not found</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Δεν βρέθηκαν αρχεία καταγραφής. Πατήστε το κουμπί <b>Ανανέωση</b> για να επανασάρωση του καταλόγου με τα αρχεία καταγραφής <nobr><b>%1</b></nobr>.</p></translation>
     </message>
     <message>
         <source>Save VirtualBox Log As</source>
-        <translation type="unfinished"></translation>
+        <translation>Σώστε την καταγραφή VirtualBox ως</translation>
     </message>
     <message>
         <source>%1 - VirtualBox Log Viewer</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 - Αναγνώστης Καταγραφών VirtualBox</translation>
     </message>
     <message>
         <source>&Refresh</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανανέωση</translation>
     </message>
     <message>
         <source>&Save</source>
-        <translation type="unfinished"></translation>
+        <translation>Σώσιμο</translation>
     </message>
     <message>
         <source>Close</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλείσιμο</translation>
     </message>
 </context>
 <context>
     <name>UIWizard</name>
     <message>
         <source>&Expert Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Για Προχωρημένους</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>Εναλλαγή σε <nobr><b>Για Προχωρημένους</b></nobr>, λειτουργία μίας σελίδας για πεπειραμένους χρήστες.</translation>
     </message>
     <message>
         <source>&Guided Mode</source>
-        <translation type="unfinished"></translation>
+        <translation>Καθοδηγημένη Λειτουργία</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>Εναλλαγή σε <nobr><b>Καθοδηγημένη Λειτουργία</b></nobr>, βήμα προς βήμα ρυθμίσεις με λεπτομερείς εξηγήσεις.</translation>
     </message>
 </context>
 <context>
     <name>UIWizardCloneVD</name>
     <message>
         <source>Copy</source>
-        <translation type="unfinished">Αντιγραφή</translation>
+        <translation>Αντιγραφή</translation>
     </message>
     <message>
         <source>&Dynamically allocated</source>
-        <translation type="unfinished"></translation>
+        <translation>Δυναμική εκχώρηση</translation>
     </message>
     <message>
         <source>&Fixed size</source>
-        <translation type="unfinished"></translation>
+        <translation>Πάγιο μέγεθος</translation>
     </message>
     <message>
         <source>&Split into files of less than 2GB</source>
-        <translation type="unfinished"></translation>
+        <translation>Χωρισμένη σε αρχεία μικρότερα των 2GB</translation>
     </message>
     <message>
         <source>%1_copy</source>
         <comment>copied virtual hard drive name</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1_αντίγραφο</translation>
     </message>
     <message>
         <source>Copy Virtual Hard Disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή Εικονικού  Σκληρού Δίσκου</translation>
     </message>
     <message>
         <source>Hard disk to copy</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Παρακαλώ επιλέξτε τον εικονικό σκληρό δίσκο που θέλετε να αντιγράψετε αν δεν είναι ήδη επιλεγμένος. Μπορείτε να διαλέξετε είτε από τον κατάλογο, ή να χρησιμοποιήσετε το εικονίδιο φακέλου δίπλα από τον κατάλογο για να επιλέξετε.</p></translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file to copy...</source>
-        <translation type="unfinished"></translation>
+        <translation>Παρακαλώ επιλέξτε έναν εικονικό σκληρό δίσκο για αντιγραφή...</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέξτε τον τύπο του αρχείου που θέλετε να χρησιμοποιήσετε για το νέο εικονικό σκληρό δίσκο. Αν δεν χρειάζεται να τον χρησιμοποιήσετε με άλλο λογισμικό εικονοποίησης μπορείτε να αφήσετε αυτή τη ρύθμιση όπως είναι.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></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.</p></source>
+        <translation type="obsolete"><p>Μπορείτε επίσης να επιλέξετε να <b>χωρίσετε</b> το αρχείο του σκληρού δίσκου σε αρχεία μέγιστου μεγέθους 2 gigabytes το καθένα. Αυτό είναι κυρίως χρήσιμο αν θέλετε να αποθηκεύσετε την εικονική μηχανή σε αποσπώμενη συσκευή USB ή σε παλιά συστήματα, μερικά απ' τα οποία δεν διαχειρίζονται πολύ μεγάλα αρχεία.</p></translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Παρακαλώ επιλέξτε μία θέση για το αρχείο του νέου εικονικού σκληρού δίσκου</translation>
     </message>
     <message>
         <source>New hard disk to create</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Συμπληρώστε το όνομα του αρχείου του νέου εικονικού σκληρού δίσκου στο κουτί παρακάτω ή κάντε κλικ στο εικονίδιο φακέλου για να επιλέξετε ένα φάκελο στον οποίο θα δημιουργηθεί το αρχείο.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε μία θέση για το αρχείο του νέου εικονικού σκληρού δίσκου...</translation>
     </message>
     <message>
         <source>Hard disk to &copy</source>
-        <translation type="unfinished"></translation>
+        <translation>Σκληρός δίσκος για αντιγραφή</translation>
     </message>
     <message>
         <source>&New hard disk to create</source>
-        <translation type="unfinished"></translation>
+        <translation>Νέος σκληρός δίσκος για δημιουργία</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
+        <translation>Τύπος αρχείου σκληρού δίσκου</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>
     </message>
 </context>
@@ -6479,432 +6179,436 @@
     <name>UIWizardCloneVM</name>
     <message>
         <source>Linked Base for %1 and %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Συνδεδεμένη Βάση για %1 και %2</translation>
     </message>
     <message>
         <source>Clone Virtual Machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλωνοποιήστε την Εικονική Μηχανή</translation>
     </message>
     <message>
         <source>Clone</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλωνοποίηση</translation>
     </message>
     <message>
         <source>%1 Clone</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 Κλώνος</translation>
     </message>
     <message>
         <source>New machine name</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Όταν επιλεγεί, μία νέα μοναδική διεύθυνση MAC θα ανατεθεί σε όλες τις ρυθμισμένες κάρτες δικτύου.</translation>
     </message>
     <message>
         <source>&Reinitialize the MAC address of all network cards</source>
-        <translation type="unfinished">Επαναρχικοποίησε τις διευθύνσεις MAC όλων των καρτών δικτύου</translation>
+        <translation>Επαναρχικοποιήστε τις διευθύνσεις MAC όλων των καρτών δικτύου</translation>
     </message>
     <message>
         <source>Clone type</source>
-        <translation type="unfinished"></translation>
+        <translation>Τύπος κλώνου</translation>
     </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 type="unfinished"></translation>
+        <translation><p>Αν δημιουργήσετε ένα <b>Συνδεδεμένο κλώνο</b> τότε θα δημιουργηθεί ένα καινούριο στιγμιότυπο στην αρχική εικονική μηχανή ως μέρος της διαδικασίας κλωνοποίησης.</p></translation>
     </message>
     <message>
         <source>&Full clone</source>
-        <translation type="unfinished"></translation>
+        <translation>Πλήρες κλώνος</translation>
     </message>
     <message>
         <source>&Linked clone</source>
-        <translation type="unfinished"></translation>
+        <translation>Συνδεδεμένος κλώνος</translation>
     </message>
     <message>
         <source>Snapshots</source>
-        <translation type="unfinished"></translation>
+        <translation>Στιγμιότυπα</translation>
     </message>
     <message>
         <source><p>Please choose which parts of the snapshot tree should be cloned with the machine.</p></source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Αν επιλέξετε <b>Όλα</b>, η καινούρια μηχανή θα αντικατοπτρίζει την τρέχουσα κατάσταση της αρχικής μηχανής και θα έχει ταιριαστά στιγμιότυπα για όλα τα στιγμιότυπα της αρχικής μηχανής.</p></translation>
     </message>
     <message>
         <source>Current &machine state</source>
-        <translation type="unfinished"></translation>
+        <translation>Τρέχουσα κατάσταση</translation>
     </message>
     <message>
         <source>Current &snapshot tree branch</source>
-        <translation type="unfinished"></translation>
+        <translation>Τρέχον παρακλάδι του δέντρου στιγμιοτύπων</translation>
     </message>
     <message>
         <source>&Everything</source>
-        <translation type="unfinished"></translation>
+        <translation>Τα πάντα</translation>
     </message>
     <message>
         <source>New machine &name</source>
-        <translation type="unfinished"></translation>
+        <translation>Νέο όνομα μηχανής</translation>
     </message>
     <message>
         <source>&Full Clone</source>
-        <translation type="unfinished"></translation>
+        <translation>Πλήρης κλώνος</translation>
     </message>
     <message>
         <source>&Linked Clone</source>
-        <translation type="unfinished"></translation>
+        <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  [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Παρακαλώ επιλέξτε τον τύπο του κλώνου που θέλετε να δημιουργήσετε.</p><p>Αν επιλέξετε <b>Πλήρης κλώνος</b>, θα δημιουργηθεί ένα ακριβές αντίγραφο της αρχικής εικονικής μηχανής (συμπεριλαμβανομένων όλων των αρχείων των εικονικών σκληρών δίσκων).</p><p>Αν επιλέξετε <b>Συνδεδεμένος κλώνος</b>, θα δημιουργηθεί μία καινούρια μηχανή, αλλά οι εικονικοί σκληροί δίσκοι είναι συνδεδεμένοι με τα αρχεία των εικονικών σκληρ [...]
     </message>
 </context>
 <context>
     <name>UIWizardExportApp</name>
     <message>
         <source>Checking files ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ελέγχος αρχείων ...</translation>
     </message>
     <message>
         <source>Removing files ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση αρχείων ...</translation>
     </message>
     <message>
         <source>Exporting Appliance ...</source>
-        <translation type="unfinished"></translation>
+        <translation>Εξάγεται η Συσκευή ...</translation>
     </message>
     <message>
         <source>Export Virtual Appliance</source>
-        <translation type="unfinished"></translation>
+        <translation>Εξάγετε Εικονική Συσκευή</translation>
     </message>
     <message>
         <source>Restore Defaults</source>
-        <translation>Εφαναφορά Προεπιλεγμένων</translation>
+        <translation>Επαναφορά Προεπιλεγμένων</translation>
     </message>
     <message>
         <source>Export</source>
-        <translation type="unfinished"></translation>
+        <translation>Εξαγωγή</translation>
     </message>
     <message>
         <source>Virtual machines to export</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Επιλέξτε τις εικονικές μηχανές που θα προστεθούν στη συσκευή. Μπορείτε να επιλέξετε παραπάνω από μία. Σημειώστε οτι αυτές οι μηχανές πρέπει να έχουν τερματίσει τη λειτουργία τους πριν να τις εξάγετε.</p></translation>
     </message>
     <message>
         <source>Appliance settings</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέξτε πού θα δημιουργήσετε την εικονική συσκευή. Μπορείτε να τις δημιουργήσετε στον υπολογιστή σας, στις υπηρεσίες Sun Cloud ή σε διακομιστή αποθήκευσης S3.</translation>
     </message>
     <message>
         <source>Create on</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργήστε στο</translation>
     </message>
     <message>
         <source>&This computer</source>
-        <translation type="unfinished"></translation>
+        <translation>Αυτόν το υπολογιστή</translation>
     </message>
     <message>
         <source>Sun &Cloud</source>
-        <translation type="unfinished"></translation>
+        <translation>Sun &Cloud</translation>
     </message>
     <message>
         <source>&Simple Storage System (S3)</source>
-        <translation type="unfinished"></translation>
+        <translation>Απλό σύστημα αποθήκευσης (Amazon S3)</translation>
     </message>
     <message>
         <source>Appliance</source>
-        <translation type="unfinished"></translation>
+        <translation>Συσκευή</translation>
     </message>
     <message>
         <source>&Username:</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα:</translation>
     </message>
     <message>
         <source>&Password:</source>
-        <translation type="unfinished"></translation>
+        <translation>Κωδικός:</translation>
     </message>
     <message>
         <source>&Hostname:</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα Οικοδεσπότη:</translation>
     </message>
     <message>
         <source>&Bucket:</source>
-        <translation type="unfinished"></translation>
+        <translation>Δοχείο:</translation>
     </message>
     <message>
         <source>&File:</source>
-        <translation type="unfinished"></translation>
+        <translation>Αρχείο:</translation>
     </message>
     <message>
         <source>Open Virtualization Format Archive (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Αρχείο Μορφής Ανοιχτής Εικονοποίησης (OVF) (%1)</translation>
     </message>
     <message>
         <source>Open Virtualization Format (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Μορφή Ανοιχτής Εικονοποίησης (OVF) (%1)</translation>
     </message>
     <message>
         <source>Write in legacy OVF 0.9 format for compatibility with other virtualization products.</source>
-        <translation type="unfinished"></translation>
+        <translation>Εγγραφή σε μορφή παλαιού τύπου OVF 0.9 για συμβατότητα με άλλα προγράμματα εικονοποίησης.</translation>
     </message>
     <message>
         <source>Create a Manifest file for automatic data integrity checks on import.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργείστε ένα Δηλωτικό αρχείο για αυτόματο έλεγχο των δεδομένων κατά την εισαγωγή.</translation>
     </message>
     <message>
         <source>Write &Manifest file</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Αυτές είναι οι αναλυτικές πληροφορίες που θα προστεθούν στην εικονική συσκευή. Μπορείτε να το αλλάξετε κάνοντας διπλό κλικ στις σειρές.</translation>
     </message>
     <message>
         <source>Virtual &machines to export</source>
-        <translation type="unfinished"></translation>
+        <translation>Εικονικές μηχανές για εξαγωγή</translation>
     </message>
     <message>
         <source>Appliance &settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίσεις συσκευής</translation>
     </message>
     <message>
         <source>&Destination</source>
-        <translation type="unfinished"></translation>
+        <translation>Προορισμός</translation>
     </message>
     <message>
         <source>&Local Filesystem </source>
-        <translation type="unfinished"></translation>
+        <translation>Τοπικό Σύστημα Αρχείων</translation>
     </message>
     <message>
         <source>Storage settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίσεις αποθήκευσης</translation>
     </message>
     <message>
         <source>Please choose a file to export the virtual appliance to</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε ένα αρχείο στο οποίο θα εξάγετε την εικονική μηχανή</translation>
     </message>
     <message>
         <source>F&ormat:</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαμόρφωση:</translation>
     </message>
     <message>
         <source>OVF 0.9</source>
-        <translation type="unfinished"></translation>
+        <translation>OVF 0.9</translation>
     </message>
     <message>
         <source>OVF 1.0</source>
-        <translation type="unfinished"></translation>
+        <translation>OVF 1.0</translation>
     </message>
     <message>
         <source>OVF 2.0</source>
-        <translation type="unfinished"></translation>
+        <translation>OVF 2.0</translation>
     </message>
     <message>
         <source>Write in standard OVF 1.0 format.</source>
-        <translation type="unfinished"></translation>
+        <translation>Εγγραφή σε τυπική μορφή  OVF 1.0.</translation>
     </message>
     <message>
         <source>Write in new experimental OVF 2.0 format.</source>
-        <translation type="unfinished"></translation>
+        <translation>Εγγραφή σε πειραματική μορφή  OVF 2.0.</translation>
     </message>
     <message>
         <source>&Storage settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Ρυθμίσεις αποθήκευσης</translation>
     </message>
 </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 type="unfinished"></translation>
+        <translation><p>Επιλέξτε το όνομα αρχείου στο οποίο θα εξάγετε την μηχανή OVF/OVA.</p><p>Αν χρησιμοποιήσετε την επέκταση <i>ova</i>, τότε όλα τα αρχεία θα συνδυαστούν σε ένα συμπιεσμένο αρχείο Open Virtualization Format.</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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Συμπληρώστε τα πρόσθετα πεδία όπως το όνομα χρήστη, τον κωδικό, το όνομα του οικοδεσπότη και το δοχείο, και επιλέξτε το όνομα για το αρχείο OVF.</translation>
     </message>
     <message>
         <source>Choose a file to export the virtual appliance to...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε ένα αρχείο στο οποίο θα εξάγετε την εικονική μηχανή...</translation>
     </message>
 </context>
 <context>
     <name>UIWizardExportAppPageExpert</name>
     <message>
         <source>Choose a file to export the virtual appliance to...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε ένα αρχείο στο οποίο θα εξάγετε την εικονική μηχανή...</translation>
     </message>
 </context>
 <context>
     <name>UIWizardFirstRun</name>
     <message>
         <source>Select start-up disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαλέξτε δίσκο εκκίνησης</translation>
     </message>
     <message>
         <source>Start</source>
-        <translation type="unfinished"></translation>
+        <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 u [...]
-        <translation type="unfinished"></translation>
+        <translation><p>Παρακαλώ επιλέξτε ένα αρχείο εικονικού οπτικού δίσκου ή μία φυσική μονάδα οπτικού δίσκου που περιέχει ένα δίσκο από τον οποίο θα ξεκινήσει η νέα εικονική μηχανή.</p><p>Ο δίσκος θα πρέπει να είναι κατάλληλος να ξεκινήσει ένας υπολογιστής και θα πρέπει να περιέχει το λειτουργικό σύστημα που επιθυμείτε να εγκαταστήσετε στην εικονική μηχανή, αν θέλετε να το κάνετε τώρα. Ο δίσκος θα εξαχθεί από την εικονική μονάδα αυτόματα την επόμενη φορά που θα ανασ [...]
     </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 type="unfinished"></translation>
+        <translation><p>Παρακαλώ επιλέξτε ένα αρχείο εικονικού οπτικού δίσκου ή μία φυσική μονάδα οπτικού δίσκου που περιέχει ένα δίσκο από τον οποίο θα ξεκινήσει η νέα εικονική μηχανή.</p><p>Ο δίσκος θα πρέπει να είναι κατάλληλος να ξεκινήσει ένας υπολογιστής. Μιας και αυτή η εικονική μηχανή δεν έχει σκληρό δίσκο δεν θα μπορέσετε να εγκαταστήσετε ένα λειτουργικό σύστημα τώρα.<p></translation>
     </message>
     <message>
         <source>Choose a virtual optical disk file...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε έναν εικονικό οπτικό δίσκο...</translation>
     </message>
 </context>
 <context>
     <name>UIWizardImportApp</name>
     <message>
         <source>Restore Defaults</source>
-        <translation>Εφαναφορά Προεπιλεγμένων</translation>
+        <translation>Επαναφορά Προεπιλεγμένων</translation>
     </message>
     <message>
         <source>Import</source>
-        <translation type="unfinished"></translation>
+        <translation>Εισαγωγή</translation>
     </message>
     <message>
         <source>Appliance to import</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Το VirtualBox υποστηρίζει προς το παρόν εισαγωγή συσκευών που έχουν σωθεί στη Μορφή Ανοιχτής Εικονοποίησης (OVF). Για να συνεχίσετε, επιλέξτε το αρχείο για εισαγωγή πιο κάτω.</p></translation>
     </message>
     <message>
         <source>Open Virtualization Format (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Μορφή Ανοιχτής Εικονοποίησης (OVF) (%1)</translation>
     </message>
     <message>
         <source>Appliance settings</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Αυτές είναι οι εικονικές μηχανές που περιέχονται στη συσκευή και οι προτινόμενες ρυθμίσεις των εισαγώμενων μηχανών VirtualBox. Μπορείτε να αλλάξετε πολλές από τις ιδιότητες κάνοντας διπλό-κλικ στα στοιχεία και να απενεργοποιήσετε άλλες χρησιμοποιόντας τα πλαίσια ελέγχου παρακάτω.</translation>
     </message>
     <message>
         <source>Import Virtual Appliance</source>
-        <translation type="unfinished"></translation>
+        <translation>Εισάγετε Εικονική Συσκευή</translation>
     </message>
     <message>
         <source>Choose a virtual appliance file to import...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε ένα αρχείο εικονικής συσκευής για εισαγωγή...</translation>
     </message>
     <message>
         <source>Please choose a virtual appliance file to import</source>
-        <translation type="unfinished"></translation>
+        <translation>Παρακαλώ επιλέξτε ένα αρχείο εικονικής συσκευής για εισαγωγή</translation>
     </message>
 </context>
 <context>
     <name>UIWizardNewVD</name>
     <message>
         <source>Create</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργήστε</translation>
     </message>
     <message>
         <source>&Dynamically allocated</source>
-        <translation type="unfinished"></translation>
+        <translation>Δυναμική εκχώρηση</translation>
     </message>
     <message>
         <source>&Fixed size</source>
-        <translation type="unfinished"></translation>
+        <translation>Πάγια</translation>
     </message>
     <message>
         <source>&Split into files of less than 2GB</source>
-        <translation type="unfinished"></translation>
+        <translation>Χωρισμένη σε αρχεία μικρότερα των 2GB</translation>
     </message>
     <message>
         <source><nobr>%1 (%2 B)</nobr></source>
-        <translation type="unfinished"></translation>
+        <translation><nobr>%1 (%2 B)</nobr></translation>
     </message>
     <message>
         <source>File location and size</source>
-        <translation type="unfinished"></translation>
+        <translation>Θέση αρχείου και μέγεθος</translation>
     </message>
     <message>
         <source>File &location</source>
-        <translation type="unfinished"></translation>
+        <translation>Θέση αρχείου</translation>
     </message>
     <message>
         <source>File &size</source>
-        <translation type="unfinished"></translation>
+        <translation>Μέγεθος αρχείου</translation>
     </message>
     <message>
         <source>Create Virtual Hard Disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργείστε εικονικό σκληρό δίσκο</translation>
     </message>
     <message>
         <source>Hard disk file type</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέξτε τον τύπο του αρχείου που θέλετε να χρησιμοποιήσετε για το νέο εικονικό σκληρό δίσκο. Αν δεν χρειάζεται να τον χρησιμοποιήσετε με άλλο λογισμικό εικονοποίησης μπορείτε να αφήσετε αυτή τη ρύθμιση όπως είναι.</translation>
     </message>
     <message>
         <source>Storage on physical hard disk</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <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 type="unfinished"></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.</p></source>
+        <translation type="obsolete"><p>Μπορείτε επίσης να επιλέξετε να <b>χωρίσετε</b> το αρχείο του σκληρού δίσκου σε αρχεία μέγιστου μεγέθους 2 gigabytes το καθένα. Αυτό είναι κυρίως χρήσιμο αν θέλετε να αποθηκεύσετε την εικονική μηχανή σε αποσπώμενη συσκευή USB ή σε παλιά συστήματα, μερικά απ' τα οποία δεν διαχειρίζονται πολύ μεγάλα αρχεία.</p></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>Συμπληρώστε το όνομα του αρχείου του νέου εικονικού σκληρού δίσκου στο κουτί παρακάτω ή κάντε κλικ στο εικονίδιο φακέλου για να επιλέξετε ένα φάκελο στον οποίο θα δημιουργηθεί το αρχείο.</translation>
     </message>
     <message>
         <source>Choose a location for new virtual hard disk file...</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέξτε το μέγεθος του σκληρού δίσκου σε megabytes. Το μέγεθος υποδηλώνει το όριο των δεδομένων τα οποία η εικονική μηχανή θα μπορεί να αποθηκεύσει στο σκληρό δίσκο.</translation>
     </message>
     <message>
         <source>Hard disk file &type</source>
+        <translation>Τύπος αρχείου σκληρού δίσκου</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>
     </message>
 </context>
@@ -6912,55 +6616,55 @@
     <name>UIWizardNewVM</name>
     <message>
         <source>Create Virtual Machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργήστε Εικονική Μηχανή</translation>
     </message>
     <message>
         <source>Create</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργήστε</translation>
     </message>
     <message>
         <source>Name and operating system</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Επιλέξτε ένα περιγραφικό όνομα για την καινούρια εικονική μηχανή και διαλέξτε τον τύπο του λειτουργικού συστήματος που σκοπεύετε να εγκαταστήσετε. Το όνομα που θα επιλέξετε θα χρημοποιείται στο VirtualBox για να ταυτοποιήσει την μηχανή.</translation>
     </message>
     <message>
         <source>Memory size</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Επιλέξτε το ποσό της μνήμης (RAM) σε megabytes που θα εκχωρηθεί στην εικονική μηχανή.</p><p>Το προτεινόμενο μέγεθος μνήμης είναι <b>%1</b> MB.</p></translation>
     </message>
     <message>
         <source>&Memory size</source>
-        <translation type="unfinished"></translation>
+        <translation>Μέγεθος μνήμης</translation>
     </message>
     <message>
         <source>Hard disk</source>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation><p>Αν θέλετε μπορείτε να προσθέσετε έναν εικονικό σκληρό δίσκο στη νέα μηχανή. Μπορείτε, είτε να δημιουργήσετε ένα νέο αρχείο σκληρού δίσκου, είτε να διαλέξετε έναν από τη λίστα, ή από άλλη τοποθεσία χρησιμοποιώντας το εικονίδιο φακέλου.</p><p>Αν χρειάζεστε μία πιο πολύπλοκη αποθηκευτική λύση μπορείτε να παραλείψετε αυτό το βήμα και να κάνετε τις αλλαγές στις ρυθμίσεις της μηχανής όταν θα έχει δημιουργηθεί η μηχανή.</p><p>Το συνιστώμενο  [...]
     </message>
     <message>
         <source>&Do not add a virtual hard disk</source>
-        <translation type="unfinished"></translation>
+        <translation>Μην προσθέτετε έναν εικονικό σκληρό δίσκο</translation>
     </message>
     <message>
         <source>&Create a virtual hard disk now</source>
-        <translation type="unfinished"></translation>
+        <translation>Δημιουργείστε έναν εικονικό σκληρό δίσκο τώρα</translation>
     </message>
     <message>
         <source>&Use an existing virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Χρησιμοποιείστε έναν υπάρχοντα εικονικό σκληρό δίσκο</translation>
     </message>
     <message>
         <source>Choose a virtual hard disk file...</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιλέξτε έναν εικονικό σκληρό δίσκο...</translation>
     </message>
 </context>
 <context>
@@ -7008,18 +6712,10 @@
         <translation>Επαναφορά</translation>
     </message>
     <message>
-        <source>Opens a window to select a different folder.</source>
-        <translation type="obsolete">Ανοίγει ένα παράθυρο για να διαλέξετε ένα διαφορετικό φάκελο.</translation>
-    </message>
-    <message>
         <source>Resets the folder path to the default value.</source>
         <translation>Επαναφέρει τη διαδρομή φακέλου στην προεπιλεγμένη τιμή.</translation>
     </message>
     <message>
-        <source>Opens a window to select a different file.</source>
-        <translation type="obsolete">Ανοίγει ένα παράθυρο για να διαλέξετε ένα διαφορετικό αρχείο.</translation>
-    </message>
-    <message>
         <source>Resets the file path to the default value.</source>
         <translation>Επαναφέρει τη διαδρομή αρχείου στην προεπιλεγμένη τιμή.</translation>
     </message>
@@ -7028,32 +6724,24 @@
         <translation>Αντιγραφή</translation>
     </message>
     <message>
-        <source>Please type the folder path here.</source>
-        <translation type="obsolete">Παρακαλώ γράψτε τη διαδρομή φακέλου εδώ.</translation>
-    </message>
-    <message>
-        <source>Please type the file path here.</source>
-        <translation type="obsolete">Παρακαλώ γράψτε τη διαδρομή αρχείου εδώ.</translation>
-    </message>
-    <message>
         <source>The actual default path value will be displayed after accepting the changes and opening this window again.</source>
         <translation>Η πραγματική προεπιλεγμένη τιμή της διαδρομής θα εμφανιστεί αφού δεχτείτε τις αλλαγές και ξανανοίξετε αυτό το παράθυρο.</translation>
     </message>
     <message>
         <source>Displays a window to select a different folder.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανοίγει ένα παράθυρο για να διαλέξετε ένα διαφορετικό φάκελο.</translation>
     </message>
     <message>
         <source>Displays a window to select a different file.</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανοίγει ένα παράθυρο για να διαλέξετε ένα διαφορετικό αρχείο.</translation>
     </message>
     <message>
         <source>Holds the folder path.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει τη διαδρομή φακέλου.</translation>
     </message>
     <message>
         <source>Holds the file path.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δείχνει τη διαδρομή αρχείου.</translation>
     </message>
 </context>
 <context>
@@ -7101,7 +6789,7 @@
     <message>
         <source>Video Memory</source>
         <comment>details report</comment>
-        <translation>Μνήμη Βίντεο</translation>
+        <translation>Μνήμη Γραφικών</translation>
     </message>
     <message>
         <source>Boot Order</source>
@@ -7221,12 +6909,12 @@
     <message>
         <source>Restoring</source>
         <comment>MachineState</comment>
-        <translation>Επαναφέρει</translation>
+        <translation>Επαναφορά</translation>
     </message>
     <message>
         <source>Spawning</source>
         <comment>SessionState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αναδημιουργείται</translation>
     </message>
     <message>
         <source>None</source>
@@ -7239,11 +6927,6 @@
         <translation>Δισκέτα</translation>
     </message>
     <message>
-        <source>CD/DVD</source>
-        <comment>DeviceType</comment>
-        <translation type="obsolete">CD/DVD</translation>
-    </message>
-    <message>
         <source>Hard Disk</source>
         <comment>DeviceType</comment>
         <translation>Σκληρός Δίσκος</translation>
@@ -7256,7 +6939,7 @@
     <message>
         <source>Null Audio Driver</source>
         <comment>AudioDriverType</comment>
-        <translation>Κανένας οδηγός ήχου</translation>
+        <translation>Κενός οδηγός ήχου</translation>
     </message>
     <message>
         <source>Windows Multimedia</source>
@@ -7391,7 +7074,7 @@
     <message>
         <source>Host Pipe</source>
         <comment>PortMode</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αγωγός Οικοδεσπότη</translation>
     </message>
     <message>
         <source>Host Device</source>
@@ -7476,7 +7159,7 @@
     <message>
         <source>SATA</source>
         <comment>StorageBus</comment>
-        <translation>IDE</translation>
+        <translation>SATA</translation>
     </message>
     <message>
         <source>Solaris Audio</source>
@@ -7551,7 +7234,7 @@
     <message>
         <source><nobr>Port: %1</nobr></source>
         <comment>USB filter tooltip</comment>
-        <translation><nobr>Πόρτα: %1</nobr></translation>
+        <translation><nobr>Θύρα: %1</nobr></translation>
     </message>
     <message>
         <source><nobr>State: %1</nobr></source>
@@ -7571,7 +7254,7 @@
     <message>
         <source>3D Acceleration</source>
         <comment>details report</comment>
-        <translation>Επιτάχυνση 3Δ</translation>
+        <translation>3Δ Επιτάχυνση</translation>
     </message>
     <message>
         <source>Enabled</source>
@@ -7596,17 +7279,17 @@
     <message>
         <source>Nested Paging</source>
         <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ένθετη σελιδοποίηση</translation>
     </message>
     <message>
         <source>Enabled</source>
         <comment>details report (Nested Paging)</comment>
-        <translation>Ενεργοποιημένο</translation>
+        <translation>Ενεργοποιημένη</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (Nested Paging)</comment>
-        <translation>Απενεργοποιημένο</translation>
+        <translation>Απενεργοποιημένη</translation>
     </message>
     <message>
         <source>Internal network, '%1'</source>
@@ -7651,12 +7334,12 @@
     <message>
         <source>Bridged adapter, %1</source>
         <comment>details report (network)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γεφυρωμένη κάρτα, %1</translation>
     </message>
     <message>
         <source>Host-only adapter, '%1'</source>
         <comment>details report (network)</comment>
-        <translation>Μόνο-με-οικοδεσπότη δίκτυο, '%1'</translation>
+        <translation>Μόνο-με-οικοδεσπότη κάρτα, '%1'</translation>
     </message>
     <message>
         <source>Intel PRO/1000 MT Server (82545EM)</source>
@@ -7666,12 +7349,12 @@
     <message>
         <source>Bridged Adapter</source>
         <comment>NetworkAttachmentType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Γεφυρωμένη Κάρτα</translation>
     </message>
     <message>
         <source>Host-only Adapter</source>
         <comment>NetworkAttachmentType</comment>
-        <translation>Μόνο-με-οικοδεσπότη δίκτυο</translation>
+        <translation>Μόνο-με-οικοδεσπότη κάρτα</translation>
     </message>
     <message>
         <source><nobr>%1 MB</nobr></source>
@@ -7731,17 +7414,17 @@
     <message>
         <source>Teleported</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Τηλεμεταφερόμενη</translation>
     </message>
     <message>
         <source>Guru Meditation</source>
         <comment>MachineState</comment>
-        <translation>Συλλογή σοφού</translation>
+        <translation>Διαλογισμός σοφού</translation>
     </message>
     <message>
         <source>Teleporting</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Τηλεμεταφέρεται</translation>
     </message>
     <message>
         <source>Taking Live Snapshot</source>
@@ -7751,12 +7434,12 @@
     <message>
         <source>Teleporting Paused VM</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Τηλεμεταφέρεται ΕΜ σε παύση</translation>
     </message>
     <message>
         <source>Restoring Snapshot</source>
         <comment>MachineState</comment>
-        <translation>Επαναφέρεται Στιγμιότυπο</translation>
+        <translation>Επαναφορά Στιγμιότυπου</translation>
     </message>
     <message>
         <source>Deleting Snapshot</source>
@@ -7771,7 +7454,7 @@
     <message>
         <source>Paravirtualized Network (virtio-net)</source>
         <comment>NetworkAdapterType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Παραεικονικό Δίκτυο (virtio-net)</translation>
     </message>
     <message>
         <source>I82078</source>
@@ -7781,7 +7464,7 @@
     <message>
         <source>Empty</source>
         <comment>medium</comment>
-        <translation>Άδειο</translation>
+        <translation>Κενό</translation>
     </message>
     <message>
         <source>Host Drive '%1'</source>
@@ -7830,17 +7513,7 @@
     <message>
         <source><b>No disk image files available</b></source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source>
-        <comment>medium</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>This base hard disk is indirectly attached using the following differencing hard disk:</source>
-        <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <translation><b>Μη διαθέσιμα αρχεία εικόνας δίσκου</b></translation>
     </message>
     <message numerus="yes">
         <source>%n year(s)</source>
@@ -7885,10 +7558,6 @@
         </translation>
     </message>
     <message>
-        <source>(CD/DVD)</source>
-        <translation type="obsolete">(CD/DVD)</translation>
-    </message>
-    <message>
         <source>Screens</source>
         <comment>details report</comment>
         <translation>Οθόνες</translation>
@@ -7935,7 +7604,7 @@
     </message>
     <message>
         <source>Nested Paging</source>
-        <translation type="unfinished"></translation>
+        <translation>Ένθετη σελιδοποίηση</translation>
     </message>
     <message>
         <source>Unknown device</source>
@@ -7945,17 +7614,17 @@
     <message>
         <source>Remote Desktop Server Port</source>
         <comment>details report (VRDE Server)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Θύρα διακομιστή απομακρυσμένης επιφάνειας</translation>
     </message>
     <message>
         <source>Remote Desktop Server</source>
         <comment>details report (VRDE Server)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Διακομιστής απομακρυσμένης επιφάνειας</translation>
     </message>
     <message>
         <source>Disabled</source>
         <comment>details report (VRDE Server)</comment>
-        <translation>Απενεργοποιημένο</translation>
+        <translation>Απενεργοποιημένος</translation>
     </message>
     <message>
         <source>All files (*)</source>
@@ -7964,7 +7633,7 @@
     <message>
         <source>Fault Tolerant Syncing</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Συγχρονισμός ανεκτικός σε σφάλματα</translation>
     </message>
     <message>
         <source>Unlocked</source>
@@ -7984,17 +7653,17 @@
     <message>
         <source>Null</source>
         <comment>AuthType</comment>
-        <translation>Καμμία</translation>
+        <translation>Κανένας</translation>
     </message>
     <message>
         <source>External</source>
         <comment>AuthType</comment>
-        <translation>Εξωτερική</translation>
+        <translation>Εξωτερικός</translation>
     </message>
     <message>
         <source>Guest</source>
         <comment>AuthType</comment>
-        <translation>Επισκέπτης</translation>
+        <translation>Επισκέπτη</translation>
     </message>
     <message>
         <source>Intel HD Audio</source>
@@ -8068,7 +7737,7 @@
     <message>
         <source>Writethrough</source>
         <comment>MediumType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Άφθαρτος</translation>
     </message>
     <message>
         <source>Shareable</source>
@@ -8088,12 +7757,12 @@
     <message>
         <source>Dynamically allocated storage</source>
         <comment>MediumVariant</comment>
-        <translation>Δυναμικά παρεχόμενη αποθήκευση</translation>
+        <translation>Δυναμική εκχώρηση αποθήκευσης</translation>
     </message>
     <message>
         <source>Dynamically allocated differencing storage</source>
         <comment>MediumVariant</comment>
-        <translation>Δυναμικά παρεχόμενη διαφορική αποθήκευση</translation>
+        <translation>Δυναμική εκχώρηση διαφορικής αποθήκευσης</translation>
     </message>
     <message>
         <source>Fixed size storage</source>
@@ -8103,12 +7772,12 @@
     <message>
         <source>Dynamically allocated storage split into files of less than 2GB</source>
         <comment>MediumVariant</comment>
-        <translation>Δυναμικά παρεχόμενη αποθήκευση χωρισμένη σε αρχεία μικρότερα των 2GB</translation>
+        <translation>Δυναμική εκχώρηση αποθήκευσης χωρισμένη σε αρχεία μικρότερα των 2GB</translation>
     </message>
     <message>
         <source>Dynamically allocated differencing storage split into files of less than 2GB</source>
         <comment>MediumVariant</comment>
-        <translation>Δυναμικά παρεχόμενη διαφορική αποθήκευση χωρισμένη σε αρχεία μικρότερα των 2GB</translation>
+        <translation>Δυναμική εκχώρηση διαφορικής αποθήκευσης χωρισμένη σε αρχεία μικρότερα των 2GB</translation>
     </message>
     <message>
         <source>Fixed size storage split into files of less than 2GB</source>
@@ -8118,12 +7787,12 @@
     <message>
         <source>Dynamically allocated compressed storage</source>
         <comment>MediumVariant</comment>
-        <translation>Δυναμικά παρεχόμενη συμπιεσμένη αποθήκευση</translation>
+        <translation>Δυναμική εκχώρηση συμπιεσμένης αποθήκευσης</translation>
     </message>
     <message>
         <source>Dynamically allocated differencing compressed storage</source>
         <comment>MediumVariant</comment>
-        <translation>Δυναμικά παρεχόμενη διαφορική συμπιεσμένη αποθήκευση</translation>
+        <translation>Δυναμική εκχώρηση διαφορικής συμπιεσμένης αποθήκευσης</translation>
     </message>
     <message>
         <source>Fixed size ESX storage</source>
@@ -8173,22 +7842,22 @@
     <message>
         <source>IDE Primary Master</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>IDE Πρωτεύων Κύριος</translation>
     </message>
     <message>
         <source>IDE Primary Slave</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>IDE Πρωτεύων Βοηθητικός</translation>
     </message>
     <message>
         <source>IDE Secondary Master</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>IDE Δευτερεύων Κύριος</translation>
     </message>
     <message>
         <source>IDE Secondary Slave</source>
         <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>IDE Δευτερεύων Βοηθητικός</translation>
     </message>
     <message>
         <source>SATA Port %1</source>
@@ -8271,14 +7940,6 @@
         <translation>Περιγραφή</translation>
     </message>
     <message>
-        <source>Please choose a virtual hard drive file</source>
-        <translation type="obsolete">Παρακαλώ επιλέξτε έναν εικονικό σκληρό δίσκο</translation>
-    </message>
-    <message>
-        <source>All virtual hard drive files (%1)</source>
-        <translation type="obsolete">Όλοι οι εικονικοί σκληροί δίσκοι (%1)</translation>
-    </message>
-    <message>
         <source>Please choose a virtual optical disk file</source>
         <translation>Παρακαλώ επιλέξτε έναν εικονικό οπτικό δίσκο</translation>
     </message>
@@ -8319,20 +7980,6 @@
         <translation>QCOW (QEMU Αντίγραφο-Στην-Εγγραφή)</translation>
     </message>
     <message>
-        <source>Please choose a location for new virtual hard drive file</source>
-        <translation type="obsolete">Παρακαλώ επιλέξτε μία τοποθεσία για τον νέο εικονικό αρχείο του σκληρού δίσκου</translation>
-    </message>
-    <message>
-        <source>Enabled</source>
-        <comment>details report (Unrestricted Execution)</comment>
-        <translation type="obsolete">Ενεργοποιημένη</translation>
-    </message>
-    <message>
-        <source>Disabled</source>
-        <comment>details report (Unrestricted Execution)</comment>
-        <translation type="obsolete">Απενεργοποιημένη</translation>
-    </message>
-    <message>
         <source>Unrestricted Execution</source>
         <comment>details report</comment>
         <translation>Μη-περιορισμένη εκτέλεση</translation>
@@ -8381,472 +8028,482 @@
         <translation>Μπορείτε να δημιουρήσετε ή να προσθέσετε αρχεία εικόνας δίσκου στις ρυθμίσεις της εικονικής μηχανής.</translation>
     </message>
     <message>
+        <source>USB</source>
+        <comment>StorageControllerType</comment>
+        <translation>USB</translation>
+    </message>
+    <message>
+        <source>USB Port %1</source>
+        <comment>StorageSlot</comment>
+        <translation>Θύρα USB %1</translation>
+    </message>
+    <message>
         <source>off</source>
         <comment>guest monitor status</comment>
-        <translation type="unfinished"></translation>
+        <translation>Κλειστό</translation>
+    </message>
+    <message>
+        <source>Paravirtualization Interface</source>
+        <comment>details report</comment>
+        <translation>Διασύνδεση παραεικονοποίησης</translation>
+    </message>
+    <message>
+        <source>None</source>
+        <comment>ParavirtProvider</comment>
+        <translation>Καμμία</translation>
+    </message>
+    <message>
+        <source>Default</source>
+        <comment>ParavirtProvider</comment>
+        <translation>Προεπιλεγμένη</translation>
+    </message>
+    <message>
+        <source>Legacy</source>
+        <comment>ParavirtProvider</comment>
+        <translation>Παλαιού τύπου</translation>
+    </message>
+    <message>
+        <source>Minimal</source>
+        <comment>ParavirtProvider</comment>
+        <translation>Ελάχιστη</translation>
+    </message>
+    <message>
+        <source>Hyper-V</source>
+        <comment>ParavirtProvider</comment>
+        <translation>Hyper-V</translation>
+    </message>
+    <message>
+        <source>New dynamically allocated storage</source>
+        <comment>MediumVariant</comment>
+        <translation>Νέα δυναμική εκχώρηση αποθήκευσης</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (VT-x/AMD-V)</comment>
-        <translation type="unfinished">Ενεργό</translation>
+        <translation>Ενεργό</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (VT-x/AMD-V)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ανενεργό</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (Nested Paging)</comment>
-        <translation type="unfinished">Ενεργό</translation>
+        <translation>Ενεργή</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (Nested Paging)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ανενεργή</translation>
     </message>
     <message>
         <source>Active</source>
         <comment>details report (Unrestricted Execution)</comment>
-        <translation type="unfinished">Ενεργό</translation>
+        <translation>Ενεργή</translation>
     </message>
     <message>
         <source>Inactive</source>
         <comment>details report (Unrestricted Execution)</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Paravirtualization Interface</source>
-        <comment>details report</comment>
-        <translation type="unfinished"></translation>
+        <translation>Ανενεργή</translation>
     </message>
     <message>
         <source>Taking Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
+        <translation>Λαμβάνεται Στιγμιότυπο</translation>
     </message>
     <message>
         <source>Taking Online Snapshot</source>
         <comment>MachineState</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>None</source>
-        <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Default</source>
-        <comment>ParavirtProvider</comment>
-        <translation type="unfinished">Προεπιλεγμένη</translation>
-    </message>
-    <message>
-        <source>Legacy</source>
-        <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Minimal</source>
-        <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Hyper-V</source>
-        <comment>ParavirtProvider</comment>
-        <translation type="unfinished"></translation>
+        <translation>Λαμβάνεται Συνδεδεμένο Στιγμιότυπο</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>
-    </message>
-    <message>
-        <source>New dynamically allocated storage</source>
-        <comment>MediumVariant</comment>
-        <translation type="unfinished"></translation>
+        <translation>Οπτικό</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>
-    </message>
-    <message>
-        <source>USB</source>
-        <comment>StorageControllerType</comment>
-        <translation type="unfinished">USB</translation>
-    </message>
-    <message>
-        <source>USB Port %1</source>
-        <comment>StorageSlot</comment>
-        <translation type="unfinished"></translation>
+        <translation>xHCI</translation>
     </message>
     <message>
         <source>User interface</source>
         <comment>DetailsElementType</comment>
-        <translation type="unfinished"></translation>
+        <translation>Περιβάλλον χρήστη</translation>
     </message>
     <message>
         <source>(Optical Drive)</source>
-        <translation type="unfinished"></translation>
+        <translation>(Οπτική συσκευή)</translation>
+    </message>
+    <message>
+        <source>Encrypted</source>
+        <comment>medium</comment>
+        <translation>Κρυπτογραφημένο</translation>
     </message>
     <message>
         <source>Please choose a virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Παρακαλώ επιλέξτε έναν εικονικό σκληρό δίσκο</translation>
     </message>
     <message>
         <source>All virtual hard disk files (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation>Όλοι οι εικονικοί σκληροί δίσκοι (%1)</translation>
     </message>
     <message>
-        <source>Encrypted</source>
+        <source>Attaching this hard disk will be performed indirectly using a newly created differencing hard disk.</source>
         <comment>medium</comment>
-        <translation type="unfinished"></translation>
+        <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 type="unfinished"></translation>
+        <translation>Μερικά από τα αρχεία σ' αυτήν την ακολουθία σκληρών δίσκων δεν είναι προσβάσιμα. Παρακαλούμε χρησιμοποιήστε τον Διαχειριστή Εικονικών Μέσων για να εξετάσετε αυτά τα αρχεία.</translation>
+    </message>
+    <message>
+        <source>This base hard disk is indirectly attached using the following differencing hard disk:</source>
+        <comment>medium</comment>
+        <translation>Αυτός ο βασικός σκληρός δίσκος είναι έμμεσα προσαρτώμενος χρησιμοποιόντας τον ακόλουθο διαφορικό σκληρό δίσκο:</translation>
     </message>
     <message>
         <source>Please choose a location for new virtual hard disk file</source>
-        <translation type="unfinished"></translation>
+        <translation>Παρακαλώ επιλέξτε μία θέση για το αρχείο του νέου εικονικού σκληρού δίσκου</translation>
     </message>
 </context>
 <context>
     <name>VBoxGlobalSettings</name>
     <message>
         <source>The value '%1' of the key '%2' doesn't match the regexp constraint '%3'.</source>
-        <translation type="unfinished"></translation>
+        <translation>Η τιμή '%1' του κλειδιού '%2' δεν ταιριάζει με τον περιορισμό της κανονικής έκφρασης '%3'.</translation>
     </message>
     <message>
         <source>Cannot delete the key '%1'.</source>
-        <translation type="unfinished"></translation>
+        <translation>Δεν μπορεί να διαγραφεί το κλειδί '%1'.</translation>
     </message>
     <message>
         <source>'%1' is an invalid host-combination code-sequence.</source>
-        <translation type="unfinished"></translation>
+        <translation>'%1' είναι μη-έγκυρος συνδυασμός-οικοδεσπότη κωδικός-ακολουθίας.</translation>
     </message>
 </context>
 <context>
     <name>VBoxLicenseViewer</name>
     <message>
         <source>VirtualBox License</source>
-        <translation type="unfinished"></translation>
+        <translation>Άδεια VirtualBox</translation>
     </message>
     <message>
         <source>I &Agree</source>
-        <translation type="unfinished"></translation>
+        <translation>&Συμφωνώ</translation>
     </message>
     <message>
         <source>I &Disagree</source>
-        <translation type="unfinished"></translation>
+        <translation>&Διαφωνώ</translation>
     </message>
 </context>
 <context>
     <name>VBoxMediaManagerDlg</name>
     <message>
         <source>&Actions</source>
-        <translation type="unfinished"></translation>
+        <translation>Δράσεις</translation>
     </message>
     <message>
         <source>R&emove</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαίρεση</translation>
     </message>
     <message>
         <source>Re&lease</source>
-        <translation type="unfinished"></translation>
+        <translation>Απελευθέρωση</translation>
     </message>
     <message>
         <source>Re&fresh</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανανέωση</translation>
     </message>
     <message>
         <source>Remove the selected disk image file</source>
-        <translation type="unfinished"></translation>
+        <translation>Αφαιρέστε τα επιλεγμένα αρχεία εικόνας δίσκου</translation>
     </message>
     <message>
         <source>Release the selected disk image file by detaching it from the machines</source>
-        <translation type="unfinished"></translation>
+        <translation>Απελευθερώστε τον επιλεγμένο σκληρό δίσκο αποσπώντας τον από τις μηχανές</translation>
     </message>
     <message>
         <source>Refresh the list of disk image files</source>
-        <translation type="unfinished"></translation>
+        <translation>Ανανέωση της λίστας επιλεγμένων αρχείων εικόνας δίσκου</translation>
     </message>
     <message>
         <source>Checking accessibility</source>
-        <translation type="unfinished"></translation>
+        <translation>Checking accessibility</translation>
     </message>
     <message>
         <source><i>Not&nbsp;Attached</i></source>
-        <translation type="unfinished"></translation>
+        <translation><i>Μη&nbsp;Συνδεδεμένο</i></translation>
     </message>
     <message>
         <source>--</source>
         <comment>no info</comment>
-        <translation type="unfinished"></translation>
+        <translation>--</translation>
     </message>
     <message>
         <source>Virtual Media Manager</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαχειριστής Εικονικών Μέσων</translation>
     </message>
     <message>
         <source>Name</source>
-        <translation type="unfinished">Όνομα</translation>
+        <translation>Όνομα</translation>
     </message>
     <message>
         <source>Virtual Size</source>
-        <translation type="unfinished"></translation>
+        <translation>Εικονικό Μέγεθος</translation>
     </message>
     <message>
         <source>Actual Size</source>
-        <translation type="unfinished"></translation>
+        <translation>Πραγματικό μέγεθος</translation>
     </message>
     <message>
         <source>Size</source>
-        <translation type="unfinished"></translation>
+        <translation>Μέγεθος</translation>
     </message>
     <message>
         <source>Type:</source>
-        <translation type="unfinished"></translation>
+        <translation>Τύπος:</translation>
     </message>
     <message>
         <source>Location:</source>
-        <translation type="unfinished"></translation>
+        <translation>Τοποθεσία:</translation>
     </message>
     <message>
         <source>Format:</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαμόρφωση:</translation>
     </message>
     <message>
         <source>Storage details:</source>
-        <translation type="unfinished"></translation>
+        <translation>Λεπτομέρειες αποθήκευσης:</translation>
     </message>
     <message>
         <source>Attached to:</source>
-        <translation type="unfinished"></translation>
+        <translation>Συνδεδεμένο σε:</translation>
     </message>
     <message>
         <source>&Copy...</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή...</translation>
     </message>
     <message>
         <source>&Modify...</source>
-        <translation type="unfinished"></translation>
+        <translation>Τροποποίηση...</translation>
     </message>
     <message>
         <source>Copy an existing disk image file</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή υπάρχοντος αρχείου σκληρού δίσκου</translation>
     </message>
     <message>
         <source>Modify the attributes of the selected disk image file</source>
-        <translation type="unfinished"></translation>
+        <translation>Τροποποιήστε τις ιδιότητες του επιλεγμένου αρχείου σκληρού δίσκου</translation>
     </message>
     <message>
-        <source><i>Not&nbsp;Encrypted</i></source>
-        <translation type="unfinished"></translation>
+        <source>UUID:</source>
+        <translation>UUID:</translation>
     </message>
     <message>
-        <source>Encrypted with key:</source>
-        <translation type="unfinished"></translation>
+        <source><i>Not&nbsp;Encrypted</i></source>
+        <translation><i>Μη&nbsp;Κρυπτογραφημένο</i></translation>
     </message>
     <message>
-        <source>UUID:</source>
-        <translation type="unfinished"></translation>
+        <source>Encrypted with key:</source>
+        <translation>Κρυπτογραφημένο με κλειδί:</translation>
     </message>
 </context>
 <context>
     <name>VBoxScreenshotViewer</name>
     <message>
         <source>Screenshot of %1 (%2)</source>
-        <translation type="unfinished"></translation>
+        <translation>Στιγμιότυπο οθόνης του %1 (%2)</translation>
     </message>
     <message>
         <source>Click to view non-scaled screenshot.</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλικ για μη-κλιμακώμενο στιγμιότυπο οθόνης.</translation>
     </message>
     <message>
         <source>Click to view scaled screenshot.</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλικ για κλιμακώμενο στιγμιότυπο οθόνης.</translation>
     </message>
 </context>
 <context>
     <name>VBoxSnapshotDetailsDlg</name>
     <message>
         <source>Details of %1 (%2)</source>
-        <translation type="unfinished"></translation>
+        <translation>Λεπτομέρειες του %1 (%2)</translation>
     </message>
     <message>
         <source>Click to enlarge the screenshot.</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλικ για μεγένθυση του στιγμιότυπου οθόνης.</translation>
     </message>
     <message>
         <source>&Name:</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα:</translation>
     </message>
     <message>
         <source>Taken:</source>
-        <translation type="unfinished"></translation>
+        <translation>Πιασμένο:</translation>
     </message>
     <message>
         <source>&Description:</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιγραφή:</translation>
     </message>
     <message>
         <source>D&etails:</source>
-        <translation type="unfinished"></translation>
+        <translation>&Λεπτομέρειες:</translation>
     </message>
 </context>
 <context>
     <name>VBoxSnapshotsWgt</name>
     <message>
         <source>VBoxSnapshotsWgt</source>
-        <translation type="unfinished"></translation>
+        <translation>VBoxSnapshotsWgt</translation>
     </message>
     <message>
         <source>Current State (changed)</source>
         <comment>Current State (Modified)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Τρέχουσα κατάσταση (άλλαξε)</translation>
     </message>
     <message>
         <source>Current State</source>
         <comment>Current State (Unmodified)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Τρέχουσα κατάσταση</translation>
     </message>
     <message>
         <source>The current state differs from the state stored in the current snapshot</source>
-        <translation type="unfinished"></translation>
+        <translation>Η τρέχουσα κατάσταση διαφέρει από την κατάσταση που είναι αποθηκευμένη στο τρέχον στιγμιότυπο</translation>
     </message>
     <message>
         <source>The current state is identical to the state stored in the current snapshot</source>
-        <translation type="unfinished"></translation>
+        <translation>Η τρέχουσα κατάσταση είναι πανομοιότυπη με την κατάσταση που είναι αποθηκευμένη στο τρέχον στιγμιότυπο</translation>
     </message>
     <message>
         <source> (current, </source>
         <comment>Snapshot details</comment>
-        <translation type="unfinished"></translation>
+        <translation> (τρέχουσα, </translation>
     </message>
     <message>
         <source>online)</source>
         <comment>Snapshot details</comment>
-        <translation type="unfinished"></translation>
+        <translation>συνδεδεμένη)</translation>
     </message>
     <message>
         <source>offline)</source>
         <comment>Snapshot details</comment>
-        <translation type="unfinished"></translation>
+        <translation>αποσυνδεδεμένη)</translation>
     </message>
     <message>
         <source>Taken at %1</source>
         <comment>Snapshot (time)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πάρθηκε στις %1</translation>
     </message>
     <message>
         <source>Taken on %1</source>
         <comment>Snapshot (date + time)</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πάρθηκε την %1</translation>
     </message>
     <message>
         <source>%1 since %2</source>
         <comment>Current State (time or date + time)</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 από %2</translation>
     </message>
     <message>
         <source>Snapshot %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Στιγμιότυπο %1</translation>
     </message>
     <message>
         <source>Take &Snapshot</source>
-        <translation type="unfinished"></translation>
+        <translation>Λήψη Στιγμιότυπου</translation>
     </message>
     <message>
         <source>S&how Details</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση Λεπτομερειών</translation>
     </message>
     <message>
         <source>Take a snapshot of the current virtual machine state</source>
-        <translation type="unfinished"></translation>
+        <translation>Πάρτε ένα στιγμιότυπο της τρέχουσας εικονικής μηχανής</translation>
     </message>
     <message>
         <source> (%1)</source>
-        <translation type="unfinished"></translation>
+        <translation> (%1)</translation>
     </message>
     <message>
         <source>&Restore Snapshot</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά Στιγμιότυπου</translation>
     </message>
     <message>
         <source>&Delete Snapshot</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαγραφή Στιγμιότυπου</translation>
     </message>
     <message>
         <source> (%1 ago)</source>
-        <translation type="unfinished"></translation>
+        <translation> (%1 πριν)</translation>
     </message>
     <message>
         <source>&Clone...</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλωνοποίηση...</translation>
     </message>
     <message>
         <source>Restore selected snapshot of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Επαναφορά του επιλεγμένου στιγμιότυπου της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>Delete selected snapshot of the virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Διαγραφή του επιλεγμένου στιγμιότυπου της εικονικής μηχανής</translation>
     </message>
     <message>
         <source>Display a window with selected snapshot details</source>
-        <translation type="unfinished"></translation>
+        <translation>Εμφάνιση παραθύρου με τις λεπτομέρειες του επιλεγμένου στιγμιότυπου</translation>
     </message>
     <message>
         <source>Clone selected virtual machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Κλωνοποιήστε την επιλεγμένη εικονική μηχανή</translation>
     </message>
 </context>
 <context>
     <name>VBoxTakeSnapshotDlg</name>
     <message>
         <source>Take Snapshot of Virtual Machine</source>
-        <translation type="unfinished"></translation>
+        <translation>Πάρτε Στιγμιότυπο της Εικονικής Μηχανής</translation>
     </message>
     <message>
         <source>Snapshot &Name</source>
-        <translation type="unfinished"></translation>
+        <translation>Όνομα Στιγμιότυπου</translation>
     </message>
     <message>
         <source>Snapshot &Description</source>
-        <translation type="unfinished"></translation>
+        <translation>Περιγραφή Στιγμιότυπου</translation>
     </message>
     <message numerus="yes">
         <source>Warning: You are taking a snapshot of a running machine which has %n immutable image(s) attached to it. As long as you are working from this snapshot the immutable image(s) will not be reset to avoid loss of data.</source>
-        <translation type="unfinished">
-            <numerusform></numerusform>
-            <numerusform></numerusform>
+        <translation>
+            <numerusform>Προειδοποίηση: Παίρνετε ένα στιγμιότυπο μίας εικονικής μηχανής που τρέχει και έχει %n αμετάβλητη εικόνα προσαρτημένη. Όσο δουλεύετε με αυτό το στιγμιότυπο η αμετάβλητη εικόνα δεν θα επαναφερθεί για να αποφευχθεί το χάσιμο δεδομένων.</numerusform>
+            <numerusform>Προειδοποίηση: Παίρνετε ένα στιγμιότυπο μίας εικονικής μηχανής που τρέχει και έχει %n αμετάβλητες εικόνες προσαρτημένες. Όσο δουλεύετε με αυτό το στιγμιότυπο οι αμετάβλητες εικόνες δεν θα επαναφερθούν για να αποφευχθεί το χάσιμο δεδομένων.</numerusform>
         </translation>
     </message>
     <message>
         <source>Snapshot %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Στιγμιότυπο %1</translation>
     </message>
 </context>
 <context>
@@ -8854,12 +8511,12 @@
     <message>
         <source><no devices available></source>
         <comment>USB devices</comment>
-        <translation type="unfinished"></translation>
+        <translation><καμμία διαθέσιμη συσκευή></translation>
     </message>
     <message>
         <source>No supported devices connected to the host PC</source>
         <comment>USB device tooltip</comment>
-        <translation type="unfinished"></translation>
+        <translation>Καμμία συνδεδεμένη υποστηριζόμενη συσκευή στον οικοδεσπότη</translation>
     </message>
 </context>
 </TS>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_eu.ts
index 83f35b6..3845c71 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="+2132"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+2138"/>
         <source>English</source>
         <comment>Native language name</comment>
         <translation>Euskara</translation>
@@ -8730,7 +8730,7 @@
 <context>
     <name>UINetworkReplyPrivate</name>
     <message>
-        <location filename="../src/net/UINetworkReply.cpp" line="+953"/>
+        <location filename="../src/net/UINetworkReply.cpp" line="+954"/>
         <source>Host not found</source>
         <translation>Hostalaria ez da aurkitu</translation>
     </message>
@@ -8794,7 +8794,7 @@
 <context>
     <name>UINetworkReplyPrivateThread</name>
     <message>
-        <location line="-576"/>
+        <location line="-577"/>
         <source>During proxy configuration</source>
         <translation>Proxy itxurapenean zehar</translation>
     </message>
@@ -12036,14 +12036,14 @@
         <translation>Mugagabeko Exekuzioa</translation>
     </message>
     <message>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="-1923"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="-1929"/>
         <source>Unknown device</source>
         <comment>USB device details</comment>
         <translation>Gailu ezezaguna</translation>
     </message>
     <message>
         <location filename="../src/UIVMInfoDialog.cpp" line="+5"/>
-        <location filename="../src/globals/VBoxGlobal.cpp" line="+316"/>
+        <location filename="../src/globals/VBoxGlobal.cpp" line="+322"/>
         <source>Remote Desktop Server Port</source>
         <comment>details report (VRDE Server)</comment>
         <translation>Hurruneko Mahaigain Zerbitzari Ataka</translation>
diff --git a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts
index 10f929d..784c963 100644
--- a/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/VirtualBox_sl.ts
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.1" language="sl_SI">
+<TS version="2.0" language="sl_SI">
 <context>
     <name>@@@</name>
     <message>
@@ -77,7 +77,7 @@
     </message>
     <message>
         <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/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>Moduli jedra VirtualBox se ne ujemajo s to različico VirtualBoxa.Namestitev VirtualBoxa očitno ni bila uspešna. Izvajanje<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>bo morda to popravilo. Prepričajte se, da ne mešate različic OSE in PUEL VirtualBoxa.</translation>
+        <translation type="obsolete">Moduli jedra VirtualBox se ne ujemajo s to različico VirtualBoxa.Namestitev VirtualBoxa očitno ni bila uspešna. Izvajanje<br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/>bo morda to popravilo. Prepričajte se, da ne mešate različic OSE in PUEL VirtualBoxa.</translation>
     </message>
     <message>
         <source>This error means that the kernel driver was either not able to allocate enough memory or that some mapping operation failed.</source>
@@ -85,7 +85,15 @@
     </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>Gonilnik jedra Linux VirtualBox (vboxdrv) ni naložen ali obstaja težava z dovoljenji za /dev/vboxdrv. Ponovno namestite modul jedra z izvajanjem <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> s skrbniškimi dovoljenji. Če v vaši distribuciji ni na voljo, najprej namestite paket DKMS. Ta paket sledi spremembam jedra Linux in po potrebi ponovno kodno prevede modul jedra vboxdrv.</translation>
+        <translation type="obsolete">Gonilnik jedra Linux VirtualBox (vboxdrv) ni naložen ali obstaja težava z dovoljenji za /dev/vboxdrv. Ponovno namestite modul jedra z izvajanjem <br/><br/>  <font color=blue>'/sbin/vboxconfig'</font><br/><br/> s skrbniškimi dovoljenji. Če v vaši distribuciji ni na voljo, najprej namestite paket DKMS. Ta paket sledi spremembam jedra Linux in po potrebi ponovno kodno prevede modul jedra vboxdrv.</translation>
+    </message>
+    <message>
+        <source>The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>as root. If it is available in your distribution, you should install the DKMS package first. This package keeps track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary. [...]
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing<br/><br/>  <font color=blue>'/sbin/rcvboxdrv setup'</font><br/><br/>may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -2244,11 +2252,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>Ko je označeno, bo VirtualBox za opravila, kot je prejemanje Dodatkov za gosta iz omrežja ali preverjanje za posodobitve, uporabil nastavitve posredniškega strežnika.</translation>
+        <translation type="obsolete">Ko je označeno, bo VirtualBox za opravila, kot je prejemanje Dodatkov za gosta iz omrežja ali preverjanje za posodobitve, uporabil nastavitve posredniškega strežnika.</translation>
     </message>
     <message>
         <source>&Enable Proxy</source>
-        <translation>&Omogoči posredniški strežnik</translation>
+        <translation type="obsolete">&Omogoči posredniški strežnik</translation>
     </message>
     <message>
         <source>Ho&st:</source>
@@ -2274,6 +2282,30 @@
         <source>Holds the proxy port.</source>
         <translation>Vsebuje vrata posredniškega strežnika.</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>
@@ -5430,6 +5462,10 @@
         <source>Proxy not found</source>
         <translation>Posredniški strežnik ni bil najden</translation>
     </message>
+    <message>
+        <source>Url not found on the server</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>UINetworkReplyPrivateThread</name>
diff --git a/src/VBox/Frontends/VirtualBox/nls/qt_el.ts b/src/VBox/Frontends/VirtualBox/nls/qt_el.ts
index a89f24e..5eea599 100644
--- a/src/VBox/Frontends/VirtualBox/nls/qt_el.ts
+++ b/src/VBox/Frontends/VirtualBox/nls/qt_el.ts
@@ -1717,10 +1717,6 @@ Do you want to delete it anyway?</source>
         <translation>Απαιτείται αυθεντικοποίηση</translation>
     </message>
     <message>
-        <source>HTTPS connection requested but SSL support not compiled in</source>
-        <translation>Ζητήθηκε σύνδεση HTTPS αλλά η υποστήριξη για SSL δεν έχει περιληφθεί</translation>
-    </message>
-    <message>
         <source>Connection refused (or timed out)</source>
         <translation>Άρνηση σύνδεσης (ή εξαντλήθηκε το χρονικό όριο)</translation>
     </message>
@@ -1744,6 +1740,10 @@ Do you want to delete it anyway?</source>
         <source>SSL handshake failed</source>
         <translation>Η χειραψία SSL απέτυχε</translation>
     </message>
+    <message>
+        <source>HTTPS connection requested but SSL support not compiled in</source>
+        <translation>Ζητήθηκε σύνδεση HTTPS αλλά η υποστήριξη για SSL δεν έχει περιληφθεί</translation>
+    </message>
 </context>
 <context>
     <name>QHttpSocketEngine</name>
@@ -3065,11 +3065,11 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>Long side</source>
-        <translation type="unfinished"></translation>
+        <translation>Μακριά πλευρά</translation>
     </message>
     <message>
         <source>Short side</source>
-        <translation type="unfinished"></translation>
+        <translation>Κοντή πλευρά</translation>
     </message>
 </context>
 <context>
@@ -3322,11 +3322,11 @@ Please choose a different file name.</source>
     <name>QSharedMemory</name>
     <message>
         <source>%1: unable to set key on lock</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: αδύνατο να τεθεί το κλειδί</translation>
     </message>
     <message>
         <source>%1: create size is less then 0</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: το μέγεθος δημιουργίας είναι μικρότερο από 0</translation>
     </message>
     <message>
         <source>%1: unable to lock</source>
@@ -3362,11 +3362,11 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>%1: unix key file doesn't exists</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: το αρχείο κλειδιού unix δεν υπάρχει</translation>
     </message>
     <message>
         <source>%1: ftok failed</source>
-        <translation type="unfinished"></translation>
+        <translation>%1: αποτυχία ftok</translation>
     </message>
     <message>
         <source>%1: unable to make key</source>
@@ -3929,7 +3929,7 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>Copy &Link Location</source>
-        <translation type="unfinished"></translation>
+        <translation>Αντιγραφή &Θέσης Δεσμού</translation>
     </message>
     <message>
         <source>&Paste</source>
@@ -4054,7 +4054,7 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>Frame load interruped by policy change</source>
-        <translation type="unfinished"></translation>
+        <translation>Η φόρτωση του πλαισίου διακόπηκε λόγω αλλαγής πολιτικής</translation>
     </message>
     <message>
         <source>Cannot show mimetype</source>
@@ -4089,7 +4089,7 @@ Please choose a different file name.</source>
     <message>
         <source>This is a searchable index. Enter search keywords: </source>
         <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment>
-        <translation type="unfinished"></translation>
+        <translation>Αυτό είναι το ευρετήριο. Εισάγετε λέξεις κλειδιά για αναζήτηση: </translation>
     </message>
     <message>
         <source>Choose File</source>
@@ -4134,7 +4134,7 @@ Please choose a different file name.</source>
     <message>
         <source>Open Frame</source>
         <comment>Open Frame in New Window context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Άνοιγμα πλαισίου</translation>
     </message>
     <message>
         <source>Copy</source>
@@ -4144,12 +4144,12 @@ Please choose a different file name.</source>
     <message>
         <source>Go Back</source>
         <comment>Back context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πήγαινε πίσω</translation>
     </message>
     <message>
         <source>Go Forward</source>
         <comment>Forward context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πήγαινε μπροστά</translation>
     </message>
     <message>
         <source>Stop</source>
@@ -4174,7 +4174,7 @@ Please choose a different file name.</source>
     <message>
         <source>No Guesses Found</source>
         <comment>No Guesses Found context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Δεν βρέθηκαν προτάσεις</translation>
     </message>
     <message>
         <source>Ignore</source>
@@ -4284,22 +4284,22 @@ Please choose a different file name.</source>
     <message>
         <source>Inspect</source>
         <comment>Inspect Element context menu item</comment>
-        <translation type="unfinished"></translation>
+        <translation>Επιθεώρηση</translation>
     </message>
     <message>
         <source>No recent searches</source>
         <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment>
-        <translation type="unfinished"></translation>
+        <translation>Όχι πρόσφατες αναζητήσεις</translation>
     </message>
     <message>
         <source>Recent searches</source>
         <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment>
-        <translation type="unfinished"></translation>
+        <translation>Πρόσφατες αναζητήσεις</translation>
     </message>
     <message>
         <source>Clear recent searches</source>
         <comment>menu item in Recent Searches menu that empties menu's contents</comment>
-        <translation type="unfinished"></translation>
+        <translation>Εκκαθάριση πρόσφατων αναζητήσεων</translation>
     </message>
     <message>
         <source>Unknown</source>
@@ -4309,11 +4309,11 @@ Please choose a different file name.</source>
     <message>
         <source>%1 (%2x%3 pixels)</source>
         <comment>Title string for images</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 (%2x%3 πίξελ)</translation>
     </message>
     <message>
         <source>Web Inspector - %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Επιθεώρηση σελίδων - %2</translation>
     </message>
 </context>
 <context>
@@ -4334,15 +4334,15 @@ Please choose a different file name.</source>
     <name>QWizard</name>
     <message>
         <source>Go Back</source>
-        <translation type="unfinished"></translation>
+        <translation>Πήγαινε πίσω</translation>
     </message>
     <message>
         <source>Continue</source>
-        <translation type="unfinished"></translation>
+        <translation>Συνέχισε</translation>
     </message>
     <message>
         <source>Commit</source>
-        <translation type="unfinished"></translation>
+        <translation>Διάπραξη</translation>
     </message>
     <message>
         <source>Done</source>
@@ -4444,67 +4444,67 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>error triggered by consumer</source>
-        <translation type="unfinished"></translation>
+        <translation>σφάλμα ενεργοποιήθηκε από τον καταναλωτή</translation>
     </message>
     <message>
         <source>unexpected end of file</source>
-        <translation type="unfinished"></translation>
+        <translation>απροσδόκητο τέλος αρχείου</translation>
     </message>
     <message>
         <source>more than one document type definition</source>
-        <translation type="unfinished"></translation>
+        <translation>πάνω από ένας ορισμός τύπου αρχείου</translation>
     </message>
     <message>
         <source>error occurred while parsing element</source>
-        <translation type="unfinished"></translation>
+        <translation>λάθος κατά τη συντακτική ανάλυση του στοιχείου</translation>
     </message>
     <message>
         <source>tag mismatch</source>
-        <translation type="unfinished"></translation>
+        <translation>αναντιστοιχία ετικέτας</translation>
     </message>
     <message>
         <source>error occurred while parsing content</source>
-        <translation type="unfinished"></translation>
+        <translation>λάθος κατά τη συντακτική ανάλυση του περιεχομένου</translation>
     </message>
     <message>
         <source>unexpected character</source>
-        <translation type="unfinished"></translation>
+        <translation>μη αναμενόμενος χαρακτήρας</translation>
     </message>
     <message>
         <source>invalid name for processing instruction</source>
-        <translation type="unfinished"></translation>
+        <translation>μη έγκυρο όνομα για οδηγία επεξεργασίας</translation>
     </message>
     <message>
         <source>version expected while reading the XML declaration</source>
-        <translation type="unfinished"></translation>
+        <translation>αναμενόταν η έκδοση ενώ διαβαζόταν η δήλωση XML</translation>
     </message>
     <message>
         <source>wrong value for standalone declaration</source>
-        <translation type="unfinished"></translation>
+        <translation>λάθος τιμή για την αυτόνομη δήλωση</translation>
     </message>
     <message>
         <source>encoding declaration or standalone declaration expected while reading the XML declaration</source>
-        <translation type="unfinished"></translation>
+        <translation>αναμενόταν η κωδικοποιημένη ή η αυτόνομη δήλωση ενώ διαβαζόταν η δήλωση XML</translation>
     </message>
     <message>
         <source>standalone declaration expected while reading the XML declaration</source>
-        <translation type="unfinished"></translation>
+        <translation>αναμενόταν η αυτόνομη δήλωση ενώ διαβαζόταν η δήλωση XML</translation>
     </message>
     <message>
         <source>error occurred while parsing document type definition</source>
-        <translation type="unfinished"></translation>
+        <translation>λάθος κατά τη συντακτική ανάλυση του ορισμού τύπου αρχείου</translation>
     </message>
     <message>
         <source>letter is expected</source>
-        <translation type="unfinished"></translation>
+        <translation>αναμένεται γράμμα</translation>
     </message>
     <message>
         <source>error occurred while parsing comment</source>
-        <translation type="unfinished"></translation>
+        <translation>λάθος κατά τη συντακτική ανάλυση του σχόλιου</translation>
     </message>
     <message>
         <source>error occurred while parsing reference</source>
-        <translation type="unfinished"></translation>
+        <translation>λάθος κατά τη συντακτική ανάλυση της αναφοράς</translation>
     </message>
     <message>
         <source>internal general entity reference not allowed in DTD</source>
@@ -4535,27 +4535,27 @@ Please choose a different file name.</source>
     <name>QXmlStream</name>
     <message>
         <source>Extra content at end of document.</source>
-        <translation type="unfinished"></translation>
+        <translation>Παραπανίσιο περιεχόμενο στο τέλος του κειμένου.</translation>
     </message>
     <message>
         <source>Invalid entity value.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μη έγκυρη τιμή οντότητας.</translation>
     </message>
     <message>
         <source>Invalid XML character.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μη έγκυρος χαρακτήρας XML.</translation>
     </message>
     <message>
         <source>Sequence ']]>' not allowed in content.</source>
-        <translation type="unfinished"></translation>
+        <translation>Η ακολουθία ']]>' δεν επιτρέπεται στο περιεχόμενο.</translation>
     </message>
     <message>
         <source>Namespace prefix '%1' not declared</source>
-        <translation type="unfinished"></translation>
+        <translation>Το πρόθεμα του χώρου ονομάτων %1 δεν έχει δηλωθεί</translation>
     </message>
     <message>
         <source>Attribute redefined.</source>
-        <translation type="unfinished"></translation>
+        <translation>Η ιδιότητα επαναπροσδιορίστηκε.</translation>
     </message>
     <message>
         <source>Unexpected character '%1' in public id literal.</source>
@@ -4563,19 +4563,19 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>Invalid XML version string.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μη έγκυρη έκδοση XML.</translation>
     </message>
     <message>
         <source>Unsupported XML version.</source>
-        <translation type="unfinished"></translation>
+        <translation>Μη υποστηριζόμενη έκδοση XML.</translation>
     </message>
     <message>
         <source>%1 is an invalid encoding name.</source>
-        <translation type="unfinished"></translation>
+        <translation>%1 είναι μη έγκυρο όνομα κωδικοποίησης.</translation>
     </message>
     <message>
         <source>Encoding %1 is unsupported</source>
-        <translation type="unfinished"></translation>
+        <translation>Η κωδικοποίηση %1 δεν υποστηρίζεται</translation>
     </message>
     <message>
         <source>Standalone accepts only yes or no.</source>
@@ -4651,7 +4651,7 @@ Please choose a different file name.</source>
     </message>
     <message>
         <source>Entity '%1' not declared.</source>
-        <translation type="unfinished"></translation>
+        <translation>Η οντότητα '%1' δεν έχει δηλωθεί.</translation>
     </message>
     <message>
         <source>Reference to external entity '%1' in attribute value.</source>
@@ -4693,10 +4693,6 @@ Please choose a different file name.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>Attribute %1 can't be serialized because it appears at the top level.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>Year %1 is invalid because it begins with %2.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5105,10 +5101,6 @@ Please choose a different file name.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5256,16 +5248,24 @@ Please choose a different file name.</source>
         <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <source>Attribute %1 can't be serialized because it appears at the top level.</source>
+        <translation></translation>
+    </message>
+    <message>
+        <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source>
+        <translation></translation>
+    </message>
 </context>
 <context>
     <name>VolumeSlider</name>
     <message>
         <source>Muted</source>
-        <translation type="unfinished"></translation>
+        <translation>Σιώπηση</translation>
     </message>
     <message>
         <source>Volume: %1%</source>
-        <translation type="unfinished"></translation>
+        <translation>Ένταση: %1%</translation>
     </message>
 </context>
 <context>
diff --git a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
index 460a887..8fef5f5 100644
--- a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
@@ -135,6 +135,7 @@ const char* UIExtraDataDefs::GUI_StatusBar_IndicatorOrder = "GUI/StatusBar/Indic
 #ifdef Q_WS_MAC
 const char* UIExtraDataDefs::GUI_RealtimeDockIconUpdateEnabled = "GUI/RealtimeDockIconUpdateEnabled";
 const char* UIExtraDataDefs::GUI_RealtimeDockIconUpdateMonitor = "GUI/RealtimeDockIconUpdateMonitor";
+const char* UIExtraDataDefs::GUI_DockIconDisableOverlay = "GUI/DockIconDisableOverlay";
 #endif /* Q_WS_MAC */
 const char* UIExtraDataDefs::GUI_PassCAD = "GUI/PassCAD";
 const char* UIExtraDataDefs::GUI_MouseCapturePolicy = "GUI/MouseCapturePolicy";
diff --git a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
index f9b93b0..7197992 100644
--- a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
+++ b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
@@ -234,6 +234,8 @@ namespace UIExtraDataDefs
         extern const char* GUI_RealtimeDockIconUpdateEnabled;
         /** Mac OS X: Holds guest-screen which Dock icon should reflect at runtime. */
         extern const char* GUI_RealtimeDockIconUpdateMonitor;
+        /** Mac OS X: Holds whether Dock icon should have overlay disabled. */
+        extern const char* GUI_DockIconDisableOverlay;
 #endif /* Q_WS_MAC */
         /** Holds whether machine should pass CAD to guest. */
         extern const char* GUI_PassCAD;
diff --git a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
index 6e4e4d4..eacb033 100644
--- a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
@@ -1873,7 +1873,7 @@ QStringList UIExtraDataManagerWindow::knownExtraDataKeys()
 #endif /* !Q_WS_MAC */
            << GUI_StatusBar_Enabled << GUI_RestrictedStatusBarIndicators << GUI_StatusBar_IndicatorOrder
 #ifdef Q_WS_MAC
-           << GUI_RealtimeDockIconUpdateEnabled << GUI_RealtimeDockIconUpdateMonitor
+           << GUI_RealtimeDockIconUpdateEnabled << GUI_RealtimeDockIconUpdateMonitor << GUI_DockIconDisableOverlay
 #endif /* Q_WS_MAC */
            << GUI_PassCAD
            << GUI_MouseCapturePolicy
@@ -2313,14 +2313,18 @@ QRect UIExtraDataManager::selectorWindowGeometry(QWidget *pWidget)
     if (pWidget)
         geometry.setSize(geometry.size().expandedTo(pWidget->minimumSizeHint()));
 
-    /* Get screen-geometry [of screen with point (iX, iY) if possible]: */
+    /* Get available-geometry [of screen with point (iX, iY) if possible]: */
     const QRect availableGeometry = fOk ? vboxGlobal().availableGeometry(QPoint(iX, iY)) :
                                           vboxGlobal().availableGeometry();
 
+    /* In Windows Qt fails to reposition out of screen window properly, so moving to centre: */
+#ifdef Q_WS_WIN
     /* Make sure resulting geometry is within current bounds: */
-    geometry = geometry.intersected(availableGeometry);
+    if (fOk && geometry.intersects(availableGeometry))
+        geometry.moveCenter(availableGeometry.center());
+#endif /* Q_WS_WIN */
 
-    /* Move default-geometry to screen-geometry' center: */
+    /* As final fallback, move default-geometry to available-geometry' center: */
     if (!fOk)
         geometry.moveCenter(availableGeometry.center());
 
@@ -3429,6 +3433,18 @@ void UIExtraDataManager::setRealtimeDockIconUpdateMonitor(int iIndex, const QStr
 {
     setExtraDataString(GUI_RealtimeDockIconUpdateMonitor, iIndex ? QString::number(iIndex) : QString(), strID);
 }
+
+bool UIExtraDataManager::dockIconDisableOverlay(const QString &strID)
+{
+    /* 'False' unless feature allowed: */
+    return isFeatureAllowed(GUI_DockIconDisableOverlay, strID);
+}
+
+void UIExtraDataManager::setDockIconDisableOverlay(bool fDisabled, const QString &strID)
+{
+    /* 'True' if feature allowed, null-string otherwise: */
+    setExtraDataString(GUI_DockIconDisableOverlay, toFeatureAllowed(fDisabled), strID);
+}
 #endif /* Q_WS_MAC */
 
 bool UIExtraDataManager::passCADtoGuest(const QString &strID)
@@ -3509,16 +3525,23 @@ QRect UIExtraDataManager::informationWindowGeometry(QWidget *pWidget, QWidget *p
     if (pWidget)
         geometry.setSize(geometry.size().expandedTo(pWidget->minimumSizeHint()));
 
-    /* Get screen-geometry [of screen with point (iX, iY) if possible]: */
+    /* Get available-geometry [of screen with point (iX, iY) if possible]: */
     const QRect availableGeometry = fOk ? vboxGlobal().availableGeometry(QPoint(iX, iY)) :
                                           vboxGlobal().availableGeometry();
 
+    /* In Windows Qt fails to reposition out of screen window properly, so moving to centre: */
+#ifdef Q_WS_WIN
     /* Make sure resulting geometry is within current bounds: */
-    geometry = geometry.intersected(availableGeometry);
+    if (fOk && geometry.intersects(availableGeometry))
+        geometry.moveCenter(availableGeometry.center());
+#endif /* Q_WS_WIN */
 
-    /* Move default-geometry to pParentWidget' geometry center: */
+    /* As a fallback, move default-geometry to pParentWidget' geometry center: */
     if (!fOk && pParentWidget)
         geometry.moveCenter(pParentWidget->geometry().center());
+    /* As final fallback, move default-geometry to available-geometry' center: */
+    else if (!fOk)
+        geometry.moveCenter(availableGeometry.center());
 
     /* Return result: */
     return geometry;
@@ -3619,14 +3642,18 @@ QRect UIExtraDataManager::extraDataManagerGeometry(QWidget *pWidget)
     if (pWidget)
         geometry.setSize(geometry.size().expandedTo(pWidget->minimumSizeHint()));
 
-    /* Get screen-geometry [of screen with point (iX, iY) if possible]: */
+    /* Get available-geometry [of screen with point (iX, iY) if possible]: */
     const QRect availableGeometry = fOk ? vboxGlobal().availableGeometry(QPoint(iX, iY)) :
                                           vboxGlobal().availableGeometry();
 
+    /* In Windows Qt fails to reposition out of screen window properly, so moving to centre: */
+#ifdef Q_WS_WIN
     /* Make sure resulting geometry is within current bounds: */
-    geometry = geometry.intersected(availableGeometry);
+    if (fOk && geometry.intersects(availableGeometry))
+        geometry.moveCenter(availableGeometry.center());
+#endif /* Q_WS_WIN */
 
-    /* Move default-geometry to current screen center: */
+    /* As final fallback, move default-geometry to available-geometry' center: */
     if (!fOk)
         geometry.moveCenter(availableGeometry.center());
 
@@ -3734,8 +3761,9 @@ QRect UIExtraDataManager::logWindowGeometry(QWidget *pWidget, const QRect &defau
 
     /* In Windows Qt fails to reposition out of screen window properly, so moving to centre: */
 #ifdef Q_WS_WIN
-    /* Get screen-geometry [of screen with point (iX, iY) if possible]: */
-    const QRect availableGeometry = vboxGlobal().availableGeometry(QPoint(iX, iY));
+    /* Get available-geometry [of screen with point (iX, iY) if possible]: */
+    const QRect availableGeometry = fOk ? vboxGlobal().availableGeometry(QPoint(iX, iY)) :
+                                          vboxGlobal().availableGeometry();
 
     /* Make sure resulting geometry is within current bounds: */
     if (!availableGeometry.contains(geometry, true))
@@ -3809,9 +3837,12 @@ void UIExtraDataManager::sltExtraDataChange(QString strMachineID, QString strKey
                 emit sigHidLedsSyncStateChange(!isFeatureRestricted(strKey, strMachineID));
 #ifdef Q_WS_MAC
             /* 'Dock icon' appearance changed (allowed if not restricted)? */
-            else if (   strKey == GUI_RealtimeDockIconUpdateEnabled
-                     || strKey == GUI_RealtimeDockIconUpdateMonitor)
+            else if (strKey == GUI_RealtimeDockIconUpdateEnabled ||
+                     strKey == GUI_RealtimeDockIconUpdateMonitor)
                 emit sigDockIconAppearanceChange(!isFeatureRestricted(strKey, strMachineID));
+            /* 'Dock icon overlay' appearance changed (restricted if not allowed)? */
+            else if (strKey == GUI_DockIconDisableOverlay)
+                emit sigDockIconOverlayAppearanceChange(isFeatureAllowed(strKey, strMachineID));
 #endif /* Q_WS_MAC */
         }
 
diff --git a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
index 204d911..6db93ee 100644
--- a/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
+++ b/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
@@ -91,6 +91,8 @@ signals:
 #ifdef RT_OS_DARWIN
     /** Mac OS X: Notifies about 'dock icon' appearance change. */
     void sigDockIconAppearanceChange(bool fEnabled);
+    /** Mac OS X: Notifies about 'dock icon overlay' appearance change. */
+    void sigDockIconOverlayAppearanceChange(bool fEnabled);
 #endif /* RT_OS_DARWIN */
 
 public:
@@ -459,6 +461,11 @@ public:
         int realtimeDockIconUpdateMonitor(const QString &strID);
         /** Mac OS X: Defines guest-screen @a iIndex which Dock icon should reflect at runtime. */
         void setRealtimeDockIconUpdateMonitor(int iIndex, const QString &strID);
+
+        /** Mac OS X: Returns whether Dock icon overlay is disabled. */
+        bool dockIconDisableOverlay(const QString &strID);
+        /** Mac OS X: Defines whether Dock icon overlay is @a fDisabled. */
+        void setDockIconDisableOverlay(bool fDisabled, const QString &strID);
 #endif /* Q_WS_MAC */
 
         /** Returns whether machine should pass CAD to guest. */
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp b/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
index e39d8f1..065c82e 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/UIMessageCenter.cpp
@@ -1758,6 +1758,7 @@ void UIMessageCenter::showRuntimeError(const CConsole &console, bool fFatal, con
     if (fFatal)
     {
         /* Power down after a fFatal error: */
+        LogRel(("GUI: Powering VM down after a fatal runtime error...\n"));
         console1.PowerDown();
     }
 }
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
index 574c319..10f0238 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
@@ -1749,7 +1749,7 @@ QString VBoxGlobal::openMedium(UIMediumType mediumType, QString strMediumLocatio
     return QString();
 }
 
-void VBoxGlobal::startMediumEnumeration(bool fForceStart /* = true*/)
+void VBoxGlobal::startMediumEnumeration()
 {
     /* Make sure VBoxGlobal is already valid: */
     AssertReturnVoid(mValid);
@@ -1771,10 +1771,6 @@ void VBoxGlobal::startMediumEnumeration(bool fForceStart /* = true*/)
     if (shouldRestoreCurrentSnapshot())
         return;
 
-    /* Developer doesn't want any unnecessary media caching! */
-    if (!fForceStart && !agressiveCaching())
-        return;
-
     if (m_mediumEnumeratorDtorRwLock.tryLockForRead())
     {
         /* Redirect request to medium-enumerator: */
@@ -2105,8 +2101,8 @@ void VBoxGlobal::updateMachineStorage(const CMachine &constMachine, const UIMedi
                                                     fMount, false /* retry? */);
             }
         }
-        /* Mounting successful: */
-        else
+        /* If mounting was successful: */
+        if (fWasMounted)
         {
             /* Disable First RUN Wizard: */
             if (gEDataManager->machineFirstTimeStarted(machine.GetId()))
@@ -4311,10 +4307,7 @@ void VBoxGlobal::prepare()
 
     UIConverter::prepare();
 
-    /* Cache IMedium data.
-     * There could be no used mediums at all,
-     * but this method should be run anyway just to enumerate null UIMedium object,
-     * used by some VBox smart widgets, like VBoxMediaComboBox: */
+    /* Create medium enumerator but don't do any immediate caching. */
     m_pMediumEnumerator = new UIMediumEnumerator;
     {
         /* Prepare medium-enumerator: */
@@ -4329,8 +4322,6 @@ void VBoxGlobal::prepare()
         connect(m_pMediumEnumerator, SIGNAL(sigMediumEnumerationFinished()),
                 this, SIGNAL(sigMediumEnumerationFinished()));
     }
-    if (agressiveCaching())
-        startMediumEnumeration();
 
     /* Create shortcut pool: */
     UIShortcutPool::create();
@@ -4621,7 +4612,7 @@ bool VBoxGlobal::isDebuggerWorker(int *piDbgCfgVar, const char *pszExtraDataName
 
 #endif /* VBOX_WITH_DEBUGGER_GUI */
 
-bool VBoxGlobal::showUI()
+void VBoxGlobal::showUI()
 {
     /* Load application settings: */
     VBoxGlobalSettings appSettings = settings();
@@ -4629,11 +4620,11 @@ bool VBoxGlobal::showUI()
     /* Show Selector UI: */
     if (!isVMConsoleProcess())
     {
-        /* Make sure Selector UI is permitted: */
+        /* Make sure Selector UI is permitted, quit if not: */
         if (appSettings.isFeatureActive("noSelector"))
         {
             msgCenter().cannotStartSelector();
-            return false;
+            return QApplication::quit();
         }
 
 #ifdef VBOX_BLEEDING_EDGE
@@ -4655,13 +4646,10 @@ bool VBoxGlobal::showUI()
     /* Show Runtime UI: */
     else
     {
-        /* Make sure machine is started: */
+        /* Make sure machine is started, quit if not: */
         if (!UIMachine::startMachine(vboxGlobal().managedVMUuid()))
-            return false;
+            return QApplication::quit();
     }
-
-    /* True by default: */
-    return true;
 }
 
 bool VBoxGlobal::switchToMachine(CMachine &machine)
diff --git a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
index 4c1352e..6c02427 100644
--- a/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
+++ b/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
@@ -193,9 +193,6 @@ public:
 
     bool processArgs();
 
-    /** Shows UI. */
-    bool showUI();
-
     bool switchToMachine(CMachine &machine);
 
     bool launchMachine(CMachine &machine, LaunchMode enmLaunchMode = LaunchMode_Default);
@@ -350,7 +347,7 @@ public:
     QString openMedium(UIMediumType mediumType, QString strMediumLocation, QWidget *pParent = 0);
 
     /* API: Medium-enumeration stuff: */
-    void startMediumEnumeration(bool fForceStart = true);
+    void startMediumEnumeration();
     bool agressiveCaching() const { return mAgressiveCaching; }
     bool isMediumEnumerationInProgress() const;
     UIMedium medium(const QString &strMediumID) const;
@@ -501,6 +498,9 @@ protected slots:
     void prepare();
     void cleanup();
 
+    /** Shows UI. */
+    void showUI();
+
     /** Handles the VBoxSVC availability change. */
     void sltHandleVBoxSVCAvailabilityChange(bool fAvailable);
 
diff --git a/src/VBox/Frontends/VirtualBox/src/main.cpp b/src/VBox/Frontends/VirtualBox/src/main.cpp
index 1d8f738..d4109b3 100644
--- a/src/VBox/Frontends/VirtualBox/src/main.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/main.cpp
@@ -472,9 +472,15 @@ extern "C" DECLEXPORT(int) TrustedMain(int argc, char **argv, char ** /*envp*/)
             if (vboxGlobal().processArgs())
                 break;
 
-            /* Exit if VBoxGlobal is unable to show UI: */
-            if (!vboxGlobal().showUI())
-                break;
+            /* For Runtime UI: */
+            if (vboxGlobal().isVMConsoleProcess())
+            {
+                /* Prevent application from exiting when all window(s) closed: */
+                qApp->setQuitOnLastWindowClosed(false);
+            }
+
+            /* Request to Show UI _after_ QApplication started: */
+            QMetaObject::invokeMethod(&vboxGlobal(), "showUI", Qt::QueuedConnection);
 
             /* Start application: */
             iResultCode = a.exec();
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.cpp b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.cpp
index 9480c88..01e1be1 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/UIMediumEnumerator.cpp
@@ -279,7 +279,11 @@ void UIMediumEnumerator::sltHandleMediumEnumerationTaskComplete(UITask *pTask)
     m_tasks.remove(pTask);
 
     /* Make sure such UIMedium still exists: */
-    AssertReturnVoid(m_mediums.contains(strUIMediumKey));
+    if (!m_mediums.contains(strUIMediumKey))
+    {
+        LogRel2(("GUI: UIMediumEnumerator: Medium with key={%s} already deleted by a third party\n", strUIMediumKey.toUtf8().constData()));
+        return;
+    }
 
     /* Check if UIMedium ID was changed: */
     const QString strUIMediumID = uimedium.id();
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.cpp b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.cpp
index dff7977..e60fdcc 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2009-2010 Oracle Corporation
+ * Copyright (C) 2009-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,12 +19,21 @@
 # include <precomp.h>
 #else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
-/* VBox includes */
+/* Qt includes: */
+#include <QStyle>
+
+/* GUI includes: */
 # include "UIAbstractDockIconPreview.h"
+# include "UIConverter.h"
+# include "UIExtraDataManager.h"
 # include "UIFrameBuffer.h"
 # include "UIMachineLogic.h"
 # include "UIMachineView.h"
 # include "UISession.h"
+# include "VBoxGlobal.h"
+
+/* COM includes: */
+# include "COMEnums.h"
 
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
 
@@ -62,15 +71,8 @@ UIAbstractDockIconPreviewHelper::UIAbstractDockIconPreviewHelper(UISession *pSes
     , m_updateRect(CGRectMake(0, 0, 0, 0))
     , m_monitorRect(CGRectMake(0, 0, 0, 0))
 {
-    m_overlayImage   = ::darwinToCGImageRef(&overlayImage);
+    m_overlayImage = ::darwinToCGImageRef(&overlayImage);
     Assert(m_overlayImage);
-
-    m_statePaused    = ::darwinToCGImageRef("state_paused_16px.png");
-    Assert(m_statePaused);
-    m_stateSaving    = ::darwinToCGImageRef("state_saving_16px.png");
-    Assert(m_stateSaving);
-    m_stateRestoring = ::darwinToCGImageRef("state_restoring_16px.png");
-    Assert(m_stateRestoring);
 }
 
 void* UIAbstractDockIconPreviewHelper::currentPreviewWindowId() const
@@ -90,10 +92,6 @@ UIAbstractDockIconPreviewHelper::~UIAbstractDockIconPreviewHelper()
         CGImageRelease(m_dockMonitor);
     if (m_dockMonitorGlossy)
         CGImageRelease(m_dockMonitorGlossy);
-
-    CGImageRelease(m_statePaused);
-    CGImageRelease(m_stateSaving);
-    CGImageRelease(m_stateRestoring);
 }
 
 void UIAbstractDockIconPreviewHelper::initPreviewImages()
@@ -113,51 +111,30 @@ void UIAbstractDockIconPreviewHelper::initPreviewImages()
         m_dockMonitorGlossy = ::darwinToCGImageRef("monitor_glossy.png");
         Assert(m_dockMonitorGlossy);
         /* This depends on the content of monitor.png */
-        m_updateRect = CGRectMake(m_monitorRect.origin.x + 7 + 1,
-                                  m_monitorRect.origin.y + 8 + 1,
-                                  118 - 7 - 2,
-                                  103 - 8 - 2);
+        m_updateRect = CGRectMake(m_monitorRect.origin.x + 8 /* left-frame */ + 1 /* indent-size */,
+                                  m_monitorRect.origin.y + 8 /* top-frame  */ + 1 /* indent-size */,
+                                  128 /* .png-width  */ - 8 /* left-frame */ -  8 /* right-frame  */ - 2 * 1 /* indent-size */,
+                                  128 /* .png-height */ - 8 /* top-frame  */ - 25 /* bottom-frame */ - 2 * 1 /* indent-size */);
     }
 }
 
-CGImageRef UIAbstractDockIconPreviewHelper::stateImage() const
-{
-    CGImageRef img;
-    if (   m_pSession->machineState() == KMachineState_Paused
-        || m_pSession->machineState() == KMachineState_TeleportingPausedVM)
-        img = m_statePaused;
-    else if (   m_pSession->machineState() == KMachineState_Restoring
-             || m_pSession->machineState() == KMachineState_TeleportingIn)
-        img = m_stateRestoring;
-    else if (   m_pSession->machineState() == KMachineState_Saving
-             || m_pSession->machineState() == KMachineState_LiveSnapshotting)
-        img = m_stateSaving;
-    else
-        img = NULL;
-    return img;
-}
-
 void UIAbstractDockIconPreviewHelper::drawOverlayIcons(CGContextRef context)
 {
-    CGRect overlayRect = CGRectMake(0, 0, 0, 0);
-    /* The overlay image at bottom/right */
-    if (m_overlayImage)
-    {
-        overlayRect = CGRectMake(m_dockIconRect.size.width - CGImageGetWidth(m_overlayImage),
-                                 m_dockIconRect.size.height - CGImageGetHeight(m_overlayImage),
-                                 CGImageGetWidth(m_overlayImage),
-                                 CGImageGetHeight(m_overlayImage));
-        CGContextDrawImage(context, flipRect(overlayRect), m_overlayImage);
-    }
-    CGImageRef sImage = stateImage();
-    /* The state image at bottom/right */
-    if (sImage)
+    /* Determine whether dock icon overlay is not disabled: */
+    if (!gEDataManager->dockIconDisableOverlay(vboxGlobal().managedVMUuid()))
     {
-        CGRect stateRect = CGRectMake(overlayRect.origin.x - CGImageGetWidth(sImage) / 2.0,
-                                      overlayRect.origin.y - CGImageGetHeight(sImage) / 2.0,
-                                      CGImageGetWidth(sImage),
-                                      CGImageGetHeight(sImage));
-        CGContextDrawImage(context, flipRect(stateRect), sImage);
+        /* Initialize overlay rectangle: */
+        CGRect overlayRect = CGRectMake(0, 0, 0, 0);
+        /* Make sure overlay image is valid: */
+        if (m_overlayImage)
+        {
+            /* Draw overlay image at bottom-right of dock icon: */
+            overlayRect = CGRectMake(m_dockIconRect.size.width - CGImageGetWidth(m_overlayImage),
+                                     m_dockIconRect.size.height - CGImageGetHeight(m_overlayImage),
+                                     CGImageGetWidth(m_overlayImage),
+                                     CGImageGetHeight(m_overlayImage));
+            CGContextDrawImage(context, flipRect(overlayRect), m_overlayImage);
+        }
     }
 }
 
diff --git a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.h b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.h
index c4cbf3d..37d3b1b 100644
--- a/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.h
+++ b/src/VBox/Frontends/VirtualBox/src/platform/darwin/UIAbstractDockIconPreview.h
@@ -48,7 +48,6 @@ public:
     UIAbstractDockIconPreviewHelper(UISession *pSession, const QPixmap& overlayImage);
     virtual ~UIAbstractDockIconPreviewHelper();
     void initPreviewImages();
-    inline CGImageRef stateImage() const;
     void drawOverlayIcons(CGContextRef context);
 
     void* currentPreviewWindowId() const;
@@ -66,10 +65,6 @@ public:
     CGImageRef m_dockMonitor;
     CGImageRef m_dockMonitorGlossy;
 
-    CGImageRef m_statePaused;
-    CGImageRef m_stateSaving;
-    CGImageRef m_stateRestoring;
-
     CGRect m_updateRect;
     CGRect m_monitorRect;
 };
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp
index 7bc9021..54e3edc 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp
@@ -1838,8 +1838,29 @@ protected:
         setName(QApplication::translate("UIActionPool", "Show Application Icon"));
     }
 };
-#endif /* Q_WS_MAC */
 
+class UIActionToggleDockIconDisableOverlay : public UIActionToggle
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionToggleDockIconDisableOverlay(UIActionPool *pParent)
+        : UIActionToggle(pParent) {}
+
+protected:
+
+    QString shortcutExtraDataID() const
+    {
+        return QString("DockOverlayDisable");
+    }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "Disable Dock Icon Overlay"));
+    }
+};
+#endif /* Q_WS_MAC */
 
 UIActionPoolRuntime::UIActionPoolRuntime(bool fTemporary /* = false */)
     : UIActionPool(UIActionPoolType_Runtime, fTemporary)
@@ -2127,6 +2148,7 @@ void UIActionPoolRuntime::preparePool()
     m_pool[UIActionIndexRT_M_Dock_M_DockSettings] = new UIActionMenuDockSettings(this);
     m_pool[UIActionIndexRT_M_Dock_M_DockSettings_T_PreviewMonitor] = new UIActionToggleDockPreviewMonitor(this);
     m_pool[UIActionIndexRT_M_Dock_M_DockSettings_T_DisableMonitor] = new UIActionToggleDockDisableMonitor(this);
+    m_pool[UIActionIndexRT_M_Dock_M_DockSettings_T_DisableOverlay] = new UIActionToggleDockIconDisableOverlay(this);
 #endif /* Q_WS_MAC */
 
     /* Prepare update-handlers for known menus: */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h
index bd19e4e..0bb5906 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h
@@ -121,6 +121,7 @@ enum UIActionIndexRT
     UIActionIndexRT_M_Dock_M_DockSettings,
     UIActionIndexRT_M_Dock_M_DockSettings_T_PreviewMonitor,
     UIActionIndexRT_M_Dock_M_DockSettings_T_DisableMonitor,
+    UIActionIndexRT_M_Dock_M_DockSettings_T_DisableOverlay,
 #endif /* Q_WS_MAC */
 
     /* Maximum index: */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp
index b72fe8b..9220c19 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachine.cpp
@@ -200,11 +200,9 @@ bool UIMachine::prepare()
     if (!prepareSession())
         return false;
 
-    /* Prevent application from closing when all window(s) closed: */
-    qApp->setQuitOnLastWindowClosed(false);
-
-    /* Cache medium data if necessary: */
-    vboxGlobal().startMediumEnumeration(false /* force start */);
+    /* Cache medium data early if necessary: */
+    if (vboxGlobal().agressiveCaching())
+        vboxGlobal().startMediumEnumeration();
 
     /* Prepare machine-logic: */
     prepareMachineLogic();
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
index c36eaec..f87fcae 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
@@ -399,7 +399,10 @@ void UIMachineLogic::saveState()
         fSuccess = uisession()->pause();
     /* Save-state: */
     if (fSuccess)
+    {
+        LogRel(("GUI: Passing request to save VM state from machine-logic to UI session.\n"));
         fSuccess = uisession()->saveState();
+    }
 
     /* Disable 'manual-override' finally: */
     setManualOverrideMode(false);
@@ -429,6 +432,7 @@ void UIMachineLogic::powerOff(bool fDiscardingState)
     bool fSuccess = true;
     /* Power-off: */
     bool fServerCrashed = false;
+    LogRel(("GUI: Passing request to power VM off from machine-logic to UI session.\n"));
     fSuccess = uisession()->powerOff(fDiscardingState, fServerCrashed) || fServerCrashed;
 
     /* Disable 'manual-override' finally: */
@@ -463,6 +467,7 @@ void UIMachineLogic::closeRuntimeUI()
     }
 
     /* Asynchronously ask UISession to close Runtime UI: */
+    LogRel(("GUI: Passing request to close Runtime UI from machine-logic to UI session.\n"));
     QMetaObject::invokeMethod(uisession(), "sltCloseRuntimeUI", Qt::QueuedConnection);
 }
 
@@ -491,6 +496,7 @@ void UIMachineLogic::sltHandleVBoxSVCAvailabilityChange()
     msgCenter().warnAboutVBoxSVCUnavailable();
 
     /* Power VM off: */
+    LogRel(("GUI: Request to power VM off due to VBoxSVC is unavailable.\n"));
     powerOff(false);
 }
 
@@ -545,12 +551,16 @@ void UIMachineLogic::sltMachineStateChanged()
                 case GuruMeditationHandlerType_Default:
                 {
                     if (msgCenter().remindAboutGuruMeditation(QDir::toNativeSeparators(strLogFolder)))
+                    {
+                        LogRel(("GUI: User request to power VM off on Guru Meditation.\n"));
                         powerOff(false /* do NOT restore current snapshot */);
+                    }
                     break;
                 }
                 /* Power off VM silently: */
                 case GuruMeditationHandlerType_PowerOff:
                 {
+                    LogRel(("GUI: Automatic request to power VM off on Guru Meditation.\n"));
                     powerOff(false /* do NOT restore current snapshot */);
                     break;
                 }
@@ -617,6 +627,7 @@ void UIMachineLogic::sltMachineStateChanged()
                     }
                 }
 
+                LogRel(("GUI: Request to close Runtime UI because VM is powered off already.\n"));
                 closeRuntimeUI();
                 return;
             }
@@ -1193,6 +1204,18 @@ void UIMachineLogic::prepareDock()
     connect(gEDataManager, SIGNAL(sigDockIconAppearanceChange(bool)),
             this, SLOT(sltChangeDockIconUpdate(bool)));
 
+    /* Get dock icon disable overlay action: */
+    QAction *pDockIconDisableOverlay = actionPool()->action(UIActionIndexRT_M_Dock_M_DockSettings_T_DisableOverlay);
+    /* Prepare dock icon disable overlay action with initial data: */
+    pDockIconDisableOverlay->setChecked(gEDataManager->dockIconDisableOverlay(vboxGlobal().managedVMUuid()));
+    /* Connect dock icon disable overlay related signals: */
+    connect(pDockIconDisableOverlay, SIGNAL(triggered(bool)),
+            this, SLOT(sltDockIconDisableOverlayChanged(bool)));
+    connect(gEDataManager, SIGNAL(sigDockIconOverlayAppearanceChange(bool)),
+            this, SLOT(sltChangeDockIconOverlayAppearance(bool)));
+    /* Add dock icon disable overlay action to the dock settings menu: */
+    pDockSettingsMenu->addAction(pDockIconDisableOverlay);
+
     /* Monitor selection if there are more than one monitor */
     int cGuestScreens = machine().GetMonitorCount();
     if (cGuestScreens > 1)
@@ -1568,6 +1591,7 @@ void UIMachineLogic::sltPowerOff()
         return;
     }
 
+    LogRel(("GUI: User request to power VM off.\n"));
     powerOff(machine().GetSnapshotCount() > 0);
 }
 
@@ -1598,6 +1622,7 @@ void UIMachineLogic::sltClose()
     }
 
     /* Try to close active machine-window: */
+    LogRel(("GUI: Request to close active machine-window.\n"));
     activeMachineWindow()->close();
 }
 
@@ -2129,18 +2154,51 @@ void UIMachineLogic::sltChangeDockIconUpdate(bool fEnabled)
         updateDockOverlay();
     }
 }
+
+void UIMachineLogic::sltChangeDockIconOverlayAppearance(bool fDisabled)
+{
+    /* Update dock icon overlay: */
+    if (isMachineWindowsCreated())
+        updateDockOverlay();
+    /* Make sure to update dock icon disable overlay action state when 'GUI_DockIconDisableOverlay' changed from extra-data manager: */
+    QAction *pDockIconDisableOverlay = actionPool()->action(UIActionIndexRT_M_Dock_M_DockSettings_T_DisableOverlay);
+    if (fDisabled != pDockIconDisableOverlay->isChecked())
+    {
+        /* Block signals initially to avoid recursive loop: */
+        pDockIconDisableOverlay->blockSignals(true);
+        /* Update state: */
+        pDockIconDisableOverlay->setChecked(fDisabled);
+        /* Make sure to unblock signals again: */
+        pDockIconDisableOverlay->blockSignals(false);
+    }
+}
+
+void UIMachineLogic::sltDockIconDisableOverlayChanged(bool fDisabled)
+{
+    /* Write dock icon disable overlay flag to extra-data: */
+    gEDataManager->setDockIconDisableOverlay(fDisabled, vboxGlobal().managedVMUuid());
+}
 #endif /* Q_WS_MAC */
 
 void UIMachineLogic::sltSwitchKeyboardLedsToGuestLeds()
 {
+    /* Due to async nature of that feature
+     * it can happen that this slot is called when machine-window is
+     * minimized or not active anymore, we should ignore those cases. */
+    QWidget *pActiveWindow = QApplication::activeWindow();
+    if (   !pActiveWindow                                 // no window is active anymore
+        || !qobject_cast<UIMachineWindow*>(pActiveWindow) // window is not machine one
+        || pActiveWindow->isMinimized())                  // window is minimized
+    {
+        LogRel2(("GUI: HID LEDs Sync: skipping sync because active window is lost or minimized!\n"));
+        return;
+    }
 //    /* Log statement (printf): */
 //    QString strDt = QDateTime::currentDateTime().toString("HH:mm:ss:zzz");
 //    printf("%s: UIMachineLogic: sltSwitchKeyboardLedsToGuestLeds called, machine name is {%s}\n",
 //           strDt.toAscii().constData(),
 //           machineName().toAscii().constData());
 
-    /* Here we have to store host LED lock states. */
-
     /* Here we have to update host LED lock states using values provided by UISession registry.
      * [bool] uisession() -> isNumLock(), isCapsLock(), isScrollLock() can be used for that. */
 
@@ -2565,6 +2623,7 @@ void UIMachineLogic::askUserForTheDiskEncryptionPasswords()
                 delete pDlg;
 
                 /* Propose the user to close VM: */
+                LogRel(("GUI: Request to close Runtime UI due to DEK was not provided.\n"));
                 QMetaObject::invokeMethod(this, "sltClose", Qt::QueuedConnection);
             }
         }
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h
index cd4ce46..ff64403 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h
@@ -310,6 +310,10 @@ private slots:
     void sltDockPreviewModeChanged(QAction *pAction);
     void sltDockPreviewMonitorChanged(QAction *pAction);
     void sltChangeDockIconUpdate(bool fEnabled);
+    /** Handles dock icon overlay change event. */
+    void sltChangeDockIconOverlayAppearance(bool fDisabled);
+    /** Handles dock icon overlay disable action triggering. */
+    void sltDockIconDisableOverlayChanged(bool fDisabled);
 #endif /* RT_OS_DARWIN */
 
     /* Handlers: Keyboard LEDs sync logic: */
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.cpp
index 74424f7..f0c34b7 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineWindow.cpp
@@ -414,18 +414,21 @@ void UIMachineWindow::closeEvent(QCloseEvent *pCloseEvent)
         case MachineCloseAction_Detach:
         {
             /* Just close Runtime UI: */
+            LogRel(("GUI: Request for close-action to detach GUI.\n"));
             machineLogic()->closeRuntimeUI();
             break;
         }
         case MachineCloseAction_SaveState:
         {
             /* Save VM state: */
+            LogRel(("GUI: Request for close-action to save VM state.\n"));
             machineLogic()->saveState();
             break;
         }
         case MachineCloseAction_Shutdown:
         {
             /* Shutdown VM: */
+            LogRel(("GUI: Request for close-action to shutdown VM.\n"));
             machineLogic()->shutdown();
             break;
         }
@@ -433,6 +436,7 @@ void UIMachineWindow::closeEvent(QCloseEvent *pCloseEvent)
         case MachineCloseAction_PowerOff_RestoringSnapshot:
         {
             /* Power VM off: */
+            LogRel(("GUI: Request for close-action to power VM off.\n"));
             machineLogic()->powerOff(closeAction == MachineCloseAction_PowerOff_RestoringSnapshot);
             break;
         }
diff --git a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
index c16d77a..fe0d0fc 100644
--- a/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
@@ -208,9 +208,19 @@ bool UISession::initialize()
         if (!powerUp())
             return false;
 
+    /* Make sure all the pending Console events converted to signals
+     * during the powerUp() progress above reached their destinations.
+     * That is necessary to make sure all the pending machine state change events processed.
+     * We can't just use the machine state directly acquired from IMachine because there
+     * will be few places which are using stale machine state, not just this one. */
+    QApplication::sendPostedEvents(0, QEvent::MetaCall);
+
     /* Check if we missed a really quick termination after successful startup: */
     if (isTurnedOff())
+    {
+        LogRel(("GUI: Aborting startup due to invalid machine state detected: %d\n", machineState()));
         return false;
+    }
 
     /* Postprocess initialization: */
     if (!postprocessInitialization())
@@ -264,6 +274,7 @@ bool UISession::powerUp()
     {
         if (vboxGlobal().showStartVMErrors())
             msgCenter().cannotStartMachine(console(), machineName());
+        LogRel(("GUI: Aborting startup due to power up issue detected...\n"));
         return false;
     }
 
@@ -292,6 +303,7 @@ bool UISession::powerUp()
     {
         if (vboxGlobal().showStartVMErrors())
             msgCenter().cannotStartMachine(progress, machineName());
+        LogRel(("GUI: Aborting startup due to power up progress issue detected...\n"));
         return false;
     }
 
@@ -345,6 +357,7 @@ bool UISession::shutdown()
 bool UISession::powerOff(bool fIncludingDiscard, bool &fServerCrashed)
 {
     /* Prepare the power-off progress: */
+    LogRel(("GUI: Powering VM down on UI session power off request...\n"));
     CProgress progress = console().PowerDown();
     if (console().isOk())
     {
@@ -1804,7 +1817,10 @@ bool UISession::preprocessInitialization()
         if (msgCenter().cannotStartWithoutNetworkIf(machineName(), failedInterfaceNames.join(", ")))
             machineLogic()->openNetworkSettingsDialog();
         else
+        {
+            LogRel(("GUI: Aborting startup due to preprocess initialization issue detected...\n"));
             return false;
+        }
     }
 #endif /* VBOX_WITH_NETFLT */
 
@@ -1893,6 +1909,7 @@ bool UISession::postprocessInitialization()
                 machineLogic()->setManualOverrideMode(true);
             /* Power off VM: */
             bool fServerCrashed = false;
+            LogRel(("GUI: Aborting startup due to postprocess initialization issue detected...\n"));
             powerOff(false, fServerCrashed);
             return false;
         }
diff --git a/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp b/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
index 3f51d2b..532ea60 100644
--- a/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/selector/UISelectorWindow.cpp
@@ -1135,6 +1135,10 @@ void UISelectorWindow::prepare()
     ::darwinSetFrontMostProcess();
 #endif /* Q_WS_MAC */
 
+    /* Cache medium data early if necessary: */
+    if (vboxGlobal().agressiveCaching())
+        vboxGlobal().startMediumEnumeration();
+
     /* Prepare: */
     prepareIcon();
     prepareMenuBar();
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp
index eaa31a0..8585576 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.cpp
@@ -727,6 +727,12 @@ void UIMachineSettingsSystem::prepareTabAcceleration()
     m_pComboParavirtProvider->addItem(gpConverter->toString(KParavirtProvider_Minimal), QVariant(KParavirtProvider_Minimal));
     m_pComboParavirtProvider->addItem(gpConverter->toString(KParavirtProvider_HyperV), QVariant(KParavirtProvider_HyperV));
     m_pComboParavirtProvider->addItem(gpConverter->toString(KParavirtProvider_KVM), QVariant(KParavirtProvider_KVM));
+
+    /* Hide VT-x/AMD-V checkbox when raw-mode is not supported: */
+#ifndef VBOX_WITH_RAW_MODE
+    m_pWidgetPlaceholder->setVisible(false);
+    m_pCheckBoxVirtualization->setVisible(false);
+#endif /* !VBOX_WITH_RAW_MODE */
 }
 
 void UIMachineSettingsSystem::prepareValidation()
diff --git a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.ui b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.ui
index 5b1150a..7ca0fbc 100644
--- a/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.ui
+++ b/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsSystem.ui
@@ -574,48 +574,59 @@
         </layout>
        </item>
        <item row="1" column="0">
-        <widget class="QLabel" name="m_pLabelVirtualization">
-         <property name="text">
-          <string>Hardware Virtualization:</string>
-         </property>
-         <property name="alignment">
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-        </widget>
+        <layout class="QVBoxLayout" name="m_pVerticalLayout1">
+         <item>
+          <widget class="QLabel" name="m_pLabelVirtualization">
+           <property name="text">
+            <string>Hardware Virtualization:</string>
+           </property>
+           <property name="alignment">
+            <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QWidget" name="m_pWidgetPlaceholder"/>
+         </item>
+        </layout>
        </item>
        <item row="1" column="1">
-        <widget class="QCheckBox" name="m_pCheckBoxVirtualization">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-           <horstretch>1</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="whatsThis">
-          <string>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.</string>
-         </property>
-         <property name="text">
-          <string>Enable &VT-x/AMD-V</string>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="1">
-        <widget class="QCheckBox" name="m_pCheckBoxNestedPaging">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="whatsThis">
-          <string>When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V.</string>
-         </property>
-         <property name="text">
-          <string>Enable Nested Pa&ging</string>
-         </property>
-        </widget>
+        <layout class="QVBoxLayout" name="m_pVerticalLayout2">
+         <item>
+          <widget class="QCheckBox" name="m_pCheckBoxVirtualization">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+             <horstretch>1</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="whatsThis">
+            <string>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.</string>
+           </property>
+           <property name="text">
+            <string>Enable &VT-x/AMD-V</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="m_pCheckBoxNestedPaging">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="whatsThis">
+            <string>When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V.</string>
+           </property>
+           <property name="text">
+            <string>Enable Nested Pa&ging</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
        </item>
-       <item row="3" column="0" colspan="2">
+       <item row="2" column="0" colspan="2">
         <spacer name="m_pSpacerVertical4">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
diff --git a/src/VBox/HostDrivers/Support/SUPLibInternal.h b/src/VBox/HostDrivers/Support/SUPLibInternal.h
index 381f9c9..3848d0f 100644
--- a/src/VBox/HostDrivers/Support/SUPLibInternal.h
+++ b/src/VBox/HostDrivers/Support/SUPLibInternal.h
@@ -451,7 +451,7 @@ DECLHIDDEN(int)     supR3HardenedRecvPreInitData(PCSUPPREINITDATA pPreInitData);
 #ifdef RT_OS_WINDOWS
 DECLHIDDEN(void)    supR3HardenedWinInit(uint32_t fFlags, bool fAvastKludge);
 DECLHIDDEN(void)    supR3HardenedWinInitAppBin(uint32_t fFlags);
-DECLHIDDEN(void)    supR3HardenedWinInitVersion(void);
+DECLHIDDEN(void)    supR3HardenedWinInitVersion(bool fEarlyInit);
 DECLHIDDEN(void)    supR3HardenedWinInitImports(void);
 DECLHIDDEN(void)    supR3HardenedWinModifyDllSearchPath(uint32_t fFlags, const char *pszAppBinPath);
 # ifdef ___iprt_nt_nt_h___
diff --git a/src/VBox/HostDrivers/Support/linux/Makefile b/src/VBox/HostDrivers/Support/linux/Makefile
index d169fd4..0ce6a6a 100644
--- a/src/VBox/HostDrivers/Support/linux/Makefile
+++ b/src/VBox/HostDrivers/Support/linux/Makefile
@@ -299,13 +299,13 @@ $(MODULE):
 
 install: $(MODULE)
 	@mkdir -p $(MODULE_DIR); \
-	install -m 0664 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
+	install -m 0644 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
 	PATH="$(PATH):/bin:/sbin" depmod -a; \
 	rm -f /etc/vbox/module_not_compiled
 
 install_rpm: $(MODULE)
 	@mkdir -p $(MODULE_DIR); \
-	install -m 0664 $(MODULE).$(MODULE_EXT) $(MODULE_DIR)
+	install -m 0644 $(MODULE).$(MODULE_EXT) $(MODULE_DIR)
 
 else # eq ($(MAKECMDGOALS),clean)
 
diff --git a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
index ef1069d..487c7d3 100644
--- a/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
@@ -2771,24 +2771,28 @@ DECLHIDDEN(bool) supHardenedWinIsWinVerifyTrustCallable(void)
  * Initializes g_uNtVerCombined and g_NtVerInfo.
  * Called from suplibHardenedWindowsMain and suplibOsInit.
  */
-DECLHIDDEN(void) supR3HardenedWinInitVersion(void)
+DECLHIDDEN(void) supR3HardenedWinInitVersion(bool fEarly)
 {
     /*
      * Get the windows version.  Use RtlGetVersion as GetVersionExW and
      * GetVersion might not be telling the whole truth (8.0 on 8.1 depending on
      * the application manifest).
+     *
+     * Note! Windows 10 build 14267+ touches BSS when calling RtlGetVersion, so we
+     *       have to use the fallback for the call from the early init code.
      */
     OSVERSIONINFOEXW NtVerInfo;
 
     RT_ZERO(NtVerInfo);
     NtVerInfo.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
-    if (!NT_SUCCESS(RtlGetVersion((PRTL_OSVERSIONINFOW)&NtVerInfo)))
+    if (   fEarly
+        || !NT_SUCCESS(RtlGetVersion((PRTL_OSVERSIONINFOW)&NtVerInfo)))
     {
         RT_ZERO(NtVerInfo);
         PPEB pPeb = NtCurrentPeb();
         NtVerInfo.dwMajorVersion = pPeb->OSMajorVersion;
         NtVerInfo.dwMinorVersion = pPeb->OSMinorVersion;
-        NtVerInfo.dwBuildNumber  = pPeb->OSPlatformId;
+        NtVerInfo.dwBuildNumber  = pPeb->OSBuildNumber;
     }
 
     g_uNtVerCombined = SUP_MAKE_NT_VER_COMBINED(NtVerInfo.dwMajorVersion, NtVerInfo.dwMinorVersion, NtVerInfo.dwBuildNumber,
diff --git a/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp b/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp
index 4ffd922..1a1b991 100644
--- a/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPLib-win.cpp
@@ -92,7 +92,7 @@ int suplibOsHardenedVerifyInit(void)
     if (!g_fHardenedVerifyInited)
     {
 #if defined(VBOX_WITH_HARDENING) && !defined(IN_SUP_HARDENED_R3) && !defined(IN_SUP_R3_STATIC)
-        supR3HardenedWinInitVersion();
+        supR3HardenedWinInitVersion(false /*fEarly*/);
         int rc = supHardenedWinInitImageVerifier(NULL);
         if (RT_FAILURE(rc))
             return rc;
diff --git a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
index 9ebd45e..0470bed 100644
--- a/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
+++ b/src/VBox/HostDrivers/Support/win/SUPR3HardenedMain-win.cpp
@@ -4214,7 +4214,7 @@ DECLHIDDEN(char *) supR3HardenedWinReadErrorInfoDevice(char *pszErrorInfo, size_
             if (NT_SUCCESS(rcNt) && NT_SUCCESS(Ios.Status) && Ios.Information > 0)
             {
                 memcpy(pszErrorInfo, pszPrefix, cchPrefix);
-                pszErrorInfo[RT_MIN(cbErrorInfo - 1, Ios.Information)] = '\0';
+                pszErrorInfo[RT_MIN(cbErrorInfo - 1, cchPrefix + Ios.Information)] = '\0';
                 SUP_DPRINTF(("supR3HardenedWinReadErrorInfoDevice: '%s'", &pszErrorInfo[cchPrefix]));
             }
             else
@@ -5479,7 +5479,7 @@ extern "C" void __stdcall suplibHardenedWindowsMain(void)
      * Init g_uNtVerCombined. (The code is shared with SUPR3.lib and lives in
      * SUPHardenedVerfiyImage-win.cpp.)
      */
-    supR3HardenedWinInitVersion();
+    supR3HardenedWinInitVersion(false /*fEarly*/);
     g_enmSupR3HardenedMainState = SUPR3HARDENEDMAINSTATE_WIN_VERSION_INITIALIZED;
 
     /*
@@ -5703,7 +5703,7 @@ DECLASM(uintptr_t) supR3HardenedEarlyProcessInit(void)
     /*
      * Init g_uNtVerCombined as well as we can at this point.
      */
-    supR3HardenedWinInitVersion();
+    supR3HardenedWinInitVersion(true /*fEarly*/);
 
     /*
      * Convert the arguments to UTF-8 so we can open the log file if specified.
@@ -5718,7 +5718,7 @@ DECLASM(uintptr_t) supR3HardenedEarlyProcessInit(void)
     int    cArgs;
     char **papszArgs = suplibCommandLineToArgvWStub(CmdLineStr.Buffer, CmdLineStr.Length / sizeof(WCHAR), &cArgs);
     supR3HardenedOpenLog(&cArgs, papszArgs);
-    SUP_DPRINTF(("supR3HardenedVmProcessInit: uNtDllAddr=%p\n", uNtDllAddr));
+    SUP_DPRINTF(("supR3HardenedVmProcessInit: uNtDllAddr=%p g_uNtVerCombined=%#x\n", uNtDllAddr, g_uNtVerCombined));
 
     /*
      * Set up the direct system calls so we can more easily hook NtCreateSection.
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/linux/Makefile b/src/VBox/HostDrivers/VBoxNetAdp/linux/Makefile
index c440cfe..aa5626e 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/linux/Makefile
+++ b/src/VBox/HostDrivers/VBoxNetAdp/linux/Makefile
@@ -202,13 +202,13 @@ $(MODULE):
 
 install: $(MODULE)
 	@mkdir -p $(MODULE_DIR); \
-	install -m 0664 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
+	install -m 0644 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
 	PATH="$(PATH):/bin:/sbin" depmod -a; \
 	rm -f /etc/vbox/module_not_compiled
 
 install_rpm: $(MODULE)
 	@mkdir -p $(MODULE_DIR); \
-	install -m 0664 $(MODULE).$(MODULE_EXT) $(MODULE_DIR)
+	install -m 0644 $(MODULE).$(MODULE_EXT) $(MODULE_DIR)
 
 else # eq ($(MAKECMDGOALS),clean)
 
diff --git a/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.cpp b/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.cpp
index 9bfa0e4..b430f52 100644
--- a/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.cpp
+++ b/src/VBox/HostDrivers/VBoxNetAdp/win/VBoxNetAdp-win.cpp
@@ -167,7 +167,7 @@ NDIS_OID g_SupportedOids[] =
     OID_PNP_SET_POWER
 };
 
-DECLHIDDEN(NDIS_STATUS) vboxNetAdpWinAllocAdapter(NDIS_HANDLE hAdapter, PVBOXNETADP_ADAPTER *ppAdapter, ULONG64 NetLuid)
+DECLHIDDEN(NDIS_STATUS) vboxNetAdpWinAllocAdapter(NDIS_HANDLE hAdapter, PVBOXNETADP_ADAPTER *ppAdapter, ULONG uIfIndex)
 {
     NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
     PVBOXNETADP_ADAPTER pAdapter = NULL;
@@ -196,9 +196,9 @@ DECLHIDDEN(NDIS_STATUS) vboxNetAdpWinAllocAdapter(NDIS_HANDLE hAdapter, PVBOXNET
     pAdapter->MacAddr.au8[1] = 0x00;
     pAdapter->MacAddr.au8[2] = 0x27;
 
-    pAdapter->MacAddr.au8[3] = (NetLuid >> 16) & 0xFF;
-    pAdapter->MacAddr.au8[4] = (NetLuid >> 8) & 0xFF;
-    pAdapter->MacAddr.au8[5] = NetLuid & 0xFF;
+    pAdapter->MacAddr.au8[3] = (uIfIndex >> 16) & 0xFF;
+    pAdapter->MacAddr.au8[4] = (uIfIndex >> 8) & 0xFF;
+    pAdapter->MacAddr.au8[5] = uIfIndex & 0xFF;
 
         //TODO: Statistics?
 
@@ -233,7 +233,7 @@ DECLHIDDEN(NDIS_STATUS) vboxNetAdpWinInitializeEx(IN NDIS_HANDLE NdisMiniportHan
         NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES RAttrs = {0};
         NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES GAttrs = {0};
 
-        Status = vboxNetAdpWinAllocAdapter(NdisMiniportHandle, &pAdapter, MiniportInitParameters->NetLuid.Value);
+        Status = vboxNetAdpWinAllocAdapter(NdisMiniportHandle, &pAdapter, MiniportInitParameters->IfIndex);
         if (Status != NDIS_STATUS_SUCCESS)
         {
             Log(("vboxNetAdpWinInitializeEx: Failed to allocate the adapter context with 0x%x\n", Status));
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/linux/Makefile b/src/VBox/HostDrivers/VBoxNetFlt/linux/Makefile
index c504e87..dcc604b 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/linux/Makefile
+++ b/src/VBox/HostDrivers/VBoxNetFlt/linux/Makefile
@@ -206,13 +206,13 @@ $(MODULE):
 
 install: $(MODULE)
 	@mkdir -p $(MODULE_DIR); \
-	install -m 0664 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
+	install -m 0644 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
 	PATH="$(PATH):/bin:/sbin" depmod -a; \
 	rm -f /etc/vbox/module_not_compiled
 
 install_rpm: $(MODULE)
 	@mkdir -p $(MODULE_DIR); \
-	install -m 0664 $(MODULE).$(MODULE_EXT) $(MODULE_DIR)
+	install -m 0644 $(MODULE).$(MODULE_EXT) $(MODULE_DIR)
 
 else # eq ($(MAKECMDGOALS),clean)
 
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
index 0654cf0..da82f98 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
@@ -16,6 +16,8 @@
 #define LOG_GROUP LOG_GROUP_NET_FLT_DRV
 
 //#define VBOXNETLWF_SYNC_SEND
+/* Payload + Ethernet header + VLAN tag = Max Ethernet frame size */
+#define VBOXNETLWF_MAX_FRAME_SIZE(mtu) (mtu +  sizeof(RTNETETHERHDR) + 4)
 
 #include <VBox/version.h>
 #include <VBox/err.h>
@@ -190,6 +192,8 @@ typedef struct _VBOXNETLWF_MODULE {
 #endif /* !VBOXNETLWF_SYNC_SEND */
     /** MAC address of underlying adapter */
     RTMAC MacAddr;
+    /** Saved MTU size */
+    ULONG uMtuSize;
     /** Saved offload configuration */
     NDIS_OFFLOAD SavedOffloadConfig;
     /** the cloned request we have passed down */
@@ -220,6 +224,69 @@ static VOID vboxNetLwfWinUnloadDriver(IN PDRIVER_OBJECT pDriver);
 static int vboxNetLwfWinInitBase();
 static int vboxNetLwfWinFini();
 
+/**
+ * Logs an error to the system event log.
+ *
+ * @param   ErrCode        Error to report to event log.
+ * @param   ReturnedStatus Error that was reported by the driver to the caller.
+ * @param   uErrId         Unique error id representing the location in the driver.
+ * @param   cbDumpData     Number of bytes at pDumpData.
+ * @param   pDumpData      Pointer to data that will be added to the message (see 'details' tab).
+ */
+static void vboxNetLwfLogErrorEvent(NTSTATUS uErrCode, NTSTATUS uReturnedStatus, ULONG uErrId)
+{
+    /* Figure out how many modules are attached and if they are going to fit into the dump data. */
+    unsigned cMaxModules = (ERROR_LOG_MAXIMUM_SIZE - FIELD_OFFSET(IO_ERROR_LOG_PACKET, DumpData)) / sizeof(RTMAC);
+    unsigned cModules = 0;
+    PVBOXNETLWF_MODULE pModuleCtx = NULL;
+    NdisAcquireSpinLock(&g_VBoxNetLwfGlobals.Lock);
+    RTListForEach(&g_VBoxNetLwfGlobals.listModules, pModuleCtx, VBOXNETLWF_MODULE, node)
+        ++cModules;
+    NdisReleaseSpinLock(&g_VBoxNetLwfGlobals.Lock);
+    /* Prevent overflow */
+    if (cModules > cMaxModules)
+        cModules = cMaxModules;
+
+    /* DumpDataSize must be a multiple of sizeof(ULONG). */
+    unsigned cbDumpData = (cModules * sizeof(RTMAC) + 3) & ~3;
+    /* Prevent underflow */
+    unsigned cbTotal = RT_MAX(FIELD_OFFSET(IO_ERROR_LOG_PACKET, DumpData) + cbDumpData,
+                              sizeof(IO_ERROR_LOG_PACKET));
+
+    PIO_ERROR_LOG_PACKET pErrEntry;
+    pErrEntry = (PIO_ERROR_LOG_PACKET)IoAllocateErrorLogEntry(g_VBoxNetLwfGlobals.pDevObj,
+                                                              (UCHAR)cbTotal);
+    if (pErrEntry)
+    {
+        PRTMAC pDump = (PRTMAC)pErrEntry->DumpData;
+        /*
+         * Initialize the whole structure with zeros in case we are suddenly short
+         * of data because the list is empty or has become smaller.
+         */
+        memset(pErrEntry, 0, cbTotal);
+
+        NdisAcquireSpinLock(&g_VBoxNetLwfGlobals.Lock);
+        RTListForEach(&g_VBoxNetLwfGlobals.listModules, pModuleCtx, VBOXNETLWF_MODULE, node)
+        {
+            /* The list could have been modified while we were allocating the entry, rely on cModules instead! */
+            if (cModules-- == 0)
+                break;
+            *pDump++ = pModuleCtx->MacAddr;
+        }
+        NdisReleaseSpinLock(&g_VBoxNetLwfGlobals.Lock);
+
+        pErrEntry->DumpDataSize     = cbDumpData;
+        pErrEntry->ErrorCode        = uErrCode;
+        pErrEntry->UniqueErrorValue = uErrId;
+        pErrEntry->FinalStatus      = uReturnedStatus;
+        IoWriteErrorLogEntry(pErrEntry);
+    }
+    else
+    {
+        DbgPrint("Failed to allocate error log entry (cb=%u)\n", cbTotal);
+    }
+}
+
 #ifdef DEBUG
 static const char *vboxNetLwfWinStatusToText(NDIS_STATUS code)
 {
@@ -772,7 +839,11 @@ static NDIS_STATUS vboxNetLwfWinAttach(IN NDIS_HANDLE hFilter, IN NDIS_HANDLE hD
     LogFlow(("==>vboxNetLwfWinAttach: filter=%p\n", hFilter));
 
     PVBOXNETLWFGLOBALS pGlobals = (PVBOXNETLWFGLOBALS)hDriverCtx;
-    AssertReturn(pGlobals, NDIS_STATUS_FAILURE);
+    if (!pGlobals)
+    {
+        vboxNetLwfLogErrorEvent(IO_ERR_INTERNAL_ERROR, NDIS_STATUS_FAILURE, 1);
+        return NDIS_STATUS_FAILURE;
+    }
 
     ANSI_STRING strMiniportName;
     /* We use the miniport name to associate this filter module with the netflt instance */
@@ -783,6 +854,7 @@ static NDIS_STATUS vboxNetLwfWinAttach(IN NDIS_HANDLE hFilter, IN NDIS_HANDLE hD
     {
         Log(("ERROR! vboxNetLwfWinAttach: RtlUnicodeStringToAnsiString(%ls) failed with 0x%x\n",
              pParameters->BaseMiniportName, rc));
+        vboxNetLwfLogErrorEvent(IO_ERR_INTERNAL_ERROR, NDIS_STATUS_FAILURE, 2);
         return NDIS_STATUS_FAILURE;
     }
     DbgPrint("vboxNetLwfWinAttach: friendly name=%wZ\n", pParameters->BaseMiniportInstanceName);
@@ -796,6 +868,7 @@ static NDIS_STATUS vboxNetLwfWinAttach(IN NDIS_HANDLE hFilter, IN NDIS_HANDLE hD
     if (!pModuleCtx)
     {
         RtlFreeAnsiString(&strMiniportName);
+        vboxNetLwfLogErrorEvent(IO_ERR_INSUFFICIENT_RESOURCES, NDIS_STATUS_RESOURCES, 3);
         return NDIS_STATUS_RESOURCES;
     }
     Log4(("vboxNetLwfWinAttach: allocated module context 0x%p\n", pModuleCtx));
@@ -810,6 +883,7 @@ static NDIS_STATUS vboxNetLwfWinAttach(IN NDIS_HANDLE hFilter, IN NDIS_HANDLE hD
         Log(("ERROR! vboxNetLwfWinAttach: Failed to allocate work item for %ls\n",
              pParameters->BaseMiniportName));
         NdisFreeMemory(pModuleCtx, 0, 0);
+        vboxNetLwfLogErrorEvent(IO_ERR_INSUFFICIENT_RESOURCES, NDIS_STATUS_RESOURCES, 4);
         return NDIS_STATUS_RESOURCES;
     }
 
@@ -830,29 +904,6 @@ static NDIS_STATUS vboxNetLwfWinAttach(IN NDIS_HANDLE hFilter, IN NDIS_HANDLE hD
     NdisInitializeEvent(&pModuleCtx->EventSendComplete);
     pModuleCtx->cPendingBuffers = 0;
 #endif /* !VBOXNETLWF_SYNC_SEND */
-    /* Allocate buffer pools */
-    NET_BUFFER_LIST_POOL_PARAMETERS PoolParams;
-    NdisZeroMemory(&PoolParams, sizeof(PoolParams));
-    PoolParams.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
-    PoolParams.Header.Revision = NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1;
-    PoolParams.Header.Size = sizeof(PoolParams);
-    PoolParams.ProtocolId = NDIS_PROTOCOL_ID_DEFAULT;
-    PoolParams.fAllocateNetBuffer = TRUE;
-    PoolParams.ContextSize = 0; /** @todo Do we need to consider underlying drivers? I think not. */
-    PoolParams.PoolTag = VBOXNETLWF_MEM_TAG;
-#ifndef VBOXNETLWF_SYNC_SEND
-    PoolParams.DataSize = 2048; /** @todo figure out the optimal size, use several pools if necessary, make configurable, etc */
-#endif /* !VBOXNETLWF_SYNC_SEND */
-
-    pModuleCtx->hPool = NdisAllocateNetBufferListPool(hFilter, &PoolParams);
-    if (!pModuleCtx->hPool)
-    {
-        Log(("ERROR! vboxNetLwfWinAttach: NdisAllocateNetBufferListPool failed\n"));
-        NdisFreeIoWorkItem(pModuleCtx->hWorkItem);
-        NdisFreeMemory(pModuleCtx, 0, 0);
-        return NDIS_STATUS_RESOURCES;
-    }
-    Log4(("vboxNetLwfWinAttach: allocated NBL+NB pool 0x%p\n", pModuleCtx->hPool));
 
     NDIS_FILTER_ATTRIBUTES Attributes;
     NdisZeroMemory(&Attributes, sizeof(Attributes));
@@ -868,6 +919,7 @@ static NDIS_STATUS vboxNetLwfWinAttach(IN NDIS_HANDLE hFilter, IN NDIS_HANDLE hD
         Log4(("vboxNetLwfWinAttach: freed NBL+NB pool 0x%p\n", pModuleCtx->hPool));
         NdisFreeIoWorkItem(pModuleCtx->hWorkItem);
         NdisFreeMemory(pModuleCtx, 0, 0);
+        vboxNetLwfLogErrorEvent(IO_ERR_INTERNAL_ERROR, NDIS_STATUS_RESOURCES, 5);
         return NDIS_STATUS_RESOURCES;
     }
     /* Insert into module chain */
@@ -966,8 +1018,61 @@ static NDIS_STATUS vboxNetLwfWinRestart(IN NDIS_HANDLE hModuleCtx, IN PNDIS_FILT
     PVBOXNETLWF_MODULE pModuleCtx = (PVBOXNETLWF_MODULE)hModuleCtx;
     vboxNetLwfWinChangeState(pModuleCtx, LwfState_Restarting, LwfState_Paused);
 
-    vboxNetLwfWinChangeState(pModuleCtx, LwfState_Running, LwfState_Restarting);
     NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+    ULONG uNewMtuSize = 1500; /* If we fail to find out MTU, we can always assume 1500. */
+    PNDIS_RESTART_ATTRIBUTES pAttributes = pParameters->RestartAttributes;
+    while (pAttributes && pAttributes->Oid != OID_GEN_MINIPORT_RESTART_ATTRIBUTES)
+        pAttributes = pAttributes->Next;
+    if (pAttributes)
+    {
+        PNDIS_RESTART_GENERAL_ATTRIBUTES pGenAttrs = (PNDIS_RESTART_GENERAL_ATTRIBUTES)pAttributes->Data;
+        uNewMtuSize = pGenAttrs->MtuSize;
+    }
+
+    /* Let's see if MTU has changed. Re-allocate the pool if it has. */
+    if (pModuleCtx->uMtuSize != uNewMtuSize)
+    {
+        pModuleCtx->uMtuSize = uNewMtuSize;
+        if (pModuleCtx->hPool)
+        {
+            /*
+             * Don't need to wait for pending sends to complete since we are already
+             * in paused state. Just free the old pool.
+             */
+            NdisFreeNetBufferListPool(pModuleCtx->hPool);
+            pModuleCtx->hPool = NULL;
+        }
+    }
+    if (!pModuleCtx->hPool)
+    {
+        /* Allocate a new pool. */
+        NET_BUFFER_LIST_POOL_PARAMETERS PoolParams;
+        NdisZeroMemory(&PoolParams, sizeof(PoolParams));
+        PoolParams.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
+        PoolParams.Header.Revision = NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1;
+        PoolParams.Header.Size = sizeof(PoolParams);
+        PoolParams.ProtocolId = NDIS_PROTOCOL_ID_DEFAULT;
+        PoolParams.fAllocateNetBuffer = TRUE;
+        PoolParams.ContextSize = 0; /** @todo Do we need to consider underlying drivers? I think not. */
+        PoolParams.PoolTag = VBOXNETLWF_MEM_TAG;
+#ifndef VBOXNETLWF_SYNC_SEND
+        PoolParams.DataSize = VBOXNETLWF_MAX_FRAME_SIZE(pModuleCtx->uMtuSize);
+#endif /* !VBOXNETLWF_SYNC_SEND */
+
+        pModuleCtx->hPool = NdisAllocateNetBufferListPool(pModuleCtx->hFilter, &PoolParams);
+        if (!pModuleCtx->hPool)
+        {
+            Log(("ERROR! vboxNetLwfWinRestart: NdisAllocateNetBufferListPool failed\n"));
+            Status = NDIS_STATUS_RESOURCES;
+        }
+        else
+        {
+            Log4(("vboxNetLwfWinRestart: allocated NBL+NB pool 0x%p with MTU=%u\n",
+                  pModuleCtx->hPool, pModuleCtx->uMtuSize));
+        }
+    }
+
+    vboxNetLwfWinChangeState(pModuleCtx, Status == NDIS_STATUS_SUCCESS ? LwfState_Running : LwfState_Paused, LwfState_Restarting);
     LogFlow(("<==vboxNetLwfWinRestart: Status = 0x%x\n", Status));
     return Status;
 }
@@ -1018,7 +1123,7 @@ DECLINLINE(void) vboxNetLwfWinDumpPacket(PCINTNETSG pSG, const char *cszText)
     AssertReturnVoid(pEnd - pHdr >= 14);
     uint16_t uEthType = RT_N2H_U16(*(uint16_t*)(pHdr+12));
     Log2(("NetLWF: %s (%d bytes), %RTmac => %RTmac, EthType=%s(0x%x)\n",
-          cszText, cb, pHdr+6, pHdr, vboxNetLwfWinEthTypeStr(uEthType), uEthType));
+          cszText, pSG->cbTotal, pHdr+6, pHdr, vboxNetLwfWinEthTypeStr(uEthType), uEthType));
     pHdr += sizeof(RTNETETHERHDR);
     if (uEthType == RTNET_ETHERTYPE_VLAN)
     {
@@ -1165,7 +1270,9 @@ DECLINLINE(void) vboxNetLwfWinFreeMdlChain(PMDL pMdl)
 static PNET_BUFFER_LIST vboxNetLwfWinSGtoNB(PVBOXNETLWF_MODULE pModule, PINTNETSG pSG)
 {
     AssertReturn(pSG->cSegsUsed >= 1, NULL);
-    LogFlow(("==>vboxNetLwfWinSGtoNB: segments=%d\n", pSG->cSegsUsed));
+    LogFlow(("==>vboxNetLwfWinSGtoNB: segments=%d hPool=%p cb=%u max=%u\n", pSG->cSegsUsed,
+             pModule->hPool, pSG->cbTotal, VBOXNETLWF_MAX_FRAME_SIZE(pModule->uMtuSize)));
+    AssertReturn(pModule->hPool, NULL);
 
 #ifdef VBOXNETLWF_SYNC_SEND
     PINTNETSEG pSeg = pSG->aSegs;
@@ -1210,7 +1317,7 @@ static PNET_BUFFER_LIST vboxNetLwfWinSGtoNB(PVBOXNETLWF_MODULE pModule, PINTNETS
         vboxNetLwfWinFreeMdlChain(pMdl);
     }
 #else /* !VBOXNETLWF_SYNC_SEND */
-    AssertReturn(pSG->cbTotal < 2048, NULL);
+    AssertReturn(pSG->cbTotal <= VBOXNETLWF_MAX_FRAME_SIZE(pModule->uMtuSize), NULL); 
     PNET_BUFFER_LIST pBufList = NdisAllocateNetBufferList(pModule->hPool,
                                                           0 /** @todo ContextSize */,
                                                           0 /** @todo ContextBackFill */);
@@ -2351,6 +2458,7 @@ int vboxNetFltOsInitInstance(PVBOXNETFLTINS pThis, void *pvContext)
         }
     }
     NdisReleaseSpinLock(&g_VBoxNetLwfGlobals.Lock);
+    vboxNetLwfLogErrorEvent(IO_ERR_INTERNAL_ERROR, STATUS_SUCCESS, 6);
     LogFlow(("<==vboxNetFltOsInitInstance: return VERR_INTNET_FLT_IF_NOT_FOUND\n"));
     return VERR_INTNET_FLT_IF_NOT_FOUND;
 }
diff --git a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf
index 5a967a5..937a8d4 100644
--- a/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf
+++ b/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf
@@ -47,7 +47,7 @@ NetCfgInstanceId = "{7af6b074-048d-4444-bfce-1ecc8bc5cb76}"
 DelService       = VBoxNetLwf,0x200 ; Stop the service before uninstalling
 
 [VBoxNetLwf.ndi.Services]
-AddService = VBoxNetLwf,, VBoxNetLwf.AddService
+AddService = VBoxNetLwf,, VBoxNetLwf.AddService, VBoxNetLwf.AddEventLog
 
 [VBoxNetLwf.AddService]
 DisplayName    = %VBoxNetLwfService_Desc%
@@ -60,6 +60,14 @@ AddReg         = VBoxNetLwf.AddService.AddReg
 
 [VBoxNetLwf.AddService.AddReg]
 
+[VBoxNetLwf.AddEventLog]
+AddReg         = VBoxNetLwf.AddEventLog.AddReg
+
+[VBoxNetLwf.AddEventLog.AddReg]
+HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll"
+HKR,,TypesSupported,0x00010001,7
+
+
 [SourceDisksNames]
 1=%DiskDescription%,"",,
 
diff --git a/src/VBox/HostDrivers/VBoxPci/linux/Makefile b/src/VBox/HostDrivers/VBoxPci/linux/Makefile
index 5ffd542..ce1938f 100644
--- a/src/VBox/HostDrivers/VBoxPci/linux/Makefile
+++ b/src/VBox/HostDrivers/VBoxPci/linux/Makefile
@@ -205,12 +205,12 @@ $(MODULE):
 
 install: $(MODULE)
 	@mkdir -p $(MODULE_DIR); \
-	install -m 0664 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
+	install -m 0644 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
 	PATH="$(PATH):/bin:/sbin" depmod -a;
 
 install_rpm: $(MODULE)
 	@mkdir -p $(MODULE_DIR); \
-	install -m 0664 $(MODULE).$(MODULE_EXT) $(MODULE_DIR)
+	install -m 0644 $(MODULE).$(MODULE_EXT) $(MODULE_DIR)
 
 else # eq ($(MAKECMDGOALS),clean)
 
diff --git a/src/VBox/HostServices/SharedFolders/mappings.cpp b/src/VBox/HostServices/SharedFolders/mappings.cpp
index 3f9c874..07a43af 100644
--- a/src/VBox/HostServices/SharedFolders/mappings.cpp
+++ b/src/VBox/HostServices/SharedFolders/mappings.cpp
@@ -78,7 +78,14 @@ int vbsfMappingLoaded(const PMAPPING pLoadedMapping, SHFLROOT root)
         }
     }
 
-    return VERR_INVALID_PARAMETER;
+    /* No corresponding mapping on the host but the guest still uses it.
+     * Add a 'placeholder' mapping.
+     */
+    LogRel2(("SharedFolders: mapping a placeholder for '%ls' -> '%s'\n",
+              pLoadedMapping->pMapName->String.ucs2, pLoadedMapping->pszFolderName));
+    return vbsfMappingsAdd(pLoadedMapping->pszFolderName, pLoadedMapping->pMapName,
+                           pLoadedMapping->fWritable, pLoadedMapping->fAutoMount,
+                           pLoadedMapping->fSymlinksCreate, /* fMissing = */ true, /* fPlaceholder = */ true);
 }
 
 MAPPING *vbsfMappingGetByRoot(SHFLROOT root)
@@ -190,12 +197,12 @@ void testMappingsAdd(RTTEST hTest)
 /*
  * We are always executed from one specific HGCM thread. So thread safe.
  */
-int vbsfMappingsAdd(PSHFLSTRING pFolderName, PSHFLSTRING pMapName,
-                    bool fWritable, bool fAutoMount, bool fSymlinksCreate, bool fMissing)
+int vbsfMappingsAdd(const char *pszFolderName, PSHFLSTRING pMapName,
+                    bool fWritable, bool fAutoMount, bool fSymlinksCreate, bool fMissing, bool fPlaceholder)
 {
     unsigned i;
 
-    Assert(pFolderName && pMapName);
+    Assert(pszFolderName && pMapName);
 
     Log(("vbsfMappingsAdd %ls\n", pMapName->String.ucs2));
 
@@ -216,8 +223,11 @@ int vbsfMappingsAdd(PSHFLSTRING pFolderName, PSHFLSTRING pMapName,
     {
         if (FolderMapping[i].fValid == false)
         {
-            int rc = RTUtf16ToUtf8(pFolderName->String.ucs2, &FolderMapping[i].pszFolderName);
-            AssertRCReturn(rc, rc);
+            FolderMapping[i].pszFolderName = RTStrDup(pszFolderName);
+            if (!FolderMapping[i].pszFolderName)
+            {
+                return VERR_NO_MEMORY;
+            }
 
             FolderMapping[i].pMapName = (PSHFLSTRING)RTMemAlloc(ShflStringSizeOfBuffer(pMapName));
             if (!FolderMapping[i].pMapName)
@@ -237,12 +247,13 @@ int vbsfMappingsAdd(PSHFLSTRING pFolderName, PSHFLSTRING pMapName,
             FolderMapping[i].fAutoMount      = fAutoMount;
             FolderMapping[i].fSymlinksCreate = fSymlinksCreate;
             FolderMapping[i].fMissing        = fMissing;
+            FolderMapping[i].fPlaceholder    = fPlaceholder;
 
             /* Check if the host file system is case sensitive */
             RTFSPROPERTIES prop;
             char *pszAsciiRoot;
 
-            rc = RTStrUtf8ToCurrentCP(&pszAsciiRoot, FolderMapping[i].pszFolderName);
+            int rc = RTStrUtf8ToCurrentCP(&pszAsciiRoot, FolderMapping[i].pszFolderName);
             if (RT_SUCCESS(rc))
             {
                 rc = RTFsQueryProperties(pszAsciiRoot, &prop);
@@ -257,11 +268,11 @@ int vbsfMappingsAdd(PSHFLSTRING pFolderName, PSHFLSTRING pMapName,
     }
     if (i == SHFL_MAX_MAPPINGS)
     {
-        AssertMsgFailed(("vbsfMappingsAdd: no more room to add mapping %ls to %ls!!\n", pFolderName->String.ucs2, pMapName->String.ucs2));
+        AssertLogRelMsgFailed(("vbsfMappingsAdd: no more room to add mapping %s to %ls!!\n", pszFolderName, pMapName->String.ucs2));
         return VERR_TOO_MUCH_DATA;
     }
 
-    Log(("vbsfMappingsAdd: added mapping %ls to %ls\n", pFolderName->String.ucs2, pMapName->String.ucs2));
+    Log(("vbsfMappingsAdd: added mapping %s to %ls\n", pszFolderName, pMapName->String.ucs2));
     return VINF_SUCCESS;
 }
 
@@ -290,28 +301,31 @@ int vbsfMappingsRemove(PSHFLSTRING pMapName)
             {
                 if (FolderMapping[i].cMappings != 0)
                 {
-                    Log(("vbsfMappingsRemove: trying to remove active share %ls\n", pMapName->String.ucs2));
-                    return VERR_PERMISSION_DENIED;
+                    LogRel2(("SharedFolders: removing '%ls' -> '%s', which is still used by the guest\n",
+                             pMapName->String.ucs2, FolderMapping[i].pszFolderName));
+                    FolderMapping[i].fMissing = true;
+                    FolderMapping[i].fPlaceholder = true;
+                    return VINF_PERMISSION_DENIED;
                 }
 
+                /* pMapName can be the same as FolderMapping[i].pMapName,
+                 * log it before deallocating the memory.
+                 */
+                Log(("vbsfMappingsRemove: mapping %ls removed\n", pMapName->String.ucs2));
+
                 RTStrFree(FolderMapping[i].pszFolderName);
                 RTMemFree(FolderMapping[i].pMapName);
                 FolderMapping[i].pszFolderName = NULL;
                 FolderMapping[i].pMapName      = NULL;
                 FolderMapping[i].fValid        = false;
                 vbsfRootHandleRemove(i);
-                break;
+                return VINF_SUCCESS;
             }
         }
     }
 
-    if (i == SHFL_MAX_MAPPINGS)
-    {
-        AssertMsgFailed(("vbsfMappingsRemove: mapping %ls not found!!!!\n", pMapName->String.ucs2));
-        return VERR_FILE_NOT_FOUND;
-    }
-    Log(("vbsfMappingsRemove: mapping %ls removed\n", pMapName->String.ucs2));
-    return VINF_SUCCESS;
+    AssertMsgFailed(("vbsfMappingsRemove: mapping %ls not found!!!!\n", pMapName->String.ucs2));
+    return VERR_FILE_NOT_FOUND;
 }
 
 const char* vbsfMappingsQueryHostRoot(SHFLROOT root)
@@ -333,7 +347,7 @@ int vbsfMappingsQueryHostRootEx(SHFLROOT hRoot, const char **ppszRoot, uint32_t
         || pFolderMapping->pszFolderName[0] == 0)
         return VERR_NOT_FOUND;
     *ppszRoot = pFolderMapping->pszFolderName;
-    *pcbRootLen = strlen(pFolderMapping->pszFolderName);
+    *pcbRootLen = (uint32_t)strlen(pFolderMapping->pszFolderName);
     return VINF_SUCCESS;
 }
 
@@ -467,6 +481,8 @@ int vbsfMappingsQueryName(PSHFLCLIENTDATA pClient, SHFLROOT root, SHFLSTRING *pS
     return rc;
 }
 
+/** Queries fWritable flag for the given root. Returns error if the root is not accessible.
+ */
 int vbsfMappingsQueryWritable(PSHFLCLIENTDATA pClient, SHFLROOT root, bool *fWritable)
 {
     int rc = VINF_SUCCESS;
@@ -632,6 +648,16 @@ int vbsfUnmapFolder(PSHFLCLIENTDATA pClient, SHFLROOT root)
     if (pFolderMapping->cMappings > 0)
         pFolderMapping->cMappings--;
 
+    if (   pFolderMapping->cMappings == 0
+        && pFolderMapping->fPlaceholder)
+    {
+        /* Automatically remove, it is not used by the guest anymore. */
+        Assert(pFolderMapping->fMissing);
+        LogRel2(("SharedFolders: unmapping placeholder '%ls' -> '%s'\n",
+                pFolderMapping->pMapName->String.ucs2, pFolderMapping->pszFolderName));
+        vbsfMappingsRemove(pFolderMapping->pMapName);
+    }
+
     Log(("vbsfUnmapFolder\n"));
     return rc;
 }
diff --git a/src/VBox/HostServices/SharedFolders/mappings.h b/src/VBox/HostServices/SharedFolders/mappings.h
index bd121d9..b749eb8 100644
--- a/src/VBox/HostServices/SharedFolders/mappings.h
+++ b/src/VBox/HostServices/SharedFolders/mappings.h
@@ -33,6 +33,8 @@ typedef struct
     bool        fSymlinksCreate;      /**< guest is able to create symlinks */
     bool        fMissing;             /**< mapping not invalid but host path does not exist.
                                            Any guest operation on such a folder fails! */
+    bool        fPlaceholder;         /**< mapping does not exist in the VM settings but the guest
+                                           still has. fMissing is always true for this mapping. */
 } MAPPING;
 /** Pointer to a MAPPING structure. */
 typedef MAPPING *PMAPPING;
@@ -41,8 +43,8 @@ void vbsfMappingInit(void);
 
 bool vbsfMappingQuery(uint32_t iMapping, PMAPPING *pMapping);
 
-int vbsfMappingsAdd(PSHFLSTRING pFolderName, PSHFLSTRING pMapName,
-                    bool fWritable, bool fAutoMount, bool fCreateSymlinks, bool fMissing);
+int vbsfMappingsAdd(const char *pszFolderName, PSHFLSTRING pMapName,
+                    bool fWritable, bool fAutoMount, bool fCreateSymlinks, bool fMissing, bool fPlaceholder);
 int vbsfMappingsRemove(PSHFLSTRING pMapName);
 
 int vbsfMappingsQuery(PSHFLCLIENTDATA pClient, PSHFLMAPPING pMappings, uint32_t *pcMappings);
diff --git a/src/VBox/HostServices/SharedFolders/service.cpp b/src/VBox/HostServices/SharedFolders/service.cpp
index 4fa292e..88f8e64 100644
--- a/src/VBox/HostServices/SharedFolders/service.cpp
+++ b/src/VBox/HostServices/SharedFolders/service.cpp
@@ -1339,16 +1339,24 @@ static DECLCALLBACK(int) svcHostCall (void *, uint32_t u32Function, uint32_t cPa
                         RT_BOOL(fFlags & SHFL_ADD_MAPPING_F_CREATE_SYMLINKS) ? "true" : "false",
                         RT_BOOL(fFlags & SHFL_ADD_MAPPING_F_MISSING) ? "true" : "false"));
 
-                /* Execute the function. */
-                rc = vbsfMappingsAdd(pFolderName, pMapName,
-                                     RT_BOOL(fFlags & SHFL_ADD_MAPPING_F_WRITABLE),
-                                     RT_BOOL(fFlags & SHFL_ADD_MAPPING_F_AUTOMOUNT),
-                                     RT_BOOL(fFlags & SHFL_ADD_MAPPING_F_CREATE_SYMLINKS),
-                                     RT_BOOL(fFlags & SHFL_ADD_MAPPING_F_MISSING));
+                char *pszFolderName;
+                rc = RTUtf16ToUtf8(pFolderName->String.ucs2, &pszFolderName);
+
                 if (RT_SUCCESS(rc))
                 {
-                    /* Update parameters.*/
-                    ; /* none */
+                    /* Execute the function. */
+                    rc = vbsfMappingsAdd(pszFolderName, pMapName,
+                                         RT_BOOL(fFlags & SHFL_ADD_MAPPING_F_WRITABLE),
+                                         RT_BOOL(fFlags & SHFL_ADD_MAPPING_F_AUTOMOUNT),
+                                         RT_BOOL(fFlags & SHFL_ADD_MAPPING_F_CREATE_SYMLINKS),
+                                         RT_BOOL(fFlags & SHFL_ADD_MAPPING_F_MISSING),
+                                         /* fPlaceholder = */ false);
+                    if (RT_SUCCESS(rc))
+                    {
+                        /* Update parameters.*/
+                        ; /* none */
+                    }
+                    RTStrFree(pszFolderName);
                 }
             }
         }
diff --git a/src/VBox/HostServices/SharedFolders/vbsf.cpp b/src/VBox/HostServices/SharedFolders/vbsf.cpp
index d036873..e46bb78 100644
--- a/src/VBox/HostServices/SharedFolders/vbsf.cpp
+++ b/src/VBox/HostServices/SharedFolders/vbsf.cpp
@@ -959,6 +959,13 @@ int vbsfRead  (SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, uint64
 
     Log(("vbsfRead %RX64 offset %RX64 bytes %x\n", Handle, offset, *pcbBuffer));
 
+    /* Is the guest allowed to access this share?
+     * Checked here because the shared folder can be removed from the VM settings. */
+    bool fWritable;
+    rc = vbsfMappingsQueryWritable(pClient, root, &fWritable);
+    if (RT_FAILURE(rc))
+        return VERR_ACCESS_DENIED;
+
     if (*pcbBuffer == 0)
         return VINF_SUCCESS; /* @todo correct? */
 
@@ -1003,7 +1010,7 @@ int vbsfWrite(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, uint64_
     Log(("vbsfWrite %RX64 offset %RX64 bytes %x\n", Handle, offset, *pcbBuffer));
 
     /* Is the guest allowed to write to this share?
-     * XXX Actually this check was still done in vbsfCreate() -- RTFILE_O_WRITE cannot be set if vbsfMappingsQueryWritable() failed. */
+     * Checked here because the shared folder can be removed from the VM settings. */
     bool fWritable;
     rc = vbsfMappingsQueryWritable(pClient, root, &fWritable);
     if (RT_FAILURE(rc) || !fWritable)
@@ -1086,6 +1093,14 @@ int vbsfDirList(SHFLCLIENTDATA *pClient, SHFLROOT root, SHFLHANDLE Handle, SHFLS
         AssertFailed();
         return VERR_INVALID_PARAMETER;
     }
+
+    /* Is the guest allowed to access this share?
+     * Checked here because the shared folder can be removed from the VM settings. */
+    bool fWritable;
+    rc = vbsfMappingsQueryWritable(pClient, root, &fWritable);
+    if (RT_FAILURE(rc))
+        return VERR_ACCESS_DENIED;
+
     Assert(pIndex && *pIndex == 0);
     DirHandle = pHandle->dir.Handle;
 
diff --git a/src/VBox/Installer/common/vboxapisetup.py b/src/VBox/Installer/common/vboxapisetup.py
index 967ab42..8dde1d9 100755
--- a/src/VBox/Installer/common/vboxapisetup.py
+++ b/src/VBox/Installer/common/vboxapisetup.py
@@ -45,9 +45,11 @@ def patchWith(file,install,sdk):
 
 # See http://docs.python.org/distutils/index.html
 def main(argv):
-    vboxDest = os.environ.get("VBOX_INSTALL_PATH", None)
+    vboxDest = os.environ.get("VBOX_MSI_INSTALL_PATH", None)
     if vboxDest is None:
-        raise Exception("No VBOX_INSTALL_PATH defined, exiting")
+        vboxDest = os.environ.get('VBOX_INSTALL_PATH', None)
+        if vboxDest is None:
+            raise Exception("No VBOX_INSTALL_PATH defined, exiting")
 
     vboxVersion = os.environ.get("VBOX_VERSION", None)
     if vboxVersion is None:
diff --git a/src/VBox/Installer/linux/Makefile.include.footer b/src/VBox/Installer/linux/Makefile.include.footer
index c2eb18a..c927196 100644
--- a/src/VBox/Installer/linux/Makefile.include.footer
+++ b/src/VBox/Installer/linux/Makefile.include.footer
@@ -78,11 +78,14 @@ obj-m += $(MODULE).o
 $(MODULE):
 	$(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) modules
 
+modules_install:
+	$(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) CONFIG_MODULE_SIG= -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) modules_install
+
 endif
 
 install: $(MODULE)
 	@mkdir -p $(MODULE_DIR); \
-	install -m 0664 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
+	install -m 0644 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
 	PATH="$(PATH):/bin:/sbin" depmod -a;
 
 endif # eq($(MAKECMDGOALS),clean)
diff --git a/src/VBox/Installer/linux/install.sh b/src/VBox/Installer/linux/install.sh
index 24fb6a7..0c55681 100755
--- a/src/VBox/Installer/linux/install.sh
+++ b/src/VBox/Installer/linux/install.sh
@@ -364,7 +364,7 @@ if [ "$ACTION" = "install" ]; then
 
     # If Python is available, install Python bindings
     if [ -n "$PYTHON" ]; then
-      maybe_run_python_bindings_installer $INSTALLATION_DIR
+      maybe_run_python_bindings_installer $INSTALLATION_DIR $CONFIG_DIR $CONFIG_FILES
     fi
 
     install_device_node_setup "$VBOXDRV_GRP" "$VBOXDRV_MODE" "$INSTALLATION_DIR"
diff --git a/src/VBox/Installer/linux/postinst-common.sh b/src/VBox/Installer/linux/postinst-common.sh
old mode 100644
new mode 100755
index 5abde9b..9d5482a
--- a/src/VBox/Installer/linux/postinst-common.sh
+++ b/src/VBox/Installer/linux/postinst-common.sh
@@ -1,3 +1,6 @@
+#!/bin/sh
+# $Id: postinst-common.sh $
+## @file
 # Oracle VM VirtualBox
 # VirtualBox Linux post-installer common portions
 #
@@ -56,7 +59,7 @@ addrunlevel vboxautostart-service
 delrunlevel vboxweb-service
 addrunlevel vboxweb-service
 
-ln -sf "${MY_PATH}/postinst-common.sh" /sbin/rcvboxdrv
+ln -sf "${MY_PATH}/postinst-common.sh" /sbin/vboxconfig
 
 test -n "${START}" &&
 {
diff --git a/src/VBox/Installer/linux/prerm-common.sh b/src/VBox/Installer/linux/prerm-common.sh
old mode 100644
new mode 100755
index 225d567..b75f092
--- a/src/VBox/Installer/linux/prerm-common.sh
+++ b/src/VBox/Installer/linux/prerm-common.sh
@@ -1,3 +1,6 @@
+#!/bin/sh
+# $Id: prerm-common.sh $
+## @file
 # Oracle VM VirtualBox
 # VirtualBox Linux pre-uninstaller common portions
 #
@@ -87,5 +90,5 @@ remove_init_script vboxdrv
 stop_init_script vboxnet 2>/dev/null
 delrunlevel vboxnet 2>/dev/null
 remove_init_script vboxnet 2>/dev/null
-rm -f /sbin/rcvboxdrv
+rm -f /sbin/vboxconfig
 exit 0
diff --git a/src/VBox/Installer/linux/routines.sh b/src/VBox/Installer/linux/routines.sh
index 7206eda..5b1c6cb 100644
--- a/src/VBox/Installer/linux/routines.sh
+++ b/src/VBox/Installer/linux/routines.sh
@@ -365,7 +365,10 @@ maybe_run_python_bindings_installer() {
     echo  1>&2 "Python found: $PYTHON, installing bindings..."
     # Pass install path via environment
     export VBOX_INSTALL_PATH
-    $SHELL -c "cd $VBOX_INSTALL_PATH/sdk/installer && $PYTHON vboxapisetup.py install"
+    $SHELL -c "cd $VBOX_INSTALL_PATH/sdk/installer && $PYTHON vboxapisetup.py install \
+        --record $CONFIG_DIR/python-$CONFIG_FILES"
+    cat $CONFIG_DIR/python-$CONFIG_FILES >> $CONFIG_DIR/$CONFIG_FILES
+    rm $CONFIG_DIR/python-$CONFIG_FILES
     # remove files created during build
     rm -rf $VBOX_INSTALL_PATH/sdk/installer/build
 
diff --git a/src/VBox/Installer/linux/rpm/rules b/src/VBox/Installer/linux/rpm/rules
index f34b847..2e49eb8 100755
--- a/src/VBox/Installer/linux/rpm/rules
+++ b/src/VBox/Installer/linux/rpm/rules
@@ -175,6 +175,7 @@ bld_flags := AUTOCFG=$(current)/rpm/AutoConfig.kmk \
 	     VBOX_WITHOUT_EXTPACK_VNC_PACKING=1 \
 	     $(if $(filter el5 ol5 centos5 el6 ol6 centos6 sles10.1 sles11.0,$(rpmrel)),,VBOX_WITH_VMSVGA3D=1) \
 	     VBOX_DO_STRIP= \
+	     $(if $(filter el5,$(rpmrel)),VBOX_BLD_PYTHON=/usr/bin/python,) \
 	     VBOX_WITH_MULTIVERSION_PYTHON= \
 	     $(doc_dir) \
 	     $(if $(ose),,VBOX_WITH_DOCS_CHM=1) \
diff --git a/src/VBox/Installer/win/Makefile.kmk b/src/VBox/Installer/win/Makefile.kmk
index 26d329b..27ab04f 100644
--- a/src/VBox/Installer/win/Makefile.kmk
+++ b/src/VBox/Installer/win/Makefile.kmk
@@ -406,7 +406,7 @@ $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi: \
 			$(VBOX_PATH_WIX)/difxapp_x86.wixlib, \
 			$(VBOX_PATH_WIX)/difxapp_x64.wixlib)
 	$(RM) -f $(VBOX_WIN_INST_OUT_DIR)/NLS/$(lang).mst
-	$(call VBOX_SIGN_FILE_FN,$$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)))
+	$(call VBOX_SIGN_FILE_FN,$$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)),,,disable-dual-signing)
 endef
 
 $(foreach lang,$(VBOX_INSTALLER_LANGUAGES), \
@@ -440,7 +440,7 @@ $(VBOX_WIN_INST_OUT_DIR)/VBoxMerge$(module)_$(lang).msm: \
 			$(VBOX_PATH_WIX)/difxapp_x86.wixlib, \
 			$(VBOX_PATH_WIX)/difxapp_x64.wixlib)
 	$(RM) -f $(VBOX_WIN_INST_OUT_DIR)/NLS/$(lang).mst
-	$(call VBOX_SIGN_FILE_FN,$$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)))
+	$(call VBOX_SIGN_FILE_FN,$$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV) ($(KBUILD_TARGET_ARCH)),,,disable-dual-signing)
 endef
 
 $(if $(VBOX_WITH_MSM_INSTALL), \
@@ -741,7 +741,7 @@ $(PACKAGE_NAME_FINAL): \
 	$(REDIRECT) -C $(@D) -- \
 		wscript.exe $(VBOX_PATH_WISUMINFO) $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_en_US.msi $(VBOX_INS_PROD_LANG)
 	$(CP) -f $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_en_US.msi $@
-	$(call VBOX_SIGN_FILE_FN,$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV))
+	$(call VBOX_SIGN_FILE_FN,$@,$(VBOX_PRODUCT) $(VBOX_VERSION_STRING)r$(VBOX_SVN_REV),,,disable-dual-signing)
 
 
 if defined(VBOX_WITH_COMBINED_PACKAGE) && "$(KBUILD_TARGET_ARCH)" == "x86"
diff --git a/src/VBox/Installer/win/VBoxMergeApp.wxi b/src/VBox/Installer/win/VBoxMergeApp.wxi
index a687cef..aaff086 100644
--- a/src/VBox/Installer/win/VBoxMergeApp.wxi
+++ b/src/VBox/Installer/win/VBoxMergeApp.wxi
@@ -170,6 +170,8 @@
 <?endif ?>
         <File Id="file_VBoxBalloonCtrl.exe" Name="VBoxBalloonCtrl.exe"
               Source="$(env.PATH_OUT)\bin\VBoxBalloonCtrl.exe"/>
+        <File Id="file_VBoxBugReport.exe" Name="VBoxBugReport.exe"
+              Source="$(env.PATH_OUT)\bin\VBoxBugReport.exe"/>
         <File Id="file_vbox_img.exe" Name="vbox-img.exe"
               Source="$(env.PATH_OUT)\bin\vbox-img.exe"/>
 
diff --git a/src/VBox/Main/include/ConsoleImpl.h b/src/VBox/Main/include/ConsoleImpl.h
index 4d82608..f92d9f9 100644
--- a/src/VBox/Main/include/ConsoleImpl.h
+++ b/src/VBox/Main/include/ConsoleImpl.h
@@ -820,8 +820,6 @@ private:
     static DECLCALLBACK(int)    i_teleporterTrgServeConnection(RTSOCKET Sock, void *pvUser);
     /** @} */
 
-    void i_reportDriverVersions(void);
-
     bool mSavedStateDataLoaded : 1;
 
     const ComPtr<IMachine> mMachine;
diff --git a/src/VBox/Main/include/ParallelPortImpl.h b/src/VBox/Main/include/ParallelPortImpl.h
index be77adc..987204b 100644
--- a/src/VBox/Main/include/ParallelPortImpl.h
+++ b/src/VBox/Main/include/ParallelPortImpl.h
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2013 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -37,9 +37,9 @@ public:
     void FinalRelease();
 
     // public initializer/uninitializer for internal purposes only
-    HRESULT init (Machine *aParent, ULONG aSlot);
-    HRESULT init (Machine *aParent, ParallelPort *aThat);
-    HRESULT initCopy (Machine *parent, ParallelPort *aThat);
+    HRESULT init(Machine *aParent, ULONG aSlot);
+    HRESULT init(Machine *aParent, ParallelPort *aThat);
+    HRESULT initCopy(Machine *parent, ParallelPort *aThat);
     void uninit();
 
     HRESULT i_loadSettings(const settings::ParallelPort &data);
@@ -51,6 +51,7 @@ public:
     void i_commit();
     void i_copyFrom(ParallelPort *aThat);
     void i_applyDefaults();
+    bool i_hasDefaults();
 
 private:
 
diff --git a/src/VBox/Main/include/SerialPortImpl.h b/src/VBox/Main/include/SerialPortImpl.h
index 07c1d03..574eeb4 100644
--- a/src/VBox/Main/include/SerialPortImpl.h
+++ b/src/VBox/Main/include/SerialPortImpl.h
@@ -6,7 +6,7 @@
  */
 
 /*
- * Copyright (C) 2006-2013 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -40,9 +40,9 @@ public:
     void FinalRelease();
 
     // public initializer/uninitializer for internal purposes only
-    HRESULT init (Machine *aParent, ULONG aSlot);
-    HRESULT init (Machine *aParent, SerialPort *aThat);
-    HRESULT initCopy (Machine *parent, SerialPort *aThat);
+    HRESULT init(Machine *aParent, ULONG aSlot);
+    HRESULT init(Machine *aParent, SerialPort *aThat);
+    HRESULT initCopy(Machine *parent, SerialPort *aThat);
     void uninit();
 
     // public methods only for internal purposes
@@ -54,7 +54,8 @@ public:
     void i_commit();
     void i_copyFrom(SerialPort *aThat);
 
-    void i_applyDefaults (GuestOSType *aOsType);
+    void i_applyDefaults(GuestOSType *aOsType);
+    bool i_hasDefaults();
 
     // public methods for internal purposes only
     // (ensure there is a caller and a read lock before calling them!)
@@ -78,25 +79,7 @@ private:
     HRESULT getPath(com::Utf8Str &aPath);
     HRESULT setPath(const com::Utf8Str &aPath);
 
-    ////////////////////////////////////////////////////////////////////////////////
-    ////
-    //// SerialPort private data definition
-    ////
-    //////////////////////////////////////////////////////////////////////////////////
-    //
-    struct Data
-    {
-      Data()
-           : fModified(false),
-             pMachine(NULL)
-        { }
-
-       bool                                fModified;
-       Machine * const                     pMachine;
-       const ComObjPtr<SerialPort>         pPeer;
-       Backupable<settings::SerialPort>    bd;
-    };
-
+    struct Data;
     Data *m;
 };
 
diff --git a/src/VBox/Main/include/VirtualBoxImpl.h b/src/VBox/Main/include/VirtualBoxImpl.h
index 2d47353..1821aa8 100644
--- a/src/VBox/Main/include/VirtualBoxImpl.h
+++ b/src/VBox/Main/include/VirtualBoxImpl.h
@@ -363,6 +363,7 @@ private:
                                uint8_t *aCiphertext,
                                size_t aPlaintextSize,
                                size_t aCiphertextSize) const;
+    void i_reportDriverVersions(void);
 
     struct Data;            // opaque data structure, defined in VirtualBoxImpl.cpp
 
diff --git a/src/VBox/Main/src-client/ConsoleImpl.cpp b/src/VBox/Main/src-client/ConsoleImpl.cpp
index 393f1cd..86c3ab7 100644
--- a/src/VBox/Main/src-client/ConsoleImpl.cpp
+++ b/src/VBox/Main/src-client/ConsoleImpl.cpp
@@ -646,6 +646,7 @@ void Console::uninit()
     if (mpUVM)
     {
         i_powerDown();
+//        AssertReleaseMsgFailed(("THIS MUST NOT HAPPEN!"));
         Assert(mpUVM == NULL);
     }
 
diff --git a/src/VBox/Main/src-client/ConsoleImpl2.cpp b/src/VBox/Main/src-client/ConsoleImpl2.cpp
index a89c7b1..470f7fa 100644
--- a/src/VBox/Main/src-client/ConsoleImpl2.cpp
+++ b/src/VBox/Main/src-client/ConsoleImpl2.cpp
@@ -744,151 +744,6 @@ DECLCALLBACK(int) Console::i_configConstructor(PUVM pUVM, PVM pVM, void *pvConso
 }
 
 
-#ifdef RT_OS_WINDOWS
-#include <psapi.h>
-
-/**
- * Report versions of installed drivers to release log.
- */
-void Console::i_reportDriverVersions()
-{
-    DWORD   err;
-    HRESULT hrc;
-    LPVOID  aDrivers[1024];
-    LPVOID *pDrivers      = aDrivers;
-    UINT    cNeeded       = 0;
-    TCHAR   szSystemRoot[MAX_PATH];
-    TCHAR  *pszSystemRoot = szSystemRoot;
-    LPVOID  pVerInfo      = NULL;
-    DWORD   cbVerInfo     = 0;
-
-    do
-    {
-        cNeeded = GetWindowsDirectory(szSystemRoot, RT_ELEMENTS(szSystemRoot));
-        if (cNeeded == 0)
-        {
-            err = GetLastError();
-            hrc = HRESULT_FROM_WIN32(err);
-            AssertLogRelMsgFailed(("GetWindowsDirectory failed, hr=%Rhrc (0x%x) err=%u\n",
-                                                   hrc, hrc, err));
-            break;
-        }
-        else if (cNeeded > RT_ELEMENTS(szSystemRoot))
-        {
-            /* The buffer is too small, allocate big one. */
-            pszSystemRoot = (TCHAR *)RTMemTmpAlloc(cNeeded * sizeof(_TCHAR));
-            if (!pszSystemRoot)
-            {
-                AssertLogRelMsgFailed(("RTMemTmpAlloc failed to allocate %d bytes\n", cNeeded));
-                break;
-            }
-            if (GetWindowsDirectory(pszSystemRoot, cNeeded) == 0)
-            {
-                err = GetLastError();
-                hrc = HRESULT_FROM_WIN32(err);
-                AssertLogRelMsgFailed(("GetWindowsDirectory failed, hr=%Rhrc (0x%x) err=%u\n",
-                                                   hrc, hrc, err));
-                break;
-            }
-        }
-
-        DWORD  cbNeeded = 0;
-        if (!EnumDeviceDrivers(aDrivers, sizeof(aDrivers), &cbNeeded) || cbNeeded > sizeof(aDrivers))
-        {
-            pDrivers = (LPVOID *)RTMemTmpAlloc(cbNeeded);
-            if (!EnumDeviceDrivers(pDrivers, cbNeeded, &cbNeeded))
-            {
-                err = GetLastError();
-                hrc = HRESULT_FROM_WIN32(err);
-                AssertLogRelMsgFailed(("EnumDeviceDrivers failed, hr=%Rhrc (0x%x) err=%u\n",
-                                                   hrc, hrc, err));
-                break;
-            }
-        }
-
-        LogRel(("Installed Drivers:\n"));
-
-        TCHAR szDriver[1024];
-        int cDrivers = cbNeeded / sizeof(pDrivers[0]);
-        for (int i = 0; i < cDrivers; i++)
-        {
-            if (GetDeviceDriverBaseName(pDrivers[i], szDriver, sizeof(szDriver) / sizeof(szDriver[0])))
-            {
-                if (_tcsnicmp(TEXT("vbox"), szDriver, 4))
-                    continue;
-            }
-            else
-                continue;
-            if (GetDeviceDriverFileName(pDrivers[i], szDriver, sizeof(szDriver) / sizeof(szDriver[0])))
-            {
-                _TCHAR szTmpDrv[1024];
-                _TCHAR *pszDrv = szDriver;
-                if (!_tcsncmp(TEXT("\\SystemRoot"), szDriver, 11))
-                {
-                    _tcscpy_s(szTmpDrv, pszSystemRoot);
-                    _tcsncat_s(szTmpDrv, szDriver + 11, sizeof(szTmpDrv) / sizeof(szTmpDrv[0]) - _tclen(pszSystemRoot));
-                    pszDrv = szTmpDrv;
-                }
-                else if (!_tcsncmp(TEXT("\\??\\"), szDriver, 4))
-                    pszDrv = szDriver + 4;
-
-                /* Allocate a buffer for version info. Reuse if large enough. */
-                DWORD cbNewVerInfo = GetFileVersionInfoSize(pszDrv, NULL);
-                if (cbNewVerInfo > cbVerInfo)
-                {
-                    if (pVerInfo)
-                        RTMemTmpFree(pVerInfo);
-                    cbVerInfo = cbNewVerInfo;
-                    pVerInfo = RTMemTmpAlloc(cbVerInfo);
-                    if (!pVerInfo)
-                    {
-                        AssertLogRelMsgFailed(("RTMemTmpAlloc failed to allocate %d bytes\n", cbVerInfo));
-                        break;
-                    }
-                }
-
-                if (GetFileVersionInfo(pszDrv, NULL, cbVerInfo, pVerInfo))
-                {
-                    UINT   cbSize = 0;
-                    LPBYTE lpBuffer = NULL;
-                    if (VerQueryValue(pVerInfo, TEXT("\\"), (VOID FAR* FAR*)&lpBuffer, &cbSize))
-                    {
-                        if (cbSize)
-                        {
-                            VS_FIXEDFILEINFO *pFileInfo = (VS_FIXEDFILEINFO *)lpBuffer;
-                            if (pFileInfo->dwSignature == 0xfeef04bd)
-                            {
-                                LogRel(("  %ls (Version: %d.%d.%d.%d)\n", pszDrv,
-                                        (pFileInfo->dwFileVersionMS >> 16) & 0xffff,
-                                        (pFileInfo->dwFileVersionMS >> 0) & 0xffff,
-                                        (pFileInfo->dwFileVersionLS >> 16) & 0xffff,
-                                        (pFileInfo->dwFileVersionLS >> 0) & 0xffff));
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-    }
-    while (0);
-
-    if (pVerInfo)
-        RTMemTmpFree(pVerInfo);
-
-    if (pDrivers != aDrivers)
-        RTMemTmpFree(pDrivers);
-
-    if (pszSystemRoot != szSystemRoot)
-        RTMemTmpFree(pszSystemRoot);
-}
-#else /* !RT_OS_WINDOWS */
-void Console::i_reportDriverVersions(void)
-{
-}
-#endif /* !RT_OS_WINDOWS */
-
-
 /**
  * Worker for configConstructor.
  *
@@ -981,7 +836,6 @@ int Console::i_configConstructorInner(PUVM pUVM, PVM pVM, AutoWriteLock *pAlock)
     ULONG maxNetworkAdapters;
     hrc = systemProperties->GetMaxNetworkAdapters(chipsetType, &maxNetworkAdapters);        H();
 
-    i_reportDriverVersions();
     /*
      * Get root node first.
      * This is the only node in the tree.
@@ -3093,6 +2947,18 @@ int Console::i_configConstructorInner(PUVM pUVM, PVM pVM, AutoWriteLock *pAlock)
             InsertConfigInteger(pCfg,  "Serial1IoPortBase", auSerialIoPortBase[1]);
             InsertConfigInteger(pCfg,  "Serial1Irq", auSerialIrq[1]);
 
+            if (auSerialIoPortBase[2])
+            {
+                InsertConfigInteger(pCfg,  "Serial2IoPortBase", auSerialIoPortBase[2]);
+                InsertConfigInteger(pCfg,  "Serial2Irq", auSerialIrq[2]);
+            }
+
+            if (auSerialIoPortBase[3])
+            {
+                InsertConfigInteger(pCfg,  "Serial3IoPortBase", auSerialIoPortBase[3]);
+                InsertConfigInteger(pCfg,  "Serial3Irq", auSerialIrq[3]);
+            }
+
             InsertConfigInteger(pCfg,  "Parallel0IoPortBase", auParallelIoPortBase[0]);
             InsertConfigInteger(pCfg,  "Parallel0Irq", auParallelIrq[0]);
 
diff --git a/src/VBox/Main/src-client/DisplayImpl.cpp b/src/VBox/Main/src-client/DisplayImpl.cpp
index 55adf90..be8bf6f 100644
--- a/src/VBox/Main/src-client/DisplayImpl.cpp
+++ b/src/VBox/Main/src-client/DisplayImpl.cpp
@@ -111,6 +111,7 @@ HRESULT Display::FinalConstruct()
 
     mfSeamlessEnabled = false;
     mpRectVisibleRegion = NULL;
+    mcRectVisibleRegion = 0;
 
 #ifdef VBOX_WITH_CROGL
     mfCrOglDataHidden = false;
diff --git a/src/VBox/Main/src-client/DrvAudioVRDE.cpp b/src/VBox/Main/src-client/DrvAudioVRDE.cpp
index 121a9a4..3adc1f7 100644
--- a/src/VBox/Main/src-client/DrvAudioVRDE.cpp
+++ b/src/VBox/Main/src-client/DrvAudioVRDE.cpp
@@ -303,7 +303,7 @@ static DECLCALLBACK(int) drvAudioVRDEControlOut(PPDMIHOSTAUDIO pInterface, PPDMA
     PDRVAUDIOVRDE pDrv = RT_FROM_MEMBER(pInterface, DRVAUDIOVRDE, IHostAudio);
     AssertPtrReturn(pDrv, VERR_INVALID_POINTER);
 
-    PVRDESTREAMIN pVRDEStrmOut = (PVRDESTREAMIN)pHstStrmOut;
+    PVRDESTREAMOUT pVRDEStrmOut = (PVRDESTREAMOUT)pHstStrmOut;
     AssertPtrReturn(pVRDEStrmOut, VERR_INVALID_POINTER);
 
     LogFlowFunc(("enmStreamCmd=%ld\n", enmStreamCmd));
diff --git a/src/VBox/Main/src-server/MachineImpl.cpp b/src/VBox/Main/src-server/MachineImpl.cpp
index b8135f7..66446a6 100644
--- a/src/VBox/Main/src-server/MachineImpl.cpp
+++ b/src/VBox/Main/src-server/MachineImpl.cpp
@@ -10276,6 +10276,9 @@ HRESULT Machine::i_saveHardware(settings::Hardware &data, settings::Debugging *p
         data.llSerialPorts.clear();
         for (ULONG slot = 0; slot < RT_ELEMENTS(mSerialPorts); ++slot)
         {
+            if (mSerialPorts[slot]->i_hasDefaults())
+                continue;
+
             settings::SerialPort s;
             s.ulSlot = slot;
             rc = mSerialPorts[slot]->i_saveSettings(s);
@@ -10288,6 +10291,9 @@ HRESULT Machine::i_saveHardware(settings::Hardware &data, settings::Debugging *p
         data.llParallelPorts.clear();
         for (ULONG slot = 0; slot < RT_ELEMENTS(mParallelPorts); ++slot)
         {
+            if (mParallelPorts[slot]->i_hasDefaults())
+                continue;
+
             settings::ParallelPort p;
             p.ulSlot = slot;
             rc = mParallelPorts[slot]->i_saveSettings(p);
@@ -12593,26 +12599,30 @@ void SessionMachine::uninit(Uninit::Reason aReason)
     {
         for (ULONG slot = 0; slot < mNetworkAdapters.size(); ++slot)
         {
+            BOOL enabled;
+            HRESULT hrc = mNetworkAdapters[slot]->COMGETTER(Enabled)(&enabled);
+            if (   FAILED(hrc)
+                || !enabled)
+                continue;
+
             NetworkAttachmentType_T type;
-            HRESULT hrc;
-
-             hrc = mNetworkAdapters[slot]->COMGETTER(AttachmentType)(&type);
-             if (   SUCCEEDED(hrc)
-                 && type == NetworkAttachmentType_NATNetwork)
-             {
-                 Bstr name;
-                 hrc = mNetworkAdapters[slot]->COMGETTER(NATNetwork)(name.asOutParam());
-                 if (SUCCEEDED(hrc))
-                 {
-                     multilock.release();
-                     LogRel(("VM '%s' stops using NAT network '%ls'\n",
-                             mUserData->s.strName.c_str(), name.raw()));
-                     mParent->i_natNetworkRefDec(name.raw());
-                     multilock.acquire();
+            hrc = mNetworkAdapters[slot]->COMGETTER(AttachmentType)(&type);
+            if (   SUCCEEDED(hrc)
+                && type == NetworkAttachmentType_NATNetwork)
+            {
+                Bstr name;
+                hrc = mNetworkAdapters[slot]->COMGETTER(NATNetwork)(name.asOutParam());
+                if (SUCCEEDED(hrc))
+                {
+                    multilock.release();
+                    LogRel(("VM '%s' stops using NAT network '%ls'\n",
+                            mUserData->s.strName.c_str(), name.raw()));
+                    mParent->i_natNetworkRefDec(name.raw());
+                    multilock.acquire();
                 }
-             }
-         }
-     }
+            }
+        }
+    }
 
     /*
      *  An expected uninitialization can come only from #checkForDeath().
@@ -13003,8 +13013,13 @@ HRESULT SessionMachine::beginPowerUp(const ComPtr<IProgress> &aProgress)
     {
         for (ULONG slot = 0; slot < mNetworkAdapters.size(); ++slot)
         {
+            BOOL enabled;
+            HRESULT hrc = mNetworkAdapters[slot]->COMGETTER(Enabled)(&enabled);
+            if (   FAILED(hrc)
+                || !enabled)
+                continue;
+
             NetworkAttachmentType_T type;
-            HRESULT hrc;
             hrc = mNetworkAdapters[slot]->COMGETTER(AttachmentType)(&type);
             if (   SUCCEEDED(hrc)
                 && type == NetworkAttachmentType_NATNetwork)
diff --git a/src/VBox/Main/src-server/ParallelPortImpl.cpp b/src/VBox/Main/src-server/ParallelPortImpl.cpp
index e5c66c4..e497105 100644
--- a/src/VBox/Main/src-server/ParallelPortImpl.cpp
+++ b/src/VBox/Main/src-server/ParallelPortImpl.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -123,7 +123,7 @@ HRESULT ParallelPort::init(Machine *aParent, ParallelPort *aThat)
     unconst(m->pMachine) = aParent;
     unconst(m->pPeer) = aThat;
 
-    AutoCaller thatCaller (aThat);
+    AutoCaller thatCaller(aThat);
     AssertComRCReturnRC(thatCaller.rc());
 
     AutoReadLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
@@ -441,11 +441,11 @@ void ParallelPort::i_commit()
 {
     /* sanity */
     AutoCaller autoCaller(this);
-    AssertComRCReturnVoid (autoCaller.rc());
+    AssertComRCReturnVoid(autoCaller.rc());
 
     /* sanity too */
-    AutoCaller peerCaller (m->pPeer);
-    AssertComRCReturnVoid (peerCaller.rc());
+    AutoCaller peerCaller(m->pPeer);
+    AssertComRCReturnVoid(peerCaller.rc());
 
     /* lock both for writing since we modify both (m->pPeer is "master" so locked
      * first) */
@@ -468,15 +468,15 @@ void ParallelPort::i_commit()
  */
 void ParallelPort::i_copyFrom(ParallelPort *aThat)
 {
-    AssertReturnVoid (aThat != NULL);
+    AssertReturnVoid(aThat != NULL);
 
     /* sanity */
     AutoCaller autoCaller(this);
-    AssertComRCReturnVoid (autoCaller.rc());
+    AssertComRCReturnVoid(autoCaller.rc());
 
     /* sanity too */
-    AutoCaller thatCaller (aThat);
-    AssertComRCReturnVoid (thatCaller.rc());
+    AutoCaller thatCaller(aThat);
+    AssertComRCReturnVoid(thatCaller.rc());
 
     /* peer is not modified, lock it for reading (aThat is "master" so locked
      * first) */
@@ -494,7 +494,7 @@ void ParallelPort::i_applyDefaults()
 {
     /* sanity */
     AutoCaller autoCaller(this);
-    AssertComRCReturnVoid (autoCaller.rc());
+    AssertComRCReturnVoid(autoCaller.rc());
 
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
@@ -513,8 +513,45 @@ void ParallelPort::i_applyDefaults()
             m->bd->ulIRQ = 5;
             break;
         }
-        default: break;
+        default:
+            AssertMsgFailed(("Parallel port slot %u exceeds limit\n", m->bd->ulSlot));
+            break;
+    }
+}
+
+bool ParallelPort::i_hasDefaults()
+{
+    /* sanity */
+    AutoCaller autoCaller(this);
+    AssertComRCReturn(autoCaller.rc(), true);
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (!m->bd->fEnabled)
+    {
+        /* Could be default, check the IO base and IRQ. */
+        switch (m->bd->ulSlot)
+        {
+            case 0:
+                if (m->bd->ulIOBase == 0x378 && m->bd->ulIRQ == 7)
+                    return true;
+                break;
+            case 1:
+                if (m->bd->ulIOBase == 0x278 && m->bd->ulIRQ == 5)
+                    return true;
+                break;
+            default:
+                AssertMsgFailed(("Parallel port slot %u exceeds limit\n", m->bd->ulSlot));
+                break;
+        }
+
+        /* Detect old-style defaults (0x378, irq 4) in any slot, they are still
+         * in place for many VMs created by old VirtualBox versions. */
+        if (m->bd->ulIOBase == 0x378 && m->bd->ulIRQ == 4)
+            return true;
     }
+
+    return false;
 }
 
 /* vi: set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/src/VBox/Main/src-server/SerialPortImpl.cpp b/src/VBox/Main/src-server/SerialPortImpl.cpp
index 7cdfd60..7f1e1bd 100644
--- a/src/VBox/Main/src-server/SerialPortImpl.cpp
+++ b/src/VBox/Main/src-server/SerialPortImpl.cpp
@@ -5,7 +5,7 @@
  */
 
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -21,6 +21,7 @@
 #include "VirtualBoxImpl.h"
 #include "GuestOSTypeImpl.h"
 
+#include <iprt/assert.h>
 #include <iprt/string.h>
 #include <iprt/cpp/utils.h>
 
@@ -30,10 +31,29 @@
 #include "AutoCaller.h"
 #include "Logging.h"
 
+//////////////////////////////////////////////////////////////////////////////////
+//
+// SerialPort private data definition
+//
+//////////////////////////////////////////////////////////////////////////////////
+
+struct SerialPort::Data
+{
+    Data()
+        : fModified(false),
+          pMachine(NULL)
+    { }
+
+    bool                                fModified;
+    Machine * const                     pMachine;
+    const ComObjPtr<SerialPort>         pPeer;
+    Backupable<settings::SerialPort>    bd;
+};
+
 // constructor / destructor
 /////////////////////////////////////////////////////////////////////////////
 
-DEFINE_EMPTY_CTOR_DTOR (SerialPort)
+DEFINE_EMPTY_CTOR_DTOR(SerialPort)
 
 HRESULT SerialPort::FinalConstruct()
 {
@@ -105,11 +125,11 @@ HRESULT SerialPort::init(Machine *aParent, SerialPort *aThat)
     unconst(m->pMachine) = aParent;
     unconst(m->pPeer) = aThat;
 
-    AutoCaller thatCaller (aThat);
+    AutoCaller thatCaller(aThat);
     AssertComRCReturnRC(thatCaller.rc());
 
     AutoReadLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
-    m->bd.share (aThat->m->bd);
+    m->bd.share(aThat->m->bd);
 
     /* Confirm a successful initialization */
     autoInitSpan.setSucceeded();
@@ -139,11 +159,11 @@ HRESULT SerialPort::initCopy(Machine *aParent, SerialPort *aThat)
     unconst(m->pMachine) = aParent;
     /* pPeer is left null */
 
-    AutoCaller thatCaller (aThat);
+    AutoCaller thatCaller(aThat);
     AssertComRCReturnRC(thatCaller.rc());
 
     AutoReadLock thatLock(aThat COMMA_LOCKVAL_SRC_POS);
-    m->bd.attachCopy (aThat->m->bd);
+    m->bd.attachCopy(aThat->m->bd);
 
     /* Confirm a successful initialization */
     autoInitSpan.setSucceeded();
@@ -544,7 +564,7 @@ void SerialPort::i_commit()
 {
     /* sanity */
     AutoCaller autoCaller(this);
-    AssertComRCReturnVoid (autoCaller.rc());
+    AssertComRCReturnVoid(autoCaller.rc());
 
     /* sanity too */
     AutoCaller peerCaller(m->pPeer);
@@ -569,17 +589,17 @@ void SerialPort::i_commit()
  *  @note Locks this object for writing, together with the peer object
  *  represented by @a aThat (locked for reading).
  */
-void SerialPort::i_copyFrom (SerialPort *aThat)
+void SerialPort::i_copyFrom(SerialPort *aThat)
 {
-    AssertReturnVoid (aThat != NULL);
+    AssertReturnVoid(aThat != NULL);
 
     /* sanity */
     AutoCaller autoCaller(this);
-    AssertComRCReturnVoid (autoCaller.rc());
+    AssertComRCReturnVoid(autoCaller.rc());
 
     /* sanity too */
-    AutoCaller thatCaller (aThat);
-    AssertComRCReturnVoid (thatCaller.rc());
+    AutoCaller thatCaller(aThat);
+    AssertComRCReturnVoid(thatCaller.rc());
 
     /* peer is not modified, lock it for reading (aThat is "master" so locked
      * first) */
@@ -587,16 +607,16 @@ void SerialPort::i_copyFrom (SerialPort *aThat)
     AutoWriteLock wl(this COMMA_LOCKVAL_SRC_POS);
 
     /* this will back up current data */
-    m->bd.assignCopy (aThat->m->bd);
+    m->bd.assignCopy(aThat->m->bd);
 }
 
-void SerialPort::i_applyDefaults (GuestOSType *aOsType)
+void SerialPort::i_applyDefaults(GuestOSType *aOsType)
 {
-    AssertReturnVoid (aOsType != NULL);
+    AssertReturnVoid(aOsType != NULL);
 
     /* sanity */
     AutoCaller autoCaller(this);
-    AssertComRCReturnVoid (autoCaller.rc());
+    AssertComRCReturnVoid(autoCaller.rc());
 
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
@@ -607,7 +627,7 @@ void SerialPort::i_applyDefaults (GuestOSType *aOsType)
     {
         case 1:
         {
-            m->bd->ulIOBase = 0x2F8;
+            m->bd->ulIOBase = 0x2f8;
             m->bd->ulIRQ = 3;
             break;
         }
@@ -623,7 +643,9 @@ void SerialPort::i_applyDefaults (GuestOSType *aOsType)
             m->bd->ulIRQ = 3;
             break;
         }
-        default: break;
+        default:
+            AssertMsgFailed(("Serial port slot %u exceeds limit\n", m->bd->ulSlot));
+            break;
     }
 
     uint32_t numSerialEnabled = aOsType->i_numSerialEnabled();
@@ -635,6 +657,51 @@ void SerialPort::i_applyDefaults (GuestOSType *aOsType)
     }
 }
 
+bool SerialPort::i_hasDefaults()
+{
+    /* sanity */
+    AutoCaller autoCaller(this);
+    AssertComRCReturn(autoCaller.rc(), true);
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (   !m->bd->fEnabled
+        && m->bd->portMode == PortMode_Disconnected
+        && !m->bd->fServer)
+    {
+        /* Could be default, check the IO base and IRQ. */
+        switch (m->bd->ulSlot)
+        {
+            case 0:
+                if (m->bd->ulIOBase == 0x3f8 && m->bd->ulIRQ == 4)
+                    return true;
+                break;
+            case 1:
+                if (m->bd->ulIOBase == 0x2f8 && m->bd->ulIRQ == 3)
+                    return true;
+                break;
+            case 2:
+                if (m->bd->ulIOBase == 0x3e8 && m->bd->ulIRQ == 4)
+                    return true;
+                break;
+            case 3:
+                if (m->bd->ulIOBase == 0x2e8 && m->bd->ulIRQ == 3)
+                    return true;
+                break;
+            default:
+                AssertMsgFailed(("Serial port slot %u exceeds limit\n", m->bd->ulSlot));
+                break;
+        }
+
+        /* Detect old-style defaults (0x3f8, irq 4) in any slot, they are still
+         * in place for many VMs created by old VirtualBox versions. */
+        if (m->bd->ulIOBase == 0x3f8 && m->bd->ulIRQ == 4)
+            return true;
+    }
+
+    return false;
+}
+
 /**
  *  Validates COMSETTER(Path) arguments.
  */
diff --git a/src/VBox/Main/src-server/VirtualBoxImpl.cpp b/src/VBox/Main/src-server/VirtualBoxImpl.cpp
index 3b039c6..533903a 100644
--- a/src/VBox/Main/src-server/VirtualBoxImpl.cpp
+++ b/src/VBox/Main/src-server/VirtualBoxImpl.cpp
@@ -385,6 +385,8 @@ HRESULT VirtualBox::init()
 
     LogRel(("Home directory: '%s'\n", m->strHomeDir.c_str()));
 
+    i_reportDriverVersions();
+
     /* compose the VirtualBox.xml file name */
     unconst(m->strSettingsFilePath) = Utf8StrFmt("%s%c%s",
                                                  m->strHomeDir.c_str(),
@@ -5210,4 +5212,150 @@ HRESULT VirtualBox::i_unregisterNATNetwork(NATNetwork *aNATNetwork,
     return E_NOTIMPL;
 #endif
 }
+
+
+#ifdef RT_OS_WINDOWS
+#include <psapi.h>
+
+/**
+ * Report versions of installed drivers to release log.
+ */
+void VirtualBox::i_reportDriverVersions()
+{
+    DWORD   err;
+    HRESULT hrc;
+    LPVOID  aDrivers[1024];
+    LPVOID *pDrivers      = aDrivers;
+    UINT    cNeeded       = 0;
+    TCHAR   szSystemRoot[MAX_PATH];
+    TCHAR  *pszSystemRoot = szSystemRoot;
+    LPVOID  pVerInfo      = NULL;
+    DWORD   cbVerInfo     = 0;
+
+    do
+    {
+        cNeeded = GetWindowsDirectory(szSystemRoot, RT_ELEMENTS(szSystemRoot));
+        if (cNeeded == 0)
+        {
+            err = GetLastError();
+            hrc = HRESULT_FROM_WIN32(err);
+            AssertLogRelMsgFailed(("GetWindowsDirectory failed, hr=%Rhrc (0x%x) err=%u\n",
+                                                   hrc, hrc, err));
+            break;
+        }
+        else if (cNeeded > RT_ELEMENTS(szSystemRoot))
+        {
+            /* The buffer is too small, allocate big one. */
+            pszSystemRoot = (TCHAR *)RTMemTmpAlloc(cNeeded * sizeof(_TCHAR));
+            if (!pszSystemRoot)
+            {
+                AssertLogRelMsgFailed(("RTMemTmpAlloc failed to allocate %d bytes\n", cNeeded));
+                break;
+            }
+            if (GetWindowsDirectory(pszSystemRoot, cNeeded) == 0)
+            {
+                err = GetLastError();
+                hrc = HRESULT_FROM_WIN32(err);
+                AssertLogRelMsgFailed(("GetWindowsDirectory failed, hr=%Rhrc (0x%x) err=%u\n",
+                                                   hrc, hrc, err));
+                break;
+            }
+        }
+
+        DWORD  cbNeeded = 0;
+        if (!EnumDeviceDrivers(aDrivers, sizeof(aDrivers), &cbNeeded) || cbNeeded > sizeof(aDrivers))
+        {
+            pDrivers = (LPVOID *)RTMemTmpAlloc(cbNeeded);
+            if (!EnumDeviceDrivers(pDrivers, cbNeeded, &cbNeeded))
+            {
+                err = GetLastError();
+                hrc = HRESULT_FROM_WIN32(err);
+                AssertLogRelMsgFailed(("EnumDeviceDrivers failed, hr=%Rhrc (0x%x) err=%u\n",
+                                                   hrc, hrc, err));
+                break;
+            }
+        }
+
+        LogRel(("Installed Drivers:\n"));
+
+        TCHAR szDriver[1024];
+        int cDrivers = cbNeeded / sizeof(pDrivers[0]);
+        for (int i = 0; i < cDrivers; i++)
+        {
+            if (GetDeviceDriverBaseName(pDrivers[i], szDriver, sizeof(szDriver) / sizeof(szDriver[0])))
+            {
+                if (_tcsnicmp(TEXT("vbox"), szDriver, 4))
+                    continue;
+            }
+            else
+                continue;
+            if (GetDeviceDriverFileName(pDrivers[i], szDriver, sizeof(szDriver) / sizeof(szDriver[0])))
+            {
+                _TCHAR szTmpDrv[1024];
+                _TCHAR *pszDrv = szDriver;
+                if (!_tcsncmp(TEXT("\\SystemRoot"), szDriver, 11))
+                {
+                    _tcscpy_s(szTmpDrv, pszSystemRoot);
+                    _tcsncat_s(szTmpDrv, szDriver + 11, sizeof(szTmpDrv) / sizeof(szTmpDrv[0]) - _tclen(pszSystemRoot));
+                    pszDrv = szTmpDrv;
+                }
+                else if (!_tcsncmp(TEXT("\\??\\"), szDriver, 4))
+                    pszDrv = szDriver + 4;
+
+                /* Allocate a buffer for version info. Reuse if large enough. */
+                DWORD cbNewVerInfo = GetFileVersionInfoSize(pszDrv, NULL);
+                if (cbNewVerInfo > cbVerInfo)
+                {
+                    if (pVerInfo)
+                        RTMemTmpFree(pVerInfo);
+                    cbVerInfo = cbNewVerInfo;
+                    pVerInfo = RTMemTmpAlloc(cbVerInfo);
+                    if (!pVerInfo)
+                    {
+                        AssertLogRelMsgFailed(("RTMemTmpAlloc failed to allocate %d bytes\n", cbVerInfo));
+                        break;
+                    }
+                }
+
+                if (GetFileVersionInfo(pszDrv, NULL, cbVerInfo, pVerInfo))
+                {
+                    UINT   cbSize = 0;
+                    LPBYTE lpBuffer = NULL;
+                    if (VerQueryValue(pVerInfo, TEXT("\\"), (VOID FAR* FAR*)&lpBuffer, &cbSize))
+                    {
+                        if (cbSize)
+                        {
+                            VS_FIXEDFILEINFO *pFileInfo = (VS_FIXEDFILEINFO *)lpBuffer;
+                            if (pFileInfo->dwSignature == 0xfeef04bd)
+                            {
+                                LogRel(("  %ls (Version: %d.%d.%d.%d)\n", pszDrv,
+                                        (pFileInfo->dwFileVersionMS >> 16) & 0xffff,
+                                        (pFileInfo->dwFileVersionMS >> 0) & 0xffff,
+                                        (pFileInfo->dwFileVersionLS >> 16) & 0xffff,
+                                        (pFileInfo->dwFileVersionLS >> 0) & 0xffff));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+    }
+    while (0);
+
+    if (pVerInfo)
+        RTMemTmpFree(pVerInfo);
+
+    if (pDrivers != aDrivers)
+        RTMemTmpFree(pDrivers);
+
+    if (pszSystemRoot != szSystemRoot)
+        RTMemTmpFree(pszSystemRoot);
+}
+#else /* !RT_OS_WINDOWS */
+void VirtualBox::i_reportDriverVersions(void)
+{
+}
+#endif /* !RT_OS_WINDOWS */
+
 /* vi: set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/src/VBox/Main/webservice/Makefile.kmk b/src/VBox/Main/webservice/Makefile.kmk
index 0cfe966..4c33edb 100644
--- a/src/VBox/Main/webservice/Makefile.kmk
+++ b/src/VBox/Main/webservice/Makefile.kmk
@@ -528,7 +528,7 @@ if defined(VBOX_ONLY_SDK) && "$(KBUILD_TARGET)" != "win"
  # Globals relevant to the SDK.
  #
  VBOXWEB_GLUE_PYTHON           = $(VBOX_PATH_SDK)/bindings/webservice/python/lib/VirtualBox_wrappers.py
- VBOXWEB_WS_PYTHON             = $(VBOX_PATH_SDK)/bindings/webservice/python/lib/VirtualBox_server.py
+ VBOXWEB_WS_PYTHON             = $(VBOX_PATH_SDK)/bindings/webservice/python/lib/VirtualBox_services.py
  VBOXWEB_WS_PERL               = $(VBOX_PATH_SDK)/bindings/webservice/perl/lib/vboxService.pm
  VBOXWEB_WS_PHP                = $(VBOX_PATH_SDK)/bindings/webservice/php/lib/vboxServiceWrappers.php
  VBOXWEB_SAMPLES_JAXWS_DIR     = $(VBOX_PATH_SDK)/bindings/webservice/java/jax-ws/samples
@@ -620,6 +620,8 @@ $(VBOXWEB_WS_PYTHON): $(VBOXWEB_WSDL) $(VBOXWEBSERVICE_WSDL)
 	$(QUIET)$(MKDIR) -p $(@D)
 # Try both w/o and with --file option
 	$(QUIET)$(REDIRECT) -C $(@D) -- $(SHELL) -c "$(VBOX_WSDL2PY) -b $(VBOXWEBSERVICE_WSDL) || $(VBOX_WSDL2PY) -b  --file $(VBOXWEBSERVICE_WSDL)"
+# Note: the previous command (depending on the version) may or may not create
+# $@, but the Python webservice bindings in the SDK depend on its presence.
 	$(QUIET)$(APPEND) $@ ''
 
 $(VBOXWEB_WS_PERL): $(VBOXWEB_WSDL) $(VBOXWEBSERVICE_WSDL)
diff --git a/src/VBox/Main/webservice/vboxweb.cpp b/src/VBox/Main/webservice/vboxweb.cpp
index 284e968..be3e885 100644
--- a/src/VBox/Main/webservice/vboxweb.cpp
+++ b/src/VBox/Main/webservice/vboxweb.cpp
@@ -451,7 +451,7 @@ public:
                 RTSemEventMultiSignal(m_event);
                 qlock.acquire();
             }
-            WebLog("ending queue processing (%d out of %d threads idle)\n", m_cIdleThreads, m_llAllThreads.size());
+            LogRel(("ending queue processing (%d out of %d threads idle)\n", m_cIdleThreads, m_llAllThreads.size()));
         }
 
         RTSemEventMultiDestroy(m_event);
@@ -589,7 +589,7 @@ public:
  */
 void SoapThread::process()
 {
-    WebLog("New SOAP thread started\n");
+    LogRel(("New SOAP thread started\n"));
 
     while (g_fKeepRunning)
     {
@@ -600,14 +600,8 @@ void SoapThread::process()
         if (!soap_valid_socket(m_soap->socket))
             continue;
 
-        WebLog("Processing connection from IP=%lu.%lu.%lu.%lu socket=%d (%d out of %d threads idle)\n",
-               (m_soap->ip >> 24) & 0xFF,
-               (m_soap->ip >> 16) & 0xFF,
-               (m_soap->ip >> 8)  & 0xFF,
-               m_soap->ip         & 0xFF,
-               m_soap->socket,
-               cIdleThreads,
-               cThreads);
+        LogRel(("Processing connection from IP=%RTnaipv4 socket=%d (%d out of %d threads idle)\n",
+                RT_H2N_U32(m_soap->ip), m_soap->socket, cIdleThreads, cThreads));
 
         // Ensure that we don't get stuck indefinitely for connections using
         // keepalive, otherwise stale connections tie up worker threads.
@@ -673,7 +667,7 @@ public:
                 pVSACEv->COMGETTER(Available)(&fAvailable);
                 if (!fAvailable)
                 {
-                    WebLog("VBoxSVC became unavailable\n");
+                    LogRel(("VBoxSVC became unavailable\n"));
                     {
                         util::AutoWriteLock vlock(g_pVirtualBoxLockHandle COMMA_LOCKVAL_SRC_POS);
                         g_pVirtualBox.setNull();
@@ -696,7 +690,7 @@ public:
                 }
                 else
                 {
-                    WebLog("VBoxSVC became available\n");
+                    LogRel(("VBoxSVC became available\n"));
                     util::AutoWriteLock vlock(g_pVirtualBoxLockHandle COMMA_LOCKVAL_SRC_POS);
                     HRESULT hrc = g_pVirtualBoxClient->COMGETTER(VirtualBox)(g_pVirtualBox.asOutParam());
                     AssertComRC(hrc);
@@ -718,24 +712,6 @@ typedef ListenerImpl<VirtualBoxClientEventListener> VirtualBoxClientEventListene
 VBOX_LISTENER_DECLARE(VirtualBoxClientEventListenerImpl)
 
 /**
- * Prints a message to the webservice log file.
- * @param pszFormat
- * @todo eliminate, has no significant additional value over direct calls to LogRel.
- */
-void WebLog(const char *pszFormat, ...)
-{
-    va_list args;
-    va_start(args, pszFormat);
-    char *psz = NULL;
-    RTStrAPrintfV(&psz, pszFormat, args);
-    va_end(args);
-
-    LogRel(("%s", psz));
-
-    RTStrFree(psz);
-}
-
-/**
  * Helper for printing SOAP error messages.
  * @param soap
  */
@@ -744,15 +720,30 @@ void WebLogSoapError(struct soap *soap)
 {
     if (soap_check_state(soap))
     {
-        WebLog("Error: soap struct not initialized\n");
+        LogRel(("Error: soap struct not initialized\n"));
         return;
     }
 
     const char *pcszFaultString = *soap_faultstring(soap);
     const char **ppcszDetail = soap_faultcode(soap);
-    WebLog("#### SOAP FAULT: %s [%s]\n",
-           pcszFaultString ? pcszFaultString : "[no fault string available]",
-           (ppcszDetail && *ppcszDetail) ? *ppcszDetail : "no details available");
+    LogRel(("#### SOAP FAULT: %s [%s]\n",
+            pcszFaultString ? pcszFaultString : "[no fault string available]",
+            (ppcszDetail && *ppcszDetail) ? *ppcszDetail : "no details available"));
+}
+
+/**
+ * Helper for decoding AuthResult.
+ * @param result AuthResult
+ */
+static const char * decodeAuthResult(AuthResult result)
+{
+    switch (result)
+    {
+        case AuthResultAccessDenied:    return "access DENIED";
+        case AuthResultAccessGranted:   return "access granted";
+        case AuthResultDelegateToGuest: return "delegated to guest";
+        default:                        return "unknown AuthResult";
+    }
 }
 
 #ifdef WITH_OPENSSL
@@ -873,7 +864,7 @@ static void doQueuesLoop()
 #ifdef WITH_OPENSSL
     if (g_fSSL && CRYPTO_thread_setup())
     {
-        WebLog("Failed to set up OpenSSL thread mutex!");
+        LogRel(("Failed to set up OpenSSL thread mutex!"));
         exit(RTEXITCODE_FAILURE);
     }
 #endif /* WITH_OPENSSL */
@@ -904,22 +895,19 @@ static void doQueuesLoop()
         WebLogSoapError(&soap);
     else
     {
-        WebLog("Socket connection successful: host = %s, port = %u, %smaster socket = %d\n",
-               (g_pcszBindToHost) ? g_pcszBindToHost : "default (localhost)",
-               g_uBindToPort,
 #ifdef WITH_OPENSSL
-               g_fSSL ? "SSL, " : "",
+        const char *pszSsl = g_fSSL ? "SSL, " : "";
 #else /* !WITH_OPENSSL */
-               "",
+        const char *pszSsl = "";
 #endif /*!WITH_OPENSSL */
-               m);
+        LogRel(("Socket connection successful: host = %s, port = %u, %smaster socket = %d\n",
+               (g_pcszBindToHost) ? g_pcszBindToHost : "default (localhost)",
+               g_uBindToPort, pszSsl, m));
 
         // initialize thread queue, mutex and eventsem
         g_pSoapQ = new SoapQ(&soap);
 
-        for (uint64_t i = 1;
-             g_fKeepRunning;
-             i++)
+        for (uint64_t i = 1; g_fKeepRunning; i++)
         {
             // call gSOAP to handle incoming SOAP connection
             soap.accept_timeout = 10;
@@ -934,13 +922,13 @@ static void doQueuesLoop()
             // add the socket to the queue and tell worker threads to
             // pick up the job
             size_t cItemsOnQ = g_pSoapQ->add(s);
-            WebLog("Request %llu on socket %d queued for processing (%d items on Q)\n", i, s, cItemsOnQ);
+            LogRel(("Request %llu on socket %d queued for processing (%d items on Q)\n", i, s, cItemsOnQ));
         }
 
         delete g_pSoapQ;
         g_pSoapQ = NULL;
 
-        WebLog("ending SOAP request handling\n");
+        LogRel(("ending SOAP request handling\n"));
 
         delete g_pSoapQ;
         g_pSoapQ = NULL;
@@ -1354,7 +1342,7 @@ int main(int argc, char *argv[])
             RTMsgError("processEventQueue -> %Rrc", rc);
     }
 
-    WebLog("requested termination, cleaning up\n");
+    LogRel(("requested termination, cleaning up\n"));
 
 #ifdef RT_OS_WINDOWS
     if (!SetConsoleCtrlHandler((PHANDLER_ROUTINE)websrvSignalHandler, FALSE /* Remove handler */))
@@ -1469,7 +1457,7 @@ static DECLCALLBACK(int) fntWatchdog(RTTHREAD ThreadSelf, void *pvUser)
     thrLock.acquire();
     g_mapThreads.erase(RTThreadSelf());
 
-    WebLog("ending Watchdog thread\n");
+    LogRel(("ending Watchdog thread\n"));
     return 0;
 }
 
@@ -1596,7 +1584,7 @@ void Base64DecodeByteArray(struct soap *soap, const std::string& aStr, ComSafeAr
 
     if (cbOut > DECODE_STR_MAX)
     {
-        WebLog("Decode string too long.\n");
+        LogRel(("Decode string too long.\n"));
         RaiseSoapRuntimeFault(soap, idThis, pszMethodName, E_INVALIDARG, pObj, iid);
     }
 
@@ -1604,7 +1592,7 @@ void Base64DecodeByteArray(struct soap *soap, const std::string& aStr, ComSafeAr
     int rc = RTBase64Decode(pszStr, result.raw(), cbOut, NULL, NULL);
     if (FAILED(rc))
     {
-        WebLog("String Decoding Failed. Error code: %Rrc\n", rc);
+        LogRel(("String Decoding Failed. Error code: %Rrc\n", rc));
         RaiseSoapRuntimeFault(soap, idThis, pszMethodName, E_INVALIDARG, pObj, iid);
     }
 
@@ -1632,15 +1620,15 @@ void RaiseSoapRuntimeFault(struct soap *soap,
 
     WEBDEBUG(("   error, raising SOAP exception\n"));
 
-    WebLog("API method name:            %s\n", pcszMethodName);
-    WebLog("API return code:            %#10lx (%Rhrc)\n", apirc, apirc);
+    LogRel(("API method name:            %s\n", pcszMethodName));
+    LogRel(("API return code:            %#10lx (%Rhrc)\n", apirc, apirc));
     if (info.isFullAvailable() || info.isBasicAvailable())
     {
         const com::ErrorInfo *pInfo = &info;
         do
         {
-            WebLog("COM error info result code: %#10lx (%Rhrc)\n", pInfo->getResultCode(), pInfo->getResultCode());
-            WebLog("COM error info text:        %ls\n", pInfo->getText().raw());
+            LogRel(("COM error info result code: %#10lx (%Rhrc)\n", pInfo->getResultCode(), pInfo->getResultCode()));
+            LogRel(("COM error info text:        %ls\n", pInfo->getText().raw()));
 
             pInfo = pInfo->getNext();
         }
@@ -1799,7 +1787,6 @@ WebServiceSession::~WebServiceSession()
  *  @return 0 if the user was successfully authenticated, or an error code
  *  otherwise.
  */
-
 int WebServiceSession::authenticate(const char *pcszUsername,
                                     const char *pcszPassword,
                                     IVirtualBox **ppVirtualBox)
@@ -1831,7 +1818,7 @@ int WebServiceSession::authenticate(const char *pcszUsername,
         systemProperties->COMGETTER(WebServiceAuthLibrary)(authLibrary.asOutParam());
         com::Utf8Str filename = authLibrary;
 
-        WEBDEBUG(("external authentication library is '%ls'\n", authLibrary.raw()));
+        LogRel(("External authentication library is '%ls'\n", authLibrary.raw()));
 
         if (filename == "null")
             // authentication disabled, let everyone in:
@@ -1848,20 +1835,24 @@ int WebServiceSession::authenticate(const char *pcszUsername,
 
                 if (RT_FAILURE(rc))
                 {
-                    WEBDEBUG(("%s() Failed to load external authentication library. Error code: %Rrc\n", __FUNCTION__, rc));
+                    WEBDEBUG(("%s() Failed to load external authentication library '%s'. Error code: %Rrc\n",
+                              __FUNCTION__, filename.c_str(), rc));
                     break;
                 }
 
                 if (RT_FAILURE(rc = RTLdrGetSymbol(hlibAuth, AUTHENTRY3_NAME, (void**)&pfnAuthEntry3)))
                 {
-                    WEBDEBUG(("%s(): Could not resolve import '%s'. Error code: %Rrc\n", __FUNCTION__, AUTHENTRY3_NAME, rc));
+                    WEBDEBUG(("%s(): Could not resolve import '%s'. Error code: %Rrc\n",
+                              __FUNCTION__, AUTHENTRY3_NAME, rc));
 
                     if (RT_FAILURE(rc = RTLdrGetSymbol(hlibAuth, AUTHENTRY2_NAME, (void**)&pfnAuthEntry2)))
                     {
-                        WEBDEBUG(("%s(): Could not resolve import '%s'. Error code: %Rrc\n", __FUNCTION__, AUTHENTRY2_NAME, rc));
+                        WEBDEBUG(("%s(): Could not resolve import '%s'. Error code: %Rrc\n",
+                                  __FUNCTION__, AUTHENTRY2_NAME, rc));
 
                         if (RT_FAILURE(rc = RTLdrGetSymbol(hlibAuth, AUTHENTRY_NAME, (void**)&pfnAuthEntry)))
-                            WEBDEBUG(("%s(): Could not resolve import '%s'. Error code: %Rrc\n", __FUNCTION__, AUTHENTRY_NAME, rc));
+                            WEBDEBUG(("%s(): Could not resolve import '%s'. Error code: %Rrc\n",
+                                      __FUNCTION__, AUTHENTRY_NAME, rc));
                     }
                 }
 
@@ -1872,36 +1863,49 @@ int WebServiceSession::authenticate(const char *pcszUsername,
         }
     }
 
-    rc = VERR_WEB_NOT_AUTHENTICATED;
-    AuthResult result;
-    if (pfnAuthEntry3)
+    if (pfnAuthEntry3 || pfnAuthEntry2 || pfnAuthEntry)
     {
-        result = pfnAuthEntry3("webservice", NULL, AuthGuestNotAsked, pcszUsername, pcszPassword, NULL, true, 0);
-        WEBDEBUG(("%s(): result of AuthEntry(): %d\n", __FUNCTION__, result));
-        if (result == AuthResultAccessGranted)
-            rc = 0;
-    }
-    else if (pfnAuthEntry2)
-    {
-        result = pfnAuthEntry2(NULL, AuthGuestNotAsked, pcszUsername, pcszPassword, NULL, true, 0);
-        WEBDEBUG(("%s(): result of VRDPAuth2(): %d\n", __FUNCTION__, result));
+        const char *pszFn;
+        AuthResult result;
+        if (pfnAuthEntry3)
+        {
+            result = pfnAuthEntry3("webservice", NULL, AuthGuestNotAsked, pcszUsername, pcszPassword, NULL, true, 0);
+            pszFn = AUTHENTRY3_NAME;
+        }
+        else if (pfnAuthEntry2)
+        {
+            result = pfnAuthEntry2(NULL, AuthGuestNotAsked, pcszUsername, pcszPassword, NULL, true, 0);
+            pszFn = AUTHENTRY2_NAME;
+        }
+        else
+        {
+            result = pfnAuthEntry(NULL, AuthGuestNotAsked, pcszUsername, pcszPassword, NULL);
+            pszFn = AUTHENTRY_NAME;
+        }
+        WEBDEBUG(("%s(): result of %s('%s', [%d]): %d (%s)\n",
+                  __FUNCTION__, pszFn, pcszUsername, strlen(pcszPassword), result, decodeAuthResult(result)));
         if (result == AuthResultAccessGranted)
-            rc = 0;
+        {
+            LogRel(("Access for user '%s' granted\n", pcszUsername));
+            rc = VINF_SUCCESS;
+        }
+        else
+        {
+            if (result == AuthResultAccessDenied)
+                LogRel(("Access for user '%s' denied\n", pcszUsername));
+            rc = VERR_WEB_NOT_AUTHENTICATED;
+        }
     }
-    else if (pfnAuthEntry)
+    else if (fAuthLibLoaded)
     {
-        result = pfnAuthEntry(NULL, AuthGuestNotAsked, pcszUsername, pcszPassword, NULL);
-        WEBDEBUG(("%s(): result of VRDPAuth(%s, [%d]): %d\n", __FUNCTION__, pcszUsername, strlen(pcszPassword), result));
-        if (result == AuthResultAccessGranted)
-            rc = 0;
+        // fAuthLibLoaded = true but all pointers are NULL:
+        // The authlib was "null" and auth was disabled
+        rc = VINF_SUCCESS;
     }
-    else if (fAuthLibLoaded)
-        // fAuthLibLoaded = true but both pointers are NULL:
-        // then the authlib was "null" and auth was disabled
-        rc = 0;
     else
     {
         WEBDEBUG(("Could not resolve AuthEntry, VRDPAuth2 or VRDPAuth entry point"));
+        rc = VERR_WEB_NOT_AUTHENTICATED;
     }
 
     lock.release();
diff --git a/src/VBox/Main/webservice/vboxweb.h b/src/VBox/Main/webservice/vboxweb.h
index 34d19d2..a4f5f85 100644
--- a/src/VBox/Main/webservice/vboxweb.h
+++ b/src/VBox/Main/webservice/vboxweb.h
@@ -13,17 +13,14 @@
  * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
  */
 
-#ifdef DEBUG
 #define LOG_GROUP LOG_GROUP_WEBSERVICE
 #include <VBox/log.h>
-#endif
+#include <VBox/err.h>
 
 #include <VBox/com/VirtualBox.h>
 #include <VBox/com/Guid.h>
 #include <VBox/com/AutoLock.h>
 
-#include <VBox/err.h>
-
 #include <iprt/asm.h>
 
 #include <string>
@@ -34,11 +31,7 @@
  *
  ****************************************************************************/
 
-RT_C_DECLS_BEGIN
-extern void WebLog(const char *pszFormat, ...);
-RT_C_DECLS_END
-
-#define WEBDEBUG(a) do { if (g_fVerbose) { WebLog a; } } while (0)
+#define WEBDEBUG(a) do { if (g_fVerbose) { LogRel(a); } } while (0)
 
 /****************************************************************************
  *
diff --git a/src/VBox/Main/webservice/websrv-python.xsl b/src/VBox/Main/webservice/websrv-python.xsl
index 501bd93..23e4a33 100644
--- a/src/VBox/Main/webservice/websrv-python.xsl
+++ b/src/VBox/Main/webservice/websrv-python.xsl
@@ -9,7 +9,7 @@
         VirtualBox.xidl. This Python file represents our
         web service API. Depends on WSDL file for actual SOAP bindings.
 
-    Copyright (C) 2008-2015 Oracle Corporation
+    Copyright (C) 2008-2016 Oracle Corporation
 
     This file is part of VirtualBox Open Source Edition (OSE), as
     available from http://www.virtualbox.org. This file is free software;
@@ -94,13 +94,13 @@
        req=<xsl:value-of select="$ifname"/>_<xsl:value-of select="$fname"/>RequestMsg()
        req._this=self.handle
        val=self.mgr.getPort().<xsl:value-of select="$ifname"/>_<xsl:value-of select="$fname"/>(req)
-       <xsl:text>return  </xsl:text>
+       <xsl:text>return </xsl:text>
        <xsl:call-template name="emitOutParam">
            <xsl:with-param name="ifname" select="$ifname" />
            <xsl:with-param name="methodname" select="@name" />
            <xsl:with-param name="type" select="$attrtype" />
            <xsl:with-param name="value" select="concat('val.','_returnval')" />
-           <xsl:with-param name="safearray" select="@safearray"/>
+           <xsl:with-param name="safearray" select="$attrsafearray"/>
          </xsl:call-template>
 </xsl:template>
 
@@ -113,7 +113,7 @@
    def <xsl:value-of select="$fname"/>(self, value):
        req=<xsl:value-of select="$ifname"/>_<xsl:value-of select="$fname"/>RequestMsg()
        req._this=self.handle
-       if type(value) in [int, bool, basestring, str]:
+       if type(value) in [int, bool, basestring, str<xsl:if test="$attrsafearray='yes'">, tuple, list</xsl:if>]:
             req._<xsl:value-of select="$attrname"/> = value
        else:
             req._<xsl:value-of select="$attrname"/> = value.handle
@@ -240,6 +240,7 @@ class <xsl:value-of select="$ifname"/>(<xsl:value-of select="$base" />):
       <xsl:variable name="attrname"><xsl:value-of select="@name" /></xsl:variable>
       <xsl:variable name="attrtype"><xsl:value-of select="@type" /></xsl:variable>
       <xsl:variable name="attrreadonly"><xsl:value-of select="@readonly" /></xsl:variable>
+      <xsl:variable name="attrsafearray"><xsl:value-of select="@safearray" /></xsl:variable>
       <!-- skip this attribute if it has parameters of a type that has wsmap="suppress" -->
       <xsl:choose>
         <xsl:when test="( $attrtype=($G_setSuppressedInterfaces/@name) )">
@@ -259,6 +260,7 @@ class <xsl:value-of select="$ifname"/>(<xsl:value-of select="$base" />):
             <xsl:with-param name="ifname" select="$ifname" />
             <xsl:with-param name="attrname" select="$attrname" />
             <xsl:with-param name="attrtype" select="$attrtype" />
+            <xsl:with-param name="attrsafearray" select="$attrsafearray" />
           </xsl:call-template>
           <!-- bb) emit a set method if the attribute is read/write -->
           <xsl:if test="not($attrreadonly='yes')">
@@ -266,6 +268,7 @@ class <xsl:value-of select="$ifname"/>(<xsl:value-of select="$base" />):
               <xsl:with-param name="ifname" select="$ifname" />
               <xsl:with-param name="attrname" select="$attrname" />
               <xsl:with-param name="attrtype" select="$attrtype" />
+              <xsl:with-param name="attrsafearray" select="$attrsafearray" />
             </xsl:call-template>
           </xsl:if>
         </xsl:otherwise>
@@ -467,7 +470,7 @@ class <xsl:value-of select="@name"/>:
 </xsl:template>
 
 <xsl:template match="/">
-<xsl:text># Copyright (C) 2008-2015 Oracle Corporation
+<xsl:text># Copyright (C) 2008-2016 Oracle Corporation
 #
 # This file is part of a free software library; you can redistribute
 # it and/or modify it under the terms of the GNU Lesser General
diff --git a/src/VBox/Main/xml/VirtualBox-settings.xsd b/src/VBox/Main/xml/VirtualBox-settings.xsd
index 77bab82..86e7219 100644
--- a/src/VBox/Main/xml/VirtualBox-settings.xsd
+++ b/src/VBox/Main/xml/VirtualBox-settings.xsd
@@ -6,7 +6,7 @@
  *  Oracle VM VirtualBox Settings Schema
  *  Common definitions
 
-    Copyright (C) 2004-2015 Oracle Corporation
+    Copyright (C) 2004-2016 Oracle Corporation
 
     This file is part of VirtualBox Open Source Edition (OSE), as
     available from http://www.virtualbox.org. This file is free software;
@@ -878,7 +878,7 @@
     <xsd:simpleType>
       <xsd:restriction base="xsd:unsignedInt">
         <xsd:minInclusive value="0"/>
-        <xsd:maxExclusive value="2"/>
+        <xsd:maxExclusive value="4"/>
       </xsd:restriction>
     </xsd:simpleType>
   </xsd:attribute>
@@ -902,7 +902,7 @@
     <xsd:simpleType>
       <xsd:restriction base="xsd:unsignedInt">
         <xsd:minInclusive value="0"/>
-        <xsd:maxExclusive value="2"/>
+        <xsd:maxExclusive value="4"/>
       </xsd:restriction>
     </xsd:simpleType>
   </xsd:attribute>
diff --git a/src/VBox/Runtime/common/crypto/pkcs7-sanity.cpp b/src/VBox/Runtime/common/crypto/pkcs7-sanity.cpp
index cebeb6b..66d8100 100644
--- a/src/VBox/Runtime/common/crypto/pkcs7-sanity.cpp
+++ b/src/VBox/Runtime/common/crypto/pkcs7-sanity.cpp
@@ -183,8 +183,6 @@ static int rtCrPkcs7SignedData_CheckSanityExtra(PCRTCRPKCS7SIGNEDDATA pSignedDat
                                              "Expected exactly one value for message-digest attrib, found: %u",
                                              pAttrib->uValues.pOctetStrings->cItems);
                 }
-                else
-                    AssertReturn(pAttrib->enmType == RTCRPKCS7ATTRIBUTETYPE_UNKNOWN, VERR_INTERNAL_ERROR_3);
             }
 
             if (!fFoundContentInfo)
diff --git a/src/VBox/Runtime/r3/win/VBoxRT-openssl.def b/src/VBox/Runtime/r3/win/VBoxRT-openssl.def
index bb6e2b3..bacaa3f 100644
--- a/src/VBox/Runtime/r3/win/VBoxRT-openssl.def
+++ b/src/VBox/Runtime/r3/win/VBoxRT-openssl.def
@@ -1,4 +1,4 @@
-; $Id: VBoxRT-openssl.def 100874 2015-06-09 14:01:31Z bird $
+; $Id: VBoxRT-openssl.def $
 ;; @file
 ; IPRT - Windows OpenSSL exports.
 ;
@@ -3113,34 +3113,6 @@
     SSL_version
     SSL_want
     SSL_write
-    ssl2_accept
-    ssl2_callback_ctrl
-    ssl2_clear
-    ssl2_connect
-    ssl2_ctrl
-    ssl2_ctx_callback_ctrl
-    ssl2_ctx_ctrl
-    ssl2_default_timeout
-    ssl2_do_write
-    ssl2_enc
-    ssl2_enc_init
-    ssl2_free
-    ssl2_generate_key_material
-    ssl2_get_cipher
-    ssl2_get_cipher_by_char
-    ssl2_mac
-    ssl2_new
-    ssl2_num_ciphers
-    ssl2_part_read
-    ssl2_peek
-    ssl2_pending
-    ssl2_put_cipher_by_char
-    ssl2_read
-    ssl2_return_error
-    ssl2_set_certificate
-    ssl2_shutdown
-    ssl2_write
-    ssl2_write_error
     ssl23_accept
     ssl23_connect
     ssl23_default_timeout
@@ -3242,9 +3214,6 @@
     ssl3_write
     ssl3_write_bytes
     ssl3_write_pending
-    SSLv2_client_method
-    SSLv2_method
-    SSLv2_server_method
     SSLv23_client_method
     SSLv23_method
     SSLv23_server_method
diff --git a/src/VBox/Runtime/r3/win/process-win.cpp b/src/VBox/Runtime/r3/win/process-win.cpp
index 42a55de..bc6b142 100644
--- a/src/VBox/Runtime/r3/win/process-win.cpp
+++ b/src/VBox/Runtime/r3/win/process-win.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -37,8 +37,16 @@
 #include <process.h>
 #include <errno.h>
 #include <Strsafe.h>
+#ifndef IPRT_TARGET_NT4
+# include <LsaLookup.h>
+#endif
 #include <Lmcons.h>
 
+#ifndef IPRT_TARGET_NT4
+# define _NTDEF_ /* Prevents redefining (P)UNICODE_STRING. */
+# include <Ntsecapi.h>
+#endif
+
 #include <iprt/process.h>
 #include "internal-r3-win.h"
 
@@ -78,6 +86,8 @@ typedef DWORD   (WINAPI *PFNGETMODULEBASENAME)(HANDLE, HMODULE, LPTSTR, DWORD);
 /* advapi32.dll: */
 typedef BOOL    (WINAPI *PFNCREATEPROCESSWITHLOGON)(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPCWSTR, LPWSTR, DWORD,
                                                     LPVOID, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION);
+typedef NTSTATUS (NTAPI *PFNLSALOOKUPNAMES2)(LSA_HANDLE, ULONG, ULONG, PLSA_UNICODE_STRING,
+                                             PLSA_REFERENCED_DOMAIN_LIST*, PLSA_TRANSLATED_SID2*);
 
 /* userenv.dll: */
 typedef BOOL    (WINAPI *PFNCREATEENVIRONMENTBLOCK)(LPVOID *, HANDLE, BOOL);
@@ -106,6 +116,16 @@ static struct RTPROCWINENTRY
     HANDLE          hProcess;
 }                  *g_paProcesses;
 
+/** Structure for storing a user's account info.
+ *  Must be free'd with rtProcWinFreeAccountInfo(). */
+typedef struct RTPROCWINACCOUNTINFO
+{
+    /** User name. */
+    PRTUTF16        pwszUserName;
+    /** Domain this account is tied to. Can be NULL if no domain is being used. */
+    PRTUTF16        pwszDomain;
+} RTPROCWINACCOUNTINFO, *PRTPROCWINACCOUNTINFO;
+
 /** @name userenv.dll imports (we don't unload it).
  * 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.
@@ -123,6 +143,7 @@ static PFNGETMODULEBASENAME             g_pfnGetModuleBaseName          = NULL;
 static PFNENUMPROCESSES                 g_pfnEnumProcesses              = NULL;
 /* advapi32.dll: */
 static PFNCREATEPROCESSWITHLOGON        g_pfnCreateProcessWithLogonW    = NULL;
+static PFNLSALOOKUPNAMES2               g_pfnLsaLookupNames2            = NULL;
 /* userenv.dll: */
 static PFNCREATEENVIRONMENTBLOCK        g_pfnCreateEnvironmentBlock     = NULL;
 static PFNPFNDESTROYENVIRONMENTBLOCK    g_pfnDestroyEnvironmentBlock    = NULL;
@@ -322,7 +343,17 @@ static DECLCALLBACK(int) rtProcWinResolveOnce(void *pvUser)
     /*
      * advapi32.dll APIs.
      */
-    g_pfnCreateProcessWithLogonW    = (PFNCREATEPROCESSWITHLOGON)RTLdrGetSystemSymbol("advapi32.dll", "CreateProcessWithLogonW");
+    rc = RTLdrLoadSystem("advapi32.dll", true /*fNoUnload*/, &hMod);
+    if (RT_SUCCESS(rc))
+    {
+        rc = RTLdrGetSymbol(hMod, "CreateProcessWithLogonW", (void **)&g_pfnCreateProcessWithLogonW);
+        AssertStmt(RT_SUCCESS(rc), g_pfnCreateProcessWithLogonW = NULL);
+
+        rc = RTLdrGetSymbol(hMod, "LsaLookupNames2", (void **)&g_pfnLsaLookupNames2);
+        AssertStmt(RT_SUCCESS(rc), g_pfnLsaLookupNames2 = NULL);
+
+        RTLdrClose(hMod);
+    }
 
     /*
      * userenv.dll APIs.
@@ -601,16 +632,16 @@ static bool rtProcWinFindTokenByProcess(const char * const *papszNames, PSID pSi
  * Logs on a specified user and returns its primary token.
  *
  * @returns IPRT status code.
- * @param   pwszUser            User name.
+ * @param   pwszUser            User name. A domain name can be specified (as part of a UPN, User Principal Name),
+ *                              e.g. "joedoe at example.com".
  * @param   pwszPassword        Password.
- * @param   pwszDomain          Domain (not used at the moment).
  * @param   phToken             Pointer to store the logon token.
  */
-static int rtProcWinUserLogon(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTUTF16 pwszDomain, HANDLE *phToken)
+static int rtProcWinUserLogon(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, HANDLE *phToken)
 {
-    AssertPtrReturn(pwszUser, VERR_INVALID_POINTER);
+    AssertPtrReturn(pwszUser,     VERR_INVALID_POINTER);
     AssertPtrReturn(pwszPassword, VERR_INVALID_POINTER);
-    NOREF(pwszDomain); /** @todo Add domain support! */
+    AssertPtrReturn(phToken,      VERR_INVALID_POINTER);
 
     /*
      * Because we have to deal with http://support.microsoft.com/kb/245683
@@ -620,9 +651,10 @@ static int rtProcWinUserLogon(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTUTF16
      * The SE_TCB_NAME (Policy: Act as part of the operating system) right
      * is required on older windows versions (NT4, W2K, possibly XP).
      */
-    PCRTUTF16 pwszDomainToUse = g_enmWinVer < kRTWinOSType_2K ? L"" /* NT4 and older */ : NULL /* Windows 2000 and up */;
+    PCRTUTF16 pwszDomainNone = g_enmWinVer < kRTWinOSType_2K ? L"" /* NT4 and older */ : NULL /* Windows 2000 and up */;
     BOOL fRc = LogonUserW(pwszUser,
-                          pwszDomainToUse,
+                          /* The domain always is passed as part of the UPN (user name). */
+                          pwszDomainNone,
                           pwszPassword,
                           LOGON32_LOGON_INTERACTIVE,
                           LOGON32_PROVIDER_DEFAULT,
@@ -1268,6 +1300,91 @@ static void rtProcWinStationPrep(HANDLE hTokenToUse, STARTUPINFOW *pStartupInfo,
 
 
 /**
+ * Extracts the user name + domain from a given UPN (User Principal Name, "joedoe at example.com") or
+ * Down-Level Logon Name format ("example.com\\joedoe") string.
+ *
+ * @return  IPRT status code.
+ * @param   pwszString      Pointer to string to extract the account info from.
+ * @param   pAccountInfo    Where to store the parsed account info.
+ *                          Must be free'd with rtProcWinFreeAccountInfo().
+ */
+static int rtProcWinParseAccountInfo(PRTUTF16 pwszString, PRTPROCWINACCOUNTINFO pAccountInfo)
+{
+    AssertPtrReturn(pwszString,   VERR_INVALID_POINTER);
+    AssertPtrReturn(pAccountInfo, VERR_INVALID_POINTER);
+
+    /*
+     * Note: UPN handling is defined in RFC 822. We only implement very rudimentary parsing for the user
+     *       name and domain fields though.
+     */
+    char *pszString;
+    int rc = RTUtf16ToUtf8(pwszString, &pszString);
+    if (RT_SUCCESS(rc))
+    {
+        do
+        {
+            /* UPN or FQDN handling needed? */
+            /** @todo Add more validation here as needed. Regular expressions would be nice. */
+            char *pszDelim = strchr(pszString, '@');
+            if (pszDelim) /* UPN name? */
+            {
+                rc = RTStrToUtf16Ex(pszString, pszDelim - pszString, &pAccountInfo->pwszUserName, 0, NULL);
+                if (RT_FAILURE(rc))
+                    break;
+
+                rc = RTStrToUtf16Ex(pszDelim + 1, RTSTR_MAX, &pAccountInfo->pwszDomain, 0, NULL);
+                if (RT_FAILURE(rc))
+                    break;
+            }
+            else if (pszDelim = strchr(pszString, '\\')) /* FQDN name? */
+            {
+                rc = RTStrToUtf16Ex(pszString, pszDelim - pszString, &pAccountInfo->pwszDomain, 0, NULL);
+                if (RT_FAILURE(rc))
+                    break;
+
+                rc = RTStrToUtf16Ex(pszDelim + 1, RTSTR_MAX, &pAccountInfo->pwszUserName, 0, NULL);
+                if (RT_FAILURE(rc))
+                    break;
+            }
+            else
+                rc = VERR_NOT_SUPPORTED;
+
+        } while (0);
+
+        RTStrFree(pszString);
+    }
+
+#ifdef DEBUG
+    LogRelFunc(("Name  : %ls\n", pAccountInfo->pwszUserName));
+    LogRelFunc(("Domain: %ls\n", pAccountInfo->pwszDomain));
+#endif
+
+    if (RT_FAILURE(rc))
+        LogRelFunc(("Parsing \"%ls\" failed with rc=%Rrc\n", pwszString, rc));
+    return rc;
+}
+
+
+static void rtProcWinFreeAccountInfo(PRTPROCWINACCOUNTINFO pAccountInfo)
+{
+    if (!pAccountInfo)
+        return;
+
+    if (pAccountInfo->pwszUserName)
+    {
+        RTUtf16Free(pAccountInfo->pwszUserName);
+        pAccountInfo->pwszUserName = NULL;
+    }
+
+    if (pAccountInfo->pwszDomain)
+    {
+        RTUtf16Free(pAccountInfo->pwszDomain);
+        pAccountInfo->pwszDomain = NULL;
+    }
+}
+
+
+/**
  * Method \#2.
  */
 static int rtProcWinCreateAsUser2(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTUTF16 *ppwszExec, PRTUTF16 pwszCmdLine,
@@ -1303,7 +1420,7 @@ static int rtProcWinCreateAsUser2(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTU
      */
     DWORD   dwErr       = NO_ERROR;
     HANDLE  hTokenLogon = INVALID_HANDLE_VALUE;
-    int rc = rtProcWinUserLogon(pwszUser, pwszPassword, NULL /* Domain */, &hTokenLogon);
+    int rc = rtProcWinUserLogon(pwszUser, pwszPassword, &hTokenLogon);
     if (RT_SUCCESS(rc))
     {
         DWORD  fRc;
@@ -1318,43 +1435,174 @@ static int rtProcWinCreateAsUser2(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTU
          */
         if (fFlags & RTPROC_FLAGS_SERVICE)
         {
+            PSID pSid = NULL;
+
             /* Try query the SID and domain sizes first. */
-            DWORD           cbSid      = 0; /* Must be zero to query size! */
-            DWORD           cwcDomain  = 0;
-            SID_NAME_USE    SidNameUse = SidTypeUser;
+            DWORD        cbSid      = 0; /* Must be zero to query size! */
+            DWORD        cwcDomain  = 0;
+            SID_NAME_USE SidNameUse = SidTypeUser;
             fRc = LookupAccountNameW(NULL, pwszUser, NULL, &cbSid, NULL, &cwcDomain, &SidNameUse);
-
-            /* Allocate memory for the LookupAccountNameW output buffers and do it for real. */
-            cbSid = fRc && cbSid != 0 ? cbSid + 16 : _1K;
-            PSID pSid = (PSID)RTMemAllocZ(cbSid);
-            if (pSid)
+            if (!fRc)
             {
-                cwcDomain = fRc ? cwcDomain + 2 : _512K;
-                PRTUTF16 pwszDomain = (PRTUTF16)RTMemAllocZ(cwcDomain * sizeof(RTUTF16));
-                if (pwszDomain)
+                dwErr = GetLastError();
+
+#ifndef IPRT_TARGET_NT4
+                /*
+                 * The errors ERROR_TRUSTED_DOMAIN_FAILURE and ERROR_TRUSTED_RELATIONSHIP_FAILURE
+                 * can happen if an ADC (Active Domain Controller) is offline or not reachable.
+                 *
+                 * Try to handle these errors gracefully by asking the local LSA cache of the
+                 * client OS instead then. For this to work, the desired user must have at
+                 * least logged in once at that client -- otherwise there will be no cached
+                 * authentication available and this fallback will fail.
+                 */
+                if (   g_pfnLsaLookupNames2 /* >= Windows XP */
+                    && (   dwErr == ERROR_TRUSTED_DOMAIN_FAILURE
+                        || dwErr == ERROR_TRUSTED_RELATIONSHIP_FAILURE))
                 {
-                    /* Note: Also supports FQDNs! */
-                    if (   LookupAccountNameW(NULL /*lpSystemName*/, pwszUser, pSid, &cbSid, pwszDomain, &cwcDomain, &SidNameUse)
-                        && IsValidSid(pSid))
+                    LSA_OBJECT_ATTRIBUTES objAttr;
+                    RT_ZERO(objAttr);
+                    objAttr.Length = sizeof(LSA_OBJECT_ATTRIBUTES);
+
+                    LSA_HANDLE lsahPolicy;
+                    NTSTATUS ntSts = LsaOpenPolicy(NULL, &objAttr, POLICY_LOOKUP_NAMES, &lsahPolicy);
+                    if (ntSts == STATUS_SUCCESS)
                     {
-                        /* Array of process names we want to look for. */
-                        static const char * const s_papszProcNames[] =
+                        RTPROCWINACCOUNTINFO accountInfo;
+                        RT_ZERO(accountInfo);
+                        rc = rtProcWinParseAccountInfo(pwszUser, &accountInfo);
+                        AssertRC(rc);
+                        AssertPtr(accountInfo.pwszUserName);
+
+                        LSA_UNICODE_STRING lsaUser;
+                        lsaUser.Buffer        = accountInfo.pwszUserName;
+                        lsaUser.Length        = (USHORT)(RTUtf16Len(accountInfo.pwszUserName) * sizeof(WCHAR));
+                        lsaUser.MaximumLength = lsaUser.Length;
+
+                        PLSA_REFERENCED_DOMAIN_LIST pDomainList     = NULL;
+                        PLSA_TRANSLATED_SID2        pTranslatedSids = NULL;
+                        ntSts = g_pfnLsaLookupNames2(lsahPolicy, 0 /* Flags */,
+                                                     1 /* Number of users to lookup */,
+                                                     &lsaUser, &pDomainList, &pTranslatedSids);
+                        if (ntSts == STATUS_SUCCESS)
                         {
-#ifdef VBOX                 /* The explorer entry is a fallback in case GA aren't installed. */
-                            { "VBoxTray.exe" },
-#endif
-                            { "explorer.exe" },
-                            NULL
-                        };
-                        fFound = rtProcWinFindTokenByProcess(s_papszProcNames, pSid, &hTokenUserDesktop);
+                            AssertPtr(pDomainList);
+                            AssertPtr(pTranslatedSids);
+# ifdef DEBUG
+                            LogRelFunc(("LsaLookupNames2: cDomains=%u, DomainIndex=%ld, SidUse=%ld\n",
+                                        pDomainList->Entries, pTranslatedSids[0].DomainIndex, pTranslatedSids[0].Use));
+# endif
+                            Assert(pTranslatedSids[0].Use == SidTypeUser);
+
+                            if (pDomainList->Entries)
+                            {
+                                AssertPtr(pDomainList->Domains);
+                                LogRelFunc(("LsaLookupNames2: Domain=%ls\n",
+                                            pDomainList->Domains[pTranslatedSids[0].DomainIndex].Name.Buffer));
+                            }
+
+                            cbSid = GetLengthSid(pTranslatedSids->Sid) + 16;
+                            Assert(cbSid);
+                            pSid = (PSID)RTMemAllocZ(cbSid);
+                            if (!CopySid(cbSid, pSid, pTranslatedSids->Sid))
+                            {
+                                dwErr = GetLastError();
+                                LogRelFunc(("CopySid failed with: %ld\n", dwErr));
+                                rc = dwErr != NO_ERROR ? RTErrConvertFromWin32(dwErr) : VERR_INTERNAL_ERROR_2;
+                            }
+                        }
+                        else
+                        {
+                            dwErr = LsaNtStatusToWinError(ntSts);
+                            LogRelFunc(("LsaLookupNames2 failed with: %ld\n", dwErr));
+                            rc = dwErr != NO_ERROR ? RTErrConvertFromWin32(dwErr) : VERR_INTERNAL_ERROR_2;
+                        }
+
+                        if (pDomainList)
+                        {
+                            LsaFreeMemory(pDomainList);
+                            pDomainList = NULL;
+                        }
+                        if (pTranslatedSids)
+                        {
+                            LsaFreeMemory(pTranslatedSids);
+                            pTranslatedSids = NULL;
+                        }
+
+                        rtProcWinFreeAccountInfo(&accountInfo);
+                        LsaClose(lsahPolicy);
                     }
                     else
                     {
-                        dwErr = GetLastError();
+                        dwErr = LsaNtStatusToWinError(ntSts);
+                        LogRelFunc(("LsaOpenPolicy failed with: %ld\n", dwErr));
                         rc = dwErr != NO_ERROR ? RTErrConvertFromWin32(dwErr) : VERR_INTERNAL_ERROR_3;
                     }
-                    RTMemFree(pwszDomain);
+
+                    /* Note: pSid will be free'd down below. */
                 }
+                else
+#endif /* !IPRT_TARGET_NT4 */
+                if (dwErr == ERROR_INSUFFICIENT_BUFFER)
+                {
+                    /* Allocate memory for the LookupAccountNameW output buffers and do it for real. */
+                    cbSid = fRc && cbSid != 0 ? cbSid + 16 : _1K;
+                    pSid = (PSID)RTMemAllocZ(cbSid);
+                    if (pSid)
+                    {
+                        cwcDomain = fRc ? cwcDomain + 2 : _4K;
+                        PRTUTF16 pwszDomain = (PRTUTF16)RTMemAllocZ(cwcDomain * sizeof(RTUTF16));
+                        if (pwszDomain)
+                        {
+                            /* Note: Just pass in the UPN (User Principal Name), e.g. someone at example.com */
+                            if (!LookupAccountNameW(NULL /*lpSystemName*/, pwszUser, pSid, &cbSid, pwszDomain, &cwcDomain,
+                                                    &SidNameUse))
+                            {
+                                dwErr = GetLastError();
+                                LogRelFunc(("LookupAccountNameW(2) failed with: %ld\n", dwErr));
+                                rc = dwErr != NO_ERROR ? RTErrConvertFromWin32(dwErr) : VERR_INTERNAL_ERROR_4;
+                            }
+
+                            RTMemFree(pwszDomain);
+                        }
+                        else
+                            rc = VERR_NO_MEMORY;
+
+                        /* Note: pSid will be free'd down below. */
+                    }
+                    else
+                        rc = VERR_NO_MEMORY;
+                }
+                else
+                {
+                    LogRelFunc(("LookupAccountNameW(1) failed with: %ld\n", dwErr));
+                    rc = dwErr != NO_ERROR ? RTErrConvertFromWin32(dwErr) : VERR_INTERNAL_ERROR_2;
+                }
+            }
+
+            if (pSid)
+            {
+                if (IsValidSid(pSid))
+                {
+                    /* Array of process names we want to look for. */
+                    static const char * const s_papszProcNames[] =
+                    {
+#ifdef VBOX             /* The explorer entry is a fallback in case GA aren't installed. */
+                        { "VBoxTray.exe" },
+#endif
+                        { "explorer.exe" },
+                        NULL
+                    };
+                    fFound = rtProcWinFindTokenByProcess(s_papszProcNames, pSid, &hTokenUserDesktop);
+                    dwErr  = 0;
+                }
+                else
+                {
+                    dwErr = GetLastError();
+                    LogRelFunc(("SID is invalid: %ld\n", dwErr));
+                    rc = dwErr != NO_ERROR ? RTErrConvertFromWin32(dwErr) : VERR_INTERNAL_ERROR_3;
+                }
+
                 RTMemFree(pSid);
             }
         }
@@ -1485,11 +1733,13 @@ static int rtProcWinCreateAsUser2(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTU
 
         if (hTokenUserDesktop != INVALID_HANDLE_VALUE)
             CloseHandle(hTokenUserDesktop);
-        CloseHandle(hTokenLogon);
+        if (hTokenLogon != INVALID_HANDLE_VALUE)
+            CloseHandle(hTokenLogon);
 
         if (rc == VERR_UNRESOLVED_ERROR)
             LogRelFunc(("dwErr=%u (%#x), rc=%Rrc\n", dwErr, dwErr, rc));
     }
+
     return rc;
 }
 
@@ -1617,9 +1867,9 @@ static int rtProcWinCreateAsUser1(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTU
      */
     else
     {
-        RTENV  hEnvToUse = NIL_RTENV;
-        HANDLE hToken;
-        rc = rtProcWinUserLogon(pwszUser, pwszPassword, NULL /* Domain */, &hToken);
+        RTENV  hEnvToUse   = NIL_RTENV;
+        HANDLE hTokenLogon = INVALID_HANDLE_VALUE;
+        rc = rtProcWinUserLogon(pwszUser, pwszPassword, &hTokenLogon);
         if (RT_SUCCESS(rc))
         {
             /* CreateEnvFromToken docs says we should load the profile, though
@@ -1631,12 +1881,12 @@ static int rtProcWinCreateAsUser1(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTU
             ProfileInfo.lpUserName = pwszUser;
             ProfileInfo.dwFlags    = PI_NOUI; /* Prevents the display of profile error messages. */
 
-            if (g_pfnLoadUserProfileW(hToken, &ProfileInfo))
+            if (g_pfnLoadUserProfileW(hTokenLogon, &ProfileInfo))
             {
                 /*
                  * Do what we need to do.  Don't keep any temp environment object.
                  */
-                rc = rtProcWinCreateEnvFromToken(hToken, hEnv, fFlags, &hEnvToUse);
+                rc = rtProcWinCreateEnvFromToken(hTokenLogon, hEnv, fFlags, &hEnvToUse);
                 if (RT_SUCCESS(rc))
                 {
                     rc = rtProcWinFindExe(fFlags, hEnv, pszExec, ppwszExec);
@@ -1646,12 +1896,14 @@ static int rtProcWinCreateAsUser1(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTU
                         RTEnvDestroy(hEnvToUse);
                 }
 
-                if (!g_pfnUnloadUserProfile(hToken, ProfileInfo.hProfile))
+                if (!g_pfnUnloadUserProfile(hTokenLogon, ProfileInfo.hProfile))
                     AssertFailed();
             }
             else
                 rc = RTErrConvertFromWin32(GetLastError());
-            CloseHandle(hToken);
+
+            if (hTokenLogon != INVALID_HANDLE_VALUE)
+                CloseHandle(hTokenLogon);
         }
     }
     if (RT_SUCCESS(rc))
@@ -1707,7 +1959,7 @@ static int rtProcWinCreateAsUser1(PRTUTF16 pwszUser, PRTUTF16 pwszPassword, PRTU
             DWORD dwErr = GetLastError();
             rc = RTErrConvertFromWin32(dwErr);
             if (rc == VERR_UNRESOLVED_ERROR)
-                LogRelFunc(("g_pfnCreateProcessWithLogonW (%p) failed: dwErr=%u (%#x), rc=%Rrc\n",
+                LogRelFunc(("CreateProcessWithLogonW (%p) failed: dwErr=%u (%#x), rc=%Rrc\n",
                             g_pfnCreateProcessWithLogonW, dwErr, dwErr, rc));
         }
         if (pwszzBlock)
@@ -2042,7 +2294,7 @@ RTR3DECL(int)   RTProcCreateEx(const char *pszExec, const char * const *papszArg
                                        TRUE,         /* fInheritHandles */
                                        dwCreationFlags,
                                        pwszzBlock,
-                                       NULL,          /* pCurrentDirectory */
+                                       NULL,         /* pCurrentDirectory */
                                        &StartupInfo,
                                        &ProcInfo))
                         rc = VINF_SUCCESS;
diff --git a/src/VBox/Runtime/win/RTErrConvertFromWin32.cpp b/src/VBox/Runtime/win/RTErrConvertFromWin32.cpp
index b91f17b..475983f 100644
--- a/src/VBox/Runtime/win/RTErrConvertFromWin32.cpp
+++ b/src/VBox/Runtime/win/RTErrConvertFromWin32.cpp
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (C) 2006-2015 Oracle Corporation
+ * Copyright (C) 2006-2016 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
  * available from http://www.virtualbox.org. This file is free software;
@@ -192,6 +192,9 @@ RTR3DECL(int)  RTErrConvertFromWin32(unsigned uNativeCode)
         case ERROR_USER_MAPPED_FILE:        return VERR_SHARING_VIOLATION;
         case ERROR_DIRECTORY:               return VERR_NOT_A_DIRECTORY;
 
+        case ERROR_TRUSTED_RELATIONSHIP_FAILURE:
+        case ERROR_TRUSTED_DOMAIN_FAILURE:
+                                            return VERR_AUTHENTICATION_FAILURE;
         case ERROR_LOGON_FAILURE:           return VERR_AUTHENTICATION_FAILURE;
         case ERROR_PRIVILEGE_NOT_HELD:      return VERR_PRIVILEGE_NOT_HELD;
 
diff --git a/src/VBox/VMM/VMMAll/GIMAllHv.cpp b/src/VBox/VMM/VMMAll/GIMAllHv.cpp
index 65ac17f..2288d91 100644
--- a/src/VBox/VMM/VMMAll/GIMAllHv.cpp
+++ b/src/VBox/VMM/VMMAll/GIMAllHv.cpp
@@ -142,16 +142,13 @@ VMM_INT_DECL(VBOXSTRICTRC) gimHvReadMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSRR
             return VINF_SUCCESS;
 
         case MSR_GIM_HV_TPR:
-            PDMApicReadMSR(pVM, pVCpu->idCpu, 0x80, puValue);
-            return VINF_SUCCESS;
+            return PDMApicReadMSR(pVM, pVCpu->idCpu, MSR_IA32_X2APIC_TPR, puValue);
 
         case MSR_GIM_HV_EOI:
-            PDMApicReadMSR(pVM, pVCpu->idCpu, 0x0B, puValue);
-            return VINF_SUCCESS;
+            return PDMApicReadMSR(pVM, pVCpu->idCpu, MSR_IA32_X2APIC_EOI, puValue);
 
         case MSR_GIM_HV_ICR:
-            PDMApicReadMSR(pVM, pVCpu->idCpu, 0x30, puValue);
-            return VINF_SUCCESS;
+            return PDMApicReadMSR(pVM, pVCpu->idCpu, MSR_IA32_X2APIC_ICR, puValue);
 
         case MSR_GIM_HV_GUEST_OS_ID:
             *puValue = pHv->u64GuestOsIdMsr;
@@ -228,16 +225,13 @@ VMM_INT_DECL(VBOXSTRICTRC) gimHvWriteMsr(PVMCPU pVCpu, uint32_t idMsr, PCCPUMMSR
     switch (idMsr)
     {
         case MSR_GIM_HV_TPR:
-            PDMApicWriteMSR(pVM, pVCpu->idCpu, 0x80, uRawValue);
-            return VINF_SUCCESS;
+            return PDMApicWriteMSR(pVM, pVCpu->idCpu, MSR_IA32_X2APIC_TPR, uRawValue);
 
         case MSR_GIM_HV_EOI:
-            PDMApicWriteMSR(pVM, pVCpu->idCpu, 0x0B, uRawValue);
-            return VINF_SUCCESS;
+            return PDMApicWriteMSR(pVM, pVCpu->idCpu, MSR_IA32_X2APIC_EOI, uRawValue);
 
         case MSR_GIM_HV_ICR:
-            PDMApicWriteMSR(pVM, pVCpu->idCpu, 0x30, uRawValue);
-            return VINF_SUCCESS;
+            return PDMApicWriteMSR(pVM, pVCpu->idCpu, MSR_IA32_X2APIC_ICR, uRawValue);
 
         case MSR_GIM_HV_GUEST_OS_ID:
         {
diff --git a/src/VBox/VMM/VMMR0/HMSVMR0.cpp b/src/VBox/VMM/VMMR0/HMSVMR0.cpp
index 0e5b29d..8d66993 100644
--- a/src/VBox/VMM/VMMR0/HMSVMR0.cpp
+++ b/src/VBox/VMM/VMMR0/HMSVMR0.cpp
@@ -5485,6 +5485,7 @@ HMSVM_EXIT_DECL hmR0SvmExitXcptAC(PVMCPU pVCpu, PCPUMCTX pCtx, PSVMTRANSIENT pSv
     Event.n.u1Valid  = 1;
     Event.n.u3Type   = SVM_EVENT_EXCEPTION;
     Event.n.u8Vector = X86_XCPT_AC;
+    Event.n.u1ErrorCodeValid = 1;
     hmR0SvmSetPendingEvent(pVCpu, &Event, 0 /* GCPtrFaultAddress */);
     return VINF_SUCCESS;
 }
diff --git a/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp b/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
index d318b69..ba87082 100644
--- a/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
+++ b/src/VBox/VMM/VMMR3/CPUMR3CpuId.cpp
@@ -6176,7 +6176,7 @@ DECLCALLBACK(void) cpumR3CpuIdInfo(PVM pVM, PCDBGFINFOHLP pHlp, const char *pszA
                             (uEAX >> 16) & 0xff);
             pHlp->pfnPrintf(pHlp,
                             "Physical Core Count:             %d\n",
-                            (uECX >> 0) & 0xff);
+                            ((uECX >> 0) & 0xff) + 1);
         }
 
         pCurLeaf = pNextLeaf;
diff --git a/src/VBox/VMM/VMMR3/PDMDevHlp.cpp b/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
index 9de5ac4..504d036 100644
--- a/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
+++ b/src/VBox/VMM/VMMR3/PDMDevHlp.cpp
@@ -3538,7 +3538,6 @@ const PDMDEVHLPR3 g_pdmR3DevHlpTrusted =
     pdmR3DevHlp_ISASetIrq,
     pdmR3DevHlp_ISASetIrqNoWait,
     pdmR3DevHlp_DriverAttach,
-    pdmR3DevHlp_DriverDetach,
     pdmR3DevHlp_QueueCreate,
     pdmR3DevHlp_CritSectInit,
     pdmR3DevHlp_CritSectGetNop,
@@ -3571,7 +3570,7 @@ const PDMDEVHLPR3 g_pdmR3DevHlpTrusted =
     pdmR3DevHlp_CallR0,
     pdmR3DevHlp_VMGetSuspendReason,
     pdmR3DevHlp_VMGetResumeReason,
-    0,
+    pdmR3DevHlp_DriverDetach,
     0,
     0,
     0,
@@ -3790,7 +3789,6 @@ const PDMDEVHLPR3 g_pdmR3DevHlpUnTrusted =
     pdmR3DevHlp_ISASetIrq,
     pdmR3DevHlp_ISASetIrqNoWait,
     pdmR3DevHlp_DriverAttach,
-    pdmR3DevHlp_DriverDetach,
     pdmR3DevHlp_QueueCreate,
     pdmR3DevHlp_CritSectInit,
     pdmR3DevHlp_CritSectGetNop,
@@ -3823,7 +3821,7 @@ const PDMDEVHLPR3 g_pdmR3DevHlpUnTrusted =
     pdmR3DevHlp_CallR0,
     pdmR3DevHlp_VMGetSuspendReason,
     pdmR3DevHlp_VMGetResumeReason,
-    0,
+    pdmR3DevHlp_DriverDetach,
     0,
     0,
     0,
diff --git a/src/libs/Makefile.kmk b/src/libs/Makefile.kmk
index 9d1a116..be9d940 100644
--- a/src/libs/Makefile.kmk
+++ b/src/libs/Makefile.kmk
@@ -39,8 +39,8 @@ endif # !VBOX_ONLY_DOCS
 
 # Libcurl for inet access
 if defined(VBOX_WITH_LIBCURL) && !defined(VBOX_ONLY_EXTPACKS_USE_IMPLIBS) && !defined(VBOX_ONLY_SDK) && !defined(VBOX_ONLY_VALIDATIONKIT) \
- && "$(SDK_VBOX_LIBCURL_INCS)" == "$(PATH_ROOT)/src/libs/curl-7.45.0/include"
- include $(PATH_SUB_CURRENT)/curl-7.45.0/Makefile.kmk
+ && "$(SDK_VBOX_LIBCURL_INCS)" == "$(PATH_ROOT)/src/libs/curl-7.47.0/include"
+ include $(PATH_SUB_CURRENT)/curl-7.47.0/Makefile.kmk
 endif
 
 # The kStuff lib used by IPRT and the debugger.
@@ -52,7 +52,7 @@ endif
 if !defined(VBOX_ONLY_SDK) \
  && (   "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" \
      || defined(VBOX_WITH_EXTPACK_PUEL_BUILD))
- include $(PATH_SUB_CURRENT)/openssl-1.0.1q/Makefile.kmk
+ include $(PATH_SUB_CURRENT)/openssl-1.0.1s/Makefile.kmk
 endif
 
 # libjpeg for VRDP video redirection and ExtPack's DrvHostWebCam

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