update core event protocol

buko [2003-10-26 19:38:24]
update core event protocol
Filename
aether2/core/.cvsignore
aether2/core/aether-core.ipr
aether2/core/aether-core.iws
aether2/core/build.xml
aether2/core/src/java/aether/event/Attribute.java
aether2/core/src/java/aether/event/BlockingEventQueue.java
aether2/core/src/java/aether/event/Event.java
aether2/core/src/java/aether/event/EventQueue.java
aether2/core/src/java/aether/event/EventType.java
aether2/core/src/java/aether/event/Message.java
aether2/core/src/java/aether/event/Notice.java
aether2/core/src/java/aether/event/Request.java
aether2/core/src/java/aether/event/Response.java
aether2/core/src/java/aether/event/SimpleEventQueue.java
aether2/core/src/java/aether/event/Verb.java
aether2/core/src/java/aether/net/AbstractConnection.java
aether2/core/src/java/aether/net/AbstractLink.java
aether2/core/src/java/aether/net/AbstractMonitor.java
aether2/core/src/java/aether/net/DefaultLink.java
aether2/core/src/java/aether/net/Link.java
aether2/core/src/java/aether/net/Monitor.java
aether2/core/src/test/aether/net/DefaultConnectionTest.java
aether2/core/src/test/aether/net/DefaultLinkTest.java
diff --git a/aether2/core/.cvsignore b/aether2/core/.cvsignore
new file mode 100644
index 0000000..f3ace6c
--- /dev/null
+++ b/aether2/core/.cvsignore
@@ -0,0 +1,7 @@
+*.ipr
+*.iws
+*.iml
+build
+dist
+test*
+build.propertie
\ No newline at end of file
diff --git a/aether2/core/aether-core.ipr b/aether2/core/aether-core.ipr
index 15a0298..a29ef9f 100644
--- a/aether2/core/aether-core.ipr
+++ b/aether2/core/aether-core.ipr
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="3" relativePaths="true">
   <component name="ProjectRootManager" version="2">
-    <jdk name="java version &quot;1.4.1_01&quot;" />
+    <jdk name="java version &quot;1.4.2&quot;" />
     <projectPath>
       <root type="composite">
         <root type="simple" url="file://$PROJECT_DIR$" />
@@ -9,14 +9,14 @@
     </projectPath>
     <sourcePath>
       <root type="composite">
-        <root type="jdk" rootType="sourcePath" name="java version &quot;1.4.1_01&quot;" />
+        <root type="jdk" rootType="sourcePath" name="java version &quot;1.4.2&quot;" />
         <root type="simple" url="file://$PROJECT_DIR$/src/java" />
         <root type="simple" url="file://$PROJECT_DIR$/src/test" />
       </root>
     </sourcePath>
     <classPath>
       <root type="composite">
-        <root type="jdk" rootType="classPath" name="java version &quot;1.4.1_01&quot;" />
+        <root type="jdk" rootType="classPath" name="java version &quot;1.4.2&quot;" />
         <root type="output" />
         <root type="simple" url="jar://$PROJECT_DIR$/../lib/je4.jar!/" />
         <root type="simple" url="jar://$PROJECT_DIR$/../lib/junit.jar!/" />
@@ -30,7 +30,7 @@
     </excludePath>
     <javadocPath>
       <root type="composite">
-        <root type="jdk" rootType="javadocPath" name="java version &quot;1.4.1_01&quot;" />
+        <root type="jdk" rootType="javadocPath" name="java version &quot;1.4.2&quot;" />
       </root>
     </javadocPath>
     <assert_keyword enabled="no" />
@@ -75,7 +75,7 @@
       <maximumHeapSize value="128" />
       <viewClosedWhenNoErrors value="false" />
       <additionalClassPath>
-        <entry path="file://file://$PROJECT_DIR$/../../common-lib/junit.jar" />
+        <entry path="file://file://file://$PROJECT_DIR$/../../common-lib/junit.jar" />
       </additionalClassPath>
       <targetFilters>
         <filter targetName="init" isVisible="false" />
@@ -127,13 +127,12 @@
   </component>
   <component name="CodeStyleManager">
     <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true" />
-    <option name="CODE_STYLE_SCHEME" value="Default (1)" />
+    <option name="CODE_STYLE_SCHEME" value="" />
   </component>
   <component name="ExportToHTMLSettings">
     <option name="PRINT_LINE_NUMBERS" value="false" />
     <option name="OPEN_IN_BROWSER" value="false" />
     <option name="OUTPUT_DIRECTORY" />
   </component>
-  <component name="WebReferencesManager" />
 </project>

diff --git a/aether2/core/aether-core.iws b/aether2/core/aether-core.iws
index d7a96b7..1a0b2fe 100644
--- a/aether2/core/aether-core.iws
+++ b/aether2/core/aether-core.iws
@@ -1,67 +1,54 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="3" relativePaths="true">
-  <component name="WebReferencesConfigurable">
-    <property name="CUSTOM_MAP_LOOKUP" type="list" />
-    <property name="INTERFACE_POSTFIX" value="" type="string" />
-    <property name="electric.home" value="/electric" type="string" />
-    <property name="INTERFACE_PREFIX" value="I" type="string" />
-    <property name="INCLUDE_SYSTEM_MAP" value="true" type="boolean" />
-    <property name="THROW_EXCEPTIONS" value="false" type="boolean" />
-    <property name="ENABLED" value="false" type="boolean" />
-  </component>
   <component name="FileEditorManager">
     <history>
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/event/Request.java" line="181" column="4" vertical-scroll-proportion="0.8980892" horizontal-scroll-proportion="0.0436205" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/util/BytesHelper.java" line="34" column="9" vertical-scroll-proportion="0.3710191" horizontal-scroll-proportion="0.098146126" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/event/Response.java" line="72" column="51" vertical-scroll-proportion="0.04299363" horizontal-scroll-proportion="0.53326064" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/event/Message.java" line="72" column="57" vertical-scroll-proportion="0.20541401" horizontal-scroll-proportion="0.59651035" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/event/Event.java" line="162" column="29" vertical-scroll-proportion="0.36942676" horizontal-scroll-proportion="0.3031625" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/event/Notice.java" line="81" column="60" vertical-scroll-proportion="0.5557325" horizontal-scroll-proportion="0.65430754" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/event/Attribute.java" line="19" column="0" vertical-scroll-proportion="0.45700637" horizontal-scroll-proportion="0.0" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/Monitor.java" line="11" column="33" vertical-scroll-proportion="0.4442675" horizontal-scroll-proportion="0.35986915" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/test/aether/net/DefaultMonitorTest.java" line="98" column="48" vertical-scroll-proportion="0.35828024" horizontal-scroll-proportion="0.523446" />
-      <source-position-entry url="file://$PROJECT_DIR$/build.xml" line="144" column="86" vertical-scroll-proportion="0.0756579" horizontal-scroll-proportion="0.93784076" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/DefaultMonitor.java" line="15" column="13" vertical-scroll-proportion="-10.814145" horizontal-scroll-proportion="0.14176664" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/AbstractMonitor.java" line="174" column="68" vertical-scroll-proportion="0.66611844" horizontal-scroll-proportion="0.74154854">
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/event/EventQueue.java" line="27" column="60" vertical-scroll-proportion="0.81707317" horizontal-scroll-proportion="0.5825243" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/event/UriFactory.java" line="11" column="13" vertical-scroll-proportion="0.4169675" horizontal-scroll-proportion="0.200883">
         <folding>
