diff --git a/partner-trustlink.js b/partner-trustlink.js
index f6f911a..708e1fa 100644
--- a/partner-trustlink.js
+++ b/partner-trustlink.js
@@ -82,7 +82,7 @@ function createXmlPayload(task, userid, password) {
     return "<?xml version=\"1.0\" ?>\n" + xml(payload);
 }
 
-function topupRequest(task, retry) {
+function topupRequestHit(task, retry) {
     if (retry === undefined) {
         retry = max_retry;
     }
@@ -136,7 +136,7 @@ function directResponseHandler(body, task) {
     xml2js(body, function (err, result) {
         if (err) {
             logger.warn('Error parsing xml', {body: body});
-            callbackReport(request_id, '68', buffer);
+            callbackReport(task.requestId, '68', buffer);
             return;
         }
 
@@ -148,34 +148,18 @@ function directResponseHandler(body, task) {
         var status = result.evoucher.result[0].trim();
         var message = result.evoucher.value[0].string[0].trim();
 
-        if (status == '0') {
-            if (message.indexOf('SUKSES') >= 0) {
-                /*
-                var sn = getSNFromMessage(message);
-                message = 'SN=' + sn + '; ' + message;
-                */
-
-                response_code = '68';
-            }
-            else if (message.indexOf('GAGAL') >= 0) {
-                response_code = '40';
-            }
-            else {
-                response_code = '68';
-            }
-
-        }
-        else if (status == "-1") {
-            response_code = '40';
-
+        if (message.indexOf('SUKSES') >= 0) {
             /*
-            var new_response_code = responseCodeFromMessage(message);
-            if (new_response_code) {
-                response_code = new_response_code;
-            }
+            var sn = getSNFromMessage(message);
+            message = 'SN=' + sn + '; ' + message;
             */
 
-        } else {
+            response_code = '68';
+        }
+        else if (message.indexOf('GAGAL') >= 0) {
+            response_code = '40';
+        }
+        else {
             response_code = '68';
         }
 
@@ -193,6 +177,37 @@ function getSNFromMessage(message) {
     }
 }
 
+function topupRequest(task, retry) {
+    var key = 'DUPCHECK.gw:' + config.globals.gateway_name + '.prod:' + task.remoteProduct + '.dest:' + task.destination + '.date:' + strftime('%Y%m%d', new Date);
+    redisClient.get(key, function(err, data) {
+        if (err) {
+            callbackReport(task.requestId, '40', 'Gagal cek anti transaksi duplikat (redis error)');
+            return;
+        }
+
+        if (!data) {
+
+            redisClient.set(key, JSON.stringify(task));
+            redisClient.expire(key, 3600 * 24 * 2);
+
+        } else {
+
+            try {
+                var taskOnRedis = JSON.parse(data);
+                if (task.requestId == taskOnRedis.requestId) {
+                    topupRequestHit(task, retry);
+                } else {
+                    callbackReport(task.requestId, '55', 'Transaksi duplikat')
+                }
+            }
+            catch(errJSONParse) {
+                callbackReport(task.requestId, '68', "error parsing json");
+            }
+        }
+
+    });
+}
+
 exports.start = start;
 exports.topupRequest = topupRequest;
 exports.calculateSignature = calculateSignature;