Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp	(revision 68132)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageMisc.cpp	(revision 68133)
@@ -1531,5 +1531,6 @@
              */
             ComPtr<IUnattended> ptrUnattended;
-            CHECK_ERROR_BREAK(machine, CreateUnattendedInstaller(ptrUnattended.asOutParam()));
+            CHECK_ERROR_BREAK(a->virtualBox, CreateUnattendedInstaller(ptrUnattended.asOutParam()));
+            CHECK_ERROR_BREAK(ptrUnattended, COMSETTER(Machine)(machine));
 
             if (pszIsoPath)
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 68132)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 68133)
@@ -1900,5 +1900,5 @@
   <interface
     name="IVirtualBox" extends="$unknown"
-    uuid="0169423f-46b4-cde9-91af-1e9d5b6cd945"
+    uuid="9570b9d5-f1a1-448a-10c5-e12f5285adad"
     wsmap="managed"
     reservedMethods="8" reservedAttributes="12"
@@ -2383,4 +2383,15 @@
       <param name="appliance" type="IAppliance" dir="return">
         <desc>New appliance.</desc>
+      </param>
+    </method>
+
+    <method name="createUnattendedInstaller">
+      <desc>
+        Creates a new <link to="IUnattended"/> guest installation object.  This can be used to
+        analyze an installation ISO to create and configure a new machine for it to be installed
+        on.  It can also be used to (re)install an existing machine.
+      </desc>
+      <param name="unattended" type="IUnattended" dir="return">
+        <desc>New unattended object.</desc>
       </param>
     </method>
@@ -3767,5 +3778,5 @@
   <interface
     name="IUnattended" extends="$unknown"
-    uuid="da34bfb3-437a-4510-6c7e-7687b00d378d"
+    uuid="3107e9fd-7b3a-4008-91de-24273f605a8e"
     wsmap="managed"
     reservedMethods="4" reservedAttributes="16"
@@ -3778,6 +3789,10 @@
       The typical workflow is:
       <ol>
-        <li>Call <link to="IMachine::createUnattendedInstaller"/> to create the object</li>
-        <li>Set the relevant IUnattended attributes.</li>
+        <li>Call <link to="IVirtualBox::createUnattendedInstaller"/> to create the object</li>
+        <li>Set <link to="IUnattended::isoPath"/> and call <link to="IUnattended::detectIsoOS"/></li>
+        <li>Create, configure and register a machine according to <link to="IUnattended::detectedOSTypeId"/>
+            and the other detectedOS* attributes.</li>
+        <li>Set <link to="IUnattended::machine"/> to the new IMachine instance.</li>
+        <li>Set the other IUnattended attributes as desired.</li>
         <li>Call <link to="IUnattended::prepare"/> for the object to check the
             attribute values and create an internal installer instance.</li>
@@ -3789,4 +3804,6 @@
             installer and allow restarting from the second step.</li>
       </ol>
+
+      Note! Steps one is currently not implemented.
     </desc>
 
@@ -3794,4 +3811,13 @@
       <desc>
         Guest operating system ISO image
+      </desc>
+    </attribute>
+
+    <attribute name="machine" type="IMachine">
+      <desc>
+        The associated machine object.
+
+        This must be set before <link to="IUnattended::prepare"/> is called.
+        The VM must be registered.
       </desc>
     </attribute>
@@ -3959,10 +3985,4 @@
         Used only with Windows installation CD/DVD:
         https://technet.microsoft.com/en-us/library/cc766022%28v=ws.10%29.aspx
-      </desc>
-    </attribute>
-
-    <attribute name="machine" type="IMachine" readonly="yes">
-      <desc>
-        The associated machine object.
       </desc>
     </attribute>
@@ -4723,5 +4743,5 @@
   <interface
     name="IMachine" extends="$unknown"
-    uuid="b2547866-a0a1-4391-8b86-6952d82efaa0"
+    uuid="f50b24f0-0956-453c-d14c-8c27c683c295"
     wsmap="managed"
     wrap-hint-server-addinterfaces="IInternalMachineControl"
