Index: /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsDlg.ui.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsDlg.ui.h	(revision 440)
+++ /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsDlg.ui.h	(revision 441)
@@ -974,10 +974,15 @@
     else if (pg == pageVRDP)
     {
-        valid = !(grbVRDP->isChecked() &&
-                (leVRDPPort->text().isEmpty() || leVRDPTimeout->text().isEmpty()));
-        if (!valid && leVRDPPort->text().isEmpty())
-            setWarning (tr ("VRDP Port is not set."));
-        if (!valid && leVRDPTimeout->text().isEmpty())
-            setWarning (tr ("VRDP Timeout is not set."));
+        if (pageVRDP->isEnabled())
+        {
+            valid = !(grbVRDP->isChecked() &&
+                    (leVRDPPort->text().isEmpty() || leVRDPTimeout->text().isEmpty()));
+            if (!valid && leVRDPPort->text().isEmpty())
+                setWarning (tr ("VRDP Port is not set."));
+            if (!valid && leVRDPTimeout->text().isEmpty())
+                setWarning (tr ("VRDP Timeout is not set."));
+        }
+        else
+            valid = true;
     }
 
@@ -1232,4 +1237,7 @@
                 usbItem->setVisible (false);
 
+            /* disable validators if any */
+            pageUSB->setEnabled (false);
+
             /* if machine has something to say, show the message */
             vboxProblem().cannotLoadMachineSettings (machine, false /* strict */);
@@ -1244,8 +1252,6 @@
 
             lvUSBFilters->setCurrentItem (lvUSBFilters->firstChild());
-            /*
-             *  silly, silly Qt -- doesn't emit currentChanged after adding the
-             *  first item to an empty list
-             */
+            /* silly Qt -- doesn't emit currentChanged after adding the
+             * first item to an empty list */
             lvUSBFilters_currentChanged (lvUSBFilters->firstChild());
         }
@@ -1255,8 +1261,28 @@
     {
         CVRDPServer vrdp = machine.GetVRDPServer();
-        grbVRDP->setChecked (vrdp.GetEnabled());
-        leVRDPPort->setText (QString::number (vrdp.GetPort()));
-        cbVRDPAuthType->setCurrentText (vboxGlobal().toString (vrdp.GetAuthType()));
-        leVRDPTimeout->setText (QString::number (vrdp.GetAuthTimeout()));
+
+        if (vrdp.isNull())
+        {
+            /* disable the VRDP category if VRDP is
+             * not available (i.e. in VirtualBox OSE) */
+
+            QListViewItem *vrdpItem = listView->findItem ("#vrdp", listView_Link);
+            Assert (vrdpItem);
+            if (vrdpItem)
+                vrdpItem->setVisible (false);
+
+            /* disable validators if any */
+            pageVRDP->setEnabled (false);
+
+            /* if machine has something to say, show the message */
+            vboxProblem().cannotLoadMachineSettings (machine, false /* strict */);
+        }
+        else
+        {
+            grbVRDP->setChecked (vrdp.GetEnabled());
+            leVRDPPort->setText (QString::number (vrdp.GetPort()));
+            cbVRDPAuthType->setCurrentText (vboxGlobal().toString (vrdp.GetAuthType()));
+            leVRDPTimeout->setText (QString::number (vrdp.GetAuthTimeout()));
+        }
     }
 
@@ -1271,4 +1297,5 @@
     wvalDVD->revalidate();
     wvalFloppy->revalidate();
+    wvalVRDP->revalidate();
 }
 
@@ -1479,8 +1506,13 @@
     {
         CVRDPServer vrdp = cmachine.GetVRDPServer();
-        vrdp.SetEnabled (grbVRDP->isChecked());
-        vrdp.SetPort (leVRDPPort->text().toULong());
-        vrdp.SetAuthType (vboxGlobal().toVRDPAuthType (cbVRDPAuthType->currentText()));
-        vrdp.SetAuthTimeout (leVRDPTimeout->text().toULong());
+
+        if (!vrdp.isNull())
+        {
+            /* VRDP may be unavailable (i.e. in VirtualBox OSE) */
+            vrdp.SetEnabled (grbVRDP->isChecked());
+            vrdp.SetPort (leVRDPPort->text().toULong());
+            vrdp.SetAuthType (vboxGlobal().toVRDPAuthType (cbVRDPAuthType->currentText()));
+            vrdp.SetAuthTimeout (leVRDPTimeout->text().toULong());
+        }
     }
 
Index: /trunk/src/VBox/Main/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl.cpp	(revision 440)
+++ /trunk/src/VBox/Main/ConsoleImpl.cpp	(revision 441)
@@ -258,6 +258,8 @@
     AssertComRCReturn (rc, rc);
 
+#ifdef VBOX_VRDP
     rc = mMachine->COMGETTER(VRDPServer) (unconst (mVRDPServer).asOutParam());
     AssertComRCReturn (rc, rc);
+#endif    
 
     rc = mMachine->COMGETTER(DVDDrive) (unconst (mDVDDrive).asOutParam());
@@ -410,5 +412,7 @@
     unconst (mFloppyDrive).setNull();
     unconst (mDVDDrive).setNull();
+#ifdef VBOX_VRDP
     unconst (mVRDPServer).setNull();
+#endif
 
     unconst (mControl).setNull();
Index: /trunk/src/VBox/Main/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/MachineImpl.cpp	(revision 440)
+++ /trunk/src/VBox/Main/MachineImpl.cpp	(revision 441)
@@ -1046,4 +1046,5 @@
 STDMETHODIMP Machine::COMGETTER(VRDPServer)(IVRDPServer **vrdpServer)
 {
+#ifdef VBOX_VRDP
     if (!vrdpServer)
         return E_POINTER;
@@ -1054,12 +1055,11 @@
     AutoReaderLock alock (this);
 
-#ifdef VBOX_VRDP
     Assert (!!mVRDPServer);
     mVRDPServer.queryInterfaceTo (vrdpServer);
+
+    return S_OK;
 #else
-    *vrdpServer = NULL;
+    return E_NOTIMPL;
 #endif
-
-    return S_OK;
 }
 
