We probably need to talk about your reasoning some more. I used a configuration object because it explicitly defines the things that are defined as "defaults" and makes it so the user can write her own Configuration by implementing a class with just a few methods (a duck type).  The classes that use configuration don't require that an object be passed in since that dependency is injected in the initializer. I can see there might be an advantage of explicitness if you merge the configuration into the parameters hash passed as arguments to the initializer, but then it looks like the only way you can get defaults is by a much tighter coupling of Suretax.configuration into the affected classes. The two arguments to the initializer would bother me more if the second one were not optional.