First fully functional version =)