Sideways check needs to account for water.

This is a good reminder I need to do away with some of
these switch statements and use class-based checks instead where
possible.
Mostly refactoring, no effective changes here.
Adding a copy of the LGPLv2.1+