diff --git a/src/DotPulsar/Internal/Abstractions/IProducerChannel.cs b/src/DotPulsar/Internal/Abstractions/IProducerChannel.cs
index 9fe2eb1..b793181 100644
--- a/src/DotPulsar/Internal/Abstractions/IProducerChannel.cs
+++ b/src/DotPulsar/Internal/Abstractions/IProducerChannel.cs
@@ -22,7 +22,6 @@
 
     public interface IProducerChannel : IAsyncDisposable
     {
-        Task<CommandSendReceipt> Send(ulong sequenceId, ReadOnlySequence<byte> payload, CancellationToken cancellationToken);
         Task<CommandSendReceipt> Send(MessageMetadata metadata, ReadOnlySequence<byte> payload, CancellationToken cancellationToken);
     }
 }
diff --git a/src/DotPulsar/Internal/Producer.cs b/src/DotPulsar/Internal/Producer.cs
index da2aacd..8f4ed1a 100644
--- a/src/DotPulsar/Internal/Producer.cs
+++ b/src/DotPulsar/Internal/Producer.cs
@@ -18,6 +18,7 @@
     using DotPulsar.Abstractions;
     using DotPulsar.Exceptions;
     using Events;
+    using Microsoft.Extensions.ObjectPool;
     using System;
     using System.Buffers;
     using System.Threading;
@@ -25,6 +26,7 @@
 
     public sealed class Producer : IProducer
     {
+        private readonly ObjectPool<PulsarApi.MessageMetadata> _messageMetadataPool;
         private readonly Guid _correlationId;
         private readonly IRegisterEvent _eventRegister;
         private IProducerChannel _channel;
@@ -44,6 +46,8 @@
             IExecute executor,
             IStateChanged<ProducerState> state)
         {
+            var messageMetadataPolicy = new DefaultPooledObjectPolicy<PulsarApi.MessageMetadata>();
+            _messageMetadataPool = new DefaultObjectPool<PulsarApi.MessageMetadata>(messageMetadataPolicy);
             _correlationId = correlationId;
             Topic = topic;
             _sequenceId = new SequenceId(initialSequenceId);
@@ -93,9 +97,17 @@
         public async ValueTask<MessageId> Send(ReadOnlySequence<byte> data, CancellationToken cancellationToken)
         {
             ThrowIfDisposed();
-            var sequenceId = _sequenceId.FetchNext();
-            var response = await _executor.Execute(() => _channel.Send(sequenceId, data, cancellationToken), cancellationToken).ConfigureAwait(false);
-            return new MessageId(response.MessageId);
+            var metadata = _messageMetadataPool.Get();
+            try
+            {
+                metadata.SequenceId = _sequenceId.FetchNext();
+                var response = await _executor.Execute(() => _channel.Send(metadata, data, cancellationToken), cancellationToken).ConfigureAwait(false);
+                return new MessageId(response.MessageId);
+            }
+            finally
+            {
+                _messageMetadataPool.Return(metadata);
+            }
         }
 
         public ValueTask<MessageId> Send(MessageMetadata metadata, byte[] data, CancellationToken cancellationToken)
diff --git a/src/DotPulsar/Internal/ProducerChannel.cs b/src/DotPulsar/Internal/ProducerChannel.cs
index e7e062b..05390a9 100644
--- a/src/DotPulsar/Internal/ProducerChannel.cs
+++ b/src/DotPulsar/Internal/ProducerChannel.cs
@@ -25,7 +25,6 @@
 
     public sealed class ProducerChannel : IProducerChannel
     {
-        private readonly ObjectPool<MessageMetadata> _messageMetadataPool;
         private readonly ObjectPool<SendPackage> _sendPackagePool;
         private readonly ulong _id;
         private readonly string _name;
@@ -33,8 +32,6 @@
 
         public ProducerChannel(ulong id, string name, IConnection connection)
         {
-            var messageMetadataPolicy = new DefaultPooledObjectPolicy<MessageMetadata>();
-            _messageMetadataPool = new DefaultObjectPool<MessageMetadata>(messageMetadataPolicy);
             var sendPackagePolicy = new DefaultPooledObjectPolicy<SendPackage>();
             _sendPackagePool = new DefaultObjectPool<SendPackage>(sendPackagePolicy);
             _id = id;
@@ -55,50 +52,28 @@
             }
         }
 
-        public Task<CommandSendReceipt> Send(ulong sequenceId, ReadOnlySequence<byte> payload, CancellationToken cancellationToken)
-        {
-            var metadata = _messageMetadataPool.Get();
-            metadata.ProducerName = _name;
-            metadata.SequenceId = sequenceId;
-            try
-            {
-                return SendPackage(metadata, payload, cancellationToken);
-            }
-            finally
-            {
-                _messageMetadataPool.Return(metadata);
-            }
-        }
-
-        public Task<CommandSendReceipt> Send(MessageMetadata metadata, ReadOnlySequence<byte> payload, CancellationToken cancellationToken)
-        {
-            metadata.ProducerName = _name;
-            return SendPackage(metadata, payload, cancellationToken);
-        }
-
-        private async Task<CommandSendReceipt> SendPackage(
-            MessageMetadata metadata,
-            ReadOnlySequence<byte> payload,
-            CancellationToken cancellationToken)
+        public async Task<CommandSendReceipt> Send(MessageMetadata metadata, ReadOnlySequence<byte> payload, CancellationToken cancellationToken)
         {
             var sendPackage = _sendPackagePool.Get();
 
-            if (sendPackage.Command is null)
-            {
-                sendPackage.Command = new CommandSend
-                {
-                    ProducerId = _id,
-                    NumMessages = 1
-                };
-            }
-
-            sendPackage.Command.SequenceId = metadata.SequenceId;
-            sendPackage.Metadata = metadata;
-            sendPackage.Payload = payload;
-            metadata.PublishTime = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); // TODO Benchmark against StopWatch
-
             try
             {
+                metadata.PublishTime = (ulong) DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                metadata.ProducerName = _name;
+
+                if (sendPackage.Command is null)
+                {
+                    sendPackage.Command = new CommandSend
+                    {
+                        ProducerId = _id,
+                        NumMessages = 1
+                    };
+                }
+
+                sendPackage.Command.SequenceId = metadata.SequenceId;
+                sendPackage.Metadata = metadata;
+                sendPackage.Payload = payload;
+
                 var response = await _connection.Send(sendPackage, cancellationToken).ConfigureAwait(false);
                 response.Expect(BaseCommand.Type.SendReceipt);
                 return response.SendReceipt;
