Index: /trunk/include/VBox/settings.h
===================================================================
--- /trunk/include/VBox/settings.h	(revision 41370)
+++ /trunk/include/VBox/settings.h	(revision 41371)
@@ -782,4 +782,6 @@
     ChipsetType_T       chipsetType;            // requires settings version 1.11 (VirtualBox 4.0)
 
+    bool                fEmulatedUSBCardReader; // 1.12 (VirtualBox 4.1)
+
     VRDESettings        vrdeSettings;
 
Index: /trunk/src/VBox/Frontends/VBoxManage/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/Makefile.kmk	(revision 41370)
+++ /trunk/src/VBox/Frontends/VBoxManage/Makefile.kmk	(revision 41371)
@@ -75,5 +75,6 @@
 	$(if $(VBOX_WITH_VIDEOHWACCEL), VBOX_WITH_VIDEOHWACCEL) \
 	$(if $(VBOX_WITH_VIRTIO),VBOX_WITH_VIRTIO) \
-        $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH)
+	$(if $(VBOX_WITH_USB_CARDREADER),VBOX_WITH_USB_CARDREADER) \
+	$(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH)
 
 ifneq ($(KBUILD_TARGET),win)
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 41370)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 41371)
@@ -336,4 +336,7 @@
                      "                            [--faulttolerancepassword <password>]\n"
 #endif
+#ifdef VBOX_WITH_USB_CARDREADER
+                     "                            [--usbcardreader on|off]\n"
+#endif
                      "\n");
     }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 41370)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 41371)
@@ -183,4 +183,7 @@
     MODIFYVM_ATTACH_PCI,
     MODIFYVM_DETACH_PCI,
+#endif
+#ifdef VBOX_WITH_USB_CARDREADER
+    MODIFYVM_USBCARDREADER,
 #endif
     MODIFYVM_CHIPSET
@@ -323,4 +326,7 @@
     { "--pcidetach",                MODIFYVM_DETACH_PCI,                RTGETOPT_REQ_STRING },
 #endif
+#ifdef VBOX_WITH_USB_CARDREADER
+    { "--usbcardreader",            MODIFYVM_USBCARDREADER,             RTGETOPT_REQ_BOOL_ONOFF },
+#endif
 };
 
@@ -2397,4 +2403,12 @@
             }
 #endif
+#ifdef VBOX_WITH_USB_CARDREADER
+            case MODIFYVM_USBCARDREADER:
+            {
+                CHECK_ERROR(machine, COMSETTER(EmulatedUSBCardReaderEnabled)(ValueUnion.f));
+                break;
+            }
+#endif /* VBOX_WITH_USB_CARDREADER */
+
             default:
             {
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 41370)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 41371)
@@ -291,4 +291,5 @@
         PointingHidType_T    mPointingHidType;
         ChipsetType_T        mChipsetType;
+        BOOL                 mEmulatedUSBCardReaderEnabled;
 
         BOOL                 mIoCacheEnabled;
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 41370)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 41371)
@@ -2336,17 +2336,24 @@
 #endif
 #ifdef VBOX_WITH_USB_CARDREADER
-                InsertConfigNode(pUsbDevices, "CardReader", &pDev);
-                InsertConfigNode(pDev,     "0", &pInst);
-                InsertConfigNode(pInst,    "Config", &pCfg);
-                InsertConfigNode(pInst,    "LUN#0", &pLunL0);
+                BOOL aEmulatedUSBCardReaderEnabled = FALSE;
+                hrc = pMachine->COMGETTER(EmulatedUSBCardReaderEnabled)(&aEmulatedUSBCardReaderEnabled);    H();
+                if (aEmulatedUSBCardReaderEnabled)
+                {
+                    InsertConfigNode(pUsbDevices, "CardReader", &pDev);
+                    InsertConfigNode(pDev,     "0", &pInst);
+                    InsertConfigNode(pInst,    "Config", &pCfg);
+
+                    InsertConfigNode(pInst,    "LUN#0", &pLunL0);
 # ifdef VBOX_WITH_USB_CARDREADER_TEST
-                InsertConfigString(pLunL0,    "Driver", "DrvDirectCardReader");
-                InsertConfigNode(pLunL0,    "Config", &pCfg);
+                    InsertConfigString(pLunL0, "Driver", "DrvDirectCardReader");
+                    InsertConfigNode(pLunL0,   "Config", &pCfg);
 # else
-                InsertConfigString(pLunL0,    "Driver", "UsbCardReader");
-                InsertConfigNode(pLunL0,    "Config", &pCfg);
-                InsertConfigInteger(pCfg,   "Object", (uintptr_t)mUsbCardReader);
+                    InsertConfigString(pLunL0, "Driver", "UsbCardReader");
+                    InsertConfigNode(pLunL0,   "Config", &pCfg);
+                    InsertConfigInteger(pCfg,  "Object", (uintptr_t)mUsbCardReader);
 # endif
+                }
 #endif
