diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po
index 272ca6b3..4bce420c 100644
Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ
diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po
index 94637169..8ba6098a 100644
Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ
diff --git a/.Floppies/ProDOSFX.BOOT.po b/.Floppies/ProDOSFX.BOOT.po
index 8eadcff7..b44ae936 100644
Binary files a/.Floppies/ProDOSFX.BOOT.po and b/.Floppies/ProDOSFX.BOOT.po differ
diff --git a/BASIC.FX/BASIC.S.XF.txt b/BASIC.FX/BASIC.S.XF.txt
index ac0b9766..1ff1506a 100644
--- a/BASIC.FX/BASIC.S.XF.txt
+++ b/BASIC.FX/BASIC.S.XF.txt
@@ -22,19 +22,19 @@ BSX.Recalibrate	ldy BSX.Slotn0
 				lda #IO.D2.SeekTimeR
 				jsr BSX.Wait100usecA
 
-				lda #168
+				lda #160
+				
+				php
+				sei
 
 .1				dec
 				dec
 
 				pha
 
-				and #6
-				ora BSX.Slotn0
 				phy
 				plx
-				tay
-				lda IO.D2.Ph0On,y
+				jsr BSX.SeekPhOnY
 
 				lda #IO.D2.SeekTimeR
 				jsr BSX.Wait100usecA
@@ -51,6 +51,8 @@ BSX.Recalibrate	ldy BSX.Slotn0
 
 				lda IO.D2.Ph0Off,y
 
+				plp
+
 				jmp BSX.Wait25600usec
 *--------------------------------------
 BSX.MoveHead	sta BSX.TargetQTrack
@@ -80,7 +82,7 @@ BSX.MoveHead	sta BSX.TargetQTrack
 
 .2				jsr BSX.SeekPhOnY		move out: Y = Ph(N)
 
-				bra .9					no wait
+				bra .9					Ph ON to go to 0/4 or 2/4, no wait
 *--------------------------------------
 .3				bcs	.4					if CS, C > T, must move out
 
@@ -119,13 +121,15 @@ BSX.MoveHead	sta BSX.TargetQTrack
 
 				jsr BSX.Wait25600usec
 
+				lda IO.D2.Ph0Off,y
+				
 				bcc .10
 
-				lda IO.D2.Ph0Off,x
+				clc
 
-.10				lda IO.D2.Ph0Off,y
+				lda IO.D2.Ph0Off,x
 				
-				rts
+.10				rts
 *--------------------------------------
 BSX.SeekPhOnY	and #6
 				ora BSX.Slotn0
@@ -139,7 +143,7 @@ BSX.Wait25600usec
 BSX.Wait100usecA
 				phx
 
-.1				ldx #20					(2)
+.1				ldx #19					(2)
 
 .2  			dex						(2)
 				bne .2					(3)
diff --git a/BIN/CC.S.CODE.txt b/BIN/CC.S.CODE.txt
index 8fb6b1f9..0a71d8fb 100644
--- a/BIN/CC.S.CODE.txt
+++ b/BIN/CC.S.CODE.txt
@@ -3,283 +3,127 @@ NEW
 *--------------------------------------
 CODE.Init		stz ZPCCConst
 				stz ZPCCConst+1
-				
+
+				stz bInitCode
+
 				>LDYAI PCC.FH.CS
 				>STYA ZPCCCode
-				
+
 				>LDYAI 20				char *ARGV[10]
 				>STYA ZPCCData
-				
+
+				lda #'_'
+				>STA.G CC.CPSPFX+1
+
+				lda #'A'
+				>STA.G CC.CPSID
+
+				iny						CC.CPSID+1
+				sta (pData),y
+
 				clc
 .9				rts
 *--------------------------------------
 CODE.Quit		>LDA.G CC.hOutFile
 				beq .8
-				
+
 				>SYSCALL FClose
 
 .8				clc
 				rts
 *--------------------------------------
-CODE.Debug		ldx #PCC.DEBUG.L
-				ldy #0
-
-.1				lda PCC.DEBUG,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.Enter		ldx #PCC.ENTER.L
-				ldy #0
-
-.1				lda PCC.ENTER,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
 CODE.nAddLocal	eor #$FF
 				inc
-				
-CODE.AddLocal	pha
-				lda #$A9				LDA #imm
-				jsr CODE.EmitByte
-				pla
-				jsr CODE.EmitByte
 
-				ldx #PCC.ADDLOCAL.L
-				ldy #0
+CODE.AddLocal	jsr CODE.LDAI
+				bcs .9
 
-.1				lda PCC.ADDLOCAL,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
+				>LDYA L.PCC.ADDLOCAL
+				jmp CODE.EmitPCC
 
-				rts
-*--------------------------------------
-CODE.GetLocal	lda #$A9				LDA #imm
-				jsr CODE.EmitByte
-				tya
-				eor #$FF
-				inc
-				jsr CODE.EmitByte
-
-				ldx #PCC.GETLOCAL.L
-				ldy #0
-
-.1				lda PCC.GETLOCAL,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
+.9				rts
 *--------------------------------------
 CODE.SetRetValue
 				jsr CODE.LDXI
+				bcs .9
 
-				ldx #PCC.SETRETVALUE.L
-				ldy #0
+				>LDYA L.PCC.SetRetValue
+				jmp CODE.EmitPCC
 
-.1				lda PCC.SETRETVALUE,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
+.9				rts
 *--------------------------------------
-CODE.Leave		ldx #PCC.LEAVE.L
-				ldy #0
-
-.1				lda PCC.LEAVE,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.PushXFromYA
-				ldx #PCC.PushXFromYA.L
-				ldy #0
-
-.1				lda PCC.PushXFromYA,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.PopXToYA	ldx #PCC.PopXToYA.L
-				ldy #0
-
-.1				lda PCC.PopXToYA,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.SetXToYA	ldx #PCC.SetXToYA.L
-				ldy #0
-
-.1				lda PCC.SetXToYA,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.Deref		ldx #PCC.Deref.L
-				ldy #0
-
-.1				lda PCC.Deref,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.SETpBASEp1	ldx #PCC.SETpBASEp1.L
-				ldy #0
-
-.1				lda PCC.SETpBASEp1,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.SETpBASEpA	ldx #PCC.SETpBASEpA.L
-				ldy #0
-
-.1				lda PCC.SETpBASEpA,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.PUSHpBASEp1
-				ldx #PCC.PUSHpBASEp1.L
-				ldy #0
-
-.1				lda PCC.PUSHpBASEp1,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.PUSHpBASEpA
-				ldx #PCC.PUSHpBASEpA.L
-				ldy #0
-
-.1				lda PCC.PUSHpBASEpA,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.PushFromPtr
-				pha
-				lda #$A0				LDY #imm
-				jsr CODE.EmitByte
+CODE.PUSHAXI	pha
+				txa
+				jsr CODE.PUSHI
+				bcs CODE.LDAXI.RTS
+				
 				pla
-				dec						BPL loop
-				jsr CODE.EmitByte
-				
-				ldx #PCC.PushFromPtr.L
-				ldy #0
-
-.1				lda PCC.PushFromPtr,y
-				jsr CODE.EmitByte
-				iny
-				dex
-				bne .1
-
-				rts
-*--------------------------------------
-CODE.PushConstP	lda #$A9				LDA #imm
-				jsr CODE.EmitByte
-				bcs .9
-
-				lda ZPCCConst
-				jsr CODE.EmitByte
-				bcs .9
-				
-				lda #$A2				LDX #imm
-				jsr CODE.EmitByte
-				bcs .9
-
-				lda ZPCCConst+1
-				jsr CODE.EmitByte
-				bcs .9
-
-				ldx #PCC.PushConstPAX.L
-				ldy #0
-
-.1				lda PCC.PushConstPAX,y
-				jsr CODE.EmitByte
-				bcs .9
-				
-				iny
-				dex
-				bne .1
-
-				clc
-.9				rts				
 *--------------------------------------
 CODE.PUSHI		pha
 				lda #$A9				LDA #imm
 				jsr CODE.EmitByte
+				bcs CODE.LDAXI.RTS
+				
 				pla
 				jsr CODE.EmitByte
+				bcs CODE.LDAXI.RTS
+				
 				bra CODE.PUSHA
 *--------------------------------------
 CODE.LDYAI		pha
 
 				lda #$A0				LDY #imm
 				jsr CODE.EmitByte
+				bcs CODE.LDAXI.RTS
+				
 				tya
 				jsr CODE.EmitByte
-
+				bcs CODE.LDAXI.RTS
+				
 				lda #$A9				LDA #imm
 				jsr CODE.EmitByte
-
+				bcs CODE.LDAXI.RTS
+				
 				pla
 
 				jmp CODE.EmitByte
 *--------------------------------------
+CODE.LDAXI		jsr CODE.LDAI
+				bcc CODE.LDXI
+
+CODE.LDAXI.RTS	rts
+*--------------------------------------
+CODE.LDYI		lda #$A0				LDY #imm
+				jsr CODE.EmitByte
+				bcs .9
+
+				tya
+				jmp CODE.EmitByte
+
+.9				rts
+*--------------------------------------
 CODE.LDXI		lda #$A2				LDX #imm
 				jsr CODE.EmitByte
+				bcs .9
+
 				txa
 				jmp CODE.EmitByte
+
+.9				rts
 *--------------------------------------
 CODE.LDAI		pha
 				lda #$A9				LDA #imm
 				jsr CODE.EmitByte
+				bcs .9
+
 				pla
 				jmp CODE.EmitByte
+
+.9				plx
+				rts
 *--------------------------------------
 CODE.PUSHYA		jsr CODE.PUSHA
-				lda #$AA				TYA
+				lda #$98				TYA
 				jsr CODE.EmitByte
 *--------------------------------------
 CODE.PUSHA		lda #$C6				DEC zp
@@ -315,27 +159,57 @@ CODE.TOABSYX	jsr CODE.EmitByte		A=opcode : JMP, JSR .....
 				tya
 				bra CODE.EmitByte
 *--------------------------------------
-CODE.SYSCALL	lda #$A2				LDX #imm
-				jsr CODE.EmitByte
-				txa
-				jsr CODE.EmitByte
+CODE.SYSCALL	jsr CODE.LDXI
+				bcs .9
+				
 				lda #$20				JSR
 				jsr CODE.EmitByte
+				bcs .9
+
 				lda #A2osX.SYSCALL
 				jsr CODE.EmitByte
+				bcs .9
+
 				lda /A2osX.SYSCALL
 				bra CODE.EmitByte
+				
+.9				rts				
 *--------------------------------------
-CODE.FPUCALL	lda #$A2				LDX #imm
-				jsr CODE.EmitByte
-				txa
-				jsr CODE.EmitByte
+CODE.FPUCALL	jsr CODE.LDXI
+				bcs .9
+				
 				lda #$20				JSR
 				jsr CODE.EmitByte
+				bcs .9
+
 				lda #A2osX.FPUCALL
 				jsr CODE.EmitByte
+				bcs .9
+
 				lda /A2osX.FPUCALL
 				bra CODE.EmitByte
+
+.9				rts				
+*--------------------------------------
+CODE.DEBUG		>LDYA L.PCC.DEBUG
+*--------------------------------------
+CODE.EmitPCC	>STYA ZPLookupPtr
+
+				lda (ZPLookupPtr)
+				tax
+				dex
+				
+				ldy #1
+
+.1				lda (ZPLookupPtr),y
+				jsr CODE.EmitByte
+				bcs .9
+
+				iny
+				dex
+				bne .1
+
+.9				rts
 *--------------------------------------
 CODE.EmitByte	clc						if Pass 1...
 				bit bPass2
@@ -344,12 +218,12 @@ CODE.EmitByte	clc						if Pass 1...
 				phx
 				phy
 				tax
-				
+
 				>PUSHB.G CC.hOutFile
 				txa
 				>PUSHA
 				>SYSCALL fputc
-				
+
 				ply
 				plx
 
@@ -367,7 +241,7 @@ CODE.EmitDATA	clc
 				phx
 				phy
 				tax
-				
+
 				>PUSHB.G CC.hOutFile
 				txa
 				>PUSHA
@@ -385,9 +259,9 @@ CODE.EmitDATA	clc
 CODE.CSSelect	clc
 				bit bPass2
 				bpl .8
-				
+
 				>PUSHB.G CC.hOutFile
-				>PUSHWI 0
+				>PUSHWZ
 				lda ZPCCCode+1
 				sec
 				sbc #$20
@@ -404,8 +278,7 @@ CODE.DSSelect	clc
 				bpl .8
 
 				>PUSHB.G CC.hOutFile
-				>PUSHWI 0
-
+				>PUSHWZ
 				lda ZPCCConst
 				clc
 				adc PCC.FH+PCC.FH.IDATA
diff --git a/BIN/CC.S.CORE.txt b/BIN/CC.S.CORE.txt
index e7c5871b..72f1b44b 100644
--- a/BIN/CC.S.CORE.txt
+++ b/BIN/CC.S.CORE.txt
@@ -40,7 +40,7 @@ CC.CORE.Init	>SYSCALL SListNew
 *				clc
 .9				rts
 *--------------------------------------
-CC.CORE.Quit	jsr CS.RUN.FClose
+CC.CORE.Quit	jsr CC.FIO.FClose
 				bne CC.CORE.Quit
 
 				ldy ScopeIdx
@@ -78,9 +78,11 @@ CC.CORE.Quit	jsr CS.RUN.FClose
 
 				>LDA.G CC.hStack
 
-.7				beq CC.Quit.RTS
+.7				beq .8
+
 				>SYSCALL FreeMem
-CC.Quit.RTS		rts
+
+.8				rts
 *--------------------------------------
 CC.CompileFile	>SLEEP
 
@@ -98,7 +100,7 @@ CC.CompileFile	>SLEEP
 				cmp #3					Ctrl-C
 				beq .9
 
-.1				jsr CS.RUN.FGetS
+.1				jsr CC.FIO.FGetS
 				bcs .9
 
 				jsr CC.CompileLine
@@ -114,176 +116,143 @@ CC.CompileFile	>SLEEP
 .9				rts
 *--------------------------------------
 CC.CompileLine	jsr CC.GetCharNB
-				bcs CC.Quit.RTS
+				bcs .9
 
-CC.CompileLine.1
-				cmp #C.CR				empty line....
-				beq .2
+				cmp #C.CR				EOL....
+				beq .8
 
-				cmp #'/'
-				bne .3					comments ...
-
-				jmp CC.Comments
-
-.2				clc
-				rts
-
-.3				cmp #'#'				directive ?
-				bne .4
+				cmp #'#'				directive ?
+				bne .1
 
 				jmp CC.DIR
 
-.4				cmp #'}'				End of CPStmt ?
-				bne .10
+.1				cmp #'/'
+				bne .2					comments ...
+
+				jmp CC.Comments
+
+.2				cmp #'}'				End of CPStmt ?
+				bne .3
 
 				jsr CC.GetNextCharNB	Skip '}'
 
-				jmp CC.STMT.CPStmt.END
-*--------------------------------------
-.10				jsr CC.IsLetter
-				bcc .20
+				jsr CC.STMT.CPStmt.END
+				bcs .9
 
-* TODO: PREOPS ++ --.....
+				bra CC.CompileLine
 
-				bcs .29
+.3				cmp #';'				End of Stmt ?
+				bne .4
+
+				jsr CC.GetNextCharNB	Skip ';'
+
+				jsr CC.STMT.Stmt.END
+				bcs .9
+
+				bra CC.CompileLine
+
+.4				jsr CC.CompileStmt
+				bcs .9
+
+				bra CC.CompileLine
+
+.8				clc
+.9				rts
 *--------------------------------------
-.20				>LDYA L.CC.TYPEQUAL
+* keyword : for, while ....
+*--------------------------------------
+CC.CompileStmt	>LDYA L.CC.KW
 				jsr CC.LookupID
-				bcs .50
+				bcs .10					not an internal CC keyword....
 
-				jsr CC.TYPE.Decl
-				bcs .59
-
-				ldx #SYM.SC.STATIC		Y,A = Type/Qual
-				bit bLocalScope
-				bpl .25
-
-				bit #SYM.Q.FUNC			someone wants to add a local f() ?
-				sec
-				bne .29
-
-				ldx #SYM.SC.AUTO
-
-.25				jsr CC.SYM.New			Y,A=T/Q, add with undef value...
-				bcs .29					OOM or DUP
-
-				jsr CC.GetCharNB
-				bcs .69
-
-				cmp #';'
-				beq .28
-
-				cmp #'{'
-				bne .26
-
-				jsr CC.GetNextCharNB	skip '{'
-				bcs .69
-
-				jmp CC.SYM.StoreF
+				txa
+				>STA.G CC.CmdSave
+				jmp (J.CC.KW,x)
 *--------------------------------------
-
-* TODO: AOPS
-
+* Declaration : int var or int func()
 *--------------------------------------
-.26				cmp #'='
-				sec
-				bne .69
-*--------------------------------------
-				jsr CC.GetNextCharNB	skip '='
-				bcs .69
-
-				jsr CC.SYM.GetTypeInYA	expected T/Q
-				jsr CC.EXP.Eval
-				bcs .59
-
-				jsr CC.SYM.PopValue		Y,A = T/Q, Set value to this var
-.29				bcs .9
-
-.28				jsr CC.SYM.Store
-				bcs .9
-
-
-
-				bra .68
-*--------------------------------------
-.21				jsr CC.GetCharNB
-				bcs .99
-
-				cmp #';'
-				beq .8
-
-				cmp #'{'
-				bne .99
-
-				jsr CC.GetNextCharNB	skip '{'
-				bcs .99
-
-				jmp CC.CompileLine.1
-*--------------------------------------
-.50				>LDYA L.CC.KW
+.10				>LDYA L.CC.TYPEQUAL
 				jsr CC.LookupID
-				bcs .6					not an internal CC keyword....
+				bcs .6
 
-				jsr CC.KW.JMP
-.59				bcs .9
-
-				bra .8
+				jmp CC.DECL
 *--------------------------------------
-.6				jsr CC.SYM.Lookup		var= or func() ?
-.69				bcs .99
-
-				ldy #SYM.Q
-				lda (ZPLookupSymPtr),y
-				bit #SYM.Q.FUNC
-				beq .60
-
-				ldy #0					func( ... );
-				lda #0
-				jsr CC.F.CallNoRetV
-				bcs .9
-
-				jsr CC.SYM.LookupFree
-
-				bra .8
+* Statement : ++var, var=, func();
 *--------------------------------------
-.60				jsr CC.GetCharNB		var = ?
-				bcs .99
-
-				cmp #'='				TODO: all AOPS
-				bne .99
-
-				jsr CC.GetNextChar		Skip =
-				bcs .99
-
-				jsr CC.SYM.GetTypeInYA
-				jsr CC.EXP.Eval
-				bcs .9
-
-				jsr CC.SYM.PopValue
-				bcs .9
-
-				jsr CC.SYM.LookupFree
+.6				jmp CC.STMT
 *--------------------------------------
-.68				jsr CC.GetCharNB
-				cmp #';'
-				beq .8
-
 .99				lda #E.CSYN
 				sec
 .9				rts
 *--------------------------------------
-.8				jsr CC.GetNextCharNB	Skip ;
-				bcs .9
+CC.CORE.SetVar	stz ExpState
 
-				cmp #C.CR
-				beq .80
+				jsr CC.EXP.POSTOPS		var++, var[0]... ?
+				bcs .99
 
-				jmp CC.CompileLine.1
+				ldx StmtPreOp
+				jsr CC.EXP.PREOPS		apply ++var, ....
+				bcs .99
+
+				jsr CC.GetCharNB
+				bcs .90
+
+				jsr CC.IsEndArg			var++; or ++var; ?
+				bcc .8
+
+				jsr CC.LookupAOP		var=, var+= ... ?
+				bcs .90
+
+			cpx #0						TOTO : all AOPS
+			bne *
+
+				lda ExpState
+				bmi .90					VonStack
+
+				asl
+
+				bmi .7					AinPTR
+
+				asl
+				bmi .6					AonStack
+
+				jsr CC.EXP.GetAddr1
+				bcc .7
 
-.80				clc
 				rts
-*--------------------------------------
-CC.Comments		jsr CC.GetNextChar
+
+.6				>LDYA L.PCC.PopAddr1
+				jsr CODE.EmitPCC
+				bcs .99
+
+.7				ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				pha
+				lda (ZPLookupSymPtr)
+				tay
+				pla						get expected T/Q
+
+				jsr CC.EXP.Eval
+				bcs .99
+
+				jsr CC.EXP.GetSymSizeOfInAXC
+				tay
+				dey
+				jsr CODE.LDYI
+				bcs .99
+
+				>LDYA L.PCC.SetValue
+				jmp CODE.EmitPCC
+
+.8				clc
+				rts
+
+.90				lda #E.CSYN
+				sec
+
+.99				rts
+**--------------------------------------
+CC.Comments		jsr CC.GetNextChar		TODO : /* ... */
 				cmp #'/'
 				bne .90
 
@@ -304,10 +273,32 @@ CC.SkipLine		jsr CC.GetNextChar
 .9				rts
 *--------------------------------------
 CC.LookupID		>STYA ZPLookupPtr
-
 				jsr CC.GetIDLen
 				bra CC.Lookup
 
+CC.LookupAOP	>LDYA L.CC.AOPS
+				>STYA ZPLookupPtr
+
+				ldy #$ff
+
+.1				iny
+				lda (ZPLineBufPtr),y
+				sec
+				beq .9
+
+				jsr CC.IsOPChar
+				bcs .9
+
+				cmp #'='
+				bne .1
+
+				iny
+
+.8				tya
+				bra CC.Lookup
+
+.9				rts
+
 CC.LookupOP		>STYA ZPLookupPtr
 				jsr CC.GetOPLen
 
@@ -342,7 +333,7 @@ CC.Lookup		phy						Y = len
 				lda ZPLookupPtr+1
 				adc #0
 				clc						Y,A = F() def, X = F() index
-.8				rts
+				rts
 
 .4				inx
 				inx
@@ -350,32 +341,11 @@ CC.Lookup		phy						Y = len
 				jsr CC.ZPLookupPtrAddAp1
 				bra .1
 
-.9				pla
+.9				ldx #$FF
+				pla
 				sec
 				rts
 *--------------------------------------
-CC.SListLookup	>PUSHA					hSList
-				>PUSHA					...for SListGetData
-				>PUSHW ZPLineBufPtr
-				>SYSCALL SListLookup
-				bcs .99
-
-				>PUSHA					KeyID.HI
-				tya
-				>PUSHA					KeyID.LO
-
-				jsr CC.SkipX
-
-				>PUSHWZ					allocate
-				>PUSHWI 65535			all
-				>PUSHWZ					From Start
-				>SYSCALL SListGetData
-
-.9				rts						Y,A = SymSize, X = hSymBuf
-
-.99				inc pStack				discard extra hSList
-				rts
-*--------------------------------------
 CC.ZPLookupPtrAddAp1
 				sec
 				adc ZPLookupPtr
@@ -400,6 +370,28 @@ CC.GetDefine	>LDA.G CC.hDefines
 
 .9				rts
 *--------------------------------------
+CC.SListLookup	>PUSHA					hSList
+				>PUSHA					...for SListGetData
+				>PUSHW ZPLineBufPtr
+				>SYSCALL SListLookup
+				bcs .99
+
+				>PUSHA					KeyID.HI
+				tya
+				>PUSHA					KeyID.LO
+
+				jsr CC.SkipX
+
+				>PUSHWZ					allocate
+				>PUSHWI 65535			all
+				>PUSHWZ					From Start
+				>SYSCALL SListGetData
+
+.9				rts						Y,A = SymSize, X = hSymBuf
+
+.99				inc pStack				discard extra hSList
+				rts
+*--------------------------------------
 * CT Stack
 *--------------------------------------
 CC.PushTQ		ldy #SYM.Q
