Self assembly techniques