some design suggestion