diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalWireTapParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalWireTapParser.java
new file mode 100644
index 0000000000..96f259abd3
--- /dev/null
+++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/GlobalWireTapParser.java
@@ -0,0 +1,19 @@
+package org.springframework.integration.config.xml;
+
+import org.springframework.beans.factory.config.RuntimeBeanReference;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.w3c.dom.Element;
+
+/**
+ * parser for the top level 'wire-tap' element
+ * @author David Turanski
+ * @since 2.1
+ *
+ */
+public class GlobalWireTapParser extends GlobalChannelInterceptorParser {
+ @Override
+ protected Object getBeanDefinitionBuilderConstructorValue(Element element, ParserContext parserContext){
+ String wireTapBeanName = new WireTapParser().parse(element, parserContext);
+ return new RuntimeBeanReference(wireTapBeanName);
+ }
+}
diff --git a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests-context.xml
new file mode 100644
index 0000000000..8ee64f0b80
--- /dev/null
+++ b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests-context.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests.java b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests.java
new file mode 100644
index 0000000000..3338a5bc54
--- /dev/null
+++ b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalWireTapTests.java
@@ -0,0 +1,87 @@
+package org.springframework.integration.channel.interceptor;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.integration.Message;
+import org.springframework.integration.MessageChannel;
+import org.springframework.integration.core.PollableChannel;
+import org.springframework.integration.message.GenericMessage;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+/**
+ *
+ * @author David Turanski
+ *
+ */
+@ContextConfiguration
+@RunWith(SpringJUnit4ClassRunner.class)
+public class GlobalWireTapTests {
+
+
+ @Autowired
+ @Qualifier("channel")
+ MessageChannel channel;
+
+ @Autowired
+ @Qualifier("random-channel")
+ MessageChannel anotherChannel;
+
+
+
+ @Autowired
+ @Qualifier("wiretap-single")
+ PollableChannel wiretapSingle;
+
+ @Autowired
+ @Qualifier("wiretap-all")
+ PollableChannel wiretapAll;
+
+
+
+ @Test
+ public void testWireTapsOnTargetedChannel(){
+ Message> message = new GenericMessage("hello");
+ channel.send(message);
+ Message > wireTapMessage = wiretapSingle.receive(100);
+ assertNotNull(wireTapMessage);
+
+ //There shoud be two messages on this channel. One for 'channel' and one for 'output'
+ wireTapMessage = wiretapAll.receive(100);
+ int msgCount=0;
+ while (wireTapMessage != null){
+ msgCount++;
+ assertEquals(wireTapMessage.getPayload(),message.getPayload());
+ wireTapMessage = wiretapAll.receive(100);
+ }
+
+ assertEquals(2,msgCount);
+ }
+
+ @Test
+ public void testWireTapsOnRandomChannel(){
+ Message> message = new GenericMessage("hello");
+ anotherChannel.send(message);
+
+ //This time no message on wiretapSingle
+ Message > wireTapMessage = wiretapSingle.receive(100);
+ assertNull(wireTapMessage);
+
+ //There shoud be two messages on this channel. One for 'channel' and one for 'output'
+ wireTapMessage = wiretapAll.receive(100);
+ int msgCount=0;
+ while (wireTapMessage != null){
+ msgCount++;
+ assertEquals(wireTapMessage.getPayload(),message.getPayload());
+ wireTapMessage = wiretapAll.receive(100);
+ }
+
+ assertEquals(2,msgCount);
+ }
+
+}