diff --git a/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessage.java b/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessage.java
index 0ebdf09..2f6233d 100644
--- a/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessage.java
+++ b/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessage.java
@@ -31,6 +31,10 @@
       setMemSource(OteByteMessageType.OTE_BYTE_MESSAGE);
    }
    
+   public OteByteMessage(String name, String topic, int defaultByteSize) {
+      this(name, topic, 1, defaultByteSize);
+   }
+   
    public OteByteMessage(byte[] bytedata) {
 	  super("holder", 0, 0, false, 0, 0);
 	  data = new OteByteMessageData(this, bytedata.length);
diff --git a/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessageListener.java b/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessageListener.java
new file mode 100644
index 0000000..66e2f14
--- /dev/null
+++ b/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessageListener.java
@@ -0,0 +1,7 @@
+package org.eclipse.ote.bytemessage;
+
+public interface OteByteMessageListener<T extends OteByteMessage> {
+   
+   void onDataAvailable(T message);
+
+}
diff --git a/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessageUtil.java b/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessageUtil.java
index 7c90250..48e1806 100644
--- a/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessageUtil.java
+++ b/org.eclipse.ote.bytemessage/src/org/eclipse/ote/bytemessage/OteByteMessageUtil.java
@@ -138,5 +138,37 @@
       props.put("event.topics", signal.getHeader().TOPIC.getValue());
       return context.registerService(EventHandler.class, eventHandler, props);
    }
+   
+   public static <T extends OteByteMessage> ServiceRegistration<EventHandler> subscribe(T signal, OteByteMessageListener<T> eventHandler) {
+      BundleContext context = ServiceUtility.getContext();
+      if (context == null) {
+         return null;
+      }
+      Hashtable<String, Object> props = new Hashtable<String, Object>();
+      props.put("event.topics", signal.getHeader().TOPIC.getValue());
+      return context.registerService(EventHandler.class, new EventHandlerForOteByteMessage<T>(signal, eventHandler), props);
+   }
+   
+   private static class EventHandlerForOteByteMessage<T extends OteByteMessage> implements EventHandler {
+
+      private final T message;
+      private OteByteMessageListener<T> listener;
+      
+      public EventHandlerForOteByteMessage(T message, OteByteMessageListener<T> listener){
+         this.message = message;
+         this.listener = listener;
+      }
+      
+      @Override
+      public void handleEvent(Event arg0) {
+         try{
+            message.getActiveDataSource().getMem().setData(OteByteMessageUtil.getBytes(arg0));
+            listener.onDataAvailable(message);
+         } catch (Throwable th){
+            th.printStackTrace();
+         }
+      }
+      
+   }
 
 }
