refactored piece interaction