@@ -455,13 +447,19 @@ CC.PopYA		ldy CStackPtr
 				sec
 				rts
 *--------------------------------------
-CC.Pop			ldy CStackPtr
+CC.Pop			jsr CC.Get
+
+				inc CStackPtr
+
+*				clc
+
+.9				rts
+*--------------------------------------
+CC.Get			ldy CStackPtr
 				beq .9
 
 				lda (ZPCCStack),y
 
-				inc CStackPtr
-
 				clc
 				rts
 
@@ -521,6 +519,32 @@ CC.GetNextCharNB
 CC.GetNextCharNB.RTS
 				rts
 *--------------------------------------
+CC.GetCharNBNL	jsr CC.GetChar
+				bcs CC.GetNextCharNB.RTS
+
+				jsr CC.CheckCharNB
+				bcs CC.GetNextCharNBNL
+
+				cmp #C.CR
+				clc
+				bne CC.GetNextCharNB.RTS
+
+				jsr CC.FIO.FGetS
+				bcs CC.GetNextCharNB.RTS
+*--------------------------------------
+CC.GetNextCharNBNL
+				jsr CC.GetNextCharNB
+				bcs CC.GetNextCharNB.RTS
+
+				cmp #C.CR
+				clc
+				bne .9
+
+				jsr CC.FIO.FGetS
+				bcc CC.GetNextCharNBNL
+
+.9				rts
+*--------------------------------------
 CC.CheckSpace	jsr CC.GetChar
 				bcs .90
 
@@ -578,10 +602,10 @@ CC.GetChar		lda (ZPLineBufPtr)
 CC.IsEndArg		cmp #']'
 				beq .8
 
-				cmp #';'
+				cmp #','
 				beq .8
 
-				cmp #','
+				cmp #';'
 				beq .8
 
 				cmp #')'
diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt
index 8629d30e..9a407789 100644
--- a/BIN/CC.S.DECL.txt
+++ b/BIN/CC.S.DECL.txt
@@ -1,68 +1,69 @@
 NEW
   AUTO 3,1
 *--------------------------------------
-CC.DECL			jsr CC.IsLetter
-				bcs .80
-				
-.10				>LDYA L.CC.SCSPEC
-				jsr CC.LookupID
-				bcs .20
-
-* TODO: typedef ....
-
-				bcs .90
-
-.20				>LDYA L.CC.TYPEQUAL
-				jsr CC.LookupID
-				bcs .80
-
-				jsr CC.TYPE.Decl
-				bcs .99
+* X = type qual
+*--------------------------------------
+CC.DECL			jsr CC.TYPE.Decl
+				bcs .9
 
 				ldx #SYM.SC.STATIC		Y,A = Type/Qual
 				bit bLocalScope
-				bpl .21
+				bpl .25
 
 				bit #SYM.Q.FUNC			someone wants to add a local f() ?
-				bne .90
+				sec
+				bne .29
 
 				ldx #SYM.SC.AUTO
 
-.21				jsr CC.SYM.New			Y,A=T/Q, add with undef value...
+.25				jsr CC.SYM.New			Y,A=T/Q, add with undef value...
+				bcs .29					OOM or DUP
+
+.22				jsr CC.GetCharNB
 				bcs .99
 
-				jsr CC.SYM.Store
-				bcs .99				
+				cmp #';'
+				beq .28
 
-* TODO: AOPS
+				cmp #'{'
+				bne .26
+
+				jsr CC.GetNextCharNB	skip '{'
+				bcs .99
+
+				jmp CC.SYM.StoreF
+*--------------------------------------
+* Initializer
+*--------------------------------------
+.26				cmp #'='				type var = value ?
+				bne .99
 
-				cmp #'='
-				bne .90
-				
 				jsr CC.GetNextCharNB	skip '='
-				bcs .99			
-				
+				bcs .99
+
 				jsr CC.SYM.GetTypeInYA	expected T/Q
 				jsr CC.EXP.Eval
-				bcs .99
+				bcs .9
 
-				jsr CC.SYM.PopValue		Y,A = T/Q, Set value to this var
-.29				bcs .99
+				jsr CC.SYM.GetAddr1
+				bcs .9
+	
+				jsr CC.SYM.SetValue		Y,A = T/Q, Set value to this var
+.29				bcs .9
 
+.28				jsr CC.SYM.Store
+				bcs .9
+
+				jsr CC.GetCharNB
+				cmp #';'
+				bne .99
 				
-
-				
-				clv
 				clc
 				rts
-
-.80				bit #$60
-				clc
-				rts
-
-.90				lda #E.CSYN
+*--------------------------------------
+.99				lda #E.CSYN
 				sec
-.99				rts
+.9				rts
 *--------------------------------------
 CC.SCSPEC.AUTO
 CC.SCSPEC.REGISTER
@@ -71,9 +72,9 @@ CC.SCSPEC.EXTERN
 CC.SCSPEC.TYPEDEF
 
 
-.99				lda #E.CSYN
+.98				lda #E.CSYN
 				sec
-.9				rts
+.99				rts
 *--------------------------------------
 MAN
 SAVE usr/src/bin/cc.s.decl
diff --git a/BIN/CC.S.DIR.txt b/BIN/CC.S.DIR.txt
index a10cc225..c1c5acd9 100644
--- a/BIN/CC.S.DIR.txt
+++ b/BIN/CC.S.DIR.txt
@@ -134,7 +134,7 @@ CC.DIR.INCLUDE	lda #0					>STZ.G PathBuf
 				rts
 
 .5				>LDYA pData
-				jmp CS.RUN.FOpen
+				jmp CC.FIO.FOpen
 *--------------------------------------
 MAN
 SAVE usr/src/bin/cc.s.dir
diff --git a/BIN/CC.S.EXP.txt b/BIN/CC.S.EXP.txt
index 585abebd..e8a52361 100644
--- a/BIN/CC.S.EXP.txt
+++ b/BIN/CC.S.EXP.txt
@@ -10,7 +10,12 @@ NEW
 CC.EXP.Eval00	lda #0
 				tay
 
-CC.EXP.Eval		ldx ZPPtr2				local : expected T/Q
+CC.EXP.Eval		ldx ZPPtr1				local : returned T/Q
+				phx
+				ldx ZPPtr1+1
+				phx
+
+				ldx ZPPtr2				local : expected T/Q
 				phx
 				ldx ZPPtr2+1
 				phx
@@ -22,7 +27,11 @@ CC.EXP.Eval		ldx ZPPtr2				local : expected T/Q
 
 				>STYA ZPPtr2
 
+				stz ZPPtr1
+				stz ZPPtr1+1
+
 				lda #$ff				no previous OP
+				sta ZPPtr3+1			no PREOPS
 				pha
 *--------------------------------------
 .10				jsr CC.GetCharNB
@@ -60,7 +69,11 @@ CC.EXP.Eval		ldx ZPPtr2				local : expected T/Q
 
 .19				jmp CC.EXP.Eval.ESYN
 *--------------------------------------
-.20				jsr CC.ExpPreops
+.20				>LDYA L.CC.PREOPS
+				jsr CC.LookupOP
+				stx ZPPtr3+1
+
+				jsr CC.GetCharNB
 				bcs .29
 
 				jsr CC.IsLetter			define, f() or Var ?
@@ -77,10 +90,7 @@ CC.EXP.Eval		ldx ZPPtr2				local : expected T/Q
 				and #SYM.Q.FUNC
 				bne .21
 
-				jsr CC.EXP.CheckGetSymType
-				bcs .29
-
-				jsr CC.EXP.Get			Check T/Q & Get value on stack
+				jsr CC.EXP.GetVar		Check T/Q & Get value on stack
 				bcs .29
 
 				jsr CC.SYM.LookupFree
@@ -116,7 +126,7 @@ CC.EXP.Eval		ldx ZPPtr2				local : expected T/Q
 .24				cmp #'"'				String literal
 				bne CC.EXP.Eval.ESYN
 
-				jsr CC.AddContCharP
+				jsr CC.EXP.AddConstCharP
 .29				bcs CC.EXP.Eval.Err
 *--------------------------------------
 .30				jsr CC.GetCharNB
@@ -157,6 +167,7 @@ CC.EXP.Eval.End	plx						any OP on stack ?
 				bmi CC.EXP.Eval.Exit
 
 				>LDYA ZPPtr2			Var Type
+
 				jsr CC.EXP.BOPS
 				bcc CC.EXP.Eval.End
 
@@ -173,7 +184,13 @@ CC.EXP.Eval.Err
 				bra CC.EXP.Eval.ExitErr
 *--------------------------------------
 CC.EXP.Eval.Exit
+				lda ZPPtr1+1
+				ldy ZPPtr1
+				bne .1
+
 				>LDYA ZPPtr2			Type/Qual
+
+.1				and #$FC				ignore SYM.Q.FUNC+SYM.Q.FASTCALL
 				clc
 
 CC.EXP.Eval.ExitErr
@@ -187,43 +204,17 @@ CC.EXP.Eval.ExitErr
 				plx
 				stx ZPPtr2
 
-				rts
-*--------------------------------------
-CC.EXP.CheckGetSymType
-				lda ZPPtr2
-				ora ZPPtr2+1
-				bne .1
+				plx
+				stx ZPPtr1+1
+				plx
+				stx ZPPtr1
 
-				lda (ZPLookupSymPtr)
-				sta ZPPtr2
-
-				ldy #SYM.Q
-				lda (ZPLookupSymPtr),y
-				sta ZPPtr2+1
-
-				clc
-				rts
-
-.1				lda ZPPtr2
-				cmp (ZPLookupSymPtr)	#SYM.T
-				bne .9
-
-				lda ZPPtr2+1
-				ldy #SYM.Q
-				cmp (ZPLookupSymPtr),y
-				bne .9
-
-				clc
-				rts
-
-.9				lda #E.TMISMATCH
-				sec
 				rts
 *--------------------------------------
 CC.EXP.Cast		jsr CC.TYPE.Decl
 				bcs .99
 
-				>STYA ZPPtr2
+				>STYA ZPPtr1
 
 				jsr CC.GetCharNB
 				bcs .9
@@ -240,20 +231,15 @@ CC.EXP.Cast		jsr CC.TYPE.Decl
 				sec
 .99				rts
 *--------------------------------------
-CC.ExpPreops	>LDYA L.CC.PREOPS
-
-				jsr CC.LookupOP
-				bcc .8
-
-				ldx #$ff
-
-.8				stx ZPPtr3+1
-
-				jmp CC.GetCharNB
-*--------------------------------------
 * Y,A = Type/Qual, X = OP
 *--------------------------------------
-CC.EXP.BOPS		cpy #SYM.T.UINT
+CC.EXP.BOPS		bit #SYM.Q.PPPOINTER
+				beq .10
+
+				ldy #SYM.T.UINT
+				bra .3
+				
+.10				cpy #SYM.T.UINT
 				bcs .3
 
 				cpy #SYM.T.UCHAR
@@ -261,26 +247,16 @@ CC.EXP.BOPS		cpy #SYM.T.UINT
 
 				cpy #SYM.T.SCHAR
 				beq .2
-
+				
 				lda #E.TMISMATCH
 				sec
 				rts
 
-.1				lda J.CC.bBOPS,x
-				ldy J.CC.bBOPS+1,x
-				tax
-				lda #$20				JSR
-				jsr CODE.TOABSYX
-				clc
-				rts
+.1				>LDYA L.PCC.bBOPS,x
+				jmp CODE.EmitPCC
 
-.2				lda J.CC.cBOPS,x
-				ldy J.CC.cBOPS+1,x
-				tax
-				lda #$20				JSR
-				jsr CODE.TOABSYX
-				clc
-				rts
+.2				>LDYA L.PCC.bBOPS,x
+				jmp CODE.EmitPCC
 
 .3				txa
 				clc
@@ -291,9 +267,17 @@ CC.EXP.BOPS		cpy #SYM.T.UINT
 				clc
 				rts
 *--------------------------------------
-CC.AddContCharP	jsr CODE.PushConstP
+CC.EXP.AddConstCharP
+				lda ZPCCConst
+				ldx ZPCCConst+1
+
+				jsr CODE.LDAXI
 				bcs .99
-				
+
+				>LDYA L.PCC.PushIAddr
+				jsr CODE.EmitPCC
+				bcs .99
+
 				jsr CODE.DSSelect
 				bcs .99
 
@@ -312,14 +296,14 @@ CC.AddContCharP	jsr CODE.PushConstP
 
 				jsr CODE.EmitData
 				bcs .99
-				
+
 				iny
 				bra .1
 
 .2				lda #0
 				jsr CODE.EmitData
 				bcs .99
-				
+
 				jsr CODE.CSSelect
 				bcs .99
 
@@ -332,6 +316,21 @@ CC.AddContCharP	jsr CODE.PushConstP
 				sec
 .99				rts
 *--------------------------------------
+CC.EXP.IntConst	>PUSHW ZPLineBufPtr
+				>PUSHWI ZPLineBufPtr
+				>PUSHBI 10
+				>SYSCALL StrToUL
+
+				>PULLA
+				tay
+
+				>PULLA
+
+				inc pStack
+				inc pStack
+
+				rts
+*--------------------------------------
 CC.EXP.GetNum	cpy #SYM.T.FLOAT
 				bcc .1
 
@@ -394,35 +393,43 @@ CC.EXP.GetNum	cpy #SYM.T.FLOAT
 * ZPPtr2 = expected T/Q
 * ZPPtr3+1 = PREOPS
 *--------------------------------------
-CC.EXP.Get		>LDYA L.CC.AOPS
-				jsr CC.LookupOP
-				bcs .20
+CC.EXP.GetVar	stz ExpState
 
-				>LDYA ZPPtr2			get expected T/Q
-				jsr CC.EXP.Eval
+				jsr CC.EXP.POSTOPS		var++, var[0]... ?
 				bcs .99
 
-				jsr CC.SYM.SetValue
+				ldx ZPPtr3+1			preop &, * ...
+				jsr CC.EXP.PREOPS
 				bcs .99
 
-				clc
-				rts
-*--------------------------------------
-.20				>LDYA L.CC.POSTOPS
-				jsr CC.LookupOP
-				bcs .1
+				lda ExpState
+				bmi .8					VonStack
 
-				cpx #4					'['
-				bne *
+				asl
 
-				jmp CC.EXP.Array
-*--------------------------------------
-.1				ldx ZPPtr3+1			preop
-				bpl .8
+				bmi .7					AinPTR
 
-				lda ZPPtr2				target T
+				asl
+				bmi .6					AonStack
+
+				jsr CC.EXP.GetAddr2
+				bcs .99
+
+				bra .7
+
+.6				>LDYA L.PCC.PopAddr2
+				jsr CODE.EmitPCC
+				bcs .99
+
+.7				jsr CC.EXP.PushValue
+				bcs .99
+				
+.8				lda ZPPtr2				target T
 				beq .3
 
+				cmp #SYM.T.VOID
+				beq .2
+
 				lda (ZPLookupSymPtr)	SYM.T
 				cmp #SYM.T.VOID
 				beq .2
@@ -435,190 +442,503 @@ CC.EXP.Get		>LDYA L.CC.AOPS
 				ldy #SYM.Q
 				cmp (ZPLookupSymPtr),y
 				bne .9
+				
+				clc
+				rts
 
 .3				lda (ZPLookupSymPtr)	SYM.T
 				sta ZPPtr2				T
-				pha
+
 				ldy #SYM.Q
 				lda (ZPLookupSymPtr),y
 				sta ZPPtr2+1			Q
-				ply						Y,A = T/Q
-
-				jsr CC.SYM.PushValue
 
 				clc
-.99				rts
+				rts
 
 .9				lda #E.TMISMATCH
 				sec
-				rts
-
-.8				jmp (J.CC.PREOPS,x)
+.99				rts
 *--------------------------------------
-CC.EXP.Array	ldy #SYM.Q
+* POSTOPS
+*--------------------------------------
+CC.EXP.POSTOPS	>LDYA L.CC.POSTOPS
+				jsr CC.LookupOP
+				bcs .8
+
+				jmp (J.CC.POSTOPS,x)
+
+.8				clc
+				rts
+*--------------------------------------
+CC.EXP.postinc	lda ExpState
+				bit #ExpState.AinPTR
+				bne .1
+
+				jsr CC.EXP.GetAddr2
+				bcs .99
+
+				lda #ExpState.AinPTR
+				tsb ExpState
+
+.1				ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				and #SYM.Q.AAARRAY+SYM.Q.PPPOINTER
+				bne .8
+
+				lda (ZPLookupSymPtr)	#SYM.T
+				cmp #SYM.T.FLOAT
+				bcs .98
+				
+				tay
+
+				lda CC.TYPESIZE-1,y
+				lsr
+				bcc .2
+				
+				>LDYA L.PCC.Inc1
+				jmp CODE.EmitPCC
+
+.2				lsr
+				bcc .4
+				
+				>LDYA L.PCC.Inc2
+				jmp CODE.EmitPCC
+				
+.4				>LDYA L.PCC.Inc4	
+				jmp CODE.EmitPCC
+
+
+.8				
+
+.98				lda #E.ESYN
+				sec
+.99				rts
+*--------------------------------------
+CC.EXP.postdec	lda ExpState
+				bit #ExpState.AinPTR
+				bne .1
+
+				jsr CC.EXP.GetAddr2
+				bcs .99
+
+				lda #ExpState.AinPTR
+				tsb ExpState
+
+.1				ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				and #SYM.Q.AAARRAY+SYM.Q.PPPOINTER
+				bne .8
+
+				lda (ZPLookupSymPtr)	#SYM.T
+				cmp #SYM.T.FLOAT
+				bcs .98
+				
+				tay
+
+				lda CC.TYPESIZE-1,y
+				lsr
+				bcc .2
+				
+				>LDYA L.PCC.Dec1
+				jmp CODE.EmitPCC
+
+.2				lsr
+				bcc .4
+				
+				>LDYA L.PCC.Dec2
+				jmp CODE.EmitPCC
+				
+.4				>LDYA L.PCC.Dec4	
+				jmp CODE.EmitPCC
+
+
+.8				
+
+.98				lda #E.ESYN
+				sec
+.99				rts
+*--------------------------------------
+CC.EXP.array	ldy #SYM.Q
 				lda (ZPLookupSymPtr),y
 				and #SYM.Q.AAARRAY
-				beq .9
+				beq .39
 
-				jsr CC.EXP.PushDeref	push base address
+				ldy #SYM.Def
+				lda (ZPLookupSymPtr),y
+				iny
+				ora (ZPLookupSymPtr),y
+				beq .1
 
+				jsr CC.EXP.PushAddr		array[int]...
+				bcc .2
+				
+				rts
+				
+.1				jsr CC.EXP.GetAddr2		array[]...it is a *
+				bcs .9
+				
+				>LDYA L.PCC.PushDeref2
+				jsr CODE.EmitPCC
+				bcs .9
+				
+.2				jsr CC.EXP.array.getIdx	...int16 on stack...
+				bcs .9
+
+				jsr CC.EXP.GetSymSizeOfInAXC
+				jsr CODE.PUSHAXI		...sizeof on stack...
+				bcs .9
+
+				ldx #FPU.iMUL
+				jsr CODE.FPUCALL		...sizeof*int16...
+				bcs .9
+
+				ldx #FPU.iAdd
+				jsr CODE.FPUCALL		...add to base address
+				bcs .9
+
+.3				jsr CC.GetNextCharNB	skip ']'
+				bcs .98
+				
+				cmp #'['
+				bne .8
+				
+				jsr CC.GetNextCharNB	skip '['
+				bcs .98
+				
+				ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				and #SYM.Q.AAARRAY
+.39				beq .99
+				
+				jsr CC.EXP.array.getIdx	...int16 on stack...
+				bcs .9
+				
+				ldy #SYM.Def+3
+				lda (ZPLookupSymPtr),y
+				tax
+				dey
+				lda (ZPLookupSymPtr),y
+				jsr CODE.PUSHAXI		[][SIZE] on stack
+				
+				ldx #FPU.iMUL
+				jsr CODE.FPUCALL		[][SIZE] * int16 on stack
+				
+				jsr CC.EXP.GetSymSizeOfInAXC
+				jsr CODE.PUSHAXI		...sizeof on stack...
+				bcs .9
+
+				ldx #FPU.iMUL
+				jsr CODE.FPUCALL		...sizeof*int16...
+				
+				ldx #FPU.iAdd
+				jsr CODE.FPUCALL		...add to base address
+				bcs .9
+				
+				jsr CC.GetNextCharNB	skip ']'
+				bcs .98
+
+
+* TODO : [][][]
+				
+.8				lda #ExpState.AonStack
+				sta ExpState
+
+				clc
+				rts
+
+.98				lda #E.ESYN
+				sec
+				rts
+
+.99				lda #E.TMISMATCH
+				sec
+.9				rts
+*--------------------------------------
+CC.EXP.array.getIdx
 				ldy #SYM.T.SINT
 				lda #0
 
 				jsr CC.EXP.Eval
-				bcs .99					int16 on stack
+				bcs .9
 
 				jsr CC.GetCharNB
-				bcs .9
+				bcs .98
 
 				cmp #']'
-				bne .9
-
-				jsr CC.GetNextCharNB	skip ']'
-				bcs .9
-
-				jsr CC.SYM.GetSymSizeOfInAXC
-
-				pha
-				txa
-				jsr CODE.PUSHI
-				pla
-				jsr CODE.PUSHI			sizeof on stack
-
-				ldx #FPU.iMUL
-				jsr CODE.FPUCALL		sizeof*int16
-
-				ldx #FPU.iAdd
-				jsr CODE.FPUCALL		add to base address
-
-				lda (ZPLookupSymPtr)		SYM.T
-				pha
+				bne .98
 
 				ldy #SYM.Q
 				lda (ZPLookupSymPtr),y
 				sec
 				sbc #SYM.Q.ARRAY
-				ply
-
-				jsr CC.SYM.GetYASizeOfInAXC
-				jsr CODE.PushFromPtr	A = byte count
-
+				sta (ZPLookupSymPtr),y
+				
 				clc
 				rts
 
-.9				lda #E.ESYN
+.98				lda #E.ESYN
 				sec
-.99				rts
-*--------------------------------------
-CC.EXP.PushAddr	ldy #SYM.Addr+1
-				lda (ZPLookupSymPtr),y
-				bne .7
-* LOCAL
-				jsr CODE.PUSHpBASEp1
-
-				ldy #SYM.Addr
-				lda (ZPLookupSymPtr),y
-				eor #$FF
-				inc
-				jsr CODE.LDAI
-				jsr CODE.PUSHpBASEpA
-
-				clc
-				rts
-* DATASEG
-.7				jsr CODE.PUSHI
-
-				ldy #SYM.Addr
-				lda (ZPLookupSymPtr),y
-				jsr CODE.PUSHI
-
-				clc
-				rts
-*--------------------------------------
-CC.EXP.PushDeref
-				ldy #SYM.Addr+1
-				lda (ZPLookupSymPtr),y
-				bne .7
-* LOCAL				
-				jsr CODE.SETpBASEp1
-
-				ldy #SYM.Addr
-				lda (ZPLookupSymPtr),y
-				eor #$FF
-				inc
-				jsr CODE.LDAI
-				jsr CODE.SETpBASEpA
-
-				jsr CODE.Deref
-				
-				clc
-				rts
-* DATASEG
-.7				jsr CODE.LDAI
-				
-				lda #$85				STA zp
-				jsr CODE.EmitByte
-				lda #ZS.RT.Ptr1+1
-				jsr CODE.EmitByte
-
-				ldy #SYM.Addr
-				lda (ZPLookupSymPtr),y
-				jsr CODE.LDAI
-
-				lda #$85				STA zp
-				jsr CODE.EmitByte
-				lda #ZS.RT.Ptr1+1
-				jsr CODE.EmitByte
-
-				jsr CODE.Deref
-
-				clc
 .9				rts
 *--------------------------------------
