Rework architecture and add more options