move implementation to .cc