public boolean performMove(Move e)throws Exception {
        if (e == null) {
            throw new Exception("Not an valid move");
        }
        
        if(getCurrentPlayerColor()!=e.getMovedCoin().getColor())
        {
        	throw new Exception(e.getInfo(this)+"is not a Valid Move for "+getCurrentPlayerColor().name());
        }
        
        List<Move> valid_moves = getCoinAt(e.getMovedCoinPosition()).getPossibleMoves(this);
        if (valid_moves != null) {
            Iterator<Move> it = valid_moves.iterator();
            while (it.hasNext()) {
                if (it.next().equals(e)) {
                    e.executeMove(this);
                    if (checkKingIsSafe(e.getMovedCoin().getColor())) {
                        e.undoMove(this);
                        addMove(e);
                        return true;
                    }
                    e.undoMove(this);
                    throw new Exception(e.getSAN(this)+" is a invalid move");
                }
            }
        }
        throw new Exception(e.getSAN(this)+" is a invalid move");
    }