diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c
index eac1f1dd81..97a8f1cd8c 100644
--- a/tmk_core/common/keyboard.c
+++ b/tmk_core/common/keyboard.c
@@ -61,23 +61,51 @@ along with this program. If not, see .
# include "visualizer/visualizer.h"
#endif
-
-
#ifdef MATRIX_HAS_GHOST
-static bool has_ghost_in_row(uint8_t row)
-{
- matrix_row_t matrix_row = matrix_get_row(row);
- // No ghost exists when less than 2 keys are down on the row
- if (((matrix_row - 1) & matrix_row) == 0)
- return false;
+extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
+static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){
+ matrix_row_t out = 0;
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ //read each key in the row data and check if the keymap defines it as a real key
+ if (pgm_read_byte(&keymaps[0][row][col]) && (rowdata & (1<