redundant implementation