finished everything, might need some refactoring and commenting v22