added some design thoughts and may change direction