public final void expelMember(final MapleGuildCharacter initiator, final String name, final int cid) {
        lock.writeLock().lock();
        try {
            final Iterator<MapleGuildCharacter> itr = members.iterator();
            while (itr.hasNext()) {
                final MapleGuildCharacter mgc = itr.next();

                if (mgc.getId() == cid && initiator.getGuildRank() < mgc.getGuildRank()) {
                    broadcast(GuildPacket.memberLeft(mgc, true));

                    bDirty = true;

                    gainGP(mgc.getGuildContribution() > 0 ? -mgc.getGuildContribution() : -50);
                    if (mgc.isOnline()) {
                        World.Guild.setGuildAndRank(cid, 0, 5, 0, 5);
                    } else {
                        MapleCharacterUtil.sendNote(mgc.getName(), initiator.getName(), "You have been expelled from the guild.", 0);
                        setOfflineGuildStatus((short) 0, (byte) 5, 0, (byte) 5, cid);
                    }
                    members.remove(mgc);
                    break;
                }
            }
        } finally {
            lock.writeLock().unlock();
        }
        if (bDirty && allianceid > 0) {
            World.Alliance.sendGuild(allianceid);
        }
    }