Hi, I've now kicked out uthash in favour of OpenBSD's native ohash. (I've included espie@ in this just in case he has any ohashy wisdom.) This requires that I add a compat_ohash.c file, but this is trivial. The difference is as small as expected. In fact, pretty much all that needed tweaking was making struct of's file pointer an array (since ohash requires that keys be within the structures--something that needs stating twice because I forgot) and using a dummy array declaration for struct str for the same reason: struct str { ...stuff here... char key[1]; }; ...with allocation in the regular way (the struct size plus the string length). Is this known to play nicely with all compilers? I can't think of a better way without modifying the ohash routines to work with key pointers. The biggest bottleneck right now is the database. Try running mandocdb with -n to see the magnitude of difference. Ugh! The -n is checked directly prior to database stuff ("nodb" in the source), so there's little else going on there. I don't do any fancy sqlitey stuff, so there's room for improvement. Note that Marc's hash-growth is less greedy than uthash's, so I can run it as a normal user without running out of memory. Also, I initially thought I'd have to switch from K&R's hash (ohash's default), but it does a pretty good job especially considering that size of the sqlite3 bottleneck. Best, Kristaps