I found some more issues. First, there is no rule for an element in an else clause: if (true) do_something(); else do_something_else(); "do_something_else" is not indented. There is also something weird with the bsd indent style. It indents do_something and do_something_else to parent-bol with 0 offset, so the result is: if (true) do_something(); else do_something_else(); It is very different from the bsd style from c-mode, which produces this: if (true) do_something(); else do_something_else(); By looking at random files from OpenBSD, they do indent their expressions inside if and else: (lines 277, 484, and 527) Also there is a second patch which tries to handle specific types of comments. I don't know how popular it is, but some people use these kind of comments: /*---------. | %param. | `---------*/ Here we want the vertical bar ("|") to be indented at the same column as the first "/". Currently the result is this: /*---------. | %param. | `---------*/ This patch is a just proof of concept. If this new behavior is indeed wanted, I would clean it up and adapt other modes.