public static MaplePacket showThread(int localthreadid, ResultSet threadRS, ResultSet repliesRS) throws SQLException, RuntimeException {
	MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();

	mplew.writeShort(SendPacketOpcode.BBS_OPERATION);
	mplew.write(7);

	mplew.writeInt(localthreadid);
	mplew.writeInt(threadRS.getInt("postercid"));
	mplew.writeLong(PacketHelper.getKoreanTimestamp(threadRS.getLong("timestamp")));
	mplew.writeMapleAsciiString(threadRS.getString("name"));
	mplew.writeMapleAsciiString(threadRS.getString("startpost"));
	mplew.writeInt(threadRS.getInt("icon"));

	if (repliesRS != null) {
	    int replyCount = threadRS.getInt("replycount");
	    mplew.writeInt(replyCount);

	    int i;
	    for (i = 0; i < replyCount && repliesRS.next(); i++) {
		mplew.writeInt(repliesRS.getInt("replyid"));
		mplew.writeInt(repliesRS.getInt("postercid"));
		mplew.writeLong(PacketHelper.getKoreanTimestamp(repliesRS.getLong("timestamp")));
		mplew.writeMapleAsciiString(repliesRS.getString("content"));
	    }
	    if (i != replyCount || repliesRS.next()) {
		//in the unlikely event that we lost count of replyid
		throw new RuntimeException(String.valueOf(threadRS.getInt("threadid")));
		//we need to fix the database and stop the packet sending
		//or else it'll probably error 38 whoever tries to read it
		//there is ONE case not checked, and that's when the thread
		//has a replycount of 0 and there is one or more replies to the
		//thread in bbs_replies
	    }
	} else {
	    mplew.writeInt(0); //0 replies
	}
	return mplew.getPacket();
    }