Index: /trunk/src/VBox/Main/include/ConsoleImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 85308)
+++ /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 85309)
@@ -291,6 +291,6 @@
     static HRESULT i_storageBusPortDeviceToLun(StorageBus_T enmBus, LONG port, LONG device, unsigned &uLun);
     // Called from event listener
-    HRESULT i_onNATRedirectRuleChange(ULONG ulInstance, BOOL aNatRuleRemove,
-                                      NATProtocol_T aProto, IN_BSTR aHostIp, LONG aHostPort, IN_BSTR aGuestIp, LONG aGuestPort);
+    HRESULT i_onNATRedirectRuleChanged(ULONG ulInstance, BOOL aNatRuleRemove,
+                                       NATProtocol_T aProto, IN_BSTR aHostIp, LONG aHostPort, IN_BSTR aGuestIp, LONG aGuestPort);
     HRESULT i_onNATDnsChanged();
 
Index: /trunk/src/VBox/Main/include/GuestImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/GuestImpl.h	(revision 85308)
+++ /trunk/src/VBox/Main/include/GuestImpl.h	(revision 85309)
@@ -95,5 +95,6 @@
     void i_setAdditionsStatus(VBoxGuestFacilityType a_enmFacility, VBoxGuestFacilityStatus a_enmStatus,
                               uint32_t a_fFlags, PCRTTIMESPEC a_pTimeSpecTS);
-    void i_onUserStateChange(Bstr aUser, Bstr aDomain, VBoxGuestUserState enmState, const uint8_t *puDetails, uint32_t cbDetails);
+    void i_onUserStateChanged(const Utf8Str &aUser, const Utf8Str &aDomain, VBoxGuestUserState enmState,
+                              const uint8_t *puDetails, uint32_t cbDetails);
     void i_setSupportedFeatures(uint32_t aCaps);
     HRESULT i_setStatistic(ULONG aCpuId, GUESTSTATTYPE enmType, ULONG aVal);
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 85308)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 85309)
@@ -512,7 +512,7 @@
     // callback handlers
     virtual HRESULT i_onNetworkAdapterChange(INetworkAdapter * /* networkAdapter */, BOOL /* changeAdapter */) { return S_OK; }
-    virtual HRESULT i_onNATRedirectRuleChange(ULONG /* slot */, BOOL /* fRemove */ , IN_BSTR /* name */,
-                                              NATProtocol_T /* protocol */, IN_BSTR /* host ip */, LONG /* host port */,
-                                              IN_BSTR /* guest port */, LONG /* guest port */ ) { return S_OK; }
+    virtual HRESULT i_onNATRedirectRuleChanged(ULONG /* slot */, BOOL /* fRemove */ , const Utf8Str & /* name */,
+                                               NATProtocol_T /* protocol */, const Utf8Str & /* host ip */, LONG /* host port */,
+                                               const Utf8Str & /* guest port */, LONG /* guest port */ ) { return S_OK; }
     virtual HRESULT i_onAudioAdapterChange(IAudioAdapter * /* audioAdapter */) { return S_OK; }
     virtual HRESULT i_onSerialPortChange(ISerialPort * /* serialPort */) { return S_OK; }
@@ -1319,7 +1319,7 @@
 
     HRESULT i_onNetworkAdapterChange(INetworkAdapter *networkAdapter, BOOL changeAdapter);
-    HRESULT i_onNATRedirectRuleChange(ULONG ulSlot, BOOL aNatRuleRemove, IN_BSTR aRuleName,
-                                      NATProtocol_T aProto, IN_BSTR aHostIp, LONG aHostPort,
-                                      IN_BSTR aGuestIp, LONG aGuestPort);
+    HRESULT i_onNATRedirectRuleChanged(ULONG ulSlot, BOOL aNatRuleRemove, const Utf8Str &aRuleName,
+                                       NATProtocol_T aProto, const Utf8Str &aHostIp, LONG aHostPort,
+                                       const Utf8Str &aGuestIp, LONG aGuestPort) RT_OVERRIDE;
     HRESULT i_onStorageControllerChange(const com::Guid &aMachineId, const com::Utf8Str &aControllerName);
     HRESULT i_onMediumChange(IMediumAttachment *aMediumAttachment, BOOL aForce);
Index: /trunk/src/VBox/Main/include/VirtualBoxImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/VirtualBoxImpl.h	(revision 85308)
+++ /trunk/src/VBox/Main/include/VirtualBoxImpl.h	(revision 85309)
@@ -192,7 +192,7 @@
 
     void i_onGuestPropertyChanged(const Guid &aMachineId, const Utf8Str &aName, const Utf8Str &aValue, const Utf8Str &aFlags);
