diff --git a/lib/hooks/basicemitter.php b/lib/hooks/basicemitter.php
index e615a58cfe846c3fde3d4aaf1d6ffdaf2b8a65c9..9ffe1af23144f6aae36841e3fbc3c689f5c272a9 100644
--- a/lib/hooks/basicemitter.php
+++ b/lib/hooks/basicemitter.php
@@ -13,7 +13,7 @@ abstract class BasicEmitter implements Emitter {
 	/**
 	 * @var (callable[])[] $listeners
 	 */
-	private $listeners = array();
+	protected $listeners = array();
 
 	/**
 	 * @param string $scope
diff --git a/lib/hooks/forwardingemitter.php b/lib/hooks/forwardingemitter.php
index 518641ac7cf22381769185bb66000b7cd28a5c5f..1aacc4012e0014cb933af81f56a2d5f5e88da362 100644
--- a/lib/hooks/forwardingemitter.php
+++ b/lib/hooks/forwardingemitter.php
@@ -38,5 +38,13 @@ abstract class ForwardingEmitter extends BasicEmitter {
 	 */
 	protected function forward($emitter) {
 		$this->forwardEmitters[] = $emitter;
+
+		//forward all previously connected hooks
+		foreach ($this->listeners as $key => $listeners) {
+			list($scope, $method) = explode('::', $key, 2);
+			foreach ($listeners as $listener) {
+				$emitter->listen($scope, $method, $listener);
+			}
+		}
 	}
 }
diff --git a/tests/lib/hooks/forwardingemitter.php b/tests/lib/hooks/forwardingemitter.php
index 0686ebece9f49e23db7e9357153152c820573a8d..decf6bb354cae24f0bf1afc7572cd5dee7e10bf7 100644
--- a/tests/lib/hooks/forwardingemitter.php
+++ b/tests/lib/hooks/forwardingemitter.php
@@ -59,4 +59,16 @@ class ForwardingEmitter extends BasicEmitter {
 		$baseEmitter1->emit('Test', 'test2');
 		$this->assertEquals(2, $hookCalled);
 	}
+
+	public function testForwardExistingHooks() {
+		$baseEmitter = new PublicEmitter();
+		$forwardingEmitter = new DummyForwardingEmitter();
+		$hookCalled = false;
+		$forwardingEmitter->listen('Test', 'test', function () use (&$hookCalled) {
+			$hookCalled = true;
+		});
+		$forwardingEmitter->forward($baseEmitter);
+		$baseEmitter->emit('Test', 'test');
+		$this->assertTrue($hookCalled);
+	}
 }