initial
Added interface and implementation.