Split implementation into separate file