Restructured into several modules