further refactoring; try to handle data re-transmits while reading out