-          <element signature="class#QueueNotificationListener;class#AbstractMonitor" expanded="true" />
+          <element signature="imports" expanded="true" />
         </folding>
       </source-position-entry>
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/DefaultConnection.java" line="16" column="13" vertical-scroll-proportion="-0.0049342103" horizontal-scroll-proportion="0.14176664" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/AbstractConnection.java" line="85" column="14" vertical-scroll-proportion="0.35197368" horizontal-scroll-proportion="0.15267175" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/AbstractLink.java" line="45" column="32" vertical-scroll-proportion="0.14808917" horizontal-scroll-proportion="0.348964">
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/event/SimpleEventQueue.java" line="0" column="24" vertical-scroll-proportion="0.0" horizontal-scroll-proportion="0.37086093" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/event/BlockingEventQueue.java" line="11" column="13" vertical-scroll-proportion="0.33212996" horizontal-scroll-proportion="0.200883" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/AbstractConnection.java" line="2" column="26" vertical-scroll-proportion="0.07317073" horizontal-scroll-proportion="0.2524272">
         <folding>
-          <element signature="class#LinkNotificationListener;class#AbstractLink" expanded="true" />
           <element signature="imports" expanded="true" />
         </folding>
       </source-position-entry>
-    </history>
-    <open-files>
-      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/AbstractLink.java" line="45" column="32" vertical-scroll-proportion="0.14808917" horizontal-scroll-proportion="0.348964" selected="true">
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/Link.java" line="53" column="54" vertical-scroll-proportion="0.4512195" horizontal-scroll-proportion="0.52427185" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/AbstractLink.java" line="252" column="51" vertical-scroll-proportion="0.9268293" horizontal-scroll-proportion="0.49514562">
         <folding>
-          <element signature="class#LinkNotificationListener;class#AbstractLink" expanded="true" />
           <element signature="imports" expanded="true" />
         </folding>
       </source-position-entry>
-    </open-files>
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/DefaultLink.java" line="15" column="13" vertical-scroll-proportion="0.5487805" horizontal-scroll-proportion="0.1262136" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/Connection.java" line="11" column="17" vertical-scroll-proportion="-0.10627177" horizontal-scroll-proportion="0.16504854" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/Publisher.java" line="12" column="17" vertical-scroll-proportion="0.36585367" horizontal-scroll-proportion="0.16504854" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/Monitor.java" line="91" column="0" vertical-scroll-proportion="0.9602888" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/AbstractMonitor.java" line="260" column="40" vertical-scroll-proportion="0.9602888" horizontal-scroll-proportion="0.3883495" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/java/aether/net/DefaultConnection.java" line="8" column="25" vertical-scroll-proportion="0.028880866" horizontal-scroll-proportion="0.24271844" />
+      <source-position-entry url="file://$PROJECT_DIR$/.cvsignore" line="6" column="15" vertical-scroll-proportion="0.22743683" horizontal-scroll-proportion="0.14563107" />
+      <source-position-entry url="file://$PROJECT_DIR$/build.xml" line="161" column="69" vertical-scroll-proportion="0.9241877" horizontal-scroll-proportion="0.6699029" />
+    </history>
+    <open-files />
   </component>
   <component name="ToolWindowManager">
-    <frame x="-4" y="-4" width="1032" height="776" extended-state="0" />
+    <frame x="65" y="12" width="834" height="719" extended-state="0" />
     <editor active="true" />
     <layout>
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.44585988" order="5" />
       <window_info id="Run" active="false" anchor="bottom" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.32991204" order="2" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.32991204" order="7" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4004065" order="0" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.3343496" order="0" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.33375636" order="0" />
       <window_info id="Debug" active="false" anchor="bottom" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.40029326" order="3" />
       <window_info id="Structure" active="false" anchor="left" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.32991204" order="1" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.32961783" order="1" />
       <window_info id="Messages" active="false" anchor="bottom" auto_hide="true" internal_type="sliding" type="sliding" visible="false" weight="0.32991204" order="8" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.40029326" order="6" />
       <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5" />
       <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0" />
       <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="4" />
     </layout>
@@ -100,6 +87,7 @@
     <option name="SKIP_SYNTHETIC_METHODS" value="true" />
     <option name="SKIP_CONSTRUCTORS" value="false" />
     <option name="STEP_THREAD_SUSPEND_POLICY" value="SuspendThread" />
+    <option name="EVALUATION_TIMEOUT" value="1000" />
     <default_breakpoint_settings>
       <option name="NOTIFY_CAUGHT" value="true" />
       <option name="NOTIFY_UNCAUGHT" value="true" />
@@ -167,6 +155,12 @@
     <option name="GROUP_GETTERS_AND_SETTERS" value="true" />
   </component>
   <component name="CvsConfiguration">
+    <cvs_root>
+      <option name="METHOD" value="pserver" />
+      <option name="USER_NAME" value="buko" />
+      <option name="HOST" value="church.psl.cs.columbia.edu" />
+      <option name="REPOSITORY" value="psl/memento/aether2/core" />
+    </cvs_root>
     <Checkout>
       <option name="DATE_TAG" value="" />
       <option name="REVISION_TAG" value="" />
@@ -218,7 +212,7 @@
     <Remove>
       <option name="NON_RECURSIVE" value="false" />
       <option name="FORCE_RECURSIVE" value="false" />
-      <option name="DELETE_FILE" value="false" />
+      <option name="DELETE_FILE" value="true" />
     </Remove>
     <Log>
       <option name="DEFAULT_BRANCH" value="false" />
@@ -230,14 +224,14 @@
       <option name="NON_RECURSIVE" value="false" />
       <option name="FORCE_RECURSIVE" value="false" />
     </Editors>
-    <option name="CLIENT_PATH" value="" />
-    <option name="EXTERNAL_DIFF_PATH" />
+    <option name="CLIENT_PATH" value="$PROJECT_DIR$/../../../../../../../Program Files/TortoiseCVS/cvs.exe" />
+    <option name="EXTERNAL_DIFF_PATH" value="" />
     <option name="USE_EXTERNAL_DIFF" value="false" />
     <option name="WORKING_FILES_READONLY" value="false" />
-    <option name="COMPRESSION_LEVEL" value="0" />
+    <option name="COMPRESSION_LEVEL" value="9" />
     <option name="ADDITIONAL_OPTIONS" value="" />
-    <option name="BINARY_FILES_EXTENSIONS" />
-    <option name="REUSE_LAST_LOG_MESSAGE" value="false" />
+    <option name="BINARY_FILES_EXTENSIONS" value="" />
+    <option name="REUSE_LAST_LOG_MESSAGE" value="true" />
     <option name="PUT_FOCUS_INTO_LOG_MESSAGE" value="false" />
     <option name="SHOW_UPDATE_OPTIONS" value="true" />
     <option name="SHOW_COMMIT_OPTIONS" value="true" />
@@ -254,15 +248,14 @@
     <option name="HIDE_UP_TO_DATE_FILES" value="false" />
   </component>
   <component name="CvsVcs">
