complete rewrite and redesign