diff --git a/BasePlugin/KeyInterface.hh b/BasePlugin/KeyInterface.hh
index c5496cd96bbe2f3584ae0a7a4de58eb2b172a37f..7795d481072fc30b62226139ede98931f270bf4e 100644
--- a/BasePlugin/KeyInterface.hh
+++ b/BasePlugin/KeyInterface.hh
@@ -64,8 +64,9 @@ class KeyInterface {
        * @param _key the key that should be registered
        * @param _modifiers the keyboard modifiers
        * @param _description a short description about the functionality
+       * @param _multiUse can the key additionally be registered by another plugin
        */
-      virtual void registerKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description) {};
+      virtual void registerKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description, bool _multiUse = false) {};
 
    public slots :
       
diff --git a/Core/PluginInfo.hh b/Core/PluginInfo.hh
index 9e10f6f25a5b9e8027e24c14bd218507bb38799a..55986c27d74c072d6bfeb78a8b9b9d01d5a61c69 100644
--- a/Core/PluginInfo.hh
+++ b/Core/PluginInfo.hh
@@ -12,6 +12,7 @@ struct KeyBinding{
   int                   key;
   Qt::KeyboardModifiers modifiers;
   QString               description;
+  bool                  multiUse;
 };
 
 /** Type defining a currently loaded Plugin */
diff --git a/Core/PluginLoader.cc b/Core/PluginLoader.cc
index f108aebddf39359b0cb4a22b22eef65f00b7a734..278ecc0cc5cf24c799b0bd403177f492e6a7c9de 100644
--- a/Core/PluginLoader.cc
+++ b/Core/PluginLoader.cc
@@ -576,9 +576,9 @@ void Core::loadPlugin(QString filename, bool silent){
     if ( keyPlugin && OpenFlipper::Options::gui() ) {
       supported = supported + "KeyboardEvents ";
 
-      if ( checkSignal(plugin,"registerKey(int,Qt::KeyboardModifiers,QString)") )
-        connect(plugin,SIGNAL( registerKey(int, Qt::KeyboardModifiers, QString) ),
-                coreWidget_,SLOT(slotRegisterKey(int, Qt::KeyboardModifiers, QString)) );
+      if ( checkSignal(plugin,"registerKey(int,Qt::KeyboardModifiers,QString,bool)") )
+        connect(plugin,SIGNAL( registerKey(int, Qt::KeyboardModifiers, QString, bool) ),
+                coreWidget_,SLOT(slotRegisterKey(int, Qt::KeyboardModifiers, QString, bool)) );
 
 //       if ( checkSlot( plugin , "slotKeyEvent(QKeyEvent*)" ) )
 //         connect(coreWidget_,SIGNAL(PluginKeyEvent(QKeyEvent* )), plugin,SLOT(slotKeyEvent(QKeyEvent*)));
diff --git a/widgets/coreWidget/CoreWidget.cc b/widgets/coreWidget/CoreWidget.cc
index 81d610ced885607f75be1079bd352f466a48ab91..dd68867db9f08bc466a5f17693fc63fb53b55f5e 100644
--- a/widgets/coreWidget/CoreWidget.cc
+++ b/widgets/coreWidget/CoreWidget.cc
@@ -403,9 +403,10 @@ CoreWidget::mapKeyPressEvent(QKeyEvent* _e){
         if (keyPlugin){
 //           if ( checkSlot( plugins_[i].plugin , "slotKeyEvent(QKeyEvent*)" ) )
             keyPlugin->slotKeyEvent(_e);
-
-          return;
         }
+        //only inform further plugins if this is a multiUse key
+        if (!plugins_[i].keys[k].multiUse)
+          return;
       }
 }
 
@@ -428,9 +429,10 @@ CoreWidget::mapKeyReleaseEvent(QKeyEvent* _e){
         if (keyPlugin){
 //           if ( checkSlot( plugins_[i].plugin , "slotKeyReleaseEvent(QKeyEvent*)" ) )
             keyPlugin->slotKeyReleaseEvent(_e);
-
-          return;
         }
+        //only inform further plugins if this is a multiUse key
+        if (!plugins_[i].keys[k].multiUse)
+          return;
       }
 }
 
@@ -438,13 +440,15 @@ CoreWidget::mapKeyReleaseEvent(QKeyEvent* _e){
 
 /** Register a key to a plugin */
 void
-CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description){
+CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description, bool _multiUse){
 
   //first check if the key is already registered by the coreWidget
   bool found = false;
+  bool multi = false;
   for (uint i=0; i < coreKeys_.size(); i++)
     if (coreKeys_[i].key == _key && coreKeys_[i].modifiers == _modifiers){
       found = true;
+      multi = coreKeys_[i].multiUse;
       break;
     }
 
@@ -453,8 +457,11 @@ CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString
     for (uint i=0; i < plugins_.size(); i++)
       for (int k=0; k < plugins_[i].keys.count(); k++)
         if (plugins_[i].keys[k].key == _key
-        && plugins_[i].keys[k].modifiers == _modifiers)
+        && plugins_[i].keys[k].modifiers == _modifiers){
           found = true;
+          multi = plugins_[i].keys[k].multiUse;
+          break;
+        }
 
   if (found)
     emit log(LOGERR, "Key already registered elsewhere.");
@@ -465,6 +472,8 @@ CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString
     kb.key = _key;
     kb.modifiers = _modifiers;
     kb.description = _description;
+    kb.multiUse = multi || _multiUse;
+
     coreKeys_.push_back( kb );
     return;
   }
@@ -485,6 +494,7 @@ CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString
   kb.key = _key;
   kb.modifiers = _modifiers;
   kb.description = _description;
+  kb.multiUse = multi || _multiUse;
 
   pluginInfo->keys.append( kb );
 }
diff --git a/widgets/coreWidget/CoreWidget.hh b/widgets/coreWidget/CoreWidget.hh
index a15bb8b14bb82c40e9cfa43114ce4fef0318bfd1..1441073d61214bb50c565f8385aabbf86583eda6 100644
--- a/widgets/coreWidget/CoreWidget.hh
+++ b/widgets/coreWidget/CoreWidget.hh
@@ -163,7 +163,7 @@ public:
    void PluginKeyReleaseEvent(QKeyEvent* );
 
    /// internal signal to register CoreWidget keys
-   void registerKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description);
+   void registerKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description, bool _multiUse = false);
 
   private:
     void mapKeyPressEvent(QKeyEvent* _e);
@@ -172,7 +172,7 @@ public:
     std::vector<KeyBinding> coreKeys_;
 
   private slots:
-    void slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description);
+    void slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QString _description, bool _multiUse = false);
 
    /** @} */