Refactored into seperated namespaces