+ logic implementation 90%, need to test