diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po
index f4fb2a8d..04f42248 100644
Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ
diff --git a/BIN/PAK.S.txt b/BIN/PAK.S.txt
index f4e7d683..e0fe8934 100644
--- a/BIN/PAK.S.txt
+++ b/BIN/PAK.S.txt
@@ -287,7 +287,7 @@ CS.RUN.FILE		jsr FilterMatch
 				bra .9
 				
 .2				jsr CS.RUN.Pak
-			>DEBUG
+*			>DEBUG
 				jsr CS.RUN.WriteArcData
 				bcc .1
 				
diff --git a/BIN/UNPAK.S.txt b/BIN/UNPAK.S.txt
index e8e37eda..30a37998 100644
--- a/BIN/UNPAK.S.txt
+++ b/BIN/UNPAK.S.txt
@@ -24,7 +24,9 @@ ZPOutBufPtr		.BS 2
 ZPULen			.BS 2
 ZPnCnt			.BS 2
 ZPInMask		.BS 1
-ZPOutLastByte	.BS 1
+ZPBLOfsLBits	.BS 1
+ZPBLOfsHBits	.BS 1
+ZPBLLenBits		.BS 1
 ZS.END			.ED
 *--------------------------------------
 *			File Header (16 Bytes)
@@ -53,7 +55,6 @@ L.MSG.OK		.DA MSG.OK
 L.MSG.ERR		.DA MSG.ERR
 L.MSG.E.IARC	.DA MSG.E.IARC
 L.MSG.E.OFS		.DA MSG.E.OFS
-L.MSG.DEBUG		.DA MSG.DEBUG
 				.DA 0
 *--------------------------------------
 CS.INIT			clc
@@ -148,6 +149,7 @@ CS.RUN.LOOP		jsr CS.RUN.GetByte
 				bra CS.RUN.LOOP
 				clc
 .99				rts
+
 .9				jmp CS.RUN.E.IARC
 .1				cmp #CHNK.T.FILE
 				bne .9
@@ -167,18 +169,21 @@ CS.RUN.LOOP		jsr CS.RUN.GetByte
 				bcs .8					eof 
 .2				cmp #CHNK.T.DATA
 				bne .3					Could be a 0 byte file
-.20				jsr CS.RUN.GetByte		ALG
-				bcs .9
-				cmp #0					STORE
-				bne .9
 
-				jsr CS.RUN.GetByte		ULEN LO
+.20				jsr CS.RUN.GetByte		ULEN LO
 				bcs .9
 				sta ZPULen
 
 				jsr CS.RUN.GetByte		ULEN HI
 				bcs .9
 				sta ZPULen+1
+				
+				jsr CS.RUN.GetByte		ALG
+				bcs .9
+			>DEBUG
+				cmp #0					STORE
+				bne .9
+
 				jsr CS.RUN.ReadData
 				bcs .9
 				jsr CS.RUN.WriteFile
@@ -280,12 +285,14 @@ CS.RUN.CheckDir	>PUSHEA.G STAT
 				>SYSCALL mkdir 
 
 				rts
+
 .1				ldy #STAT+S.STAT.P.TYPE
 				lda (pData),y
 				cmp #$F
 				bne .99
 				clc
 				rts
+
 .99				lda #MLI.E.INVPATH
 				sec
 .9				rts
@@ -312,15 +319,20 @@ CS.DOEVENT		sec
 CS.QUIT			>LDA.G hFile
 				beq .1
 				>SYSCALL fclose
+
 .1				>LDA.G hFullPath
 				beq .2
+
 				>SYSCALL FreeMem
 .2				>LDA.G hOutBuf
 				beq .3
+
 				>SYSCALL FreeMem
 .3				>LDA.G hInBuf
 				beq .4
+
 				>SYSCALL FreeMem
+
 .4				>LDA.G hArcFile
 				beq .8
 				>SYSCALL fclose
@@ -339,15 +351,6 @@ MSG.ERR			.AZ "[%h]\r\n"
 MSG.E.IARC		.AZ "Invalid/corrupt archive"
 MSG.E.OFS		.AZ "UnPak Error at Offset : %L\r\n"
 MSG.PAK			.AS "PAK"
