diff --git a/partner-masterpulsa-voucher.js b/partner-masterpulsa-voucher.js
index a315d4b..308074b 100644
--- a/partner-masterpulsa-voucher.js
+++ b/partner-masterpulsa-voucher.js
@@ -11,7 +11,7 @@ var logger;
 var options;
 var redisClient;
 
-var adviceDelay = 10000;
+var adviceDelay = 30000;
 
 function createRedisClient() {
     redisClient = redis.createClient(config.globals.redis_port, config.globals.redis_host);
@@ -42,26 +42,37 @@ function getRedisKey(task) {
     return config.globals.gateway_name + '.tid:' + task.requestId;
 }
 
-function putTaskToRedis(task) {
-    var redisKey = getRedisKey(task);
-    var taskInJSON = JSON.stringify(task);
-
-    redisClient.set(redisKey, taskInJSON);
-    redisClient.expire(redisKey, 3600*24*7);
-}
-
 function topupRequest(task, retry) {
-    var redisKey = getRedisKey(task);
+    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;
+        }
 
-    redisClient.get(redisKey, function(err, result) {
-        if (err || !result) {
+        if (!data) {
+            logger.verbose('Belum ada trx dengan tujuan dan denom yang sama pada hari ini. Lanjutkan.');
 
-            //logger.info('Redis error or not found', {redisKey: redisKey, error: err, result: result});
-            putTaskToRedis(task);
-            voucherPay(task);
+            redisClient.set(key, JSON.stringify(task));
+            redisClient.expire(key, 3600 * 24 * 2);
+
+            voucherPay(task, retry);
 
         } else {
-            advice(task);
+
+            try {
+                var taskOnRedis = JSON.parse(data);
+                if (task.requestId == taskOnRedis.requestId) {
+                    logger.verbose('Sudah ada trx dengan tujuan dan denom yg sama, requestId jg sama. Lanjutkan dengan advice.')
+                    advice(task, retry);
+                } else {
+                    logger.verbose('Sudah ada trx dengan tujuan dan denom yg sama, requestId tidak sama. Batalkan.')
+                    callbackReport(task.requestId, '55', 'Transaksi duplikat')
+                }
+            }
+            catch(errJSONParse) {
+                callbackReport(task.requestId, '68', "error parsing json");
+            }
         }
     });
 }