diff --git a/org.eclipse.ote.event.bridge.jms/.classpath b/org.eclipse.ote.event.bridge.jms/.classpath
deleted file mode 100644
index ad32c83..0000000
--- a/org.eclipse.ote.event.bridge.jms/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.ote.event.bridge.jms/.project b/org.eclipse.ote.event.bridge.jms/.project
deleted file mode 100644
index 250ac9a..0000000
--- a/org.eclipse.ote.event.bridge.jms/.project
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.ote.event.bridge.jms</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ds.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.ote.event.bridge.jms/META-INF/MANIFEST.MF b/org.eclipse.ote.event.bridge.jms/META-INF/MANIFEST.MF
deleted file mode 100644
index 9d5e35a..0000000
--- a/org.eclipse.ote.event.bridge.jms/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,17 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: OTE Jms Event Bridge  (Incubation)
-Bundle-SymbolicName: org.eclipse.ote.event.bridge.jms;singleton:=true
-Bundle-Version: 0.11.0.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Import-Package: org.eclipse.core.runtime;version="3.4.0",
- org.eclipse.osee.framework.core.data,
- org.eclipse.osee.framework.core.exception,
- org.eclipse.osee.framework.jdk.core.type,
- org.eclipse.osee.framework.logging,
- org.eclipse.osee.framework.messaging,
- org.eclipse.osee.ote.message,
- org.eclipse.osee.ote.message.elements,
- org.eclipse.ote.bytemessage,
- org.eclipse.ote.jms.node,
- org.osgi.service.event;version="1.3.0"
diff --git a/org.eclipse.ote.event.bridge.jms/OSGI-INF/EventToJmsComponent.xml b/org.eclipse.ote.event.bridge.jms/OSGI-INF/EventToJmsComponent.xml
deleted file mode 100644
index 46f0f20..0000000
--- a/org.eclipse.ote.event.bridge.jms/OSGI-INF/EventToJmsComponent.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" enabled="true" immediate="true" name="org.eclipse.ote.event.bridge.jms.EventToJms">
-   <implementation class="org.eclipse.ote.event.bridge.jms.EventToJmsComponent"/>
-   <property name="event.topics" type="String" value="ote/*"/>
-   <reference bind="bindConnectionNode" cardinality="1..1" interface="org.eclipse.ote.jms.node.JmsConnectionNodeProvider" name="JmsConnectionNodeProvider" policy="static" unbind="unbindConnectionNode"/>
-   <reference bind="bindEventAdmin" cardinality="1..1" interface="org.osgi.service.event.EventAdmin" name="EventAdmin" policy="static" unbind="unbindEventAdmin"/>
-   <service>
-      <provide interface="org.osgi.service.event.EventHandler"/>
-   </service>
-</scr:component>
diff --git a/org.eclipse.ote.event.bridge.jms/build.properties b/org.eclipse.ote.event.bridge.jms/build.properties
deleted file mode 100644
index 6210e84..0000000
--- a/org.eclipse.ote.event.bridge.jms/build.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               OSGI-INF/
-source.. = src/
diff --git a/org.eclipse.ote.event.bridge.jms/pom.xml b/org.eclipse.ote.event.bridge.jms/pom.xml
deleted file mode 100644
index aba57b9..0000000
--- a/org.eclipse.ote.event.bridge.jms/pom.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-
-	<parent>
-		<groupId>org.eclipse.ote</groupId>
-		<artifactId>org.eclipse.ote.parent</artifactId>
-		<version>0.11.0-SNAPSHOT</version>
-		<relativePath>../org.eclipse.ote.parent</relativePath>
-	</parent>
-
-	<artifactId>org.eclipse.ote.event.bridge.jms</artifactId>
-	<packaging>eclipse-plugin</packaging>
-	<name>Eclipse OTE Event Bridge (Incubation)</name>
-
-</project>
diff --git a/org.eclipse.ote.event.bridge.jms/src/org/eclipse/ote/event/bridge/jms/BridgeMessages.java b/org.eclipse.ote.event.bridge.jms/src/org/eclipse/ote/event/bridge/jms/BridgeMessages.java
deleted file mode 100644
index 772596b..0000000
--- a/org.eclipse.ote.event.bridge.jms/src/org/eclipse/ote/event/bridge/jms/BridgeMessages.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 Boeing.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Boeing - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ote.event.bridge.jms;
-
-import org.eclipse.osee.framework.messaging.MessageID;
-
-public enum BridgeMessages implements MessageID {
-	
-	BYTE_MESSAGE("OTE_BYTE_MESSAGE");
-	
-	private String id;
-
-	BridgeMessages(String id){
-		this.id = id;
-	}
-	
-	@Override
-	public Class<?> getSerializationClass() {
-		return null;
-	}
-
-	@Override
-	public boolean isReplyRequired() {
-		return false;
-	}
-
-	@Override
-	public boolean isTopic() {
-		return true;
-	}
-
-	@Override
-	public String getId() {
-		return id;
-	}
-
-	@Override
-	public String getName() {
-		return id;
-	}
-
-}
diff --git a/org.eclipse.ote.event.bridge.jms/src/org/eclipse/ote/event/bridge/jms/EventToJmsComponent.java b/org.eclipse.ote.event.bridge.jms/src/org/eclipse/ote/event/bridge/jms/EventToJmsComponent.java
deleted file mode 100644
index 03a0e2a..0000000
--- a/org.eclipse.ote.event.bridge.jms/src/org/eclipse/ote/event/bridge/jms/EventToJmsComponent.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 Boeing.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Boeing - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ote.event.bridge.jms;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.logging.Level;
-
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.messaging.OseeMessagingListener;
-import org.eclipse.osee.framework.messaging.ReplyConnection;
-import org.eclipse.ote.bytemessage.OteByteMessage;
-import org.eclipse.ote.bytemessage.OteByteMessageUtil;
-import org.eclipse.ote.jms.node.JmsConnectionNodeProvider;
-import org.osgi.service.event.Event;
-import org.osgi.service.event.EventAdmin;
-import org.osgi.service.event.EventHandler;
-
-public class EventToJmsComponent extends OseeMessagingListener implements EventHandler {
-
-   private JmsConnectionNodeProvider connecitonNode;
-   private EventAdmin eventAdmin;
-   private final List<Event> eventQueue;
-   private final UUID MYID;
-
-   public EventToJmsComponent(){
-      eventQueue = new CopyOnWriteArrayList<Event>();
-      MYID = UUID.randomUUID();
-   }
-
-   void start(){
-   }
-
-   void stop(){
-   }
-
-   public synchronized void bindConnectionNode(JmsConnectionNodeProvider connectionNode){
-      this.connecitonNode = connectionNode;
-      connecitonNode.getConnectionNode().subscribe(BridgeMessages.BYTE_MESSAGE, this);
-      for(Event event:eventQueue){
-         sendEvent(event);
-      }
-      eventQueue.clear();
-   }
-
-   public synchronized void unbindConnectionNode(JmsConnectionNodeProvider connectionNode){
-      connecitonNode.getConnectionNode().unsubscribe(BridgeMessages.BYTE_MESSAGE, this);
-      this.connecitonNode = null;
-   }
-
-   public void bindEventAdmin(EventAdmin eventAdmin){
-      this.eventAdmin = eventAdmin;
-   }
-
-   public void unbindEventAdmin(EventAdmin eventAdmin){
-      this.eventAdmin = null;
-   }
-
-   @Override
-   public synchronized void handleEvent(Event event) {
-      if(connecitonNode != null){
-         sendEvent(event);
-      } else {
-         eventQueue.add(event);
-      }
-   }
-
-   private void sendEvent(Event event){
-      Object obj = event.getProperty("bytes");
-      if(obj != null && obj instanceof byte[]){
-         try {
-            UUID id = OteByteMessageUtil.getUUID((byte[])obj);
-            if(!id.equals(MYID)){
-               OteByteMessage msg = new OteByteMessage((byte[])obj);
-               OteByteMessageUtil.setUUID(msg, MYID);
-               connecitonNode.getConnectionNode().send(BridgeMessages.BYTE_MESSAGE, obj);
-            }
-         } catch (Exception e) {
-            e.printStackTrace();
-         }
-      }
-   }
-
-   @Override
-   public void process(Object message, Map<String, Object> headers, ReplyConnection replyConnection) {
-      if(message instanceof byte[]){
-         UUID id = OteByteMessageUtil.getUUID((byte[])message);
-         if(!id.equals(MYID)){
-            OteByteMessage msg = new OteByteMessage((byte[])message);
-            OteByteMessageUtil.setUUID(msg, MYID);
-            Map<String, Object> data = new HashMap<String, Object>();
-            data.put("bytes", msg.getData());
-            Event newevent = new Event(msg.getHeader().TOPIC.getValue(), data);
-            eventAdmin.sendEvent(newevent);
-         }
-      } else {
-         OseeLog.log(EventToJmsComponent.class, Level.SEVERE, "not a recognized message" + message.getClass());
-      }
-   }
-}
diff --git a/org.eclipse.ote.jms.node/.classpath b/org.eclipse.ote.jms.node/.classpath
deleted file mode 100644
index ad32c83..0000000
--- a/org.eclipse.ote.jms.node/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/org.eclipse.ote.jms.node/.project b/org.eclipse.ote.jms.node/.project
deleted file mode 100644
index 9c2b6a5..0000000
--- a/org.eclipse.ote.jms.node/.project
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.ote.jms.node</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ds.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/org.eclipse.ote.jms.node/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.ote.jms.node/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index c537b63..0000000
--- a/org.eclipse.ote.jms.node/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.ote.jms.node/META-INF/MANIFEST.MF b/org.eclipse.ote.jms.node/META-INF/MANIFEST.MF
deleted file mode 100644
index 2b50b7e..0000000
--- a/org.eclipse.ote.jms.node/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,20 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Ote JMS Node  (Incubation)
-Bundle-SymbolicName: org.eclipse.ote.jms.node;singleton:=true
-Bundle-Version: 0.11.0.qualifier
-Bundle-Vendor: The Boeing Company
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Import-Package: org.eclipse.osee.connection.service,
- org.eclipse.osee.framework.core.exception,
- org.eclipse.osee.framework.jdk.core.type,
- org.eclipse.osee.framework.jdk.core.util;resolution:=optional,
- org.eclipse.osee.framework.logging,
- org.eclipse.osee.framework.messaging,
- org.eclipse.osee.ote.core.environment,
- org.eclipse.osee.ote.core.environment.interfaces,
- org.eclipse.osee.ote.service;resolution:=optional
-Export-Package: org.eclipse.ote.jms.node
-Require-Bundle: org.eclipse.core.runtime
-Service-Component: OSGI-INF/*.xml
-Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.ote.jms.node/OSGI-INF/ClientSideConnectionNodeLifecycleController.xml b/org.eclipse.ote.jms.node/OSGI-INF/ClientSideConnectionNodeLifecycleController.xml
deleted file mode 100644
index 33dd499..0000000
--- a/org.eclipse.ote.jms.node/OSGI-INF/ClientSideConnectionNodeLifecycleController.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" name="org.eclipse.ote.jms.node.ClientSideConnectionNodeLifecycleController">
-   <implementation class="org.eclipse.ote.jms.node.internal.ClientSideConnectionNodeLifecycleController"/>
-      <reference bind="setClientService"
-			  cardinality="1..1"
-			  interface="org.eclipse.osee.ote.service.IOteClientService"
-			  name="IOteClientService"
-			  policy="dynamic"/>
-   <reference bind="setMessageService"
-			  cardinality="1..1"
-			  interface="org.eclipse.osee.framework.messaging.MessageService"
-			  name="MessageService"
-			  policy="dynamic"/>
-</scr:component>
diff --git a/org.eclipse.ote.jms.node/OSGI-INF/ServerSideConnectionNodeProvider.xml b/org.eclipse.ote.jms.node/OSGI-INF/ServerSideConnectionNodeProvider.xml
deleted file mode 100644
index 1e967db..0000000
--- a/org.eclipse.ote.jms.node/OSGI-INF/ServerSideConnectionNodeProvider.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" enabled="true" immediate="true" name="org.eclipse.ote.jms.node.ServerSideConnectionNodeProvider">
-   <implementation class="org.eclipse.ote.jms.node.internal.ServerSideConnectionNodeProviderImpl"/>
-   <reference
-              cardinality="1..1"
-              interface="org.eclipse.osee.framework.messaging.MessageService"
-              name="MessageService"
-              policy="static"
-              bind="setMessageService"
-              unbind="unsetMessageService"/>
-   <service>
-      <provide interface="org.eclipse.ote.jms.node.JmsConnectionNodeProvider"/>
-   </service>
-   <reference bind="bindHostTestEnvironment" cardinality="1..1" interface="org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment" name="IHostTestEnvironment" policy="static" unbind="unbindHostTestEnvironment"/>
-</scr:component>
diff --git a/org.eclipse.ote.jms.node/build.properties b/org.eclipse.ote.jms.node/build.properties
deleted file mode 100644
index 6210e84..0000000
--- a/org.eclipse.ote.jms.node/build.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               OSGI-INF/
-source.. = src/
diff --git a/org.eclipse.ote.jms.node/pom.xml b/org.eclipse.ote.jms.node/pom.xml
deleted file mode 100644
index e26ebba..0000000
--- a/org.eclipse.ote.jms.node/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-	<modelVersion>4.0.0</modelVersion>
-
-	<parent>
-		<groupId>org.eclipse.ote</groupId>
-		<artifactId>org.eclipse.ote.parent</artifactId>
-		<version>0.11.0-SNAPSHOT</version>
-		<relativePath>../org.eclipse.ote.parent</relativePath>
-	</parent>
-
-	<artifactId>org.eclipse.ote.jms.node</artifactId>
-	<packaging>eclipse-plugin</packaging>
-	<name>Eclipse OTE JMS Node Connection  (Incubation)</name>
-
-
- 
-
-</project>
\ No newline at end of file
diff --git a/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/JmsConnectionNodeProvider.java b/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/JmsConnectionNodeProvider.java
deleted file mode 100644
index ba5edb2..0000000
--- a/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/JmsConnectionNodeProvider.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 Boeing.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Boeing - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ote.jms.node;
-
-import org.eclipse.osee.framework.messaging.ConnectionNode;
-
-public interface JmsConnectionNodeProvider {
-	ConnectionNode getConnectionNode();
-}
diff --git a/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/internal/ClientSideConnectionNodeLifecycleController.java b/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/internal/ClientSideConnectionNodeLifecycleController.java
deleted file mode 100644
index dd9bef6..0000000
--- a/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/internal/ClientSideConnectionNodeLifecycleController.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 Boeing.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Boeing - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ote.jms.node.internal;
-
-import java.io.Serializable;
-import java.util.Map.Entry;
-import java.util.logging.Level;
-
-import org.eclipse.osee.connection.service.IServiceConnector;
-import org.eclipse.osee.framework.jdk.core.util.EnhancedProperties;
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.messaging.ConnectionNode;
-import org.eclipse.osee.framework.messaging.MessageService;
-import org.eclipse.osee.framework.messaging.NodeInfo;
-import org.eclipse.osee.ote.service.ConnectionEvent;
-import org.eclipse.osee.ote.service.IOteClientService;
-import org.eclipse.osee.ote.service.ITestConnectionListener;
-import org.eclipse.ote.jms.node.JmsConnectionNodeProvider;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-
-
-
-/**
- * @author Michael P. Masterson
- */
-public final class ClientSideConnectionNodeLifecycleController implements ITestConnectionListener {
-
-   private MessageService messageService;
-   private IOteClientService clientService;
-   private BundleContext context;
-   private ServiceRegistration<?> registration;
-
-   public void start(BundleContext context) {
-      this.context = context;
-      clientService.addConnectionListener(this);
-
-   }
-
-   public void stop() {
-      clientService.removeConnectionListener(this);
-      unregisterConnectionNode();
-      this.messageService = null;
-      this.clientService = null;
-      this.context = null;
-
-   }
-
-   public void setMessageService(MessageService messageService) {
-      this.messageService = messageService;
-   }
-
-   public void setClientService(IOteClientService clientService) {
-      this.clientService = clientService;
-   }
-
-   @Override
-   public void onPostConnect(ConnectionEvent event) {
-      if (context == null) {
-         OseeLog.log(getClass(), Level.SEVERE, "Received a onPostConnect event with a null context.");
-         return;
-      }
-      IServiceConnector connector = event.getConnector();
-      registerConnectionNode(connector);
-   }
-
-   /**
-    * @param connector
-    */
-   private void registerConnectionNode(IServiceConnector connector) {
-      Object obj = connector.getProperty("OTEEmbeddedBroker", null);
-      if (obj != null && obj instanceof NodeInfo) {
-         debug("Registering client connection service");
-         NodeInfo nodeInfo = (NodeInfo) obj;
-         registerConnectionNode(nodeInfo);
-      } else {
-         debug(String.format("Problem using connector...%s:%s", obj.getClass(), obj));
-         EnhancedProperties properties = connector.getProperties();
-         for( Entry<String, Serializable> entry : properties.entrySet() ) {
-            debug(String.format("\t%s = %s", entry.getKey(), entry.getValue()));
-         }
-      }
-   }
-
-   /**
-    * @param nodeInfo
-    */
-   private void registerConnectionNode(NodeInfo nodeInfo) {
-      try {
-         ConnectionNode node = messageService.get(nodeInfo);
-         registration =
-               context.registerService(JmsConnectionNodeProvider.class.getName(), new ClientSideConnectionNodeProviderImpl(node), null);
-      } catch (Exception ex) {
-         OseeLog.log(getClass(), Level.SEVERE, ex);
-      }
-   }
-
-   @Override
-   public void onConnectionLost(IServiceConnector connector) {
-      unregisterConnectionNode();
-   }
-
-
-
-   private void unregisterConnectionNode() {
-      if (registration != null) {
-         registration.unregister();
-         registration = null;
-      }
-   }
-
-   @Override
-   public void onPreDisconnect(ConnectionEvent event) {
-      unregisterConnectionNode();
-   }
-
-   private void debug(String msg ) {
-      if( System.getProperty("ote.jms.node.debug") != null )
-         System.out.println(msg);
-   }
-}
diff --git a/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/internal/ClientSideConnectionNodeProviderImpl.java b/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/internal/ClientSideConnectionNodeProviderImpl.java
deleted file mode 100644
index 60ad781..0000000
--- a/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/internal/ClientSideConnectionNodeProviderImpl.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 Boeing.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Boeing - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ote.jms.node.internal;
-
-import org.eclipse.osee.framework.messaging.ConnectionNode;
-import org.eclipse.ote.jms.node.JmsConnectionNodeProvider;
-
-
-public final class ClientSideConnectionNodeProviderImpl implements JmsConnectionNodeProvider{
-
-	private final ConnectionNode node;
-
-	ClientSideConnectionNodeProviderImpl(ConnectionNode node) {
-		this.node = node;
-	}
-
-	@Override
-	public ConnectionNode getConnectionNode() {
-		return node;
-	}
-}
diff --git a/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/internal/ServerSideConnectionNodeProviderImpl.java b/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/internal/ServerSideConnectionNodeProviderImpl.java
deleted file mode 100644
index 5de9eb1..0000000
--- a/org.eclipse.ote.jms.node/src/org/eclipse/ote/jms/node/internal/ServerSideConnectionNodeProviderImpl.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 Boeing.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Boeing - initial API and implementation
- *******************************************************************************/
-package org.eclipse.ote.jms.node.internal;
-
-import java.util.logging.Level;
-
-import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.messaging.ConnectionNode;
-import org.eclipse.osee.framework.messaging.MessageService;
-import org.eclipse.osee.framework.messaging.NodeInfo;
-import org.eclipse.osee.ote.core.environment.interfaces.IHostTestEnvironment;
-import org.eclipse.ote.jms.node.JmsConnectionNodeProvider;
-
-
-
-/**
- * @author Michael P. Masterson
- */
-public final class ServerSideConnectionNodeProviderImpl implements JmsConnectionNodeProvider {
-   private IHostTestEnvironment testEnv;
-   private MessageService messageService;
-
-   private static JmsConnectionNodeProvider instance;
-
-   public void start() {
-      instance = this;
-   }
-
-   public void stop() {
-   }
-
-   public synchronized void bindHostTestEnvironment(IHostTestEnvironment testEnv) {
-      this.testEnv = testEnv;
-   }
-
-   public synchronized void unbindHostTestEnvironment(IHostTestEnvironment testEnv) {
-      this.testEnv = null;
-   }
-
-   public synchronized void setMessageService(MessageService messageService) {
-      this.messageService = messageService;
-   }
-
-   public synchronized void unsetMessageService(MessageService messageService) {
-      this.messageService = null;
-   }
-
-   public static JmsConnectionNodeProvider getInstance() {
-      return instance;
-   }
-
-   @Override
-   public synchronized ConnectionNode getConnectionNode() {
-      try {
-         NodeInfo info = testEnv.getBroker();
-         ConnectionNode connection = messageService.get(info);
-         return connection;
-      } catch (Exception ex) {
-         OseeLog.log(this.getClass(), Level.SEVERE, ex);
-      }
-      return null;
-   }
-}
diff --git a/org.eclipse.ote.parent/pom.xml b/org.eclipse.ote.parent/pom.xml
index ddaf563..2ae8a50 100644
--- a/org.eclipse.ote.parent/pom.xml
+++ b/org.eclipse.ote.parent/pom.xml
@@ -18,11 +18,10 @@
 	<modules>
 	   <module>../org.eclipse.ote.bytemessage</module>
 	   <module>../org.eclipse.ote.bytemessage.test</module>
