fix bug. re-impl return