Redesign and reimplement - v2.0