Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp	(revision 33914)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageList.cpp	(revision 33915)
@@ -847,30 +847,40 @@
             systemProperties->COMGETTER(MaxBootPosition)(&ulValue);
             RTPrintf("Maximum Boot Position:           %u\n", ulValue);
-            systemProperties->GetMaxInstancesOfStorageBus(StorageBus_IDE, &ulValue);
-            RTPrintf("Maximum IDE Controllers:         %u\n", ulValue);
+            systemProperties->GetMaxInstancesOfStorageBus(ChipsetType_PIIX3, StorageBus_IDE, &ulValue);
+            RTPrintf("Maximum PIIX3 IDE Controllers:   %u\n", ulValue);
+            systemProperties->GetMaxInstancesOfStorageBus(ChipsetType_ICH9, StorageBus_IDE, &ulValue);
+            RTPrintf("Maximum ICH9 IDE Controllers:    %u\n", ulValue);
             systemProperties->GetMaxPortCountForStorageBus(StorageBus_IDE, &ulValue);
             RTPrintf("Maximum IDE Port count:          %u\n", ulValue);
             systemProperties->GetMaxDevicesPerPortForStorageBus(StorageBus_IDE, &ulValue);
             RTPrintf("Maximum Devices per IDE Port:    %u\n", ulValue);
-            systemProperties->GetMaxInstancesOfStorageBus(StorageBus_SATA, &ulValue);
-            RTPrintf("Maximum SATA Controllers:        %u\n", ulValue);
+            systemProperties->GetMaxInstancesOfStorageBus(ChipsetType_PIIX3, StorageBus_SATA, &ulValue);
+            RTPrintf("Maximum PIIX3 SATA Controllers:  %u\n", ulValue);
+            systemProperties->GetMaxInstancesOfStorageBus(ChipsetType_ICH9, StorageBus_SATA, &ulValue);
+            RTPrintf("Maximum ICH9 SATA Controllers:   %u\n", ulValue);
             systemProperties->GetMaxPortCountForStorageBus(StorageBus_SATA, &ulValue);
             RTPrintf("Maximum SATA Port count:         %u\n", ulValue);
             systemProperties->GetMaxDevicesPerPortForStorageBus(StorageBus_SATA, &ulValue);
             RTPrintf("Maximum Devices per SATA Port:   %u\n", ulValue);
-            systemProperties->GetMaxInstancesOfStorageBus(StorageBus_SCSI, &ulValue);
-            RTPrintf("Maximum SCSI Controllers:        %u\n", ulValue);
+            systemProperties->GetMaxInstancesOfStorageBus(ChipsetType_PIIX3, StorageBus_SCSI, &ulValue);
+            RTPrintf("Maximum PIIX3 SCSI Controllers:  %u\n", ulValue);
+            systemProperties->GetMaxInstancesOfStorageBus(ChipsetType_ICH9, StorageBus_SCSI, &ulValue);
+            RTPrintf("Maximum ICH9 SCSI Controllers:   %u\n", ulValue);
             systemProperties->GetMaxPortCountForStorageBus(StorageBus_SCSI, &ulValue);
             RTPrintf("Maximum SCSI Port count:         %u\n", ulValue);
             systemProperties->GetMaxDevicesPerPortForStorageBus(StorageBus_SCSI, &ulValue);
             RTPrintf("Maximum Devices per SCSI Port:   %u\n", ulValue);
-            systemProperties->GetMaxInstancesOfStorageBus(StorageBus_SAS, &ulValue);
-            RTPrintf("Maximum SAS Controllers:         %u\n", ulValue);
+            systemProperties->GetMaxInstancesOfStorageBus(ChipsetType_PIIX3, StorageBus_SAS, &ulValue);
+            RTPrintf("Maximum SAS PIIX3 Controllers:   %u\n", ulValue);
+            systemProperties->GetMaxInstancesOfStorageBus(ChipsetType_ICH9, StorageBus_SAS, &ulValue);
+            RTPrintf("Maximum SAS ICH9 Controllers:    %u\n", ulValue);
             systemProperties->GetMaxPortCountForStorageBus(StorageBus_SAS, &ulValue);
             RTPrintf("Maximum SAS Port count:          %u\n", ulValue);
             systemProperties->GetMaxDevicesPerPortForStorageBus(StorageBus_SAS, &ulValue);
             RTPrintf("Maximum Devices per SAS Port:    %u\n", ulValue);