-*--------------------------------------
-MSG.DEBUG		.AS "Src Length : %D\r\n"
-				.AS "Pass #1    : %D\r\n"	
-				.AS "Pass #2    : %D\r\n"	
-				.AS "BL Count   : %D\r\n"
-				.AS "REP Count  : %D\r\n"
-				.AS "S3 Count   : %D\r\n"
-				.AS "S4 Count   : %D\r\n"
-				.AZ "STO Count  : %D\r\n"
 *--------------------------------------
 				.DUMMY
 				.OR 0
diff --git a/DRV/LANCEGS.DRV.S.txt b/DRV/LANCEGS.DRV.S.txt
index d5835db4..cc8fa6bd 100644
--- a/DRV/LANCEGS.DRV.S.txt
+++ b/DRV/LANCEGS.DRV.S.txt
@@ -259,6 +259,7 @@ OPEN			lda #S.DIB.S.OPENED
 
 				lda #1
 				sta L91C96.BSR,x
+
 				lda #L91C96.1.CR.NOWAIT
 				sta L91C96.1.CR,x
 				lda /L91C96.1.CR.NOWAIT
@@ -467,16 +468,16 @@ WRITE			php
 				lda (ZPIOCTL),y
 				sta ZPBufPtr+1
 
-*				ldy #S.ETH.SRCMAC+5		Add Src MAC Address
-*				ldx #5
+				ldy #S.ETH.SRCMAC+5		Add Src MAC Address
+				ldx #5
 
-*.4				lda S.DCB.NIC.MAC,x
-*				sta (ZPBufPtr),y
-*				dey
-*				dex
-*				bpl .4
+.4				lda S.DCB.NIC.MAC,x
+				sta (ZPBufPtr),y
+				dey
+				dex
+				bpl .4
 
-*				ldx DEVSLOTx0
+				ldx DEVSLOTx0
 
 				stz L91C96.2.DATA,x		write fake status word
 				stz L91C96.2.DATA,x
diff --git a/INC/LIBPAK.I.txt b/INC/LIBPAK.I.txt
index b26c8295..6c66223d 100644
--- a/INC/LIBPAK.I.txt
+++ b/INC/LIBPAK.I.txt
@@ -3,9 +3,8 @@ NEW
 				.LIST OFF
 *--------------------------------------
 TOP.MAX			.EQ 32
-REP.MAX			.EQ 1+254
 BL.MIN			.EQ 3
-BL.MAX			.EQ 3+63
+BL.MAX			.EQ BL.MIN+31
 *--------------------------------------
 PAK.B.BYTE8.W	.EQ 1
 PAK.B.BYTE8		.EQ %0
@@ -14,15 +13,14 @@ PAK.B.TOP8.W	.EQ 5
 PAK.B.TOP8		.EQ %10.000
 PAK.B.TOP16.W	.EQ 6
 PAK.B.TOP16		.EQ %110.000
-PAK.B.TOP24.W	.EQ 7
-PAK.B.TOP24		.EQ %1110.000
-PAK.B.TOP32.W	.EQ 8
-PAK.B.TOP32		.EQ %11110.000
 
-PAK.B.REP.W		.EQ 6
-PAK.B.REP		.EQ %111110
-PAK.B.BL.W		.EQ 6
-PAK.B.BL		.EQ %111111
+PAK.B.TOP24.W	.EQ 8
+PAK.B.TOP24		.EQ %11100.000
+PAK.B.TOP32.W	.EQ 8
+PAK.B.TOP32		.EQ %11101.000
+
+PAK.B.BL.W		.EQ 4
+PAK.B.BL		.EQ %1111
 *--------------------------------------
 * Shunk Header : 
 *  WORD : Target UNCompressed Length
@@ -43,10 +41,9 @@ S.PAKSTAT.TOP16	.EQ 6
 S.PAKSTAT.TOP24	.EQ 8
 S.PAKSTAT.TOP32	.EQ 10
 S.PAKSTAT.BYTE8	.EQ 12
-S.PAKSTAT.REPN	.EQ 14
-S.PAKSTAT.BL	.EQ 16
+S.PAKSTAT.BL	.EQ 14
 *
-S.PAKSTAT		.EQ 18
+S.PAKSTAT		.EQ 16
 *--------------------------------------
 LIBPAK.Pak		.EQ 4
 *--------------------------------------
