Width can now be changed after initialized and other improvements.