-            systemProperties->GetMaxInstancesOfStorageBus(StorageBus_Floppy, &ulValue);
-            RTPrintf("Maximum Floppy Controllers:      %u\n", ulValue);
+            systemProperties->GetMaxInstancesOfStorageBus(ChipsetType_PIIX3, StorageBus_Floppy, &ulValue);
+            RTPrintf("Maximum PIIX3 Floppy Controllers:%u\n", ulValue);
+            systemProperties->GetMaxInstancesOfStorageBus(ChipsetType_ICH9, StorageBus_Floppy, &ulValue);
+            RTPrintf("Maximum ICH9 Floppy Controllers: %u\n", ulValue);
             systemProperties->GetMaxPortCountForStorageBus(StorageBus_Floppy, &ulValue);
             RTPrintf("Maximum Floppy Port count:       %u\n", ulValue);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp	(revision 33914)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.cpp	(revision 33915)
@@ -902,4 +902,15 @@
     else
         return QModelIndex();
+}
+
+KChipsetType StorageModel::getChipsetType() const
+{
+#if 0
+    CMachine mach = vboxGlobal().virtualBox().FindMachine(mRootItem->machineId());
+    Assert(!mach.isNull());
+    return mach.GetChipsetType();
+#else
+    return KChipsetType_PIIX3;
+#endif
 }
 
@@ -1023,25 +1034,25 @@
         {
             return static_cast <RootItem*> (mRootItem)->childCount (KStorageBus_IDE) <
-                   vboxGlobal().virtualBox().GetSystemProperties().GetMaxInstancesOfStorageBus (KStorageBus_IDE);
+                    vboxGlobal().virtualBox().GetSystemProperties().GetMaxInstancesOfStorageBus (getChipsetType(), KStorageBus_IDE);
         }
         case R_IsMoreSATAControllersPossible:
         {
             return static_cast <RootItem*> (mRootItem)->childCount (KStorageBus_SATA) <
-                   vboxGlobal().virtualBox().GetSystemProperties().GetMaxInstancesOfStorageBus (KStorageBus_SATA);
+                   vboxGlobal().virtualBox().GetSystemProperties().GetMaxInstancesOfStorageBus (getChipsetType(), KStorageBus_SATA);
         }
         case R_IsMoreSCSIControllersPossible:
         {
             return static_cast <RootItem*> (mRootItem)->childCount (KStorageBus_SCSI) <
-                   vboxGlobal().virtualBox().GetSystemProperties().GetMaxInstancesOfStorageBus (KStorageBus_SCSI);
+                   vboxGlobal().virtualBox().GetSystemProperties().GetMaxInstancesOfStorageBus (getChipsetType(), KStorageBus_SCSI);
         }
         case R_IsMoreFloppyControllersPossible:
         {
             return static_cast <RootItem*> (mRootItem)->childCount (KStorageBus_Floppy) <
-                   vboxGlobal().virtualBox().GetSystemProperties().GetMaxInstancesOfStorageBus (KStorageBus_Floppy);
+                   vboxGlobal().virtualBox().GetSystemProperties().GetMaxInstancesOfStorageBus (getChipsetType(), KStorageBus_Floppy);
         }
         case R_IsMoreSASControllersPossible:
         {
             return static_cast <RootItem*> (mRootItem)->childCount (KStorageBus_SAS) <
-                   vboxGlobal().virtualBox().GetSystemProperties().GetMaxInstancesOfStorageBus (KStorageBus_SAS);
+                   vboxGlobal().virtualBox().GetSystemProperties().GetMaxInstancesOfStorageBus (getChipsetType(), KStorageBus_SAS);
         }
         case R_IsMoreAttachmentsPossible:
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.h	(revision 33914)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsStorage.h	(revision 33915)
@@ -511,4 +511,6 @@
 
     ToolTipType mToolTipType;
+
+    KChipsetType getChipsetType() const;
 };
 Q_DECLARE_METATYPE (StorageModel::ToolTipType);
