Restructured for easier development