Use an interface and Abstract class to define the Hostname functionality.
Moved to better use Interfaces and cleaned up unused methods.
Removed unused getters and setters.