Adopted NS_ENUM to work better with Swift