diff --git a/pom.xml b/pom.xml
index 986311804..b9c3f5cbd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,6 +95,9 @@
maven-surefire-plugin
2.12.4
+
+ **/TestFragments.java
+
false
all
5
diff --git a/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_minus_vwuc2.asm b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_minus_vwuc2.asm
new file mode 100644
index 000000000..e15cfa3b4
--- /dev/null
+++ b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_minus_vwuc2.asm
@@ -0,0 +1,7 @@
+sec
+lda {c1}
+sbc #<{c2}
+sta {c1}
+lda {c1}+1
+sbc #>{c2}
+sta {c1}+1
diff --git a/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_minus_vwum1.asm b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_minus_vwum1.asm
new file mode 100644
index 000000000..a7fcd84ec
--- /dev/null
+++ b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_minus_vwum1.asm
@@ -0,0 +1,7 @@
+sec
+lda {c1}
+sbc {m1}
+sta {c1}
+lda {c1}+1
+sbc {m1}+1
+sta {c1}+1
diff --git a/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus_vbuc2.asm b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus__deref_pwuc2.asm
similarity index 68%
rename from src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus_vbuc2.asm
rename to src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus__deref_pwuc2.asm
index c40cde162..ddffa4f5d 100644
--- a/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus_vbuc2.asm
+++ b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus__deref_pwuc2.asm
@@ -1,7 +1,7 @@
-lda {c1}
clc
-adc #{c2}
+lda {c1}
+adc {c2}
sta {c1}
lda {c1}+1
-adc #0
+adc {c2}+1
sta {c1}+1
diff --git a/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus_vwuc2.asm b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus_vwuc2.asm
new file mode 100644
index 000000000..2482acbd5
--- /dev/null
+++ b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus_vwuc2.asm
@@ -0,0 +1,7 @@
+clc
+lda {c1}
+adc #<{c2}
+sta {c1}
+lda {c1}+1
+adc #>{c2}
+sta {c1}+1
diff --git a/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus_vwum1.asm b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus_vwum1.asm
new file mode 100644
index 000000000..162c54aa6
--- /dev/null
+++ b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptc1_plus_vwum1.asm
@@ -0,0 +1,7 @@
+clc
+lda {c1}
+adc {m1}
+sta {c1}
+lda {c1}+1
+adc {m1}+1
+sta {c1}+1
diff --git a/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptz1.asm b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptz1.asm
new file mode 100644
index 000000000..28987eb32
--- /dev/null
+++ b/src/main/fragment/mos6502-common/_deref_pptc1=_deref_pptz1.asm
@@ -0,0 +1,6 @@
+ldy #0
+lda ({z1}),y
+sta {c1}
+iny
+lda ({z1}),y
+sta {c1}+1
diff --git a/src/main/fragment/mos6502-common/_deref_pptc1_eq__deref_pptc2_then_la1.asm b/src/main/fragment/mos6502-common/_deref_pptc1_eq__deref_pptc2_then_la1.asm
new file mode 100644
index 000000000..eba859500
--- /dev/null
+++ b/src/main/fragment/mos6502-common/_deref_pptc1_eq__deref_pptc2_then_la1.asm
@@ -0,0 +1,7 @@
+lda {c1}
+cmp {c2}
+bne !+
+lda {c1}+1
+cmp {c2}+1
+beq {la1}
+!:
diff --git a/src/main/fragment/mos6502-common/_deref_pptz1=pptz2_derefidx_vbuyy.asm b/src/main/fragment/mos6502-common/_deref_pptz1=pptz2_derefidx_vbuyy.asm
new file mode 100644
index 000000000..c0b7c9269
--- /dev/null
+++ b/src/main/fragment/mos6502-common/_deref_pptz1=pptz2_derefidx_vbuyy.asm
@@ -0,0 +1,9 @@
+lda ({z2}),y
+pha
+iny
+lda ({z2}),y
+ldy #1
+sta ({z1}),y
+dey
+pla
+sta ({z1}),y
\ No newline at end of file
diff --git a/src/main/fragment/mos6502-common/_deref_pptz1_neq_0_then_la1.asm b/src/main/fragment/mos6502-common/_deref_pptz1_neq_0_then_la1.asm
new file mode 100644
index 000000000..82ac9a42e
--- /dev/null
+++ b/src/main/fragment/mos6502-common/_deref_pptz1_neq_0_then_la1.asm
@@ -0,0 +1,6 @@
+ldy #0
+lda ({z1}),y
+bne {la1}
+iny
+lda ({z1}),y
+bne {la1}
\ No newline at end of file
diff --git a/src/main/fragment/mos6502-common/_deref_pptz1_neq_pvom2_then_la1.asm b/src/main/fragment/mos6502-common/_deref_pptz1_neq_pvom2_then_la1.asm
new file mode 100644
index 000000000..a1f2852b3
--- /dev/null
+++ b/src/main/fragment/mos6502-common/_deref_pptz1_neq_pvom2_then_la1.asm
@@ -0,0 +1,8 @@
+ldy #0
+lda ({z1}),y
+cmp {m2}
+bne {la1}
+iny
+lda ({z1}),y
+cmp {m2}+1
+bne {la1}
\ No newline at end of file
diff --git a/src/main/fragment/mos6502-common/pptz1_derefidx_vbuc1=_deref_pptz2.asm b/src/main/fragment/mos6502-common/pptz1_derefidx_vbuc1=_deref_pptz2.asm
new file mode 100644
index 000000000..c6496c9c1
--- /dev/null
+++ b/src/main/fragment/mos6502-common/pptz1_derefidx_vbuc1=_deref_pptz2.asm
@@ -0,0 +1,10 @@
+ldy #1
+lda ({z2}),y
+pha
+dey
+lda ({z2}),y
+ldy #{c1}
+sta ({z1}),y
+iny
+pla
+sta ({z1}),y
diff --git a/src/main/fragment/mos6502-common/pptz1_derefidx_vbuyy=_deref_pptc2.asm b/src/main/fragment/mos6502-common/pptz1_derefidx_vbuyy=_deref_pptc2.asm
new file mode 100644
index 000000000..46ac5872f
--- /dev/null
+++ b/src/main/fragment/mos6502-common/pptz1_derefidx_vbuyy=_deref_pptc2.asm
@@ -0,0 +1,5 @@
+lda {c2}
+sta ({z1}),y
+iny
+lda {c2}+1
+sta ({z1}),y
diff --git a/src/main/fragment/mos6502-common/pvom1=_deref_pptc1_minus_vbuc2.asm b/src/main/fragment/mos6502-common/pvom1=_deref_pptc1_minus_vbuc2.asm
new file mode 100644
index 000000000..f23c16374
--- /dev/null
+++ b/src/main/fragment/mos6502-common/pvom1=_deref_pptc1_minus_vbuc2.asm
@@ -0,0 +1,7 @@
+sec
+lda {c1}
+sbc #{c2}
+sta {m1}
+lda {c1}+1
+sbc #0
+sta {m1}+1
diff --git a/src/main/fragment/mos6502-common/pvom1_ge__deref_pptc1_then_la1.asm b/src/main/fragment/mos6502-common/pvom1_ge__deref_pptc1_then_la1.asm
new file mode 100644
index 000000000..29491641d
--- /dev/null
+++ b/src/main/fragment/mos6502-common/pvom1_ge__deref_pptc1_then_la1.asm
@@ -0,0 +1,8 @@
+lda {m1}+1
+cmp {c1}+1
+bcc !+
+bne {la1}
+lda {m1}
+cmp {c1}
+bcs {la1}
+!:
diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java
index 715e6b197..ade9fd9fe 100644
--- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java
+++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentTemplateSynthesisRule.java
@@ -711,8 +711,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("pb(.)z1_derefidx_vbuaa=(.*)", twoZM1, "sta $ff" , "vb$1aa=$2", "ldy $ff\nsta ({z1}),y", mapZM1));
// Synthesize typed pointer math using void pointers
- synths.add(new AsmFragmentTemplateSynthesisRule("(.*)p..([czm][1-9])(.*)", null, null, "$1pvo$2$3", null, null));
- synths.add(new AsmFragmentTemplateSynthesisRule("(.*)p..([czm][1-9])(.*p.*)", null, null, "$1pvo$2$3", null, null));
+ synths.add(new AsmFragmentTemplateSynthesisRule("(.*)p[^v][^o]([czm][1-9])(.*)", null, null, "$1pvo$2$3", null, null));
+ synths.add(new AsmFragmentTemplateSynthesisRule("(.*)p[^v][^o]([czm][1-9])(.*p.*)", null, null, "$1pvo$2$3", null, null));
// Synthesize some constant pointers as constant words (remove when the above section can be included)
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)_(lt|gt|le|ge|eq|neq)_p..([czm].)_then_(.*)", null, null, "$1_$2_vwu$3_then_$4", null, null));