-CC.EXP.GetRef	ldy #SYM.Addr+1
-				lda (ZPLookupSymPtr),y
-				jsr CODE.PUSHI
+CC.EXP.Struct
+*--------------------------------------
+CC.EXP.pStruct	lda #E.ESYN
+				sec
+				rts
+*--------------------------------------
+* PREOPS
+*--------------------------------------
+CC.EXP.PREOPS	bmi .8
 
-				ldy #SYM.Addr
-				lda (ZPLookupSymPtr),y
-				jsr CODE.PUSHI
+				jmp (J.CC.PREOPS,x)
 
-				lda (ZPLookupSymPtr)		SYM.T
-
-				sta ZPPtr2				T
-
-				ldy #SYM.Q
+.8				clc
+				rts
+*--------------------------------------
+CC.EXP.Ref		ldy #SYM.Q
 				lda (ZPLookupSymPtr),y
 				clc
 				adc #SYM.Q.POINTER
 				bcs .9					more than ***
 
-				sta ZPPtr2+1			Q
+				sta (ZPLookupSymPtr),y
+
+				bit ExpState
+				bvs .8
+
+				jsr CC.EXP.PushAddr
+				bcs .99
+
+.8				lda #ExpState.VonStack
+				sta ExpState
+
+*				clc						Addr on stack
+				rts
+
+.9				lda #E.TMISMATCH
+*				sec
+.99				rts
+*--------------------------------------
+CC.EXP.Deref	ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				bit #SYM.Q.PPPOINTER
+				beq .9
+
+				sec
+				sbc #SYM.Q.POINTER
+				sta (ZPLookupSymPtr),y
+
+				jsr CC.EXP.GetAddr2
+				bcs .99
+
+				>LDYA L.PCC.Deref2
+				jsr CODE.EmitPCC
+				bcs .99
+				
+				lda #ExpState.AinPTR
+				sta ExpState
+
 *				clc
 				rts
 
 .9				lda #E.TMISMATCH
 				sec
-				rts
+.99				rts
 *--------------------------------------
-CC.EXP.GetDeref
+CC.EXP.Abs
+
+				clc
+
+.99				rts
+*--------------------------------------
+CC.EXP.negate
+
+				clc
+
+.99				rts
+*--------------------------------------
+CC.EXP.lnot
+
+				clc
+
+.99				rts
+*--------------------------------------
+CC.EXP.bnot
+
+				clc
+
+.99				rts
+*--------------------------------------
+CC.EXP.preinc
+
+				clc
+
+.99				rts
+*--------------------------------------
+CC.EXP.predec
+
+				clc
+
+.99				rts
+*--------------------------------------
+CC.EXP.PushAddr	ldy #SYM.SC
+				lda (ZPLookupSymPtr),y
+				beq .1					SYM.SC.STATIC
+* LOCAL
+
+				>LDYA L.PCC.PushLAddrH
+				jsr CODE.EmitPCC
+				bcs .9
+
+				ldy #SYM.Addr
+				lda (ZPLookupSymPtr),y
+				eor #$FF
+				inc
+				jsr CODE.LDAI
+				bcs .9
+
+				>LDYA L.PCC.PushLAddrL
+				jmp CODE.EmitPCC
+
+* GLOBAL
+
+.1				ldy #SYM.Addr+1
+				lda (ZPLookupSymPtr),y
+				tax
+
+				dey
+				lda (ZPLookupSymPtr),y
+
+				jsr CODE.LDAXI
+				bcs .9
+
+				ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				and #SYM.Q.CONST
+				beq .2
+
+				>LDYA L.PCC.PushIAddr
+				jmp CODE.EmitPCC
+
+.2				>LDYA L.PCC.PushUAddr
+				jmp CODE.EmitPCC
+				
+.9				rts
+*--------------------------------------
+CC.EXP.GetAddr1	ldy #SYM.SC
+				lda (ZPLookupSymPtr),y
+				beq .1					SYM.SC.STATIC
+* LOCAL
+				ldy #SYM.Addr
+				lda (ZPLookupSymPtr),y
+				eor #$FF
+				inc
+				jsr CODE.LDAI
+				bcs .9
+
+				>LDYA L.PCC.GetLAddr1
+				jmp CODE.EmitPCC
+* GLOBAL
+
+.1				ldy #SYM.Addr+1
+				lda (ZPLookupSymPtr),y
+				tax
+
+				dey
+				lda (ZPLookupSymPtr),y
+
+				jsr CODE.LDAXI
+				bcs .9
+
+				ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				and #SYM.Q.CONST
+				beq .2
+
+				>LDYA L.PCC.GetIAddr1
+				jmp CODE.EmitPCC
+
+.2				>LDYA L.PCC.GetUAddr1
+				jmp CODE.EmitPCC
+
+.9				rts
+*--------------------------------------
+CC.EXP.GetAddr2	ldy #SYM.SC
+				lda (ZPLookupSymPtr),y
+				beq .1					SYM.SC.STATIC
+* LOCAL
+				ldy #SYM.Addr
+				lda (ZPLookupSymPtr),y
+				eor #$FF
+				inc
+				jsr CODE.LDAI
+				bcs .9
+
+				>LDYA L.PCC.GetLAddr2
+				jmp CODE.EmitPCC
+* GLOBAL
+
+.1				ldy #SYM.Addr+1
+				lda (ZPLookupSymPtr),y
+				tax
+
+				dey
+				lda (ZPLookupSymPtr),y
+
+				jsr CODE.LDAXI
+				bcs .9
+
+				ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				and #SYM.Q.CONST
+				beq .2
+
+				>LDYA L.PCC.GetIAddr2
+				jmp CODE.EmitPCC
+
+.2				>LDYA L.PCC.GetUAddr2
+				jmp CODE.EmitPCC
+
+.9				rts
+*--------------------------------------
+CC.EXP.PushValue
+				jsr CC.EXP.GetSymSizeOfInAXC
+				tay
+				dey
+				jsr CODE.LDYI
+				bcs .99
+
+				>LDYA L.PCC.PushValue
+				jmp CODE.EmitPCC
+				
+.99				rts
+*--------------------------------------
+* out : A,X,C = size
+*--------------------------------------
+CC.EXP.GetSymSizeOfInAXC
+				ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				pha
+				lda (ZPLookupSymPtr)	SYM.T
+				tay
+				pla
+
+CC.EXP.GetYASizeOfInAXC
+
+				bit #SYM.Q.PPPOINTER+SYM.Q.AAARRAY
+				bne .1
+
+				lda CC.TYPESIZE-1,y
+				ldx #0
 
 				clc
 				rts
-*--------------------------------------
-CC.EXP.IntConst	>PUSHW ZPLineBufPtr
-				>PUSHWI ZPLineBufPtr
-				>PUSHBI 10
-				>SYSCALL StrToUL
 
-				>PULLA
-				tay
-
-				>PULLA
-
-				inc pStack
-				inc pStack
+.1				lda #2					pointer
+				ldx #0
 
+				sec						+1 for hMem Storage
 				rts
 *--------------------------------------
 MAN
diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt
index ac1afcd6..f3519348 100644
--- a/BIN/CC.S.F.txt
+++ b/BIN/CC.S.F.txt
@@ -7,7 +7,7 @@ CC.F.Decl		stz LocalPtr
 				bcs .99
 
 				ldx #$80				CPStmt.fDef	state
-				jsr CC.STMT.CPStmt
+				jsr CC.STMT.CPStmt.NEW
 				bcs .99
 
 				jsr CC.SYM.NewScope
@@ -24,7 +24,7 @@ CC.F.Decl		stz LocalPtr
 
 				>STYA ZPPtr2			Save T/Q
 
-				jsr CC.F.AddTQ
+				jsr CC.SYM.AddWord
 
 				jsr CC.GetCharNB
 				bcs .9
@@ -53,9 +53,9 @@ CC.F.Decl		stz LocalPtr
 *--------------------------------------
 .6				ldy #0
 				lda #0
-				jsr CC.F.AddTQ
+				jsr CC.SYM.AddWord		definition End
 
-				jsr CC.GetNextCharNB	Skip )
+				jsr CC.GetNextCharNBNL	Skip )
 				bcs .9
 
 				cmp #';'
@@ -65,8 +65,8 @@ CC.F.Decl		stz LocalPtr
 
 				lda CStackPtr
 				clc
-				adc #6
-				sta CStackPtr			discard this CPStmt
+				adc #8
+				sta CStackPtr			discard this CPStmt + T/Q
 
 				stz LocalPtr			reset for DEBUG Message
 
@@ -76,15 +76,25 @@ CC.F.Decl		stz LocalPtr
 .7				cmp #'{'
 				bne .9
 
-				>LDYA ZPCCCode			f() Code starts HERE
+				bit bInitCode
+				bmi .8
+
+				dec bInitCode
+
+				lda #$60				RTS
+				jsr CODE.EmitByte		Close INIT code
+				bcs .99
+
+
+.8				>LDYA ZPCCCode			f() Code starts HERE
 				jsr CC.SYM.SetAddrYA
 
 				lda LocalPtr
 				jsr CODE.LDAI			A = f() ARGS size
-				jsr CODE.Enter
+				bcs .99
 
-				clc						Store f() Declaration / Start Definition
-				rts
+				>LDYA L.PCC.ENTER
+				jmp CODE.EmitPCC		Store f() Declaration / Start Definition
 *--------------------------------------
 CC.F.DeclGetTQ	lda (ZPLineBufPtr)
 				cmp #'.'
@@ -130,7 +140,7 @@ CC.F.DeclGetTQ	lda (ZPLineBufPtr)
 *--------------------------------------
 CC.F.NewArg		>LDYA.G CC.SymID
 				>STYA.G CC.SymIDSave
-				
+
 				>LEA.G CC.ArgBuf
 				>STYA ZPSymBufPtr
 
@@ -145,49 +155,33 @@ CC.F.NewArg		>LDYA.G CC.SymID
 				>LDA.G CC.hSymBuf
 				>SYSCALL GetMemPtr
 				>STYA ZPSymBufPtr
-				
+
 				>LDYA.G CC.SymIDSave
 				>STYA.G CC.SymID
-				
+
 .9				rts
 *--------------------------------------
-CC.F.Def.END	jsr CODE.Leave
+CC.F.Def.END	>LDYA L.PCC.LEAVE
+				jsr CODE.EmitPCC
+				bcs .9
 
 				jsr CC.Pop				T
 				jsr CC.Pop				Q
 
 				jsr CC.SYM.FreeScope
-				
+
 				stz LocalPtr			back to global
 
+				clv						pop context
 				clc
-				rts
-*--------------------------------------
-CC.F.AddTQ		pha
-				phy
-				
-				ldy #SYM.DefSize
-				lda (ZPSymBufPtr),y
-				pha 
-
-				inc
-				inc
-				sta (ZPSymBufPtr),y
-				
-				ply
-				
-				pla
-				sta (ZPSymBufPtr),y
-				iny
-				pla
-				sta (ZPSymBufPtr),y
-				
-				rts
+.9				rts
 *--------------------------------------
 * in : ZPSymPtr
 *      Y,A = Expected T/Q
 *--------------------------------------
-CC.F.CallNoRetV	clc
+CC.F.CallNoRetV	ldy #0					no expected T/Q
+				tya
+				clc
 				.HS B0					BCS
 CC.F.CallRetV	sec
 
@@ -204,44 +198,51 @@ CC.F.CallRetV	sec
 				>STYA ZPPtr2
 
 				ror ZPPtr1+1			bRetV
-				bpl .20					no return value on stack
-	
-				ldy #SYM.Addr+1
-				lda (ZPLookupSymPtr),y
-				beq .20					SYS/LIB/FPU call, no ret value space
-				
-				jsr CC.SYM.GetSymSizeOfInAXC
-				jsr CODE.nAddLocal
-				
-.20				stz ZPPtr1				Reset VARIADIC byte count
+*				bpl .20					no return value on stack
 
-				jsr CC.GetNextCharNB	skip '('
+*				ldy #SYM.Addr+1
+*				lda (ZPLookupSymPtr),y
+*				beq .20					SYS/LIB/FPU call, no ret value space
+
+				jsr CC.EXP.GetSymSizeOfInAXC
+				jsr CODE.nAddLocal
+
+.20				jsr CC.GetNextCharNB	skip '('
 				bcs .10
 
-				jsr CC.SYM.GetTypeInYA	Y,A = f() Return value T/Q
+				ldy #SYM.Q
+*			>DEBUG
+				lda ZPPtr2				expected T
+				bne .1
 
-				ldx ZPPtr2				expected T
-				beq .1					no check required
-
-				cpy ZPPtr2
-				bne .24
-
-				tax						save full Q
+				lda (ZPLookupSymPtr)	no check required
+				sta ZPPtr2
 
+				lda (ZPLookupSymPtr),y
 				and #$fC				ignore SYM.Q.FUNC,SYM.Q.FASTCALL
-				cmp ZPPtr2+1
-.24				bne .91
+				bra .2
 
-				txa
+.1				cmp #SYM.T.VOID
+				beq .11
 
-.1				>STYA ZPPtr2			save full T/Q for later
+				cmp (ZPLookupSymPtr)
+				bne .91
+
+.11				lda (ZPLookupSymPtr),y
+				and #$fC				ignore SYM.Q.FUNC,SYM.Q.FASTCALL
+				cmp ZPPtr2+1			expected Q
+				bne .91
+*--------------------------------------
+.2				sta ZPPtr2+1
+
+				stz ZPPtr1				Reset VARIADIC byte count
 
 				lda #SYM.Def
 				>STA.G CC.LookupSymPtr
 
 				jsr CC.F.GetTQ			get First Arg T/Q
 				beq .7					end of list, go check ending ')'
-*--------------------------------------
+
 .3				cpy #SYM.T.VARIADIC
 				bne .4
 
@@ -253,7 +254,7 @@ CC.F.CallRetV	sec
 				jsr CC.EXP.Eval
 				bcs .93
 
-				jsr CC.SYM.GetYASizeOfInAXC
+				jsr CC.EXP.GetYASizeOfInAXC
 				tax						save Sizeof in X
 
 				jsr CC.F.GetTQ
@@ -295,7 +296,6 @@ CC.F.CallRetV	sec
 				bne .90					missing arg
 
 				lda ZPPtr1				push VARIADIC byte count
-
 				jsr CODE.PUSHI
 
 .7				jsr CC.GetCharNB
@@ -330,8 +330,9 @@ CC.F.CallRetV	sec
 *--------------------------------------
 * X = last var size
 *--------------------------------------
-CC.F.Call2		lda ZPPtr2+1
-				bit #SYM.Q.FASTCALL
+CC.F.Call2		ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				and #SYM.Q.FASTCALL
 				beq .1
 
 				ldy #SYM.Def			Get first (only) argument
@@ -371,11 +372,12 @@ CC.F.Call2		lda ZPPtr2+1
 
 * Return Value : call & put result on stack if in Y,A
 
-.5				ldy #SYM.Addr+1
+.5
+				ldy #SYM.Addr+1
 				lda (ZPLookupSymPtr),y
-				cmp #2
+				cmp #3
 				bcs .8					not a SYS/FPU call...Ret value on stack
-				
+
 				>LDYA ZPPtr2			function T/Q
 				jsr CC.TYPE.SizeOf
 				cpx #3
@@ -384,13 +386,13 @@ CC.F.Call2		lda ZPPtr2+1
 				dex
 				bne .60
 
-				jsr CODE.PUSHA			push ONE byte one stack
+				jsr CODE.PUSHA			push ONE byte on stack
 				bra .8
 
-.60				jsr CODE.PUSHYA			push TWO bytes one stack
+.60				jsr CODE.PUSHYA			push TWO bytes on stack
 
 .8				>LDYA ZPPtr2			T/Q
-				and #$FC				ignore SYM.Q.FUNC+SYM.Q.FASTCALL
+
 				clc
 				rts
 *--------------------------------------
@@ -405,50 +407,47 @@ CC.F.Call3		ldy #SYM.Addr+1
 				lda (ZPLookupSymPtr),y
 				tax
 
-				ply
+				ply						Y=HI,X=LO
 
 				cpy #1
 				bne .1
 
-				jsr CODE.SYSCALL
-				clc
-				rts
+				jmp CODE.SYSCALL
 
 .1				cpy #2
 				bne .2
 
-				jsr CODE.FPUCALL
-				clc
-				rts
+				jmp CODE.FPUCALL
 
-.2				lda #$EA
+.2				lda #$EA				NOP
 				jsr CODE.EmitByte
-				lda #$EA
+				bcs .99
+
+				lda #$EA				NOP
 				jsr CODE.EmitByte
-				
+				bcs .99
+
 				lda #$20				JSR abs
-				jsr CODE.TOABSYX		Y=HI,X=LO
-				clc
-				rts
+				jmp CODE.TOABSYX
 
 .9				bit bPass2
-				bmi .99
-				
+				bmi .91
+
 				lda #5					leave room for LDX #imm, JSR abs
 				clc
 				adc ZPCCCode
 				sta ZPCCCode
-				
+
 				bcc .90
-			
+
 				inc ZPCCCode+1
-				
+
 .90				clc
 				rts
-				
-.99				lda #E.FUNDEF
+
+.91				lda #E.FUNDEF
 				sec
-				rts
+.99				rts
 *--------------------------------------
 CC.F.GetTQ		>LDA.G CC.LookupSymPtr
 				tay
diff --git a/BIN/CC.S.FIO.txt b/BIN/CC.S.FIO.txt
new file mode 100644
index 00000000..bdf9fcfb
--- /dev/null
+++ b/BIN/CC.S.FIO.txt
@@ -0,0 +1,131 @@
+NEW
+  AUTO 3,1
+*--------------------------------------
+CC.FIO.FOpen1st	>LDA.G CC.InFileArg
+				>SYSCALL ArgV
+
+CC.FIO.FOpen	phy
+				pha
+
+				>PUSHW L.MSG.READING
+				pla
+				pha
+				>PUSHYA
+				>PUSHBI 2
+				>SYSCALL PrintF
+
+				pla
+				ply
+				>PUSHYA
+				>PUSHBI	O.RDONLY
+				>PUSHBI S.FI.T.TXT
+				>PUSHWZ					Aux type
+				>SYSCALL FOpen
+				bcs .9
+
+				tax
+
+				>LDA.G hFilePtr
+				inc
+				sta (pData),y
+				tay
+				txa
+				sta (pData),y
+
+				>LDA.G LineCntPtr
+				inc
+				inc
+				sta (pData),y
+				tay
+				lda #0
+				sta (pData),y
+				iny
+				sta (pData),y
+
+.9				rts
+*--------------------------------------
+CC.FIO.FGetS	>LDYA.G LineBufPtr
+				>STYA ZPLineBufPtr
+
+				>LDA.G LineCntPtr
+				tay
+				lda (pData),y
+				inc
+				sta (pData),y
+				bne .1
+
+				iny
+				lda (pData),y
+				inc
+				sta (pData),y
+
+.1				>LDA.G hFilePtr
+				tay
+				lda (pData),y
+				>PUSHA
+
+				>PUSHW ZPLineBufPtr
+				>PUSHWI 255
+				>SYSCALL FGetS
+				bcs .9
+
+				>LDA.G bTrace
+				bpl .8
+
+				jsr PrintTraceMsg
+
+.8
+
+.9				rts
+*--------------------------------------
+CC.FIO.FClose	>LDA.G hFilePtr
+				cmp #hFilePtr
+				beq .8
+
+				tay
+				lda (pData),y
+
+				>SYSCALL FClose
+
+				>LDA.G hFilePtr
+				dec
+				sta (pData),y
+				cmp #hFilePtr
+				beq .8
+
+				>LDA.G LineCntPtr
+				dec
+				dec
+				sta (pData),y			NZ
+
+.8				rts
+*--------------------------------------
+CC.FIO.FCreate	>LDA.G CC.OutFileArg
+				>SYSCALL ArgV
+				>STYA ZPPtr1
+
+				>PUSHW L.MSG.GENERATING
+				>PUSHW ZPPtr1
+				>PUSHBI 2
+				>SYSCALL PrintF
+
+				>PUSHW ZPPtr1
+				>PUSHBI	O.WRONLY+O.CREATE
+				>PUSHBI S.FI.T.BIN
+				>PUSHWI	$2000			Aux type
+				>SYSCALL FOpen
+				bcs .9
+
+				>STA.G CC.hOutFile
+
+				>PUSHA					A = CC.hOutFile
+				>PUSHW L.PCC.FH
+				>PUSHWI PCC.FH.L
+				>SYSCALL FWrite
+
+.9				rts
+*--------------------------------------
+MAN
+SAVE usr/src/bin/cc.s.fio
+LOAD usr/src/bin/cc.s
+ASM
diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt
index 562647cb..496da9d8 100644
--- a/BIN/CC.S.KW.txt
+++ b/BIN/CC.S.KW.txt
@@ -3,14 +3,107 @@ NEW
 *--------------------------------------
 * Built in Keywords
 *--------------------------------------
-CC.KW.JMP		txa
-				>STA.G CC.CmdSave
-				jmp (J.CC.KW,x)
+CC.KW.IF		jsr CC.KW.BEGIN
+				bcs .99
+
+				jsr CC.GetCharNB
+				bcs .9
+
+				cmp #'('
+				bne .9
+
+				jsr CC.GetNextCharNB
+				bcs .9
+
+				jsr CC.EXP.Eval00		Any var type
+				bcs .99
+
+				jsr CC.KW.TestZero		Y,A=T/Q
+
+				lda #'E'
+				jsr CC.SYM.LookupA
+				bcs .99
+
+				lda #$4C				emit JMP else
+				jsr CODE.TOABSYX
+				bcs .99
+
+				jsr CC.GetCharNB
+				bcs .99
+
+				cmp #')'
+				bne .9
+
+				jmp CC.KW.STMT
+
+.9				lda #E.CSYN
+				sec
+.99				rts
 *--------------------------------------
-CC.KW.WHILE		jsr CC.PushCS			push cont: for WHILE loop
-				bcs CC.KW.IF.RTS
+CC.KW.IF.END	jsr CC.GetCharNBNL
+				bcs .1
+
+				cmp #';'
+				beq .1
+
+				>LDYA L.CC.KW2.IF		Check allowed KW for IF....
+				jsr CC.LookupID
+				bcc .2
+
+.1				lda #'E'				define ELSE Label
+				jsr CC.KW.NewLabel
+				bcs .99
+				
+				clv						pop context
+				rts
 *--------------------------------------