-    <expanded_paths />
+    <expanded_paths>
+      <path value="$PROJECT_DIR$" />
+    </expanded_paths>
   </component>
   <component name="ProjectViewSettings">
     <navigator currentView="ProjectPane" flattenPackages="true" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5" />
     <view id="ProjectPane">
-      <expanded_node type="directory" url="file://$PROJECT_DIR$/src/java" />
       <expanded_node type="directory" url="file://$PROJECT_DIR$" />
-      <expanded_node type="directory" url="file://$PROJECT_DIR$/src" />
-      <expanded_node type="directory" url="file://$PROJECT_DIR$/src/java/aether/net" />
     </view>
     <view id="SourcepathPane" />
     <view id="ClasspathPane" />
@@ -511,8 +504,8 @@
     </inspection_tool>
     <inspection_tool class="Deprecated API usage" enabled="true" />
     <inspection_tool class="equals() and hashCode() not paired" enabled="true" />
-    <group name="Declaration Redundancy" />
     <group name="Local Code Analysis" />
+    <group name="Declaration Redundancy" />
   </component>
   <component name="TodoView" selected-index="0">
     <todo-panel id="selected-file">
@@ -527,7 +520,7 @@
     </todo-panel>
   </component>
   <component name="VcsManagerConfiguration">
-    <option name="ACTIVE_VCS_NAME" value="" />
+    <option name="ACTIVE_VCS_NAME" value="CVS" />
   </component>
   <component name="StarteamConfiguration">
     <option name="SERVER" value="" />
diff --git a/aether2/core/build.xml b/aether2/core/build.xml
index ee74f4c..13a2472 100644
--- a/aether2/core/build.xml
+++ b/aether2/core/build.xml
@@ -6,7 +6,7 @@
 	<property name="project.version" value="0.1" />
 	<property name="project.title" value="${project.name}-${project.version}" />
 	<property name="project.author.name" value="Buko Obele" />
-	<property name="project.author.email" value="buko@cs.columbia.net"  />
+	<property name="project.author.email" value="buko@cs.columbia.edu"  />

 	<!-- setup project directories -->
 	<property name="src.dir" location="src/java" />
diff --git a/aether2/core/src/java/aether/event/Attribute.java b/aether2/core/src/java/aether/event/Attribute.java
index e6eadd3..0e1eadf 100644
--- a/aether2/core/src/java/aether/event/Attribute.java
+++ b/aether2/core/src/java/aether/event/Attribute.java
@@ -8,36 +8,45 @@ package aether.event;
  **/
 public interface Attribute
 {
+    /**
+     * Attributes common to all events.
+     */
 	public interface Event
 	{
-		public static final String EventId = "aether.event.id";
-		public static final String Time = "aether.event.time";
-		public static final String EventType = "aether.event.type";
-		public static final String SourceId = "aether.event.source.id";
-		public static final String Headers = "aether.event.headers";
-		public static final String Body = "aether.event.body";
+		public static final String EVENT_ID = "aether.event.id";
+		public static final String TIME = "aether.event.time";
+		public static final String EVENT_TYPE = "aether.event.type";
+		public static final String SOURCE_ID = "aether.event.source.id";
 	}

+    /**
+     * Attributes unique to NOTICE events.
+     */
 	public interface Notice extends Event
 	{
-		public static final String TopicId = "aether.notice.topic.id";
+		public static final String TOPIC_ID = "aether.notice.topic.id";
 	}

+    /**
+     * Attributes unique to Message events.
+     */
 	public interface Message
 	{
-		public static final String LinkId = "aether.message.link.id";
-		public static final String Destination = "aether.message.dest";
+		public static final String LINK_ID = "aether.message.link.id";
+		public static final String DESTINATION = "aether.message.dest";
 	}

+    /**
+     * Attributes unique to REQUEST events.
+     */
 	public interface Request extends Message
 	{
-		public static final String Verb = "aether.request.verb";
-		public static final String Query = "aether.request.query";
 	}

+    /**
+     * Attributes unique to RESPONSE events.
+     */
 	public interface Response extends Message
 	{
-		public static final String Code = "aether.response.code";
-		public static final String ReasonLine = "aether.response.reasonLine";
 	}
 }
diff --git a/aether2/core/src/java/aether/event/BlockingEventQueue.java b/aether2/core/src/java/aether/event/BlockingEventQueue.java
index a20cf05..2a0fa6e 100644
--- a/aether2/core/src/java/aether/event/BlockingEventQueue.java
+++ b/aether2/core/src/java/aether/event/BlockingEventQueue.java
@@ -3,7 +3,7 @@ package aether.event;
 import java.util.LinkedList;

 /**
- * A BlockingEventQueue that can be used to synchronized event processing
+ * A BlockingEventQueue that can be used to synchronize event processing
  * between threads.
  *
  * @author Buko O. (buko@concedere.net)
diff --git a/aether2/core/src/java/aether/event/Event.java b/aether2/core/src/java/aether/event/Event.java
index 9839dfd..7fdfab6 100644
--- a/aether2/core/src/java/aether/event/Event.java
+++ b/aether2/core/src/java/aether/event/Event.java
@@ -12,8 +12,7 @@ import java.util.*;
  * @author Buko O. (buko@concedere.net)
  * @version 0.1
  **/