diff --git a/INC/PAK.I.txt b/INC/PAK.I.txt
index 050aa115..810bef5a 100644
--- a/INC/PAK.I.txt
+++ b/INC/PAK.I.txt
@@ -16,11 +16,8 @@ CHNK.FILE.FNLEN	.EQ 4
 CHNK.DIR.FNLEN	.EQ 1
 *
 CHNK.DATA.ULEN	.EQ 1
-CHNK.DATA.T		.EQ 3
-CHNK.DATA.T.STORE	.EQ 0
-CHNK.DATA.T.PAK		.EQ $C0
-*
-CHNK.DATA.PAK.TOPLEN	.EQ 3
+CHNK.DATA.PAK.BLBITS	.EQ 3
+CHNK.DATA.PAK.TOPLEN	.EQ 1
 *--------------------------------------
 MAN
 SAVE INC/PAK.I
diff --git a/LIB/LIBPAK.S.txt b/LIB/LIBPAK.S.txt
index 5b9968ca..e6694a5c 100644
--- a/LIB/LIBPAK.S.txt
+++ b/LIB/LIBPAK.S.txt
@@ -9,13 +9,14 @@ NEW
 				.INB INC/A2OSX.I
 				.INB INC/LIBPAK.I
 *--------------------------------------
+STATS			.EQ 0
+*--------------------------------------
 ZPSrcPtr		.EQ ZPLIB
 ZPDstPtr		.EQ ZPLIB+2
 ZPStatPtr		.EQ ZPLIB+4
-
-ZPSrcBLPtr		.EQ ZPLIB+8
-ZPCnt			.EQ ZPLIB+10
-ZPBLCnt			.EQ ZPLIB+12
+ZPSrcBLPtr		.EQ ZPLIB+6
+ZPCnt			.EQ ZPLIB+8
+ZPBLCnt			.EQ ZPLIB+10
 *--------------------------------------
 *			File Header (16 Bytes)
 *--------------------------------------
@@ -34,8 +35,11 @@ CS.START		cld
 .1				.DA LIB.LOAD
 				.DA LIB.UNLOAD
 				.DA Pak
+				.DO STATS=1
 L.MSG.Stats		.DA MSG.Stats
 L.MSG.TopBytes	.DA MSG.TopBytes
+				.FIN
+L.MSG.BL		.DA MSG.BL
 				.DA 0
 *--------------------------------------
 LIB.LOAD
@@ -77,7 +81,9 @@ Pak				>PULLW Pak.SrcPtr
 				jsr Pak.ComputeLenBits
 				jsr Pak.BuildTOPTable
 
+				.DO STATS=1
 				jsr Pak.PrintStats
+				.FIN
 				
 * PASS #2 : store with TOP bytes
 
@@ -88,7 +94,10 @@ Pak				>PULLW Pak.SrcPtr
 				jsr Pak.Run
 				bcs .9
 
+				.DO STATS=1
 				jsr Pak.PrintStats
+				>DEBUG
+				.FIN
 				
 				ldy #S.PAKSTAT-1
 				
@@ -105,8 +114,6 @@ Pak				>PULLW Pak.SrcPtr
 Pak.Run			>LDYA Pak.SrcPtr
 				>STYA ZPSrcPtr
 				
-				stz Pak.Rep.Longest
-				
 				stz Pak.BL.Longest
 				stz Pak.BL.Farest
 				stz Pak.BL.Farest+1
@@ -121,9 +128,6 @@ Pak.Run			>LDYA Pak.SrcPtr
 				sta Pak.SrcCnt+1
 				sta Pak.DstCnt+1
 
-				stz Pak.RepCnt
-				stz Pak.LastByte
-				
 				ldx #S.PAKSTAT.PASS1
 				bit Pak.bPass2
 				bpl .1
@@ -142,17 +146,7 @@ Pak.Run.1		inc Pak.SrcCnt
 				inc Pak.SrcCnt+1
 				beq .8					0 byte left...
 				
-.1				jsr Pak.ScanRep
-				bcs .2
-
-				jsr Pak.PutRep
-				bcs .9
-
-				ldy Pak.RepCnt
-				stz Pak.RepCnt
-				bra .6
-				
-.2				jsr Pak.ScanBL
+.1				jsr Pak.ScanBL
 				bcs .20
 
 				jsr Pak.PutBL
@@ -188,41 +182,6 @@ Pak.Run.1		inc Pak.SrcCnt
 				inc ZPSrcPtr+1
 				bra Pak.Run.1				
 *--------------------------------------
