generalize dynamic and static