Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 78254)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 78255)
@@ -3304,5 +3304,5 @@
     uuid="86a98347-7619-41aa-aece-b21ac5c1a7e6"
     wsmap="managed"
-    reservedMethods="8" reservedAttributes="8"
+    reservedMethods="7" reservedAttributes="8"
     >
     <desc>
@@ -3606,4 +3606,18 @@
       <param name="passwords" type="wstring" dir="in" safearray="yes">
         <desc>List of matching passwords.</desc>
+      </param>
+    </method>
+
+    <method name="createVirtualSystemDescriptions">
+      <desc>Creates a number of <link to="IVirtualSystemDescription" /> objects and store them
+      in the <link to="#virtualSystemDescriptions" /> array.
+      </desc>
+
+      <param name="requested" type="unsigned long" dir="in">
+        <desc>Requested number of new virtual system description objects</desc>
+      </param>
+
+      <param name="created" type="unsigned long" dir="return">
+        <desc>Actually created number of virtual system description objects</desc>
       </param>
     </method>
Index: /trunk/src/VBox/Main/include/ApplianceImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ApplianceImpl.h	(revision 78254)
+++ /trunk/src/VBox/Main/include/ApplianceImpl.h	(revision 78255)
@@ -102,4 +102,5 @@
     HRESULT createVFSExplorer(const com::Utf8Str &aURI,
                               ComPtr<IVFSExplorer> &aExplorer);
+    HRESULT createVirtualSystemDescriptions(ULONG aRequested, ULONG *aCreated);
     HRESULT write(const com::Utf8Str &aFormat,
                   const std::vector<ExportOptions_T> &aOptions,
Index: /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp	(revision 78254)
+++ /trunk/src/VBox/Main/src-server/ApplianceImpl.cpp	(revision 78255)
@@ -615,4 +615,62 @@
 }
 
+
+/**
+ * Public method implementation.
+ * Add the "aRequested" numbers of new empty objects of VSD into the list
+ * "virtualSystemDescriptions".
+ * The parameter "aCreated" keeps the actual number of the added objects.
+ * In case of exception all added objects are removed from the list.
+ */
+HRESULT Appliance::createVirtualSystemDescriptions(ULONG aRequested, ULONG *aCreated)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    HRESULT rc = S_OK;
+    uint32_t lQuantity = aRequested;
+    uint32_t oldSize = m->virtualSystemDescriptions.size();
+    uint32_t i=0;
+
+    if (lQuantity < 1)
+        return setError(E_FAIL, tr("The number of VirtualSystemDescription objects must be at least 1 or more."));
+    try
+    {
+        for (; i<lQuantity; ++i)
+        {
+            ComObjPtr<VirtualSystemDescription> opVSD;
+            rc = opVSD.createObject();
+            if (SUCCEEDED(rc))
+            {
+                rc = opVSD->init();
+                if (SUCCEEDED(rc))
+                    m->virtualSystemDescriptions.push_back(opVSD);
+                else
+                    break;
+            }
+            else
+                break;
+        }
+
+        if (i<lQuantity)
+            LogRel(("Number of created VirtualSystemDescription objects is less than requested"
+                    "(Requested %d, Created %d)",lQuantity, i));
+
+        *aCreated = i;
+    }
+    catch (HRESULT aRC)
+    {
+        for (; i>0; --i)
+        {
+            if (!m->virtualSystemDescriptions.empty())
+                m->virtualSystemDescriptions.pop_back();
+            else
+                break;
+        }
+        rc = aRC;
+    }
+
+    return rc;
+}
+
 /**
  * Public method implementation.
