Works but need Refactoring!