-Pak.ScanRep		>LDYA Pak.SrcCnt		make sure not going past End Buffer
-				>STYA ZPCnt				while reading ahead
-				
-				lda Pak.LastByte
-
-				ldy #0
-				
-.1				inc ZPCnt
-				bne .2
-
-				inc ZPCnt+1
-				beq .4					Last Src Data
-				
-.2				cmp (ZPSrcPtr),y
-				bne .4
-
-				iny
-				cpy #REP.MAX
-				bne .1
-
-.4				tya
-				beq .9
-
-				sty Pak.RepCnt
-				cpy Pak.Rep.Longest
-				bcc .8
-
-				sty Pak.Rep.Longest
-				
-.8				clc
-				rts
-				
-.9				sec
-				rts
-*--------------------------------------
 Pak.ScanBL		>LDYA Pak.SrcPtr		Start at beginning of Src buf
 				>STYA ZPSrcBLPtr
 
@@ -295,31 +254,12 @@ Pak.ScanBL		>LDYA Pak.SrcPtr		Start at beginning of Src buf
 				rts
 *--------------------------------------
 Pak.ComputeLenBits
-				lda Pak.Rep.Longest
-
-				tax
-				dec						Longest=1, one bit
-				beq .15
-				
-				ldx #8
-				
-.14				asl
-				bcs .15
-				dex
-				bra .14
-				
-.15				stx Pak.Rep.LenBits
-				txa
-				asl
-				asl
-				asl
-				asl
-				asl
-				sta Pak.Shnk+S.PAKSHNK.TOPCNT
-
-				ldx #8
+				ldx #0
 				lda Pak.BL.Longest
+				beq .10
 
+				ldx #8
+				
 				dec
 				dec
 				dec
@@ -331,21 +271,25 @@ Pak.ComputeLenBits
 				
 .10				stx Pak.BL.LenBits
 
-				ldx #8
+				ldx #0
 				ldy #0
 				
 				lda Pak.BL.Farest+1
 				beq .22
 					
 				ldy #8
-					
+				ldx #8
+				
 .2				asl
 				bcs .4
 				dey
 				bra .2
 				
 .22				lda Pak.BL.Farest
-
+				beq .4
+				
+				ldx #8
+				
 .3				asl
 				bcs .4
 				dex
@@ -390,7 +334,7 @@ Pak.BuildTOPTable
 				sbc Pak.CntH,x
 				bcs .3					not better or equal...
 				
-				stx Pak.LastByte		save new score index...
+				stx Pak.Top.Best		save new score index...
 				
 				lda Pak.CntL,x
 				sta Pak.Cnt				...and value
@@ -403,7 +347,7 @@ Pak.BuildTOPTable
 				bit Pak.bStop
 				bmi .8
 				
-				lda Pak.LastByte
+				lda Pak.Top.Best
 				sta Pak.Shnk+S.PAKSHNK.TOPBYTES,y
 				tax
 				stz Pak.CntL,x			Discard this entry
@@ -412,41 +356,10 @@ Pak.BuildTOPTable
 				cpy #TOP.MAX
 				bne .1
 				
-.8				sty Pak.TOP.Count
-				tya
-				ora Pak.Shnk+S.PAKSHNK.TOPCNT
-				sta Pak.Shnk+S.PAKSHNK.TOPCNT
+.8				sty Pak.Shnk+S.PAKSHNK.TOPCNT
 				
 				rts
 *--------------------------------------
-Pak.PutRep		ldx #S.PAKSTAT.REPN
-				jsr Pak.UpdateStats
-
-				bit Pak.bPass2
-				bmi Pak.PutRep.2
-				
-				ldx #S.PAKSTAT.BYTE8
-				jsr Pak.UpdateStats
-				
-				ldx #S.PAKSTAT.PASS1
-				jsr Pak.UpdateStats
-				
-				clc
-				rts
-				
-Pak.PutRep.2	ldy #PAK.B.REP.W
-				lda #PAK.B.REP
-				jsr	Pak.Out.PutYBits
-				bcs .9
-				
-				lda Pak.RepCnt
-				dec						remap 1-8 to 0-7 range
-				ldy Pak.Rep.LenBits
-				
-				jmp	Pak.Out.PutYBits
-				
-.9				rts				
-*--------------------------------------
 Pak.PutBL		ldx #S.PAKSTAT.BL
 				jsr Pak.UpdateStats
 				
