added some design (most part is stub)