fisrt try to build some extendibility