almost complete? tests next ;-)