implement 4 and 5