@@ -505,9 +418,7 @@ Pak.PutBL		ldx #S.PAKSTAT.BL
 				
 .9				rts
 *--------------------------------------
-Pak.PutByte8	sta Pak.LastByte
-
-				bit Pak.bPass2
+Pak.PutByte8	bit Pak.bPass2
 				bmi Pak.PutByte8.2
 				
 .5				tax
@@ -525,7 +436,7 @@ Pak.PutByte8	sta Pak.LastByte
 				clc
 				rts
 
-Pak.PutByte8.2	ldy Pak.TOP.Count
+Pak.PutByte8.2	ldy Pak.Shnk+S.PAKSHNK.TOPCNT
 
 .1				cmp Pak.Shnk+S.PAKSHNK.TOPBYTES-1,y
 				beq .3
@@ -583,7 +494,7 @@ Pak.Out.Init	lda Pak.Shnk+S.PAKSHNK.BLBITS
 				bcs .9
 
 				iny
-				cpy Pak.TOP.Count
+				cpy Pak.Shnk+S.PAKSHNK.TOPCNT
 				bne .1
 				
 				lda #$80
@@ -666,6 +577,7 @@ Pak.UpdateStats	inc Pak.Stat,x
 				inc Pak.Stat+1,x
 .8				rts
 *--------------------------------------
+				.DO STATS=1
 Pak.PrintStats	lda Pak.BL.OfsBitsL
 				clc
 				adc Pak.BL.OfsBitsH
@@ -676,10 +588,6 @@ Pak.PrintStats	lda Pak.BL.OfsBitsL
 				>PUSHB Pak.BL.Longest
 				>PUSHW Pak.Stat+S.PAKSTAT.BL
 				
-				>PUSHB Pak.REP.LenBits
-				>PUSHB Pak.REP.Longest
-				>PUSHW Pak.Stat+S.PAKSTAT.REPN
-				
 				ldx #S.PAKSTAT.BYTE8
 
 .1				>PUSHW Pak.Stat,x
@@ -687,7 +595,9 @@ Pak.PrintStats	lda Pak.BL.OfsBitsL
 				dex
 				bpl .1
 				
-				>PUSHBI 25
+				>PUSHW Pak.Shnk+S.PAKSHNK.ULEN
+				
+				>PUSHBI 23
 				>LDYA L.MSG.Stats
 				>SYSCALL printf
 				
@@ -697,15 +607,37 @@ Pak.PrintStats	lda Pak.BL.OfsBitsL
 				dex
 				bpl .2
 				
-				>PUSHB Pak.TOP.Count
+				>PUSHB Pak.Shnk+S.PAKSHNK.TOPCNT
 				
 				>PUSHBI TOP.MAX+1
 				>LDYA L.MSG.TopBytes
 				>SYSCALL printf
 				rts
+				.FIN
 *--------------------------------------
-PrintBl			>LDYA Pak.BestBL
-				>STYA ZPSrcBLPtr
+PrintBl			lda ZPSrcPtr
+				sec
+				sbc Pak.BestBL
+				sta ZPSrcBLPtr
+				
+				lda ZPSrcPtr+1
+				sbc Pak.BestBL+1
+				sta ZPSrcBLPtr+1
+				
+				>PUSHW Pak.BestBL
+				>PUSHB Pak.BestBLLen
+				lda ZPSrcPtr
+				sec
+				sbc Pak.SrcPtr
+				tay
+				
+				lda ZPSrcPtr+1
+				sbc Pak.SrcPtr+1
+				>PUSHYA
+				
+				>PUSHBI 5
+				>LDYA L.MSG.BL
+				>SYSCALL printf
 				
 				lda #'{'
 				>SYSCALL putchar
@@ -737,19 +669,22 @@ PrintBl			>LDYA Pak.BestBL
 *--------------------------------------
 CS.END
 *--------------------------------------
-MSG.Stats		.AS "\r\nPass 1 : %5D\r\n"
+				.DO STATS=1
+MSG.Stats		.AS "\r\nLength : %5D\r\n"
+				.AS "Pass 1 : %5D\r\n"
 				.AS "Pass 2 : %5D\r\n"
 				.AS "Top  8 : %5D\r\n"
 				.AS "Top 16 : %5D\r\n"
 				.AS "Top 24 : %5D\r\n"
 				.AS "Top 32 : %5D\r\n"
 				.AS "Byte 8 : %5D\r\n"
