Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 37927)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 37928)
@@ -16681,5 +16681,5 @@
   <interface
     name="IMachineDataChangedEvent" extends="IMachineEvent"
-    uuid="6AA70A6C-0DCA-4810-8C5C-457B278E3D49"
+    uuid="abe94809-2e88-4436-83d7-50f3e64d0503"
     wsmap="managed" autogen="VBoxEvent" id="OnMachineDataChanged"
     >
@@ -16687,4 +16687,11 @@
       Any of the settings of the given machine has changed.
     </desc>
+
+    <attribute name="temporary" readonly="yes" type="boolean">
+      <desc>@c true if the settings change is temporary. All permanent
+        settings changes will trigger an event, and only temporary settings
+        changes for running VMs will trigger an event. Note: sending events
+        for temporary changes is NOT IMPLEMENTED.</desc>
+    </attribute>
   </interface>
 
Index: /trunk/src/VBox/Main/include/VirtualBoxImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/VirtualBoxImpl.h	(revision 37927)
+++ /trunk/src/VBox/Main/include/VirtualBoxImpl.h	(revision 37928)
@@ -193,5 +193,5 @@
 
     void onMachineStateChange(const Guid &aId, MachineState_T aState);
-    void onMachineDataChange(const Guid &aId);
+    void onMachineDataChange(const Guid &aId, BOOL aTemporary = FALSE);
     BOOL onExtraDataCanChange(const Guid &aId, IN_BSTR aKey, IN_BSTR aValue,
                               Bstr &aError);
Index: /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp	(revision 37927)
+++ /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp	(revision 37928)
@@ -109,48 +109,4 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-// VirtualBoxCallbackRegistration
-//
-////////////////////////////////////////////////////////////////////////////////
-
-/**
- * Registered IVirtualBoxCallback, used by VirtualBox::CallbackList and
- * VirtualBox::Data::llCallbacks.
- *
- * In addition to keeping the interface pointer this also keeps track of the
- * methods that asked to not be called again.  The latter is for reducing
- * unnecessary IPC.
- */
-class VirtualBoxCallbackRegistration
-{
-public:
-    /** Callback bit indexes (for bmDisabled). */
-    typedef enum
-    {
-        kOnMachineStateChanged = 0,
-        kOnMachineDataChanged,
-        kOnExtraDataCanChange,
-        kOnExtraDataChanged,
-        kOnMediumRegistered,
-        kOnMachineRegistered,
-        kOnSessionStateChanged,
-        kOnSnapshotTaken,
-        kOnSnapshotDeleted,
-        kOnSnapshotChanged,
-        kOnGuestPropertyChanged
-    } CallbackBit;
-
-    VirtualBoxCallbackRegistration()
-    {
-        /* nothing */
-    }
-
-    ~VirtualBoxCallbackRegistration()
-    {
-       /* nothing */
-    }
-};
-
-////////////////////////////////////////////////////////////////////////////////
-//
 // CallbackEvent class
 //
@@ -171,5 +127,5 @@
 public:
 
-    CallbackEvent(VirtualBox *aVirtualBox, VirtualBoxCallbackRegistration::CallbackBit aWhat)
+    CallbackEvent(VirtualBox *aVirtualBox, VBoxEventType_T aWhat)
         : mVirtualBox(aVirtualBox), mWhat(aWhat)
     {
@@ -187,7 +143,7 @@
      *  is bound to the lifetime of the VirtualBox instance, so it's safe.
      */
-    VirtualBox        *mVirtualBox;
+    VirtualBox         *mVirtualBox;
 protected:
-    VirtualBoxCallbackRegistration::CallbackBit mWhat;
+    VBoxEventType_T     mWhat;
 };
 
