#4 implemented with slop
#4 finished