started to re-implement with normal vectors