-    void i_onNatRedirectChanged(const Guid &aMachineId, ULONG ulSlot, bool fRemove, IN_BSTR aName,
-                                NATProtocol_T aProto, IN_BSTR aHostIp, uint16_t aHostPort,
-                                IN_BSTR aGuestIp, uint16_t aGuestPort);
+    void i_onNatRedirectChanged(const Guid &aMachineId, ULONG ulSlot, bool fRemove, const Utf8Str &aName,
+                                NATProtocol_T aProto, const Utf8Str &aHostIp, uint16_t aHostPort,
+                                const Utf8Str &aGuestIp, uint16_t aGuestPort);
     void i_onNATNetworkChanged(const Utf8Str &aNetworkName);
     void i_onNATNetworkStartStop(const Utf8Str &aNetworkName, BOOL aStart);
Index: /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 85308)
+++ /trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 85309)
@@ -299,5 +299,4 @@
             case VBoxEventType_OnNATRedirect:
             {
-                Bstr id;
                 ComPtr<IMachine> pMachine = mConsole->i_machine();
                 ComPtr<INATRedirectEvent> pNREv = aEvent;
@@ -305,18 +304,22 @@
                 Assert(pNREv);
 
+                Bstr id;
                 rc = pNREv->COMGETTER(MachineId)(id.asOutParam());
                 AssertComRC(rc);
                 if (id != mConsole->i_getId())
                     break;
+
                 /* now we can operate with redirects */
-                NATProtocol_T proto;
+                NATProtocol_T proto = (NATProtocol_T)0;
                 pNREv->COMGETTER(Proto)(&proto);
                 BOOL fRemove;
                 pNREv->COMGETTER(Remove)(&fRemove);
-                Bstr hostIp, guestIp;
-                LONG hostPort, guestPort;
+                Bstr hostIp;
                 pNREv->COMGETTER(HostIP)(hostIp.asOutParam());
+                LONG hostPort = 0;
                 pNREv->COMGETTER(HostPort)(&hostPort);
+                Bstr guestIp;
                 pNREv->COMGETTER(GuestIP)(guestIp.asOutParam());
+                LONG guestPort = 0;
                 pNREv->COMGETTER(GuestPort)(&guestPort);
                 ULONG ulSlot;
@@ -325,5 +328,5 @@
                 if (FAILED(rc))
                     break;
-                mConsole->i_onNATRedirectRuleChange(ulSlot, fRemove, proto, hostIp.raw(), hostPort, guestIp.raw(), guestPort);
+                mConsole->i_onNATRedirectRuleChanged(ulSlot, fRemove, proto, hostIp.raw(), hostPort, guestIp.raw(), guestPort);
                 break;
             }
@@ -4078,8 +4081,6 @@
  * @note Locks this object for writing.
  */
-HRESULT Console::i_onNATRedirectRuleChange(ULONG ulInstance, BOOL aNatRuleRemove,
-                                           NATProtocol_T aProto, IN_BSTR aHostIP,
-                                           LONG aHostPort, IN_BSTR aGuestIP,
-                                           LONG aGuestPort)
+HRESULT Console::i_onNATRedirectRuleChanged(ULONG ulInstance, BOOL aNatRuleRemove, NATProtocol_T aProto, IN_BSTR aHostIP,
+                                            LONG aHostPort, IN_BSTR aGuestIP, LONG aGuestPort)
 {
     LogFlowThisFunc(("\n"));
Index: /trunk/src/VBox/Main/src-client/GuestImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/GuestImpl.cpp	(revision 85308)
+++ /trunk/src/VBox/Main/src-client/GuestImpl.cpp	(revision 85309)
@@ -1073,6 +1073,6 @@
  * @param   cbDetails           Size (in bytes) of state details. Pass 0 if not used.
  */
-void Guest::i_onUserStateChange(Bstr aUser, Bstr aDomain, VBoxGuestUserState enmState,
-                                const uint8_t *pbDetails, uint32_t cbDetails)
+void Guest::i_onUserStateChanged(const Utf8Str &aUser, const Utf8Str &aDomain, VBoxGuestUserState enmState,
+                                 const uint8_t *pbDetails, uint32_t cbDetails)
 {
     RT_NOREF(pbDetails, cbDetails);
@@ -1082,7 +1082,7 @@
     AssertComRCReturnVoid(autoCaller.rc());
 
-    Bstr strDetails; /** @todo Implement state details here. */
-
-    ::FireGuestUserStateChangedEvent(mEventSource, aUser.raw(), aDomain.raw(), (GuestUserState_T)enmState, strDetails.raw());
+    Utf8Str strDetails; /** @todo Implement state details here. */
+
+    ::FireGuestUserStateChangedEvent(mEventSource, aUser, aDomain, (GuestUserState_T)enmState, strDetails);
     LogFlowFuncLeave();
 }
Index: /trunk/src/VBox/Main/src-client/VMMDevInterface.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/VMMDevInterface.cpp	(revision 85308)
+++ /trunk/src/VBox/Main/src-client/VMMDevInterface.cpp	(revision 85309)
@@ -187,6 +187,5 @@
     AssertPtrReturnVoid(pGuest);
 
-    pGuest->i_onUserStateChange(Bstr(pszUser), Bstr(pszDomain), (VBoxGuestUserState)uState,
-                                pabDetails, cbDetails);
+    pGuest->i_onUserStateChanged(Utf8Str(pszUser), Utf8Str(pszDomain), (VBoxGuestUserState)uState, pabDetails, cbDetails);
 }
 
