Streamline api, make it extensible and simpler