lots og refractoring
naming conventions
printItem change to abstract