-CC.KW.IF		jsr CC.GetCharNB
+.2				lda #'X'
+				jsr CC.SYM.LookupA
+				bcs .99
+
+				lda #$4C				emit JMP exit
+				jsr CODE.TOABSYX
+				bcs .99
+
+				lda #'E'				define ELSE Label
+				jsr CC.KW.NewLabel
+				bcs .99
+
+				inc CStackPtr			pop ; or }
+
+				lda #4					replace IF by ELSE keyword
+				ldy CStackPtr
+				sta (ZPCCStack),y
+
+				jsr CC.KW.STMT
+				bcs .99
+
+				bit .99					set V : DONT pop context
+				rts
+
+.9				lda #E.CSYN
+				sec
+.99				rts
+*--------------------------------------
+CC.KW.ELSE		lda #E.CSYN				illegal
+				sec
+				rts
+*--------------------------------------
+CC.KW.ELSE.END	lda #'X'				define EXIT Label
+				jsr CC.KW.NewLabel
+				bcs .99
+
+				clv						pop context
+.99				rts
+*--------------------------------------
+CC.KW.WHILE		jsr CC.KW.BEGIN
+				bcs .99
+
+				lda #'C'				define CONT Label
+				jsr CC.SYM.NewA
+				bcs .99
+
+				jsr CC.GetCharNB
 				bcs .9
 
 				cmp #'('
@@ -24,10 +117,13 @@ CC.KW.IF		jsr CC.GetCharNB
 
 				jsr CC.KW.TestZero
 
-				jsr CC.PushCS			push place to set JMP false
+				lda #'B'
+				jsr CC.SYM.LookupA
 				bcs .99
 
-				jsr CC.KW.ZPCCCodeAdd2
+				lda #$4C				emit JMP break:
+				jsr CODE.TOABSYX
+				bcs .99
 
 				jsr CC.GetCharNB
 				bcs .99
@@ -35,89 +131,44 @@ CC.KW.IF		jsr CC.GetCharNB
 				cmp #')'
 				bne .9
 
-				jmp CC.KW.BEGIN
+				jmp CC.KW.STMT
 
 .9				lda #E.CSYN
 				sec
-.99
-CC.KW.IF.RTS	rts
+.99				rts
 *--------------------------------------
-CC.KW.IF.END	jsr CC.PopYA
+CC.KW.WHILE.END	lda #'C'
+				jsr CC.KW.GetLabel
+				bcs .99
+
+				lda #$4C
+				jsr CODE.TOABSYX		emit JMP cont:
+				bcs .99
+
+				lda #'B'				define BREAK Label
+				jsr CC.KW.NewLabel
+				bcs .99
+
+				clv						pop context
+
+.99				rts
+*--------------------------------------
+CC.KW.DO		jsr CC.KW.BEGIN
+				bcs .99
+
+				lda #'C'				define CONT Label
+				jsr CC.SYM.NewA
+				bcs .99
+				
+				jmp CC.KW.STMT
+
+.99				rts
+*--------------------------------------
+CC.KW.DO.END	>LDYA L.CC.KW2.DO		Check allowed KW for DO....
+				jsr CC.LookupID
 				bcs .9
 
-				>STYA ZPPtr1			set JMP false
-
-				lda ZPCCCode
-*				sta (ZPPtr1)
-
-				ldy #1
-				lda ZPCCCode+1
-*				sta (ZPPtr1),y
-
-*				clc
-
-.9				rts
-*--------------------------------------
-CC.KW.ELSE
-
-				clc
-				rts
-*--------------------------------------
-CC.KW.ELSE.END
-
-				clc
-				rts
-*--------------------------------------
-CC.KW.WHILE.END	jsr CC.PopYA			Get JMP false location
-				bcs .9
-
-				>STYA ZPPtr1
-
-				jsr CC.PopYA			Get cont: address
-				bcs .9
-
-				phy
-				tay						HI byte
-				plx
-
-				lda #$4C				JMP cont:
-				jsr CODE.TOABSYX
-
-				lda ZPCCCode
-*				sta (ZPPtr1)
-
-				ldy #1
-				lda ZPCCCode+1
-*				sta (ZPPtr1),y
-
-				clc
-
-.9				rts
-*--------------------------------------
-CC.KW.DO
-				lda #E.CSYN
-				sec
-				rts
-*--------------------------------------
-CC.KW.DO.END
-				clc
-				rts
-*--------------------------------------
-* for (e1;e2;e3) s;
-*
-* {				<- new scope : allows for(int i=1; ....)
-* 	e1;
-*	loop:
-* 	while (e2)
-* 	{
-* 	   s;
-* 	cont:
-* 	   e3;
-* 	}
-* 	break:
-* }
-*--------------------------------------
-CC.KW.FOR		jsr CC.GetCharNB
+				jsr CC.GetCharNB
 				bcs .9
 
 				cmp #'('
@@ -126,12 +177,83 @@ CC.KW.FOR		jsr CC.GetCharNB
 				jsr CC.GetNextCharNB
 				bcs .9
 
-				jsr CC.EXP.Eval00		get e1
-				bcs .9
+				jsr CC.EXP.Eval00		Any var type
+				bcs .99
 
-				jsr CC.KW.StackDiscard
+				jsr CC.KW.TestnZero
+
+				lda #'C'
+				jsr CC.KW.GetLabel
+				bcs .99
+
+				lda #$4C				emit JMP cont
+				jsr CODE.TOABSYX
+				bcs .99
+
+				lda #'B'				define BREAK Label
+				jsr CC.KW.NewLabel
+				bcs .99
 
 				jsr CC.GetCharNB
+				bcs .99
+
+				cmp #')'
+				bne .9
+				
+				jsr CC.GetNextCharNB
+				bcs .9
+
+				clv						pop context
+				clc
+				rts
+				
+.9				lda #E.CSYN
+				sec
+.99				rts
+*--------------------------------------
+* for (s1;e2;s3) s;
+*
+* {				<- new scope : allows for(int i=1; ....)
+* 	s1;
+*	loop:
+* 	while (e2)	jmp break:
+* 	{
+* 	   s;		jsr s:
+* 	cont:
+* 	   s3;		jmp loop:
+* 	}
+* s:
+* <s>;
+* break:
+* }
+*--------------------------------------
+CC.KW.FOR		jsr CC.GetCharNB
+				bcs .29
+
+				cmp #'('
+				bne .29
+
+				jsr CC.KW.BEGIN
+				bcs .29
+
+				jsr CC.GetNextCharNB	skip '('
+				bcs .29
+
+				>LDYA L.CC.TYPEQUAL
+				jsr CC.LookupID
+				bcs .1
+
+				jsr CC.DECL
+				bcc .2
+
+.19				rts
+
+.1				jsr CC.STMT				get s1
+				bcs .19
+
+*				jsr CC.KW.StackDiscard
+
+.2				jsr CC.GetCharNB
 				bcs .9
 
 				cmp #';'
@@ -140,26 +262,29 @@ CC.KW.FOR		jsr CC.GetCharNB
 				jsr CC.GetNextCharNB	skip ';'
 				bcs .9
 *--------------------------------------
-				>LDYA ZPCCCode
-				>STYA ZPPtr2			save LOOP address
+				lda #'L'				LOOP Label
+				jsr CC.SYM.NewA
+				bcs .99
 
 				jsr CC.EXP.Eval00		get e2
 .29				bcs .99
 
 				jsr CC.KW.TestZero
-
-				jsr CC.PushCS			push place to set JMP break:
 				bcs .99
 
-				jsr CC.KW.ZPCCCodeAdd2
+				lda #'B'
+				jsr CC.SYM.LookupA
+				bcs .99
 
-				lda #$20				emit JSR s;
-				jsr CODE.EmitByte
+				lda #$4C				emit JMP break:
+				jsr CODE.TOABSYX
 
-				>LDYA ZPCCCode
-				>STYA ZPPtr3			save place to set JSR s
+				lda #'S'
+				jsr CC.SYM.LookupA
+				bcs .99
 
-				jsr CC.KW.ZPCCCodeAdd2	space for 2-bytes address
+				lda #$20				emit JSR s:
+				jsr CODE.TOABSYX
 
 				jsr CC.GetCharNB
 				bcs .9
@@ -170,12 +295,14 @@ CC.KW.FOR		jsr CC.GetCharNB
 				jsr CC.GetNextCharNB	skip ';'
 				bcs .9
 *--------------------------------------
-				jsr CC.PushCS			push cont: address
-
-				jsr CC.EXP.Eval00		get e3
+				lda #'C'				CONT Label
+				jsr CC.SYM.NewA
 				bcs .99
 
-				jsr CC.KW.StackDiscard
+				jsr CC.STMT				get s3
+				bcs .99
+
+*				jsr CC.KW.StackDiscard
 
 				jsr CC.GetCharNB
 				bcs .9
@@ -183,19 +310,18 @@ CC.KW.FOR		jsr CC.GetCharNB
 				cmp #')'
 				bne .9
 
+				lda #'L'
+				jsr CC.SYM.LookupA
+				bcs .99
+
 				lda #$4C
-				ldx ZPPtr2
-				ldy ZPPtr2+1
-				jsr CODE.TOABSYX		JMP e2
+				jsr CODE.TOABSYX		emit JMP loop
 
-				lda ZPCCCode			setup JSR s;
-*				sta (ZPPtr3)
+				lda #'S'				S Label
+				jsr CC.SYM.NewA
+				bcs .99
 
-				lda ZPCCCode+1
-				ldy #1
-*				sta (ZPPtr3),y
-
-				jmp CC.KW.BEGIN
+				jmp CC.KW.STMT
 
 .9				lda #E.CSYN
 				sec
@@ -203,43 +329,45 @@ CC.KW.FOR		jsr CC.GetCharNB
 *--------------------------------------
 CC.KW.FOR.END	lda #$60
 
-				jsr CODE.EmitByte		set RTS for JSR s;
+				jsr CODE.EmitByte		set RTS for JSR code;
+				bcs .99
 
-				jsr CC.Pop
-				bcs .9
+				lda #'B'				define BREAK Label
+				jsr CC.KW.NewLabel
+				bcs .99
 
-				jsr CC.Pop				discard cont: location
-				bcs .9
+				clv						pop context
 
-				jsr CC.PopYA
-				bcs .9
-
-				>STYA ZPPtr1			get JMP break: location
-
-				lda ZPCCCode
-*				sta (ZPPtr1)
-
-				ldy #1
-				lda ZPCCCode+1
-*				sta (ZPPtr1),y
-
-				clc
-
-.9				rts
+.99				rts
 *--------------------------------------
 CC.KW.SWITCH
 CC.KW.CASE
+CC.KW.DEFAULT
 				lda #E.CSYN
 				sec
 				rts
 *--------------------------------------
-CC.KW.BREAK
-				lda #E.CSYN
+CC.KW.BREAK		lda #'B'
+
+				jsr CC.KW.LookupLabel
+				bcs .9
+				
+				lda #$4C				emit JMP break
+				jmp CODE.TOABSYX
+				
+.9				lda #E.CSYN
 				sec
 				rts
 *--------------------------------------
-CC.KW.CONTINUE
-				lda #E.CSYN
+CC.KW.CONTINUE	lda #'C'
+
+				jsr CC.KW.LookupLabel
+				bcs .9
+				
+				lda #$4C				emit JMP cont
+				jmp CODE.TOABSYX
+				
+.9				lda #E.CSYN
 				sec
 				rts
 *--------------------------------------
@@ -254,7 +382,7 @@ CC.KW.RETURN	ldy CStackPtr
 
 				tya
 				clc
-				adc #3					skip CPStmt (4 bytes)
+				adc #5					skip CPStmt (6 bytes)
 				tay
 				bcc .1
 
@@ -265,6 +393,9 @@ CC.KW.RETURN	ldy CStackPtr
 .7				iny						skip bState
 				iny						skip Locals
 
+				iny
+				iny						skip CPSID
+
 				iny						get SYM.T
 				lda (ZPCCStack),y
 
@@ -281,11 +412,10 @@ CC.KW.RETURN	ldy CStackPtr
 				jsr CC.SYM.GetYASizeOfInAXC		Y,A=T/Q
 				tax						X = sizeof
 				jsr CODE.SetRetValue
+				bcs .99
 
-				jsr CODE.Leave
-
-				clc
-				rts
+				>LDYA L.PCC.LEAVE
+				jmp CODE.EmitPCC
 *--------------------------------------
 CC.KW.SIZEOF
 				lda #E.CSYN
@@ -321,66 +451,178 @@ CC.KW.STRUCT	>ENTER 4
 				cmp #'}'
 				bne .1
 
-				jsr CC.GetNextCharNB	skip }
+				jsr CC.GetNextCharNB	skip '}'
 
 				clc
 .99				>LEAVE
 				rts
 *--------------------------------------
-CC.KW.BEGIN		jsr CC.GetNextCharNB
-				bcs .9
+CC.KW.BEGIN		jsr CC.SYM.NewCPSID
+				bcs .99
 
-				cmp #'{'
-				bne .7
-
-				>LDA.G CC.CmdSave
-				tax
-				jmp CC.STMT.CPStmt
-
-.7				>LDA.G CC.CmdSave
+				>LDA.G CC.CPSPFX+3
 				jsr CC.Push
 				bcs .99
 
-				lda #';'
+				>LDA.G CC.CPSPFX+2
+				jsr CC.Push
+				bcs .99
+
+				lda LocalPtr			Locals
+				jsr CC.Push
+				bcs .99
+
+				lda #0					bState
+				jsr CC.Push
+				bcs .99
+
+				>LDA.G CC.CmdSave
+				jmp CC.Push
+
+.99				rts
+*--------------------------------------
+CC.KW.STMT		jsr CC.GetNextCharNBNL
+				bcs .9
+
+				cmp #'{'
+				bne .1
+
+				jsr CC.GetNextCharNB	skip '{'
+				bcs .99
+
+				lda #'}'
+				jmp CC.Push
+
+.1				lda #';'
 				jmp CC.Push
 
 .9				lda #E.CSYN
 				sec
 .99				rts
 *--------------------------------------
-* Input : Value on Stack, Y,A = Type/Qual
-* Output : CC = true, CS = false
-*--------------------------------------
-CC.KW.TestZero	jsr CC.SYM.GetYASizeOfInAXC
-				tax
+CC.KW.NewLabel	pha
 
-.6				lda #$A2				LDX #imm
-				jsr CODE.EmitByte
-				txa
-				jsr CODE.EmitByte
+				lda CStackPtr
+				clc
+				adc #4
+				tay
 
-				ldx #PCC.Test0X.L
-				ldy #0
-
-.7				lda PCC.Test0X,y
-				jsr CODE.EmitByte
+				lda (ZPCCStack),y
+				pha
 				iny
-				dex
-				bne .7
+				lda (ZPCCStack),y
+				ply
+				>STYA.G CC.CPSPFX+2
 
-				clc
-				rts
+				pla
+				jmp CC.SYM.NewA
 *--------------------------------------
-CC.KW.ZPCCCodeAdd2
-				lda ZPCCCode
+CC.KW.GetLabel	pha
+
+				lda CStackPtr
 				clc
-				adc #2
-				sta ZPCCCode
-				bcc .8
+				adc #4
+				tay
 
-				inc ZPCCCode+1
+				lda (ZPCCStack),y
+				pha
+				iny
+				lda (ZPCCStack),y
+				ply
+				>STYA.G CC.CPSPFX+2
 
+				pla
+				jmp CC.SYM.LookupA
+*--------------------------------------
+CC.KW.LookupLabel
+				pha
+
+				ldy CStackPtr
+				sty ArgIndex
+
+.1				ldy ArgIndex
+				beq .9
+
+				iny 					skip ; or }
+
+				lda (ZPCCStack),y
+				bmi .9					f()
+				
+				iny
+				iny
+				iny
+
+				lda (ZPCCStack),y
+				pha
+				iny
+				lda (ZPCCStack),y
+				iny
+				
+				sty ArgIndex
+				
+				ply
+				>STYA.G CC.CPSPFX+2
+
+				pla
+				pha
+				jsr CC.SYM.LookupA
+				bcs .1
+				
+				pla
 .8				rts
+				
+.9				pla
+				lda #E.CSYN
+				sec
+.99				rts
+*--------------------------------------
+* Input : Value on Stack, Y,A = Type/Qual
+*--------------------------------------
+CC.KW.TestZero	jsr CC.EXP.GetYASizeOfInAXC
+				tax
+				cpx #1
+				bne .1
+
+				>LDYA L.PCC.TestZero1
+				jmp CODE.EmitPCC
+
+.1				cpx #2
+				bne .2
+
+				>LDYA L.PCC.TestZero2
+				jmp CODE.EmitPCC
+
+.2				jsr CODE.LDXI
+				bcs .9
+
+				>LDYA L.PCC.TestZeroX
+				jmp CODE.EmitPCC
+
+.9				rts
+*--------------------------------------
+* Input : Value on Stack, Y,A = Type/Qual
+*--------------------------------------
+CC.KW.TestnZero	jsr CC.EXP.GetYASizeOfInAXC
+				tax
+				cpx #1
+				bne .1
+
+				>LDYA L.PCC.TestnZero1
+				jmp CODE.EmitPCC
+
+.1				cpx #2
+				bne .2
+
+				>LDYA L.PCC.TestnZero2
+				jmp CODE.EmitPCC
+
+.2				jsr CODE.LDXI
+				bcs .9
+
+				>LDYA L.PCC.TestnZeroX
+				jmp CODE.EmitPCC
+
+.9				rts
 *--------------------------------------
 * Input : Value on Stack, Y,A = Type/Qual
 *--------------------------------------
diff --git a/BIN/CC.S.LINK.txt b/BIN/CC.S.LINK.txt
index 171f350b..a289f01c 100644
--- a/BIN/CC.S.LINK.txt
+++ b/BIN/CC.S.LINK.txt
@@ -156,7 +156,43 @@ CC.Link.Dump	>PUSHW L.MSG.LINKING2
 				>SYSCALL PrintF
 				rts
 *--------------------------------------
+CC.Link.CheckMain
+				>PUSHB.G CC.hScopes
+				>PUSHW L.CC.MAIN
+				>SYSCALL SListLookup
+				bcs .9
 
+				>STYA ZPPtr1			SymID
+
+				>PUSHB.G CC.hScopes
+				>PUSHW ZPPtr1			SymID
+				>PUSHW ZPSymBufPtr
+				>PUSHWI 65535			all
+				>PUSHWZ					From Start
+				>SYSCALL SListGetData
+				bcs .99
+
+				ldy #SYM.Addr
+				lda (ZPSymBufPtr),y
+				iny
+				ora (ZPSymBufPtr),y
+				beq .9
+
+				lda (ZPSymBufPtr),y
+				sta PCC.FH+PCC.FH.MAIN+1
+				dey
+				lda (ZPSymBufPtr),y
+				sta PCC.FH+PCC.FH.MAIN
+
+*				clc
+
+				rts
+
+.9				>LDYA L.MSG.NOMAIN
+				>SYSCALL puts
+				lda #E.CSYN
+				sec
+.99				rts
 *--------------------------------------
 MAN
 SAVE usr/src/bin/cc.s.link
