refactored AbstractPiece since its no longer abstract