https://issues.apache.org/jira/browse/AMQNET-444
https://issues.apache.org/jira/browse/AMQNET-443

diff --git a/src/main/csharp/Commands/ConsumerInfo.cs b/src/main/csharp/Commands/ConsumerInfo.cs
index 79ab9cd..94f9fcb 100644
--- a/src/main/csharp/Commands/ConsumerInfo.cs
+++ b/src/main/csharp/Commands/ConsumerInfo.cs
@@ -40,6 +40,7 @@
         int maximumPendingMessageLimit;
         bool dispatchAsync;
         string selector;
+        string clientId;
         string subscriptionName;
         bool noLocal;
         bool exclusive;
@@ -81,6 +82,7 @@
                 "MaximumPendingMessageLimit = " + MaximumPendingMessageLimit + ", " + 
                 "DispatchAsync = " + DispatchAsync + ", " + 
                 "Selector = " + Selector + ", " + 
+                "ClientId = " + ClientId + ", " + 
                 "SubscriptionName = " + SubscriptionName + ", " + 
                 "NoLocal = " + NoLocal + ", " + 
                 "Exclusive = " + Exclusive + ", " + 
@@ -136,6 +138,12 @@
             set { this.selector = value; }
         }
 
+        public string ClientId
+        {
+            get { return clientId; }
+            set { this.clientId = value; }
+        }
+
         public string SubscriptionName
         {
             get { return subscriptionName; }
diff --git a/src/main/csharp/Commands/Message.cs b/src/main/csharp/Commands/Message.cs
index 1668bf0..4531622 100644
--- a/src/main/csharp/Commands/Message.cs
+++ b/src/main/csharp/Commands/Message.cs
@@ -65,6 +65,7 @@
         BrokerId[] cluster;
         long brokerInTime;
         long brokerOutTime;
+        bool jMSXGroupFirstForConsumer;
 
         private bool readOnlyMsgProperties;
         private bool readOnlyMsgBody;
@@ -142,7 +143,8 @@
                 "Droppable = " + Droppable + ", " + 
                 "Cluster = " + Cluster + ", " + 
                 "BrokerInTime = " + BrokerInTime + ", " + 
-                "BrokerOutTime = " + BrokerOutTime + " ]";
+                "BrokerOutTime = " + BrokerOutTime + ", " + 
+                "JMSXGroupFirstForConsumer = " + JMSXGroupFirstForConsumer + " ]";
         }
 
         public virtual int Size()
@@ -351,6 +353,12 @@
             set { this.brokerOutTime = value; }
         }
 