diff --git a/BIN/CC.S.PCC.txt b/BIN/CC.S.PCC.txt
new file mode 100644
index 00000000..c0b94675
--- /dev/null
+++ b/BIN/CC.S.PCC.txt
@@ -0,0 +1,595 @@
+NEW
+  AUTO 3,1
+*--------------------------------------
+* PCC = Pre Compiled Code
+*--------------------------------------
+ZS.RT.Ptr1		.EQ ZPBIN
+ZS.RT.Ptr2		.EQ ZPBIN+2
+*--------------------------------------
+PCC.FH			.PH $2000
+PCC.FH.2000		cld
+				jmp (PCC.FH.JMP,x)
+				.DA #$61				6502,Level 1 (65c02)
+				.DA #1					BIN Layout Version 1
+				.DA #0					S.PS.F.EVENT
+				.DA #0
+PCC.FH.CSSIZE	.EQ *-PCC.FH.2000
+			.DA $FFFF					* Code Size (without Constants)
+PCC.FH.DSSIZE	.EQ *-PCC.FH.2000
+			.DA $FFFF					* Data Size
+				.DA #256				Stack Size
+				.DA #4					ZP Size
+				.DA 0
+
+PCC.FH.JMP		.DA PCC.FH.INIT
+				.DA PCC.FH.RUN
+				.DA PCC.FH.DOEVENT
+				.DA	PCC.FH.QUIT
+PCC.FH.IDATA 	.EQ *-PCC.FH.2000
+			.DA $FFFF
+				.DA 0
+
+PCC.FH.INIT
+* TODO : LoadLib code
+PCC.FH.QUIT
+* TODO : UnloadLib code
+PCC.FH.DOEVENT	clc
+				rts
+
+* int main(int argc, char *argv[]) ;
+
+PCC.FH.RUN		lda #0
+
+.1				pha
+				>SYSCALL ArgV
+				bcs .2
+
+				>STYA ZS.RT.Ptr1
+
+				pla
+				pha
+				asl
+				tay
+
+				lda ZS.RT.Ptr1
+				sta (pData),y
+
+				lda ZS.RT.Ptr1+1
+				iny
+				sta (pData),y
+
+				pla
+				inc
+				bra .1
+
+.2				pla
+
+				jsr PCC.FH.CS			Execute INIT code
+
+				>PUSHWZ					returned int=0
+
+				lda #0
+				>PUSHA
+				ldy #S.PS.ARGC
+				lda (pPS),y
+				>PUSHA					int ARGC
+				>PUSHW pData			*char[] ARGV
+*			>DEBUG
+PCC.FH.MAIN		.EQ *-PCC.FH.2000+1
+			jsr $FFFF					* jsr main
+				>PULLA
+				inc pStack				pull returned int
+				sec
+				rts
+
+*PCC.FH.SYSCALL	jsr A2osX.SYSCALL
+*				bcc .8
+
+*				inc pStack
+*				eor #$ff
+*				inc
+*				>PUSHA					int -ERROR code...
+*				ldy #1
+*				lda #$FF
+*				sta (pStack),y			FFxx on stack
+
+*.8
+
+PCC.FH.CS		.EP
+PCC.FH.L		.EQ *-PCC.FH
+*--------------------------------------
+PCC.DEBUG		.DA #PCC.DEBUG.L
+				>DEBUG
+PCC.DEBUG.L		.EQ *-PCC.DEBUG
+*--------------------------------------
+PCC.SLEEP		.DA #PCC.SLEEP.L
+				>SLEEP
+PCC.SLEEP.L		.EQ *-PCC.SLEEP
+*--------------------------------------
+PCC.ENTER		.DA #PCC.ENTER.L
+				ldx pBase
+				phx
+				clc
+				adc pStack				A = Local Size
+				sta pBase
+
+PCC.ENTER.L		.EQ *-PCC.ENTER
+*--------------------------------------
+PCC.LEAVE		.DA #PCC.LEAVE.L
+				ldx pBase
+				stx pStack
+				plx
+				stx pBase
+				rts
+
+PCC.LEAVE.L		.EQ *-PCC.LEAVE
+*--------------------------------------
+PCC.ADDLOCAL	.DA #PCC.ADDLOCAL.L
+				clc
+				adc pStack
+				sta pStack
+
+PCC.ADDLOCAL.L	.EQ *-PCC.ADDLOCAL
+*--------------------------------------
+PCC.SetRetValue	.DA #PCC.SetRetValue.L
+
+				ldy #0
+
+.1				>PULLA
+				sta (pBase),y
+				iny
+				dex
+				bne .1
+
+PCC.SetRetValue.L	.EQ *-PCC.SetRetValue
+*--------------------------------------
+PCC.TestZero1	.DA #PCC.TestZero1.L
+				>PULLA
+				tay
+.2				bne .2+5				skip JMP abs
+
+PCC.TestZero1.L	.EQ *-PCC.TestZero1
+*--------------------------------------
+PCC.TestZero2	.DA #PCC.TestZero2.L
+				>PULLA
+				ora (pStack)
+				inc pStack
+				tay
+.2				bne .2+5				skip JMP abs
+
+PCC.TestZero2.L	.EQ *-PCC.TestZero2
+*--------------------------------------
+PCC.TestZeroX	.DA #PCC.TestZeroX.L
+				lda #0
+
+.1				ora (pStack)
+				inc pStack
+				dex
+				bne .1
+
+				tay
+.2				bne .2+5				skip JMP abs
+
+PCC.TestZeroX.L	.EQ *-PCC.TestZeroX
+*--------------------------------------
+PCC.TestnZero1	.DA #PCC.TestnZero1.L
+				>PULLA
+				tay
+.2				beq .2+5				skip JMP abs
+
+PCC.TestnZero1.L	.EQ *-PCC.TestnZero1
+*--------------------------------------
+PCC.TestnZero2	.DA #PCC.TestnZero2.L
+				>PULLA
+				ora (pStack)
+				inc pStack
+				tay
+.2				beq .2+5				skip JMP abs
+
+PCC.TestnZero2.L	.EQ *-PCC.TestnZero2
+*--------------------------------------
+PCC.TestnZeroX	.DA #PCC.TestnZeroX.L
+				lda #0
+
+.1				ora (pStack)
+				inc pStack
+				dex
+				bne .1
+
+				tay
+.2				beq .2+5				skip JMP abs
+
+PCC.TestnZeroX.L	.EQ *-PCC.TestnZeroX
+*--------------------------------------
+PCC.PushLAddrH	.DA #PCC.PushLAddrH.L
+				>PUSHB pBase+1
+PCC.PushLAddrH.L	.EQ *-PCC.PushLAddrH
+*--------------------------------------
+PCC.PushLAddrL	.DA #PCC.PushLAddrL.L
+				clc
+				adc pBase
+				>PUSHA
+PCC.PushLAddrL.L	.EQ *-PCC.PushLAddrL
+*--------------------------------------
+PCC.PushIAddr	.DA #PCC.PushIAddr.L
+				clc
+				adc PCC.FH.2000+PCC.FH.IDATA
+				dec pStack
+				>PUSHA
+
+				txa
+				adc PCC.FH.2000+PCC.FH.IDATA+1
+				ldy #1
+				sta (pStack),y
+
+PCC.PushIAddr.L	.EQ *-PCC.PushIAddr
+*--------------------------------------
+PCC.PushUAddr	.DA #PCC.PushUAddr.L
+				clc
+				adc pData
+				dec pStack
+				>PUSHA
+
+				txa
+				adc pData+1
+				ldy #1
+				sta (pStack),y
+
+PCC.PushUAddr.L	.EQ *-PCC.PushUAddr
+*--------------------------------------
+PCC.GetLAddr1	.DA #PCC.GetLAddr1.L
+				clc
+				adc pBase
+				sta ZS.RT.Ptr1
+				lda pBase+1
+				sta ZS.RT.Ptr1+1
+
+PCC.GetLAddr1.L	.EQ *-PCC.GetLAddr1
+*--------------------------------------
+PCC.GetIAddr1	.DA #PCC.GetIAddr1.L
+				clc
+				adc PCC.FH.2000+PCC.FH.IDATA
+				sta ZS.RT.Ptr1
+				txa
+				adc PCC.FH.2000+PCC.FH.IDATA+1
+				sta ZS.RT.Ptr1+1
+
+PCC.GetIAddr1.L	.EQ *-PCC.GetIAddr1
+*--------------------------------------
+PCC.GetUAddr1	.DA #PCC.GetUAddr1.L
+				clc
+				adc pData
+				sta ZS.RT.Ptr1
+				txa
+				adc pData+1
+				sta ZS.RT.Ptr1+1
+
+PCC.GetUAddr1.L	.EQ *-PCC.GetUAddr1
+*--------------------------------------
+PCC.PopAddr1	.DA #PCC.PopAddr1.L
+				>PULLA
+				sta ZS.RT.Ptr1
+				>PULLA
+				sta ZS.RT.Ptr1+1
+
+PCC.PopAddr1.L	.EQ *-PCC.PopAddr1
+*--------------------------------------
+PCC.SetValue	.DA #PCC.SetValue.L
+.1				lda (pStack),y
+				sta (ZS.RT.Ptr1),y
+				dey
+				bpl .1
+
+PCC.SetValue.L	.EQ *-PCC.SetValue
+*--------------------------------------
+PCC.GetLAddr2	.DA #PCC.GetLAddr2.L
+				clc
+				adc pBase
+				sta ZS.RT.Ptr2
+				lda pBase+1
+				sta ZS.RT.Ptr2+1
+
+PCC.GetLAddr2.L	.EQ *-PCC.GetLAddr2
+*--------------------------------------
+PCC.GetIAddr2	.DA #PCC.GetIAddr2.L
+				clc
+				adc PCC.FH.2000+PCC.FH.IDATA
+				sta ZS.RT.Ptr2
+				txa
+				adc PCC.FH.2000+PCC.FH.IDATA+1
+				sta ZS.RT.Ptr2+1
+
+PCC.GetIAddr2.L	.EQ *-PCC.GetIAddr2
+*--------------------------------------
+PCC.GetUAddr2	.DA #PCC.GetUAddr2.L
+				clc
+				adc pData
+				sta ZS.RT.Ptr2
+				txa
+				adc pData+1
+				sta ZS.RT.Ptr2+1
+
+PCC.GetUAddr2.L	.EQ *-PCC.GetUAddr2
+*--------------------------------------
+PCC.PopAddr2	.DA #PCC.PopAddr2.L
+				>PULLA
+				sta ZS.RT.Ptr2
+				>PULLA
+				sta ZS.RT.Ptr2+1
+
+PCC.PopAddr2.L	.EQ *-PCC.PopAddr2
+*--------------------------------------
+PCC.Deref2		.DA #PCC.Deref2.L
+				ldy #1
+				lda (ZS.RT.Ptr2),y
+				tay
+				lda (ZS.RT.Ptr2)
+
+				sta ZS.RT.Ptr2
+				sty ZS.RT.Ptr2+1
+
+PCC.Deref2.L	.EQ *-PCC.Deref2
+*--------------------------------------
+PCC.PushDeref2	.DA #PCC.PushDeref2.L
+				ldy #1
+				>PUSHB (ZS.RT.Ptr2),y
+				>PUSHB (ZS.RT.Ptr2)
+
+PCC.PushDeref2.L	.EQ *-PCC.PushDeref2
+*--------------------------------------
+PCC.PushValue	.DA #PCC.PushValue.L
+
+.1				lda (ZS.RT.Ptr2),y
+				>PUSHA
+				dey
+				bpl .1
+
+PCC.PushValue.L	.EQ *-PCC.PushValue
+*--------------------------------------
+PCC.Inc1		.DA #PCC.Inc1.L
+				lda (ZS.RT.Ptr2)
+				inc
+				sta (ZS.RT.Ptr2)
+PCC.Inc1.L		.EQ *-PCC.Inc1
+*--------------------------------------
+PCC.Inc2		.DA #PCC.Inc2.L
+				lda (ZS.RT.Ptr2)
+				inc
+				sta (ZS.RT.Ptr2)
+				bne .1
+				
+				ldy #1
+				lda (ZS.RT.Ptr2),y
+				inc
+				sta (ZS.RT.Ptr2),y
+				
+.1				
+				
+PCC.Inc2.L		.EQ *-PCC.Inc2
+*--------------------------------------
+PCC.Inc4		.DA #PCC.Inc4.L
+				lda (ZS.RT.Ptr2)
+				inc
+				sta (ZS.RT.Ptr2)
+				bne .2
+				
+				ldy #1
+
+.1				lda (ZS.RT.Ptr2),y
+				inc
+				sta (ZS.RT.Ptr2),y
+				beq .2
+				
+				iny
+				cpy #4
+				bne .1
+				
+.2				
+				
+PCC.Inc4.L		.EQ *-PCC.Inc4
+*--------------------------------------
+PCC.Dec1		.DA #PCC.Dec1.L
+				lda (ZS.RT.Ptr2)
+				dec
+				sta (ZS.RT.Ptr2)
+PCC.Dec1.L		.EQ *-PCC.Dec1
+*--------------------------------------
+PCC.Dec2		.DA #PCC.Dec2.L
+				lda (ZS.RT.Ptr2)
+				php
+				dec
+				sta (ZS.RT.Ptr2)
+				plp
+				bne .1
+				
+				ldy #1
+				lda (ZS.RT.Ptr2),y
+				dec
+				sta (ZS.RT.Ptr2),y
+				
+.1				
+				
+PCC.Dec2.L		.EQ *-PCC.Dec2
+*--------------------------------------
+PCC.Dec4		.DA #PCC.Dec4.L
+				lda (ZS.RT.Ptr2)
+				clc
+				sbc #0
+				sta (ZS.RT.Ptr2)
+				bcs .2
+				
+				ldy #1
+
+.1				lda (ZS.RT.Ptr2),y
+				sbc #0
+				sta (ZS.RT.Ptr2),y
+				bcs .2
+				
+				iny
+				cpy #4
+				bne .1
+				
+.2				
+				
+PCC.Dec4.L		.EQ *-PCC.Dec4
+*--------------------------------------
+PCC.BOPS.bMUL
+*--------------------------------------
+PCC.BOPS.cMUL
+*--------------------------------------
+PCC.BOPS.bDIV
+*--------------------------------------
+PCC.BOPS.cDIV
+*--------------------------------------
+PCC.BOPS.bMOD
+*--------------------------------------
+PCC.BOPS.cMOD
+*--------------------------------------
+PCC.BOPS.ADD	.DA #PCC.BOPS.ADD.L
+				clc
+				>PULLA
+				adc (pStack)
+				sta (pStack)
+PCC.BOPS.ADD.L	.EQ *-PCC.BOPS.ADD
+*--------------------------------------
+PCC.BOPS.SUB	.DA #PCC.BOPS.SUB.L
+				sec
+				ldy #1
+				lda (pStack),y
+				sbc (pStack)
+				sta (pStack),y
+				inc pStack
+PCC.BOPS.SUB.L	.EQ *-PCC.BOPS.SUB				
+*--------------------------------------
+PCC.BOPS.SHL	.DA #PCC.BOPS.SHL.L
+				>PULLA
+				tax
+				beq .8
+				
+				lda (pStack)
+
+.1				asl
+				dex
+				bne .1
+				
+				sta (pStack)
+				
+.8
+PCC.BOPS.SHL.L	.EQ *-PCC.BOPS.SHL				
+*--------------------------------------
+PCC.BOPS.SHR	.DA #PCC.BOPS.SHR.L
+				>PULLA
+				tax
+				beq .8
+				
+				lda (pStack)
+
+.1				lsr
+				dex
+				bne .1
+				
+				sta (pStack)
+				
+.8
+PCC.BOPS.SHR.L	.EQ *-PCC.BOPS.SHR			
+*--------------------------------------
+PCC.BOPS.L		.DA #PCC.BOPS.L.L
+				>PULLA
+				cmp (pStack)
+				bcc .8
+
+				lda #0
+				sta (pStack)
+				rts
+				
+.8				lda #1
+				sta (pStack)
+PCC.BOPS.L.L	.EQ *-PCC.BOPS.L
+*--------------------------------------
+PCC.BOPS.G		.DA #PCC.BOPS.G.L
+				>PULLA
+				cmp (pStack)
+				beq .1
+				bcs .8
+
+.1				lda #0
+				sta (pStack)
+				rts
+				
+.8				lda #1
+				sta (pStack)
+PCC.BOPS.G.L	.EQ *-PCC.BOPS.G
+*--------------------------------------
+PCC.BOPS.LE		.DA #PCC.BOPS.LE.L
+				>PULLA
+				cmp (pStack)
+				bcc .8
+				beq .8
+
+				lda #0
+				sta (pStack)
+				rts
+				
+.8				lda #1
+				sta (pStack)
+PCC.BOPS.LE.L	.EQ *-PCC.BOPS.LE
+*--------------------------------------
+PCC.BOPS.GE		.DA #PCC.BOPS.GE.L
+				>PULLA
+				cmp (pStack)
+				bcs .8
+
+				lda #0
+				sta (pStack)
+				rts
+				
+.8				lda #1
+				sta (pStack)
+PCC.BOPS.GE.L	.EQ *-PCC.BOPS.GE
+*--------------------------------------
+PCC.BOPS.EQ		.DA #PCC.BOPS.EQ.L
+				>PULLA
+				cmp (pStack)
+				beq .1
+				
+				lda #0
+				clc
+				
+.1				ror
+				sta (pStack)
+
+PCC.BOPS.EQ.L	.EQ *-PCC.BOPS.EQ
+*--------------------------------------
+PCC.BOPS.NE		.DA #PCC.BOPS.NE.L
+				>PULLA
+				eor (pStack)
+				sta (pStack)
+
+PCC.BOPS.NE.L	.EQ *-PCC.BOPS.NE
+*--------------------------------------
+PCC.BOPS.LAND	
+*--------------------------------------
+PCC.BOPS.AND	.DA #PCC.BOPS.AND.L
+				>PULLA
+				and (pStack)
+				sta (pStack)
+PCC.BOPS.AND.L	.EQ *-PCC.BOPS.AND
+*--------------------------------------
+PCC.BOPS.LOR	
+*--------------------------------------
+PCC.BOPS.OR		.DA #PCC.BOPS.OR.L
+				>PULLA
+				ora (pStack)
+				sta (pStack)
+PCC.BOPS.OR.L	.EQ *-PCC.BOPS.OR
+*--------------------------------------
+PCC.BOPS.EOR	.DA #PCC.BOPS.EOR.L
+				>PULLA
+				eor (pStack)
+				sta (pStack)
+PCC.BOPS.EOR.L	.EQ *-PCC.BOPS.EOR
+*--------------------------------------
+MAN
+SAVE usr/src/bin/cc.s.pcc
+LOAD usr/src/bin/cc.s
+ASM
diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt
index aeb31eb3..c3e550cc 100644
--- a/BIN/CC.S.STMT.txt
+++ b/BIN/CC.S.STMT.txt
@@ -1,12 +1,57 @@
 NEW
   AUTO 3,1
 *--------------------------------------
+CC.STMT			jsr CC.GetCharNB
+				jsr CC.IsLetter
+				ldx #$ff
+				bcc .20
+
+				>LDYA L.CC.PREOPS		++var ?
+				jsr CC.LookupOP
+				bcs .9
+
+.20				stx StmtPreOp
+
+				jsr CC.SYM.Lookup		var or func() ?
+				bcs .99
+
+				ldy #SYM.Q
+				lda (ZPLookupSymPtr),y
+				bit #SYM.Q.FUNC
+				beq .60
+
+				bit StmtPreOp
+				bpl .9					++func ????????
+
+				jsr CC.F.CallNoRetV		func( ... );
+				bcs .99
+
+				jmp CC.SYM.LookupFree
+
+.60				jsr CC.CORE.SetVar
+				bcs .99
+
+				jmp CC.SYM.LookupFree
+
+.9				lda #E.CSYN
+				sec
+.99				rts
+*--------------------------------------
 * X = KW.ID
 *--------------------------------------
-CC.STMT.CPStmt	lda LocalPtr			Locals
+CC.STMT.CPStmt.NEW
+				>LDA.G CC.CPSID+1
 				jsr CC.Push
 				bcs .99
-				
+
+				>LDA.G CC.CPSID
+				jsr CC.Push
+				bcs .99
+
+				lda LocalPtr			Locals
+				jsr CC.Push
+				bcs .99
+
 				lda #0					bState
 				jsr CC.Push
 				bcs .99
@@ -20,33 +65,58 @@ CC.STMT.CPStmt	lda LocalPtr			Locals
 
 .99				rts
 *--------------------------------------
+CC.STMT.Stmt.END
+				jsr CC.Get
+				bcs .8
+
+				cmp #'}'
+				beq .8
+
+				cmp #';'				must be ';' on stack....
+				bra CC.STMT.CPStmt.POP
+
+.8				clc
+
+CC.STMT.Stmt.RTS
+				rts
+*--------------------------------------
 CC.STMT.CPStmt.END
-				jsr CC.Pop
-				bcs .9
+				jsr CC.Get
+				bcs CC.STMT.Stmt.RTS
 
 				cmp #'}'				must be '}' on stack....
-				bne .9
+CC.STMT.CPStmt.POP
+				bne .98
 
-				jsr CC.Pop				get stacked KW...
-				tax
+				iny
+				lda (ZPCCStack),y
 
-				jsr CC.Pop				bState
+				jsr .7
+				bcs .99
+				
+				bvs .1					DONT POP reused context (ELSE....)
+
+				lda CStackPtr
+*				clc
+				adc #5
+				sta CStackPtr
 
 				jsr CC.Pop				Locals
 				sta LocalPtr
-		
-				txa
-				bmi .5
+
+.1				clc
+				rts
+*--------------------------------------
+.7				tax
+				bmi .8
 
 				jmp (J.CC.KW.END,x)
 
-.5				jmp CC.F.Def.END
+.8				jmp CC.F.Def.END
 
-.9				lda #E.CSYN
+.98				lda #E.CSYN
 				sec
-				rts
-*--------------------------------------
-CC.CPS.New
+.99				rts
 *--------------------------------------
 MAN
 SAVE usr/src/bin/cc.s.stmt
diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt
index 7628e4b0..5a800a49 100644
--- a/BIN/CC.S.SYM.txt
+++ b/BIN/CC.S.SYM.txt
@@ -17,7 +17,7 @@ CC.SYM.New		>STYA ZPPtr2			T/Q
 				>PUSHW ZPLineBufPtr
 
 				>SYSCALL SListLookup
-				bcs .9
+				bcs CC.SYM.New.9
 
 				>STYA.G CC.SymID		Y,A = KeyID
 
@@ -29,21 +29,14 @@ CC.SYM.New		>STYA ZPPtr2			T/Q
 				>PUSHWI 65535			all
 				>PUSHWZ					From Start
 				>SYSCALL SListGetData
-				bcs .9
+				bcc CC.SYM.New2
 
-				jsr CC.GetCharNB
-				cmp #'('
-				bne .8
-
-				jmp CC.F.Decl
-
-.8				clc
-.9				rts						Y,A = SymSize
+CC.SYM.New.9	rts						Y,A = SymSize
 *--------------------------------------
 CC.SYM.New1		ldy ScopeIdx
 				lda (pData),y
 				jsr CC.SYM.NewKey
-				bcs .9
+				bcs CC.SYM.New.9
 
 				>STYA.G CC.SymID		Y,A = KeyID
 
@@ -71,8 +64,8 @@ CC.SYM.New1		ldy ScopeIdx
 				tya
 				ldy #SYM.DefSize
 				sta (ZPSymBufPtr),y
-
-				jsr CC.GetCharNB
+*--------------------------------------
+CC.SYM.New2		jsr CC.GetCharNB
 				bcs CC.SYM.SetAddr
 
 				cmp #'('
@@ -84,45 +77,45 @@ CC.SYM.New1		ldy ScopeIdx
 				sta (ZPSymBufPtr),y
 
 				jmp CC.F.Decl
-
-.9				rts
 *--------------------------------------
 CC.SYM.NewV		cmp #'['
 				bne CC.SYM.SetAddr
 
+				ldy #SYM.Q
+				lda (ZPSymBufPtr),y
+				and #%11001111
+				sta (ZPSymBufPtr),y
+
+				lda #SYM.Def
+				ldy #SYM.DefSize
+				sta (ZPSymBufPtr),y
+
+				ldy #SYM.Q
+
+.1				lda (ZPSymBufPtr),y
+				clc
+				adc #SYM.Q.ARRAY
+				sta (ZPSymBufPtr),y
+
 				jsr CC.GetNextCharNB	Skip [
 				bcs .99
 
 				cmp #']'
-				bne .3
+				bne .2
 
-.2				ldy #SYM.Q
+				ldy #SYM.Q
 				lda (ZPSymBufPtr),y
-				bit #SYM.Q.PPPOINTER
-				beq .99
+				and #SYM.Q.PPPOINTER
+				beq .99					[] only allowed for *
 
-				and #SYM.Q.AAARRAY
-				cmp #SYM.Q.AAARRAY
+				>LDYAI 0				set as [0] (deref)
+				jsr CC.SYM.AddWord
+				bra .3
+
+.2				jsr CC.EXP.IntConst
 				bcs .99
 
-*				ldy #SYM.Q
-				lda (ZPSymBufPtr),y
-*				clc
-				adc #SYM.Q.ARRAY
-				sta (ZPSymBufPtr),y
-
-				jsr CC.GetNextCharNB	Skip ]
-				bcs CC.SYM.SetAddr
-
-				cmp #'['
-				beq .2
-
-				bra CC.SYM.SetAddr
-*--------------------------------------
-.3				jsr CC.EXP.IntConst
-				bcs .9
-
-				jsr CC.SYM.SetSizeOf
+				jsr CC.SYM.AddWord
 
 				jsr CC.GetCharNB
 				bcs .99
@@ -130,17 +123,22 @@ CC.SYM.NewV		cmp #'['
 				cmp #']'
 				bne .99
 
-				jsr CC.GetNextCharNB	Skip ]
+.3				jsr CC.GetNextCharNB	Skip ]
 				bcs CC.SYM.SetAddr
 
-*				cmp #'['
-*				bne CC.SYM.SetAddr
+				cmp #'['
+				bne CC.SYM.SetAddr
 
-				bra CC.SYM.SetAddr
+				ldy #SYM.Q
+				lda (ZPSymBufPtr),y
+				and #SYM.Q.AAARRAY
+				cmp #SYM.Q.AAARRAY
+				beq .99					already [][][]
+
+				bra .1
 
 .99				lda #E.CSYN
 				sec
-
 .9				rts
 *--------------------------------------
 CC.SYM.SetAddr	ldy #SYM.Q
@@ -164,19 +162,23 @@ CC.SYM.SetAddrG	jsr CC.SYM.GetSymSizeOfInAXC
 
 *				clc / sec				A,X=Size, CS if pointer
 
+				pha
+
 				ldy #SYM.Addr
 
 				lda ZPCCData
 				sta (ZPSymBufPtr),y
 
-				adc ZPCCData
-				sta ZPCCData
-
 				iny
 
 				lda ZPCCData+1
 				sta (ZPSymBufPtr),y
 
+				pla
+				clc
+				adc ZPCCData
+				sta ZPCCData
+
 				txa
 				adc ZPCCData+1
 				sta ZPCCData+1
@@ -214,6 +216,125 @@ CC.SYM.SetAddrL	jsr CC.SYM.GetSymSizeOfInAXC
 				sec
 				rts
 *--------------------------------------