-public abstract class Event extends java.util.EventObject
-		implements Attribute.Event
+public abstract class Event implements Attribute.Event
 {
 	static
 	{
@@ -21,11 +20,8 @@ public abstract class Event extends java.util.EventObject
         Notification.throwExceptions(false);
 	}

-	private Map headers = new HashMap();
-    private Map procInstructions = new HashMap();
-
     /**
-	 * Underlying Elvin notification that'll actually be published.
+	 * Underlying Elvin getNotification that'll actually be published.
 	 */
 	protected Notification notification;

@@ -34,26 +30,22 @@ public abstract class Event extends java.util.EventObject
 	 */
 	protected Event()
 	{
-		super(new Object());
-		// TODO: fix this, what should be the source of this event?
-
 		this.notification = new Notification();

-		// assign a unique event id
-		this.notification.put(EventId, GuidFactory.createId());
+        // create the unique event id and set the event type
+        setEventID(GuidFactory.createId());
+        setEventType(getEventType());
 	}

-	/**
-	 * Construct a new Event from an existing Notification data.
-	 *
-	 * @param notif Notificaton containing Event data
-	 * @throws EventException
-	 *         if <code>notif</code> contains invalid data
-	 */
-	protected Event(Notification notif) throws EventException
-	{
-		super(new Object());
-
+    /**
+     * Initialize an event structure from an existing Notification.
+     *
+     * @param notif Notification containing Event data
+     * @throws EventException
+     *         if <code>notif</code> is malformed
+     */
+    public void parse(Notification notif) throws EventException
+    {
         if (notif == null)
 		{
 			String msg = "notif can't be null";
@@ -61,20 +53,17 @@ public abstract class Event extends java.util.EventObject
 		}

 		this.notification = notif;
+    }

-		// initialize the headers
-		readHeaders(notif);
-	}
-
-	/**
-	 * Get the underlying Notification object of the event.
-	 *
-	 * @return underlying Notification object
-	 */
-	Notification getNotification()
-	{
-		return notification;
-	}
+    /**
+     * Set the unique event ID.
+     *
+     * @param id unique event ID
+     */
+    private void setEventID(String id)
+    {
+		this.notification.put(EVENT_ID, id);
+    }

 	/**
 	 * Get the unqiue event ID for this event.
@@ -83,7 +72,7 @@ public abstract class Event extends java.util.EventObject
 	 */
 	public String getEventId()
 	{
-		return notification.getString(EventId);
+		return notification.getString(EVENT_ID);
 	}

 	/**
@@ -93,7 +82,7 @@ public abstract class Event extends java.util.EventObject
 	 */
 	public long getTime()
 	{
-		return notification.getLong(Time);
+		return notification.getLong(TIME);
 	}

 	/**
@@ -103,7 +92,7 @@ public abstract class Event extends java.util.EventObject
 	 */
 	public void setTime(long time)
 	{
-		notification.put(Time, time);
+		notification.put(TIME, time);
 	}

 	/**
@@ -113,7 +102,7 @@ public abstract class Event extends java.util.EventObject
 	 */
 	public String getSourceId()
 	{
-		return notification.getString(SourceId);
+		return notification.getString(SOURCE_ID);
 	}

 	/**
@@ -123,221 +112,52 @@ public abstract class Event extends java.util.EventObject
 	 */
 	public void setSourceId(String guid)
 	{
-		notification.put(SourceId, guid);
-	}
-
-    /**
-	 * Get the body of this event.
-	 *
-	 * @return body of this event or <code>null</code>
-	 */
-	public byte[] getBody()
-	{
-		return notification.getBytes(Body);
-	}
-
-	/**
-	 * Set the body of this event.
-	 *
-	 * @param body body of this event
-	 */
-	public void setBody(byte[] body)
-	{
-		notification.put(Body, body);
-	}
-
-	/**
-	 * Get the event type of this event.
-	 */
-    public String getMessageType()
-	{
-		return notification.getString(EventType);
-	}
-
-	/**
-	 * Set the event type of this event.
-	 *
-	 * @param type type of this event. this must be one of the EventType
-	 *             constants
-	 */
-	protected void setEventType(String type)
-	{
-		notification.put(EventType, type);
+		notification.put(SOURCE_ID, guid);
 	}

     /**
-	 * Set a header on this event.
-	 *
-	 * @param name name of the header
-	 * @param val  value of the header
-	 */
-	public void setHeader(String name, String val)
-	{
-		if (name == null)
-		{
-			String msg = "name can't be null";
-			throw new IllegalArgumentException(msg);
-		}
-
-		headers.put(name, val);
-	}
+     * Get the event type of the Event.
+     *
+     * @return EVENT_TYPE of the Event
+     */
+    public abstract String getEventType();

     /**
-	 * Get a header from this event.
-	 *
-	 * @param name name of the header
-	 * @return value of the header with <code>name</code> or <code>null</code>
-	 */
-	public String getHeader(String name)
-	{
-		if (name == null)
-		{
-			String msg = "name can't be null";
-			throw new IllegalArgumentException(msg);
-		}
-
-		return (String) headers.get(name);
-	}
-
-	/**
-	 * Retrieve an enumeration over the headers.
-	 *
-	 * @return enumeration of he headers of this event
-	 */
-	public Enumeration headers()
-	{
-		return Collections.enumeration(headers.keySet());
-	}
-
-	/**
-	 * Store all the headers on the Event in the underlying event.
-	 */
-	private void writeHeaders(Map headers)
-	{
-		StringBuffer sb = new StringBuffer();
-
-        for (Iterator i = headers.entrySet().iterator(); i.hasNext(); )
-		{
-			Map.Entry me = (Map.Entry) i.next();
-
-			// add it to the space-separated list of headers
-            sb.append((String) me.getKey()).append(' ');
-
-            // store it in the notification
-			notification.put("aether.event.header." + (String) me.getKey(),
-							 (String) me.getValue());
-		}
-
-		// store the list of headers in the notification
-		notification.put(Headers, sb.toString());
-	}
-
-	/**
-	 * Initialize the headers map from Notification.
-	 */
-	private void readHeaders(Notification notif)
-	{
-		// skip processing if no headers were defined
-        if (!notification.containsKey(Headers)) return;
-
-        // get the list of headers and tokenize it
-		StringTokenizer tokenizer =
-				new StringTokenizer(notif.getString(Headers));
-
-		// set each header
-		while (tokenizer.hasMoreTokens())
-		{
-			String key = tokenizer.nextToken();
-
-			String val = notification.getString("aether.event.header." + key);
-			setHeader(key, val);
-		}
-	}
-
-	/**
-	 * Set a processing instruction on the event.
-	 *
-	 * @param name name of of the PI
-	 * @param val  object to bind to the PI
-	 */
-	public void setProcessingInstruction(String name, Object val)
-	{
-		if (name == null)
-		{
-			String msg = "name can't be null";
-			throw new IllegalArgumentException(msg);
-		}
-
-		procInstructions.put(name, val);
-	}
-
-    /**
-	 * Get a processing instruction set on this event.
-	 *
-	 * @param name name of the PI
-	 * @return Object bound to <code>name</code> or <code>null</code>
-	 */
-	public Object getProcessingInstruction(String name)
-	{
-		if (name == null)
-		{
-			String msg = "name can't be null";
-			throw new IllegalArgumentException(msg);
-		}
-
-		return procInstructions.get(name);
-	}
-
-    /**
-	 * Allow this event to perform any lifecycle logic right before it is
-	 * published.
-	 *
-	 * @throws EventException
-	 *         if this event can't be queued
-	 */
-	public void onPublish() throws EventException
-	{
-		writeHeaders(headers);
-	}
-
-	/**
-	 * Allow a Event to perform lifecycle logic right after it's been
-	 * received.
-	 *
-	 * @throws EventException
-	 *         if something goes wrong
-	 */
-	public void onReceive() throws EventException
-	{
-		; // do nothing
-	}
+     * Set the EVENT_TYPE for the event.
+     *
+     * @param type type of the event
+     */
+    private void setEventType(String type)
+    {
+        notification.put(EVENT_TYPE, type);
+    }

 	/**
-	 * Get the underlying Elvin notification.
+	 * Get the underlying Elvin getNotification.
 	 *
-	 * @return underlying Elvin notification
+	 * @return underlying Elvin getNotification
 	 */
-	public Notification notification()
+	public Notification getNotification()
 	{
 		return notification;
 	}

 	/**
-	 * Determine if an Elvin notification contains Notice data.
+	 * Determine if an Elvin getNotification contains NOTICE data.
 	 *
-	 * @param notification  notification to query
-	 * @return <code>true</code> iff <code>notification</code> is a Notice
+	 * @param notification  getNotification to query
+	 * @return <code>true</code> iff <code>getNotification</code> is a NOTICE
 	 */
 	public static boolean isNotice(Notification notification)
 	{
 		if (notification == null)
 		{
-			String msg = "notification can't be null";
+			String msg = "getNotification can't be null";
 			throw new IllegalArgumentException(msg);
 		}

-		return aether.event.EventType.Notice.equals(
-				notification.getString(EventType));
+		return aether.event.EventType.NOTICE.equals(
+				notification.getString(EVENT_TYPE));
 	}

 	/**
@@ -354,8 +174,8 @@ public abstract class Event extends java.util.EventObject
 			throw new IllegalArgumentException(msg);
 		}

-		return aether.event.EventType.Request.equals(
-				notif.getString(EventType));
+		return aether.event.EventType.REQUEST.equals(
+				notif.getString(EVENT_TYPE));
 	}

 	/**
@@ -372,7 +192,7 @@ public abstract class Event extends java.util.EventObject
 			throw new IllegalArgumentException(msg);
 		}

-		return aether.event.EventType.Response.equals(
-				notif.getString(EventType));
+		return aether.event.EventType.RESPONSE.equals(
+				notif.getString(EVENT_TYPE));
 	}
 }
diff --git a/aether2/core/src/java/aether/event/EventQueue.java b/aether2/core/src/java/aether/event/EventQueue.java
index 3f4e442..297238f 100644
--- a/aether2/core/src/java/aether/event/EventQueue.java
+++ b/aether2/core/src/java/aether/event/EventQueue.java
@@ -23,4 +23,9 @@ public interface EventQueue
 	 * @return Event dequeued from the queue
 	 */
 	public Event dequeue();
+
+    /**
+     * Close the event queue to halt all further processing.
+     */
+    public void close();
 }
