Added optional shades and a lot of other improvements.