Separated the implementations