@@ -8172,13 +8192,4 @@
       <param name="progress" type="IProgress" dir="return">
         <desc>Progress object to track the operation completion.</desc>
-      </param>
-    </method>
-
-    <method name="createUnattendedInstaller">
-      <desc>
-        Creates a new <link to="IUnattended"/> guest installation object.
-      </desc>
-      <param name="unattended" type="IUnattended" dir="return">
-        <desc>New unattended object.</desc>
       </param>
     </method>
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 68132)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 68133)
@@ -1198,5 +1198,4 @@
     HRESULT restoreSnapshot(const ComPtr<ISnapshot> &aSnapshot,
                             ComPtr<IProgress> &aProgress);
-    HRESULT createUnattendedInstaller(ComPtr<IUnattended> &aUnattended);
     HRESULT applyDefaults(const com::Utf8Str &aFlags);
 
Index: /trunk/src/VBox/Main/include/VirtualBoxImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/VirtualBoxImpl.h	(revision 68132)
+++ /trunk/src/VBox/Main/include/VirtualBoxImpl.h	(revision 68133)
@@ -300,4 +300,5 @@
                              std::vector<MachineState_T> &aStates);
     HRESULT createAppliance(ComPtr<IAppliance> &aAppliance);
+    HRESULT createUnattendedInstaller(ComPtr<IUnattended> &aUnattended);
     HRESULT createMedium(const com::Utf8Str &aFormat,
                          const com::Utf8Str &aLocation,
Index: /trunk/src/VBox/Main/src-server/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 68132)
+++ /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 68133)
@@ -44,7 +44,4 @@
 #include "MachineImplCloneVM.h"
 #include "AutostartDb.h"
-#ifdef VBOX_WITH_UNATTENDED
-# include "UnattendedImpl.h"
-#endif
 #include "SystemPropertiesImpl.h"
 
@@ -15115,23 +15112,4 @@
 }
 
-HRESULT Machine::createUnattendedInstaller(ComPtr<IUnattended> &aUnattended)
-{
-#ifdef VBOX_WITH_UNATTENDED
-    ComObjPtr<Unattended> ptrUnattended;
-    HRESULT hrc = ptrUnattended.createObject();
-    if (SUCCEEDED(hrc))
-    {
-        AutoReadLock wlock(this COMMA_LOCKVAL_SRC_POS);
-        hrc = ptrUnattended->init(this);
-        if (SUCCEEDED(hrc))
-            hrc = ptrUnattended.queryInterfaceTo(aUnattended.asOutParam());
-    }
-    return hrc;
-#else
-    NOREF(aUnattended);
-    return E_NOTIMPL;
-#endif
-}
-
 HRESULT Machine::applyDefaults(const com::Utf8Str &aFlags)
 {
Index: /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp	(revision 68132)
+++ /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp	(revision 68133)
@@ -70,4 +70,7 @@
 #ifdef VBOX_WITH_EXTPACK
 # include "ExtPackManagerImpl.h"
+#endif
+#ifdef VBOX_WITH_UNATTENDED
+# include "UnattendedImpl.h"
 #endif
 #include "AutostartDb.h"
@@ -1799,4 +1802,23 @@
 }
 
+HRESULT VirtualBox::createUnattendedInstaller(ComPtr<IUnattended> &aUnattended)
+{
+#ifdef VBOX_WITH_UNATTENDED
+    ComObjPtr<Unattended> ptrUnattended;
+    HRESULT hrc = ptrUnattended.createObject();
+    if (SUCCEEDED(hrc))
+    {
+        AutoReadLock wlock(this COMMA_LOCKVAL_SRC_POS);
+        hrc = ptrUnattended->initUnattended(this);
+        if (SUCCEEDED(hrc))
+            hrc = ptrUnattended.queryInterfaceTo(aUnattended.asOutParam());
+    }
+    return hrc;
+#else
+    NOREF(aUnattended);
+    return E_NOTIMPL;
+#endif
+}
+
 HRESULT VirtualBox::createMedium(const com::Utf8Str &aFormat,
                                  const com::Utf8Str &aLocation,
