diff --git a/src/common/rpc_method_wrapper/Decorator.py b/src/common/rpc_method_wrapper/Decorator.py
index 212481b7398439d7dbaa5bb76df6901544562ab5..31dc4b82bdaa8762b1dee5af247b3f8b7b9af2af 100644
--- a/src/common/rpc_method_wrapper/Decorator.py
+++ b/src/common/rpc_method_wrapper/Decorator.py
@@ -17,6 +17,7 @@ from enum import Enum
 from typing import Dict, List
 from prometheus_client import Counter, Histogram
 from prometheus_client.metrics import MetricWrapperBase
+from common.tools.grpc.Tools import grpc_message_to_json_string
 from .ServiceExceptions import ServiceException
 
 class RequestConditionEnum(Enum):
@@ -62,9 +63,9 @@ def safe_and_metered_rpc_method(metrics : Dict[str, MetricWrapperBase], logger :
         def inner_wrapper(self, request, grpc_context : grpc.ServicerContext):
             COUNTER_STARTED.inc()
             try:
-                logger.debug('{:s} request: {:s}'.format(function_name, str(request)))
+                logger.debug('{:s} request: {:s}'.format(function_name, grpc_message_to_json_string(request)))
                 reply = func(self, request, grpc_context)
-                logger.debug('{:s} reply: {:s}'.format(function_name, str(reply)))
+                logger.debug('{:s} reply: {:s}'.format(function_name, grpc_message_to_json_string(reply)))
                 COUNTER_COMPLETED.inc()
                 return reply
             except ServiceException as e:   # pragma: no cover (ServiceException not thrown)
diff --git a/src/common/tools/client/RetryDecorator.py b/src/common/tools/client/RetryDecorator.py
index d7bcdb42da9d156dd9f80804e33debcb5c278d83..9a1c0d69fc5d86b8a64a5886884c31e73af27777 100644
--- a/src/common/tools/client/RetryDecorator.py
+++ b/src/common/tools/client/RetryDecorator.py
@@ -57,7 +57,7 @@ def delay_linear(initial=0, increment=0, maximum=None):
 
 def delay_exponential(initial=1, increment=1, maximum=None):
     def compute(num_try):
-        delay = initial * pow((num_try - 1), increment)
+        delay = initial * pow(increment, (num_try - 1))
         if maximum is not None: delay = max(delay, maximum)
         return delay
     return compute
diff --git a/src/common/tools/grpc/Tools.py b/src/common/tools/grpc/Tools.py
index 7c6a74348e4e0fa51ac68a40af511f4753c628ae..f0c72a36f18acf2c278f7204352055861b79216f 100644
--- a/src/common/tools/grpc/Tools.py
+++ b/src/common/tools/grpc/Tools.py
@@ -16,8 +16,9 @@ import json
 from google.protobuf.json_format import MessageToDict
 
 def grpc_message_to_json(
-    message, including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False):
-
+        message, including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False
+    ):
+    if not hasattr(message, 'DESCRIPTOR'): return json.dumps(str(message), sort_keys=True) # not a gRPC message
     return MessageToDict(
         message, including_default_value_fields=including_default_value_fields,
         preserving_proto_field_name=preserving_proto_field_name, use_integers_for_enums=use_integers_for_enums)