-	   <module>../org.eclipse.ote.event.bridge.jms</module>
+	   
 		<module>../org.eclipse.ote.io</module>
 		<module>../org.eclipse.ote.io.test</module>
-	   <module>../org.eclipse.ote.jms.node</module>
-		<module>../org.eclipse.ote.services.core</module>
+	   <module>../org.eclipse.ote.services.core</module>
 		<module>../org.eclipse.ote.statemachine</module>
 		<module>../org.eclipse.ote.statemachine.test</module>
 	
diff --git a/org.eclipse.ote.serverclient.feature/feature.xml b/org.eclipse.ote.serverclient.feature/feature.xml
index 8fc56de..2a389c5 100644
--- a/org.eclipse.ote.serverclient.feature/feature.xml
+++ b/org.eclipse.ote.serverclient.feature/feature.xml
@@ -30,19 +30,6 @@
          version="0.0.0"
          unpack="false"/>
 
-   <plugin
-         id="org.eclipse.ote.event.bridge.jms"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.ote.jms.node"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
 
    <plugin
          id="org.eclipse.ote.services.core"
diff --git a/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF b/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF
index 39d86a9..9ac3415 100644
--- a/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF
+++ b/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF
@@ -15,6 +15,7 @@
 Export-Package: org.eclipse.ote.ui.message.util
 Import-Package: org.eclipse.osee.framework.jdk.core.persistence,
  org.eclipse.osee.framework.plugin.core.util,
