split declaration and implementation