+        public bool JMSXGroupFirstForConsumer
+        {
+            get { return jMSXGroupFirstForConsumer; }
+            set { this.jMSXGroupFirstForConsumer = value; }
+        }
+
         public virtual bool ReadOnlyProperties
         {
             get { return this.readOnlyMsgProperties; }
diff --git a/src/main/csharp/Commands/MessageId.cs b/src/main/csharp/Commands/MessageId.cs
index 3938c10..ff0ed59 100644
--- a/src/main/csharp/Commands/MessageId.cs
+++ b/src/main/csharp/Commands/MessageId.cs
@@ -32,6 +32,7 @@
     {
         public const byte ID_MESSAGEID = 110;
 
+        string textView;
         ProducerId producerId;
         long producerSequenceId;
         long brokerSequenceId;
@@ -74,7 +75,21 @@
         {
             if(key == null) 
             {
-                key = producerId.ToString() + ":" + producerSequenceId + ":" + brokerSequenceId;
+                if (!String.IsNullOrEmpty(textView))
+                {
+                    if (textView.StartsWith("ID:"))
+                    {
+                        key = textView;
+                    }
+                    else
+                    {
+                        key = "ID:" + textView;
+                    }
+                }
+                else
+                {
+                    key = producerId.ToString() + ":" + producerSequenceId + ":" + brokerSequenceId;
+                }
             }
             
             return key;
@@ -97,6 +112,12 @@
             producerId = new ProducerId(messageKey);
         }
 
+        public string TextView
+        {
+            get { return textView; }
+            set { this.textView = value; }
+        }
+
         public ProducerId ProducerId
         {
             get { return producerId; }
@@ -119,6 +140,7 @@
         {
             int answer = 0;
 
+            answer = (answer * 37) + HashCode(TextView);
             answer = (answer * 37) + HashCode(ProducerId);
             answer = (answer * 37) + HashCode(ProducerSequenceId);
             answer = (answer * 37) + HashCode(BrokerSequenceId);
@@ -138,6 +160,10 @@
 
         public virtual bool Equals(MessageId that)
         {
+            if(!Equals(this.TextView, that.TextView))
+            {
+                return false;
+            }
             if(!Equals(this.ProducerId, that.ProducerId))
             {
                 return false;
diff --git a/src/main/csharp/Commands/NetworkBridgeFilter.cs b/src/main/csharp/Commands/NetworkBridgeFilter.cs
index d40f90e..766f633 100644
--- a/src/main/csharp/Commands/NetworkBridgeFilter.cs
+++ b/src/main/csharp/Commands/NetworkBridgeFilter.cs
@@ -31,8 +31,9 @@
     {
         public const byte ID_NETWORKBRIDGEFILTER = 91;
 
-        int networkTTL;
         BrokerId networkBrokerId;
+        int messageTTL;
+        int consumerTTL;
 
         ///
         /// <summery>
@@ -54,14 +55,9 @@
         public override string ToString()
         {
             return GetType().Name + "[ " + 
-                "NetworkTTL = " + NetworkTTL + ", " + 
-                "NetworkBrokerId = " + NetworkBrokerId + " ]";
-        }
-
-        public int NetworkTTL
-        {
-            get { return networkTTL; }
-            set { this.networkTTL = value; }
+                "NetworkBrokerId = " + NetworkBrokerId + ", " + 
+                "MessageTTL = " + MessageTTL + ", " + 
+                "ConsumerTTL = " + ConsumerTTL + " ]";
         }
 
         public BrokerId NetworkBrokerId
@@ -70,6 +66,18 @@
             set { this.networkBrokerId = value; }
         }
 
+        public int MessageTTL
+        {
+            get { return messageTTL; }
+            set { this.messageTTL = value; }
+        }
+
+        public int ConsumerTTL
+        {
+            get { return consumerTTL; }
+            set { this.consumerTTL = value; }
+        }
+
     };
 }
 
diff --git a/src/main/csharp/Commands/TransactionInfo.cs b/src/main/csharp/Commands/TransactionInfo.cs
index b7dbe18..4e71710 100644
--- a/src/main/csharp/Commands/TransactionInfo.cs
+++ b/src/main/csharp/Commands/TransactionInfo.cs
@@ -105,7 +105,7 @@
         /// <summery>
         ///  Allows a Visitor to visit this command and return a response to the
         ///  command based on the command type being visited.  The command will call
-        ///  the proper ProcessXXX method in the visitor.
+        ///  the proper processXXX method in the visitor.
         /// </summery>
         ///
         public override Response Visit(ICommandVisitor visitor)
diff --git a/src/main/csharp/Commands/XATransactionId.cs b/src/main/csharp/Commands/XATransactionId.cs
index 171f8bb..df7536b 100644
--- a/src/main/csharp/Commands/XATransactionId.cs
+++ b/src/main/csharp/Commands/XATransactionId.cs
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+using System;
 
 namespace Apache.NMS.ActiveMQ.Commands
 {
@@ -54,10 +55,10 @@
         ///
         public override string ToString()
         {
-            return GetType().Name + "[ " + 
-                "FormatId = " + FormatId + ", " + 
-                "GlobalTransactionId = " + GlobalTransactionId ?? System.Text.ASCIIEncoding.ASCII.GetString(GlobalTransactionId) + ", " + 
-                "BranchQualifier = " + BranchQualifier ?? System.Text.ASCIIEncoding.ASCII.GetString(BranchQualifier) + " ]";
+            return GetType().Name + "[ " +
+                "FormatId = " + FormatId + ", " +
+                "GlobalTransactionId = " + BitConverter.ToString(GlobalTransactionId).Replace("-", string.Empty) + ", " +
+                "BranchQualifier = " + System.Text.ASCIIEncoding.ASCII.GetString(BranchQualifier) + " ]";
         }
 
         public int FormatId
diff --git a/src/main/csharp/MessageConsumer.cs b/src/main/csharp/MessageConsumer.cs
index 3e4648f..3f9fd4d 100755
--- a/src/main/csharp/MessageConsumer.cs
+++ b/src/main/csharp/MessageConsumer.cs
@@ -139,6 +139,7 @@
 			this.info.Retroactive = session.Retroactive;
 			this.info.Exclusive = session.Exclusive;
 			this.info.Priority = session.Priority;
+			this.info.ClientId = session.Connection.ClientId;
 
 			// If the destination contained a URI query, then use it to set public properties
 			// on the ConsumerInfo
diff --git a/src/main/csharp/NetTxTransactionContext.cs b/src/main/csharp/NetTxTransactionContext.cs
index 0481173..e5869a2 100644
--- a/src/main/csharp/NetTxTransactionContext.cs
+++ b/src/main/csharp/NetTxTransactionContext.cs
@@ -1,611 +1,611 @@
-/*

- * 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.Threading;

-using System.Transactions;

-using Apache.NMS.ActiveMQ.Commands;

-using Apache.NMS.ActiveMQ.Transactions;

-using Apache.NMS.Util;

-

-namespace Apache.NMS.ActiveMQ

-{

-    public sealed class NetTxTransactionContext : TransactionContext, ISinglePhaseNotification

-    {

-        private const int XA_OK = 0;

-        private const int XA_READONLY = 3;

-

-        private Enlistment currentEnlistment;

-

-        public NetTxTransactionContext(Session session) : base(session)

-        {

-        }

-

-        public override bool InLocalTransaction

-        {

-            get { return this.transactionId != null && this.currentEnlistment == null; }

-        }

-

-        public override void Begin()

-        {

-            throw new IllegalStateException("Local Transactions not supported in NetTx resources");

-        }

-

-        public override void Commit()

-        {

-            throw new IllegalStateException("Local Transactions not supported in NetTx resources");

-        }

-

-        public override void Rollback()

-        {

-            throw new IllegalStateException("Local Transactions not supported in NetTx resources");

-        }

-

-        #region Transaction Members used when dealing with .NET System Transactions.

-

-        // When DTC calls prepare we must then wait for either the TX to commit, rollback or

-        // be canceled because its in doubt.

-        private readonly ManualResetEvent dtcControlEvent = new ManualResetEvent(true);

-

-        // Once the DTC calls prepare we lock this object and don't unlock it again until

-        // the TX has either completed or terminated, the users of this class should use

-        // this sync point when the TX is a DTC version as opposed to a local one.

-        private readonly object syncObject = new Mutex();

-

-        public enum TxState

-        {

-            None = 0, Active = 1, Pending = 2

-        }

-

-        private TxState netTxState = TxState.None;

-

-        public object SyncRoot

-        {

-            get { return this.syncObject; }

-        }

-

-        public bool InNetTransaction

-        {

-            get { return this.transactionId != null && this.transactionId is XATransactionId; }

-        }

-

-        public TxState NetTxState

-        {

-            get

-            {

-                return this.netTxState;

-            }

-        }

-

-        public WaitHandle DtcWaitHandle

-        {

-            get { return dtcControlEvent; }

-        }

-

-        public void Begin(Transaction transaction)

-        {

-            lock (syncObject)

-            {

-                dtcControlEvent.Reset();

-

-                Tracer.Debug("Begin notification received");

-

-                if (InNetTransaction)

-                {

-                    throw new TransactionInProgressException("A Transaction is already in Progress");

-                }

-

-                try

-                {

-                    Guid rmId = ResourceManagerGuid;

-

-                    // Enlist this object in the transaction.

-                    this.currentEnlistment =

-                        transaction.EnlistDurable(rmId, this, EnlistmentOptions.None);

-

-                    // In case of a exception in the current method the transaction will be rolled back.

-                    // Until Begin Transaction is completed we consider to be in a rollback scenario.

-                    this.netTxState = TxState.Pending;

-

-                    Tracer.Debug("Enlisted in Durable Transaction with RM Id: " + rmId);

-

-                    TransactionInformation txInfo = transaction.TransactionInformation;

-

-                    XATransactionId xaId = new XATransactionId();

-                    this.transactionId = xaId;

-

-                    if (txInfo.DistributedIdentifier != Guid.Empty)

-                    {

-                        xaId.GlobalTransactionId = txInfo.DistributedIdentifier.ToByteArray();

-                        xaId.BranchQualifier = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString());

-                    }

-                    else

-                    {

-                        xaId.GlobalTransactionId = Encoding.UTF8.GetBytes(txInfo.LocalIdentifier);

-                        xaId.BranchQualifier = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString());

-                    }

-

-                    // Now notify the broker that a new XA'ish transaction has started.

-                    TransactionInfo info = new TransactionInfo();

-                    info.ConnectionId = this.connection.ConnectionId;

-                    info.TransactionId = this.transactionId;

-                    info.Type = (int)TransactionType.Begin;

-

-                    this.session.Connection.Oneway(info);

-

-                    // Begin Transaction is completed successfully. Change to transaction active state now.

-                    this.netTxState = TxState.Active;

-

-                    SignalTransactionStarted();

-

-                    if (Tracer.IsDebugEnabled)

-                    {

-                        Tracer.Debug("Began XA'ish Transaction:" + xaId.GlobalTransactionId);

-                    }

-                }

-                catch (Exception)

-                {

-                    // When in pending state the rollback will signal that a new transaction can be started. Otherwise do it here.

-                    if (netTxState != TxState.Pending)

-                    {

-                        netTxState = TxState.None;

-                        dtcControlEvent.Set();

-                    }

-                    throw;

-                }

-            }

-        }

-

-        public void Prepare(PreparingEnlistment preparingEnlistment)

-        {

-            lock (this.syncObject)

-            {

-                this.netTxState = TxState.Pending;

-

-                try

-                {

-                    Tracer.Debug("Prepare notification received for TX id: " + this.transactionId);

-

-                    BeforeEnd();

-

-                    // Before sending the request to the broker, log the recovery bits, if

-                    // this fails we can't prepare and the TX should be rolled back.

-                    RecoveryLogger.LogRecoveryInfo(this.transactionId as XATransactionId,

-                                                   preparingEnlistment.RecoveryInformation());

-

-                    // Inform the broker that work on the XA'sh TX Branch is complete.

-                    TransactionInfo info = new TransactionInfo();

-                    info.ConnectionId = this.connection.ConnectionId;

-                    info.TransactionId = this.transactionId;

-                    info.Type = (int)TransactionType.End;

-

-                    this.connection.CheckConnected();

-                    this.connection.SyncRequest(info);

-

-                    // Prepare the Transaction for commit.

-                    info.Type = (int)TransactionType.Prepare;

-                    IntegerResponse response = (IntegerResponse)this.connection.SyncRequest(info);

-                    if (response.Result == XA_READONLY)

-                    {

-                        Tracer.Debug("Transaction Prepare done and doesn't need a commit, TX id: " + this.transactionId);

-

-                        this.transactionId = null;

-                        this.currentEnlistment = null;

-

-                        // Read Only means there's nothing to recover because there was no

-                        // change on the broker.

-                        RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);

-

-                        // if server responds that nothing needs to be done, then reply done.

-                        // otherwise the DTC will call Commit or Rollback but another transaction

-                        // can already be in progress and this one would be commited or rolled back 

-                        // immediately.

-                        preparingEnlistment.Done();

-

-                        // Done so commit won't be called.

-                        AfterCommit();

-

-                        // A Read-Only TX is considered closed at this point, DTC won't call us again.

-                        this.dtcControlEvent.Set();

-                    }

-                    else

-                    {

-                        Tracer.Debug("Transaction Prepare succeeded TX id: " + this.transactionId);

-

-                        // If work finished correctly, reply prepared

-                        preparingEnlistment.Prepared();

-                    }

-                }

-                catch (Exception ex)

-                {

-                    Tracer.DebugFormat("Transaction[{0}] Prepare failed with error: {1}",

-                                       this.transactionId, ex.Message);

-

-                    AfterRollback();

-                    preparingEnlistment.ForceRollback();

-                    try

-                    {

-                        this.connection.OnException(ex);

-                    }

-                    catch (Exception error)

-                    {

-                        Tracer.Error(error.ToString());

-                    }

-

-                    this.currentEnlistment = null;

-                    this.transactionId = null;

-                    this.netTxState = TxState.None;

-                    this.dtcControlEvent.Set();

-                }

-            }

-        }

-

-        public void Commit(Enlistment enlistment)

-        {

-            lock (this.syncObject)

-            {

-                try

-                {

-                    Tracer.Debug("Commit notification received for TX id: " + this.transactionId);

-

-                    if (this.transactionId != null)

-                    {

-                        // Now notify the broker that a new XA'ish transaction has completed.

-                        TransactionInfo info = new TransactionInfo();

-                        info.ConnectionId = this.connection.ConnectionId;

-                        info.TransactionId = this.transactionId;

-                        info.Type = (int)TransactionType.CommitTwoPhase;

-

-                        this.connection.CheckConnected();

-                        this.connection.SyncRequest(info);

-

-                        Tracer.Debug("Transaction Commit Done TX id: " + this.transactionId);

-

-                        RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);

-

-                        // if server responds that nothing needs to be done, then reply done.

-                        enlistment.Done();

-

-                        AfterCommit();

-                    }

-                }

-                catch (Exception ex)

-                {

-                    Tracer.DebugFormat("Transaction[{0}] Commit failed with error: {1}",

-                                       this.transactionId, ex.Message);

-                    try

-                    {

-                        this.connection.OnException(ex);

-                    }

-                    catch (Exception error)

-                    {

-                        Tracer.Error(error.ToString());

-                    }

-                }

-                finally

-                {

-                    this.currentEnlistment = null;

-                    this.transactionId = null;

-                    this.netTxState = TxState.None;

-

-                    CountDownLatch latch = this.recoveryComplete;

-                    if (latch != null)

-                    {

-                        latch.countDown();

-                    }

-

-                    this.dtcControlEvent.Set();

-                }

-            }

-        }

-

-        public void SinglePhaseCommit(SinglePhaseEnlistment enlistment)

-        {

-            lock (this.syncObject)

-            {

-                try

-                {

-                    Tracer.Debug("Single Phase Commit notification received for TX id: " + this.transactionId);

-

-                    if (this.transactionId != null)

-                    {

-                        BeforeEnd();

-

-                        // Now notify the broker that a new XA'ish transaction has completed.

-                        TransactionInfo info = new TransactionInfo();

-                        info.ConnectionId = this.connection.ConnectionId;

-                        info.TransactionId = this.transactionId;

-                        info.Type = (int)TransactionType.CommitOnePhase;

-

-                        this.connection.CheckConnected();

-                        this.connection.SyncRequest(info);

-

-                        Tracer.Debug("Transaction Single Phase Commit Done TX id: " + this.transactionId);

-

-                        // if server responds that nothing needs to be done, then reply done.

-                        enlistment.Done();

-

-                        AfterCommit();

-                    }

-                }

-                catch (Exception ex)

-                {

-                    Tracer.DebugFormat("Transaction[{0}] Single Phase Commit failed with error: {1}",

-                                       this.transactionId, ex.Message);

-                    AfterRollback();

-                    enlistment.Done();

-                    try

-                    {

-                        this.connection.OnException(ex);

-                    }

-                    catch (Exception error)

-                    {

-                        Tracer.Error(error.ToString());

-                    }

-                }

-                finally

-                {

-                    this.currentEnlistment = null;

-                    this.transactionId = null;

-                    this.netTxState = TxState.None;

-

-                    this.dtcControlEvent.Set();

-                }

-            }

-        }

-

-        public void Rollback(Enlistment enlistment)

-        {

-            lock (this.syncObject)

-            {

-                try

-                {

-                    Tracer.Debug("Rollback notification received for TX id: " + this.transactionId);

-

-                    if (this.transactionId != null)

-                    {

-                        BeforeEnd();

-

-                        // Now notify the broker that a new XA'ish transaction has started.

-                        TransactionInfo info = new TransactionInfo();

-                        info.ConnectionId = this.connection.ConnectionId;

-                        info.TransactionId = this.transactionId;

-                        info.Type = (int)TransactionType.End;

-

-                        this.connection.CheckConnected();

-                        this.connection.SyncRequest(info);

-

-                        info.Type = (int)TransactionType.Rollback;

-                        this.connection.CheckConnected();

-                        this.connection.SyncRequest(info);

-

-                        Tracer.Debug("Transaction Rollback Done TX id: " + this.transactionId);

-

-                        RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);

-

-                        // if server responds that nothing needs to be done, then reply done.

-                        enlistment.Done();

-

-                        AfterRollback();

-                    }

-                }

-                catch (Exception ex)

-                {

-                    Tracer.DebugFormat("Transaction[{0}] Rollback failed with error: {1}",

-                                       this.transactionId, ex.Message);

-                    AfterRollback();

-                    try

-                    {

-                        this.connection.OnException(ex);

-                    }

-                    catch (Exception error)

-                    {

-                        Tracer.Error(error.ToString());

-                    }

-                }

-                finally

-                {

-                    this.currentEnlistment = null;

-                    this.transactionId = null;

-                    this.netTxState = TxState.None;

-

-                    CountDownLatch latch = this.recoveryComplete;

-                    if (latch != null)

-                    {

-                        latch.countDown();

-                    }

-

-                    this.dtcControlEvent.Set();

-                }

-            }

-        }

-

-        public void InDoubt(Enlistment enlistment)

-        {

-            lock (syncObject)

-            {

-                try

-                {

-                    Tracer.Debug("In Doubt notification received for TX id: " + this.transactionId);

-

-                    BeforeEnd();

-

-                    // Now notify the broker that Rollback should be performed.

-                    TransactionInfo info = new TransactionInfo();

-                    info.ConnectionId = this.connection.ConnectionId;

-                    info.TransactionId = this.transactionId;

-                    info.Type = (int)TransactionType.End;

-

-                    this.connection.CheckConnected();

-                    this.connection.SyncRequest(info);

-

-                    info.Type = (int)TransactionType.Rollback;

-                    this.connection.CheckConnected();

-                    this.connection.SyncRequest(info);

-

-                    Tracer.Debug("InDoubt Transaction Rollback Done TX id: " + this.transactionId);

-

-                    RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);

-

-                    // if server responds that nothing needs to be done, then reply done.

-                    enlistment.Done();

-

-                    AfterRollback();

-                }

-                finally

-                {

-                    this.currentEnlistment = null;

-                    this.transactionId = null;

-                    this.netTxState = TxState.None;

-

-                    CountDownLatch latch = this.recoveryComplete;

-                    if (latch != null)

-                    {

-                        latch.countDown();

-                    }

-

-                    this.dtcControlEvent.Set();

-                }

-            }

-        }

-

-        #endregion

-

-        #region Distributed Transaction Recovery Bits

-

-        private volatile CountDownLatch recoveryComplete;

-

-        /// <summary>

-        /// Should be called from NetTxSession when created to check if any TX

-        /// data is stored for recovery and whether the Broker has matching info

-        /// stored.  If an Transaction is found that belongs to this client and is

-        /// still alive on the Broker it will be recovered, otherwise the stored 

-        /// data should be cleared.

-        /// </summary>

-        public void InitializeDtcTxContext()

-        {

-            // initialize the logger with the current Resource Manager Id

-            RecoveryLogger.Initialize(ResourceManagerId);

-

-            KeyValuePair<XATransactionId, byte[]>[] localRecoverables = RecoveryLogger.GetRecoverables();

-            if (localRecoverables.Length == 0)

-            {

-                Tracer.Debug("Did not detect any open DTC transaction records on disk.");

-                // No local data so anything stored on the broker can't be recovered here.

-                return;

-            }

-

-            XATransactionId[] recoverables = TryRecoverBrokerTXIds();

-            if (recoverables.Length == 0)

-            {

-                Tracer.Debug("Did not detect any recoverable transactions at Broker.");

-                // Broker has no recoverable data so nothing to do here, delete the 

-                // old recovery log as its stale.

-                RecoveryLogger.Purge();

-                return;

-            }

-

-            List<KeyValuePair<XATransactionId, byte[]>> matches = new List<KeyValuePair<XATransactionId, byte[]>>();

-

-            foreach (XATransactionId recoverable in recoverables)

-            {

-                foreach (KeyValuePair<XATransactionId, byte[]> entry in localRecoverables)

-                {

-                    if (entry.Key.Equals(recoverable))

-                    {

-                        Tracer.DebugFormat("Found a matching TX on Broker to stored Id: {0} reenlisting.", entry.Key);

-                        matches.Add(entry);

-                    }

-                }

-            }

-

-            if (matches.Count != 0)

-            {

-                this.recoveryComplete = new CountDownLatch(matches.Count);

-

-                foreach (KeyValuePair<XATransactionId, byte[]> recoverable in matches)

-                {

-                    this.transactionId = recoverable.Key;

-                    Tracer.Info("Reenlisting recovered TX with Id: " + this.transactionId);

-                    this.currentEnlistment =

-                        TransactionManager.Reenlist(ResourceManagerGuid, recoverable.Value, this);

-                }

-

-                this.recoveryComplete.await();

-                Tracer.Debug("All Recovered TX enlistments Reports complete, Recovery Complete.");

-                TransactionManager.RecoveryComplete(ResourceManagerGuid);

-                return;

-            }

-

-            // The old recovery information doesn't match what's on the broker so we

-            // should discard it as its stale now.

-            RecoveryLogger.Purge();

-        }

-

-        private XATransactionId[] TryRecoverBrokerTXIds()

-        {

-            Tracer.Debug("Checking for Recoverable Transactions on Broker.");

-

-            TransactionInfo info = new TransactionInfo();

-            info.ConnectionId = this.session.Connection.ConnectionId;

-            info.Type = (int)TransactionType.Recover;

-

-            this.connection.CheckConnected();

-            DataArrayResponse response = this.connection.SyncRequest(info) as DataArrayResponse;

-

-            if (response != null && response.Data.Length > 0)

-            {

-                Tracer.DebugFormat("Broker reports there are {0} recoverable XA Transactions", response.Data.Length);

-

-                List<XATransactionId> recovered = new List<XATransactionId>();

-

-                foreach (DataStructure ds in response.Data)

-                {

-                    XATransactionId xid = ds as XATransactionId;

-                    if (xid != null)

-                    {

-                        recovered.Add(xid);

-                    }

-                }

-

-                return recovered.ToArray();

-            }

-

-            return new XATransactionId[0];

-        }

-

-        #endregion

-

-        internal IRecoveryLogger RecoveryLogger

-        {

-            get { return (this.connection as NetTxConnection).RecoveryPolicy.RecoveryLogger; }

-        }

-

-        internal string ResourceManagerId

-        {

-            get { return (this.connection as NetTxConnection).ResourceManagerGuid.ToString(); }

-        }

-

-        internal Guid ResourceManagerGuid

-        {

-            get { return (this.connection as NetTxConnection).ResourceManagerGuid; }

-        }

-

-    }

-}

+/*
+ * 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.Threading;
+using System.Transactions;
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.ActiveMQ.Transactions;
+using Apache.NMS.Util;
+
+namespace Apache.NMS.ActiveMQ
+{
+    public sealed class NetTxTransactionContext : TransactionContext, ISinglePhaseNotification
+    {
+        private const int XA_OK = 0;
+        private const int XA_READONLY = 3;
+
+        private Enlistment currentEnlistment;
+
+        public NetTxTransactionContext(Session session) : base(session)
+        {
+        }
+
+        public override bool InLocalTransaction
+        {
+            get { return this.transactionId != null && this.currentEnlistment == null; }
+        }
+
+        public override void Begin()
+        {
+            throw new IllegalStateException("Local Transactions not supported in NetTx resources");
+        }
+
+        public override void Commit()
+        {
+            throw new IllegalStateException("Local Transactions not supported in NetTx resources");
+        }
+
+        public override void Rollback()
+        {
+            throw new IllegalStateException("Local Transactions not supported in NetTx resources");
+        }
+
+        #region Transaction Members used when dealing with .NET System Transactions.
+
+        // When DTC calls prepare we must then wait for either the TX to commit, rollback or
+        // be canceled because its in doubt.
+        private readonly ManualResetEvent dtcControlEvent = new ManualResetEvent(true);
+
+        // Once the DTC calls prepare we lock this object and don't unlock it again until
+        // the TX has either completed or terminated, the users of this class should use
+        // this sync point when the TX is a DTC version as opposed to a local one.
+        private readonly object syncObject = new Mutex();
+
+        public enum TxState
+        {
+            None = 0, Active = 1, Pending = 2
+        }
+
+        private TxState netTxState = TxState.None;
+
+        public object SyncRoot
+        {
+            get { return this.syncObject; }
+        }
+
+        public bool InNetTransaction
+        {
+            get { return this.transactionId != null && this.transactionId is XATransactionId; }
+        }
+
+        public TxState NetTxState
+        {
+            get
+            {
+                return this.netTxState;
+            }
+        }
+
+        public WaitHandle DtcWaitHandle
+        {
+            get { return dtcControlEvent; }
+        }
+
+        public void Begin(Transaction transaction)
+        {
+            lock (syncObject)
+            {
+                dtcControlEvent.Reset();
+
+                Tracer.Debug("Begin notification received");
+
+                if (InNetTransaction)
+                {
+                    throw new TransactionInProgressException("A Transaction is already in Progress");
+                }
+
+                try
+                {
+                    Guid rmId = ResourceManagerGuid;
+
+                    // Enlist this object in the transaction.
+                    this.currentEnlistment =
+                        transaction.EnlistDurable(rmId, this, EnlistmentOptions.None);
+
+                    // In case of a exception in the current method the transaction will be rolled back.
+                    // Until Begin Transaction is completed we consider to be in a rollback scenario.
+                    this.netTxState = TxState.Pending;
+
+                    Tracer.Debug("Enlisted in Durable Transaction with RM Id: " + rmId);
+
+                    TransactionInformation txInfo = transaction.TransactionInformation;
+
+                    XATransactionId xaId = new XATransactionId();
+                    this.transactionId = xaId;
+
+                    if (txInfo.DistributedIdentifier != Guid.Empty)
+                    {
+                        xaId.GlobalTransactionId = txInfo.DistributedIdentifier.ToByteArray();
+                        xaId.BranchQualifier = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString());
+                    }
+                    else
+                    {
+                        xaId.GlobalTransactionId = Encoding.UTF8.GetBytes(txInfo.LocalIdentifier);
+                        xaId.BranchQualifier = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString());
+                    }
+
+                    // Now notify the broker that a new XA'ish transaction has started.
+                    TransactionInfo info = new TransactionInfo();
+                    info.ConnectionId = this.connection.ConnectionId;
+                    info.TransactionId = this.transactionId;
+                    info.Type = (int)TransactionType.Begin;
+
+                    this.session.Connection.Oneway(info);
+
+                    // Begin Transaction is completed successfully. Change to transaction active state now.
+                    this.netTxState = TxState.Active;
+
+                    SignalTransactionStarted();
+
+                    if (Tracer.IsDebugEnabled)
+                    {
+                        Tracer.Debug("Began XA'ish Transaction:" + xaId);
+                    }
+                }
+                catch (Exception)
+                {
+                    // When in pending state the rollback will signal that a new transaction can be started. Otherwise do it here.
+                    if (netTxState != TxState.Pending)
+                    {
+                        netTxState = TxState.None;
+                        dtcControlEvent.Set();
+                    }
+                    throw;
+                }
+            }
+        }
+
+        public void Prepare(PreparingEnlistment preparingEnlistment)
+        {
+            lock (this.syncObject)
+            {
+                this.netTxState = TxState.Pending;
+
+                try
+                {
+                    Tracer.Debug("Prepare notification received for TX id: " + this.transactionId);
+
+                    BeforeEnd();
+
+                    // Before sending the request to the broker, log the recovery bits, if
+                    // this fails we can't prepare and the TX should be rolled back.
+                    RecoveryLogger.LogRecoveryInfo(this.transactionId as XATransactionId,
+                                                   preparingEnlistment.RecoveryInformation());
+
+                    // Inform the broker that work on the XA'sh TX Branch is complete.
+                    TransactionInfo info = new TransactionInfo();
+                    info.ConnectionId = this.connection.ConnectionId;
+                    info.TransactionId = this.transactionId;
+                    info.Type = (int)TransactionType.End;
+
+                    this.connection.CheckConnected();
+                    this.connection.SyncRequest(info);
+
+                    // Prepare the Transaction for commit.
+                    info.Type = (int)TransactionType.Prepare;
+                    IntegerResponse response = (IntegerResponse)this.connection.SyncRequest(info);
+                    if (response.Result == XA_READONLY)
+                    {
+                        Tracer.Debug("Transaction Prepare done and doesn't need a commit, TX id: " + this.transactionId);
+
+                        this.transactionId = null;
+                        this.currentEnlistment = null;
+
+                        // Read Only means there's nothing to recover because there was no
+                        // change on the broker.
+                        RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);
+
+                        // if server responds that nothing needs to be done, then reply done.
+                        // otherwise the DTC will call Commit or Rollback but another transaction
+                        // can already be in progress and this one would be commited or rolled back 
+                        // immediately.
+                        preparingEnlistment.Done();
+
+                        // Done so commit won't be called.
+                        AfterCommit();
+
+                        // A Read-Only TX is considered closed at this point, DTC won't call us again.
+                        this.dtcControlEvent.Set();
+                    }
+                    else
+                    {
+                        Tracer.Debug("Transaction Prepare succeeded TX id: " + this.transactionId);
+
+                        // If work finished correctly, reply prepared
+                        preparingEnlistment.Prepared();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    Tracer.DebugFormat("Transaction[{0}] Prepare failed with error: {1}",
+                                       this.transactionId, ex.Message);
+
+                    AfterRollback();
+                    preparingEnlistment.ForceRollback();
+                    try
+                    {
+                        this.connection.OnException(ex);
+                    }
+                    catch (Exception error)
+                    {
+                        Tracer.Error(error.ToString());
+                    }
+
+                    this.currentEnlistment = null;
+                    this.transactionId = null;
+                    this.netTxState = TxState.None;
+                    this.dtcControlEvent.Set();
+                }
+            }
+        }
+
+        public void Commit(Enlistment enlistment)
+        {
+            lock (this.syncObject)
+            {
+                try
+                {
+                    Tracer.Debug("Commit notification received for TX id: " + this.transactionId);
+
+                    if (this.transactionId != null)
+                    {
+                        // Now notify the broker that a new XA'ish transaction has completed.
+                        TransactionInfo info = new TransactionInfo();
+                        info.ConnectionId = this.connection.ConnectionId;
+                        info.TransactionId = this.transactionId;
+                        info.Type = (int)TransactionType.CommitTwoPhase;
+
+                        this.connection.CheckConnected();
+                        this.connection.SyncRequest(info);
+
+                        Tracer.Debug("Transaction Commit Done TX id: " + this.transactionId);
+
+                        RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);
+
+                        // if server responds that nothing needs to be done, then reply done.
+                        enlistment.Done();
+
+                        AfterCommit();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    Tracer.DebugFormat("Transaction[{0}] Commit failed with error: {1}",
+                                       this.transactionId, ex.Message);
+                    try
+                    {
+                        this.connection.OnException(ex);
+                    }
+                    catch (Exception error)
+                    {
+                        Tracer.Error(error.ToString());
+                    }
+                }
+                finally
+                {
+                    this.currentEnlistment = null;
+                    this.transactionId = null;
+                    this.netTxState = TxState.None;
+
+                    CountDownLatch latch = this.recoveryComplete;
+                    if (latch != null)
+                    {
+                        latch.countDown();
+                    }
+
+                    this.dtcControlEvent.Set();
+                }
+            }
+        }
+
+        public void SinglePhaseCommit(SinglePhaseEnlistment enlistment)
+        {
+            lock (this.syncObject)
+            {
+                try
+                {
+                    Tracer.Debug("Single Phase Commit notification received for TX id: " + this.transactionId);
+
+                    if (this.transactionId != null)
+                    {
+                        BeforeEnd();
+
+                        // Now notify the broker that a new XA'ish transaction has completed.
+                        TransactionInfo info = new TransactionInfo();
+                        info.ConnectionId = this.connection.ConnectionId;
+                        info.TransactionId = this.transactionId;
+                        info.Type = (int)TransactionType.CommitOnePhase;
+
+                        this.connection.CheckConnected();
+                        this.connection.SyncRequest(info);
+
+                        Tracer.Debug("Transaction Single Phase Commit Done TX id: " + this.transactionId);
+
+                        // if server responds that nothing needs to be done, then reply done.
+                        enlistment.Done();
+
+                        AfterCommit();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    Tracer.DebugFormat("Transaction[{0}] Single Phase Commit failed with error: {1}",
+                                       this.transactionId, ex.Message);
+                    AfterRollback();
+                    enlistment.Done();
+                    try
+                    {
+                        this.connection.OnException(ex);
+                    }
+                    catch (Exception error)
+                    {
+                        Tracer.Error(error.ToString());
+                    }
+                }
+                finally
+                {
+                    this.currentEnlistment = null;
+                    this.transactionId = null;
+                    this.netTxState = TxState.None;
+
+                    this.dtcControlEvent.Set();
+                }
+            }
+        }
+
+        public void Rollback(Enlistment enlistment)
+        {
+            lock (this.syncObject)
+            {
+                try
+                {
+                    Tracer.Debug("Rollback notification received for TX id: " + this.transactionId);
+
+                    if (this.transactionId != null)
+                    {
+                        BeforeEnd();
+
+                        // Now notify the broker that a new XA'ish transaction has started.
+                        TransactionInfo info = new TransactionInfo();
+                        info.ConnectionId = this.connection.ConnectionId;
+                        info.TransactionId = this.transactionId;
+                        info.Type = (int)TransactionType.End;
+
+                        this.connection.CheckConnected();
+                        this.connection.SyncRequest(info);
+
+                        info.Type = (int)TransactionType.Rollback;
+                        this.connection.CheckConnected();
+                        this.connection.SyncRequest(info);
+
+                        Tracer.Debug("Transaction Rollback Done TX id: " + this.transactionId);
+
+                        RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);
+
+                        // if server responds that nothing needs to be done, then reply done.
+                        enlistment.Done();
+
+                        AfterRollback();
+                    }
+                }
+                catch (Exception ex)
+                {
+                    Tracer.DebugFormat("Transaction[{0}] Rollback failed with error: {1}",
+                                       this.transactionId, ex.Message);
+                    AfterRollback();
+                    try
+                    {
+                        this.connection.OnException(ex);
+                    }
+                    catch (Exception error)
+                    {
+                        Tracer.Error(error.ToString());
+                    }
+                }
+                finally
+                {
+                    this.currentEnlistment = null;
+                    this.transactionId = null;
+                    this.netTxState = TxState.None;
+
+                    CountDownLatch latch = this.recoveryComplete;
+                    if (latch != null)
+                    {
+                        latch.countDown();
+                    }
+
+                    this.dtcControlEvent.Set();
+                }
+            }
+        }
+
+        public void InDoubt(Enlistment enlistment)
+        {
+            lock (syncObject)
+            {
+                try
+                {
+                    Tracer.Debug("In Doubt notification received for TX id: " + this.transactionId);
+
+                    BeforeEnd();
+
+                    // Now notify the broker that Rollback should be performed.
+                    TransactionInfo info = new TransactionInfo();
+                    info.ConnectionId = this.connection.ConnectionId;
+                    info.TransactionId = this.transactionId;
+                    info.Type = (int)TransactionType.End;
+
+                    this.connection.CheckConnected();
+                    this.connection.SyncRequest(info);
+
+                    info.Type = (int)TransactionType.Rollback;
+                    this.connection.CheckConnected();
+                    this.connection.SyncRequest(info);
+
+                    Tracer.Debug("InDoubt Transaction Rollback Done TX id: " + this.transactionId);
+
+                    RecoveryLogger.LogRecovered(this.transactionId as XATransactionId);
+
+                    // if server responds that nothing needs to be done, then reply done.
+                    enlistment.Done();
+
+                    AfterRollback();
+                }
+                finally
+                {
+                    this.currentEnlistment = null;
+                    this.transactionId = null;
+                    this.netTxState = TxState.None;
+
+                    CountDownLatch latch = this.recoveryComplete;
+                    if (latch != null)
+                    {
+                        latch.countDown();
+                    }
+
+                    this.dtcControlEvent.Set();
+                }
+            }
+        }
+
+        #endregion
+
+        #region Distributed Transaction Recovery Bits
+
+        private volatile CountDownLatch recoveryComplete;
+
+        /// <summary>
+        /// Should be called from NetTxSession when created to check if any TX
+        /// data is stored for recovery and whether the Broker has matching info
+        /// stored.  If an Transaction is found that belongs to this client and is
+        /// still alive on the Broker it will be recovered, otherwise the stored 
+        /// data should be cleared.
+        /// </summary>
+        public void InitializeDtcTxContext()
+        {
+            // initialize the logger with the current Resource Manager Id
+            RecoveryLogger.Initialize(ResourceManagerId);
+
+            KeyValuePair<XATransactionId, byte[]>[] localRecoverables = RecoveryLogger.GetRecoverables();
+            if (localRecoverables.Length == 0)
+            {
+                Tracer.Debug("Did not detect any open DTC transaction records on disk.");
+                // No local data so anything stored on the broker can't be recovered here.
+                return;
+            }
+
+            XATransactionId[] recoverables = TryRecoverBrokerTXIds();
+            if (recoverables.Length == 0)
+            {
+                Tracer.Debug("Did not detect any recoverable transactions at Broker.");
+                // Broker has no recoverable data so nothing to do here, delete the 
+                // old recovery log as its stale.
+                RecoveryLogger.Purge();
+                return;
+            }
+
+            List<KeyValuePair<XATransactionId, byte[]>> matches = new List<KeyValuePair<XATransactionId, byte[]>>();
+
+            foreach (XATransactionId recoverable in recoverables)
+            {
+                foreach (KeyValuePair<XATransactionId, byte[]> entry in localRecoverables)
+                {
+                    if (entry.Key.Equals(recoverable))
+                    {
+                        Tracer.DebugFormat("Found a matching TX on Broker to stored Id: {0} reenlisting.", entry.Key);
+                        matches.Add(entry);
+                    }
+                }
+            }
+
+            if (matches.Count != 0)
+            {
+                this.recoveryComplete = new CountDownLatch(matches.Count);
+
+                foreach (KeyValuePair<XATransactionId, byte[]> recoverable in matches)
+                {
+                    this.transactionId = recoverable.Key;
+                    Tracer.Info("Reenlisting recovered TX with Id: " + this.transactionId);
+                    this.currentEnlistment =
+                        TransactionManager.Reenlist(ResourceManagerGuid, recoverable.Value, this);
+                }
+
+                this.recoveryComplete.await();
+                Tracer.Debug("All Recovered TX enlistments Reports complete, Recovery Complete.");
+                TransactionManager.RecoveryComplete(ResourceManagerGuid);
+                return;
+            }
+
+            // The old recovery information doesn't match what's on the broker so we
+            // should discard it as its stale now.
+            RecoveryLogger.Purge();
+        }
+
+        private XATransactionId[] TryRecoverBrokerTXIds()
+        {
+            Tracer.Debug("Checking for Recoverable Transactions on Broker.");
+
+            TransactionInfo info = new TransactionInfo();
+            info.ConnectionId = this.session.Connection.ConnectionId;
+            info.Type = (int)TransactionType.Recover;
+
+            this.connection.CheckConnected();
+            DataArrayResponse response = this.connection.SyncRequest(info) as DataArrayResponse;
+
+            if (response != null && response.Data.Length > 0)
+            {
+                Tracer.DebugFormat("Broker reports there are {0} recoverable XA Transactions", response.Data.Length);
+
+                List<XATransactionId> recovered = new List<XATransactionId>();
+
+                foreach (DataStructure ds in response.Data)
+                {
+                    XATransactionId xid = ds as XATransactionId;
+                    if (xid != null)
+                    {
+                        recovered.Add(xid);
+                    }
+                }
+
+                return recovered.ToArray();
+            }
+
+            return new XATransactionId[0];
+        }
+
+        #endregion
+
+        internal IRecoveryLogger RecoveryLogger
+        {
+            get { return (this.connection as NetTxConnection).RecoveryPolicy.RecoveryLogger; }
+        }
+
+        internal string ResourceManagerId
+        {
+            get { return (this.connection as NetTxConnection).ResourceManagerGuid.ToString(); }
+        }
+
+        internal Guid ResourceManagerGuid
+        {
+            get { return (this.connection as NetTxConnection).ResourceManagerGuid; }
+        }
+
+    }
+}
diff --git a/src/main/csharp/OpenWire/OpenWireFormat.cs b/src/main/csharp/OpenWire/OpenWireFormat.cs
index 0b3565f..00205bf 100755
--- a/src/main/csharp/OpenWire/OpenWireFormat.cs
+++ b/src/main/csharp/OpenWire/OpenWireFormat.cs
@@ -59,7 +59,7 @@
             PreferredWireFormatInfo.MaxInactivityDuration = 30000;
             PreferredWireFormatInfo.MaxInactivityDurationInitialDelay = 10000;
             PreferredWireFormatInfo.CacheSize = 0;
-            PreferredWireFormatInfo.Version = 9;
+            PreferredWireFormatInfo.Version = 10;
 
             dataMarshallers = new BaseDataStreamMarshaller[256];
             Version = 1;
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs
new file mode 100644
index 0000000..207c3ae
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs
@@ -0,0 +1,124 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQBlobMessage
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQBlobMessage
+    /// </summary>
+    class ActiveMQBlobMessageMarshaller : ActiveMQMessageMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQBlobMessage();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQBlobMessage.ID_ACTIVEMQBLOBMESSAGE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ActiveMQBlobMessage info = (ActiveMQBlobMessage)o;
+            info.RemoteBlobUrl = TightUnmarshalString(dataIn, bs);
+            info.MimeType = TightUnmarshalString(dataIn, bs);
+            info.DeletedByBroker = bs.ReadBoolean();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ActiveMQBlobMessage info = (ActiveMQBlobMessage)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.RemoteBlobUrl, bs);
+            rc += TightMarshalString1(info.MimeType, bs);
+            bs.WriteBoolean(info.DeletedByBroker);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ActiveMQBlobMessage info = (ActiveMQBlobMessage)o;
+            TightMarshalString2(info.RemoteBlobUrl, dataOut, bs);
+            TightMarshalString2(info.MimeType, dataOut, bs);
+            bs.ReadBoolean();
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ActiveMQBlobMessage info = (ActiveMQBlobMessage)o;
+            info.RemoteBlobUrl = LooseUnmarshalString(dataIn);
+            info.MimeType = LooseUnmarshalString(dataIn);
+            info.DeletedByBroker = dataIn.ReadBoolean();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ActiveMQBlobMessage info = (ActiveMQBlobMessage)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.RemoteBlobUrl, dataOut);
+            LooseMarshalString(info.MimeType, dataOut);
+            dataOut.Write(info.DeletedByBroker);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs
new file mode 100644
index 0000000..0827f14
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQBytesMessage
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQBytesMessage
+    /// </summary>
+    class ActiveMQBytesMessageMarshaller : ActiveMQMessageMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQBytesMessage();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQBytesMessage.ID_ACTIVEMQBYTESMESSAGE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQDestinationMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQDestinationMarshaller.cs
new file mode 100644
index 0000000..6d51f00
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQDestinationMarshaller.cs
@@ -0,0 +1,99 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQDestination
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQDestination
+    /// </summary>
+    abstract class ActiveMQDestinationMarshaller : BaseDataStreamMarshaller
+    {
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ActiveMQDestination info = (ActiveMQDestination)o;
+            info.PhysicalName = TightUnmarshalString(dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ActiveMQDestination info = (ActiveMQDestination)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.PhysicalName, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ActiveMQDestination info = (ActiveMQDestination)o;
+            TightMarshalString2(info.PhysicalName, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ActiveMQDestination info = (ActiveMQDestination)o;
+            info.PhysicalName = LooseUnmarshalString(dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ActiveMQDestination info = (ActiveMQDestination)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.PhysicalName, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQMapMessageMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQMapMessageMarshaller.cs
new file mode 100644
index 0000000..5d47cef
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQMapMessageMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQMapMessage
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQMapMessage
+    /// </summary>
+    class ActiveMQMapMessageMarshaller : ActiveMQMessageMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQMapMessage();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQMapMessage.ID_ACTIVEMQMAPMESSAGE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQMessageMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQMessageMarshaller.cs
new file mode 100644
index 0000000..3c2725c
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQMessageMarshaller.cs
@@ -0,0 +1,127 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQMessage
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQMessage
+    /// </summary>
+    class ActiveMQMessageMarshaller : MessageMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQMessage();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQMessage.ID_ACTIVEMQMESSAGE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ActiveMQMessage info = (ActiveMQMessage)o;
+
+            info.BeforeUnmarshall(wireFormat);
+
+
+            info.AfterUnmarshall(wireFormat);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ActiveMQMessage info = (ActiveMQMessage)o;
+
+            info.BeforeMarshall(wireFormat);
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ActiveMQMessage info = (ActiveMQMessage)o;
+
+            info.AfterMarshall(wireFormat);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ActiveMQMessage info = (ActiveMQMessage)o;
+
+            info.BeforeUnmarshall(wireFormat);
+
+
+            info.AfterUnmarshall(wireFormat);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ActiveMQMessage info = (ActiveMQMessage)o;
+
+            info.BeforeMarshall(wireFormat);
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+
+            info.AfterMarshall(wireFormat);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs
new file mode 100644
index 0000000..7cc239c
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQObjectMessage
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQObjectMessage
+    /// </summary>
+    class ActiveMQObjectMessageMarshaller : ActiveMQMessageMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQObjectMessage();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQObjectMessage.ID_ACTIVEMQOBJECTMESSAGE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQQueueMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQQueueMarshaller.cs
new file mode 100644
index 0000000..91c3b3a
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQQueueMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQQueue
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQQueue
+    /// </summary>
+    class ActiveMQQueueMarshaller : ActiveMQDestinationMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQQueue();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQQueue.ID_ACTIVEMQQUEUE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs
new file mode 100644
index 0000000..95eb41c
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQStreamMessage
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQStreamMessage
+    /// </summary>
+    class ActiveMQStreamMessageMarshaller : ActiveMQMessageMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQStreamMessage();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQStreamMessage.ID_ACTIVEMQSTREAMMESSAGE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs
new file mode 100644
index 0000000..48f444a
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs
@@ -0,0 +1,85 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQTempDestination
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQTempDestination
+    /// </summary>
+    abstract class ActiveMQTempDestinationMarshaller : ActiveMQDestinationMarshaller
+    {
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTempQueueMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQTempQueueMarshaller.cs
new file mode 100644
index 0000000..2909fe8
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQTempQueueMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQTempQueue
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQTempQueue
+    /// </summary>
+    class ActiveMQTempQueueMarshaller : ActiveMQTempDestinationMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQTempQueue();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQTempQueue.ID_ACTIVEMQTEMPQUEUE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTempTopicMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQTempTopicMarshaller.cs
new file mode 100644
index 0000000..ec77db3
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQTempTopicMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQTempTopic
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQTempTopic
+    /// </summary>
+    class ActiveMQTempTopicMarshaller : ActiveMQTempDestinationMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQTempTopic();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQTempTopic.ID_ACTIVEMQTEMPTOPIC;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTextMessageMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQTextMessageMarshaller.cs
new file mode 100644
index 0000000..fed1e42
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQTextMessageMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQTextMessage
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQTextMessage
+    /// </summary>
+    class ActiveMQTextMessageMarshaller : ActiveMQMessageMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQTextMessage();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQTextMessage.ID_ACTIVEMQTEXTMESSAGE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTopicMarshaller.cs b/src/main/csharp/OpenWire/V10/ActiveMQTopicMarshaller.cs
new file mode 100644
index 0000000..ecd77ed
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ActiveMQTopicMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ActiveMQTopic
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ActiveMQTopic
+    /// </summary>
+    class ActiveMQTopicMarshaller : ActiveMQDestinationMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ActiveMQTopic();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ActiveMQTopic.ID_ACTIVEMQTOPIC;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/BaseCommandMarshaller.cs b/src/main/csharp/OpenWire/V10/BaseCommandMarshaller.cs
new file mode 100644
index 0000000..179d602
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/BaseCommandMarshaller.cs
@@ -0,0 +1,103 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for BaseCommand
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for BaseCommand
+    /// </summary>
+    abstract class BaseCommandMarshaller : BaseDataStreamMarshaller
+    {
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            BaseCommand info = (BaseCommand)o;
+            info.CommandId = dataIn.ReadInt32();
+            info.ResponseRequired = bs.ReadBoolean();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            BaseCommand info = (BaseCommand)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            bs.WriteBoolean(info.ResponseRequired);
+
+            return rc + 4;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            BaseCommand info = (BaseCommand)o;
+            dataOut.Write(info.CommandId);
+            bs.ReadBoolean();
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            BaseCommand info = (BaseCommand)o;
+            info.CommandId = dataIn.ReadInt32();
+            info.ResponseRequired = dataIn.ReadBoolean();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            BaseCommand info = (BaseCommand)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            dataOut.Write(info.CommandId);
+            dataOut.Write(info.ResponseRequired);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/BrokerIdMarshaller.cs b/src/main/csharp/OpenWire/V10/BrokerIdMarshaller.cs
new file mode 100644
index 0000000..1f476be
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/BrokerIdMarshaller.cs
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for BrokerId
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for BrokerId
+    /// </summary>
+    class BrokerIdMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new BrokerId();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return BrokerId.ID_BROKERID;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            BrokerId info = (BrokerId)o;
+            info.Value = TightUnmarshalString(dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            BrokerId info = (BrokerId)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.Value, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            BrokerId info = (BrokerId)o;
+            TightMarshalString2(info.Value, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            BrokerId info = (BrokerId)o;
+            info.Value = LooseUnmarshalString(dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            BrokerId info = (BrokerId)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.Value, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/BrokerInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/BrokerInfoMarshaller.cs
new file mode 100644
index 0000000..aa3e036
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/BrokerInfoMarshaller.cs
@@ -0,0 +1,191 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for BrokerInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for BrokerInfo
+    /// </summary>
+    class BrokerInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new BrokerInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return BrokerInfo.ID_BROKERINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            BrokerInfo info = (BrokerInfo)o;
+            info.BrokerId = (BrokerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.BrokerURL = TightUnmarshalString(dataIn, bs);
+
+            if (bs.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerInfo[] value = new BrokerInfo[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerInfo) TightUnmarshalNestedObject(wireFormat,dataIn, bs);
+                }
+                info.PeerBrokerInfos = value;
+            }
+            else {
+                info.PeerBrokerInfos = null;
+            }
+            info.BrokerName = TightUnmarshalString(dataIn, bs);
+            info.SlaveBroker = bs.ReadBoolean();
+            info.MasterBroker = bs.ReadBoolean();
+            info.FaultTolerantConfiguration = bs.ReadBoolean();
+            info.DuplexConnection = bs.ReadBoolean();
+            info.NetworkConnection = bs.ReadBoolean();
+            info.ConnectionId = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.BrokerUploadUrl = TightUnmarshalString(dataIn, bs);
+            info.NetworkProperties = TightUnmarshalString(dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            BrokerInfo info = (BrokerInfo)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.BrokerId, bs);
+            rc += TightMarshalString1(info.BrokerURL, bs);
+            rc += TightMarshalObjectArray1(wireFormat, info.PeerBrokerInfos, bs);
+            rc += TightMarshalString1(info.BrokerName, bs);
+            bs.WriteBoolean(info.SlaveBroker);
+            bs.WriteBoolean(info.MasterBroker);
+            bs.WriteBoolean(info.FaultTolerantConfiguration);
+            bs.WriteBoolean(info.DuplexConnection);
+            bs.WriteBoolean(info.NetworkConnection);
+            rc += TightMarshalLong1(wireFormat, info.ConnectionId, bs);
+            rc += TightMarshalString1(info.BrokerUploadUrl, bs);
+            rc += TightMarshalString1(info.NetworkProperties, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            BrokerInfo info = (BrokerInfo)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.BrokerId, dataOut, bs);
+            TightMarshalString2(info.BrokerURL, dataOut, bs);
+            TightMarshalObjectArray2(wireFormat, info.PeerBrokerInfos, dataOut, bs);
+            TightMarshalString2(info.BrokerName, dataOut, bs);
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            TightMarshalLong2(wireFormat, info.ConnectionId, dataOut, bs);
+            TightMarshalString2(info.BrokerUploadUrl, dataOut, bs);
+            TightMarshalString2(info.NetworkProperties, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            BrokerInfo info = (BrokerInfo)o;
+            info.BrokerId = (BrokerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.BrokerURL = LooseUnmarshalString(dataIn);
+
+            if (dataIn.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerInfo[] value = new BrokerInfo[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerInfo) LooseUnmarshalNestedObject(wireFormat,dataIn);
+                }
+                info.PeerBrokerInfos = value;
+            }
+            else {
+                info.PeerBrokerInfos = null;
+            }
+            info.BrokerName = LooseUnmarshalString(dataIn);
+            info.SlaveBroker = dataIn.ReadBoolean();
+            info.MasterBroker = dataIn.ReadBoolean();
+            info.FaultTolerantConfiguration = dataIn.ReadBoolean();
+            info.DuplexConnection = dataIn.ReadBoolean();
+            info.NetworkConnection = dataIn.ReadBoolean();
+            info.ConnectionId = LooseUnmarshalLong(wireFormat, dataIn);
+            info.BrokerUploadUrl = LooseUnmarshalString(dataIn);
+            info.NetworkProperties = LooseUnmarshalString(dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            BrokerInfo info = (BrokerInfo)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.BrokerId, dataOut);
+            LooseMarshalString(info.BrokerURL, dataOut);
+            LooseMarshalObjectArray(wireFormat, info.PeerBrokerInfos, dataOut);
+            LooseMarshalString(info.BrokerName, dataOut);
+            dataOut.Write(info.SlaveBroker);
+            dataOut.Write(info.MasterBroker);
+            dataOut.Write(info.FaultTolerantConfiguration);
+            dataOut.Write(info.DuplexConnection);
+            dataOut.Write(info.NetworkConnection);
+            LooseMarshalLong(wireFormat, info.ConnectionId, dataOut);
+            LooseMarshalString(info.BrokerUploadUrl, dataOut);
+            LooseMarshalString(info.NetworkProperties, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ConnectionControlMarshaller.cs b/src/main/csharp/OpenWire/V10/ConnectionControlMarshaller.cs
new file mode 100644
index 0000000..696ff18
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ConnectionControlMarshaller.cs
@@ -0,0 +1,162 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ConnectionControl
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ConnectionControl
+    /// </summary>
+    class ConnectionControlMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ConnectionControl();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ConnectionControl.ID_CONNECTIONCONTROL;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ConnectionControl info = (ConnectionControl)o;
+            info.Close = bs.ReadBoolean();
+            info.Exit = bs.ReadBoolean();
+            info.FaultTolerant = bs.ReadBoolean();
+            info.Resume = bs.ReadBoolean();
+            info.Suspend = bs.ReadBoolean();
+            info.ConnectedBrokers = TightUnmarshalString(dataIn, bs);
+            info.ReconnectTo = TightUnmarshalString(dataIn, bs);
+            info.RebalanceConnection = bs.ReadBoolean();
+            info.Token = ReadBytes(dataIn, bs.ReadBoolean());
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ConnectionControl info = (ConnectionControl)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            bs.WriteBoolean(info.Close);
+            bs.WriteBoolean(info.Exit);
+            bs.WriteBoolean(info.FaultTolerant);
+            bs.WriteBoolean(info.Resume);
+            bs.WriteBoolean(info.Suspend);
+            rc += TightMarshalString1(info.ConnectedBrokers, bs);
+            rc += TightMarshalString1(info.ReconnectTo, bs);
+            bs.WriteBoolean(info.RebalanceConnection);
+            bs.WriteBoolean(info.Token!=null);
+            rc += info.Token==null ? 0 : info.Token.Length+4;
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ConnectionControl info = (ConnectionControl)o;
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            TightMarshalString2(info.ConnectedBrokers, dataOut, bs);
+            TightMarshalString2(info.ReconnectTo, dataOut, bs);
+            bs.ReadBoolean();
+            if(bs.ReadBoolean()) {
+                dataOut.Write(info.Token.Length);
+                dataOut.Write(info.Token);
+            }
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ConnectionControl info = (ConnectionControl)o;
+            info.Close = dataIn.ReadBoolean();
+            info.Exit = dataIn.ReadBoolean();
+            info.FaultTolerant = dataIn.ReadBoolean();
+            info.Resume = dataIn.ReadBoolean();
+            info.Suspend = dataIn.ReadBoolean();
+            info.ConnectedBrokers = LooseUnmarshalString(dataIn);
+            info.ReconnectTo = LooseUnmarshalString(dataIn);
+            info.RebalanceConnection = dataIn.ReadBoolean();
+            info.Token = ReadBytes(dataIn, dataIn.ReadBoolean());
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ConnectionControl info = (ConnectionControl)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            dataOut.Write(info.Close);
+            dataOut.Write(info.Exit);
+            dataOut.Write(info.FaultTolerant);
+            dataOut.Write(info.Resume);
+            dataOut.Write(info.Suspend);
+            LooseMarshalString(info.ConnectedBrokers, dataOut);
+            LooseMarshalString(info.ReconnectTo, dataOut);
+            dataOut.Write(info.RebalanceConnection);
+            dataOut.Write(info.Token!=null);
+            if(info.Token!=null) {
+               dataOut.Write(info.Token.Length);
+               dataOut.Write(info.Token);
+            }
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ConnectionErrorMarshaller.cs b/src/main/csharp/OpenWire/V10/ConnectionErrorMarshaller.cs
new file mode 100644
index 0000000..e9b704b
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ConnectionErrorMarshaller.cs
@@ -0,0 +1,119 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ConnectionError
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ConnectionError
+    /// </summary>
+    class ConnectionErrorMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ConnectionError();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ConnectionError.ID_CONNECTIONERROR;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ConnectionError info = (ConnectionError)o;
+            info.Exception = TightUnmarshalBrokerError(wireFormat, dataIn, bs);
+            info.ConnectionId = (ConnectionId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ConnectionError info = (ConnectionError)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalBrokerError1(wireFormat, info.Exception, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.ConnectionId, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ConnectionError info = (ConnectionError)o;
+            TightMarshalBrokerError2(wireFormat, info.Exception, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.ConnectionId, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ConnectionError info = (ConnectionError)o;
+            info.Exception = LooseUnmarshalBrokerError(wireFormat, dataIn);
+            info.ConnectionId = (ConnectionId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ConnectionError info = (ConnectionError)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalBrokerError(wireFormat, info.Exception, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.ConnectionId, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ConnectionIdMarshaller.cs b/src/main/csharp/OpenWire/V10/ConnectionIdMarshaller.cs
new file mode 100644
index 0000000..0b10633
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ConnectionIdMarshaller.cs
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ConnectionId
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ConnectionId
+    /// </summary>
+    class ConnectionIdMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ConnectionId();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ConnectionId.ID_CONNECTIONID;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ConnectionId info = (ConnectionId)o;
+            info.Value = TightUnmarshalString(dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ConnectionId info = (ConnectionId)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.Value, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ConnectionId info = (ConnectionId)o;
+            TightMarshalString2(info.Value, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ConnectionId info = (ConnectionId)o;
+            info.Value = LooseUnmarshalString(dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ConnectionId info = (ConnectionId)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.Value, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ConnectionInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/ConnectionInfoMarshaller.cs
new file mode 100644
index 0000000..d6d6712
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ConnectionInfoMarshaller.cs
@@ -0,0 +1,186 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ConnectionInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ConnectionInfo
+    /// </summary>
+    class ConnectionInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ConnectionInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ConnectionInfo.ID_CONNECTIONINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ConnectionInfo info = (ConnectionInfo)o;
+            info.ConnectionId = (ConnectionId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.ClientId = TightUnmarshalString(dataIn, bs);
+            info.Password = TightUnmarshalString(dataIn, bs);
+            info.UserName = TightUnmarshalString(dataIn, bs);
+
+            if (bs.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) TightUnmarshalNestedObject(wireFormat,dataIn, bs);
+                }
+                info.BrokerPath = value;
+            }
+            else {
+                info.BrokerPath = null;
+            }
+            info.BrokerMasterConnector = bs.ReadBoolean();
+            info.Manageable = bs.ReadBoolean();
+            info.ClientMaster = bs.ReadBoolean();
+            info.FaultTolerant = bs.ReadBoolean();
+            info.FailoverReconnect = bs.ReadBoolean();
+            info.ClientIp = TightUnmarshalString(dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ConnectionInfo info = (ConnectionInfo)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ConnectionId, bs);
+            rc += TightMarshalString1(info.ClientId, bs);
+            rc += TightMarshalString1(info.Password, bs);
+            rc += TightMarshalString1(info.UserName, bs);
+            rc += TightMarshalObjectArray1(wireFormat, info.BrokerPath, bs);
+            bs.WriteBoolean(info.BrokerMasterConnector);
+            bs.WriteBoolean(info.Manageable);
+            bs.WriteBoolean(info.ClientMaster);
+            bs.WriteBoolean(info.FaultTolerant);
+            bs.WriteBoolean(info.FailoverReconnect);
+            rc += TightMarshalString1(info.ClientIp, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ConnectionInfo info = (ConnectionInfo)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ConnectionId, dataOut, bs);
+            TightMarshalString2(info.ClientId, dataOut, bs);
+            TightMarshalString2(info.Password, dataOut, bs);
+            TightMarshalString2(info.UserName, dataOut, bs);
+            TightMarshalObjectArray2(wireFormat, info.BrokerPath, dataOut, bs);
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            TightMarshalString2(info.ClientIp, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ConnectionInfo info = (ConnectionInfo)o;
+            info.ConnectionId = (ConnectionId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.ClientId = LooseUnmarshalString(dataIn);
+            info.Password = LooseUnmarshalString(dataIn);
+            info.UserName = LooseUnmarshalString(dataIn);
+
+            if (dataIn.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) LooseUnmarshalNestedObject(wireFormat,dataIn);
+                }
+                info.BrokerPath = value;
+            }
+            else {
+                info.BrokerPath = null;
+            }
+            info.BrokerMasterConnector = dataIn.ReadBoolean();
+            info.Manageable = dataIn.ReadBoolean();
+            info.ClientMaster = dataIn.ReadBoolean();
+            info.FaultTolerant = dataIn.ReadBoolean();
+            info.FailoverReconnect = dataIn.ReadBoolean();
+            info.ClientIp = LooseUnmarshalString(dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ConnectionInfo info = (ConnectionInfo)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ConnectionId, dataOut);
+            LooseMarshalString(info.ClientId, dataOut);
+            LooseMarshalString(info.Password, dataOut);
+            LooseMarshalString(info.UserName, dataOut);
+            LooseMarshalObjectArray(wireFormat, info.BrokerPath, dataOut);
+            dataOut.Write(info.BrokerMasterConnector);
+            dataOut.Write(info.Manageable);
+            dataOut.Write(info.ClientMaster);
+            dataOut.Write(info.FaultTolerant);
+            dataOut.Write(info.FailoverReconnect);
+            LooseMarshalString(info.ClientIp, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ConsumerControlMarshaller.cs b/src/main/csharp/OpenWire/V10/ConsumerControlMarshaller.cs
new file mode 100644
index 0000000..74e4c41
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ConsumerControlMarshaller.cs
@@ -0,0 +1,143 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ConsumerControl
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ConsumerControl
+    /// </summary>
+    class ConsumerControlMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ConsumerControl();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ConsumerControl.ID_CONSUMERCONTROL;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ConsumerControl info = (ConsumerControl)o;
+            info.Destination = (ActiveMQDestination) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.Close = bs.ReadBoolean();
+            info.ConsumerId = (ConsumerId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.Prefetch = dataIn.ReadInt32();
+            info.Flush = bs.ReadBoolean();
+            info.Start = bs.ReadBoolean();
+            info.Stop = bs.ReadBoolean();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ConsumerControl info = (ConsumerControl)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.Destination, bs);
+            bs.WriteBoolean(info.Close);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.ConsumerId, bs);
+            bs.WriteBoolean(info.Flush);
+            bs.WriteBoolean(info.Start);
+            bs.WriteBoolean(info.Stop);
+
+            return rc + 4;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ConsumerControl info = (ConsumerControl)o;
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            bs.ReadBoolean();
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.ConsumerId, dataOut, bs);
+            dataOut.Write(info.Prefetch);
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ConsumerControl info = (ConsumerControl)o;
+            info.Destination = (ActiveMQDestination) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.Close = dataIn.ReadBoolean();
+            info.ConsumerId = (ConsumerId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.Prefetch = dataIn.ReadInt32();
+            info.Flush = dataIn.ReadBoolean();
+            info.Start = dataIn.ReadBoolean();
+            info.Stop = dataIn.ReadBoolean();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ConsumerControl info = (ConsumerControl)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            dataOut.Write(info.Close);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.ConsumerId, dataOut);
+            dataOut.Write(info.Prefetch);
+            dataOut.Write(info.Flush);
+            dataOut.Write(info.Start);
+            dataOut.Write(info.Stop);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ConsumerIdMarshaller.cs b/src/main/csharp/OpenWire/V10/ConsumerIdMarshaller.cs
new file mode 100644
index 0000000..1eb6962
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ConsumerIdMarshaller.cs
@@ -0,0 +1,124 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ConsumerId
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ConsumerId
+    /// </summary>
+    class ConsumerIdMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ConsumerId();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ConsumerId.ID_CONSUMERID;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ConsumerId info = (ConsumerId)o;
+            info.ConnectionId = TightUnmarshalString(dataIn, bs);
+            info.SessionId = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.Value = TightUnmarshalLong(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ConsumerId info = (ConsumerId)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.ConnectionId, bs);
+            rc += TightMarshalLong1(wireFormat, info.SessionId, bs);
+            rc += TightMarshalLong1(wireFormat, info.Value, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ConsumerId info = (ConsumerId)o;
+            TightMarshalString2(info.ConnectionId, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.SessionId, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.Value, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ConsumerId info = (ConsumerId)o;
+            info.ConnectionId = LooseUnmarshalString(dataIn);
+            info.SessionId = LooseUnmarshalLong(wireFormat, dataIn);
+            info.Value = LooseUnmarshalLong(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ConsumerId info = (ConsumerId)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.ConnectionId, dataOut);
+            LooseMarshalLong(wireFormat, info.SessionId, dataOut);
+            LooseMarshalLong(wireFormat, info.Value, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ConsumerInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/ConsumerInfoMarshaller.cs
new file mode 100644
index 0000000..2c03b82
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ConsumerInfoMarshaller.cs
@@ -0,0 +1,245 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ConsumerInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ConsumerInfo
+    /// </summary>
+    class ConsumerInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ConsumerInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ConsumerInfo.ID_CONSUMERINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ConsumerInfo info = (ConsumerInfo)o;
+            info.ConsumerId = (ConsumerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Browser = bs.ReadBoolean();
+            info.Destination = (ActiveMQDestination) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.PrefetchSize = dataIn.ReadInt32();
+            info.MaximumPendingMessageLimit = dataIn.ReadInt32();
+            info.DispatchAsync = bs.ReadBoolean();
+            info.Selector = TightUnmarshalString(dataIn, bs);
+            info.ClientId = TightUnmarshalString(dataIn, bs);
+            info.SubscriptionName = TightUnmarshalString(dataIn, bs);
+            info.NoLocal = bs.ReadBoolean();
+            info.Exclusive = bs.ReadBoolean();
+            info.Retroactive = bs.ReadBoolean();
+            info.Priority = dataIn.ReadByte();
+
+            if (bs.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) TightUnmarshalNestedObject(wireFormat,dataIn, bs);
+                }
+                info.BrokerPath = value;
+            }
+            else {
+                info.BrokerPath = null;
+            }
+            info.AdditionalPredicate = (BooleanExpression) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.NetworkSubscription = bs.ReadBoolean();
+            info.OptimizedAcknowledge = bs.ReadBoolean();
+            info.NoRangeAcks = bs.ReadBoolean();
+
+            if (bs.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                ConsumerId[] value = new ConsumerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (ConsumerId) TightUnmarshalNestedObject(wireFormat,dataIn, bs);
+                }
+                info.NetworkConsumerPath = value;
+            }
+            else {
+                info.NetworkConsumerPath = null;
+            }
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ConsumerInfo info = (ConsumerInfo)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ConsumerId, bs);
+            bs.WriteBoolean(info.Browser);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.Destination, bs);
+            bs.WriteBoolean(info.DispatchAsync);
+            rc += TightMarshalString1(info.Selector, bs);
+            rc += TightMarshalString1(info.ClientId, bs);
+            rc += TightMarshalString1(info.SubscriptionName, bs);
+            bs.WriteBoolean(info.NoLocal);
+            bs.WriteBoolean(info.Exclusive);
+            bs.WriteBoolean(info.Retroactive);
+            rc += TightMarshalObjectArray1(wireFormat, info.BrokerPath, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.AdditionalPredicate, bs);
+            bs.WriteBoolean(info.NetworkSubscription);
+            bs.WriteBoolean(info.OptimizedAcknowledge);
+            bs.WriteBoolean(info.NoRangeAcks);
+            rc += TightMarshalObjectArray1(wireFormat, info.NetworkConsumerPath, bs);
+
+            return rc + 9;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ConsumerInfo info = (ConsumerInfo)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ConsumerId, dataOut, bs);
+            bs.ReadBoolean();
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            dataOut.Write(info.PrefetchSize);
+            dataOut.Write(info.MaximumPendingMessageLimit);
+            bs.ReadBoolean();
+            TightMarshalString2(info.Selector, dataOut, bs);
+            TightMarshalString2(info.ClientId, dataOut, bs);
+            TightMarshalString2(info.SubscriptionName, dataOut, bs);
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            dataOut.Write(info.Priority);
+            TightMarshalObjectArray2(wireFormat, info.BrokerPath, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.AdditionalPredicate, dataOut, bs);
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            TightMarshalObjectArray2(wireFormat, info.NetworkConsumerPath, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ConsumerInfo info = (ConsumerInfo)o;
+            info.ConsumerId = (ConsumerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Browser = dataIn.ReadBoolean();
+            info.Destination = (ActiveMQDestination) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.PrefetchSize = dataIn.ReadInt32();
+            info.MaximumPendingMessageLimit = dataIn.ReadInt32();
+            info.DispatchAsync = dataIn.ReadBoolean();
+            info.Selector = LooseUnmarshalString(dataIn);
+            info.ClientId = LooseUnmarshalString(dataIn);
+            info.SubscriptionName = LooseUnmarshalString(dataIn);
+            info.NoLocal = dataIn.ReadBoolean();
+            info.Exclusive = dataIn.ReadBoolean();
+            info.Retroactive = dataIn.ReadBoolean();
+            info.Priority = dataIn.ReadByte();
+
+            if (dataIn.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) LooseUnmarshalNestedObject(wireFormat,dataIn);
+                }
+                info.BrokerPath = value;
+            }
+            else {
+                info.BrokerPath = null;
+            }
+            info.AdditionalPredicate = (BooleanExpression) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.NetworkSubscription = dataIn.ReadBoolean();
+            info.OptimizedAcknowledge = dataIn.ReadBoolean();
+            info.NoRangeAcks = dataIn.ReadBoolean();
+
+            if (dataIn.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                ConsumerId[] value = new ConsumerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (ConsumerId) LooseUnmarshalNestedObject(wireFormat,dataIn);
+                }
+                info.NetworkConsumerPath = value;
+            }
+            else {
+                info.NetworkConsumerPath = null;
+            }
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ConsumerInfo info = (ConsumerInfo)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ConsumerId, dataOut);
+            dataOut.Write(info.Browser);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            dataOut.Write(info.PrefetchSize);
+            dataOut.Write(info.MaximumPendingMessageLimit);
+            dataOut.Write(info.DispatchAsync);
+            LooseMarshalString(info.Selector, dataOut);
+            LooseMarshalString(info.ClientId, dataOut);
+            LooseMarshalString(info.SubscriptionName, dataOut);
+            dataOut.Write(info.NoLocal);
+            dataOut.Write(info.Exclusive);
+            dataOut.Write(info.Retroactive);
+            dataOut.Write(info.Priority);
+            LooseMarshalObjectArray(wireFormat, info.BrokerPath, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.AdditionalPredicate, dataOut);
+            dataOut.Write(info.NetworkSubscription);
+            dataOut.Write(info.OptimizedAcknowledge);
+            dataOut.Write(info.NoRangeAcks);
+            LooseMarshalObjectArray(wireFormat, info.NetworkConsumerPath, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ControlCommandMarshaller.cs b/src/main/csharp/OpenWire/V10/ControlCommandMarshaller.cs
new file mode 100644
index 0000000..5089dab
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ControlCommandMarshaller.cs
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ControlCommand
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ControlCommand
+    /// </summary>
+    class ControlCommandMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ControlCommand();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ControlCommand.ID_CONTROLCOMMAND;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ControlCommand info = (ControlCommand)o;
+            info.Command = TightUnmarshalString(dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ControlCommand info = (ControlCommand)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.Command, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ControlCommand info = (ControlCommand)o;
+            TightMarshalString2(info.Command, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ControlCommand info = (ControlCommand)o;
+            info.Command = LooseUnmarshalString(dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ControlCommand info = (ControlCommand)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.Command, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/DataArrayResponseMarshaller.cs b/src/main/csharp/OpenWire/V10/DataArrayResponseMarshaller.cs
new file mode 100644
index 0000000..f3efbb8
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/DataArrayResponseMarshaller.cs
@@ -0,0 +1,136 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for DataArrayResponse
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for DataArrayResponse
+    /// </summary>
+    class DataArrayResponseMarshaller : ResponseMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new DataArrayResponse();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return DataArrayResponse.ID_DATAARRAYRESPONSE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            DataArrayResponse info = (DataArrayResponse)o;
+
+            if (bs.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                DataStructure[] value = new DataStructure[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (DataStructure) TightUnmarshalNestedObject(wireFormat,dataIn, bs);
+                }
+                info.Data = value;
+            }
+            else {
+                info.Data = null;
+            }
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            DataArrayResponse info = (DataArrayResponse)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalObjectArray1(wireFormat, info.Data, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            DataArrayResponse info = (DataArrayResponse)o;
+            TightMarshalObjectArray2(wireFormat, info.Data, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            DataArrayResponse info = (DataArrayResponse)o;
+
+            if (dataIn.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                DataStructure[] value = new DataStructure[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (DataStructure) LooseUnmarshalNestedObject(wireFormat,dataIn);
+                }
+                info.Data = value;
+            }
+            else {
+                info.Data = null;
+            }
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            DataArrayResponse info = (DataArrayResponse)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalObjectArray(wireFormat, info.Data, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/DataResponseMarshaller.cs b/src/main/csharp/OpenWire/V10/DataResponseMarshaller.cs
new file mode 100644
index 0000000..39bc221
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/DataResponseMarshaller.cs
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for DataResponse
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for DataResponse
+    /// </summary>
+    class DataResponseMarshaller : ResponseMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new DataResponse();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return DataResponse.ID_DATARESPONSE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            DataResponse info = (DataResponse)o;
+            info.Data = (DataStructure) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            DataResponse info = (DataResponse)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.Data, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            DataResponse info = (DataResponse)o;
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.Data, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            DataResponse info = (DataResponse)o;
+            info.Data = (DataStructure) LooseUnmarshalNestedObject(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            DataResponse info = (DataResponse)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.Data, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/DestinationInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/DestinationInfoMarshaller.cs
new file mode 100644
index 0000000..b3bce8a
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/DestinationInfoMarshaller.cs
@@ -0,0 +1,155 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for DestinationInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for DestinationInfo
+    /// </summary>
+    class DestinationInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new DestinationInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return DestinationInfo.ID_DESTINATIONINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            DestinationInfo info = (DestinationInfo)o;
+            info.ConnectionId = (ConnectionId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Destination = (ActiveMQDestination) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.OperationType = dataIn.ReadByte();
+            info.Timeout = TightUnmarshalLong(wireFormat, dataIn, bs);
+
+            if (bs.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) TightUnmarshalNestedObject(wireFormat,dataIn, bs);
+                }
+                info.BrokerPath = value;
+            }
+            else {
+                info.BrokerPath = null;
+            }
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            DestinationInfo info = (DestinationInfo)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ConnectionId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.Destination, bs);
+            rc += TightMarshalLong1(wireFormat, info.Timeout, bs);
+            rc += TightMarshalObjectArray1(wireFormat, info.BrokerPath, bs);
+
+            return rc + 1;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            DestinationInfo info = (DestinationInfo)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ConnectionId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            dataOut.Write(info.OperationType);
+            TightMarshalLong2(wireFormat, info.Timeout, dataOut, bs);
+            TightMarshalObjectArray2(wireFormat, info.BrokerPath, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            DestinationInfo info = (DestinationInfo)o;
+            info.ConnectionId = (ConnectionId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Destination = (ActiveMQDestination) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.OperationType = dataIn.ReadByte();
+            info.Timeout = LooseUnmarshalLong(wireFormat, dataIn);
+
+            if (dataIn.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) LooseUnmarshalNestedObject(wireFormat,dataIn);
+                }
+                info.BrokerPath = value;
+            }
+            else {
+                info.BrokerPath = null;
+            }
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            DestinationInfo info = (DestinationInfo)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ConnectionId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            dataOut.Write(info.OperationType);
+            LooseMarshalLong(wireFormat, info.Timeout, dataOut);
+            LooseMarshalObjectArray(wireFormat, info.BrokerPath, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/DiscoveryEventMarshaller.cs b/src/main/csharp/OpenWire/V10/DiscoveryEventMarshaller.cs
new file mode 100644
index 0000000..95e3cef
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/DiscoveryEventMarshaller.cs
@@ -0,0 +1,119 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for DiscoveryEvent
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for DiscoveryEvent
+    /// </summary>
+    class DiscoveryEventMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new DiscoveryEvent();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return DiscoveryEvent.ID_DISCOVERYEVENT;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            DiscoveryEvent info = (DiscoveryEvent)o;
+            info.ServiceName = TightUnmarshalString(dataIn, bs);
+            info.BrokerName = TightUnmarshalString(dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            DiscoveryEvent info = (DiscoveryEvent)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.ServiceName, bs);
+            rc += TightMarshalString1(info.BrokerName, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            DiscoveryEvent info = (DiscoveryEvent)o;
+            TightMarshalString2(info.ServiceName, dataOut, bs);
+            TightMarshalString2(info.BrokerName, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            DiscoveryEvent info = (DiscoveryEvent)o;
+            info.ServiceName = LooseUnmarshalString(dataIn);
+            info.BrokerName = LooseUnmarshalString(dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            DiscoveryEvent info = (DiscoveryEvent)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.ServiceName, dataOut);
+            LooseMarshalString(info.BrokerName, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ExceptionResponseMarshaller.cs b/src/main/csharp/OpenWire/V10/ExceptionResponseMarshaller.cs
new file mode 100644
index 0000000..18438da
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ExceptionResponseMarshaller.cs
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ExceptionResponse
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ExceptionResponse
+    /// </summary>
+    class ExceptionResponseMarshaller : ResponseMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ExceptionResponse();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ExceptionResponse.ID_EXCEPTIONRESPONSE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ExceptionResponse info = (ExceptionResponse)o;
+            info.Exception = TightUnmarshalBrokerError(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ExceptionResponse info = (ExceptionResponse)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalBrokerError1(wireFormat, info.Exception, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ExceptionResponse info = (ExceptionResponse)o;
+            TightMarshalBrokerError2(wireFormat, info.Exception, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ExceptionResponse info = (ExceptionResponse)o;
+            info.Exception = LooseUnmarshalBrokerError(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ExceptionResponse info = (ExceptionResponse)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalBrokerError(wireFormat, info.Exception, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/FlushCommandMarshaller.cs b/src/main/csharp/OpenWire/V10/FlushCommandMarshaller.cs
new file mode 100644
index 0000000..4cfa473
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/FlushCommandMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for FlushCommand
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for FlushCommand
+    /// </summary>
+    class FlushCommandMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new FlushCommand();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return FlushCommand.ID_FLUSHCOMMAND;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/IntegerResponseMarshaller.cs b/src/main/csharp/OpenWire/V10/IntegerResponseMarshaller.cs
new file mode 100644
index 0000000..c29e458
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/IntegerResponseMarshaller.cs
@@ -0,0 +1,112 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for IntegerResponse
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for IntegerResponse
+    /// </summary>
+    class IntegerResponseMarshaller : ResponseMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new IntegerResponse();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return IntegerResponse.ID_INTEGERRESPONSE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            IntegerResponse info = (IntegerResponse)o;
+            info.Result = dataIn.ReadInt32();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 4;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            IntegerResponse info = (IntegerResponse)o;
+            dataOut.Write(info.Result);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            IntegerResponse info = (IntegerResponse)o;
+            info.Result = dataIn.ReadInt32();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            IntegerResponse info = (IntegerResponse)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            dataOut.Write(info.Result);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/JournalQueueAckMarshaller.cs b/src/main/csharp/OpenWire/V10/JournalQueueAckMarshaller.cs
new file mode 100644
index 0000000..22b72e2
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/JournalQueueAckMarshaller.cs
@@ -0,0 +1,119 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for JournalQueueAck
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for JournalQueueAck
+    /// </summary>
+    class JournalQueueAckMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new JournalQueueAck();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return JournalQueueAck.ID_JOURNALQUEUEACK;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            JournalQueueAck info = (JournalQueueAck)o;
+            info.Destination = (ActiveMQDestination) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.MessageAck = (MessageAck) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            JournalQueueAck info = (JournalQueueAck)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.Destination, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.MessageAck, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            JournalQueueAck info = (JournalQueueAck)o;
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.MessageAck, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            JournalQueueAck info = (JournalQueueAck)o;
+            info.Destination = (ActiveMQDestination) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.MessageAck = (MessageAck) LooseUnmarshalNestedObject(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            JournalQueueAck info = (JournalQueueAck)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.MessageAck, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/JournalTopicAckMarshaller.cs b/src/main/csharp/OpenWire/V10/JournalTopicAckMarshaller.cs
new file mode 100644
index 0000000..bfdfad5
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/JournalTopicAckMarshaller.cs
@@ -0,0 +1,139 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for JournalTopicAck
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for JournalTopicAck
+    /// </summary>
+    class JournalTopicAckMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new JournalTopicAck();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return JournalTopicAck.ID_JOURNALTOPICACK;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            JournalTopicAck info = (JournalTopicAck)o;
+            info.Destination = (ActiveMQDestination) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.MessageId = (MessageId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.MessageSequenceId = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.SubscritionName = TightUnmarshalString(dataIn, bs);
+            info.ClientId = TightUnmarshalString(dataIn, bs);
+            info.TransactionId = (TransactionId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            JournalTopicAck info = (JournalTopicAck)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.Destination, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.MessageId, bs);
+            rc += TightMarshalLong1(wireFormat, info.MessageSequenceId, bs);
+            rc += TightMarshalString1(info.SubscritionName, bs);
+            rc += TightMarshalString1(info.ClientId, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.TransactionId, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            JournalTopicAck info = (JournalTopicAck)o;
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.MessageId, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.MessageSequenceId, dataOut, bs);
+            TightMarshalString2(info.SubscritionName, dataOut, bs);
+            TightMarshalString2(info.ClientId, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.TransactionId, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            JournalTopicAck info = (JournalTopicAck)o;
+            info.Destination = (ActiveMQDestination) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.MessageId = (MessageId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.MessageSequenceId = LooseUnmarshalLong(wireFormat, dataIn);
+            info.SubscritionName = LooseUnmarshalString(dataIn);
+            info.ClientId = LooseUnmarshalString(dataIn);
+            info.TransactionId = (TransactionId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            JournalTopicAck info = (JournalTopicAck)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.MessageId, dataOut);
+            LooseMarshalLong(wireFormat, info.MessageSequenceId, dataOut);
+            LooseMarshalString(info.SubscritionName, dataOut);
+            LooseMarshalString(info.ClientId, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.TransactionId, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/JournalTraceMarshaller.cs b/src/main/csharp/OpenWire/V10/JournalTraceMarshaller.cs
new file mode 100644
index 0000000..073c9c9
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/JournalTraceMarshaller.cs
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for JournalTrace
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for JournalTrace
+    /// </summary>
+    class JournalTraceMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new JournalTrace();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return JournalTrace.ID_JOURNALTRACE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            JournalTrace info = (JournalTrace)o;
+            info.Message = TightUnmarshalString(dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            JournalTrace info = (JournalTrace)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.Message, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            JournalTrace info = (JournalTrace)o;
+            TightMarshalString2(info.Message, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            JournalTrace info = (JournalTrace)o;
+            info.Message = LooseUnmarshalString(dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            JournalTrace info = (JournalTrace)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.Message, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/JournalTransactionMarshaller.cs b/src/main/csharp/OpenWire/V10/JournalTransactionMarshaller.cs
new file mode 100644
index 0000000..d9e64b0
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/JournalTransactionMarshaller.cs
@@ -0,0 +1,123 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for JournalTransaction
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for JournalTransaction
+    /// </summary>
+    class JournalTransactionMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new JournalTransaction();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return JournalTransaction.ID_JOURNALTRANSACTION;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            JournalTransaction info = (JournalTransaction)o;
+            info.TransactionId = (TransactionId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.Type = dataIn.ReadByte();
+            info.WasPrepared = bs.ReadBoolean();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            JournalTransaction info = (JournalTransaction)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.TransactionId, bs);
+            bs.WriteBoolean(info.WasPrepared);
+
+            return rc + 1;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            JournalTransaction info = (JournalTransaction)o;
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.TransactionId, dataOut, bs);
+            dataOut.Write(info.Type);
+            bs.ReadBoolean();
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            JournalTransaction info = (JournalTransaction)o;
+            info.TransactionId = (TransactionId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.Type = dataIn.ReadByte();
+            info.WasPrepared = dataIn.ReadBoolean();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            JournalTransaction info = (JournalTransaction)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.TransactionId, dataOut);
+            dataOut.Write(info.Type);
+            dataOut.Write(info.WasPrepared);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/KeepAliveInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/KeepAliveInfoMarshaller.cs
new file mode 100644
index 0000000..e41b894
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/KeepAliveInfoMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for KeepAliveInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for KeepAliveInfo
+    /// </summary>
+    class KeepAliveInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new KeepAliveInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return KeepAliveInfo.ID_KEEPALIVEINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/LastPartialCommandMarshaller.cs b/src/main/csharp/OpenWire/V10/LastPartialCommandMarshaller.cs
new file mode 100644
index 0000000..fd1bee4
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/LastPartialCommandMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for LastPartialCommand
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for LastPartialCommand
+    /// </summary>
+    class LastPartialCommandMarshaller : PartialCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new LastPartialCommand();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return LastPartialCommand.ID_LASTPARTIALCOMMAND;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/LocalTransactionIdMarshaller.cs b/src/main/csharp/OpenWire/V10/LocalTransactionIdMarshaller.cs
new file mode 100644
index 0000000..d1a5bdd
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/LocalTransactionIdMarshaller.cs
@@ -0,0 +1,119 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for LocalTransactionId
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for LocalTransactionId
+    /// </summary>
+    class LocalTransactionIdMarshaller : TransactionIdMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new LocalTransactionId();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return LocalTransactionId.ID_LOCALTRANSACTIONID;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            LocalTransactionId info = (LocalTransactionId)o;
+            info.Value = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.ConnectionId = (ConnectionId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            LocalTransactionId info = (LocalTransactionId)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalLong1(wireFormat, info.Value, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ConnectionId, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            LocalTransactionId info = (LocalTransactionId)o;
+            TightMarshalLong2(wireFormat, info.Value, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ConnectionId, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            LocalTransactionId info = (LocalTransactionId)o;
+            info.Value = LooseUnmarshalLong(wireFormat, dataIn);
+            info.ConnectionId = (ConnectionId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            LocalTransactionId info = (LocalTransactionId)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalLong(wireFormat, info.Value, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ConnectionId, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/MarshallerFactory.cs b/src/main/csharp/OpenWire/V10/MarshallerFactory.cs
new file mode 100644
index 0000000..b582f0a
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/MarshallerFactory.cs
@@ -0,0 +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.
+ */
+/*
+ *
+ *  MarshallerFactory code for OpenWire Protocol Version 10
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Used to create marshallers for a specific version of the OpenWire protocol.
+    ///  Each non-abstract DataStructure object has a registered Marshaller that is
+    ///  created and added to the OpenWireFormat objects format collection.
+    /// </summary>
+    public class MarshallerFactory : IMarshallerFactory
+    {
+        /// <summery>
+        ///  Adds the Marshallers for this version of the OpenWire protocol to the 
+        ///  Collection of Marshallers stored in the OpenWireFormat class.
+        /// </summery>
+        public void configure(OpenWireFormat format) 
+        {
+            format.clearMarshallers();
+            format.addMarshaller(new ActiveMQBlobMessageMarshaller());
+            format.addMarshaller(new ActiveMQBytesMessageMarshaller());
+            format.addMarshaller(new ActiveMQMapMessageMarshaller());
+            format.addMarshaller(new ActiveMQMessageMarshaller());
+            format.addMarshaller(new ActiveMQObjectMessageMarshaller());
+            format.addMarshaller(new ActiveMQQueueMarshaller());
+            format.addMarshaller(new ActiveMQStreamMessageMarshaller());
+            format.addMarshaller(new ActiveMQTempQueueMarshaller());
+            format.addMarshaller(new ActiveMQTempTopicMarshaller());
+            format.addMarshaller(new ActiveMQTextMessageMarshaller());
+            format.addMarshaller(new ActiveMQTopicMarshaller());
+            format.addMarshaller(new BrokerIdMarshaller());
+            format.addMarshaller(new BrokerInfoMarshaller());
+            format.addMarshaller(new ConnectionControlMarshaller());
+            format.addMarshaller(new ConnectionErrorMarshaller());
+            format.addMarshaller(new ConnectionIdMarshaller());
+            format.addMarshaller(new ConnectionInfoMarshaller());
+            format.addMarshaller(new ConsumerControlMarshaller());
+            format.addMarshaller(new ConsumerIdMarshaller());
+            format.addMarshaller(new ConsumerInfoMarshaller());
+            format.addMarshaller(new ControlCommandMarshaller());
+            format.addMarshaller(new DataArrayResponseMarshaller());
+            format.addMarshaller(new DataResponseMarshaller());
+            format.addMarshaller(new DestinationInfoMarshaller());
+            format.addMarshaller(new DiscoveryEventMarshaller());
+            format.addMarshaller(new ExceptionResponseMarshaller());
+            format.addMarshaller(new FlushCommandMarshaller());
+            format.addMarshaller(new IntegerResponseMarshaller());
+            format.addMarshaller(new JournalQueueAckMarshaller());
+            format.addMarshaller(new JournalTopicAckMarshaller());
+            format.addMarshaller(new JournalTraceMarshaller());
+            format.addMarshaller(new JournalTransactionMarshaller());
+            format.addMarshaller(new KeepAliveInfoMarshaller());
+            format.addMarshaller(new LastPartialCommandMarshaller());
+            format.addMarshaller(new LocalTransactionIdMarshaller());
+            format.addMarshaller(new MessageAckMarshaller());
+            format.addMarshaller(new MessageDispatchMarshaller());
+            format.addMarshaller(new MessageDispatchNotificationMarshaller());
+            format.addMarshaller(new MessageIdMarshaller());
+            format.addMarshaller(new MessagePullMarshaller());
+            format.addMarshaller(new NetworkBridgeFilterMarshaller());
+            format.addMarshaller(new PartialCommandMarshaller());
+            format.addMarshaller(new ProducerAckMarshaller());
+            format.addMarshaller(new ProducerIdMarshaller());
+            format.addMarshaller(new ProducerInfoMarshaller());
+            format.addMarshaller(new RemoveInfoMarshaller());
+            format.addMarshaller(new RemoveSubscriptionInfoMarshaller());
+            format.addMarshaller(new ReplayCommandMarshaller());
+            format.addMarshaller(new ResponseMarshaller());
+            format.addMarshaller(new SessionIdMarshaller());
+            format.addMarshaller(new SessionInfoMarshaller());
+            format.addMarshaller(new ShutdownInfoMarshaller());
+            format.addMarshaller(new SubscriptionInfoMarshaller());
+            format.addMarshaller(new TransactionInfoMarshaller());
+            format.addMarshaller(new WireFormatInfoMarshaller());
+            format.addMarshaller(new XATransactionIdMarshaller());
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/MessageAckMarshaller.cs b/src/main/csharp/OpenWire/V10/MessageAckMarshaller.cs
new file mode 100644
index 0000000..47c0963
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/MessageAckMarshaller.cs
@@ -0,0 +1,147 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for MessageAck
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for MessageAck
+    /// </summary>
+    class MessageAckMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new MessageAck();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return MessageAck.ID_MESSAGEACK;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            MessageAck info = (MessageAck)o;
+            info.Destination = (ActiveMQDestination) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.TransactionId = (TransactionId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.ConsumerId = (ConsumerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.AckType = dataIn.ReadByte();
+            info.FirstMessageId = (MessageId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.LastMessageId = (MessageId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.MessageCount = dataIn.ReadInt32();
+            info.PoisonCause = TightUnmarshalBrokerError(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            MessageAck info = (MessageAck)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.Destination, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.TransactionId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ConsumerId, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.FirstMessageId, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.LastMessageId, bs);
+            rc += TightMarshalBrokerError1(wireFormat, info.PoisonCause, bs);
+
+            return rc + 5;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            MessageAck info = (MessageAck)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.TransactionId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ConsumerId, dataOut, bs);
+            dataOut.Write(info.AckType);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.FirstMessageId, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.LastMessageId, dataOut, bs);
+            dataOut.Write(info.MessageCount);
+            TightMarshalBrokerError2(wireFormat, info.PoisonCause, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            MessageAck info = (MessageAck)o;
+            info.Destination = (ActiveMQDestination) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.TransactionId = (TransactionId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.ConsumerId = (ConsumerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.AckType = dataIn.ReadByte();
+            info.FirstMessageId = (MessageId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.LastMessageId = (MessageId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.MessageCount = dataIn.ReadInt32();
+            info.PoisonCause = LooseUnmarshalBrokerError(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            MessageAck info = (MessageAck)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.TransactionId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ConsumerId, dataOut);
+            dataOut.Write(info.AckType);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.FirstMessageId, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.LastMessageId, dataOut);
+            dataOut.Write(info.MessageCount);
+            LooseMarshalBrokerError(wireFormat, info.PoisonCause, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/MessageDispatchMarshaller.cs b/src/main/csharp/OpenWire/V10/MessageDispatchMarshaller.cs
new file mode 100644
index 0000000..75dad06
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/MessageDispatchMarshaller.cs
@@ -0,0 +1,128 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for MessageDispatch
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for MessageDispatch
+    /// </summary>
+    class MessageDispatchMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new MessageDispatch();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return MessageDispatch.ID_MESSAGEDISPATCH;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            MessageDispatch info = (MessageDispatch)o;
+            info.ConsumerId = (ConsumerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Destination = (ActiveMQDestination) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Message = (Message) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.RedeliveryCounter = dataIn.ReadInt32();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            MessageDispatch info = (MessageDispatch)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ConsumerId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.Destination, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.Message, bs);
+
+            return rc + 4;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            MessageDispatch info = (MessageDispatch)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ConsumerId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.Message, dataOut, bs);
+            dataOut.Write(info.RedeliveryCounter);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            MessageDispatch info = (MessageDispatch)o;
+            info.ConsumerId = (ConsumerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Destination = (ActiveMQDestination) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Message = (Message) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.RedeliveryCounter = dataIn.ReadInt32();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            MessageDispatch info = (MessageDispatch)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ConsumerId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.Message, dataOut);
+            dataOut.Write(info.RedeliveryCounter);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/MessageDispatchNotificationMarshaller.cs b/src/main/csharp/OpenWire/V10/MessageDispatchNotificationMarshaller.cs
new file mode 100644
index 0000000..0d20036
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/MessageDispatchNotificationMarshaller.cs
@@ -0,0 +1,129 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for MessageDispatchNotification
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for MessageDispatchNotification
+    /// </summary>
+    class MessageDispatchNotificationMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new MessageDispatchNotification();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return MessageDispatchNotification.ID_MESSAGEDISPATCHNOTIFICATION;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            MessageDispatchNotification info = (MessageDispatchNotification)o;
+            info.ConsumerId = (ConsumerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Destination = (ActiveMQDestination) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.DeliverySequenceId = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.MessageId = (MessageId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            MessageDispatchNotification info = (MessageDispatchNotification)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ConsumerId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.Destination, bs);
+            rc += TightMarshalLong1(wireFormat, info.DeliverySequenceId, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.MessageId, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            MessageDispatchNotification info = (MessageDispatchNotification)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ConsumerId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.DeliverySequenceId, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.MessageId, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            MessageDispatchNotification info = (MessageDispatchNotification)o;
+            info.ConsumerId = (ConsumerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Destination = (ActiveMQDestination) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.DeliverySequenceId = LooseUnmarshalLong(wireFormat, dataIn);
+            info.MessageId = (MessageId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            MessageDispatchNotification info = (MessageDispatchNotification)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ConsumerId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            LooseMarshalLong(wireFormat, info.DeliverySequenceId, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.MessageId, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/MessageIdMarshaller.cs b/src/main/csharp/OpenWire/V10/MessageIdMarshaller.cs
new file mode 100644
index 0000000..fba3d11
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/MessageIdMarshaller.cs
@@ -0,0 +1,129 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for MessageId
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for MessageId
+    /// </summary>
+    class MessageIdMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new MessageId();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return MessageId.ID_MESSAGEID;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            MessageId info = (MessageId)o;
+            info.TextView = TightUnmarshalString(dataIn, bs);
+            info.ProducerId = (ProducerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.ProducerSequenceId = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.BrokerSequenceId = TightUnmarshalLong(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            MessageId info = (MessageId)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.TextView, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ProducerId, bs);
+            rc += TightMarshalLong1(wireFormat, info.ProducerSequenceId, bs);
+            rc += TightMarshalLong1(wireFormat, info.BrokerSequenceId, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            MessageId info = (MessageId)o;
+            TightMarshalString2(info.TextView, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ProducerId, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.ProducerSequenceId, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.BrokerSequenceId, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            MessageId info = (MessageId)o;
+            info.TextView = LooseUnmarshalString(dataIn);
+            info.ProducerId = (ProducerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.ProducerSequenceId = LooseUnmarshalLong(wireFormat, dataIn);
+            info.BrokerSequenceId = LooseUnmarshalLong(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            MessageId info = (MessageId)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.TextView, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ProducerId, dataOut);
+            LooseMarshalLong(wireFormat, info.ProducerSequenceId, dataOut);
+            LooseMarshalLong(wireFormat, info.BrokerSequenceId, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/MessageMarshaller.cs b/src/main/csharp/OpenWire/V10/MessageMarshaller.cs
new file mode 100644
index 0000000..291c076
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/MessageMarshaller.cs
@@ -0,0 +1,301 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for Message
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for Message
+    /// </summary>
+    abstract class MessageMarshaller : BaseCommandMarshaller
+    {
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            Message info = (Message)o;
+            info.ProducerId = (ProducerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Destination = (ActiveMQDestination) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.TransactionId = (TransactionId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.OriginalDestination = (ActiveMQDestination) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.MessageId = (MessageId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.OriginalTransactionId = (TransactionId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.GroupID = TightUnmarshalString(dataIn, bs);
+            info.GroupSequence = dataIn.ReadInt32();
+            info.CorrelationId = TightUnmarshalString(dataIn, bs);
+            info.Persistent = bs.ReadBoolean();
+            info.Expiration = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.Priority = dataIn.ReadByte();
+            info.ReplyTo = (ActiveMQDestination) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.Timestamp = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.Type = TightUnmarshalString(dataIn, bs);
+            info.Content = ReadBytes(dataIn, bs.ReadBoolean());
+            info.MarshalledProperties = ReadBytes(dataIn, bs.ReadBoolean());
+            info.DataStructure = (DataStructure) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.TargetConsumerId = (ConsumerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Compressed = bs.ReadBoolean();
+            info.RedeliveryCounter = dataIn.ReadInt32();
+
+            if (bs.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) TightUnmarshalNestedObject(wireFormat,dataIn, bs);
+                }
+                info.BrokerPath = value;
+            }
+            else {
+                info.BrokerPath = null;
+            }
+            info.Arrival = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.UserID = TightUnmarshalString(dataIn, bs);
+            info.RecievedByDFBridge = bs.ReadBoolean();
+            info.Droppable = bs.ReadBoolean();
+
+            if (bs.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) TightUnmarshalNestedObject(wireFormat,dataIn, bs);
+                }
+                info.Cluster = value;
+            }
+            else {
+                info.Cluster = null;
+            }
+            info.BrokerInTime = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.BrokerOutTime = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.JMSXGroupFirstForConsumer = bs.ReadBoolean();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            Message info = (Message)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ProducerId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.Destination, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.TransactionId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.OriginalDestination, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.MessageId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.OriginalTransactionId, bs);
+            rc += TightMarshalString1(info.GroupID, bs);
+            rc += TightMarshalString1(info.CorrelationId, bs);
+            bs.WriteBoolean(info.Persistent);
+            rc += TightMarshalLong1(wireFormat, info.Expiration, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.ReplyTo, bs);
+            rc += TightMarshalLong1(wireFormat, info.Timestamp, bs);
+            rc += TightMarshalString1(info.Type, bs);
+            bs.WriteBoolean(info.Content!=null);
+            rc += info.Content==null ? 0 : info.Content.Length+4;
+            bs.WriteBoolean(info.MarshalledProperties!=null);
+            rc += info.MarshalledProperties==null ? 0 : info.MarshalledProperties.Length+4;
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.DataStructure, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.TargetConsumerId, bs);
+            bs.WriteBoolean(info.Compressed);
+            rc += TightMarshalObjectArray1(wireFormat, info.BrokerPath, bs);
+            rc += TightMarshalLong1(wireFormat, info.Arrival, bs);
+            rc += TightMarshalString1(info.UserID, bs);
+            bs.WriteBoolean(info.RecievedByDFBridge);
+            bs.WriteBoolean(info.Droppable);
+            rc += TightMarshalObjectArray1(wireFormat, info.Cluster, bs);
+            rc += TightMarshalLong1(wireFormat, info.BrokerInTime, bs);
+            rc += TightMarshalLong1(wireFormat, info.BrokerOutTime, bs);
+            bs.WriteBoolean(info.JMSXGroupFirstForConsumer);
+
+            return rc + 9;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            Message info = (Message)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ProducerId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.TransactionId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.OriginalDestination, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.MessageId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.OriginalTransactionId, dataOut, bs);
+            TightMarshalString2(info.GroupID, dataOut, bs);
+            dataOut.Write(info.GroupSequence);
+            TightMarshalString2(info.CorrelationId, dataOut, bs);
+            bs.ReadBoolean();
+            TightMarshalLong2(wireFormat, info.Expiration, dataOut, bs);
+            dataOut.Write(info.Priority);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.ReplyTo, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.Timestamp, dataOut, bs);
+            TightMarshalString2(info.Type, dataOut, bs);
+            if(bs.ReadBoolean()) {
+                dataOut.Write(info.Content.Length);
+                dataOut.Write(info.Content);
+            }
+            if(bs.ReadBoolean()) {
+                dataOut.Write(info.MarshalledProperties.Length);
+                dataOut.Write(info.MarshalledProperties);
+            }
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.DataStructure, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.TargetConsumerId, dataOut, bs);
+            bs.ReadBoolean();
+            dataOut.Write(info.RedeliveryCounter);
+            TightMarshalObjectArray2(wireFormat, info.BrokerPath, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.Arrival, dataOut, bs);
+            TightMarshalString2(info.UserID, dataOut, bs);
+            bs.ReadBoolean();
+            bs.ReadBoolean();
+            TightMarshalObjectArray2(wireFormat, info.Cluster, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.BrokerInTime, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.BrokerOutTime, dataOut, bs);
+            bs.ReadBoolean();
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            Message info = (Message)o;
+            info.ProducerId = (ProducerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Destination = (ActiveMQDestination) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.TransactionId = (TransactionId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.OriginalDestination = (ActiveMQDestination) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.MessageId = (MessageId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.OriginalTransactionId = (TransactionId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.GroupID = LooseUnmarshalString(dataIn);
+            info.GroupSequence = dataIn.ReadInt32();
+            info.CorrelationId = LooseUnmarshalString(dataIn);
+            info.Persistent = dataIn.ReadBoolean();
+            info.Expiration = LooseUnmarshalLong(wireFormat, dataIn);
+            info.Priority = dataIn.ReadByte();
+            info.ReplyTo = (ActiveMQDestination) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.Timestamp = LooseUnmarshalLong(wireFormat, dataIn);
+            info.Type = LooseUnmarshalString(dataIn);
+            info.Content = ReadBytes(dataIn, dataIn.ReadBoolean());
+            info.MarshalledProperties = ReadBytes(dataIn, dataIn.ReadBoolean());
+            info.DataStructure = (DataStructure) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.TargetConsumerId = (ConsumerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Compressed = dataIn.ReadBoolean();
+            info.RedeliveryCounter = dataIn.ReadInt32();
+
+            if (dataIn.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) LooseUnmarshalNestedObject(wireFormat,dataIn);
+                }
+                info.BrokerPath = value;
+            }
+            else {
+                info.BrokerPath = null;
+            }
+            info.Arrival = LooseUnmarshalLong(wireFormat, dataIn);
+            info.UserID = LooseUnmarshalString(dataIn);
+            info.RecievedByDFBridge = dataIn.ReadBoolean();
+            info.Droppable = dataIn.ReadBoolean();
+
+            if (dataIn.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) LooseUnmarshalNestedObject(wireFormat,dataIn);
+                }
+                info.Cluster = value;
+            }
+            else {
+                info.Cluster = null;
+            }
+            info.BrokerInTime = LooseUnmarshalLong(wireFormat, dataIn);
+            info.BrokerOutTime = LooseUnmarshalLong(wireFormat, dataIn);
+            info.JMSXGroupFirstForConsumer = dataIn.ReadBoolean();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            Message info = (Message)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ProducerId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.TransactionId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.OriginalDestination, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.MessageId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.OriginalTransactionId, dataOut);
+            LooseMarshalString(info.GroupID, dataOut);
+            dataOut.Write(info.GroupSequence);
+            LooseMarshalString(info.CorrelationId, dataOut);
+            dataOut.Write(info.Persistent);
+            LooseMarshalLong(wireFormat, info.Expiration, dataOut);
+            dataOut.Write(info.Priority);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.ReplyTo, dataOut);
+            LooseMarshalLong(wireFormat, info.Timestamp, dataOut);
+            LooseMarshalString(info.Type, dataOut);
+            dataOut.Write(info.Content!=null);
+            if(info.Content!=null) {
+               dataOut.Write(info.Content.Length);
+               dataOut.Write(info.Content);
+            }
+            dataOut.Write(info.MarshalledProperties!=null);
+            if(info.MarshalledProperties!=null) {
+               dataOut.Write(info.MarshalledProperties.Length);
+               dataOut.Write(info.MarshalledProperties);
+            }
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.DataStructure, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.TargetConsumerId, dataOut);
+            dataOut.Write(info.Compressed);
+            dataOut.Write(info.RedeliveryCounter);
+            LooseMarshalObjectArray(wireFormat, info.BrokerPath, dataOut);
+            LooseMarshalLong(wireFormat, info.Arrival, dataOut);
+            LooseMarshalString(info.UserID, dataOut);
+            dataOut.Write(info.RecievedByDFBridge);
+            dataOut.Write(info.Droppable);
+            LooseMarshalObjectArray(wireFormat, info.Cluster, dataOut);
+            LooseMarshalLong(wireFormat, info.BrokerInTime, dataOut);
+            LooseMarshalLong(wireFormat, info.BrokerOutTime, dataOut);
+            dataOut.Write(info.JMSXGroupFirstForConsumer);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/MessagePullMarshaller.cs b/src/main/csharp/OpenWire/V10/MessagePullMarshaller.cs
new file mode 100644
index 0000000..0042ff8
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/MessagePullMarshaller.cs
@@ -0,0 +1,134 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for MessagePull
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for MessagePull
+    /// </summary>
+    class MessagePullMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new MessagePull();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return MessagePull.ID_MESSAGEPULL;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            MessagePull info = (MessagePull)o;
+            info.ConsumerId = (ConsumerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Destination = (ActiveMQDestination) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Timeout = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.CorrelationId = TightUnmarshalString(dataIn, bs);
+            info.MessageId = (MessageId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            MessagePull info = (MessagePull)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ConsumerId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.Destination, bs);
+            rc += TightMarshalLong1(wireFormat, info.Timeout, bs);
+            rc += TightMarshalString1(info.CorrelationId, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.MessageId, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            MessagePull info = (MessagePull)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ConsumerId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.Timeout, dataOut, bs);
+            TightMarshalString2(info.CorrelationId, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.MessageId, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            MessagePull info = (MessagePull)o;
+            info.ConsumerId = (ConsumerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Destination = (ActiveMQDestination) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Timeout = LooseUnmarshalLong(wireFormat, dataIn);
+            info.CorrelationId = LooseUnmarshalString(dataIn);
+            info.MessageId = (MessageId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            MessagePull info = (MessagePull)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ConsumerId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            LooseMarshalLong(wireFormat, info.Timeout, dataOut);
+            LooseMarshalString(info.CorrelationId, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.MessageId, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/NetworkBridgeFilterMarshaller.cs b/src/main/csharp/OpenWire/V10/NetworkBridgeFilterMarshaller.cs
new file mode 100644
index 0000000..14497c2
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/NetworkBridgeFilterMarshaller.cs
@@ -0,0 +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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for NetworkBridgeFilter
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for NetworkBridgeFilter
+    /// </summary>
+    class NetworkBridgeFilterMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new NetworkBridgeFilter();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return NetworkBridgeFilter.ID_NETWORKBRIDGEFILTER;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            NetworkBridgeFilter info = (NetworkBridgeFilter)o;
+            info.NetworkBrokerId = (BrokerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.MessageTTL = dataIn.ReadInt32();
+            info.ConsumerTTL = dataIn.ReadInt32();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            NetworkBridgeFilter info = (NetworkBridgeFilter)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.NetworkBrokerId, bs);
+
+            return rc + 8;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            NetworkBridgeFilter info = (NetworkBridgeFilter)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.NetworkBrokerId, dataOut, bs);
+            dataOut.Write(info.MessageTTL);
+            dataOut.Write(info.ConsumerTTL);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            NetworkBridgeFilter info = (NetworkBridgeFilter)o;
+            info.NetworkBrokerId = (BrokerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.MessageTTL = dataIn.ReadInt32();
+            info.ConsumerTTL = dataIn.ReadInt32();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            NetworkBridgeFilter info = (NetworkBridgeFilter)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.NetworkBrokerId, dataOut);
+            dataOut.Write(info.MessageTTL);
+            dataOut.Write(info.ConsumerTTL);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/PartialCommandMarshaller.cs b/src/main/csharp/OpenWire/V10/PartialCommandMarshaller.cs
new file mode 100644
index 0000000..9d074e5
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/PartialCommandMarshaller.cs
@@ -0,0 +1,126 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for PartialCommand
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for PartialCommand
+    /// </summary>
+    class PartialCommandMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new PartialCommand();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return PartialCommand.ID_PARTIALCOMMAND;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            PartialCommand info = (PartialCommand)o;
+            info.CommandId = dataIn.ReadInt32();
+            info.Data = ReadBytes(dataIn, bs.ReadBoolean());
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            PartialCommand info = (PartialCommand)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            bs.WriteBoolean(info.Data!=null);
+            rc += info.Data==null ? 0 : info.Data.Length+4;
+
+            return rc + 4;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            PartialCommand info = (PartialCommand)o;
+            dataOut.Write(info.CommandId);
+            if(bs.ReadBoolean()) {
+                dataOut.Write(info.Data.Length);
+                dataOut.Write(info.Data);
+            }
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            PartialCommand info = (PartialCommand)o;
+            info.CommandId = dataIn.ReadInt32();
+            info.Data = ReadBytes(dataIn, dataIn.ReadBoolean());
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            PartialCommand info = (PartialCommand)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            dataOut.Write(info.CommandId);
+            dataOut.Write(info.Data!=null);
+            if(info.Data!=null) {
+               dataOut.Write(info.Data.Length);
+               dataOut.Write(info.Data);
+            }
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ProducerAckMarshaller.cs b/src/main/csharp/OpenWire/V10/ProducerAckMarshaller.cs
new file mode 100644
index 0000000..99d4264
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ProducerAckMarshaller.cs
@@ -0,0 +1,118 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ProducerAck
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ProducerAck
+    /// </summary>
+    class ProducerAckMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ProducerAck();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ProducerAck.ID_PRODUCERACK;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ProducerAck info = (ProducerAck)o;
+            info.ProducerId = (ProducerId) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+            info.Size = dataIn.ReadInt32();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ProducerAck info = (ProducerAck)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.ProducerId, bs);
+
+            return rc + 4;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ProducerAck info = (ProducerAck)o;
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.ProducerId, dataOut, bs);
+            dataOut.Write(info.Size);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ProducerAck info = (ProducerAck)o;
+            info.ProducerId = (ProducerId) LooseUnmarshalNestedObject(wireFormat, dataIn);
+            info.Size = dataIn.ReadInt32();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ProducerAck info = (ProducerAck)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.ProducerId, dataOut);
+            dataOut.Write(info.Size);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ProducerIdMarshaller.cs b/src/main/csharp/OpenWire/V10/ProducerIdMarshaller.cs
new file mode 100644
index 0000000..8e15a47
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ProducerIdMarshaller.cs
@@ -0,0 +1,124 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ProducerId
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ProducerId
+    /// </summary>
+    class ProducerIdMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ProducerId();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ProducerId.ID_PRODUCERID;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ProducerId info = (ProducerId)o;
+            info.ConnectionId = TightUnmarshalString(dataIn, bs);
+            info.Value = TightUnmarshalLong(wireFormat, dataIn, bs);
+            info.SessionId = TightUnmarshalLong(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ProducerId info = (ProducerId)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.ConnectionId, bs);
+            rc += TightMarshalLong1(wireFormat, info.Value, bs);
+            rc += TightMarshalLong1(wireFormat, info.SessionId, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ProducerId info = (ProducerId)o;
+            TightMarshalString2(info.ConnectionId, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.Value, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.SessionId, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ProducerId info = (ProducerId)o;
+            info.ConnectionId = LooseUnmarshalString(dataIn);
+            info.Value = LooseUnmarshalLong(wireFormat, dataIn);
+            info.SessionId = LooseUnmarshalLong(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ProducerId info = (ProducerId)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.ConnectionId, dataOut);
+            LooseMarshalLong(wireFormat, info.Value, dataOut);
+            LooseMarshalLong(wireFormat, info.SessionId, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ProducerInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/ProducerInfoMarshaller.cs
new file mode 100644
index 0000000..d96d2a2
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ProducerInfoMarshaller.cs
@@ -0,0 +1,155 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ProducerInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ProducerInfo
+    /// </summary>
+    class ProducerInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ProducerInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ProducerInfo.ID_PRODUCERINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ProducerInfo info = (ProducerInfo)o;
+            info.ProducerId = (ProducerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Destination = (ActiveMQDestination) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+
+            if (bs.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) TightUnmarshalNestedObject(wireFormat,dataIn, bs);
+                }
+                info.BrokerPath = value;
+            }
+            else {
+                info.BrokerPath = null;
+            }
+            info.DispatchAsync = bs.ReadBoolean();
+            info.WindowSize = dataIn.ReadInt32();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            ProducerInfo info = (ProducerInfo)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ProducerId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.Destination, bs);
+            rc += TightMarshalObjectArray1(wireFormat, info.BrokerPath, bs);
+            bs.WriteBoolean(info.DispatchAsync);
+
+            return rc + 4;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ProducerInfo info = (ProducerInfo)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ProducerId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            TightMarshalObjectArray2(wireFormat, info.BrokerPath, dataOut, bs);
+            bs.ReadBoolean();
+            dataOut.Write(info.WindowSize);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ProducerInfo info = (ProducerInfo)o;
+            info.ProducerId = (ProducerId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Destination = (ActiveMQDestination) LooseUnmarshalCachedObject(wireFormat, dataIn);
+
+            if (dataIn.ReadBoolean()) {
+                short size = dataIn.ReadInt16();
+                BrokerId[] value = new BrokerId[size];
+                for( int i=0; i < size; i++ ) {
+                    value[i] = (BrokerId) LooseUnmarshalNestedObject(wireFormat,dataIn);
+                }
+                info.BrokerPath = value;
+            }
+            else {
+                info.BrokerPath = null;
+            }
+            info.DispatchAsync = dataIn.ReadBoolean();
+            info.WindowSize = dataIn.ReadInt32();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ProducerInfo info = (ProducerInfo)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ProducerId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            LooseMarshalObjectArray(wireFormat, info.BrokerPath, dataOut);
+            dataOut.Write(info.DispatchAsync);
+            dataOut.Write(info.WindowSize);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/RemoveInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/RemoveInfoMarshaller.cs
new file mode 100644
index 0000000..aae322e
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/RemoveInfoMarshaller.cs
@@ -0,0 +1,119 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for RemoveInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for RemoveInfo
+    /// </summary>
+    class RemoveInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new RemoveInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return RemoveInfo.ID_REMOVEINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            RemoveInfo info = (RemoveInfo)o;
+            info.ObjectId = (DataStructure) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.LastDeliveredSequenceId = TightUnmarshalLong(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            RemoveInfo info = (RemoveInfo)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ObjectId, bs);
+            rc += TightMarshalLong1(wireFormat, info.LastDeliveredSequenceId, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            RemoveInfo info = (RemoveInfo)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ObjectId, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.LastDeliveredSequenceId, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            RemoveInfo info = (RemoveInfo)o;
+            info.ObjectId = (DataStructure) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.LastDeliveredSequenceId = LooseUnmarshalLong(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            RemoveInfo info = (RemoveInfo)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ObjectId, dataOut);
+            LooseMarshalLong(wireFormat, info.LastDeliveredSequenceId, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs
new file mode 100644
index 0000000..0846c1f
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs
@@ -0,0 +1,124 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for RemoveSubscriptionInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for RemoveSubscriptionInfo
+    /// </summary>
+    class RemoveSubscriptionInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new RemoveSubscriptionInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return RemoveSubscriptionInfo.ID_REMOVESUBSCRIPTIONINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            RemoveSubscriptionInfo info = (RemoveSubscriptionInfo)o;
+            info.ConnectionId = (ConnectionId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.SubcriptionName = TightUnmarshalString(dataIn, bs);
+            info.ClientId = TightUnmarshalString(dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            RemoveSubscriptionInfo info = (RemoveSubscriptionInfo)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ConnectionId, bs);
+            rc += TightMarshalString1(info.SubcriptionName, bs);
+            rc += TightMarshalString1(info.ClientId, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            RemoveSubscriptionInfo info = (RemoveSubscriptionInfo)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ConnectionId, dataOut, bs);
+            TightMarshalString2(info.SubcriptionName, dataOut, bs);
+            TightMarshalString2(info.ClientId, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            RemoveSubscriptionInfo info = (RemoveSubscriptionInfo)o;
+            info.ConnectionId = (ConnectionId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.SubcriptionName = LooseUnmarshalString(dataIn);
+            info.ClientId = LooseUnmarshalString(dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            RemoveSubscriptionInfo info = (RemoveSubscriptionInfo)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ConnectionId, dataOut);
+            LooseMarshalString(info.SubcriptionName, dataOut);
+            LooseMarshalString(info.ClientId, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ReplayCommandMarshaller.cs b/src/main/csharp/OpenWire/V10/ReplayCommandMarshaller.cs
new file mode 100644
index 0000000..0e1da64
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ReplayCommandMarshaller.cs
@@ -0,0 +1,116 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ReplayCommand
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ReplayCommand
+    /// </summary>
+    class ReplayCommandMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ReplayCommand();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ReplayCommand.ID_REPLAYCOMMAND;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            ReplayCommand info = (ReplayCommand)o;
+            info.FirstNakNumber = dataIn.ReadInt32();
+            info.LastNakNumber = dataIn.ReadInt32();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 8;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            ReplayCommand info = (ReplayCommand)o;
+            dataOut.Write(info.FirstNakNumber);
+            dataOut.Write(info.LastNakNumber);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            ReplayCommand info = (ReplayCommand)o;
+            info.FirstNakNumber = dataIn.ReadInt32();
+            info.LastNakNumber = dataIn.ReadInt32();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            ReplayCommand info = (ReplayCommand)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            dataOut.Write(info.FirstNakNumber);
+            dataOut.Write(info.LastNakNumber);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ResponseMarshaller.cs b/src/main/csharp/OpenWire/V10/ResponseMarshaller.cs
new file mode 100644
index 0000000..2c10145
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ResponseMarshaller.cs
@@ -0,0 +1,112 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for Response
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for Response
+    /// </summary>
+    class ResponseMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new Response();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return Response.ID_RESPONSE;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            Response info = (Response)o;
+            info.CorrelationId = dataIn.ReadInt32();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 4;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            Response info = (Response)o;
+            dataOut.Write(info.CorrelationId);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            Response info = (Response)o;
+            info.CorrelationId = dataIn.ReadInt32();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            Response info = (Response)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            dataOut.Write(info.CorrelationId);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/SessionIdMarshaller.cs b/src/main/csharp/OpenWire/V10/SessionIdMarshaller.cs
new file mode 100644
index 0000000..46e608c
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/SessionIdMarshaller.cs
@@ -0,0 +1,119 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for SessionId
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for SessionId
+    /// </summary>
+    class SessionIdMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new SessionId();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return SessionId.ID_SESSIONID;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            SessionId info = (SessionId)o;
+            info.ConnectionId = TightUnmarshalString(dataIn, bs);
+            info.Value = TightUnmarshalLong(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            SessionId info = (SessionId)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.ConnectionId, bs);
+            rc += TightMarshalLong1(wireFormat, info.Value, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            SessionId info = (SessionId)o;
+            TightMarshalString2(info.ConnectionId, dataOut, bs);
+            TightMarshalLong2(wireFormat, info.Value, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            SessionId info = (SessionId)o;
+            info.ConnectionId = LooseUnmarshalString(dataIn);
+            info.Value = LooseUnmarshalLong(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            SessionId info = (SessionId)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.ConnectionId, dataOut);
+            LooseMarshalLong(wireFormat, info.Value, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/SessionInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/SessionInfoMarshaller.cs
new file mode 100644
index 0000000..9c02d9f
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/SessionInfoMarshaller.cs
@@ -0,0 +1,114 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for SessionInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for SessionInfo
+    /// </summary>
+    class SessionInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new SessionInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return SessionInfo.ID_SESSIONINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            SessionInfo info = (SessionInfo)o;
+            info.SessionId = (SessionId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            SessionInfo info = (SessionInfo)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.SessionId, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            SessionInfo info = (SessionInfo)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.SessionId, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            SessionInfo info = (SessionInfo)o;
+            info.SessionId = (SessionId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            SessionInfo info = (SessionInfo)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.SessionId, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/ShutdownInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/ShutdownInfoMarshaller.cs
new file mode 100644
index 0000000..b072f34
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/ShutdownInfoMarshaller.cs
@@ -0,0 +1,100 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for ShutdownInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for ShutdownInfo
+    /// </summary>
+    class ShutdownInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new ShutdownInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return ShutdownInfo.ID_SHUTDOWNINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/SubscriptionInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/SubscriptionInfoMarshaller.cs
new file mode 100644
index 0000000..1ba48e9
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/SubscriptionInfoMarshaller.cs
@@ -0,0 +1,134 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for SubscriptionInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for SubscriptionInfo
+    /// </summary>
+    class SubscriptionInfoMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new SubscriptionInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return SubscriptionInfo.ID_SUBSCRIPTIONINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            SubscriptionInfo info = (SubscriptionInfo)o;
+            info.ClientId = TightUnmarshalString(dataIn, bs);
+            info.Destination = (ActiveMQDestination) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Selector = TightUnmarshalString(dataIn, bs);
+            info.SubcriptionName = TightUnmarshalString(dataIn, bs);
+            info.SubscribedDestination = (ActiveMQDestination) TightUnmarshalNestedObject(wireFormat, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            SubscriptionInfo info = (SubscriptionInfo)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalString1(info.ClientId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.Destination, bs);
+            rc += TightMarshalString1(info.Selector, bs);
+            rc += TightMarshalString1(info.SubcriptionName, bs);
+        rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.SubscribedDestination, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            SubscriptionInfo info = (SubscriptionInfo)o;
+            TightMarshalString2(info.ClientId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.Destination, dataOut, bs);
+            TightMarshalString2(info.Selector, dataOut, bs);
+            TightMarshalString2(info.SubcriptionName, dataOut, bs);
+            TightMarshalNestedObject2(wireFormat, (DataStructure)info.SubscribedDestination, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            SubscriptionInfo info = (SubscriptionInfo)o;
+            info.ClientId = LooseUnmarshalString(dataIn);
+            info.Destination = (ActiveMQDestination) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Selector = LooseUnmarshalString(dataIn);
+            info.SubcriptionName = LooseUnmarshalString(dataIn);
+            info.SubscribedDestination = (ActiveMQDestination) LooseUnmarshalNestedObject(wireFormat, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            SubscriptionInfo info = (SubscriptionInfo)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalString(info.ClientId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.Destination, dataOut);
+            LooseMarshalString(info.Selector, dataOut);
+            LooseMarshalString(info.SubcriptionName, dataOut);
+            LooseMarshalNestedObject(wireFormat, (DataStructure)info.SubscribedDestination, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/TransactionIdMarshaller.cs b/src/main/csharp/OpenWire/V10/TransactionIdMarshaller.cs
new file mode 100644
index 0000000..4274639
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/TransactionIdMarshaller.cs
@@ -0,0 +1,85 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for TransactionId
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for TransactionId
+    /// </summary>
+    abstract class TransactionIdMarshaller : BaseDataStreamMarshaller
+    {
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+
+            return rc + 0;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/TransactionInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/TransactionInfoMarshaller.cs
new file mode 100644
index 0000000..0ce77a0
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/TransactionInfoMarshaller.cs
@@ -0,0 +1,123 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for TransactionInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for TransactionInfo
+    /// </summary>
+    class TransactionInfoMarshaller : BaseCommandMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new TransactionInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return TransactionInfo.ID_TRANSACTIONINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            TransactionInfo info = (TransactionInfo)o;
+            info.ConnectionId = (ConnectionId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.TransactionId = (TransactionId) TightUnmarshalCachedObject(wireFormat, dataIn, bs);
+            info.Type = dataIn.ReadByte();
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            TransactionInfo info = (TransactionInfo)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.ConnectionId, bs);
+            rc += TightMarshalCachedObject1(wireFormat, (DataStructure)info.TransactionId, bs);
+
+            return rc + 1;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            TransactionInfo info = (TransactionInfo)o;
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.ConnectionId, dataOut, bs);
+            TightMarshalCachedObject2(wireFormat, (DataStructure)info.TransactionId, dataOut, bs);
+            dataOut.Write(info.Type);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            TransactionInfo info = (TransactionInfo)o;
+            info.ConnectionId = (ConnectionId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.TransactionId = (TransactionId) LooseUnmarshalCachedObject(wireFormat, dataIn);
+            info.Type = dataIn.ReadByte();
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            TransactionInfo info = (TransactionInfo)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.ConnectionId, dataOut);
+            LooseMarshalCachedObject(wireFormat, (DataStructure)info.TransactionId, dataOut);
+            dataOut.Write(info.Type);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/WireFormatInfoMarshaller.cs b/src/main/csharp/OpenWire/V10/WireFormatInfoMarshaller.cs
new file mode 100644
index 0000000..39707c4
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/WireFormatInfoMarshaller.cs
@@ -0,0 +1,148 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for WireFormatInfo
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for WireFormatInfo
+    /// </summary>
+    class WireFormatInfoMarshaller : BaseDataStreamMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new WireFormatInfo();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return WireFormatInfo.ID_WIREFORMATINFO;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            WireFormatInfo info = (WireFormatInfo)o;
+
+            info.BeforeUnmarshall(wireFormat);
+
+            info.Magic = ReadBytes(dataIn, 8);
+            info.Version = dataIn.ReadInt32();
+            info.MarshalledProperties = ReadBytes(dataIn, bs.ReadBoolean());
+
+            info.AfterUnmarshall(wireFormat);
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            WireFormatInfo info = (WireFormatInfo)o;
+
+            info.BeforeMarshall(wireFormat);
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            bs.WriteBoolean(info.MarshalledProperties!=null);
+            rc += info.MarshalledProperties==null ? 0 : info.MarshalledProperties.Length+4;
+
+            return rc + 12;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            WireFormatInfo info = (WireFormatInfo)o;
+            dataOut.Write(info.Magic, 0, 8);
+            dataOut.Write(info.Version);
+            if(bs.ReadBoolean()) {
+                dataOut.Write(info.MarshalledProperties.Length);
+                dataOut.Write(info.MarshalledProperties);
+            }
+
+            info.AfterMarshall(wireFormat);
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            WireFormatInfo info = (WireFormatInfo)o;
+
+            info.BeforeUnmarshall(wireFormat);
+
+            info.Magic = ReadBytes(dataIn, 8);
+            info.Version = dataIn.ReadInt32();
+            info.MarshalledProperties = ReadBytes(dataIn, dataIn.ReadBoolean());
+
+            info.AfterUnmarshall(wireFormat);
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            WireFormatInfo info = (WireFormatInfo)o;
+
+            info.BeforeMarshall(wireFormat);
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            dataOut.Write(info.Magic, 0, 8);
+            dataOut.Write(info.Version);
+            dataOut.Write(info.MarshalledProperties!=null);
+            if(info.MarshalledProperties!=null) {
+               dataOut.Write(info.MarshalledProperties.Length);
+               dataOut.Write(info.MarshalledProperties);
+            }
+
+            info.AfterMarshall(wireFormat);
+        }
+    }
+}
diff --git a/src/main/csharp/OpenWire/V10/XATransactionIdMarshaller.cs b/src/main/csharp/OpenWire/V10/XATransactionIdMarshaller.cs
new file mode 100644
index 0000000..63c5f4c
--- /dev/null
+++ b/src/main/csharp/OpenWire/V10/XATransactionIdMarshaller.cs
@@ -0,0 +1,139 @@
+/*
+ * 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.
+ */
+
+/*
+ *
+ *  Marshaler code for OpenWire format for XATransactionId
+ *
+ *  NOTE!: This file is auto generated - do not modify!
+ *         if you need to make a change, please see the Java Classes
+ *         in the nms-activemq-openwire-generator module
+ *
+ */
+
+using System;
+using System.IO;
+
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.OpenWire.V10
+{
+    /// <summary>
+    ///  Marshalling code for Open Wire Format for XATransactionId
+    /// </summary>
+    class XATransactionIdMarshaller : TransactionIdMarshaller
+    {
+        /// <summery>
+        ///  Creates an instance of the Object that this marshaller handles.
+        /// </summery>
+        public override DataStructure CreateObject() 
+        {
+            return new XATransactionId();
+        }
+
+        /// <summery>
+        ///  Returns the type code for the Object that this Marshaller handles..
+        /// </summery>
+        public override byte GetDataStructureType() 
+        {
+            return XATransactionId.ID_XATRANSACTIONID;
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) 
+        {
+            base.TightUnmarshal(wireFormat, o, dataIn, bs);
+
+            XATransactionId info = (XATransactionId)o;
+            info.FormatId = dataIn.ReadInt32();
+            info.GlobalTransactionId = ReadBytes(dataIn, bs.ReadBoolean());
+            info.BranchQualifier = ReadBytes(dataIn, bs.ReadBoolean());
+        }
+
+        //
+        // Write the booleans that this object uses to a BooleanStream
+        //
+        public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
+        {
+            XATransactionId info = (XATransactionId)o;
+
+            int rc = base.TightMarshal1(wireFormat, o, bs);
+            bs.WriteBoolean(info.GlobalTransactionId!=null);
+            rc += info.GlobalTransactionId==null ? 0 : info.GlobalTransactionId.Length+4;
+            bs.WriteBoolean(info.BranchQualifier!=null);
+            rc += info.BranchQualifier==null ? 0 : info.BranchQualifier.Length+4;
+
+            return rc + 4;
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs)
+        {
+            base.TightMarshal2(wireFormat, o, dataOut, bs);
+
+            XATransactionId info = (XATransactionId)o;
+            dataOut.Write(info.FormatId);
+            if(bs.ReadBoolean()) {
+                dataOut.Write(info.GlobalTransactionId.Length);
+                dataOut.Write(info.GlobalTransactionId);
+            }
+            if(bs.ReadBoolean()) {
+                dataOut.Write(info.BranchQualifier.Length);
+                dataOut.Write(info.BranchQualifier);
+            }
+        }
+
+        // 
+        // Un-marshal an object instance from the data input stream
+        // 
+        public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) 
+        {
+            base.LooseUnmarshal(wireFormat, o, dataIn);
+
+            XATransactionId info = (XATransactionId)o;
+            info.FormatId = dataIn.ReadInt32();
+            info.GlobalTransactionId = ReadBytes(dataIn, dataIn.ReadBoolean());
+            info.BranchQualifier = ReadBytes(dataIn, dataIn.ReadBoolean());
+        }
+
+        // 
+        // Write a object instance to data output stream
+        //
+        public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut)
+        {
+
+            XATransactionId info = (XATransactionId)o;
+
+            base.LooseMarshal(wireFormat, o, dataOut);
+            dataOut.Write(info.FormatId);
+            dataOut.Write(info.GlobalTransactionId!=null);
+            if(info.GlobalTransactionId!=null) {
+               dataOut.Write(info.GlobalTransactionId.Length);
+               dataOut.Write(info.GlobalTransactionId);
+            }
+            dataOut.Write(info.BranchQualifier!=null);
+            if(info.BranchQualifier!=null) {
+               dataOut.Write(info.BranchQualifier.Length);
+               dataOut.Write(info.BranchQualifier);
+            }
+        }
+    }
+}