public int propose(int seq, Operation op) throws RemoteException {

    if (!work) return seq;

    boolean decided = false;

    while (!decided) {

      seq++;

      ArrayList<KeyValueServerInterface> list = getServersList();

      int count = 0;

      int max = -1;

      for (KeyValueServerInterface server : list) {

        Instance ins = server.prepare(op.op_num, seq);

        if (ins != null) {
          count++;
          if (ins.n_a > max) {

            max = ins.n_a;
            // content = ins.content;
            op.content = ins.content;
          }
        }
      }
      if (count > (list.size() / 2)) {

        if (sendAllAccept(op.op_num, seq, op.content, list)) {

          for (KeyValueServerInterface server : list) {

            server.decide(seq, op);
          }

          decided = true;
        }
      }
    }

    return seq;
  }