much more work
Little speedup