Doc
Changed replace( ) behavior
Simplified the provider factory
has( ) now checks if the property is empty