First version with an implementation