add some more cases and make things nicer