modified API design