+ org.eclipse.osee.framework.ui.swt,
  org.eclipse.osee.ote.messaging.dds.service,
  org.eclipse.ote.message.lookup
 Bundle-Vendor: Eclipse Open System Engineering Environment
diff --git a/org.eclipse.ote.ui.message.util/build.properties b/org.eclipse.ote.ui.message.util/build.properties
index 34d2e4d..c6baffa 100644
--- a/org.eclipse.ote.ui.message.util/build.properties
+++ b/org.eclipse.ote.ui.message.util/build.properties
@@ -1,4 +1,5 @@
 source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
-               .
+               .,\
+               icons/
diff --git a/org.eclipse.ote.ui.message.util/icons/add.png b/org.eclipse.ote.ui.message.util/icons/add.png
new file mode 100644
index 0000000..5b051f6
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/icons/add.png
Binary files differ
diff --git a/org.eclipse.ote.ui.message.util/icons/deleteAll.gif b/org.eclipse.ote.ui.message.util/icons/deleteAll.gif
new file mode 100644
index 0000000..28a3785
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/icons/deleteAll.gif
Binary files differ
diff --git a/org.eclipse.ote.ui.message.util/icons/remove.png b/org.eclipse.ote.ui.message.util/icons/remove.png
new file mode 100644
index 0000000..7fb4e90
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/icons/remove.png
Binary files differ
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/AddMessagesAction.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/AddMessagesAction.java
new file mode 100644
index 0000000..4f53bf3
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/AddMessagesAction.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ote.ui.message.util;
+
+import java.util.ArrayList;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.ui.swt.Displays;
+import org.eclipse.ote.message.lookup.MessageLookupResult;
+import org.eclipse.ote.ui.message.util.MessageSelectionDialog;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class AddMessagesAction extends Action {
+
+
+	private final MessageSelectComposite composite;
+	
+   public AddMessagesAction(MessageSelectComposite composite) {
+      super("Select Messages", IAction.AS_PUSH_BUTTON);
+      setToolTipText("Select messages to append to the list of messages that will be recorded");
+      this.composite = composite;
+      setImageDescriptor(Images.ADD.getImageDescriptor());
+      
+   }
+
+   @Override
+   public void run() {
+      Shell shell = Displays.getActiveShell();
+      MessageSelectionDialog msgSelectionDialog = new MessageSelectionDialog(shell);
+      msgSelectionDialog.setMultipleSelection(true);
+      if (msgSelectionDialog.open() == Window.OK) {
+         Object[] result = (Object[])msgSelectionDialog.getResult();
+         ArrayList<MessageLookupResult> list = new ArrayList<MessageLookupResult>(result.length);
+         for (Object item : result) {
+        	 MessageLookupResult lookupResult = (MessageLookupResult) item;
+        	 list.add(lookupResult);
+         }
+         composite.addMessages(list);
+      }
+
+   }
+
+}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteAllMessagesAction.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteAllMessagesAction.java
new file mode 100644
index 0000000..b13a3a1
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteAllMessagesAction.java
@@ -0,0 +1,20 @@
+package org.eclipse.ote.ui.message.util;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+
+public class DeleteAllMessagesAction extends Action{
+	private final MessageSelectComposite composite;
+
+	public DeleteAllMessagesAction(MessageSelectComposite composite) {
+		super("Delete All Messages", IAction.AS_PUSH_BUTTON);
+		setToolTipText("Delete all messages from the recording list");
+		this.composite = composite;
+		setImageDescriptor(Images.DELETE_ALL.getImageDescriptor());
+
+	}
+
+	public void run() {
+		composite.deleteAll();
+	}
+}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteMessagesAction.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteMessagesAction.java
new file mode 100644
index 0000000..a61f5d9
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteMessagesAction.java
@@ -0,0 +1,19 @@
+package org.eclipse.ote.ui.message.util;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+
+public class DeleteMessagesAction extends Action{
+	private final MessageSelectComposite composite;
+	
+	public DeleteMessagesAction(MessageSelectComposite composite) {
+		super("Delete Selected Messages", IAction.AS_PUSH_BUTTON);
+		setToolTipText("Delete all selected from the recording list");
+		setImageDescriptor(Images.DELETE.getImageDescriptor());
+		this.composite = composite;
+	}
+
+	public void run() {
+		composite.deleteSelection();
+	}
+}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/Images.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/Images.java
new file mode 100644
index 0000000..7904a3b
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/Images.java
@@ -0,0 +1,64 @@
+package org.eclipse.ote.ui.message.util;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+import org.osgi.framework.FrameworkUtil;
+
+public enum Images {
+	ADD("icons/add.png"),
+	DELETE_ALL("icons/deleteAll.gif"),
+	DELETE("icons/remove.png"),
+	RECORD("icons/record_action.png");
+	
+	private final String path;
+
+	private static ImageRegistry ir = new ImageRegistry();
+	/**
+	 * @param path
+	 */
+	private Images(String path) {
+		this.path = path;
+	}
+
+	/**
+	 * @return the path
+	 */
+	public String getPath() {
+		return path;
+	}
+	
+	public Image getImage() {
+		Image image = ir.get(path);
+		if (image == null) {
+			image = ImageDescriptor.createFromURL(getFile(path)).createImage();
+			ir.put(path, image);
+		}
+		return image;
+	}
+	
+	public ImageDescriptor getImageDescriptor() {
+		ImageDescriptor descriptor = ir.getDescriptor(path);
+		if (descriptor == null) {
+			descriptor = ImageDescriptor.createFromURL(getFile(path));
+			ir.put(path, descriptor);
+		}
+		return descriptor;
+	}
+	
+	private static URL getFile(String path) {
+		URL url = FrameworkUtil.getBundle(Images.class).getEntry(path);
+		if (url == null) {
+			return null;
+		}
+		try {
+			return FileLocator.resolve(url);
+		} catch (IOException e) {
+			throw new RuntimeException("could not resolve URL from path: " + path, e);
+		}
+	}
+}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/MessageSelectComposite.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/MessageSelectComposite.java
new file mode 100644
index 0000000..5abf523
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/MessageSelectComposite.java
@@ -0,0 +1,224 @@
+package org.eclipse.ote.ui.message.util;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osee.framework.ui.swt.Widgets;
+import org.eclipse.ote.message.lookup.MessageLookupResult;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+
+public class MessageSelectComposite extends Composite{
+
+	
+	private final TableViewer viewer;
+
+	private final HashSet<MessageLookupResult> items = new HashSet<MessageLookupResult>();
+
+	private final AddMessagesAction addMessageAction;
+	private final DeleteMessagesAction deleteMessageAction;
+	private final DeleteAllMessagesAction deleteAllMessagesAction;
+	
+//	private Button browseBtn;
+
+	public MessageSelectComposite(Composite parent, int style) {
+		super(parent, style);
+		Widgets.setFormLayout(this, 5, 5);
+//		Label label = new Label(this, SWT.RIGHT);
+//		label.setText("Output File:");
+		
+//		outputFilePathTxt = new Text(this, SWT.SINGLE | SWT.BORDER);
+//		outputFilePathTxt.addModifyListener(new ModifyListener() {
+//			
+//			@Override
+//			public void modifyText(ModifyEvent e) {
+////				updateUiStatus();
+//			}
+//		});
+//		browseBtn = new Button(this, SWT.PUSH);
+//		browseBtn.setText("Browse");
+//		browseBtn.addSelectionListener(new SelectionAdapter() {
+//
+//			@Override
+//			public void widgetSelected(SelectionEvent e) {
+//				doBrowseForFile();
+//			}
+//		});
+		addMessageAction = new AddMessagesAction(this);
+      deleteMessageAction = new DeleteMessagesAction(this);
+      deleteAllMessagesAction = new DeleteAllMessagesAction(this);
+      
+		Label titleLabel = new Label(this, SWT.LEFT);
+		titleLabel.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT));
+		titleLabel.setText("Selected Messages");		
+		titleLabel.setBackground(getBackground());
+		viewer = new TableViewer(this, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
+		viewer.setContentProvider(new ArrayContentProvider());
+		viewer.setLabelProvider(new LabelProvider() {
+			
+			@Override
+			public String getText(Object element) {
+			   MessageLookupResult item = (MessageLookupResult) element;
+				return String.format("%s [%s]", item.getMessageName(), item.getMessageType());
+			}
+			
+			
+		});
+		
+		
+		ActionContributionItem addItem = new ActionContributionItem(addMessageAction);
+		addItem.fill(this);
+		Button addButton = (Button)addItem.getWidget();
+		
+		ActionContributionItem delItem = new ActionContributionItem(deleteMessageAction);
+		delItem.fill(this);
+      Button delButton = (Button)delItem.getWidget();
+      
+      ActionContributionItem delAllItem = new ActionContributionItem(deleteAllMessagesAction);
+      delAllItem.fill(this);
+      Button delAllButton = (Button)delAllItem.getWidget();
+		
+		
+//		Label statusLabel = new Label(this, SWT.RIGHT);
+//		statusLabel.setText("Status:");
+//		
+//		statusValueLabel = new Label(this, SWT.LEFT);
+//		statusValueLabel.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT));
+		
+//		Widgets.attachToParent(outputFilePathTxt, SWT.TOP, 0, 5);
+//		Widgets.attachToControl(label, outputFilePathTxt, SWT.TOP, SWT.CENTER, 0);
+//		Widgets.attachToControl(browseBtn, outputFilePathTxt, SWT.TOP, SWT.CENTER, 0);
+//		
+//		Widgets.attachToParent(label, SWT.LEFT, 0, 0);
+//		Widgets.attachToControl(outputFilePathTxt, label, SWT.LEFT, SWT.RIGHT, 5);
+//		Widgets.attachToControl(outputFilePathTxt, browseBtn, SWT.RIGHT, SWT.LEFT, -5);
+
+//		Widgets.attachToParent(browseBtn, SWT.RIGHT, 100, 0);
+//
+//		Widgets.attachToControl(titleLabel, browseBtn, SWT.TOP, SWT.BOTTOM, 5);
+		Widgets.attachToParent(titleLabel, SWT.LEFT, 0, 0);
+		Widgets.attachToParent(titleLabel, SWT.RIGHT, 100, 0);
+
+		Widgets.attachToControl(viewer.getControl(), titleLabel, SWT.TOP, SWT.BOTTOM, 0);
+		Widgets.attachToParent(viewer.getControl(), SWT.LEFT, 0, 0, 400, 600);
+//		final Object ld = viewer.getControl().getLayoutData();
+//		final FormData fd = ld != null ? (FormData) ld : new FormData();
+//      fd.bottom = new FormAttachment(100, 100, 0);
+      
+      Widgets.attachToParent(viewer.getControl(), SWT.BOTTOM, 100, 0);
+		
+		Widgets.attachToParent(addButton, SWT.RIGHT, 100, 0, 400, 600);
+		Widgets.attachToParent(delButton, SWT.RIGHT, 100, 0, 400, 600);
+		Widgets.attachToParent(delAllButton, SWT.RIGHT, 100, 0, 400, 600);
+		
+		Widgets.attachToControl(viewer.getControl(), addButton, SWT.RIGHT, SWT.LEFT, 0);
+		Widgets.attachToControl(viewer.getControl(), delButton, SWT.RIGHT, SWT.LEFT, 0);
+		Widgets.attachToControl(viewer.getControl(), delAllButton, SWT.RIGHT, SWT.LEFT, 0);
+
+		Widgets.attachToControl(addButton, titleLabel, SWT.TOP, SWT.BOTTOM, 0);
+		Widgets.attachToControl(delButton, addButton, SWT.TOP, SWT.BOTTOM, 0);
+		Widgets.attachToControl(delAllButton, delButton, SWT.TOP, SWT.BOTTOM, 0);
+		
+		hookContextMenu();
+	}
+	
+	private void hookContextMenu() {
+      MenuManager menuMgr = new MenuManager("#PopupMenu");
+      menuMgr.setRemoveAllWhenShown(true);
+      menuMgr.addMenuListener(new IMenuListener() {
+         @Override
+         public void menuAboutToShow(IMenuManager manager) {
+            manager.add(addMessageAction);
+            manager.add(deleteMessageAction);
+            manager.add(deleteAllMessagesAction);
+         }
+      });
+      Menu menu = menuMgr.createContextMenu(this.getViewer().getControl());
+      this.getViewer().getControl().setMenu(menu);
+   }
+
+	
+//	private void doBrowseForFile() {
+//		FileDialog dialog = new FileDialog(Display.getDefault().getActiveShell(), SWT.SAVE);
+//		dialog.setFilterExtensions(new String[]{"*.bmr"});
+//		dialog.setFilterIndex(0);
+//		dialog.setOverwrite(false);
+//		String path = dialog.open();
+//		if (path != null) {
+//			outputFilePathTxt.setText(path);
+//		}
+//	}
+	
+	TableViewer getViewer() {
+		return viewer;
+	}
+
+	void addMessages(Collection<MessageLookupResult> messages) {
+		items.addAll(messages);
+		setInput();
+	}
+	
+	void deleteAll() {
+		items.clear();
+		setInput();
+	}
+	
+	void deleteSelection() {
+		items.removeAll(Arrays.asList(((IStructuredSelection)viewer.getSelection()).toArray()));
+		setInput();
+	}
+	
+	private void setInput() {
+		viewer.setInput(items.toArray());
+	}
+	
+//	private static boolean isValidPath(String string) {
+//		if (string == null || string.isEmpty()) {
+//			return false;
+//		}
+//		File file = new File(string);
+//		// check parent directory
+//		File dir = file.getParentFile();
+//		return dir != null && dir.isDirectory() && dir.exists();
+//	}
+	
+	public AddMessagesAction getAddMessageAction() {
+		return addMessageAction;
+	}
+
+	public DeleteMessagesAction getDeleteMessageAction() {
+		return deleteMessageAction;
+	}
+
+	public DeleteAllMessagesAction getDeleteAllMessagesAction() {
+		return deleteAllMessagesAction;
+	}
+
+   public HashSet<MessageLookupResult> getMessages() {
+      return items;
+   }
+
+   public void setMessages(HashSet<MessageLookupResult> messages) {
+      if(messages != null){
+         items.addAll(messages);
+         setInput();
+      }
+   }
+
+}
diff --git a/org.eclipse.ote.ui.message/META-INF/MANIFEST.MF b/org.eclipse.ote.ui.message/META-INF/MANIFEST.MF
index 58c0e35..41c1b4b 100644
--- a/org.eclipse.ote.ui.message/META-INF/MANIFEST.MF
+++ b/org.eclipse.ote.ui.message/META-INF/MANIFEST.MF
@@ -25,7 +25,8 @@
  org.eclipse.ote.ui.message.tree,
  org.eclipse.ote.ui.message.watch
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Import-Package: org.eclipse.osee.framework.core.exception,
+Import-Package: org.eclipse.nebula.widgets.xviewer.core.model,
+ org.eclipse.osee.framework.core.exception,
  org.eclipse.osee.framework.core.operation,
  org.eclipse.osee.framework.jdk.core.type,
  org.eclipse.ote.bytemessage,
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputComponent.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputComponent.java
index f9ce31b..f026eba 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputComponent.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputComponent.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.ote.ui.message;
 import java.util.List;
