plus some new class and adapt the format