+CC.SYM.PushAddr	ldy #SYM.SC
+				lda (ZPSymBufPtr),y
+				beq .1					SYM.SC.STATIC
+* LOCAL
+				>LDYA L.PCC.PushLAddrH
+				jsr CODE.EmitPCC
+				bcs .9
+
+				ldy #SYM.Addr
+				lda (ZPSymBufPtr),y
+				eor #$FF
+				inc
+				jsr CODE.LDAI
+				bcs .9
+
+				>LDYA L.PCC.PushLAddrL
+				jmp CODE.EmitPCC
+
+* GLOBAL
+
+.1				ldy #SYM.Addr+1
+				lda (ZPSymBufPtr),y
+				tax
+
+				dey
+				lda (ZPSymBufPtr),y
+
+				jsr CODE.LDAXI
+				bcs .9
+
+				ldy #SYM.Q
+				lda (ZPSymBufPtr),y
+				and #SYM.Q.CONST
+				beq .2
+
+				>LDYA L.PCC.PushIAddr
+				jmp CODE.EmitPCC
+
+.2				>LDYA L.PCC.PushUAddr
+				jmp CODE.EmitPCC
+
+.9				rts
+*--------------------------------------
+CC.SYM.GetAddr1	ldy #SYM.SC
+				lda (ZPSymBufPtr),y
+				beq .1					SYM.SC.STATIC
+* LOCAL
+				ldy #SYM.Addr
+				lda (ZPSymBufPtr),y
+				eor #$FF
+				inc
+				jsr CODE.LDAI
+				bcs .9
+
+				>LDYA L.PCC.GetLAddr1
+				jmp CODE.EmitPCC
+* GLOBAL
+
+.1				ldy #SYM.Addr+1
+				lda (ZPSymBufPtr),y
+				tax
+
+				dey
+				lda (ZPSymBufPtr),y
+
+				jsr CODE.LDAXI
+				bcs .9
+
+				ldy #SYM.Q
+				lda (ZPSymBufPtr),y
+				and #SYM.Q.CONST
+				beq .2
+
+				>LDYA L.PCC.GetIAddr1
+				jmp CODE.EmitPCC
+				
+.2				>LDYA L.PCC.GetUAddr1
+				jmp CODE.EmitPCC
+
+.9				rts
+*--------------------------------------
+CC.SYM.GetAddr2	ldy #SYM.SC
+				lda (ZPSymBufPtr),y
+				beq .1					SYM.SC.STATIC
+* LOCAL
+				ldy #SYM.Addr
+				lda (ZPSymBufPtr),y
+				eor #$FF
+				inc
+				jsr CODE.LDAI
+				bcs .9
+
+				>LDYA L.PCC.GetLAddr2
+				jmp CODE.EmitPCC
+* GLOBAL
+
+.1				ldy #SYM.Addr+1
+				lda (ZPSymBufPtr),y
+				tax
+
+				dey
+				lda (ZPSymBufPtr),y
+
+				jsr CODE.LDAXI
+				bcs .9
+
+				ldy #SYM.Q
+				lda (ZPSymBufPtr),y
+				and #SYM.Q.CONST
+				beq .2
+
+				>LDYA L.PCC.GetIAddr2
+				jmp CODE.EmitPCC
+
+.2				>LDYA L.PCC.GetUAddr2
+				jmp CODE.EmitPCC
+
+.9				rts
+*--------------------------------------
 CC.SYM.NewKey	>PUSHA
 				>PUSHW ZPLineBufPtr
 				>SYSCALL SListNewKey
@@ -223,11 +344,106 @@ CC.SYM.NewKey	>PUSHA
 
 .9				rts						Y,A = KeyID, X = KeyLen
 *--------------------------------------
+CC.SYM.AddWord	pha
+				phy
+
+				ldy #SYM.DefSize
+				lda (ZPSymBufPtr),y
+				pha
+
+				inc
+				inc
+				sta (ZPSymBufPtr),y
+
+				ply
+
+				pla
+				sta (ZPSymBufPtr),y
+				iny
+				pla
+				sta (ZPSymBufPtr),y
+CC.SYM.AddWord.RTS
+				rts
+*--------------------------------------
+CC.SYM.NewCPSID	>LDYA.G CC.CPSID
+				>STYA.G CC.CPSPFX+2
+
+				>LDA.G CC.CPSID+1
+				inc
+				cmp #'Z'+1
+				bne .1
+				
+				dey						CC.CPSID
+				lda (pData),y
+				inc
+				cmp #'Z'+1
+				beq .9
+				
+				sta (pData),y
+
+				lda #'A'
+				iny						CC.CPSID+1
+				
+.1				sta (pData),y				
+
+				clc
+				rts
+
+.9				lda #E.OOH
+*				sec
+				rts
+*--------------------------------------
+CC.SYM.NewA		bit bPass2
+				bmi .8
+
+				>STA.G CC.CPSPFX		A = "B"reak, "C"ontinue...
+
+				>PUSHB.G CC.hScopes		Global Scope
+				>PUSHEA.G CC.CPSPFX
+
+				>SYSCALL SListNewKey
+				bcs CC.SYM.AddWord.RTS
+
+				>STYA.G CC.SymID		Y,A = KeyID
+
+				lda #SYM.T.VOID
+				sta (ZPSymBufPtr)		#SYM.T
+
+				lda #SYM.Q.POINTER
+				ldy #SYM.Q
+				sta (ZPSymBufPtr),y
+
+				lda #SYM.SC.STATIC
+				iny						#SYM.SC
+				sta (ZPSymBufPtr),y
+
+				iny
+				lda #0
+
+.1				sta (ZPSymBufPtr),y
+				iny
+				cpy #SYM.Def
+				bne .1
+
+				tya
+				ldy #SYM.DefSize
+				sta (ZPSymBufPtr),y
+
+				>LDYA ZPCCCode
+				jsr CC.SYM.SetAddrYA
+
+				>LDA.G CC.hScopes		Global Scope
+				jmp CC.SYM.Store.1
+
+.8				clc
+
+.99				rts
+*--------------------------------------
 CC.SYM.StoreF	>LDA.G CC.hScopes
 
 				bit bPass2
 				bpl CC.SYM.Store.1
-				
+
 				clc
 				rts
 *--------------------------------------
@@ -332,6 +548,44 @@ CC.SYM.Lookup	>LDA.G CC.LookupIdx
 *				sec
 				rts
 *--------------------------------------
+CC.SYM.LookupA	bit bPass2
+				bmi .1
+
+				ldx #0
+				ldy #0
+				clc
+				rts
+
+.1				>STA.G CC.CPSPFX		A = "B"reak, "C"ontinue...
+
+				>PUSHB.G CC.hScopes		Global Scope
+				>PUSHEA.G CC.CPSPFX
+				>SYSCALL SListLookup
+				bcs .99
+
+				>STYA.G CC.SymID		Y,A = KeyID
+
+				>PUSHB.G CC.hScopes
+				>PUSHW.G CC.SymID
+				>PUSHW ZPSymBufPtr
+				>PUSHWI 65535			all
+				>PUSHWZ					From Start
+				>SYSCALL SListGetData
+				bcs .99
+
+				ldy #SYM.Addr
+				lda (ZPSymBufPtr),y
+
+				tax
+
+				iny
+				lda (ZPSymBufPtr),y
+				tay
+
+*				clc
+
+.99				rts
+*--------------------------------------
 CC.SYM.LookupFree
 				>LDA.G CC.LookupIdx
 				cmp #CC.LookupIdx
@@ -367,92 +621,35 @@ CC.SYM.LookupFreeAll
 				clc
 				rts
 *--------------------------------------
-* Y,A = value T/Q
+* on RT stack : Addr,value
 *--------------------------------------
-CC.SYM.PushValue
-				jsr CC.SYM.CheckTypeYA
+CC.SYM.SetValue	jsr CC.SYM.GetSymSizeOfInAXC
+				tay
+				dey
+				jsr CODE.LDYI
 				bcs .9
 
-				jsr CC.SYM.GetSymSizeOfInAXC
-				tax
-				jsr CODE.LDXI
+				>LDYA L.PCC.SetValue
+				jmp CODE.EmitPCC
 
-				jsr CC.SYM.GetAddrInYA
-				beq .1
-
-				jsr CODE.LDYAI
-				jsr CODE.PushXFromYA
-
-				clc
-				rts
-
-.1				jsr CODE.GetLocal		Y = local address
-				jsr CODE.PushXFromYA
-
-				clc
-.9				rts
-*--------------------------------------
-CC.SYM.PopValue	jsr CC.SYM.CheckTypeYA
-				bcs .9
-
-				jsr CC.SYM.GetSymSizeOfInAXC
-				tax
-				jsr CODE.LDXI
-
-				jsr CC.SYM.GetAddrInYA
-				beq .1
-
-				jsr CODE.LDYAI
-				jsr CODE.PopXToYA
-
-				clc
-				rts
-
-.1				jsr CODE.GetLocal		Y = local address
-				jsr CODE.PopXToYA
-
-				clc
-.9				rts
-*--------------------------------------
-CC.SYM.SetValue	jsr CC.SYM.CheckTypeYA
-				bcs .9
-
-				jsr CC.SYM.GetSymSizeOfInAXC
-				tax
-				jsr CODE.LDXI
-
-				jsr CC.SYM.GetAddrInYA
-				beq .1
-
-				jsr CODE.LDYAI
-				jsr CODE.SetXToYA
-
-				clc
-				rts
-
-.1				jsr CODE.GetLocal		Y = local address
-				jsr CODE.SetXToYA
-
-				clc
 .9				rts
 *--------------------------------------
 * in : Y,A = T/Q
 * out : CC
 *		CS, A = E.TMISMATCH
 *--------------------------------------
-CC.SYM.CheckTypeYA
+CC.SYM.CheckTypeYA.OLD
 				pha
 				tya
 				cmp (ZPSymBufPtr)
 				bne .9
 
 				pla
-				phy
-				ldy #SYM.Q
-				cmp (ZPSymBufPtr),y
-				bne .9
 
-				ply
+				ldy #SYM.Q
+				eor (ZPSymBufPtr),y
+				and #$FC				ignore SYM.Q.FUNC+SYM.Q.FASTCALL
+				bne .9
 
 				clc
 				rts
@@ -476,7 +673,7 @@ CC.SYM.GetTypeInYA
 *--------------------------------------
 * in : Y,A = T/Q
 *--------------------------------------
-CC.SYM.SetTypeYA
+CC.SYM.SetTypeYA.OLD
 				phy
 				ldy #SYM.Q
 				sta (ZPSymBufPtr),y
@@ -497,7 +694,16 @@ CC.SYM.GetSymSizeOfInAXC
 CC.SYM.GetYASizeOfInAXC
 
 				bit #SYM.Q.PPPOINTER
-				bne .1
+				beq .1
+
+				lda #2					pointer
+				ldx #0
+
+				sec						+1 for hMem Storage
+				rts
+
+.1				bit #SYM.Q.AAARRAY
+				bne .2
 
 				lda CC.TYPESIZE-1,y
 				ldx #0
@@ -505,10 +711,36 @@ CC.SYM.GetYASizeOfInAXC
 				clc
 				rts
 
-.1				lda #2					pointer
-				ldx #0
+.2				ldx CC.TYPESIZE-1,y
 
-				sec						+1 for hMem Storage
+				ldy #SYM.Def
+				lda (ZPSymBufPtr),y
+				>PUSHA
+				iny
+				lda (ZPSymBufPtr),y
+				>PUSHA
+
+				ldy #1
+
+.3				dex
+				beq .5
+
+.4				lda (pStack),y
+				clc
+				adc (pStack),y
+				sta (pStack),y
+
+				lda (pStack)
+				adc (pStack)
+				sta (pStack)
+				dex
+				bne .4
+
+.5				>PULLA
+				tax
+				>PULLA
+
+				clc
 				rts
 *--------------------------------------
 * in/out : A,X,C = size
@@ -526,19 +758,6 @@ CC.SYM.SetSizeOf
 				pla
 				rts
 *--------------------------------------
-CC.SYM.GetAddrInYA
-				ldy #SYM.Addr+1
-				lda (ZPSymBufPtr),y
-				pha
-
-				dey
-				lda (ZPSymBufPtr),y
-				tay
-
-				pla						Z if Local
-
-				rts
-*--------------------------------------
 CC.SYM.SetAddrYA
 				phy
 
diff --git a/BIN/CC.S.TYPE.txt b/BIN/CC.S.TYPE.txt
index a3eb2099..d49f7f77 100644
--- a/BIN/CC.S.TYPE.txt
+++ b/BIN/CC.S.TYPE.txt
@@ -150,7 +150,7 @@ CC.TYPE			sta (pStack)			T
 .10				jsr CC.IsLetter
 				bcs .8
 
-				>LDYA L.CC.FTYPES
+				>LDYA L.CC.FTYPES		int fastcall f() ?
 				jsr CC.LookupID
 				bcs .8					next char is an identifier
 				
@@ -163,7 +163,7 @@ CC.TYPE			sta (pStack)			T
 				bcs .9					next char is an identifier, ",", "(",")"
 				
 .8				clc
-				rts
+				rts		
 *--------------------------------------
 * in : Y,A = type/qual
 * out : X = size
diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt
index 0f87fbac..6c1a8916 100644
--- a/BIN/CC.S.txt
+++ b/BIN/CC.S.txt
@@ -50,14 +50,6 @@ SYM.Def			.EQ 8					Funtions : fTQ,a1TQ,a2TQ....
 *
 SYM				.EQ 10
 *--------------------------------------
-CPS.ParentID	.EQ 0
-CPS.hSYM		.EQ 2
-*
-CPS.Cont		.EQ 4
-CPS.Break		.EQ 6
-*
-CPS				.EQ 8
-*--------------------------------------
 * Zero Page Segment, up to 32 bytes
 *--------------------------------------
 				.DUMMY
@@ -76,20 +68,22 @@ ZPCCStack		.BS 2
 
 ZPLineBufPtr	.BS 2
 ZPLookupPtr		.BS 2
-
 CStackPtr		.BS 1
 LocalPtr		.BS 1
-
 ScopeIdx		.BS 1
 bLocalScope		.BS 1
 
 ZPSymBufPtr		.BS 2
-
-*				.BS 1
-*				.BS 1
-
 ZPLookupSymPtr	.BS 2
 
+bInitCode		.BS 1
+StmtPreOp		.BS 1
+ExpState		.BS 1
+*ExpState.VinYA		.EQ $10
+ExpState.AonStack	.EQ $20
+ExpState.AinPTR		.EQ $40
+ExpState.VonStack	.EQ $80
+ZPState			.BS 1
 ZS.END			.ED
 *--------------------------------------
 *			File Header (16 Bytes)
@@ -127,50 +121,27 @@ L.MSG.SUMMARY	.DA MSG.SUMMARY
 L.MSG.NOMAIN	.DA MSG.NOMAIN
 L.ENV.INCLUDE	.DA ENV.INCLUDE
 *--------------------------------------
-L.CC.PREOPS		.DA CC.PREOPS
-J.CC.PREOPS		.DA CC.EXP.GetRef
-				.DA CC.EXP.GetDeref
-L.CC.POSTOPS	.DA CC.POSTOPS
 L.CC.AOPS		.DA CC.AOPS
+L.CC.PREOPS		.DA CC.PREOPS
+J.CC.PREOPS		.DA CC.EXP.Ref
+				.DA CC.EXP.Deref
+				.DA CC.EXP.Abs
+				.DA CC.EXP.negate
+				.DA CC.EXP.lnot
+				.DA CC.EXP.bnot
+				.DA CC.EXP.preinc
+				.DA CC.EXP.predec
+L.CC.POSTOPS	.DA CC.POSTOPS
+J.CC.POSTOPS	.DA CC.EXP.postinc
+				.DA CC.EXP.postdec
+				.DA CC.EXP.array
+				.DA CC.EXP.Struct
+				.DA CC.EXP.pStruct
 L.CC.BOPS		.DA CC.BOPS
-J.CC.bBOPS		.DA CC.BOPS.bMUL
-				.DA CC.BOPS.bDIV
-				.DA CC.BOPS.bMOD
-				.DA CC.BOPS.ADD
-				.DA CC.BOPS.SUB
-				.DA CC.BOPS.SHL
-				.DA CC.BOPS.SHR
-				.DA CC.BOPS.L
-				.DA CC.BOPS.LE
-				.DA CC.BOPS.G
-				.DA CC.BOPS.GE
-				.DA CC.BOPS.EQ
-				.DA CC.BOPS.NE
-				.DA CC.BOPS.AND
-				.DA CC.BOPS.OR
-				.DA CC.BOPS.EOR
-				.DA CC.BOPS.LAND
-				.DA CC.BOPS.LOR
-J.CC.cBOPS		.DA CC.BOPS.cMUL
-				.DA CC.BOPS.cDIV
-				.DA CC.BOPS.cMOD
-				.DA CC.BOPS.ADD
-				.DA CC.BOPS.SUB
-				.DA CC.BOPS.SHL
-				.DA CC.BOPS.SHR
-				.DA CC.BOPS.L
-				.DA CC.BOPS.LE
-				.DA CC.BOPS.G
-				.DA CC.BOPS.GE
-				.DA CC.BOPS.EQ
-				.DA CC.BOPS.NE
-				.DA CC.BOPS.AND
-				.DA CC.BOPS.OR
-				.DA CC.BOPS.EOR
-				.DA CC.BOPS.LAND
-				.DA CC.BOPS.LOR
 L.CC.DIRS		.DA CC.DIRS
 L.CC.KW			.DA CC.KW
+L.CC.KW2.IF		.DA CC.KW2.IF
+L.CC.KW2.DO		.DA CC.KW2.DO
 L.CC.SCSPEC		.DA CC.SCSPEC
 L.CC.TYPEQUAL	.DA CC.TYPEQUAL
 L.CC.TYPESPEC	.DA CC.TYPESPEC
@@ -186,6 +157,7 @@ J.CC.KW			.DA CC.KW.IF
 				.DA CC.KW.FOR
 				.DA CC.KW.SWITCH
 				.DA CC.KW.CASE
+				.DA CC.KW.DEFAULT
 				.DA CC.KW.BREAK
 				.DA CC.KW.CONTINUE
 				.DA CC.KW.RETURN
@@ -224,6 +196,80 @@ J.CC.STYPES		.DA CC.TYPE.SCHAR
 L.CC.MAIN		.DA CC.MAIN
 L.CC.LIBC		.DA CC.LIBC
 L.PCC.FH		.DA PCC.FH
+*--------------------------------------
+L.PCC.DEBUG		.DA PCC.DEBUG
+L.PCC.SLEEP		.DA PCC.SLEEP
+L.PCC.ENTER		.DA PCC.ENTER
+L.PCC.LEAVE		.DA PCC.LEAVE
+L.PCC.ADDLOCAL	.DA PCC.ADDLOCAL
+L.PCC.SetRetValue	.DA PCC.SetRetValue
+L.PCC.TestZero1	.DA PCC.TestZero1
+L.PCC.TestZero2	.DA PCC.TestZero2
+L.PCC.TestZeroX	.DA PCC.TestZeroX
+L.PCC.TestnZero1	.DA PCC.TestnZero1
+L.PCC.TestnZero2	.DA PCC.TestnZero2
+L.PCC.TestnZeroX	.DA PCC.TestnZeroX
+L.PCC.PushLAddrH	.DA PCC.PushLAddrH
+L.PCC.PushLAddrL	.DA PCC.PushLAddrL
+L.PCC.PushIAddr	.DA PCC.PushIAddr
+L.PCC.PushUAddr	.DA PCC.PushUAddr
+L.PCC.GetLAddr1	.DA PCC.GetLAddr1
+L.PCC.GetIAddr1	.DA PCC.GetIAddr1
+L.PCC.GetUAddr1	.DA PCC.GetUAddr1
+L.PCC.PopAddr1	.DA PCC.PopAddr1
+L.PCC.SetValue	.DA PCC.SetValue
+L.PCC.GetLAddr2	.DA PCC.GetLAddr2
+L.PCC.GetIAddr2	.DA PCC.GetIAddr2
+L.PCC.GetUAddr2	.DA PCC.GetUAddr2
+L.PCC.PopAddr2	.DA PCC.PopAddr2
+L.PCC.Deref2	.DA PCC.Deref2
+L.PCC.PushDeref2	.DA PCC.PushDeref2
+L.PCC.PushValue	.DA PCC.PushValue
+L.PCC.Inc1		.DA PCC.Inc1
+L.PCC.Inc2		.DA PCC.Inc2
+L.PCC.Inc4		.DA PCC.Inc4
+L.PCC.Dec1		.DA PCC.Dec1
+L.PCC.Dec2		.DA PCC.Dec2
+L.PCC.Dec4		.DA PCC.Dec4
+*--------------------------------------
+L.PCC.bBOPS		.DA PCC.BOPS.bMUL
+				.DA PCC.BOPS.bDIV
+				.DA PCC.BOPS.bMOD
+				.DA PCC.BOPS.ADD
+				.DA PCC.BOPS.SUB
+				.DA PCC.BOPS.SHL
+				.DA PCC.BOPS.SHR
+				.DA PCC.BOPS.L
+				.DA PCC.BOPS.G
+				.DA PCC.BOPS.LE
+				.DA PCC.BOPS.GE
+				.DA PCC.BOPS.EQ
+				.DA PCC.BOPS.NE
+				.DA PCC.BOPS.LAND
+				.DA PCC.BOPS.AND
+				.DA PCC.BOPS.LOR
+				.DA PCC.BOPS.OR
+				.DA PCC.BOPS.EOR
+*--------------------------------------
+L.PCC.cBOPS		.DA PCC.BOPS.cMUL
+				.DA PCC.BOPS.cDIV
+				.DA PCC.BOPS.cMOD
+				.DA PCC.BOPS.ADD
+				.DA PCC.BOPS.SUB
+				.DA PCC.BOPS.SHL
+				.DA PCC.BOPS.SHR
+				.DA PCC.BOPS.L
+				.DA PCC.BOPS.G
+				.DA PCC.BOPS.LE
+				.DA PCC.BOPS.GE
+				.DA PCC.BOPS.EQ
+				.DA PCC.BOPS.NE
+				.DA PCC.BOPS.LAND
+				.DA PCC.BOPS.AND
+				.DA PCC.BOPS.LOR
+				.DA PCC.BOPS.OR
+				.DA PCC.BOPS.EOR
+*--------------------------------------
 				.DA 0
 *--------------------------------------
 * Called once at process creation
@@ -263,7 +309,7 @@ CS.RUN			>PUSHW L.MSG.GREETINGS
 
 				jsr CODE.Init
 
-				jsr CS.RUN.FOpen1st
+				jsr CC.FIO.FOpen1st
 				bcs CS.INIT.RTS
 *--------------------------------------
 CS.RUN.CLOOP	jsr CC.CompileFile
@@ -271,7 +317,7 @@ CS.RUN.CLOOP	jsr CC.CompileFile
 				cmp #MLI.E.EOF
 				bne .9
 
-				jsr CS.RUN.FClose
+				jsr CC.FIO.FClose
 				bne CS.RUN.CLOOP
 *--------------------------------------
 				jsr PrintSummary
@@ -279,19 +325,19 @@ CS.RUN.CLOOP	jsr CC.CompileFile
 
 				jsr CC.Link
 				bcs .99
-
-				jsr CheckMain
+*			>DEBUG
+				jsr CC.Link.CheckMain
 				bcs .99
 
 				dec bPass2
 
-				jsr CS.RUN.FCreate
+				jsr CC.FIO.FCreate
 				bcs .99
 
 				jsr CODE.Init
 				bcs .99
 
-				jsr CS.RUN.FOpen1st
+				jsr CC.FIO.FOpen1st
 				bcs .99
 *--------------------------------------
 .2				jsr CC.CompileFile
@@ -299,7 +345,7 @@ CS.RUN.CLOOP	jsr CC.CompileFile
 				cmp #MLI.E.EOF
 				bne .9
 
-				jsr CS.RUN.FClose
+				jsr CC.FIO.FClose
 				bne .2
 *--------------------------------------
 .8				lda #0					Exit Code = Success
@@ -372,130 +418,6 @@ CS.RUN.ARGS		inc ArgIndex
 				sec
 				rts
 *--------------------------------------
