diff --git a/CHANGELOG b/CHANGELOG
index 204e8871..9dedb500 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,8 @@
 = LitleOnline CHANGELOG
 
+== Version 8.31.5 (Oct 22, 2019)
+* BugFix: Fixed custom timeout not being used
+
 == Version 8.31.4 (Dec 14, 2018)
 * the default value of processingType is replaced from accountFunding to undefined.
 
diff --git a/LitleSdkForNet/LitleSdkForNet/Communications.cs b/LitleSdkForNet/LitleSdkForNet/Communications.cs
index ab5db97e..61d795c4 100644
--- a/LitleSdkForNet/LitleSdkForNet/Communications.cs
+++ b/LitleSdkForNet/LitleSdkForNet/Communications.cs
@@ -105,6 +105,19 @@ public virtual string HttpPost(string xmlRequest, Dictionary<string, string> con
             req.ServicePoint.MaxIdleTime = 8000;
             req.ServicePoint.Expect100Continue = false;
             req.KeepAlive = false;
+            
+            if (config.ContainsKey("timeout")) {
+                try {
+                    req.Timeout = Convert.ToInt32(config["timeout"]);
+                }
+                catch (FormatException e) {
+                    // If timeout setting contains non-numeric
+                    // characters, we will fall back to 1 minute
+                    // default timeout.
+                    req.Timeout = 60000;
+                }
+            }
+            
             if (IsProxyOn(config))
             {
                 var myproxy = new WebProxy(config["proxyHost"], int.Parse(config["proxyPort"]))
diff --git a/LitleSdkForNet/LitleSdkForNet/LitleBatchRequest.cs b/LitleSdkForNet/LitleSdkForNet/LitleBatchRequest.cs
index 2fe16f74..50c81534 100644
--- a/LitleSdkForNet/LitleSdkForNet/LitleBatchRequest.cs
+++ b/LitleSdkForNet/LitleSdkForNet/LitleBatchRequest.cs
@@ -817,7 +817,7 @@ public string generateXmlHeader()
             {
                 xmlHeader += "numBalanceInquirys=\"" + numBalanceInquiries + "\"\r\n";
             }
-            xmlHeader += "merchantSdk=\"DotNet;8.31.4\"\r\n";
+            xmlHeader += "merchantSdk=\"DotNet;8.31.5\"\r\n";
 
             xmlHeader += "merchantId=\"" + config["merchantId"] + "\">\r\n";
             return xmlHeader;
diff --git a/LitleSdkForNet/LitleSdkForNet/LitleOnline.cs b/LitleSdkForNet/LitleSdkForNet/LitleOnline.cs
index 32280d41..1aca2590 100644
--- a/LitleSdkForNet/LitleSdkForNet/LitleOnline.cs
+++ b/LitleSdkForNet/LitleSdkForNet/LitleOnline.cs
@@ -379,7 +379,7 @@ private litleOnlineRequest createLitleOnlineRequest()
         {
             litleOnlineRequest request = new litleOnlineRequest();
             request.merchantId = config["merchantId"];
-            request.merchantSdk = "DotNet;8.31.4";
+            request.merchantSdk = "DotNet;8.31.5";
             authentication authentication = new authentication();
             authentication.password = config["password"];
             authentication.user = config["username"];
diff --git a/LitleSdkForNet/LitleSdkForNet/Properties/AssemblyInfo.cs b/LitleSdkForNet/LitleSdkForNet/Properties/AssemblyInfo.cs
index 28a0b55b..8735d2ec 100644
--- a/LitleSdkForNet/LitleSdkForNet/Properties/AssemblyInfo.cs
+++ b/LitleSdkForNet/LitleSdkForNet/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers 
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("8.31.4")]
-[assembly: AssemblyFileVersion("8.31.4")]
+[assembly: AssemblyVersion("8.31.5")]
+[assembly: AssemblyFileVersion("8.31.5")]
diff --git a/LitleSdkForNet/LitleSdkForNet/Properties/Settings.Designer.cs b/LitleSdkForNet/LitleSdkForNet/Properties/Settings.Designer.cs
index 51794260..a8bd243f 100644
--- a/LitleSdkForNet/LitleSdkForNet/Properties/Settings.Designer.cs
+++ b/LitleSdkForNet/LitleSdkForNet/Properties/Settings.Designer.cs
@@ -49,7 +49,7 @@ public string printxml {
         
         [global::System.Configuration.UserScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("500")]
+        [global::System.Configuration.DefaultSettingValueAttribute("5000")]
         public string timeout {
             get {
                 return ((string)(this["timeout"]));
diff --git a/LitleSdkForNet/LitleSdkForNet/Properties/Settings.settings b/LitleSdkForNet/LitleSdkForNet/Properties/Settings.settings
index 0ca5d3a9..3d801945 100644
--- a/LitleSdkForNet/LitleSdkForNet/Properties/Settings.settings
+++ b/LitleSdkForNet/LitleSdkForNet/Properties/Settings.settings
@@ -18,7 +18,7 @@
       <Value Profile="(Default)">true</Value>
     </Setting>
     <Setting Name="timeout" Type="System.String" Scope="User">
-      <Value Profile="(Default)">500</Value>
+      <Value Profile="(Default)">5000</Value>
     </Setting>
     <Setting Name="proxyHost" Type="System.String" Scope="User">
       <Value Profile="(Default)" />
diff --git a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert1Base.cs b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert1Base.cs
index 7aca1728..b44bcb6d 100644
--- a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert1Base.cs
+++ b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert1Base.cs
@@ -20,7 +20,7 @@ public void SetUp()
                 { "reportGroup", "Default Report Group" },
                 { "username", Properties.Settings.Default.username },
                 { "version", "8.31" },
-                { "timeout", "500" },
+                { "timeout", "20000" },
                 { "merchantId", Properties.Settings.Default.merchantId },
                 { "password", Properties.Settings.Default.password },
                 { "printxml", "true" },
diff --git a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert2AuthEnhanced.cs b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert2AuthEnhanced.cs
index 124bbd2c..9dbc610f 100644
--- a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert2AuthEnhanced.cs
+++ b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert2AuthEnhanced.cs
@@ -20,7 +20,7 @@ public void setUp()
             config.Add("reportGroup", "Default Report Group");
             config.Add("username", Properties.Settings.Default.username);
             config.Add("version", "8.31");
-            config.Add("timeout", "500");
+            config.Add("timeout", "20000");
             config.Add("merchantId", Properties.Settings.Default.merchantId);
             config.Add("password", Properties.Settings.Default.password);
             config.Add("printxml", "true");
diff --git a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert3AuthReversal.cs b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert3AuthReversal.cs
index 084fe107..ac60f598 100644
--- a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert3AuthReversal.cs
+++ b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert3AuthReversal.cs
@@ -19,7 +19,7 @@ public void setUp()
             config.Add("reportGroup", "Default Report Group");
             config.Add("username", Properties.Settings.Default.username);
             config.Add("version", "8.31");
-            config.Add("timeout", "500");
+            config.Add("timeout", "20000");
             config.Add("merchantId", Properties.Settings.Default.merchantId);
             config.Add("password", Properties.Settings.Default.password);
             config.Add("printxml", "true");
diff --git a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert4Echeck.cs b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert4Echeck.cs
index b0bcab48..141f0812 100644
--- a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert4Echeck.cs
+++ b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert4Echeck.cs
@@ -19,7 +19,7 @@ public void setUp()
             config.Add("reportGroup", "Default Report Group");
             config.Add("username", Properties.Settings.Default.username);
             config.Add("version", "8.31");
-            config.Add("timeout", "500");
+            config.Add("timeout", "20000");
             config.Add("merchantId", Properties.Settings.Default.merchantId);
             config.Add("password", Properties.Settings.Default.password);
             config.Add("printxml", "true");
diff --git a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert5Token.cs b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert5Token.cs
index da759d29..b5ee53f8 100644
--- a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert5Token.cs
+++ b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert5Token.cs
@@ -19,7 +19,7 @@ public void setUp()
             config.Add("reportGroup", "Default Report Group");
             config.Add("username", Properties.Settings.Default.username);
             config.Add("version", "8.31");
-            config.Add("timeout", "500");
+            config.Add("timeout", "20000");
             config.Add("merchantId", Properties.Settings.Default.merchantId);
             config.Add("password", Properties.Settings.Default.password);
             config.Add("printxml", "true");
diff --git a/LitleSdkForNet/LitleSdkForNetTest/Functional/TestTimeout.cs b/LitleSdkForNet/LitleSdkForNetTest/Functional/TestTimeout.cs
new file mode 100644
index 00000000..a06c4456
--- /dev/null
+++ b/LitleSdkForNet/LitleSdkForNetTest/Functional/TestTimeout.cs
@@ -0,0 +1,106 @@
+using System.Collections.Generic;
+using System.Net;
+using NUnit.Framework;
+
+namespace Litle.Sdk.Test.Functional {
+    [TestFixture]
+    internal class TestTimeout
+    {
+        private LitleOnline _cnp;
+        private Dictionary<string, string> _config;
+        
+        [Test]
+        public void TestTimeoutNotDefined()
+        {
+            _config = new Dictionary<string, string>
+            {
+                {"url", Properties.Settings.Default.url},
+                {"reportGroup", "Default Report Group"},
+                {"username", "DOTNET"},
+                {"version", "11.0"},
+                {"merchantId", "101"},
+                {"password", "TESTCASE"},
+                {"printxml", "true"},
+                {"proxyHost", Properties.Settings.Default.proxyHost},
+                {"proxyPort", Properties.Settings.Default.proxyPort},
+                {"logFile", Properties.Settings.Default.logFile},
+                {"neuterAccountNums", "true"}
+            };
+
+            _cnp = new LitleOnline(_config);
+            
+            var registerTokenRequest = new registerTokenRequestType
+            {
+                id = "1",
+                reportGroup = "Planets",
+                orderId = "12344",
+                accountNumber = "1233456789103801",
+            };
+
+            var rtokenResponse = _cnp.RegisterToken(registerTokenRequest);
+            StringAssert.AreEqualIgnoringCase("Account number was successfully registered", rtokenResponse.message);
+        }
+
+        [Test]
+        public void TestTimeoutNotParsable()
+        {
+            _config = new Dictionary<string, string>
+            {
+                {"url", Properties.Settings.Default.url},
+                {"reportGroup", "Default Report Group"},
+                {"username", "DOTNET"},
+                {"version", "11.0"},
+                {"timeout", "notparsableasint"},
+                {"merchantId", "101"},
+                {"password", "TESTCASE"},
+                {"printxml", "true"},
+                {"proxyHost", Properties.Settings.Default.proxyHost},
+                {"proxyPort", Properties.Settings.Default.proxyPort},
+                {"logFile", Properties.Settings.Default.logFile},
+                {"neuterAccountNums", "true"}
+            };
+
+            _cnp = new LitleOnline(_config);
+            
+            var registerTokenRequest = new registerTokenRequestType
+            {
+                id = "1",
+                reportGroup = "Planets",
+                orderId = "12344",
+                accountNumber = "1233456789103801",
+            };
+
+            var rtokenResponse = _cnp.RegisterToken(registerTokenRequest);
+            StringAssert.AreEqualIgnoringCase("Account number was successfully registered", rtokenResponse.message);
+        }
+
+        [Test]
+        public void TestTimeoutReached() {
+            _config = new Dictionary<string, string> {
+                {"url", Properties.Settings.Default.url},
+                {"reportGroup", "Default Report Group"},
+                {"username", "DOTNET"},
+                {"version", "11.0"},
+                {"timeout", "0"},
+                {"merchantId", "101"},
+                {"password", "TESTCASE"},
+                {"printxml", "true"},
+                {"proxyHost", Properties.Settings.Default.proxyHost},
+                {"proxyPort", Properties.Settings.Default.proxyPort},
+                {"logFile", Properties.Settings.Default.logFile},
+                {"neuterAccountNums", "true"}
+            };
+
+            _cnp = new LitleOnline(_config);
+
+            var registerTokenRequest = new registerTokenRequestType {
+                id = "1",
+                reportGroup = "Planets",
+                orderId = "12344",
+                accountNumber = "1233456789103801",
+            };
+
+            Assert.Throws<WebException>(() => { _cnp.RegisterToken(registerTokenRequest); });
+        }
+    }
+}
\ No newline at end of file
diff --git a/LitleSdkForNet/LitleSdkForNetTest/LitleSdkForNetTest.csproj b/LitleSdkForNet/LitleSdkForNetTest/LitleSdkForNetTest.csproj
index 2a4b3f4d..cd55f3b1 100644
--- a/LitleSdkForNet/LitleSdkForNetTest/LitleSdkForNetTest.csproj
+++ b/LitleSdkForNet/LitleSdkForNetTest/LitleSdkForNetTest.csproj
@@ -100,6 +100,7 @@
     <Compile Include="Functional\TestForceCapture.cs" />
     <Compile Include="Functional\TestEcheckRedeposit.cs" />
     <Compile Include="Functional\TestSale.cs" />
+    <Compile Include="Functional\TestTimeout.cs" />
     <Compile Include="Functional\TestToken.cs" />
     <Compile Include="Functional\TestAuth.cs" />
     <Compile Include="Program.cs" />
diff --git a/LitleSdkForNet/LitleSdkForNetTest/Unit/TestBatchRequest.cs b/LitleSdkForNet/LitleSdkForNetTest/Unit/TestBatchRequest.cs
index e15f8264..c95c422d 100644
--- a/LitleSdkForNet/LitleSdkForNetTest/Unit/TestBatchRequest.cs
+++ b/LitleSdkForNet/LitleSdkForNetTest/Unit/TestBatchRequest.cs
@@ -55,7 +55,7 @@ public void testBatchRequestContainsMerchantSdkAttribute()
             String actual = batchRequest.generateXmlHeader();
             String expected = @"
 <batchRequest id=""""
-merchantSdk=""DotNet;8.31.4""
+merchantSdk=""DotNet;8.31.5""
 merchantId=""01234"">
 ";
             Assert.AreEqual(expected, actual);