diff --git a/index.js b/index.js
index 0b8397e..1117616 100644
--- a/index.js
+++ b/index.js
@@ -21,7 +21,6 @@ var options = {
 
 var httpServer = HttpServer.start(config, options);
 
-partner.start(config, aaa.callbackReport, options);
+partner.start(options);
 aaa.start(config, partner, options);
 expresso.start(options);
-
diff --git a/partner-trugee.js b/partner-trugee.js
index 935e67f..8e72d2f 100644
--- a/partner-trugee.js
+++ b/partner-trugee.js
@@ -22,13 +22,13 @@ var trx_prices = {};
 function calculateSignature(password, msisdn, timestamp) {
     var a = timestamp + msisdn.substr(msisdn.length - 4);
     var b = msisdn.substr(msisdn.length - 4).split('').reverse().join('') + password;
-    
+
     return xor.encode(a,b);
 }
 
 function createPayload(task) {
     var timestamp = strftime('%H%M%S');
-    
+
     var payload = {
         pulsamatic: [
             {command: 'TOPUP'},
@@ -40,16 +40,18 @@ function createPayload(task) {
             {sign: calculateSignature(config.h2h_out.password, task['destination'], timestamp)}
         ]
     };
-    
+
     //console.log(payload);
     return "<?xml version=\"1.0\" ?>\n" + xml(payload);
 }
 
 function topupRequest(task, retry) {
-    
-    var payload_xml = createPayload(task);    
+
+    aaa.insertTaskToMongoDb(task);
+
+    var payload_xml = createPayload(task);
     var partner = url.parse(config.h2h_out.partner);
-    
+
     var request_options = {
         host: partner.hostname,
         path: partner.path,
@@ -60,17 +62,17 @@ function topupRequest(task, retry) {
             'Content-Length': Buffer.byteLength(payload_xml)
         }
     };
-    
+
     var buffer = "";
-    
+
     logger.info('Requesting to partner', {request_options: request_options});
-    
+
     var req = http.request(request_options, function( res )    {
 
         logger.info('Status code: ' + res.statusCode );
         var buffer = "";
         res.on( "data", function( data ) { buffer = buffer + data; } );
-        res.on( "end", function( data ) {             
+        res.on( "end", function( data ) {
             directResponseHandler(buffer, task['requestId']);
         });
 
@@ -94,25 +96,25 @@ function directResponseHandler(body, request_id) {
             callbackReport(request_id, '40', buffer);
             return;
         }
-        
+
         logger.info('Direct response parsed', {result: result});
-        
+
         var response_code = '68';
-        
+
         var request_id = result.pulsamatic.partner_trxid[0].trim();
         var message = result.pulsamatic.message[0].trim();
         var status = result.pulsamatic.result[0].trim();
-        
+
         if (status === 'failed') {
             response_code = '40';
-            
+
             var new_response_code = responseCodeFromMessage(message);
             if (new_response_code) {
                 response_code = new_response_code;
             }
 
         }
-        
+
         callbackReport(request_id, response_code, message);
     });
 }
@@ -134,16 +136,16 @@ function createServer() {
 
     var httpServer = http.createServer(function(req, res) {
         //console.log('Got request from partner ("' + req.url + '")');
-        
+
         res.end('OK');
-        
+
         var qs = url.parse(req.url, true).query;
         logger.info('Reverse Report', {qs: qs});
-        
+
         var response_code = '68';
         var request_id = qs.pid;
         var message = qs.msg;
-        
+
         if (qs.code == 2) {
             // gagal
             response_code = '40';
@@ -154,30 +156,43 @@ function createServer() {
             response_code = '00';
             message = 'SN=' + qs.sn + ';' + message;
         }
-        
+
         if (response_code == '40') {
             var new_response_code = responseCodeFromMessage(message);
             if (new_response_code) {
                 response_code = new_response_code;
             }
         }
-        
+
         callbackReport(request_id, response_code, message);
     });
-    
+
     httpServer.listen(config.h2h_out.listen_port, function() {
         logger.info('HTTP Reverse/Report server listen on port ' + config.h2h_out.listen_port);
     });
 }
 
-function start(_config, _callbackReport, options) {
-    config = _config;
-    callbackReport = _callbackReport
-    
-    if (options && options.aaa) {
-            aaa = options.aaa;
+function start(options) {
+    if (!options) {
+        console.log('Undefined options, terminating....');
+        process.exit(1);
     }
-    
+
+    if (options.config) {
+        config = options.config;
+    } else {
+        console.log('Undefined options.config, terminating....')
+        process.exit(1);
+    }
+
+    if (options.aaa) {
+        aaa = options.aaa;
+        callbackReport = options.aaa.callbackReportWithPushToMongoDb;
+    } else {
+        console.log('Undefined options.aaa, terminating....')
+        process.exit(1);
+    }
+
     if (options && options.logger) {
         logger = options.logger;
     } else {
@@ -187,7 +202,7 @@ function start(_config, _callbackReport, options) {
             ]
         });
     }
-    
+
     createServer();
 }