-
 import org.eclipse.ote.message.lookup.MessageInput;
 import org.eclipse.ote.message.lookup.MessageInputItem;
 
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputComponentAll.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputComponentAll.java
index e257a33..b72858c 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputComponentAll.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputComponentAll.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.ote.ui.message;
 import java.util.List;
-
 import org.eclipse.ote.message.lookup.MessageInput;
 import org.eclipse.ote.message.lookup.MessageInputItem;
 
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputUtil.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputUtil.java
index 775fa39..1d4e955 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputUtil.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/MessageInputUtil.java
@@ -2,7 +2,6 @@
 
 import java.util.List;
 import java.util.logging.Level;
-
 import org.eclipse.osee.framework.logging.OseeLog;
 import org.eclipse.ote.message.lookup.MessageInputItem;
 import org.eclipse.ote.ui.message.watch.AddWatchParameter;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/internal/SWTResourceManager.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/internal/SWTResourceManager.java
index 224e5d4..bdf4f81 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/internal/SWTResourceManager.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/internal/SWTResourceManager.java
@@ -4,7 +4,6 @@
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Iterator;
-
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Cursor;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/messageXViewer/MessageXViewerFactory.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/messageXViewer/MessageXViewerFactory.java
index 04249bc..5cbdcf6 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/messageXViewer/MessageXViewerFactory.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/messageXViewer/MessageXViewerFactory.java
@@ -12,14 +12,14 @@
 
 import java.io.File;
 import java.util.logging.Level;
