first version incuding tests