more abstraction using enum and namespace