-				.AS "Rep    : %5D, Longest : %d (%d bits)\r\n"
 				.AZ "BL     : %5D, Longest : %d (%d bits), Farest : %D (%d bits)\r\n"
-MSG.TopBytes	.AZ "Top    : %2d:%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h\r\n"
+MSG.TopBytes	.AZ "Top    : %5d, %h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h\r\n"
+				.FIN
 TOP.Bits		.DA #PAK.B.TOP8,#PAK.B.TOP16,#PAK.B.TOP24,#PAK.B.TOP32
 TOP.BitCnt		.DA #PAK.B.TOP8.W,#PAK.B.TOP16.W,#PAK.B.TOP24.W,#PAK.B.TOP32.W
 TOP.Stat		.DA #S.PAKSTAT.TOP8,#S.PAKSTAT.TOP16,#S.PAKSTAT.TOP24,#S.PAKSTAT.TOP32
+MSG.BL			.AZ "o=%D,l=%d,d=%D:"
 *--------------------------------------
 Pak.SrcPtr		.BS 2
 
@@ -758,8 +693,6 @@ Pak.DstCnt		.BS 2
 
 Pak.bPass2		.BS 1
 
-Pak.TOP.Count	.BS 1
-
 Pak.BL.Longest	.BS 1
 Pak.BL.Farest	.BS 2
 
@@ -771,15 +704,11 @@ Pak.bBLFound	.BS 1
 Pak.BestBLLen	.BS 1
 Pak.BestBL		.BS 2
 
+Pak.Top.Best	.BS 1
+
 Pak.Cnt			.BS 2
 Pak.bStop		.BS 1
 
-Pak.Rep.Longest	.BS 1
-Pak.Rep.LenBits	.BS 1
-
-Pak.RepCnt		.BS 1
-Pak.LastByte	.BS 1
-
 Pak.Out.Byte	.BS 1
 Pak.Out.Mask	.BS 1
 *--------------------------------------
diff --git a/SHARED/X.UNPAK.S.txt b/SHARED/X.UNPAK.S.txt
index 01e32a61..be24bae3 100644
--- a/SHARED/X.UNPAK.S.txt
+++ b/SHARED/X.UNPAK.S.txt
@@ -8,7 +8,7 @@ NEW
 * ZPnCnt = !ZPULen
 * ZPPtr1
 * ZPPtr2
-* ZPInMask,ZPOutLastByte
+* ZPInMask,ZPBLOfsLBits,ZPBLOfsHBits,ZPBLLenBits
 *--------------------------------------
 X.Unpak			lda (ZPInBufPtr)		ULEN LO
 				eor #$ff
@@ -23,14 +23,9 @@ X.Unpak			lda (ZPInBufPtr)		ULEN LO
 				jsr X.Unpak.NextByte
 				
 				lda (ZPInBufPtr)		CHNK.DATA.T
-				beq X.Unpak.T.STORE
-
-
-
-				sec
-				rts
-				
-X.Unpak.T.STORE	ldy #0					start at 1 to skip CHNK.DATA.T
+				bne X.Unpak.PAK
+*--------------------------------------
+X.Unpak.STORE	ldy #0
 
 .1				iny
 				bne .2
@@ -38,13 +33,34 @@ X.Unpak.T.STORE	ldy #0					start at 1 to skip CHNK.DATA.T
 				inc ZPInBufPtr+1
 
 .2				lda (ZPInBufPtr),y
-				jsr X.Unpak.PutByte.1
+				jsr X.Unpak.PutByte
 				bne .1
 
 				clc
 				rts
+*--------------------------------------
+X.Unpak.PAK		pha						A = BLBITS
+				and #$70
+				lsr
+				lsr
+				lsr
+				lsr
+				sta ZPBLLenBits
 				
-X.Unpak.T.PAK	jsr X.Unpak.NextByte	skip CHNK.DATA.T
+				pla
+				ldx #8
+				and #$0f
+				tax
+				cmp #8
+				bcc .10
+				
+				ldx #8
+				and #7
+				
+.10				stx ZPBLOfsLBits
+				sta ZPBLOfsHBits
+
+				jsr X.Unpak.NextByte	get TOPCNT
 
 				lda (ZPInBufPtr)		CHNK.DATA.PAK.TOPLEN
 				clc
