diff --git a/CHANGELOG.md b/CHANGELOG.md
index aaf2c1e..0081ed9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,50 @@
 
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
+## [0.11.0] - 2021-02-21
+
+### Added
+
+- The Consumer and Reader now share the IReceive interface for receiving a single message: ValueTask\<Message\> Receive(CancellationToken cancellationToken)
+- The Consumer and Reader now share the ISeek interface for seeking on message-id and publish time
+- The Consumer and Reader now share the IGetLastMessageId interface for getting the last message-id on a topic
+- The Consumer, Reader, and Producer now share the IState interface adding 'OnStateChangeFrom' and 'OnStateChangeTo'
+- The PulsarClient, Consumer, Reader, and Producer now have the read-only property 'ServiceUrl'
+- The Consumer now have the read-only property 'SubscriptionName'
+- All message compression types are now supported (listed below). Please read this [compression how-to](https://github.com/apache/pulsar-dotpulsar/wiki/Compression)
+    - LZ4
+	- SNAPPY
+    - ZLIB
+    - ZSTD
+
+### Changed
+
+- MessageId.ToString() now returns a string matching that of other clients: "{LedgerId}:{EntryId}:{Partition}:{BatchIndex}"
+- A lot of methods were made into extension methods and now require a using statement for 'DotPulsar.Extensions'
+    - Producer.StateChangedTo(ProducerState state, CancellationToken cancellationToken)
+	- Producer.StateChangedFrom(ProducerState state, CancellationToken cancellationToken)
+	- Producer.Send(byte[] data, CancellationToken cancellationToken)
+	- Producer.Send(ReadOnlyMemory\<byte\> data, CancellationToken cancellationToken)
+	- Producer.Send(MessageMetadata metadata, byte[] data, CancellationToken cancellationToken)
+	- Producer.Send(MessageMetadata metadata, ReadOnlyMemory\<byte\> data, CancellationToken cancellationToken)
+	- Consumer.Acknowledge(Message message, CancellationToken cancellationToken)
+	- Consumer.AcknowledgeCumulative(Message message, CancellationToken cancellationToken)
+	- Consumer.StateChangedTo(ConsumerState state, CancellationToken cancellationToken)
+	- Consumer.StateChangedFrom(ConsumerState state, CancellationToken cancellationToken)
+	- Consumer.Messages(CancellationToken cancellationToken)
+	- Consumer.Seek(DateTime publishTime, CancellationToken cancellationToken)
+	- Consumer.Seek(DateTimeOffset publishTime, CancellationToken cancellationToken)
+	- Reader.StateChangedTo(ReaderState state, CancellationToken cancellationToken)
+	- Reader.StateChangedFrom(ReaderState state, CancellationToken cancellationToken)
+	- Reader.Messages(CancellationToken cancellationToken)
+	- Reader.Seek(DateTime publishTime, CancellationToken cancellationToken)
+	- Reader.Seek(DateTimeOffset publishTime, CancellationToken cancellationToken)
+
+### Fixed
+
+- Before the Consumer and Reader would throw an ArgumentOutOfRangeException if they encountered a compressed message. Now they will throw a CompressionException if the compression type is not supported
+- DotPulsarEventSource (performance counters) was only enabled for .NET Standard 2.1. Now it's enabled for all target frameworks except .NET Standard 2.0
+
 ## [0.10.1] - 2020-12-23
 
 ### Added
@@ -12,7 +56,7 @@
 
 ### Fixed
 
-- Do not throw exceptions when disposing consumers, readers or producers
+- Do not throw exceptions when disposing consumers, readers, or producers
 
 ## [0.10.0] - 2020-12-16
 
@@ -20,7 +64,7 @@
 
 - Added performance improvements when receiving data
 - Added the IHandleStateChanged\<TStateChanged\> interface for easier state monitoring
-- Added StateChangedHandler methods on ConsumerBuilder, ReaderBuilder and ProducerBuilder for easier state monitoring
+- Added StateChangedHandler methods on ConsumerBuilder, ReaderBuilder, and ProducerBuilder for easier state monitoring
 - Added StateChangedHandler property on ConsumerOptions, ReaderOptions, and ProducerOptions for easier state monitoring
 - Added four new DotPulsarExceptions: InvalidTransactionStatusException, NotAllowedException, TransactionConflictException and TransactionCoordinatorNotFoundException
 - Added properties on Message to read EventTime and PublishTime as DateTime
diff --git a/README.md b/README.md
index c42e740..fe7afdc 100644
--- a/README.md
+++ b/README.md
@@ -2,11 +2,9 @@
 
 ![CI - Unit](https://github.com/apache/pulsar-dotpulsar/workflows/CI%20-%20Unit/badge.svg)
 
-.NET/C# client library for [Apache Pulsar](https://pulsar.apache.org/).
+The official .NET/C# client library for [Apache Pulsar](https://pulsar.apache.org/).
 
-DotPulsar is written entirely in C# and implements Apache Pulsar's [binary protocol](https://pulsar.apache.org/docs/en/develop-binary-protocol/). Other options was using the [C++ client library](https://pulsar.apache.org/docs/en/client-libraries-cpp/) (which is what the [Python client](https://pulsar.apache.org/docs/en/client-libraries-python/) and [Go client](https://pulsar.apache.org/docs/en/client-libraries-go/) do) or build on top of the [WebSocket API](https://pulsar.apache.org/docs/en/client-libraries-websocket/). We decided to implement the binary protocol to gain full control and maximize portability and performance.
-
-DotPulsar's API is strongly inspired by Apache Pulsar's official [Java client](https://pulsar.apache.org/docs/en/client-libraries-java/), but a 100% match is not a goal.
+DotPulsar is written entirely in C# and implements Apache Pulsar's [binary protocol](https://pulsar.apache.org/docs/en/develop-binary-protocol/).
 
 ## What's new?
 
@@ -52,48 +50,26 @@
 - [X] TLS Authentication
 - [X] JSON Web Token Authentication
 - [X] Producer send with custom metadata
-- [X] Producer send with event time, sequence id and delayed message delivery
+- [X] Producer send with event time, sequence id, and delayed message delivery
 - [X] Producer send with key and ordering key
 - [X] Consumer subscription with initial position and priority level
-- [X] Consumer subscription types exclusive, shared, failover and key shared
+- [X] Consumer subscription types exclusive, shared, failover, and key shared
 - [X] Consumer receive and single + cumulative acknowledge
-- [X] Consumer and Reader seek on message id and publish time
+- [X] Consumer and Reader seek on message-id and publish time
 - [X] Consumer unsubscribe
 - [X] Consume compacted topics
 - [X] Reader API
 - [X] Read/Consume/Acknowledge batched messages
 - [X] Pulsar Proxy
+- [X] [LZ4 message compression](https://github.com/apache/pulsar-dotpulsar/wiki/Compression)
+- [X] [ZLIB message compression](https://github.com/apache/pulsar-dotpulsar/wiki/Compression)
+- [X] [ZSTD message compression](https://github.com/apache/pulsar-dotpulsar/wiki/Compression)
+- [X] [SNAPPY message compression](https://github.com/apache/pulsar-dotpulsar/wiki/Compression)
 
 ## Roadmap
 
 Help prioritizing the roadmap is most welcome, so please reach out and tell us what you want and need.
 
-### 1.0.0
-
-We are feature complete for this release. We just need testing.
-
-- [X] Use IAsyncDisposable
-- [X] Use IAsyncEnumerable
-- [X] Use ValueTask instead of Task
-- [X] Make solution nullable
-- [X] Support .NET Standard 2.0 and 2.1
-
-### If requested by the community
-
-Let us know which features you need by creating an issue or by giving existing issues a "Thumbs up".
-
-* [Message encryption](https://github.com/apache/pulsar-dotpulsar/issues/8)
-* [Batching when producing](https://github.com/apache/pulsar-dotpulsar/issues/7)
-* [Schema](https://github.com/apache/pulsar-dotpulsar/issues/6)
-* [Partitioned topics](https://github.com/apache/pulsar-dotpulsar/issues/4)
-* [Multi-topic subscriptions](https://github.com/apache/pulsar-dotpulsar/issues/5)
-* Athenz Authentication
-* Kerberos Authentication
-* LZ4 message compression
-* ZLIB message compression
-* ZSTD message compression
-* SNAPPY message compression
-
 ## Join Our Community
 
 Apache Pulsar has a [Slack instance](https://pulsar.apache.org/contact/) and there you'll find us in the #dev-dotpulsar channel. Just waiting for you to pop by :-)
diff --git a/src/DotPulsar/DotPulsar.csproj b/src/DotPulsar/DotPulsar.csproj
index b22d835..f89de85 100644
--- a/src/DotPulsar/DotPulsar.csproj
+++ b/src/DotPulsar/DotPulsar.csproj
@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <TargetFrameworks>netstandard2.0;netstandard2.1;netcoreapp3.1;net5.0</TargetFrameworks>
-    <Version>0.10.1</Version>
+    <Version>0.11.0</Version>
     <AssemblyVersion>$(Version)</AssemblyVersion>
     <FileVersion>$(Version)</FileVersion>
     <Authors>DanskeCommodities;dblank</Authors>
@@ -12,7 +12,7 @@
     <PackageTags>Apache;Pulsar</PackageTags>
     <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
     <PackageReleaseNotes>Please refer to CHANGELOG.md for details</PackageReleaseNotes>
-    <Description>.NET/C# client library for Apache Pulsar</Description>
+    <Description>The official .NET/C# client library for Apache Pulsar</Description>
     <GenerateDocumentationFile>true</GenerateDocumentationFile>
     <PublishRepositoryUrl>true</PublishRepositoryUrl>
     <IncludeSymbols>true</IncludeSymbols>
@@ -30,15 +30,6 @@
   <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
     <PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="5.0.0" />
     <PackageReference Include="Microsoft.Bcl.HashCode" Version="1.1.1" />
-    <PackageReference Include="System.Diagnostics.DiagnosticSource" Version="5.0.1" />
-  </ItemGroup>
-
-  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
-    <PackageReference Include="System.Diagnostics.DiagnosticSource" Version="5.0.1" />
-  </ItemGroup>
-    
-  <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.1'">
-    <PackageReference Include="System.Diagnostics.DiagnosticSource" Version="5.0.1" />
   </ItemGroup>
 
 </Project>
diff --git a/src/DotPulsar/Extensions/ConsumerExtensions.cs b/src/DotPulsar/Extensions/ConsumerExtensions.cs
index 63b8d49..b61971c 100644
--- a/src/DotPulsar/Extensions/ConsumerExtensions.cs
+++ b/src/DotPulsar/Extensions/ConsumerExtensions.cs
@@ -15,10 +15,6 @@
 namespace DotPulsar.Extensions
 {
     using DotPulsar.Abstractions;
-    using DotPulsar.Internal;
-    using System;
-    using System.Collections.Generic;
-    using System.Diagnostics;
     using System.Threading;
     using System.Threading.Tasks;
 
@@ -40,76 +36,6 @@
             => await consumer.AcknowledgeCumulative(message.MessageId, cancellationToken).ConfigureAwait(false);
 
         /// <summary>
-        /// Process and auto-acknowledge a message.
-        /// </summary>
-        public static async ValueTask Process(this IConsumer consumer, Func<Message, CancellationToken, ValueTask> processor, CancellationToken cancellationToken = default)  // TODO Allow user to set number of workers
-        {
-            const string operation = "process";
-            var operationName = $"{consumer.Topic} {operation}";
-
-            var tags = new List<KeyValuePair<string, object?>>
-            {
-                new KeyValuePair<string, object?>("messaging.destination", consumer.Topic),
-                new KeyValuePair<string, object?>("messaging.destination_kind", "topic"),
-                new KeyValuePair<string, object?>("messaging.operation", operation),
-                new KeyValuePair<string, object?>("messaging.system", "pulsar"),
-                new KeyValuePair<string, object?>("messaging.url", consumer.ServiceUrl),
-                new KeyValuePair<string, object?>("messaging.pulsar.subscription", consumer.SubscriptionName) // TODO Ask Pulsar community to define Pulsar specific tags
-            };
-
-            while (!cancellationToken.IsCancellationRequested)
-            {
-                var message = await consumer.Receive(cancellationToken);
-
-                var activity = StartActivity(message, operationName, tags);
-
-                if (activity is not null && activity.IsAllDataRequested)
-                {
-                    activity.SetTag("messaging.message_id", message.MessageId.ToString());
-                    activity.SetTag("messaging.message_payload_size_bytes", message.Data.Length);
-                }
-
-                try
-                {
-                    await processor(message, cancellationToken);
-                }
-                catch
-                {
-                    // Ignore
-                }
-
-                activity?.Dispose();
-
-                await consumer.Acknowledge(message.MessageId, cancellationToken);
-            }
-        }
-
-        private static Activity? StartActivity(Message message, string operationName, IEnumerable<KeyValuePair<string, object?>> tags)
-        {
-            if (!DotPulsarActivitySource.ActivitySource.HasListeners())
-                return null;
-
-            var properties = message.Properties;
-
-            if (properties.TryGetValue("traceparent", out var traceparent))  // TODO Allow the user to overwrite the keys 'traceparent' and 'tracestate'
-            {
-                var tracestate = properties.ContainsKey("tracestate") ? properties["tracestrate"] : null;
-                if (ActivityContext.TryParse(traceparent, tracestate, out var activityContext))
-                    return DotPulsarActivitySource.ActivitySource.StartActivity(operationName, ActivityKind.Consumer, activityContext, tags);
-            }
-
-            var activity = DotPulsarActivitySource.ActivitySource.StartActivity(operationName, ActivityKind.Consumer);
-
-            if (activity is not null && activity.IsAllDataRequested)
-            {
-                foreach (var tag in tags)
-                    activity.SetTag(tag.Key, tag.Value);
-            }
-
-            return activity;
-        }
-
-        /// <summary>
         /// Wait for the state to change to a specific state.
         /// </summary>
         /// <returns>
diff --git a/src/DotPulsar/Internal/DotPulsarActivitySource.cs b/src/DotPulsar/Internal/DotPulsarActivitySource.cs
deleted file mode 100644
index 09c8464..0000000
--- a/src/DotPulsar/Internal/DotPulsarActivitySource.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-﻿/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace DotPulsar.Internal
-{
-    using System.Diagnostics;
-
-    public static class DotPulsarActivitySource
-    {
-        static DotPulsarActivitySource()
-        {
-            ActivitySource = new ActivitySource(Constants.ClientName, Constants.ClientVersion);
-        }
-
-        public static ActivitySource ActivitySource { get; }
-    }
-}
