added more on self-assembly