Index: /trunk/src/VBox/Main/ApplianceImplExport.cpp
===================================================================
--- /trunk/src/VBox/Main/ApplianceImplExport.cpp	(revision 29980)
+++ /trunk/src/VBox/Main/ApplianceImplExport.cpp	(revision 29981)
@@ -265,5 +265,5 @@
             Utf8Str strVbox = "LsiLogicSas";
             lSCSIControllerIndex = (int32_t)pNewDesc->m->llDescriptions.size();
-            pNewDesc->addEntry(VirtualSystemDescriptionType_HardDiskControllerSCSI,
+            pNewDesc->addEntry(VirtualSystemDescriptionType_HardDiskControllerSAS,
                                Utf8StrFmt("%d", lSCSIControllerIndex),
                                strVbox,
@@ -1019,4 +1019,5 @@
 
                 case VirtualSystemDescriptionType_HardDiskControllerSCSI:
+                case VirtualSystemDescriptionType_HardDiskControllerSAS:
                     /*  <Item>
                             <rasd:Caption>scsiController0</rasd:Caption>
@@ -1049,5 +1050,5 @@
                         else
                             throw setError(VBOX_E_NOT_SUPPORTED,
-                                            tr("Invalid config string \"%s\" in SCSI controller"), desc.strVboxCurrent.c_str());
+                                            tr("Invalid config string \"%s\" in SCSI/SAS controller"), desc.strVboxCurrent.c_str());
 
                         // remember this ID
Index: /trunk/src/VBox/Main/ApplianceImplImport.cpp
===================================================================
--- /trunk/src/VBox/Main/ApplianceImplImport.cpp	(revision 29980)
+++ /trunk/src/VBox/Main/ApplianceImplImport.cpp	(revision 29981)
@@ -444,13 +444,18 @@
                         if (cSCSIused < 1)
                         {
+                            VirtualSystemDescriptionType_T vsdet = VirtualSystemDescriptionType_HardDiskControllerSCSI;
                             Utf8Str hdcController = "LsiLogic";
                             if (!hdc.strControllerType.compare("lsilogicsas", Utf8Str::CaseInsensitive))
+                            {
+                                // OVF considers SAS a variant of SCSI but VirtualBox considers it a class of its own
+                                vsdet = VirtualSystemDescriptionType_HardDiskControllerSAS;
                                 hdcController = "LsiLogicSas";
+                            }
                             else if (!hdc.strControllerType.compare("BusLogic", Utf8Str::CaseInsensitive))
                                 hdcController = "BusLogic";
-                            pNewDesc->addEntry(VirtualSystemDescriptionType_HardDiskControllerSCSI,
-                                                strControllerID,
-                                                hdc.strControllerType,
-                                                hdcController);
+                            pNewDesc->addEntry(vsdet,
+                                               strControllerID,
+                                               hdc.strControllerType,
+                                               hdcController);
                         }
                         else
@@ -1714,4 +1719,18 @@
     }
 
+    /* Hard disk controller SAS */
+    std::list<VirtualSystemDescriptionEntry*> vsdeHDCSAS = vsdescThis->findByType(VirtualSystemDescriptionType_HardDiskControllerSAS);
+    if (vsdeHDCSAS.size() > 1)
+        throw setError(VBOX_E_FILE_ERROR,
+                       tr("Too many SAS controllers in OVF; import facility only supports one"));
+    if (vsdeHDCSAS.size() > 0)
+    {
+        ComPtr<IStorageController> pController;
+        rc = pNewMachine->AddStorageController(Bstr(L"SAS Controller"), StorageBus_SAS, pController.asOutParam());
+        if (FAILED(rc)) throw rc;
+        rc = pController->COMSETTER(ControllerType)(StorageControllerType_LsiLogicSas);
+        if (FAILED(rc)) throw rc;
+    }
+
     /* Now its time to register the machine before we add any hard disks */
     rc = mVirtualBox->RegisterMachine(pNewMachine);
@@ -2022,4 +2041,5 @@
      */
 
+    // for each storage controller...
     for (settings::StorageControllersList::iterator sit = config.storageMachine.llStorageControllers.begin();
          sit != config.storageMachine.llStorageControllers.end();
@@ -2028,4 +2048,21 @@
         settings::StorageController &sc = *sit;
 
+        // find the OVF virtual system description entry for this storage controller
+        switch (sc.storageBus)
+        {
+            case StorageBus_SATA:
+            break;
+
+            case StorageBus_SCSI:
+            break;
+
+            case StorageBus_IDE:
+            break;
+
+            case StorageBus_SAS:
+            break;
+        }
+
+        // for each medium attachment to this controller...
         for (settings::AttachedDevicesList::iterator dit = sc.llAttachedDevices.begin();
              dit != sc.llAttachedDevices.end();
