almost finished, next some testing