design done
updated version