refactor again ... Not finished!