Index: trunk/src/VBox/Main/ApplianceImpl.cpp
===================================================================
--- trunk/src/VBox/Main/ApplianceImpl.cpp	(revision 18194)
+++ trunk/src/VBox/Main/ApplianceImpl.cpp	(revision 18197)
@@ -1323,4 +1323,5 @@
                                nameVBox);
 
+            /* VM description */
             if (!vsysThis.strDescription.isEmpty())
                 pNewDesc->addEntry(VirtualSystemDescriptionType_Description,
@@ -1328,4 +1329,11 @@
                                     vsysThis.strDescription,
                                     vsysThis.strDescription);
+
+            /* VM license */
+            if (!vsysThis.strLicenseText.isEmpty())
+                pNewDesc->addEntry(VirtualSystemDescriptionType_License,
+                                    "",
+                                    vsysThis.strLicenseText,
+                                    vsysThis.strLicenseText);
 
             /* Now that we know the OS type, get our internal defaults based on that. */
@@ -2374,5 +2382,4 @@
 
                         llHardDisksCreated.push_back(dstHdVBox);
-
                         /* Now use the new uuid to attach the disk image to our new machine */
                         ComPtr<IMachine> sMachine;
@@ -3420,4 +3427,48 @@
  * @return
  */
+STDMETHODIMP VirtualSystemDescription::GetValuesByType(VirtualSystemDescriptionType_T aType,
+                                                       VirtualSystemDescriptionValueType_T aWhich,
+                                                       ComSafeArrayOut(BSTR, aValues))
+{
+    if (ComSafeArrayOutIsNull(aValues))
+        return E_POINTER;
+
+    AutoCaller autoCaller(this);
+    CheckComRCReturnRC(autoCaller.rc());
+
+    AutoReadLock alock(this);
+
+    std::list<VirtualSystemDescriptionEntry*> vsd = findByType (aType);
+    com::SafeArray<BSTR> sfaValues((ULONG)vsd.size());
+
+    list<VirtualSystemDescriptionEntry*>::const_iterator it;
+    size_t i = 0;
+    for (it = vsd.begin();
+         it != vsd.end();
+         ++it, ++i)
+    {
+        const VirtualSystemDescriptionEntry *vsde = (*it);
+
+        Bstr bstr;
+        switch (aWhich)
+        {
+            case VirtualSystemDescriptionValueType_Reference: bstr = vsde->strRef; break;
+            case VirtualSystemDescriptionValueType_Original: bstr = vsde->strOvf; break;
+            case VirtualSystemDescriptionValueType_Auto: bstr = vsde->strVbox; break;
+            case VirtualSystemDescriptionValueType_ExtraConfig: bstr = vsde->strExtraConfig; break;
+        }
+
+        bstr.cloneTo(&sfaValues[i]);
+    }
+
+    sfaValues.detachTo(ComSafeArrayOutArg(aValues));
+
+    return S_OK;
+}
+
+/**
+ * Public method implementation.
+ * @return
+ */
 STDMETHODIMP VirtualSystemDescription::SetFinalValues(ComSafeArrayIn(BOOL, aEnabled),
                                                       ComSafeArrayIn(IN_BSTR, argVboxValues),
Index: trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 18194)
+++ trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 18197)
@@ -3224,5 +3224,5 @@
   <enum
     name="VirtualSystemDescriptionType"
-    uuid="8ac36d00-bb7c-4a35-a835-3f004b27427b"
+    uuid="325e7fec-ce06-4174-9654-98f99478d03f"
   >
     <desc>Used with <link to="IVirtualSystemDescription" /> to describe the type of
@@ -3233,15 +3233,30 @@
     <const name="Name" value="3" />
     <const name="Description" value="4" />
-    <const name="CPU" value="5" />
-    <const name="Memory" value="6" />
-    <const name="HardDiskControllerIDE" value="7" />
-    <const name="HardDiskControllerSATA" value="8" />
-    <const name="HardDiskControllerSCSI" value="9" />
-    <const name="HardDiskImage" value="10" />
-    <const name="Floppy" value="11" />
-    <const name="CDROM" value="12" />
-    <const name="NetworkAdapter" value="13" />
-    <const name="USBController" value="14" />
-    <const name="SoundCard" value="15" />
+    <const name="License" value="5" />
+    <const name="CPU" value="6" />
+    <const name="Memory" value="7" />
+    <const name="HardDiskControllerIDE" value="8" />
+    <const name="HardDiskControllerSATA" value="9" />
+    <const name="HardDiskControllerSCSI" value="10" />
+    <const name="HardDiskImage" value="11" />
+    <const name="Floppy" value="12" />
+    <const name="CDROM" value="13" />
+    <const name="NetworkAdapter" value="14" />
+    <const name="USBController" value="15" />
+    <const name="SoundCard" value="16" />
+
+  </enum>
+
+  <enum
+    name="VirtualSystemDescriptionValueType"
+    uuid="56d9403f-3425-4118-9919-36f2a9b8c77c"
+  >
+    <desc>Used with <link to="GetValuesByType" /> to describe the value 
+    type to fetch.</desc>
+
+    <const name="Reference" value="1" />
+    <const name="Original" value="2" />
+    <const name="Auto" value="3" />
+    <const name="ExtraConfig" value="4" />
 
   </enum>
@@ -3401,4 +3416,23 @@
 
       <param name="aExtraConfigValues" type="wstring" dir="out" safearray="yes">
+        <desc></desc>
+      </param>
+
+    </method>
+
+    <method name="getValuesByType">
+      <desc>This is the same as <link to="getDescriptionByType" /> except that you can specify which
+      value types should be returned. See <link to="VirtualSystemDescriptionValueType" /> for possible 
+      values.</desc>
+
+      <param name="aType" type="VirtualSystemDescriptionType" dir="in">
+        <desc></desc>
+      </param>
+
+      <param name="aWhich" type="VirtualSystemDescriptionValueType" dir="in">
+        <desc></desc>
+      </param>
+
+      <param name="aValues" type="wstring" dir="out" safearray="yes">
         <desc></desc>
       </param>
