#3 described the implementations