diff --git a/samples/vboxwrapper/vbox_common.h b/samples/vboxwrapper/vbox_common.h
index a591c7ce9a8d3f81082b90484be176380c14178e..373283b88c0d68a4010d8dc4d06c8ec1b675d5e7 100644
--- a/samples/vboxwrapper/vbox_common.h
+++ b/samples/vboxwrapper/vbox_common.h
@@ -168,7 +168,7 @@ public:
     virtual int register_vm() = 0;
     virtual int deregister_vm(bool delete_media) = 0;
     virtual int deregister_stale_vm() = 0;
-    virtual void poll(bool log_state = true) = 0;
+    virtual int poll(bool log_state = true) = 0;
     virtual int start() = 0;
     virtual int stop() = 0;
     virtual int poweroff() = 0;
diff --git a/samples/vboxwrapper/vbox_mscom_impl.cpp b/samples/vboxwrapper/vbox_mscom_impl.cpp
index 6fb6b136daffcac729059bd405d7efe6a2138734..a782516ee5881f2de2cf742ece6279c97470eac0 100644
--- a/samples/vboxwrapper/vbox_mscom_impl.cpp
+++ b/samples/vboxwrapper/vbox_mscom_impl.cpp
@@ -1155,7 +1155,8 @@ int VBOX_VM::deregister_stale_vm() {
     return 0;
 }
 
-void VBOX_VM::poll(bool log_state) {
+int VBOX_VM::poll(bool log_state) {
+    int retval = ERR_EXEC;
     APP_INIT_DATA aid;
     HRESULT rc;
     CComPtr<IMachine> pMachine;
@@ -1181,7 +1182,6 @@ void VBOX_VM::poll(bool log_state) {
     if (SUCCEEDED(rc) && pMachine) {
         rc = pMachine->get_State(&vmstate);
         if (SUCCEEDED(rc)) {
-
             // VirtualBox Documentation suggests that that a VM is running when its
             // machine state is between MachineState_FirstOnline and MachineState_LastOnline
             // which as of this writing is 5 and 17.
@@ -1289,6 +1289,8 @@ void VBOX_VM::poll(bool log_state) {
                 );
                 vmstate_old = vmstate;
             }
+
+            retval = BOINC_SUCCESS;
         }
     }
 
@@ -1304,6 +1306,8 @@ void VBOX_VM::poll(bool log_state) {
     // Dump any new VM Guest Log entries
     //
     dump_vmguestlog_entries();
+
+    return retval;
 }
 
 int VBOX_VM::start() {
diff --git a/samples/vboxwrapper/vbox_mscom_impl.h b/samples/vboxwrapper/vbox_mscom_impl.h
index c0e7a2318989823a72af04654daaed093051544a..de2d8e3130c358e9d2d6a9b8c5bc42bd8630b0e5 100644
--- a/samples/vboxwrapper/vbox_mscom_impl.h
+++ b/samples/vboxwrapper/vbox_mscom_impl.h
@@ -27,7 +27,7 @@ public:
     int register_vm();
     int deregister_vm(bool delete_media);
     int deregister_stale_vm();
-    void poll(bool log_state = true);
+    int poll(bool log_state = true);
     int start();
     int stop();
     int poweroff();
diff --git a/samples/vboxwrapper/vbox_vboxmanage.cpp b/samples/vboxwrapper/vbox_vboxmanage.cpp
index 44805be255414e716f39fcadec6f89e38cf89a8e..4b60982a939f74bac4c12abc85e2f48c0016122c 100644
--- a/samples/vboxwrapper/vbox_vboxmanage.cpp
+++ b/samples/vboxwrapper/vbox_vboxmanage.cpp
@@ -824,7 +824,8 @@ int VBOX_VM::deregister_stale_vm() {
     return 0;
 }
 
-void VBOX_VM::poll(bool log_state) {
+int VBOX_VM::poll(bool log_state) {
+    int retval = ERR_EXEC;
     APP_INIT_DATA aid;
     string command;
     string output;
@@ -955,6 +956,8 @@ void VBOX_VM::poll(bool log_state) {
                 vboxlog_msg("VM state change detected. (old = '%s', new = '%s')", vmstate_old.c_str(), vmstate.c_str());
                 vmstate_old = vmstate;
             }
+
+            retval = BOINC_SUCCESS;
         }
     }
 
@@ -970,6 +973,8 @@ void VBOX_VM::poll(bool log_state) {
     // Dump any new VM Guest Log entries
     //
     dump_vmguestlog_entries();
+
+    return retval;
 }
 
 int VBOX_VM::start() {
diff --git a/samples/vboxwrapper/vbox_vboxmanage.h b/samples/vboxwrapper/vbox_vboxmanage.h
index 330feb5bda792de08912cff0bb9865ad67a9476e..fcd170792e67dcf1aacbb874955b15f05f063c8d 100644
--- a/samples/vboxwrapper/vbox_vboxmanage.h
+++ b/samples/vboxwrapper/vbox_vboxmanage.h
@@ -33,7 +33,7 @@ namespace vboxmanage {
         int register_vm();
         int deregister_vm(bool delete_media);
         int deregister_stale_vm();
-        void poll(bool log_state = true);
+        int poll(bool log_state = true);
         int start();
         int stop();
         int poweroff();
diff --git a/samples/vboxwrapper/vboxwrapper.cpp b/samples/vboxwrapper/vboxwrapper.cpp
index 9dd1032f93a4934e082d64a69026f590159f7826..e937e53cdc35bf927a1c4228b3ba85d16f8b4863 100644
--- a/samples/vboxwrapper/vboxwrapper.cpp
+++ b/samples/vboxwrapper/vboxwrapper.cpp
@@ -867,7 +867,13 @@ int main(int argc, char** argv) {
         loop_iteration += 1;
 
         // Discover the VM's current state
-        pVM->poll();
+        retval = pVM->poll();
+        if (retval) {
+            vboxlog_msg("ERROR: Vboxwrapper lost communication with VirtualBox, rescheduling task for a later time.");
+            pVM->reset_vm_process_priority();
+            pVM->poweroff();
+            boinc_temporary_exit(86400, "VM job unmanageable, restarting later.");
+        }
 
         // Write updates for the graphics application's use
         if (pVM->enable_graphics_support) {