public static final void SpawnPet(final SeekableLittleEndianAccessor slea, final MapleClient c, final MapleCharacter chr) {
	slea.skip(4);
	final byte slot = slea.readByte();
	final IItem item = chr.getInventory(MapleInventoryType.CASH).getItem(slot);

	switch (item.getItemId()) {
	    case 5000047:
	    case 5000028: {
		final MaplePet pet = MaplePet.createPet(item.getItemId() + 1);
		if (pet != null) {
		    MapleInventoryManipulator.addById(c, item.getItemId() + 1, (short) 1, null, pet);
		    MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.CASH, slot, (short) 1, false);
		}
		break;
	    }
	    default: {
		final MaplePet pet = item.getPet();
		if (pet != null) {
		    if (pet.getSummoned()) { // Already summoned, let's keep it
			chr.unequipPet(pet, true, false);
		    } else {
			if (chr.getSkillLevel(SkillFactory.getSkill(8)) == 0 && chr.getPet(0) != null) {
			    chr.unequipPet(chr.getPet(0), false, false);
			}
			if (slea.readByte() == 1) { // Follow the Lead
//			    c.getPlayer().shiftPetsRight();
			}
			final Point pos = chr.getPosition();
			pet.setPos(pos);
			pet.setFh(chr.getMap().getFootholds().findBelow(pet.getPos()).getId());
			pet.setStance(0);
			pet.setSummoned(true);

			chr.addPet(pet);
			chr.getMap().broadcastMessage(chr, PetPacket.showPet(chr, pet, false, false), true);

			final List<Pair<MapleStat, Integer>> stats = new ArrayList<Pair<MapleStat, Integer>>(1);
			stats.add(new Pair<MapleStat, Integer>(MapleStat.PET, Integer.valueOf(pet.getUniqueId())));

			c.getSession().write(PetPacket.petStatUpdate(chr));
			chr.startFullnessSchedule(PetDataFactory.getHunger(pet.getPetItemId()), pet, chr.getPetIndex(pet));
		    }
		}
		break;
	    }
	}
	c.getSession().write(PetPacket.emptyStatUpdate());
    }