Index: /trunk/src/VBox/Main/StorageControllerImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/StorageControllerImpl.cpp	(revision 33914)
+++ /trunk/src/VBox/Main/StorageControllerImpl.cpp	(revision 33915)
@@ -136,5 +136,9 @@
 
     ULONG maxInstances;
-    HRESULT rc = aParent->getVirtualBox()->getSystemProperties()->GetMaxInstancesOfStorageBus(aStorageBus, &maxInstances);
+    ChipsetType_T chipsetType;
+    HRESULT rc = aParent->COMGETTER(ChipsetType)(&chipsetType);
+    if (FAILED(rc))
+        return rc;
+    rc = aParent->getVirtualBox()->getSystemProperties()->GetMaxInstancesOfStorageBus(chipsetType, aStorageBus, &maxInstances);
     if (FAILED(rc))
         return rc;
Index: /trunk/src/VBox/Main/SystemPropertiesImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/SystemPropertiesImpl.cpp	(revision 33914)
+++ /trunk/src/VBox/Main/SystemPropertiesImpl.cpp	(revision 33915)
@@ -440,5 +440,6 @@
 }
 
-STDMETHODIMP SystemProperties::GetMaxInstancesOfStorageBus(StorageBus_T aBus,
+STDMETHODIMP SystemProperties::GetMaxInstancesOfStorageBus(ChipsetType_T aChipset,
+                                                           StorageBus_T  aBus,
                                                            ULONG *aMaxInstances)
 {
@@ -447,4 +448,6 @@
     AutoCaller autoCaller(this);
     if (FAILED(autoCaller.rc())) return autoCaller.rc();
+
+    ULONG cCtrs = 0;
 
     /* no need to lock, this is const */
@@ -453,10 +456,11 @@
         case StorageBus_SATA:
         case StorageBus_SCSI:
+        case StorageBus_SAS:
+            cCtrs = aChipset == ChipsetType_ICH9 ? 8 : 1;
+            break;
         case StorageBus_IDE:
-        case StorageBus_SAS:
         case StorageBus_Floppy:
         {
-            /** @todo raise the limits ASAP, per bus type */
-            *aMaxInstances = 1;
+            cCtrs = 1;
             break;
         }
@@ -464,4 +468,6 @@
             AssertMsgFailed(("Invalid bus type %d\n", aBus));
     }
+
+    *aMaxInstances = cCtrs;
 
     return S_OK;
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 33914)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 33915)
@@ -7166,5 +7166,5 @@
      name="ISystemProperties"
      extends="$unknown"
-     uuid="2af0100b-fda2-4c6a-8e8f-31e4ba871886"
+     uuid="9a949843-b237-46d4-8fcf-c83dcd9121ef"
      wsmap="managed"
      >
@@ -7464,5 +7464,10 @@
       <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>
+        storage controllers one can have. Value may depend on chipset type
+        used.</desc>
+
+      <param name="chipset" type="ChipsetType" dir="in">
+        <desc>The chipset type to get the value for.</desc>
+      </param>
 
       <param name="bus" type="StorageBus" dir="in">
Index: /trunk/src/VBox/Main/include/SystemPropertiesImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/SystemPropertiesImpl.h	(revision 33914)
+++ /trunk/src/VBox/Main/include/SystemPropertiesImpl.h	(revision 33915)
@@ -99,5 +99,5 @@
     STDMETHOD(GetMinPortCountForStorageBus)(StorageBus_T aBus, ULONG *aMinPortCount);
     STDMETHOD(GetMaxPortCountForStorageBus)(StorageBus_T aBus, ULONG *aMaxPortCount);
-    STDMETHOD(GetMaxInstancesOfStorageBus)(StorageBus_T aBus, ULONG *aMaxInstances);
+    STDMETHOD(GetMaxInstancesOfStorageBus)(ChipsetType_T aChipset, StorageBus_T aBus, ULONG *aMaxInstances);
     STDMETHOD(GetDeviceTypesForStorageBus)(StorageBus_T aBus, ComSafeArrayOut(DeviceType_T, aDeviceTypes));
     STDMETHOD(GetDefaultIoCacheSettingForStorageController)(StorageControllerType_T aControllerType, BOOL *aEnabled);