diff --git a/aether2/core/src/java/aether/event/EventType.java b/aether2/core/src/java/aether/event/EventType.java
index fcfa11a..f31863f 100644
--- a/aether2/core/src/java/aether/event/EventType.java
+++ b/aether2/core/src/java/aether/event/EventType.java
@@ -1,7 +1,7 @@
 package aether.event;

 /**
- * Interface that defines the different event types.
+ * Interface that defines the different event type constants.
  *
  * @author Buko O. (buko@concedere.net)
  * @version 0.1
@@ -11,15 +11,15 @@ public interface EventType
 	/**
 	 * Indicates that an Event is a request.
 	 */
-	public static final String Request = "aether:request";
+	public static final String REQUEST = "aether:request";

 	/**
 	 * Indicates that an Event is a response.
 	 */
-	public static final String Response = "aether:response";
+	public static final String RESPONSE = "aether:response";

 	/**
 	 * Indicates that an Event is a notice.
 	 */
-	public static final String Notice = "aether:notice";
+	public static final String NOTICE = "aether:notice";
 }
diff --git a/aether2/core/src/java/aether/event/Message.java b/aether2/core/src/java/aether/event/Message.java
index 4178db2..8bafa8b 100644
--- a/aether2/core/src/java/aether/event/Message.java
+++ b/aether2/core/src/java/aether/event/Message.java
@@ -4,7 +4,8 @@ import org.elvin.je4.Notification;
 import org.elvin.je4.Subscription;

 /**
- * Indicates an Event that has a specific destination.
+ * Indicates an Event that has a specific destination. Message events are used
+ * to allow point-to-point communication over the underlying event network.
  *
  * @author Buko O. (buko@concedere.net)
  * @version 0.1
@@ -38,7 +39,7 @@ public abstract class Message extends Event implements Attribute.Message
 	 */
 	public String getLink()
 	{
-		return notification.getString(LinkId);
+		return notification.getString(LINK_ID);
 	}

 	/**
@@ -48,7 +49,7 @@ public abstract class Message extends Event implements Attribute.Message
 	 */
 	public void setLink(String link)
 	{
-		notification.put(LinkId, link);
+		notification.put(LINK_ID, link);
 	}

 	/**
@@ -60,7 +61,7 @@ public abstract class Message extends Event implements Attribute.Message
 	 */
 	public String getDestination()
 	{
-		return notification.getString(Destination);
+		return notification.getString(DESTINATION);
 	}

 	/**
@@ -70,14 +71,14 @@ public abstract class Message extends Event implements Attribute.Message
 	 */
 	public void setDestination(String dest)
 	{
-		notification.put(Destination, dest);
+		notification.put(DESTINATION, dest);
 	}

 	/**
 	 * Construct a Subscription indicating that a component wants to receive
 	 * messages sent to a certain destination.
 	 *
-	 * @param dest Destination to subscribe to
+	 * @param dest DESTINATION to subscribe to
 	 */
 	public static Subscription createSubForDestination(String dest)
 	{
@@ -88,7 +89,7 @@ public abstract class Message extends Event implements Attribute.Message
 		}

 		// some destinations may be regexable URLS!
-   		String expr = "regex(" + Attribute.Message.Destination + ", " +
+   		String expr = "regex(" + Attribute.Message.DESTINATION + ", " +
 				   " \"" + dest + "\")";
 		return new Subscription(expr);
 	}
