spacing for readability, and use enums not preprocessor