note that previous version has a bug, where a normal is accessed directly (should be accessed via pmap)