Some Refactoring needed DESPARATELY