all nice although could be cleaner