diff --git a/lib/core-callback/index.js b/lib/core-callback/index.js
index c4561de..0463268 100644
--- a/lib/core-callback/index.js
+++ b/lib/core-callback/index.js
@@ -23,7 +23,7 @@ app.use((req, res, next) => {
 app.use(middlewareCommon);
 
 app.use((req, res) => {
-    matrix.messages_from_core += 1;
+    matrix.core.received += 1;
     res.end('OK');
     sender(req.query, res.locals.xid);
 });
diff --git a/lib/core-callback/sender.js b/lib/core-callback/sender.js
index d4cb7fa..8483648 100644
--- a/lib/core-callback/sender.js
+++ b/lib/core-callback/sender.js
@@ -100,12 +100,12 @@ const sender = async (data, xid, retry) => {
                 headers: axiosHeaders,
             });
 
-        matrix.callback_sender.message_sent += 1;
+        matrix.callback_sender.sent += 1;
 
         if (isPostpaid) {
-            matrix.callback_sender.message_sent_using_post_method += 1;
+            matrix.callback_sender.sent_using_post += 1;
         } else {
-            matrix.callback_sender.message_sent_using_get_method += 1;
+            matrix.callback_sender.sent_using_get += 1;
         }
 
         logger.info(`${MODULE_NAME} 3641FBD7: Has been sent to PARTNER successfully`, {
@@ -115,7 +115,7 @@ const sender = async (data, xid, retry) => {
             responseBody: response && response.data,
         });
     } catch (e) {
-        matrix.callback_sender.message_sent_failed += 1;
+        matrix.callback_sender.sent_failed += 1;
         matrix.callback_sender.last_error = {
             xid,
             ts: new Date(),
diff --git a/lib/matrix.js b/lib/matrix.js
index 3572141..d27e86d 100644
--- a/lib/matrix.js
+++ b/lib/matrix.js
@@ -12,13 +12,17 @@ module.exports = {
     workdir: process.cwd(),
     memory_usage: process.memoryUsage(),
     nodejs_versions: process.versions,
-    messages_from_core: 0,
-    messages_to_core: 0,
+    core: {
+        received: 0,
+        sent: 0,
+        sent_failed: 0,
+        last_error: null,
+    },
     callback_sender: {
-        message_sent: 0,
-        message_sent_failed: 0,
-        message_sent_using_get_method: 0,
-        message_sent_using_post_method: 0,
+        sent: 0,
+        sent_failed: 0,
+        sent_using_get: 0,
+        sent_using_post: 0,
         last_error: null,
     },
 };
diff --git a/lib/partner-listener/routers/topup.js b/lib/partner-listener/routers/topup.js
index 7bdea2e..60b433f 100644
--- a/lib/partner-listener/routers/topup.js
+++ b/lib/partner-listener/routers/topup.js
@@ -59,7 +59,7 @@ async function pageIndex(req, res) {
 
     const terminalName = `${req.body.terminal_name || req.query.terminal_name}@${req.ip.replace(/^::ffff:/, '')}`;
 
-    matrix.messages_to_core += 1;
+    matrix.core.sent += 1;
 
     const [err, coreResponse] = await coreapi({
         xid,
@@ -78,6 +78,15 @@ async function pageIndex(req, res) {
     });
 
     if (err || !coreResponse) {
+        matrix.core.sent_failed += 1;
+        matrix.core.last_error = {
+            xid,
+            ts: new Date(),
+            e: err,
+            eCode: err.code,
+            eMessage: err.message,
+        };
+
         logger.warn(`${MODULE_NAME} 8DEBE15F: ERROR on /prepaid/buy response`, {
             xid,
             err,