finally building a descent architecture