works, but very slow
add process based solution