diff --git a/panel/main.c b/panel/main.c
index 3747d8af61ed4e3bf1dca2bfb5d1ecbec7d5d0a4..4ed389a32ffdd5609dd248085fe19d3dc6daa7c2 100644
--- a/panel/main.c
+++ b/panel/main.c
@@ -205,6 +205,7 @@ main (gint argc, gchar **argv)
   GError           *error = NULL;
   PanelDBusService *dbus_service;
   gboolean          succeed = FALSE;
+  gboolean          remote_succeed;
   guint             i;
   const gint        signums[] = { SIGINT, SIGQUIT, SIGTERM, SIGABRT, SIGUSR1 };
   const gchar      *error_msg;
@@ -296,7 +297,14 @@ main (gint argc, gchar **argv)
   else if (opt_plugin_event != NULL)
     {
       /* send the plugin event to the running instance */
-      succeed = panel_dbus_client_plugin_event (opt_plugin_event, &error);
+      remote_succeed = FALSE;
+      succeed = panel_dbus_client_plugin_event (opt_plugin_event, &remote_succeed, &error);
+
+      /* the panel returns EXIT_FAILURE if the dbus event succeeds, but
+       * no suitable plugin was found on the service side */
+      if (succeed && !remote_succeed)
+        succeed = FALSE;
+
       goto dbus_return;
     }
 
diff --git a/panel/panel-dbus-client.c b/panel/panel-dbus-client.c
index be259ec5e8691143bd838e53f1034e1944ab5f53..07214a2fe331927fbc58389e23f031d4334fa090 100644
--- a/panel/panel-dbus-client.c
+++ b/panel/panel-dbus-client.c
@@ -184,6 +184,7 @@ panel_dbus_client_gtype_from_string (const gchar *str)
 
 gboolean
 panel_dbus_client_plugin_event (const gchar  *plugin_event,
+                                gboolean     *return_succeed,
                                 GError      **error)
 {
   DBusGProxy  *dbus_proxy;
@@ -258,6 +259,7 @@ panel_dbus_client_plugin_event (const gchar  *plugin_event,
                                             tokens[PLUGIN_NAME],
                                             tokens[NAME],
                                             &value,
+                                            return_succeed,
                                             error);
   g_value_unset (&value);
 
diff --git a/panel/panel-dbus-client.h b/panel/panel-dbus-client.h
index c952706f6fba599ee47a2fd2f5a13e54d6eee3e0..e8b8fcecd624631921780778e55c3b6059d97361 100644
--- a/panel/panel-dbus-client.h
+++ b/panel/panel-dbus-client.h
@@ -36,6 +36,7 @@ gboolean  panel_dbus_client_add_new_item               (const gchar  *plugin_nam
                                                         GError      **error);
 
 gboolean  panel_dbus_client_plugin_event               (const gchar  *plugin_event,
+                                                        gboolean     *return_succeed,
                                                         GError      **error);
 
 gboolean  panel_dbus_client_terminate                  (gboolean      restart,
diff --git a/panel/panel-dbus-service-infos.xml b/panel/panel-dbus-service-infos.xml
index b171d8b25a6e67a374a19e4f7534000b36d2c4b7..d1a631689b8b64c2fe166bbf33da62162e991d2b 100644
--- a/panel/panel-dbus-service-infos.xml
+++ b/panel/panel-dbus-service-infos.xml
@@ -56,12 +56,13 @@
     </method>
     
     <!--
-      PluginEvent (plugin-name : STRING, name : STRING, value : VARIANT)
+      PluginEvent (plugin-name : STRING, name : STRING, value : VARIANT, succeed (return) : BOOL)
       
       plugin-name : Name of the panel plugins to send this event to.
       name        : Event signal name.
       value       : GValue holding the event data.
-      
+      succeed     : Boolean if a suitable plugin was found.
+
       Send a plugin to a group of plugins using the remote-event
       XfcePanelPlugin signal.
     -->
@@ -69,6 +70,7 @@
       <arg name="plugin_name" direction="in" type="s" />
       <arg name="name" direction="in" type="s" />
       <arg name="value" direction="in" type="v" />
+      <arg name="succeed" direction="out" type="b" />
      </method>
 
     <!--
diff --git a/panel/panel-dbus-service.c b/panel/panel-dbus-service.c
index c0c6e9ae0452ea4b7eb634c616d136de9502703f..21537c515485e6e05e18e9588abb914a3cfaa030 100644
--- a/panel/panel-dbus-service.c
+++ b/panel/panel-dbus-service.c
@@ -61,6 +61,7 @@ static gboolean  panel_dbus_service_plugin_event               (PanelDBusService
                                                                 const gchar       *plugin_name,
                                                                 const gchar       *name,
                                                                 const GValue      *value,
+                                                                gboolean          *OUT_succeed,
                                                                 GError           **error);
 static gboolean  panel_dbus_service_terminate                  (PanelDBusService   *service,
                                                                 gboolean            restart,
@@ -350,6 +351,7 @@ panel_dbus_service_plugin_event (PanelDBusService  *service,
                                  const gchar       *plugin_name,
                                  const gchar       *name,
                                  const GValue      *value,
+                                 gboolean          *OUT_succeed,
                                  GError           **error)
 {
   GSList             *plugins, *li, *lnext;
@@ -357,6 +359,7 @@ panel_dbus_service_plugin_event (PanelDBusService  *service,
   PluginEvent        *event;
   guint               handle;
   gboolean            result;
+  gboolean            plugin_replied = FALSE;
 
   panel_return_val_if_fail (PANEL_IS_DBUS_SERVICE (service), FALSE);
   panel_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -394,11 +397,18 @@ panel_dbus_service_plugin_event (PanelDBusService  *service,
           g_signal_connect (G_OBJECT (li->data), "remote-event-result",
               G_CALLBACK (panel_dbus_service_plugin_event_result), service);
 
+          /* not entirely sure the event is handled, but at least suitable
+           * plugins were found */
+          plugin_replied = TRUE;
+
           /* we're going to wait until the plugin replied */
           break;
         }
       else if (result)
         {
+          /* we've handled the event */
+          plugin_replied = TRUE;
+
           /* plugin returned %TRUE, so abort the event notification */
           break;
         }
@@ -407,6 +417,10 @@ panel_dbus_service_plugin_event (PanelDBusService  *service,
   g_slist_free (plugins);
   g_object_unref (G_OBJECT (factory));
 
+  /* return status for the panel */
+  if (OUT_succeed)
+    *OUT_succeed = plugin_replied;
+
   return TRUE;
 }