Polished up session documentation across GLVs CTR
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index ee75805..bb8b274 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -24,7 +24,7 @@
 === TinkerPop 3.3.11 (Release Date: NOT OFFICIALLY RELEASED YET)
 
 * Added `trustStoreType` such that keystore and truststore can be of different types in the Java driver.
-* Added session support to gremlin-javascript.
+* Added session support to all GLVs: Javascript, .NET and Python.
 * Fixed bug in Gremlin Server shutdown if failures occurred during `GraphManager` initialization.
 * Modified Gremlin Server to close the session when the channel itself is closed.
 * Fixed bug in `Order` where comparisons of `enum` types wouldn't compare with `String` values.
@@ -33,7 +33,6 @@
 * Bumped to Jackson 2.9.10.3.
 * Remove invalid service descriptors from gremlin-shaded.
 * Fixed bug in Python and .NET traversal `clone()` where deep copies of bytecode were not occurring.
-* Added session support to gremlin-python
 
 [[release-3-3-10]]
 === TinkerPop 3.3.10 (Release Date: February 3, 2020)
diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc
index 0aea657..69988bd 100644
--- a/docs/src/reference/gremlin-variants.asciidoc
+++ b/docs/src/reference/gremlin-variants.asciidoc
@@ -327,14 +327,34 @@
 results within a collection across different languages. If a `Set` is needed then convert `List` results
 to `Set` manually.
 
+=== Submit Gremlin Scripts
+
+Additionally, you can also send parametrized Gremlin scripts to the server as strings:
+
+[source,python]
+----
+client = Client('ws://localhost:8182/gremlin', 'g')
+client.submit('x + x', {'x': 2}).all().result()
+----
+
+It is also possible to initialize the `Client` to use <<sessions,sessions>>:
+
+[source,python]
+----
+client = Client('ws://localhost:8182/gremlin', 'g', session=str(uuid.uuid4()))
+----
+
+With this configuration, the state of variables within scripts are preserved between requests.
+
 [[gremlin-DotNet]]
 == Gremlin.Net
 
-image:gremlin-dotnet-logo.png[width=371,float=right] Apache TinkerPop's Gremlin.Net implements Gremlin within the C# language. It targets .NET Standard and can
-therefore be used on different operating systems and with different .NET frameworks, such as .NET Framework
-and link:https://www.microsoft.com/net/core[.NET Core]. Since the C# syntax is very similar to that of Java, it should be very easy to switch between
-Gremlin-Java and Gremlin.Net. The only major syntactical difference is that all method names in Gremlin.Net
-use PascalCase as opposed to camelCase in Gremlin-Java in order to comply with .NET conventions.
+image:gremlin-dotnet-logo.png[width=371,float=right] Apache TinkerPop's Gremlin.Net implements Gremlin within the C#
+language. It targets .NET Standard and can therefore be used on different operating systems and with different .NET
+frameworks, such as .NET Framework and link:https://www.microsoft.com/net/core[.NET Core]. Since the C# syntax is very
+similar to that of Java, it should be very easy to switch between Gremlin-Java and Gremlin.Net. The only major
+syntactical difference is that all method names in Gremlin.Net use PascalCase as opposed to camelCase in Gremlin-Java
+in order to comply with .NET conventions.
 
 [source,powershell]
 nuget install Gremlin.Net
@@ -515,6 +535,31 @@
 instance created, it will help to fully define the closure in the lambda expression - so rather than
 `Lambda.Groovy("it.get().value('name'))`, prefer `Lambda.Groovy("x -> x.get().value('name'))`.
 
+=== Submit Gremlin Scripts
+
+Additionally, you can also send parametrized Gremlin scripts to the server as strings:
+
+[source,csharp]
+----
+var gremlinServer = new GremlinServer("localhost", 8182);
+using (var gremlinClient = new GremlinClient(gremlinServer))
+{
+    var bindings = new Dictionary<string, object> {{"a", a}, {"b", b}};
+    var response =
+        await gremlinClient.SubmitWithSingleResultAsync<int>("a + b", bindings);
+}
+----
+
+It is also possible to initialize the `Client` to use <<sessions,sessions>>:
+
+[source,csharp]
+----
+var gremlinServer = new GremlinServer("localhost", 8182);
+var client = new GremlinClient(gremlinServer, sessionId: Guid.NewGuid().ToString()))
+----
+
+With this configuration, the state of variables within scripts are preserved between requests.
+
 [[gremlin-javascript]]
 == Gremlin-JavaScript
 
@@ -576,7 +621,6 @@
 link:https://github.com/tc39/proposal-async-iteration[async iterator proposal].
 * `Traversal.iterate()`: Returns a `Promise` without a value.
 
-
 For example:
 
 [source,javascript]
diff --git a/docs/src/upgrade/release-3.3.x.asciidoc b/docs/src/upgrade/release-3.3.x.asciidoc
index 0e9549c..52ee98b 100644
--- a/docs/src/upgrade/release-3.3.x.asciidoc
+++ b/docs/src/upgrade/release-3.3.x.asciidoc
@@ -29,21 +29,22 @@
 
 === Upgrading for Users
 
-==== gremlin-python Sessions
-
-The `sessions` feature is enabled in gremlin-python.
-
-[source, python]
-client = Client('ws://localhost:8182/gremlin', 'g', session=str(uuid.uuid4()))
-
-==== gremlin-javascript Sessions
+==== GLV Sessions
 
 While TinkerPop doesn't recommend the use of sessions for most use cases, it does remain a feature that is available
 and exposed on the server. As such, providing support in all Gremlin Language Variants for this feature is useful in
 ensuring a consistent implementation for all programming languages.
 
 [source,javascript]
-const client = new gremlin.driver.Client('ws://localhost:8182/gremlin', { traversalSource: 'g', 'session': 'unique-string-id' });
+const client = new Client('ws://localhost:8182/gremlin', { traversalSource: 'g', 'session': 'unique-string-id' });
+
+[source, python]
+client = Client('ws://localhost:8182/gremlin', 'g', session=str(uuid.uuid4()))
+
+[source, csharp]
+var gremlinServer = new GremlinServer("localhost", 8182);
+var client = new GremlinClient(gremlinServer, sessionId: Guid.NewGuid().ToString()))
+
 ==== Deprecate maxWaitForSessionClose
 
 The `maxWaitForSessionClose` setting for the Java driver has been deprecated and in some sense replaced by the