public HashMap parse_v3_frames(RandomAccessFile s, long payload_len, int v3minor) throws IOException {
		HashMap tags = new HashMap();
		byte[] frame   = new byte[10]; // a frame header is always 10 bytes
		long bread     = 0;            // total amount of read bytes

		while(bread < payload_len) {
			bread += s.read(frame);
			String framename = new String(frame, 0, 4);
			int rawlen = b2be32(frame, 4);
			// Encoders prior ID3v2.4 did not encode the frame length
			int slen = (v3minor >= 4 ? unsyncsafe(rawlen) : rawlen);
			
			/* Abort on silly sizes */
			long bytesRemaining = payload_len - bread;
			if(slen < 1 || slen > (bytesRemaining))
				break;
			
			byte[] xpl = new byte[slen];
			bread += s.read(xpl);
			
			if(framename.substring(0,1).equals("T")) {
				String[] nmzInfo = normalizeTaginfo(framename, xpl);
				String oggKey = nmzInfo[0];
				String decPld = nmzInfo[1];
				
				if(oggKey.length() > 0 && !tags.containsKey(oggKey)) {
					addTagEntry(tags, oggKey, decPld);
				}
			}
			else if(framename.equals("RVA2")) {
				//
			}
			
		}
		return tags;
	}