diff --git a/samples/vboxwrapper/vbox.cpp b/samples/vboxwrapper/vbox.cpp
index 100b88817ebf325402908d214bf48e812fe4934f..53ad7e58bc1cfc193b90069b976d330761d80cc1 100644
--- a/samples/vboxwrapper/vbox.cpp
+++ b/samples/vboxwrapper/vbox.cpp
@@ -77,7 +77,6 @@ VBOX_BASE::VBOX_BASE() {
     vm_disk_controller_type.clear();
     vm_disk_controller_model.clear();
     os_name.clear();
-    vm_memory_size_mb.clear();
     memory_size_mb = 0.0;
     image_filename.clear();
     iso_image_filename.clear();
diff --git a/samples/vboxwrapper/vbox.h b/samples/vboxwrapper/vbox.h
index d7dc986d947373a7d5d3179ec75533c5c2aba638..f40c2cb7eb922417590c2ba08a80502edd02aa9f 100644
--- a/samples/vboxwrapper/vbox.h
+++ b/samples/vboxwrapper/vbox.h
@@ -107,8 +107,6 @@ public:
         // unique name for the VM or UUID of a stale VM if deregistering it
     std::string vm_cpu_count;
         // required CPU core count
-    std::string vm_memory_size_mb;
-        // required size of the memory allocation for the VM, in megabytes
     std::string image_filename;
         // name of the virtual machine disk image file
     std::string iso_image_filename;
diff --git a/samples/vboxwrapper/vbox_win.cpp b/samples/vboxwrapper/vbox_win.cpp
index 06de563d331ef0acd690c10bd5a7361539c287e0..b844ff806ba9b3d485294e3bbaaa9b7b5916aa91 100644
--- a/samples/vboxwrapper/vbox_win.cpp
+++ b/samples/vboxwrapper/vbox_win.cpp
@@ -16,8 +16,15 @@
 // along with BOINC.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "boinc_win.h"
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define stricmp     _stricmp
+#endif
+
 #include "win_util.h"
 #include "atlcomcli.h"
+#include "atlsafe.h"
+#include "atlcoll.h"
 #include "atlstr.h"
 #include "mscom/VirtualBox.h"
 #include "diagnostics.h"
@@ -262,14 +269,25 @@ int VBOX_VM::initialize() {
 }
 
 int VBOX_VM::create_vm() {
-    string command;
-    string output;
-    string virtual_machine_slot_directory;
-    string default_interface;
+    int retval = ERR_EXEC;
+    HRESULT rc;
+    char buf[256];
     APP_INIT_DATA aid;
+    CComBSTR vm_machine_uuid;
+    CComPtr<IBIOSSettings> pBIOSSettings;
+    CComPtr<INetworkAdapter> pNetworkAdapter;
+    CComPtr<INATEngine> pNATEngine;
+    CComPtr<ISerialPort> pSerialPort;
+    CComPtr<IParallelPort> pParallelPort;
+    CComPtr<IAudioAdapter> pAudioAdapter;
+    CComPtr<IStorageController> pDiskController;
+    CComPtr<IStorageController> pFloppyController;
+    CComPtr<IBandwidthControl> pBandwidthControl;
+    CComPtr<IVRDEServer> pVRDEServer;
+    ULONG lOHCICtrls = 0;
     bool disable_acceleration = false;
-    char buf[256];
-    int retval;
+    string virtual_machine_slot_directory;
+    string default_interface;
 
     boinc_get_init_data_p(&aid);
     get_slot_directory(virtual_machine_slot_directory);
@@ -279,15 +297,6 @@ int VBOX_VM::create_vm() {
     //
     vm_name = vm_master_name;
 
-
-    fprintf(
-        stderr,
-        "%s Create VM. (%s, slot#%d) \n",
-        vboxwrapper_msg_prefix(buf, sizeof(buf)),
-        vm_name.c_str(),
-        aid.slot
-    );
-
     // Fixup chipset and drive controller information for known configurations
     //
     if (enable_isocontextualization) {
@@ -302,51 +311,205 @@ int VBOX_VM::create_vm() {
         }
     }
 
-    // Create and register the VM
+    // Start the VM creation process
     //
-    command  = "createvm ";
-    command += "--name \"" + vm_name + "\" ";
-    command += "--basefolder \"" + virtual_machine_slot_directory + "\" ";
-    command += "--ostype \"" + os_name + "\" ";
-    command += "--register";
-    
-    retval = vbm_popen(command, output, "create");
-    if (retval) return retval;
+    fprintf(
+        stderr,
+        "%s Create VM. (%s, slot#%d) \n",
+        vboxwrapper_msg_prefix(buf, sizeof(buf)),
+        vm_name.c_str(),
+        aid.slot
+    );
+
+    rc = m_pVirtualBox->CreateMachine(
+        CComBSTR(string(virtual_machine_slot_directory + string("/") + vm_name + string(".vbox")).c_str()),
+        CComBSTR(vm_name.c_str()),
+        NULL,
+        CComBSTR(os_name.c_str()),
+        CComBSTR(""),
+        &m_pMachine
+    );
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error creating virtual machine instance! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
 
-    // Tweak the VM's Description
+    // Register the VM. Note that this call also saves the VM config
+    // to disk. It is also possible to save the VM settings but not
+    // register the VM.
+    //
+    // Also note that due to current VirtualBox limitations, the machine
+    // must be registered *before* we can attach hard disks to it.
     //
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--description \"" + vm_master_description + "\" ";
+    rc = m_pVirtualBox->RegisterMachine(m_pMachine);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error registering virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
+    
+    rc = m_pMachine->LockMachine(m_pSession, LockType_Write);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error locking virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
+
+    rc = m_pSession->get_Machine(&m_pMachine);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error retrieving mutable virtual machine object! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
 
-    vbm_popen(command, output, "modifydescription", false, false);
 
-    // Tweak the VM's CPU Count
+    rc = m_pMachine->get_BIOSSettings(&pBIOSSettings);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error retrieving the BIOS settings for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
+
+    rc = m_pMachine->get_BandwidthControl(&pBandwidthControl);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error retrieving the Bandwidth Control settings for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
+
+    rc = m_pMachine->get_VRDEServer(&pVRDEServer);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error retrieving the Remote Desktop settings for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
+
+    rc = m_pMachine->GetNetworkAdapter(0, &pNetworkAdapter);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error retrieving the Network Adapter for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
+
+    rc = pNetworkAdapter->get_NATEngine(&pNATEngine);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error retrieving the NAT Engine for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
+
+    rc = m_pMachine->get_AudioAdapter(&pAudioAdapter);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error retrieving the Audio Adapter for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
+
+    // Set some properties
+    m_pMachine->put_Description(CComBSTR(vm_master_description.c_str()));
+
+    // Tweak the VM's Memory Size
     //
     fprintf(
         stderr,
-        "%s Setting CPU Count for VM. (%s)\n",
+        "%s Setting Memory Size for VM. (%dMB)\n",
         vboxwrapper_msg_prefix(buf, sizeof(buf)),
-        vm_cpu_count.c_str()
+        (int)memory_size_mb
     );
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--cpus " + vm_cpu_count + " ";
-
-    retval = vbm_popen(command, output, "modifycpu");
-    if (retval) return retval;
+    rc = m_pMachine->put_MemorySize((int)(memory_size_mb*1024));
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error memory size for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
 
-    // Tweak the VM's Memory Size
+    // Tweak the VM's CPU Count
     //
     fprintf(
         stderr,
-        "%s Setting Memory Size for VM. (%sMB)\n",
+        "%s Setting CPU Count for VM. (%s)\n",
         vboxwrapper_msg_prefix(buf, sizeof(buf)),
-        vm_memory_size_mb.c_str()
+        vm_cpu_count.c_str()
     );
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--memory " + vm_memory_size_mb + " ";
-
-    retval = vbm_popen(command, output, "modifymem");
-    if (retval) return retval;
+    rc = m_pMachine->put_CPUCount((int)atoi(vm_cpu_count.c_str()));
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error CPU count for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
 
     // Tweak the VM's Chipset Options
     //
@@ -355,12 +518,31 @@ int VBOX_VM::create_vm() {
         "%s Setting Chipset Options for VM.\n",
         vboxwrapper_msg_prefix(buf, sizeof(buf))
     );
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--acpi on ";
-    command += "--ioapic on ";
+    rc = pBIOSSettings->put_ACPIEnabled(TRUE);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error setting ACPI enabled for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
 
-    retval = vbm_popen(command, output, "modifychipset");
-    if (retval) return retval;
+    rc = pBIOSSettings->put_IOAPICEnabled(TRUE);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error setting IOAPIC enabled for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
 
     // Tweak the VM's Boot Options
     //
@@ -369,29 +551,74 @@ int VBOX_VM::create_vm() {
         "%s Setting Boot Options for VM.\n",
         vboxwrapper_msg_prefix(buf, sizeof(buf))
     );
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--boot1 disk ";
-    command += "--boot2 dvd ";
-    command += "--boot3 none ";
-    command += "--boot4 none ";
+    rc = m_pMachine->SetBootOrder(1, DeviceType_HardDisk);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error setting hard disk boot order for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
+    
+    rc = m_pMachine->SetBootOrder(2, DeviceType_DVD);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error setting DVD boot order for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
 
-    retval = vbm_popen(command, output, "modifyboot");
-    if (retval) return retval;
+    m_pMachine->SetBootOrder(3, DeviceType_Null);
+    m_pMachine->SetBootOrder(4, DeviceType_Null);
 
     // Tweak the VM's Network Configuration
     //
+    fprintf(
+        stderr,
+        "%s Disconnecting VM Network Access.\n",
+        vboxwrapper_msg_prefix(buf, sizeof(buf))
+    );
+    rc = pNetworkAdapter->put_Enabled(FALSE);
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error disabling network access for the virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
+    }
+
     if (network_bridged_mode) {
+
         fprintf(
             stderr,
             "%s Setting Network Configuration for Bridged Mode.\n",
             vboxwrapper_msg_prefix(buf, sizeof(buf))
         );
-        command  = "modifyvm \"" + vm_name + "\" ";
-        command += "--nic1 bridged ";
-        command += "--cableconnected1 off ";
-
-        retval = vbm_popen(command, output, "set bridged mode");
-        if (retval) return retval;
+        rc = pNetworkAdapter->put_AttachmentType(NetworkAttachmentType_Bridged);
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error setting network configuration for the virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
         get_default_network_interface(default_interface);
         fprintf(
@@ -400,26 +627,51 @@ int VBOX_VM::create_vm() {
             vboxwrapper_msg_prefix(buf, sizeof(buf)),
             default_interface.c_str()
         );
-        command  = "modifyvm \"" + vm_name + "\" ";
-        command += "--bridgeadapter1 \"";
-        command += default_interface;
-        command += "\" ";
+        rc = pNetworkAdapter->put_BridgedInterface(CComBSTR(CA2W(default_interface.c_str())));
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error setting network configuration (brigded interface) for the virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
-        retval = vbm_popen(command, output, "set bridged interface");
-        if (retval) return retval;
     } else {
+
         fprintf(
             stderr,
             "%s Setting Network Configuration for NAT.\n",
             vboxwrapper_msg_prefix(buf, sizeof(buf))
         );
-        command  = "modifyvm \"" + vm_name + "\" ";
-        command += "--nic1 nat ";
-        command += "--natdnsproxy1 on ";
-        command += "--cableconnected1 off ";
+        rc = pNetworkAdapter->put_AttachmentType(NetworkAttachmentType_NAT);
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error setting network configuration for the virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
-        retval = vbm_popen(command, output, "modifynetwork");
-        if (retval) return retval;
+        rc = pNATEngine->put_DNSProxy(TRUE);
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error setting network configuration (DNS Proxy) for the virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
     }
 
     // Tweak the VM's USB Configuration
@@ -429,10 +681,10 @@ int VBOX_VM::create_vm() {
         "%s Disabling USB Support for VM.\n",
         vboxwrapper_msg_prefix(buf, sizeof(buf))
     );
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--usb off ";
-
-    vbm_popen(command, output, "modifyusb", false, false);
+    rc = m_pMachine->GetUSBControllerCountByType(USBControllerType_OHCI, &lOHCICtrls);
+    if (SUCCEEDED(rc) && lOHCICtrls) {
+        rc = m_pMachine->RemoveUSBController(CComBSTR("OHCI"));
+    }
 
     // Tweak the VM's COM Port Support
     //
@@ -441,11 +693,14 @@ int VBOX_VM::create_vm() {
         "%s Disabling COM Port Support for VM.\n",
         vboxwrapper_msg_prefix(buf, sizeof(buf))
     );
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--uart1 off ";
-    command += "--uart2 off ";
-
-    vbm_popen(command, output, "modifycom", false, false);
+    rc = m_pMachine->GetSerialPort(0, &pSerialPort);
+    if (SUCCEEDED(rc)) {
+        pSerialPort->put_Enabled(FALSE);
+    }
+    rc = m_pMachine->GetSerialPort(1, &pSerialPort);
+    if (SUCCEEDED(rc)) {
+        pSerialPort->put_Enabled(FALSE);
+    }
 
     // Tweak the VM's LPT Port Support
     //
@@ -454,11 +709,14 @@ int VBOX_VM::create_vm() {
         "%s Disabling LPT Port Support for VM.\n",
         vboxwrapper_msg_prefix(buf, sizeof(buf))
     );
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--lpt1 off ";
-    command += "--lpt2 off ";
-
-    vbm_popen(command, output, "modifylpt", false, false);
+    rc = m_pMachine->GetParallelPort(0, &pParallelPort);
+    if (SUCCEEDED(rc)) {
+        pParallelPort->put_Enabled(FALSE);
+    }
+    rc = m_pMachine->GetParallelPort(1, &pParallelPort);
+    if (SUCCEEDED(rc)) {
+        pParallelPort->put_Enabled(FALSE);
+    }
 
     // Tweak the VM's Audio Support
     //
@@ -467,10 +725,7 @@ int VBOX_VM::create_vm() {
         "%s Disabling Audio Support for VM.\n",
         vboxwrapper_msg_prefix(buf, sizeof(buf))
     );
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--audio none ";
-
-    vbm_popen(command, output, "modifyaudio", false, false);
+    pAudioAdapter->put_Enabled(FALSE);
 
     // Tweak the VM's Clipboard Support
     //
@@ -479,10 +734,7 @@ int VBOX_VM::create_vm() {
         "%s Disabling Clipboard Support for VM.\n",
         vboxwrapper_msg_prefix(buf, sizeof(buf))
     );
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--clipboard disabled ";
-
-    vbm_popen(command, output, "modifyclipboard", false, false);
+    m_pMachine->put_ClipboardMode(ClipboardMode_Disabled);
 
     // Tweak the VM's Drag & Drop Support
     //
@@ -491,10 +743,7 @@ int VBOX_VM::create_vm() {
         "%s Disabling Drag and Drop Support for VM.\n",
         vboxwrapper_msg_prefix(buf, sizeof(buf))
     );
-    command  = "modifyvm \"" + vm_name + "\" ";
-    command += "--draganddrop disabled ";
-
-    vbm_popen(command, output, "modifydragdrop", false, false);
+    m_pMachine->put_DragAndDropMode(DragAndDropMode_Disabled);
 
     // Check to see if the processor supports hardware acceleration for virtualization
     // If it doesn't, disable the use of it in VirtualBox. Multi-core jobs require hardware
@@ -547,66 +796,138 @@ int VBOX_VM::create_vm() {
         if (disable_acceleration) {
             fprintf(
                 stderr,
-                "%s Disabling hardware acceleration support for virtualization.\n",
-                vboxwrapper_msg_prefix(buf, sizeof(buf))
+                "%s Disabling hardware acceleration support for virtualization.\n",
+                vboxwrapper_msg_prefix(buf, sizeof(buf))
+            );
+            rc = m_pMachine->SetHWVirtExProperty(HWVirtExPropertyType_Enabled, FALSE);
+            if (FAILED(rc)) {
+                fprintf(
+                    stderr,
+                    "%s Error disabling hardware acceleration support for the virtual machine! rc = 0x%x\n",
+                    boinc_msg_prefix(buf, sizeof(buf)),
+                    rc
+                );
+                virtualbox_dump_error();
+                retval = rc;
+                goto CLEANUP;
+            }
+        }
+    } else if (os_name.find("_64") != std::string::npos) {
+        if (disable_acceleration) {
+            fprintf(
+                stderr,
+                "%s ERROR: Invalid configuration.  VM type requires acceleration but the current configuration cannot support it.\n",
+                vboxwrapper_msg_prefix(buf, sizeof(buf))
+            );
+            return ERR_INVALID_PARAM;
+        }
+    }
+
+    // Add storage controller to VM
+    // See: http://www.virtualbox.org/manual/ch08.html#vboxmanage-storagectl
+    // See: http://www.virtualbox.org/manual/ch05.html#iocaching
+    //
+    fprintf(
+        stderr,
+        "%s Adding storage controller(s) to VM.\n",
+        vboxwrapper_msg_prefix(buf, sizeof(buf))
+    );
+    pDiskController;
+    pFloppyController;
+    if (0 == stricmp(vm_disk_controller_type.c_str(), "ide")) {
+        rc = m_pMachine->AddStorageController(CComBSTR("Hard Disk Controller"), StorageBus_IDE, &pDiskController);
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding storage controller (IDE) to the virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
+    }
+    if (0 == stricmp(vm_disk_controller_type.c_str(), "sata")) {
+        rc = m_pMachine->AddStorageController(CComBSTR("Hard Disk Controller"), StorageBus_SATA, &pDiskController);
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding storage controller (SATA) to the virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
+        pDiskController->put_UseHostIOCache(FALSE);
+        pDiskController->put_PortCount(3);
+    }
+    if (0 == stricmp(vm_disk_controller_type.c_str(), "sas")) {
+        rc = m_pMachine->AddStorageController(CComBSTR("Hard Disk Controller"), StorageBus_SAS, &pDiskController);
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding storage controller (SAS) to the virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
             );
-            command  = "modifyvm \"" + vm_name + "\" ";
-            command += "--hwvirtex off ";
-
-            retval = vbm_popen(command, output, "VT-x/AMD-V support");
-            if (retval) return retval;
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
         }
-    } else if (os_name.find("_64") != std::string::npos) {
-        if (disable_acceleration) {
+        pDiskController->put_UseHostIOCache(FALSE);
+    }
+    if (0 == stricmp(vm_disk_controller_type.c_str(), "scsi")) {
+        rc = m_pMachine->AddStorageController(CComBSTR("Hard Disk Controller"), StorageBus_SCSI, &pDiskController);
+        if (FAILED(rc)) {
             fprintf(
                 stderr,
-                "%s ERROR: Invalid configuration.  VM type requires acceleration but the current configuration cannot support it.\n",
-                vboxwrapper_msg_prefix(buf, sizeof(buf))
+                "%s Error adding storage controller (SCSI) to the virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
             );
-            return ERR_INVALID_PARAM;
-        }
-    }
-
-    // Add storage controller to VM
-    // See: http://www.virtualbox.org/manual/ch08.html#vboxmanage-storagectl
-    // See: http://www.virtualbox.org/manual/ch05.html#iocaching
-    //
-    fprintf(
-        stderr,
-        "%s Adding storage controller to VM.\n",
-        vboxwrapper_msg_prefix(buf, sizeof(buf))
-    );
-    command  = "storagectl \"" + vm_name + "\" ";
-    command += "--name \"Hard Disk Controller\" ";
-    command += "--add \"" + vm_disk_controller_type + "\" ";
-    command += "--controller \"" + vm_disk_controller_model + "\" ";
-    if (
-         (vm_disk_controller_type == "sata") || (vm_disk_controller_type == "SATA") ||
-         (vm_disk_controller_type == "scsi") || (vm_disk_controller_type == "SCSI") ||
-         (vm_disk_controller_type == "sas") || (vm_disk_controller_type == "SAS")
-    ) {
-        command += "--hostiocache off ";
-    }
-    if ((vm_disk_controller_type == "sata") || (vm_disk_controller_type == "SATA")) {
-        if (is_virtualbox_version_newer(4, 3, 0)) {
-            command += "--portcount 3";
-        } else {
-            command += "--sataportcount 3";
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
         }
+        pDiskController->put_UseHostIOCache(FALSE);
+    }
+
+    if (0 == stricmp(vm_disk_controller_model.c_str(), "lsilogic")) {
+        pDiskController->put_ControllerType(StorageControllerType_LsiLogic);
+    } else if (0 == stricmp(vm_disk_controller_model.c_str(), "buslogic")) {
+        pDiskController->put_ControllerType(StorageControllerType_BusLogic);
+    } else if (0 == stricmp(vm_disk_controller_model.c_str(), "intelahci")) {
+        pDiskController->put_ControllerType(StorageControllerType_IntelAhci);
+    } else if (0 == stricmp(vm_disk_controller_model.c_str(), "piix3")) {
+        pDiskController->put_ControllerType(StorageControllerType_PIIX3);
+    } else if (0 == stricmp(vm_disk_controller_model.c_str(), "piix4")) {
+        pDiskController->put_ControllerType(StorageControllerType_PIIX4);
+    } else if (0 == stricmp(vm_disk_controller_model.c_str(), "ich6")) {
+        pDiskController->put_ControllerType(StorageControllerType_ICH6);
+    } else if (0 == stricmp(vm_disk_controller_model.c_str(), "i82078")) {
+        pDiskController->put_ControllerType(StorageControllerType_I82078);
+    } else if (0 == stricmp(vm_disk_controller_model.c_str(), "lsilogicsas")) {
+        pDiskController->put_ControllerType(StorageControllerType_LsiLogicSas);
     }
 
-    retval = vbm_popen(command, output, "add storage controller (fixed disk)");
-    if (retval) return retval;
-
     // Add storage controller for a floppy device if desired
     //
     if (enable_floppyio) {
-        command  = "storagectl \"" + vm_name + "\" ";
-        command += "--name \"Floppy Controller\" ";
-        command += "--add floppy ";
-
-        retval = vbm_popen(command, output, "add storage controller (floppy)");
-        if (retval) return retval;
+        rc = m_pMachine->AddStorageController(CComBSTR("Floppy Controller"), StorageBus_Floppy, &pFloppyController);
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding storage controller (Floppy) to the virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
     }
 
     if (enable_isocontextualization) {
@@ -619,15 +940,44 @@ int VBOX_VM::create_vm() {
             vboxwrapper_msg_prefix(buf, sizeof(buf)),
             iso_image_filename.c_str()
         );
-        command  = "storageattach \"" + vm_name + "\" ";
-        command += "--storagectl \"Hard Disk Controller\" ";
-        command += "--port 0 ";
-        command += "--device 0 ";
-        command += "--type dvddrive ";
-        command += "--medium \"" + virtual_machine_slot_directory + "/" + iso_image_filename + "\" ";
+        CComPtr<IMedium> pISOImage;
+        rc = m_pVirtualBox->OpenMedium(
+            CComBSTR(string(virtual_machine_slot_directory + "/" + iso_image_filename).c_str()),
+            DeviceType_DVD,
+            AccessMode_ReadOnly,
+            FALSE,
+            &pISOImage
+        );
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding virtual ISO 9660 disk drive to VirtualBox! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
-        retval = vbm_popen(command, output, "storage attach (ISO 9660 image)");
-        if (retval) return retval;
+        rc = m_pMachine->AttachDevice(
+            CComBSTR("Hard Disk Controller"),
+            0,
+            0,
+            DeviceType_DVD,
+            pISOImage
+        );
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding virtual ISO 9660 disk drive to virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
         // Add guest additions to the VM
         //
@@ -636,15 +986,44 @@ int VBOX_VM::create_vm() {
             "%s Adding VirtualBox Guest Additions to VM.\n",
             vboxwrapper_msg_prefix(buf, sizeof(buf))
         );
-        command  = "storageattach \"" + vm_name + "\" ";
-        command += "--storagectl \"Hard Disk Controller\" ";
-        command += "--port 2 ";
-        command += "--device 0 ";
-        command += "--type dvddrive ";
-        command += "--medium \"" + virtualbox_guest_additions + "\" ";
+        CComPtr<IMedium> pGuestAdditionsImage;
+        rc = m_pVirtualBox->OpenMedium(
+            CComBSTR(virtualbox_guest_additions.c_str()),
+            DeviceType_DVD,
+            AccessMode_ReadOnly,
+            FALSE,
+            &pGuestAdditionsImage
+        );
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding VirtualBox Guest Additions to VirtualBox! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
-        retval = vbm_popen(command, output, "storage attach (guest additions image)");
-        if (retval) return retval;
+        rc = m_pMachine->AttachDevice(
+            CComBSTR("Hard Disk Controller"),
+            2,
+            0,
+            DeviceType_DVD,
+            pGuestAdditionsImage
+        );
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding VirtualBox Guest Additions to virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
         // Add a virtual cache disk drive to VM
         //
@@ -655,16 +1034,44 @@ int VBOX_VM::create_vm() {
                 vboxwrapper_msg_prefix(buf, sizeof(buf)),
     		    cache_disk_filename.c_str()
             );
-            command  = "storageattach \"" + vm_name + "\" ";
-            command += "--storagectl \"Hard Disk Controller\" ";
-            command += "--port 1 ";
-            command += "--device 0 ";
-            command += "--type hdd ";
-            command += "--setuuid \"\" ";
-            command += "--medium \"" + virtual_machine_slot_directory + "/" + cache_disk_filename + "\" ";
-
-            retval = vbm_popen(command, output, "storage attach (cached disk)");
-            if (retval) return retval;
+            CComPtr<IMedium> pCacheImage;
+            rc = m_pVirtualBox->OpenMedium(
+                CComBSTR(string(virtual_machine_slot_directory + "/" + cache_disk_filename).c_str()),
+                DeviceType_HardDisk,
+                AccessMode_ReadWrite,
+                TRUE,
+                &pCacheImage
+            );
+            if (FAILED(rc)) {
+                fprintf(
+                    stderr,
+                    "%s Error adding virtual cache disk drive to VirtualBox! rc = 0x%x\n",
+                    boinc_msg_prefix(buf, sizeof(buf)),
+                    rc
+                );
+                virtualbox_dump_error();
+                retval = rc;
+                goto CLEANUP;
+            }
+
+            rc = m_pMachine->AttachDevice(
+                CComBSTR("Hard Disk Controller"),
+                1,
+                0,
+                DeviceType_HardDisk,
+                pCacheImage
+            );
+            if (FAILED(rc)) {
+                fprintf(
+                    stderr,
+                    "%s Error adding virtual cache disk drive to virtual machine! rc = 0x%x\n",
+                    boinc_msg_prefix(buf, sizeof(buf)),
+                    rc
+                );
+                virtualbox_dump_error();
+                retval = rc;
+                goto CLEANUP;
+            }
         }
 
     } else {
@@ -677,16 +1084,44 @@ int VBOX_VM::create_vm() {
             vboxwrapper_msg_prefix(buf, sizeof(buf)),
 		    image_filename.c_str()
         );
-        command  = "storageattach \"" + vm_name + "\" ";
-        command += "--storagectl \"Hard Disk Controller\" ";
-        command += "--port 0 ";
-        command += "--device 0 ";
-        command += "--type hdd ";
-        command += "--setuuid \"\" ";
-        command += "--medium \"" + virtual_machine_slot_directory + "/" + image_filename + "\" ";
+        CComPtr<IMedium> pDiskImage;
+        rc = m_pVirtualBox->OpenMedium(
+            CComBSTR(string(virtual_machine_slot_directory + "/" + cache_disk_filename).c_str()),
+            DeviceType_HardDisk,
+            AccessMode_ReadWrite,
+            TRUE,
+            &pDiskImage
+        );
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding virtual disk drive to VirtualBox! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
-        retval = vbm_popen(command, output, "storage attach (fixed disk)");
-        if (retval) return retval;
+        rc = m_pMachine->AttachDevice(
+            CComBSTR("Hard Disk Controller"),
+            0,
+            0,
+            DeviceType_HardDisk,
+            pDiskImage
+        );
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding virtual disk drive to virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
         // Add guest additions to the VM
         //
@@ -695,35 +1130,45 @@ int VBOX_VM::create_vm() {
             "%s Adding VirtualBox Guest Additions to VM.\n",
             vboxwrapper_msg_prefix(buf, sizeof(buf))
         );
-        command  = "storageattach \"" + vm_name + "\" ";
-        command += "--storagectl \"Hard Disk Controller\" ";
-        command += "--port 1 ";
-        command += "--device 0 ";
-        command += "--type dvddrive ";
-        command += "--medium \"" + virtualbox_guest_additions + "\" ";
-
-        retval = vbm_popen(command, output, "storage attach (guest additions image)");
-        if (retval) return retval;
-
-    }
-
+        CComPtr<IMedium> pGuestAdditionsImage;
+        rc = m_pVirtualBox->OpenMedium(
+            CComBSTR(virtualbox_guest_additions.c_str()),
+            DeviceType_DVD,
+            AccessMode_ReadOnly,
+            FALSE,
+            &pGuestAdditionsImage
+        );
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding VirtualBox Guest Additions to VirtualBox! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
-    // Add network bandwidth throttle group
-    //
-    if (is_virtualbox_version_newer(4, 2, 0)) {
-        fprintf(
-            stderr,
-            "%s Adding network bandwidth throttle group to VM. (Defaulting to 1024GB)\n",
-            vboxwrapper_msg_prefix(buf, sizeof(buf))
+        rc = m_pMachine->AttachDevice(
+            CComBSTR("Hard Disk Controller"),
+            1,
+            0,
+            DeviceType_DVD,
+            pGuestAdditionsImage
         );
-        command  = "bandwidthctl \"" + vm_name + "\" ";
-        command += "add \"" + vm_name + "_net\" ";
-        command += "--type network ";
-        command += "--limit 1024G";
-        command += " ";
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding VirtualBox Guest Additions to virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
-        retval = vbm_popen(command, output, "network throttle group (add)");
-        if (retval) return retval;
     }
 
     // Adding virtual floppy disk drive to VM
@@ -754,15 +1199,69 @@ int VBOX_VM::create_vm() {
             "%s Adding virtual floppy disk drive to VM.\n",
             vboxwrapper_msg_prefix(buf, sizeof(buf))
         );
-        command  = "storageattach \"" + vm_name + "\" ";
-        command += "--storagectl \"Floppy Controller\" ";
-        command += "--port 0 ";
-        command += "--device 0 ";
-        command += "--medium \"" + virtual_machine_slot_directory + "/" + floppy_image_filename + "\" ";
+        CComPtr<IMedium> pFloppyImage;
+        rc = m_pVirtualBox->OpenMedium(
+            CComBSTR(string(virtual_machine_slot_directory + "/" + floppy_image_filename).c_str()),
+            DeviceType_Floppy,
+            AccessMode_ReadWrite,
+            TRUE,
+            &pFloppyImage
+        );
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding virtual floppy disk image to VirtualBox! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
 
-        retval = vbm_popen(command, output, "storage attach (floppy disk)");
-        if (retval) return retval;
+        rc = m_pMachine->AttachDevice(
+            CComBSTR("Hard Disk Controller"),
+            0,
+            0,
+            DeviceType_Floppy,
+            pFloppyImage
+        );
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error adding virtual floppy disk image to virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
+
+    }
 
+    // Add network bandwidth throttle group
+    //
+    fprintf(
+        stderr,
+        "%s Adding network bandwidth throttle group to VM. (Defaulting to 1024GB)\n",
+        vboxwrapper_msg_prefix(buf, sizeof(buf))
+    );
+    rc = pBandwidthControl->CreateBandwidthGroup(
+        CComBSTR(string(vm_name + "_net").c_str()),
+        BandwidthGroupType_Network,
+        (LONG64)1024*1024*1024*1024
+    );
+    if (FAILED(rc)) {
+        fprintf(
+            stderr,
+            "%s Error adding network bandwidth group to virtual machine! rc = 0x%x\n",
+            boinc_msg_prefix(buf, sizeof(buf)),
+            rc
+        );
+        virtualbox_dump_error();
+        retval = rc;
+        goto CLEANUP;
     }
 
     // Enable the network adapter if a network connection is required.
@@ -794,15 +1293,25 @@ int VBOX_VM::create_vm() {
 
             // Add new firewall rule
             //
-            sprintf(buf, ",tcp,%s,%d,,%d",
-                pf.is_remote?"":"127.0.0.1",
-                pf.host_port, pf.guest_port
+            rc = pNATEngine->AddRedirect(
+                CComBSTR(""),
+                NATProtocol_TCP,
+                pf.is_remote?CComBSTR(""):CComBSTR("127.0.0.1"),
+                pf.host_port,
+                CComBSTR(""),
+                pf.guest_port
             );
-            command  = "modifyvm \"" + vm_name + "\" ";
-            command += "--natpf1 \"" + string(buf) + "\" ";
-
-            retval = vbm_popen(command, output, "add updated port forwarding rule");
-            if (retval) return retval;
+            if (FAILED(rc)) {
+                fprintf(
+                    stderr,
+                    "%s Error adding port forward to virtual machine! rc = 0x%x\n",
+                    boinc_msg_prefix(buf, sizeof(buf)),
+                    rc
+                );
+                virtualbox_dump_error();
+                retval = rc;
+                goto CLEANUP;
+            }
         }
     }
 
@@ -825,15 +1334,12 @@ int VBOX_VM::create_vm() {
             if (retval) return retval;
 
             sprintf(buf, "%d", rd_host_port);
-            command  = "modifyvm \"" + vm_name + "\" ";
-            command += "--vrde on ";
-            command += "--vrdeextpack default ";
-            command += "--vrdeauthlibrary default ";
-            command += "--vrdeauthtype null ";
-            command += "--vrdeport " + string(buf) + " ";
 
-            retval = vbm_popen(command, output, "remote desktop");
-            if(retval) return retval;
+            pVRDEServer->put_Enabled(TRUE);
+            pVRDEServer->put_VRDEExtPack(CComBSTR(""));
+            pVRDEServer->put_AuthLibrary(CComBSTR(""));
+            pVRDEServer->put_AuthType(AuthType_Null);
+            pVRDEServer->SetVRDEProperty(CComBSTR("TCP/Ports"), CComBSTR(buf));
         }
     }
 
