diff --git a/src/main/java/com/kms/handler/LogHandler.java b/src/main/java/com/kms/handler/LogHandler.java
index b84963498e4428aab094d1845cfe45c1500ed019..abbe2ba55c523ce26a48206cc422e7137c7f3cca 100644
--- a/src/main/java/com/kms/handler/LogHandler.java
+++ b/src/main/java/com/kms/handler/LogHandler.java
@@ -13,7 +13,6 @@ import javax.xml.ws.handler.soap.SOAPMessageContext;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
-import java.net.InetSocketAddress;
 import java.util.Optional;
 import java.util.Set;
 
@@ -34,33 +33,35 @@ public class LogHandler implements SOAPHandler<SOAPMessageContext> {
 
         soapMessageContext.put("messageHandled", true);
 
-        HttpExchange exchange = (HttpExchange)soapMessageContext.get("com.sun.xml.internal.ws.http.exchange");
-        InetSocketAddress remoteAddress = exchange.getRemoteAddress();
-        final String address = String.valueOf(remoteAddress.getAddress());
+        final String address = Optional
+                .of((HttpExchange)soapMessageContext.get("com.sun.xml.internal.ws.http.exchange"))
+                .map(HttpExchange::getRemoteAddress)
+                .map(remoteAddress -> String.valueOf(remoteAddress.getAddress()))
+                .orElse("");
         try {
             SOAPBody soapBody = soapMessageContext.getMessage().getSOAPBody();
             OutputStream outputStream = new ByteArrayOutputStream();
             soapMessageContext.getMessage().writeTo(outputStream);
+
             final String callerId = (String) soapMessageContext.getOrDefault("callerId", "null");
 
+            // extra defensive to avoid NPE
+            final String requestedServiceName = Optional.of(soapBody.getChildNodes())
+                    .map(nodeList -> nodeList.item(1))
+                    .map(Node::getNodeName)
+                    .orElse("");
+
             LoggingHelper loggingHelper = LoggingHelper.getInstance();
             if (callerId.equals("null")) {
-                String requestedServiceName = Optional.of(soapBody.getChildNodes().item(1))
-                        .map(Node::getNodeName)
-                        .orElse("");
-
                 loggingHelper.log(outputStream.toString(), address, requestedServiceName,
                         callerId, "invalid api key");
 
                 SoapFaultHelper.throwFault("InvalidRequest","API key is invalid.");
             }
-
-            loggingHelper.log(outputStream.toString(), address,
-                    soapBody.getChildNodes().item(1).getNodeName(), callerId, "");
+            loggingHelper.log(outputStream.toString(), address, requestedServiceName, callerId, "");
 
         } catch (SOAPException | IOException ignored) {
         }
-
         return true;
     }
 
diff --git a/src/main/java/com/kms/service/PaymentService.java b/src/main/java/com/kms/service/PaymentService.java
index 4bd791a4191ff16cc0c2ac8f830e21c847ed0deb..3687d359392abcbd3f318fb86a747079c9b00034 100644
--- a/src/main/java/com/kms/service/PaymentService.java
+++ b/src/main/java/com/kms/service/PaymentService.java
@@ -71,6 +71,9 @@ public class PaymentService {
     }
 
     private void verifyInitPaymentData(PaymentInitReq req) {
+        if (req == null) {
+            SoapFaultHelper.throwFault("InvalidRequest", "Request is empty");
+        }
         if (req.getInitiatorId() == null) {
             SoapFaultHelper.throwFault("InvalidRequest", "Payment initiator id is empty");
         }