@@ -2360,32 +2316,28 @@
 struct MachineEvent : public VirtualBox::CallbackEvent
 {
-    MachineEvent(VirtualBox *aVB, const Guid &aId)
-        : CallbackEvent(aVB, VirtualBoxCallbackRegistration::kOnMachineDataChanged), id(aId.toUtf16())
+    MachineEvent(VirtualBox *aVB, VBoxEventType_T aWhat, const Guid &aId, BOOL aBool)
+        : CallbackEvent(aVB, aWhat), id(aId.toUtf16())
+        , mBool(aBool)
+        { }
+
+    MachineEvent(VirtualBox *aVB, VBoxEventType_T aWhat, const Guid &aId, MachineState_T aState)
+        : CallbackEvent(aVB, aWhat), id(aId.toUtf16())
+        , mState(aState)
         {}
 
-    MachineEvent(VirtualBox *aVB, const Guid &aId, MachineState_T aState)
-        : CallbackEvent(aVB, VirtualBoxCallbackRegistration::kOnMachineStateChanged), id(aId.toUtf16())
-        , state(aState)
-        {}
-
-    MachineEvent(VirtualBox *aVB, const Guid &aId, BOOL aRegistered)
-        : CallbackEvent(aVB, VirtualBoxCallbackRegistration::kOnMachineRegistered), id(aId.toUtf16())
-        , registered(aRegistered)
-        {}
-
     virtual HRESULT prepareEventDesc(IEventSource* aSource, VBoxEventDesc& aEvDesc)
     {
         switch (mWhat)
         {
-            case VirtualBoxCallbackRegistration::kOnMachineDataChanged:
-                aEvDesc.init(aSource, VBoxEventType_OnMachineDataChanged, id.raw());
+            case VBoxEventType_OnMachineDataChanged:
+                aEvDesc.init(aSource, mWhat, id.raw(), mBool);
                 break;
 
-            case VirtualBoxCallbackRegistration::kOnMachineStateChanged:
-                aEvDesc.init(aSource, VBoxEventType_OnMachineStateChanged, id.raw(), state);
+            case VBoxEventType_OnMachineStateChanged:
+                aEvDesc.init(aSource, mWhat, id.raw(), mState);
                 break;
 
-            case VirtualBoxCallbackRegistration::kOnMachineRegistered:
-                aEvDesc.init(aSource, VBoxEventType_OnMachineRegistered, id.raw(), registered);
+            case VBoxEventType_OnMachineRegistered:
+                aEvDesc.init(aSource, mWhat, id.raw(), mBool);
                 break;
 
@@ -2397,6 +2349,6 @@
 
     Bstr id;
-    MachineState_T state;
-    BOOL registered;
+    MachineState_T mState;
+    BOOL mBool;
 };
 
@@ -2406,5 +2358,5 @@
 void VirtualBox::onMachineStateChange(const Guid &aId, MachineState_T aState)
 {
-    postEvent(new MachineEvent(this, aId, aState));
+    postEvent(new MachineEvent(this, VBoxEventType_OnMachineStateChanged, aId, aState));
 }
 
@@ -2412,7 +2364,7 @@
  *  @note Doesn't lock any object.
  */
-void VirtualBox::onMachineDataChange(const Guid &aId)
-{
-    postEvent(new MachineEvent(this, aId));
+void VirtualBox::onMachineDataChange(const Guid &aId, BOOL aTemporary)
+{
+    postEvent(new MachineEvent(this, VBoxEventType_OnMachineDataChanged, aId, aTemporary));
 }
 
@@ -2466,5 +2418,5 @@
     ExtraDataEvent(VirtualBox *aVB, const Guid &aMachineId,
                    IN_BSTR aKey, IN_BSTR aVal)
-        : CallbackEvent(aVB, VirtualBoxCallbackRegistration::kOnExtraDataChanged)
+        : CallbackEvent(aVB, VBoxEventType_OnExtraDataChanged)
         , machineId(aMachineId.toUtf16()), key(aKey), val(aVal)
     {}
@@ -2491,5 +2443,5 @@
 void VirtualBox::onMachineRegistered(const Guid &aId, BOOL aRegistered)
 {
-    postEvent(new MachineEvent(this, aId, aRegistered));
+    postEvent(new MachineEvent(this, VBoxEventType_OnMachineRegistered, aId, aRegistered));
 }
 
@@ -2498,5 +2450,5 @@
 {
     SessionEvent(VirtualBox *aVB, const Guid &aMachineId, SessionState_T aState)
-        : CallbackEvent(aVB, VirtualBoxCallbackRegistration::kOnSessionStateChanged)
+        : CallbackEvent(aVB, VBoxEventType_OnSessionStateChanged)
         , machineId(aMachineId.toUtf16()), sessionState(aState)
     {}
@@ -2522,5 +2474,5 @@
 {
     SnapshotEvent(VirtualBox *aVB, const Guid &aMachineId, const Guid &aSnapshotId,
-                  VirtualBoxCallbackRegistration::CallbackBit aWhat)
+                  VBoxEventType_T aWhat)
         : CallbackEvent(aVB, aWhat)
         , machineId(aMachineId), snapshotId(aSnapshotId)
@@ -2543,5 +2495,5 @@
 {
     postEvent(new SnapshotEvent(this, aMachineId, aSnapshotId,
-                                VirtualBoxCallbackRegistration::kOnSnapshotTaken));
+                                VBoxEventType_OnSnapshotTaken));
 }
 
@@ -2552,5 +2504,5 @@
 {
     postEvent(new SnapshotEvent(this, aMachineId, aSnapshotId,
-                                VirtualBoxCallbackRegistration::kOnSnapshotDeleted));
+                                VBoxEventType_OnSnapshotDeleted));
 }
 
@@ -2561,5 +2513,5 @@
 {
     postEvent(new SnapshotEvent(this, aMachineId, aSnapshotId,
-                                VirtualBoxCallbackRegistration::kOnSnapshotChanged));
+                                VBoxEventType_OnSnapshotChanged));
 }
 
@@ -2569,5 +2521,5 @@
     GuestPropertyEvent(VirtualBox *aVBox, const Guid &aMachineId,
                        IN_BSTR aName, IN_BSTR aValue, IN_BSTR aFlags)
-        : CallbackEvent(aVBox, VirtualBoxCallbackRegistration::kOnGuestPropertyChanged),
+        : CallbackEvent(aVBox, VBoxEventType_OnGuestPropertyChanged),
           machineId(aMachineId),
           name(aName),
