some design changes
merge