     }
 
     /// The target move location for an en passant.
-    public var enPassantTarget: Location? {
-        guard let (move, piece, _) = _moveHistory.last, case .Pawn = piece
-            where abs(move.rankChange) == 2 else { return nil }
-        return (move.start.file, move.isUpward ? .Three : .Six)
+    public var enPassantTarget: Square? {
+        guard let (move, piece, _) = _moveHistory.last, case .Pawn = piece else {
+            return nil
+        }
+        guard abs(move.rankChange) == 2 else {
+            return nil
+        }
+        return Square(file: move.start.file, rank: move.isUpward ? .Three : .Six)
     }
 
     /// The current position for `self`.

                        guard let target = enPassantTarget else {
                            return false
                        }
                        return move.end.location == target
                    }
                } else {
                    guard board[move.end] == nil else {

        public func fen() -> String {
            return board.fen()
                + " \(playerTurn.isWhite ? "w" : "b") \(castlingAvailability) "
                + (enPassantTarget.map({ "\($0)".lowercaseString }) ?? "-")
                + " \(halfmoves) \(fullmoves)"
        }

