diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Microsoft.Bot.Builder.Skills.csproj b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Microsoft.Bot.Builder.Skills.csproj
index 50ea43467c..2d6abb9caf 100644
--- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Microsoft.Bot.Builder.Skills.csproj
+++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Microsoft.Bot.Builder.Skills.csproj
@@ -1,13 +1,12 @@
 
-
   
     4.0.0-local
     $(PackageVersion)
     4.0.0-local
     $(PackageVersion)
     Debug;Release;Documentation;Debug - NuGet Packages;
+    7.1
   
-
   
     netstandard2.0
     Microsoft.Bot.Builder.Skills
@@ -15,55 +14,35 @@
     Microsoft
     Microsoft
     Shared library for building Bot Framework Skills.
-    
-      https://botbuilder.myget.org/F/experimental/api/v3/index.json;
-    
-    true
   
-
   
     true
     true
     ..\..\build\35MSSharedLib1024.snk
     false
   
-
   
-    
+    
   
-
   
-    
-    
-    
-    
-    
-    
-    
-    
-    
+    
+    
+    
+    
+    
+    
+    
+    
   
-
   
-    
+    
   
-
-  
-    
-      Dependencies\Microsoft.Bot.Protocol.dll
-    
-    
-      Dependencies\Microsoft.Bot.Protocol.WebSockets.dll
-    
-  
-  
   
     
       TextTemplatingFileGenerator
       SkillResponses.cs
     
   
-
   
     
       True
@@ -71,5 +50,4 @@
       SkillResponses.tt
     
   
-
-
+
\ No newline at end of file
diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Microsoft.Bot.Builder.Skills.nuspec b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Microsoft.Bot.Builder.Skills.nuspec
index 5f48ba341a..2d075f8b5c 100644
--- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Microsoft.Bot.Builder.Skills.nuspec
+++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Microsoft.Bot.Builder.Skills.nuspec
@@ -17,8 +17,6 @@
   
    
       
-      
-      
       
       
       
diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/RouteAction.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/RouteAction.cs
index b156f453ee..8b5fb3625d 100644
--- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/RouteAction.cs
+++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/RouteAction.cs
@@ -1,6 +1,6 @@
 using System;
 using System.Threading.Tasks;
