support dynamic assignment