public boolean splitFamily(int splitId, MapleFamilyCharacter def) {
        //toSplit = initiator who either broke off with their junior/senior, splitId is the ID of the one broken off
        //if it's junior, splitId will be the new leaderID, if its senior it's toSplit thats the new leader
        //happens when someone in fam breaks off with anyone else, either junior/senior
        //update all the members.
        MapleFamilyCharacter leader = getMFC(splitId);
        if (leader == null) {
            leader = def;
            if (leader == null) {
                return false;
            }
        }
        try {
            List<MapleFamilyCharacter> all = leader.getAllJuniors(this); //leader is included in this collection
            if (all.size() <= 1) { //but if leader is the only person, then we're done
                leaveFamily(leader, false);
                return true;
            }
            final int newId = createFamily(leader.getId());
            if (newId <= 0) {
                return false;
            }
            for (MapleFamilyCharacter mgc : all) {
                // need it for sql
                mgc.setFamilyId(newId);
                setOfflineFamilyStatus(newId, mgc.getSeniorId(), mgc.getJunior1(), mgc.getJunior2(), mgc.getCurrentRep(), mgc.getTotalRep(), mgc.getId());
                members.remove(mgc.getId()); //clean remove
            }
            final MapleFamily newfam = World.Family.getFamily(newId);
            for (MapleFamilyCharacter mgc : all) {
                if (mgc.isOnline()) { //NOW we change the char info
                    World.Family.setFamily(newId, mgc.getSeniorId(), mgc.getJunior1(), mgc.getJunior2(), mgc.getCurrentRep(), mgc.getTotalRep(), mgc.getId());
                }
                newfam.setOnline(mgc.getId(), mgc.isOnline(), mgc.getChannel());
            }
        } finally {
            if (members.size() <= 1) { //only one person is left :|
                World.Family.disbandFamily(id); //disband us.
                return true;
            }
        }
        bDirty = true;
        return false;
    }