diff --git a/message.xml b/message.xml
new file mode 100644
index 0000000..488e57b
--- /dev/null
+++ b/message.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<SOAP-ENV:Envelope
+    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
+    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
+    xmlns:tns="urn:apih2h">
+
+    <SOAP-ENV:Body>
+        <tns:billpayment xmlns:tns="urn:apih2h">
+            <inputCheck xsi:type="tns:inputCheck">
+                <userName xsi:type="xsd:string">{ params.userName }</userName>
+                <signature xsi:type="xsd:string">{ params.signature }</signature>
+                <productCode xsi:type="xsd:string">{ params.productCode }</productCode>
+                <terminal xsi:type="xsd:string">{ params.terminal }</terminal>
+                <transactionType xsi:type="xsd:string">{ params.transactionType }</transactionType>
+                <billNumber xsi:type="xsd:string">{ params.billNumber }</billNumber>
+                <amount xsi:type="xsd:string">{ params.amount }</amount>
+                <bit61 xsi:type="xsd:string">{ params.bit61 }</bit61>
+                <reff xsi:type="xsd:string">{ params.reff }</reff>
+                <timeStamp xsi:type="xsd:string">{ params.timeStamp }</timeStamp>
+            </inputCheck>
+        </tns:billpayment>
+    </SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
diff --git a/package.json b/package.json
index 95003de..bcd8eef 100644
--- a/package.json
+++ b/package.json
@@ -25,6 +25,7 @@
     "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git",
     "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git",
     "soap": "^0.15.0",
+    "whiskers": "^0.3.3",
     "winston": "^2.2.0"
   },
   "devDependencies": {
diff --git a/partner-kospinjasa.js b/partner-kospinjasa.js
index 96d17b2..d0c6e20 100644
--- a/partner-kospinjasa.js
+++ b/partner-kospinjasa.js
@@ -2,6 +2,12 @@ var winston = require('winston');
 var soap = require('soap');
 var crypto = require('crypto');
 var strftime = require('strftime');
+var fs = require("fs");
+var whiskers = require("whiskers");
+var http = require("http");
+
+process.chdir(__dirname);
+var soapTemplate = fs.readFileSync("message.xml");
 
 var max_retry = 10;
 var sleep_before_retry = 5000;
@@ -52,7 +58,7 @@ function topupRequest(task, retry) {
     var signature = createSignature(params, config.h2h_out.password);
     params.signature = signature;
 
-    topupRequestSoap(task, params, retry);
+    topupRequestSoapDIY(task, params, retry);
 }
 
 function topupRequestSoap(task, params, retry) {
@@ -93,6 +99,67 @@ function topupRequestSoap(task, params, retry) {
     });
 }
 
+function topupRequestSoapDIY(task, params, retry) {
+    var message = whiskers.render(soapTemplate, params);
+    logger.verbose("Generating SOAP message", {message: message});
+
+    var partnerUrl = url.parse(config.h2h_out.partner);
+    var postRequest = {
+        host: partnerUrl.hostname,
+        path: partnerUrl.path,
+        port: partnerUrl.port,
+        method: "POST",
+        headers: {
+            'Content-Type': 'application/soap',
+            'Content-Length': Buffer.byteLength(message)
+        }
+    };
+
+    logger.info('POST to partner', {postRequest: postRequest});
+    var req = http.request(postRequest, function( res ) {
+
+        logger.verbose('Request status code: ' + res.statusCode );
+        var buffer = "";
+
+        res.on( "data", function( data ) {
+            buffer = buffer + data;
+        });
+
+        res.on( "end", function( data ) {
+            topupResponseHandler(buffer, task);
+        });
+
+    });
+
+    req.on('error', function(e) {
+        logger.warn('problem with request: ' + e.message);
+        callbackReport(task.requestId, '68', e.message);
+
+        topupRequestRetry(task);
+    });
+
+    req.write(message);
+    req.end();
+}
+
+function topupResponseHandler(response, task) {
+    logger.verbose('Got response', {response: response, task: task});
+    callbackReport(task.requestId, '68', 'Got response');
+}
+
+function topupRequestRetry(task) {
+    task.retry--;
+
+    if (task.retry > 0) {
+        logger.info('Retrying in ' +  sleepBeforeRetry + 's');
+        setTimeout(topupRequest, sleepBeforeRetry * 1000, task, task.retry);
+    }
+    else {
+        logger.warn('Maximum retry for pending status exceeded', {task: task});
+    }
+}
+
+
 
 
 function createSignature(params, password) {