-using Microsoft.Bot.Protocol;
+using Microsoft.Bot.StreamingExtensions;
 
 namespace Microsoft.Bot.Builder.Skills.Protocol
 {
diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/RouteContext.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/RouteContext.cs
index d121581d6f..e7093c6bc4 100644
--- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/RouteContext.cs
+++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/RouteContext.cs
@@ -1,4 +1,4 @@
-using Microsoft.Bot.Protocol;
+using Microsoft.Bot.StreamingExtensions;
 
 namespace Microsoft.Bot.Builder.Skills.Protocol
 {
diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/Router.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/Router.cs
index ac0e37c09a..7ebf797ad3 100644
--- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/Router.cs
+++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/Protocol/Router.cs
@@ -2,7 +2,7 @@
 using System.Collections.Generic;
 using System.Dynamic;
 using System.Linq;
-using Microsoft.Bot.Protocol;
+using Microsoft.Bot.StreamingExtensions;
 
 namespace Microsoft.Bot.Builder.Skills.Protocol
 {
diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillCallingRequestHandler.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillCallingRequestHandler.cs
index 1ff898e6b7..d256f82076 100644
--- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillCallingRequestHandler.cs
+++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillCallingRequestHandler.cs
@@ -1,11 +1,12 @@
 using System;
 using System.Net.Http;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Bot.Builder.Skills.Protocol;
 using Microsoft.Bot.Builder.Solutions;
-using Microsoft.Bot.Protocol;
 using Microsoft.Bot.Schema;
+using Microsoft.Bot.StreamingExtensions;
 using Microsoft.Extensions.Logging;
 using Newtonsoft.Json;
 
@@ -37,7 +38,7 @@ public SkillCallingRequestHandler(ITurnContext turnContext, IBotTelemetryClient
                         Action =
                             async (request, routeData) =>
                             {
-                                var activity = await request.ReadBodyAsJson().ConfigureAwait(false);
+                                var activity = request.ReadBodyAsJson();
                                 if (activity != null)
                                 {
                                     if (activity.Type == ActivityTypes.Event && activity.Name == TokenEvents.TokenRequestEventName)
@@ -88,8 +89,8 @@ public SkillCallingRequestHandler(ITurnContext turnContext, IBotTelemetryClient
                         Action =
                             async (request, routeData) =>
                             {
-                                var activity = await request.ReadBodyAsJson().ConfigureAwait(false);
-                                var result = _turnContext.UpdateActivityAsync(activity).ConfigureAwait(false);
+                                var activity = request.ReadBodyAsJson();
+                                var result = await _turnContext.UpdateActivityAsync(activity).ConfigureAwait(false);
                                 return result;
                             },
                     },
@@ -103,7 +104,7 @@ public SkillCallingRequestHandler(ITurnContext turnContext, IBotTelemetryClient
                         Action =
                             async (request, routeData) =>
                             {
-                                var result = await _turnContext.DeleteActivityAsync(routeData.activityId);
+                                var result = await _turnContext.DeleteActivityAsync(routeData.activityId).ConfigureAwait(false);
                                 return result;
                             },
                     },
@@ -113,7 +114,7 @@ public SkillCallingRequestHandler(ITurnContext turnContext, IBotTelemetryClient
             _router = new Router(routes);
         }
 
-        public override async Task ProcessRequestAsync(ReceiveRequest request, object context = null, ILogger logger = null)
+        public override async Task ProcessRequestAsync(ReceiveRequest request, ILogger logger, object context = null, CancellationToken cancellationToken = default)
         {
             var routeContext = _router.Route(request);
             if (routeContext != null)
@@ -121,17 +122,17 @@ public override async Task ProcessRequestAsync(ReceiveRequest request,
                 try
                 {
                     var responseBody = await routeContext.Action.Action(request, routeContext.RouteData).ConfigureAwait(false);
-                    return Response.OK(new StringContent(JsonConvert.SerializeObject(responseBody, SerializationSettings.DefaultSerializationSettings), Encoding.UTF8, SerializationSettings.ApplicationJson));
+                    return StreamingResponse.OK(new StringContent(JsonConvert.SerializeObject(responseBody, SerializationSettings.DefaultSerializationSettings), Encoding.UTF8, SerializationSettings.ApplicationJson));
                 }
                 catch (Exception ex)
                 {
                     _botTelemetryClient.TrackException(ex);
-                    return Response.InternalServerError();
+                    return StreamingResponse.InternalServerError();
                 }
             }
             else
             {
-                return Response.NotFound();
+                return StreamingResponse.NotFound();
             }
         }
     }
diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketAdapter.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketAdapter.cs
index faf70896d0..7e959e2b4a 100644
--- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketAdapter.cs
+++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketAdapter.cs
@@ -7,7 +7,8 @@
 using Microsoft.AspNetCore.Http;
 using Microsoft.Bot.Builder.Integration.AspNet.Core;
 using Microsoft.Bot.Builder.Skills.Auth;
-using Microsoft.Bot.Protocol.WebSockets;
+using Microsoft.Bot.StreamingExtensions.Transport;
+using Microsoft.Bot.StreamingExtensions.Transport.WebSockets;
 
 namespace Microsoft.Bot.Builder.Skills
 {
@@ -90,7 +91,7 @@ private async Task CreateWebSocketConnectionAsync(HttpContext httpContext, IBot
             Task.WaitAll(startListening);
         }
 
-		private void Server_Disconnected(object sender, Bot.Protocol.Transport.DisconnectedEventArgs e)
+		private void Server_Disconnected(object sender, DisconnectedEventArgs e)
 		{
 			if (_stopWatch.IsRunning)
 			{
diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketBotAdapter.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketBotAdapter.cs
index e7d937f8c2..1d202939d6 100644
--- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketBotAdapter.cs
+++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketBotAdapter.cs
@@ -4,9 +4,9 @@
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Bot.Builder.Solutions;
-using Microsoft.Bot.Protocol;
-using Microsoft.Bot.Protocol.WebSockets;
 using Microsoft.Bot.Schema;
+using Microsoft.Bot.StreamingExtensions;
+using Microsoft.Bot.StreamingExtensions.Transport.WebSockets;
 using Diagnostics = System.Diagnostics;
 
 namespace Microsoft.Bot.Builder.Skills
@@ -121,7 +121,7 @@ public override async Task SendActivitiesAsync(ITurnContext
                     (activity.Type == ActivityTypes.Trace && activity.ChannelId == "emulator"))
                 {
                     var requestPath = $"/activities/{activity.Id}";
-                    var request = Request.CreatePost(requestPath);
+                    var request = StreamingRequest.CreatePost(requestPath);
                     request.SetBody(activity);
 
                     _botTelemetryClient.TrackTrace($"Sending activity. ReplyToId: {activity.ReplyToId}", Severity.Information, null);
@@ -168,7 +168,7 @@ public override async Task SendActivitiesAsync(ITurnContext
         public override async Task UpdateActivityAsync(ITurnContext turnContext, Activity activity, CancellationToken cancellationToken)
         {
             var requestPath = $"/activities/{activity.Id}";
-            var request = Request.CreatePut(requestPath);
+            var request = StreamingRequest.CreatePut(requestPath);
             request.SetBody(activity);
 
             var response = default(ResourceResponse);
@@ -199,7 +199,7 @@ public override async Task UpdateActivityAsync(ITurnContext tu
         public override async Task DeleteActivityAsync(ITurnContext turnContext, ConversationReference reference, CancellationToken cancellationToken)
         {
             var requestPath = $"/activities/{reference.ActivityId}";
-            var request = Request.CreateDelete(requestPath);
+            var request = StreamingRequest.CreateDelete(requestPath);
 
             _botTelemetryClient.TrackTrace($"Deleting activity. activity id: {reference.ActivityId}", Severity.Information, null);
 
@@ -232,7 +232,7 @@ public async Task SendRemoteTokenRequestEventAsync(ITurnContext turnContext, Can
             await SendActivitiesAsync(turnContext, new Activity[] { response }, cancellationToken).ConfigureAwait(false);
         }
 
-        private async Task SendRequestAsync(Request request, CancellationToken cancellation = default(CancellationToken))
+        private async Task SendRequestAsync(StreamingRequest request, CancellationToken cancellation = default(CancellationToken))
         {
             try
             {
@@ -253,7 +253,7 @@ public async Task SendRemoteTokenRequestEventAsync(ITurnContext turnContext, Can
             return default(T);
         }
 
-        private async Task SendRequestAsync(Request request, CancellationToken cancellation = default(CancellationToken))
+        private async Task SendRequestAsync(StreamingRequest request, CancellationToken cancellation = default(CancellationToken))
         {
             try
             {
diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketRequestHandler.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketRequestHandler.cs
index c636059513..d5860cba5a 100644
--- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketRequestHandler.cs
+++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketRequestHandler.cs
@@ -5,8 +5,8 @@
 using System.Threading;
 using System.Threading.Tasks;
 using Microsoft.Bot.Builder.Solutions;
-using Microsoft.Bot.Protocol;
 using Microsoft.Bot.Schema;
+using Microsoft.Bot.StreamingExtensions;
 using Microsoft.Extensions.Logging;
 using Newtonsoft.Json;
 using Diagnostics = System.Diagnostics;
@@ -28,7 +28,7 @@ internal SkillWebSocketRequestHandler(IBotTelemetryClient botTelemetryClient)
 
         public IActivityHandler SkillWebSocketBotAdapter { get; set; }
 
-        public async override Task ProcessRequestAsync(ReceiveRequest request, object context = null, ILogger logger = null)
+        public async override Task ProcessRequestAsync(ReceiveRequest request, ILogger logger = null, object context = null, CancellationToken cancellationToken = default(CancellationToken))
         {
             if (Bot == null)
             {
@@ -40,9 +40,9 @@ public async override Task ProcessRequestAsync(ReceiveRequest request,
                 throw new ArgumentNullException(nameof(SkillWebSocketBotAdapter));
             }
 
-            var response = new Response();
+            var response = new StreamingResponse();
 
-            var body = await request.ReadBodyAsString().ConfigureAwait(false);
+            var body = request.ReadBodyAsString();
 
             if (string.IsNullOrEmpty(body) || request.Streams?.Count == 0)
             {
@@ -51,7 +51,7 @@ public async override Task ProcessRequestAsync(ReceiveRequest request,
                 return response;
             }
 
-            if (request.Streams.Where(x => x.Type != "application/json; charset=utf-8").Any())
+            if (request.Streams.Where(x => x.ContentType != "application/json; charset=utf-8").Any())
             {
                 response.StatusCode = (int)HttpStatusCode.NotAcceptable;
                 return response;
diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketTransport.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketTransport.cs
index 685018ddbe..89d953df88 100644
--- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketTransport.cs
+++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketTransport.cs
@@ -7,10 +7,10 @@
 using Microsoft.Bot.Builder.Skills.Models;
 using Microsoft.Bot.Builder.Skills.Models.Manifest;
 using Microsoft.Bot.Connector.Authentication;
-using Microsoft.Bot.Protocol;
-using Microsoft.Bot.Protocol.Transport;
-using Microsoft.Bot.Protocol.WebSockets;
 using Microsoft.Bot.Schema;
+using Microsoft.Bot.StreamingExtensions;
+using Microsoft.Bot.StreamingExtensions.Transport;
+using Microsoft.Bot.StreamingExtensions.Transport.WebSockets;
 using Newtonsoft.Json;
 
 namespace Microsoft.Bot.Builder.Skills
@@ -66,7 +66,7 @@ public async Task ForwardToSkillAsync(ITurnContext turnContext, Activity a
 
             // Serialize the activity and POST to the Skill endpoint
             var body = new StringContent(JsonConvert.SerializeObject(activity, SerializationSettings.BotSchemaSerializationSettings), Encoding.UTF8, SerializationSettings.ApplicationJson);
-            var request = Request.CreatePost(string.Empty, body);
+            var request = StreamingRequest.CreatePost(string.Empty, body);
 
             // set back recipient id to make things consistent
             activity.Recipient.Id = recipientId;