-CS.RUN.FOpen1st	>LDA.G CC.InFileArg
-				>SYSCALL ArgV
-
-CS.RUN.FOpen	phy
-				pha
-
-				>PUSHW L.MSG.READING
-				pla
-				pha
-				>PUSHYA
-				>PUSHBI 2
-				>SYSCALL PrintF
-
-				pla
-				ply
-				>PUSHYA
-				>PUSHBI	O.RDONLY
-				>PUSHBI S.FI.T.TXT
-				>PUSHWZ					Aux type
-				>SYSCALL FOpen
-				bcs .9
-
-				tax
-
-				>LDA.G hFilePtr
-				inc
-				sta (pData),y
-				tay
-				txa
-				sta (pData),y
-
-				>LDA.G LineCntPtr
-				inc
-				inc
-				sta (pData),y
-				tay
-				lda #0
-				sta (pData),y
-				iny
-				sta (pData),y
-
-.9				rts
-*--------------------------------------
-CS.RUN.FGetS	>LDYA.G LineBufPtr
-				>STYA ZPLineBufPtr
-
-				>LDA.G LineCntPtr
-				tay
-				lda (pData),y
-				inc
-				sta (pData),y
-				bne .1
-
-				iny
-				lda (pData),y
-				inc
-				sta (pData),y
-
-.1				>LDA.G hFilePtr
-				tay
-				lda (pData),y
-				>PUSHA
-
-				>PUSHW ZPLineBufPtr
-				>PUSHWI 255
-				>SYSCALL FGetS
-				bcs .9
-
-				>LDA.G bTrace
-				bpl .8
-
-				jsr PrintTraceMsg
-
-.8
-
-.9				rts
-*--------------------------------------
-CS.RUN.FClose	>LDA.G hFilePtr
-				cmp #hFilePtr
-				beq .8
-
-				tay
-				lda (pData),y
-
-				>SYSCALL FClose
-
-				>LDA.G hFilePtr
-				dec
-				sta (pData),y
-				cmp #hFilePtr
-				beq .8
-
-				>LDA.G LineCntPtr
-				dec
-				dec
-				sta (pData),y			NZ
-
-.8				rts
-*--------------------------------------
-CS.RUN.FCreate	>LDA.G CC.OutFileArg
-				>SYSCALL ArgV
-				>STYA ZPPtr1
-
-				>PUSHW L.MSG.GENERATING
-				>PUSHW ZPPtr1
-				>PUSHBI 2
-				>SYSCALL PrintF
-
-				>PUSHW ZPPtr1
-				>PUSHBI	O.WRONLY+O.CREATE
-				>PUSHBI S.FI.T.BIN
-				>PUSHWI	$2000			Aux type
-				>SYSCALL FOpen
-				bcs .9
-
-				>STA.G CC.hOutFile
-
-				>PUSHA					A = CC.hOutFile
-				>PUSHW L.PCC.FH
-				>PUSHWI PCC.FH.L
-				>SYSCALL FWrite
-
-.9				rts
-*--------------------------------------
 CS.DOEVENT		sec
 				rts
 *--------------------------------------
@@ -510,7 +432,9 @@ CS.QUIT			jsr CODE.Quit
 .8				clc
 				rts
 *--------------------------------------
-PrintTraceMsg	ldy #S.PS.hStdErr
+PrintTraceMsg
+				ldy #S.PS.hStdOut
+*				ldy #S.PS.hStdErr
 				lda (pPS),y
 				>PUSHA
 
@@ -641,45 +565,8 @@ PrintSummary	lda ZPCCCode+1
 
 				>PUSHBI 6
 				>SYSCALL PrintF
+*			>DEBUG
 				rts
-*--------------------------------------
-CheckMain		>PUSHB.G CC.hScopes
-
-				>PUSHW L.CC.MAIN
-				>SYSCALL SListLookup
-				bcs .9
-
-				>STYA ZPPtr1			SymID
-
-				>PUSHB.G CC.hScopes
-				>PUSHW ZPPtr1			SymID
-				>PUSHW ZPSymBufPtr
-				>PUSHWI 65535			all
-				>PUSHWZ					From Start
-				>SYSCALL SListGetData
-				bcs .99
-
-				ldy #SYM.Addr
-				lda (ZPSymBufPtr),y
-				iny
-				ora (ZPSymBufPtr),y
-				beq .9
-
-				lda (ZPSymBufPtr),y
-				sta PCC.FH+PCC.FH.MAIN+1
-				dey
-				lda (ZPSymBufPtr),y
-				sta PCC.FH+PCC.FH.MAIN
-
-*				clc
-
-				rts
-
-.9				>LDYA L.MSG.NOMAIN
-				>SYSCALL puts
-				lda #E.CSYN
-				sec
-.99				rts
 *--------------------------------------
 				.INB usr/src/bin/cc.s.code
 				.INB usr/src/bin/cc.s.core
@@ -692,7 +579,7 @@ CheckMain		>PUSHB.G CC.hScopes
 				.INB usr/src/bin/cc.s.exp
 				.INB usr/src/bin/cc.s.sym
 				.INB usr/src/bin/cc.s.link
-				.INB usr/src/bin/cc.s.exec
+				.INB usr/src/bin/cc.s.fio
 *--------------------------------------
 CS.END
 *--------------------------------------
@@ -712,276 +599,18 @@ MSG.DEBUG		.AS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n"
 MSG.TRACE		.AZ "%5D> %s\r\n"
 MSG.RTSTK		.AZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n"
 MSG.ERROR		.AZ "       %s^\r\n"
-MSG.SUMMARY		.AZ "\r\n*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n\r\n"
+MSG.SUMMARY		.AZ "*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n"
 MSG.NOMAIN		.AZ "*** No 'main()' function defined."
 *--------------------------------------
-ENV.INCLUDE		.AZ "INCLUDE"
-ENV.LIB			.AZ "LIB"
-*--------------------------------------
 OptionList		.AS "DdTt"
 OptionVars		.DA #bDebug,#bDebug,#bTrace,#bTrace
 *--------------------------------------
-* PCC = Pre Compiled Code
-*--------------------------------------
-ZS.RT.Ptr1		.EQ ZPBIN
-*--------------------------------------
-PCC.FH			.PH $2000
-PCC.FH.2000		cld
-				jmp (PCC.FH.JMP,x)
-				.DA #$61				6502,Level 1 (65c02)
-				.DA #1					BIN Layout Version 1
-				.DA #0					S.PS.F.EVENT
-				.DA #0
-PCC.FH.CSSIZE	.EQ *-PCC.FH.2000
-			.DA $FFFF					* Code Size (without Constants)
-PCC.FH.DSSIZE	.EQ *-PCC.FH.2000
-			.DA $FFFF					* Data Size
-				.DA #256				Stack Size
-				.DA #2					ZP Size
-				.DA 0
-
-PCC.FH.JMP		.DA PCC.FH.INIT
-				.DA PCC.FH.RUN
-				.DA PCC.FH.DOEVENT
-				.DA	PCC.FH.QUIT
-PCC.FH.IDATA 	.EQ *-PCC.FH.2000
-			.DA $FFFF
-				.DA 0
-
-PCC.FH.INIT
-* TODO : LoadLib code
-PCC.FH.QUIT
-* TODO : UnloadLib code
-PCC.FH.DOEVENT	clc
-				rts
-
-* int main(int argc, char *argv[]) ;
-
-PCC.FH.RUN		ldy #S.PS.ARGC
-				lda (pPS),y
-
-.1				pha
-				>SYSCALL ArgV
-				bcs .2
-
-				>STYA ZS.RT.Ptr1
-
-				pla
-				pha
-				asl
-				tay
-
-				lda ZS.RT.Ptr1
-				sta (pData),y
-
-				lda ZS.RT.Ptr1+1
-				iny
-				sta (pData),y
-
-				pla
-				inc
-				bra .1
-
-.2				pla
-
-				>PUSHWI 0				returned int
-
-				lda #0
-				>PUSHA
-				ldy #S.PS.ARGC
-				lda (pPS),y
-				>PUSHA					int ARGC
-				>PUSHW pData			*char[] ARGV
-			>DEBUG
-PCC.FH.MAIN		.EQ *-PCC.FH.2000+1
-			jsr $FFFF					* jsr main
-				>PULLA
-				inc pStack				pull returned int
-				sec
-				rts
-
-PCC.FH.SYSCALL	jsr A2osX.SYSCALL
-				bcc .8
-
-				inc pStack
-				eor #$ff
-				inc
-				>PUSHA					int -ERROR code...
-				ldy #1
-				lda #$FF
-				sta (pStack),y			on stack
-				rts
-
-.8
-
-PCC.FH.CS		.EP
-PCC.FH.L		.EQ *-PCC.FH
-*--------------------------------------
-PCC.DEBUG		>DEBUG
-PCC.DEBUG.L		.EQ *-PCC.DEBUG
-*--------------------------------------
-PCC.SLEEP		>SLEEP
-PCC.SLEEP.L		.EQ *-PCC.SLEEP
-*--------------------------------------
-PCC.ENTER		ldx pBase
-				phx
-				clc
-				adc pStack				A = Local Size
-				sta pBase
-
-PCC.ENTER.L		.EQ *-PCC.ENTER
-*--------------------------------------
-PCC.LEAVE		lda pBase
-				sta pStack
-				pla
-				sta pBase
-				rts
-
-PCC.LEAVE.L		.EQ *-PCC.LEAVE
-*--------------------------------------
-PCC.ADDLOCAL	clc
-				adc pStack
-				sta pStack
-
-PCC.ADDLOCAL.L	.EQ *-PCC.ADDLOCAL
-*--------------------------------------
-PCC.GETLOCAL	clc
-				adc pBase
-				tay
-				lda pBase+1
-
-PCC.GETLOCAL.L	.EQ *-PCC.GETLOCAL
-*--------------------------------------
-PCC.SETRETVALUE	ldy #0
-.1				>PULLA
-				sta (pBase),y
-				iny
-				dex
-				bne .1
-
-PCC.SETRETVALUE.L	.EQ *-PCC.SETRETVALUE
-*--------------------------------------
-PCC.PushXFromYA	>STYA ZS.RT.Ptr1
-				txa
-				dec
-				tay
-
-.1				lda (ZS.RT.Ptr1),y
-				>PUSHA
-				dey
-				bpl .1
-
-PCC.PushXFromYA.L	.EQ *-PCC.PushXFromYA
-*--------------------------------------
-PCC.PopXToYA	>STYA ZS.RT.Ptr1
-
-				ldy #0
-
-.1				>PULLA
-				sta (ZS.RT.Ptr1),y
-				iny
-				dex
-				bne .1
-
-PCC.PopXToYA.L	.EQ *-PCC.PopXToYA
-*--------------------------------------
-PCC.SetXToYA	>STYA ZS.RT.Ptr1
-
-				ldy #0
-
-.1				lda (pStack),y
-				sta (ZS.RT.Ptr1),y
-				iny
-				dex
-				bne .1
-
-PCC.SetXToYA.L	.EQ *-PCC.SetXToYA
-*--------------------------------------
-PCC.Test0X		lda #0
-
-.1				ora (pStack)
-				inc pStack
-				dex
-				bne .1
-
-				tay
-.2				bne .2+5
-				.HS 4C					JMP abs
-
-PCC.Test0X.L	.EQ *-PCC.Test0X
-*--------------------------------------
-PCC.SETpBASEp1	lda pBase+1
-				sta ZS.RT.Ptr1+1
-
-PCC.SETpBASEp1.L	.EQ *-PCC.SETpBASEp1
-*--------------------------------------
-PCC.SETpBASEpA	clc
-				adc pBase
-				sta ZS.RT.Ptr1
-				ldy #1
-
-PCC.SETpBASEpA.L	.EQ *-PCC.SETpBASEpA
-*--------------------------------------
-PCC.Deref		>PUSHB (ZS.RT.Ptr1),y
-				>PUSHB (ZS.RT.Ptr1)
-
-PCC.Deref.L		.EQ *-PCC.Deref
-*--------------------------------------
-PCC.PUSHpBASEp1	>PUSHB pBase+1
-
-PCC.PUSHpBASEp1.L	.EQ *-PCC.PUSHpBASEp1
-*--------------------------------------
-PCC.PUSHpBASEpA	clc
-				adc pBase
-				>PUSHA
-
-PCC.PUSHpBASEpA.L	.EQ *-PCC.PUSHpBASEpA
-*--------------------------------------
-PCC.PushFromPtr	>PULLW ZS.RT.Ptr1
-
-.1				lda (ZS.RT.Ptr1),y
-				>PUSHA
-				dey
-				bpl .1
-
-PCC.PushFromPtr.L	.EQ *-PCC.PushFromPtr
-*--------------------------------------
-PCC.PushConstPAX
-				clc
-				adc PCC.FH.2000+PCC.FH.IDATA
-				tay
-				txa
-				adc PCC.FH.2000+PCC.FH.IDATA+1
-				>PUSHA
-				tya
-				>PUSHA
-
-PCC.PushConstPAX.L	.EQ *-PCC.PushConstPAX
+ENV.INCLUDE		.AZ "INCLUDE"
+ENV.LIB			.AZ "LIB"
 *--------------------------------------
 CC.OPChars		.AS "!~+-*/%=&|^<>["
 CC.OPChars.Cnt	.EQ *-CC.OPChars
 *--------------------------------------
-* Pre Operators:  & * + - ! ~ ++ --
-*--------------------------------------
-CC.PREOPS		>PSTR "&"				ref
-				>PSTR "*"				deref
-				>PSTR "+"				abs
-				>PSTR "-"				change sign
-				>PSTR "!"				logical not
-				>PSTR "~"				bitwise not
-				>PSTR "++"				pre increase
-				>PSTR "--"				pre decrease
-				.HS 00
-*--------------------------------------
-* Post Operators: ++ --
-*--------------------------------------
-CC.POSTOPS		>PSTR "++"
-				>PSTR "--"
-				>PSTR "["
-				>PSTR "."
-				>PSTR "->"
-				.HS 00
-*--------------------------------------
 * Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
 *--------------------------------------
 CC.AOPS			>PSTR "="
@@ -996,6 +625,27 @@ CC.AOPS			>PSTR "="
 				>PSTR "^="
 				>PSTR "!="
 				.HS 00
+*--------------------------------------
+* Pre Operators:  & * + - ! ~ ++ --
+*--------------------------------------
+CC.PREOPS		>PSTR "&"				ref
+				>PSTR "*"				deref
+				>PSTR "+"				abs
+				>PSTR "-"				negate
+				>PSTR "!"				logical not
+				>PSTR "~"				bitwise not
+				>PSTR "++"				pre increase
+				>PSTR "--"				pre decrease
+				.HS 00
+*--------------------------------------
+* Post Operators: ++ --
+*--------------------------------------
+CC.POSTOPS		>PSTR "++"
+				>PSTR "--"
+				>PSTR "["
+				>PSTR "."
+				>PSTR "->"
+				.HS 00
 *-- Binary ---- H to L precedence -----
 * Arithmetic Operators: * / %
 * Arithmetic Operators: + -
@@ -1039,12 +689,17 @@ CC.KW			>PSTR "if"
 				>PSTR "for"
 				>PSTR "switch"
 				>PSTR "case"
+				>PSTR "default"
 				>PSTR "break"
 				>PSTR "continue"
 				>PSTR "return"
 				>PSTR "sizeof"
 				>PSTR "struct"
 				.HS 00
+CC.KW2.IF		>PSTR "else"
+				.HS 00
+CC.KW2.DO		>PSTR "while"
+				.HS 00
 *--------------------------------------
 CC.SCSPEC		>PSTR "auto"
 				>PSTR "register"
@@ -1201,10 +856,10 @@ CC.LIBC			>PSTR "chtyp"
 				.DA #2,#1,#SYS.StrToL
 				>PSTR "strtoul"
 				.DA #2,#1,#SYS.StrToUL
-*				>PSTR "realpath"
-*				.DA #2,#1,#0
-*				>PSTR "expand"
-*				.DA #2,#1,#0
+				>PSTR "realpath"
+				.DA #2,#1,#SYS.RealPath
+				>PSTR "expand"
+				.DA #2,#1,#SYS.Expand
 				>PSTR "strlen"
 				.DA #2,#1,#SYS.StrLen
 				>PSTR "strcpy"
@@ -1353,6 +1008,8 @@ CC.LIBC			>PSTR "chtyp"
 				>PSTR "lrintf"
 				.DA #2,#2,#FPU.QINT
 				.HS 00
+*--------------------------------------
+				.INB usr/src/bin/cc.s.pcc
 *--------------------------------------
 				.DUMMY
 				.OR 0
@@ -1387,6 +1044,9 @@ CC.hTags		.BS 1
 CC.hStack		.BS 1
 
 CC.hScopes		.BS 1+SCOPE.MAX			1 Global+ MAX locals
+
+CC.CPSID		.BS 2					AA
+CC.CPSPFX		.BS 5					X_id\0
 *--------------------------------------
 CC.hSymBuf		.BS 1
 CC.SymID		.BS 2
diff --git a/BIN/EDIT.S.CTRL.txt b/BIN/EDIT.S.CTRL.txt
index 38552546..af9675fe 100644
--- a/BIN/EDIT.S.CTRL.txt
+++ b/BIN/EDIT.S.CTRL.txt
@@ -22,14 +22,14 @@ NEW
 * ^R = Replace...
 * ^S = Save
 * ^T = Go To Top of file
-******** ^U = FS 
+******** ^U = FS
 * ^V = Paste Block
 * ^W = Erase line
 * ^X = Cut Block
 * ^Y = End Of File
 *--------------------------------------
 Ctrl.DEL		jsr BUF.ComputeCOffset
-	
+
 				lda BUF.COffset
 				ora BUF.COffset+1		No Backspace possible
 				beq .8
@@ -41,7 +41,7 @@ Ctrl.DEL		jsr BUF.ComputeCOffset
 .8				clc
 .9				rts
 *--------------------------------------
-Ctrl.Invalid	
+Ctrl.Invalid
 				clc
 Ctrl.Invalid.RTS
 				rts
@@ -57,18 +57,18 @@ Ctrl.A			>STZ.G bUpdateStatus
 				ldy TmpByte
 				jsr SCRN.GotoXY
 				bcs .9
-				
+
 				lda (ZPPTR1)
 				beq .8
-				
+
 				>PUSHW L.MSG.HELPLINE
 				>PUSHW ZPPTR1
 				>PUSHBI 2
 				>SYSCALL PrintF
 				bcs .9
-				
+
 				inc TmpByte
-				
+
 				lda (ZPPTR1)
 				sec
 				adc ZPPTR1
@@ -84,15 +84,15 @@ Ctrl.A			>STZ.G bUpdateStatus
 				>PUSHBI 0
 				jsr SCRN.LineBufSprintf
 				bcs .9
-				
+
 				jsr SCRN.LineBufOut
 				bcs .9
 
 				jsr GetCh
 				bcs .9
-				
+
 				jmp SCRN.Repaint
-				
+
 .9				rts
 *--------------------------------------
 Ctrl.C			jmp BUF.SelToClipboard
@@ -122,7 +122,7 @@ Ctrl.G			>LDA.G FileX
 
 				lda #0
 				sta (pData),y
-				
+
 				jmp SCRN.UpdateViewPort
 
 .8				clc
@@ -165,16 +165,16 @@ Ctrl.TAB		jsr BUF.InsertTAB
 
 				lda TmpByte
 				beq .9					nothing to do
-				
+
 *				clc
 				>ADC.G FileX
 				sta (pData),y
-				
+
 				>LDA.G CurX
 				clc
 				adc TmpByte
 				sta (pData),y
-				
+
 				sec
 				>SBC.G ScreenX
 				sec
@@ -183,19 +183,19 @@ Ctrl.TAB		jsr BUF.InsertTAB
 
 				jsr SCRN.UpdateCurrentLine
 				bcs .9
-				
+
 				bra .8
-				
+
 .1				lda TmpByte
 				clc
 				>ADC.G ScreenX
 				sta (pData),y
 
 				jsr SCRN.UpdateViewPort
-				
-.8				jsr SCRN.GotoCurXCurY			
+
+.8				jsr SCRN.GotoCurXCurY
 				jmp SCRN.UpdateStatusBar
-				
+
 .9				rts
 *--------------------------------------
 Ctrl.LF			jsr BUF.GetNextLine
@@ -204,7 +204,7 @@ Ctrl.LF			jsr BUF.GetNextLine
 				tya						Y = line length
 				>CMP.G FileX
 				bcs .2
-				
+
 				sta (pData),y
 
 .2				>INCW.G FileY
@@ -234,7 +234,7 @@ Ctrl.VT			>LDA.G FileY+1
 				bcs .2
 
 				sta (pData),y
-				
+
 .2				>DECW.G FileY
 
 				jmp SCRN.UpdateViewPort
@@ -258,22 +258,22 @@ Ctrl.CR			lda #C.CR
 
 				>STZ.G FileX
 				>INCW.G FileY
-				
+
 				>STZ.G CurX
 
 				>LDA.G CurY
 				>CMP.G ViewPortHm1
 				bne .1
-				
+
 				jsr SCRN.LineBufOut		Bottom line, CEOL...
 				bcs .99
 
 				jmp SCRN.UpdateViewPort	...and scroll
-				
+
 .1				dec
 				>CMP.G ViewPortHm1
 				beq .6					No scroll needed
-				
+
 				>PUSHW LineBufPtr
 				>PUSHW L.SEQ.SCROLLCURDN
 
@@ -286,7 +286,7 @@ Ctrl.CR			lda #C.CR
 				>PUSHA
 				>PUSHBI 2
 				jsr SCRN.LineBufSprintf
-				
+
 .99				bcs .9
 
 				>PUSHW LineBufPtr
@@ -321,7 +321,7 @@ Ctrl.O			ldy #FileY+1
 				txa
 				sbc #0
 				bcc .8
-				
+
 				ldy #FileY+1
 				sta (pData),y
 				dey
@@ -371,7 +371,7 @@ Ctrl.P			ldy #FileY+1
 				dey
 				pla
 				sta (pData),y
-				
+
 				>LDA.G ViewPortH
 				clc
 				>ADC.G ScreenY
@@ -380,7 +380,7 @@ Ctrl.P			ldy #FileY+1
 				lda (pData),y
 				adc #0
 				sta (pData),y
-				
+
 				>STZ.G FileX
 				>STA.G ScreenX
 
@@ -409,16 +409,16 @@ Ctrl.Y			jsr BUF.GetNextLine
 				>LDA.G FileY+1
 				sbc #0
 				bcs .2
-				
+
 				>LDA.G FileY
 				tax
 				lda #0
-				
+
 .2				>STA.G ScreenY+1
 				dey
 				txa
 				sta (pData),y
-				
+
 				jmp SCRN.UpdateMainAndStatus
 *--------------------------------------
 Ctrl.F			>LDYA L.DLG.FIND
@@ -427,10 +427,10 @@ Ctrl.F			>LDYA L.DLG.FIND
 
 				cmp #C.CR
 				bne .8
-	
+
 
 .8				jsr DLG.Close
-				
+
 				clc
 				rts
 *--------------------------------------
@@ -443,7 +443,7 @@ Ctrl.R			clc
 *--------------------------------------
 Ctrl.Q			>LDA.G bUnSaved
 				beq .8
-				
+
 				>STZ.G bUpdateStatus
 
 				jsr SCRN.ResetStatusBar
@@ -453,28 +453,28 @@ Ctrl.Q			>LDA.G bUnSaved
 				>PUSHBI 0
 				jsr SCRN.LineBufSprintf
 				bcs .9
-				
+
 				jsr SCRN.LineBufOut
 				bcs .9
 
 .1				jsr GetCh
 				bcs .9
-	
+
 				cmp #'a
 				bcc .2
 				cmp #'z'+1
 				bcs .2
-				
+
 				eor #$20
-				
+
 .2				cmp #'Y'
 				beq .8
-	
+
 				cmp #'N'
 				beq .80
-				
+
 				bra .1
