Index: /trunk/src/VBox/Main/SystemPropertiesImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/SystemPropertiesImpl.cpp	(revision 23559)
+++ /trunk/src/VBox/Main/SystemPropertiesImpl.cpp	(revision 23560)
@@ -469,4 +469,30 @@
 }
 
+STDMETHODIMP SystemProperties::GetMaxInstancesOfStorageBus(StorageBus_T aBus, ULONG *aMaxInstances)
+{
+    CheckComArgOutPointerValid(aMaxInstances);
+
+    AutoCaller autoCaller(this);
+    CheckComRCReturnRC(autoCaller.rc());
+
+    /* no need to lock, this is const */
+    switch (aBus)
+    {
+        case StorageBus_SATA:
+        case StorageBus_SCSI:
+        case StorageBus_IDE:
+        case StorageBus_Floppy:
+        {
+            /** @todo raise the limits ASAP, per bus type */
+            *aMaxInstances = 1;
+            break;
+        }
+        default:
+            AssertMsgFailed(("Invalid bus type %d\n", aBus));
+    }
+
+    return S_OK;
+}
+
 STDMETHODIMP SystemProperties::COMGETTER(DefaultMachineFolder) (BSTR *aDefaultMachineFolder)
 {
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 23559)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 23560)
@@ -7238,5 +7238,5 @@
      name="ISystemProperties"
      extends="$unknown"
-     uuid="79a8bc4d-24a5-4258-a0a6-8c36f8a68a4b"
+     uuid="4b78105a-d066-4eab-ae48-ccb2c0ba5057"
      wsmap="managed"
      >
@@ -7539,4 +7539,18 @@
       <param name="maxPortCount" type="unsigned long" dir="return">
         <desc>The maximum number of ports for the given storage bus.</desc>
+      </param>
+    </method>
+
+    <method name="getMaxInstancesOfStorageBus">
+      <desc>Returns the maximum number of storage bus instances which
+        can be configured for each VM. This corresponds to the number of
+        storage controllers one can have.</desc>
+
+      <param name="bus" type="StorageBus" dir="in">
+        <desc>The storage bus type to get the value for.</desc>
+      </param>
+
+      <param name="maxInstances" type="unsigned long" dir="return">
+        <desc>The maximum number of instances for the given storage bus.</desc>
       </param>
     </method>
Index: /trunk/src/VBox/Main/include/SystemPropertiesImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/SystemPropertiesImpl.h	(revision 23559)
+++ /trunk/src/VBox/Main/include/SystemPropertiesImpl.h	(revision 23560)
@@ -98,4 +98,5 @@
     STDMETHOD(GetMinPortCountForStorageBus) (StorageBus_T aBus, ULONG *aMinPortCount);
     STDMETHOD(GetMaxPortCountForStorageBus) (StorageBus_T aBus, ULONG *aMaxPortCount);
+    STDMETHOD(GetMaxInstancesOfStorageBus)(StorageBus_T aBus, ULONG *aMaxInstances);
 
     // public methods only for internal purposes