-import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
-import org.eclipse.nebula.widgets.xviewer.XViewerColumn.SortDataType;
 import org.eclipse.nebula.widgets.xviewer.XViewerFactory;
+import org.eclipse.nebula.widgets.xviewer.core.model.SortDataType;
+import org.eclipse.nebula.widgets.xviewer.core.model.XViewerAlign;
+import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
 import org.eclipse.nebula.widgets.xviewer.customize.FileStoreCustomizations;
 import org.eclipse.nebula.widgets.xviewer.customize.IXViewerCustomizations;
 import org.eclipse.osee.framework.logging.OseeLog;
 import org.eclipse.osee.framework.plugin.core.util.OseeData;
-import org.eclipse.swt.SWT;
 
 /**
  * @author Andrew M. Finkbeiner
@@ -27,21 +27,21 @@
 public class MessageXViewerFactory extends XViewerFactory {
 
    private static String VIEWER_NAMESPACE = "org.eclipse.osee.ote.message.MessageXViewer";
-   public static XViewerColumn name = new XViewerColumn("osee.message.name", "Name", 200, SWT.LEFT, true,
+   public static XViewerColumn name = new XViewerColumn("osee.message.name", "Name", 200, XViewerAlign.Left, true,
       SortDataType.String, false, null);
-   public static XViewerColumn psUpdateCount = new XViewerColumn("osee.message.udpates", "Updates", 60, SWT.LEFT, true,
+   public static XViewerColumn psUpdateCount = new XViewerColumn("osee.message.udpates", "Updates", 60, XViewerAlign.Left, true,
       SortDataType.Integer, false, null);
-   public static XViewerColumn value = new XViewerColumn("osee.message.value", "Value", 100, SWT.LEFT, true,
+   public static XViewerColumn value = new XViewerColumn("osee.message.value", "Value", 100, XViewerAlign.Left, true,
       SortDataType.String, false, null);
-   public static XViewerColumn byteOffset = new XViewerColumn("osee.message.offset", "Offset", 50, SWT.LEFT, true,
+   public static XViewerColumn byteOffset = new XViewerColumn("osee.message.offset", "Offset", 50, XViewerAlign.Left, true,
       SortDataType.Integer, false, null);
-   public static XViewerColumn msb = new XViewerColumn("osee.message.msb", "MSB", 50, SWT.LEFT, true,
+   public static XViewerColumn msb = new XViewerColumn("osee.message.msb", "MSB", 50, XViewerAlign.Left, true,
       SortDataType.Integer, false, null);
-   public static XViewerColumn lsb = new XViewerColumn("osee.message.lsb", "LSB", 50, SWT.LEFT, true,
+   public static XViewerColumn lsb = new XViewerColumn("osee.message.lsb", "LSB", 50, XViewerAlign.Left, true,
       SortDataType.Integer, false, null);
-   public static XViewerColumn bitSize = new XViewerColumn("osee.message.bitSize", "Bit Size", 60, SWT.LEFT, true,
+   public static XViewerColumn bitSize = new XViewerColumn("osee.message.bitSize", "Bit Size", 60, XViewerAlign.Left, true,
       SortDataType.Integer, false, null);
-   public static XViewerColumn elementType = new XViewerColumn("osee.message.type", "Type", 100, SWT.LEFT, true,
+   public static XViewerColumn elementType = new XViewerColumn("osee.message.type", "Type", 100, XViewerAlign.Left, true,
       SortDataType.String, false, null);
 
    private final FileStoreCustomizations propertyStoreCustomizations;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/navigate/MessageNavigateViewItems.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/navigate/MessageNavigateViewItems.java
index ecd4972..9be4847 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/navigate/MessageNavigateViewItems.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/navigate/MessageNavigateViewItems.java
@@ -12,7 +12,6 @@
 
 import java.util.ArrayList;
 import java.util.List;
-
 import org.eclipse.osee.framework.ui.plugin.xnavigate.IXNavigateContainer;
 import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
 import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/AbstractTreeNode.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/AbstractTreeNode.java
index 9c57892..304c6a2 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/AbstractTreeNode.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/AbstractTreeNode.java
@@ -12,8 +12,7 @@
 
 import java.util.Collection;
 import java.util.Collections;
-
-import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Image;
 
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/ElementNode.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/ElementNode.java
index c417327..c002b32 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/ElementNode.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/ElementNode.java
@@ -15,9 +15,8 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
 import org.eclipse.osee.framework.ui.swt.ImageManager;
 import org.eclipse.osee.framework.ui.swt.OverlayImage;
 import org.eclipse.osee.framework.ui.swt.OverlayImage.Location;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageNode.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageNode.java
index 7c08344..70c1d0f 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageNode.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageNode.java
@@ -13,9 +13,8 @@
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
-
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
 import org.eclipse.osee.framework.ui.swt.ImageManager;
 import org.eclipse.osee.framework.ui.swt.OverlayImage;
 import org.eclipse.osee.framework.ui.swt.OverlayImage.Location;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageTreeBuilder.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageTreeBuilder.java
index 61e897e..f43830b 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageTreeBuilder.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageTreeBuilder.java
@@ -14,7 +14,6 @@
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
-
 import org.eclipse.osee.ote.message.MessageDefinitionProvider;
 import org.eclipse.osee.ote.message.MessageSink;
 
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageUpdateListener.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageUpdateListener.java
index c9b4b57..cac7c70 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageUpdateListener.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageUpdateListener.java
@@ -14,7 +14,6 @@
 import java.util.LinkedList;
 import java.util.Map.Entry;
 import java.util.logging.Level;
-
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.osee.framework.logging.OseeLog;
 import org.eclipse.osee.framework.ui.swt.Displays;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageWatchLabelProvider.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageWatchLabelProvider.java
index 399bee3..feef5fd 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageWatchLabelProvider.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageWatchLabelProvider.java
@@ -11,8 +11,8 @@
 package org.eclipse.ote.ui.message.tree;
 
 import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
 import org.eclipse.nebula.widgets.xviewer.XViewerLabelProvider;
+import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
 import org.eclipse.osee.framework.ui.swt.Displays;
 import org.eclipse.ote.ui.message.messageXViewer.MessageXViewer;
 import org.eclipse.swt.SWT;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchList.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchList.java
index 3fc6305..80ece7e 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchList.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchList.java
@@ -15,7 +15,6 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
-
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.TreeViewer;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchedElementNode.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchedElementNode.java
index 20d06a6..008d2d0 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchedElementNode.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchedElementNode.java
@@ -12,8 +12,7 @@
 
 import java.util.Collection;
 import java.util.HashMap;
-
-import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
 import org.eclipse.osee.ote.client.msg.core.IMessageSubscription;
 import org.eclipse.osee.ote.message.Message;
 import org.eclipse.osee.ote.message.data.MessageData;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchedMessageNode.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchedMessageNode.java
index c2b30b2..6fc7647 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchedMessageNode.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/WatchedMessageNode.java
@@ -19,8 +19,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
-
-import org.eclipse.nebula.widgets.xviewer.XViewerColumn;
+import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
 import org.eclipse.osee.ote.client.msg.core.IMessageSubscription;
 import org.eclipse.osee.ote.message.commands.RecordCommand.MessageRecordDetails;
 import org.eclipse.osee.ote.message.enums.DataType;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/LoadWatchListJob.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/LoadWatchListJob.java
index 7a23d42..fc04173 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/LoadWatchListJob.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/LoadWatchListJob.java
@@ -8,7 +8,6 @@
 import java.util.logging.Level;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.jobs.Job;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/SignalStripper.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/SignalStripper.java
index 7d06976..2af0d9e 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/SignalStripper.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/SignalStripper.java
@@ -25,7 +25,6 @@
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
 import org.eclipse.osee.framework.jdk.core.type.HashCollection;
 import org.eclipse.osee.framework.jdk.core.util.Lib;
 
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/ViewRefresher.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/ViewRefresher.java
index 7c3ddf1..7975a3c 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/ViewRefresher.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/ViewRefresher.java
@@ -15,7 +15,6 @@
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
-
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/WatchView.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/WatchView.java
index f68264e..de0f963 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/WatchView.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/WatchView.java
@@ -17,8 +17,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.logging.Level;
-
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IMenuListener;
@@ -169,6 +171,8 @@
    private IOteMessageService messageService = null;
 
    private final SelectionListener recBtnHandler = new SelectionListener() {
+      
+      ExecutorService executor = Executors.newSingleThreadExecutor();
 
       @Override
       public void widgetDefaultSelected(SelectionEvent e) {
@@ -179,35 +183,58 @@
       public void widgetSelected(SelectionEvent e) {
          if (recordButton.getSelection()) {
 
-            RecordingWizard recordingWizard = new RecordingWizard(watchList);
+            final RecordingWizard recordingWizard = new RecordingWizard(watchList);
             final WizardDialog recdialog = new WizardDialog(Displays.getActiveShell(), recordingWizard);
             int recResult = recdialog.open();
             if (Window.OK == recResult) {
-               try {
-                  saveWatchFile();
-                  messageService.startRecording(recordingWizard.getFileName(),
-                                                recordingWizard.getFilteredMessageRecordDetails()).addListener(recBtnListener);
-               } catch (FileNotFoundException ex) {
-                  MessageDialog.openError(Displays.getActiveShell(), "Recording Error",
-                                          "Failed to open file for writing. " + "Make sure its not being used by another application");
-                  recordButton.setSelection(false);
-               } catch (Throwable ex) {
-                  OseeLog.log(Activator.class, Level.SEVERE, "Failed to start message recording", ex);
-                  MessageDialog.openError(Displays.getActiveShell(), "Recording Error",
-                        "Exception ocurred while recording. see error log");
-                  recordButton.setSelection(false);
-               }
+               executor.submit(new Runnable() {
+
+                  @Override
+                  public void run() {
+                     try {
+                        saveWatchFile();
+                        messageService.startRecording(recordingWizard.getFileName(),
+                              recordingWizard.getFilteredMessageRecordDetails()).addListener(recBtnListener);
+                     } catch (FileNotFoundException ex) {
+                        Display.getCurrent().asyncExec(new Runnable() {
+                           @Override
+                           public void run() {
+                              MessageDialog.openError(Displays.getActiveShell(), "Recording Error",
+                                    "Failed to open file for writing. " + "Make sure its not being used by another application");
+                              recordButton.setSelection(false);
+                           }
+                        });
+                     } catch (Throwable ex) {
+                        OseeLog.log(Activator.class, Level.SEVERE, "Failed to start message recording", ex);
+                        Display.getCurrent().asyncExec(new Runnable() {
+                           
+                           @Override
+                           public void run() {
+                              MessageDialog.openError(Displays.getActiveShell(), "Recording Error",
+                                    "Exception ocurred while recording. see error log");
+                              recordButton.setSelection(false);
+                           }
+                        });
+                     }
+                  }
+               });
             } else {
                recordButton.setSelection(false);
             }
          } else {
-            try {
-               messageService.stopRecording();
-            } catch (IOException ioe) {
-               OseeLog.log(Activator.class, Level.WARNING, "problem when attempting to stop recording", ioe);
-            } catch (Throwable t) {
-               OseeLog.log(Activator.class, Level.SEVERE, "problem when attempting to stop recording", t);
-            }
+            executor.submit(new Runnable() {
+
+               @Override
+               public void run() {
+                  try {
+                     messageService.stopRecording();
+                  } catch (IOException ioe) {
+                     OseeLog.log(Activator.class, Level.WARNING, "problem when attempting to stop recording", ioe);
+                  } catch (Throwable t) {
+                     OseeLog.log(Activator.class, Level.SEVERE, "problem when attempting to stop recording", t);
+                  }
+               }
+            });
          }
       }
    };
@@ -696,37 +723,48 @@
    }
 
    public void addWatchMessage(final AddWatchParameter parameter) {
-      for (MessageParameter message : parameter.getMessageParameters()) {
-         Collection<ElementPath> elements = parameter.getMessageElements(message.getMessageName());
-         OseeLog.logf(Activator.class, Level.FINEST, "Watch request for message %s", message);
-         try {
-            if (elements == null) {
-               elements = new ArrayList<ElementPath>();
+      new Thread(new Runnable(){
+         @Override
+         public void run() {
+            for (MessageParameter message : parameter.getMessageParameters()) {
+               Collection<ElementPath> elements = parameter.getMessageElements(message.getMessageName());
+               OseeLog.logf(Activator.class, Level.FINEST, "Watch request for message %s", message);
+               try {
+                  if (elements == null) {
+                     elements = new ArrayList<ElementPath>();
+                  }
+                  MessageMode mode = message.isWriter() ? MessageMode.WRITER : MessageMode.READER;
+                  watchList.createElements(message.getMessageName(),message.getDataType(), mode, elements, message.getValueMap());
+               } catch (ClassNotFoundException ex1) {
+                  if (openProceedWithProcessing("Could not find a class definition for " + message + "\n Do you wish to continue")) {
+                     continue;
+                  } else {
+                     return;
+                  }
+               } catch (InstantiationException ex1) {
+                  if (openProceedWithProcessing("failed to instantiate " + message + "\n Do you wish to continue")) {
+                     continue;
+                  } else {
+                     return;
+                  }
+               } catch (Exception ex1) {
+                  OseeLog.log(Activator.class, Level.SEVERE, "failed to create message node", ex1);
+                  if (openProceedWithProcessing("Error processing " + message + ". See Error Log for details.\n Do you wish to continue")) {
+                     continue;
+                  } else {
+                     return;
+                  }
+               }
             }
-            MessageMode mode = message.isWriter() ? MessageMode.WRITER : MessageMode.READER;
-            watchList.createElements(message.getMessageName(),message.getDataType(), mode, elements, message.getValueMap());
-         } catch (ClassNotFoundException ex1) {
-            if (openProceedWithProcessing("Could not find a class definition for " + message + "\n Do you wish to continue")) {
-               continue;
-            } else {
-               return;
-            }
-         } catch (InstantiationException ex1) {
-            if (openProceedWithProcessing("failed to instantiate " + message + "\n Do you wish to continue")) {
-               continue;
-            } else {
-               return;
-            }
-         } catch (Exception ex1) {
-            OseeLog.log(Activator.class, Level.SEVERE, "failed to create message node", ex1);
-            if (openProceedWithProcessing("Error processing " + message + ". See Error Log for details.\n Do you wish to continue")) {
-               continue;
-            } else {
-               return;
-            }
+
+            Display.getDefault().asyncExec(new Runnable(){
+               @Override
+               public void run() {
+                  refresh();            
+               }
+            });
          }
-      }
-      refresh();
+      }).start();
    }
 
    public void refresh() {
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/WatchViewDropAdapter.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/WatchViewDropAdapter.java
index b5dd183..6d5a00a 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/WatchViewDropAdapter.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/WatchViewDropAdapter.java
@@ -12,7 +12,6 @@
 
 import java.io.IOException;
 import java.util.logging.Level;
-
 import org.eclipse.osee.framework.jdk.core.util.Lib;
 import org.eclipse.osee.framework.logging.OseeLog;
 import org.eclipse.swt.dnd.DropTargetEvent;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/ConvertWritersToReadersAction.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/ConvertWritersToReadersAction.java
index d714640..aebc5e8 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/ConvertWritersToReadersAction.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/ConvertWritersToReadersAction.java
@@ -11,7 +11,6 @@
 package org.eclipse.ote.ui.message.watch.action;
 
 import java.util.Collection;
-
 import org.eclipse.jface.action.Action;
 import org.eclipse.osee.ote.message.tool.MessageMode;
 import org.eclipse.ote.ui.message.tree.MessageNode;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/SetValueAction.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/SetValueAction.java
index 22b8542..1322f96 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/SetValueAction.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/SetValueAction.java
@@ -12,7 +12,6 @@
 
 import java.util.List;
 import java.util.logging.Level;
-
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.dialogs.IInputValidator;
 import org.eclipse.jface.dialogs.InputDialog;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/WatchElementAction.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/WatchElementAction.java
index 71189e3..42651bf 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/WatchElementAction.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/action/WatchElementAction.java
@@ -12,7 +12,6 @@
 
 import java.util.Collection;
 import java.util.LinkedList;
-
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.window.Window;
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/recording/RecordingFilter.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/recording/RecordingFilter.java
index e792030..83d2dcf 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/recording/RecordingFilter.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/watch/recording/RecordingFilter.java
@@ -14,7 +14,6 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTreeViewer;
 import org.eclipse.jface.viewers.ICheckStateListener;
