first commit with the generic implementation