The big change however was that I added the index caching that I mentioned a while back. It generates a cached index file for the last commit (and re-generates it if HEAD's sha1 does not match the cached file), which (I think) avoids acessing a bunch of files in the git db, and reduces a normal status query to reading two index files.