fixed
fixed 2
fixed 3
basic implementation