Index: /trunk/src/VBox/Main/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl.cpp	(revision 285)
+++ /trunk/src/VBox/Main/ConsoleImpl.cpp	(revision 286)
@@ -6168,40 +6168,4 @@
         }
 
-#ifdef VBOX_VRDP
-        {
-            /* Start vrdp server state change to start it if enabled */
-            ConsoleVRDPServer *server = console->consoleVRDPServer();
-            Assert (server);
-            /// @todo (dmik)
-            //      does VRDP server call Console from the other thread?
-            //      Not sure, so leave the lock just in case
-            alock.leave();
-            vrc = server->Launch();
-            alock.enter();
-            if (VBOX_FAILURE (vrc))
-            {
-                Utf8Str errMsg;
-                switch (vrc)
-                {
-                    case VERR_NET_ADDRESS_IN_USE:
-                    {
-                        ULONG port = 0;
-                        console->mVRDPServer->COMGETTER(Port) (&port);
-                        errMsg = Utf8StrFmt (tr ("VRDP server port %d is already in use"),
-                                             port);
-                        break;
-                    }
-                    default:
-                        errMsg = Utf8StrFmt (tr ("Failed to launch VRDP server (%Vrc)"),
-                                             vrc);
-                }
-                LogRel (("Failed to launch VRDP server (%Vrc), error message: '%s'\n",
-                         vrc, errMsg.raw()));
-                hrc = setError (E_FAIL, errMsg);
-                break;
-            }
-        }
-#endif
-
         /*
          * Create the VM
@@ -6366,4 +6330,40 @@
             }
             while (0);
+
+#ifdef VBOX_VRDP
+            if ((!FAILED (hrc)) && VBOX_SUCCESS (vrc))
+            {
+                /* Start the VRDP server after the VM is started. */
+                ConsoleVRDPServer *server = console->consoleVRDPServer();
+                Assert (server);
+                /// @todo (dmik)
+                //      does VRDP server call Console from the other thread?
+                //      Not sure, so leave the lock just in case
+                alock.leave();
+                vrc = server->Launch();
+                alock.enter();
+                if (VBOX_FAILURE (vrc))
+                {
+                    Utf8Str errMsg;
+                    switch (vrc)
+                    {
+                        case VERR_NET_ADDRESS_IN_USE:
+                        {
+                            ULONG port = 0;
+                            console->mVRDPServer->COMGETTER(Port) (&port);
+                            errMsg = Utf8StrFmt (tr ("VRDP server port %d is already in use"),
+                                                 port);
+                            break;
+                        }
+                        default:
+                            errMsg = Utf8StrFmt (tr ("Failed to launch VRDP server (%Vrc)"),
+                                                 vrc);
+                    }
+                    LogRel (("Failed to launch VRDP server (%Vrc), error message: '%s'\n",
+                             vrc, errMsg.raw()));
+                    hrc = setError (E_FAIL, errMsg);
+                }
+            }
+#endif /* VBOX_VRDP */
 
             /*  On failure, destroy the VM */