@@ -845,15 +1351,27 @@ int VBOX_VM::create_vm() {
             "%s Enabling shared directory for VM.\n",
             vboxwrapper_msg_prefix(buf, sizeof(buf))
         );
-        command  = "sharedfolder add \"" + vm_name + "\" ";
-        command += "--name \"shared\" ";
-        command += "--hostpath \"" + virtual_machine_slot_directory + "/shared\"";
-
-        retval = vbm_popen(command, output, "enable shared dir");
-        if (retval) return retval;
+        rc = m_pMachine->CreateSharedFolder(
+            CComBSTR("shared"),
+            CComBSTR(string(virtual_machine_slot_directory + "/shared").c_str()),
+            TRUE,
+            TRUE
+        );
+        if (FAILED(rc)) {
+            fprintf(
+                stderr,
+                "%s Error could not create shared folder for virtual machine! rc = 0x%x\n",
+                boinc_msg_prefix(buf, sizeof(buf)),
+                rc
+            );
+            virtualbox_dump_error();
+            retval = rc;
+            goto CLEANUP;
+        }
     }
 
-    return 0;
+CLEANUP:
+    return retval;
 }
 
 int VBOX_VM::register_vm() {
@@ -890,7 +1408,7 @@ int VBOX_VM::register_vm() {
     retval = vbm_popen(command, output, "register");
     if (retval) return retval;
 
-    return 0;
+    return retval;
 }
 
 int VBOX_VM::deregister_vm(bool delete_media) {
@@ -2032,39 +2550,23 @@ int VBOX_VM::get_guest_additions(string& guest_additions) {
 }
 
 int VBOX_VM::get_default_network_interface(string& iface) {
-    string command;
-    string output;
-    size_t if_start;
-    size_t if_end;
-    int retval;
+    int retval = ERR_EXEC;
+    HRESULT rc;
+    CComPtr<IHost> pHost;
+    SAFEARRAY* pNICS;
+    CComBSTR tmp;
+
+    rc = m_pVirtualBox->get_Host(&pHost);
+    if (SUCCEEDED(rc)) {
+        rc = pHost->FindHostNetworkInterfacesOfType(HostNetworkInterfaceType_Bridged, &pNICS);
+        if (SUCCEEDED(rc)) {
+            //aNICS.Attach(pNICS);
+            //aNICS[0]->get_Name(tmp);
+
+            iface = CW2A(tmp);
 
-    // Get the location of where the guest additions are
-    command = "list bridgedifs";
-    retval = vbm_popen(command, output, "default interface");
-
-    // Output should look like this:
-    // Name:            Intel(R) Ethernet Connection I217-V
-    // GUID:            4b8796d6-a4ed-4752-8e8e-bf23984fd93c
-    // DHCP:            Enabled
-    // IPAddress:       192.168.1.19
-    // NetworkMask:     255.255.255.0
-    // IPV6Address:     fe80:0000:0000:0000:31c2:0053:4f50:4e64
-    // IPV6NetworkMaskPrefixLength: 64
-    // HardwareAddress: bc:5f:f4:ba:cc:16
-    // MediumType:      Ethernet
-    // Status:          Up
-    // VBoxNetworkName: HostInterfaceNetworking-Intel(R) Ethernet Connection I217-V
-
-    if_start = output.find("Name:");
-    if (if_start == string::npos) {
-        return ERR_NOT_FOUND;
-    }
-    if_start += strlen("Name:");
-    if_end = output.find("\n", if_start);
-    iface = output.substr(if_start, if_end - if_start);
-    strip_whitespace(iface);
-    if (iface.size() <= 0) {
-        return ERR_NOT_FOUND;
+            retval = BOINC_SUCCESS;
+        }
     }
 
     return retval;
diff --git a/samples/vboxwrapper/vboxwrapper.cpp b/samples/vboxwrapper/vboxwrapper.cpp
index 1cf7a6227f5bd472097126de9b1a1a34694156bf..5f4c740c2124da99b436f1c227bd648a8418a6ee 100644
--- a/samples/vboxwrapper/vboxwrapper.cpp
+++ b/samples/vboxwrapper/vboxwrapper.cpp
@@ -330,10 +330,10 @@ void read_completion_file_info(unsigned long& exit_code, bool& is_notice, string
     FILE* f = fopen(path, "r");
     if (f) {
         if (fgets(buf, 1024, f) != NULL) {
-            exit_code = atoi(buf);
+            exit_code = atoi(buf) != 0;
         }
         if (fgets(buf, 1024, f) != NULL) {
-            is_notice = atoi(buf);
+            is_notice = atoi(buf) != 0;
         }
         while (fgets(buf, 1024, f) != NULL) {
             message += buf;
@@ -356,7 +356,7 @@ void read_temporary_exit_file_info(int& temp_delay, bool& is_notice, string& mes
             temp_delay = atoi(buf);
         }
         if (fgets(buf, 1024, f) != NULL) {
-            is_notice = atoi(buf);
+            is_notice = atoi(buf) != 0;
         }
         while (fgets(buf, 1024, f) != NULL) {
             message += buf;
@@ -945,7 +945,6 @@ int main(int argc, char** argv) {
         } else {
             sprintf(buf, "%d", (int)ceil(vm.memory_size_mb));
         }
-        vm.vm_memory_size_mb = buf;
     }
     if (aid.vbox_window && !aid.using_sandbox) {
         vm.headless = false;