Don't store intermediate values
Cleanup
Cleanup
Make it reentrant
Clean
Test in parallel
Cleanup