Updated with a builder pattern for easier setup