diff --git a/aether2/core/src/java/aether/event/Notice.java b/aether2/core/src/java/aether/event/Notice.java
index 2269b8c..944c063 100644
--- a/aether2/core/src/java/aether/event/Notice.java
+++ b/aether2/core/src/java/aether/event/Notice.java
@@ -11,27 +11,10 @@ import org.elvin.je4.Subscription;
  **/
 public class Notice extends Event implements Attribute.Notice
 {
-	/**
-	 * Construct a new Notice containing no data.
-	 */
-	public Notice()
-	{
-		super();
-
-		setEventType(aether.event.EventType.Notice);
-	}
-
-	/**
-	 * Construct a new Notice from an existing Elvin notification.
-	 *
-	 * @param notif Notification containing Notice data
-	 * @throws EventException
-	 *         if <code>notif</code> is invalid
-	 */
-	public Notice(Notification notif) throws EventException
-	{
-		super(notif);
-	}
+    public String getEventType()
+    {
+        return aether.event.EventType.NOTICE;
+    }

 	/**
 	 * Get the topic ID of this notice if it was broadcast on a topic.
@@ -40,7 +23,7 @@ public class Notice extends Event implements Attribute.Notice
 	 */
 	public String getTopicId()
 	{
-		return notification.getString(TopicId);
+		return notification.getString(TOPIC_ID);
 	}

 	/**
@@ -50,33 +33,12 @@ public class Notice extends Event implements Attribute.Notice
 	 */
 	public void setTopicId(String topic)
 	{
-		notification.put(TopicId, topic);
-	}
-
-	/**
-	 * Given the GUID of a component, return a subscription for anybody
-	 * who wishes to monitor the component.
-	 *
-	 * @param guid guid of the component
-	 * @return Subscription to monitor the component
-	 */
-	public static Subscription createSourceSubscription(String guid)
-	{
-		if (guid == null)
-		{
-			String msg = "guid can't be null";
-			throw new IllegalArgumentException(msg);
-		}
-
-		// subscribe to events generated by the component which are notices!
-		String expr = SourceId + " == \"" + guid + "\" && " +
-				EventType + " == \"" + aether.event.EventType.Notice + "\"";
-		return new Subscription(expr);
+		notification.put(TOPIC_ID, topic);
 	}

 	/**
 	 * Create a subscription for watching notices that're published to a
-	 * specific on the network.
+	 * specific topic on the network.
 	 *
 	 * @param topic topic to publish events to
 	 * @return Subscription necessary to subscribe the topic
@@ -90,8 +52,8 @@ public class Notice extends Event implements Attribute.Notice
 		}

         // subscribe to notices published to the topic
-        String expr = TopicId + " == \"" + topic + "\" && " +
-				EventType + " == \"" + aether.event.EventType.Notice + "\"";
+        String expr = TOPIC_ID + " == \"" + topic + "\" && " +
+				EVENT_TYPE + " == \"" + aether.event.EventType.NOTICE + "\"";
 		return new Subscription(expr);
 	}
 }
diff --git a/aether2/core/src/java/aether/event/Request.java b/aether2/core/src/java/aether/event/Request.java
index 6ea49c0..59b1d97 100644
--- a/aether2/core/src/java/aether/event/Request.java
+++ b/aether2/core/src/java/aether/event/Request.java
@@ -12,165 +12,21 @@ import java.util.*;
  **/
 public class Request extends Message implements Attribute.Request, Verb
 {
-	private Map query = new HashMap();
-
-    /**
-	 * Construct a new Request containing no data.
-	 */
-	public Request()
-	{
-		super();
-		setEventType(aether.event.EventType.Request);
-	}
-
-	/**
-	 * Construct a new Request from an existing notification.
-	 *
-	 * @param notif Notification containing request data
-	 * @throws EventException
-	 *         if <code>notif</code> is invalid
-	 */
-	public Request(Notification notif) throws EventException
-	{
-		super(notif);
-
-		readQuery();
-	}
-
-    /**
-	 * Get the VERB of this request.
-	 *
-	 * @return verb of this request
-	 */
-	public String getVerb()
-	{
-		return this.notification.getString(Verb);
-	}
-
-	/**
-	 * Set the VERB of this request.
-	 *
-	 * @param verb verb of this request
-	 */
-	public void setVerb(String verb)
-	{
-		this.notification.put(Verb, verb);
-	}
-
-	/**
-	 * Retrieve a query parameter of the request.
-	 *
-	 * @param name name of the parameter
-	 * @return value of the parameter or <code>null</code>
-	 */
-	public String getParameter(String name)
-	{
-		if (name == null)
-		{
-			String msg = "name can't be null";
-			throw new IllegalArgumentException(msg);
-		}
-
-		return (String)  query.get(name);
-	}
-
-	/**
-	 * Set a query parameter on the request.
-	 *
-	 * @param name name of the parameter
-	 * @param val  value of the parameter
-	 */
-	public void setParameter(String name, String val)
-	{
-		if (name == null)
-		{
-			String msg = "name can't be null";
-			throw new IllegalArgumentException(msg);
-		}
-
-		query.put(name, val);
-	}
-
-    /**
-	 * Return an enumeration of all the parameters in the request.
-	 *
-	 * @return enumeration of all the parameters in the map
-	 */
-	public Enumeration parameters()
-	{
-		return Collections.enumeration(query.keySet());
-	}
-
-    /**
-	 * Write all the query parameters to the underlying notification.
-	 */
-	private void writeQuery()
-	{
-  		StringBuffer sb = new StringBuffer();
-
-        for (Iterator iter = query.entrySet().iterator(); iter.hasNext(); )
-		{
-			Map.Entry me = (Map.Entry) iter.next();
-
-			// add it to the space separated list of query params
-			sb.append((String) me.getKey()).append(' ');
-
-            // store it in the notification
-			this.notification.put("aether.request.query." +
-								  (String) me.getKey(),
-								  (String) me.getValue());
-		}
-
-        // store the list of query params
-		notification.put(Query, sb.toString());
-	}
-
-	/**
-	 * Read the query parameters from the underlying notification object.
-	 */
-	private void readQuery()
-	{
-		// skip processing if no query parameters were passed
-		if (!notification.containsKey(Query)) return;
-
-        // tokenize the list of query parameters
-        StringTokenizer tokenizer =
-				new StringTokenizer(notification.getString(Query));
-
-		while (tokenizer.hasMoreTokens())
-		{
-			String param = tokenizer.nextToken();
-
-			String val = notification.getString("aether.request.query." +
-												param);
-			query.put(param, val);
-		}
-	}
-
-	/**
-	 * Execute lifecycle management logic right before the request is
-	 * enqueued.
-	 *
-	 * @throws EventException
-	 *         if the request can't be queued
-	 */
-	public void onPublish() throws EventException
-	{
-		super.onPublish();
-
-		writeQuery();
-	}
+    public String getEventType()
+    {
+        return aether.event.EventType.REQUEST;
+    }

 	/**
-	 * Given a request, construct an appropriate Response object.
+	 * Construct an appropriate Response object for responding to this Request
+     * object.
 	 *
-	 * @param req    Request received
 	 * @param srcId  GUID of the component generating the response
 	 * @return Response object appropriate for this request
 	 */
-    public static Response createResponse(Request req, String srcId)
+    public Response createResponse(String srcId)
 	{
-		if ((req == null) || (srcId == null))
+		if (srcId == null)
 		{
 			String msg = "no parameter can be null";
 			throw new IllegalArgumentException(msg);
@@ -179,10 +35,10 @@ public class Request extends Message implements Attribute.Request, Verb
         Response resp = new Response();

         // maintain the link
-		resp.setLink(req.getLink());
+		resp.setLink(getLink());

 		// destination of the response is the source of the request
-		resp.setDestination(req.getSourceId());
+		resp.setDestination(getSourceId());

 		// source of the response is the GUID of the responder
 		resp.setSourceId(srcId);
diff --git a/aether2/core/src/java/aether/event/Response.java b/aether2/core/src/java/aether/event/Response.java
index 18a70ca..109d3b7 100644
--- a/aether2/core/src/java/aether/event/Response.java
+++ b/aether2/core/src/java/aether/event/Response.java
@@ -11,66 +11,11 @@ import org.elvin.je4.Subscription;
  **/
 public class Response extends Message implements Attribute.Response
 {
-    /**
-	 * Construct a new Response containing empty data.
-	 */
-	public Response()
-	{
-		super();
-        setEventType(aether.event.EventType.Response);
-	}
-
-	/**
-	 * Construct a Response from an existing notification.
-	 *
-	 * @param notif Notification containing response data
-	 * @throws EventException
-	 *         if <code>notif</code> is invalid
-	 */
-	public Response(Notification notif) throws EventException
-	{
-		super(notif);
-	}
-
-    /**
-	 * Get the response code for this response.
-	 *
-	 * @return response code for this response or <code>-1</code>
-	 */
-	public int getCode()
-	{
-		return notification.getInt(Code);
-	}
-
-	/**
-	 * Set the response code for this response.
-	 *
-	 * @param code response code for this response
-	 */
-	public void setCode(int code)
-	{
-		notification.put(Code, code);
-	}

-    /**
-	 * Get the reason line for this response.
-	 *
-	 * @return reason line for this response
-	 */
-	public String getReasonLine()
-	{
-        return notification.getString(ReasonLine);
-	}
-
-	/**
-	 * Set the reason line for this response.
-	 *
-	 * @param rl reason line for this response
-	 */
-	public void setReasonLine(String rl)
-	{
-		notification.put(ReasonLine, rl);
-	}
+    public String getEventType()
+    {
+        return aether.event.EventType.RESPONSE;
+    }

 	/**
 	 * Construct a Subscription necessary to receive responses over a given
@@ -88,9 +33,9 @@ public class Response extends Message implements Attribute.Response
 		}

 		// receive all events that are responses and were sent over this link
-        String expr = Attribute.Event.EventType + " == \"" +
-				aether.event.EventType.Response + "\" && " +
-				LinkId + " == \"" + linkId + "\"";
+        String expr = Attribute.Event.EVENT_TYPE + " == \"" +
+				aether.event.EventType.RESPONSE + "\" && " +
+				LINK_ID + " == \"" + linkId + "\"";
 		return new Subscription(expr);
 	}
 }
diff --git a/aether2/core/src/java/aether/event/SimpleEventQueue.java b/aether2/core/src/java/aether/event/SimpleEventQueue.java
index 90dc885..4e85e9f 100644
--- a/aether2/core/src/java/aether/event/SimpleEventQueue.java
+++ b/aether2/core/src/java/aether/event/SimpleEventQueue.java
@@ -34,4 +34,9 @@ public class SimpleEventQueue implements EventQueue

         return (Event) list.removeFirst();
 	}
+
+    public synchronized void close()
+    {
+        list.clear();
+    }
 }
diff --git a/aether2/core/src/java/aether/event/Verb.java b/aether2/core/src/java/aether/event/Verb.java
deleted file mode 100644
index 890dd6c..0000000
--- a/aether2/core/src/java/aether/event/Verb.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package aether.event;
-
-/**
- * Defines the accepted verbs within the Aether request/response system.
- *
- * @author Buko O. (buko@concedere.net)
- * @version 0.1
- **/
-public interface Verb
-{
-	/**
-	 * An HEAD request issued against a Resource.
-	 */
-	public static final String Head = "HEAD";
-
-	/**
-	 * A GET request issued against a Resource.
-	 */
-	public static final String Get = "GET";
-
-	/**
-	 * A PUT request issued against a Resource.
-	 */
-	public static final String Put = "PUT";
-
-    /**
-	 * A DELETE request.
-	 */
-	public static final String Delete = "DELETE";
-
-	/**
-	 * An OPITIONS request.
-	 */
-	public static final String Options = "OPTIONS";
-
-	/**
-	 * A TRACE request.
-	 */
-	public static final String Trace = "TRACE";
-}
diff --git a/aether2/core/src/java/aether/net/AbstractConnection.java b/aether2/core/src/java/aether/net/AbstractConnection.java
index e483c6d..edc049a 100644
--- a/aether2/core/src/java/aether/net/AbstractConnection.java
+++ b/aether2/core/src/java/aether/net/AbstractConnection.java
@@ -1,7 +1,6 @@
 package aether.net;

 import aether.event.Event;
-import aether.event.EventException;
 import org.elvin.je4.ElvinURL;
 import org.elvin.je4.Producer;

@@ -78,19 +77,7 @@ public class AbstractConnection implements Connection
 			throw new IllegalStateException(emsg);
 		}

-		try
-		{
-			msg.onPublish();
-		}
-		catch (EventException me)
-		{
-			String emsg = "event wasn't ready to be published";
-			IOException ioe = new IOException(emsg);
-			ioe.initCause(me);
-			throw ioe;
-		}
-
-		producer.notify(msg.notification());
+		producer.notify(msg.getNotification());
 	}

 	public boolean isOpen()
diff --git a/aether2/core/src/java/aether/net/AbstractLink.java b/aether2/core/src/java/aether/net/AbstractLink.java
index ca33476..4697207 100644
--- a/aether2/core/src/java/aether/net/AbstractLink.java
+++ b/aether2/core/src/java/aether/net/AbstractLink.java
@@ -107,14 +107,8 @@ public abstract class AbstractLink implements Link
 		return destination;
 	}

-	public Request createRequest(String verb)
-	{
-		if (verb == null)
-		{
-			String msg = "verb cannot be null";
-			throw new IllegalArgumentException(msg);
-		}
-
+	public Request createRequest()
+    {
 		if (closed)
 		{
 			String msg = "link is closed";
@@ -123,15 +117,13 @@ public abstract class AbstractLink implements Link

 		Request request = new Request();

-		// set the verb, linkId, destination
-		request.setVerb(verb);
+		// set the linkId, destination
 		request.setLink(this.linkId);
 		request.setDestination(this.destination);

 		return request;
 	}

-
 	public synchronized Response send(Request req) throws IOException
 	{
 		if (req == null)
@@ -147,6 +139,11 @@ public abstract class AbstractLink implements Link
 		}

         // make sure that this is a request that we created!!
+        if (!linkId.equals(req.getLink()))
+        {
+            String msg = "request wasn't created by this link!";
+            throw new IllegalArgumentException(msg);
+        }

 		// now send the request!!
 		connection.publish(req);
@@ -160,7 +157,7 @@ public abstract class AbstractLink implements Link
 	 * until a response event is received. This method causes the blocking to
 	 * occur.
 	 *
-	 * @return Response of the request
+	 * @return RESPONSE of the request
 	 * @throws IOException
 	 *         if something goes wrong
 	 */
@@ -200,7 +197,7 @@ public abstract class AbstractLink implements Link
 	}

 	/**
-	 * Timeout this connection.
+	 * Timeout this Link's most recent request/response transaction.
 	 */
 	public synchronized void timeOut()
 	{
@@ -227,7 +224,7 @@ public abstract class AbstractLink implements Link
 	{
 		public void notificationAction(Notification notification)
 		{
-			// if this notification is a response  let's process it
+			// if this getNotification is a response  let's process it
         	if (Event.isResponse(notification))
 			{
 				try
@@ -235,7 +232,8 @@ public abstract class AbstractLink implements Link
 					// obtain the lock on the outer object first!
 					synchronized (AbstractLink.this)
 					{
-            			response = new Response(notification);
+            			response = new Response();
+                        response.parse(notification);

 						// wake up any threads sleeping on this object, waiting
 						// for a response
diff --git a/aether2/core/src/java/aether/net/AbstractMonitor.java b/aether2/core/src/java/aether/net/AbstractMonitor.java
index 6c8c8a5..8088a22 100644
--- a/aether2/core/src/java/aether/net/AbstractMonitor.java
+++ b/aether2/core/src/java/aether/net/AbstractMonitor.java
@@ -58,71 +58,6 @@ public class AbstractMonitor implements Monitor
 			new QueueNotificationListener();


-	/**
-	 * Monitor a resource in the Aether.
-	 *
-	 * @param guid guid of the component to monitor
-	 * @throws IOException
-	 *         if the resource can't be monitored
-	 */
-	public synchronized void watch(String guid) throws IOException
-	{
-        if (guid == null)
-		{
-			String msg = "no parameter can be null";
-			throw new IllegalArgumentException(msg);
-		}
-
-		if (!isOpen())
-		{
-			String msg = "monitor is closed";
-			throw new IllegalStateException(msg);
-		}
-
-        // have we already subscribed to this URI? if so, ignore it!
-		if (!subscriptionMap.containsKey(guid))
-		{
-			// create the Subscription from the uri and add our listener to it
-			Subscription subscription = Notice.createSourceSubscription(guid);
-            subscription.addNotificationListener(queueListener);
-
-			// subscribe to it
-			consumer.addSubscription(subscription);
-
-			// put it in the map
-			subscriptionMap.put(guid, subscription);
-		}
-	}
-
-	/**
-	 * Stop monitoring a resource in the Aether.
-	 *
-	 * @param guid guid of the component to ignore
-	 * @throws IOException
-	 *         if the halt monitor procedure fails
-	 */
-	public synchronized void ignore(String guid) throws IOException
-	{
-		if (guid == null)
-		{
-			String msg = "no parameter can be null";
-			throw new IllegalArgumentException(msg);
-		}
-
-		if (!isOpen())
-		{
-			String msg = "monitor is closed";
-			throw new IllegalStateException(msg);
-		}
-
-        // if subscribed to this guid, remove the subscription
-		if (subscriptionMap.containsKey(guid))
-		{
-			Subscription sub = (Subscription) subscriptionMap.remove(guid);
-			consumer.removeSubscription(sub);
-		}
-	}
-
 	public void subscribe(String topic) throws IOException
 	{
 		if (topic == null)
@@ -279,9 +214,9 @@ public class AbstractMonitor implements Monitor
 	}

 	/**
-	 * Fire an incoming Notice to all registered listeners.
+	 * Fire an incoming NOTICE to all registered listeners.
 	 *
-	 * @param notice Notice to be delivered to all listeners
+	 * @param notice NOTICE to be delivered to all listeners
 	 */
 	protected void fireNoticeReceived(Notice notice)
 	{
@@ -297,7 +232,7 @@ public class AbstractMonitor implements Monitor
 	}

 	/**
-	 * NotificationListener that enqueues all incoming Notice objects.
+	 * NotificationListener that enqueues all incoming NOTICE objects.
 	 *
 	 * @author Buko O. (buko@concedere.net)
 	 * @version 0.1
@@ -310,13 +245,13 @@ public class AbstractMonitor implements Monitor
 			{
 				try
 				{
-					Notice n = new Notice(notification);
-					n.onReceive();
+					Notice n = new Notice();
+					n.parse(notification);
 					fireNoticeReceived(n);
 				}
 				catch (EventException me)
 				{
-					String msg = "receieved bad notification!";
+					String msg = "receieved bad getNotification!";
 					throw new Error(msg, me);
 				}
 			}
diff --git a/aether2/core/src/java/aether/net/DefaultLink.java b/aether2/core/src/java/aether/net/DefaultLink.java
index 6fcf23a..2a6b7fd 100644
--- a/aether2/core/src/java/aether/net/DefaultLink.java
+++ b/aether2/core/src/java/aether/net/DefaultLink.java
@@ -22,7 +22,7 @@ public class DefaultLink extends AbstractLink
 	 *
 	 * @param host host of the event server to use
 	 * @param port port of the event server to use
-	 * @param dest Destination to send requests to
+	 * @param dest DESTINATION to send requests to
 	 */
 	public DefaultLink(String host, int port, String dest)
 	{
diff --git a/aether2/core/src/java/aether/net/Link.java b/aether2/core/src/java/aether/net/Link.java
index 2294f0e..f2e7d7d 100644
--- a/aether2/core/src/java/aether/net/Link.java
+++ b/aether2/core/src/java/aether/net/Link.java
@@ -50,19 +50,18 @@ public interface Link

     /**
 	 * Construct a Request to be sent over this link.
-	 *
-	 * @param verb Verb that the Request will applied to the component or
-	 *             resource on the other end
+     *
+     * @return Request that may be sent over this Link
 	 */
-	public Request createRequest(String verb);
+	public Request createRequest();

 	/**
 	 * Send a Request over this link.
 	 *
-	 * @param request Request to send
-	 * @return Response to the given request
+	 * @param Request Request to send
+	 * @return Response to the given Request
 	 * @throws IOException
 	 *         if something goes wrong
 	 */
-	public Response send(Request request) throws IOException;
+	public Response send(Request Request) throws IOException;
 }
diff --git a/aether2/core/src/java/aether/net/Monitor.java b/aether2/core/src/java/aether/net/Monitor.java
index 7f827a2..eca51bc 100644
--- a/aether2/core/src/java/aether/net/Monitor.java
+++ b/aether2/core/src/java/aether/net/Monitor.java
@@ -16,25 +16,6 @@ import java.io.IOException;
  **/
 public interface Monitor
 {
-    /**
-	 * Watch a resource in the Aether. Any Notices emitted by the resource
-	 * will be received.
-	 *
-	 * @param guid GUID of the component to monitor
-	 * @throws IOException
-	 *         if the resource can't be monitored
-	 */
-	public void watch(String guid) throws IOException;
-
-    /**
-	 * Stop watching a resource in the Aether.
-	 *
-	 * @param  guid GUID of the component to monitor
-	 * @throws IOException
-	 *         if the halt monitor procedure fails
-	 */
-	public void ignore(String guid) throws IOException;
-
 	/**
 	 * Subscribe to a topic in the Aether. Any Notices broadcast to the topic
 	 * will be received.
diff --git a/aether2/core/src/test/aether/net/DefaultConnectionTest.java b/aether2/core/src/test/aether/net/DefaultConnectionTest.java
index 7082c0a..13f166a 100644
--- a/aether2/core/src/test/aether/net/DefaultConnectionTest.java
+++ b/aether2/core/src/test/aether/net/DefaultConnectionTest.java
@@ -59,7 +59,7 @@ public class DefaultConnectionTest extends AetherTestCase
 	{
 		// subscribe to everything
 		Consumer consumer = new Consumer(conn.elvinConnection());
-		Subscription sub = new Subscription("require(" + Attribute.Event.EventId + ")");
+		Subscription sub = new Subscription("require(" + Attribute.Event.EVENT_ID + ")");
 		sub.addNotificationListener(new NotificationListener()
 		{
 			public void notificationAction(Notification notification)
@@ -98,7 +98,7 @@ public class DefaultConnectionTest extends AetherTestCase
 		// wait for the event to come back!
 		Thread.sleep(1000);

-		// first event should be the notification
+		// first event should be the getNotification
 		Notice not = (Notice) queue.dequeue();

 		assertEquals(not.getHeader("Priority"), "High");
diff --git a/aether2/core/src/test/aether/net/DefaultLinkTest.java b/aether2/core/src/test/aether/net/DefaultLinkTest.java
index b40a4e5..50245d7 100644
--- a/aether2/core/src/test/aether/net/DefaultLinkTest.java
+++ b/aether2/core/src/test/aether/net/DefaultLinkTest.java
@@ -56,7 +56,7 @@ public class DefaultLinkTest extends AetherTestCase
 			// subscribe to all requests
             this.consumer = new Consumer(conn.elvinConnection());
 			Subscription sub =
-					new Subscription("regex(" + Attribute.Message.Destination +
+					new Subscription("regex(" + Attribute.Message.DESTINATION +
 									 ", \"*\")");
 			sub.addNotificationListener(new NotificationListener()
 			{
@@ -69,7 +69,7 @@ public class DefaultLinkTest extends AetherTestCase
 						resp.setLink(req.getLink());

 						resp.setCode(200);
-						resp.setReasonLine("AutoResponder Response!");
+						resp.setReasonLine("AutoResponder RESPONSE!");
 						conn.publish(resp);
 					}
 					catch (Exception e)