diff --git a/common/core.h b/common/core.h
index 81b79ad..470bce0 100644
--- a/common/core.h
+++ b/common/core.h
@@ -54,5 +54,5 @@
 Status Disable_();
 Status Reenable_();
 
-void* stats_collection();
+void stats_collection();
 #endif
diff --git a/sim/core.cc b/sim/core.cc
index ce3d1fa..763871d 100644
--- a/sim/core.cc
+++ b/sim/core.cc
@@ -126,5 +126,5 @@
     return Status::OK;
 }
 
-void* stats_collection() {
+void stats_collection() {
 }
diff --git a/src/core.cc b/src/core.cc
index 458c93e..d756297 100644
--- a/src/core.cc
+++ b/src/core.cc
@@ -640,7 +640,7 @@
         return bcm_to_grpc_err(err, "flow add failed");
     }
 
-    register_new_flow(key);
+    // register_new_flow(key);
 
     return Status::OK;
 }
diff --git a/src/stats_collection.cc b/src/stats_collection.cc
index 5e23d11..559b2c1 100644
--- a/src/stats_collection.cc
+++ b/src/stats_collection.cc
@@ -5,6 +5,7 @@
 #include <openolt.grpc.pb.h>
 #include "indications.h"
 #include "core.h"
+#include "translation.h"
 
 extern "C"
 {
@@ -57,17 +58,13 @@
 }
 #endif
 
-openolt::PortStatistics* collectPortStatistics(int intf_id, bcmbal_intf_type intf_type) {
+openolt::PortStatistics* collectPortStatistics(bcmbal_interface_key key) {
 
     bcmos_errno err;
     bcmbal_interface_stat stat;     /**< declare main API struct */
-    bcmbal_interface_key key = { }; /**< declare key */
     bcmos_bool clear_on_read = false;
 
     openolt::PortStatistics* port_stats = get_default_port_statistics();
-    // build key
-    key.intf_id = (bcmbal_intf_id) intf_id;
-    key.intf_type = intf_type;
 
     /* init the API struct */
     BCMBAL_STAT_INIT(&stat, interface, key);
@@ -97,10 +94,15 @@
 
     } else {
         std::cout << "ERROR: Failed to retrieve port statistics"
-                  << " intf_id:" << intf_id
-                  << " intf_type:" << intf_type << std::endl;
+                  << " intf_id:" << key.intf_id
+                  << " intf_type:" << key.intf_type << std::endl;
     }
 
+    port_stats->set_intf_id(interface_key_to_port_no(key));
+    time_t now;
+    time(&now);
+    port_stats->set_timestamp((int)now);
+
     return port_stats;
 
 }
@@ -146,7 +148,7 @@
 #endif
 
 
-void* stats_collection() {
+void stats_collection() {
 
     if (!state.is_connected()) {
         std::cout << "Voltha is not connected, do not collect stats" << std::endl;
@@ -157,7 +159,6 @@
         return;
     }
 
-    time_t now;
 
     std::cout << "Collecting statistics" << std::endl;
 
@@ -165,22 +166,24 @@
 
     //Uplink ports
     for (int i = 0; i < 4; i++) {
-        openolt::PortStatistics* port_stats = collectPortStatistics(i, BCMBAL_INTF_TYPE_NNI);
-        //FIXME Use clean port translation
-        port_stats->set_intf_id(128 + i);
-        time(&now);
-        port_stats->set_timestamp((int)now);
+        bcmbal_interface_key nni_interface;
+        nni_interface.intf_type = BCMBAL_INTF_TYPE_NNI;
+        nni_interface.intf_id = i;
+
+        openolt::PortStatistics* port_stats = collectPortStatistics(nni_interface);
+
         openolt::Indication ind;
         ind.set_allocated_port_stats(port_stats);
         oltIndQ.push(ind);
     }
     //Pon ports
     for (int i = 0; i < 16; i++) {
-        openolt::PortStatistics* port_stats = collectPortStatistics(i, BCMBAL_INTF_TYPE_PON);
-        //FIXME Use clean port translation
-        port_stats->set_intf_id((0x2 << 28) + i);
-        time(&now);
-        port_stats->set_timestamp((int)now);
+        bcmbal_interface_key pon_interface;
+        pon_interface.intf_type = BCMBAL_INTF_TYPE_PON;
+        pon_interface.intf_id = i;
+
+        openolt::PortStatistics* port_stats = collectPortStatistics(pon_interface);
+
         openolt::Indication ind;
         ind.set_allocated_port_stats(port_stats);
         oltIndQ.push(ind);
@@ -221,11 +224,11 @@
 }
 
 /* Storing flow keys, temporary */
-void register_new_flow(bcmbal_flow_key key) {
-    for (int i = 0; i < FLOWS_COUNT; i++) {
-        if (flows_keys[i].flow_id == 0) {
-            flows_keys[i] = key;
-            break;
-        }
-    }
-}
+// void register_new_flow(bcmbal_flow_key key) {
+//     for (int i = 0; i < FLOWS_COUNT; i++) {
+//         if (flows_keys[i].flow_id == 0) {
+//             flows_keys[i] = key;
+//             break;
+//         }
+//     }
+// }
diff --git a/src/stats_collection.h b/src/stats_collection.h
index fe3c27a..09b70f1 100644
--- a/src/stats_collection.h
+++ b/src/stats_collection.h
@@ -11,12 +11,12 @@
 void init_stats();
 void stop_collecting_statistics();
 openolt::PortStatistics* get_default_port_statistics();
-openolt::PortStatistics* collectPortStatistics(int intf_id, bcmbal_intf_type intf_type);
+openolt::PortStatistics* collectPortStatistics(bcmbal_interface_key key);
 #if 0
 openolt::FlowStatistics* get_default_flow_statistics();
 openolt::FlowStatistics* collectFlowStatistics(bcmbal_flow_id flow_id, bcmbal_flow_type flow_type);
-#endif
 void register_new_flow(bcmbal_flow_key key);
+#endif
 
 
 #endif
diff --git a/src/translation.cc b/src/translation.cc
index 55daa4c..88f0a03 100644
--- a/src/translation.cc
+++ b/src/translation.cc
@@ -2,10 +2,10 @@
 
 int interface_key_to_port_no(bcmbal_interface_key key) {
     if (key.intf_type == BCMBAL_INTF_TYPE_NNI) {
-        return 128 + key.intf_id;
+        return (0x1 << 15) + key.intf_id;
     }
     if (key.intf_type == BCMBAL_INTF_TYPE_PON) {
-        return (0x2 << 28) + 1;
+        return (0x2 << 28) + key.intf_id;
     }
     return key.intf_id;
 }
