diff --git a/source/ChromeDevTools/ChromeSessionFactory.cs b/source/ChromeDevTools/ChromeSessionFactory.cs
index 4aa60b63748a8e2227a1cc3993b6910594abc25b..36facc276af65494456c252e8bbcf2c84b29a720 100644
--- a/source/ChromeDevTools/ChromeSessionFactory.cs
+++ b/source/ChromeDevTools/ChromeSessionFactory.cs
@@ -3,6 +3,11 @@ namespace MasterDevs.ChromeDevTools
 {
     public class ChromeSessionFactory : IChromeSessionFactory
     {
+        public IChromeSession Create(ChromeSessionInfo sessionInfo)
+        {
+            return Create(sessionInfo.WebSocketDebuggerUrl);
+        }
+
         public IChromeSession Create(string endpointUrl)
         {
             // Sometimes binding to localhost might resolve wrong AddressFamily, force IPv4
diff --git a/source/ChromeDevTools/IChromeProcess.cs b/source/ChromeDevTools/IChromeProcess.cs
index 5acfd30f46557f5845b8160990d3c24c5ea9ffbc..b6d6242307b24f6e8d680c4619850f4773311345 100644
--- a/source/ChromeDevTools/IChromeProcess.cs
+++ b/source/ChromeDevTools/IChromeProcess.cs
@@ -5,7 +5,9 @@ namespace MasterDevs.ChromeDevTools
 {
     public interface IChromeProcess : IDisposable
     {
-        Task<ChromeSessionInfo[]> GetSessions();
+        Task<ChromeSessionInfo[]> GetSessionInfo();
+
+        Task<ChromeSessionInfo> StartNewSession();
 
         Uri RemoteDebuggingUri { get; }
     }
diff --git a/source/ChromeDevTools/LocalChromeProcess.cs b/source/ChromeDevTools/LocalChromeProcess.cs
index 8c2e62999781410c98b410b8ccd048badc188f83..62f0e686d371690bd8be0e300de073b1cec0615d 100644
--- a/source/ChromeDevTools/LocalChromeProcess.cs
+++ b/source/ChromeDevTools/LocalChromeProcess.cs
@@ -20,6 +20,8 @@ namespace MasterDevs.ChromeDevTools
 
         public override void Dispose()
         {
+            base.Dispose();
+
             Process.Kill();
             try
             {
diff --git a/source/ChromeDevTools/RemoteChromeProcess.cs b/source/ChromeDevTools/RemoteChromeProcess.cs
index 0076d9baa7c9be60adb22e029ac4befc9d9cc053..e10ff603197130cd35944ccec5a9f62fe9f0d9f6 100644
--- a/source/ChromeDevTools/RemoteChromeProcess.cs
+++ b/source/ChromeDevTools/RemoteChromeProcess.cs
@@ -7,29 +7,41 @@ namespace MasterDevs.ChromeDevTools
 {
     public class RemoteChromeProcess : IChromeProcess
     {
+        private readonly HttpClient http;
+
+        public RemoteChromeProcess(string remoteDebuggingUri)
+            : this(new Uri(remoteDebuggingUri))
+        {
+
+        }
+
         public RemoteChromeProcess(Uri remoteDebuggingUri)
         {
             RemoteDebuggingUri = remoteDebuggingUri;
+
+            http = new HttpClient
+            {
+                BaseAddress = RemoteDebuggingUri
+            };
         }
 
         public Uri RemoteDebuggingUri { get; }
 
         public virtual void Dispose()
         {
+            http.Dispose();
         }
 
-        public async Task<ChromeSessionInfo[]> GetSessions()
+        public async Task<ChromeSessionInfo[]> GetSessionInfo()
         {
-            using (var http = new HttpClient
-            {
-                BaseAddress = RemoteDebuggingUri
-            })
-            {
-                string json = await http.GetStringAsync("/json");
-                return JsonConvert.DeserializeObject<ChromeSessionInfo[]>(json);
-            }
+            string json = await http.GetStringAsync("/json");
+            return JsonConvert.DeserializeObject<ChromeSessionInfo[]>(json);
         }
 
-        
+        public async Task<ChromeSessionInfo> StartNewSession()
+        {
+            string json = await http.GetStringAsync("/json");
+            return JsonConvert.DeserializeObject<ChromeSessionInfo>(json);
+        }
     }
 }
\ No newline at end of file