Merge pull request #9 from killnine/master

[AMQNET-565] - .net standard conversion, project reorganization
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..31429b5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+################################################################################
+# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
+################################################################################
+
+/.vs
+*.user
+/src/obj
+/test/bin/Debug/netcoreapp2.2
+/test/obj
+/src/bin/Debug/netstandard2.0
+
+bin/
+obj/
+build/
+.idea/
+*.csproj.user
+nms.sln.startup.json
+build/
+package/
+nms.sln.DotSettings.user
+tools/
\ No newline at end of file
diff --git a/Apache.NMS.ActiveMQ.Test.nunit b/Apache.NMS.ActiveMQ.Test.nunit
deleted file mode 100644
index cc5b019..0000000
--- a/Apache.NMS.ActiveMQ.Test.nunit
+++ /dev/null
@@ -1,7 +0,0 @@
-<NUnitProject>

-  <Settings activeconfig="Default" />

-  <Config name="Default" binpathtype="Auto">

-    <assembly path="Apache.NMS.Test.dll" />

-    <assembly path="Apache.NMS.ActiveMQ.Test.dll" />

-  </Config>

-</NUnitProject>
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9a60bf8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# Apache.NMS: The .NET Messaging Service Client API
+For more information see http://activemq.apache.org/nms
+
+### Building
+Visual Studio 2017 or above is required to build Apache.NMS. To build, launch Visual Studio with the nms.sln file and build the solution.
+
+### Testing
+Tests use the NUnit Framework. 
+
+### Documentation 
+NMS documentation is generated automatically using [DocFX](https://dotnet.github.io/docfx/) after build. Documentation files are available under folder:
+
+`<root_directory>\docs\_site`
\ No newline at end of file
diff --git a/README.txt b/README.txt
deleted file mode 100644
index 4e4e1df..0000000
--- a/README.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-=======================================================================
-Welcome to:
- * Apache.NMS.ActiveMQ : Apache NMS for ActiveMQ Client Library
-=======================================================================
-
-For more information see http://activemq.apache.org/nms
-
-=======================================================================
-Building With NAnt 0.86 see http://nant.sourceforge.net/
-=======================================================================
-
-NAnt version 0.86 or newer is required to build Apache.NMS.ActiveMQ.  Version 0.90
-or newer is highly recommended.
-To build the code using NAnt, run:
-
-  nant
-
-To run the unit tests you need to run an Apache ActiveMQ Broker first then run:
-
-  nant test
-
-The NMS documentation can be generated into three different formats using
-Microsoft's Sandcastle open source product. The Sandcastle Styles project
-was used to enhance the output generated from the current release of Sandcastle.
-
-The Sandcastle project is located here:
-
-http://sandcastle.codeplex.com/
-
-The Sandcastle Styles project is located here:
-
-http://sandcastlestyles.codeplex.com/
-
-To generate the documentation, run:
-
-  nant sandcastle-all
-
-=======================================================================
-Building With Visual Studio 2008
-=======================================================================
-
-First build the project with nant, this will download and install 
-all the 3rd party dependencies for you.
-
-Open the solution File.  Build using "Build"->"Build Solution" 
-menu option.
-
-The resulting DLLs will be in build\${framework}\debug or the 
-build\${framework}\release directories depending on your settings 
-under "Build"->"Configuration Manager"
-
-If you have the Resharper plugin installed in Visual Studio, you can run 
-all the Unit Tests by using the "ReSharper"->"Unit Testing"->"Run All 
-Tests from Solution" menu option.  Please note that you must run an 
-Apache ActiveMQ Broker before kicking off the unit tests.  Otherwise,
-the standalone NUnit test runner can be used.  NUnit version 2.5.8
-is required to build and run the unit tests.
-
diff --git a/RELEASE.md b/RELEASE.md
new file mode 100644
index 0000000..6600efd
--- /dev/null
+++ b/RELEASE.md
@@ -0,0 +1,21 @@
+replace <rc-version> in the below steps with your rc version, e.g. 1.8.0-rc3
+
+git clone https://gitbox.apache.org/repos/asf/activemq-nms-openwire.git
+
+ensure versions (csproj files, and package.ps1)
+
+build project
+
+git tag -m "tag <rc-version>" <rc-version> git push origin <rc-version>
+
+svn checkout rc dist dev https://dist.apache.org/repos/dist/dev/activemq/activemq-nms-openwire
+
+create folder for rc, e.g. mkdir <rc-version>
+
+copy all contents from package dir from project into the rc folder.
+
+sign the files, you will find a helper script "sign-release.sh", invoke it as
+
+./sign-release.sh <rc-version> <your-gpg-password>
+
+commit all files into the rc dist dev repo.
\ No newline at end of file
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..6858b98
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,10 @@
+###############
+#    folder   #
+###############
+/**/DROP/
+/**/TEMP/
+/**/packages/
+/**/bin/
+/**/obj/
+_site
+log.txt
diff --git a/docs/api/.gitignore b/docs/api/.gitignore
new file mode 100644
index 0000000..e8079a3
--- /dev/null
+++ b/docs/api/.gitignore
@@ -0,0 +1,5 @@
+###############
+#  temp file  #
+###############
+*.yml
+.manifest
diff --git a/docs/api/index.md b/docs/api/index.md
new file mode 100644
index 0000000..78dc9c0
--- /dev/null
+++ b/docs/api/index.md
@@ -0,0 +1,2 @@
+# PLACEHOLDER
+TODO: Add .NET projects to the *src* folder and run `docfx` to generate **REAL** *API Documentation*!
diff --git a/docs/articles/intro.md b/docs/articles/intro.md
new file mode 100644
index 0000000..c0478ce
--- /dev/null
+++ b/docs/articles/intro.md
@@ -0,0 +1 @@
+# Add your introductions here!
diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml
new file mode 100644
index 0000000..ff89ef1
--- /dev/null
+++ b/docs/articles/toc.yml
@@ -0,0 +1,2 @@
+- name: Introduction
+  href: intro.md
diff --git a/docs/docfx.json b/docs/docfx.json
new file mode 100644
index 0000000..7a6f8bd
--- /dev/null
+++ b/docs/docfx.json
@@ -0,0 +1,75 @@
+{
+  "metadata": [
+    {
+      "src": [
+        {
+          "files": [
+            "src/nms-openwire.csproj"
+          ],
+          "src": ".."
+        }
+      ],
+      "dest": "api",
+      "disableGitFeatures": false,
+      "disableDefaultFilter": false,
+      "properties": {
+        "TargetFramework":  "netstandard2.0" 
+      } 
+    }
+  ],
+  "build": {
+    "content": [
+      {
+        "files": [
+          "api/**.yml",
+          "api/index.md"
+        ]
+      },
+      {
+        "files": [
+          "articles/**.md",
+          "articles/**/toc.yml",
+          "toc.yml",
+          "*.md"
+        ]
+      }
+    ],
+    "resource": [
+      {
+        "files": [
+          "images/**"
+        ]
+      }
+    ],
+    "overwrite": [
+      {
+        "files": [
+          "apidoc/**.md"
+        ],
+        "exclude": [
+          "obj/**",
+          "_site/**"
+        ]
+      }
+    ],
+    "globalMetadata": {
+      "_appTitle": "Apache NMS Openwire Documentation",
+      "_appLogoPath": "/images/activemq_logo_icon.png",
+      "_appFooter": "Copyright © 2005-2019 Apache Software Foundation project<br>Generated by <strong>DocFX</strong>",
+      "_enableSearch": "true"
+    },
+    "dest": "_site",
+    "globalMetadataFiles": [],
+    "fileMetadataFiles": [],
+    "template": [
+      "default",
+      "template"
+    ],
+    "postProcessors": [],
+    "markdownEngineName": "markdig",
+    "noLangKeyword": false,
+    "keepFileLink": false,
+    "cleanupCacheHistory": false,
+    "disableGitFeatures": false
+  }
+}
\ No newline at end of file
diff --git a/docs/images/activemq_logo_icon.png b/docs/images/activemq_logo_icon.png
new file mode 100644
index 0000000..c2b43f5
--- /dev/null
+++ b/docs/images/activemq_logo_icon.png
Binary files differ
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..3ae2506
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,4 @@
+# This is the **HOMEPAGE**.
+Refer to [Markdown](http://daringfireball.net/projects/markdown/) for how to write markdown files.
+## Quick Start Notes:
+1. Add images to the *images* folder if the file is referencing an image.
diff --git a/docs/nms-openwire-docs.csproj b/docs/nms-openwire-docs.csproj
new file mode 100644
index 0000000..f7c714f
--- /dev/null
+++ b/docs/nms-openwire-docs.csproj
@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+    <RootNamespace>nms_openwire_docs</RootNamespace>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="docfx.console" Version="2.43.2">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+  </ItemGroup>
+
+  <ItemGroup>
+    <Folder Include="images\" />
+    <Folder Include="template\" />
+  </ItemGroup>
+
+</Project>
diff --git a/docs/template/partials/logo.tmpl.partial b/docs/template/partials/logo.tmpl.partial
new file mode 100644
index 0000000..f430ce2
--- /dev/null
+++ b/docs/template/partials/logo.tmpl.partial
@@ -0,0 +1,24 @@
+{{! Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.}}
+
+<style>
+img.activemq-logo {
+    height: 51px;
+}
+</style>
+
+<a class="navbar-brand" href="{{_rel}}index.html">
+  <img id="logo" class="svg activemq-logo" src="{{_rel}}{{{_appLogoPath}}}{{^_appLogoPath}}logo.svg{{/_appLogoPath}}" alt="{{_appName}}" >
+</a>
diff --git a/docs/toc.yml b/docs/toc.yml
new file mode 100644
index 0000000..59f8010
--- /dev/null
+++ b/docs/toc.yml
@@ -0,0 +1,5 @@
+- name: Articles
+  href: articles/
+- name: Api Documentation
+  href: api/
+  homepage: api/index.md
diff --git a/ext_bin/Apache.NMS.Test.dll b/ext_bin/Apache.NMS.Test.dll
new file mode 100644
index 0000000..5d8eee3
--- /dev/null
+++ b/ext_bin/Apache.NMS.Test.dll
Binary files differ
diff --git a/ext_bin/Apache.NMS.Test.pdb b/ext_bin/Apache.NMS.Test.pdb
new file mode 100644
index 0000000..57432f8
--- /dev/null
+++ b/ext_bin/Apache.NMS.Test.pdb
Binary files differ
diff --git a/nant-common.xml b/nant-common.xml
deleted file mode 100644
index 3e5a8fc..0000000
--- a/nant-common.xml
+++ /dev/null
@@ -1,658 +0,0 @@
-<?xml version="1.0"?>

-<!--

-    Licensed to the Apache Software Foundation (ASF) under one or more

-    contributor license agreements.  See the NOTICE file distributed with

-    this work for additional information regarding copyright ownership.

-    The ASF licenses this file to You under the Apache License, Version 2.0

-    (the "License"); you may not use this file except in compliance with

-    the License.  You may obtain a copy of the License at

-

-    http://www.apache.org/licenses/LICENSE-2.0

-

-    Unless required by applicable law or agreed to in writing, software

-    distributed under the License is distributed on an "AS IS" BASIS,

-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

-    See the License for the specific language governing permissions and

-    limitations under the License.

--->

-<project xmlns="http://nant.sourceforge.net/release/0.85/nant.xsd">

-

-    <!-- ============================================================================================ -->

-    <!--    P R O P E R T Y    D E F I N I T I O N S                                                  -->

-    <!-- ============================================================================================ -->

-

-    <!-- global project settings -->

-    <property name="project.cls.compliant"   value="true" unless="${property::exists('project.cls.compliant')}" />

-    <property name="project.release.type"    value="SNAPSHOT" unless="${property::exists('project.release.type')}" />

-    <property name="project.version.full"    value="${project.version + if(project.release.type == 'snapshot', '-' + project.release.type, '')}" dynamic="true" />

-    <property name="project.startyear"       value="2005" />

-    <property name="build.dir"               value="${basedir}/build" />

-    <property name="doc.dir"                 value="${build.dir}/doc" />

-    <property name="lib.dir"                 value="${path::combine(basedir, 'lib')}" dynamic="true" />

-    <property name="lib.family.dir"          value="${path::combine(lib.dir, framework::get-family(framework::get-target-framework()))}" dynamic="true" />

-    <property name="lib.framework.dir"       value="${path::combine(lib.family.dir, version::to-string(framework::get-version(framework::get-target-framework())))}" dynamic="true" />

-    <property name="package.dir"             value="${basedir}/package" />

-    <property name="src.package.name"        value="${project.name + '-' + project.version + if(project.release.type == 'SNAPSHOT', '-' + project.release.type, '') + '-src.zip'}" />

-    <property name="bin.package.name"        value="${project.name + '-' + project.version + if(project.release.type == 'SNAPSHOT', '-' + project.release.type, '') + '-bin.zip'}" />

-

-    <!-- default configuration -->

-    <property name="build.defines"           value="" />

-    <property name="build.noskip"            value="false" />

-    <property name="build.skip"              value="false" />

-    <property name="build.skip.release"      value="false" unless="${property::exists('build.skip.release')}" />

-    <property name="download.skip"           value="false" unless="${property::exists('download.skip')}"/>

-    <property name="install.skip"            value="false" unless="${property::exists('install.skip')}"/>

-    <property name="compile.skip"            value="false" unless="${property::exists('compile.skip')}" />

-    <property name="current.build.config"    value="${if(project.release.type == 'release', 'release', 'debug')}" overwrite="false" />

-    <property name="current.build.framework" value="${framework::get-target-framework()}" overwrite="false" />

-    <property name="current.build.defines"   value="${build.defines}" />

-    <property name="build.framework.strings" value="net-2.0,net-3.5,net-4.0,mono-2.0,mono-4.0,netcf-2.0,netcf-3.5" unless="${property::exists('build.framework.strings')}"/>

-    <property name="current.build.framework.assembly.dir" value="${framework::get-assembly-directory(framework::get-target-framework())}" dynamic="true" />

-

-    <property name="build.config.strings"    value="${if(property::exists('configuration'), configuration, if(build.skip.release == 'true', 'debug', 'debug,release'))}" dynamic="true" />

-

-    <!-- Figure out the user's HOME directory -->

-    <property name="user.home" value="${environment::get-variable('HOME')}"

-            if="${environment::variable-exists('HOME') and platform::is-unix()}"

-            unless="${property::exists('user.home')}" />

-    <property name="user.home" value="${environment::get-variable('USERPROFILE')}"

-            if="${environment::variable-exists('USERPROFILE') and platform::is-windows()}"

-            unless="${property::exists('user.home')}" />

-    <fail message="The HOME environment variable is not defined.  Please set it to your home directory."

-            unless="${property::exists('user.home')}" if="${platform::is-unix()}" />

-    <fail message="The USERPROFILE environment variable is not defined.  Please set it to your home directory."

-            unless="${property::exists('user.home')}" if="${platform::is-windows()}" />

-

-    <!-- Figure out the NANT repositories -->

-    <property name="nant.remote.repo" value="${environment::get-variable('NANT_REMOTE_REPO')}"

-            if="${environment::variable-exists('NANT_REMOTE_REPO')}"

-            unless="${property::exists('nant.remote.repo')}" />

-    <property name="nant.local.repo" value="${environment::get-variable('NANT_REPO')}/local"

-            if="${environment::variable-exists('NANT_REPO')}"

-            unless="${property::exists('nant.local.repo')}" />

-    <property name="nant.local.repo" value="${user.home}/.nant/repository/local"

-            unless="${property::exists('nant.local.repo')}" />

-

-    <!-- Figure out the keyfile location -->

-    <property name="snk.file" value="${environment::get-variable('ACTIVEMQ_DOTNET_SNK')}"

-            if="${environment::variable-exists('ACTIVEMQ_DOTNET_SNK')}"

-            unless="${property::exists('snk.file')}" />

-    <property name="snk.file" value="${basedir}/keyfile/NMSKey.snk"

-            if="${not property::exists('snk.file')}" />

-

-    <!-- ============================================================================================ -->

-    <!--      I N I T I A L I Z A T I O N     T A R G E T S                                           -->

-    <!-- ============================================================================================ -->

-

-    <target name="init" description="Initializes build properties">

-        <!-- enabled the release or debug configuration -->

-        <call target="set-${current.build.config}-configuration" />

-

-        <!-- Check to see if our build setup for the target framework -->

-        <if test="${not(target::exists('set-'+current.build.framework+'-framework-configuration'))}">

-            <fail message="The '${current.build.framework}' framework is not supported by this version of ActiveMQ .NET" />

-        </if>

-        <call target="set-${current.build.framework}-framework-configuration" />

-

-        <!-- Check to see current platform supports the target framework -->

-        <if test="${framework::exists(current.build.framework)}">

-            <property name="build.skip" value="false" />

-        </if>

-        <if test="${not framework::exists(current.build.framework)}">

-            <if test="${build.noskip}">

-                <fail message="${current.build.framework.name} is not available." />

-            </if>

-            <if test="${not(build.noskip)}">

-                <echo message="${current.build.framework.name} is not available. Build skipped." />

-                <property name="build.skip" value="true" />

-            </if>

-        </if>

-

-        <!-- Check to see if we should skip this build framework. -->

-        <if test="${not(build.skip)}">

-            <if test="${property::exists('build.'+current.build.framework+'.skip')}">

-                <property name="build.skip" value="true" />

-                <echo message="The '${current.build.framework}' framework is not supported by this version of ActiveMQ .NET" />

-            </if>

-        </if>

-

-        <property name="current.build.keysign" value="${current.build.framework.sign}" />

-        <property name="build.bin.dir" value="${build.dir}/${current.build.framework}/${current.build.config}" />

-        <if test="${not(build.skip)}">

-            <echo message="Doing ${if(current.build.keysign,'a signed','an unsigned')} ${current.build.config} build for the ${current.build.framework.name} framework" />

-            <mkdir dir="${build.bin.dir}" />

-        </if>

-        <call target="dependency-init" />

-    </target>

-

-    <!-- Generate four-digit build number -->

-    <target name="generate-build-number">

-        <if test="${not property::exists('project.version.numeric')}">

-            <script language="C#">

-                <imports>

-                    <import namespace="System.Globalization" />

-                    <import namespace="System.Threading" />

-                </imports>

-                <code>

-                    <!-- Format for assembly revision is the number of days from the year the project 'started', property project.startyear.  -->

-                    <![CDATA[

-                        public static void ScriptMain(Project project)

-                        {

-                            int startYear = Convert.ToInt32(project.Properties["project.startyear"]);

-                            DateTime start = new DateTime(startYear, 1, 1);

-                            TimeSpan ts = DateTime.Now - start;

-                            project.Properties["project.version.numeric"] = project.Properties["project.version"].ToString() + "." + ts.Days.ToString();

-                        }

-                    ]]>

-                </code>

-            </script>

-        </if>

-    </target>

-

-    <!-- Generate assemblyinfo.cs files -->

-    <target name="generate-assemblyinfo" depends="generate-build-number" description="Generate the assembly info for the path in assemblyinfo.filename">

-        <asminfo output="${assemblyinfo.filename}" language="CSharp">

-            <imports>

-                <import namespace="System" />

-                <import namespace="System.Reflection" />

-                <import namespace="System.Runtime.InteropServices" />

-            </imports>

-            <attributes>

-                <attribute type="ComVisibleAttribute" value="false" />

-                <attribute type="CLSCompliantAttribute" value="${project.cls.compliant}" />

-                <attribute type="AssemblyTitleAttribute" value="${project.short_description}" />

-                <attribute type="AssemblyDescriptionAttribute" value="${project.description}" />

-                <attribute type="AssemblyConfigurationAttribute" value="${project.release.type}" />

-                <attribute type="AssemblyCompanyAttribute" value="http://activemq.apache.org/nms" />

-                <attribute type="AssemblyProductAttribute" value="${project.short_description}" />

-                <attribute type="AssemblyCopyrightAttribute" value="Copyright (C) ${project.startyear}-${datetime::get-year(datetime::now())} Apache Software Foundation" />

-                <attribute type="AssemblyTrademarkAttribute" value="" />

-                <attribute type="AssemblyCultureAttribute" value="" />

-                <attribute type="AssemblyVersionAttribute" value="${project.version.numeric}" />

-                <attribute type="AssemblyInformationalVersionAttribute" value="${project.version}" />

-            </attributes>

-        </asminfo>

-    </target>

-

-    <!-- ============================================================================================ -->

-    <!--    C O N F I G U R A T I O N     T A R G E T S                                               -->

-    <!-- ============================================================================================ -->

-

-    <target name="set-noskip-configuration" description="Disable skipping builds">

-        <property name="project.noskip" value="true" />

-    </target>

-

-    <target name="set-debug-configuration" description="Enabled 'debug' builds">

-        <property name="current.build.config" value="debug" />

-        <property name="current.build.config.debug" value="true" />

-        <property name="current.build.config.release" value="false" />

-        <property name="current.build.defines" value="${build.defines}DEBUG,TRACE," dynamic="true" />

-        <property name="csc.debug" value="Full" />

-        <property name="csc.optimize" value="false" />

-    </target>

-

-    <target name="set-release-configuration" description="Enabled 'release' builds">

-        <property name="current.build.config" value="release" />

-        <property name="current.build.config.release" value="true" />

-        <property name="current.build.config.debug" value="false" />

-        <property name="csc.debug" value="Full" />

-        <property name="csc.optimize" value="true" />

-    </target>

-

-    <target name="set-net-2.0-framework-configuration">

-        <property name="current.build.framework" value="net-2.0" />

-        <property name="current.build.framework.name" value=".NET 2.0" />

-        <property name="current.build.defines" value="${build.defines}NET,NET_2_0" dynamic="true" />

-        <property name="current.build.framework.sign" value="true" />

-        <property name="link.sdkdoc.version" value="SDK_v2_0" />

-        <property name="link.sdkdoc.web" value="true" />

-        <if test="${framework::exists(current.build.framework)}">

-            <property name="nant.settings.currentframework" value="${current.build.framework}" />

-        </if>

-        <!-- Use the .NET 3.5 compiler for improved language features.  Still targets same runtime. -->

-        <if test="${framework::exists('net-3.5')}">

-            <property name="nant.settings.currentframework" value="net-3.5" />

-        </if>

-    </target>

-

-    <target name="set-net-3.5-framework-configuration">

-        <property name="current.build.framework" value="net-3.5" />

-        <property name="current.build.framework.name" value=".NET 3.5" />

-        <property name="current.build.defines" value="${build.defines}NET,NET_2_0,NET_3_5" dynamic="true" />

-        <property name="current.build.framework.sign" value="true" />

-        <property name="link.sdkdoc.version" value="SDK_v6_1" />

-        <property name="link.sdkdoc.web" value="true" />

-        <if test="${framework::exists(current.build.framework)}">

-            <property name="nant.settings.currentframework" value="${current.build.framework}" />

-        </if>

-    </target>

-

-    <target name="set-net-4.0-framework-configuration">

-        <property name="current.build.framework" value="net-4.0" />

-        <property name="current.build.framework.name" value=".NET 4.0" />

-        <property name="current.build.defines" value="${build.defines}NET,NET_2_0,NET_3_5,NET_4_0" dynamic="true" />

-        <property name="current.build.framework.sign" value="true" />

-        <property name="link.sdkdoc.version" value="SDK_v7_0" />

-        <property name="link.sdkdoc.web" value="true" />

-        <if test="${framework::exists(current.build.framework)}">

-            <property name="nant.settings.currentframework" value="${current.build.framework}" />

-        </if>

-    </target>

-

-    <target name="set-netcf-2.0-framework-configuration">

-        <property name="current.build.framework" value="netcf-2.0" />

-        <property name="current.build.framework.name" value=".NET Compact Framework 2.0" />

-        <property name="current.build.defines" value="${build.defines}PocketPC,NETCF,NETCF_2_0" dynamic="true" />

-        <property name="current.build.framework.sign" value="true" />

-        <property name="link.sdkdoc.version" value="SDK_v1_1" />

-        <property name="link.sdkdoc.web" value="true" />

-        <if test="${framework::exists(current.build.framework)}">

-            <property name="nant.settings.currentframework" value="${current.build.framework}" />

-        </if>

-    </target>

-

-    <target name="set-netcf-3.5-framework-configuration">

-        <property name="current.build.framework" value="netcf-3.5" />

-        <property name="current.build.framework.name" value=".NET Compact Framework 3.5" />

-        <property name="current.build.defines" value="${build.defines}PocketPC,NETCF,NETCF_3_5" dynamic="true" />

-        <property name="current.build.framework.sign" value="true" />

-        <property name="link.sdkdoc.version" value="SDK_v3_5" />

-        <property name="link.sdkdoc.web" value="true" />

-        <if test="${framework::exists(current.build.framework)}">

-            <property name="nant.settings.currentframework" value="${current.build.framework}" />

-        </if>

-    </target>

-

-    <target name="set-mono-2.0-framework-configuration">

-        <property name="current.build.framework" value="mono-2.0" />

-        <property name="current.build.framework.name" value="Mono 2.0" />

-        <property name="current.build.defines" value="${build.defines}MONO,MONO_2_0" dynamic="true" />

-        <property name="current.build.framework.sign" value="true" />

-        <property name="link.sdkdoc.version" value="SDK_v1_1" />

-        <property name="link.sdkdoc.web" value="true" />

-        <if test="${framework::exists(current.build.framework)}">

-            <property name="nant.settings.currentframework" value="${current.build.framework}" />

-        </if>

-    </target>

-

-    <target name="set-mono-4.0-framework-configuration">

-        <property name="current.build.framework" value="mono-4.0" />

-        <property name="current.build.framework.name" value="Mono 4.0" />

-        <property name="current.build.defines" value="${build.defines}MONO,MONO_4_0" dynamic="true" />

-        <property name="current.build.framework.sign" value="true" />

-        <property name="link.sdkdoc.version" value="SDK_v1_1" />

-        <property name="link.sdkdoc.web" value="true" />

-        <if test="${framework::exists(current.build.framework)}">

-            <property name="nant.settings.currentframework" value="${current.build.framework}" />

-        </if>

-    </target>

-

-    <!-- ============================================================================================ -->

-    <!--     C O M P I L E    T A R G E T S                                                           -->

-    <!-- ============================================================================================ -->

-

-    <target name="compile-all" description="Compile all build configurations for all runtime configurations">

-        <echo message="Compiling all build configurations for all runtime configurations." />

-        <foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">

-            <foreach item="String" in="${build.config.strings}" delim="," property="current.build.config">

-                <call target="compile-target" />

-            </foreach>

-        </foreach>

-    </target>

-

-    <target name="compile-target" depends="init, download-vendor, conditional-compile" />

-

-    <target name="conditional-compile" depends="init" unless="${build.skip or compile.skip}"

-            description="Conditionaly compiles all the modules if build framework and type are supported">

-        <call target="compile" />

-    </target>

-

-    <target name="compile" description="Compile everything">

-        <call target="compile-main" cascade="false" />

-        <call target="compile-test" cascade="false" />

-    </target>

-

-    <target name="compile-main" depends="init" description="Build the main library">

-        <echo message="Building the ${project.name} library" />

-        <property name="assemblyinfo.filename" value="src/main/csharp/CommonAssemblyInfo.cs" />

-        <call target="generate-assemblyinfo" />

-

-        <csc if="${current.build.keysign}" keyfile="${snk.file}" target="library"

-                define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"

-                output="${build.bin.dir}/${project.name}.dll" doc="${build.bin.dir}/${project.name}.xml">

-            <nowarn>

-                <warning number="1591" /> <!-- do not report warnings for missing XML comments -->

-            </nowarn>

-            <sources failonempty="true">

-                <include name="src/main/csharp/**.cs" />

-            </sources>

-            <references refid="dependencies" />

-        </csc>

-        <csc if="${not current.build.keysign}" target="library"

-                define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"

-                output="${build.bin.dir}/${project.name}.dll" doc="${build.bin.dir}/${project.name}.xml">

-            <nowarn>

-                <warning number="1591" /> <!-- do not report warnings for missing XML comments -->

-            </nowarn>

-            <sources failonempty="true">

-                <include name="src/main/csharp/**.cs" />

-            </sources>

-            <references refid="dependencies" />

-        </csc>

-        <call target="copy-content" />

-    </target>

-

-    <!-- Compile the nms-test module -->

-    <target name="compile-test" depends="compile-main" description="Build the test library">

-        <echo message="Building the ${project.name}.Test library" />

-        <property name="assemblyinfo.filename" value="src/test/csharp/CommonAssemblyInfo.cs" />

-        <call target="generate-assemblyinfo" />

-

-        <csc if="${current.build.keysign}" keyfile="${snk.file}" target="library"

-                define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"

-                output="${build.bin.dir}/${project.name}.Test.dll" doc="${build.bin.dir}/${project.name}.Test.xml">

-            <nowarn>

-                <warning number="1591" /> <!-- do not report warnings for missing XML comments -->

-                <warning number="3016" /> <!-- do not report warnings for array parameters  -->

-            </nowarn>

-            <sources failonempty="true">

-                <include name="src/test/csharp/**.cs" />

-            </sources>

-            <references refid="test.dependencies" />

-        </csc>

-        <csc if="${not current.build.keysign}" target="library"

-                define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"

-                output="${build.bin.dir}/${project.name}.Test.dll" doc="${build.bin.dir}/${project.name}.Test.xml">

-            <nowarn>

-                <warning number="1591" /> <!-- do not report warnings for missing XML comments -->

-                <warning number="3016" /> <!-- do not report warnings for array parameters  -->

-            </nowarn>

-            <sources failonempty="true">

-                <include name="src/test/csharp/**.cs" />

-            </sources>

-            <references refid="test.dependencies" />

-        </csc>

-        <call target="copy-content" />

-    </target>

-

-    <target name="copy-content">

-        <foreach item="File" property="content.filename">

-            <in>

-                <items refid="content.filenames" />

-            </in>

-            <do>

-                <copy todir="${build.bin.dir}" file="${content.filename}" if="${not file::up-to-date(content.filename, '${build.bin.dir}/${content.filename}')}" />

-            </do>

-        </foreach>

-    </target>

-

-    <!-- ============================================================================================ -->

-    <!--      I N S T A L L     T A R G E T S                                                         -->

-    <!-- ============================================================================================ -->

-

-    <target name="install-all" description="Install all build configurations for all runtime configurations">

-        <echo message="Installing all build configurations for all runtime configurations." />

-        <foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">

-            <foreach item="String" in="${build.config.strings}" delim="," property="current.build.config">

-                <call target="install" />

-            </foreach>

-        </foreach>

-    </target>

-

-    <!-- Install the modules to the local repo -->

-    <target name="install" depends="init, compile-target, conditional-install"

-            description="Install the artifacts into the nant repo" />

-

-    <target name="conditional-install" unless="${build.skip or install.skip}"

-            description="Install the artifacts into the nant repo">

-        <property name="path" value="${project.group}/${project.name}/${project.version.full}/${current.build.framework}/${current.build.config}" />

-        <foreach item="File" property="install.filename">

-            <in>

-                <items refid="install.filenames" />

-            </in>

-            <do>

-                <property name="repo.task.artifact" value="${path}/${path::get-file-name(install.filename)}" />

-                <property name="repo.task.src" value="${install.filename}" />

-                <property name="repo.task.dest" value="${nant.local.repo}/${repo.task.artifact}" />

-                <mkdir dir="${directory::get-parent-directory(repo.task.dest)}" />

-                <copy file="${repo.task.src}" tofile="${repo.task.dest}" />

-            </do>

-        </foreach>

-    </target>

-

-    <!-- ============================================================================================ -->

-    <!--      R E P O    D O W N L O A D     T A R G E T S                                            -->

-    <!-- ============================================================================================ -->

-

-    <target name="download-vendor-all" description="Download vendor files for all runtime configurations">

-        <echo message="Downloading vendor files for all runtime configurations." />

-        <property name="current.build.config" value="release" />

-        <foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">

-            <call target="download-vendor" />

-        </foreach>

-    </target>

-

-    <target name="download-vendor" depends="vendor-init, conditional-download"

-                description="Download the vendor artifacts from the nant repo" />

-

-    <target name="conditional-download" unless="${build.skip or download.skip}"

-                description="Download the artifacts from the nant repo">

-        <!-- Iterate over the defined vendor filesets. -->

-        <foreach item="String" in="${vendor.fileset.names}" delim="," property="current.vendor">

-            <property name="vendor.name" value="${property::get-value(current.vendor + '.name')}" />

-            <property name="vendor.group" value="${property::get-value(current.vendor + '.group')}" />

-            <property name="vendor.version" value="${property::get-value(current.vendor + '.version')}" />

-            <property name="vendor.filenames" value="${property::get-value(current.vendor + '.filenames')}" />

-            <property name="local.repo.vendor.path" value="${nant.local.repo}/${vendor.group}/${vendor.name}/${vendor.version}/${current.build.framework}/${current.build.config}" />

-            <property name="lib.path" value="lib/${vendor.name}/${current.build.framework}" />

-            <!--

-            Update the LIB folder with the latest version of the file.  If there is a newer version

-            installed in the local repository, then that version will be copied into the LIB folder.

-            -->

-            <foreach item="String" in="${vendor.filenames}" delim="," property="repo.task.artifact">

-                <property name="lib.task.dest" value="${lib.path}/${repo.task.artifact}" />

-                <mkdir dir="${directory::get-parent-directory(lib.task.dest)}" />

-                <property name="repo.task.src" value="${local.repo.vendor.path}/${repo.task.artifact}" />

-                <copy file="${repo.task.src}" tofile="${lib.task.dest}" if="${file::exists(repo.task.src)}" />

-                <if test="${not file::exists(lib.task.dest)}">

-                    <echo message="Required dependent assembly ${repo.task.artifact} from ${vendor.name} for ${current.build.framework} is not available. Build skipped." />

-                    <property name="build.skip" value="true" />

-                </if>

-            </foreach>

-        </foreach>

-    </target>

-

-    <!-- ============================================================================================ -->

-    <!--      T E S T     T A R G E T S                                                               -->

-    <!-- ============================================================================================ -->

-

-    <target name="test" depends="test-debug" description="Alias test target to test-debug" />

-

-    <target name="test-all" depends="test-debug, test-release" description="Test all build configurations for all runtime configurations" />

-

-    <target name="test-debug" depends="" description="Test debug build configurations for all runtime configurations">

-        <property name="current.build.config" value="debug" />

-        <call target="test-frameworks" />

-    </target>

-

-    <target name="test-release" depends="" description="Test release build configurations for all runtime configurations">

-        <property name="current.build.config" value="release" />

-        <call target="test-frameworks" />

-    </target>

-

-    <target name="test-frameworks">

-        <foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">

-            <call target="init" />

-            <if test="${not build.skip}">

-                <exec program="nunit-console" failonerror="true" workingdir="build/${current.build.framework}/${current.build.config}">

-                    <arg value="${NUnit.Projectfile}" />

-                    <arg value="-labels" />

-                    <arg value="-exclude=Manual,LongRunning" />

-                    <arg value="-xml=Nunit.TestOutput.xml" />

-                </exec>

-            </if>

-        </foreach>

-    </target>

-

-    <!-- ============================================================================================ -->

-    <!--      M I S C E L L A N E O U S    T A R G E T S                                              -->

-    <!-- ============================================================================================ -->

-

-    <target name="build" depends="default" description="Build the project." />

-

-    <target name="rebuild" depends="clean,build" description="Rebuild the project." />

-

-    <target name="clean" description="Deletes build">

-        <if test="${target::exists('clean-init')}">

-            <call target="clean-init" />

-        </if>

-        <foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">

-            <foreach item="String" in="${build.config.strings}" delim="," property="current.build.config">

-                <call target="clean-proj" />

-            </foreach>

-        </foreach>

-    </target>

-

-    <target name="clean-proj" depends="init" description="Deletes specific project build">

-        <property name="clean.dir" value="build/${current.build.framework}/${current.build.config}" />

-        <delete dir="${clean.dir}" if="${directory::exists(clean.dir)}" />

-        <property name="clean.dir" value="package/${current.build.config}" />

-        <delete dir="${clean.dir}" if="${directory::exists(clean.dir)}" />

-    </target>

-

-    <target name="package" description="Bundle the source and binary distributions.">

-        <mkdir dir="${package.dir}"

-                if="${not directory::exists(package.dir)}" />

-        <zip zipfile="${package.dir}/${bin.package.name}">

-            <fileset refid="bin.package.contents"/>

-        </zip>

-        <zip zipfile="${package.dir}/${src.package.name}">

-            <fileset refid="src.package.contents"/>

-        </zip>

-    </target>

-

-    <target name="doc" depends="build">

-        <mkdir dir="${doc.dir}" />

-        <ndoc failonerror="false">

-            <assemblies basedir="${build.bin.dir}">

-                <include name="${project.name}.dll" />

-            </assemblies>

-            <summaries basedir="${basedir}/src/main/ndoc">

-                <include name="NamespaceSummary.xml" />

-            </summaries>

-            <documenters>

-                <documenter name="MSDN">

-                    <property name="OutputDirectory" value="${doc.dir}" />

-                    <property name="HtmlHelpName" value="${project.name}" />

-                    <property name="HtmlHelpCompilerFilename" value="hhc.exe" />

-                    <property name="IncludeFavorites" value="False" />

-                    <property name="Title" value="${project.short_description}" />

-                    <property name="SplitTOCs" value="False" />

-                    <property name="DefaulTOC" value="" />

-                    <!--

-                    <property name="ShowVisualBasic" value="True" />

-                    <property name="ShowMissingSummaries" value="True" />

-                    <property name="ShowMissingRemarks" value="True" />

-                    <property name="ShowMissingParams" value="True" />

-                    <property name="ShowMissingReturns" value="True" />

-                    <property name="ShowMissingValues" value="True" />

-                    -->

-                    <property name="DocumentInternals" value="False" />

-                    <property name="DocumentProtected" value="True" />

-                    <property name="DocumentPrivates" value="False" />

-                    <property name="DocumentEmptyNamespaces" value="False" />

-                    <property name="IncludeAssemblyVersion" value="True" />

-                    <property name="CopyrightText" value="" />

-                    <property name="CopyrightHref" value="" />

-                </documenter>

-            </documenters>

-        </ndoc>

-    </target>

-

-    <target name="sandcastle" depends="set-release-configuration, init, conditional-compile">

-        <!-- Directories -->

-        <property name="sandcastle.style" value="vs2005" unless="${property::exists('sandcastle.style')}" />

-        <property name="documentation.dir" value="${build.bin.dir}" />

-        <property name="bin.intern.dir" value="${build.bin.dir}" />

-        <property name="bin.extern.dir" value="${basedir}\lib\NUnit\net-2.0" />

-        <property name="sandcastle.dir" value="${environment::get-variable('DXROOT')}" />

-        <property name="sandcastle.workingdir" value="${build.dir}\doc\${sandcastle.style}" />

-        <property name="sandcastle.output.dir" value="${sandcastle.workingdir}\Output" />

-

-        <!-- Executables -->

-        <property name="sandcastle.mrefbuilder.exe" value="${sandcastle.dir}\productiontools\mrefbuilder.exe" />

-        <property name="sandcastle.buildassembler.exe" value="${sandcastle.dir}\productiontools\buildassembler.exe" />

-        <property name="sandcastle.xsltransform.exe" value="${sandcastle.dir}\productiontools\xsltransform.exe" />

-        <property name="sandcastle.productiontransforms.dir" value="${sandcastle.dir}\ProductionTransforms" />

-

-        <!-- Create or Cleanup Working Directory -->

-        <mkdir dir="${sandcastle.workingdir}"

-                if="${not directory::exists(sandcastle.workingdir)}" />

-        <delete>

-            <fileset basedir="${sandcastle.workingdir}">

-                <include name="**\*" />

-            </fileset>

-        </delete>

-

-        <!-- Copy configuration file, and hard code references -->

-        <copy file="${sandcastle.dir}/Presentation/${sandcastle.style}/Configuration/Sandcastle.config"

-                tofile="${sandcastle.workingdir}/Sandcastle.config">

-            <filterchain>

-                <replacestring from="&quot;..\..\" to="&quot;${sandcastle.dir}\" />

-                <replacestring from="&quot;..\" to="&quot;${sandcastle.dir}\Examples\" />

-                <replacestring from="&quot;.\comments.xml" to="&quot;${documentation.dir}\${project.name}.xml" />

-                <replacestring from="&quot;%DXROOT%\Presentation\${sandcastle.style}\content\feedback_content.xml&quot;" to="&quot;${basedir}/src/main/sandcastle/feedback_content.xml&quot;" />

-            </filterchain>

-        </copy>

-

-        <!-- Run MRefBuilder (introspection on assemblies) to create basic Reflection XML -->

-        <exec program="${sandcastle.mrefbuilder.exe}" workingdir="${sandcastle.workingdir}">

-            <arg value="${bin.intern.dir}/${project.name}.dll" />

-            <arg value="/out:reflection.int.xml" />

-            <arg value="/dep:${bin.extern.dir}\*.dll" />

-        </exec>

-

-        <!-- Create Reflection XML -->

-        <exec program="${sandcastle.xsltransform.exe}" workingdir="${sandcastle.workingdir}">

-            <arg value="/xsl:&quot;${sandcastle.productiontransforms.dir}\ApplyVSDocModel.xsl&quot;" if="${sandcastle.style != 'prototype'}" />

-            <arg value="/xsl:&quot;${sandcastle.productiontransforms.dir}\ApplyPrototypeDocModel.xsl&quot;" if="${sandcastle.style == 'prototype'}" />

-            <arg value="/xsl:&quot;${sandcastle.productiontransforms.dir}\AddFriendlyFilenames.xsl&quot;" /> <!-- if="${sandcastle.style != 'prototype'}" /> -->

-            <arg value="/xsl:&quot;${sandcastle.productiontransforms.dir}\AddGuidFilenames.xsl&quot;" if="${sandcastle.style == 'disabled'}" />

-            <arg value="reflection.int.xml" />

-            <arg value="/out:reflection.xml" />

-            <arg value="/arg:IncludeAllMembersTopic=true" />

-            <arg value="/arg:IncludeInheritedOverloadTopics=true" />

-        </exec>

-

-        <!-- Create Manifest (list of Topics) -->

-        <exec program="${sandcastle.xsltransform.exe}" workingdir="${sandcastle.workingdir}">

-            <arg value="/xsl:&quot;${sandcastle.productiontransforms.dir}\ReflectionToManifest.xsl&quot;" />

-            <arg value="reflection.xml" />

-            <arg value="/out:manifest.xml" />

-        </exec>

-

-        <!-- Create Output Environment -->

-        <mkdir dir="${sandcastle.output.dir}" />

-        <mkdir dir="${sandcastle.output.dir}/html" />

-        <copy todir="${sandcastle.output.dir}">

-            <fileset basedir="${sandcastle.dir}/Presentation/${sandcastle.style}">

-                <include name="icons/*" />

-                <include name="media/*" />

-                <include name="scripts/*" />

-                <include name="styles/*" />

-            </fileset>

-        </copy>

-

-        <!-- Run BuildAssembler (create html topic files) -->

-        <exec program="${sandcastle.buildassembler.exe}" workingdir="${sandcastle.workingdir}">

-            <arg value="/config:Sandcastle.config" />

-            <arg value="manifest.xml" />

-        </exec>

-    </target>

-

-    <target name="sandcastle-all" description="Generate all formats of the Sandcastle documentation files.">

-        <foreach item="String" in="vs2005,prototype,hana" delim="," property="sandcastle.style">

-            <call target="sandcastle" />

-        </foreach>

-    </target>

-</project>

diff --git a/nant.build b/nant.build
deleted file mode 100644
index 16dd773..0000000
--- a/nant.build
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0"?>
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<project name="Apache.NMS.ActiveMQ" default="default" xmlns="http://nant.sourceforge.net/release/0.85/nant.xsd">
-    <!-- ============================================================================================ -->
-    <!--      I N I T I A L I Z A T I O N                                                             -->
-    <!-- ============================================================================================ -->
-    <property name="basedir" value="${project::get-base-directory()}" />
-    <property name="project.name" value="Apache.NMS.ActiveMQ" />
-    <property name="project.group" value="org.apache.activemq" />
-    <property name="project.version" value="1.8.0" unless="${property::exists('project.version')}" />
-    <property name="project.release.type" value="SNAPSHOT" unless="${property::exists('project.release.type')}" />
-    <property name="project.short_description" value="Apache NMS for ActiveMQ Class Library" />
-    <property name="project.description" value="Apache NMS for ActiveMQ Class Library (.Net Messaging Library Implementation): An implementation of the NMS API for ActiveMQ" />
-
-    <!-- Lib organized as: module/plaform/artifact, platform might be something like 'all' or 'net-2.0/release' -->
-    <property name="nunit.dll" value="${basedir}/lib/NUnit/${current.build.framework}/nunit.framework.dll" dynamic="true" />
-    <property name="dotnetzip.dll" value="${basedir}/lib/DotNetZip/${current.build.framework}/Ionic.Zlib.dll" dynamic="true" />
-    <property name="Apache.NMS.dll" value="${basedir}/lib/Apache.NMS/${current.build.framework}/Apache.NMS.dll" dynamic="true" />
-    <property name="Apache.NMS.pdb" value="${basedir}/lib/Apache.NMS/${current.build.framework}/Apache.NMS.pdb" dynamic="true" />
-    <property name="Apache.NMS.Test.dll" value="${basedir}/lib/Apache.NMS/${current.build.framework}//Apache.NMS.Test.dll" dynamic="true" />
-    <property name="Apache.NMS.Test.pdb" value="${basedir}/lib/Apache.NMS/${current.build.framework}/Apache.NMS.Test.pdb" dynamic="true" />
-    <property name="NUnit.Projectfile" value="Apache.NMS.ActiveMQ.Test.nunit" />
-
-    <!-- Skip certain frameworks, since ActiveMQ OpenWire is not supported on those platforms. -->
-    <property name="build.netcf-2.0.skip" value="true" />
-    <property name="build.netcf-3.5.skip" value="true" />
-
-    <target name="vendor-init" description="Initializes Vendor library from local repository.">
-        <!--
-           Vendor specific info.  The prefix of 'vendor.apache.org' is taken from the property
-           'vendor.fileset.names'.  This comma-delimited list is iterated, and properties with
-           well-known suffixes are used to access and copy down vendor file dependencies.
-        -->
-        <property name="vendor.fileset.names" value="vendor.apache.org,vendor.nunit.org,vendor.dotnetzip.org" />
-
-        <!-- Property grouping for 'vendor.apache.org' -->
-        <property name="vendor.apache.org.name" value="Apache.NMS" />
-        <property name="vendor.apache.org.group" value="org.apache.activemq" />
-        <property name="vendor.apache.org.version" value="1.8.0" />
-        <if test="${current.build.framework == 'mono-2.0' or current.build.framework == 'mono-4.0'}">
-            <property name="vendor.apache.org.filenames" value="Apache.NMS.dll,Apache.NMS.dll.mdb,Apache.NMS.Test.dll,Apache.NMS.Test.dll.mdb" />
-        </if>
-        <if test="${not (current.build.framework == 'mono-2.0' or current.build.framework == 'mono-4.0')}">
-            <property name="vendor.apache.org.filenames" value="Apache.NMS.dll,Apache.NMS.pdb,Apache.NMS.Test.dll,Apache.NMS.Test.pdb" />
-        </if>
-
-        <!-- Property grouping for 'vendor.nunit.org' -->
-        <property name="vendor.nunit.org.name" value="NUnit" />
-        <property name="vendor.nunit.org.group" value="org.nunit" />
-        <property name="vendor.nunit.org.version" value="2.5.8" />
-        <property name="vendor.nunit.org.filenames" value="nunit.framework.dll" />
-
-        <!-- Property grouping for 'vendor.dotnetzip.org' -->
-        <property name="vendor.dotnetzip.org.name" value="DotNetZip" />
-        <property name="vendor.dotnetzip.org.group" value="org.dotnetzip" />
-        <property name="vendor.dotnetzip.org.version" value="1.9.1.8" />
-        <property name="vendor.dotnetzip.org.filenames" value="Ionic.Zlib.dll" />
-    </target>
-
-    <target name="dependency-init" description="Initializes build dependencies">
-        <assemblyfileset failonempty="true" id="dependencies">
-            <include name="${current.build.framework.assembly.dir}/mscorlib.dll" />
-            <include name="${current.build.framework.assembly.dir}/System.dll" />
-            <include name="${current.build.framework.assembly.dir}/System.Web.dll" />
-            <include name="${current.build.framework.assembly.dir}/System.Xml.dll" />
-            <include name="${current.build.framework.assembly.dir}/System.Transactions.dll" />
-            <include name="${Apache.NMS.dll}" />
-            <include name="${dotnetzip.dll}" />
-        </assemblyfileset>
-
-        <assemblyfileset failonempty="true" id="test.dependencies">
-            <include name="${current.build.framework.assembly.dir}/mscorlib.dll" />
-            <include name="${current.build.framework.assembly.dir}/System.dll" />
-            <include name="${current.build.framework.assembly.dir}/System.Data.dll" />
-            <include name="${current.build.framework.assembly.dir}/System.Xml.dll" />
-            <include name="${current.build.framework.assembly.dir}/System.Transactions.dll" />
-            <include name="${Apache.NMS.dll}" />
-            <include name="${Apache.NMS.Test.dll}" />
-            <include name="${build.bin.dir}/${project.name}.dll" />
-            <include name="${nunit.dll}" />
-            <include name="${dotnetzip.dll}" />
-        </assemblyfileset>
-
-        <fileset id="content.filenames">
-            <include name="LICENSE.txt" />
-            <include name="NOTICE.txt" />
-            <include name="nmsprovider-*.config" />
-            <include name="${Apache.NMS.dll}" />
-            <include name="${Apache.NMS.pdb}" />
-            <include name="${Apache.NMS.Test.dll}" />
-            <include name="${Apache.NMS.Test.pdb}" />
-            <include name="${dotnetzip.dll}" />
-            <include name="${nunit.dll}" />
-            <include name="${NUnit.Projectfile}" />
-        </fileset>
-
-        <fileset id="install.filenames">
-            <include name="LICENSE.txt" />
-            <include name="NOTICE.txt" />
-            <include name="${build.bin.dir}/${project.name}.dll" />
-            <include name="${build.bin.dir}/${project.name}.pdb" />
-            <include name="${build.bin.dir}/${project.name}.dll.mdb" />
-        </fileset>
-
-    </target>
-
-    <target name="default" depends="install-all" />
-
-    <zipfileset id="src.package.contents" basedir="${basedir}">
-        <include name="LICENSE.txt" />
-        <include name="NOTICE.txt" />
-        <include name="nant-common.xml" />
-        <include name="nant.build" />
-        <include name="nant.build" />
-        <include name="nmsprovider*.config" />
-        <include name="vs2008-*.csproj" />
-        <include name="vs2008-*.csproj" />
-        <include name="vs2008-*.sln" />
-        <include name="keyfile/*" />
-        <include name="src/**/*.cs" />
-        <exclude name="src/sandbox/**" />
-    </zipfileset>
-
-    <zipfileset id="bin.package.contents" basedir="${basedir}">
-        <include name="LICENSE.txt" />
-        <include name="NOTICE.txt" />
-        <include name="build/**/nmsprovider*" />
-        <include name="build/**/${project.name}*" />
-        <include name="lib/**/*" />
-        <exclude name="build/**/%temp%/**" />
-    </zipfileset>
-
-    <!-- Load the common target definitions  -->
-    <include buildfile="${basedir}/nant-common.xml" />
-</project>
diff --git a/nms-openwire.sln b/nms-openwire.sln
new file mode 100644
index 0000000..4748084
--- /dev/null
+++ b/nms-openwire.sln
@@ -0,0 +1,37 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29009.5
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nms-openwire", "src\nms-openwire.csproj", "{039BDF35-7466-4AD6-A487-460DAA279CDE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nms-openwire-test", "test\nms-openwire-test.csproj", "{D4034BFD-21F1-4836-B0A0-1C4161AB0110}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nms-openwire-docs", "docs\nms-openwire-docs.csproj", "{D0D49AC7-FCD9-4BE6-9A72-310852D473AC}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{039BDF35-7466-4AD6-A487-460DAA279CDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{039BDF35-7466-4AD6-A487-460DAA279CDE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{039BDF35-7466-4AD6-A487-460DAA279CDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{039BDF35-7466-4AD6-A487-460DAA279CDE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D4034BFD-21F1-4836-B0A0-1C4161AB0110}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D4034BFD-21F1-4836-B0A0-1C4161AB0110}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D4034BFD-21F1-4836-B0A0-1C4161AB0110}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D4034BFD-21F1-4836-B0A0-1C4161AB0110}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D0D49AC7-FCD9-4BE6-9A72-310852D473AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D0D49AC7-FCD9-4BE6-9A72-310852D473AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D0D49AC7-FCD9-4BE6-9A72-310852D473AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D0D49AC7-FCD9-4BE6-9A72-310852D473AC}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {52BEA1C3-F7CA-46DA-9FF3-8257391C258C}
+	EndGlobalSection
+EndGlobal
diff --git a/package.ps1 b/package.ps1
index 09be8bf..5427fbb 100644
--- a/package.ps1
+++ b/package.ps1
@@ -15,55 +15,72 @@
 

 $pkgname = "Apache.NMS.ActiveMQ"

 $pkgver = "1.8-SNAPSHOT"

-$configurations = "release", "debug"

-$frameworks = "mono-2.0", "net-2.0", "net-3.5", "net-4.0"

+$frameworks = "net35", "net40", "netstandard2.0"

 

 write-progress "Creating package directory." "Initializing..."

-if(!(test-path package))

-{

-    md package

+if (!(test-path package)) {

+    mkdir package

+}

+else {

+    # Clean package content if exists

+    Remove-Item package\* -Recurse

 }

 

-if(test-path build)

-{

-    pushd build

+if (test-path build) {

+    Push-Location build

 

     $pkgdir = "..\package"

 

     write-progress "Packaging Application files." "Scanning..."

     $zipfile = "$pkgdir\$pkgname-$pkgver-bin.zip"

-    zip -9 -u -j "$zipfile" ..\LICENSE.txt

-    zip -9 -u -j "$zipfile" ..\NOTICE.txt

-    foreach($configuration in $configurations)

-    {

-        foreach($framework in $frameworks)

-        {

-            zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.dll"

-            zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.xml"

-            zip -9 -u "$zipfile" "$framework\$configuration\nmsprovider*.config"

-            zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.Test.dll"

-            zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.Test.xml"

-            if($framework -ieq "mono-2.0")

-            {

-                zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.dll.mdb"

-                zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.Test.dll.mdb"

-            }

-            else

-            {

-                zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.pdb"

-                zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.Test.pdb"

-            }

-        }

-    }

 

-    popd

+    Compress-Archive -Path ..\LICENSE.txt, ..\NOTICE.txt -Update -DestinationPath $zipfile        

+    

+    # clean up temp

+    Remove-Item temp -Recurse -ErrorAction Ignore

+

+    foreach ($framework in $frameworks) {

+        Copy-Item $framework -Destination temp\$framework -Recurse

+

+        # clean up third party binaries

+        Get-ChildItem temp -File -Exclude "*Apache.NMS*" -Recurse | Remove-Item -Recurse

+

+        Compress-Archive -Path "temp\$framework" -Update -DestinationPath $zipfile

+    }

+    

+    $nupkg = "$pkgname.$pkgver.nupkg"

+    $nupkgdestination = "$pkgdir\$nupkg"

+    Copy-Item -Path $nupkg -Destination $nupkgdestination

+

+    # clean up temp

+    Remove-Item temp -Recurse -ErrorAction Inquire

+

+    Pop-Location

 }

 

 write-progress "Packaging Source code files." "Scanning..."

 $pkgdir = "package"

 $zipfile = "$pkgdir\$pkgname-$pkgver-src.zip"

 

-zip -9 -u "$zipfile" LICENSE.txt NOTICE.txt nant-common.xml nant.build package.ps1 vs2008-activemq-test.csproj vs2008-activemq.csproj vs2008-activemq.sln nmsprovider*.config

-zip -9 -u -r "$zipfile" keyfile src

+# clean temp dir if exists

+Remove-Item temp -Recurse -ErrorAction Ignore

 

-write-progress -Completed "Packaging" "Complete."

+# copy files to temp dir

+Copy-Item src -Destination temp\src -Recurse

+Copy-Item test -Destination temp\test -Recurse

+

+# clean up debug artifacts if there are any

+Get-ChildItem temp -Include bin, obj -Recurse | Remove-Item -Recurse

+

+Compress-Archive -Path temp\*, LICENSE.txt, NOTICE.txt, keyfile, nms-openwire.sln, package.ps1 -Update -DestinationPath $zipfile

+

+write-progress "Removing temp files"

+Remove-Item temp -Recurse

+

+write-progress "Packaging Docs" "Scanning..."

+$pkgdir = "package"

+$zipfile = "$pkgdir\$pkgname-$pkgver-docs.zip"

+

+Compress-Archive -Path "docs\_site\*", "LICENSE.txt", "NOTICE.txt" -Update -DestinationPath $zipfile

+

+write-progress -Completed "Packaging" "Complete."
\ No newline at end of file
diff --git a/src/main/csharp/AdvisoryConsumer.cs b/src/AdvisoryConsumer.cs
similarity index 100%
rename from src/main/csharp/AdvisoryConsumer.cs
rename to src/AdvisoryConsumer.cs
diff --git a/src/main/csharp/BrokerException.cs b/src/BrokerException.cs
similarity index 100%
rename from src/main/csharp/BrokerException.cs
rename to src/BrokerException.cs
diff --git a/src/main/csharp/Commands/ActiveMQBlobMessage.cs b/src/Commands/ActiveMQBlobMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQBlobMessage.cs
rename to src/Commands/ActiveMQBlobMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQBytesMessage.cs b/src/Commands/ActiveMQBytesMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQBytesMessage.cs
rename to src/Commands/ActiveMQBytesMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQDestination.cs b/src/Commands/ActiveMQDestination.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQDestination.cs
rename to src/Commands/ActiveMQDestination.cs
diff --git a/src/main/csharp/Commands/ActiveMQMapMessage.cs b/src/Commands/ActiveMQMapMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQMapMessage.cs
rename to src/Commands/ActiveMQMapMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQMessage.cs b/src/Commands/ActiveMQMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQMessage.cs
rename to src/Commands/ActiveMQMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQObjectMessage.cs b/src/Commands/ActiveMQObjectMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQObjectMessage.cs
rename to src/Commands/ActiveMQObjectMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQQueue.cs b/src/Commands/ActiveMQQueue.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQQueue.cs
rename to src/Commands/ActiveMQQueue.cs
diff --git a/src/main/csharp/Commands/ActiveMQStreamMessage.cs b/src/Commands/ActiveMQStreamMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQStreamMessage.cs
rename to src/Commands/ActiveMQStreamMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQTempDestination.cs b/src/Commands/ActiveMQTempDestination.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQTempDestination.cs
rename to src/Commands/ActiveMQTempDestination.cs
diff --git a/src/main/csharp/Commands/ActiveMQTempQueue.cs b/src/Commands/ActiveMQTempQueue.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQTempQueue.cs
rename to src/Commands/ActiveMQTempQueue.cs
diff --git a/src/main/csharp/Commands/ActiveMQTempTopic.cs b/src/Commands/ActiveMQTempTopic.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQTempTopic.cs
rename to src/Commands/ActiveMQTempTopic.cs
diff --git a/src/main/csharp/Commands/ActiveMQTextMessage.cs b/src/Commands/ActiveMQTextMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQTextMessage.cs
rename to src/Commands/ActiveMQTextMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQTopic.cs b/src/Commands/ActiveMQTopic.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQTopic.cs
rename to src/Commands/ActiveMQTopic.cs
diff --git a/src/main/csharp/Commands/BaseCommand.cs b/src/Commands/BaseCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/BaseCommand.cs
rename to src/Commands/BaseCommand.cs
diff --git a/src/main/csharp/Commands/BaseDataStructure.cs b/src/Commands/BaseDataStructure.cs
similarity index 100%
rename from src/main/csharp/Commands/BaseDataStructure.cs
rename to src/Commands/BaseDataStructure.cs
diff --git a/src/main/csharp/Commands/BooleanExpression.cs b/src/Commands/BooleanExpression.cs
similarity index 100%
rename from src/main/csharp/Commands/BooleanExpression.cs
rename to src/Commands/BooleanExpression.cs
diff --git a/src/main/csharp/Commands/BrokerError.cs b/src/Commands/BrokerError.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Commands/BrokerError.cs
rename to src/Commands/BrokerError.cs
diff --git a/src/main/csharp/Commands/BrokerId.cs b/src/Commands/BrokerId.cs
similarity index 100%
rename from src/main/csharp/Commands/BrokerId.cs
rename to src/Commands/BrokerId.cs
diff --git a/src/main/csharp/Commands/BrokerInfo.cs b/src/Commands/BrokerInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/BrokerInfo.cs
rename to src/Commands/BrokerInfo.cs
diff --git a/src/main/csharp/Commands/Command.cs b/src/Commands/Command.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Commands/Command.cs
rename to src/Commands/Command.cs
diff --git a/src/main/csharp/Commands/ConnectionControl.cs b/src/Commands/ConnectionControl.cs
similarity index 100%
rename from src/main/csharp/Commands/ConnectionControl.cs
rename to src/Commands/ConnectionControl.cs
diff --git a/src/main/csharp/Commands/ConnectionError.cs b/src/Commands/ConnectionError.cs
similarity index 100%
rename from src/main/csharp/Commands/ConnectionError.cs
rename to src/Commands/ConnectionError.cs
diff --git a/src/main/csharp/Commands/ConnectionId.cs b/src/Commands/ConnectionId.cs
similarity index 100%
rename from src/main/csharp/Commands/ConnectionId.cs
rename to src/Commands/ConnectionId.cs
diff --git a/src/main/csharp/Commands/ConnectionInfo.cs b/src/Commands/ConnectionInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/ConnectionInfo.cs
rename to src/Commands/ConnectionInfo.cs
diff --git a/src/main/csharp/Commands/ConsumerControl.cs b/src/Commands/ConsumerControl.cs
similarity index 100%
rename from src/main/csharp/Commands/ConsumerControl.cs
rename to src/Commands/ConsumerControl.cs
diff --git a/src/main/csharp/Commands/ConsumerId.cs b/src/Commands/ConsumerId.cs
similarity index 100%
rename from src/main/csharp/Commands/ConsumerId.cs
rename to src/Commands/ConsumerId.cs
diff --git a/src/main/csharp/Commands/ConsumerInfo.cs b/src/Commands/ConsumerInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/ConsumerInfo.cs
rename to src/Commands/ConsumerInfo.cs
diff --git a/src/main/csharp/Commands/ControlCommand.cs b/src/Commands/ControlCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/ControlCommand.cs
rename to src/Commands/ControlCommand.cs
diff --git a/src/main/csharp/Commands/DataArrayResponse.cs b/src/Commands/DataArrayResponse.cs
similarity index 100%
rename from src/main/csharp/Commands/DataArrayResponse.cs
rename to src/Commands/DataArrayResponse.cs
diff --git a/src/main/csharp/Commands/DataResponse.cs b/src/Commands/DataResponse.cs
similarity index 100%
rename from src/main/csharp/Commands/DataResponse.cs
rename to src/Commands/DataResponse.cs
diff --git a/src/main/csharp/Commands/DataStructure.cs b/src/Commands/DataStructure.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Commands/DataStructure.cs
rename to src/Commands/DataStructure.cs
diff --git a/src/main/csharp/Commands/DataStructureSupport.cs b/src/Commands/DataStructureSupport.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Commands/DataStructureSupport.cs
rename to src/Commands/DataStructureSupport.cs
diff --git a/src/main/csharp/Commands/DestinationInfo.cs b/src/Commands/DestinationInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/DestinationInfo.cs
rename to src/Commands/DestinationInfo.cs
diff --git a/src/main/csharp/Commands/DiscoveryEvent.cs b/src/Commands/DiscoveryEvent.cs
similarity index 100%
rename from src/main/csharp/Commands/DiscoveryEvent.cs
rename to src/Commands/DiscoveryEvent.cs
diff --git a/src/main/csharp/Commands/ExceptionResponse.cs b/src/Commands/ExceptionResponse.cs
similarity index 100%
rename from src/main/csharp/Commands/ExceptionResponse.cs
rename to src/Commands/ExceptionResponse.cs
diff --git a/src/main/csharp/Commands/FlushCommand.cs b/src/Commands/FlushCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/FlushCommand.cs
rename to src/Commands/FlushCommand.cs
diff --git a/src/main/csharp/Commands/IntegerResponse.cs b/src/Commands/IntegerResponse.cs
similarity index 100%
rename from src/main/csharp/Commands/IntegerResponse.cs
rename to src/Commands/IntegerResponse.cs
diff --git a/src/main/csharp/Commands/JournalQueueAck.cs b/src/Commands/JournalQueueAck.cs
similarity index 100%
rename from src/main/csharp/Commands/JournalQueueAck.cs
rename to src/Commands/JournalQueueAck.cs
diff --git a/src/main/csharp/Commands/JournalTopicAck.cs b/src/Commands/JournalTopicAck.cs
similarity index 100%
rename from src/main/csharp/Commands/JournalTopicAck.cs
rename to src/Commands/JournalTopicAck.cs
diff --git a/src/main/csharp/Commands/JournalTrace.cs b/src/Commands/JournalTrace.cs
similarity index 100%
rename from src/main/csharp/Commands/JournalTrace.cs
rename to src/Commands/JournalTrace.cs
diff --git a/src/main/csharp/Commands/JournalTransaction.cs b/src/Commands/JournalTransaction.cs
similarity index 100%
rename from src/main/csharp/Commands/JournalTransaction.cs
rename to src/Commands/JournalTransaction.cs
diff --git a/src/main/csharp/Commands/KeepAliveInfo.cs b/src/Commands/KeepAliveInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/KeepAliveInfo.cs
rename to src/Commands/KeepAliveInfo.cs
diff --git a/src/main/csharp/Commands/LastPartialCommand.cs b/src/Commands/LastPartialCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/LastPartialCommand.cs
rename to src/Commands/LastPartialCommand.cs
diff --git a/src/main/csharp/Commands/LocalTransactionId.cs b/src/Commands/LocalTransactionId.cs
similarity index 100%
rename from src/main/csharp/Commands/LocalTransactionId.cs
rename to src/Commands/LocalTransactionId.cs
diff --git a/src/main/csharp/Commands/MarshallAware.cs b/src/Commands/MarshallAware.cs
similarity index 100%
rename from src/main/csharp/Commands/MarshallAware.cs
rename to src/Commands/MarshallAware.cs
diff --git a/src/main/csharp/Commands/Message.cs b/src/Commands/Message.cs
similarity index 100%
rename from src/main/csharp/Commands/Message.cs
rename to src/Commands/Message.cs
diff --git a/src/main/csharp/Commands/MessageAck.cs b/src/Commands/MessageAck.cs
similarity index 100%
rename from src/main/csharp/Commands/MessageAck.cs
rename to src/Commands/MessageAck.cs
diff --git a/src/main/csharp/Commands/MessageDispatch.cs b/src/Commands/MessageDispatch.cs
similarity index 100%
rename from src/main/csharp/Commands/MessageDispatch.cs
rename to src/Commands/MessageDispatch.cs
diff --git a/src/main/csharp/Commands/MessageDispatchNotification.cs b/src/Commands/MessageDispatchNotification.cs
similarity index 100%
rename from src/main/csharp/Commands/MessageDispatchNotification.cs
rename to src/Commands/MessageDispatchNotification.cs
diff --git a/src/main/csharp/Commands/MessageId.cs b/src/Commands/MessageId.cs
similarity index 100%
rename from src/main/csharp/Commands/MessageId.cs
rename to src/Commands/MessageId.cs
diff --git a/src/main/csharp/Commands/MessagePull.cs b/src/Commands/MessagePull.cs
similarity index 100%
rename from src/main/csharp/Commands/MessagePull.cs
rename to src/Commands/MessagePull.cs
diff --git a/src/main/csharp/Commands/MessageReference.cs b/src/Commands/MessageReference.cs
similarity index 100%
rename from src/main/csharp/Commands/MessageReference.cs
rename to src/Commands/MessageReference.cs
diff --git a/src/main/csharp/Commands/NetworkBridgeFilter.cs b/src/Commands/NetworkBridgeFilter.cs
similarity index 100%
rename from src/main/csharp/Commands/NetworkBridgeFilter.cs
rename to src/Commands/NetworkBridgeFilter.cs
diff --git a/src/main/csharp/Commands/PartialCommand.cs b/src/Commands/PartialCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/PartialCommand.cs
rename to src/Commands/PartialCommand.cs
diff --git a/src/main/csharp/Commands/ProducerAck.cs b/src/Commands/ProducerAck.cs
similarity index 100%
rename from src/main/csharp/Commands/ProducerAck.cs
rename to src/Commands/ProducerAck.cs
diff --git a/src/main/csharp/Commands/ProducerId.cs b/src/Commands/ProducerId.cs
similarity index 100%
rename from src/main/csharp/Commands/ProducerId.cs
rename to src/Commands/ProducerId.cs
diff --git a/src/main/csharp/Commands/ProducerInfo.cs b/src/Commands/ProducerInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/ProducerInfo.cs
rename to src/Commands/ProducerInfo.cs
diff --git a/src/main/csharp/Commands/RemoveInfo.cs b/src/Commands/RemoveInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/RemoveInfo.cs
rename to src/Commands/RemoveInfo.cs
diff --git a/src/main/csharp/Commands/RemoveSubscriptionInfo.cs b/src/Commands/RemoveSubscriptionInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/RemoveSubscriptionInfo.cs
rename to src/Commands/RemoveSubscriptionInfo.cs
diff --git a/src/main/csharp/Commands/ReplayCommand.cs b/src/Commands/ReplayCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/ReplayCommand.cs
rename to src/Commands/ReplayCommand.cs
diff --git a/src/main/csharp/Commands/Response.cs b/src/Commands/Response.cs
similarity index 100%
rename from src/main/csharp/Commands/Response.cs
rename to src/Commands/Response.cs
diff --git a/src/main/csharp/Commands/SessionId.cs b/src/Commands/SessionId.cs
similarity index 100%
rename from src/main/csharp/Commands/SessionId.cs
rename to src/Commands/SessionId.cs
diff --git a/src/main/csharp/Commands/SessionInfo.cs b/src/Commands/SessionInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/SessionInfo.cs
rename to src/Commands/SessionInfo.cs
diff --git a/src/main/csharp/Commands/ShutdownInfo.cs b/src/Commands/ShutdownInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/ShutdownInfo.cs
rename to src/Commands/ShutdownInfo.cs
diff --git a/src/main/csharp/Commands/SubscriptionInfo.cs b/src/Commands/SubscriptionInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/SubscriptionInfo.cs
rename to src/Commands/SubscriptionInfo.cs
diff --git a/src/main/csharp/Commands/TransactionId.cs b/src/Commands/TransactionId.cs
similarity index 100%
rename from src/main/csharp/Commands/TransactionId.cs
rename to src/Commands/TransactionId.cs
diff --git a/src/main/csharp/Commands/TransactionInfo.cs b/src/Commands/TransactionInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/TransactionInfo.cs
rename to src/Commands/TransactionInfo.cs
diff --git a/src/main/csharp/Commands/WireFormatInfo.cs b/src/Commands/WireFormatInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/WireFormatInfo.cs
rename to src/Commands/WireFormatInfo.cs
diff --git a/src/main/csharp/Commands/XATransactionId.cs b/src/Commands/XATransactionId.cs
similarity index 100%
rename from src/main/csharp/Commands/XATransactionId.cs
rename to src/Commands/XATransactionId.cs
diff --git a/src/main/csharp/Commands/Xid.cs b/src/Commands/Xid.cs
similarity index 100%
rename from src/main/csharp/Commands/Xid.cs
rename to src/Commands/Xid.cs
diff --git a/src/main/csharp/CompressionPolicy.cs b/src/CompressionPolicy.cs
similarity index 72%
rename from src/main/csharp/CompressionPolicy.cs
rename to src/CompressionPolicy.cs
index 7c99ff5..68d864a 100644
--- a/src/main/csharp/CompressionPolicy.cs
+++ b/src/CompressionPolicy.cs
@@ -16,24 +16,20 @@
  */
 
 using System.IO;
+using System.IO.Compression;
 
 namespace Apache.NMS.ActiveMQ
 {
-    /// <summary>
-    /// Default Compression policy for NMS.ActiveMQ uses the built in GZipStream
-    /// to compress and decompress the message body.  This is not compatible with
-    /// compression used by ActiveMQ so users should use this with caution.
-    /// </summary>
     public class CompressionPolicy : ICompressionPolicy
     {
         public Stream CreateCompressionStream(Stream data)
         {
-			return new Ionic.Zlib.ZlibStream(data, Ionic.Zlib.CompressionMode.Compress);
+            return new GZipStream(data, CompressionMode.Compress);
         }
 
         public Stream CreateDecompressionStream(Stream data)
         {
-			return new Ionic.Zlib.ZlibStream(data, Ionic.Zlib.CompressionMode.Decompress);
+            return new GZipStream(data, CompressionMode.Decompress);
         }
 
         public object Clone()
diff --git a/src/main/csharp/Connection.cs b/src/Connection.cs
old mode 100755
new mode 100644
similarity index 99%
rename from src/main/csharp/Connection.cs
rename to src/Connection.cs
index 10832b3..adae483
--- a/src/main/csharp/Connection.cs
+++ b/src/Connection.cs
@@ -21,7 +21,6 @@
 using System.Collections.Generic;
 using System.Threading;
 using System.Reflection;
-using System.Runtime.Remoting;
 using Apache.NMS.ActiveMQ.Commands;
 using Apache.NMS.ActiveMQ.Threads;
 using Apache.NMS.ActiveMQ.Transport;
diff --git a/src/main/csharp/ConnectionClosedException.cs b/src/ConnectionClosedException.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/ConnectionClosedException.cs
rename to src/ConnectionClosedException.cs
diff --git a/src/main/csharp/ConnectionFactory.cs b/src/ConnectionFactory.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/ConnectionFactory.cs
rename to src/ConnectionFactory.cs
diff --git a/src/main/csharp/ConnectionFailedException.cs b/src/ConnectionFailedException.cs
similarity index 100%
rename from src/main/csharp/ConnectionFailedException.cs
rename to src/ConnectionFailedException.cs
diff --git a/src/main/csharp/ConnectionMetaData.cs b/src/ConnectionMetaData.cs
similarity index 100%
rename from src/main/csharp/ConnectionMetaData.cs
rename to src/ConnectionMetaData.cs
diff --git a/src/main/csharp/ConsumerClosedException.cs b/src/ConsumerClosedException.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/ConsumerClosedException.cs
rename to src/ConsumerClosedException.cs
diff --git a/src/main/csharp/DestinationFilter.cs b/src/DestinationFilter.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/DestinationFilter.cs
rename to src/DestinationFilter.cs
diff --git a/src/main/csharp/ICompressionPolicy.cs b/src/ICompressionPolicy.cs
similarity index 100%
rename from src/main/csharp/ICompressionPolicy.cs
rename to src/ICompressionPolicy.cs
diff --git a/src/main/csharp/IDispatcher.cs b/src/IDispatcher.cs
similarity index 100%
rename from src/main/csharp/IDispatcher.cs
rename to src/IDispatcher.cs
diff --git a/src/main/csharp/IOException.cs b/src/IOException.cs
similarity index 99%
rename from src/main/csharp/IOException.cs
rename to src/IOException.cs
index ae8c47a..4494a76 100644
--- a/src/main/csharp/IOException.cs
+++ b/src/IOException.cs
@@ -1,45 +1,45 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-

-namespace Apache.NMS.ActiveMQ

-{

-

-	/// <summary>

-	/// Exception thrown when an IO error occurs

-	/// </summary>

-	public class IOException : NMSException

-	{

-		public IOException()

-			: base("IO Exception failed with missing exception log")

-		{

-		}

-

-		public IOException(String msg)

-			: base(msg)

-		{

-		}

-

-		public IOException(String msg, Exception inner)

-			: base(msg, inner)

-		{

-		}

-	}

-}

-

-

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Apache.NMS.ActiveMQ
+{
+
+	/// <summary>
+	/// Exception thrown when an IO error occurs
+	/// </summary>
+	public class IOException : NMSException
+	{
+		public IOException()
+			: base("IO Exception failed with missing exception log")
+		{
+		}
+
+		public IOException(String msg)
+			: base(msg)
+		{
+		}
+
+		public IOException(String msg, Exception inner)
+			: base(msg, inner)
+		{
+		}
+	}
+}
+
+
diff --git a/src/main/csharp/ISynchronization.cs b/src/ISynchronization.cs
similarity index 100%
rename from src/main/csharp/ISynchronization.cs
rename to src/ISynchronization.cs
diff --git a/src/main/csharp/MessageConsumer.cs b/src/MessageConsumer.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/MessageConsumer.cs
rename to src/MessageConsumer.cs
diff --git a/src/main/csharp/MessageProducer.cs b/src/MessageProducer.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/MessageProducer.cs
rename to src/MessageProducer.cs
diff --git a/src/NMSKey.snk b/src/NMSKey.snk
new file mode 100644
index 0000000..fdd5b24
--- /dev/null
+++ b/src/NMSKey.snk
Binary files differ
diff --git a/src/main/csharp/NetTxConnection.cs b/src/NetTxConnection.cs
similarity index 100%
rename from src/main/csharp/NetTxConnection.cs
rename to src/NetTxConnection.cs
diff --git a/src/main/csharp/NetTxConnectionFactory.cs b/src/NetTxConnectionFactory.cs
similarity index 100%
rename from src/main/csharp/NetTxConnectionFactory.cs
rename to src/NetTxConnectionFactory.cs
diff --git a/src/main/csharp/NetTxMessageConsumer.cs b/src/NetTxMessageConsumer.cs
similarity index 99%
rename from src/main/csharp/NetTxMessageConsumer.cs
rename to src/NetTxMessageConsumer.cs
index f4ef109..e0b16e7 100644
--- a/src/main/csharp/NetTxMessageConsumer.cs
+++ b/src/NetTxMessageConsumer.cs
@@ -1,115 +1,115 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.Collections.Generic;

-using System.Text;

-using System.Transactions;

-using Apache.NMS.ActiveMQ.Commands;

-

-namespace Apache.NMS.ActiveMQ

-{

-    public sealed class NetTxMessageConsumer : MessageConsumer

-    {

-        private readonly NetTxSession session;

-        private readonly NetTxTransactionContext transactionContext;

-

-        internal NetTxMessageConsumer(Session session, ConsumerId id, ActiveMQDestination destination, 

-                                      string name, string selector, int prefetch, int maxPendingMessageCount,

-                                      bool noLocal, bool browser, bool dispatchAsync) : 

-            base(session, id, destination, name, selector, prefetch,

-                 maxPendingMessageCount, noLocal, browser, dispatchAsync)

-        {

-            this.session = session as NetTxSession;

-            this.transactionContext = session.TransactionContext as NetTxTransactionContext;

-        }

-

-        public override void Close()

-        {

-            if (this.Closed)

-            {

-                return;

-            }

-

-            lock (this.transactionContext.SyncRoot)

-            {

-                if (this.session.IsTransacted || this.session.TransactionContext.InTransaction)

-                {

-                    Tracer.DebugFormat("Consumer {0} Registering new ConsumerCloseSynchronization",

-                                       this.ConsumerId);

-                    this.session.TransactionContext.AddSynchronization(

-                        new ConsumerCloseSynchronization(this));

-                }

-                else

-                {

-                    Tracer.DebugFormat("Consumer {0} No Active TX closing normally.",

-                                       this.ConsumerId);

-                    this.DoClose();                            

-                }

-            }

-        }

-

-        public override void BeforeMessageIsConsumed(MessageDispatch dispatch)

-        {

-            if (!IsAutoAcknowledgeBatch)

-            {

-                if (this.session.IsTransacted)

-                {

-                    bool waitForDtcWaitHandle = false;

-                    lock (this.transactionContext.SyncRoot)

-                    {

-                        // In the case where the consumer is operating in concert with a

-                        // distributed TX manager we need to wait whenever the TX is being

-                        // controlled by the DTC as it completes all operations async and

-                        // we cannot start consumption again until all its tasks have completed.)

-                        var currentTransactionId = transactionContext.TransactionId as XATransactionId;

-                        string currentLocalTxId = currentTransactionId != null

-                            ? UTF8Encoding.UTF8.GetString(currentTransactionId.GlobalTransactionId)

-                            : "NONE";

-

-                        if (Transaction.Current != null)

-                        {

-                            waitForDtcWaitHandle = this.transactionContext.InNetTransaction &&

-                                               this.transactionContext.NetTxState == NetTxTransactionContext.TxState.Pending ||

-                                               currentLocalTxId != Transaction.Current.TransactionInformation.LocalIdentifier;

-                        }

-                        else

-                        {

-                            waitForDtcWaitHandle = this.transactionContext.InNetTransaction &&

-                                               this.transactionContext.NetTxState == NetTxTransactionContext.TxState.Pending;

-                        }

-                        

-                    }

-

-                    //if session EnlistMsDtcNativeResource the transaction does not need to wait

-                    if (this.session.EnlistsMsDtcNativeResource)

-                    {

-                        waitForDtcWaitHandle = false;

-                    }

-

-                    if (waitForDtcWaitHandle)

-                    {

-                        this.transactionContext.DtcWaitHandle.WaitOne();

-                    }

-                }

-            }

-

-            base.BeforeMessageIsConsumed(dispatch);

-        }

-

-    }

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Transactions;
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ
+{
+    public sealed class NetTxMessageConsumer : MessageConsumer
+    {
+        private readonly NetTxSession session;
+        private readonly NetTxTransactionContext transactionContext;
+
+        internal NetTxMessageConsumer(Session session, ConsumerId id, ActiveMQDestination destination, 
+                                      string name, string selector, int prefetch, int maxPendingMessageCount,
+                                      bool noLocal, bool browser, bool dispatchAsync) : 
+            base(session, id, destination, name, selector, prefetch,
+                 maxPendingMessageCount, noLocal, browser, dispatchAsync)
+        {
+            this.session = session as NetTxSession;
+            this.transactionContext = session.TransactionContext as NetTxTransactionContext;
+        }
+
+        public override void Close()
+        {
+            if (this.Closed)
+            {
+                return;
+            }
+
+            lock (this.transactionContext.SyncRoot)
+            {
+                if (this.session.IsTransacted || this.session.TransactionContext.InTransaction)
+                {
+                    Tracer.DebugFormat("Consumer {0} Registering new ConsumerCloseSynchronization",
+                                       this.ConsumerId);
+                    this.session.TransactionContext.AddSynchronization(
+                        new ConsumerCloseSynchronization(this));
+                }
+                else
+                {
+                    Tracer.DebugFormat("Consumer {0} No Active TX closing normally.",
+                                       this.ConsumerId);
+                    this.DoClose();                            
+                }
+            }
+        }
+
+        public override void BeforeMessageIsConsumed(MessageDispatch dispatch)
+        {
+            if (!IsAutoAcknowledgeBatch)
+            {
+                if (this.session.IsTransacted)
+                {
+                    bool waitForDtcWaitHandle = false;
+                    lock (this.transactionContext.SyncRoot)
+                    {
+                        // In the case where the consumer is operating in concert with a
+                        // distributed TX manager we need to wait whenever the TX is being
+                        // controlled by the DTC as it completes all operations async and
+                        // we cannot start consumption again until all its tasks have completed.)
+                        var currentTransactionId = transactionContext.TransactionId as XATransactionId;
+                        string currentLocalTxId = currentTransactionId != null
+                            ? UTF8Encoding.UTF8.GetString(currentTransactionId.GlobalTransactionId)
+                            : "NONE";
+
+                        if (Transaction.Current != null)
+                        {
+                            waitForDtcWaitHandle = this.transactionContext.InNetTransaction &&
+                                               this.transactionContext.NetTxState == NetTxTransactionContext.TxState.Pending ||
+                                               currentLocalTxId != Transaction.Current.TransactionInformation.LocalIdentifier;
+                        }
+                        else
+                        {
+                            waitForDtcWaitHandle = this.transactionContext.InNetTransaction &&
+                                               this.transactionContext.NetTxState == NetTxTransactionContext.TxState.Pending;
+                        }
+                        
+                    }
+
+                    //if session EnlistMsDtcNativeResource the transaction does not need to wait
+                    if (this.session.EnlistsMsDtcNativeResource)
+                    {
+                        waitForDtcWaitHandle = false;
+                    }
+
+                    if (waitForDtcWaitHandle)
+                    {
+                        this.transactionContext.DtcWaitHandle.WaitOne();
+                    }
+                }
+            }
+
+            base.BeforeMessageIsConsumed(dispatch);
+        }
+
+    }
+}
diff --git a/src/main/csharp/NetTxRecoveryPolicy.cs b/src/NetTxRecoveryPolicy.cs
similarity index 100%
rename from src/main/csharp/NetTxRecoveryPolicy.cs
rename to src/NetTxRecoveryPolicy.cs
diff --git a/src/main/csharp/NetTxSession.cs b/src/NetTxSession.cs
similarity index 100%
rename from src/main/csharp/NetTxSession.cs
rename to src/NetTxSession.cs
diff --git a/src/main/csharp/NetTxTransactionContext.cs b/src/NetTxTransactionContext.cs
similarity index 99%
rename from src/main/csharp/NetTxTransactionContext.cs
rename to src/NetTxTransactionContext.cs
index f0eb5f6..92b2f71 100644
--- a/src/main/csharp/NetTxTransactionContext.cs
+++ b/src/NetTxTransactionContext.cs
@@ -301,7 +301,7 @@
                     Tracer.DebugFormat("Transaction[{0}] Commit failed with error: {1}",
                                        this.TransactionId, ex.Message);
                     try
-                    {

+                    {
                         this.connection.OnAsyncException(ex);
                     }
                     catch (Exception error)
@@ -362,7 +362,7 @@
                     AfterRollback();
                     enlistment.Done();
                     try
-                    {

+                    {
                         this.connection.OnAsyncException(ex);
                     }
                     catch (Exception error)
@@ -422,7 +422,7 @@
                                        this.TransactionId, ex.Message);
                     AfterRollback();
                     try
-                    {

+                    {
                         this.connection.OnAsyncException(ex);
                     }
                     catch (Exception error)
diff --git a/src/main/csharp/OpenWire/BaseDataStreamMarshaller.cs b/src/OpenWire/BaseDataStreamMarshaller.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/OpenWire/BaseDataStreamMarshaller.cs
rename to src/OpenWire/BaseDataStreamMarshaller.cs
diff --git a/src/main/csharp/OpenWire/BooleanStream.cs b/src/OpenWire/BooleanStream.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/OpenWire/BooleanStream.cs
rename to src/OpenWire/BooleanStream.cs
diff --git a/src/main/csharp/OpenWire/IMarshallerFactory.cs b/src/OpenWire/IMarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/IMarshallerFactory.cs
rename to src/OpenWire/IMarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/OpenWireFormat.cs b/src/OpenWire/OpenWireFormat.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/OpenWire/OpenWireFormat.cs
rename to src/OpenWire/OpenWireFormat.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V1/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V1/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQQueueMarshaller.cs b/src/OpenWire/V1/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V1/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V1/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V1/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V1/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V1/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V1/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V1/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQTopicMarshaller.cs b/src/OpenWire/V1/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V1/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/BaseCommandMarshaller.cs b/src/OpenWire/V1/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/BaseCommandMarshaller.cs
rename to src/OpenWire/V1/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/BrokerIdMarshaller.cs b/src/OpenWire/V1/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/BrokerIdMarshaller.cs
rename to src/OpenWire/V1/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/BrokerInfoMarshaller.cs b/src/OpenWire/V1/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/BrokerInfoMarshaller.cs
rename to src/OpenWire/V1/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConnectionControlMarshaller.cs b/src/OpenWire/V1/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConnectionControlMarshaller.cs
rename to src/OpenWire/V1/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConnectionErrorMarshaller.cs b/src/OpenWire/V1/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V1/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConnectionIdMarshaller.cs b/src/OpenWire/V1/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConnectionIdMarshaller.cs
rename to src/OpenWire/V1/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConnectionInfoMarshaller.cs b/src/OpenWire/V1/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V1/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConsumerControlMarshaller.cs b/src/OpenWire/V1/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConsumerControlMarshaller.cs
rename to src/OpenWire/V1/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConsumerIdMarshaller.cs b/src/OpenWire/V1/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConsumerIdMarshaller.cs
rename to src/OpenWire/V1/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConsumerInfoMarshaller.cs b/src/OpenWire/V1/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V1/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ControlCommandMarshaller.cs b/src/OpenWire/V1/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ControlCommandMarshaller.cs
rename to src/OpenWire/V1/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/DataArrayResponseMarshaller.cs b/src/OpenWire/V1/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V1/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/DataResponseMarshaller.cs b/src/OpenWire/V1/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/DataResponseMarshaller.cs
rename to src/OpenWire/V1/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/DataStructureSupportMarshaller.cs b/src/OpenWire/V1/DataStructureSupportMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/DataStructureSupportMarshaller.cs
rename to src/OpenWire/V1/DataStructureSupportMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/DestinationInfoMarshaller.cs b/src/OpenWire/V1/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/DestinationInfoMarshaller.cs
rename to src/OpenWire/V1/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/DiscoveryEventMarshaller.cs b/src/OpenWire/V1/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V1/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ExceptionResponseMarshaller.cs b/src/OpenWire/V1/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V1/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/FlushCommandMarshaller.cs b/src/OpenWire/V1/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/FlushCommandMarshaller.cs
rename to src/OpenWire/V1/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/IntegerResponseMarshaller.cs b/src/OpenWire/V1/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/IntegerResponseMarshaller.cs
rename to src/OpenWire/V1/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/JournalQueueAckMarshaller.cs b/src/OpenWire/V1/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V1/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/JournalTopicAckMarshaller.cs b/src/OpenWire/V1/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V1/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/JournalTraceMarshaller.cs b/src/OpenWire/V1/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/JournalTraceMarshaller.cs
rename to src/OpenWire/V1/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/JournalTransactionMarshaller.cs b/src/OpenWire/V1/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/JournalTransactionMarshaller.cs
rename to src/OpenWire/V1/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/KeepAliveInfoMarshaller.cs b/src/OpenWire/V1/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V1/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/LastPartialCommandMarshaller.cs b/src/OpenWire/V1/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V1/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/LocalTransactionIdMarshaller.cs b/src/OpenWire/V1/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V1/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MarshallerFactory.cs b/src/OpenWire/V1/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MarshallerFactory.cs
rename to src/OpenWire/V1/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V1/MessageAckMarshaller.cs b/src/OpenWire/V1/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessageAckMarshaller.cs
rename to src/OpenWire/V1/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MessageDispatchMarshaller.cs b/src/OpenWire/V1/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessageDispatchMarshaller.cs
rename to src/OpenWire/V1/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V1/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V1/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MessageIdMarshaller.cs b/src/OpenWire/V1/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessageIdMarshaller.cs
rename to src/OpenWire/V1/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MessageMarshaller.cs b/src/OpenWire/V1/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessageMarshaller.cs
rename to src/OpenWire/V1/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MessagePullMarshaller.cs b/src/OpenWire/V1/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessagePullMarshaller.cs
rename to src/OpenWire/V1/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V1/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V1/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/PartialCommandMarshaller.cs b/src/OpenWire/V1/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/PartialCommandMarshaller.cs
rename to src/OpenWire/V1/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ProducerAckMarshaller.cs b/src/OpenWire/V1/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ProducerAckMarshaller.cs
rename to src/OpenWire/V1/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ProducerIdMarshaller.cs b/src/OpenWire/V1/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ProducerIdMarshaller.cs
rename to src/OpenWire/V1/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ProducerInfoMarshaller.cs b/src/OpenWire/V1/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ProducerInfoMarshaller.cs
rename to src/OpenWire/V1/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/RemoveInfoMarshaller.cs b/src/OpenWire/V1/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/RemoveInfoMarshaller.cs
rename to src/OpenWire/V1/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V1/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V1/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ReplayCommandMarshaller.cs b/src/OpenWire/V1/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ReplayCommandMarshaller.cs
rename to src/OpenWire/V1/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ResponseMarshaller.cs b/src/OpenWire/V1/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ResponseMarshaller.cs
rename to src/OpenWire/V1/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/SessionIdMarshaller.cs b/src/OpenWire/V1/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/SessionIdMarshaller.cs
rename to src/OpenWire/V1/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/SessionInfoMarshaller.cs b/src/OpenWire/V1/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/SessionInfoMarshaller.cs
rename to src/OpenWire/V1/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ShutdownInfoMarshaller.cs b/src/OpenWire/V1/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V1/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/SubscriptionInfoMarshaller.cs b/src/OpenWire/V1/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V1/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/TransactionIdMarshaller.cs b/src/OpenWire/V1/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/TransactionIdMarshaller.cs
rename to src/OpenWire/V1/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/TransactionInfoMarshaller.cs b/src/OpenWire/V1/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/TransactionInfoMarshaller.cs
rename to src/OpenWire/V1/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/WireFormatInfoMarshaller.cs b/src/OpenWire/V1/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V1/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/XATransactionIdMarshaller.cs b/src/OpenWire/V1/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/XATransactionIdMarshaller.cs
rename to src/OpenWire/V1/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V10/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V10/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQQueueMarshaller.cs b/src/OpenWire/V10/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V10/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V10/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V10/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V10/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V10/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTopicMarshaller.cs b/src/OpenWire/V10/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V10/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/BaseCommandMarshaller.cs b/src/OpenWire/V10/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/BaseCommandMarshaller.cs
rename to src/OpenWire/V10/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/BrokerIdMarshaller.cs b/src/OpenWire/V10/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/BrokerIdMarshaller.cs
rename to src/OpenWire/V10/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/BrokerInfoMarshaller.cs b/src/OpenWire/V10/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/BrokerInfoMarshaller.cs
rename to src/OpenWire/V10/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConnectionControlMarshaller.cs b/src/OpenWire/V10/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConnectionControlMarshaller.cs
rename to src/OpenWire/V10/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConnectionErrorMarshaller.cs b/src/OpenWire/V10/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V10/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConnectionIdMarshaller.cs b/src/OpenWire/V10/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConnectionIdMarshaller.cs
rename to src/OpenWire/V10/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConnectionInfoMarshaller.cs b/src/OpenWire/V10/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V10/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConsumerControlMarshaller.cs b/src/OpenWire/V10/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConsumerControlMarshaller.cs
rename to src/OpenWire/V10/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConsumerIdMarshaller.cs b/src/OpenWire/V10/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConsumerIdMarshaller.cs
rename to src/OpenWire/V10/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConsumerInfoMarshaller.cs b/src/OpenWire/V10/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V10/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ControlCommandMarshaller.cs b/src/OpenWire/V10/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ControlCommandMarshaller.cs
rename to src/OpenWire/V10/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/DataArrayResponseMarshaller.cs b/src/OpenWire/V10/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V10/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/DataResponseMarshaller.cs b/src/OpenWire/V10/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/DataResponseMarshaller.cs
rename to src/OpenWire/V10/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/DestinationInfoMarshaller.cs b/src/OpenWire/V10/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/DestinationInfoMarshaller.cs
rename to src/OpenWire/V10/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/DiscoveryEventMarshaller.cs b/src/OpenWire/V10/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V10/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ExceptionResponseMarshaller.cs b/src/OpenWire/V10/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V10/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/FlushCommandMarshaller.cs b/src/OpenWire/V10/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/FlushCommandMarshaller.cs
rename to src/OpenWire/V10/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/IntegerResponseMarshaller.cs b/src/OpenWire/V10/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/IntegerResponseMarshaller.cs
rename to src/OpenWire/V10/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/JournalQueueAckMarshaller.cs b/src/OpenWire/V10/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V10/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/JournalTopicAckMarshaller.cs b/src/OpenWire/V10/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V10/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/JournalTraceMarshaller.cs b/src/OpenWire/V10/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/JournalTraceMarshaller.cs
rename to src/OpenWire/V10/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/JournalTransactionMarshaller.cs b/src/OpenWire/V10/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/JournalTransactionMarshaller.cs
rename to src/OpenWire/V10/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/KeepAliveInfoMarshaller.cs b/src/OpenWire/V10/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V10/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/LastPartialCommandMarshaller.cs b/src/OpenWire/V10/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V10/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/LocalTransactionIdMarshaller.cs b/src/OpenWire/V10/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V10/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MarshallerFactory.cs b/src/OpenWire/V10/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MarshallerFactory.cs
rename to src/OpenWire/V10/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V10/MessageAckMarshaller.cs b/src/OpenWire/V10/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessageAckMarshaller.cs
rename to src/OpenWire/V10/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MessageDispatchMarshaller.cs b/src/OpenWire/V10/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessageDispatchMarshaller.cs
rename to src/OpenWire/V10/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V10/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V10/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MessageIdMarshaller.cs b/src/OpenWire/V10/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessageIdMarshaller.cs
rename to src/OpenWire/V10/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MessageMarshaller.cs b/src/OpenWire/V10/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessageMarshaller.cs
rename to src/OpenWire/V10/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MessagePullMarshaller.cs b/src/OpenWire/V10/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessagePullMarshaller.cs
rename to src/OpenWire/V10/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V10/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V10/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/PartialCommandMarshaller.cs b/src/OpenWire/V10/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/PartialCommandMarshaller.cs
rename to src/OpenWire/V10/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ProducerAckMarshaller.cs b/src/OpenWire/V10/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ProducerAckMarshaller.cs
rename to src/OpenWire/V10/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ProducerIdMarshaller.cs b/src/OpenWire/V10/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ProducerIdMarshaller.cs
rename to src/OpenWire/V10/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ProducerInfoMarshaller.cs b/src/OpenWire/V10/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ProducerInfoMarshaller.cs
rename to src/OpenWire/V10/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/RemoveInfoMarshaller.cs b/src/OpenWire/V10/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/RemoveInfoMarshaller.cs
rename to src/OpenWire/V10/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ReplayCommandMarshaller.cs b/src/OpenWire/V10/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ReplayCommandMarshaller.cs
rename to src/OpenWire/V10/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ResponseMarshaller.cs b/src/OpenWire/V10/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ResponseMarshaller.cs
rename to src/OpenWire/V10/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/SessionIdMarshaller.cs b/src/OpenWire/V10/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/SessionIdMarshaller.cs
rename to src/OpenWire/V10/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/SessionInfoMarshaller.cs b/src/OpenWire/V10/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/SessionInfoMarshaller.cs
rename to src/OpenWire/V10/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ShutdownInfoMarshaller.cs b/src/OpenWire/V10/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V10/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/SubscriptionInfoMarshaller.cs b/src/OpenWire/V10/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V10/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/TransactionIdMarshaller.cs b/src/OpenWire/V10/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/TransactionIdMarshaller.cs
rename to src/OpenWire/V10/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/TransactionInfoMarshaller.cs b/src/OpenWire/V10/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/TransactionInfoMarshaller.cs
rename to src/OpenWire/V10/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/WireFormatInfoMarshaller.cs b/src/OpenWire/V10/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V10/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/XATransactionIdMarshaller.cs b/src/OpenWire/V10/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/XATransactionIdMarshaller.cs
rename to src/OpenWire/V10/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V2/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V2/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQQueueMarshaller.cs b/src/OpenWire/V2/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V2/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V2/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V2/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V2/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V2/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V2/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V2/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQTopicMarshaller.cs b/src/OpenWire/V2/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V2/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/BaseCommandMarshaller.cs b/src/OpenWire/V2/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/BaseCommandMarshaller.cs
rename to src/OpenWire/V2/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/BrokerIdMarshaller.cs b/src/OpenWire/V2/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/BrokerIdMarshaller.cs
rename to src/OpenWire/V2/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/BrokerInfoMarshaller.cs b/src/OpenWire/V2/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/BrokerInfoMarshaller.cs
rename to src/OpenWire/V2/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConnectionControlMarshaller.cs b/src/OpenWire/V2/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConnectionControlMarshaller.cs
rename to src/OpenWire/V2/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConnectionErrorMarshaller.cs b/src/OpenWire/V2/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V2/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConnectionIdMarshaller.cs b/src/OpenWire/V2/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConnectionIdMarshaller.cs
rename to src/OpenWire/V2/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConnectionInfoMarshaller.cs b/src/OpenWire/V2/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V2/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConsumerControlMarshaller.cs b/src/OpenWire/V2/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConsumerControlMarshaller.cs
rename to src/OpenWire/V2/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConsumerIdMarshaller.cs b/src/OpenWire/V2/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConsumerIdMarshaller.cs
rename to src/OpenWire/V2/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConsumerInfoMarshaller.cs b/src/OpenWire/V2/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V2/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ControlCommandMarshaller.cs b/src/OpenWire/V2/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ControlCommandMarshaller.cs
rename to src/OpenWire/V2/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/DataArrayResponseMarshaller.cs b/src/OpenWire/V2/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V2/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/DataResponseMarshaller.cs b/src/OpenWire/V2/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/DataResponseMarshaller.cs
rename to src/OpenWire/V2/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/DestinationInfoMarshaller.cs b/src/OpenWire/V2/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/DestinationInfoMarshaller.cs
rename to src/OpenWire/V2/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/DiscoveryEventMarshaller.cs b/src/OpenWire/V2/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V2/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ExceptionResponseMarshaller.cs b/src/OpenWire/V2/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V2/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/FlushCommandMarshaller.cs b/src/OpenWire/V2/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/FlushCommandMarshaller.cs
rename to src/OpenWire/V2/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/IntegerResponseMarshaller.cs b/src/OpenWire/V2/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/IntegerResponseMarshaller.cs
rename to src/OpenWire/V2/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/JournalQueueAckMarshaller.cs b/src/OpenWire/V2/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V2/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/JournalTopicAckMarshaller.cs b/src/OpenWire/V2/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V2/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/JournalTraceMarshaller.cs b/src/OpenWire/V2/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/JournalTraceMarshaller.cs
rename to src/OpenWire/V2/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/JournalTransactionMarshaller.cs b/src/OpenWire/V2/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/JournalTransactionMarshaller.cs
rename to src/OpenWire/V2/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/KeepAliveInfoMarshaller.cs b/src/OpenWire/V2/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V2/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/LastPartialCommandMarshaller.cs b/src/OpenWire/V2/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V2/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/LocalTransactionIdMarshaller.cs b/src/OpenWire/V2/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V2/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MarshallerFactory.cs b/src/OpenWire/V2/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MarshallerFactory.cs
rename to src/OpenWire/V2/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V2/MessageAckMarshaller.cs b/src/OpenWire/V2/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessageAckMarshaller.cs
rename to src/OpenWire/V2/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MessageDispatchMarshaller.cs b/src/OpenWire/V2/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessageDispatchMarshaller.cs
rename to src/OpenWire/V2/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V2/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V2/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MessageIdMarshaller.cs b/src/OpenWire/V2/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessageIdMarshaller.cs
rename to src/OpenWire/V2/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MessageMarshaller.cs b/src/OpenWire/V2/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessageMarshaller.cs
rename to src/OpenWire/V2/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MessagePullMarshaller.cs b/src/OpenWire/V2/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessagePullMarshaller.cs
rename to src/OpenWire/V2/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V2/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V2/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/PartialCommandMarshaller.cs b/src/OpenWire/V2/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/PartialCommandMarshaller.cs
rename to src/OpenWire/V2/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ProducerAckMarshaller.cs b/src/OpenWire/V2/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ProducerAckMarshaller.cs
rename to src/OpenWire/V2/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ProducerIdMarshaller.cs b/src/OpenWire/V2/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ProducerIdMarshaller.cs
rename to src/OpenWire/V2/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ProducerInfoMarshaller.cs b/src/OpenWire/V2/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ProducerInfoMarshaller.cs
rename to src/OpenWire/V2/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/RemoveInfoMarshaller.cs b/src/OpenWire/V2/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/RemoveInfoMarshaller.cs
rename to src/OpenWire/V2/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V2/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V2/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ReplayCommandMarshaller.cs b/src/OpenWire/V2/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ReplayCommandMarshaller.cs
rename to src/OpenWire/V2/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ResponseMarshaller.cs b/src/OpenWire/V2/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ResponseMarshaller.cs
rename to src/OpenWire/V2/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/SessionIdMarshaller.cs b/src/OpenWire/V2/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/SessionIdMarshaller.cs
rename to src/OpenWire/V2/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/SessionInfoMarshaller.cs b/src/OpenWire/V2/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/SessionInfoMarshaller.cs
rename to src/OpenWire/V2/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ShutdownInfoMarshaller.cs b/src/OpenWire/V2/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V2/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/SubscriptionInfoMarshaller.cs b/src/OpenWire/V2/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V2/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/TransactionIdMarshaller.cs b/src/OpenWire/V2/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/TransactionIdMarshaller.cs
rename to src/OpenWire/V2/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/TransactionInfoMarshaller.cs b/src/OpenWire/V2/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/TransactionInfoMarshaller.cs
rename to src/OpenWire/V2/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/WireFormatInfoMarshaller.cs b/src/OpenWire/V2/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V2/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/XATransactionIdMarshaller.cs b/src/OpenWire/V2/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/XATransactionIdMarshaller.cs
rename to src/OpenWire/V2/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V3/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V3/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQQueueMarshaller.cs b/src/OpenWire/V3/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V3/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V3/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V3/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V3/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V3/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V3/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V3/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQTopicMarshaller.cs b/src/OpenWire/V3/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V3/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/BaseCommandMarshaller.cs b/src/OpenWire/V3/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/BaseCommandMarshaller.cs
rename to src/OpenWire/V3/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/BrokerIdMarshaller.cs b/src/OpenWire/V3/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/BrokerIdMarshaller.cs
rename to src/OpenWire/V3/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/BrokerInfoMarshaller.cs b/src/OpenWire/V3/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/BrokerInfoMarshaller.cs
rename to src/OpenWire/V3/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConnectionControlMarshaller.cs b/src/OpenWire/V3/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConnectionControlMarshaller.cs
rename to src/OpenWire/V3/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConnectionErrorMarshaller.cs b/src/OpenWire/V3/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V3/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConnectionIdMarshaller.cs b/src/OpenWire/V3/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConnectionIdMarshaller.cs
rename to src/OpenWire/V3/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConnectionInfoMarshaller.cs b/src/OpenWire/V3/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V3/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConsumerControlMarshaller.cs b/src/OpenWire/V3/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConsumerControlMarshaller.cs
rename to src/OpenWire/V3/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConsumerIdMarshaller.cs b/src/OpenWire/V3/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConsumerIdMarshaller.cs
rename to src/OpenWire/V3/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConsumerInfoMarshaller.cs b/src/OpenWire/V3/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V3/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ControlCommandMarshaller.cs b/src/OpenWire/V3/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ControlCommandMarshaller.cs
rename to src/OpenWire/V3/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/DataArrayResponseMarshaller.cs b/src/OpenWire/V3/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V3/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/DataResponseMarshaller.cs b/src/OpenWire/V3/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/DataResponseMarshaller.cs
rename to src/OpenWire/V3/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/DestinationInfoMarshaller.cs b/src/OpenWire/V3/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/DestinationInfoMarshaller.cs
rename to src/OpenWire/V3/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/DiscoveryEventMarshaller.cs b/src/OpenWire/V3/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V3/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ExceptionResponseMarshaller.cs b/src/OpenWire/V3/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V3/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/FlushCommandMarshaller.cs b/src/OpenWire/V3/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/FlushCommandMarshaller.cs
rename to src/OpenWire/V3/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/IntegerResponseMarshaller.cs b/src/OpenWire/V3/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/IntegerResponseMarshaller.cs
rename to src/OpenWire/V3/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/JournalQueueAckMarshaller.cs b/src/OpenWire/V3/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V3/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/JournalTopicAckMarshaller.cs b/src/OpenWire/V3/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V3/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/JournalTraceMarshaller.cs b/src/OpenWire/V3/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/JournalTraceMarshaller.cs
rename to src/OpenWire/V3/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/JournalTransactionMarshaller.cs b/src/OpenWire/V3/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/JournalTransactionMarshaller.cs
rename to src/OpenWire/V3/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/KeepAliveInfoMarshaller.cs b/src/OpenWire/V3/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V3/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/LastPartialCommandMarshaller.cs b/src/OpenWire/V3/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V3/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/LocalTransactionIdMarshaller.cs b/src/OpenWire/V3/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V3/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MarshallerFactory.cs b/src/OpenWire/V3/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MarshallerFactory.cs
rename to src/OpenWire/V3/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V3/MessageAckMarshaller.cs b/src/OpenWire/V3/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessageAckMarshaller.cs
rename to src/OpenWire/V3/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MessageDispatchMarshaller.cs b/src/OpenWire/V3/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessageDispatchMarshaller.cs
rename to src/OpenWire/V3/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V3/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V3/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MessageIdMarshaller.cs b/src/OpenWire/V3/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessageIdMarshaller.cs
rename to src/OpenWire/V3/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MessageMarshaller.cs b/src/OpenWire/V3/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessageMarshaller.cs
rename to src/OpenWire/V3/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MessagePullMarshaller.cs b/src/OpenWire/V3/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessagePullMarshaller.cs
rename to src/OpenWire/V3/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V3/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V3/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/PartialCommandMarshaller.cs b/src/OpenWire/V3/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/PartialCommandMarshaller.cs
rename to src/OpenWire/V3/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ProducerAckMarshaller.cs b/src/OpenWire/V3/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ProducerAckMarshaller.cs
rename to src/OpenWire/V3/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ProducerIdMarshaller.cs b/src/OpenWire/V3/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ProducerIdMarshaller.cs
rename to src/OpenWire/V3/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ProducerInfoMarshaller.cs b/src/OpenWire/V3/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ProducerInfoMarshaller.cs
rename to src/OpenWire/V3/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/RemoveInfoMarshaller.cs b/src/OpenWire/V3/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/RemoveInfoMarshaller.cs
rename to src/OpenWire/V3/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V3/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V3/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ReplayCommandMarshaller.cs b/src/OpenWire/V3/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ReplayCommandMarshaller.cs
rename to src/OpenWire/V3/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ResponseMarshaller.cs b/src/OpenWire/V3/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ResponseMarshaller.cs
rename to src/OpenWire/V3/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/SessionIdMarshaller.cs b/src/OpenWire/V3/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/SessionIdMarshaller.cs
rename to src/OpenWire/V3/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/SessionInfoMarshaller.cs b/src/OpenWire/V3/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/SessionInfoMarshaller.cs
rename to src/OpenWire/V3/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ShutdownInfoMarshaller.cs b/src/OpenWire/V3/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V3/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/SubscriptionInfoMarshaller.cs b/src/OpenWire/V3/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V3/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/TransactionIdMarshaller.cs b/src/OpenWire/V3/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/TransactionIdMarshaller.cs
rename to src/OpenWire/V3/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/TransactionInfoMarshaller.cs b/src/OpenWire/V3/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/TransactionInfoMarshaller.cs
rename to src/OpenWire/V3/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/WireFormatInfoMarshaller.cs b/src/OpenWire/V3/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V3/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/XATransactionIdMarshaller.cs b/src/OpenWire/V3/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/XATransactionIdMarshaller.cs
rename to src/OpenWire/V3/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V4/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V4/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQQueueMarshaller.cs b/src/OpenWire/V4/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V4/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V4/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V4/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V4/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V4/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V4/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V4/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQTopicMarshaller.cs b/src/OpenWire/V4/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V4/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/BaseCommandMarshaller.cs b/src/OpenWire/V4/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/BaseCommandMarshaller.cs
rename to src/OpenWire/V4/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/BrokerIdMarshaller.cs b/src/OpenWire/V4/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/BrokerIdMarshaller.cs
rename to src/OpenWire/V4/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/BrokerInfoMarshaller.cs b/src/OpenWire/V4/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/BrokerInfoMarshaller.cs
rename to src/OpenWire/V4/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConnectionControlMarshaller.cs b/src/OpenWire/V4/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConnectionControlMarshaller.cs
rename to src/OpenWire/V4/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConnectionErrorMarshaller.cs b/src/OpenWire/V4/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V4/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConnectionIdMarshaller.cs b/src/OpenWire/V4/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConnectionIdMarshaller.cs
rename to src/OpenWire/V4/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConnectionInfoMarshaller.cs b/src/OpenWire/V4/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V4/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConsumerControlMarshaller.cs b/src/OpenWire/V4/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConsumerControlMarshaller.cs
rename to src/OpenWire/V4/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConsumerIdMarshaller.cs b/src/OpenWire/V4/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConsumerIdMarshaller.cs
rename to src/OpenWire/V4/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConsumerInfoMarshaller.cs b/src/OpenWire/V4/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V4/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ControlCommandMarshaller.cs b/src/OpenWire/V4/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ControlCommandMarshaller.cs
rename to src/OpenWire/V4/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/DataArrayResponseMarshaller.cs b/src/OpenWire/V4/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V4/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/DataResponseMarshaller.cs b/src/OpenWire/V4/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/DataResponseMarshaller.cs
rename to src/OpenWire/V4/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/DestinationInfoMarshaller.cs b/src/OpenWire/V4/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/DestinationInfoMarshaller.cs
rename to src/OpenWire/V4/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/DiscoveryEventMarshaller.cs b/src/OpenWire/V4/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V4/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ExceptionResponseMarshaller.cs b/src/OpenWire/V4/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V4/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/FlushCommandMarshaller.cs b/src/OpenWire/V4/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/FlushCommandMarshaller.cs
rename to src/OpenWire/V4/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/IntegerResponseMarshaller.cs b/src/OpenWire/V4/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/IntegerResponseMarshaller.cs
rename to src/OpenWire/V4/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/JournalQueueAckMarshaller.cs b/src/OpenWire/V4/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V4/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/JournalTopicAckMarshaller.cs b/src/OpenWire/V4/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V4/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/JournalTraceMarshaller.cs b/src/OpenWire/V4/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/JournalTraceMarshaller.cs
rename to src/OpenWire/V4/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/JournalTransactionMarshaller.cs b/src/OpenWire/V4/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/JournalTransactionMarshaller.cs
rename to src/OpenWire/V4/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/KeepAliveInfoMarshaller.cs b/src/OpenWire/V4/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V4/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/LastPartialCommandMarshaller.cs b/src/OpenWire/V4/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V4/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/LocalTransactionIdMarshaller.cs b/src/OpenWire/V4/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V4/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MarshallerFactory.cs b/src/OpenWire/V4/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MarshallerFactory.cs
rename to src/OpenWire/V4/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V4/MessageAckMarshaller.cs b/src/OpenWire/V4/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessageAckMarshaller.cs
rename to src/OpenWire/V4/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MessageDispatchMarshaller.cs b/src/OpenWire/V4/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessageDispatchMarshaller.cs
rename to src/OpenWire/V4/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V4/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V4/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MessageIdMarshaller.cs b/src/OpenWire/V4/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessageIdMarshaller.cs
rename to src/OpenWire/V4/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MessageMarshaller.cs b/src/OpenWire/V4/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessageMarshaller.cs
rename to src/OpenWire/V4/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MessagePullMarshaller.cs b/src/OpenWire/V4/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessagePullMarshaller.cs
rename to src/OpenWire/V4/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V4/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V4/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/PartialCommandMarshaller.cs b/src/OpenWire/V4/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/PartialCommandMarshaller.cs
rename to src/OpenWire/V4/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ProducerAckMarshaller.cs b/src/OpenWire/V4/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ProducerAckMarshaller.cs
rename to src/OpenWire/V4/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ProducerIdMarshaller.cs b/src/OpenWire/V4/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ProducerIdMarshaller.cs
rename to src/OpenWire/V4/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ProducerInfoMarshaller.cs b/src/OpenWire/V4/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ProducerInfoMarshaller.cs
rename to src/OpenWire/V4/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/RemoveInfoMarshaller.cs b/src/OpenWire/V4/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/RemoveInfoMarshaller.cs
rename to src/OpenWire/V4/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V4/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V4/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ReplayCommandMarshaller.cs b/src/OpenWire/V4/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ReplayCommandMarshaller.cs
rename to src/OpenWire/V4/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ResponseMarshaller.cs b/src/OpenWire/V4/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ResponseMarshaller.cs
rename to src/OpenWire/V4/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/SessionIdMarshaller.cs b/src/OpenWire/V4/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/SessionIdMarshaller.cs
rename to src/OpenWire/V4/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/SessionInfoMarshaller.cs b/src/OpenWire/V4/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/SessionInfoMarshaller.cs
rename to src/OpenWire/V4/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ShutdownInfoMarshaller.cs b/src/OpenWire/V4/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V4/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/SubscriptionInfoMarshaller.cs b/src/OpenWire/V4/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V4/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/TransactionIdMarshaller.cs b/src/OpenWire/V4/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/TransactionIdMarshaller.cs
rename to src/OpenWire/V4/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/TransactionInfoMarshaller.cs b/src/OpenWire/V4/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/TransactionInfoMarshaller.cs
rename to src/OpenWire/V4/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/WireFormatInfoMarshaller.cs b/src/OpenWire/V4/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V4/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/XATransactionIdMarshaller.cs b/src/OpenWire/V4/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/XATransactionIdMarshaller.cs
rename to src/OpenWire/V4/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V5/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V5/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQQueueMarshaller.cs b/src/OpenWire/V5/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V5/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V5/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V5/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V5/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V5/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V5/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V5/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQTopicMarshaller.cs b/src/OpenWire/V5/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V5/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/BaseCommandMarshaller.cs b/src/OpenWire/V5/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/BaseCommandMarshaller.cs
rename to src/OpenWire/V5/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/BrokerIdMarshaller.cs b/src/OpenWire/V5/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/BrokerIdMarshaller.cs
rename to src/OpenWire/V5/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/BrokerInfoMarshaller.cs b/src/OpenWire/V5/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/BrokerInfoMarshaller.cs
rename to src/OpenWire/V5/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConnectionControlMarshaller.cs b/src/OpenWire/V5/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConnectionControlMarshaller.cs
rename to src/OpenWire/V5/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConnectionErrorMarshaller.cs b/src/OpenWire/V5/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V5/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConnectionIdMarshaller.cs b/src/OpenWire/V5/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConnectionIdMarshaller.cs
rename to src/OpenWire/V5/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConnectionInfoMarshaller.cs b/src/OpenWire/V5/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V5/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConsumerControlMarshaller.cs b/src/OpenWire/V5/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConsumerControlMarshaller.cs
rename to src/OpenWire/V5/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConsumerIdMarshaller.cs b/src/OpenWire/V5/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConsumerIdMarshaller.cs
rename to src/OpenWire/V5/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConsumerInfoMarshaller.cs b/src/OpenWire/V5/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V5/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ControlCommandMarshaller.cs b/src/OpenWire/V5/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ControlCommandMarshaller.cs
rename to src/OpenWire/V5/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/DataArrayResponseMarshaller.cs b/src/OpenWire/V5/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V5/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/DataResponseMarshaller.cs b/src/OpenWire/V5/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/DataResponseMarshaller.cs
rename to src/OpenWire/V5/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/DestinationInfoMarshaller.cs b/src/OpenWire/V5/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/DestinationInfoMarshaller.cs
rename to src/OpenWire/V5/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/DiscoveryEventMarshaller.cs b/src/OpenWire/V5/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V5/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ExceptionResponseMarshaller.cs b/src/OpenWire/V5/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V5/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/FlushCommandMarshaller.cs b/src/OpenWire/V5/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/FlushCommandMarshaller.cs
rename to src/OpenWire/V5/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/IntegerResponseMarshaller.cs b/src/OpenWire/V5/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/IntegerResponseMarshaller.cs
rename to src/OpenWire/V5/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/JournalQueueAckMarshaller.cs b/src/OpenWire/V5/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V5/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/JournalTopicAckMarshaller.cs b/src/OpenWire/V5/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V5/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/JournalTraceMarshaller.cs b/src/OpenWire/V5/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/JournalTraceMarshaller.cs
rename to src/OpenWire/V5/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/JournalTransactionMarshaller.cs b/src/OpenWire/V5/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/JournalTransactionMarshaller.cs
rename to src/OpenWire/V5/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/KeepAliveInfoMarshaller.cs b/src/OpenWire/V5/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V5/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/LastPartialCommandMarshaller.cs b/src/OpenWire/V5/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V5/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/LocalTransactionIdMarshaller.cs b/src/OpenWire/V5/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V5/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MarshallerFactory.cs b/src/OpenWire/V5/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MarshallerFactory.cs
rename to src/OpenWire/V5/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V5/MessageAckMarshaller.cs b/src/OpenWire/V5/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessageAckMarshaller.cs
rename to src/OpenWire/V5/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MessageDispatchMarshaller.cs b/src/OpenWire/V5/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessageDispatchMarshaller.cs
rename to src/OpenWire/V5/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V5/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V5/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MessageIdMarshaller.cs b/src/OpenWire/V5/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessageIdMarshaller.cs
rename to src/OpenWire/V5/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MessageMarshaller.cs b/src/OpenWire/V5/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessageMarshaller.cs
rename to src/OpenWire/V5/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MessagePullMarshaller.cs b/src/OpenWire/V5/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessagePullMarshaller.cs
rename to src/OpenWire/V5/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V5/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V5/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/PartialCommandMarshaller.cs b/src/OpenWire/V5/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/PartialCommandMarshaller.cs
rename to src/OpenWire/V5/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ProducerAckMarshaller.cs b/src/OpenWire/V5/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ProducerAckMarshaller.cs
rename to src/OpenWire/V5/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ProducerIdMarshaller.cs b/src/OpenWire/V5/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ProducerIdMarshaller.cs
rename to src/OpenWire/V5/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ProducerInfoMarshaller.cs b/src/OpenWire/V5/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ProducerInfoMarshaller.cs
rename to src/OpenWire/V5/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/RemoveInfoMarshaller.cs b/src/OpenWire/V5/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/RemoveInfoMarshaller.cs
rename to src/OpenWire/V5/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V5/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V5/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ReplayCommandMarshaller.cs b/src/OpenWire/V5/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ReplayCommandMarshaller.cs
rename to src/OpenWire/V5/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ResponseMarshaller.cs b/src/OpenWire/V5/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ResponseMarshaller.cs
rename to src/OpenWire/V5/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/SessionIdMarshaller.cs b/src/OpenWire/V5/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/SessionIdMarshaller.cs
rename to src/OpenWire/V5/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/SessionInfoMarshaller.cs b/src/OpenWire/V5/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/SessionInfoMarshaller.cs
rename to src/OpenWire/V5/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ShutdownInfoMarshaller.cs b/src/OpenWire/V5/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V5/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/SubscriptionInfoMarshaller.cs b/src/OpenWire/V5/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V5/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/TransactionIdMarshaller.cs b/src/OpenWire/V5/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/TransactionIdMarshaller.cs
rename to src/OpenWire/V5/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/TransactionInfoMarshaller.cs b/src/OpenWire/V5/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/TransactionInfoMarshaller.cs
rename to src/OpenWire/V5/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/WireFormatInfoMarshaller.cs b/src/OpenWire/V5/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V5/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/XATransactionIdMarshaller.cs b/src/OpenWire/V5/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/XATransactionIdMarshaller.cs
rename to src/OpenWire/V5/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V6/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V6/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQQueueMarshaller.cs b/src/OpenWire/V6/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V6/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V6/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V6/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V6/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V6/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V6/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V6/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQTopicMarshaller.cs b/src/OpenWire/V6/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V6/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/BaseCommandMarshaller.cs b/src/OpenWire/V6/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/BaseCommandMarshaller.cs
rename to src/OpenWire/V6/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/BrokerIdMarshaller.cs b/src/OpenWire/V6/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/BrokerIdMarshaller.cs
rename to src/OpenWire/V6/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/BrokerInfoMarshaller.cs b/src/OpenWire/V6/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/BrokerInfoMarshaller.cs
rename to src/OpenWire/V6/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConnectionControlMarshaller.cs b/src/OpenWire/V6/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConnectionControlMarshaller.cs
rename to src/OpenWire/V6/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConnectionErrorMarshaller.cs b/src/OpenWire/V6/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V6/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConnectionIdMarshaller.cs b/src/OpenWire/V6/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConnectionIdMarshaller.cs
rename to src/OpenWire/V6/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConnectionInfoMarshaller.cs b/src/OpenWire/V6/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V6/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConsumerControlMarshaller.cs b/src/OpenWire/V6/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConsumerControlMarshaller.cs
rename to src/OpenWire/V6/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConsumerIdMarshaller.cs b/src/OpenWire/V6/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConsumerIdMarshaller.cs
rename to src/OpenWire/V6/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConsumerInfoMarshaller.cs b/src/OpenWire/V6/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V6/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ControlCommandMarshaller.cs b/src/OpenWire/V6/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ControlCommandMarshaller.cs
rename to src/OpenWire/V6/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/DataArrayResponseMarshaller.cs b/src/OpenWire/V6/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V6/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/DataResponseMarshaller.cs b/src/OpenWire/V6/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/DataResponseMarshaller.cs
rename to src/OpenWire/V6/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/DestinationInfoMarshaller.cs b/src/OpenWire/V6/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/DestinationInfoMarshaller.cs
rename to src/OpenWire/V6/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/DiscoveryEventMarshaller.cs b/src/OpenWire/V6/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V6/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ExceptionResponseMarshaller.cs b/src/OpenWire/V6/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V6/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/FlushCommandMarshaller.cs b/src/OpenWire/V6/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/FlushCommandMarshaller.cs
rename to src/OpenWire/V6/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/IntegerResponseMarshaller.cs b/src/OpenWire/V6/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/IntegerResponseMarshaller.cs
rename to src/OpenWire/V6/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/JournalQueueAckMarshaller.cs b/src/OpenWire/V6/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V6/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/JournalTopicAckMarshaller.cs b/src/OpenWire/V6/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V6/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/JournalTraceMarshaller.cs b/src/OpenWire/V6/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/JournalTraceMarshaller.cs
rename to src/OpenWire/V6/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/JournalTransactionMarshaller.cs b/src/OpenWire/V6/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/JournalTransactionMarshaller.cs
rename to src/OpenWire/V6/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/KeepAliveInfoMarshaller.cs b/src/OpenWire/V6/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V6/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/LastPartialCommandMarshaller.cs b/src/OpenWire/V6/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V6/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/LocalTransactionIdMarshaller.cs b/src/OpenWire/V6/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V6/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MarshallerFactory.cs b/src/OpenWire/V6/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MarshallerFactory.cs
rename to src/OpenWire/V6/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V6/MessageAckMarshaller.cs b/src/OpenWire/V6/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessageAckMarshaller.cs
rename to src/OpenWire/V6/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MessageDispatchMarshaller.cs b/src/OpenWire/V6/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessageDispatchMarshaller.cs
rename to src/OpenWire/V6/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V6/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V6/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MessageIdMarshaller.cs b/src/OpenWire/V6/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessageIdMarshaller.cs
rename to src/OpenWire/V6/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MessageMarshaller.cs b/src/OpenWire/V6/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessageMarshaller.cs
rename to src/OpenWire/V6/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MessagePullMarshaller.cs b/src/OpenWire/V6/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessagePullMarshaller.cs
rename to src/OpenWire/V6/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V6/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V6/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/PartialCommandMarshaller.cs b/src/OpenWire/V6/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/PartialCommandMarshaller.cs
rename to src/OpenWire/V6/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ProducerAckMarshaller.cs b/src/OpenWire/V6/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ProducerAckMarshaller.cs
rename to src/OpenWire/V6/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ProducerIdMarshaller.cs b/src/OpenWire/V6/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ProducerIdMarshaller.cs
rename to src/OpenWire/V6/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ProducerInfoMarshaller.cs b/src/OpenWire/V6/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ProducerInfoMarshaller.cs
rename to src/OpenWire/V6/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/RemoveInfoMarshaller.cs b/src/OpenWire/V6/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/RemoveInfoMarshaller.cs
rename to src/OpenWire/V6/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V6/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V6/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ReplayCommandMarshaller.cs b/src/OpenWire/V6/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ReplayCommandMarshaller.cs
rename to src/OpenWire/V6/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ResponseMarshaller.cs b/src/OpenWire/V6/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ResponseMarshaller.cs
rename to src/OpenWire/V6/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/SessionIdMarshaller.cs b/src/OpenWire/V6/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/SessionIdMarshaller.cs
rename to src/OpenWire/V6/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/SessionInfoMarshaller.cs b/src/OpenWire/V6/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/SessionInfoMarshaller.cs
rename to src/OpenWire/V6/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ShutdownInfoMarshaller.cs b/src/OpenWire/V6/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V6/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/SubscriptionInfoMarshaller.cs b/src/OpenWire/V6/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V6/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/TransactionIdMarshaller.cs b/src/OpenWire/V6/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/TransactionIdMarshaller.cs
rename to src/OpenWire/V6/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/TransactionInfoMarshaller.cs b/src/OpenWire/V6/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/TransactionInfoMarshaller.cs
rename to src/OpenWire/V6/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/WireFormatInfoMarshaller.cs b/src/OpenWire/V6/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V6/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/XATransactionIdMarshaller.cs b/src/OpenWire/V6/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/XATransactionIdMarshaller.cs
rename to src/OpenWire/V6/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V7/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V7/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQQueueMarshaller.cs b/src/OpenWire/V7/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V7/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V7/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V7/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V7/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V7/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V7/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V7/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQTopicMarshaller.cs b/src/OpenWire/V7/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V7/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/BaseCommandMarshaller.cs b/src/OpenWire/V7/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/BaseCommandMarshaller.cs
rename to src/OpenWire/V7/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/BrokerIdMarshaller.cs b/src/OpenWire/V7/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/BrokerIdMarshaller.cs
rename to src/OpenWire/V7/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/BrokerInfoMarshaller.cs b/src/OpenWire/V7/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/BrokerInfoMarshaller.cs
rename to src/OpenWire/V7/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConnectionControlMarshaller.cs b/src/OpenWire/V7/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConnectionControlMarshaller.cs
rename to src/OpenWire/V7/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConnectionErrorMarshaller.cs b/src/OpenWire/V7/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V7/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConnectionIdMarshaller.cs b/src/OpenWire/V7/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConnectionIdMarshaller.cs
rename to src/OpenWire/V7/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConnectionInfoMarshaller.cs b/src/OpenWire/V7/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V7/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConsumerControlMarshaller.cs b/src/OpenWire/V7/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConsumerControlMarshaller.cs
rename to src/OpenWire/V7/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConsumerIdMarshaller.cs b/src/OpenWire/V7/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConsumerIdMarshaller.cs
rename to src/OpenWire/V7/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConsumerInfoMarshaller.cs b/src/OpenWire/V7/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V7/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ControlCommandMarshaller.cs b/src/OpenWire/V7/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ControlCommandMarshaller.cs
rename to src/OpenWire/V7/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/DataArrayResponseMarshaller.cs b/src/OpenWire/V7/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V7/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/DataResponseMarshaller.cs b/src/OpenWire/V7/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/DataResponseMarshaller.cs
rename to src/OpenWire/V7/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/DestinationInfoMarshaller.cs b/src/OpenWire/V7/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/DestinationInfoMarshaller.cs
rename to src/OpenWire/V7/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/DiscoveryEventMarshaller.cs b/src/OpenWire/V7/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V7/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ExceptionResponseMarshaller.cs b/src/OpenWire/V7/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V7/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/FlushCommandMarshaller.cs b/src/OpenWire/V7/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/FlushCommandMarshaller.cs
rename to src/OpenWire/V7/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/IntegerResponseMarshaller.cs b/src/OpenWire/V7/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/IntegerResponseMarshaller.cs
rename to src/OpenWire/V7/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/JournalQueueAckMarshaller.cs b/src/OpenWire/V7/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V7/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/JournalTopicAckMarshaller.cs b/src/OpenWire/V7/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V7/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/JournalTraceMarshaller.cs b/src/OpenWire/V7/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/JournalTraceMarshaller.cs
rename to src/OpenWire/V7/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/JournalTransactionMarshaller.cs b/src/OpenWire/V7/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/JournalTransactionMarshaller.cs
rename to src/OpenWire/V7/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/KeepAliveInfoMarshaller.cs b/src/OpenWire/V7/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V7/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/LastPartialCommandMarshaller.cs b/src/OpenWire/V7/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V7/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/LocalTransactionIdMarshaller.cs b/src/OpenWire/V7/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V7/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MarshallerFactory.cs b/src/OpenWire/V7/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MarshallerFactory.cs
rename to src/OpenWire/V7/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V7/MessageAckMarshaller.cs b/src/OpenWire/V7/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessageAckMarshaller.cs
rename to src/OpenWire/V7/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MessageDispatchMarshaller.cs b/src/OpenWire/V7/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessageDispatchMarshaller.cs
rename to src/OpenWire/V7/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V7/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V7/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MessageIdMarshaller.cs b/src/OpenWire/V7/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessageIdMarshaller.cs
rename to src/OpenWire/V7/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MessageMarshaller.cs b/src/OpenWire/V7/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessageMarshaller.cs
rename to src/OpenWire/V7/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MessagePullMarshaller.cs b/src/OpenWire/V7/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessagePullMarshaller.cs
rename to src/OpenWire/V7/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V7/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V7/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/PartialCommandMarshaller.cs b/src/OpenWire/V7/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/PartialCommandMarshaller.cs
rename to src/OpenWire/V7/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ProducerAckMarshaller.cs b/src/OpenWire/V7/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ProducerAckMarshaller.cs
rename to src/OpenWire/V7/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ProducerIdMarshaller.cs b/src/OpenWire/V7/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ProducerIdMarshaller.cs
rename to src/OpenWire/V7/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ProducerInfoMarshaller.cs b/src/OpenWire/V7/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ProducerInfoMarshaller.cs
rename to src/OpenWire/V7/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/RemoveInfoMarshaller.cs b/src/OpenWire/V7/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/RemoveInfoMarshaller.cs
rename to src/OpenWire/V7/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V7/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V7/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ReplayCommandMarshaller.cs b/src/OpenWire/V7/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ReplayCommandMarshaller.cs
rename to src/OpenWire/V7/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ResponseMarshaller.cs b/src/OpenWire/V7/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ResponseMarshaller.cs
rename to src/OpenWire/V7/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/SessionIdMarshaller.cs b/src/OpenWire/V7/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/SessionIdMarshaller.cs
rename to src/OpenWire/V7/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/SessionInfoMarshaller.cs b/src/OpenWire/V7/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/SessionInfoMarshaller.cs
rename to src/OpenWire/V7/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ShutdownInfoMarshaller.cs b/src/OpenWire/V7/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V7/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/SubscriptionInfoMarshaller.cs b/src/OpenWire/V7/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V7/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/TransactionIdMarshaller.cs b/src/OpenWire/V7/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/TransactionIdMarshaller.cs
rename to src/OpenWire/V7/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/TransactionInfoMarshaller.cs b/src/OpenWire/V7/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/TransactionInfoMarshaller.cs
rename to src/OpenWire/V7/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/WireFormatInfoMarshaller.cs b/src/OpenWire/V7/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V7/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/XATransactionIdMarshaller.cs b/src/OpenWire/V7/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/XATransactionIdMarshaller.cs
rename to src/OpenWire/V7/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V8/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V8/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQQueueMarshaller.cs b/src/OpenWire/V8/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V8/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V8/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V8/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V8/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V8/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V8/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V8/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQTopicMarshaller.cs b/src/OpenWire/V8/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V8/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/BaseCommandMarshaller.cs b/src/OpenWire/V8/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/BaseCommandMarshaller.cs
rename to src/OpenWire/V8/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/BrokerIdMarshaller.cs b/src/OpenWire/V8/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/BrokerIdMarshaller.cs
rename to src/OpenWire/V8/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/BrokerInfoMarshaller.cs b/src/OpenWire/V8/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/BrokerInfoMarshaller.cs
rename to src/OpenWire/V8/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConnectionControlMarshaller.cs b/src/OpenWire/V8/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConnectionControlMarshaller.cs
rename to src/OpenWire/V8/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConnectionErrorMarshaller.cs b/src/OpenWire/V8/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V8/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConnectionIdMarshaller.cs b/src/OpenWire/V8/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConnectionIdMarshaller.cs
rename to src/OpenWire/V8/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConnectionInfoMarshaller.cs b/src/OpenWire/V8/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V8/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConsumerControlMarshaller.cs b/src/OpenWire/V8/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConsumerControlMarshaller.cs
rename to src/OpenWire/V8/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConsumerIdMarshaller.cs b/src/OpenWire/V8/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConsumerIdMarshaller.cs
rename to src/OpenWire/V8/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConsumerInfoMarshaller.cs b/src/OpenWire/V8/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V8/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ControlCommandMarshaller.cs b/src/OpenWire/V8/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ControlCommandMarshaller.cs
rename to src/OpenWire/V8/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/DataArrayResponseMarshaller.cs b/src/OpenWire/V8/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V8/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/DataResponseMarshaller.cs b/src/OpenWire/V8/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/DataResponseMarshaller.cs
rename to src/OpenWire/V8/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/DestinationInfoMarshaller.cs b/src/OpenWire/V8/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/DestinationInfoMarshaller.cs
rename to src/OpenWire/V8/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/DiscoveryEventMarshaller.cs b/src/OpenWire/V8/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V8/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ExceptionResponseMarshaller.cs b/src/OpenWire/V8/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V8/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/FlushCommandMarshaller.cs b/src/OpenWire/V8/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/FlushCommandMarshaller.cs
rename to src/OpenWire/V8/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/IntegerResponseMarshaller.cs b/src/OpenWire/V8/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/IntegerResponseMarshaller.cs
rename to src/OpenWire/V8/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/JournalQueueAckMarshaller.cs b/src/OpenWire/V8/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V8/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/JournalTopicAckMarshaller.cs b/src/OpenWire/V8/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V8/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/JournalTraceMarshaller.cs b/src/OpenWire/V8/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/JournalTraceMarshaller.cs
rename to src/OpenWire/V8/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/JournalTransactionMarshaller.cs b/src/OpenWire/V8/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/JournalTransactionMarshaller.cs
rename to src/OpenWire/V8/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/KeepAliveInfoMarshaller.cs b/src/OpenWire/V8/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V8/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/LastPartialCommandMarshaller.cs b/src/OpenWire/V8/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V8/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/LocalTransactionIdMarshaller.cs b/src/OpenWire/V8/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V8/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MarshallerFactory.cs b/src/OpenWire/V8/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MarshallerFactory.cs
rename to src/OpenWire/V8/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V8/MessageAckMarshaller.cs b/src/OpenWire/V8/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessageAckMarshaller.cs
rename to src/OpenWire/V8/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MessageDispatchMarshaller.cs b/src/OpenWire/V8/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessageDispatchMarshaller.cs
rename to src/OpenWire/V8/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V8/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V8/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MessageIdMarshaller.cs b/src/OpenWire/V8/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessageIdMarshaller.cs
rename to src/OpenWire/V8/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MessageMarshaller.cs b/src/OpenWire/V8/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessageMarshaller.cs
rename to src/OpenWire/V8/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MessagePullMarshaller.cs b/src/OpenWire/V8/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessagePullMarshaller.cs
rename to src/OpenWire/V8/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V8/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V8/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/PartialCommandMarshaller.cs b/src/OpenWire/V8/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/PartialCommandMarshaller.cs
rename to src/OpenWire/V8/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ProducerAckMarshaller.cs b/src/OpenWire/V8/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ProducerAckMarshaller.cs
rename to src/OpenWire/V8/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ProducerIdMarshaller.cs b/src/OpenWire/V8/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ProducerIdMarshaller.cs
rename to src/OpenWire/V8/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ProducerInfoMarshaller.cs b/src/OpenWire/V8/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ProducerInfoMarshaller.cs
rename to src/OpenWire/V8/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/RemoveInfoMarshaller.cs b/src/OpenWire/V8/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/RemoveInfoMarshaller.cs
rename to src/OpenWire/V8/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V8/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V8/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ReplayCommandMarshaller.cs b/src/OpenWire/V8/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ReplayCommandMarshaller.cs
rename to src/OpenWire/V8/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ResponseMarshaller.cs b/src/OpenWire/V8/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ResponseMarshaller.cs
rename to src/OpenWire/V8/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/SessionIdMarshaller.cs b/src/OpenWire/V8/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/SessionIdMarshaller.cs
rename to src/OpenWire/V8/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/SessionInfoMarshaller.cs b/src/OpenWire/V8/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/SessionInfoMarshaller.cs
rename to src/OpenWire/V8/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ShutdownInfoMarshaller.cs b/src/OpenWire/V8/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V8/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/SubscriptionInfoMarshaller.cs b/src/OpenWire/V8/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V8/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/TransactionIdMarshaller.cs b/src/OpenWire/V8/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/TransactionIdMarshaller.cs
rename to src/OpenWire/V8/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/TransactionInfoMarshaller.cs b/src/OpenWire/V8/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/TransactionInfoMarshaller.cs
rename to src/OpenWire/V8/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/WireFormatInfoMarshaller.cs b/src/OpenWire/V8/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V8/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/XATransactionIdMarshaller.cs b/src/OpenWire/V8/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/XATransactionIdMarshaller.cs
rename to src/OpenWire/V8/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V9/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V9/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQQueueMarshaller.cs b/src/OpenWire/V9/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V9/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V9/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V9/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V9/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V9/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V9/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V9/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQTopicMarshaller.cs b/src/OpenWire/V9/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V9/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/BaseCommandMarshaller.cs b/src/OpenWire/V9/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/BaseCommandMarshaller.cs
rename to src/OpenWire/V9/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/BrokerIdMarshaller.cs b/src/OpenWire/V9/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/BrokerIdMarshaller.cs
rename to src/OpenWire/V9/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/BrokerInfoMarshaller.cs b/src/OpenWire/V9/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/BrokerInfoMarshaller.cs
rename to src/OpenWire/V9/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConnectionControlMarshaller.cs b/src/OpenWire/V9/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConnectionControlMarshaller.cs
rename to src/OpenWire/V9/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConnectionErrorMarshaller.cs b/src/OpenWire/V9/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V9/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConnectionIdMarshaller.cs b/src/OpenWire/V9/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConnectionIdMarshaller.cs
rename to src/OpenWire/V9/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConnectionInfoMarshaller.cs b/src/OpenWire/V9/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V9/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConsumerControlMarshaller.cs b/src/OpenWire/V9/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConsumerControlMarshaller.cs
rename to src/OpenWire/V9/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConsumerIdMarshaller.cs b/src/OpenWire/V9/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConsumerIdMarshaller.cs
rename to src/OpenWire/V9/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConsumerInfoMarshaller.cs b/src/OpenWire/V9/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V9/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ControlCommandMarshaller.cs b/src/OpenWire/V9/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ControlCommandMarshaller.cs
rename to src/OpenWire/V9/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/DataArrayResponseMarshaller.cs b/src/OpenWire/V9/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V9/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/DataResponseMarshaller.cs b/src/OpenWire/V9/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/DataResponseMarshaller.cs
rename to src/OpenWire/V9/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/DestinationInfoMarshaller.cs b/src/OpenWire/V9/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/DestinationInfoMarshaller.cs
rename to src/OpenWire/V9/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/DiscoveryEventMarshaller.cs b/src/OpenWire/V9/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V9/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ExceptionResponseMarshaller.cs b/src/OpenWire/V9/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V9/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/FlushCommandMarshaller.cs b/src/OpenWire/V9/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/FlushCommandMarshaller.cs
rename to src/OpenWire/V9/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/IntegerResponseMarshaller.cs b/src/OpenWire/V9/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/IntegerResponseMarshaller.cs
rename to src/OpenWire/V9/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/JournalQueueAckMarshaller.cs b/src/OpenWire/V9/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V9/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/JournalTopicAckMarshaller.cs b/src/OpenWire/V9/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V9/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/JournalTraceMarshaller.cs b/src/OpenWire/V9/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/JournalTraceMarshaller.cs
rename to src/OpenWire/V9/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/JournalTransactionMarshaller.cs b/src/OpenWire/V9/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/JournalTransactionMarshaller.cs
rename to src/OpenWire/V9/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/KeepAliveInfoMarshaller.cs b/src/OpenWire/V9/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V9/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/LastPartialCommandMarshaller.cs b/src/OpenWire/V9/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V9/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/LocalTransactionIdMarshaller.cs b/src/OpenWire/V9/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V9/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MarshallerFactory.cs b/src/OpenWire/V9/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MarshallerFactory.cs
rename to src/OpenWire/V9/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V9/MessageAckMarshaller.cs b/src/OpenWire/V9/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessageAckMarshaller.cs
rename to src/OpenWire/V9/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MessageDispatchMarshaller.cs b/src/OpenWire/V9/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessageDispatchMarshaller.cs
rename to src/OpenWire/V9/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V9/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V9/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MessageIdMarshaller.cs b/src/OpenWire/V9/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessageIdMarshaller.cs
rename to src/OpenWire/V9/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MessageMarshaller.cs b/src/OpenWire/V9/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessageMarshaller.cs
rename to src/OpenWire/V9/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MessagePullMarshaller.cs b/src/OpenWire/V9/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessagePullMarshaller.cs
rename to src/OpenWire/V9/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V9/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V9/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/PartialCommandMarshaller.cs b/src/OpenWire/V9/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/PartialCommandMarshaller.cs
rename to src/OpenWire/V9/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ProducerAckMarshaller.cs b/src/OpenWire/V9/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ProducerAckMarshaller.cs
rename to src/OpenWire/V9/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ProducerIdMarshaller.cs b/src/OpenWire/V9/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ProducerIdMarshaller.cs
rename to src/OpenWire/V9/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ProducerInfoMarshaller.cs b/src/OpenWire/V9/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ProducerInfoMarshaller.cs
rename to src/OpenWire/V9/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/RemoveInfoMarshaller.cs b/src/OpenWire/V9/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/RemoveInfoMarshaller.cs
rename to src/OpenWire/V9/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V9/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V9/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ReplayCommandMarshaller.cs b/src/OpenWire/V9/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ReplayCommandMarshaller.cs
rename to src/OpenWire/V9/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ResponseMarshaller.cs b/src/OpenWire/V9/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ResponseMarshaller.cs
rename to src/OpenWire/V9/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/SessionIdMarshaller.cs b/src/OpenWire/V9/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/SessionIdMarshaller.cs
rename to src/OpenWire/V9/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/SessionInfoMarshaller.cs b/src/OpenWire/V9/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/SessionInfoMarshaller.cs
rename to src/OpenWire/V9/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ShutdownInfoMarshaller.cs b/src/OpenWire/V9/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V9/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/SubscriptionInfoMarshaller.cs b/src/OpenWire/V9/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V9/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/TransactionIdMarshaller.cs b/src/OpenWire/V9/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/TransactionIdMarshaller.cs
rename to src/OpenWire/V9/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/TransactionInfoMarshaller.cs b/src/OpenWire/V9/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/TransactionInfoMarshaller.cs
rename to src/OpenWire/V9/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/WireFormatInfoMarshaller.cs b/src/OpenWire/V9/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V9/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/XATransactionIdMarshaller.cs b/src/OpenWire/V9/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/XATransactionIdMarshaller.cs
rename to src/OpenWire/V9/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/PrefetchPolicy.cs b/src/PrefetchPolicy.cs
similarity index 100%
rename from src/main/csharp/PrefetchPolicy.cs
rename to src/PrefetchPolicy.cs
diff --git a/src/main/csharp/QueueBrowser.cs b/src/QueueBrowser.cs
similarity index 100%
rename from src/main/csharp/QueueBrowser.cs
rename to src/QueueBrowser.cs
diff --git a/src/main/csharp/RequestTimedOutException.cs b/src/RequestTimedOutException.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/RequestTimedOutException.cs
rename to src/RequestTimedOutException.cs
diff --git a/src/main/csharp/Session.cs b/src/Session.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Session.cs
rename to src/Session.cs
diff --git a/src/main/csharp/SessionExecutor.cs b/src/SessionExecutor.cs
similarity index 100%
rename from src/main/csharp/SessionExecutor.cs
rename to src/SessionExecutor.cs
diff --git a/src/main/csharp/State/CommandVisitorAdapter.cs b/src/State/CommandVisitorAdapter.cs
similarity index 100%
rename from src/main/csharp/State/CommandVisitorAdapter.cs
rename to src/State/CommandVisitorAdapter.cs
diff --git a/src/main/csharp/State/ConnectionState.cs b/src/State/ConnectionState.cs
similarity index 99%
rename from src/main/csharp/State/ConnectionState.cs
rename to src/State/ConnectionState.cs
index 3fd568f..ad16d92 100644
--- a/src/main/csharp/State/ConnectionState.cs
+++ b/src/State/ConnectionState.cs
@@ -77,25 +77,25 @@
 
 		public void AddTransactionState(TransactionId id)
 		{
-			CheckShutdown();

-			TransactionState transactionState = new TransactionState(id);

-

-			if(transactions.ContainsKey(id))

-			{

-				transactions[id] = transactionState;

-			}

-			else

-			{

-				transactions.Add(id, transactionState);

+			CheckShutdown();
+			TransactionState transactionState = new TransactionState(id);
+
+			if(transactions.ContainsKey(id))
+			{
+				transactions[id] = transactionState;
+			}
+			else
+			{
+				transactions.Add(id, transactionState);
 			}
 		}
 
 		public TransactionState this[TransactionId id]
 		{
 			get
-			{

-				TransactionState state = null;

-

+			{
+				TransactionState state = null;
+
 				transactions.TryGetValue(id, out state);
 				return state;
 			}
@@ -109,36 +109,36 @@
 		public SessionState this[SessionId id]
 		{
 			get
-			{

-				SessionState sessionState = null;

-

+			{
+				SessionState sessionState = null;
+
 				sessions.TryGetValue(id, out sessionState);
 
-#if DEBUG

-				if(null == sessionState)

-				{

-					// Useful for dignosing missing session ids

-					string sessionList = string.Empty;

-					foreach(SessionId sessionId in sessions.Keys)

-					{

-						sessionList += sessionId.ToString() + "\n";

-					}

-

-					System.Diagnostics.Debug.Assert(false,

-						string.Format("Session '{0}' did not exist in the sessions collection.\n\nSessions:-\n{1}", id, sessionList));

+#if DEBUG
+				if(null == sessionState)
+				{
+					// Useful for dignosing missing session ids
+					string sessionList = string.Empty;
+					foreach(SessionId sessionId in sessions.Keys)
+					{
+						sessionList += sessionId.ToString() + "\n";
+					}
+
+					System.Diagnostics.Debug.Assert(false,
+						string.Format("Session '{0}' did not exist in the sessions collection.\n\nSessions:-\n{1}", id, sessionList));
 				}
-#endif

-				return sessionState;

+#endif
+				return sessionState;
 			}
 		}
 
 		public TransactionState RemoveTransactionState(TransactionId id)
 		{
-			TransactionState ret = null;

-

-			if(transactions.TryGetValue(id, out ret))

-			{

-				transactions.Remove(id);

+			TransactionState ret = null;
+
+			if(transactions.TryGetValue(id, out ret))
+			{
+				transactions.Remove(id);
 			}
 
 			return ret;
@@ -146,26 +146,26 @@
 
 		public void AddSession(SessionInfo info)
 		{
-			CheckShutdown();

-			SessionState sessionState = new SessionState(info);

-

-			if(sessions.ContainsKey(info.SessionId))

-			{

-				sessions[info.SessionId] = sessionState;

-			}

-			else

-			{

-				sessions.Add(info.SessionId, sessionState);

+			CheckShutdown();
+			SessionState sessionState = new SessionState(info);
+
+			if(sessions.ContainsKey(info.SessionId))
+			{
+				sessions[info.SessionId] = sessionState;
+			}
+			else
+			{
+				sessions.Add(info.SessionId, sessionState);
 			}
 		}
 
 		public SessionState RemoveSession(SessionId id)
 		{
-			SessionState ret = null;

-

-			if(sessions.TryGetValue(id, out ret))

-			{

-				sessions.Remove(id);

+			SessionState ret = null;
+
+			if(sessions.TryGetValue(id, out ret))
+			{
+				sessions.Remove(id);
 			}
 
 			return ret;
diff --git a/src/main/csharp/State/ConnectionStateTracker.cs b/src/State/ConnectionStateTracker.cs
similarity index 99%
rename from src/main/csharp/State/ConnectionStateTracker.cs
rename to src/State/ConnectionStateTracker.cs
index 852faef..9c88eee 100644
--- a/src/main/csharp/State/ConnectionStateTracker.cs
+++ b/src/State/ConnectionStateTracker.cs
@@ -480,18 +480,18 @@
         }
 
         public override Response ProcessAddConnection(ConnectionInfo info)
-        {

+        {
             if(info != null)
-            {

-                ConnectionState connState = new ConnectionState(info);

-

-                if(connectionStates.ContainsKey(info.ConnectionId))

-                {

-                    connectionStates[info.ConnectionId] = connState;

-                }

-                else

-                {

-                    connectionStates.Add(info.ConnectionId, connState);

+            {
+                ConnectionState connState = new ConnectionState(info);
+
+                if(connectionStates.ContainsKey(info.ConnectionId))
+                {
+                    connectionStates[info.ConnectionId] = connState;
+                }
+                else
+                {
+                    connectionStates.Add(info.ConnectionId, connState);
                 }
             }
 
diff --git a/src/main/csharp/State/ConsumerState.cs b/src/State/ConsumerState.cs
similarity index 100%
rename from src/main/csharp/State/ConsumerState.cs
rename to src/State/ConsumerState.cs
diff --git a/src/main/csharp/State/ICommandVisitor.cs b/src/State/ICommandVisitor.cs
similarity index 100%
rename from src/main/csharp/State/ICommandVisitor.cs
rename to src/State/ICommandVisitor.cs
diff --git a/src/main/csharp/State/ProducerState.cs b/src/State/ProducerState.cs
similarity index 100%
rename from src/main/csharp/State/ProducerState.cs
rename to src/State/ProducerState.cs
diff --git a/src/main/csharp/State/ResponseHandler.cs b/src/State/ResponseHandler.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/State/ResponseHandler.cs
rename to src/State/ResponseHandler.cs
diff --git a/src/main/csharp/State/SessionState.cs b/src/State/SessionState.cs
similarity index 99%
rename from src/main/csharp/State/SessionState.cs
rename to src/State/SessionState.cs
index 9ef7ef9..7c9e8b4 100644
--- a/src/main/csharp/State/SessionState.cs
+++ b/src/State/SessionState.cs
@@ -43,31 +43,31 @@
 
 		public void AddProducer(ProducerInfo info)
 		{
-			CheckShutdown();

-			ProducerState producerState = new ProducerState(info);

-

-			if(producers.ContainsKey(info.ProducerId))

-			{

-				producers[info.ProducerId] = producerState;

-			}

-			else

-			{

-				producers.Add(info.ProducerId, producerState);

+			CheckShutdown();
+			ProducerState producerState = new ProducerState(info);
+
+			if(producers.ContainsKey(info.ProducerId))
+			{
+				producers[info.ProducerId] = producerState;
+			}
+			else
+			{
+				producers.Add(info.ProducerId, producerState);
 			}
 		}
 
 		public ProducerState RemoveProducer(ProducerId id)
-		{

+		{
 			CheckShutdown();
-			ProducerState ret = null;

-

-			if(producers.TryGetValue(id, out ret))

-			{

-				producers.Remove(id);

-				if(null != ret && ret.TransactionState != null)

-				{

-					ret.TransactionState.AddProducer(ret);

-				}

+			ProducerState ret = null;
+
+			if(producers.TryGetValue(id, out ret))
+			{
+				producers.Remove(id);
+				if(null != ret && ret.TransactionState != null)
+				{
+					ret.TransactionState.AddProducer(ret);
+				}
 			}
 
 			return ret;
@@ -75,27 +75,27 @@
 
 		public void AddConsumer(ConsumerInfo info)
 		{
-			CheckShutdown();

-			ConsumerState consumerState = new ConsumerState(info);

-

-			if(consumers.ContainsKey(info.ConsumerId))

-			{

-				consumers.Add(info.ConsumerId, consumerState);

-			}

-			else

-			{

-				consumers.Add(info.ConsumerId, consumerState);

+			CheckShutdown();
+			ConsumerState consumerState = new ConsumerState(info);
+
+			if(consumers.ContainsKey(info.ConsumerId))
+			{
+				consumers.Add(info.ConsumerId, consumerState);
+			}
+			else
+			{
+				consumers.Add(info.ConsumerId, consumerState);
 			}
 		}
 
 		public ConsumerState RemoveConsumer(ConsumerId id)
-		{

+		{
 			CheckShutdown();
-			ConsumerState ret = null;

-

-			if(consumers.TryGetValue(id, out ret))

-			{

-				consumers.Remove(id);

+			ConsumerState ret = null;
+
+			if(consumers.TryGetValue(id, out ret))
+			{
+				consumers.Remove(id);
 			}
 
 			return ret;
diff --git a/src/main/csharp/State/SynchronizedObjects.cs b/src/State/SynchronizedObjects.cs
similarity index 99%
rename from src/main/csharp/State/SynchronizedObjects.cs
rename to src/State/SynchronizedObjects.cs
index f021c72..42e7b65 100644
--- a/src/main/csharp/State/SynchronizedObjects.cs
+++ b/src/State/SynchronizedObjects.cs
@@ -217,22 +217,22 @@
 			{
 				return _dictionary.Remove(v);
 			}
-		}

-

-		public bool ContainsKey(TKey k)

-		{

-			lock(((ICollection) _dictionary).SyncRoot)

-			{

-				return _dictionary.ContainsKey(k);

-			}

-		}

-

-		public bool ContainsValue(TValue v)

-		{

-			lock(((ICollection) _dictionary).SyncRoot)

-			{

-				return _dictionary.ContainsValue(v);

-			}

-		}

+		}
+
+		public bool ContainsKey(TKey k)
+		{
+			lock(((ICollection) _dictionary).SyncRoot)
+			{
+				return _dictionary.ContainsKey(k);
+			}
+		}
+
+		public bool ContainsValue(TValue v)
+		{
+			lock(((ICollection) _dictionary).SyncRoot)
+			{
+				return _dictionary.ContainsValue(v);
+			}
+		}
 	}
 }
diff --git a/src/main/csharp/State/Tracked.cs b/src/State/Tracked.cs
similarity index 100%
rename from src/main/csharp/State/Tracked.cs
rename to src/State/Tracked.cs
diff --git a/src/main/csharp/State/TransactionState.cs b/src/State/TransactionState.cs
similarity index 99%
rename from src/main/csharp/State/TransactionState.cs
rename to src/State/TransactionState.cs
index 5923b24..00505a1 100644
--- a/src/main/csharp/State/TransactionState.cs
+++ b/src/State/TransactionState.cs
@@ -87,14 +87,14 @@
 
         public void AddProducer(ProducerState producer)
         {
-			CheckShutdown();

-			if(this.producers.ContainsKey(producer.Info.ProducerId))

-			{

-				this.producers[producer.Info.ProducerId] = producer;

-			}

-			else

-			{

-				this.producers.Add(producer.Info.ProducerId, producer);

+			CheckShutdown();
+			if(this.producers.ContainsKey(producer.Info.ProducerId))
+			{
+				this.producers[producer.Info.ProducerId] = producer;
+			}
+			else
+			{
+				this.producers.Add(producer.Info.ProducerId, producer);
 			}
         }
 
diff --git a/src/main/csharp/Threads/CompositeTask.cs b/src/Threads/CompositeTask.cs
similarity index 100%
rename from src/main/csharp/Threads/CompositeTask.cs
rename to src/Threads/CompositeTask.cs
diff --git a/src/main/csharp/Threads/CompositeTaskRunner.cs b/src/Threads/CompositeTaskRunner.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Threads/CompositeTaskRunner.cs
rename to src/Threads/CompositeTaskRunner.cs
diff --git a/src/main/csharp/Threads/DedicatedTaskRunner.cs b/src/Threads/DedicatedTaskRunner.cs
similarity index 100%
rename from src/main/csharp/Threads/DedicatedTaskRunner.cs
rename to src/Threads/DedicatedTaskRunner.cs
diff --git a/src/main/csharp/Threads/DefaultThreadPools.cs b/src/Threads/DefaultThreadPools.cs
similarity index 99%
rename from src/main/csharp/Threads/DefaultThreadPools.cs
rename to src/Threads/DefaultThreadPools.cs
index 32c8494..cf27feb 100644
--- a/src/main/csharp/Threads/DefaultThreadPools.cs
+++ b/src/Threads/DefaultThreadPools.cs
@@ -1,33 +1,33 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-namespace Apache.NMS.ActiveMQ.Threads

-{

-	public class DefaultThreadPools

-	{

-		private static readonly TaskRunnerFactory taskRunnerFactory = new TaskRunnerFactory();

-

-		private DefaultThreadPools()

-		{

-		}

-

-		public static TaskRunnerFactory DefaultTaskRunnerFactory

-		{

-			get { return taskRunnerFactory; }

-		}

-	}

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.NMS.ActiveMQ.Threads
+{
+	public class DefaultThreadPools
+	{
+		private static readonly TaskRunnerFactory taskRunnerFactory = new TaskRunnerFactory();
+
+		private DefaultThreadPools()
+		{
+		}
+
+		public static TaskRunnerFactory DefaultTaskRunnerFactory
+		{
+			get { return taskRunnerFactory; }
+		}
+	}
+}
diff --git a/src/main/csharp/Threads/PooledTaskRunner.cs b/src/Threads/PooledTaskRunner.cs
similarity index 95%
rename from src/main/csharp/Threads/PooledTaskRunner.cs
rename to src/Threads/PooledTaskRunner.cs
index 2deb799..ad405b8 100644
--- a/src/main/csharp/Threads/PooledTaskRunner.cs
+++ b/src/Threads/PooledTaskRunner.cs
@@ -1,193 +1,195 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.Threading;

-

-namespace Apache.NMS.ActiveMQ.Threads

-{

-	class PooledTaskRunner : TaskRunner

-	{

-		private readonly int maxIterationsPerRun;

-		private readonly Task task;

-		private readonly Object runable = new Object();

-		private bool queued;

-		private bool _shutdown;

-		private bool iterating;

-		private volatile System.Threading.Thread runningThread;

-

-		public void Run(Object o)

-		{

-			PooledTaskRunner p = o as PooledTaskRunner;

-			p.runningThread = System.Threading.Thread.CurrentThread;

-			try

-			{

-				p.RunTask();

-			}

-			finally

-			{

-				p.runningThread = null;

-			}

-		}

-

-		public PooledTaskRunner(Task task, int maxIterationsPerRun)

-		{

-			this.maxIterationsPerRun = maxIterationsPerRun;

-			this.task = task;

-			this._shutdown = false;

-			this.iterating = false;

-			this.queued = true;

-			ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);

-		}

-

-		/// <summary>

-		/// We Expect MANY wakeup calls on the same TaskRunner.

-		/// </summary>

-		public void Wakeup()

-		{

-			lock(runable)

-			{

-				// When we get in here, we make some assumptions of state:

-				// queued=false, iterating=false: wakeup() has not be called and

-				// therefore task is not executing.

-				// queued=true, iterating=false: wakeup() was called but, task

-				// execution has not started yet

-				// queued=false, iterating=true : wakeup() was called, which caused

-				// task execution to start.

-				// queued=true, iterating=true : wakeup() called after task

-				// execution was started.

-

-				if(queued || _shutdown)

-				{

-					return;

-				}

-

-				queued = true;

-

-				// The runTask() method will do this for me once we are done

-				// iterating.

-				if(!iterating)

-				{

-					ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);

-				}

-			}

-		}

-

-		/// <summary>

-		/// shut down the task

-		/// </summary>

-		/// <param name="timeout"></param>

-		public void Shutdown(TimeSpan timeout)

-		{

-			lock(runable)

-			{

-				_shutdown = true;

-				// the check on the thread is done

-				// because a call to iterate can result in

-				// shutDown() being called, which would wait forever

-				// waiting for iterating to finish

-				if(runningThread != System.Threading.Thread.CurrentThread)

-				{

-					if(iterating)

-					{

-						System.Threading.Thread.Sleep(timeout);

-					}

-				}

-			}

-		}

-

-        public void ShutdownWithAbort(TimeSpan timeout)

-        {

-            lock(runable)

-            {

-                _shutdown = true;

-

-                if(runningThread != System.Threading.Thread.CurrentThread)

-                {

-                    if(iterating)

-                    {

-                        System.Threading.Thread.Sleep(timeout);

-                    }

-

-                    if(iterating)

-                    {

-                        runningThread.Abort();

-                    }

-                }

-            }

-        }

-

-		public void Shutdown()

-		{

-			Shutdown(new TimeSpan(Timeout.Infinite));

-		}

-

-		internal void RunTask()

-		{

-			lock(runable)

-			{

-				queued = false;

-				if(_shutdown)

-				{

-					iterating = false;

-					return;

-				}

-				iterating = true;

-			}

-

-			// Don't synchronize while we are iterating so that

-			// multiple wakeup() calls can be executed concurrently.

-			bool done = false;

-			try

-			{

-				for(int i = 0; i < maxIterationsPerRun; i++)

-				{

-					if(!task.Iterate())

-					{

-						done = true;

-						break;

-					}

-				}

-			}

-			finally

-			{

-				lock(runable)

-				{

-					iterating = false;

-					if(_shutdown)

-					{

-						queued = false;

-					}

-					else

-					{

-						// If we could not iterate all the items

-						// then we need to re-queue.

-						if(!done)

-						{

-							queued = true;

-						}

-

-						if(queued)

-						{

-							ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);

-						}

-					}

-				}

-			}

-		}

-	}

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Concurrent;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Apache.NMS.ActiveMQ.Threads
+{
+	class PooledTaskRunner : TaskRunner
+	{
+		private readonly int maxIterationsPerRun;
+		private readonly Task task;
+		private readonly Object runable = new Object();
+		private bool queued;
+		private bool _shutdown;
+		private bool iterating;
+		private volatile System.Threading.Thread runningThread;
+
+		public void Run(Object o)
+		{
+			PooledTaskRunner p = o as PooledTaskRunner;
+			p.runningThread = System.Threading.Thread.CurrentThread;
+			try
+			{
+				p.RunTask();
+			}
+			finally
+			{
+				p.runningThread = null;
+			}
+		}
+
+		public PooledTaskRunner(Task task, int maxIterationsPerRun)
+		{
+			this.maxIterationsPerRun = maxIterationsPerRun;
+			this.task = task;
+			this._shutdown = false;
+			this.iterating = false;
+			this.queued = true;
+			ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);
+		}
+
+		/// <summary>
+		/// We Expect MANY wakeup calls on the same TaskRunner.
+		/// </summary>
+		public void Wakeup()
+		{
+			lock(runable)
+			{
+				// When we get in here, we make some assumptions of state:
+				// queued=false, iterating=false: wakeup() has not be called and
+				// therefore task is not executing.
+				// queued=true, iterating=false: wakeup() was called but, task
+				// execution has not started yet
+				// queued=false, iterating=true : wakeup() was called, which caused
+				// task execution to start.
+				// queued=true, iterating=true : wakeup() called after task
+				// execution was started.
+
+				if(queued || _shutdown)
+				{
+					return;
+				}
+
+				queued = true;
+
+				// The runTask() method will do this for me once we are done
+				// iterating.
+				if(!iterating)
+				{
+					ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);
+				}
+			}
+		}
+
+		/// <summary>
+		/// shut down the task
+		/// </summary>
+		/// <param name="timeout"></param>
+		public void Shutdown(TimeSpan timeout)
+		{
+			lock(runable)
+			{
+				_shutdown = true;
+				// the check on the thread is done
+				// because a call to iterate can result in
+				// shutDown() being called, which would wait forever
+				// waiting for iterating to finish
+				if(runningThread != System.Threading.Thread.CurrentThread)
+				{
+					if(iterating)
+					{
+						System.Threading.Thread.Sleep(timeout);
+					}
+				}
+			}
+		}
+
+        public void ShutdownWithAbort(TimeSpan timeout)
+        {
+            lock(runable)
+            {
+                _shutdown = true;
+
+                if (runningThread != Thread.CurrentThread)
+                {
+                    if(iterating)
+                    {
+                        Thread.Sleep(timeout);
+                    }
+
+                    if(iterating)
+                    {
+                        runningThread.Abort();
+					}
+                }
+            }
+        }
+
+        public void Shutdown()
+		{
+			Shutdown(new TimeSpan(Timeout.Infinite));
+		}
+
+		internal void RunTask()
+		{
+			lock(runable)
+			{
+				queued = false;
+				if(_shutdown)
+				{
+					iterating = false;
+					return;
+				}
+				iterating = true;
+			}
+
+			// Don't synchronize while we are iterating so that
+			// multiple wakeup() calls can be executed concurrently.
+			bool done = false;
+			try
+			{
+				for(int i = 0; i < maxIterationsPerRun; i++)
+				{
+					if(!task.Iterate())
+					{
+						done = true;
+						break;
+					}
+				}
+			}
+			finally
+			{
+				lock(runable)
+				{
+					iterating = false;
+					if(_shutdown)
+					{
+						queued = false;
+					}
+					else
+					{
+						// If we could not iterate all the items
+						// then we need to re-queue.
+						if(!done)
+						{
+							queued = true;
+						}
+
+						if(queued)
+						{
+							ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);
+						}
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/src/main/csharp/Threads/Scheduler.cs b/src/Threads/Scheduler.cs
similarity index 100%
rename from src/main/csharp/Threads/Scheduler.cs
rename to src/Threads/Scheduler.cs
diff --git a/src/main/csharp/Threads/Task.cs b/src/Threads/Task.cs
similarity index 99%
rename from src/main/csharp/Threads/Task.cs
rename to src/Threads/Task.cs
index 4d26e91..b8aad4f 100644
--- a/src/main/csharp/Threads/Task.cs
+++ b/src/Threads/Task.cs
@@ -1,36 +1,36 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-namespace Apache.NMS.ActiveMQ.Threads

-{

-	/// <summary>

-	/// Represents a task that may take a few iterations to complete.

-	/// </summary>

-	public interface Task

-	{

-		/// <summary>

-		/// Performs some portion of the work that this Task object is

-		/// assigned to complete.  When the task is entirely finished this

-		/// method should return false. 

-		/// </summary>

-		/// <returns>

-		/// A <see cref="System.Boolean"/> this indicates if this Task should 

-		/// be run again.

-		/// </returns>

-		bool Iterate();

-	}

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.NMS.ActiveMQ.Threads
+{
+	/// <summary>
+	/// Represents a task that may take a few iterations to complete.
+	/// </summary>
+	public interface Task
+	{
+		/// <summary>
+		/// Performs some portion of the work that this Task object is
+		/// assigned to complete.  When the task is entirely finished this
+		/// method should return false. 
+		/// </summary>
+		/// <returns>
+		/// A <see cref="System.Boolean"/> this indicates if this Task should 
+		/// be run again.
+		/// </returns>
+		bool Iterate();
+	}
+}
diff --git a/src/main/csharp/Threads/TaskRunner.cs b/src/Threads/TaskRunner.cs
similarity index 99%
rename from src/main/csharp/Threads/TaskRunner.cs
rename to src/Threads/TaskRunner.cs
index 5d46683..cd24e60 100644
--- a/src/main/csharp/Threads/TaskRunner.cs
+++ b/src/Threads/TaskRunner.cs
@@ -1,63 +1,63 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-

-namespace Apache.NMS.ActiveMQ.Threads

-{

-	/// <summary>

-	/// Allows you to request a thread execute the associated Task.

-	/// </summary>

-	public interface TaskRunner

-	{

-        /// <summary>

-        /// Wakeup the TaskRunner and have it check for any pending work that

-        /// needs to be completed.  If none is found it will go back to sleep

-        /// until another Wakeup call is made.

-        /// </summary>

-		void Wakeup();

-

-        /// <summary>

-        /// Attempt to Shutdown the TaskRunner, this method will wait indefinitely

-        /// for the TaskRunner to quite if the task runner is in a call to its Task's

-        /// run method and that never returns.

-        /// </summary>

-		void Shutdown();

-

-        /// <summary>

-        /// Performs a timed wait for the TaskRunner to shutdown.  If the TaskRunner

-        /// is in a call to its Task's run method and that does not return before the

-        /// timeout expires this method returns and the TaskRunner may remain in the

-        /// running state.

-        /// </summary>

-        /// <param name="timeout">

-        /// A <see cref="TimeSpan"/>

-        /// </param>

-		void Shutdown(TimeSpan timeout);

-

-        /// <summary>

-        /// Performs a timed wait for the TaskRunner to shutdown.  If the TaskRunner

-        /// is in a call to its Task's run method and that does not return before the

-        /// timeout expires this method sends an Abort to the Task thread and return.

-        /// </summary>

-        /// <param name="timeout">

-        /// A <see cref="TimeSpan"/>

-        /// </param>

-        void ShutdownWithAbort(TimeSpan timeout);

-

-	}

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Apache.NMS.ActiveMQ.Threads
+{
+	/// <summary>
+	/// Allows you to request a thread execute the associated Task.
+	/// </summary>
+	public interface TaskRunner
+	{
+        /// <summary>
+        /// Wakeup the TaskRunner and have it check for any pending work that
+        /// needs to be completed.  If none is found it will go back to sleep
+        /// until another Wakeup call is made.
+        /// </summary>
+		void Wakeup();
+
+        /// <summary>
+        /// Attempt to Shutdown the TaskRunner, this method will wait indefinitely
+        /// for the TaskRunner to quite if the task runner is in a call to its Task's
+        /// run method and that never returns.
+        /// </summary>
+		void Shutdown();
+
+        /// <summary>
+        /// Performs a timed wait for the TaskRunner to shutdown.  If the TaskRunner
+        /// is in a call to its Task's run method and that does not return before the
+        /// timeout expires this method returns and the TaskRunner may remain in the
+        /// running state.
+        /// </summary>
+        /// <param name="timeout">
+        /// A <see cref="TimeSpan"/>
+        /// </param>
+		void Shutdown(TimeSpan timeout);
+
+        /// <summary>
+        /// Performs a timed wait for the TaskRunner to shutdown.  If the TaskRunner
+        /// is in a call to its Task's run method and that does not return before the
+        /// timeout expires this method sends an Abort to the Task thread and return.
+        /// </summary>
+        /// <param name="timeout">
+        /// A <see cref="TimeSpan"/>
+        /// </param>
+        void ShutdownWithAbort(TimeSpan timeout);
+
+	}
+}
diff --git a/src/main/csharp/Threads/TaskRunnerFactory.cs b/src/Threads/TaskRunnerFactory.cs
similarity index 99%
rename from src/main/csharp/Threads/TaskRunnerFactory.cs
rename to src/Threads/TaskRunnerFactory.cs
index 9bb2599..fd5ab85 100644
--- a/src/main/csharp/Threads/TaskRunnerFactory.cs
+++ b/src/Threads/TaskRunnerFactory.cs
@@ -1,66 +1,66 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.Threading;

-

-namespace Apache.NMS.ActiveMQ.Threads

-{

-	/// <summary>

-	/// Manages the thread pool for long running tasks. Long running tasks are not

-	/// always active but when they are active, they may need a few iterations of

-	/// processing for them to become idle. The manager ensures that each task is

-	/// processes but that no one task overtakes the system. This is kina like

-	/// cooperative multitasking.

-    ///

-    /// If your OS/JVM combination has a good thread model, you may want to avoid

-    /// using a thread pool to run tasks and use a DedicatedTaskRunner instead.

-    /// </summary>

-	public class TaskRunnerFactory

-	{

-		public string name = "ActiveMQ Task";

-        public ThreadPriority priority = ThreadPriority.Normal;

-        public int maxIterationsPerRun = 1000;

-        public bool dedicatedTaskRunner = true;

-

-		public TaskRunnerFactory()

-		{

-		}

-

-        public TaskRunner CreateTaskRunner(Task task)

-        {

-            return CreateTaskRunner(task, this.name);

-        }

-

-        public TaskRunner CreateTaskRunner(Task task, string name)

-        {

-            return CreateTaskRunner(task, name, this.priority);

-        }

-

-		public TaskRunner CreateTaskRunner(Task task, string name, ThreadPriority taskPriority)

-		{

-            if(this.dedicatedTaskRunner)

-            {

-                return new DedicatedTaskRunner(task, name, taskPriority);

-            }

-            else

-            {

-                return new PooledTaskRunner(task, this.maxIterationsPerRun);

-            }

-		}

-	}

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Threading;
+
+namespace Apache.NMS.ActiveMQ.Threads
+{
+	/// <summary>
+	/// Manages the thread pool for long running tasks. Long running tasks are not
+	/// always active but when they are active, they may need a few iterations of
+	/// processing for them to become idle. The manager ensures that each task is
+	/// processes but that no one task overtakes the system. This is kina like
+	/// cooperative multitasking.
+    ///
+    /// If your OS/JVM combination has a good thread model, you may want to avoid
+    /// using a thread pool to run tasks and use a DedicatedTaskRunner instead.
+    /// </summary>
+	public class TaskRunnerFactory
+	{
+		public string name = "ActiveMQ Task";
+        public ThreadPriority priority = ThreadPriority.Normal;
+        public int maxIterationsPerRun = 1000;
+        public bool dedicatedTaskRunner = true;
+
+		public TaskRunnerFactory()
+		{
+		}
+
+        public TaskRunner CreateTaskRunner(Task task)
+        {
+            return CreateTaskRunner(task, this.name);
+        }
+
+        public TaskRunner CreateTaskRunner(Task task, string name)
+        {
+            return CreateTaskRunner(task, name, this.priority);
+        }
+
+		public TaskRunner CreateTaskRunner(Task task, string name, ThreadPriority taskPriority)
+		{
+            if(this.dedicatedTaskRunner)
+            {
+                return new DedicatedTaskRunner(task, name, taskPriority);
+            }
+            else
+            {
+                return new PooledTaskRunner(task, this.maxIterationsPerRun);
+            }
+		}
+	}
+}
diff --git a/src/main/csharp/Threads/ThreadPoolExecutor.cs b/src/Threads/ThreadPoolExecutor.cs
similarity index 100%
rename from src/main/csharp/Threads/ThreadPoolExecutor.cs
rename to src/Threads/ThreadPoolExecutor.cs
diff --git a/src/main/csharp/Threads/TimerEx.cs b/src/Threads/TimerEx.cs
similarity index 100%
rename from src/main/csharp/Threads/TimerEx.cs
rename to src/Threads/TimerEx.cs
diff --git a/src/main/csharp/Threads/TimerTask.cs b/src/Threads/TimerTask.cs
similarity index 100%
rename from src/main/csharp/Threads/TimerTask.cs
rename to src/Threads/TimerTask.cs
diff --git a/src/main/csharp/TransactionContext.cs b/src/TransactionContext.cs
similarity index 100%
rename from src/main/csharp/TransactionContext.cs
rename to src/TransactionContext.cs
diff --git a/src/main/csharp/Transactions/IRecoveryLogger.cs b/src/Transactions/IRecoveryLogger.cs
similarity index 100%
rename from src/main/csharp/Transactions/IRecoveryLogger.cs
rename to src/Transactions/IRecoveryLogger.cs
diff --git a/src/main/csharp/Transactions/IRecoveryLoggerFactory.cs b/src/Transactions/IRecoveryLoggerFactory.cs
similarity index 100%
rename from src/main/csharp/Transactions/IRecoveryLoggerFactory.cs
rename to src/Transactions/IRecoveryLoggerFactory.cs
diff --git a/src/main/csharp/Transactions/RecoveryFileLogger.cs b/src/Transactions/RecoveryFileLogger.cs
similarity index 100%
rename from src/main/csharp/Transactions/RecoveryFileLogger.cs
rename to src/Transactions/RecoveryFileLogger.cs
diff --git a/src/main/csharp/Transactions/RecoveryFileLoggerFactory.cs b/src/Transactions/RecoveryFileLoggerFactory.cs
similarity index 100%
rename from src/main/csharp/Transactions/RecoveryFileLoggerFactory.cs
rename to src/Transactions/RecoveryFileLoggerFactory.cs
diff --git a/src/main/csharp/Transactions/RecoveryLoggerFactoryAttribute.cs b/src/Transactions/RecoveryLoggerFactoryAttribute.cs
similarity index 100%
rename from src/main/csharp/Transactions/RecoveryLoggerFactoryAttribute.cs
rename to src/Transactions/RecoveryLoggerFactoryAttribute.cs
diff --git a/src/main/csharp/Transport/ActiveMQTransportFactoryAttribute.cs b/src/Transport/ActiveMQTransportFactoryAttribute.cs
similarity index 100%
rename from src/main/csharp/Transport/ActiveMQTransportFactoryAttribute.cs
rename to src/Transport/ActiveMQTransportFactoryAttribute.cs
diff --git a/src/main/csharp/Transport/Discovery/AbstractDiscoveryAgent.cs b/src/Transport/Discovery/AbstractDiscoveryAgent.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/AbstractDiscoveryAgent.cs
rename to src/Transport/Discovery/AbstractDiscoveryAgent.cs
diff --git a/src/main/csharp/Transport/Discovery/ActiveMQDiscoveryAgentFactoryAttribute.cs b/src/Transport/Discovery/ActiveMQDiscoveryAgentFactoryAttribute.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/ActiveMQDiscoveryAgentFactoryAttribute.cs
rename to src/Transport/Discovery/ActiveMQDiscoveryAgentFactoryAttribute.cs
diff --git a/src/main/csharp/Transport/Discovery/DiscoveredServiceData.cs b/src/Transport/Discovery/DiscoveredServiceData.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/DiscoveredServiceData.cs
rename to src/Transport/Discovery/DiscoveredServiceData.cs
diff --git a/src/main/csharp/Transport/Discovery/DiscoveryAgentFactory.cs b/src/Transport/Discovery/DiscoveryAgentFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/DiscoveryAgentFactory.cs
rename to src/Transport/Discovery/DiscoveryAgentFactory.cs
diff --git a/src/main/csharp/Transport/Discovery/DiscoveryTransport.cs b/src/Transport/Discovery/DiscoveryTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/DiscoveryTransport.cs
rename to src/Transport/Discovery/DiscoveryTransport.cs
diff --git a/src/main/csharp/Transport/Discovery/DiscoveryTransportFactory.cs b/src/Transport/Discovery/DiscoveryTransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/DiscoveryTransportFactory.cs
rename to src/Transport/Discovery/DiscoveryTransportFactory.cs
diff --git a/src/main/csharp/Transport/Discovery/IDiscoveryAgent.cs b/src/Transport/Discovery/IDiscoveryAgent.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/IDiscoveryAgent.cs
rename to src/Transport/Discovery/IDiscoveryAgent.cs
diff --git a/src/main/csharp/Transport/Discovery/IDiscoveryAgentFactory.cs b/src/Transport/Discovery/IDiscoveryAgentFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/IDiscoveryAgentFactory.cs
rename to src/Transport/Discovery/IDiscoveryAgentFactory.cs
diff --git a/src/main/csharp/Transport/Discovery/Multicast/MulticastDiscoveryAgent.cs b/src/Transport/Discovery/Multicast/MulticastDiscoveryAgent.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/Multicast/MulticastDiscoveryAgent.cs
rename to src/Transport/Discovery/Multicast/MulticastDiscoveryAgent.cs
diff --git a/src/main/csharp/Transport/Discovery/Multicast/MulticastDiscoveryAgentFactory.cs b/src/Transport/Discovery/Multicast/MulticastDiscoveryAgentFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/Multicast/MulticastDiscoveryAgentFactory.cs
rename to src/Transport/Discovery/Multicast/MulticastDiscoveryAgentFactory.cs
diff --git a/src/main/csharp/Transport/Discovery/http/HttpDiscoveryAgent.cs b/src/Transport/Discovery/http/HttpDiscoveryAgent.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/http/HttpDiscoveryAgent.cs
rename to src/Transport/Discovery/http/HttpDiscoveryAgent.cs
diff --git a/src/main/csharp/Transport/Discovery/http/HttpDiscoveryAgentFactory.cs b/src/Transport/Discovery/http/HttpDiscoveryAgentFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/http/HttpDiscoveryAgentFactory.cs
rename to src/Transport/Discovery/http/HttpDiscoveryAgentFactory.cs
diff --git a/src/main/csharp/Transport/Failover/BackupTransport.cs b/src/Transport/Failover/BackupTransport.cs
similarity index 99%
rename from src/main/csharp/Transport/Failover/BackupTransport.cs
rename to src/Transport/Failover/BackupTransport.cs
index c35bc8a..61f5b5b 100644
--- a/src/main/csharp/Transport/Failover/BackupTransport.cs
+++ b/src/Transport/Failover/BackupTransport.cs
@@ -1,104 +1,104 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using Apache.NMS.ActiveMQ.Commands;

-

-namespace Apache.NMS.ActiveMQ.Transport.Failover

-{

-    class BackupTransport

-    {

-        private readonly FailoverTransport failoverTransport;

-        private ITransport transport;

-        private Uri uri;

-        private bool disposed;

-

-        public BackupTransport(FailoverTransport ft)

-        {

-            this.failoverTransport = ft;

-        }

-

-        public void OnCommand(ITransport t, Command c)

-        {

-        }

-

-        public void OnException(ITransport t, Exception error)

-        {

-            this.disposed = true;

-            if(failoverTransport != null)

-            {

-                this.failoverTransport.Reconnect(false);

-            }

-        }

-

-        public ITransport Transport

-        {

-            get

-            {

-                return transport;

-            }

-            set

-            {

-                transport = value;

-            }

-        }

-

-        public Uri Uri

-        {

-            get

-            {

-                return uri;

-            }

-            set

-            {

-                uri = value;

-            }

-        }

-

-        public bool Disposed

-        {

-            get

-            {

-                return disposed || (transport != null && transport.IsDisposed);

-            }

-            set

-            {

-                disposed = value;

-                if(disposed && transport != null)

-                {

-                    transport.Dispose();

-                }

-            }

-        }

-

-        public int hashCode()

-        {

-            return uri != null ? uri.GetHashCode() : -1;

-        }

-

-        public bool equals(Object obj)

-        {

-            if(obj is BackupTransport)

-            {

-                BackupTransport other = obj as BackupTransport;

-                return uri == null && other.uri == null ||

-                    (uri != null && other.uri != null && uri.Equals(other.uri));

-            }

-            return false;

-        }

-    }

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.Transport.Failover
+{
+    class BackupTransport
+    {
+        private readonly FailoverTransport failoverTransport;
+        private ITransport transport;
+        private Uri uri;
+        private bool disposed;
+
+        public BackupTransport(FailoverTransport ft)
+        {
+            this.failoverTransport = ft;
+        }
+
+        public void OnCommand(ITransport t, Command c)
+        {
+        }
+
+        public void OnException(ITransport t, Exception error)
+        {
+            this.disposed = true;
+            if(failoverTransport != null)
+            {
+                this.failoverTransport.Reconnect(false);
+            }
+        }
+
+        public ITransport Transport
+        {
+            get
+            {
+                return transport;
+            }
+            set
+            {
+                transport = value;
+            }
+        }
+
+        public Uri Uri
+        {
+            get
+            {
+                return uri;
+            }
+            set
+            {
+                uri = value;
+            }
+        }
+
+        public bool Disposed
+        {
+            get
+            {
+                return disposed || (transport != null && transport.IsDisposed);
+            }
+            set
+            {
+                disposed = value;
+                if(disposed && transport != null)
+                {
+                    transport.Dispose();
+                }
+            }
+        }
+
+        public int hashCode()
+        {
+            return uri != null ? uri.GetHashCode() : -1;
+        }
+
+        public bool equals(Object obj)
+        {
+            if(obj is BackupTransport)
+            {
+                BackupTransport other = obj as BackupTransport;
+                return uri == null && other.uri == null ||
+                    (uri != null && other.uri != null && uri.Equals(other.uri));
+            }
+            return false;
+        }
+    }
+}
diff --git a/src/main/csharp/Transport/Failover/FailoverTransport.cs b/src/Transport/Failover/FailoverTransport.cs
similarity index 99%
rename from src/main/csharp/Transport/Failover/FailoverTransport.cs
rename to src/Transport/Failover/FailoverTransport.cs
index 6aa7377..7fca5ae 100644
--- a/src/main/csharp/Transport/Failover/FailoverTransport.cs
+++ b/src/Transport/Failover/FailoverTransport.cs
@@ -1,1689 +1,1689 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *      http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.Collections;

-using System.Collections.Generic;

-using System.Threading;

-using System.Text;

-using System.Net;

-using Apache.NMS.ActiveMQ.Commands;

-using Apache.NMS.ActiveMQ.State;

-using Apache.NMS.ActiveMQ.Threads;

-using Apache.NMS.Util;

-

-namespace Apache.NMS.ActiveMQ.Transport.Failover

-{

-    /// <summary>

-    /// A Transport that is made reliable by being able to fail over to another

-    /// transport when a transport failure is detected.

-    /// </summary>

-    public class FailoverTransport : ICompositeTransport, IComparable

-    {

-		private static int DEFAULT_INITIAL_RECONNECT_DELAY = 10;

-		private static int INFINITE = -1;

-

-        private static int idCounter = 0;

-        private readonly int id;

-

-        private bool disposed;

-        private bool connected;

-        private readonly List<Uri> uris = new List<Uri>();

-        private readonly List<Uri> updated = new List<Uri>();

-

-        private CommandHandler commandHandler;

-        private ExceptionHandler exceptionHandler;

-        private InterruptedHandler interruptedHandler;

-        private ResumedHandler resumedHandler;

-

-		private readonly CountDownLatch listenerLatch = new CountDownLatch(4);

-        private readonly Mutex reconnectMutex = new Mutex();

-        private readonly Mutex backupMutex = new Mutex();

-        private readonly Mutex sleepMutex = new Mutex();

-        private readonly ConnectionStateTracker stateTracker = new ConnectionStateTracker();

-        private readonly Dictionary<int, Command> requestMap = new Dictionary<int, Command>();

-

-        private Uri connectedTransportURI;

-        private Uri failedConnectTransportURI;

-        private readonly AtomicReference<ITransport> connectedTransport = new AtomicReference<ITransport>(null);

-        private TaskRunner reconnectTask = null;

-        private bool started;

-        private bool initialized;

-        private int initialReconnectDelay = DEFAULT_INITIAL_RECONNECT_DELAY;

-        private int maxReconnectDelay = 1000 * 30;

-        private int backOffMultiplier = 2;

-        private int timeout = INFINITE;

-        private bool useExponentialBackOff = true;

-        private bool randomize = true;

-        private int maxReconnectAttempts = INFINITE;

-        private int startupMaxReconnectAttempts = INFINITE;

-        private int connectFailures;

-        private int reconnectDelay = DEFAULT_INITIAL_RECONNECT_DELAY;

-        private Exception connectionFailure;

-        private bool firstConnection = true;

-        private bool backup = false;

-        private readonly List<BackupTransport> backups = new List<BackupTransport>();

-        private int backupPoolSize = 1;

-        private bool trackMessages = false;

-    	private bool trackTransactionProducers = true;

-        private int maxCacheSize = 256;

-        private volatile Exception failure;

-        private readonly object mutex = new object();

-        private bool reconnectSupported = true;

-        private bool updateURIsSupported = true;

-    	private bool doRebalance = false;

-    	private bool connectedToPriority = false;

-	 	private bool priorityBackup = false;

-    	private List<Uri> priorityList = new List<Uri>();

-    	private bool priorityBackupAvailable = false;

-

-		// Not Sure how to work these back in with all the changes.

-		//private int asyncTimeout = 45000;

-        //private bool asyncConnect = false;

-

-        public FailoverTransport()

-        {

-            id = idCounter++;

-

-            stateTracker.TrackTransactions = true;

-            reconnectTask = DefaultThreadPools.DefaultTaskRunnerFactory.CreateTaskRunner(

-                new FailoverTask(this), "ActiveMQ Failover Worker: " + this.GetHashCode().ToString());

-        }

-

-        ~FailoverTransport()

-        {

-            Dispose(false);

-        }

-

-        #region FailoverTask

-

-        private class FailoverTask : Task

-        {

-            private readonly FailoverTransport parent;

-

-            public FailoverTask(FailoverTransport p)

-            {

-                parent = p;

-            }

-

-            public bool Iterate()

-            {

-                bool result = false;

-                if (!parent.IsStarted)

-                {

-                    return false;

-                }

-

-                bool buildBackup = true;

-                lock (parent.backupMutex) 

-				{

-                    if ((parent.connectedTransport.Value == null || parent.doRebalance || parent.priorityBackupAvailable) && !parent.disposed)

-					{

-                        result = parent.DoConnect();

-                        buildBackup = false;

-                    }

-                }

-                if (buildBackup) 

-				{

-                    parent.BuildBackups();

-                    if (parent.priorityBackup && !parent.connectedToPriority) 

-					{

-                        try 

-						{

-                            parent.DoDelay();

-                            if (parent.reconnectTask == null)

-							{

-                                return true;

-                            }

-                            parent.reconnectTask.Wakeup();

-                        } 

-						catch (ThreadInterruptedException) 

-						{

-                        	Tracer.Debug("Reconnect task has been interrupted.");

-                        }

-                    }

-                }

-				else 

-				{

-                    try 

-					{

-                        if (parent.reconnectTask == null) 

-						{

-                            return true;

-                        }

-                        parent.reconnectTask.Wakeup();

-                    }

-					catch (ThreadInterruptedException) 

-					{

-                        Tracer.Debug("Reconnect task has been interrupted.");

-                    }

-                }

-                return result;

-            }

-        }

-

-        #endregion

-

-        #region Property Accessors

-

-        public CommandHandler Command

-        {

-            get { return commandHandler; }

-            set 

-			{ 

-				commandHandler = value; 

-				listenerLatch.countDown();

-			}

-        }

-

-        public ExceptionHandler Exception

-        {

-            get { return exceptionHandler; }

-            set 

-			{ 

-				exceptionHandler = value; 

-				listenerLatch.countDown();

-			}

-        }

-

-        public InterruptedHandler Interrupted

-        {

-            get { return interruptedHandler; }

-            set 

-			{ 

-				this.interruptedHandler = value; 

-				this.listenerLatch.countDown();

-			}

-        }

-

-        public ResumedHandler Resumed

-        {

-            get { return resumedHandler; }

-            set 

-			{ 

-				this.resumedHandler = value; 

-				this.listenerLatch.countDown();

-			}

-        }

-

-        internal Exception Failure

-        {

-            get { return failure; }

-            set

-            {

-                lock(mutex)

-                {

-                    failure = value;

-                }

-            }

-        }

-

-        public int Timeout

-        {

-            get { return this.timeout; }

-            set { this.timeout = value; }

-        }

-

-        public int InitialReconnectDelay

-        {

-            get { return initialReconnectDelay; }

-            set { initialReconnectDelay = value; }

-        }

-

-        public int MaxReconnectDelay

-        {

-            get { return maxReconnectDelay; }

-            set { maxReconnectDelay = value; }

-        }

-

-        public int ReconnectDelay

-        {

-            get { return reconnectDelay; }

-            set { reconnectDelay = value; }

-        }

-

-        public int ReconnectDelayExponent

-        {

-            get { return backOffMultiplier; }

-            set { backOffMultiplier = value; }

-        }

-

-        public ITransport ConnectedTransport

-        {

-            get { return connectedTransport.Value; }

-            set { connectedTransport.Value = value; }

-        }

-

-        public Uri ConnectedTransportURI

-        {

-            get { return connectedTransportURI; }

-            set { connectedTransportURI = value; }

-        }

-

-        public int MaxReconnectAttempts

-        {

-            get { return maxReconnectAttempts; }

-            set { maxReconnectAttempts = value; }

-        }

-

-        public int StartupMaxReconnectAttempts

-        {

-            get { return startupMaxReconnectAttempts; }

-            set { startupMaxReconnectAttempts = value; }

-        }

-

-        public bool Randomize

-        {

-            get { return randomize; }

-            set { randomize = value; }

-        }

-

-        public bool Backup

-        {

-            get { return backup; }

-            set { backup = value; }

-        }

-

-		public bool PriorityBackup

-		{

-			get { return priorityBackup; }

-			set { this.priorityBackup = value; }

-		}

-

-	    public String PriorityURIs

-		{

-			get { return PrintableUriList(priorityList); }

-			set { this.ProcessDelimitedUriList(value, priorityList); }

-	    }

-

-        public int BackupPoolSize

-        {

-            get { return backupPoolSize; }

-            set { backupPoolSize = value; }

-        }

-

-        public bool TrackMessages

-        {

-            get { return trackMessages; }

-            set { trackMessages = value; }

-        }

-

-		public bool TrackTransactionProducers

-		{

-			get { return trackTransactionProducers; }

-			set { this.trackTransactionProducers = value; }

-		}

-

-        public int MaxCacheSize

-        {

-            get { return maxCacheSize; }

-            set { maxCacheSize = value; }

-        }

-

-        public bool UseExponentialBackOff

-        {

-            get { return useExponentialBackOff; }

-            set { useExponentialBackOff = value; }

-        }

-

-        public IWireFormat WireFormat

-        {

-            get

-            {

-                ITransport transport = ConnectedTransport;

-                if(transport != null)

-                {

-                    return transport.WireFormat;

-                }

-

-                return null;

-            }

-        }

-

-        /// <summary>

-        /// Gets or sets a value indicating whether to asynchronously connect to sockets

-        /// </summary>

-        /// <value><c>true</c> if [async connect]; otherwise, <c>false</c>.</value>

-        public bool AsyncConnect

-        {

-            set { }

-        }

-

-        /// <summary>

-        /// If doing an asynchronous connect, the milliseconds before timing out if no connection can be made

-        /// </summary>

-        /// <value>The async timeout.</value>

-        public int AsyncTimeout

-        {

-            get { return 0; }

-            set { }

-        }

-

-        public ConnectionStateTracker StateTracker

-        {

-            get { return this.stateTracker; }

-        }

-

-        #endregion

-

-        public bool IsFaultTolerant

-        {

-            get { return true; }

-        }

-

-        public bool IsDisposed

-        {

-            get { return disposed; }

-        }

-

-        public bool IsConnected

-        {

-            get { return connected; }

-        }

-

-        public bool IsConnectedToPriority

-        {

-            get { return connectedToPriority; }

-        }

-

-        public bool IsStarted

-        {

-            get { return started; }

-        }

-

-        public bool IsReconnectSupported

-        {

-            get { return this.reconnectSupported; }

-        }

-

-        public bool IsUpdateURIsSupported

-        {

-            get { return this.updateURIsSupported; }

-        }

-

-        public void OnException(ITransport sender, Exception error)

-        {

-            try

-            {

-                HandleTransportFailure(error);

-            }

-            catch(Exception)

-            {

-				this.Exception(this, new IOException("Unexpected Transport Failure."));

-            }

-        }

-

-        public void DisposedOnCommand(ITransport sender, Command c)

-        {

-        }

-

-        public void DisposedOnException(ITransport sender, Exception e)

-        {

-        }

-

-        public void HandleTransportFailure(Exception e)

-        {

-            ITransport transport = connectedTransport.GetAndSet(null);

-	        if (transport == null) 

-			{

-	            // sync with possible in progress reconnect

-	            lock(reconnectMutex) 

-				{

-	                transport = connectedTransport.GetAndSet(null);

-	            }

-	        }

-

-			if(transport != null)

-            {

-				DisposeTransport(transport);

-

-	            bool reconnectOk = false;

-	            lock(reconnectMutex) 

-				{

-	                if (CanReconnect()) 

-					{

-                    	Tracer.WarnFormat("Transport failed to {0}, attempting to automatically reconnect due to: {1}", 

-						                  ConnectedTransportURI, e.Message);

-	                    reconnectOk = true;

-	                }

-

-                    initialized = false;

-                    failedConnectTransportURI = ConnectedTransportURI;

-                    ConnectedTransportURI = null;

-					connectedToPriority = false;

-                    connected = false;

-

-	                if (reconnectOk) 

-					{

-	                    if(this.Interrupted != null)

-	                    {

-	                        this.Interrupted(transport);

-	                    }

-

-	                    updated.Remove(failedConnectTransportURI);

-	                    reconnectTask.Wakeup();

-	                }

-					else if (!disposed) 

-					{

-	                    PropagateFailureToExceptionListener(e);

-	                }

-	            }

-            }

-        }

-

-	    private bool CanReconnect() 

-		{

-	        return started && 0 != CalculateReconnectAttemptLimit();

-	    }

-

-        public void Start()

-        {

-            lock(reconnectMutex)

-            {

-                if(started)

-                {

-                    Tracer.Debug("FailoverTransport Already Started.");

-                    return;

-                }

-

-                Tracer.Debug("FailoverTransport Started.");

-                started = true;

-                stateTracker.MaxCacheSize = MaxCacheSize;

-                stateTracker.TrackMessages = TrackMessages;

-				stateTracker.TrackTransactionProducers = TrackTransactionProducers;

-                if(ConnectedTransport != null)

-                {

-                    Tracer.Debug("FailoverTransport already connected, start is restoring.");

-                    stateTracker.DoRestore(ConnectedTransport);

-                }

-                else

-                {

-                    Tracer.Debug("FailoverTransport not connected, start is reconnecting.");

-                    Reconnect(false);

-                }

-            }

-        }

-

-        public virtual void Stop()

-        {

-            ITransport transportToStop = null;

-	        List<ITransport> backupsToStop = new List<ITransport>(backups.Count);

-

-			try 

-			{

-	            lock(reconnectMutex)

-	            {

-	                if(!started)

-	                {

-	                    Tracer.Debug("FailoverTransport Already Stopped.");

-	                    return;

-	                }

-

-	                Tracer.Debug("FailoverTransport Stopped.");

-	                started = false;

-	                disposed = true;

-	                connected = false;

-	                if(ConnectedTransport != null)

-	                {

-	                    transportToStop = connectedTransport.GetAndSet(null);

-	                }

-

-	            }

-				lock(sleepMutex)

-				{

-					Monitor.PulseAll(sleepMutex);

-				}

-			}

-			finally

-			{

-            	if(reconnectTask != null)

-            	{

-	                reconnectTask.Shutdown();

-            	}

-			}

-

-	        lock(backupMutex) 

-			{

-	            foreach (BackupTransport backup in backups) 

-				{

-	                backup.Disposed = true;

-	                ITransport transport = backup.Transport;

-	                if (transport != null) 

-					{

-	                    transport.Command = DisposedOnCommand;

-						transport.Exception = DisposedOnException;

-	                    backupsToStop.Add(transport);

-	                }

-	            }

-	            backups.Clear();

-	        }

-	        

-			foreach (ITransport transport in backupsToStop) 

-			{

-	            try 

-				{

-	                if (Tracer.IsDebugEnabled) 

-					{

-	                    Tracer.Debug("Stopped backup: " + transport);

-	                }

-	                DisposeTransport(transport);

-	            } 

-				catch (Exception) 

-				{

-	            }

-	        }

-

-			if(transportToStop != null)

-            {

-                transportToStop.Stop();

-            }

-        }

-

-        public FutureResponse AsyncRequest(Command command)

-        {

-            throw new ApplicationException("FailoverTransport does not implement AsyncRequest(Command)");

-        }

-

-        public Response Request(Command command)

-        {

-            throw new ApplicationException("FailoverTransport does not implement Request(Command)");

-        }

-

-        public Response Request(Command command, TimeSpan ts)

-        {

-            throw new ApplicationException("FailoverTransport does not implement Request(Command, TimeSpan)");

-        }

-

-        public void OnCommand(ITransport sender, Command command)

-        {

-            if(command != null)

-            {

-                if(command.IsResponse)

-                {

-                    Command request = null;

-                    lock(((ICollection) requestMap).SyncRoot)

-                    {

-                        int v = ((Response) command).CorrelationId;

-                        try

-                        {

-                            if(requestMap.TryGetValue(v, out request))

-                            {

-                                requestMap.Remove(v);

-                            }

-                        }

-                        catch

-                        {

-                        }

-                    }

-

-                    Tracked tracked = request as Tracked;

-                    if(tracked != null)

-                    {

-                        tracked.OnResponse();

-                    }

-                }

-

-                if(!initialized)

-                {

-                    initialized = true;

-                }

-

-                if(command.IsConnectionControl)

-                {

-                    this.HandleConnectionControl(command as ConnectionControl);

-                }

-            }

-

-            this.Command(sender, command);

-        }

-

-        public void Oneway(Command command)

-        {

-            Exception error = null;

-

-            lock(reconnectMutex)

-            {

-                if(command != null && ConnectedTransport == null)

-                {

-                    if(command.IsShutdownInfo)

-                    {

-                        // Skipping send of ShutdownInfo command when not connected.

-                        return;

-                    }

-                    else if(command.IsRemoveInfo || command.IsMessageAck)

-                    {

-                        stateTracker.Track(command);

-                        // Simulate response to RemoveInfo command or a MessageAck

-                        // since it would be stale at this point.

-                        if(command.ResponseRequired)

-                        {

-                            OnCommand(this, new Response() { CorrelationId = command.CommandId });

-                        }

-                        return;

-                    }

-					else if(command.IsMessagePull) 

-					{

-                        // Simulate response to MessagePull if timed as we can't honor that now.

-                        MessagePull pullRequest = command as MessagePull;

-                        if (pullRequest.Timeout != 0) 

-						{

-                            MessageDispatch dispatch = new MessageDispatch();

-                            dispatch.ConsumerId = pullRequest.ConsumerId;

-                            dispatch.Destination = pullRequest.Destination;

-                            OnCommand(this, dispatch);

-                        }

-                        return;

-                    }

-                }

-

-                // Keep trying until the message is sent.

-                for(int i = 0; !disposed; i++)

-                {

-                    try

-                    {

-                        // Any Ack that was being sent when the connection dropped is now

-                        // stale so we don't send it here as it would cause an unmatched ack

-                        // on the broker side and probably prevent a consumer from getting

-                        // any new messages.

-                        if(command.IsMessageAck && i > 0)

-                        {

-                            Tracer.Debug("Inflight MessageAck being dropped as stale.");

-                            if(command.ResponseRequired)

-                            {

-                                OnCommand(this, new Response() { CorrelationId = command.CommandId });

-                            }

-                            return;

-                        }

-

-                        // Wait for transport to be connected.

-                        ITransport transport = ConnectedTransport;

-                        DateTime start = DateTime.Now;

-                        bool timedout = false;

-                        TimeSpan timewait = TimeSpan.FromMilliseconds(-1);

-

-                        while(transport == null && !disposed && connectionFailure == null)

-                        {

-                            Tracer.Debug("Waiting for transport to reconnect.");

-

-                            int elapsed = (int) (DateTime.Now - start).TotalMilliseconds;

-                            if(this.timeout > 0 && elapsed > this.timeout)

-                            {

-                                timedout = true;

-                                Tracer.DebugFormat("FailoverTransport.oneway - timed out after {0} mills", elapsed);

-                                break;

-                            }

-

-                            if(this.timeout > 0)

-                            {

-                                // Set the timeout for waiting to be at most 100ms past the maximum timeout length.

-                                int remainingTime = (this.timeout - elapsed) + 100;

-                                timewait = TimeSpan.FromMilliseconds(remainingTime);

-                            }

-

-                            // Release so that the reconnect task can run

-                            try

-                            {

-                                // Wait for something.  The mutex will be pulsed if we connect, or are shut down.

-                                Monitor.Wait(reconnectMutex, timewait);

-                            }

-                            catch(ThreadInterruptedException e)

-                            {

-                                Tracer.DebugFormat("Interrupted: {0}", e.Message);

-                            }

-

-                            transport = ConnectedTransport;

-                        }

-

-                        if(transport == null)

-                        {

-                            // Previous loop may have exited due to use being disposed.

-                            if(disposed)

-                            {

-                                error = new IOException("Transport disposed.");

-                            }

-                            else if(connectionFailure != null)

-                            {

-                                error = connectionFailure;

-                            }

-                            else if(timedout)

-                            {

-                                error = new IOException("Failover oneway timed out after " + timeout + " milliseconds.");

-                            }

-                            else

-                            {

-                                error = new IOException("Unexpected failure.");

-                            }

-                            break;

-                        }

-

-                        // If it was a request and it was not being tracked by

-                        // the state tracker, then hold it in the requestMap so

-                        // that we can replay it later.

-                        Tracked tracked = stateTracker.Track(command);

-                        lock(((ICollection) requestMap).SyncRoot)

-                        {

-                            if(tracked != null && tracked.WaitingForResponse)

-                            {

-                                requestMap.Add(command.CommandId, tracked);

-                            }

-                            else if(tracked == null && command.ResponseRequired)

-                            {

-                                requestMap.Add(command.CommandId, command);

-                            }

-                        }

-

-                        // Send the message.

-                        try

-                        {

-                            transport.Oneway(command);

-                            stateTracker.TrackBack(command);

-                        }

-                        catch(Exception e)

-                        {

-                            // If the command was not tracked.. we will retry in this method

-                            // otherwise we need to trigger a reconnect before returning as

-                            // the transport is failed.

-                            if (tracked == null)

-                            {

-                                // since we will retry in this method.. take it

-                                // out of the request map so that it is not

-                                // sent 2 times on recovery

-                                if(command.ResponseRequired)

-                                {

-                                    lock(((ICollection) requestMap).SyncRoot)

-                                    {

-                                        requestMap.Remove(command.CommandId);

-                                    }

-                                }

-

-                                // Rethrow the exception so it will handled by

-                                // the outer catch

-                                throw;

-                            }

-                            else

-                            {

-								if (Tracer.IsDebugEnabled)

-								{

-                                	Tracer.DebugFormat("Send Oneway attempt: {0} failed: Message = {1}", 

-									                   i, e.Message);

-                                	Tracer.DebugFormat("Failed Message Was: {0}", command);

-								}

-                                HandleTransportFailure(e);

-                            }

-                        }

-

-                        return;

-                    }

-                    catch(Exception e)

-                    {

-						if (Tracer.IsDebugEnabled)

-						{

-                        	Tracer.DebugFormat("Send Oneway attempt: {0} failed: Message = {1}", 

-							                   i, e.Message);

-                        	Tracer.DebugFormat("Failed Message Was: {0}", command);

-						}

-                        HandleTransportFailure(e);

-                    }

-                }

-            }

-

-            if(!disposed)

-            {

-                if(error != null)

-                {

-                    throw error;

-                }

-            }

-        }

-

-        public void Add(bool rebalance, Uri[] urisToAdd)

-        {

-			bool newUri = false;

-            lock(uris)

-            {

-                foreach (Uri uri in urisToAdd)

-                {

-                    if(!Contains(uri))

-                    {

-                        uris.Add(uri);

-						newUri = true;

-                    }

-                }

-            }

-

-			if (newUri)

-			{

-            	Reconnect(rebalance);

-			}

-        }

-

-        public void Add(bool rebalance, String u)

-        {

-            try

-            {

-                Add(rebalance, new Uri[] { new Uri(u) });

-            }

-            catch(Exception e)

-            {

-                Tracer.ErrorFormat("Failed to parse URI '{0}': {1}", u, e.Message);

-            }

-        }

-

-        public void Remove(bool rebalance, Uri[] u)

-        {

-            lock(uris)

-            {

-                for(int i = 0; i < u.Length; i++)

-                {

-                    uris.Remove(u[i]);

-                }

-            }

-

-            Reconnect(rebalance);

-        }

-

-        public void Remove(bool rebalance, String u)

-        {

-            try

-            {

-                Remove(rebalance, new Uri[] { new Uri(u) });

-            }

-            catch(Exception e)

-            {

-                Tracer.ErrorFormat("Failed to parse URI '{0}': {1}", u, e.Message);

-            }

-        }

-

-        public void Reconnect(Uri uri)

-        {

-            Add(true, new Uri[] { uri });

-        }

-

-	    public void Reconnect(bool rebalance)

-		{

-			lock(reconnectMutex) 

-			{

-	            if(started) 

-				{

-	                if (rebalance) 

-					{

-	                    doRebalance = true;

-	                }

-                    Tracer.Debug("Waking up reconnect task");

-	                try 

-					{

-	                    reconnectTask.Wakeup();

-	                } 

-					catch (ThreadInterruptedException) 

-					{

-	                }

-	            } 

-				else 

-				{

-                    Tracer.Debug("Reconnect was triggered but transport is not started yet. Wait for start to connect the transport.");

-	            }

-	        }

-	    }

-

-        private List<Uri> ConnectList

-        {

-            get

-            {

-				if (updated.Count != 0)

-				{

-					return updated;

-				}

-

-                List<Uri> l = new List<Uri>(uris);

-                bool removed = false;

-                if(failedConnectTransportURI != null)

-                {

-                    removed = l.Remove(failedConnectTransportURI);

-                }

-

-                if(Randomize)

-                {

-					Shuffle(l);

-                }

-

-                if(removed)

-                {

-                    l.Add(failedConnectTransportURI);

-                }

-

-		        if (Tracer.IsDebugEnabled)

-				{

-					Tracer.DebugFormat("Uri connection list: {0} from: {1}", 

-					                   PrintableUriList(l), PrintableUriList(uris));

-		        }

-

-                return l;

-            }

-        }

-

-        protected void RestoreTransport(ITransport t)

-        {

-            Tracer.Info("Restoring previous transport connection.");

-            t.Start();

-

-            // Send information to the broker - informing it we are a fault tolerant client

-            t.Oneway(new ConnectionControl() { FaultTolerant = true });

-            stateTracker.DoRestore(t);

-

-            Tracer.Info("Sending queued commands...");

-            Dictionary<int, Command> tmpMap = null;

-            lock(((ICollection) requestMap).SyncRoot)

-            {

-                tmpMap = new Dictionary<int, Command>(requestMap);

-            }

-

-            foreach(Command command in tmpMap.Values)

-            {

-                if(command.IsMessageAck)

-                {

-                    Tracer.Debug("Stored MessageAck being dropped as stale.");

-                    OnCommand(this, new Response() { CorrelationId = command.CommandId });

-                    continue;

-                }

-

-                t.Oneway(command);

-            }

-        }

-

-        public Uri RemoteAddress

-        {

-            get

-            {

-                if(ConnectedTransport != null)

-                {

-                    return ConnectedTransport.RemoteAddress;

-                }

-                return null;

-            }

-        }

-

-        public Object Narrow(Type type)

-        {

-            if(this.GetType().Equals(type))

-            {

-                return this;

-            }

-            else if(ConnectedTransport != null)

-            {

-                return ConnectedTransport.Narrow(type);

-            }

-

-            return null;

-        }

-

-        private bool DoConnect()

-        {

-            lock(reconnectMutex)

-            {

-				if (disposed || connectionFailure != null)

-				{

-					Monitor.PulseAll(reconnectMutex);

-				}

-

-            	if ((connectedTransport.Value != null && !doRebalance && !priorityBackupAvailable) || disposed || connectionFailure != null)

-				{

-                    return false;

-                }

-                else

-                {

-                    List<Uri> connectList = ConnectList;

-                    if(connectList.Count == 0)

-                    {

-                        Failure = new NMSConnectionException("No URIs available for connection.");

-                    }

-                    else

-                    {

-	                    if (doRebalance)

-						{

-	                        if (connectedToPriority || CompareUris(connectList[0], connectedTransportURI))

-							{

-	                            // already connected to first in the list, no need to rebalance

-	                            doRebalance = false;

-	                            return false;

-	                        } 

-							else

-							{

-	                            if (Tracer.IsDebugEnabled)

-								{

-									Tracer.DebugFormat("Doing rebalance from: {0} to {1}", 

-									                   connectedTransportURI, PrintableUriList(connectList));

-	                            }

-	                            try 

-								{

-	                                ITransport current = this.connectedTransport.GetAndSet(null);

-	                                if (current != null) 

-									{

-	                                    DisposeTransport(current);

-	                                }

-	                            } 

-								catch (Exception e) 

-								{

-	                            	if (Tracer.IsDebugEnabled)

-									{

-										Tracer.DebugFormat("Caught an exception stopping existing " + 

-										                   "transport for rebalance {0}", e.Message);

-	                                }

-	                            }

-	                        }

-

-	                        doRebalance = false;

-	                    }

-

-	                    ResetReconnectDelay();

-

-	                    ITransport transport = null;

-	                    Uri uri = null;

-

-	                    // If we have a backup already waiting lets try it.

-	                    lock(backupMutex) 

-						{

-	                        if ((priorityBackup || backup) && backups.Count > 0)

-							{

-                            	List<BackupTransport> l = new List<BackupTransport>(backups);

-	                            if (randomize) 

-								{

-									Shuffle(l);

-	                            }

-								BackupTransport bt = l[0];

-								l.RemoveAt(0);

-	                            backups.Remove(bt);

-	                            transport = bt.Transport;

-	                            uri = bt.Uri;

-	                            if (priorityBackup && priorityBackupAvailable) 

-								{

-	                                ITransport old = this.connectedTransport.GetAndSet(null);

-	                                if (old != null) 

-									{

-	                                    DisposeTransport(old);

-	                                }

-	                                priorityBackupAvailable = false;

-	                            }

-	                        }

-	                    }

-

-	                    // Sleep for the reconnectDelay if there's no backup and we aren't trying

-	                    // for the first time, or we were disposed for some reason.

-	                    if (transport == null && !firstConnection && (reconnectDelay > 0) && !disposed) 

-						{

-	                        lock(sleepMutex) 

-							{

-	                            if (Tracer.IsDebugEnabled)

-								{

-									Tracer.DebugFormat("Waiting {0} ms before attempting connection.", reconnectDelay);

-	                            }

-	                            try 

-								{

-	                                Monitor.Wait(sleepMutex, reconnectDelay);

-	                            }

-								catch (ThreadInterruptedException)

-								{

-	                            }

-	                        }

-	                    }

-

-						IEnumerator<Uri> iter = connectList.GetEnumerator();

-	                    while ((transport != null || iter.MoveNext()) && (connectedTransport.Value == null && !disposed))

-						{

-	                        try 

-							{

-	                            if (Tracer.IsDebugEnabled)

-								{

-									Tracer.DebugFormat("Attempting {0}th connect to: {1}",

-									                   connectFailures, uri);

-	                            }

-

-								// We could be starting with a backup and if so we wait to grab a

-	                            // URI from the pool until next time around.

-	                            if (transport == null) 

-								{

-	                                uri = iter.Current;

-	                                transport = TransportFactory.CompositeConnect(uri);

-	                            }

-

-                                transport.Command = OnCommand;

-                                transport.Exception = OnException;

-	                            transport.Start();

-

-	                            if (started && !firstConnection) 

-								{

-	                                RestoreTransport(transport);

-	                            }

-

-	                            if (Tracer.IsDebugEnabled)

-								{

-	                                Tracer.Debug("Connection established");

-	                            }

-	                            reconnectDelay = initialReconnectDelay;

-	                            connectedTransportURI = uri;

-	                            connectedTransport.Value = transport;

-								connectedToPriority = IsPriority(connectedTransportURI);

-	                            Monitor.PulseAll(reconnectMutex);

-	                            connectFailures = 0;

-

-								// Try to wait long enough for client to init the event callbacks.

-								listenerLatch.await(TimeSpan.FromSeconds(2));

-

-	                            if (Resumed != null) 

-								{

-	                                Resumed(transport);

-	                            }

-								else 

-								{

-	                                if (Tracer.IsDebugEnabled) 

-									{

-	                                    Tracer.Debug("transport resumed by transport listener not set");

-	                                }

-	                            }

-

-	                            if (firstConnection) 

-								{

-	                                firstConnection = false;

-	                                Tracer.Info("Successfully connected to " + uri);

-	                            }

-								else 

-								{

-	                                Tracer.Info("Successfully reconnected to " + uri);

-	                            }

-

-	                            connected = true;

-	                            return false;

-	                        }

-							catch (Exception e) 

-							{

-	                            failure = e;

-                                if (Tracer.IsDebugEnabled) 

-								{

-	                                Tracer.Debug("Connect fail to: " + uri + ", reason: " + e.Message);

-	                            }

-	                            if (transport != null) 

-								{

-	                                try 

-									{

-	                                    transport.Stop();

-	                                    transport = null;

-	                                }

-									catch (Exception ee) 

-									{

-	                                	if (Tracer.IsDebugEnabled) 

-										{

-	                                        Tracer.Debug("Stop of failed transport: " + transport +

-	                                                     " failed with reason: " + ee.Message);

-	                                    }

-	                                }

-	                            }

-	                        }

-	                    }

-					}

-				}

-            

-	            int reconnectLimit = CalculateReconnectAttemptLimit();

-

-	            connectFailures++;

-	            if (reconnectLimit != INFINITE && connectFailures >= reconnectLimit) 

-				{

-					Tracer.ErrorFormat("Failed to connect to {0} after: {1} attempt(s)", 

-					                   PrintableUriList(uris), connectFailures);

-	                connectionFailure = failure;

-

-	                // Make sure on initial startup, that the transportListener has been

-	                // initialized for this instance.

-					listenerLatch.await(TimeSpan.FromSeconds(2));

-	                PropagateFailureToExceptionListener(connectionFailure);

-	                return false;

-	            }

-	        }

-

-	        if(!disposed)

-			{

-	            DoDelay();

-	        }

-

-	        return !disposed;

-        }

-

-        private bool BuildBackups()

-        {

-            lock(backupMutex)

-            {

-            	if (!disposed && (backup || priorityBackup) && backups.Count < backupPoolSize) 

-				{

-	                List<Uri> backupList = new List<Uri>(priorityList);

-                    List<Uri> connectList = ConnectList;

-	                foreach(Uri uri in connectList) 

-					{

-	                    if (!backupList.Contains(uri)) 

-						{

-	                        backupList.Add(uri);

-	                    }

-	                }

-                    foreach(BackupTransport bt in backups)

-                    {

-                        if(bt.Disposed)

-                        {

-                            backups.Remove(bt);

-                        }

-                    }

-

-                    foreach(Uri uri in connectList)

-                    {

-						if (disposed)

-						{

-							break;

-						}

-

-                        if(ConnectedTransportURI != null && !ConnectedTransportURI.Equals(uri))

-                        {

-                            try

-                            {

-                                BackupTransport bt = new BackupTransport(this)

-                                {

-                                    Uri = uri

-                                };

-

-                                if(!backups.Contains(bt))

-                                {

-                                    ITransport t = TransportFactory.CompositeConnect(uri);

-                                    t.Command = bt.OnCommand;

-                                    t.Exception = bt.OnException;

-                                    t.Start();

-                                    bt.Transport = t;

-	                                if (priorityBackup && IsPriority(uri))

-									{

-	                                   priorityBackupAvailable = true;

-	                                   backups.Insert(0, bt);

-	                                }

-									else 

-									{

-	                                    backups.Add(bt);

-	                                }

-                                }

-                            }

-                            catch(Exception e)

-                            {

-                                Tracer.DebugFormat("Failed to build backup: {0}", e.Message);

-                            }

-                        }

-

-                        if(backups.Count == BackupPoolSize)

-                        {

-                            break;

-                        }

-                    }

-                }

-            }

-

-            return false;

-        }

-

-        public void ConnectionInterruptProcessingComplete(ConnectionId connectionId)

-        {

-            lock(reconnectMutex)

-            {

-                Tracer.Debug("Connection Interrupt Processing is complete for ConnectionId: " + connectionId);

-                stateTracker.ConnectionInterruptProcessingComplete(this, connectionId);

-            }

-        }

-

-        public void UpdateURIs(bool rebalance, Uri[] updatedURIs)

-        {

-            if(IsUpdateURIsSupported)

-            {

-                Dictionary<Uri, bool> copy = new Dictionary<Uri, bool>();

-                foreach(Uri uri in updated)

-                {

-                    if(uri != null)

-                    {

-                        copy[uri] = true;

-                    }

-                }

-	

-				updated.Clear();

-

-                if(updatedURIs != null && updatedURIs.Length > 0)

-                {

-                    Dictionary<Uri, bool> uriSet = new Dictionary<Uri, bool>();

-                    for(int i = 0; i < updatedURIs.Length; i++)

-                    {

-                        Uri uri = updatedURIs[i];

-                        if(uri != null)

-                        {

-                            uriSet[uri] = true;

-                        }

-                    }

-

-                    foreach(Uri uri in uriSet.Keys)

-                    {

-                        if(!updated.Contains(uri))

-                        {

-							updated.Add(uri);

-                        }

-                    }

-

-					if (Tracer.IsDebugEnabled)

-					{

-						Tracer.DebugFormat("Updated URIs list {0}", PrintableUriList(updated));

-					}

-

-	                if (!(copy.Count == 0 && updated.Count == 0) && !copy.Keys.Equals(updated))

-					{

-	                    BuildBackups();

-	                    lock(reconnectMutex) 

-						{

-	                        Reconnect(rebalance);

-	                    }

-	                }

-                }

-            }

-        }

-

-        public void HandleConnectionControl(ConnectionControl control)

-        {

-            string reconnectStr = control.ReconnectTo;

-

-            if(reconnectStr != null)

-            {

-                reconnectStr = reconnectStr.Trim();

-                if(reconnectStr.Length > 0)

-                {

-                    try

-                    {

-                        Uri uri = new Uri(reconnectStr);

-                        if(IsReconnectSupported)

-                        {

-                            Tracer.Info("Reconnecting to: " + uri.OriginalString);

-                            Reconnect(uri);

-                        }

-                    }

-                    catch(Exception e)

-                    {

-                        Tracer.ErrorFormat("Failed to handle ConnectionControl reconnect to {0}: {1}", reconnectStr, e);

-                    }

-                }

-            }

-

-            ProcessNewTransports(control.RebalanceConnection, control.ConnectedBrokers);

-        }

-

-        private void ProcessNewTransports(bool rebalance, String newTransports)

-        {

-            if(newTransports != null)

-            {

-                newTransports = newTransports.Trim();

-

-                if(newTransports.Length > 0 && IsUpdateURIsSupported)

-                {

-                    List<Uri> list = new List<Uri>();

-					ProcessDelimitedUriList(newTransports, list);

-

-                    if(list.Count != 0)

-                    {

-                        try

-                        {

-                            UpdateURIs(rebalance, list.ToArray());

-                        }

-                        catch

-                        {

-                            Tracer.Error("Failed to update transport URI's from: " + newTransports);

-                        }

-                    }

-                }

-            }        

-		}

-

-		private void ProcessDelimitedUriList(String priorityUris, List<Uri> target)

-		{

-            String[] tokens = priorityUris.Split(new Char[] { ',' });

-

-            foreach(String str in tokens)

-            {

-                try

-                {

-                    Uri uri = new Uri(str);

-                    target.Add(uri);

-

-					if (Tracer.IsDebugEnabled)

-					{

-						Tracer.DebugFormat("Adding new Uri[{0}] to list,", uri);

-					}

-                }

-                catch (Exception e)

-                {

-					Tracer.ErrorFormat("Failed to parse broker address: {0} because of: {1}",

-					                   str, e.Message);

-                }

-            }

-		}

-

-        public void Dispose()

-        {

-            Dispose(true);

-            GC.SuppressFinalize(this);

-        }

-

-        public void Dispose(bool disposing)

-        {

-            this.Stop();

-            disposed = true;

-        }

-

-        public int CompareTo(Object o)

-        {

-            if(o is FailoverTransport)

-            {

-                FailoverTransport oo = o as FailoverTransport;

-

-                return this.id - oo.id;

-            }

-            else

-            {

-                throw new ArgumentException();

-            }

-        }

-

-        public override String ToString()

-        {

-            return ConnectedTransportURI == null ? "unconnected" : ConnectedTransportURI.ToString();

-        }

-

-	    internal bool IsPriority(Uri uri) 

-		{

-			if (priorityBackup)

-			{

-		        if (priorityList.Count > 0) 

-				{

-		            return priorityList.Contains(uri);

-		        }

-

-				if (this.uris.Count > 0) 

-				{

-		        	return uris[0].Equals(uri);

-				}

-			}

-			return false;

-	    }

-

-		public void DisposeTransport(ITransport transport) 

-		{

-			transport.Command = DisposedOnCommand;

-			transport.Exception = DisposedOnException;

-

-			try 

-			{

-	            transport.Stop();

-        	}

-			catch (Exception e) 

-			{

-				Tracer.DebugFormat("Could not stop transport: {0]. Reason: {1}", transport, e.Message);

-        	}

-    	}

-

-	    private void ResetReconnectDelay() 

-		{

-	        if (!useExponentialBackOff || reconnectDelay == DEFAULT_INITIAL_RECONNECT_DELAY) 

-			{

-	            reconnectDelay = initialReconnectDelay;

-	        }

-	    }

-

-	    private void DoDelay()

-		{

-	        if (reconnectDelay > 0) 

-			{

-	            lock(sleepMutex) 

-				{

-	                if (Tracer.IsDebugEnabled) 

-					{

-						Tracer.DebugFormat("Waiting {0} ms before attempting connection", reconnectDelay);

-	                }

-	                try 

-					{

-						Monitor.Wait(sleepMutex, reconnectDelay);

-	                } 

-					catch (ThreadInterruptedException) 

-					{

-	                }

-	            }

-	        }

-

-	        if (useExponentialBackOff) 

-			{

-	            // Exponential increment of reconnect delay.

-	            reconnectDelay *= backOffMultiplier;

-	            if (reconnectDelay > maxReconnectDelay) 

-				{

-	                reconnectDelay = maxReconnectDelay;

-	            }

-	        }

-	    }

-

-	    private void PropagateFailureToExceptionListener(Exception exception) 

-		{

-	        if (Exception != null) 

-			{

-                Exception(this, exception);

-	        }

-			else

-			{

-				Exception(this, new IOException());

-			}

-			Monitor.PulseAll(reconnectMutex);

-	    }

-

-	    private int CalculateReconnectAttemptLimit() 

-		{

-	        int maxReconnectValue = this.maxReconnectAttempts;

-	        if (firstConnection && this.startupMaxReconnectAttempts != INFINITE) 

-			{

-	            maxReconnectValue = this.startupMaxReconnectAttempts;

-	        }

-	        return maxReconnectValue;

-	    }

-

-		public void Shuffle<T>(List<T> list)  

-		{  

-            Random random = new Random(DateTime.Now.Millisecond);

-		    int index = list.Count;  

-		    while (index > 1) 

-			{  

-		        index--;  

-		        int k = random.Next(index + 1);  

-		        T value = list[k];  

-		        list[k] = list[index];  

-		        list[index] = value;  

-		    }  

-		}

-

-		private String PrintableUriList(List<Uri> uriList)

-		{

-			if (uriList.Count == 0)

-			{

-				return "";

-			}

-

-			StringBuilder builder = new StringBuilder();

-			for (int i = 0; i < uriList.Count; ++i)

-			{

-				builder.Append(uriList[i]);

-				if (i < (uriList.Count - 1))

-				{

-					builder.Append(",");

-				}

-			}

-

-			return builder.ToString();

-		}

-

-		private bool CompareUris(Uri first, Uri second) 

-		{

-			bool result = false;

-            if (first.Port == second.Port)

-			{

-                IPHostEntry firstAddr = null;

-                IPHostEntry secondAddr = null;

-                try 

-				{

-            		firstAddr = Dns.GetHostEntry(first.Host);

-            		secondAddr = Dns.GetHostEntry(second.Host);

-

-	                if (firstAddr.Equals(secondAddr)) 

-					{

-						result = true;

-	                }

-				} 

-				catch(Exception e)

-				{

-                    if (firstAddr == null) 

-					{

-						Tracer.WarnFormat("Failed to Lookup IPHostEntry for URI[{0}] : {1}", first, e);

-                    } 

-					else 

-					{

-						Tracer.WarnFormat("Failed to Lookup IPHostEntry for URI[{0}] : {1}", second, e);

-                    }

-

-					if(String.Equals(first.Host, second.Host, StringComparison.CurrentCultureIgnoreCase))

-					{

-						result = true;

-                    }

-                }

-

-            }

-

-			return result;

-		}

-

-	    private bool Contains(Uri newURI) 

-		{

-	        bool result = false;

-	        foreach (Uri uri in uris) 

-			{

-	            if (CompareUris(newURI, uri))

-				{

-					result = true;

-					break;

-	            }

-	        }

-

-	        return result;

-	    }

-    }

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Threading;
+using System.Text;
+using System.Net;
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.ActiveMQ.State;
+using Apache.NMS.ActiveMQ.Threads;
+using Apache.NMS.Util;
+
+namespace Apache.NMS.ActiveMQ.Transport.Failover
+{
+    /// <summary>
+    /// A Transport that is made reliable by being able to fail over to another
+    /// transport when a transport failure is detected.
+    /// </summary>
+    public class FailoverTransport : ICompositeTransport, IComparable
+    {
+		private static int DEFAULT_INITIAL_RECONNECT_DELAY = 10;
+		private static int INFINITE = -1;
+
+        private static int idCounter = 0;
+        private readonly int id;
+
+        private bool disposed;
+        private bool connected;
+        private readonly List<Uri> uris = new List<Uri>();
+        private readonly List<Uri> updated = new List<Uri>();
+
+        private CommandHandler commandHandler;
+        private ExceptionHandler exceptionHandler;
+        private InterruptedHandler interruptedHandler;
+        private ResumedHandler resumedHandler;
+
+		private readonly CountDownLatch listenerLatch = new CountDownLatch(4);
+        private readonly Mutex reconnectMutex = new Mutex();
+        private readonly Mutex backupMutex = new Mutex();
+        private readonly Mutex sleepMutex = new Mutex();
+        private readonly ConnectionStateTracker stateTracker = new ConnectionStateTracker();
+        private readonly Dictionary<int, Command> requestMap = new Dictionary<int, Command>();
+
+        private Uri connectedTransportURI;
+        private Uri failedConnectTransportURI;
+        private readonly AtomicReference<ITransport> connectedTransport = new AtomicReference<ITransport>(null);
+        private TaskRunner reconnectTask = null;
+        private bool started;
+        private bool initialized;
+        private int initialReconnectDelay = DEFAULT_INITIAL_RECONNECT_DELAY;
+        private int maxReconnectDelay = 1000 * 30;
+        private int backOffMultiplier = 2;
+        private int timeout = INFINITE;
+        private bool useExponentialBackOff = true;
+        private bool randomize = true;
+        private int maxReconnectAttempts = INFINITE;
+        private int startupMaxReconnectAttempts = INFINITE;
+        private int connectFailures;
+        private int reconnectDelay = DEFAULT_INITIAL_RECONNECT_DELAY;
+        private Exception connectionFailure;
+        private bool firstConnection = true;
+        private bool backup = false;
+        private readonly List<BackupTransport> backups = new List<BackupTransport>();
+        private int backupPoolSize = 1;
+        private bool trackMessages = false;
+    	private bool trackTransactionProducers = true;
+        private int maxCacheSize = 256;
+        private volatile Exception failure;
+        private readonly object mutex = new object();
+        private bool reconnectSupported = true;
+        private bool updateURIsSupported = true;
+    	private bool doRebalance = false;
+    	private bool connectedToPriority = false;
+	 	private bool priorityBackup = false;
+    	private List<Uri> priorityList = new List<Uri>();
+    	private bool priorityBackupAvailable = false;
+
+		// Not Sure how to work these back in with all the changes.
+		//private int asyncTimeout = 45000;
+        //private bool asyncConnect = false;
+
+        public FailoverTransport()
+        {
+            id = idCounter++;
+
+            stateTracker.TrackTransactions = true;
+            reconnectTask = DefaultThreadPools.DefaultTaskRunnerFactory.CreateTaskRunner(
+                new FailoverTask(this), "ActiveMQ Failover Worker: " + this.GetHashCode().ToString());
+        }
+
+        ~FailoverTransport()
+        {
+            Dispose(false);
+        }
+
+        #region FailoverTask
+
+        private class FailoverTask : Task
+        {
+            private readonly FailoverTransport parent;
+
+            public FailoverTask(FailoverTransport p)
+            {
+                parent = p;
+            }
+
+            public bool Iterate()
+            {
+                bool result = false;
+                if (!parent.IsStarted)
+                {
+                    return false;
+                }
+
+                bool buildBackup = true;
+                lock (parent.backupMutex) 
+				{
+                    if ((parent.connectedTransport.Value == null || parent.doRebalance || parent.priorityBackupAvailable) && !parent.disposed)
+					{
+                        result = parent.DoConnect();
+                        buildBackup = false;
+                    }
+                }
+                if (buildBackup) 
+				{
+                    parent.BuildBackups();
+                    if (parent.priorityBackup && !parent.connectedToPriority) 
+					{
+                        try 
+						{
+                            parent.DoDelay();
+                            if (parent.reconnectTask == null)
+							{
+                                return true;
+                            }
+                            parent.reconnectTask.Wakeup();
+                        } 
+						catch (ThreadInterruptedException) 
+						{
+                        	Tracer.Debug("Reconnect task has been interrupted.");
+                        }
+                    }
+                }
+				else 
+				{
+                    try 
+					{
+                        if (parent.reconnectTask == null) 
+						{
+                            return true;
+                        }
+                        parent.reconnectTask.Wakeup();
+                    }
+					catch (ThreadInterruptedException) 
+					{
+                        Tracer.Debug("Reconnect task has been interrupted.");
+                    }
+                }
+                return result;
+            }
+        }
+
+        #endregion
+
+        #region Property Accessors
+
+        public CommandHandler Command
+        {
+            get { return commandHandler; }
+            set 
+			{ 
+				commandHandler = value; 
+				listenerLatch.countDown();
+			}
+        }
+
+        public ExceptionHandler Exception
+        {
+            get { return exceptionHandler; }
+            set 
+			{ 
+				exceptionHandler = value; 
+				listenerLatch.countDown();
+			}
+        }
+
+        public InterruptedHandler Interrupted
+        {
+            get { return interruptedHandler; }
+            set 
+			{ 
+				this.interruptedHandler = value; 
+				this.listenerLatch.countDown();
+			}
+        }
+
+        public ResumedHandler Resumed
+        {
+            get { return resumedHandler; }
+            set 
+			{ 
+				this.resumedHandler = value; 
+				this.listenerLatch.countDown();
+			}
+        }
+
+        internal Exception Failure
+        {
+            get { return failure; }
+            set
+            {
+                lock(mutex)
+                {
+                    failure = value;
+                }
+            }
+        }
+
+        public int Timeout
+        {
+            get { return this.timeout; }
+            set { this.timeout = value; }
+        }
+
+        public int InitialReconnectDelay
+        {
+            get { return initialReconnectDelay; }
+            set { initialReconnectDelay = value; }
+        }
+
+        public int MaxReconnectDelay
+        {
+            get { return maxReconnectDelay; }
+            set { maxReconnectDelay = value; }
+        }
+
+        public int ReconnectDelay
+        {
+            get { return reconnectDelay; }
+            set { reconnectDelay = value; }
+        }
+
+        public int ReconnectDelayExponent
+        {
+            get { return backOffMultiplier; }
+            set { backOffMultiplier = value; }
+        }
+
+        public ITransport ConnectedTransport
+        {
+            get { return connectedTransport.Value; }
+            set { connectedTransport.Value = value; }
+        }
+
+        public Uri ConnectedTransportURI
+        {
+            get { return connectedTransportURI; }
+            set { connectedTransportURI = value; }
+        }
+
+        public int MaxReconnectAttempts
+        {
+            get { return maxReconnectAttempts; }
+            set { maxReconnectAttempts = value; }
+        }
+
+        public int StartupMaxReconnectAttempts
+        {
+            get { return startupMaxReconnectAttempts; }
+            set { startupMaxReconnectAttempts = value; }
+        }
+
+        public bool Randomize
+        {
+            get { return randomize; }
+            set { randomize = value; }
+        }
+
+        public bool Backup
+        {
+            get { return backup; }
+            set { backup = value; }
+        }
+
+		public bool PriorityBackup
+		{
+			get { return priorityBackup; }
+			set { this.priorityBackup = value; }
+		}
+
+	    public String PriorityURIs
+		{
+			get { return PrintableUriList(priorityList); }
+			set { this.ProcessDelimitedUriList(value, priorityList); }
+	    }
+
+        public int BackupPoolSize
+        {
+            get { return backupPoolSize; }
+            set { backupPoolSize = value; }
+        }
+
+        public bool TrackMessages
+        {
+            get { return trackMessages; }
+            set { trackMessages = value; }
+        }
+
+		public bool TrackTransactionProducers
+		{
+			get { return trackTransactionProducers; }
+			set { this.trackTransactionProducers = value; }
+		}
+
+        public int MaxCacheSize
+        {
+            get { return maxCacheSize; }
+            set { maxCacheSize = value; }
+        }
+
+        public bool UseExponentialBackOff
+        {
+            get { return useExponentialBackOff; }
+            set { useExponentialBackOff = value; }
+        }
+
+        public IWireFormat WireFormat
+        {
+            get
+            {
+                ITransport transport = ConnectedTransport;
+                if(transport != null)
+                {
+                    return transport.WireFormat;
+                }
+
+                return null;
+            }
+        }
+
+        /// <summary>
+        /// Gets or sets a value indicating whether to asynchronously connect to sockets
+        /// </summary>
+        /// <value><c>true</c> if [async connect]; otherwise, <c>false</c>.</value>
+        public bool AsyncConnect
+        {
+            set { }
+        }
+
+        /// <summary>
+        /// If doing an asynchronous connect, the milliseconds before timing out if no connection can be made
+        /// </summary>
+        /// <value>The async timeout.</value>
+        public int AsyncTimeout
+        {
+            get { return 0; }
+            set { }
+        }
+
+        public ConnectionStateTracker StateTracker
+        {
+            get { return this.stateTracker; }
+        }
+
+        #endregion
+
+        public bool IsFaultTolerant
+        {
+            get { return true; }
+        }
+
+        public bool IsDisposed
+        {
+            get { return disposed; }
+        }
+
+        public bool IsConnected
+        {
+            get { return connected; }
+        }
+
+        public bool IsConnectedToPriority
+        {
+            get { return connectedToPriority; }
+        }
+
+        public bool IsStarted
+        {
+            get { return started; }
+        }
+
+        public bool IsReconnectSupported
+        {
+            get { return this.reconnectSupported; }
+        }
+
+        public bool IsUpdateURIsSupported
+        {
+            get { return this.updateURIsSupported; }
+        }
+
+        public void OnException(ITransport sender, Exception error)
+        {
+            try
+            {
+                HandleTransportFailure(error);
+            }
+            catch(Exception)
+            {
+				this.Exception(this, new IOException("Unexpected Transport Failure."));
+            }
+        }
+
+        public void DisposedOnCommand(ITransport sender, Command c)
+        {
+        }
+
+        public void DisposedOnException(ITransport sender, Exception e)
+        {
+        }
+
+        public void HandleTransportFailure(Exception e)
+        {
+            ITransport transport = connectedTransport.GetAndSet(null);
+	        if (transport == null) 
+			{
+	            // sync with possible in progress reconnect
+	            lock(reconnectMutex) 
+				{
+	                transport = connectedTransport.GetAndSet(null);
+	            }
+	        }
+
+			if(transport != null)
+            {
+				DisposeTransport(transport);
+
+	            bool reconnectOk = false;
+	            lock(reconnectMutex) 
+				{
+	                if (CanReconnect()) 
+					{
+                    	Tracer.WarnFormat("Transport failed to {0}, attempting to automatically reconnect due to: {1}", 
+						                  ConnectedTransportURI, e.Message);
+	                    reconnectOk = true;
+	                }
+
+                    initialized = false;
+                    failedConnectTransportURI = ConnectedTransportURI;
+                    ConnectedTransportURI = null;
+					connectedToPriority = false;
+                    connected = false;
+
+	                if (reconnectOk) 
+					{
+	                    if(this.Interrupted != null)
+	                    {
+	                        this.Interrupted(transport);
+	                    }
+
+	                    updated.Remove(failedConnectTransportURI);
+	                    reconnectTask.Wakeup();
+	                }
+					else if (!disposed) 
+					{
+	                    PropagateFailureToExceptionListener(e);
+	                }
+	            }
+            }
+        }
+
+	    private bool CanReconnect() 
+		{
+	        return started && 0 != CalculateReconnectAttemptLimit();
+	    }
+
+        public void Start()
+        {
+            lock(reconnectMutex)
+            {
+                if(started)
+                {
+                    Tracer.Debug("FailoverTransport Already Started.");
+                    return;
+                }
+
+                Tracer.Debug("FailoverTransport Started.");
+                started = true;
+                stateTracker.MaxCacheSize = MaxCacheSize;
+                stateTracker.TrackMessages = TrackMessages;
+				stateTracker.TrackTransactionProducers = TrackTransactionProducers;
+                if(ConnectedTransport != null)
+                {
+                    Tracer.Debug("FailoverTransport already connected, start is restoring.");
+                    stateTracker.DoRestore(ConnectedTransport);
+                }
+                else
+                {
+                    Tracer.Debug("FailoverTransport not connected, start is reconnecting.");
+                    Reconnect(false);
+                }
+            }
+        }
+
+        public virtual void Stop()
+        {
+            ITransport transportToStop = null;
+	        List<ITransport> backupsToStop = new List<ITransport>(backups.Count);
+
+			try 
+			{
+	            lock(reconnectMutex)
+	            {
+	                if(!started)
+	                {
+	                    Tracer.Debug("FailoverTransport Already Stopped.");
+	                    return;
+	                }
+
+	                Tracer.Debug("FailoverTransport Stopped.");
+	                started = false;
+	                disposed = true;
+	                connected = false;
+	                if(ConnectedTransport != null)
+	                {
+	                    transportToStop = connectedTransport.GetAndSet(null);
+	                }
+
+	            }
+				lock(sleepMutex)
+				{
+					Monitor.PulseAll(sleepMutex);
+				}
+			}
+			finally
+			{
+            	if(reconnectTask != null)
+            	{
+	                reconnectTask.Shutdown();
+            	}
+			}
+
+	        lock(backupMutex) 
+			{
+	            foreach (BackupTransport backup in backups) 
+				{
+	                backup.Disposed = true;
+	                ITransport transport = backup.Transport;
+	                if (transport != null) 
+					{
+	                    transport.Command = DisposedOnCommand;
+						transport.Exception = DisposedOnException;
+	                    backupsToStop.Add(transport);
+	                }
+	            }
+	            backups.Clear();
+	        }
+	        
+			foreach (ITransport transport in backupsToStop) 
+			{
+	            try 
+				{
+	                if (Tracer.IsDebugEnabled) 
+					{
+	                    Tracer.Debug("Stopped backup: " + transport);
+	                }
+	                DisposeTransport(transport);
+	            } 
+				catch (Exception) 
+				{
+	            }
+	        }
+
+			if(transportToStop != null)
+            {
+                transportToStop.Stop();
+            }
+        }
+
+        public FutureResponse AsyncRequest(Command command)
+        {
+            throw new ApplicationException("FailoverTransport does not implement AsyncRequest(Command)");
+        }
+
+        public Response Request(Command command)
+        {
+            throw new ApplicationException("FailoverTransport does not implement Request(Command)");
+        }
+
+        public Response Request(Command command, TimeSpan ts)
+        {
+            throw new ApplicationException("FailoverTransport does not implement Request(Command, TimeSpan)");
+        }
+
+        public void OnCommand(ITransport sender, Command command)
+        {
+            if(command != null)
+            {
+                if(command.IsResponse)
+                {
+                    Command request = null;
+                    lock(((ICollection) requestMap).SyncRoot)
+                    {
+                        int v = ((Response) command).CorrelationId;
+                        try
+                        {
+                            if(requestMap.TryGetValue(v, out request))
+                            {
+                                requestMap.Remove(v);
+                            }
+                        }
+                        catch
+                        {
+                        }
+                    }
+
+                    Tracked tracked = request as Tracked;
+                    if(tracked != null)
+                    {
+                        tracked.OnResponse();
+                    }
+                }
+
+                if(!initialized)
+                {
+                    initialized = true;
+                }
+
+                if(command.IsConnectionControl)
+                {
+                    this.HandleConnectionControl(command as ConnectionControl);
+                }
+            }
+
+            this.Command(sender, command);
+        }
+
+        public void Oneway(Command command)
+        {
+            Exception error = null;
+
+            lock(reconnectMutex)
+            {
+                if(command != null && ConnectedTransport == null)
+                {
+                    if(command.IsShutdownInfo)
+                    {
+                        // Skipping send of ShutdownInfo command when not connected.
+                        return;
+                    }
+                    else if(command.IsRemoveInfo || command.IsMessageAck)
+                    {
+                        stateTracker.Track(command);
+                        // Simulate response to RemoveInfo command or a MessageAck
+                        // since it would be stale at this point.
+                        if(command.ResponseRequired)
+                        {
+                            OnCommand(this, new Response() { CorrelationId = command.CommandId });
+                        }
+                        return;
+                    }
+					else if(command.IsMessagePull) 
+					{
+                        // Simulate response to MessagePull if timed as we can't honor that now.
+                        MessagePull pullRequest = command as MessagePull;
+                        if (pullRequest.Timeout != 0) 
+						{
+                            MessageDispatch dispatch = new MessageDispatch();
+                            dispatch.ConsumerId = pullRequest.ConsumerId;
+                            dispatch.Destination = pullRequest.Destination;
+                            OnCommand(this, dispatch);
+                        }
+                        return;
+                    }
+                }
+
+                // Keep trying until the message is sent.
+                for(int i = 0; !disposed; i++)
+                {
+                    try
+                    {
+                        // Any Ack that was being sent when the connection dropped is now
+                        // stale so we don't send it here as it would cause an unmatched ack
+                        // on the broker side and probably prevent a consumer from getting
+                        // any new messages.
+                        if(command.IsMessageAck && i > 0)
+                        {
+                            Tracer.Debug("Inflight MessageAck being dropped as stale.");
+                            if(command.ResponseRequired)
+                            {
+                                OnCommand(this, new Response() { CorrelationId = command.CommandId });
+                            }
+                            return;
+                        }
+
+                        // Wait for transport to be connected.
+                        ITransport transport = ConnectedTransport;
+                        DateTime start = DateTime.Now;
+                        bool timedout = false;
+                        TimeSpan timewait = TimeSpan.FromMilliseconds(-1);
+
+                        while(transport == null && !disposed && connectionFailure == null)
+                        {
+                            Tracer.Debug("Waiting for transport to reconnect.");
+
+                            int elapsed = (int) (DateTime.Now - start).TotalMilliseconds;
+                            if(this.timeout > 0 && elapsed > this.timeout)
+                            {
+                                timedout = true;
+                                Tracer.DebugFormat("FailoverTransport.oneway - timed out after {0} mills", elapsed);
+                                break;
+                            }
+
+                            if(this.timeout > 0)
+                            {
+                                // Set the timeout for waiting to be at most 100ms past the maximum timeout length.
+                                int remainingTime = (this.timeout - elapsed) + 100;
+                                timewait = TimeSpan.FromMilliseconds(remainingTime);
+                            }
+
+                            // Release so that the reconnect task can run
+                            try
+                            {
+                                // Wait for something.  The mutex will be pulsed if we connect, or are shut down.
+                                Monitor.Wait(reconnectMutex, timewait);
+                            }
+                            catch(ThreadInterruptedException e)
+                            {
+                                Tracer.DebugFormat("Interrupted: {0}", e.Message);
+                            }
+
+                            transport = ConnectedTransport;
+                        }
+
+                        if(transport == null)
+                        {
+                            // Previous loop may have exited due to use being disposed.
+                            if(disposed)
+                            {
+                                error = new IOException("Transport disposed.");
+                            }
+                            else if(connectionFailure != null)
+                            {
+                                error = connectionFailure;
+                            }
+                            else if(timedout)
+                            {
+                                error = new IOException("Failover oneway timed out after " + timeout + " milliseconds.");
+                            }
+                            else
+                            {
+                                error = new IOException("Unexpected failure.");
+                            }
+                            break;
+                        }
+
+                        // If it was a request and it was not being tracked by
+                        // the state tracker, then hold it in the requestMap so
+                        // that we can replay it later.
+                        Tracked tracked = stateTracker.Track(command);
+                        lock(((ICollection) requestMap).SyncRoot)
+                        {
+                            if(tracked != null && tracked.WaitingForResponse)
+                            {
+                                requestMap.Add(command.CommandId, tracked);
+                            }
+                            else if(tracked == null && command.ResponseRequired)
+                            {
+                                requestMap.Add(command.CommandId, command);
+                            }
+                        }
+
+                        // Send the message.
+                        try
+                        {
+                            transport.Oneway(command);
+                            stateTracker.TrackBack(command);
+                        }
+                        catch(Exception e)
+                        {
+                            // If the command was not tracked.. we will retry in this method
+                            // otherwise we need to trigger a reconnect before returning as
+                            // the transport is failed.
+                            if (tracked == null)
+                            {
+                                // since we will retry in this method.. take it
+                                // out of the request map so that it is not
+                                // sent 2 times on recovery
+                                if(command.ResponseRequired)
+                                {
+                                    lock(((ICollection) requestMap).SyncRoot)
+                                    {
+                                        requestMap.Remove(command.CommandId);
+                                    }
+                                }
+
+                                // Rethrow the exception so it will handled by
+                                // the outer catch
+                                throw;
+                            }
+                            else
+                            {
+								if (Tracer.IsDebugEnabled)
+								{
+                                	Tracer.DebugFormat("Send Oneway attempt: {0} failed: Message = {1}", 
+									                   i, e.Message);
+                                	Tracer.DebugFormat("Failed Message Was: {0}", command);
+								}
+                                HandleTransportFailure(e);
+                            }
+                        }
+
+                        return;
+                    }
+                    catch(Exception e)
+                    {
+						if (Tracer.IsDebugEnabled)
+						{
+                        	Tracer.DebugFormat("Send Oneway attempt: {0} failed: Message = {1}", 
+							                   i, e.Message);
+                        	Tracer.DebugFormat("Failed Message Was: {0}", command);
+						}
+                        HandleTransportFailure(e);
+                    }
+                }
+            }
+
+            if(!disposed)
+            {
+                if(error != null)
+                {
+                    throw error;
+                }
+            }
+        }
+
+        public void Add(bool rebalance, Uri[] urisToAdd)
+        {
+			bool newUri = false;
+            lock(uris)
+            {
+                foreach (Uri uri in urisToAdd)
+                {
+                    if(!Contains(uri))
+                    {
+                        uris.Add(uri);
+						newUri = true;
+                    }
+                }
+            }
+
+			if (newUri)
+			{
+            	Reconnect(rebalance);
+			}
+        }
+
+        public void Add(bool rebalance, String u)
+        {
+            try
+            {
+                Add(rebalance, new Uri[] { new Uri(u) });
+            }
+            catch(Exception e)
+            {
+                Tracer.ErrorFormat("Failed to parse URI '{0}': {1}", u, e.Message);
+            }
+        }
+
+        public void Remove(bool rebalance, Uri[] u)
+        {
+            lock(uris)
+            {
+                for(int i = 0; i < u.Length; i++)
+                {
+                    uris.Remove(u[i]);
+                }
+            }
+
+            Reconnect(rebalance);
+        }
+
+        public void Remove(bool rebalance, String u)
+        {
+            try
+            {
+                Remove(rebalance, new Uri[] { new Uri(u) });
+            }
+            catch(Exception e)
+            {
+                Tracer.ErrorFormat("Failed to parse URI '{0}': {1}", u, e.Message);
+            }
+        }
+
+        public void Reconnect(Uri uri)
+        {
+            Add(true, new Uri[] { uri });
+        }
+
+	    public void Reconnect(bool rebalance)
+		{
+			lock(reconnectMutex) 
+			{
+	            if(started) 
+				{
+	                if (rebalance) 
+					{
+	                    doRebalance = true;
+	                }
+                    Tracer.Debug("Waking up reconnect task");
+	                try 
+					{
+	                    reconnectTask.Wakeup();
+	                } 
+					catch (ThreadInterruptedException) 
+					{
+	                }
+	            } 
+				else 
+				{
+                    Tracer.Debug("Reconnect was triggered but transport is not started yet. Wait for start to connect the transport.");
+	            }
+	        }
+	    }
+
+        private List<Uri> ConnectList
+        {
+            get
+            {
+				if (updated.Count != 0)
+				{
+					return updated;
+				}
+
+                List<Uri> l = new List<Uri>(uris);
+                bool removed = false;
+                if(failedConnectTransportURI != null)
+                {
+                    removed = l.Remove(failedConnectTransportURI);
+                }
+
+                if(Randomize)
+                {
+					Shuffle(l);
+                }
+
+                if(removed)
+                {
+                    l.Add(failedConnectTransportURI);
+                }
+
+		        if (Tracer.IsDebugEnabled)
+				{
+					Tracer.DebugFormat("Uri connection list: {0} from: {1}", 
+					                   PrintableUriList(l), PrintableUriList(uris));
+		        }
+
+                return l;
+            }
+        }
+
+        protected void RestoreTransport(ITransport t)
+        {
+            Tracer.Info("Restoring previous transport connection.");
+            t.Start();
+
+            // Send information to the broker - informing it we are a fault tolerant client
+            t.Oneway(new ConnectionControl() { FaultTolerant = true });
+            stateTracker.DoRestore(t);
+
+            Tracer.Info("Sending queued commands...");
+            Dictionary<int, Command> tmpMap = null;
+            lock(((ICollection) requestMap).SyncRoot)
+            {
+                tmpMap = new Dictionary<int, Command>(requestMap);
+            }
+
+            foreach(Command command in tmpMap.Values)
+            {
+                if(command.IsMessageAck)
+                {
+                    Tracer.Debug("Stored MessageAck being dropped as stale.");
+                    OnCommand(this, new Response() { CorrelationId = command.CommandId });
+                    continue;
+                }
+
+                t.Oneway(command);
+            }
+        }
+
+        public Uri RemoteAddress
+        {
+            get
+            {
+                if(ConnectedTransport != null)
+                {
+                    return ConnectedTransport.RemoteAddress;
+                }
+                return null;
+            }
+        }
+
+        public Object Narrow(Type type)
+        {
+            if(this.GetType().Equals(type))
+            {
+                return this;
+            }
+            else if(ConnectedTransport != null)
+            {
+                return ConnectedTransport.Narrow(type);
+            }
+
+            return null;
+        }
+
+        private bool DoConnect()
+        {
+            lock(reconnectMutex)
+            {
+				if (disposed || connectionFailure != null)
+				{
+					Monitor.PulseAll(reconnectMutex);
+				}
+
+            	if ((connectedTransport.Value != null && !doRebalance && !priorityBackupAvailable) || disposed || connectionFailure != null)
+				{
+                    return false;
+                }
+                else
+                {
+                    List<Uri> connectList = ConnectList;
+                    if(connectList.Count == 0)
+                    {
+                        Failure = new NMSConnectionException("No URIs available for connection.");
+                    }
+                    else
+                    {
+	                    if (doRebalance)
+						{
+	                        if (connectedToPriority || CompareUris(connectList[0], connectedTransportURI))
+							{
+	                            // already connected to first in the list, no need to rebalance
+	                            doRebalance = false;
+	                            return false;
+	                        } 
+							else
+							{
+	                            if (Tracer.IsDebugEnabled)
+								{
+									Tracer.DebugFormat("Doing rebalance from: {0} to {1}", 
+									                   connectedTransportURI, PrintableUriList(connectList));
+	                            }
+	                            try 
+								{
+	                                ITransport current = this.connectedTransport.GetAndSet(null);
+	                                if (current != null) 
+									{
+	                                    DisposeTransport(current);
+	                                }
+	                            } 
+								catch (Exception e) 
+								{
+	                            	if (Tracer.IsDebugEnabled)
+									{
+										Tracer.DebugFormat("Caught an exception stopping existing " + 
+										                   "transport for rebalance {0}", e.Message);
+	                                }
+	                            }
+	                        }
+
+	                        doRebalance = false;
+	                    }
+
+	                    ResetReconnectDelay();
+
+	                    ITransport transport = null;
+	                    Uri uri = null;
+
+	                    // If we have a backup already waiting lets try it.
+	                    lock(backupMutex) 
+						{
+	                        if ((priorityBackup || backup) && backups.Count > 0)
+							{
+                            	List<BackupTransport> l = new List<BackupTransport>(backups);
+	                            if (randomize) 
+								{
+									Shuffle(l);
+	                            }
+								BackupTransport bt = l[0];
+								l.RemoveAt(0);
+	                            backups.Remove(bt);
+	                            transport = bt.Transport;
+	                            uri = bt.Uri;
+	                            if (priorityBackup && priorityBackupAvailable) 
+								{
+	                                ITransport old = this.connectedTransport.GetAndSet(null);
+	                                if (old != null) 
+									{
+	                                    DisposeTransport(old);
+	                                }
+	                                priorityBackupAvailable = false;
+	                            }
+	                        }
+	                    }
+
+	                    // Sleep for the reconnectDelay if there's no backup and we aren't trying
+	                    // for the first time, or we were disposed for some reason.
+	                    if (transport == null && !firstConnection && (reconnectDelay > 0) && !disposed) 
+						{
+	                        lock(sleepMutex) 
+							{
+	                            if (Tracer.IsDebugEnabled)
+								{
+									Tracer.DebugFormat("Waiting {0} ms before attempting connection.", reconnectDelay);
+	                            }
+	                            try 
+								{
+	                                Monitor.Wait(sleepMutex, reconnectDelay);
+	                            }
+								catch (ThreadInterruptedException)
+								{
+	                            }
+	                        }
+	                    }
+
+						IEnumerator<Uri> iter = connectList.GetEnumerator();
+	                    while ((transport != null || iter.MoveNext()) && (connectedTransport.Value == null && !disposed))
+						{
+	                        try 
+							{
+	                            if (Tracer.IsDebugEnabled)
+								{
+									Tracer.DebugFormat("Attempting {0}th connect to: {1}",
+									                   connectFailures, uri);
+	                            }
+
+								// We could be starting with a backup and if so we wait to grab a
+	                            // URI from the pool until next time around.
+	                            if (transport == null) 
+								{
+	                                uri = iter.Current;
+	                                transport = TransportFactory.CompositeConnect(uri);
+	                            }
+
+                                transport.Command = OnCommand;
+                                transport.Exception = OnException;
+	                            transport.Start();
+
+	                            if (started && !firstConnection) 
+								{
+	                                RestoreTransport(transport);
+	                            }
+
+	                            if (Tracer.IsDebugEnabled)
+								{
+	                                Tracer.Debug("Connection established");
+	                            }
+	                            reconnectDelay = initialReconnectDelay;
+	                            connectedTransportURI = uri;
+	                            connectedTransport.Value = transport;
+								connectedToPriority = IsPriority(connectedTransportURI);
+	                            Monitor.PulseAll(reconnectMutex);
+	                            connectFailures = 0;
+
+								// Try to wait long enough for client to init the event callbacks.
+								listenerLatch.await(TimeSpan.FromSeconds(2));
+
+	                            if (Resumed != null) 
+								{
+	                                Resumed(transport);
+	                            }
+								else 
+								{
+	                                if (Tracer.IsDebugEnabled) 
+									{
+	                                    Tracer.Debug("transport resumed by transport listener not set");
+	                                }
+	                            }
+
+	                            if (firstConnection) 
+								{
+	                                firstConnection = false;
+	                                Tracer.Info("Successfully connected to " + uri);
+	                            }
+								else 
+								{
+	                                Tracer.Info("Successfully reconnected to " + uri);
+	                            }
+
+	                            connected = true;
+	                            return false;
+	                        }
+							catch (Exception e) 
+							{
+	                            failure = e;
+                                if (Tracer.IsDebugEnabled) 
+								{
+	                                Tracer.Debug("Connect fail to: " + uri + ", reason: " + e.Message);
+	                            }
+	                            if (transport != null) 
+								{
+	                                try 
+									{
+	                                    transport.Stop();
+	                                    transport = null;
+	                                }
+									catch (Exception ee) 
+									{
+	                                	if (Tracer.IsDebugEnabled) 
+										{
+	                                        Tracer.Debug("Stop of failed transport: " + transport +
+	                                                     " failed with reason: " + ee.Message);
+	                                    }
+	                                }
+	                            }
+	                        }
+	                    }
+					}
+				}
+            
+	            int reconnectLimit = CalculateReconnectAttemptLimit();
+
+	            connectFailures++;
+	            if (reconnectLimit != INFINITE && connectFailures >= reconnectLimit) 
+				{
+					Tracer.ErrorFormat("Failed to connect to {0} after: {1} attempt(s)", 
+					                   PrintableUriList(uris), connectFailures);
+	                connectionFailure = failure;
+
+	                // Make sure on initial startup, that the transportListener has been
+	                // initialized for this instance.
+					listenerLatch.await(TimeSpan.FromSeconds(2));
+	                PropagateFailureToExceptionListener(connectionFailure);
+	                return false;
+	            }
+	        }
+
+	        if(!disposed)
+			{
+	            DoDelay();
+	        }
+
+	        return !disposed;
+        }
+
+        private bool BuildBackups()
+        {
+            lock(backupMutex)
+            {
+            	if (!disposed && (backup || priorityBackup) && backups.Count < backupPoolSize) 
+				{
+	                List<Uri> backupList = new List<Uri>(priorityList);
+                    List<Uri> connectList = ConnectList;
+	                foreach(Uri uri in connectList) 
+					{
+	                    if (!backupList.Contains(uri)) 
+						{
+	                        backupList.Add(uri);
+	                    }
+	                }
+                    foreach(BackupTransport bt in backups)
+                    {
+                        if(bt.Disposed)
+                        {
+                            backups.Remove(bt);
+                        }
+                    }
+
+                    foreach(Uri uri in connectList)
+                    {
+						if (disposed)
+						{
+							break;
+						}
+
+                        if(ConnectedTransportURI != null && !ConnectedTransportURI.Equals(uri))
+                        {
+                            try
+                            {
+                                BackupTransport bt = new BackupTransport(this)
+                                {
+                                    Uri = uri
+                                };
+
+                                if(!backups.Contains(bt))
+                                {
+                                    ITransport t = TransportFactory.CompositeConnect(uri);
+                                    t.Command = bt.OnCommand;
+                                    t.Exception = bt.OnException;
+                                    t.Start();
+                                    bt.Transport = t;
+	                                if (priorityBackup && IsPriority(uri))
+									{
+	                                   priorityBackupAvailable = true;
+	                                   backups.Insert(0, bt);
+	                                }
+									else 
+									{
+	                                    backups.Add(bt);
+	                                }
+                                }
+                            }
+                            catch(Exception e)
+                            {
+                                Tracer.DebugFormat("Failed to build backup: {0}", e.Message);
+                            }
+                        }
+
+                        if(backups.Count == BackupPoolSize)
+                        {
+                            break;
+                        }
+                    }
+                }
+            }
+
+            return false;
+        }
+
+        public void ConnectionInterruptProcessingComplete(ConnectionId connectionId)
+        {
+            lock(reconnectMutex)
+            {
+                Tracer.Debug("Connection Interrupt Processing is complete for ConnectionId: " + connectionId);
+                stateTracker.ConnectionInterruptProcessingComplete(this, connectionId);
+            }
+        }
+
+        public void UpdateURIs(bool rebalance, Uri[] updatedURIs)
+        {
+            if(IsUpdateURIsSupported)
+            {
+                Dictionary<Uri, bool> copy = new Dictionary<Uri, bool>();
+                foreach(Uri uri in updated)
+                {
+                    if(uri != null)
+                    {
+                        copy[uri] = true;
+                    }
+                }
+	
+				updated.Clear();
+
+                if(updatedURIs != null && updatedURIs.Length > 0)
+                {
+                    Dictionary<Uri, bool> uriSet = new Dictionary<Uri, bool>();
+                    for(int i = 0; i < updatedURIs.Length; i++)
+                    {
+                        Uri uri = updatedURIs[i];
+                        if(uri != null)
+                        {
+                            uriSet[uri] = true;
+                        }
+                    }
+
+                    foreach(Uri uri in uriSet.Keys)
+                    {
+                        if(!updated.Contains(uri))
+                        {
+							updated.Add(uri);
+                        }
+                    }
+
+					if (Tracer.IsDebugEnabled)
+					{
+						Tracer.DebugFormat("Updated URIs list {0}", PrintableUriList(updated));
+					}
+
+	                if (!(copy.Count == 0 && updated.Count == 0) && !copy.Keys.Equals(updated))
+					{
+	                    BuildBackups();
+	                    lock(reconnectMutex) 
+						{
+	                        Reconnect(rebalance);
+	                    }
+	                }
+                }
+            }
+        }
+
+        public void HandleConnectionControl(ConnectionControl control)
+        {
+            string reconnectStr = control.ReconnectTo;
+
+            if(reconnectStr != null)
+            {
+                reconnectStr = reconnectStr.Trim();
+                if(reconnectStr.Length > 0)
+                {
+                    try
+                    {
+                        Uri uri = new Uri(reconnectStr);
+                        if(IsReconnectSupported)
+                        {
+                            Tracer.Info("Reconnecting to: " + uri.OriginalString);
+                            Reconnect(uri);
+                        }
+                    }
+                    catch(Exception e)
+                    {
+                        Tracer.ErrorFormat("Failed to handle ConnectionControl reconnect to {0}: {1}", reconnectStr, e);
+                    }
+                }
+            }
+
+            ProcessNewTransports(control.RebalanceConnection, control.ConnectedBrokers);
+        }
+
+        private void ProcessNewTransports(bool rebalance, String newTransports)
+        {
+            if(newTransports != null)
+            {
+                newTransports = newTransports.Trim();
+
+                if(newTransports.Length > 0 && IsUpdateURIsSupported)
+                {
+                    List<Uri> list = new List<Uri>();
+					ProcessDelimitedUriList(newTransports, list);
+
+                    if(list.Count != 0)
+                    {
+                        try
+                        {
+                            UpdateURIs(rebalance, list.ToArray());
+                        }
+                        catch
+                        {
+                            Tracer.Error("Failed to update transport URI's from: " + newTransports);
+                        }
+                    }
+                }
+            }        
+		}
+
+		private void ProcessDelimitedUriList(String priorityUris, List<Uri> target)
+		{
+            String[] tokens = priorityUris.Split(new Char[] { ',' });
+
+            foreach(String str in tokens)
+            {
+                try
+                {
+                    Uri uri = new Uri(str);
+                    target.Add(uri);
+
+					if (Tracer.IsDebugEnabled)
+					{
+						Tracer.DebugFormat("Adding new Uri[{0}] to list,", uri);
+					}
+                }
+                catch (Exception e)
+                {
+					Tracer.ErrorFormat("Failed to parse broker address: {0} because of: {1}",
+					                   str, e.Message);
+                }
+            }
+		}
+
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        public void Dispose(bool disposing)
+        {
+            this.Stop();
+            disposed = true;
+        }
+
+        public int CompareTo(Object o)
+        {
+            if(o is FailoverTransport)
+            {
+                FailoverTransport oo = o as FailoverTransport;
+
+                return this.id - oo.id;
+            }
+            else
+            {
+                throw new ArgumentException();
+            }
+        }
+
+        public override String ToString()
+        {
+            return ConnectedTransportURI == null ? "unconnected" : ConnectedTransportURI.ToString();
+        }
+
+	    internal bool IsPriority(Uri uri) 
+		{
+			if (priorityBackup)
+			{
+		        if (priorityList.Count > 0) 
+				{
+		            return priorityList.Contains(uri);
+		        }
+
+				if (this.uris.Count > 0) 
+				{
+		        	return uris[0].Equals(uri);
+				}
+			}
+			return false;
+	    }
+
+		public void DisposeTransport(ITransport transport) 
+		{
+			transport.Command = DisposedOnCommand;
+			transport.Exception = DisposedOnException;
+
+			try 
+			{
+	            transport.Stop();
+        	}
+			catch (Exception e) 
+			{
+				Tracer.DebugFormat("Could not stop transport: {0]. Reason: {1}", transport, e.Message);
+        	}
+    	}
+
+	    private void ResetReconnectDelay() 
+		{
+	        if (!useExponentialBackOff || reconnectDelay == DEFAULT_INITIAL_RECONNECT_DELAY) 
+			{
+	            reconnectDelay = initialReconnectDelay;
+	        }
+	    }
+
+	    private void DoDelay()
+		{
+	        if (reconnectDelay > 0) 
+			{
+	            lock(sleepMutex) 
+				{
+	                if (Tracer.IsDebugEnabled) 
+					{
+						Tracer.DebugFormat("Waiting {0} ms before attempting connection", reconnectDelay);
+	                }
+	                try 
+					{
+						Monitor.Wait(sleepMutex, reconnectDelay);
+	                } 
+					catch (ThreadInterruptedException) 
+					{
+	                }
+	            }
+	        }
+
+	        if (useExponentialBackOff) 
+			{
+	            // Exponential increment of reconnect delay.
+	            reconnectDelay *= backOffMultiplier;
+	            if (reconnectDelay > maxReconnectDelay) 
+				{
+	                reconnectDelay = maxReconnectDelay;
+	            }
+	        }
+	    }
+
+	    private void PropagateFailureToExceptionListener(Exception exception) 
+		{
+	        if (Exception != null) 
+			{
+                Exception(this, exception);
+	        }
+			else
+			{
+				Exception(this, new IOException());
+			}
+			Monitor.PulseAll(reconnectMutex);
+	    }
+
+	    private int CalculateReconnectAttemptLimit() 
+		{
+	        int maxReconnectValue = this.maxReconnectAttempts;
+	        if (firstConnection && this.startupMaxReconnectAttempts != INFINITE) 
+			{
+	            maxReconnectValue = this.startupMaxReconnectAttempts;
+	        }
+	        return maxReconnectValue;
+	    }
+
+		public void Shuffle<T>(List<T> list)  
+		{  
+            Random random = new Random(DateTime.Now.Millisecond);
+		    int index = list.Count;  
+		    while (index > 1) 
+			{  
+		        index--;  
+		        int k = random.Next(index + 1);  
+		        T value = list[k];  
+		        list[k] = list[index];  
+		        list[index] = value;  
+		    }  
+		}
+
+		private String PrintableUriList(List<Uri> uriList)
+		{
+			if (uriList.Count == 0)
+			{
+				return "";
+			}
+
+			StringBuilder builder = new StringBuilder();
+			for (int i = 0; i < uriList.Count; ++i)
+			{
+				builder.Append(uriList[i]);
+				if (i < (uriList.Count - 1))
+				{
+					builder.Append(",");
+				}
+			}
+
+			return builder.ToString();
+		}
+
+		private bool CompareUris(Uri first, Uri second) 
+		{
+			bool result = false;
+            if (first.Port == second.Port)
+			{
+                IPHostEntry firstAddr = null;
+                IPHostEntry secondAddr = null;
+                try 
+				{
+            		firstAddr = Dns.GetHostEntry(first.Host);
+            		secondAddr = Dns.GetHostEntry(second.Host);
+
+	                if (firstAddr.Equals(secondAddr)) 
+					{
+						result = true;
+	                }
+				} 
+				catch(Exception e)
+				{
+                    if (firstAddr == null) 
+					{
+						Tracer.WarnFormat("Failed to Lookup IPHostEntry for URI[{0}] : {1}", first, e);
+                    } 
+					else 
+					{
+						Tracer.WarnFormat("Failed to Lookup IPHostEntry for URI[{0}] : {1}", second, e);
+                    }
+
+					if(String.Equals(first.Host, second.Host, StringComparison.CurrentCultureIgnoreCase))
+					{
+						result = true;
+                    }
+                }
+
+            }
+
+			return result;
+		}
+
+	    private bool Contains(Uri newURI) 
+		{
+	        bool result = false;
+	        foreach (Uri uri in uris) 
+			{
+	            if (CompareUris(newURI, uri))
+				{
+					result = true;
+					break;
+	            }
+	        }
+
+	        return result;
+	    }
+    }
+}
diff --git a/src/main/csharp/Transport/Failover/FailoverTransportFactory.cs b/src/Transport/Failover/FailoverTransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Failover/FailoverTransportFactory.cs
rename to src/Transport/Failover/FailoverTransportFactory.cs
diff --git a/src/main/csharp/Transport/FutureResponse.cs b/src/Transport/FutureResponse.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Transport/FutureResponse.cs
rename to src/Transport/FutureResponse.cs
diff --git a/src/main/csharp/Transport/ICompositeTransport.cs b/src/Transport/ICompositeTransport.cs
similarity index 99%
rename from src/main/csharp/Transport/ICompositeTransport.cs
rename to src/Transport/ICompositeTransport.cs
index b08b27a..85cdf1b 100644
--- a/src/main/csharp/Transport/ICompositeTransport.cs
+++ b/src/Transport/ICompositeTransport.cs
@@ -1,49 +1,49 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-

-namespace Apache.NMS.ActiveMQ.Transport

-{

-	public interface ICompositeTransport : ITransport

-	{

-		/// <summary>

-		/// Adds a new set of Uris to the list of Uris that this Transport can connect to.

-		/// </summary>

-		/// <param name="rebalance">

-		/// A <see cref="System.Boolean"/>

-		/// Should the current connection be broken and a new one created.

-		/// </param>

-		/// <param name="uris">

-		/// A <see cref="Uri"/>

-		/// </param>

-		void Add(bool rebalance, Uri[] uris);

-

-		/// <summary>

-		/// Remove the given Uris from this Transports list of known Uris.

-		/// </summary>

-		/// <param name="rebalance">

-		/// A <see cref="System.Boolean"/>

-		/// Should the current connection be broken and a new one created.

-		/// </param>

-		/// <param name="uris">

-		/// A <see cref="Uri"/>

-		/// </param>

-		void Remove(bool rebalance, Uri[] uris);

-	}

-}

-

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Apache.NMS.ActiveMQ.Transport
+{
+	public interface ICompositeTransport : ITransport
+	{
+		/// <summary>
+		/// Adds a new set of Uris to the list of Uris that this Transport can connect to.
+		/// </summary>
+		/// <param name="rebalance">
+		/// A <see cref="System.Boolean"/>
+		/// Should the current connection be broken and a new one created.
+		/// </param>
+		/// <param name="uris">
+		/// A <see cref="Uri"/>
+		/// </param>
+		void Add(bool rebalance, Uri[] uris);
+
+		/// <summary>
+		/// Remove the given Uris from this Transports list of known Uris.
+		/// </summary>
+		/// <param name="rebalance">
+		/// A <see cref="System.Boolean"/>
+		/// Should the current connection be broken and a new one created.
+		/// </param>
+		/// <param name="uris">
+		/// A <see cref="Uri"/>
+		/// </param>
+		void Remove(bool rebalance, Uri[] uris);
+	}
+}
+
diff --git a/src/main/csharp/Transport/ITransport.cs b/src/Transport/ITransport.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Transport/ITransport.cs
rename to src/Transport/ITransport.cs
diff --git a/src/main/csharp/Transport/ITransportFactory.cs b/src/Transport/ITransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/ITransportFactory.cs
rename to src/Transport/ITransportFactory.cs
diff --git a/src/main/csharp/Transport/IWireFormat.cs b/src/Transport/IWireFormat.cs
similarity index 100%
rename from src/main/csharp/Transport/IWireFormat.cs
rename to src/Transport/IWireFormat.cs
diff --git a/src/main/csharp/Transport/InactivityMonitor.cs b/src/Transport/InactivityMonitor.cs
similarity index 100%
rename from src/main/csharp/Transport/InactivityMonitor.cs
rename to src/Transport/InactivityMonitor.cs
diff --git a/src/main/csharp/Transport/LoggingTransport.cs b/src/Transport/LoggingTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/LoggingTransport.cs
rename to src/Transport/LoggingTransport.cs
diff --git a/src/main/csharp/Transport/Mock/IResponseBuilder.cs b/src/Transport/Mock/IResponseBuilder.cs
similarity index 100%
rename from src/main/csharp/Transport/Mock/IResponseBuilder.cs
rename to src/Transport/Mock/IResponseBuilder.cs
diff --git a/src/main/csharp/Transport/Mock/MockTransport.cs b/src/Transport/Mock/MockTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/Mock/MockTransport.cs
rename to src/Transport/Mock/MockTransport.cs
diff --git a/src/main/csharp/Transport/Mock/MockTransportFactory.cs b/src/Transport/Mock/MockTransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Mock/MockTransportFactory.cs
rename to src/Transport/Mock/MockTransportFactory.cs
diff --git a/src/main/csharp/Transport/Mock/OpenWireResponseBuilder.cs b/src/Transport/Mock/OpenWireResponseBuilder.cs
similarity index 100%
rename from src/main/csharp/Transport/Mock/OpenWireResponseBuilder.cs
rename to src/Transport/Mock/OpenWireResponseBuilder.cs
diff --git a/src/main/csharp/Transport/MutexTransport.cs b/src/Transport/MutexTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/MutexTransport.cs
rename to src/Transport/MutexTransport.cs
diff --git a/src/main/csharp/Transport/ResponseCorrelator.cs b/src/Transport/ResponseCorrelator.cs
similarity index 100%
rename from src/main/csharp/Transport/ResponseCorrelator.cs
rename to src/Transport/ResponseCorrelator.cs
diff --git a/src/main/csharp/Transport/Tcp/SslTransport.cs b/src/Transport/Tcp/SslTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/Tcp/SslTransport.cs
rename to src/Transport/Tcp/SslTransport.cs
diff --git a/src/main/csharp/Transport/Tcp/SslTransportFactory.cs b/src/Transport/Tcp/SslTransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Tcp/SslTransportFactory.cs
rename to src/Transport/Tcp/SslTransportFactory.cs
diff --git a/src/main/csharp/Transport/Tcp/TcpTransport.cs b/src/Transport/Tcp/TcpTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/Tcp/TcpTransport.cs
rename to src/Transport/Tcp/TcpTransport.cs
diff --git a/src/main/csharp/Transport/Tcp/TcpTransportFactory.cs b/src/Transport/Tcp/TcpTransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Tcp/TcpTransportFactory.cs
rename to src/Transport/Tcp/TcpTransportFactory.cs
diff --git a/src/main/csharp/Transport/TransportFactory.cs b/src/Transport/TransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/TransportFactory.cs
rename to src/Transport/TransportFactory.cs
diff --git a/src/main/csharp/Transport/TransportFilter.cs b/src/Transport/TransportFilter.cs
similarity index 100%
rename from src/main/csharp/Transport/TransportFilter.cs
rename to src/Transport/TransportFilter.cs
diff --git a/src/main/csharp/Transport/WireFormatNegotiator.cs b/src/Transport/WireFormatNegotiator.cs
similarity index 100%
rename from src/main/csharp/Transport/WireFormatNegotiator.cs
rename to src/Transport/WireFormatNegotiator.cs
diff --git a/src/main/csharp/Util/ActiveMQMessageAudit.cs b/src/Util/ActiveMQMessageAudit.cs
similarity index 100%
rename from src/main/csharp/Util/ActiveMQMessageAudit.cs
rename to src/Util/ActiveMQMessageAudit.cs
diff --git a/src/main/csharp/Util/ActiveMQMessageTransformation.cs b/src/Util/ActiveMQMessageTransformation.cs
similarity index 100%
rename from src/main/csharp/Util/ActiveMQMessageTransformation.cs
rename to src/Util/ActiveMQMessageTransformation.cs
diff --git a/src/main/csharp/Util/AdvisorySupport.cs b/src/Util/AdvisorySupport.cs
similarity index 100%
rename from src/main/csharp/Util/AdvisorySupport.cs
rename to src/Util/AdvisorySupport.cs
diff --git a/src/main/csharp/Util/BitArray.cs b/src/Util/BitArray.cs
similarity index 100%
rename from src/main/csharp/Util/BitArray.cs
rename to src/Util/BitArray.cs
diff --git a/src/main/csharp/Util/BitArrayBin.cs b/src/Util/BitArrayBin.cs
similarity index 100%
rename from src/main/csharp/Util/BitArrayBin.cs
rename to src/Util/BitArrayBin.cs
diff --git a/src/main/csharp/Util/ConnectionAudit.cs b/src/Util/ConnectionAudit.cs
similarity index 100%
rename from src/main/csharp/Util/ConnectionAudit.cs
rename to src/Util/ConnectionAudit.cs
diff --git a/src/main/csharp/Util/FactoryAttribute.cs b/src/Util/FactoryAttribute.cs
similarity index 100%
rename from src/main/csharp/Util/FactoryAttribute.cs
rename to src/Util/FactoryAttribute.cs
diff --git a/src/main/csharp/Util/FactoryFinder.cs b/src/Util/FactoryFinder.cs
similarity index 100%
rename from src/main/csharp/Util/FactoryFinder.cs
rename to src/Util/FactoryFinder.cs
diff --git a/src/main/csharp/Util/FifoMessageDispatchChannel.cs b/src/Util/FifoMessageDispatchChannel.cs
similarity index 100%
rename from src/main/csharp/Util/FifoMessageDispatchChannel.cs
rename to src/Util/FifoMessageDispatchChannel.cs
diff --git a/src/main/csharp/Util/ISuspendable.cs b/src/Util/ISuspendable.cs
similarity index 100%
rename from src/main/csharp/Util/ISuspendable.cs
rename to src/Util/ISuspendable.cs
diff --git a/src/main/csharp/Util/IdGenerator.cs b/src/Util/IdGenerator.cs
similarity index 100%
rename from src/main/csharp/Util/IdGenerator.cs
rename to src/Util/IdGenerator.cs
diff --git a/src/main/csharp/Util/IntrospectionSupport.cs b/src/Util/IntrospectionSupport.cs
similarity index 100%
rename from src/main/csharp/Util/IntrospectionSupport.cs
rename to src/Util/IntrospectionSupport.cs
diff --git a/src/main/csharp/Util/LRUCache.cs b/src/Util/LRUCache.cs
similarity index 100%
rename from src/main/csharp/Util/LRUCache.cs
rename to src/Util/LRUCache.cs
diff --git a/src/main/csharp/Util/MemoryUsage.cs b/src/Util/MemoryUsage.cs
similarity index 100%
rename from src/main/csharp/Util/MemoryUsage.cs
rename to src/Util/MemoryUsage.cs
diff --git a/src/main/csharp/Util/MessageDispatchChannel.cs b/src/Util/MessageDispatchChannel.cs
similarity index 100%
rename from src/main/csharp/Util/MessageDispatchChannel.cs
rename to src/Util/MessageDispatchChannel.cs
diff --git a/src/main/csharp/Util/ServiceStopper.cs b/src/Util/ServiceStopper.cs
similarity index 100%
rename from src/main/csharp/Util/ServiceStopper.cs
rename to src/Util/ServiceStopper.cs
diff --git a/src/main/csharp/Util/SimplePriorityMessageDispatchChannel.cs b/src/Util/SimplePriorityMessageDispatchChannel.cs
similarity index 100%
rename from src/main/csharp/Util/SimplePriorityMessageDispatchChannel.cs
rename to src/Util/SimplePriorityMessageDispatchChannel.cs
diff --git a/src/main/ndoc/NamespaceSummary.xml b/src/main/ndoc/NamespaceSummary.xml
deleted file mode 100644
index b8e19d5..0000000
--- a/src/main/ndoc/NamespaceSummary.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-   
-    http://www.apache.org/licenses/LICENSE-2.0
-   
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<namespaces>
-    <namespace name="NMS">
-        The <b>NMS</b> namespace defines the .Net Message System API which is an interface to messaging systems rather like JMS is for Java.
-    </namespace>
-</namespaces>
diff --git a/src/main/sandcastle/feedback_content.xml b/src/main/sandcastle/feedback_content.xml
deleted file mode 100644
index ee30a12..0000000
--- a/src/main/sandcastle/feedback_content.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<content xml:space="preserve">

-

-  <item id="fb_alias">activemq.docs@apache.org</item>

-  <item id="fb_product"></item>

-  <item id="fb_deliverable"></item>

-

-  <item id="fb_subject">Customer%20Feedback</item>

-  <item id="fb_body">%0\dThank%20you%20for%20your%20feedback.%20The%20developer%20writing%20teams%20use%20your%20feedback%20to%20improve%20documentation.%20While%20we%20are%20reviewing%20your%20feedback,%20we%20may%20send%20you%20e-mail%20to%20ask%20for%20clarification%20or%20feedback%20on%20a%20solution.%20We%20do%20not%20use%20your%20e-mail%20address%20for%20any%20other%20purpose.%0\d</item>

- 

-   <item id="fb_headerFeedBack">Send Feedback</item>

-  

-

-   <!-- feedback values for sandcastle scenario -->

-

-   <item id="feedback_alias"></item>

-   <item id="feedback_product"></item>

-   <item id="feedback_deliverable"></item>

-   <item id="feedback_fileVersion"></item>

-   <item id="feedback_topicVersion"></item>

-   <item id="feedback_body"></item>

-   <item id="feedback_subject"></item>

-

-   <item id="fb_Introduction">We value your feedback. To rate this topic and send feedback about this topic to the documentation team, click a rating, and then click <b>Send Feedback</b>. For assistance with support issues, refer to the technical support information included with the product.</item>

-

-   <item id="fb_Send">Send Feedback</item>

-   <item id="fb_Poor">Poor</item>

-   <item id="fb_Excellent">Outstanding</item>

-   <item id="fb_EnterFeedbackText">To e-mail your feedback, click here:</item>

-   <item id="fb_Title">Documentation Feedback</item>

-   <item id="fb_altIcon">Display feedback instructions at the bottom of the page.</item>

-

-</content>
\ No newline at end of file
diff --git a/src/nms-openwire.csproj b/src/nms-openwire.csproj
new file mode 100644
index 0000000..324e5c2
--- /dev/null
+++ b/src/nms-openwire.csproj
@@ -0,0 +1,58 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFrameworks>net40;netstandard2.0</TargetFrameworks>
+    <RootNamespace>Apache.NMS.ActiveMQ</RootNamespace>
+    <AssemblyName>Apache.NMS.ActiveMQ</AssemblyName>
+    <Version>1.8.0</Version>
+    <Company>Apache Software Foundation</Company>
+    <Product>Apache NMS OpenWire</Product>
+    <Description>Apache NMS (.Net Standard Messaging Library): Openwire implementation of Apache NMS API</Description>
+    <Copyright>Copyright (C) 2005-2019 Apache Software Foundation</Copyright>
+    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
+    <PackageProjectUrl>https://activemq.apache.org/components/nms/</PackageProjectUrl>
+    <PackageIconUrl>https://activemq.apache.org/assets/img/activemq_logo_icon.png</PackageIconUrl>
+    <RepositoryUrl>https://github.com/apache/activemq-nms-openwire</RepositoryUrl>
+    <RepositoryType>git</RepositoryType>
+    <PackageTags>apache;activemq;nms;api;net;messaging</PackageTags>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>NMSKey.snk</AssemblyOriginatorKeyFile>
+    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
+    <Authors>Apache ActiveMQ</Authors>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+    <OutputPath>..\..\build\</OutputPath>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Content Include="..\LICENSE.txt" Link="LICENSE.txt" />
+    <Content Include="..\NOTICE.txt" Link="NOTICE.txt" />
+  </ItemGroup>
+
+  <ItemGroup Condition=" '$(TargetFramework)' == 'net35'">
+    <Reference Include="System.Web" />
+  </ItemGroup>
+
+  <ItemGroup Condition=" '$(TargetFramework)' == 'net40'">
+    <Reference Include="System.Web" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Apache.NMS" Version="1.8.0" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <None Include="..\LICENSE.txt">
+      <Pack>True</Pack>
+      <PackagePath></PackagePath>
+    </None>
+  </ItemGroup>
+
+  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
+    <PackageReference Include="System.Runtime">
+      <Version>4.3.1</Version>
+    </PackageReference>
+  </ItemGroup>
+
+</Project>
diff --git a/src/sandbox/alternative-threading/CountDownLatch2.cs b/src/sandbox/alternative-threading/CountDownLatch2.cs
index 9e81685..8af7f9c 100644
--- a/src/sandbox/alternative-threading/CountDownLatch2.cs
+++ b/src/sandbox/alternative-threading/CountDownLatch2.cs
@@ -60,7 +60,7 @@
 		/// <summary>
 		/// Waits forever for the latch to be completed
 		/// <summary>
-        public bool await()
+        public bool Await()
         {
             lock (mutex)
             {
@@ -77,7 +77,7 @@
 		/// Waits the specified amount of time for the latch
 		/// returning true if the latch was acquired
 		/// <summary>
-        public bool await(TimeSpan timeout)
+        public bool Await(TimeSpan timeout)
         {
 			DateTime end = DateTime.Now.Add(timeout);
             lock (mutex)
@@ -101,11 +101,11 @@
 		/// Waits the specified amount of time for the latch
 		/// returning true if the latch was acquired
 		/// <summary>
-        public bool await(int millis)
+        public bool Await(int millis)
         {
 			long ticks = millis * (1000000 / 100); // 1,000,000 nanos in a millisecond
 			TimeSpan span = new TimeSpan(ticks);
-			return await(span);
+			return Await(span);
 		}
     }
 }
diff --git a/src/sandbox/alternative-threading/Dispatcher.cs b/src/sandbox/alternative-threading/Dispatcher.cs
index 405bff2..8098130 100644
--- a/src/sandbox/alternative-threading/Dispatcher.cs
+++ b/src/sandbox/alternative-threading/Dispatcher.cs
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-using ActiveMQ.Commands;
 using ActiveMQ.Util;
-using NMS;
+using Apache.NMS;
 using System;
 using System.Collections;
 using System.Threading;
+using Apache.NMS.ActiveMQ.Commands;
 
 namespace ActiveMQ
 {
diff --git a/src/sandbox/alternative-threading/DispatchingThread.cs b/src/sandbox/alternative-threading/DispatchingThread.cs
index 366ebd2..8e039f3 100644
--- a/src/sandbox/alternative-threading/DispatchingThread.cs
+++ b/src/sandbox/alternative-threading/DispatchingThread.cs
@@ -17,6 +17,7 @@
 using ActiveMQ.Util;
 using System;
 using System.Threading;
+using Apache.NMS;
 
 
 namespace ActiveMQ
diff --git a/src/sandbox/alternative-threading/FutureResponse.cs b/src/sandbox/alternative-threading/FutureResponse.cs
index 61da48d..863acdb 100755
--- a/src/sandbox/alternative-threading/FutureResponse.cs
+++ b/src/sandbox/alternative-threading/FutureResponse.cs
@@ -14,10 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-using ActiveMQ.Commands;
 using System;
 using System.Threading;
 using ActiveMQ.Util;
+using Apache.NMS;
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.Util;
 
 namespace ActiveMQ.Transport
 {
@@ -48,7 +50,7 @@
 	                {
 	                    try
 						{
-							if (maxWait > 0) 
+							if (maxWait > TimeSpan.Zero) 
 							{
 		                        latch.await(maxWait);
 							}
diff --git a/src/test/csharp/AMQNET366Test.cs b/test/AMQNET366Test.cs
similarity index 99%
rename from src/test/csharp/AMQNET366Test.cs
rename to test/AMQNET366Test.cs
index 0d7aca2..1e67773 100644
--- a/src/test/csharp/AMQNET366Test.cs
+++ b/test/AMQNET366Test.cs
@@ -22,8 +22,8 @@
 using Apache.NMS.ActiveMQ.Transport;
 using Apache.NMS.ActiveMQ.Commands;
 using Apache.NMS.Util;
-using Apache.NMS.Test;
 using Apache.NMS.ActiveMQ.Transport.Tcp;
+using Apache.NMS.Test;
 using NUnit.Framework;
 
 namespace Apache.NMS.ActiveMQ.Test
diff --git a/src/test/csharp/AMQNET375Test.cs b/test/AMQNET375Test.cs
similarity index 100%
rename from src/test/csharp/AMQNET375Test.cs
rename to test/AMQNET375Test.cs
diff --git a/src/test/csharp/AMQQueueTransactionTest.cs b/test/AMQQueueTransactionTest.cs
similarity index 100%
rename from src/test/csharp/AMQQueueTransactionTest.cs
rename to test/AMQQueueTransactionTest.cs
diff --git a/src/test/csharp/AMQRedeliveryPolicyTest.cs b/test/AMQRedeliveryPolicyTest.cs
similarity index 100%
rename from src/test/csharp/AMQRedeliveryPolicyTest.cs
rename to test/AMQRedeliveryPolicyTest.cs
diff --git a/src/test/csharp/AMQTopicTransactionTest.cs b/test/AMQTopicTransactionTest.cs
similarity index 100%
rename from src/test/csharp/AMQTopicTransactionTest.cs
rename to test/AMQTopicTransactionTest.cs
diff --git a/src/test/csharp/AMQTransactionTestSupport.cs b/test/AMQTransactionTestSupport.cs
similarity index 100%
rename from src/test/csharp/AMQTransactionTestSupport.cs
rename to test/AMQTransactionTestSupport.cs
diff --git a/src/test/csharp/BatchedMessagePriorityConsumerTest.cs b/test/BatchedMessagePriorityConsumerTest.cs
similarity index 100%
rename from src/test/csharp/BatchedMessagePriorityConsumerTest.cs
rename to test/BatchedMessagePriorityConsumerTest.cs
diff --git a/src/test/csharp/BrokerToNMSExceptionsTest.cs b/test/BrokerToNMSExceptionsTest.cs
similarity index 100%
rename from src/test/csharp/BrokerToNMSExceptionsTest.cs
rename to test/BrokerToNMSExceptionsTest.cs
diff --git a/src/test/csharp/Commands/ActiveMQBytesMessageTest.cs b/test/Commands/ActiveMQBytesMessageTest.cs
similarity index 100%
rename from src/test/csharp/Commands/ActiveMQBytesMessageTest.cs
rename to test/Commands/ActiveMQBytesMessageTest.cs
diff --git a/src/test/csharp/Commands/ActiveMQMapMessageTest.cs b/test/Commands/ActiveMQMapMessageTest.cs
similarity index 100%
rename from src/test/csharp/Commands/ActiveMQMapMessageTest.cs
rename to test/Commands/ActiveMQMapMessageTest.cs
diff --git a/src/test/csharp/Commands/ActiveMQMessageTest.cs b/test/Commands/ActiveMQMessageTest.cs
similarity index 99%
rename from src/test/csharp/Commands/ActiveMQMessageTest.cs
rename to test/Commands/ActiveMQMessageTest.cs
index 6ce971c..deb5589 100644
--- a/src/test/csharp/Commands/ActiveMQMessageTest.cs
+++ b/test/Commands/ActiveMQMessageTest.cs
@@ -157,7 +157,7 @@
 			// We shouldn't get the expected value though if we use the inner property 
 			// name from ActiveMQMessage
 			string correlationId = (string) msg.Properties["correlationId"];
-			Assert.IsNullOrEmpty(correlationId);			
+			Assert.IsTrue(string.IsNullOrEmpty(correlationId));			
 			msg.Properties["correlationId"] = "TEST";
 			correlationId = (string) msg.Properties["correlationId"];
 			Assert.IsFalse(msg.Properties["NMSCorrelationID"].Equals(msg.Properties["correlationId"]));
diff --git a/src/test/csharp/Commands/ActiveMQStreamMessageTest.cs b/test/Commands/ActiveMQStreamMessageTest.cs
similarity index 100%
rename from src/test/csharp/Commands/ActiveMQStreamMessageTest.cs
rename to test/Commands/ActiveMQStreamMessageTest.cs
diff --git a/src/test/csharp/Commands/ActiveMQTextMessageTest.cs b/test/Commands/ActiveMQTextMessageTest.cs
similarity index 99%
rename from src/test/csharp/Commands/ActiveMQTextMessageTest.cs
rename to test/Commands/ActiveMQTextMessageTest.cs
index e23f7d4..5c5badd 100644
--- a/src/test/csharp/Commands/ActiveMQTextMessageTest.cs
+++ b/test/Commands/ActiveMQTextMessageTest.cs
@@ -1,198 +1,198 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.IO;

-using Apache.NMS.ActiveMQ.Commands;

-using Apache.NMS.Util;

-using NUnit.Framework;

-

-namespace Apache.NMS.ActiveMQ.Test.Commands

-{

-    [TestFixture]

-    public class ActiveMQTextMessageTest

-    {

-        [Test]

-        public void TestCommand()

-        {

-            ActiveMQTextMessage message = new ActiveMQTextMessage();

-

-            Assert.IsNull(message.Text);            

-

-            // Test with ASCII Data.

-            message.Text = "Hello World";

-            Assert.IsNotNull(message.Text);

-            Assert.AreEqual("Hello World", message.Text);

-

-            String unicodeString =

-                "This unicode string contains two characters " +

-                "with codes outside an 8-bit code range, " +

-                "Pi (\u03a0) and Sigma (\u03a3).";

-

-            message.Text = unicodeString;

-            Assert.IsNotNull(message.Text);

-            Assert.AreEqual(unicodeString, message.Text);

-        }

-

-        [Test]

-        public void TestShallowCopy()

-        {

-            ActiveMQTextMessage msg = new ActiveMQTextMessage();

-            string testString = "str";

-            msg.Text = testString;

-            Message copy = msg.Clone() as Message;

-            Assert.IsTrue(msg.Text == ((ActiveMQTextMessage) copy).Text);

-        }

-    

-        [Test]

-        public void TestSetText() 

-        {

-            ActiveMQTextMessage msg = new ActiveMQTextMessage();

-            string str = "testText";

-            msg.Text = str;

-            Assert.AreEqual(msg.Text, str);

-        }

-    

-        [Test]

-        public void TestGetBytes() 

-        {

-            ActiveMQTextMessage msg = new ActiveMQTextMessage();

-            String str = "testText";

-            msg.Text = str;

-            msg.BeforeMarshall(null);

-            

-            byte[] bytes = msg.Content;

-            msg = new ActiveMQTextMessage();

-            msg.Content = bytes;

-            

-            Assert.AreEqual(msg.Text, str);

-        }

-    

-        [Test]

-        public void TestClearBody()

-        {

-            ActiveMQTextMessage textMessage = new ActiveMQTextMessage();

-            textMessage.Text = "string";

-            textMessage.ClearBody();

-            Assert.IsFalse(textMessage.ReadOnlyBody);

-            Assert.IsNull(textMessage.Text);

-            try

-            {

-                textMessage.Text = "String";

-                Assert.IsTrue(textMessage.Text.Length > 0);

-            }

-            catch(MessageNotWriteableException)

-            {

-                Assert.Fail("should be writeable");

-            }

-            catch(MessageNotReadableException)

-            {

-                Assert.Fail("should be readable");

-            }

-        }

-    

-        [Test]

-        public void TestReadOnlyBody() 

-        {

-            ActiveMQTextMessage textMessage = new ActiveMQTextMessage();

-            textMessage.Text = "test";

-            textMessage.ReadOnlyBody = true;

-            try 

-            {

-                Assert.IsTrue(textMessage.Text.Length > 0);

-            } 

-            catch(MessageNotReadableException) 

-            {

-                Assert.Fail("should be readable");

-            }

-            try 

-            {

-                textMessage.Text = "test";

-                Assert.Fail("should throw exception");

-            } 

-            catch(MessageNotWriteableException) 

-            {

-            }

-        }

-    

-        [Test]

-        public void TtestWriteOnlyBody() 

-        { 

-            // should always be readable

-            ActiveMQTextMessage textMessage = new ActiveMQTextMessage();

-            textMessage.ReadOnlyBody = false;

-            try 

-            {

-                textMessage.Text = "test";

-                Assert.IsTrue(textMessage.Text.Length > 0);

-            } 

-            catch(MessageNotReadableException) 

-            {

-                Assert.Fail("should be readable");

-            }

-            textMessage.ReadOnlyBody = true;

-            try 

-            {

-                Assert.IsTrue(textMessage.Text.Length > 0);

-                textMessage.Text = "test";

-                Assert.Fail("should throw exception");

-            } 

-            catch(MessageNotReadableException)

-            {

-                Assert.Fail("should be readable");

-            } 

-            catch(MessageNotWriteableException) 

-            {

-            }

-        }

-        

-        [Test]

-        public void TestShortText() 

-        {

-            string shortText = "Content";

-            ActiveMQTextMessage shortMessage = new ActiveMQTextMessage();

-            SetContent(shortMessage, shortText);

-            Assert.IsTrue(shortMessage.ToString().Contains("Text = " + shortText));

-            Assert.IsTrue(shortMessage.Text == shortText);

-            

-            string longText = "Very very very very veeeeeeery loooooooooooooooooooooooooooooooooong text";

-            string longExpectedText = "Very very very very veeeeeeery looooooooooooo...ooooong text";

-            ActiveMQTextMessage longMessage = new ActiveMQTextMessage();

-            SetContent(longMessage, longText);

-            Assert.IsTrue(longMessage.ToString().Contains("Text = " + longExpectedText));

-            Assert.IsTrue(longMessage.Text == longText);         

-        }

-        

-        [Test]

-        public void TestNullText() 

-        {

-            ActiveMQTextMessage nullMessage = new ActiveMQTextMessage();

-            SetContent(nullMessage, null);

-            Assert.IsNull(nullMessage.Text);

-            Assert.IsTrue(nullMessage.ToString().Contains("Text = null"));

-        }

-        

-        protected void SetContent(Message message, String text)

-        {

-            MemoryStream mstream = new MemoryStream();

-            EndianBinaryWriter dataOut = new EndianBinaryWriter(mstream);

-            dataOut.WriteString32(text);

-            dataOut.Close();

-            message.Content = mstream.ToArray();

-        }

-    }

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.IO;
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.Util;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test.Commands
+{
+    [TestFixture]
+    public class ActiveMQTextMessageTest
+    {
+        [Test]
+        public void TestCommand()
+        {
+            ActiveMQTextMessage message = new ActiveMQTextMessage();
+
+            Assert.IsNull(message.Text);            
+
+            // Test with ASCII Data.
+            message.Text = "Hello World";
+            Assert.IsNotNull(message.Text);
+            Assert.AreEqual("Hello World", message.Text);
+
+            String unicodeString =
+                "This unicode string contains two characters " +
+                "with codes outside an 8-bit code range, " +
+                "Pi (\u03a0) and Sigma (\u03a3).";
+
+            message.Text = unicodeString;
+            Assert.IsNotNull(message.Text);
+            Assert.AreEqual(unicodeString, message.Text);
+        }
+
+        [Test]
+        public void TestShallowCopy()
+        {
+            ActiveMQTextMessage msg = new ActiveMQTextMessage();
+            string testString = "str";
+            msg.Text = testString;
+            Message copy = msg.Clone() as Message;
+            Assert.IsTrue(msg.Text == ((ActiveMQTextMessage) copy).Text);
+        }
+    
+        [Test]
+        public void TestSetText() 
+        {
+            ActiveMQTextMessage msg = new ActiveMQTextMessage();
+            string str = "testText";
+            msg.Text = str;
+            Assert.AreEqual(msg.Text, str);
+        }
+    
+        [Test]
+        public void TestGetBytes() 
+        {
+            ActiveMQTextMessage msg = new ActiveMQTextMessage();
+            String str = "testText";
+            msg.Text = str;
+            msg.BeforeMarshall(null);
+            
+            byte[] bytes = msg.Content;
+            msg = new ActiveMQTextMessage();
+            msg.Content = bytes;
+            
+            Assert.AreEqual(msg.Text, str);
+        }
+    
+        [Test]
+        public void TestClearBody()
+        {
+            ActiveMQTextMessage textMessage = new ActiveMQTextMessage();
+            textMessage.Text = "string";
+            textMessage.ClearBody();
+            Assert.IsFalse(textMessage.ReadOnlyBody);
+            Assert.IsNull(textMessage.Text);
+            try
+            {
+                textMessage.Text = "String";
+                Assert.IsTrue(textMessage.Text.Length > 0);
+            }
+            catch(MessageNotWriteableException)
+            {
+                Assert.Fail("should be writeable");
+            }
+            catch(MessageNotReadableException)
+            {
+                Assert.Fail("should be readable");
+            }
+        }
+    
+        [Test]
+        public void TestReadOnlyBody() 
+        {
+            ActiveMQTextMessage textMessage = new ActiveMQTextMessage();
+            textMessage.Text = "test";
+            textMessage.ReadOnlyBody = true;
+            try 
+            {
+                Assert.IsTrue(textMessage.Text.Length > 0);
+            } 
+            catch(MessageNotReadableException) 
+            {
+                Assert.Fail("should be readable");
+            }
+            try 
+            {
+                textMessage.Text = "test";
+                Assert.Fail("should throw exception");
+            } 
+            catch(MessageNotWriteableException) 
+            {
+            }
+        }
+    
+        [Test]
+        public void TtestWriteOnlyBody() 
+        { 
+            // should always be readable
+            ActiveMQTextMessage textMessage = new ActiveMQTextMessage();
+            textMessage.ReadOnlyBody = false;
+            try 
+            {
+                textMessage.Text = "test";
+                Assert.IsTrue(textMessage.Text.Length > 0);
+            } 
+            catch(MessageNotReadableException) 
+            {
+                Assert.Fail("should be readable");
+            }
+            textMessage.ReadOnlyBody = true;
+            try 
+            {
+                Assert.IsTrue(textMessage.Text.Length > 0);
+                textMessage.Text = "test";
+                Assert.Fail("should throw exception");
+            } 
+            catch(MessageNotReadableException)
+            {
+                Assert.Fail("should be readable");
+            } 
+            catch(MessageNotWriteableException) 
+            {
+            }
+        }
+        
+        [Test]
+        public void TestShortText() 
+        {
+            string shortText = "Content";
+            ActiveMQTextMessage shortMessage = new ActiveMQTextMessage();
+            SetContent(shortMessage, shortText);
+            Assert.IsTrue(shortMessage.ToString().Contains("Text = " + shortText));
+            Assert.IsTrue(shortMessage.Text == shortText);
+            
+            string longText = "Very very very very veeeeeeery loooooooooooooooooooooooooooooooooong text";
+            string longExpectedText = "Very very very very veeeeeeery looooooooooooo...ooooong text";
+            ActiveMQTextMessage longMessage = new ActiveMQTextMessage();
+            SetContent(longMessage, longText);
+            Assert.IsTrue(longMessage.ToString().Contains("Text = " + longExpectedText));
+            Assert.IsTrue(longMessage.Text == longText);         
+        }
+        
+        [Test]
+        public void TestNullText() 
+        {
+            ActiveMQTextMessage nullMessage = new ActiveMQTextMessage();
+            SetContent(nullMessage, null);
+            Assert.IsNull(nullMessage.Text);
+            Assert.IsTrue(nullMessage.ToString().Contains("Text = null"));
+        }
+        
+        protected void SetContent(Message message, String text)
+        {
+            MemoryStream mstream = new MemoryStream();
+            EndianBinaryWriter dataOut = new EndianBinaryWriter(mstream);
+            dataOut.WriteString32(text);
+            dataOut.Close();
+            message.Content = mstream.ToArray();
+        }
+    }
+}
diff --git a/src/test/csharp/Commands/CommandTest.cs b/test/Commands/CommandTest.cs
similarity index 100%
rename from src/test/csharp/Commands/CommandTest.cs
rename to test/Commands/CommandTest.cs
diff --git a/src/test/csharp/Commands/MessageCompressionTest.cs b/test/Commands/MessageCompressionTest.cs
similarity index 100%
rename from src/test/csharp/Commands/MessageCompressionTest.cs
rename to test/Commands/MessageCompressionTest.cs
diff --git a/src/test/csharp/ConnectionFactoryTest.cs b/test/ConnectionFactoryTest.cs
similarity index 100%
rename from src/test/csharp/ConnectionFactoryTest.cs
rename to test/ConnectionFactoryTest.cs
diff --git a/src/test/csharp/ConnectionMetaDataTest.cs b/test/ConnectionMetaDataTest.cs
similarity index 100%
rename from src/test/csharp/ConnectionMetaDataTest.cs
rename to test/ConnectionMetaDataTest.cs
diff --git a/src/test/csharp/DtcBasicTransactionsTest.cs b/test/DtcBasicTransactionsTest.cs
similarity index 97%
rename from src/test/csharp/DtcBasicTransactionsTest.cs
rename to test/DtcBasicTransactionsTest.cs
index b553689..4d06bbe 100644
--- a/src/test/csharp/DtcBasicTransactionsTest.cs
+++ b/test/DtcBasicTransactionsTest.cs
@@ -1,101 +1,101 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.Threading;

-using Apache.NMS.ActiveMQ.Transactions;

-using NUnit.Framework;

-

-namespace Apache.NMS.ActiveMQ.Test

-{

-    [TestFixture]

-    [Category("Manual")]

-    class DtcBasicTransactionsTest : DtcTransactionsTestSupport

-    {

-        [SetUp]

-        public override void SetUp()

-        {

-            base.SetUp();

-

-            this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-            this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();

-        }

-

-        [Test]

-        [ExpectedException("Apache.NMS.NMSException")]

-        public void TestSessionCreateFailsWithInvalidLogLocation()

-        {

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                NetTxConnection con = connection as NetTxConnection;

-                NetTxRecoveryPolicy policy = con.RecoveryPolicy;

-                (policy.RecoveryLogger as RecoveryFileLogger).Location = nonExistantPath;

-                connection.CreateNetTxSession();

-            }

-        }

-

-        [Test]

-        public void TestTransactedDBReadAndProduce()

-        {

-            // Test initialize - Fills in DB with data to send.

-            PrepareDatabase();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsEmpty();

-

-            // check messages are present in the queue

-            VerifyBrokerQueueCount();

-        }

-

-        [Test]

-        public void TestTransacteDequeueAndDbWrite()

-        {

-            // Test initialize - Fills in DB with data to send.

-            PurgeDatabase();

-            PurgeAndFillQueue();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // verify sql server has commited the transaction and stored all messages

-            VerifyDatabaseTableIsFull();

-

-            // check no messages are present in the queue after commit.

-            VerifyNoMessagesInQueueNoRecovery();

-        }

-    }

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Threading;
+using Apache.NMS.ActiveMQ.Transactions;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+    [TestFixture]
+    [Category("Manual")]
+    class DtcBasicTransactionsTest : DtcTransactionsTestSupport
+    {
+        [SetUp]
+        public override void SetUp()
+        {
+            base.SetUp();
+
+            this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionUri));
+            this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();
+        }
+
+        [Test]
+        [ExpectedException(typeof(NMSException))]
+        public void TestSessionCreateFailsWithInvalidLogLocation()
+        {
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                NetTxConnection con = connection as NetTxConnection;
+                NetTxRecoveryPolicy policy = con.RecoveryPolicy;
+                (policy.RecoveryLogger as RecoveryFileLogger).Location = nonExistantPath;
+                connection.CreateNetTxSession();
+            }
+        }
+
+        [Test]
+        public void TestTransactedDBReadAndProduce()
+        {
+            // Test initialize - Fills in DB with data to send.
+            PrepareDatabase();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsEmpty();
+
+            // check messages are present in the queue
+            VerifyBrokerQueueCount();
+        }
+
+        [Test]
+        public void TestTransacteDequeueAndDbWrite()
+        {
+            // Test initialize - Fills in DB with data to send.
+            PurgeDatabase();
+            PurgeAndFillQueue();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // verify sql server has commited the transaction and stored all messages
+            VerifyDatabaseTableIsFull();
+
+            // check no messages are present in the queue after commit.
+            VerifyNoMessagesInQueueNoRecovery();
+        }
+    }
+}
diff --git a/src/test/csharp/DtcConsumerTransactionsTest.cs b/test/DtcConsumerTransactionsTest.cs
similarity index 98%
rename from src/test/csharp/DtcConsumerTransactionsTest.cs
rename to test/DtcConsumerTransactionsTest.cs
index caa1958..3128b94 100644
--- a/src/test/csharp/DtcConsumerTransactionsTest.cs
+++ b/test/DtcConsumerTransactionsTest.cs
@@ -1,745 +1,745 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.Collections;

-using System.Data.SqlClient;

-using System.IO;

-using System.Threading;

-using System.Transactions;

-using Apache.NMS.ActiveMQ.Transport;

-using Apache.NMS.ActiveMQ.Transport.Tcp;

-using NUnit.Framework;

-

-namespace Apache.NMS.ActiveMQ.Test

-{

-    [TestFixture]

-    [Category("Manual")]

-    class DtcConsumerTransactionsTest : DtcTransactionsTestSupport

-    {

-        [SetUp]

-        public override void SetUp()

-        {

-            base.SetUp();

-

-            this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-            this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();

-        }

-

-        [Test]

-        public void TestRedelivered()

-        {

-            // enqueue several messages

-            PurgeDatabase();

-            PurgeAndFillQueue();

-

-            // receive just one

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.Start();

-

-                using (INetTxSession session = connection.CreateNetTxSession())

-                {

-                    IQueue queue = session.GetQueue(testQueueName);

-

-                    // read message from queue and insert into db table

-                    using (IMessageConsumer consumer = session.CreateConsumer(queue))

-                    {

-                        using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))

-                        using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-                        using (SqlCommand sqlInsertCommand = new SqlCommand())

-                        {

-                            sqlConnection.Open();

-                            sqlInsertCommand.Connection = sqlConnection;

-

-                            ITextMessage message = consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;

-                            sqlInsertCommand.CommandText =

-                                string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));

-                            sqlInsertCommand.ExecuteNonQuery();

-

-                            scoped.Complete();

-                        }

-                    }

-

-                    session.Close();

-                }

-            }

-

-            // check that others message have status redelivered = false

-            IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionURI));

-

-            using (IConnection connection = checkFactory.CreateConnection())

-            {

-                connection.Start();

-

-                using (ISession session = connection.CreateSession())

-                using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))

-                {

-                    IEnumerator enumerator = browser.GetEnumerator();

-

-                    while (enumerator.MoveNext())

-                    {

-                        IMessage msg = enumerator.Current as IMessage;

-                        Assert.IsNotNull(msg, "message is not in the queue!");

-                        Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");

-                    }

-                }

-            }

-        }

-

-        [Test]

-        public void TestRedeliveredCase2()

-        {

-            const int messageCount = 300;

-            const int receiveCount = 150;

-

-            // enqueue several messages

-            PurgeDatabase();

-            PurgeAndFillQueue(messageCount);

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.Start();

-

-                // receive half of total messages

-                for (int i = 0; i < receiveCount; i++)

-                {

-                    using (INetTxSession session = connection.CreateNetTxSession())

-                    {

-                        IQueue queue = session.GetQueue(testQueueName);

-

-                        // read message from queue and insert into db table

-                        using (IMessageConsumer consumer = session.CreateConsumer(queue))

-                        {

-                            using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))

-                            using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-                            using (SqlCommand sqlInsertCommand = new SqlCommand())

-                            {

-                                sqlConnection.Open();

-                                sqlInsertCommand.Connection = sqlConnection;

-

-                                ITextMessage message =

-                                    consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;

-                                sqlInsertCommand.CommandText =

-                                    string.Format("INSERT INTO {0} VALUES ({1})", testTable,

-                                                  Convert.ToInt32(message.Text));

-                                sqlInsertCommand.ExecuteNonQuery();

-

-                                scoped.Complete();

-                            }

-                        }

-

-                        session.Close();

-                    }

-

-                    Tracer.Debug("Completed for loop iteration #" + i);

-                }

-            }

-

-            // check that others message have status redelivered = false

-            IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionURI));

-

-            using (IConnection connection = checkFactory.CreateConnection())

-            {

-                connection.Start();

-

-                using (ISession session = connection.CreateSession())

-                using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))

-                {

-                    IEnumerator enumerator = browser.GetEnumerator();

-

-                    while (enumerator.MoveNext())

-                    {

-                        IMessage msg = enumerator.Current as IMessage;

-                        Assert.IsNotNull(msg, "message is not in the queue!");

-                        Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");

-                    }

-                }

-            }

-        }

-

-        [Test]

-        public void TestRedeliveredCase3()

-        {

-            const int messageCount = 300;

-            const int receiveCount = 150;

-

-            // enqueue several messages

-            PurgeDatabase();

-            PurgeAndFillQueue(messageCount);

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.Start();

-

-                // receive half of total messages

-                using (INetTxSession session = connection.CreateNetTxSession())

-                {

-                    IQueue queue = session.GetQueue(testQueueName);

-

-                    // read message from queue and insert into db table

-                    using (IMessageConsumer consumer = session.CreateConsumer(queue))

-                    {

-                        for (int i = 0; i < receiveCount; i++)

-                        {

-                            using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))

-                            using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-                            using (SqlCommand sqlInsertCommand = new SqlCommand())

-                            {

-                                sqlConnection.Open();

-                                sqlInsertCommand.Connection = sqlConnection;

-

-                                ITextMessage message =

-                                    consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;

-                                sqlInsertCommand.CommandText =

-                                    string.Format("INSERT INTO {0} VALUES ({1})", testTable,

-                                                  Convert.ToInt32(message.Text));

-                                sqlInsertCommand.ExecuteNonQuery();

-                                scoped.Complete();

-                            }

-                        }

-                    }

-

-                    session.Close();

-                }

-            }

-

-            Tracer.Debug("First stage ok");

-

-            // check that others message have status redelivered = false

-            IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionURI));

-

-            using (IConnection connection = checkFactory.CreateConnection())

-            {

-                connection.Start();

-

-                using (ISession session = connection.CreateSession())

-                using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))

-                {

-                    IEnumerator enumerator = browser.GetEnumerator();

-

-                    while (enumerator.MoveNext())

-                    {

-                        IMessage msg = enumerator.Current as IMessage;

-                        Assert.IsNotNull(msg, "message is not in the queue!");

-                        Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");

-                    }

-                }

-            }

-        }

-

-        [Test]

-        public void TestRedeliveredNoComplete()

-        {

-            const int messageCount = 300;

-            const int receiveCount = 150;

-

-            // enqueue several messages

-            PurgeDatabase();

-            PurgeAndFillQueue(messageCount);

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                // allow no redelivery so that message immediatly goes to the DLQ if first read fails

-                connection.RedeliveryPolicy.MaximumRedeliveries = 0;

-                connection.Start();

-

-                // receive half of total messages

-                using (INetTxSession session = connection.CreateNetTxSession())

-                {

-                    IQueue queue = session.GetQueue(testQueueName);

-

-                    // read message from queue and insert into db table

-                    using (IMessageConsumer consumer = session.CreateConsumer(queue))

-                    {

-                        for (int i = 0; i < receiveCount; i++)

-                        {

-                            using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))

-                            using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-                            using (SqlCommand sqlInsertCommand = new SqlCommand())

-                            {

-                                sqlConnection.Open();

-                                sqlInsertCommand.Connection = sqlConnection;

-

-                                ITextMessage message =

-                                    consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;

-                                sqlInsertCommand.CommandText =

-                                    string.Format("INSERT INTO {0} VALUES ({1})", testTable,

-                                                  Convert.ToInt32(message.Text));

-                                sqlInsertCommand.ExecuteNonQuery();

-                            }

-                        }

-                    }

-

-                    session.Close();

-                }

-            }

-

-            Tracer.Debug("First stage ok");

-

-            // check that others message have status redelivered = false

-            IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionURI));

-

-            using (IConnection connection = checkFactory.CreateConnection())

-            {

-                connection.Start();

-

-                using (ISession session = connection.CreateSession())

-                using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))

-                {

-                    IEnumerator enumerator = browser.GetEnumerator();

-                    while (enumerator.MoveNext())

-                    {

-                        IMessage msg = enumerator.Current as IMessage;

-                        Assert.IsNotNull(msg, "message is not in the queue!");

-                        Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");

-                    }

-                }

-            }

-        }

-

-        [Test]

-        public void TestRecoveryAfterCommitFailsBeforeSent()

-        {

-            // Test initialize - Fills in queue with data to send and clears the DB.

-            PurgeDatabase();

-            PurgeAndFillQueue();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;

-

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-

-                Thread.Sleep(1000);

-            }

-

-            // transaction should not have been commited

-            VerifyNoMessagesInQueueNoRecovery();

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsFull();

-

-            // check messages are not present in the queue

-            VerifyNoMessagesInQueue();

-        }

-

-        [Test]

-        public void TestRecoveryAfterCommitFailsAfterSent()

-        {

-            // Test initialize - Fills in queue with data to send and clears the DB.

-            PurgeDatabase();

-            PurgeAndFillQueue();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPostProcessor += this.FailOnCommitTransportHook;

-

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-

-                Thread.Sleep(1000);

-            }

-

-            // transaction should have been commited

-            VerifyNoMessagesInQueueNoRecovery();

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsFull();

-

-            // check messages are not present in the queue

-            VerifyNoMessagesInQueue();

-        }

-

-        [Test]

-        public void TestIterativeTransactedConsume()

-        {

-            // Test initialize - Fills in queue with data to send and clears the DB.

-            PurgeDatabase();

-            PurgeAndFillQueue(5 * MSG_COUNT);

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsFull(5 * MSG_COUNT);

-

-            // check messages are NOT present in the queue

-            VerifyNoMessagesInQueueNoRecovery();

-        }

-

-        [Test]

-        public void TestConsumeWithDBInsertLogLocation()

-        {

-            const string logLocation = @".\RecoveryDir";

-            string newConnectionUri =

-                connectionURI + "?nms.RecoveryPolicy.RecoveryLogger.Location=" + logLocation +

-                                "&nms.configuredResourceManagerId=" + 

-                                dtcFactory.ConfiguredResourceManagerId;

-

-            // Test initialize - Fills in queue with data to send and clears the DB.

-            PurgeDatabase();

-            PurgeAndFillQueue();

-

-            if (Directory.Exists(logLocation))

-            {

-                Directory.Delete(logLocation, true);

-            }

-

-            Directory.CreateDirectory(logLocation);

-

-            dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;

-

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            Assert.AreEqual(1, Directory.GetFiles(logLocation).Length);

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsFull();

-

-            // check messages are NOT present in the queue

-            NetTxTransactionContext.ResetDtcRecovery();

-            VerifyBrokerQueueCount(0, newConnectionUri);

-

-            Assert.AreEqual(0, Directory.GetFiles(logLocation).Length);

-        }

-

-        [Test]

-        public void TestRecoverAfterTransactionScopeAborted()

-        {

-            // Test initialize - Fills in queue with data to send and clears the DB.

-            PurgeDatabase();

-            PurgeAndFillQueue();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ReadFromQueueAndInsertIntoDbWithScopeAborted(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // verify sql server has NOT commited the transaction                    

-            VerifyDatabaseTableIsEmpty();

-

-            // check messages are present in the queue

-            NetTxTransactionContext.ResetDtcRecovery();

-            VerifyBrokerQueueCount();

-        }

-

-        [Test]

-        public void TestRecoverAfterRollbackFailWhenScopeAborted()

-        {

-            // Test initialize - Fills in queue with data to send and clears the DB.

-            PurgeDatabase();

-            PurgeAndFillQueue();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPreProcessor += this.FailOnRollbackTransportHook;

-

-                ReadFromQueueAndInsertIntoDbWithScopeAborted(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // verify sql server has NOT commited the transaction                    

-            VerifyDatabaseTableIsEmpty();

-

-            // check messages are recovered and present in the queue 

-            NetTxTransactionContext.ResetDtcRecovery();

-            VerifyBrokerQueueCount();

-        }

-

-        [Test]

-        public void TestRecoverAfterFailOnTransactionBeforePrepareSent()

-        {

-            // Test initialize - Fills in queue with data to send and clears the DB.

-            PurgeDatabase();

-            PurgeAndFillQueue();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPreProcessor += this.FailOnPrepareTransportHook;

-

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // Messages are visible since no prepare sent

-            VerifyBrokerQueueCountNoRecovery();

-

-            // verify sql server has NOT commited the transaction                    

-            VerifyDatabaseTableIsEmpty();

-

-            // check messages are present in the queue

-            NetTxTransactionContext.ResetDtcRecovery();

-            VerifyBrokerQueueCount();

-        }

-

-        [Test]

-        public void TestRecoverAfterFailOnTransactionAfterPrepareSent()

-        {

-            // Test initialize - Fills in queue with data to send and clears the DB.

-            PurgeDatabase();

-            PurgeAndFillQueue();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPostProcessor += this.FailOnPrepareTransportHook;

-

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ReadFromQueueAndInsertIntoDbWithCommit(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // not visible yet because it must be rolled back

-            VerifyNoMessagesInQueueNoRecovery();

-

-            // verify sql server has NOT commited the transaction                    

-            VerifyDatabaseTableIsEmpty();

-

-            // check messages are present in the queue

-            NetTxTransactionContext.ResetDtcRecovery();

-            VerifyBrokerQueueCount();

-        }

-

-        [Test]

-        public void MessageShouldEnlistToTheCorrectTransaction()

-        {

-            const int messageCount = 100;

-            const int receiveCount = 100;

-

-            // enqueue several messages

-            PurgeDatabase();

-            PurgeAndFillQueue(messageCount);

-

-            var enlistment = new TestSinglePhaseCommit();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.Start();

-

-                // receive half of total messages

-                using (INetTxSession session = connection.CreateNetTxSession())

-                {

-                    IQueue queue = session.GetQueue(testQueueName);

-                    using (IMessageConsumer consumer = session.CreateConsumer(queue))

-                    {

-                        for (int i = 0; i < receiveCount; i++)

-                        {

-                            try

-                            {

-                                using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))

-                                {

-                                    ITextMessage message = consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;

-

-                                    Transaction.Current.EnlistDurable(Guid.NewGuid(), enlistment, EnlistmentOptions.None);

-                                    if (new Random().Next(2) == 0)

-                                    {

-                                        Tracer.InfoFormat("Throwing random Exception for Message {0}", message.NMSMessageId);

-                                        throw new Exception();

-                                    }

-

-                                    scoped.Complete();

-                                }

-                            }

-                            catch

-                            {

-                            }

-

-                            Assert.False(enlistment.singlePhaseCommit, "No single phase commit should happen.");

-                        }

-                    }

-                }

-            }

-        }

-

-        internal class TestSinglePhaseCommit : ISinglePhaseNotification

-        {

-            public bool singlePhaseCommit = false;

-

-            public void Prepare(PreparingEnlistment preparingEnlistment)

-            {

-                preparingEnlistment.Prepared();

-            }

-            public void Commit(Enlistment enlistment)

-            {

-                enlistment.Done();

-            }

-

-            public void Rollback(Enlistment enlistment)

-            {

-                enlistment.Done();

-            }

-            public void InDoubt(Enlistment enlistment)

-            {

-                enlistment.Done();

-            }

-            public void SinglePhaseCommit(SinglePhaseEnlistment singlePhaseEnlistment)

-            {

-                Tracer.Info("Performing invalid single phase commit.");

-                singlePhaseCommit = true;

-                singlePhaseEnlistment.Committed();

-            }

-        }

-

-        #region Asynchronous Consumer Inside of a Transaction Test / Example

-

-        private const int BATCH_COUNT = 5;

-        private int batchSequence;

-        private DependentTransaction batchTxControl;

-        private readonly ManualResetEvent awaitBatchProcessingStart = new ManualResetEvent(false);

-

-        [Test]

-        public void TestTransactedAsyncConsumption()

-        {

-            PurgeDatabase();

-            PurgeAndFillQueue(MSG_COUNT * BATCH_COUNT);

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            using (NetTxSession session = connection.CreateNetTxSession() as NetTxSession)

-            {

-                IQueue queue = session.GetQueue(testQueueName);

-                IMessageConsumer consumer = session.CreateConsumer(queue);

-                consumer.Listener += AsyncTxAwareOnMessage;

-

-                // Be carefull, message are dispatched once this is done, so you could receive

-                // a Message outside a TX.  We use the awaitBatchProcessingStart event here to

-                // gate te OnMessage callback, once that method returns the Message is ack'd and

-                // no longer has a chance to participate in a TX.

-                connection.Start();

-

-                for (int i = 0; i < BATCH_COUNT; ++i)

-                {

-                    using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))

-                    {

-                        session.Enlist(Transaction.Current);

-

-                        batchTxControl = Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete);

-                        awaitBatchProcessingStart.Set();

-                        scoped.Complete();

-                    }

-

-                    // Reenlisting to fast seems to annoy the DTC.  Also since DTC operations are

-                    // async we need to allow a little time for lag so that the last TX actually 

-                    // completes before we start a new one.

-                    Thread.Sleep(250);

-                }

-            }

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsFull(MSG_COUNT * BATCH_COUNT);

-

-            // check messages are NOT present in the queue

-            VerifyNoMessagesInQueue();

-        }

-

-        private void AsyncTxAwareOnMessage(IMessage message)

-        {

-            awaitBatchProcessingStart.WaitOne();

-

-            try

-            {

-                using (TransactionScope scoped = new TransactionScope(batchTxControl))

-                using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-                using (SqlCommand sqlInsertCommand = new SqlCommand())

-                {

-                    sqlConnection.Open();

-                    sqlInsertCommand.Connection = sqlConnection;

-

-                    ITextMessage textMessage = message as ITextMessage;

-                    Assert.IsNotNull(message, "missing message");

-                    sqlInsertCommand.CommandText =

-                        string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(textMessage.Text));

-                    sqlInsertCommand.ExecuteNonQuery();

-                    scoped.Complete();

-                }

-

-                if(++batchSequence == MSG_COUNT)

-                {

-                    batchSequence = 0;

-                    awaitBatchProcessingStart.Reset();

-                    batchTxControl.Complete();

-                }

-            }

-            catch (Exception e)

-            {

-                Tracer.Debug("TX;Error from TransactionScope: " + e.Message);

-                Tracer.Debug(e.ToString());

-            }

-        }

-

-        #endregion

-    }

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections;
+using System.Data.SqlClient;
+using System.IO;
+using System.Threading;
+using System.Transactions;
+using Apache.NMS.ActiveMQ.Transport;
+using Apache.NMS.ActiveMQ.Transport.Tcp;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+    [TestFixture]
+    [Category("Manual")]
+    class DtcConsumerTransactionsTest : DtcTransactionsTestSupport
+    {
+        [SetUp]
+        public override void SetUp()
+        {
+            base.SetUp();
+
+            this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionUri));
+            this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();
+        }
+
+        [Test]
+        public void TestRedelivered()
+        {
+            // enqueue several messages
+            PurgeDatabase();
+            PurgeAndFillQueue();
+
+            // receive just one
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.Start();
+
+                using (INetTxSession session = connection.CreateNetTxSession())
+                {
+                    IQueue queue = session.GetQueue(testQueueName);
+
+                    // read message from queue and insert into db table
+                    using (IMessageConsumer consumer = session.CreateConsumer(queue))
+                    {
+                        using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+                        using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+                        using (SqlCommand sqlInsertCommand = new SqlCommand())
+                        {
+                            sqlConnection.Open();
+                            sqlInsertCommand.Connection = sqlConnection;
+
+                            ITextMessage message = consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
+                            sqlInsertCommand.CommandText =
+                                string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));
+                            sqlInsertCommand.ExecuteNonQuery();
+
+                            scoped.Complete();
+                        }
+                    }
+
+                    session.Close();
+                }
+            }
+
+            // check that others message have status redelivered = false
+            IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+            using (IConnection connection = checkFactory.CreateConnection())
+            {
+                connection.Start();
+
+                using (ISession session = connection.CreateSession())
+                using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
+                {
+                    IEnumerator enumerator = browser.GetEnumerator();
+
+                    while (enumerator.MoveNext())
+                    {
+                        IMessage msg = enumerator.Current as IMessage;
+                        Assert.IsNotNull(msg, "message is not in the queue!");
+                        Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
+                    }
+                }
+            }
+        }
+
+        [Test]
+        public void TestRedeliveredCase2()
+        {
+            const int messageCount = 300;
+            const int receiveCount = 150;
+
+            // enqueue several messages
+            PurgeDatabase();
+            PurgeAndFillQueue(messageCount);
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.Start();
+
+                // receive half of total messages
+                for (int i = 0; i < receiveCount; i++)
+                {
+                    using (INetTxSession session = connection.CreateNetTxSession())
+                    {
+                        IQueue queue = session.GetQueue(testQueueName);
+
+                        // read message from queue and insert into db table
+                        using (IMessageConsumer consumer = session.CreateConsumer(queue))
+                        {
+                            using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+                            using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+                            using (SqlCommand sqlInsertCommand = new SqlCommand())
+                            {
+                                sqlConnection.Open();
+                                sqlInsertCommand.Connection = sqlConnection;
+
+                                ITextMessage message =
+                                    consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
+                                sqlInsertCommand.CommandText =
+                                    string.Format("INSERT INTO {0} VALUES ({1})", testTable,
+                                                  Convert.ToInt32(message.Text));
+                                sqlInsertCommand.ExecuteNonQuery();
+
+                                scoped.Complete();
+                            }
+                        }
+
+                        session.Close();
+                    }
+
+                    Tracer.Debug("Completed for loop iteration #" + i);
+                }
+            }
+
+            // check that others message have status redelivered = false
+            IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+            using (IConnection connection = checkFactory.CreateConnection())
+            {
+                connection.Start();
+
+                using (ISession session = connection.CreateSession())
+                using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
+                {
+                    IEnumerator enumerator = browser.GetEnumerator();
+
+                    while (enumerator.MoveNext())
+                    {
+                        IMessage msg = enumerator.Current as IMessage;
+                        Assert.IsNotNull(msg, "message is not in the queue!");
+                        Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
+                    }
+                }
+            }
+        }
+
+        [Test]
+        public void TestRedeliveredCase3()
+        {
+            const int messageCount = 300;
+            const int receiveCount = 150;
+
+            // enqueue several messages
+            PurgeDatabase();
+            PurgeAndFillQueue(messageCount);
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.Start();
+
+                // receive half of total messages
+                using (INetTxSession session = connection.CreateNetTxSession())
+                {
+                    IQueue queue = session.GetQueue(testQueueName);
+
+                    // read message from queue and insert into db table
+                    using (IMessageConsumer consumer = session.CreateConsumer(queue))
+                    {
+                        for (int i = 0; i < receiveCount; i++)
+                        {
+                            using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+                            using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+                            using (SqlCommand sqlInsertCommand = new SqlCommand())
+                            {
+                                sqlConnection.Open();
+                                sqlInsertCommand.Connection = sqlConnection;
+
+                                ITextMessage message =
+                                    consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
+                                sqlInsertCommand.CommandText =
+                                    string.Format("INSERT INTO {0} VALUES ({1})", testTable,
+                                                  Convert.ToInt32(message.Text));
+                                sqlInsertCommand.ExecuteNonQuery();
+                                scoped.Complete();
+                            }
+                        }
+                    }
+
+                    session.Close();
+                }
+            }
+
+            Tracer.Debug("First stage ok");
+
+            // check that others message have status redelivered = false
+            IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+            using (IConnection connection = checkFactory.CreateConnection())
+            {
+                connection.Start();
+
+                using (ISession session = connection.CreateSession())
+                using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
+                {
+                    IEnumerator enumerator = browser.GetEnumerator();
+
+                    while (enumerator.MoveNext())
+                    {
+                        IMessage msg = enumerator.Current as IMessage;
+                        Assert.IsNotNull(msg, "message is not in the queue!");
+                        Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
+                    }
+                }
+            }
+        }
+
+        [Test]
+        public void TestRedeliveredNoComplete()
+        {
+            const int messageCount = 300;
+            const int receiveCount = 150;
+
+            // enqueue several messages
+            PurgeDatabase();
+            PurgeAndFillQueue(messageCount);
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                // allow no redelivery so that message immediatly goes to the DLQ if first read fails
+                connection.RedeliveryPolicy.MaximumRedeliveries = 0;
+                connection.Start();
+
+                // receive half of total messages
+                using (INetTxSession session = connection.CreateNetTxSession())
+                {
+                    IQueue queue = session.GetQueue(testQueueName);
+
+                    // read message from queue and insert into db table
+                    using (IMessageConsumer consumer = session.CreateConsumer(queue))
+                    {
+                        for (int i = 0; i < receiveCount; i++)
+                        {
+                            using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+                            using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+                            using (SqlCommand sqlInsertCommand = new SqlCommand())
+                            {
+                                sqlConnection.Open();
+                                sqlInsertCommand.Connection = sqlConnection;
+
+                                ITextMessage message =
+                                    consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
+                                sqlInsertCommand.CommandText =
+                                    string.Format("INSERT INTO {0} VALUES ({1})", testTable,
+                                                  Convert.ToInt32(message.Text));
+                                sqlInsertCommand.ExecuteNonQuery();
+                            }
+                        }
+                    }
+
+                    session.Close();
+                }
+            }
+
+            Tracer.Debug("First stage ok");
+
+            // check that others message have status redelivered = false
+            IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+            using (IConnection connection = checkFactory.CreateConnection())
+            {
+                connection.Start();
+
+                using (ISession session = connection.CreateSession())
+                using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
+                {
+                    IEnumerator enumerator = browser.GetEnumerator();
+                    while (enumerator.MoveNext())
+                    {
+                        IMessage msg = enumerator.Current as IMessage;
+                        Assert.IsNotNull(msg, "message is not in the queue!");
+                        Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
+                    }
+                }
+            }
+        }
+
+        [Test]
+        public void TestRecoveryAfterCommitFailsBeforeSent()
+        {
+            // Test initialize - Fills in queue with data to send and clears the DB.
+            PurgeDatabase();
+            PurgeAndFillQueue();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
+
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+                Thread.Sleep(1000);
+            }
+
+            // transaction should not have been commited
+            VerifyNoMessagesInQueueNoRecovery();
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsFull();
+
+            // check messages are not present in the queue
+            VerifyNoMessagesInQueue();
+        }
+
+        [Test]
+        public void TestRecoveryAfterCommitFailsAfterSent()
+        {
+            // Test initialize - Fills in queue with data to send and clears the DB.
+            PurgeDatabase();
+            PurgeAndFillQueue();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPostProcessor += this.FailOnCommitTransportHook;
+
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+                Thread.Sleep(1000);
+            }
+
+            // transaction should have been commited
+            VerifyNoMessagesInQueueNoRecovery();
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsFull();
+
+            // check messages are not present in the queue
+            VerifyNoMessagesInQueue();
+        }
+
+        [Test]
+        public void TestIterativeTransactedConsume()
+        {
+            // Test initialize - Fills in queue with data to send and clears the DB.
+            PurgeDatabase();
+            PurgeAndFillQueue(5 * MSG_COUNT);
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsFull(5 * MSG_COUNT);
+
+            // check messages are NOT present in the queue
+            VerifyNoMessagesInQueueNoRecovery();
+        }
+
+        [Test]
+        public void TestConsumeWithDBInsertLogLocation()
+        {
+            const string logLocation = @".\RecoveryDir";
+            string newConnectionUri =
+                connectionUri + "?nms.RecoveryPolicy.RecoveryLogger.Location=" + logLocation +
+                                "&nms.configuredResourceManagerId=" + 
+                                dtcFactory.ConfiguredResourceManagerId;
+
+            // Test initialize - Fills in queue with data to send and clears the DB.
+            PurgeDatabase();
+            PurgeAndFillQueue();
+
+            if (Directory.Exists(logLocation))
+            {
+                Directory.Delete(logLocation, true);
+            }
+
+            Directory.CreateDirectory(logLocation);
+
+            dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
+
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            Assert.AreEqual(1, Directory.GetFiles(logLocation).Length);
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsFull();
+
+            // check messages are NOT present in the queue
+            NetTxTransactionContext.ResetDtcRecovery();
+            VerifyBrokerQueueCount(0, newConnectionUri);
+
+            Assert.AreEqual(0, Directory.GetFiles(logLocation).Length);
+        }
+
+        [Test]
+        public void TestRecoverAfterTransactionScopeAborted()
+        {
+            // Test initialize - Fills in queue with data to send and clears the DB.
+            PurgeDatabase();
+            PurgeAndFillQueue();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ReadFromQueueAndInsertIntoDbWithScopeAborted(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // verify sql server has NOT commited the transaction                    
+            VerifyDatabaseTableIsEmpty();
+
+            // check messages are present in the queue
+            NetTxTransactionContext.ResetDtcRecovery();
+            VerifyBrokerQueueCount();
+        }
+
+        [Test]
+        public void TestRecoverAfterRollbackFailWhenScopeAborted()
+        {
+            // Test initialize - Fills in queue with data to send and clears the DB.
+            PurgeDatabase();
+            PurgeAndFillQueue();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPreProcessor += this.FailOnRollbackTransportHook;
+
+                ReadFromQueueAndInsertIntoDbWithScopeAborted(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // verify sql server has NOT commited the transaction                    
+            VerifyDatabaseTableIsEmpty();
+
+            // check messages are recovered and present in the queue 
+            NetTxTransactionContext.ResetDtcRecovery();
+            VerifyBrokerQueueCount();
+        }
+
+        [Test]
+        public void TestRecoverAfterFailOnTransactionBeforePrepareSent()
+        {
+            // Test initialize - Fills in queue with data to send and clears the DB.
+            PurgeDatabase();
+            PurgeAndFillQueue();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPreProcessor += this.FailOnPrepareTransportHook;
+
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // Messages are visible since no prepare sent
+            VerifyBrokerQueueCountNoRecovery();
+
+            // verify sql server has NOT commited the transaction                    
+            VerifyDatabaseTableIsEmpty();
+
+            // check messages are present in the queue
+            NetTxTransactionContext.ResetDtcRecovery();
+            VerifyBrokerQueueCount();
+        }
+
+        [Test]
+        public void TestRecoverAfterFailOnTransactionAfterPrepareSent()
+        {
+            // Test initialize - Fills in queue with data to send and clears the DB.
+            PurgeDatabase();
+            PurgeAndFillQueue();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPostProcessor += this.FailOnPrepareTransportHook;
+
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // not visible yet because it must be rolled back
+            VerifyNoMessagesInQueueNoRecovery();
+
+            // verify sql server has NOT commited the transaction                    
+            VerifyDatabaseTableIsEmpty();
+
+            // check messages are present in the queue
+            NetTxTransactionContext.ResetDtcRecovery();
+            VerifyBrokerQueueCount();
+        }
+
+        [Test]
+        public void MessageShouldEnlistToTheCorrectTransaction()
+        {
+            const int messageCount = 100;
+            const int receiveCount = 100;
+
+            // enqueue several messages
+            PurgeDatabase();
+            PurgeAndFillQueue(messageCount);
+
+            var enlistment = new TestSinglePhaseCommit();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.Start();
+
+                // receive half of total messages
+                using (INetTxSession session = connection.CreateNetTxSession())
+                {
+                    IQueue queue = session.GetQueue(testQueueName);
+                    using (IMessageConsumer consumer = session.CreateConsumer(queue))
+                    {
+                        for (int i = 0; i < receiveCount; i++)
+                        {
+                            try
+                            {
+                                using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+                                {
+                                    ITextMessage message = consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
+
+                                    Transaction.Current.EnlistDurable(Guid.NewGuid(), enlistment, EnlistmentOptions.None);
+                                    if (new Random().Next(2) == 0)
+                                    {
+                                        Tracer.InfoFormat("Throwing random Exception for Message {0}", message.NMSMessageId);
+                                        throw new Exception();
+                                    }
+
+                                    scoped.Complete();
+                                }
+                            }
+                            catch
+                            {
+                            }
+
+                            Assert.False(enlistment.singlePhaseCommit, "No single phase commit should happen.");
+                        }
+                    }
+                }
+            }
+        }
+
+        internal class TestSinglePhaseCommit : ISinglePhaseNotification
+        {
+            public bool singlePhaseCommit = false;
+
+            public void Prepare(PreparingEnlistment preparingEnlistment)
+            {
+                preparingEnlistment.Prepared();
+            }
+            public void Commit(Enlistment enlistment)
+            {
+                enlistment.Done();
+            }
+
+            public void Rollback(Enlistment enlistment)
+            {
+                enlistment.Done();
+            }
+            public void InDoubt(Enlistment enlistment)
+            {
+                enlistment.Done();
+            }
+            public void SinglePhaseCommit(SinglePhaseEnlistment singlePhaseEnlistment)
+            {
+                Tracer.Info("Performing invalid single phase commit.");
+                singlePhaseCommit = true;
+                singlePhaseEnlistment.Committed();
+            }
+        }
+
+        #region Asynchronous Consumer Inside of a Transaction Test / Example
+
+        private const int BATCH_COUNT = 5;
+        private int batchSequence;
+        private DependentTransaction batchTxControl;
+        private readonly ManualResetEvent awaitBatchProcessingStart = new ManualResetEvent(false);
+
+        [Test]
+        public void TestTransactedAsyncConsumption()
+        {
+            PurgeDatabase();
+            PurgeAndFillQueue(MSG_COUNT * BATCH_COUNT);
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            using (NetTxSession session = connection.CreateNetTxSession() as NetTxSession)
+            {
+                IQueue queue = session.GetQueue(testQueueName);
+                IMessageConsumer consumer = session.CreateConsumer(queue);
+                consumer.Listener += AsyncTxAwareOnMessage;
+
+                // Be carefull, message are dispatched once this is done, so you could receive
+                // a Message outside a TX.  We use the awaitBatchProcessingStart event here to
+                // gate te OnMessage callback, once that method returns the Message is ack'd and
+                // no longer has a chance to participate in a TX.
+                connection.Start();
+
+                for (int i = 0; i < BATCH_COUNT; ++i)
+                {
+                    using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+                    {
+                        session.Enlist(Transaction.Current);
+
+                        batchTxControl = Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete);
+                        awaitBatchProcessingStart.Set();
+                        scoped.Complete();
+                    }
+
+                    // Reenlisting to fast seems to annoy the DTC.  Also since DTC operations are
+                    // async we need to allow a little time for lag so that the last TX actually 
+                    // completes before we start a new one.
+                    Thread.Sleep(250);
+                }
+            }
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsFull(MSG_COUNT * BATCH_COUNT);
+
+            // check messages are NOT present in the queue
+            VerifyNoMessagesInQueue();
+        }
+
+        private void AsyncTxAwareOnMessage(IMessage message)
+        {
+            awaitBatchProcessingStart.WaitOne();
+
+            try
+            {
+                using (TransactionScope scoped = new TransactionScope(batchTxControl))
+                using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+                using (SqlCommand sqlInsertCommand = new SqlCommand())
+                {
+                    sqlConnection.Open();
+                    sqlInsertCommand.Connection = sqlConnection;
+
+                    ITextMessage textMessage = message as ITextMessage;
+                    Assert.IsNotNull(message, "missing message");
+                    sqlInsertCommand.CommandText =
+                        string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(textMessage.Text));
+                    sqlInsertCommand.ExecuteNonQuery();
+                    scoped.Complete();
+                }
+
+                if(++batchSequence == MSG_COUNT)
+                {
+                    batchSequence = 0;
+                    awaitBatchProcessingStart.Reset();
+                    batchTxControl.Complete();
+                }
+            }
+            catch (Exception e)
+            {
+                Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
+                Tracer.Debug(e.ToString());
+            }
+        }
+
+        #endregion
+    }
+}
diff --git a/src/test/csharp/DtcProducerTransactionsTest.cs b/test/DtcProducerTransactionsTest.cs
similarity index 98%
rename from src/test/csharp/DtcProducerTransactionsTest.cs
rename to test/DtcProducerTransactionsTest.cs
index 260cff4..5569343 100644
--- a/src/test/csharp/DtcProducerTransactionsTest.cs
+++ b/test/DtcProducerTransactionsTest.cs
@@ -1,323 +1,323 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.IO;

-using System.Threading;

-using Apache.NMS.ActiveMQ.Transactions;

-using Apache.NMS.ActiveMQ.Transport;

-using Apache.NMS.ActiveMQ.Transport.Tcp;

-using NUnit.Framework;

-

-namespace Apache.NMS.ActiveMQ.Test

-{

-    [TestFixture]

-    [Category("Manual")]

-    class DtcProducerTransactionsTest : DtcTransactionsTestSupport

-    {

-        [SetUp]

-        public override void SetUp()

-        {

-            base.SetUp();

-

-            this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-            this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();

-        }

-

-        [Test]

-        public void TestRecoverAfterFailOnTransactionCommit()

-        {

-            // Test initialize - Fills in DB with data to send.

-            PrepareDatabase();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;

-

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                Thread.Sleep(1000);

-            }

-

-            // transaction should not have been commited

-            VerifyNoMessagesInQueueNoRecovery();

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsEmpty();

-

-            // check messages are present in the queue

-            NetTxTransactionContext.ResetDtcRecovery();

-            VerifyBrokerQueueCount();

-        }

-

-        [Test]

-        public void TestRecoverAfterFailOnTransactionPostCommitSend()

-        {

-            // Test initialize - Fills in DB with data to send.

-            PrepareDatabase();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPostProcessor += this.FailOnCommitTransportHook;

-

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                Thread.Sleep(1000);

-            }

-

-            // transaction should have been commited

-            VerifyBrokerQueueCountNoRecovery();

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsEmpty();

-

-            // check messages are present in the queue

-            VerifyBrokerQueueCount();

-        }

-

-        [Test]

-        public void TestNoRecoverAfterFailOnTransactionWhenLogDeleted()

-        {

-            // Test initialize - Fills in DB with data to send.

-            PrepareDatabase();

-

-            NetTxConnectionFactory netTxFactory = dtcFactory;

-            RecoveryFileLogger logger = netTxFactory.RecoveryPolicy.RecoveryLogger as RecoveryFileLogger;

-            string logDirectory = logger.Location;

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;

-

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // transaction should not have been commited

-            VerifyNoMessagesInQueueNoRecovery();

-

-            // delete all recovery files            

-            foreach (string file in Directory.GetFiles(logDirectory, "*.bin"))

-            {

-                File.Delete(file);

-            }

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsEmpty();

-

-            // check messages are NOT present in the queue bacause recovery file has been deleted

-            VerifyNoMessagesInQueue();

-        }

-

-        [Test]

-        public void TestNoRecoverAfterFailOnTransactionWhenLogWriteFails()

-        {

-            // Test initialize - Fills in DB with data to send.

-            PrepareDatabase();

-

-            string newConnectionUri = 

-                connectionURI + "?nms.RecoveryPolicy.RecoveryLoggerType=harness" +

-                                "&nms.configuredResourceManagerId=" +

-                                dtcFactory.ConfiguredResourceManagerId;

-

-            dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                IRecoveryLogger logger = (connection as NetTxConnection).RecoveryPolicy.RecoveryLogger;

-                Assert.IsNotNull(logger);

-                RecoveryLoggerHarness harness = logger as RecoveryLoggerHarness;

-                Assert.IsNotNull(harness);

-

-                harness.PreLogRecoveryInfoEvent += FailOnPreLogRecoveryHook;

-

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // verify sql server has not commited the transaction                    

-            VerifyDatabaseTableIsFull();

-

-            // check messages are not present in the queue

-            VerifyNoMessagesInQueue();

-        }

-

-        [Test]

-        public void TestRecoverAfterFailOnTransactionBeforePrepareSent()

-        {

-            // Test initialize - Fills in DB with data to send.

-            PrepareDatabase();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPreProcessor += this.FailOnPrepareTransportHook;

-

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // verify sql server has not commited the transaction                    

-            VerifyDatabaseTableIsFull();

-

-            // check messages are not present in the queue

-            VerifyNoMessagesInQueue();

-        }

-

-        [Test]

-        public void TestRecoverAfterFailOnTransactionDuringPrepareSend()

-        {

-            // Test initialize - Fills in DB with data to send.

-            PrepareDatabase();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPostProcessor += this.FailOnPrepareTransportHook;

-

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsFull();

-

-            // check messages are present in the queue

-            VerifyNoMessagesInQueue();

-        }

-

-        [Test]

-        public void TestRecoverAfterTransactionScopeAborted()

-        {

-            // Test initialize - Fills in DB with data to send.

-            PrepareDatabase();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ReadFromDbAndProduceToQueueWithScopeAborted(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // verify sql server has NOT commited the transaction                    

-            VerifyDatabaseTableIsFull();

-

-            // check messages are NOT present in the queue

-            VerifyNoMessagesInQueue();

-        }

-

-        [Test]

-        public void TestRecoverAfterRollbackFailWhenScopeAborted()

-        {

-            // Test initialize - Fills in DB with data to send.

-            PrepareDatabase();

-

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                ITransport transport = (connection as Connection).ITransport;

-                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;

-                Assert.IsNotNull(tcpFaulty);

-                tcpFaulty.OnewayCommandPreProcessor += this.FailOnRollbackTransportHook;

-

-                ReadFromDbAndProduceToQueueWithScopeAborted(connection);

-

-                Thread.Sleep(2000);

-            }

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsFull();

-

-            // before recovering, messages should NOT be present in the queue

-            VerifyNoMessagesInQueueNoRecovery();

-

-            // check messages are not present in the queue after recover

-            VerifyNoMessagesInQueue();

-        }

-

-        [Test]

-        public void TestIterativeTransactedProduceWithDBDelete()

-        {

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                connection.ExceptionListener += this.OnException;

-                connection.Start();

-

-                PrepareDatabase();

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                PrepareDatabase();

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                PrepareDatabase();

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                PrepareDatabase();

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-

-                PrepareDatabase();

-                ReadFromDbAndProduceToQueueWithCommit(connection);

-            }

-

-            // verify sql server has commited the transaction                    

-            VerifyDatabaseTableIsEmpty();

-

-            // check messages are present in the queue

-            VerifyBrokerQueueCount(MSG_COUNT * 5);

-        }

-    }

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.IO;
+using System.Threading;
+using Apache.NMS.ActiveMQ.Transactions;
+using Apache.NMS.ActiveMQ.Transport;
+using Apache.NMS.ActiveMQ.Transport.Tcp;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+    [TestFixture]
+    [Category("Manual")]
+    class DtcProducerTransactionsTest : DtcTransactionsTestSupport
+    {
+        [SetUp]
+        public override void SetUp()
+        {
+            base.SetUp();
+
+            this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionUri));
+            this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();
+        }
+
+        [Test]
+        public void TestRecoverAfterFailOnTransactionCommit()
+        {
+            // Test initialize - Fills in DB with data to send.
+            PrepareDatabase();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
+
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                Thread.Sleep(1000);
+            }
+
+            // transaction should not have been commited
+            VerifyNoMessagesInQueueNoRecovery();
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsEmpty();
+
+            // check messages are present in the queue
+            NetTxTransactionContext.ResetDtcRecovery();
+            VerifyBrokerQueueCount();
+        }
+
+        [Test]
+        public void TestRecoverAfterFailOnTransactionPostCommitSend()
+        {
+            // Test initialize - Fills in DB with data to send.
+            PrepareDatabase();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPostProcessor += this.FailOnCommitTransportHook;
+
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                Thread.Sleep(1000);
+            }
+
+            // transaction should have been commited
+            VerifyBrokerQueueCountNoRecovery();
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsEmpty();
+
+            // check messages are present in the queue
+            VerifyBrokerQueueCount();
+        }
+
+        [Test]
+        public void TestNoRecoverAfterFailOnTransactionWhenLogDeleted()
+        {
+            // Test initialize - Fills in DB with data to send.
+            PrepareDatabase();
+
+            NetTxConnectionFactory netTxFactory = dtcFactory;
+            RecoveryFileLogger logger = netTxFactory.RecoveryPolicy.RecoveryLogger as RecoveryFileLogger;
+            string logDirectory = logger.Location;
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
+
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // transaction should not have been commited
+            VerifyNoMessagesInQueueNoRecovery();
+
+            // delete all recovery files            
+            foreach (string file in Directory.GetFiles(logDirectory, "*.bin"))
+            {
+                File.Delete(file);
+            }
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsEmpty();
+
+            // check messages are NOT present in the queue bacause recovery file has been deleted
+            VerifyNoMessagesInQueue();
+        }
+
+        [Test]
+        public void TestNoRecoverAfterFailOnTransactionWhenLogWriteFails()
+        {
+            // Test initialize - Fills in DB with data to send.
+            PrepareDatabase();
+
+            string newConnectionUri = 
+                connectionUri + "?nms.RecoveryPolicy.RecoveryLoggerType=harness" +
+                                "&nms.configuredResourceManagerId=" +
+                                dtcFactory.ConfiguredResourceManagerId;
+
+            dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                IRecoveryLogger logger = (connection as NetTxConnection).RecoveryPolicy.RecoveryLogger;
+                Assert.IsNotNull(logger);
+                RecoveryLoggerHarness harness = logger as RecoveryLoggerHarness;
+                Assert.IsNotNull(harness);
+
+                harness.PreLogRecoveryInfoEvent += FailOnPreLogRecoveryHook;
+
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // verify sql server has not commited the transaction                    
+            VerifyDatabaseTableIsFull();
+
+            // check messages are not present in the queue
+            VerifyNoMessagesInQueue();
+        }
+
+        [Test]
+        public void TestRecoverAfterFailOnTransactionBeforePrepareSent()
+        {
+            // Test initialize - Fills in DB with data to send.
+            PrepareDatabase();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPreProcessor += this.FailOnPrepareTransportHook;
+
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // verify sql server has not commited the transaction                    
+            VerifyDatabaseTableIsFull();
+
+            // check messages are not present in the queue
+            VerifyNoMessagesInQueue();
+        }
+
+        [Test]
+        public void TestRecoverAfterFailOnTransactionDuringPrepareSend()
+        {
+            // Test initialize - Fills in DB with data to send.
+            PrepareDatabase();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPostProcessor += this.FailOnPrepareTransportHook;
+
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsFull();
+
+            // check messages are present in the queue
+            VerifyNoMessagesInQueue();
+        }
+
+        [Test]
+        public void TestRecoverAfterTransactionScopeAborted()
+        {
+            // Test initialize - Fills in DB with data to send.
+            PrepareDatabase();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ReadFromDbAndProduceToQueueWithScopeAborted(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // verify sql server has NOT commited the transaction                    
+            VerifyDatabaseTableIsFull();
+
+            // check messages are NOT present in the queue
+            VerifyNoMessagesInQueue();
+        }
+
+        [Test]
+        public void TestRecoverAfterRollbackFailWhenScopeAborted()
+        {
+            // Test initialize - Fills in DB with data to send.
+            PrepareDatabase();
+
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                ITransport transport = (connection as Connection).ITransport;
+                TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+                Assert.IsNotNull(tcpFaulty);
+                tcpFaulty.OnewayCommandPreProcessor += this.FailOnRollbackTransportHook;
+
+                ReadFromDbAndProduceToQueueWithScopeAborted(connection);
+
+                Thread.Sleep(2000);
+            }
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsFull();
+
+            // before recovering, messages should NOT be present in the queue
+            VerifyNoMessagesInQueueNoRecovery();
+
+            // check messages are not present in the queue after recover
+            VerifyNoMessagesInQueue();
+        }
+
+        [Test]
+        public void TestIterativeTransactedProduceWithDBDelete()
+        {
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                connection.ExceptionListener += this.OnException;
+                connection.Start();
+
+                PrepareDatabase();
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                PrepareDatabase();
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                PrepareDatabase();
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                PrepareDatabase();
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+
+                PrepareDatabase();
+                ReadFromDbAndProduceToQueueWithCommit(connection);
+            }
+
+            // verify sql server has commited the transaction                    
+            VerifyDatabaseTableIsEmpty();
+
+            // check messages are present in the queue
+            VerifyBrokerQueueCount(MSG_COUNT * 5);
+        }
+    }
+}
diff --git a/src/test/csharp/DtcTransactionsTestSupport.cs b/test/DtcTransactionsTestSupport.cs
similarity index 71%
rename from src/test/csharp/DtcTransactionsTestSupport.cs
rename to test/DtcTransactionsTestSupport.cs
index 030a9d3..88331cf 100644
--- a/src/test/csharp/DtcTransactionsTestSupport.cs
+++ b/test/DtcTransactionsTestSupport.cs
@@ -1,662 +1,793 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.IO;

-using System.Transactions;

-using System.Threading;

-

-using NUnit.Framework;

-using Apache.NMS.Test;

-using Apache.NMS.ActiveMQ.Commands;

-using Apache.NMS.ActiveMQ.Transport;

-using System.Data.SqlClient;

-using System.Collections;

-

-namespace Apache.NMS.ActiveMQ.Test

-{

-    // PREREQUISITES to run those tests :

-    // - A local instance of sql server 2008 running, with a db (e.g. TestDB) that 

-    //   as a table (e.g. TestTable) with a single column (e.g. TestID) of type INT.

-    //   The test default to using an SQL Connection string with a user id of 

-    //   'user' and the password 'password'

-    // - AMQ Server 5.4.2+

-    // - NMS 1.5+

-    //

-    // IMPORTANT

-    // Because you cannot perform recovery in a process more than once you cannot

-    // run these tests sequentially in the NUnit GUI or NUnit Console runner you

-    // must run them one at a time from the console or using a tool like the ReSharper

-    // plugin for Visual Studio.

-    //

-

-    public class DtcTransactionsTestSupport : NMSTestSupport

-    {

-        protected const int MSG_COUNT = 5;

-        protected string nonExistantPath;

-        protected NetTxConnectionFactory dtcFactory;

-        

-        private ITrace oldTracer;

-

-        protected const string sqlConnectionString =

-            // "Data Source=localhost;Initial Catalog=TestDB;User ID=user;Password=password";

-            "Data Source=.\\SQLEXPRESS;Initial Catalog=TestDB;Integrated Security = true";

-        protected const string testTable = "TestTable";

-        protected const string testColumn = "TestID";

-        protected const string testQueueName = "TestQueue";

-        protected const string connectionURI = "tcpfaulty://${activemqhost}:61616";

-

-        [SetUp]

-        public override void SetUp()

-        {

-            this.oldTracer = Tracer.Trace;

-            this.nonExistantPath = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid().ToString());

-

-            base.SetUp();

-

-            PurgeDestination();

-        }

-

-        [TearDown]

-        public override void TearDown()

-        {

-            DeleteDestination();

-            

-            base.TearDown();

-

-            Tracer.Trace = this.oldTracer;

-        }

-

-        protected void OnException(Exception ex)

-        {

-            Tracer.DebugFormat("Test Driver received Error Notification: {0}", ex.Message);

-        }

-

-        #region Database Utility Methods

-

-        protected static void PrepareDatabase()

-        {

-            using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-            {

-                sqlConnection.Open();

-

-                // remove all data from test table

-                using (SqlCommand sqlCommand = new SqlCommand(string.Format("TRUNCATE TABLE {0}", testTable), sqlConnection))

-                {

-                    sqlCommand.ExecuteNonQuery();

-                }

-

-                // add some data to test table

-                for (int i = 0; i < MSG_COUNT; ++i)

-                {

-                    using (SqlCommand sqlCommand = new SqlCommand(

-                        string.Format(

-                                        "INSERT INTO {0} ({1}) values ({2})",

-                                        testTable,

-                                        testColumn,

-                                        i), sqlConnection))

-                    {

-                        sqlCommand.ExecuteNonQuery();

-                    }

-                }

-

-                sqlConnection.Close();

-            }

-        }

-

-        protected static void PurgeDatabase()

-        {

-            using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-            {

-                sqlConnection.Open();

-

-                // remove all data from test table

-                using (SqlCommand sqlCommand = new SqlCommand(string.Format("TRUNCATE TABLE {0}", testTable), sqlConnection))

-                {

-                    sqlCommand.ExecuteNonQuery();

-                }

-

-                sqlConnection.Close();

-            }

-        }

-

-        protected static IList ExtractDataSet()

-        {

-            IList entries = new ArrayList();

-

-            using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-            {

-                sqlConnection.Open();

-

-                using (SqlCommand sqlReadCommand = new SqlCommand(

-                    string.Format("SELECT {0} FROM {1}", testColumn, testTable), sqlConnection))

-                using (SqlDataReader reader = sqlReadCommand.ExecuteReader())

-                {

-                    while (reader.Read())

-                    {

-                        entries.Add("Hello World " + (int)reader[0]);

-                    }

-                }

-            }

-

-            return entries;

-        }

-

-        protected static void VerifyDatabaseTableIsEmpty()

-        {

-            using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-            {

-                sqlConnection.Open();

-                SqlCommand sqlCommand = new SqlCommand(

-                    string.Format("SELECT COUNT(*) FROM {0}", testTable),

-                    sqlConnection);

-                int count = (int)sqlCommand.ExecuteScalar();

-                Assert.AreEqual(0, count, "wrong number of rows in DB");

-            }

-        }

-

-        protected static void VerifyDatabaseTableIsFull()

-        {

-            VerifyDatabaseTableIsFull(MSG_COUNT);

-        }

-

-        protected static void VerifyDatabaseTableIsFull(int expected)

-        {

-            using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-            {

-                sqlConnection.Open();

-                SqlCommand sqlCommand = new SqlCommand(

-                    string.Format("SELECT COUNT(*) FROM {0}", testTable),

-                    sqlConnection);

-                int count = (int)sqlCommand.ExecuteScalar();

-                Assert.AreEqual(expected, count, "wrong number of rows in DB");

-            }

-        }

-

-        #endregion

-

-        #region Destination Utility Methods

-

-        protected static void DeleteDestination()

-        {

-            IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionURI));

-

-            using (Connection connection = factory.CreateConnection() as Connection)

-            {

-                using (ISession session = connection.CreateSession())

-                {

-                    IQueue queue = session.GetQueue(testQueueName);

-                    try

-                    {

-                        connection.DeleteDestination(queue);

-                    }

-                    catch

-                    {

-                    }

-                }

-            }

-        }

-

-        protected static void PurgeDestination()

-        {

-            IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionURI));

-

-            using (IConnection connection = factory.CreateConnection())

-            {

-                connection.Start();

-

-                using (ISession session = connection.CreateSession())

-                using (IMessageConsumer consumer = session.CreateConsumer(session.GetQueue(testQueueName)))

-                {

-                    IMessage recvd;

-                    while ((recvd = consumer.Receive(TimeSpan.FromMilliseconds(3000))) != null)

-                    {

-                        Tracer.Debug("Setup Purged Message: " + recvd);

-                    }

-                }

-            }

-        }

-

-        protected static void PurgeAndFillQueue()

-        {

-            PurgeAndFillQueue(MSG_COUNT);

-        }

-

-        protected static void PurgeAndFillQueue(int msgCount)

-        {

-            IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionURI));

-

-            using (IConnection connection = factory.CreateConnection())

-            {

-                connection.Start();

-

-                using (ISession session = connection.CreateSession())

-                {

-                    IQueue queue = session.GetQueue(testQueueName);

-

-                    // empty queue

-                    using (IMessageConsumer consumer = session.CreateConsumer(queue))

-                    {

-                        while ((consumer.Receive(TimeSpan.FromMilliseconds(2000))) != null)

-                        {

-                        }

-                    }

-

-                    // enqueue several messages

-                    using (IMessageProducer producer = session.CreateProducer(queue))

-                    {

-                        producer.DeliveryMode = MsgDeliveryMode.Persistent;

-

-                        for (int i = 0; i < msgCount; i++)

-                        {

-                            producer.Send(session.CreateTextMessage(i.ToString()));

-                        }

-                    }

-                }

-            }

-        }

-

-        #endregion

-

-        #region Broker Queue State Validation Routines

-

-        protected static void VerifyBrokerQueueCountNoRecovery()

-        {

-            VerifyBrokerQueueCountNoRecovery(MSG_COUNT);

-        }

-

-        protected static void VerifyBrokerQueueCountNoRecovery(int expectedNumberOfMessages)

-        {

-            IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionURI));

-

-            using (IConnection connection = factory.CreateConnection())

-            {

-                // check messages are present in the queue

-                using (ISession session = connection.CreateSession())

-                {

-                    IQueue queue = session.GetQueue(testQueueName);

-

-                    using (IQueueBrowser browser = session.CreateBrowser(queue))

-                    {

-                        connection.Start();

-                        int count = 0;

-                        IEnumerator enumerator = browser.GetEnumerator();

-

-                        while(enumerator.MoveNext())

-                        {

-                            IMessage msg = enumerator.Current as IMessage;

-                            Assert.IsNotNull(msg, "message is not in the queue !");

-                            count++;

-                        }

-

-                        // count should match the expected count

-                        Assert.AreEqual(expectedNumberOfMessages, count);

-                    }

-                }

-            }

-        }

-

-        protected void VerifyBrokerQueueCount()

-        {

-            VerifyBrokerQueueCount(MSG_COUNT, connectionURI);

-        }

-

-        protected void VerifyBrokerQueueCount(int expectedCount)

-        {

-            VerifyBrokerQueueCount(expectedCount, connectionURI);

-        }

-

-        protected void VerifyBrokerQueueCount(string connectionUri)

-        {

-            VerifyBrokerQueueCount(MSG_COUNT, connectionUri);

-        }

-

-        protected void VerifyBrokerQueueCount(int expectedCount, string connectionUri)

-        {           

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                // check messages are present in the queue

-                using (INetTxSession session = connection.CreateNetTxSession())

-                {

-                    IQueue queue = session.GetQueue(testQueueName);

-

-                    using (IQueueBrowser browser = session.CreateBrowser(queue))

-                    {

-                        connection.Start();

-                        int count = 0;

-                        IEnumerator enumerator = browser.GetEnumerator();

-

-                        while (enumerator.MoveNext())

-                        {

-                            IMessage msg = enumerator.Current as IMessage;

-                            Assert.IsNotNull(msg, "message is not in the queue !");

-                            count++;

-                        }

-

-                        // count should match the expected count

-                        Assert.AreEqual(expectedCount, count);

-                    }

-                }

-            }

-        }

-

-        protected void VerifyNoMessagesInQueueNoRecovery()

-        {

-            VerifyBrokerQueueCountNoRecovery(0);

-        }

-

-        protected void VerifyNoMessagesInQueue()

-        {

-            VerifyBrokerQueueCount(0);

-        }

-

-        protected static void VerifyBrokerStateNoRecover(int expectedNumberOfMessages)

-        {

-            IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionURI));

-

-            using (IConnection connection = factory.CreateConnection())

-            {

-                // check messages are present in the queue

-                using (ISession session = connection.CreateSession())

-                {

-                    IDestination queue = session.GetQueue(testQueueName);

-

-                    using (IMessageConsumer consumer = session.CreateConsumer(queue))

-                    {

-                        connection.Start();

-                        IMessage msg;

-

-                        for (int i = 0; i < expectedNumberOfMessages; ++i)

-                        {

-                            msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));

-                            Assert.IsNotNull(msg, "message is not in the queue !");

-                        }

-

-                        // next message should be empty

-                        msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));

-                        Assert.IsNull(msg, "message found but not expected !");

-                        consumer.Close();

-                    }

-                }

-

-                connection.Close();

-            }

-        }

-

-        protected void VerifyBrokerHasMessagesInQueue(string connectionURI)

-        {

-            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())

-            {

-                // check messages are present in the queue

-                using (INetTxSession session = connection.CreateNetTxSession())

-                {

-                    IDestination queue = session.GetQueue(testQueueName);

-

-                    using (IMessageConsumer consumer = session.CreateConsumer(queue))

-                    {

-                        connection.Start();

-

-                        for (int i = 0; i < MSG_COUNT; ++i)

-                        {

-                            IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));

-                            Assert.IsNotNull(msg, "message is not in the queue !");

-                        }

-

-                        consumer.Close();

-                    }

-                }

-            }

-        }

-

-

-        #endregion

-

-        #region Transport Hools for controlling failure point.

-

-        public void FailOnPrepareTransportHook(ITransport transport, Command command)

-        {

-            if (command is TransactionInfo)

-            {

-                TransactionInfo txInfo = command as TransactionInfo;

-                if (txInfo.Type == (byte)TransactionType.Prepare)

-                {

-                    Thread.Sleep(1000);

-                    Tracer.Debug("Throwing Error on Prepare.");

-                    throw new Exception("Error writing Prepare command");

-                }

-            }

-        }

-

-        public void FailOnRollbackTransportHook(ITransport transport, Command command)

-        {

-            if (command is TransactionInfo)

-            {

-                TransactionInfo txInfo = command as TransactionInfo;

-                if (txInfo.Type == (byte)TransactionType.Rollback)

-                {

-                    Tracer.Debug("Throwing Error on Rollback.");

-                    throw new Exception("Error writing Rollback command");

-                }

-            }

-        }

-

-        public void FailOnCommitTransportHook(ITransport transport, Command command)

-        {

-            if (command is TransactionInfo)

-            {

-                TransactionInfo txInfo = command as TransactionInfo;

-                if (txInfo.Type == (byte)TransactionType.CommitTwoPhase)

-                {

-                    Tracer.Debug("Throwing Error on Commit.");

-                    throw new Exception("Error writing Commit command");

-                }

-            }

-        }

-

-        #endregion

-

-        #region Recovery Harness Hooks for controlling failure conditions

-

-        public void FailOnPreLogRecoveryHook(XATransactionId xid, byte[] recoveryInformatio)

-        {

-            Tracer.Debug("Throwing Error before the Recovery Information is Logged.");

-            throw new Exception("Intentional Error Logging Recovery Information");

-        }

-

-        #endregion

-

-        #region Produce Messages use cases

-

-        protected static void ReadFromDbAndProduceToQueueWithCommit(INetTxConnection connection)

-        {

-            IList entries = ExtractDataSet();

-

-            using (INetTxSession session = connection.CreateNetTxSession(true))

-            {

-                IQueue queue = session.GetQueue(testQueueName);

-

-                // enqueue several messages read from DB

-                try

-                {

-                    using (IMessageProducer producer = session.CreateProducer(queue))

-                    {

-                        producer.DeliveryMode = MsgDeliveryMode.Persistent;

-

-                        using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))

-                        using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-                        {

-                            sqlConnection.Open();

-

-                            Assert.IsNotNull(Transaction.Current);

-

-                            Tracer.DebugFormat("Sending {0} messages to Broker in this TX", entries.Count);

-                            foreach (string textBody in entries)

-                            {

-                                producer.Send(session.CreateTextMessage(textBody));

-                            }

-

-                            using (SqlCommand sqlDeleteCommand = new SqlCommand(

-                                string.Format("DELETE FROM {0}", testTable), sqlConnection))

-                            {

-                                int count = sqlDeleteCommand.ExecuteNonQuery();

-                                Assert.AreEqual(entries.Count, count, "wrong number of rows deleted");

-                            }

-

-                            scoped.Complete();

-                        }

-                    }

-                }

-                catch (Exception e) // exception thrown in TransactionContext.Commit(Enlistment enlistment)

-                {

-                    Tracer.Debug("TX;Error from TransactionScope: " + e.Message);

-                    Tracer.Debug(e.ToString());

-                }

-            }

-        }

-

-        protected static void ReadFromDbAndProduceToQueueWithScopeAborted(INetTxConnection connection)

-        {

-            IList entries = ExtractDataSet();

-

-            using (INetTxSession session = connection.CreateNetTxSession(true))

-            {

-                IQueue queue = session.GetQueue(testQueueName);

-

-                // enqueue several messages read from DB

-                try

-                {

-                    using (IMessageProducer producer = session.CreateProducer(queue))

-                    {

-                        producer.DeliveryMode = MsgDeliveryMode.Persistent;

-

-                        using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))

-                        using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-                        {

-                            sqlConnection.Open();

-

-                            Assert.IsNotNull(Transaction.Current);

-

-                            Tracer.DebugFormat("Sending {0} messages to Broker in this TX", entries.Count);

-                            foreach (string textBody in entries)

-                            {

-                                producer.Send(session.CreateTextMessage(textBody));

-                            }

-

-                            using (SqlCommand sqlDeleteCommand = new SqlCommand(

-                                string.Format("DELETE FROM {0}", testTable), sqlConnection))

-                            {

-                                int count = sqlDeleteCommand.ExecuteNonQuery();

-                                Assert.AreEqual(entries.Count, count, "wrong number of rows deleted");

-                            }

-                        }

-                    }

-                }

-                catch (Exception e)

-                {

-                    Tracer.Debug("TX;Error from TransactionScope: " + e.Message);

-                    Tracer.Debug(e.ToString());

-                }

-            }

-        }

-

-        #endregion

-

-        #region Consume Messages Use Cases

-

-        protected static void ReadFromQueueAndInsertIntoDbWithCommit(INetTxConnection connection)

-        {

-            using (INetTxSession session = connection.CreateNetTxSession(true))

-            {

-                IQueue queue = session.GetQueue(testQueueName);

-

-                // read message from queue and insert into db table

-                try

-                {

-                    using (IMessageConsumer consumer = session.CreateConsumer(queue))

-                    {

-                        using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))

-                        using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-                        using (SqlCommand sqlInsertCommand = new SqlCommand())

-                        {

-                            sqlConnection.Open();

-                            sqlInsertCommand.Connection = sqlConnection;

-

-                            Assert.IsNotNull(Transaction.Current);

-

-                            for (int i = 0; i < MSG_COUNT; i++)

-                            {

-                                ITextMessage message = consumer.Receive() as ITextMessage;

-                                Assert.IsNotNull(message, "missing message");

-                                sqlInsertCommand.CommandText =

-                                    string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));

-                                sqlInsertCommand.ExecuteNonQuery();

-                            }

-

-                            scoped.Complete();

-                        }

-                    }

-                }

-                catch (Exception e)

-                {

-                    Tracer.Debug("TX;Error from TransactionScope: " + e.Message);

-                    Tracer.Debug(e.ToString());

-                }

-            }

-        }

-

-        protected static void ReadFromQueueAndInsertIntoDbWithScopeAborted(INetTxConnection connection)

-        {

-            using (INetTxSession session = connection.CreateNetTxSession(true))

-            {

-                IQueue queue = session.GetQueue(testQueueName);

-

-                // read message from queue and insert into db table

-                try

-                {

-                    using (IMessageConsumer consumer = session.CreateConsumer(queue))

-                    {

-                        using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))

-                        using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))

-                        using (SqlCommand sqlInsertCommand = new SqlCommand())

-                        {

-                            sqlConnection.Open();

-                            sqlInsertCommand.Connection = sqlConnection;

-                            Assert.IsNotNull(Transaction.Current);

-

-                            for (int i = 0; i < MSG_COUNT; i++)

-                            {

-                                ITextMessage message = consumer.Receive() as ITextMessage;

-                                Assert.IsNotNull(message, "missing message");

-

-                                sqlInsertCommand.CommandText =

-                                    string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));

-                                sqlInsertCommand.ExecuteNonQuery();

-                            }

-                        }

-                    }

-                }

-                catch (Exception e)

-                {

-                    Tracer.Debug("TX;Error from TransactionScope: " + e.Message);

-                    Tracer.Debug(e.ToString());

-                }

-            }

-        }

-

-        #endregion

-    }

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.IO;
+using System.Transactions;
+using System.Threading;
+using System.Xml.Linq;
+using NUnit.Framework;
+using Apache.NMS.Test;
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.ActiveMQ.Transport;
+using System.Data.SqlClient;
+using System.Collections;
+using System.Data;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+    // PREREQUISITES to run those tests :
+    // - A local instance of sql server 2008 running, with a db (e.g. TestDB) that 
+    //   as a table (e.g. TestTable) with a single column (e.g. TestID) of type INT.
+    //   The test default to using an SQL Connection string with a user id of 
+    //   'user' and the password 'password'
+    // - AMQ Server 5.4.2+
+    // - NMS 1.5+
+    //
+    // IMPORTANT
+    // Because you cannot perform recovery in a process more than once you cannot
+    // run these tests sequentially in the NUnit GUI or NUnit Console runner you
+    // must run them one at a time from the console or using a tool like the ReSharper
+    // plugin for Visual Studio.
+    //
+
+    public class DtcTransactionsTestSupport : NMSTestSupport
+    {
+        protected const int MSG_COUNT = 5;
+        protected string nonExistantPath;
+        protected NetTxConnectionFactory dtcFactory;
+        
+        private ITrace oldTracer;
+
+        protected static string createDbConnectionString = string.Empty;
+        protected static string createTableConnectionString = string.Empty;
+        protected static string testDbName = string.Empty;
+        protected static string testTable = string.Empty;
+        protected static string testColumn = string.Empty;
+        protected static string testQueueName = string.Empty;
+        protected static string testDbFileNameLocation = string.Empty;
+        protected static string connectionUri = string.Empty;
+
+        [SetUp]
+        public override void SetUp()
+        {
+            var currentFilePath = Directory.GetCurrentDirectory();
+            var xElement = XElement.Load(currentFilePath + "\\test\\TestDbConfig.xml");
+
+            var testDbConnectionString = xElement.Element("createDbConnectionString");
+            if (testDbConnectionString != null) createDbConnectionString = testDbConnectionString.Attribute("name")?.Value;
+
+            var testTableConnectionString = xElement.Element("createTableConnectionString");
+            if (testTableConnectionString != null) createTableConnectionString = testTableConnectionString.Attribute("name")?.Value;
+
+            var table = xElement.Element("testSqlTable");
+            if (table != null) testTable = table.Attribute("name")?.Value;
+
+            var column = xElement.Element("testSqlColumn");
+            if (column != null) testColumn = column.Attribute("name")?.Value;
+
+            var dbName = xElement.Element("testDbName");
+            if (dbName != null) testDbName = dbName.Attribute("name")?.Value;
+
+            var queueName = xElement.Element("testSqlQueueName");
+            if (queueName != null) testQueueName = queueName.Attribute("name")?.Value;
+
+            var fileName = xElement.Element("dbFileNameLocation");
+            if (fileName != null) testDbFileNameLocation = fileName.Attribute("name")?.Value;
+
+            var conUri = xElement.Element("connectionURI");
+            if (conUri != null) connectionUri = conUri.Attribute("name")?.Value;
+
+            this.oldTracer = Tracer.Trace;
+            this.nonExistantPath = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid().ToString());
+
+            base.SetUp();
+
+            if (!CheckDatabaseExists(createDbConnectionString, testDbName))
+            {
+                CreateTestDb();
+                CreateTestTable();
+            }
+
+
+            PurgeDestination();
+        }
+
+        [TearDown]
+        public override void TearDown()
+        {
+            DeleteDestination();
+            
+            base.TearDown();
+
+            Tracer.Trace = this.oldTracer;
+        }
+
+        private bool CheckDatabaseExists(string sqlTmpConnectionString, string databaseName)
+        {
+            bool result;
+            try
+            {
+                var tmpConn = new SqlConnection(sqlTmpConnectionString);
+
+                var sqlCreateDbQuery = $"SELECT database_id FROM sys.databases WHERE Name = '{databaseName}'";
+
+                using (tmpConn)
+                {
+                    using (var sqlCmd = new SqlCommand(sqlCreateDbQuery, tmpConn))
+                    {
+                        tmpConn.Open();
+
+                        var resultObj = sqlCmd.ExecuteScalar();
+
+                        var databaseId = 0;
+
+                        if (resultObj != null)
+                        {
+                            int.TryParse(resultObj.ToString(), out databaseId);
+                        }
+
+                        tmpConn.Close();
+
+                        result = (databaseId > 0);
+                    }
+                }
+            }
+            catch (Exception)
+            {
+                result = false;
+            }
+
+            return result;
+        }
+
+        private void CreateTestDb()
+        {
+            //var createConnection = new SqlConnection("Data Source=WKRKL-F1493EW;Trusted_Connection=yes;User ID=Rafal.Bak;Password=Miesiac*2");
+            var createConnection = new SqlConnection(createDbConnectionString);
+
+            var createDb = "CREATE DATABASE " + testDbName + " ON PRIMARY " +
+                           "(NAME = " + testDbName + ", " +
+                           "FILENAME = '" + testDbFileNameLocation + "\\MyDatabaseData.mdf', " +
+                           "SIZE = 8192KB, MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB) " +
+                           "LOG ON (NAME = TestDB_log, " +
+                           "FILENAME = '" + testDbFileNameLocation + "\\MyDatabaseLog.ldf', " +
+                           "SIZE = 8192KB, " +
+                           "MAXSIZE = 2048GB," +
+                           "FILEGROWTH = 65536KB) ";
+
+            var createDbCommand = new SqlCommand(createDb, createConnection);
+            try
+            {
+                createConnection.Open();
+                createDbCommand.ExecuteNonQuery();
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+            finally
+            {
+                if (createConnection.State == ConnectionState.Open)
+                {
+                    createConnection.Close();
+                }
+            }
+        }
+
+        private void CreateTestTable()
+        {
+            var createConnection = new SqlConnection(createTableConnectionString);
+
+            var createTable = "CREATE TABLE [dbo].[" + testTable + "]([" + testColumn +
+                              "][nchar](10) NULL ) ON [PRIMARY]";
+
+            var createTableCommand = new SqlCommand(createTable, createConnection);
+            try
+            {
+                createConnection.Open();
+                createTableCommand.ExecuteNonQuery();
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+            finally
+            {
+                if (createConnection.State == ConnectionState.Open)
+                {
+                    createConnection.Close();
+                }
+            }
+        }
+
+        protected void OnException(Exception ex)
+        {
+            Tracer.DebugFormat("Test Driver received Error Notification: {0}", ex.Message);
+        }
+
+        #region Database Utility Methods
+
+        protected static void PrepareDatabase()
+        {
+            using (var sqlConnection = new SqlConnection(createDbConnectionString))
+            {
+                sqlConnection.Open();
+
+                // remove all data from test table
+                using (SqlCommand sqlCommand = new SqlCommand($"TRUNCATE TABLE {testTable}", sqlConnection))
+                {
+                    sqlCommand.ExecuteNonQuery();
+                }
+
+                // add some data to test table
+                for (var i = 0; i < MSG_COUNT; ++i)
+                {
+                    using (var sqlCommand = new SqlCommand(
+                        $"INSERT INTO {testTable} ({testColumn}) values ({i})", sqlConnection))
+                    {
+                        sqlCommand.ExecuteNonQuery();
+                    }
+                }
+
+                sqlConnection.Close();
+            }
+        }
+
+        protected static void PurgeDatabase()
+        {
+            using (var sqlConnection = new SqlConnection(createDbConnectionString))
+            {
+                sqlConnection.Open();
+
+                // remove all data from test table
+                using (var sqlCommand = new SqlCommand($"TRUNCATE TABLE {testTable}", sqlConnection))
+                {
+                    sqlCommand.ExecuteNonQuery();
+                }
+
+                sqlConnection.Close();
+            }
+        }
+
+        protected static IList ExtractDataSet()
+        {
+            IList entries = new ArrayList();
+
+            using (var sqlConnection = new SqlConnection(createDbConnectionString))
+            {
+                sqlConnection.Open();
+
+                using (var sqlReadCommand = new SqlCommand(
+                    $"SELECT {testColumn} FROM {testTable}", sqlConnection))
+                using (var reader = sqlReadCommand.ExecuteReader())
+                {
+                    while (reader.Read())
+                    {
+                        entries.Add("Hello World " + (string)reader[0]);
+                    }
+                }
+            }
+
+            return entries;
+        }
+
+        protected static void VerifyDatabaseTableIsEmpty()
+        {
+            using (var sqlConnection = new SqlConnection(createDbConnectionString))
+            {
+                sqlConnection.Open();
+                var sqlCommand = new SqlCommand(
+                    $"SELECT COUNT(*) FROM {testTable}",
+                    sqlConnection);
+                var count = (int)sqlCommand.ExecuteScalar();
+                Assert.AreEqual(0, count, "wrong number of rows in DB");
+            }
+        }
+
+        protected static void VerifyDatabaseTableIsFull()
+        {
+            VerifyDatabaseTableIsFull(MSG_COUNT);
+        }
+
+        protected static void VerifyDatabaseTableIsFull(int expected)
+        {
+            using (var sqlConnection = new SqlConnection(createDbConnectionString))
+            {
+                sqlConnection.Open();
+                var sqlCommand = new SqlCommand(
+                    $"SELECT COUNT(*) FROM {testTable}",
+                    sqlConnection);
+                var count = (int)sqlCommand.ExecuteScalar();
+                Assert.AreEqual(expected, count, "wrong number of rows in DB");
+            }
+        }
+
+        #endregion
+
+        #region Destination Utility Methods
+
+        protected static void DeleteDestination()
+        {
+            IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+            using (var connection = factory.CreateConnection() as Connection)
+            {
+                using (var session = connection.CreateSession())
+                {
+                    var queue = session.GetQueue(testQueueName);
+                    try
+                    {
+                        connection.DeleteDestination(queue);
+                    }
+                    catch(Exception e)
+                    {
+                        throw new Exception(e.Message);
+                    }
+                }
+            }
+        }
+
+        protected static void PurgeDestination()
+        {
+            IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+            using (var connection = factory.CreateConnection())
+            {
+                connection.Start();
+
+                using (var session = connection.CreateSession())
+                using (var consumer = session.CreateConsumer(session.GetQueue(testQueueName)))
+                {
+                    IMessage recvd;
+                    while ((recvd = consumer.Receive(TimeSpan.FromMilliseconds(3000))) != null)
+                    {
+                        Tracer.Debug("Setup Purged Message: " + recvd);
+                    }
+                }
+            }
+        }
+
+        protected static void PurgeAndFillQueue()
+        {
+            PurgeAndFillQueue(MSG_COUNT);
+        }
+
+        protected static void PurgeAndFillQueue(int msgCount)
+        {
+            IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+            using (var connection = factory.CreateConnection())
+            {
+                connection.Start();
+
+                using (var session = connection.CreateSession())
+                {
+                    var queue = session.GetQueue(testQueueName);
+
+                    // empty queue
+                    using (var consumer = session.CreateConsumer(queue))
+                    {
+                        while ((consumer.Receive(TimeSpan.FromMilliseconds(2000))) != null)
+                        {
+                        }
+                    }
+
+                    // enqueue several messages
+                    using (var producer = session.CreateProducer(queue))
+                    {
+                        producer.DeliveryMode = MsgDeliveryMode.Persistent;
+
+                        for (var i = 0; i < msgCount; i++)
+                        {
+                            producer.Send(session.CreateTextMessage(i.ToString()));
+                        }
+                    }
+                }
+            }
+        }
+
+        #endregion
+
+        #region Broker Queue State Validation Routines
+
+        protected static void VerifyBrokerQueueCountNoRecovery()
+        {
+            VerifyBrokerQueueCountNoRecovery(MSG_COUNT);
+        }
+
+        protected static void VerifyBrokerQueueCountNoRecovery(int expectedNumberOfMessages)
+        {
+            IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+            using (IConnection connection = factory.CreateConnection())
+            {
+                // check messages are present in the queue
+                using (ISession session = connection.CreateSession())
+                {
+                    IQueue queue = session.GetQueue(testQueueName);
+
+                    using (IQueueBrowser browser = session.CreateBrowser(queue))
+                    {
+                        connection.Start();
+                        int count = 0;
+                        IEnumerator enumerator = browser.GetEnumerator();
+
+                        while(enumerator.MoveNext())
+                        {
+                            IMessage msg = enumerator.Current as IMessage;
+                            Assert.IsNotNull(msg, "message is not in the queue !");
+                            count++;
+                        }
+
+                        // count should match the expected count
+                        Assert.AreEqual(expectedNumberOfMessages, count);
+                    }
+                }
+            }
+        }
+
+        protected void VerifyBrokerQueueCount()
+        {
+            VerifyBrokerQueueCount(MSG_COUNT, connectionUri);
+        }
+
+        protected void VerifyBrokerQueueCount(int expectedCount)
+        {
+            VerifyBrokerQueueCount(expectedCount, connectionUri);
+        }
+
+        protected void VerifyBrokerQueueCount(string connectionUri)
+        {
+            VerifyBrokerQueueCount(MSG_COUNT, connectionUri);
+        }
+
+        protected void VerifyBrokerQueueCount(int expectedCount, string connectionUri)
+        {           
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                // check messages are present in the queue
+                using (INetTxSession session = connection.CreateNetTxSession())
+                {
+                    IQueue queue = session.GetQueue(testQueueName);
+
+                    using (IQueueBrowser browser = session.CreateBrowser(queue))
+                    {
+                        connection.Start();
+                        int count = 0;
+                        IEnumerator enumerator = browser.GetEnumerator();
+
+                        while (enumerator.MoveNext())
+                        {
+                            IMessage msg = enumerator.Current as IMessage;
+                            Assert.IsNotNull(msg, "message is not in the queue !");
+                            count++;
+                        }
+
+                        // count should match the expected count
+                        Assert.AreEqual(expectedCount, count);
+                    }
+                }
+            }
+        }
+
+        protected void VerifyNoMessagesInQueueNoRecovery()
+        {
+            VerifyBrokerQueueCountNoRecovery(0);
+        }
+
+        protected void VerifyNoMessagesInQueue()
+        {
+            VerifyBrokerQueueCount(0);
+        }
+
+        protected static void VerifyBrokerStateNoRecover(int expectedNumberOfMessages)
+        {
+            IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+            using (IConnection connection = factory.CreateConnection())
+            {
+                // check messages are present in the queue
+                using (ISession session = connection.CreateSession())
+                {
+                    IDestination queue = session.GetQueue(testQueueName);
+
+                    using (IMessageConsumer consumer = session.CreateConsumer(queue))
+                    {
+                        connection.Start();
+                        IMessage msg;
+
+                        for (int i = 0; i < expectedNumberOfMessages; ++i)
+                        {
+                            msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
+                            Assert.IsNotNull(msg, "message is not in the queue !");
+                        }
+
+                        // next message should be empty
+                        msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
+                        Assert.IsNull(msg, "message found but not expected !");
+                        consumer.Close();
+                    }
+                }
+
+                connection.Close();
+            }
+        }
+
+        protected void VerifyBrokerHasMessagesInQueue(string connectionURI)
+        {
+            using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+            {
+                // check messages are present in the queue
+                using (INetTxSession session = connection.CreateNetTxSession())
+                {
+                    IDestination queue = session.GetQueue(testQueueName);
+
+                    using (IMessageConsumer consumer = session.CreateConsumer(queue))
+                    {
+                        connection.Start();
+
+                        for (int i = 0; i < MSG_COUNT; ++i)
+                        {
+                            IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
+                            Assert.IsNotNull(msg, "message is not in the queue !");
+                        }
+
+                        consumer.Close();
+                    }
+                }
+            }
+        }
+
+
+        #endregion
+
+        #region Transport Hools for controlling failure point.
+
+        public void FailOnPrepareTransportHook(ITransport transport, Command command)
+        {
+            if (command is TransactionInfo)
+            {
+                TransactionInfo txInfo = command as TransactionInfo;
+                if (txInfo.Type == (byte)TransactionType.Prepare)
+                {
+                    Thread.Sleep(1000);
+                    Tracer.Debug("Throwing Error on Prepare.");
+                    throw new Exception("Error writing Prepare command");
+                }
+            }
+        }
+
+        public void FailOnRollbackTransportHook(ITransport transport, Command command)
+        {
+            if (command is TransactionInfo)
+            {
+                TransactionInfo txInfo = command as TransactionInfo;
+                if (txInfo.Type == (byte)TransactionType.Rollback)
+                {
+                    Tracer.Debug("Throwing Error on Rollback.");
+                    throw new Exception("Error writing Rollback command");
+                }
+            }
+        }
+
+        public void FailOnCommitTransportHook(ITransport transport, Command command)
+        {
+            if (command is TransactionInfo)
+            {
+                TransactionInfo txInfo = command as TransactionInfo;
+                if (txInfo.Type == (byte)TransactionType.CommitTwoPhase)
+                {
+                    Tracer.Debug("Throwing Error on Commit.");
+                    throw new Exception("Error writing Commit command");
+                }
+            }
+        }
+
+        #endregion
+
+        #region Recovery Harness Hooks for controlling failure conditions
+
+        public void FailOnPreLogRecoveryHook(XATransactionId xid, byte[] recoveryInformatio)
+        {
+            Tracer.Debug("Throwing Error before the Recovery Information is Logged.");
+            throw new Exception("Intentional Error Logging Recovery Information");
+        }
+
+        #endregion
+
+        #region Produce Messages use cases
+
+        protected static void ReadFromDbAndProduceToQueueWithCommit(INetTxConnection connection)
+        {
+            IList entries = ExtractDataSet();
+
+            using (INetTxSession session = connection.CreateNetTxSession(true))
+            {
+                IQueue queue = session.GetQueue(testQueueName);
+
+                // enqueue several messages read from DB
+                try
+                {
+                    using (IMessageProducer producer = session.CreateProducer(queue))
+                    {
+                        producer.DeliveryMode = MsgDeliveryMode.Persistent;
+
+                        using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+                        using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+                        {
+                            sqlConnection.Open();
+
+                            Assert.IsNotNull(Transaction.Current);
+
+                            Tracer.DebugFormat("Sending {0} messages to Broker in this TX", entries.Count);
+                            foreach (string textBody in entries)
+                            {
+                                producer.Send(session.CreateTextMessage(textBody));
+                            }
+
+                            using (SqlCommand sqlDeleteCommand = new SqlCommand(
+                                string.Format("DELETE FROM {0}", testTable), sqlConnection))
+                            {
+                                int count = sqlDeleteCommand.ExecuteNonQuery();
+                                Assert.AreEqual(entries.Count, count, "wrong number of rows deleted");
+                            }
+
+                            scoped.Complete();
+                        }
+                    }
+                }
+                catch (Exception e) // exception thrown in TransactionContext.Commit(Enlistment enlistment)
+                {
+                    Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
+                    Tracer.Debug(e.ToString());
+                }
+            }
+        }
+
+        protected static void ReadFromDbAndProduceToQueueWithScopeAborted(INetTxConnection connection)
+        {
+            IList entries = ExtractDataSet();
+
+            using (INetTxSession session = connection.CreateNetTxSession(true))
+            {
+                IQueue queue = session.GetQueue(testQueueName);
+
+                // enqueue several messages read from DB
+                try
+                {
+                    using (IMessageProducer producer = session.CreateProducer(queue))
+                    {
+                        producer.DeliveryMode = MsgDeliveryMode.Persistent;
+
+                        using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+                        using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+                        {
+                            sqlConnection.Open();
+
+                            Assert.IsNotNull(Transaction.Current);
+
+                            Tracer.DebugFormat("Sending {0} messages to Broker in this TX", entries.Count);
+                            foreach (string textBody in entries)
+                            {
+                                producer.Send(session.CreateTextMessage(textBody));
+                            }
+
+                            using (SqlCommand sqlDeleteCommand = new SqlCommand(
+                                string.Format("DELETE FROM {0}", testTable), sqlConnection))
+                            {
+                                int count = sqlDeleteCommand.ExecuteNonQuery();
+                                Assert.AreEqual(entries.Count, count, "wrong number of rows deleted");
+                            }
+                        }
+                    }
+                }
+                catch (Exception e)
+                {
+                    Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
+                    Tracer.Debug(e.ToString());
+                }
+            }
+        }
+
+        #endregion
+
+        #region Consume Messages Use Cases
+
+        protected static void ReadFromQueueAndInsertIntoDbWithCommit(INetTxConnection connection)
+        {
+            using (INetTxSession session = connection.CreateNetTxSession(true))
+            {
+                IQueue queue = session.GetQueue(testQueueName);
+
+                // read message from queue and insert into db table
+                try
+                {
+                    using (IMessageConsumer consumer = session.CreateConsumer(queue))
+                    {
+                        using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+                        using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+                        using (SqlCommand sqlInsertCommand = new SqlCommand())
+                        {
+                            sqlConnection.Open();
+                            sqlInsertCommand.Connection = sqlConnection;
+
+                            Assert.IsNotNull(Transaction.Current);
+
+                            for (int i = 0; i < MSG_COUNT; i++)
+                            {
+                                ITextMessage message = consumer.Receive() as ITextMessage;
+                                Assert.IsNotNull(message, "missing message");
+                                sqlInsertCommand.CommandText =
+                                    string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));
+                                sqlInsertCommand.ExecuteNonQuery();
+                            }
+
+                            scoped.Complete();
+                        }
+                    }
+                }
+                catch (Exception e)
+                {
+                    Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
+                    Tracer.Debug(e.ToString());
+                }
+            }
+        }
+
+        protected static void ReadFromQueueAndInsertIntoDbWithScopeAborted(INetTxConnection connection)
+        {
+            using (INetTxSession session = connection.CreateNetTxSession(true))
+            {
+                IQueue queue = session.GetQueue(testQueueName);
+
+                // read message from queue and insert into db table
+                try
+                {
+                    using (IMessageConsumer consumer = session.CreateConsumer(queue))
+                    {
+                        using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+                        using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+                        using (SqlCommand sqlInsertCommand = new SqlCommand())
+                        {
+                            sqlConnection.Open();
+                            sqlInsertCommand.Connection = sqlConnection;
+                            Assert.IsNotNull(Transaction.Current);
+
+                            for (int i = 0; i < MSG_COUNT; i++)
+                            {
+                                ITextMessage message = consumer.Receive() as ITextMessage;
+                                Assert.IsNotNull(message, "missing message");
+
+                                sqlInsertCommand.CommandText =
+                                    string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));
+                                sqlInsertCommand.ExecuteNonQuery();
+                            }
+                        }
+                    }
+                }
+                catch (Exception e)
+                {
+                    Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
+                    Tracer.Debug(e.ToString());
+                }
+            }
+        }
+
+        #endregion
+    }
+}
diff --git a/src/test/csharp/ExclusiveConsumerTest.cs b/test/ExclusiveConsumerTest.cs
similarity index 100%
rename from src/test/csharp/ExclusiveConsumerTest.cs
rename to test/ExclusiveConsumerTest.cs
diff --git a/test/Extensions/ExpectedExceptionAttribute.cs b/test/Extensions/ExpectedExceptionAttribute.cs
new file mode 100644
index 0000000..5959b17
--- /dev/null
+++ b/test/Extensions/ExpectedExceptionAttribute.cs
@@ -0,0 +1,66 @@
+using System;
+using NUnit.Framework;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.Internal;
+using NUnit.Framework.Internal.Commands;
+
+namespace NUnit.Framework
+{
+    /// <summary>
+    /// A simple ExpectedExceptionAttribute
+    /// https://github.com/nunit/nunit-csharp-samples/blob/master/ExpectedExceptionExample/ExpectedExceptionAttribute.cs
+    /// </summary>
+    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
+    public class ExpectedExceptionAttribute : NUnitAttribute, IWrapTestMethod
+    {
+        private readonly Type _expectedExceptionType;
+
+        public ExpectedExceptionAttribute(Type type)
+        {
+            _expectedExceptionType = type;
+        }
+
+        public TestCommand Wrap(TestCommand command)
+        {
+            return new ExpectedExceptionCommand(command, _expectedExceptionType);
+        }
+
+        private class ExpectedExceptionCommand : DelegatingTestCommand
+        {
+            private readonly Type _expectedType;
+
+            public ExpectedExceptionCommand(TestCommand innerCommand, Type expectedType)
+                : base(innerCommand)
+            {
+                _expectedType = expectedType;
+            }
+
+            public override TestResult Execute(TestExecutionContext context)
+            {
+                Type caughtType = null;
+
+                try
+                {
+                    innerCommand.Execute(context);
+                }
+                catch (Exception ex)
+                {
+                    if (ex is NUnitException)
+                        ex = ex.InnerException;
+                    caughtType = ex.GetType();
+                }
+
+                if (caughtType == _expectedType)
+                    context.CurrentResult.SetResult(ResultState.Success);
+                else if (caughtType != null)
+                    context.CurrentResult.SetResult(ResultState.Failure,
+                        string.Format("Expected {0} but got {1}", _expectedType.Name, caughtType.Name));
+                else
+                    context.CurrentResult.SetResult(ResultState.Failure,
+                        string.Format("Expected {0} but no exception was thrown", _expectedType.Name));
+
+                return context.CurrentResult;
+            }
+        }
+    }
+}
diff --git a/src/test/csharp/IndividualAckTest.cs b/test/IndividualAckTest.cs
similarity index 100%
rename from src/test/csharp/IndividualAckTest.cs
rename to test/IndividualAckTest.cs
diff --git a/src/test/csharp/InvalidCredentialsTest.cs b/test/InvalidCredentialsTest.cs
similarity index 100%
rename from src/test/csharp/InvalidCredentialsTest.cs
rename to test/InvalidCredentialsTest.cs
diff --git a/src/test/csharp/MessageConsumerTest.cs b/test/MessageConsumerTest.cs
similarity index 100%
rename from src/test/csharp/MessageConsumerTest.cs
rename to test/MessageConsumerTest.cs
diff --git a/src/test/csharp/MessageListenerRedeliveryTest.cs b/test/MessageListenerRedeliveryTest.cs
similarity index 100%
rename from src/test/csharp/MessageListenerRedeliveryTest.cs
rename to test/MessageListenerRedeliveryTest.cs
diff --git a/src/test/csharp/MessageProducerTest.cs b/test/MessageProducerTest.cs
similarity index 100%
rename from src/test/csharp/MessageProducerTest.cs
rename to test/MessageProducerTest.cs
diff --git a/src/test/csharp/NMSConnectionFactoryTest.cs b/test/NMSConnectionFactoryTest.cs
similarity index 79%
rename from src/test/csharp/NMSConnectionFactoryTest.cs
rename to test/NMSConnectionFactoryTest.cs
index a8b32e2..cd99ee4 100644
--- a/src/test/csharp/NMSConnectionFactoryTest.cs
+++ b/test/NMSConnectionFactoryTest.cs
@@ -22,6 +22,7 @@
 using Apache.NMS.ActiveMQ.Transport.Mock;
 using Apache.NMS.Test;
 using NUnit.Framework;
+using NUnit.Framework.Constraints;
 
 namespace Apache.NMS.ActiveMQ.Test
 {
@@ -55,28 +56,6 @@
 		[TestCase("activemq:failover:discovery:(multicast://default)")]
 		[TestCase("activemq:failover:(discovery:(multicast://default))")]
 #endif
-
-		[TestCase("activemq:tcp://${activemqhost}:61616/InvalidHost:0", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("activemq:tcp://${activemqhost}:61616/0.0.0.0:-1", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("tcp://InvalidHost:61616", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("activemq:tcp://InvalidHost:61616", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("activemq:tcp://InvalidHost:61616?connection.asyncclose=false", ExpectedException = typeof(NMSConnectionException))]
-
-		[TestCase("tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("activemq:tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("activemq:failover:tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("activemq:failover:(tcp://${activemqhost}:61616)?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("activemq:failover:(tcp://${activemqhost}:61616,tcp://${activemqbackuphost}:61616)?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
-
-		[TestCase("ftp://${activemqhost}:61616", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("http://${activemqhost}:61616", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("discovery://${activemqhost}:6155", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("sms://${activemqhost}:61616", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("activemq:multicast://${activemqhost}:6155", ExpectedException = typeof(NMSConnectionException))]
-		[TestCase("activemq:(tcp://${activemqhost}:61616)?connection.asyncClose=false", ExpectedException = typeof(NMSConnectionException))]
-
-		[TestCase("(tcp://${activemqhost}:61616,tcp://${activemqhost}:61616)", ExpectedException = typeof(UriFormatException))]
-		[TestCase("tcp://${activemqhost}:61616,tcp://${activemqhost}:61616", ExpectedException = typeof(UriFormatException))]
 		public void TestURI(string connectionURI)
 		{
 			NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(connectionURI));
@@ -89,6 +68,56 @@
 			}
 		}
 
+        [TestCase("activemq:tcp://${activemqhost}:61616/InvalidHost:0")]
+		[TestCase("activemq:tcp://${activemqhost}:61616/0.0.0.0:-1")]
+		[TestCase("tcp://InvalidHost:61616")]
+		[TestCase("activemq:tcp://InvalidHost:61616")]
+		[TestCase("activemq:tcp://InvalidHost:61616?connection.asyncclose=false")]
+
+		[TestCase("tcp://${activemqhost}:61616?connection.InvalidParameter=true")]
+		[TestCase("activemq:tcp://${activemqhost}:61616?connection.InvalidParameter=true")]
+		[TestCase("activemq:failover:tcp://${activemqhost}:61616?connection.InvalidParameter=true")]
+		[TestCase("activemq:failover:(tcp://${activemqhost}:61616)?connection.InvalidParameter=true")]
+		[TestCase("activemq:failover:(tcp://${activemqhost}:61616,tcp://${activemqbackuphost}:61616)?connection.InvalidParameter=true")]
+
+		[TestCase("ftp://${activemqhost}:61616")]
+		[TestCase("http://${activemqhost}:61616")]
+		[TestCase("discovery://${activemqhost}:6155")]
+		[TestCase("sms://${activemqhost}:61616")]
+		[TestCase("activemq:multicast://${activemqhost}:6155")]
+		[TestCase("activemq:(tcp://${activemqhost}:61616)?connection.asyncClose=false")]
+        public void TestURIFailures_NMSConnectionException(string connectionURI)
+        {
+            Assert.Throws<NMSConnectionException>(() =>
+            {
+                NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(connectionURI));
+                Assert.IsNotNull(factory);
+                Assert.IsNotNull(factory.ConnectionFactory);
+                using(IConnection connection = factory.CreateConnection("", ""))
+                {
+                    Assert.IsNotNull(connection);
+                    connection.Close();
+                }
+            });
+        }
+
+        [TestCase("(tcp://${activemqhost}:61616,tcp://${activemqhost}:61616)")]
+        [TestCase("tcp://${activemqhost}:61616,tcp://${activemqhost}:61616")]
+        public void TestURIFailures_UriFormatException(string connectionURI)
+        {
+            Assert.Throws<UriFormatException>(() =>
+            {
+                NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(connectionURI));
+                Assert.IsNotNull(factory);
+                Assert.IsNotNull(factory.ConnectionFactory);
+                using(IConnection connection = factory.CreateConnection("", ""))
+                {
+                    Assert.IsNotNull(connection);
+                    connection.Close();
+                }
+            });
+        }
+
         [Test]
         public void TestConnectionSendsAuthenticationData()
         {
diff --git a/test/NMSKey.snk b/test/NMSKey.snk
new file mode 100644
index 0000000..fdd5b24
--- /dev/null
+++ b/test/NMSKey.snk
Binary files differ
diff --git a/src/test/csharp/NMSSessionRecoverTest.cs b/test/NMSSessionRecoverTest.cs
similarity index 100%
rename from src/test/csharp/NMSSessionRecoverTest.cs
rename to test/NMSSessionRecoverTest.cs
diff --git a/src/test/csharp/NetTxConnectionFactoryTest.cs b/test/NetTxConnectionFactoryTest.cs
similarity index 99%
rename from src/test/csharp/NetTxConnectionFactoryTest.cs
rename to test/NetTxConnectionFactoryTest.cs
index f7796ef..55b8a7d 100644
--- a/src/test/csharp/NetTxConnectionFactoryTest.cs
+++ b/test/NetTxConnectionFactoryTest.cs
@@ -281,7 +281,7 @@
         }
 		
         [Test]
-        [ExpectedException( "Apache.NMS.NMSException" )]
+        [ExpectedException( typeof(Apache.NMS.NMSException))]
         public void TestConfigureRecoveryPolicyLoggerTypeWithInvalidType(
             [Values("tcp://${activemqhost}:61616?nms.RecoveryPolicy.RecoveryLoggerType=invalid")]
             string baseConnectionURI)
diff --git a/src/test/csharp/NetTxTransactionTest.cs b/test/NetTxTransactionTest.cs
similarity index 100%
rename from src/test/csharp/NetTxTransactionTest.cs
rename to test/NetTxTransactionTest.cs
diff --git a/src/test/csharp/NmsConsoleTracer.cs b/test/NmsConsoleTracer.cs
similarity index 99%
rename from src/test/csharp/NmsConsoleTracer.cs
rename to test/NmsConsoleTracer.cs
index 37f7ad7..906823a 100644
--- a/src/test/csharp/NmsConsoleTracer.cs
+++ b/test/NmsConsoleTracer.cs
@@ -1,75 +1,75 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-namespace Apache.NMS.ActiveMQ.Test

-{

-	public class NmsConsoleTracer : Apache.NMS.ITrace

-	{

-		#region ITrace Members

-		public void Debug(string message)

-		{

-			System.Console.WriteLine(string.Format("DEBUG: {0}", message));

-		}

-

-		public void Error(string message)

-		{

-			System.Console.WriteLine(string.Format("ERROR: {0}", message));

-		}

-

-		public void Fatal(string message)

-		{

-			System.Console.WriteLine(string.Format("FATAL: {0}", message));

-		}

-

-		public void Info(string message)

-		{

-			System.Console.WriteLine(string.Format("INFO: {0}", message));

-		}

-

-		public void Warn(string message)

-		{

-			System.Console.WriteLine(string.Format("WARN: {0}", message));

-		}

-

-		public bool IsDebugEnabled

-		{

-			get { return true; }

-		}

-

-		public bool IsErrorEnabled

-		{

-			get { return true; }

-		}

-

-		public bool IsFatalEnabled

-		{

-			get { return true; }

-		}

-

-		public bool IsInfoEnabled

-		{

-			get { return true; }

-		}

-

-		public bool IsWarnEnabled

-		{

-			get { return true; }

-		}

-

-		#endregion

-	}

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+	public class NmsConsoleTracer : Apache.NMS.ITrace
+	{
+		#region ITrace Members
+		public void Debug(string message)
+		{
+			System.Console.WriteLine(string.Format("DEBUG: {0}", message));
+		}
+
+		public void Error(string message)
+		{
+			System.Console.WriteLine(string.Format("ERROR: {0}", message));
+		}
+
+		public void Fatal(string message)
+		{
+			System.Console.WriteLine(string.Format("FATAL: {0}", message));
+		}
+
+		public void Info(string message)
+		{
+			System.Console.WriteLine(string.Format("INFO: {0}", message));
+		}
+
+		public void Warn(string message)
+		{
+			System.Console.WriteLine(string.Format("WARN: {0}", message));
+		}
+
+		public bool IsDebugEnabled
+		{
+			get { return true; }
+		}
+
+		public bool IsErrorEnabled
+		{
+			get { return true; }
+		}
+
+		public bool IsFatalEnabled
+		{
+			get { return true; }
+		}
+
+		public bool IsInfoEnabled
+		{
+			get { return true; }
+		}
+
+		public bool IsWarnEnabled
+		{
+			get { return true; }
+		}
+
+		#endregion
+	}
+}
diff --git a/src/test/csharp/NonBlockingConsumerRedeliveryTest.cs b/test/NonBlockingConsumerRedeliveryTest.cs
similarity index 100%
rename from src/test/csharp/NonBlockingConsumerRedeliveryTest.cs
rename to test/NonBlockingConsumerRedeliveryTest.cs
diff --git a/src/test/csharp/OpenWire/BaseDataStreamMarshallerTest.cs b/test/OpenWire/BaseDataStreamMarshallerTest.cs
similarity index 100%
rename from src/test/csharp/OpenWire/BaseDataStreamMarshallerTest.cs
rename to test/OpenWire/BaseDataStreamMarshallerTest.cs
diff --git a/src/test/csharp/OpenWire/BooleanStreamTest.cs b/test/OpenWire/BooleanStreamTest.cs
similarity index 100%
rename from src/test/csharp/OpenWire/BooleanStreamTest.cs
rename to test/OpenWire/BooleanStreamTest.cs
diff --git a/src/test/csharp/OpenWire/MaxInactivityDurationTest.cs b/test/OpenWire/MaxInactivityDurationTest.cs
similarity index 99%
rename from src/test/csharp/OpenWire/MaxInactivityDurationTest.cs
rename to test/OpenWire/MaxInactivityDurationTest.cs
index b3c8c67..1c18238 100644
--- a/src/test/csharp/OpenWire/MaxInactivityDurationTest.cs
+++ b/test/OpenWire/MaxInactivityDurationTest.cs
@@ -1,120 +1,120 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.Diagnostics;

-using System.Threading;

-using Apache.NMS.Test;

-using Apache.NMS.Util;

-using NUnit.Framework;

-

-namespace Apache.NMS.ActiveMQ.Test

-{

-	[TestFixture]

-	public class MaxInactivityDurationTest : NMSTestSupport

-	{

-		protected static string DESTINATION_NAME = "TEST.MaxInactivityDuration";

-		protected static string CORRELATION_ID = "MaxInactivityCorrelationID";

-

-		[Test]

-		public void TestMaxInactivityDuration()

-		{

-			string testuri = "activemq:tcp://${activemqhost}:61616" +

-										"?wireFormat.maxInactivityDurationInitialDelay=5000" +

-										"&wireFormat.maxInactivityDuration=10000" +

-										"&connection.asyncClose=false";

-

-			NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(testuri));

-			using(IConnection connection = factory.CreateConnection("", ""))

-			{

-				connection.Start();

-				using(ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge))

-				{

-					IDestination destination = SessionUtil.GetDestination(session, DESTINATION_NAME);

-					using(IMessageConsumer consumer = session.CreateConsumer(destination))

-					using(IMessageProducer producer = session.CreateProducer(destination))

-					{

-						SendMessage(producer);

-

-						IMessage receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));

-						Assert.AreEqual(CORRELATION_ID, receivedMsg.NMSCorrelationID, "Invalid correlation ID.");

-

-						// Go inactive...

-						Thread.Sleep(TimeSpan.FromSeconds(30));

-

-						// Send another message.

-						SendMessage(producer);

-						receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));

-						Assert.AreEqual(CORRELATION_ID, receivedMsg.NMSCorrelationID, "Invalid correlation ID.");

-					}

-				}

-			}

-		}

-

-		protected void SendMessage(IMessageProducer producer)

-		{

-			IMessage request = producer.CreateMessage();

-			request.NMSCorrelationID = CORRELATION_ID;

-			request.NMSType = "Test";

-			producer.Send(request);

-		}

-

-		[Test, Sequential]

-		public void TestInactivityMonitorThreadLeak(

-			[Values(0, 1000)]

-			int inactivityDuration)

-		{

-			Process currentProcess = Process.GetCurrentProcess();

-			Tracer.InfoFormat("Beginning thread count: {0}, handle count: {1}", currentProcess.Threads.Count, currentProcess.HandleCount);

-

-			string testuri = string.Format("activemq:tcp://${{activemqhost}}:61616?wireFormat.maxInactivityDuration={0}", inactivityDuration);

-	

-			NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(testuri));

-

-			// We measure the initial resource counts, and then allow a certain fudge factor for the resources

-			// to fluctuate at run-time.  We allow for a certain amount of fluctuation, but if the counts

-			// grow outside the safe boundaries of delayed garbage collection, then we fail the test.

-			currentProcess = Process.GetCurrentProcess();

-			int beginThreadCount = currentProcess.Threads.Count;

-			int beginHandleCount = currentProcess.HandleCount;

-			int maxThreadGrowth = 10;

-			int maxHandleGrowth = 500;

-

-			for(int i = 0; i < 200; i++)

-			{

-				using(IConnection connection = factory.CreateConnection("ResourceLeakTest", "Password"))

-				{

-					using(ISession session = connection.CreateSession())

-					{

-						IDestination destination = SessionUtil.GetDestination(session, "topic://TEST.NMSResourceLeak");

-						using(IMessageConsumer consumer = session.CreateConsumer(destination))

-						{

-							connection.Start();

-						}

-					}

-				}

-

-				currentProcess = Process.GetCurrentProcess();

-				int endThreadCount = currentProcess.Threads.Count;

-				int endHandleCount = currentProcess.HandleCount;

-

-				Assert.Less(endThreadCount, beginThreadCount + maxThreadGrowth, string.Format("Thread count grew beyond maximum of {0} on iteration #{1}.", maxThreadGrowth, i));

-				Assert.Less(endHandleCount, beginHandleCount + maxHandleGrowth, string.Format("Handle count grew beyond maximum of {0} on iteration #{1}.", maxHandleGrowth, i));

-			}

-		}

-	}

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Diagnostics;
+using System.Threading;
+using Apache.NMS.Test;
+using Apache.NMS.Util;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+	[TestFixture]
+	public class MaxInactivityDurationTest : NMSTestSupport
+	{
+		protected static string DESTINATION_NAME = "TEST.MaxInactivityDuration";
+		protected static string CORRELATION_ID = "MaxInactivityCorrelationID";
+
+		[Test]
+		public void TestMaxInactivityDuration()
+		{
+			string testuri = "activemq:tcp://${activemqhost}:61616" +
+										"?wireFormat.maxInactivityDurationInitialDelay=5000" +
+										"&wireFormat.maxInactivityDuration=10000" +
+										"&connection.asyncClose=false";
+
+			NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(testuri));
+			using(IConnection connection = factory.CreateConnection("", ""))
+			{
+				connection.Start();
+				using(ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
+				{
+					IDestination destination = SessionUtil.GetDestination(session, DESTINATION_NAME);
+					using(IMessageConsumer consumer = session.CreateConsumer(destination))
+					using(IMessageProducer producer = session.CreateProducer(destination))
+					{
+						SendMessage(producer);
+
+						IMessage receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+						Assert.AreEqual(CORRELATION_ID, receivedMsg.NMSCorrelationID, "Invalid correlation ID.");
+
+						// Go inactive...
+						Thread.Sleep(TimeSpan.FromSeconds(30));
+
+						// Send another message.
+						SendMessage(producer);
+						receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+						Assert.AreEqual(CORRELATION_ID, receivedMsg.NMSCorrelationID, "Invalid correlation ID.");
+					}
+				}
+			}
+		}
+
+		protected void SendMessage(IMessageProducer producer)
+		{
+			IMessage request = producer.CreateMessage();
+			request.NMSCorrelationID = CORRELATION_ID;
+			request.NMSType = "Test";
+			producer.Send(request);
+		}
+
+		[Test, Sequential]
+		public void TestInactivityMonitorThreadLeak(
+			[Values(0, 1000)]
+			int inactivityDuration)
+		{
+			Process currentProcess = Process.GetCurrentProcess();
+			Tracer.InfoFormat("Beginning thread count: {0}, handle count: {1}", currentProcess.Threads.Count, currentProcess.HandleCount);
+
+			string testuri = string.Format("activemq:tcp://${{activemqhost}}:61616?wireFormat.maxInactivityDuration={0}", inactivityDuration);
+	
+			NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(testuri));
+
+			// We measure the initial resource counts, and then allow a certain fudge factor for the resources
+			// to fluctuate at run-time.  We allow for a certain amount of fluctuation, but if the counts
+			// grow outside the safe boundaries of delayed garbage collection, then we fail the test.
+			currentProcess = Process.GetCurrentProcess();
+			int beginThreadCount = currentProcess.Threads.Count;
+			int beginHandleCount = currentProcess.HandleCount;
+			int maxThreadGrowth = 10;
+			int maxHandleGrowth = 500;
+
+			for(int i = 0; i < 200; i++)
+			{
+				using(IConnection connection = factory.CreateConnection("ResourceLeakTest", "Password"))
+				{
+					using(ISession session = connection.CreateSession())
+					{
+						IDestination destination = SessionUtil.GetDestination(session, "topic://TEST.NMSResourceLeak");
+						using(IMessageConsumer consumer = session.CreateConsumer(destination))
+						{
+							connection.Start();
+						}
+					}
+				}
+
+				currentProcess = Process.GetCurrentProcess();
+				int endThreadCount = currentProcess.Threads.Count;
+				int endHandleCount = currentProcess.HandleCount;
+
+				Assert.Less(endThreadCount, beginThreadCount + maxThreadGrowth, string.Format("Thread count grew beyond maximum of {0} on iteration #{1}.", maxThreadGrowth, i));
+				Assert.Less(endHandleCount, beginHandleCount + maxHandleGrowth, string.Format("Handle count grew beyond maximum of {0} on iteration #{1}.", maxHandleGrowth, i));
+			}
+		}
+	}
+}
diff --git a/src/test/csharp/OpenWire/PrefetchSizeZeroTest.cs b/test/OpenWire/PrefetchSizeZeroTest.cs
similarity index 99%
rename from src/test/csharp/OpenWire/PrefetchSizeZeroTest.cs
rename to test/OpenWire/PrefetchSizeZeroTest.cs
index 7c6c032..dcd7b62 100644
--- a/src/test/csharp/OpenWire/PrefetchSizeZeroTest.cs
+++ b/test/OpenWire/PrefetchSizeZeroTest.cs
@@ -1,72 +1,72 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using Apache.NMS.Test;

-using Apache.NMS.Util;

-using Apache.NMS.ActiveMQ;

-using NUnit.Framework;

-

-namespace Apache.NMS.ActiveMQ.Test

-{

-	[TestFixture]

-	public class PrefetchSizeZeroTest : NMSTestSupport

-	{	

-        protected static string DESTINATION_NAME = "TEST.PrefetchSizeZero";

-			

-		[Test]

-		public void TestZeroPrefetchSize()

-		{

-			using(IConnection connection = CreateConnection())

-			{

-				(connection as Apache.NMS.ActiveMQ.Connection).PrefetchPolicy.All = 0;

-

-				connection.Start();

-				using(Session session = (Session)connection.CreateSession(AcknowledgementMode.AutoAcknowledge))

-				{

-					IDestination destination = SessionUtil.GetDestination(session, DESTINATION_NAME);

-					using(IMessageConsumer consumer = session.CreateConsumer(destination))

-					using(IMessageProducer producer = session.CreateProducer(destination))

-					{

-						SendMessage(producer);

-                        SendMessage(producer);

-

-						IMessage receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));

-                        Assert.IsNotNull(receivedMsg);

-                        receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));

-                        Assert.IsNotNull(receivedMsg);

-						receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));

-                        Assert.IsNull(receivedMsg);

-

-						// Send another message.

-						SendMessage(producer);

-                        receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));

-						Assert.IsNotNull(receivedMsg);

-                   

-					}

-				}

-			}

-		}

-	

-		protected void SendMessage(IMessageProducer producer)

-		{

-			IMessage request = producer.CreateMessage();

-			request.NMSType = "Test";

-			producer.Send(request);

-		}

-	}

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using Apache.NMS.Test;
+using Apache.NMS.Util;
+using Apache.NMS.ActiveMQ;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+	[TestFixture]
+	public class PrefetchSizeZeroTest : NMSTestSupport
+	{	
+        protected static string DESTINATION_NAME = "TEST.PrefetchSizeZero";
+			
+		[Test]
+		public void TestZeroPrefetchSize()
+		{
+			using(IConnection connection = CreateConnection())
+			{
+				(connection as Apache.NMS.ActiveMQ.Connection).PrefetchPolicy.All = 0;
+
+				connection.Start();
+				using(Session session = (Session)connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
+				{
+					IDestination destination = SessionUtil.GetDestination(session, DESTINATION_NAME);
+					using(IMessageConsumer consumer = session.CreateConsumer(destination))
+					using(IMessageProducer producer = session.CreateProducer(destination))
+					{
+						SendMessage(producer);
+                        SendMessage(producer);
+
+						IMessage receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+                        Assert.IsNotNull(receivedMsg);
+                        receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+                        Assert.IsNotNull(receivedMsg);
+						receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+                        Assert.IsNull(receivedMsg);
+
+						// Send another message.
+						SendMessage(producer);
+                        receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+						Assert.IsNotNull(receivedMsg);
+                   
+					}
+				}
+			}
+		}
+	
+		protected void SendMessage(IMessageProducer producer)
+		{
+			IMessage request = producer.CreateMessage();
+			request.NMSType = "Test";
+			producer.Send(request);
+		}
+	}
+}
diff --git a/src/test/csharp/OptimizedAckTest.cs b/test/OptimizedAckTest.cs
similarity index 100%
rename from src/test/csharp/OptimizedAckTest.cs
rename to test/OptimizedAckTest.cs
diff --git a/src/test/csharp/QueueBrowserTests.cs b/test/QueueBrowserTests.cs
similarity index 99%
rename from src/test/csharp/QueueBrowserTests.cs
rename to test/QueueBrowserTests.cs
index c737090..85c96db 100644
--- a/src/test/csharp/QueueBrowserTests.cs
+++ b/test/QueueBrowserTests.cs
@@ -194,7 +194,7 @@
 		}
 		
         [Test]
-        [ExpectedException("Apache.NMS.NMSException")]
+        [ExpectedException(typeof(NMSException))]
         public void TestCreateBrowserFailsWithZeroPrefetch()
         {
             using (Connection connection = CreateConnection() as Connection)
diff --git a/src/test/csharp/QueueConsumerPriorityTest.cs b/test/QueueConsumerPriorityTest.cs
similarity index 100%
rename from src/test/csharp/QueueConsumerPriorityTest.cs
rename to test/QueueConsumerPriorityTest.cs
diff --git a/src/test/csharp/RollbackRedeliveryTest.cs b/test/RollbackRedeliveryTest.cs
similarity index 100%
rename from src/test/csharp/RollbackRedeliveryTest.cs
rename to test/RollbackRedeliveryTest.cs
diff --git a/src/test/csharp/State/ConnectionStateTest.cs b/test/State/ConnectionStateTest.cs
similarity index 100%
rename from src/test/csharp/State/ConnectionStateTest.cs
rename to test/State/ConnectionStateTest.cs
diff --git a/src/test/csharp/State/ConnectionStateTrackerTest.cs b/test/State/ConnectionStateTrackerTest.cs
similarity index 100%
rename from src/test/csharp/State/ConnectionStateTrackerTest.cs
rename to test/State/ConnectionStateTrackerTest.cs
diff --git a/src/test/csharp/State/ConsumerStateTest.cs b/test/State/ConsumerStateTest.cs
similarity index 100%
rename from src/test/csharp/State/ConsumerStateTest.cs
rename to test/State/ConsumerStateTest.cs
diff --git a/src/test/csharp/State/ProducerStateTest.cs b/test/State/ProducerStateTest.cs
similarity index 100%
rename from src/test/csharp/State/ProducerStateTest.cs
rename to test/State/ProducerStateTest.cs
diff --git a/src/test/csharp/State/SessionStateTest.cs b/test/State/SessionStateTest.cs
similarity index 100%
rename from src/test/csharp/State/SessionStateTest.cs
rename to test/State/SessionStateTest.cs
diff --git a/src/test/csharp/State/TransactionStateTest.cs b/test/State/TransactionStateTest.cs
similarity index 100%
rename from src/test/csharp/State/TransactionStateTest.cs
rename to test/State/TransactionStateTest.cs
diff --git a/src/test/csharp/TempDestinationTest.cs b/test/TempDestinationTest.cs
similarity index 100%
rename from src/test/csharp/TempDestinationTest.cs
rename to test/TempDestinationTest.cs
diff --git a/test/TestDbConfig.xml b/test/TestDbConfig.xml
new file mode 100644
index 0000000..56e15fe
--- /dev/null
+++ b/test/TestDbConfig.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<root>
+  <createDbConnectionString name="Data Source=WKRKL-F1400EW;User ID=test.user;Password=Password*01"/>
+  <createTableConnectionString name="Data Source=WKRKL-F1400EW;Initial Catalog=TestDB;User ID=test.user;Password=Password*01"/>
+  <testSqlTable name="TestTable"/>
+  <testSqlColumn name="TestID"/>
+  <testSqlQueueName name="TestQueue"/>
+  <testDbName name="TestDB"/>
+  <dbFileNameLocation name="C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\"/>
+  <connectionURI name="tcpfaulty://${activemqhost}:61616"/>
+</root>
\ No newline at end of file
diff --git a/src/test/csharp/TestMain.cs b/test/TestMain.cs
similarity index 100%
rename from src/test/csharp/TestMain.cs
rename to test/TestMain.cs
diff --git a/src/test/csharp/TestMainAsync.cs b/test/TestMainAsync.cs
similarity index 99%
rename from src/test/csharp/TestMainAsync.cs
rename to test/TestMainAsync.cs
index 20018a5..479bde6 100644
--- a/src/test/csharp/TestMainAsync.cs
+++ b/test/TestMainAsync.cs
@@ -1,122 +1,122 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-// NOTE: Keep leading spaces.  Do not convert to tabs.  This file

-// is auto-linked on the NMS website as example code.

-

-#if false	// This file should not be compiled into the product.  Demo only.

-// START SNIPPET: demo

-using System;

-using System.Threading;

-using Apache.NMS;

-using Apache.NMS.Util;

-

-namespace Apache.NMS.ActiveMQ.Test

-{

-public class TestMain

-{

-    protected static AutoResetEvent semaphore = new AutoResetEvent(false);

-    protected static ITextMessage message = null;

-    protected static TimeSpan receiveTimeout = TimeSpan.FromSeconds(10);

-    

-    public static void Main(string[] args)

-    {

-        // Example connection strings:

-        //    activemq:tcp://activemqhost:61616

-        //    stomp:tcp://activemqhost:61613

-        //    ems:tcp://tibcohost:7222

-        //    msmq://localhost

-

-        Uri connecturi = new Uri("activemq:tcp://activemqhost:61616");

-        

-        Console.WriteLine("About to connect to " + connecturi);

-

-        // NOTE: ensure the nmsprovider-activemq.config file exists in the executable folder.

-        IConnectionFactory factory = new NMSConnectionFactory(connecturi);

-

-        using(IConnection connection = factory.CreateConnection())

-        using(ISession session = connection.CreateSession())

-        {

-             // Examples for getting a destination:

-             //

-             // Hard coded destinations:

-             //    IDestination destination = session.GetQueue("FOO.BAR");

-             //    Debug.Assert(destination is IQueue);

-             //    IDestination destination = session.GetTopic("FOO.BAR");

-             //    Debug.Assert(destination is ITopic);

-             //

-             // Embedded destination type in the name:

-             //    IDestination destination = SessionUtil.GetDestination(session, "queue://FOO.BAR");

-             //    Debug.Assert(destination is IQueue);

-             //    IDestination destination = SessionUtil.GetDestination(session, "topic://FOO.BAR");

-             //    Debug.Assert(destination is ITopic);

-             //

-             // Defaults to queue if type is not specified:

-             //    IDestination destination = SessionUtil.GetDestination(session, "FOO.BAR");

-             //    Debug.Assert(destination is IQueue);

-             //

-             // .NET 3.5 Supports Extension methods for a simplified syntax:

-             //    IDestination destination = session.GetDestination("queue://FOO.BAR");

-             //    Debug.Assert(destination is IQueue);

-             //    IDestination destination = session.GetDestination("topic://FOO.BAR");

-             //    Debug.Assert(destination is ITopic);

-

-            IDestination destination = SessionUtil.GetDestination(session, "queue://FOO.BAR");

-            Console.WriteLine("Using destination: " + destination);

-

-            // Create a consumer and producer

-            using(IMessageConsumer consumer = session.CreateConsumer(destination))

-            using(IMessageProducer producer = session.CreateProducer(destination))

-            {

-                // Start the connection so that messages will be processed.

-                connection.Start();

-				producer.DeliveryMode = MsgDeliveryMode.Persistent;

-                producer.RequestTimeout = receiveTimeout;

-                consumer.Listener += new MessageListener(OnMessage);

-

-                // Send a message

-                ITextMessage request = session.CreateTextMessage("Hello World!");

-                request.NMSCorrelationID = "abc";

-                request.Properties["NMSXGroupID"] = "cheese";

-                request.Properties["myHeader"] = "Cheddar";

-

-                producer.Send(request);

-

-                // Wait for the message

-                semaphore.WaitOne((int) receiveTimeout.TotalMilliseconds, true);

-                if(message == null)

-                {

-                    Console.WriteLine("No message received!");

-                }

-                else

-                {

-                    Console.WriteLine("Received message with ID:   " + message.NMSMessageId);

-                    Console.WriteLine("Received message with text: " + message.Text);

-                }

-            }

-        }

-    }

-

-    protected static void OnMessage(IMessage receivedMsg)

-    {

-        message = receivedMsg as ITextMessage;

-        semaphore.Set();

-    }

-}

-}

-// END SNIPPET: demo

-#endif

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// NOTE: Keep leading spaces.  Do not convert to tabs.  This file
+// is auto-linked on the NMS website as example code.
+
+#if false	// This file should not be compiled into the product.  Demo only.
+// START SNIPPET: demo
+using System;
+using System.Threading;
+using Apache.NMS;
+using Apache.NMS.Util;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+public class TestMain
+{
+    protected static AutoResetEvent semaphore = new AutoResetEvent(false);
+    protected static ITextMessage message = null;
+    protected static TimeSpan receiveTimeout = TimeSpan.FromSeconds(10);
+    
+    public static void Main(string[] args)
+    {
+        // Example connection strings:
+        //    activemq:tcp://activemqhost:61616
+        //    stomp:tcp://activemqhost:61613
+        //    ems:tcp://tibcohost:7222
+        //    msmq://localhost
+
+        Uri connecturi = new Uri("activemq:tcp://activemqhost:61616");
+        
+        Console.WriteLine("About to connect to " + connecturi);
+
+        // NOTE: ensure the nmsprovider-activemq.config file exists in the executable folder.
+        IConnectionFactory factory = new NMSConnectionFactory(connecturi);
+
+        using(IConnection connection = factory.CreateConnection())
+        using(ISession session = connection.CreateSession())
+        {
+             // Examples for getting a destination:
+             //
+             // Hard coded destinations:
+             //    IDestination destination = session.GetQueue("FOO.BAR");
+             //    Debug.Assert(destination is IQueue);
+             //    IDestination destination = session.GetTopic("FOO.BAR");
+             //    Debug.Assert(destination is ITopic);
+             //
+             // Embedded destination type in the name:
+             //    IDestination destination = SessionUtil.GetDestination(session, "queue://FOO.BAR");
+             //    Debug.Assert(destination is IQueue);
+             //    IDestination destination = SessionUtil.GetDestination(session, "topic://FOO.BAR");
+             //    Debug.Assert(destination is ITopic);
+             //
+             // Defaults to queue if type is not specified:
+             //    IDestination destination = SessionUtil.GetDestination(session, "FOO.BAR");
+             //    Debug.Assert(destination is IQueue);
+             //
+             // .NET 3.5 Supports Extension methods for a simplified syntax:
+             //    IDestination destination = session.GetDestination("queue://FOO.BAR");
+             //    Debug.Assert(destination is IQueue);
+             //    IDestination destination = session.GetDestination("topic://FOO.BAR");
+             //    Debug.Assert(destination is ITopic);
+
+            IDestination destination = SessionUtil.GetDestination(session, "queue://FOO.BAR");
+            Console.WriteLine("Using destination: " + destination);
+
+            // Create a consumer and producer
+            using(IMessageConsumer consumer = session.CreateConsumer(destination))
+            using(IMessageProducer producer = session.CreateProducer(destination))
+            {
+                // Start the connection so that messages will be processed.
+                connection.Start();
+				producer.DeliveryMode = MsgDeliveryMode.Persistent;
+                producer.RequestTimeout = receiveTimeout;
+                consumer.Listener += new MessageListener(OnMessage);
+
+                // Send a message
+                ITextMessage request = session.CreateTextMessage("Hello World!");
+                request.NMSCorrelationID = "abc";
+                request.Properties["NMSXGroupID"] = "cheese";
+                request.Properties["myHeader"] = "Cheddar";
+
+                producer.Send(request);
+
+                // Wait for the message
+                semaphore.WaitOne((int) receiveTimeout.TotalMilliseconds, true);
+                if(message == null)
+                {
+                    Console.WriteLine("No message received!");
+                }
+                else
+                {
+                    Console.WriteLine("Received message with ID:   " + message.NMSMessageId);
+                    Console.WriteLine("Received message with text: " + message.Text);
+                }
+            }
+        }
+    }
+
+    protected static void OnMessage(IMessage receivedMsg)
+    {
+        message = receivedMsg as ITextMessage;
+        semaphore.Set();
+    }
+}
+}
+// END SNIPPET: demo
+#endif
diff --git a/src/test/csharp/Threads/CompositeTaskRunnerTest.cs b/test/Threads/CompositeTaskRunnerTest.cs
similarity index 100%
rename from src/test/csharp/Threads/CompositeTaskRunnerTest.cs
rename to test/Threads/CompositeTaskRunnerTest.cs
diff --git a/src/test/csharp/Threads/DedicatedTaskRunnerTest.cs b/test/Threads/DedicatedTaskRunnerTest.cs
similarity index 100%
rename from src/test/csharp/Threads/DedicatedTaskRunnerTest.cs
rename to test/Threads/DedicatedTaskRunnerTest.cs
diff --git a/src/test/csharp/Threads/SchedulerTest.cs b/test/Threads/SchedulerTest.cs
similarity index 100%
rename from src/test/csharp/Threads/SchedulerTest.cs
rename to test/Threads/SchedulerTest.cs
diff --git a/src/test/csharp/Threads/ThreadPoolExecutorTest.cs b/test/Threads/ThreadPoolExecutorTest.cs
similarity index 100%
rename from src/test/csharp/Threads/ThreadPoolExecutorTest.cs
rename to test/Threads/ThreadPoolExecutorTest.cs
diff --git a/src/test/csharp/Threads/TimerExTest.cs b/test/Threads/TimerExTest.cs
similarity index 100%
rename from src/test/csharp/Threads/TimerExTest.cs
rename to test/Threads/TimerExTest.cs
diff --git a/src/test/csharp/Transactions/RecoveryFileLoggerTest.cs b/test/Transactions/RecoveryFileLoggerTest.cs
similarity index 100%
rename from src/test/csharp/Transactions/RecoveryFileLoggerTest.cs
rename to test/Transactions/RecoveryFileLoggerTest.cs
diff --git a/src/test/csharp/Transactions/RecoveryLoggerHarness.cs b/test/Transactions/RecoveryLoggerHarness.cs
similarity index 99%
rename from src/test/csharp/Transactions/RecoveryLoggerHarness.cs
rename to test/Transactions/RecoveryLoggerHarness.cs
index fb69338..ac574cd 100644
--- a/src/test/csharp/Transactions/RecoveryLoggerHarness.cs
+++ b/test/Transactions/RecoveryLoggerHarness.cs
@@ -1,229 +1,229 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System;

-using System.Collections.Generic;

-

-using Apache.NMS.ActiveMQ.Commands;

-using Apache.NMS.ActiveMQ.Util;

-using Apache.NMS.Util;

-

-namespace Apache.NMS.ActiveMQ.Transactions

-{

-    public class RecoveryLoggerHarness : IRecoveryLogger

-    {

-        public delegate void HarnessedEventHandler();

-        public delegate void HarnessedLogRecoveryInfoHandler(XATransactionId xid, byte[] recoveryInfo);

-        public delegate void HarnessedLogRecoveredHandler(XATransactionId xid);

-        public delegate void HarnessedGetRecoverablesHandler(KeyValuePair<XATransactionId, byte[]>[] recoverables);

-        

-        private static readonly FactoryFinder<RecoveryLoggerFactoryAttribute, IRecoveryLoggerFactory> FACTORY_FINDER =

-            new FactoryFinder<RecoveryLoggerFactoryAttribute, IRecoveryLoggerFactory>();

-

-        private IRecoveryLogger containedLogger;

-

-        public event HarnessedEventHandler PreInitializeEvent;

-        public event HarnessedEventHandler PostInitializeEvent;

-

-        public event HarnessedLogRecoveryInfoHandler PreLogRecoveryInfoEvent;

-        public event HarnessedLogRecoveryInfoHandler PostLogRecoveryInfoEvent;

-

-        public event HarnessedLogRecoveredHandler PreLogRecoverdEvent;

-        public event HarnessedLogRecoveredHandler PostLogRecoverdEvent;

-

-        public event HarnessedGetRecoverablesHandler PreGetRecoverablesEvent;

-        public event HarnessedGetRecoverablesHandler PostGetRecoverablesEvent;

-

-        public event HarnessedEventHandler PrePurgeEvent;

-        public event HarnessedEventHandler PostPurgeEvent;

-

-        public RecoveryLoggerHarness()

-        {

-            this.containedLogger = new RecoveryFileLogger();

-        }

-

-        public string ResourceManagerId

-        {

-            get { return this.containedLogger.ResourceManagerId; }

-        }

-

-        public void Initialize(string resourceManagerId)

-        {

-            if(this.PreInitializeEvent != null)

-            {

-                this.PreInitializeEvent();

-            }

-            

-            this.containedLogger.Initialize(resourceManagerId);

-

-            if (this.PostInitializeEvent != null)

-            {

-                this.PostInitializeEvent();

-            }

-        }

-

-        public void LogRecoveryInfo(XATransactionId xid, byte[] recoveryInformation)

-        {

-            if (recoveryInformation == null || recoveryInformation.Length == 0)

-            {

-                return;

-            }

-

-            if (this.PreLogRecoveryInfoEvent != null)

-            {

-                this.PreLogRecoveryInfoEvent(xid, recoveryInformation);

-            }

-

-            this.containedLogger.LogRecoveryInfo(xid, recoveryInformation);

-

-            if (this.PostLogRecoveryInfoEvent != null)

-            {

-                this.PostLogRecoveryInfoEvent(xid, recoveryInformation);

-            }

-        }

-

-        public KeyValuePair<XATransactionId, byte[]>[] GetRecoverables()

-        {

-            KeyValuePair<XATransactionId, byte[]>[] result = new KeyValuePair<XATransactionId, byte[]>[0];

-

-            if (this.PreGetRecoverablesEvent != null)

-            {

-                this.PreGetRecoverablesEvent(result);

-            }

-

-            result = this.containedLogger.GetRecoverables();

-

-            if (this.PostGetRecoverablesEvent != null)

-            {

-                this.PostGetRecoverablesEvent(result);

-            }

-

-            return result;

-        }

-

-        public void LogRecovered(XATransactionId xid)

-        {

-            if (this.PreLogRecoverdEvent != null)

-            {

-                this.PreLogRecoverdEvent(xid);

-            }

-

-            this.containedLogger.LogRecovered(xid);

-

-            if (this.PostLogRecoverdEvent != null)

-            {

-                this.PostLogRecoverdEvent(xid);

-            }

-        }

-

-        public void Purge()

-        {

-            if (this.PrePurgeEvent != null)

-            {

-                this.PrePurgeEvent();

-            }

-

-            this.containedLogger.Purge();

-

-            if (this.PostPurgeEvent != null)

-            {

-                this.PostPurgeEvent();

-            }

-        }

-

-        public string LoggerType

-        {

-            get { return this.containedLogger.LoggerType; }

-        }

-

-        #region Harness Methods

-

-        public IRecoveryLogger Harnessed

-        {

-            get { return this.containedLogger; }    

-        }

-

-        public string HarnessedType

-        {

-            get { return this.containedLogger != null ? this.containedLogger.LoggerType : ""; }

-            set

-            {

-                if (string.IsNullOrEmpty(value))

-                {

-                    throw new NMSException(String.Format("Recovery Logger name invalid: [{0}]", value));

-                }

-

-                IRecoveryLoggerFactory factory = null;

-

-                try

-                {

-                    factory = NewInstance(value.ToLower());

-                }

-                catch (NMSException)

-                {

-                    throw;

-                }

-                catch (Exception e)

-                {

-                    throw NMSExceptionSupport.Create("Error creating Recovery Logger", e);

-                }

-

-                this.containedLogger = factory.Create();

-            }

-        }

-

-        private static IRecoveryLoggerFactory NewInstance(string scheme)

-        {

-            try

-            {

-                Type factoryType = FindLoggerFactory(scheme);

-

-                if (factoryType == null)

-                {

-                    throw new Exception("NewInstance failed to find a match for id = " + scheme);

-                }

-

-                return (IRecoveryLoggerFactory)Activator.CreateInstance(factoryType);

-            }

-            catch (Exception ex)

-            {

-                Tracer.WarnFormat("NewInstance failed to create an IRecoveryLoggerFactory with error: {1}", ex.Message);

-                throw;

-            }

-        }

-

-        private static Type FindLoggerFactory(string scheme)

-        {

-            try

-            {

-                return FACTORY_FINDER.FindFactoryType(scheme);

-            }

-            catch

-            {

-                throw new NMSException("Failed to find Factory for Recovery Logger type: " + scheme);

-            }

-        }

-

-        public Object Clone()

-        {

-            return this.MemberwiseClone();

-        }       

-

-        #endregion

-    }

-}

-

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.ActiveMQ.Util;
+using Apache.NMS.Util;
+
+namespace Apache.NMS.ActiveMQ.Transactions
+{
+    public class RecoveryLoggerHarness : IRecoveryLogger
+    {
+        public delegate void HarnessedEventHandler();
+        public delegate void HarnessedLogRecoveryInfoHandler(XATransactionId xid, byte[] recoveryInfo);
+        public delegate void HarnessedLogRecoveredHandler(XATransactionId xid);
+        public delegate void HarnessedGetRecoverablesHandler(KeyValuePair<XATransactionId, byte[]>[] recoverables);
+        
+        private static readonly FactoryFinder<RecoveryLoggerFactoryAttribute, IRecoveryLoggerFactory> FACTORY_FINDER =
+            new FactoryFinder<RecoveryLoggerFactoryAttribute, IRecoveryLoggerFactory>();
+
+        private IRecoveryLogger containedLogger;
+
+        public event HarnessedEventHandler PreInitializeEvent;
+        public event HarnessedEventHandler PostInitializeEvent;
+
+        public event HarnessedLogRecoveryInfoHandler PreLogRecoveryInfoEvent;
+        public event HarnessedLogRecoveryInfoHandler PostLogRecoveryInfoEvent;
+
+        public event HarnessedLogRecoveredHandler PreLogRecoverdEvent;
+        public event HarnessedLogRecoveredHandler PostLogRecoverdEvent;
+
+        public event HarnessedGetRecoverablesHandler PreGetRecoverablesEvent;
+        public event HarnessedGetRecoverablesHandler PostGetRecoverablesEvent;
+
+        public event HarnessedEventHandler PrePurgeEvent;
+        public event HarnessedEventHandler PostPurgeEvent;
+
+        public RecoveryLoggerHarness()
+        {
+            this.containedLogger = new RecoveryFileLogger();
+        }
+
+        public string ResourceManagerId
+        {
+            get { return this.containedLogger.ResourceManagerId; }
+        }
+
+        public void Initialize(string resourceManagerId)
+        {
+            if(this.PreInitializeEvent != null)
+            {
+                this.PreInitializeEvent();
+            }
+            
+            this.containedLogger.Initialize(resourceManagerId);
+
+            if (this.PostInitializeEvent != null)
+            {
+                this.PostInitializeEvent();
+            }
+        }
+
+        public void LogRecoveryInfo(XATransactionId xid, byte[] recoveryInformation)
+        {
+            if (recoveryInformation == null || recoveryInformation.Length == 0)
+            {
+                return;
+            }
+
+            if (this.PreLogRecoveryInfoEvent != null)
+            {
+                this.PreLogRecoveryInfoEvent(xid, recoveryInformation);
+            }
+
+            this.containedLogger.LogRecoveryInfo(xid, recoveryInformation);
+
+            if (this.PostLogRecoveryInfoEvent != null)
+            {
+                this.PostLogRecoveryInfoEvent(xid, recoveryInformation);
+            }
+        }
+
+        public KeyValuePair<XATransactionId, byte[]>[] GetRecoverables()
+        {
+            KeyValuePair<XATransactionId, byte[]>[] result = new KeyValuePair<XATransactionId, byte[]>[0];
+
+            if (this.PreGetRecoverablesEvent != null)
+            {
+                this.PreGetRecoverablesEvent(result);
+            }
+
+            result = this.containedLogger.GetRecoverables();
+
+            if (this.PostGetRecoverablesEvent != null)
+            {
+                this.PostGetRecoverablesEvent(result);
+            }
+
+            return result;
+        }
+
+        public void LogRecovered(XATransactionId xid)
+        {
+            if (this.PreLogRecoverdEvent != null)
+            {
+                this.PreLogRecoverdEvent(xid);
+            }
+
+            this.containedLogger.LogRecovered(xid);
+
+            if (this.PostLogRecoverdEvent != null)
+            {
+                this.PostLogRecoverdEvent(xid);
+            }
+        }
+
+        public void Purge()
+        {
+            if (this.PrePurgeEvent != null)
+            {
+                this.PrePurgeEvent();
+            }
+
+            this.containedLogger.Purge();
+
+            if (this.PostPurgeEvent != null)
+            {
+                this.PostPurgeEvent();
+            }
+        }
+
+        public string LoggerType
+        {
+            get { return this.containedLogger.LoggerType; }
+        }
+
+        #region Harness Methods
+
+        public IRecoveryLogger Harnessed
+        {
+            get { return this.containedLogger; }    
+        }
+
+        public string HarnessedType
+        {
+            get { return this.containedLogger != null ? this.containedLogger.LoggerType : ""; }
+            set
+            {
+                if (string.IsNullOrEmpty(value))
+                {
+                    throw new NMSException(String.Format("Recovery Logger name invalid: [{0}]", value));
+                }
+
+                IRecoveryLoggerFactory factory = null;
+
+                try
+                {
+                    factory = NewInstance(value.ToLower());
+                }
+                catch (NMSException)
+                {
+                    throw;
+                }
+                catch (Exception e)
+                {
+                    throw NMSExceptionSupport.Create("Error creating Recovery Logger", e);
+                }
+
+                this.containedLogger = factory.Create();
+            }
+        }
+
+        private static IRecoveryLoggerFactory NewInstance(string scheme)
+        {
+            try
+            {
+                Type factoryType = FindLoggerFactory(scheme);
+
+                if (factoryType == null)
+                {
+                    throw new Exception("NewInstance failed to find a match for id = " + scheme);
+                }
+
+                return (IRecoveryLoggerFactory)Activator.CreateInstance(factoryType);
+            }
+            catch (Exception ex)
+            {
+                Tracer.WarnFormat("NewInstance failed to create an IRecoveryLoggerFactory with error: {1}", ex.Message);
+                throw;
+            }
+        }
+
+        private static Type FindLoggerFactory(string scheme)
+        {
+            try
+            {
+                return FACTORY_FINDER.FindFactoryType(scheme);
+            }
+            catch
+            {
+                throw new NMSException("Failed to find Factory for Recovery Logger type: " + scheme);
+            }
+        }
+
+        public Object Clone()
+        {
+            return this.MemberwiseClone();
+        }       
+
+        #endregion
+    }
+}
+
diff --git a/src/test/csharp/Transactions/RecoveryLoggerHarnessFactory.cs b/test/Transactions/RecoveryLoggerHarnessFactory.cs
similarity index 99%
rename from src/test/csharp/Transactions/RecoveryLoggerHarnessFactory.cs
rename to test/Transactions/RecoveryLoggerHarnessFactory.cs
index 5bd530e..eebd6aa 100644
--- a/src/test/csharp/Transactions/RecoveryLoggerHarnessFactory.cs
+++ b/test/Transactions/RecoveryLoggerHarnessFactory.cs
@@ -1,29 +1,29 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-namespace Apache.NMS.ActiveMQ.Transactions

-{

-    [RecoveryLoggerFactory("harness")]

-    public class RecoveryLoggerHarnessFactory : IRecoveryLoggerFactory

-    {

-        public IRecoveryLogger Create()

-        {

-            return new RecoveryLoggerHarness();

-        }

-    }

-}

-

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Apache.NMS.ActiveMQ.Transactions
+{
+    [RecoveryLoggerFactory("harness")]
+    public class RecoveryLoggerHarnessFactory : IRecoveryLoggerFactory
+    {
+        public IRecoveryLogger Create()
+        {
+            return new RecoveryLoggerHarness();
+        }
+    }
+}
+
diff --git a/src/test/csharp/Transport/Inactivity/InactivityMonitorTest.cs b/test/Transport/Inactivity/InactivityMonitorTest.cs
similarity index 100%
rename from src/test/csharp/Transport/Inactivity/InactivityMonitorTest.cs
rename to test/Transport/Inactivity/InactivityMonitorTest.cs
diff --git a/src/test/csharp/Transport/Mock/MockTransportFactoryTest.cs b/test/Transport/Mock/MockTransportFactoryTest.cs
similarity index 96%
rename from src/test/csharp/Transport/Mock/MockTransportFactoryTest.cs
rename to test/Transport/Mock/MockTransportFactoryTest.cs
index 661e731..db51188 100644
--- a/src/test/csharp/Transport/Mock/MockTransportFactoryTest.cs
+++ b/test/Transport/Mock/MockTransportFactoryTest.cs
@@ -57,7 +57,7 @@
         }
 
         [Test]
-        [ExpectedException( "Apache.NMS.ActiveMQ.IOException" )]        
+        [ExpectedException( typeof(IOException))]        
         public void CreationFailMockTransportTest()
         {
             MockTransportFactory factory = new MockTransportFactory();
diff --git a/src/test/csharp/Transport/Mock/MockTransportTest.cs b/test/Transport/Mock/MockTransportTest.cs
similarity index 98%
rename from src/test/csharp/Transport/Mock/MockTransportTest.cs
rename to test/Transport/Mock/MockTransportTest.cs
index f3c504c..958a7a2 100644
--- a/src/test/csharp/Transport/Mock/MockTransportTest.cs
+++ b/test/Transport/Mock/MockTransportTest.cs
@@ -52,7 +52,7 @@
 		}
 
 		[Test]
-		[ExpectedException("System.InvalidOperationException")]
+		[ExpectedException(typeof(InvalidOperationException))]
 		public void StartUnitializedTransportTest()
 		{
 			MockTransport transport = new MockTransport(mockUri);
diff --git a/src/test/csharp/Transport/Tcp/TcpFaultyTransport.cs b/test/Transport/Tcp/TcpFaultyTransport.cs
similarity index 100%
rename from src/test/csharp/Transport/Tcp/TcpFaultyTransport.cs
rename to test/Transport/Tcp/TcpFaultyTransport.cs
diff --git a/src/test/csharp/Transport/Tcp/TcpFaultyTransportFactory.cs b/test/Transport/Tcp/TcpFaultyTransportFactory.cs
similarity index 100%
rename from src/test/csharp/Transport/Tcp/TcpFaultyTransportFactory.cs
rename to test/Transport/Tcp/TcpFaultyTransportFactory.cs
diff --git a/src/test/csharp/Transport/Tcp/TcpFaultyTransportTest.cs b/test/Transport/Tcp/TcpFaultyTransportTest.cs
similarity index 100%
rename from src/test/csharp/Transport/Tcp/TcpFaultyTransportTest.cs
rename to test/Transport/Tcp/TcpFaultyTransportTest.cs
diff --git a/src/test/csharp/Transport/failover/FailoverTransactionTest.cs b/test/Transport/failover/FailoverTransactionTest.cs
similarity index 100%
rename from src/test/csharp/Transport/failover/FailoverTransactionTest.cs
rename to test/Transport/failover/FailoverTransactionTest.cs
diff --git a/src/test/csharp/Transport/failover/FailoverTransportTest.cs b/test/Transport/failover/FailoverTransportTest.cs
similarity index 100%
rename from src/test/csharp/Transport/failover/FailoverTransportTest.cs
rename to test/Transport/failover/FailoverTransportTest.cs
diff --git a/src/test/csharp/Util/ActiveMQMessageAuditTest.cs b/test/Util/ActiveMQMessageAuditTest.cs
similarity index 100%
rename from src/test/csharp/Util/ActiveMQMessageAuditTest.cs
rename to test/Util/ActiveMQMessageAuditTest.cs
diff --git a/src/test/csharp/Util/ActiveMQMessageTransformationTest.cs b/test/Util/ActiveMQMessageTransformationTest.cs
similarity index 100%
rename from src/test/csharp/Util/ActiveMQMessageTransformationTest.cs
rename to test/Util/ActiveMQMessageTransformationTest.cs
diff --git a/src/test/csharp/Util/BitArrayBinTest.cs b/test/Util/BitArrayBinTest.cs
similarity index 100%
rename from src/test/csharp/Util/BitArrayBinTest.cs
rename to test/Util/BitArrayBinTest.cs
diff --git a/src/test/csharp/Util/ConnectionAuditTest.cs b/test/Util/ConnectionAuditTest.cs
similarity index 100%
rename from src/test/csharp/Util/ConnectionAuditTest.cs
rename to test/Util/ConnectionAuditTest.cs
diff --git a/src/test/csharp/Util/FifoMessageDispatchChannelTest.cs b/test/Util/FifoMessageDispatchChannelTest.cs
similarity index 100%
rename from src/test/csharp/Util/FifoMessageDispatchChannelTest.cs
rename to test/Util/FifoMessageDispatchChannelTest.cs
diff --git a/src/test/csharp/Util/LRUCacheTest.cs b/test/Util/LRUCacheTest.cs
similarity index 100%
rename from src/test/csharp/Util/LRUCacheTest.cs
rename to test/Util/LRUCacheTest.cs
diff --git a/src/test/csharp/Util/MemoryUsageTest.cs b/test/Util/MemoryUsageTest.cs
similarity index 100%
rename from src/test/csharp/Util/MemoryUsageTest.cs
rename to test/Util/MemoryUsageTest.cs
diff --git a/src/test/csharp/Util/SimplePriorityMessageDispatchChannelTest.cs b/test/Util/SimplePriorityMessageDispatchChannelTest.cs
similarity index 100%
rename from src/test/csharp/Util/SimplePriorityMessageDispatchChannelTest.cs
rename to test/Util/SimplePriorityMessageDispatchChannelTest.cs
diff --git a/src/test/csharp/VirtualTopicTest.cs b/test/VirtualTopicTest.cs
similarity index 99%
rename from src/test/csharp/VirtualTopicTest.cs
rename to test/VirtualTopicTest.cs
index b3ead36..93f668e 100644
--- a/src/test/csharp/VirtualTopicTest.cs
+++ b/test/VirtualTopicTest.cs
@@ -1,187 +1,187 @@
-/*

- * Licensed to the Apache Software Foundation (ASF) under one or more

- * contributor license agreements.  See the NOTICE file distributed with

- * this work for additional information regarding copyright ownership.

- * The ASF licenses this file to You under the Apache License, Version 2.0

- * (the "License"); you may not use this file except in compliance with

- * the License.  You may obtain a copy of the License at

- *

- *     http://www.apache.org/licenses/LICENSE-2.0

- *

- * Unless required by applicable law or agreed to in writing, software

- * distributed under the License is distributed on an "AS IS" BASIS,

- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

- * See the License for the specific language governing permissions and

- * limitations under the License.

- */

-

-using System.Threading;

-using Apache.NMS.Test;

-using NUnit.Framework;

-

-namespace Apache.NMS.ActiveMQ.Test

-{

-	[TestFixture]

-	public class VirtualTopicTest : NMSTestSupport

-	{

-		protected static string DESTINATION_NAME = "TEST.VTopicDestination";

-		protected static string PRODUCER_DESTINATION_NAME = "VirtualTopic." + DESTINATION_NAME;

-		protected static string CONSUMER_A_DESTINATION_NAME = "Consumer.A." + PRODUCER_DESTINATION_NAME;

-		protected static string CONSUMER_B_DESTINATION_NAME = "Consumer.B." + PRODUCER_DESTINATION_NAME;

-		protected static string TEST_CLIENT_ID = "VirtualTopicTestClientId";

-

-		protected const int totalMsgs = 5;

-

-		[Test]

-		public void SendReceiveVirtualTopicMessage(

-			[Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge,

-				AcknowledgementMode.DupsOkAcknowledge, AcknowledgementMode.Transactional)]

-			AcknowledgementMode ackMode,

-			[Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)]

-			MsgDeliveryMode deliveryMode)

-		{

-			using(IConnection connection = CreateConnection(TEST_CLIENT_ID))

-			{

-				connection.Start();

-				using(ISession session = connection.CreateSession(ackMode))

-				{

-					using(IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME)))

-					using(IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME)))

-					using(IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME)))

-					{

-						producer.DeliveryMode = deliveryMode;

-

-						for(int index = 0; index < totalMsgs; index++)

-						{

-							string msgText = "Message #" + index;

-							Tracer.Info("Sending: " + msgText);

-							producer.Send(session.CreateTextMessage(msgText));

-						}

-

-						if(AcknowledgementMode.Transactional == ackMode)

-						{

-							session.Commit();

-						}

-

-						for(int index = 0; index < totalMsgs; index++)

-						{

-							string msgText = "Message #" + index;

-							ITextMessage messageA = consumerA.Receive(receiveTimeout) as ITextMessage;

-							Assert.IsNotNull(messageA, "Did not receive message for consumer A.");

-							messageA.Acknowledge();

-							Tracer.Info("Received A: " + msgText);

-

-							ITextMessage messageB = consumerB.Receive(receiveTimeout) as ITextMessage;

-							Assert.IsNotNull(messageB, "Did not receive message for consumer B.");

-							messageB.Acknowledge();

-							Tracer.Info("Received B: " + msgText);

-

-							Assert.AreEqual(msgText, messageA.Text, "Message text A does not match.");

-							Assert.AreEqual(msgText, messageB.Text, "Message text B does not match.");

-						}

-

-						if(AcknowledgementMode.Transactional == ackMode)

-						{

-							session.Commit();

-						}

-					}

-

-                    // Give the Broker some time to remove the subscriptions.

-                    Thread.Sleep(2000);

-

-                    try

-                    {

-                        ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_A_DESTINATION_NAME));

-                        ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_B_DESTINATION_NAME));

-                    }

-                    catch

-                    {

-                    }

-				}

-			}

-		}

-

-		protected int receivedA;

-		protected int receivedB;

-

-		[Test]

-		// Do not use listeners with transactional processing.

-		public void AsyncSendReceiveVirtualTopicMessage(

-			[Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge, AcknowledgementMode.DupsOkAcknowledge)]

-			AcknowledgementMode ackMode,

-			[Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)]

-			MsgDeliveryMode deliveryMode)

-		{

-			receivedA = 0;

-			receivedB = 0;

-

-			using(IConnection connection = CreateConnection(TEST_CLIENT_ID))

-			{

-				connection.Start();

-				using(ISession session = connection.CreateSession(ackMode))

-				{

-					using(IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME)))

-					using(IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME)))

-					using(IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME)))

-					{

-						producer.DeliveryMode = deliveryMode;

-

-						consumerA.Listener += MessageListenerA;

-						consumerB.Listener += MessageListenerB;

-

-						for(int index = 0; index < totalMsgs; index++)

-						{

-							string msgText = "Message #" + index;

-							Tracer.Info("Sending: " + msgText);

-							producer.Send(session.CreateTextMessage(msgText));

-						}

-

-						int waitCount = 0;

-						while(receivedA < totalMsgs && receivedB < totalMsgs)

-						{

-							if(waitCount++ > 50)

-							{

-								Assert.Fail("Timed out waiting for message consumers.  A = " + receivedA + ", B = " + receivedB);

-							}

-

-							Tracer.Info("Waiting... Received A = " + receivedA + ", Received B = " + receivedB);

-							Thread.Sleep(250);

-						}

-					}

-                    

-                    // Give the Broker some time to remove the subscriptions.

-                    Thread.Sleep(2000);

-

-                    try

-                    {

-                        ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_A_DESTINATION_NAME));

-                        ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_B_DESTINATION_NAME));

-				    }

-                    catch

-                    {

-                    }

-                }

-			}

-		}

-

-		private void MessageListenerA(IMessage message)

-		{

-			message.Acknowledge();

-			ITextMessage messageA = message as ITextMessage;

-			string msgText = "Message #" + receivedA;

-			Assert.AreEqual(msgText, messageA.Text, "Message text A does not match.");

-			Tracer.Info("Received Listener A: " + msgText);

-			receivedA++;

-		}

-

-		private void MessageListenerB(IMessage message)

-		{

-			message.Acknowledge();

-			ITextMessage messageB = message as ITextMessage;

-			string msgText = "Message #" + receivedB;

-			Assert.AreEqual(msgText, messageB.Text, "Message text B does not match.");

-			Tracer.Info("Received Listener B: " + msgText);

-			receivedB++;

-		}

-	}

-}

+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System.Threading;
+using Apache.NMS.Test;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+	[TestFixture]
+	public class VirtualTopicTest : NMSTestSupport
+	{
+		protected static string DESTINATION_NAME = "TEST.VTopicDestination";
+		protected static string PRODUCER_DESTINATION_NAME = "VirtualTopic." + DESTINATION_NAME;
+		protected static string CONSUMER_A_DESTINATION_NAME = "Consumer.A." + PRODUCER_DESTINATION_NAME;
+		protected static string CONSUMER_B_DESTINATION_NAME = "Consumer.B." + PRODUCER_DESTINATION_NAME;
+		protected static string TEST_CLIENT_ID = "VirtualTopicTestClientId";
+
+		protected const int totalMsgs = 5;
+
+		[Test]
+		public void SendReceiveVirtualTopicMessage(
+			[Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge,
+				AcknowledgementMode.DupsOkAcknowledge, AcknowledgementMode.Transactional)]
+			AcknowledgementMode ackMode,
+			[Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)]
+			MsgDeliveryMode deliveryMode)
+		{
+			using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+			{
+				connection.Start();
+				using(ISession session = connection.CreateSession(ackMode))
+				{
+					using(IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME)))
+					using(IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME)))
+					using(IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME)))
+					{
+						producer.DeliveryMode = deliveryMode;
+
+						for(int index = 0; index < totalMsgs; index++)
+						{
+							string msgText = "Message #" + index;
+							Tracer.Info("Sending: " + msgText);
+							producer.Send(session.CreateTextMessage(msgText));
+						}
+
+						if(AcknowledgementMode.Transactional == ackMode)
+						{
+							session.Commit();
+						}
+
+						for(int index = 0; index < totalMsgs; index++)
+						{
+							string msgText = "Message #" + index;
+							ITextMessage messageA = consumerA.Receive(receiveTimeout) as ITextMessage;
+							Assert.IsNotNull(messageA, "Did not receive message for consumer A.");
+							messageA.Acknowledge();
+							Tracer.Info("Received A: " + msgText);
+
+							ITextMessage messageB = consumerB.Receive(receiveTimeout) as ITextMessage;
+							Assert.IsNotNull(messageB, "Did not receive message for consumer B.");
+							messageB.Acknowledge();
+							Tracer.Info("Received B: " + msgText);
+
+							Assert.AreEqual(msgText, messageA.Text, "Message text A does not match.");
+							Assert.AreEqual(msgText, messageB.Text, "Message text B does not match.");
+						}
+
+						if(AcknowledgementMode.Transactional == ackMode)
+						{
+							session.Commit();
+						}
+					}
+
+                    // Give the Broker some time to remove the subscriptions.
+                    Thread.Sleep(2000);
+
+                    try
+                    {
+                        ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_A_DESTINATION_NAME));
+                        ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_B_DESTINATION_NAME));
+                    }
+                    catch
+                    {
+                    }
+				}
+			}
+		}
+
+		protected int receivedA;
+		protected int receivedB;
+
+		[Test]
+		// Do not use listeners with transactional processing.
+		public void AsyncSendReceiveVirtualTopicMessage(
+			[Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge, AcknowledgementMode.DupsOkAcknowledge)]
+			AcknowledgementMode ackMode,
+			[Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)]
+			MsgDeliveryMode deliveryMode)
+		{
+			receivedA = 0;
+			receivedB = 0;
+
+			using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+			{
+				connection.Start();
+				using(ISession session = connection.CreateSession(ackMode))
+				{
+					using(IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME)))
+					using(IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME)))
+					using(IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME)))
+					{
+						producer.DeliveryMode = deliveryMode;
+
+						consumerA.Listener += MessageListenerA;
+						consumerB.Listener += MessageListenerB;
+
+						for(int index = 0; index < totalMsgs; index++)
+						{
+							string msgText = "Message #" + index;
+							Tracer.Info("Sending: " + msgText);
+							producer.Send(session.CreateTextMessage(msgText));
+						}
+
+						int waitCount = 0;
+						while(receivedA < totalMsgs && receivedB < totalMsgs)
+						{
+							if(waitCount++ > 50)
+							{
+								Assert.Fail("Timed out waiting for message consumers.  A = " + receivedA + ", B = " + receivedB);
+							}
+
+							Tracer.Info("Waiting... Received A = " + receivedA + ", Received B = " + receivedB);
+							Thread.Sleep(250);
+						}
+					}
+                    
+                    // Give the Broker some time to remove the subscriptions.
+                    Thread.Sleep(2000);
+
+                    try
+                    {
+                        ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_A_DESTINATION_NAME));
+                        ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_B_DESTINATION_NAME));
+				    }
+                    catch
+                    {
+                    }
+                }
+			}
+		}
+
+		private void MessageListenerA(IMessage message)
+		{
+			message.Acknowledge();
+			ITextMessage messageA = message as ITextMessage;
+			string msgText = "Message #" + receivedA;
+			Assert.AreEqual(msgText, messageA.Text, "Message text A does not match.");
+			Tracer.Info("Received Listener A: " + msgText);
+			receivedA++;
+		}
+
+		private void MessageListenerB(IMessage message)
+		{
+			message.Acknowledge();
+			ITextMessage messageB = message as ITextMessage;
+			string msgText = "Message #" + receivedB;
+			Assert.AreEqual(msgText, messageB.Text, "Message text B does not match.");
+			Tracer.Info("Received Listener B: " + msgText);
+			receivedB++;
+		}
+	}
+}
diff --git a/src/test/csharp/ZeroPrefetchConsumerTest.cs b/test/ZeroPrefetchConsumerTest.cs
similarity index 100%
rename from src/test/csharp/ZeroPrefetchConsumerTest.cs
rename to test/ZeroPrefetchConsumerTest.cs
diff --git a/test/img/activemq_logo_icon.png b/test/img/activemq_logo_icon.png
new file mode 100644
index 0000000..c2b43f5
--- /dev/null
+++ b/test/img/activemq_logo_icon.png
Binary files differ
diff --git a/test/nms-openwire-test.csproj b/test/nms-openwire-test.csproj
new file mode 100644
index 0000000..147c848
--- /dev/null
+++ b/test/nms-openwire-test.csproj
@@ -0,0 +1,70 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFrameworks>net462;netcoreapp2.2</TargetFrameworks>
+    <RootNamespace>Apache.NMS.ActiveMQ.Test</RootNamespace>
+    <AssemblyName>Apache.NMS.ActiveMQ.Test</AssemblyName>
+    <ApplicationIcon />
+    <OutputType>Library</OutputType>
+    <StartupObject />
+    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
+    <Company>Apache Software Foundation</Company>
+    <Authors>Apache ActiveMQ</Authors>
+    <Product>Apache NMS OpenWire Test</Product>
+    <Description>Apache NMS (.Net Standard Messaging Library) Test Suite</Description>
+    <Copyright>Copyright (C) 2005-2019 Apache Software Foundation</Copyright>
+    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
+    <PackageProjectUrl>https://activemq.apache.org/components/nms/</PackageProjectUrl>
+    <PackageIcon>activemq_logo_icon.png</PackageIcon>
+    <RepositoryUrl>https://github.com/apache/activemq-nms-openwire</RepositoryUrl>
+    <RepositoryType>git</RepositoryType>
+    <PackageTags>apache;activemq;nms;api;net;test;messaging</PackageTags>
+    <Version>1.8.0</Version>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>NMSKey.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+    <OutputPath>..\..\build\</OutputPath>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Content Include="..\LICENSE.txt" Link="LICENSE.txt" />
+    <Content Include="..\NOTICE.txt" Link="NOTICE.txt" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
+    <PackageReference Include="NUnit" Version="3.12.0" />
+    <PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
+    <PackageReference Include="System.Data.SqlClient" Version="4.6.1" />
+  </ItemGroup>
+
+  <ItemGroup Condition=" '$(TargetFramework)' == 'net462'">
+    <Reference Include="System.Web" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\src\nms-openwire.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Reference Include="Apache.NMS.Test">
+      <HintPath>..\ext_bin\Apache.NMS.Test.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+
+  <ItemGroup>
+    <None Include="..\LICENSE.txt">
+      <Pack>True</Pack>
+      <PackagePath></PackagePath>
+    </None>
+  </ItemGroup>
+
+  <ItemGroup>
+    <None Update="nmsprovider-test.config">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+  </ItemGroup>
+
+</Project>
diff --git a/nmsprovider-test.config b/test/nmsprovider-test.config
similarity index 100%
rename from nmsprovider-test.config
rename to test/nmsprovider-test.config
diff --git a/test/nsm-openwire-test-introduction.txt b/test/nsm-openwire-test-introduction.txt
new file mode 100644
index 0000000..87c7a1b
--- /dev/null
+++ b/test/nsm-openwire-test-introduction.txt
@@ -0,0 +1,15 @@
+How to correcty run nms-openwire-tests ?
+
+Requirements:
+- installed broker ActiveMQ 5 (https://activemq.apache.org/components/classic/download/)
+- installer SQL Server 
+
+1) When the software listed above is installed, 
+   log in to SQL Server(using Windows Authentication) and create new login e.g:
+   -Login name: "testuser"
+   -Password: "Password*01"
+   -Check option "SQL Server authentication"
+
+2) Open "TestDbConfig.xml" and go to "createDbConnectionString" and "createTableConnectionString".
+   Update "User ID" and "Password" like was set in new SQL Server login. 
+   Update server name e.g value for "Data Source" is a computer name. 
\ No newline at end of file
diff --git a/vs2008-activemq-test.csproj b/vs2008-activemq-test.csproj
deleted file mode 100644
index 88c55a0..0000000
--- a/vs2008-activemq-test.csproj
+++ /dev/null
@@ -1,168 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.30729</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{EB943C69-2C9B-45E7-B95B-FB916E7057ED}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <RootNamespace>Apache.NMS.ActiveMQ.Test</RootNamespace>
-    <AssemblyName>Apache.NMS.ActiveMQ.Test</AssemblyName>
-    <WarningLevel>4</WarningLevel>
-    <StartupObject>
-    </StartupObject>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>2.0</OldToolsVersion>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-    <SignAssembly>true</SignAssembly>
-    <AssemblyOriginatorKeyFile>keyfile\NMSKey.snk</AssemblyOriginatorKeyFile>
-    <SccProjectName>Svn</SccProjectName>
-    <SccLocalPath>Svn</SccLocalPath>
-    <SccAuxPath>Svn</SccAuxPath>
-    <SccProvider>SubversionScc</SccProvider>
-    <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>build\net-2.0\debug\</OutputPath>
-    <DefineConstants>TRACE;DEBUG;NET,NET_2_0</DefineConstants>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <NoWarn>3016</NoWarn>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <Optimize>true</Optimize>
-    <OutputPath>build\net-2.0\release\</OutputPath>
-    <DefineConstants>TRACE;NET,NET_2_0</DefineConstants>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <DebugType>full</DebugType>
-    <NoWarn>3016</NoWarn>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="Apache.NMS, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>lib\Apache.NMS\net-2.0\Apache.NMS.dll</HintPath>
-    </Reference>
-    <Reference Include="Apache.NMS.Test, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>lib\Apache.NMS\net-2.0\Apache.NMS.Test.dll</HintPath>
-    </Reference>
-    <Reference Include="nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>lib\NUnit\net-2.0\nunit.framework.dll</HintPath>
-    </Reference>
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Transactions" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="src\test\csharp\AMQNET366Test.cs" />
-    <Compile Include="src\test\csharp\AMQNET375Test.cs" />
-    <Compile Include="src\test\csharp\AMQQueueTransactionTest.cs" />
-    <Compile Include="src\test\csharp\AMQRedeliveryPolicyTest.cs" />
-    <Compile Include="src\test\csharp\AMQTopicTransactionTest.cs" />
-    <Compile Include="src\test\csharp\AMQTransactionTestSupport.cs" />
-    <Compile Include="src\test\csharp\BrokerToNMSExceptionsTest.cs" />
-    <Compile Include="src\test\csharp\Commands\ActiveMQBytesMessageTest.cs" />
-    <Compile Include="src\test\csharp\Commands\ActiveMQMapMessageTest.cs" />
-    <Compile Include="src\test\csharp\Commands\ActiveMQMessageTest.cs" />
-    <Compile Include="src\test\csharp\Commands\ActiveMQStreamMessageTest.cs" />
-    <Compile Include="src\test\csharp\Commands\ActiveMQTextMessageTest.cs" />
-    <Compile Include="src\test\csharp\Commands\CommandTest.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\test\csharp\Commands\MessageCompressionTest.cs" />
-    <Compile Include="src\test\csharp\CommonAssemblyInfo.cs" />
-    <Compile Include="src\test\csharp\ConnectionFactoryTest.cs" />
-    <Compile Include="src\test\csharp\ConnectionMetaDataTest.cs" />
-    <Compile Include="src\test\csharp\InvalidCredentialsTest.cs" />
-    <Compile Include="src\test\csharp\DtcBasicTransactionsTest.cs" />
-    <Compile Include="src\test\csharp\DtcConsumerTransactionsTest.cs" />
-    <Compile Include="src\test\csharp\DtcProducerTransactionsTest.cs" />
-    <Compile Include="src\test\csharp\DtcTransactionsTestSupport.cs" />
-    <Compile Include="src\test\csharp\MessageConsumerTest.cs" />
-    <Compile Include="src\test\csharp\ExclusiveConsumerTest.cs" />
-    <Compile Include="src\test\csharp\IndividualAckTest.cs" />
-    <Compile Include="src\test\csharp\MessageListenerRedeliveryTest.cs" />
-    <Compile Include="src\test\csharp\MessageProducerTest.cs" />
-    <Compile Include="src\test\csharp\NetTxConnectionFactoryTest.cs" />
-    <Compile Include="src\test\csharp\NetTxTransactionTest.cs" />
-    <Compile Include="src\test\csharp\NMSConnectionFactoryTest.cs" />
-    <Compile Include="src\test\csharp\NmsConsoleTracer.cs" />
-    <Compile Include="src\test\csharp\NMSSessionRecoverTest.cs" />
-    <Compile Include="src\test\csharp\NonBlockingConsumerRedeliveryTest.cs" />
-    <Compile Include="src\test\csharp\OpenWire\BooleanStreamTest.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\test\csharp\OpenWire\MaxInactivityDurationTest.cs" />
-    <Compile Include="src\test\csharp\OpenWire\PrefetchSizeZeroTest.cs" />
-    <Compile Include="src\test\csharp\OptimizedAckTest.cs" />
-    <Compile Include="src\test\csharp\QueueBrowserTests.cs" />
-    <Compile Include="src\test\csharp\QueueConsumerPriorityTest.cs" />
-    <Compile Include="src\test\csharp\RollbackRedeliveryTest.cs" />
-    <Compile Include="src\test\csharp\State\ConnectionStateTest.cs" />
-    <Compile Include="src\test\csharp\State\ConnectionStateTrackerTest.cs" />
-    <Compile Include="src\test\csharp\State\ConsumerStateTest.cs" />
-    <Compile Include="src\test\csharp\State\ProducerStateTest.cs" />
-    <Compile Include="src\test\csharp\State\SessionStateTest.cs" />
-    <Compile Include="src\test\csharp\State\TransactionStateTest.cs" />
-    <Compile Include="src\test\csharp\TempDestinationTest.cs" />
-    <Compile Include="src\test\csharp\TestMain.cs" />
-    <Compile Include="src\test\csharp\TestMainAsync.cs" />
-    <Compile Include="src\test\csharp\Threads\CompositeTaskRunnerTest.cs" />
-    <Compile Include="src\test\csharp\Threads\DedicatedTaskRunnerTest.cs" />
-    <Compile Include="src\test\csharp\Threads\SchedulerTest.cs" />
-    <Compile Include="src\test\csharp\Threads\ThreadPoolExecutorTest.cs" />
-    <Compile Include="src\test\csharp\Threads\TimerExTest.cs" />
-    <Compile Include="src\test\csharp\Transactions\RecoveryFileLoggerTest.cs" />
-    <Compile Include="src\test\csharp\Transactions\RecoveryLoggerHarness.cs" />
-    <Compile Include="src\test\csharp\Transactions\RecoveryLoggerHarnessFactory.cs" />
-    <Compile Include="src\test\csharp\Transport\failover\FailoverTransactionTest.cs" />
-    <Compile Include="src\test\csharp\Transport\failover\FailoverTransportTest.cs" />
-    <Compile Include="src\test\csharp\Transport\Inactivity\InactivityMonitorTest.cs" />
-    <Compile Include="src\test\csharp\Transport\Mock\MockTransportFactoryTest.cs" />
-    <Compile Include="src\test\csharp\Transport\Mock\MockTransportTest.cs" />
-    <Compile Include="src\test\csharp\Transport\Tcp\TcpFaultyTransport.cs" />
-    <Compile Include="src\test\csharp\Transport\Tcp\TcpFaultyTransportFactory.cs" />
-    <Compile Include="src\test\csharp\Transport\Tcp\TcpFaultyTransportTest.cs" />
-    <Compile Include="src\test\csharp\Util\ActiveMQMessageAuditTest.cs" />
-    <Compile Include="src\test\csharp\Util\ActiveMQMessageTransformationTest.cs" />
-    <Compile Include="src\test\csharp\Util\BitArrayBinTest.cs" />
-    <Compile Include="src\test\csharp\Util\ConnectionAuditTest.cs" />
-    <Compile Include="src\test\csharp\Util\FifoMessageDispatchChannelTest.cs" />
-    <Compile Include="src\test\csharp\Util\LRUCacheTest.cs" />
-    <Compile Include="src\test\csharp\Util\MemoryUsageTest.cs" />
-    <Compile Include="src\test\csharp\Util\SimplePriorityMessageDispatchChannelTest.cs" />
-    <Compile Include="src\test\csharp\VirtualTopicTest.cs" />
-    <Compile Include="src\test\csharp\ZeroPrefetchConsumerTest.cs" />
-    <Compile Include="src\test\csharp\OpenWire\BaseDataStreamMarshallerTest.cs" />
-    <Compile Include="src\test\csharp\BatchedMessagePriorityConsumerTest.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="nmsprovider-test.config">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="vs2008-activemq.csproj">
-      <Project>{08321F42-4B3D-4815-B592-95962BAC3B9F}</Project>
-      <Name>vs2008-activemq</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Apache.NMS.ActiveMQ.Test.nunit">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-    <None Include="keyfile\NMSKey.snk" />
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
-  <PropertyGroup>
-    <PostBuildEvent>cd $(ProjectDir)
-nant -nologo -q install-all -D:compile.skip=true</PostBuildEvent>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/vs2008-activemq.csproj b/vs2008-activemq.csproj
deleted file mode 100644
index 1cfe906..0000000
--- a/vs2008-activemq.csproj
+++ /dev/null
@@ -1,1340 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.21022</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{08321F42-4B3D-4815-B592-95962BAC3B9F}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <RootNamespace>Apache.NMS.ActiveMQ</RootNamespace>
-    <AssemblyName>Apache.NMS.ActiveMQ</AssemblyName>
-    <WarningLevel>4</WarningLevel>
-    <SignAssembly>true</SignAssembly>
-    <AssemblyOriginatorKeyFile>keyfile\NMSKey.snk</AssemblyOriginatorKeyFile>
-    <FileUpgradeFlags>
-    </FileUpgradeFlags>
-    <OldToolsVersion>2.0</OldToolsVersion>
-    <UpgradeBackupLocation>
-    </UpgradeBackupLocation>
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
-    <SccProjectName>Svn</SccProjectName>
-    <SccLocalPath>Svn</SccLocalPath>
-    <SccAuxPath>Svn</SccAuxPath>
-    <SccProvider>SubversionScc</SccProvider>
-    <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>build\net-2.0\debug\</OutputPath>
-    <DefineConstants>TRACE;DEBUG;NET,NET_2_0</DefineConstants>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <DocumentationFile>
-    </DocumentationFile>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <Optimize>true</Optimize>
-    <OutputPath>build\net-2.0\release\</OutputPath>
-    <DefineConstants>TRACE;NET,NET_2_0</DefineConstants>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <DebugType>full</DebugType>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="Apache.NMS, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>lib\Apache.NMS\net-2.0\Apache.NMS.dll</HintPath>
-    </Reference>
-    <Reference Include="Ionic.Zlib, Version=1.9.1.5, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>lib\DotNetZip\net-2.0\Ionic.Zlib.dll</HintPath>
-    </Reference>
-    <Reference Include="System" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Transactions" />
-    <Reference Include="System.Web" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="src\main\csharp\AdvisoryConsumer.cs" />
-    <Compile Include="src\main\csharp\BrokerException.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQBlobMessage.cs" />
-    <Compile Include="src\main\csharp\Commands\ActiveMQBytesMessage.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQDestination.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQMapMessage.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQMessage.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQObjectMessage.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQQueue.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQStreamMessage.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQTempDestination.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQTempQueue.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQTempTopic.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQTextMessage.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ActiveMQTopic.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\BaseCommand.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\BaseDataStructure.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\BooleanExpression.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\BrokerError.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\BrokerId.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\BrokerInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\Command.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ConnectionControl.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ConnectionError.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ConnectionId.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ConnectionInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ConsumerControl.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ConsumerId.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ConsumerInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ControlCommand.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\DataArrayResponse.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\DataResponse.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\DataStructure.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\DataStructureSupport.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\DestinationInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\DiscoveryEvent.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ExceptionResponse.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\FlushCommand.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\IntegerResponse.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\JournalQueueAck.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\JournalTopicAck.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\JournalTrace.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\JournalTransaction.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\KeepAliveInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\LastPartialCommand.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\LocalTransactionId.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\MarshallAware.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\Message.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\MessageAck.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\MessageDispatch.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\MessageDispatchNotification.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\MessageId.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\MessagePull.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\MessageReference.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\NetworkBridgeFilter.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\PartialCommand.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ProducerAck.cs" />
-    <Compile Include="src\main\csharp\Commands\ProducerId.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ProducerInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\RemoveInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\RemoveSubscriptionInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ReplayCommand.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\Response.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\SessionId.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\SessionInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\ShutdownInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\SubscriptionInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\TransactionId.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\TransactionInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\WireFormatInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\XATransactionId.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Commands\Xid.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\CommonAssemblyInfo.cs" />
-    <Compile Include="src\main\csharp\CompressionPolicy.cs" />
-    <Compile Include="src\main\csharp\Connection.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\ConnectionClosedException.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\ConnectionFactory.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\ConnectionFailedException.cs" />
-    <Compile Include="src\main\csharp\ConnectionMetaData.cs" />
-    <Compile Include="src\main\csharp\ConsumerClosedException.cs">
-      <SubType>Code</SubType>
-      <CustomToolNamespace>T</CustomToolNamespace>
-    </Compile>
-    <Compile Include="src\main\csharp\DestinationFilter.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\ICompressionPolicy.cs" />
-    <Compile Include="src\main\csharp\IDispatcher.cs" />
-    <Compile Include="src\main\csharp\IOException.cs" />
-    <Compile Include="src\main\csharp\ISynchronization.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\MessageConsumer.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\MessageProducer.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\NetTxConnection.cs" />
-    <Compile Include="src\main\csharp\NetTxConnectionFactory.cs" />
-    <Compile Include="src\main\csharp\NetTxMessageConsumer.cs" />
-    <Compile Include="src\main\csharp\NetTxRecoveryPolicy.cs" />
-    <Compile Include="src\main\csharp\NetTxSession.cs" />
-    <Compile Include="src\main\csharp\NetTxTransactionContext.cs" />
-    <Compile Include="src\main\csharp\OpenWire\BaseDataStreamMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\BooleanStream.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\IMarshallerFactory.cs" />
-    <Compile Include="src\main\csharp\OpenWire\OpenWireFormat.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQBlobMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQBytesMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQMapMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQObjectMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQStreamMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQTempDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQTempQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQTempTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQTextMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\BaseCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\BrokerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\BrokerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ConnectionControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ConnectionErrorMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ConnectionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ConnectionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ConsumerControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ConsumerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ConsumerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ControlCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\DataArrayResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\DataResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\DestinationInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\DiscoveryEventMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ExceptionResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\FlushCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\IntegerResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\JournalQueueAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\JournalTopicAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\JournalTraceMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\JournalTransactionMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\KeepAliveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\LastPartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\LocalTransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\MarshallerFactory.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\MessageAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\MessageDispatchMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\MessageDispatchNotificationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\MessageIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\MessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\MessagePullMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\NetworkBridgeFilterMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\PartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ProducerAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ProducerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ProducerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\RemoveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\RemoveSubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ReplayCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\SessionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\SessionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\ShutdownInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\SubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\TransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\TransactionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\WireFormatInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V10\XATransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQBlobMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQBytesMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQDestinationMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQMapMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQObjectMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQQueueMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQStreamMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQTempDestinationMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQTempQueueMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQTempTopicMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQTextMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQTopicMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\BaseCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\BrokerIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\BrokerInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ConnectionControlMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ConnectionErrorMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ConnectionIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ConnectionInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ConsumerControlMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ConsumerIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ConsumerInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ControlCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\DataArrayResponseMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\DataResponseMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\DataStructureSupportMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\DestinationInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\DiscoveryEventMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ExceptionResponseMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\FlushCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\IntegerResponseMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\JournalQueueAckMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\JournalTopicAckMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\JournalTraceMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\JournalTransactionMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\KeepAliveInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\LastPartialCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\LocalTransactionIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\MarshallerFactory.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\MessageAckMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\MessageDispatchMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\MessageDispatchNotificationMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\MessageIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\MessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\MessagePullMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V1\NetworkBridgeFilterMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\PartialCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ProducerAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V1\ProducerIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ProducerInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\RemoveInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\RemoveSubscriptionInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ReplayCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ResponseMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\SessionIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\SessionInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\ShutdownInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\SubscriptionInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\TransactionIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\TransactionInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\WireFormatInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V1\XATransactionIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQBlobMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQBytesMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQDestinationMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQMapMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQObjectMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQQueueMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQStreamMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQTempDestinationMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQTempQueueMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQTempTopicMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQTextMessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQTopicMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\BaseCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\BrokerIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\BrokerInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ConnectionControlMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ConnectionErrorMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ConnectionIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ConnectionInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ConsumerControlMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ConsumerIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ConsumerInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ControlCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\DataArrayResponseMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\DataResponseMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\DestinationInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\DiscoveryEventMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ExceptionResponseMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\FlushCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\IntegerResponseMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\JournalQueueAckMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\JournalTopicAckMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\JournalTraceMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\JournalTransactionMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\KeepAliveInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\LastPartialCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\LocalTransactionIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\MarshallerFactory.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\MessageAckMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\MessageDispatchMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\MessageDispatchNotificationMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\MessageIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\MessageMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\MessagePullMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\NetworkBridgeFilterMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\PartialCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ProducerAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V2\ProducerIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ProducerInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\RemoveInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\RemoveSubscriptionInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ReplayCommandMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ResponseMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\SessionIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\SessionInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\ShutdownInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\SubscriptionInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\TransactionIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\TransactionInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\WireFormatInfoMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V2\XATransactionIdMarshaller.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQBlobMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQBytesMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQMapMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQObjectMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQStreamMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQTempDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQTempQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQTempTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQTextMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\BaseCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\BrokerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\BrokerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ConnectionControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ConnectionErrorMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ConnectionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ConnectionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ConsumerControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ConsumerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ConsumerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ControlCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\DataArrayResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\DataResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\DestinationInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\DiscoveryEventMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ExceptionResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\FlushCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\IntegerResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\JournalQueueAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\JournalTopicAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\JournalTraceMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\JournalTransactionMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\KeepAliveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\LastPartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\LocalTransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\MarshallerFactory.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\MessageAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\MessageDispatchMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\MessageDispatchNotificationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\MessageIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\MessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\MessagePullMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\NetworkBridgeFilterMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\PartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ProducerAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ProducerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ProducerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\RemoveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\RemoveSubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ReplayCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\SessionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\SessionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\ShutdownInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\SubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\TransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\TransactionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\WireFormatInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V3\XATransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQBlobMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQBytesMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQMapMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQObjectMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQStreamMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQTempDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQTempQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQTempTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQTextMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\BaseCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\BrokerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\BrokerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ConnectionControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ConnectionErrorMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ConnectionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ConnectionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ConsumerControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ConsumerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ConsumerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ControlCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\DataArrayResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\DataResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\DestinationInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\DiscoveryEventMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ExceptionResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\FlushCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\IntegerResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\JournalQueueAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\JournalTopicAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\JournalTraceMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\JournalTransactionMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\KeepAliveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\LastPartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\LocalTransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\MarshallerFactory.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\MessageAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\MessageDispatchMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\MessageDispatchNotificationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\MessageIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\MessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\MessagePullMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\NetworkBridgeFilterMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\PartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ProducerAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ProducerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ProducerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\RemoveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\RemoveSubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ReplayCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\SessionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\SessionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\ShutdownInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\SubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\TransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\TransactionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\WireFormatInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V4\XATransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQBlobMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQBytesMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQMapMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQObjectMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQStreamMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQTempDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQTempQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQTempTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQTextMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\BaseCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\BrokerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\BrokerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ConnectionControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ConnectionErrorMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ConnectionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ConnectionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ConsumerControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ConsumerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ConsumerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ControlCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\DataArrayResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\DataResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\DestinationInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\DiscoveryEventMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ExceptionResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\FlushCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\IntegerResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\JournalQueueAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\JournalTopicAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\JournalTraceMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\JournalTransactionMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\KeepAliveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\LastPartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\LocalTransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\MarshallerFactory.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\MessageAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\MessageDispatchMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\MessageDispatchNotificationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\MessageIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\MessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\MessagePullMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\NetworkBridgeFilterMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\PartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ProducerAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ProducerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ProducerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\RemoveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\RemoveSubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ReplayCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\SessionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\SessionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\ShutdownInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\SubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\TransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\TransactionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\WireFormatInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V5\XATransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQBlobMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQBytesMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQMapMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQObjectMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQStreamMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQTempDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQTempQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQTempTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQTextMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\BaseCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\BrokerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\BrokerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ConnectionControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ConnectionErrorMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ConnectionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ConnectionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ConsumerControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ConsumerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ConsumerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ControlCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\DataArrayResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\DataResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\DestinationInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\DiscoveryEventMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ExceptionResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\FlushCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\IntegerResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\JournalQueueAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\JournalTopicAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\JournalTraceMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\JournalTransactionMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\KeepAliveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\LastPartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\LocalTransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\MarshallerFactory.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\MessageAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\MessageDispatchMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\MessageDispatchNotificationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\MessageIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\MessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\MessagePullMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\NetworkBridgeFilterMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\PartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ProducerAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ProducerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ProducerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\RemoveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\RemoveSubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ReplayCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\SessionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\SessionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\ShutdownInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\SubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\TransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\TransactionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\WireFormatInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V6\XATransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQBlobMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQBytesMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQMapMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQObjectMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQStreamMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQTempDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQTempQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQTempTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQTextMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\BaseCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\BrokerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\BrokerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ConnectionControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ConnectionErrorMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ConnectionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ConnectionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ConsumerControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ConsumerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ConsumerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ControlCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\DataArrayResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\DataResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\DestinationInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\DiscoveryEventMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ExceptionResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\FlushCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\IntegerResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\JournalQueueAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\JournalTopicAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\JournalTraceMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\JournalTransactionMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\KeepAliveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\LastPartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\LocalTransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\MarshallerFactory.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\MessageAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\MessageDispatchMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\MessageDispatchNotificationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\MessageIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\MessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\MessagePullMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\NetworkBridgeFilterMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\PartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ProducerAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ProducerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ProducerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\RemoveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\RemoveSubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ReplayCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\SessionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\SessionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\ShutdownInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\SubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\TransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\TransactionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\WireFormatInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V7\XATransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQBlobMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQBytesMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQMapMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQObjectMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQStreamMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQTempDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQTempQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQTempTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQTextMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\BaseCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\BrokerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\BrokerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ConnectionControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ConnectionErrorMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ConnectionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ConnectionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ConsumerControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ConsumerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ConsumerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ControlCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\DataArrayResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\DataResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\DestinationInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\DiscoveryEventMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ExceptionResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\FlushCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\IntegerResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\JournalQueueAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\JournalTopicAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\JournalTraceMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\JournalTransactionMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\KeepAliveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\LastPartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\LocalTransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\MarshallerFactory.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\MessageAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\MessageDispatchMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\MessageDispatchNotificationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\MessageIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\MessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\MessagePullMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\NetworkBridgeFilterMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\PartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ProducerAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ProducerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ProducerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\RemoveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\RemoveSubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ReplayCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\SessionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\SessionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\ShutdownInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\SubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\TransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\TransactionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\WireFormatInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V8\XATransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQBlobMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQBytesMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQMapMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQObjectMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQStreamMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQTempDestinationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQTempQueueMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQTempTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQTextMessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQTopicMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\BaseCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\BrokerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\BrokerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ConnectionControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ConnectionErrorMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ConnectionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ConnectionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ConsumerControlMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ConsumerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ConsumerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ControlCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\DataArrayResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\DataResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\DestinationInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\DiscoveryEventMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ExceptionResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\FlushCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\IntegerResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\JournalQueueAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\JournalTopicAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\JournalTraceMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\JournalTransactionMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\KeepAliveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\LastPartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\LocalTransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\MarshallerFactory.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\MessageAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\MessageDispatchMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\MessageDispatchNotificationMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\MessageIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\MessageMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\MessagePullMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\NetworkBridgeFilterMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\PartialCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ProducerAckMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ProducerIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ProducerInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\RemoveInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\RemoveSubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ReplayCommandMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ResponseMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\SessionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\SessionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\ShutdownInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\SubscriptionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\TransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\TransactionInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\WireFormatInfoMarshaller.cs" />
-    <Compile Include="src\main\csharp\OpenWire\V9\XATransactionIdMarshaller.cs" />
-    <Compile Include="src\main\csharp\PrefetchPolicy.cs" />
-    <Compile Include="src\main\csharp\QueueBrowser.cs" />
-    <Compile Include="src\main\csharp\RequestTimedOutException.cs" />
-    <Compile Include="src\main\csharp\Session.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\SessionExecutor.cs" />
-    <Compile Include="src\main\csharp\State\CommandVisitorAdapter.cs" />
-    <Compile Include="src\main\csharp\State\ConnectionState.cs" />
-    <Compile Include="src\main\csharp\State\ConnectionStateTracker.cs" />
-    <Compile Include="src\main\csharp\State\ConsumerState.cs" />
-    <Compile Include="src\main\csharp\State\ICommandVisitor.cs" />
-    <Compile Include="src\main\csharp\State\ProducerState.cs" />
-    <Compile Include="src\main\csharp\State\ResponseHandler.cs" />
-    <Compile Include="src\main\csharp\State\SessionState.cs" />
-    <Compile Include="src\main\csharp\State\SynchronizedObjects.cs" />
-    <Compile Include="src\main\csharp\State\Tracked.cs" />
-    <Compile Include="src\main\csharp\State\TransactionState.cs" />
-    <Compile Include="src\main\csharp\Threads\CompositeTask.cs" />
-    <Compile Include="src\main\csharp\Threads\CompositeTaskRunner.cs" />
-    <Compile Include="src\main\csharp\Threads\DedicatedTaskRunner.cs" />
-    <Compile Include="src\main\csharp\Threads\DefaultThreadPools.cs" />
-    <Compile Include="src\main\csharp\Threads\PooledTaskRunner.cs" />
-    <Compile Include="src\main\csharp\Threads\Scheduler.cs" />
-    <Compile Include="src\main\csharp\Threads\Task.cs" />
-    <Compile Include="src\main\csharp\Threads\TaskRunner.cs" />
-    <Compile Include="src\main\csharp\Threads\TaskRunnerFactory.cs" />
-    <Compile Include="src\main\csharp\Threads\ThreadPoolExecutor.cs" />
-    <Compile Include="src\main\csharp\Threads\TimerEx.cs" />
-    <Compile Include="src\main\csharp\Threads\TimerTask.cs" />
-    <Compile Include="src\main\csharp\TransactionContext.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Transactions\IRecoveryLogger.cs" />
-    <Compile Include="src\main\csharp\Transactions\IRecoveryLoggerFactory.cs" />
-    <Compile Include="src\main\csharp\Transactions\RecoveryFileLogger.cs" />
-    <Compile Include="src\main\csharp\Transactions\RecoveryFileLoggerFactory.cs" />
-    <Compile Include="src\main\csharp\Transactions\RecoveryLoggerFactoryAttribute.cs" />
-    <Compile Include="src\main\csharp\Transport\ActiveMQTransportFactoryAttribute.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\AbstractDiscoveryAgent.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\ActiveMQDiscoveryAgentFactoryAttribute.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\DiscoveredServiceData.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\DiscoveryAgentFactory.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\DiscoveryTransport.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\DiscoveryTransportFactory.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\http\HttpDiscoveryAgent.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\http\HttpDiscoveryAgentFactory.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\IDiscoveryAgent.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\IDiscoveryAgentFactory.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\Multicast\MulticastDiscoveryAgent.cs" />
-    <Compile Include="src\main\csharp\Transport\Discovery\Multicast\MulticastDiscoveryAgentFactory.cs" />
-    <Compile Include="src\main\csharp\Transport\Failover\BackupTransport.cs" />
-    <Compile Include="src\main\csharp\Transport\Failover\FailoverTransport.cs" />
-    <Compile Include="src\main\csharp\Transport\Failover\FailoverTransportFactory.cs" />
-    <Compile Include="src\main\csharp\Transport\FutureResponse.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Transport\ICompositeTransport.cs" />
-    <Compile Include="src\main\csharp\Transport\InactivityMonitor.cs" />
-    <Compile Include="src\main\csharp\Transport\ITransport.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Transport\ITransportFactory.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Transport\IWireFormat.cs" />
-    <Compile Include="src\main\csharp\Transport\LoggingTransport.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Transport\Mock\IResponseBuilder.cs" />
-    <Compile Include="src\main\csharp\Transport\Mock\MockTransport.cs" />
-    <Compile Include="src\main\csharp\Transport\Mock\MockTransportFactory.cs" />
-    <Compile Include="src\main\csharp\Transport\Mock\OpenWireResponseBuilder.cs" />
-    <Compile Include="src\main\csharp\Transport\MutexTransport.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Transport\ResponseCorrelator.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Transport\Tcp\SslTransport.cs" />
-    <Compile Include="src\main\csharp\Transport\Tcp\SslTransportFactory.cs" />
-    <Compile Include="src\main\csharp\Transport\Tcp\TcpTransport.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Transport\Tcp\TcpTransportFactory.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Transport\TransportFactory.cs" />
-    <Compile Include="src\main\csharp\Transport\TransportFilter.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Transport\WireFormatNegotiator.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="src\main\csharp\Util\ActiveMQMessageAudit.cs" />
-    <Compile Include="src\main\csharp\Util\ActiveMQMessageTransformation.cs" />
-    <Compile Include="src\main\csharp\Util\AdvisorySupport.cs" />
-    <Compile Include="src\main\csharp\Util\BitArray.cs" />
-    <Compile Include="src\main\csharp\Util\BitArrayBin.cs" />
-    <Compile Include="src\main\csharp\Util\ConnectionAudit.cs" />
-    <Compile Include="src\main\csharp\Util\FactoryAttribute.cs" />
-    <Compile Include="src\main\csharp\Util\FactoryFinder.cs" />
-    <Compile Include="src\main\csharp\Util\FifoMessageDispatchChannel.cs" />
-    <Compile Include="src\main\csharp\Util\IdGenerator.cs" />
-    <Compile Include="src\main\csharp\Util\IntrospectionSupport.cs" />
-    <Compile Include="src\main\csharp\Util\ISuspendable.cs" />
-    <Compile Include="src\main\csharp\Util\LRUCache.cs" />
-    <Compile Include="src\main\csharp\Util\MemoryUsage.cs" />
-    <Compile Include="src\main\csharp\Util\MessageDispatchChannel.cs" />
-    <Compile Include="src\main\csharp\Util\ServiceStopper.cs" />
-    <Compile Include="src\main\csharp\Util\SimplePriorityMessageDispatchChannel.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="LICENSE.txt">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-    <Content Include="NOTICE.txt">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Content>
-  </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="keyfile\NMSKey.snk" />
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
-  <PropertyGroup>
-    <PostBuildEvent>cd $(ProjectDir)
-nant -nologo -q install-all -D:compile.skip=true</PostBuildEvent>
-    <PreBuildEvent>cd $(ProjectDir)
-nant -nologo download-vendor -D:vendor.build.config=$(ConfigurationName) -D:vendor.build.framework=net-2.0</PreBuildEvent>
-  </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/vs2008-activemq.sln b/vs2008-activemq.sln
deleted file mode 100644
index 3c8a608..0000000
--- a/vs2008-activemq.sln
+++ /dev/null
@@ -1,30 +0,0 @@
-

-Microsoft Visual Studio Solution File, Format Version 10.00

-# Visual Studio 2008

-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vs2008-activemq", "vs2008-activemq.csproj", "{08321F42-4B3D-4815-B592-95962BAC3B9F}"

-EndProject

-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vs2008-activemq-test", "vs2008-activemq-test.csproj", "{EB943C69-2C9B-45E7-B95B-FB916E7057ED}"

-EndProject

-Global

-	GlobalSection(SubversionScc) = preSolution

-		Svn-Managed = True

-		Manager = AnkhSVN - Subversion Support for Visual Studio

-	EndGlobalSection

-	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		Debug|Any CPU = Debug|Any CPU

-		Release|Any CPU = Release|Any CPU

-	EndGlobalSection

-	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{08321F42-4B3D-4815-B592-95962BAC3B9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

-		{08321F42-4B3D-4815-B592-95962BAC3B9F}.Debug|Any CPU.Build.0 = Debug|Any CPU

-		{08321F42-4B3D-4815-B592-95962BAC3B9F}.Release|Any CPU.ActiveCfg = Release|Any CPU

-		{08321F42-4B3D-4815-B592-95962BAC3B9F}.Release|Any CPU.Build.0 = Release|Any CPU

-		{EB943C69-2C9B-45E7-B95B-FB916E7057ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

-		{EB943C69-2C9B-45E7-B95B-FB916E7057ED}.Debug|Any CPU.Build.0 = Debug|Any CPU

-		{EB943C69-2C9B-45E7-B95B-FB916E7057ED}.Release|Any CPU.ActiveCfg = Release|Any CPU

-		{EB943C69-2C9B-45E7-B95B-FB916E7057ED}.Release|Any CPU.Build.0 = Release|Any CPU

-	EndGlobalSection

-	GlobalSection(SolutionProperties) = preSolution

-		HideSolutionNode = FALSE

-	EndGlobalSection

-EndGlobal