@@ -57,7 +73,7 @@ X.Unpak.T.PAK	jsr X.Unpak.NextByte	skip CHNK.DATA.T
 
 				lda #$80
 				sta ZPInMask
-	
+*--------------------------------------	
 .1				lda ZPnCnt
 				ora ZPnCnt+1
 				bne .2
@@ -66,9 +82,6 @@ X.Unpak.T.PAK	jsr X.Unpak.NextByte	skip CHNK.DATA.T
 				rts
 *--------------------------------------	
 .2				jsr X.Unpak.GetBitInC
-				bcs .7					->BACKLINK
-				
-				jsr X.Unpak.GetBitInC
 				bcs .3					->TOP
 * BYTE8
 				jsr X.Unpak.GetByteInA
@@ -83,7 +96,7 @@ X.Unpak.T.PAK	jsr X.Unpak.NextByte	skip CHNK.DATA.T
 				bra .51
 *--------------------------------------				
 .4				jsr X.Unpak.GetBitInC
-				bcs .5					->TOP24
+				bcs .5					->TOP32
 * TOP16
 				ldx #3
 				jsr X.Unpak.GetXBitInA
@@ -92,11 +105,11 @@ X.Unpak.T.PAK	jsr X.Unpak.NextByte	skip CHNK.DATA.T
 				bra .51
 *--------------------------------------				
 .5				jsr X.Unpak.GetBitInC
-				bcs .6					->REPn
-* TOP24				
-				ldx #3
+				bcs .6					->BACKLINK
+* TOP32				
+				ldx #4
 				jsr X.Unpak.GetXBitInA
-				ora #16
+				ora #32
 
 .51				tay			
 				lda (ZPInBufPtr),y
@@ -106,47 +119,45 @@ X.Unpak.T.PAK	jsr X.Unpak.NextByte	skip CHNK.DATA.T
 				clc
 				rts
 *--------------------------------------
-* REPn			
-.6				lda ZPOutLastByte
-	
-.61				jsr X.Unpak.PutByte.1
+* BACKLINK : 1111 OfsLBits OfsHBits LenBits
+
+.6				ldx ZPBLOfsLBits
+				jsr X.Unpak.GetXBitInA
+				clc
+				adc ZPOutBufPtr
+				sta ZPPtr2
+				php
+				lda ZPBLOfsHBits
+				beq .61
+				
+				tax
+				jsr X.Unpak.GetXBitInA
+				
+.61				plp
+				adc ZPOutBufPtr+1
+				sta ZPPtr2+1
+				
+				ldx ZPBLLenBits
+				jsr X.Unpak.GetXBitInA
+
+				inc						+1
+				inc						+1
+				inc						+1
+				
+				tay
+				
+.62				lda (ZPPtr2),y
+				jsr X.Unpak.PutByte
 				beq .99
+
 				dey
-				bpl .61					+1
+				bne .62
 				
 				bra .1
 				
 .99				sec
 				rts
 *--------------------------------------
-* BACKLINK : 1 oooooooo OOOO llllll
-.7				jsr X.Unpak.GetByteInA
-				clc
-				adc ZPOutBufPtr
-				sta ZPPtr2
-				php
-				ldx #4
-				jsr X.Unpak.GetXBitInA
-				plp
-				adc ZPOutBufPtr+1
-				sta ZPPtr2+1
-				
-				jsr X.Unpak.GetByteInA
-
-				inc						+1
-				inc						+1
-*				inc						+1
-				
-				tay
-				
-.71				lda (ZPPtr2),y
-				jsr X.Unpak.PutByte
-				beq .99
-				dey
-				bpl .71					+1
-				
-				bra .1
-*--------------------------------------
 X.Unpak.GetByteInA
 				ldx #8
 
@@ -188,9 +199,7 @@ X.Unpak.NextByte
 
 .8				rts
 *--------------------------------------
-X.Unpak.PutByte	sta ZPOutLastByte
-X.Unpak.PutByte.1
-				sta (ZPOutBufPtr)
+X.Unpak.PutByte	sta (ZPOutBufPtr)
 				inc ZPOutBufPtr
 				bne .1
 				inc ZPOutBufPtr+1