diff --git a/inventory_provider/db/ims.py b/inventory_provider/db/ims.py
index 29ab57a2d1c564a48cc1e334c1952b6320efe7e8..e339780df8aa71bd5d35b3e4e2bb344759712f1d 100644
--- a/inventory_provider/db/ims.py
+++ b/inventory_provider/db/ims.py
@@ -242,13 +242,20 @@ class IMS(object):
                 if NO_FILTERED_RESULTS_MESSAGE in response_.text.lower():
                     return False
                 try:
-                    r = response_.json()
+                    r = _convert_keys(response_.json())
                 except Exception as e:
-                    logger.debug(f"unexpected response: {response_.text}")
+                    t = response_.text
+                    if len(t) > 100:
+                        message_text = f"{t[:50]} ... {t[-50:]}"
+                    else:
+                        message_text = t
+                    logger.debug(f"unexpected response: {message_text}\n{e}"
+                                 "\nre-raising")
                     raise e
-                if r and 'HasErrors' in r and r['HasErrors']:
+                if r and 'haserrors' in r and r['haserrors']:
                     for e in r['Errors']:
-                        if 'Guid expired' in e['ErrorMessage']:
+                        if e['errormessage'] and \
+                                'guid expired' in e['errormessage'].lower():
                             return True
 
             return False
diff --git a/test/test_ims.py b/test/test_ims.py
index 95b142df8e1f7bf81e278f91b7de9f7250c9e59c..23f3066007be08ab543d51192e8000a4f66c2801 100644
--- a/test/test_ims.py
+++ b/test/test_ims.py
@@ -1,6 +1,7 @@
 from requests import HTTPError
 
 import inventory_provider
+from inventory_provider.db.ims import IMSError
 
 
 class MockResponse:
@@ -33,6 +34,23 @@ def test_ims_class_login(mocker):
         params=None)
 
 
+def test_ims_failed_response(mocker):
+    mock_post = mocker.patch('inventory_provider.db.ims.requests.post')
+    mock_post.return_value = MockResponse("my_bearer_token", 200)
+    mock_post.return_value.text = "my_bearer_token"
+    mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
+    mock_get.return_value.status_code = 200
+    mock_get.return_value.json.side_effect = IMSError("IMS exception")
+
+    ds = inventory_provider.db.ims.IMS(
+        'dummy_base', 'dummy_username', 'dummy_password')
+
+    try:
+        ds.get_entity_by_id('Node', 1234)
+    except Exception as e:
+        assert isinstance(e, IMSError)
+
+
 def test_ims_class_entity_by_id(mocker):
     mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
     ds = inventory_provider.db.ims.IMS(