always override replace method