+
 # if 0  /* Virtual MSD*/
 
Index: /trunk/src/VBox/Main/src-server/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 41370)
+++ /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 41371)
@@ -202,4 +202,5 @@
     mPointingHidType = PointingHidType_PS2Mouse;
     mChipsetType = ChipsetType_PIIX3;
+    mEmulatedUSBCardReaderEnabled = FALSE;
 
     for (size_t i = 0; i < RT_ELEMENTS(mCPUAttached); i++)
@@ -1526,12 +1527,40 @@
 STDMETHODIMP Machine::COMGETTER(EmulatedUSBCardReaderEnabled)(BOOL *enabled)
 {
+#ifdef VBOX_WITH_USB_CARDREADER
+    CheckComArgOutPointerValid(enabled);
+
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *enabled = mHWData->mEmulatedUSBCardReaderEnabled;
+
+    return S_OK;
+#else
     NOREF(enabled);
     return E_NOTIMPL;
+#endif
 }
 
 STDMETHODIMP Machine::COMSETTER(EmulatedUSBCardReaderEnabled)(BOOL enabled)
 {
+#ifdef VBOX_WITH_USB_CARDREADER
+    AutoCaller autoCaller(this);
+    if (FAILED(autoCaller.rc())) return autoCaller.rc();
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    int rc = checkStateDependency(MutableStateDep);
+    if (FAILED(rc)) return rc;
+
+    setModified(IsModified_MachineData);
+    mHWData.backup();
+    mHWData->mEmulatedUSBCardReaderEnabled = enabled;
+
+    return S_OK;
+#else
     NOREF(enabled);
     return E_NOTIMPL;
+#endif
 }
 
@@ -8077,4 +8106,5 @@
         mHWData->mKeyboardHidType = data.keyboardHidType;
         mHWData->mChipsetType = data.chipsetType;
+        mHWData->mEmulatedUSBCardReaderEnabled = data.fEmulatedUSBCardReader;
         mHWData->mHpetEnabled = data.fHpetEnabled;
 
@@ -9211,4 +9241,6 @@
         // chipset
         data.chipsetType = mHWData->mChipsetType;
+
+        data.fEmulatedUSBCardReader = !!mHWData->mEmulatedUSBCardReaderEnabled;
 
         // HPET
Index: /trunk/src/VBox/Main/xml/Settings.cpp
===================================================================
--- /trunk/src/VBox/Main/xml/Settings.cpp	(revision 41370)
+++ /trunk/src/VBox/Main/xml/Settings.cpp	(revision 41371)
@@ -1606,4 +1606,5 @@
           keyboardHidType(KeyboardHidType_PS2Keyboard),
           chipsetType(ChipsetType_PIIX3),
+          fEmulatedUSBCardReader(false),
           clipboardMode(ClipboardMode_Bidirectional),
           ulMemoryBalloonSize(0),
@@ -1668,4 +1669,5 @@
                   && (keyboardHidType           == h.keyboardHidType)
                   && (chipsetType               == h.chipsetType)
+                  && (fEmulatedUSBCardReader    == h.fEmulatedUSBCardReader)
                   && (vrdeSettings              == h.vrdeSettings)
                   && (biosSettings              == h.biosSettings)
@@ -2820,4 +2822,13 @@
                     hw.pciAttachments.push_back(hpda);
                 }
+            }
+        }
+        else if (pelmHwChild->nameEquals("EmulatedUSB"))
+        {
+            const xml::ElementNode *pelmCardReader;
+
+            if ((pelmCardReader = pelmHwChild->findChildElement("CardReader")))
+            {
+                pelmCardReader->getAttributeValue("enabled", hw.fEmulatedUSBCardReader);
             }
         }
@@ -4042,4 +4053,12 @@
     }
 
+    if (m->sv >= SettingsVersion_v1_12)
+    {
+        xml::ElementNode *pelmEmulatedUSB = pelmHardware->createChild("EmulatedUSB");
+        xml::ElementNode *pelmCardReader = pelmEmulatedUSB->createChild("CardReader");
+
+        pelmCardReader->setAttribute("enabled", hw.fEmulatedUSBCardReader);
+    }
+
     xml::ElementNode *pelmGuest = pelmHardware->createChild("Guest");
     pelmGuest->setAttribute("memoryBalloonSize", hw.ulMemoryBalloonSize);
@@ -4648,4 +4667,11 @@
     if (m->sv < SettingsVersion_v1_12)
     {
+        // 4.1: Emulated USB devices.
+        if (hardwareMachine.fEmulatedUSBCardReader)
+            m->sv = SettingsVersion_v1_12;
+    }
+
+    if (m->sv < SettingsVersion_v1_12)
+    {
         // VirtualBox 4.1 adds PCI passthrough.
         if (hardwareMachine.pciAttachments.size())
