Index: tests/test_Signal.js
===================================================================
--- tests/test_Signal.js	(revision 1465)
+++ tests/test_Signal.js	(working copy)
@@ -478,4 +478,60 @@
     lateObj.fun = function() { this.value = 2; };
     signal(src, 'signal');
     t.is(lateObj.value, 2, 'connect uses late function binding');
+
+
+	i = 0;
+	connect(MochiKit.Signal.anySource, 'signalOne', aFunction);
+	signal(hasNoSignals, 'signalOne');
+	t.is(i, 1, "Connecting an observer to a given signal from any source works");
+
+	i = 0;
+	disconnect(MochiKit.Signal.anySource, 'signalOne', aFunction);
+	signal(hasNoSignals, 'signalOne');
+	t.is(i, 0, "Disconnecting an observer registered for any source works (using connection signature)");
+
+	i = 0;
+	ident = connect(MochiKit.Signal.anySource, 'signalOne', aFunction);
+	signal(hasNoSignals, 'signalOne');
+	t.is(i, 1, "Connecting an observer to a given signal to any source works (getting an identifier)");
+
+	i = 0;
+	disconnect(ident);
+	signal(hasNoSignals, 'signalOne');
+	t.is(i, 0, "Disconnecting an observer registerd for any source works also with the identifier");
+
+	i = 0;
+	connect(aObject, MochiKit.Signal.anySignal, aFunction);
+	signal(aObject, 'signalOne');
+	t.is(i, 1, "Connecting an observer to a given source with any signal works");
+
+	i = 0;
+	disconnect(aObject, MochiKit.Signal.anySignal, aFunction);
+	signal(aObject, 'signalOne');
+	t.is(i, 0, "Disconnecting an observer registered for any signal works");
+
+	i = 0;
+	connect(MochiKit.Signal.anySource, MochiKit.Signal.anySignal, aFunction);
+	signal(hasNoSignals, 'signalOne');
+	t.is(i, 1, "Connecting an observer to any source and any signal works");
+
+	i = 0;
+	disconnect(MochiKit.Signal.anySource, MochiKit.Signal.anySignal, aFunction);
+	signal(hasNoSignals, 'signalOne');
+	t.is(i, 0, "Disconnecting an observer to any source and any signal works");
+
+	i = 0;
+	connect('submit', MochiKit.Signal.anySignal, aFunction);
+	MochiKit.DOM.getElement('submit').click();
+	t.is(i, 0, "any signal is not messing with DOM events");
+
+	i = 0;
+	connect(MochiKit.Signal.anySource, "click", aFunction);
+	MochiKit.DOM.getElement('submit').click();
+	t.is(i, 0, "any source is not messing with DOM events");
+
+	i = 0;
+	connect(MochiKit.Signal.anySource, MochiKit.Signal.anySignal, aFunction);
+	MochiKit.DOM.getElement('submit').click();
+	t.is(i, 0, "also registering for any source and any signal will not mess with DOM events");
 };
Index: MochiKit/Signal.js
===================================================================
--- MochiKit/Signal.js	(revision 1465)
+++ MochiKit/Signal.js	(working copy)
@@ -15,6 +15,9 @@
 
 MochiKit.Signal._observers = [];
 
+MochiKit.Signal.anySource = { _name: "anySource" };
+MochiKit.Signal.anySignal = "MOCHIKIT_SIGNAL_ANYSIGNAL";
+
 /** @id MochiKit.Signal.Event */
 MochiKit.Signal.Event = function (src, e) {
     this._event = e || window.event;
@@ -814,6 +817,14 @@
 
     /** @id MochiKit.Signal.signal */
     signal: function (src, sig) {
+        if (src !== MochiKit.Signal.anySource) {
+            signal.apply(this, MochiKit.Base.extend([MochiKit.Signal.anySource], arguments, 1));
+        }
+
+        if ((src !== MochiKit.Signal.anySource) && (sig !== MochiKit.Signal.anySignal)) {
+            signal.apply(this, MochiKit.Base.extend([src, MochiKit.Signal.anySignal], arguments, 2));
+        }
+
         var self = MochiKit.Signal;
         var observers = self._observers;
         src = MochiKit.DOM.getElement(src);
