added many features to BaseModel