Index: /trunk/src/VBox/Main/src-server/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 85308)
+++ /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 85309)
@@ -13853,7 +13853,7 @@
  *  @note Locks this object for reading.
  */
-HRESULT SessionMachine::i_onNATRedirectRuleChange(ULONG ulSlot, BOOL aNatRuleRemove, IN_BSTR aRuleName,
-                                                  NATProtocol_T aProto, IN_BSTR aHostIp, LONG aHostPort,
-                                                  IN_BSTR aGuestIp, LONG aGuestPort)
+HRESULT SessionMachine::i_onNATRedirectRuleChanged(ULONG ulSlot, BOOL aNatRuleRemove, const Utf8Str &aRuleName,
+                                                   NATProtocol_T aProto, const Utf8Str &aHostIp, LONG aHostPort,
+                                                   const Utf8Str &aGuestIp, LONG aGuestPort)
 {
     LogFlowThisFunc(("\n"));
Index: /trunk/src/VBox/Main/src-server/NATEngineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/NATEngineImpl.cpp	(revision 85308)
+++ /trunk/src/VBox/Main/src-server/NATEngineImpl.cpp	(revision 85309)
@@ -326,6 +326,5 @@
 
     alock.release();
-    mParent->i_onNATRedirectRuleChange(ulSlot, FALSE, Bstr(name).raw(), aProto, Bstr(r.strHostIP).raw(),
-                                       r.u16HostPort, Bstr(r.strGuestIP).raw(), r.u16GuestPort);
+    mParent->i_onNATRedirectRuleChanged(ulSlot, FALSE, name, aProto, r.strHostIP, r.u16HostPort, r.strGuestIP, r.u16GuestPort);
     return S_OK;
 }
@@ -350,6 +349,5 @@
     mParent->i_setModified(Machine::IsModified_NetworkAdapters);
     alock.release();
-    mParent->i_onNATRedirectRuleChange(ulSlot, TRUE, Bstr(aName).raw(), r.proto, Bstr(r.strHostIP).raw(),
-                                       r.u16HostPort, Bstr(r.strGuestIP).raw(), r.u16GuestPort);
+    mParent->i_onNATRedirectRuleChanged(ulSlot, TRUE, aName, r.proto, r.strHostIP, r.u16HostPort, r.strGuestIP, r.u16GuestPort);
     return S_OK;
 }
Index: /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp	(revision 85308)
+++ /trunk/src/VBox/Main/src-server/VirtualBoxImpl.cpp	(revision 85309)
@@ -3723,9 +3723,9 @@
  *  @note Doesn't lock any object.
  */
-void VirtualBox::i_onNatRedirectChanged(const Guid &aMachineId, ULONG ulSlot, bool fRemove, IN_BSTR aName,
-                                        NATProtocol_T aProto, IN_BSTR aHostIp, uint16_t aHostPort,
-                                        IN_BSTR aGuestIp, uint16_t aGuestPort)
-{
-    ::FireNATRedirectEvent(m->pEventSource, aMachineId.toUtf16().raw(), ulSlot, fRemove, aName, aProto, aHostIp,
+void VirtualBox::i_onNatRedirectChanged(const Guid &aMachineId, ULONG ulSlot, bool fRemove, const Utf8Str &aName,
+                                        NATProtocol_T aProto, const Utf8Str &aHostIp, uint16_t aHostPort,
+                                        const Utf8Str &aGuestIp, uint16_t aGuestPort)
+{
+    ::FireNATRedirectEvent(m->pEventSource, aMachineId.toString(), ulSlot, fRemove, aName, aProto, aHostIp,
                            aHostPort, aGuestIp, aGuestPort);
 }