-	
+
 .8				lda #$ff
 				>STA.G bExit
 
@@ -488,16 +488,16 @@ Ctrl.S			>LDYA L.DLG.SAVE
 				jsr DLG.Run
 
 				pha
-				
+
 				jsr DLG.Close
-	
+
 				pla
 				cmp #C.CR
 				bne .8
-				
+
 				jsr FILE.Save
 				bcc .1
-	
+
 				pha
 				jsr SCRN.ResetStatusBar
 
@@ -508,22 +508,22 @@ Ctrl.S			>LDYA L.DLG.SAVE
 				bra .2
 
 .1				jsr SCRN.ResetStatusBar
-				
+
 				>PUSHW LineBufPtr
 				>PUSHW L.MSG.STATUSBAR.S
 				>LDA.G hFileName
 				>SYSCALL GetMemPtr
 				>PUSHYA
-				
+
 				>PUSHBI 2
-				
+
 .2				jsr SCRN.LineBufSprintf
 
 				jsr SCRN.LineBufOut
 				bcs .9
 
 .8				jsr SCRN.UpdateTopBar
-				
+
 				jmp SCRN.GotoCurXCurY
 
 .9				rts
@@ -554,6 +554,7 @@ Ctrl.FS			jsr BUF.GetLine
 *--------------------------------------
 Ctrl.V			jsr BUF.InsertClipboard
 				bcs .9
+
 				jsr SCRN.UnSaved
 				jmp SCRN.UpdateMainAndStatus
 
@@ -572,8 +573,10 @@ Ctrl.W			jsr BUF.ComputeCOffset	Y=line len
 				ply						Get back line len
 				clc
 				lda (BufPtr),y
-				beq .1					last line \0 ending 
+				beq .1					last line \0 ending
+
 				sec						delete CR
+
 .1				tya
 
 				adc BUF.LOffset
@@ -592,11 +595,13 @@ Ctrl.X			jsr BUF.SelToClipboard
 
 Ctrl.D			jsr BUF.DelSel
 				bcs Ctrl.D.8
+
 				jsr BUF.ResetSel
 				jsr SCRN.CursorAdjust
+				jsr SCRN.UpdateViewPort
 				jsr SCRN.UnSaved		will update TopBar
 				jmp SCRN.UpdateMainAndStatus
-				
+
 Ctrl.D.8		clc
 				rts
 *--------------------------------------
@@ -605,6 +610,7 @@ Ctrl.Z			jsr BUF.ComputeCOffset
 				lda BUF.COffset
 				eor FileLen
 				bne .1
+
 				lda BUF.COffset+1
 				eor FileLen+1
 				beq Ctrl.D.8
@@ -619,11 +625,11 @@ Ctrl.Z			jsr BUF.ComputeCOffset
 
 				>CMP.G ViewPortHm1
 				beq .8					Bottom line, all done
-				
+
 				dec
 				>CMP.G ViewPortHm1
 				beq .8					No scroll needed
-				
+
 				>PUSHW L.SEQ.SCROLLCURUP
 				>LDA.G CurY
 				inc
@@ -638,20 +644,20 @@ Ctrl.Z			jsr BUF.ComputeCOffset
 
 				jsr SCRN.ResetScrollRgn
 				bcs .9
-				
+
 				jsr SCRN.UpdateCurrentLine
 				bcs .9
 
 				jsr SCRN.UpdateLast
 				bcs .9
-				
+
 .8				jsr SCRN.UpdateCurrentLine
 				bcs .9
 
 .80				jsr SCRN.UnSaved
 				jsr SCRN.GotoCurXCurY
 				jmp SCRN.UpdateStatusBar
-.9				rts				
+.9				rts
 *--------------------------------------
 MAN
 SAVE usr/src/bin/edit.s.ctrl
diff --git a/BIN/EDIT.S.SCRN.txt b/BIN/EDIT.S.SCRN.txt
index a17ee051..04784420 100644
--- a/BIN/EDIT.S.SCRN.txt
+++ b/BIN/EDIT.S.SCRN.txt
@@ -474,13 +474,20 @@ SCRN.ResetStatusBar
 *--------------------------------------
 SCRN.CursorAdjust
 .1				jsr BUF.ComputeCOffset
-				bcc .8
-				>DECW.G FileY
-				>STZ.G FileX
+				bcc .2					Y = linelen
 
+				>DECW.G FileY
+*				>STZ.G FileX
 				bra .1
 
-.8				rts
+.2				tya
+				>CMP.G FileX
+				bcs .8
+				
+				>STA.G FileX
+				
+.8				clc
+				rts
 *--------------------------------------
 SCRN.GotoCurXCurY
 				ldy #CurX
diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt
index 944c89bd..3061674f 100644
--- a/INC/IO.D2.I.txt
+++ b/INC/IO.D2.I.txt
@@ -1,11 +1,11 @@
 NEW
   AUTO 3,1
 *--------------------------------------
-IO.D2.SeekTimeR	.EQ 42					LIBBLKDEV Recalibration
-IO.D2.SeekTimeF	.EQ 56					LIBBLKDEV Track Formatter
-IO.D2.SeekTimeB	.EQ 56					LIBBLKDEV Boot Block
-IO.D2.SeekTimeP	.EQ 28					ProDOS.FX initial
-IO.D2.SeekTimeI	.EQ 14					ProDOS.FX increment -> until > 128
+IO.D2.SeekTimeR	.EQ 45					LIBBLKDEV Recalibration
+IO.D2.SeekTimeF	.EQ 75					LIBBLKDEV Track Formatter
+IO.D2.SeekTimeB	.EQ 52					LIBBLKDEV Boot Block
+IO.D2.SeekTimeP	.EQ 32					ProDOS.FX initial
+IO.D2.SeekTimeI	.EQ 10					ProDOS.FX increment -> until > 128
 *--------------------------------------
 IO.D2.Ph0Off	.EQ $C080
 IO.D2.Ph0On		.EQ $C081
diff --git a/INCLUDE/stdio.h.txt b/INCLUDE/stdio.h.txt
index 044d4b7f..0d9d280e 100644
--- a/INCLUDE/stdio.h.txt
+++ b/INCLUDE/stdio.h.txt
@@ -16,7 +16,7 @@ NEW
 #define SEEK_END		2
 
 short int fopen(const char*,short int,short int,int);
-int fastcall fclose(short int);
+short int fastcall fclose(short int);
 int fread(short int,void*,int);
 int fwrite(short int,const void*,int);
 
diff --git a/LIB/LIBBLKDEV.S.D2.txt b/LIB/LIBBLKDEV.S.D2.txt
index 55dab790..2923d8a7 100644
--- a/LIB/LIBBLKDEV.S.D2.txt
+++ b/LIB/LIBBLKDEV.S.D2.txt
@@ -30,19 +30,19 @@ D2.Recalibrate	>PULLB D2.DrvSlt
 				lda #IO.D2.SeekTimeR
 				jsr D2.Wait100usecA
 
-				lda #168				41 x 4 Qtracks
+				lda #160				40 x 4 Qtracks
+
+				php
+				sei
 
 .1				dec
 				dec
 
 				pha
 
-				and #6
-				ora D2.Slotn0
 				phy
 				plx
-				tay
-				lda IO.D2.Ph0On,y
+				jsr D2.SeekPhOnY
 
 				lda #IO.D2.SeekTimeR
 				jsr D2.Wait100usecA
@@ -59,9 +59,12 @@ D2.Recalibrate	>PULLB D2.DrvSlt
 
 				lda IO.D2.Ph0Off,y
 
-				jsr D2.Wait25600usec
+				plp
+				
+*				clc
+				
+				jmp D2.Wait25600usec
 
-				clc
 .9				rts
 */--------------------------------------
 *\--------------------------------------
@@ -105,30 +108,30 @@ D2.MoveHead		>PULLB D2.TargetQTrack
 
 D2.MoveHead.SEI	lda D2.CurrentQTrack
 
-				bit #1
+				bit #1					A = Current QT
 				beq .2					we are on 0/4 or 2/4 track
 
 				pha
 
 				cmp	D2.TargetQTrack		we are on 1/4 or 3/4 track
 				bcc .1					if CC, C < T, must move in
-				
+
 				inc						move out: X = Ph(N+1)
-				
+
 .1				jsr D2.SeekPhOnY		move in : X = Ph(N)
 
 				tya
 				tax
 
 				pla
-				
+
 				bcs .2					if CS, C > T, must move out
 
 				inc						move in : Y = Ph(N+1)
 
 .2				jsr D2.SeekPhOnY		move out: Y = Ph(N)
 
-				bra .9					no wait
+				bra .9					Ph ON to go to 0/4 or 2/4, no wait
 *--------------------------------------
 .3				bcs	.4					if CS, C > T, must move out
 
@@ -156,6 +159,7 @@ D2.MoveHead.SEI	lda D2.CurrentQTrack
 .6				jsr D2.SeekPhOnY		now X and Y on
 
 .8				lda #IO.D2.SeekTimeF
+
 				jsr D2.Wait100usecA		...wait...
 
 .9				lda D2.CurrentQTrack
@@ -166,13 +170,15 @@ D2.MoveHead.SEI	lda D2.CurrentQTrack
 
 				jsr D2.Wait25600usec
 
+				lda IO.D2.Ph0Off,y
+				
 				bcc .10
+				
+				clc
 
 				lda IO.D2.Ph0Off,x
-
-				clc
 				
-.10				lda IO.D2.Ph0Off,y
+.10				jsr D2.Wait25600usec
 				
 				rts
 *--------------------------------------
@@ -444,7 +450,7 @@ D2.Wait25600usec
 
 D2.Wait100usecA phx
 
-.1				ldx #20					(2)
+.1				ldx #19					(2)
 
 .2  			dex						(2)
 				bne .2					(3)
diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt
index 3b152c90..780292cf 100644
--- a/ProDOS.FX/ProDOS.S.XRW.txt
+++ b/ProDOS.FX/ProDOS.S.XRW.txt
@@ -54,7 +54,7 @@ XRW.START		cld						$D8 to flag language card bank 1 (main)
 *--------------------------------------
 XRW.Blk2TS		lda bloknml
 				sta XRW.ReqTrack
-				
+
 				and #7
 				cmp #4
 				php
@@ -63,9 +63,9 @@ XRW.Blk2TS		lda bloknml
 				plp
 				rol
 				sta XRW.ReqSector
-				
+
 				lda bloknml+1
-				
+
 				ldx #3
 
 .1				lsr
@@ -165,7 +165,7 @@ XRW.Cmd			lda A4L					get command #
 
 				jsr XRW.Recalibrate
 				bcc .3
-				
+
 				bcs XRW.E.IO
 
 .4				inc buf+1
@@ -207,7 +207,7 @@ XRW.SectorIO	bit XRW.bWrite
 
 .1				stz XRW.RetryCnt
 
-.2				jsr XRW.ReadAddr
+.2				jsr XRW.ReadAddr		(..14)
 				bcs .3					(2)
 
 				lda XRW.AddrField.S		(4)
@@ -390,17 +390,18 @@ XRW.TestWP		ldx A2L
 * writes data from nbuf1 and buf. first nbuf2, high to low then direct
 * from (buf), low to high. assumes 1 usec cycle time. self modified code !!
 *
-* on entry: x = slotnum times 16
+* on entry: x = slotnum times 16 (35us since read $DE)
 *--------------------------------------
 				.LIST ON
-XRW.Write		bit IO.D2.ReadProt,x	(4) PREWRITE MODE
+XRW.Write		lda IO.D2.ReadProt,x	(4) PREWRITE MODE
 				.LIST OFF
-				bit IO.D2.ReadMode,x	(4)
-				
-				lda #$FF   				(2)
+				lda IO.D2.ReadMode,x	(4)
+
+				jsr XRW.Write.RTS		(12)
 
 				nop	  					(2)
-				nop	  					(2)
+
+				lda #$FF   				(2)
 
 				sta IO.D2.WriteMode,x	(5) goto write mode
 				ora IO.D2.WShift,x		(4)
@@ -408,7 +409,7 @@ XRW.Write		bit IO.D2.ReadProt,x	(4) PREWRITE MODE
 				ldy nbuf2				(4)
 				sty pcl					(3)
 
-				ldy #5   				(2)
+				ldy #6   				(2)
 				nop	  					(2)
 
 .1  			pha	  					(3) exact timing.
@@ -535,15 +536,12 @@ wrefd5			ldx #$60   				(2) restore slot. warning: modified by prenib
 				bpl .1					(3) if not.
 
 				bmi .2					(3)
+
 .2				nop						(2)
 
 				tya						(2)		Y = $FF from DEY BMI
 				jsr wnibl				(11..10) write turn off byte.
 
-*				jsr XRW.Write.RTS		(12)
-*				jsr XRW.Write.RTS		(12)
-*				nop						(2)
-
 XRW.ReadMode	lda IO.D2.ReadMode,x	(4) out of write mode
 				lda IO.D2.WShift,x		(4) to read mode.
 
@@ -567,11 +565,11 @@ XRW.Wait25600usec
 				.HS 2C					BIT ABS
 
 XRW.Wait100usec	lda #1
-		
+
 XRW.Wait100usecA
 				phx
 
-.1				ldx #20					(2)
+.1				ldx #17					(2)
 
 .2  			dex						(2)
 				bne .2					(3)
@@ -663,14 +661,13 @@ XRW.ReadAddr	ldy #$FC
 				tay		  				if final checksum non-zero,
 				bne .99					(2) then error.
 
-				clc						(2)
-
 .9				lda IO.D2.RData,x		(4)
 				bpl .9					(2)
 
 				eor #$DE				(2)
 				bne .99					(2)
 
+				clc						(2)
 				rts						(6)
 
 .99				sec
@@ -692,7 +689,7 @@ XRW.TrackSelect	lda #2
 
 				jsr XRW.Recalibrate
 				bcc .1
-				
+
 				rts
 *--------------------------------------
 .4  			ldx XRW.UnitIndex
@@ -713,15 +710,15 @@ XRW.TrackSelect	lda #2
 
 				lda XRW.ReqTrack
 				and #1
-				
+
 				rol						A = 0/2
-				
+
 				ora A2L
 				tay						y = n0/n2
-				
+
 				lda IO.D2.Ph0On,y
 				lda IO.D2.Ph0On+4,y
-				
+
 				jsr XRW.Wait100usec
 
 				lda IO.D2.Ph0Off,y
@@ -748,7 +745,7 @@ XRW.TrackSelect	lda #2
 
 				sta XRW.SeekTime
 				sta XRW.D2SeekTime-1,x
-				
+
 .7				ldy XRW.D2Trk-1,x		From actual Pos...
 				lda XRW.ReqTrack		....to Req
 				jsr XRW.SeekYA			X = XRW.UnitIndex
@@ -762,12 +759,12 @@ XRW.TrackSelect.RTS
 XRW.Recalibrate	sec
 				dec XRW.RecalibrateCnt
 				beq XRW.TrackSelect.RTS
-				
+
 				ldx XRW.UnitIndex
 
-				ldy #41					from 41... (4/4)
+				ldy #40					from 40... (4/4)
 				lda #0					....to 0
-				sta XRW.D2VolNum-1,x	reset volnum for seeking 41 4/4 tracks
+				sta XRW.D2VolNum-1,x	reset volnum for seeking 40->0 4/4 tracks
 *--------------------------------------
 XRW.SeekYA		sta XRW.D2Trk-1,x		will be current track at the end
 
@@ -802,7 +799,7 @@ XRW.SeekYA		sta XRW.D2Trk-1,x		will be current track at the end
 
 .2				jsr XRW.SeekPhOnY		move out: Y = Ph(N)
 
-				bra .9					no wait
+				bra .9					Ph ON to go to 0/4 or 2/4, no wait
 *--------------------------------------
 .3				bcs	.4					if CS, C > T, must move out
 
@@ -819,17 +816,18 @@ XRW.SeekYA		sta XRW.D2Trk-1,x		will be current track at the end
 
 				lda IO.D2.Ph0Off,x		we must go to 0/4 or 2/4 : PhX Off
 				bra .8					go wait....
-				
+
 .5				phy						we must go on 1/4 or 3/4
 				plx						Y already ON, -> X for Ph0Off,x
-				
+
 				bcs	.6					if CS, C > T, must move out
 
 				inc						CC: C < T, ON next PH
 
 .6				jsr XRW.SeekPhOnY		now X and Y on
 
-.8				lda #IO.D2.SeekTimeF	XRW.SeekTime
+.8				lda XRW.SeekTime
+
 				jsr XRW.Wait100usecA	...wait...
 
 .9				lda XRW.CurrentQTrack
@@ -837,18 +835,18 @@ XRW.SeekYA		sta XRW.D2Trk-1,x		will be current track at the end
 				bne .3
 
 				lsr						CS if X,Y on
-				
+
 				jsr XRW.Wait25600usec
 
+				lda IO.D2.Ph0Off,y
+
 				bcc .10
 
-				lda IO.D2.Ph0Off,x
-
 				clc						Exit wit CC (recalibrate)
-			
-.10				lda IO.D2.Ph0Off,y
 
-				rts
+				lda IO.D2.Ph0Off,x
+				
+.10				rts
 *--------------------------------------
 XRW.SeekPhOnY	and #6
 				ora A2L
@@ -857,7 +855,7 @@ XRW.SeekPhOnY	and #6
 				rts
 *--------------------------------------
 * In:
-*  A = Logical Track 0 -> 159, 
+*  A = Logical Track 0 -> 159,
 *  X = XRW.UnitIndex
 *  D2VolNum : d0000sss
 * Out:
@@ -872,8 +870,8 @@ XRW.Trk2Qtrk	sta pch
 				asl
 				asl
 				rts
-				
-.1				bpl .2				
+
+.1				bpl .2
 				cmp #$85
 				bcs .10					> 192 ? must be a buggy 254
 
@@ -882,16 +880,16 @@ XRW.Trk2Qtrk	sta pch
 .2				phx
 				and #%00000111			stepping
 				tax
-				
+
 				lda #0
 				clc
-				
+
 .3				adc pch
 				dex
 				bne .3
-				
+
 				plx
-				
+
 .8				rts
 *--------------------------------------
 * preniblize subroutine (16 sector format)
diff --git a/SHARED/X.BB.FX2.S.txt b/SHARED/X.BB.FX2.S.txt
index 49a8d9be..d837fd70 100644
--- a/SHARED/X.BB.FX2.S.txt
+++ b/SHARED/X.BB.FX2.S.txt
@@ -262,29 +262,29 @@ BB.FX2.SeekReadD2
 				cmp	BB.TargetQTrack
 				beq BB.FX2.ReadSectD2
 
-				bit #1
+				bit #1					A = Current QT
 				beq .2					we are on 0/4 or 2/4 track
-				
+
 				pha
 
 				bcc .1					if CC, C < T, must move in
-				
-				inc
 
-.1				jsr BB.FX2.SeekPhOnY	move in : X = Ph(N)				
-				
+				inc						move out: X = Ph(N+1)
+
+.1				jsr BB.FX2.SeekPhOnY	move in : X = Ph(N)
+
 				tya
 				tax
-				
+
 				pla
-				
+
 				bcs .2					if CS, C > T, must move out
 
 				inc						move in : Y = Ph(N+1)
 
 .2				jsr BB.FX2.SeekPhOnY	move out: Y = Ph(N)
 
-				bra .9					Ph ON to go to 0/4 or 2/4, then wait
+				bra .9					Ph ON to go to 0/4 or 2/4, no wait
 *--------------------------------------
 .3				bcs	.4					if CS, C > T, must move out
 
@@ -312,6 +312,7 @@ BB.FX2.SeekReadD2
 .6				jsr BB.FX2.SeekPhOnY	now X and Y on
 
 .8				lda #IO.D2.SeekTimeB
+
 				jsr BB.Wait100usecA		...wait...
 
 .9				lda BB.CurrentQTrack
@@ -323,11 +324,15 @@ BB.FX2.SeekReadD2
 				lda #0
 				jsr BB.Wait100usecA
 
+				lda IO.D2.Ph0Off,y
+
 				bcc .10
 
+				clc
+
 				lda IO.D2.Ph0Off,x
 
-.10				lda IO.D2.Ph0Off,y
+.10
 *--------------------------------------
 BB.FX2.ReadSectD2
 				ldx ROM.D2.Slotn0
@@ -455,7 +460,7 @@ goseek 			jmp BB.FX2.SeekReadD2
 *--------------------------------------
 BB.Wait100usecA	phx						(3)
 
-.1				ldx #20					(2)
+.1				ldx #19					(2)
 
 .2 				dex 					(2)
 				bne .2					(3)
diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt
index 3f7a4d75..a087ef50 100644
--- a/SYS/KERNEL.S.STDIO.txt
+++ b/SYS/KERNEL.S.STDIO.txt
@@ -234,6 +234,7 @@ K.FGetS			ldy #3
 
 				inc ZPPtr1
 				bne .4
+
 				inc ZPPtr1+1
 				bne .4
 
@@ -262,6 +263,7 @@ K.FGetS			ldy #3
 
 .8				lda #0
 				sta (ZPPtr2)			terminate string
+				tay						return NULL (TODO: return s)
 				clc
 .9				>RET 5
 */--------------------------------------
@@ -372,23 +374,23 @@ K.FOpen			jsr PFT.CheckPath4
 				bcs K.FOpen.99
 
 				ldx IO.hFILE
-				
+
 				lda (pFD)
 				bne K.FOpen.8
-				
+
 K.FOpen.REGDIR	>LDYAI K.Buf256
-				>SYSCALL2 StrDup 
+				>SYSCALL2 StrDup
 				bcs K.FOpen.90
-				
+
 				txa
 				ldx IO.hFILE
 				sta hFDs.hName-1,x
-				
+
 K.FOpen.8		inc hFDs.oCnt-1,x
 				txa
-*				clc				
+*				clc
 				rts
-				
+
 K.FOpen.90		pha
 				jsr UNISTD.Close
 				pla
@@ -416,31 +418,31 @@ K.FClose		jsr PFT.CheckNodeA
 				ldx IO.hFILE
 				dec hFDs.oCnt-1,x
 				bne .8
-				
+
 				lda hFDs.hName-1,x		its a DEV, don't clear FD
 				beq .8
 
 				stz hFDs.hName-1,x
 
 				jsr K.FreeMem
-				
+
 				lda (pFD)
 				tay
-				
+
 				ldx IO.hFILE
 				lda hFDs-1,x
 				beq .8
-				
+
 				stz hFDs-1,x
-				
+
 				cpy #S.FD.T.DSOCK		SOCKS will free FDs
 				beq .8
-				
+
 				cpy #S.FD.T.SSOCK
 				beq .8
 
 				jmp K.FreeMem
-				
+
 .8				clc
 				rts
 */--------------------------------------
@@ -534,15 +536,18 @@ K.FSeek			ldy #5
 				jsr PFT.CheckNodeY
 				bcc .11
 
-				>RET 5
+				>RET 6
 
-.11				lda (pFD)
-				bne STDIO.IOERR
-
-				>PULLA					whence
+.11				>PULLA					whence
 				tax
 
-				>PULLL ACC32
+				>PULLL ACC32			offset
+
+				inc pStack				discard hFile
+
+				lda (pFD)
+				bne STDIO.IOERR
+
 				cpx #SEEK.END
 				beq .30
 
@@ -582,10 +587,13 @@ K.FSeek			ldy #5
 
 .82				>MLICALL MLISETMARK
 				bcc .9
+
 				cmp #MLI.E.BEYEOF
 				bne .9
+
 				>MLICALL MLISETEOF
 				bcc .82
+
 .9				rts
 
 .98				lda #E.BADARG