diff --git a/lib/steem/api.rb b/lib/steem/api.rb
index 513b3901e46fcd5562e3189a0863c935d9cf6e75..2a72a31e9901a386b28ee628f4df91a119edd3b3 100644
--- a/lib/steem/api.rb
+++ b/lib/steem/api.rb
@@ -149,19 +149,6 @@ module Steem
       @@signatures[url][rpc_method_name] ||= Api::jsonrpc(url).get_signature(method: rpc_method_name).result
     end
     
-    # @private
-    def raise_error_response(rpc_method_name, rpc_args, response)
-      raise UnknownError, "#{rpc_method_name}: #{response}" if response.error.nil?
-      
-      error = response.error
-      
-      if error.message == 'Invalid Request'
-        raise Steem::ArgumentError, "Unexpected arguments: #{rpc_args.inspect}.  Expected: #{rpc_method_name} (#{args_keys_to_s(rpc_method_name)})"
-      end
-      
-      BaseError.build_error(error, rpc_method_name)
-    end
-    
     # @private
     def respond_to_missing?(m, include_private = false)
       methods.nil? ? false : methods.include?(m.to_sym)
@@ -203,14 +190,6 @@ module Steem
       
       response = rpc_client.rpc_execute(@api_name, m, rpc_args)
       
-      if defined?(response.error) && !!response.error
-        if !!response.error.message
-          raise_error_response rpc_method_name, rpc_args, response
-        else
-          raise Steem::ArgumentError, response.error.inspect
-        end
-      end
-      
       if !!block
         case response
         when Hashie::Mash then yield response.result, response.error, response.id
diff --git a/lib/steem/rpc/base_client.rb b/lib/steem/rpc/base_client.rb
index 8d7387e7a5dcb9f75d8f8c169046e78550b92b6c..d5ae9fd2afd7932b2e44186a0cd3ed47d740b75d 100644
--- a/lib/steem/rpc/base_client.rb
+++ b/lib/steem/rpc/base_client.rb
@@ -161,6 +161,19 @@ module Steem
         
         sleep @backoff
       end
+      
+      # @private
+      def raise_error_response(rpc_method_name, rpc_args, response)
+        raise UnknownError, "#{rpc_method_name}: #{response}" if response.error.nil?
+        
+        error = response.error
+        
+        if error.message == 'Invalid Request'
+          raise Steem::ArgumentError, "Unexpected arguments: #{rpc_args.inspect}.  Expected: #{rpc_method_name} (#{args_keys_to_s(rpc_method_name)})"
+        end
+        
+        BaseError.build_error(error, rpc_method_name)
+      end
     end
   end
 end
diff --git a/lib/steem/rpc/http_client.rb b/lib/steem/rpc/http_client.rb
index 0517fa0d460a85a538a3fa70474a69ad5c3d867d..1d153b5d41d1de5c40a3271f8ec528ddc7b35d69 100644
--- a/lib/steem/rpc/http_client.rb
+++ b/lib/steem/rpc/http_client.rb
@@ -17,7 +17,7 @@ module Steem
       # 
       # @private
       TIMEOUT_ERRORS = [Net::OpenTimeout, JSON::ParserError, Net::ReadTimeout,
-        Errno::EBADF, IOError, Errno::ENETDOWN]
+        Errno::EBADF, IOError, Errno::ENETDOWN, Steem::RemoteDatabaseLockError]
       
       # @private
       POST_HEADERS = {
@@ -108,6 +108,22 @@ module Steem
             else; response
             end
             
+            [response].flatten.each_with_index do |r, i|
+              if defined?(r.error) && !!r.error
+                if !!r.error.message
+                  begin
+                    rpc_method_name = "#{api_name}.#{api_method}"
+                    rpc_args = [request_object].flatten[i]
+                    raise_error_response rpc_method_name, rpc_args, r
+                  rescue *TIMEOUT_ERRORS => e
+                    throw retry_timeout(:tota_cera_pila, e)
+                  end
+                else
+                  raise Steem::ArgumentError, r.error.inspect
+                end
+              end
+            end
+            
             yield_response response, &block
           when '504' # Gateway Timeout
             throw retry_timeout(:tota_cera_pila, response.body)