diff --git a/ChromeDevTools/ChromeDevTools.csproj b/ChromeDevTools/ChromeDevTools.csproj
index 3e152b3469717cebc39250168372786623004a6e..a107509d5bd5fb8b021f1dfca31d4ac713308cdd 100644
--- a/ChromeDevTools/ChromeDevTools.csproj
+++ b/ChromeDevTools/ChromeDevTools.csproj
@@ -64,7 +64,7 @@
     <Compile Include="CommandResponse.cs" />
     <Compile Include="CommandResponseAttribute.cs" />
     <Compile Include="CommandResponseFactory.cs" />
-    <Compile Include="CommandResponseHandler.cs" />
+    <Compile Include="EventHandler.cs" />
     <Compile Include="ErrorResponse.cs" />
     <Compile Include="Event.cs" />
     <Compile Include="EventAttribute.cs" />
diff --git a/ChromeDevTools/ChromeSession.cs b/ChromeDevTools/ChromeSession.cs
index e2996f7299758a0a5222ac489db163131b82de47..9609afce306765de8bd75e193e8d65932d814e7a 100644
--- a/ChromeDevTools/ChromeSession.cs
+++ b/ChromeDevTools/ChromeSession.cs
@@ -131,6 +131,18 @@ namespace ChromeDevTools
                 _responses.AddOrUpdate(response.Id, id => response, (key, value) => response);
                 requestMre.Set();
             }
+            else
+            {
+                // in the case of an error, we don't always get the request Id back :(
+                // if there is only one pending requests, we know what to do ... otherwise
+                if (1 == _requestWaitHandles.Count)
+                {
+                    var requestId = _requestWaitHandles.Keys.First();
+                    _requestWaitHandles.TryGetValue(requestId, out requestMre);
+                    _responses.AddOrUpdate(requestId, id => response, (key, value) => response);
+                    requestMre.Set();
+                }
+            }
         }
 
         private Task<ICommandResponse> SendCommand(Command command)
diff --git a/ChromeDevTools/CommandResponseHandler.cs b/ChromeDevTools/EventHandler.cs
similarity index 100%
rename from ChromeDevTools/CommandResponseHandler.cs
rename to ChromeDevTools/EventHandler.cs
diff --git a/ChromeDevTools/Serialization/MessageContractResolver.cs b/ChromeDevTools/Serialization/MessageContractResolver.cs
index 2bfd0fd675369a32fc8f1eab8998779693f2d5c2..0bbe9525aba7a0250ed25964f374aa2f1838545f 100644
--- a/ChromeDevTools/Serialization/MessageContractResolver.cs
+++ b/ChromeDevTools/Serialization/MessageContractResolver.cs
@@ -1,17 +1,21 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Newtonsoft.Json.Serialization;
+using Newtonsoft.Json.Serialization;
+using System;
 
 namespace ChromeDevTools.Serialization
 {
-    class MessageContractResolver : DefaultContractResolver
+    internal class MessageContractResolver : DefaultContractResolver
     {
         protected override string ResolvePropertyName(string propertyName)
         {
-            return propertyName.ToLower();
+            if (String.IsNullOrEmpty(propertyName))
+            {
+                return propertyName;
+            }
+            if (1 == propertyName.Length)
+            {
+                return Char.ToLowerInvariant(propertyName[0]).ToString();
+            }
+            return Char.ToLowerInvariant(propertyName[0]) + propertyName.Substring(1);
         }
     }
-}
+}
\ No newline at end of file