Made base implementations extendable

Fixes #2 

The base implementations were package private before which made them impossible to extent.  Extension is the easiest way to add just a little functionality without having to rewrite the implementation.