Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp	(revision 58181)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceAutoMount.cpp	(revision 58182)
@@ -634,7 +634,4 @@
     }
 
-    RTSemEventMultiDestroy(g_AutoMountEvent);
-    g_AutoMountEvent = NIL_RTSEMEVENTMULTI;
-
     VGSvcVerbose(3, "vbsvcAutoMountWorker: Finished with rc=%Rrc\n", rc);
     return VINF_SUCCESS;
@@ -666,11 +663,5 @@
 static DECLCALLBACK(void) vbsvcAutoMountStop(void)
 {
-    /*
-     * We need this check because at the moment our auto-mount
-     * thread really is a one-timer which destroys the event itself
-     * after running.
-     */
-    if (g_AutoMountEvent != NIL_RTSEMEVENTMULTI)
-        RTSemEventMultiSignal(g_AutoMountEvent);
+    RTSemEventMultiSignal(g_AutoMountEvent);
 }
 
Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp	(revision 58181)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceBalloon.cpp	(revision 58182)
@@ -394,7 +394,4 @@
         VGSvcVerbose(3, "vgsvcBalloonInit: VbglR3CtlFilterMask failed with %Rrc\n", rc);
 
-    RTSemEventMultiDestroy(g_MemBalloonEvent);
-    g_MemBalloonEvent = NIL_RTSEMEVENTMULTI;
-
     VGSvcVerbose(3, "vgsvcBalloonInit: finished mem balloon change request thread\n");
     return VINF_SUCCESS;
@@ -408,4 +405,17 @@
 {
     RTSemEventMultiSignal(g_MemBalloonEvent);
+}
+
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnTerm}
+ */
+static DECLCALLBACK(void) vgsvcBalloonTerm(void)
+{
+    if (g_MemBalloonEvent != NIL_RTSEMEVENTMULTI)
+    {
+        RTSemEventMultiDestroy(g_MemBalloonEvent);
+        g_MemBalloonEvent = NIL_RTSEMEVENTMULTI;
+    }
 }
 
@@ -430,4 +440,4 @@
     vgsvcBalloonWorker,
     vgsvcBalloonStop,
-    VGSvcDefaultTerm
+    vgsvcBalloonTerm
 };
Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp	(revision 58181)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp	(revision 58182)
@@ -761,7 +761,4 @@
         RTProcTerminate(hProcess);
 
-    RTSemEventMultiDestroy(g_PageSharingEvent);
-    g_PageSharingEvent = NIL_RTSEMEVENTMULTI;
-
     VGSvcVerbose(3, "vgsvcPageSharingWorkerProcess: finished thread\n");
     return 0;
@@ -776,4 +773,17 @@
 {
     RTSemEventMultiSignal(g_PageSharingEvent);
+}
+
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnTerm}
+ */
+static DECLCALLBACK(void) vgsvcPageSharingTerm(void)
+{
+    if (g_PageSharingEvent != NIL_RTSEMEVENTMULTI)
+    {
+        RTSemEventMultiDestroy(g_PageSharingEvent);
+        g_PageSharingEvent = NIL_RTSEMEVENTMULTI;
+    }
 }
 
@@ -802,5 +812,5 @@
 #endif
     vgsvcPageSharingStop,
-    VGSvcDefaultTerm
+    vgsvcPageSharingTerm
 };
 
Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp	(revision 58181)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxServiceStats.cpp	(revision 58182)
@@ -685,7 +685,4 @@
         VGSvcVerbose(3, "vgsvcVMStatsWorker: VbglR3CtlFilterMask failed with %d\n", rc);
 
-    RTSemEventMultiDestroy(g_VMStatEvent);
-    g_VMStatEvent = NIL_RTSEMEVENTMULTI;
-
     VGSvcVerbose(3, "VBoxStatsThread: finished statistics change request thread\n");
     return 0;
@@ -699,4 +696,17 @@
 {
     RTSemEventMultiSignal(g_VMStatEvent);
+}
+
+
+/**
+ * @interface_method_impl{VBOXSERVICE,pfnTerm}
+ */
+static DECLCALLBACK(void) vgsvcVMStatsTerm(void)
+{
+    if (g_VMStatEvent != NIL_RTSEMEVENTMULTI)
+    {
+        RTSemEventMultiDestroy(g_VMStatEvent);
+        g_VMStatEvent = NIL_RTSEMEVENTMULTI;
+    }
 }
 
@@ -721,5 +731,5 @@
     vgsvcVMStatsWorker,
     vgsvcVMStatsStop,
-    VGSvcDefaultTerm
+    vgsvcVMStatsTerm
 };
 
