diff --git a/nal/opennars2/vision.sage b/nal/opennars2/vision.sage
new file mode 100644
index 0000000000000000000000000000000000000000..7a88ea7119bea4cdde1222ef02f592f47f7ba5e1
--- /dev/null
+++ b/nal/opennars2/vision.sage
@@ -0,0 +1,9 @@
+#Generates input for the vision system, use https://sagecell.sagemath.org/
+A=random_matrix(RR,30,30)
+with open("Output.txt", "w") as text_file:
+    for i in range(30):
+        for j in range(30):
+            di = i/(size-1)*2-1
+            dj = j/(size-1)*2-1
+            text_file.write("<A["+str(di.n())+","+str(dj.n())+"] --> [bright]>. :|: %"+str(A[i,j])+"%\n")
+show(plot(A))
\ No newline at end of file
diff --git a/nal/test/nal7.15.nal b/nal/test/nal7.15.nal
index 002d0a478f07301d4d4bab5ef27a5d91c8a4f02f..ebc174cea286b0aac367eaddbd93ddb0a0268505 100644
--- a/nal/test/nal7.15.nal
+++ b/nal/test/nal7.15.nal
@@ -1,5 +1,5 @@
 '********** temporal analogy
-  IN: <<(*, $x, door_101) --> open> =/> <(*, $x, room_101) --> enter>>. %0.95%
-  IN: <<(*, $x, room_101) --> enter> <=> <(*, $x, corridor_100) --> leave>>.
+<<(*, $x, door_101) --> open> =/> <(*, $x, room_101) --> enter>>. %0.95%
+<<(*, $x, room_101) --> enter> <|> <(*, $x, corridor_100) --> leave>>.
 40
-''outputMustContain('<<door_101 --> (/,open,$1,_)> =/> <(*,$1,corridor_100) --> leave>>. %0.95;0.81%')
+''outputMustContain('<<(*,$1,door_101) --> open> =/> <(*,$1,corridor_100) --> leave>>. %0.95;0.81%')
diff --git a/nal/test/nal7.18.nal b/nal/test/nal7.18.nal
index 9f313f37e27a92244af1f20105635311af75202a..8a4d0b5aa24ab7e074728b0aa5c5fc3e04e6444f 100644
--- a/nal/test/nal7.18.nal
+++ b/nal/test/nal7.18.nal
@@ -1,7 +1,7 @@
 '********** inference on tense
-  IN: <(&/,<(*, $x, key_101) --> hold>,+1) =/> <(*, $x, room_101) --> enter>>.
-  IN: <(*, John, key_101) --> hold>. :\:
+<(&/,<(*, $x, key_101) --> hold>,+100) =/> <(*, $x, room_101) --> enter>>.
+<(*, John, key_101) --> hold>. :\:
 210
-''outputMustContain('<(*,John,room_101) --> enter>. :\: %1.00;0.81%')
+''outputMustContain('<(*,John,room_101) --> enter>. :!95: %1.00;0.81%')
 
 'this one is working, but throws an exception
diff --git a/nal/test/nal7.19.nal b/nal/test/nal7.19.nal
index d2d9a77e7ba2fba22023b6ac80c2c9f753e199db..08ea484184a3d872556898663e20dbbd894527e5 100644
--- a/nal/test/nal7.19.nal
+++ b/nal/test/nal7.19.nal
@@ -1,5 +1,5 @@
 '********** inference on tense
-  IN: <(&/,<(*, $x, key_101) --> hold>,+1) =/> <(*, $x, room_101) --> enter>>.
-  IN: <(*,John,room_101) --> enter>. :|:
+<(&/,<(*, $x, key_101) --> hold>,+100) =/> <(*, $x, room_101) --> enter>>.
+<(*,John,room_101) --> enter>. :|:
 15
-''outputMustContain('<(*,John,key_101) --> hold>. :\: %1.00;0.45%')
+''outputMustContain('<(*,John,key_101) --> hold>. :!-105: %1.00;0.45%')
diff --git a/nal/test/nal7.2.nal b/nal/test/nal7.2.nal
index fcc3bc4d4acb4595673246779e3e52777e8d7359..929bb1689053b93d461f4bc967110203cbbd18a0 100644
--- a/nal/test/nal7.2.nal
+++ b/nal/test/nal7.2.nal
@@ -1,10 +1,10 @@
 '********** inference on tense 
 
-  IN: <<(*,John,key_101) --> hold> =/> <(*,John,room_101) --> enter>>. 
+<<(*,John,key_101) --> hold> =/> <(*,John,room_101) --> enter>>. 
 
-  IN: <(*,John,key_101) --> hold>. :|:
+<(*,John,key_101) --> hold>. :|:
   
 20
 
-''outputMustContain('<(*,John,room_101) --> enter>. :/: %1.00;0.81%')
+''outputMustContain('<(*,John,room_101) --> enter>. :!5: %1.00;0.81%')
 
diff --git a/nal/test/nal7.3.nal b/nal/test/nal7.3.nal
index f3069afb6d320f59141e274a40a393f1884d994f..50e9b50e8ad662f893623c892c83e037cf346a4c 100644
--- a/nal/test/nal7.3.nal
+++ b/nal/test/nal7.3.nal
@@ -6,5 +6,5 @@
 
 3 
 
-''outputMustContain('<(*,John,key_101) --> hold>. :\: %1.00;0.45%')
+''outputMustContain('<(*,John,key_101) --> hold>. :!-10: %1.00;0.45%')
 
diff --git a/nal/test/nal7.35.nal b/nal/test/nal7.35.nal
index fcc3bc4d4acb4595673246779e3e52777e8d7359..929bb1689053b93d461f4bc967110203cbbd18a0 100644
--- a/nal/test/nal7.35.nal
+++ b/nal/test/nal7.35.nal
@@ -1,10 +1,10 @@
 '********** inference on tense 
 
-  IN: <<(*,John,key_101) --> hold> =/> <(*,John,room_101) --> enter>>. 
+<<(*,John,key_101) --> hold> =/> <(*,John,room_101) --> enter>>. 
 
-  IN: <(*,John,key_101) --> hold>. :|:
+<(*,John,key_101) --> hold>. :|:
   
 20
 
-''outputMustContain('<(*,John,room_101) --> enter>. :/: %1.00;0.81%')
+''outputMustContain('<(*,John,room_101) --> enter>. :!5: %1.00;0.81%')
 
diff --git a/nal/test/nal7.4.nal b/nal/test/nal7.4.nal
index 5a0de91e9e3ab4385dfb29fc4e5f0862b76c4201..8c7287c83deca0fee31d7d77bc1becd7804f6d3f 100644
--- a/nal/test/nal7.4.nal
+++ b/nal/test/nal7.4.nal
@@ -7,5 +7,4 @@
 
 10
 
-''outputMustContain('<<(*,John,room_101) --> enter> =\> (&/,<(*,John,door_101) --> open>,+3)>. :|: %1.00;0.45%')
-'adjusted +2 to +3
\ No newline at end of file
+''outputMustContain('<<(*,John,room_101) --> enter> =\> (&/,<(*,John,door_101) --> open>,+6)>. :!6: %1.00;0.45%')
\ No newline at end of file
diff --git a/nal/test/nal7.5.nal b/nal/test/nal7.5.nal
index 5575b14246d272d389931c25c2d46b2179cdd353..705b193b1420d63f04d53b4e81fc1c4332e14e26 100644
--- a/nal/test/nal7.5.nal
+++ b/nal/test/nal7.5.nal
@@ -8,8 +8,8 @@
 
 10
 
-''outputMustContain('<(&/,<(*,John,door_101) --> open>,+4) =/> <(*,John,room_101) --> enter>>. :|: %0.00;0.45%') 
-''outputMustContain('<(&/,<(*,John,door_101) --> open>,+4) </> <(*,John,room_101) --> enter>>. :|: %0.00;0.45%')
+''outputMustContain('<(&/,<(*,John,door_101) --> open>,+11) =/> <(*,John,room_101) --> enter>>. :!11: %0.00;0.45%') 
+''outputMustContain('<(&/,<(*,John,door_101) --> open>,+11) </> <(*,John,room_101) --> enter>>. :!11: %0.00;0.45%')
 'adjusted +3 to +4
 
 'original output (1.3.3): 
diff --git a/nal/test/nal7.6.nal b/nal/test/nal7.6.nal
index b2b5ef340cf272bc74aa7d9ebe789bf04f8e98cf..a0fdbf64971b248b32dc8ed9891ba6ad74ccde6f 100644
--- a/nal/test/nal7.6.nal
+++ b/nal/test/nal7.6.nal
@@ -7,11 +7,11 @@
 <John --> (/,enter,_,room_101)>. :|: 
 
 20
-''outputMustContain('<<John --> (/,enter,_,room_101)> =\> (&/,<John --> (/,open,_,door_101)>,+3)>. :|: %1.00;0.45%')
+''outputMustContain('<<John --> (/,enter,_,room_101)> =\> (&/,<John --> (/,open,_,door_101)>,+6)>. :!6: %1.00;0.45%')
 
 'new: variable introduction also in time:
 
-''outputMustContain('<<$1 --> (/,enter,_,room_101)> =\> (&/,<$1 --> (/,open,_,door_101)>,+3)>. :|: %1.00;0.45%')
+''outputMustContain('<<$1 --> (/,enter,_,room_101)> =\> (&/,<$1 --> (/,open,_,door_101)>,+6)>. :!6: %1.00;0.45%')
 
 'adjusted +2 to +3 in both conditions
 
diff --git a/nal/test/nal7.7.nal b/nal/test/nal7.7.nal
index 14b1224e02a94a259fff3bc027371f0c524eb7b1..7217212b196a1736b00d3380d73e51c4e70e1e50 100644
--- a/nal/test/nal7.7.nal
+++ b/nal/test/nal7.7.nal
@@ -13,6 +13,6 @@
 
 20 
 
-''outputMustContain('<(&/,<(*,John,key_101) --> hold>,+4,<(*,John,door_101) --> open>) =/> <(*,John,room_101) --> enter>>. :|: %1.00;0.45%')
+''outputMustContain('<(&|,<(*,John,door_101) --> open>,<(*,John,key_101) --> hold>) =|> <(*,John,room_101) --> enter>>. :!0: %1.00;0.40%')
 'changed fomr +2 to +4 due to changes in interval calculations
 'this one is working, just throwing exception
diff --git a/nal/test/nal7.8.nal b/nal/test/nal7.8.nal
index c8db0f37ef9a681e10827a691387fb7dacd5e700..b6f172cd7eb5aa81c723736f7a49c00499f0c93c 100644
--- a/nal/test/nal7.8.nal
+++ b/nal/test/nal7.8.nal
@@ -9,6 +9,7 @@
 <(*,John,key_101) --> hold>? :|: 
 
 200
-
-''outputMustContain('<John --> (/,hold,_,key_101)>. :\: %0.50;0.95%')
-
+//revision on events
+''outputMustContain('<John --> (/,hold,_,key_101)>. :!0: %0.52;0.95%')
+//but also looking at it as separate:
+''outputMustContain('<John --> (/,hold,_,key_101)>. :!6: %0.00;0.90%')
diff --git a/nal/test/nal7.implication_before.nal b/nal/test/nal7.implication_before.nal
deleted file mode 100644
index 3fc67135d3c03f271dd6af750956baa335055fd5..0000000000000000000000000000000000000000
--- a/nal/test/nal7.implication_before.nal
+++ /dev/null
@@ -1,8 +0,0 @@
-********** 
-<(^pick,stefan) =/> <stefan --> good>>.
-<stefan --> good>!
-30
-<stefan --> good>. :|:
-30
-''outputMustContain('<(&/,(^pick,stefan),+4) =/> <stefan --> good>>. :\: %0.00;0.48%')
-''outputMustContain('<(&/,(^pick,$1),+4) =/> <$1 --> good>>. :\: %0.00;0.48%')
diff --git a/nal/test/nal7.vardetach1.nal b/nal/test/nal7.vardetach1.nal
new file mode 100644
index 0000000000000000000000000000000000000000..6035ad2a398841789149a994ce44cee5c329cc64
--- /dev/null
+++ b/nal/test/nal7.vardetach1.nal
@@ -0,0 +1,5 @@
+********** 
+<(&/,<$1 --> A>,+100) =/> <$1 --> B>>. %1.00;0.90%
+<x --> B>. :|: %1.00;0.90%
+30
+''outputMustContain('<x --> A>. :!-105: %1.00;0.45%')
diff --git a/nal/test/nal7.vardetach2.nal b/nal/test/nal7.vardetach2.nal
new file mode 100644
index 0000000000000000000000000000000000000000..4b360c3e3bc35657103f43b7ea01b4487f1a99ca
--- /dev/null
+++ b/nal/test/nal7.vardetach2.nal
@@ -0,0 +1,5 @@
+********** 
+<(&/,<$1 --> A>,+100) =/> <$1 --> B>>. %1.00;0.90%
+<x --> A>. :|: %1.00;0.90%
+30
+''outputMustContain('<x --> B>. :!100: %1.00;0.81%')
diff --git a/nal/test/nal7.vardetach3.nal b/nal/test/nal7.vardetach3.nal
new file mode 100644
index 0000000000000000000000000000000000000000..5c3c929bf9cf9e25e12bcb89e8b5c672d19c2d66
--- /dev/null
+++ b/nal/test/nal7.vardetach3.nal
@@ -0,0 +1,5 @@
+**********  //no interval, should we even support it?
+<<$1 --> A> =/> <$1 --> B>>. %1.00;0.90%
+<x --> B>. :|: %1.00;0.90%
+30
+''outputMustContain('<x --> A>. :!-5: %1.00;0.45%')
diff --git a/nal/test/nal7.vardetach4.nal b/nal/test/nal7.vardetach4.nal
new file mode 100644
index 0000000000000000000000000000000000000000..04f3ca9618e5b839c960228c21920c4bf2451b7f
--- /dev/null
+++ b/nal/test/nal7.vardetach4.nal
@@ -0,0 +1,5 @@
+**********  //no interval, should we even support it?
+<<$1 --> A> =/> <$1 --> B>>. %1.00;0.90%
+<x --> A>. :|: %1.00;0.90%
+30
+''outputMustContain('<x --> B>. :!5: %1.00;0.81%')
diff --git a/nal/test/nal8.1.0.nal b/nal/test/nal8.1.0.nal
index 0f34c8aabc59e2a37e0d054ec40820ddb4e2c239..f92772707d418bb920e5b116a4f071c715556291 100755
--- a/nal/test/nal8.1.0.nal
+++ b/nal/test/nal8.1.0.nal
@@ -2,5 +2,5 @@
 <(&/,<(*,SELF,{t002}) --> hold>,<(*,SELF,{t001}) --> at>,<(*,{t001}) --> ^open>) =/> <{t001} --> [opened]>>.
 20
 
-''outputMustContain('(&/,<(*,SELF,{t002}) --> hold>,<(*,SELF,{t001}) --> at>,<(*,{t001}) --> ^open>)! %1.00;0.81%')
+''outputMustContain('(&/,<(*,SELF,{t002}) --> hold>,<(*,SELF,{t001}) --> at>,(^open,{t001}))! %1.00;0.81%')
 ' working in GUI but not in testcase, maybe the following string needs some escapes? but where?
diff --git a/nal/test/nal8.1.1.nal b/nal/test/nal8.1.1.nal
index 9d3a764366572d69e77b4f45f719a81fe15fdc36..5dd170f9e854bda14145f44e9318111006d6c061 100755
--- a/nal/test/nal8.1.1.nal
+++ b/nal/test/nal8.1.1.nal
@@ -1,4 +1,4 @@
 ********** [10 -> 11]:
-  IN: (&/,<(*,SELF,{t002}) --> hold>,<(*,SELF,{t001}) --> at>,(^open,{t001}))!
-5
+(&/,<(*,SELF,{t002}) --> hold>,<(*,SELF,{t001}) --> at>,(^open,{t001}))!
+10
 ''outputMustContain('<(*,SELF,{t002}) --> hold>! %1.00;0.81%')
diff --git a/nal/test/nal8.1.10.nal b/nal/test/nal8.1.10.nal
index eddbd477a0064ee2417ac01bf3847de827a13e60..afbf37a396c3c30f2f3b95c04a491f37cc77cb96 100755
--- a/nal/test/nal8.1.10.nal
+++ b/nal/test/nal8.1.10.nal
@@ -1,5 +1,5 @@
 <{t003} --> (/,at,SELF,_)>. :\:
 <{t003} --> (/,on,{t002},_)>. :\:
 33
-''outputMustContain('(&&,<#1 --> (/,at,SELF,_)>,<#1 --> (/,on,{t002},_)>). :\: %1.00;0.43%')
+''outputMustContain('(&&,<#1 --> (/,at,SELF,_)>,<#1 --> (/,on,{t002},_)>). :!-5: %1.00;0.81%')
 
diff --git a/nal/test/nal8.1.11.nal b/nal/test/nal8.1.11.nal
index 0bd3f01354abdf700f6320a1197486955cae4261..7b9fb844005a3f76641579cde226851396e2634e 100755
--- a/nal/test/nal8.1.11.nal
+++ b/nal/test/nal8.1.11.nal
@@ -1,4 +1,4 @@
 ********** [21 -> 22]
-  IN: (&|,<#1 --> (/,on,{t002},_)>,<#1 --> (/,at,SELF,_)>). :\:
+(&|,<#1 --> (/,on,{t002},_)>,<#1 --> (/,at,SELF,_)>). :\:
 8
-''outputMustContain('(&|,<#1 --> (/,on,{t002},_)>,<(*,SELF,#1) --> at>). :\: %1.00;0.90%')
+''outputMustContain('(&|,<#1 --> (/,on,{t002},_)>,<(*,SELF,#1) --> at>). :!-5: %1.00;0.90%')
diff --git a/nal/test/nal8.1.13.nal b/nal/test/nal8.1.13.nal
index 484a93d4e695b2b3908ace015835212e812c8290..a815f2f7f4b566f426611f08493c72e6fc717b27 100755
--- a/nal/test/nal8.1.13.nal
+++ b/nal/test/nal8.1.13.nal
@@ -1,5 +1,5 @@
 ********** [23 + 06 -> 24]
-  IN: (&|,<(*,{t002},#1) --> on>,<(*,SELF,#1) --> at>). :|: 
-  IN: <(&|,<(*,$1,$2) --> on>,<(*,SELF,$2) --> at>) =|> <(*,SELF,$1) --> reachable>>.
+(&|,<(*,{t002},#1) --> on>,<(*,SELF,#1) --> at>). :|: 
+<(&|,<(*,$1,$2) --> on>,<(*,SELF,$2) --> at>) =|> <(*,SELF,$1) --> reachable>>.
 260
-''outputMustContain('<(*,SELF,{t002}) --> reachable>. :|: %1.00;0.19%')
+''outputMustContain('<(*,SELF,{t002}) --> reachable>. :!0: %1.00;0.81%')
diff --git a/nal/test/nal8.1.14.nal b/nal/test/nal8.1.14.nal
index be877500d94c073eac680efc03717854687628d6..193be1d77323225b7130379592fbe3c33f67eafa 100755
--- a/nal/test/nal8.1.14.nal
+++ b/nal/test/nal8.1.14.nal
@@ -1,5 +1,5 @@
 ********** [24 + 12 -> 25]
-  IN: <(*,SELF,{t002}) --> reachable>. :|: 
-  IN: (&/,<(*,SELF,{t002}) --> reachable>,(^pick,{t002}))! 
+<(*,SELF,{t002}) --> reachable>. :|: 
+(&/,<(*,SELF,{t002}) --> reachable>,(^pick,{t002}))! 
 45
 ''outputMustContain('(^pick,{t002})! %1.00;0.43%')
diff --git a/nal/test/nal8.1.16.nal b/nal/test/nal8.1.16.nal
index 80c7c3b56bf1e9212c8fbf805b3655143101e404..d58dc6f641332c74a06c54f652793e3ce4972766 100755
--- a/nal/test/nal8.1.16.nal
+++ b/nal/test/nal8.1.16.nal
@@ -1,5 +1,5 @@
 ********** [24 + 05 -> 27]
-  IN: <(*,SELF,{t002}) --> reachable>. :|:
-  IN: <(&/,<(*,SELF,{t002}) --> reachable>,(^pick,{t002}))=/><(*,SELF,{t002}) --> hold>>.
+<(*,SELF,{t002}) --> reachable>. :|:
+<(&/,<(*,SELF,{t002}) --> reachable>,(^pick,{t002}))=/><(*,SELF,{t002}) --> hold>>.
 1
-''outputMustContain('<(^pick,{t002}) =/> <(*,SELF,{t002}) --> hold>>. :\: %1.00;0.81%')
+''outputMustContain('<(^pick,{t002}) =/> <(*,SELF,{t002}) --> hold>>. :!0: %1.00;0.81%')
diff --git a/nal/test/nal8.1.17.nal b/nal/test/nal8.1.17.nal
index c47ab7dc825fad900a91342db4ae065a53ec87f2..125fddc96c3c4c0c4dbe37ac6cd06415f45f403d 100755
--- a/nal/test/nal8.1.17.nal
+++ b/nal/test/nal8.1.17.nal
@@ -1,5 +1,5 @@
 ********** [26 + 27 -> 28]
-  IN: (^pick,{t002}). :\:
-  IN: <(^pick,{t002})=/><(*,SELF,{t002}) --> hold>>. :\:
+(^pick,{t002}). :\:
+<(^pick,{t002})=/><(*,SELF,{t002}) --> hold>>. :\:
 20
-''outputMustContain('<(*,SELF,{t002}) --> hold>. :/: %1.00;0.43%')
+''outputMustContain('<(*,SELF,{t002}) --> hold>. :!0: %1.00;0.81%')
diff --git a/nal/test/nal8.1.18.nal b/nal/test/nal8.1.18.nal
index 009608d2bb3325688fb81eb332f7a6c855eceb37..513b8298871564e30403d2e629f8affe1ff8b66c 100755
--- a/nal/test/nal8.1.18.nal
+++ b/nal/test/nal8.1.18.nal
@@ -1,5 +1,5 @@
 ' ********** [28 + 10 -> 29]
-  IN: <(*,SELF,{t002}) --> hold>. :|:  
-  IN: (&/,<(*,SELF,{t002}) --> hold>,<(*,SELF,{t001}) --> at>,(^open,{t001}))! 
+<(*,SELF,{t002}) --> hold>. :|:  
+(&/,<(*,SELF,{t002}) --> hold>,+100,<(*,SELF,{t001}) --> at>,+100,(^open,{SELF},{t001}))! 
 30
-''outputMustContain('(&/,<(*,SELF,{t001}) --> at>,(^open,{t001}))! %1.00;0.43%')
+''outputMustContain('(&/,<(*,SELF,{t001}) --> at>,+100,(^open,{SELF},{t001}))! :!100: %1.00;0.73%')
diff --git a/nal/test/nal8.1.19.nal b/nal/test/nal8.1.19.nal
index 82efdf3744b971b26d6f7b448ec99ed9ab7e292b..42ae0f6d8c9313d46a5a84a577809e5627898b57 100755
--- a/nal/test/nal8.1.19.nal
+++ b/nal/test/nal8.1.19.nal
@@ -1,5 +1,5 @@
 ********** [03 + 28 -> 30]
-  IN: <(&/,<(*,SELF,{t002}) --> hold>,<(*,SELF,{t001}) --> at>,(^open,{t001}))=/><{t001} --> [opened]>>. %1.00;0.90% {0 : 1} 
-  IN: <(*,SELF,{t002}) --> hold>. :|: 
-2
-''outputMustContain('<(&/,<(*,SELF,{t001}) --> at>,(^open,{t001})) =/> <{t001} --> [opened]>>. %1.00;0.43%')
+<(&/,<(*,SELF,{t002}) --> hold>,<(*,SELF,{t001}) --> at>,(^open,{SELF},{t001})) =/> <{t001} --> [opened]>>. %1.00;0.90%
+<(*,SELF,{t002}) --> hold>. :|: 
+200
+''outputMustContain('<(&/,<(*,SELF,{t001}) --> at>,(^open,{SELF},{t001})) =/> <{t001} --> [opened]>>. %1.00;0.43%')
diff --git a/nal/test/nal8.1.2.nal b/nal/test/nal8.1.2.nal
index 5b0dee24468dd0f67f7801361b4cf9056ba7067f..57ac7e9a5c98a3dc7dd091b83e9c6230647940a1 100755
--- a/nal/test/nal8.1.2.nal
+++ b/nal/test/nal8.1.2.nal
@@ -1,4 +1,4 @@
 ********** [12 -> 13]:
-  IN: (&/,<(*,SELF,{t002}) --> reachable>,(^pick,{t002}))!
+(&/,<(*,SELF,{t002}) --> reachable>,(^pick,{t002}))!
 5
 ''outputMustContain('<(*,SELF,{t002}) --> reachable>! %1.00;0.81%')
diff --git a/nal/test/nal8.1.20.nal b/nal/test/nal8.1.20.nal
index 365e1e17d070735288a9d7445314bd5cbc7c47f9..da3c11ff098351f6d9398a4a44fb16da08ba127e 100755
--- a/nal/test/nal8.1.20.nal
+++ b/nal/test/nal8.1.20.nal
@@ -1,4 +1,4 @@
 ********** [29 -> 31]
-  IN: (&/,<(*,SELF,{t001}) --> at>,(^open,{t001}))! 
+(&/,<(*,SELF,{t001}) --> at>,(^open,{t001}))! 
 13
 ''outputMustContain('<(*,SELF,{t001}) --> at>! %1.00;0.81%')
diff --git a/nal/test/nal8.1.23.nal b/nal/test/nal8.1.23.nal
index c4424f51914469d477559e60400dedb4245205b4..5b0aadd7f43ec45f6ba97fce2cf91065a2d5a888 100755
--- a/nal/test/nal8.1.23.nal
+++ b/nal/test/nal8.1.23.nal
@@ -1,9 +1,9 @@
 
 ********** [33 + 09 -> 34]
-  IN: (^go-to,{t001}). :\: 
-  IN: <(^go-to,$1)=/><(*,SELF,$1) --> at>>. 
+(^go-to,{SELF},{t001}). :\: 
+<(^go-to,{SELF},$1)=/><(*,{SELF},$1) --> at>>. 
 41
-IN: <(*,SELF,{t001}) --> at>? :\:
+IN: <(*,{SELF},{t001}) --> at>? :\:
 140
-''outputMustContain('<(*,SELF,{t001}) --> at>. :\: %1.00;0.81%')
+''outputMustContain('<(*,{SELF},{t001}) --> at>. :!0: %1.00;0.81%')
 
diff --git a/nal/test/nal8.1.24.nal b/nal/test/nal8.1.24.nal
index 7618a51b6b7c14c51ab23e12593df5775220228e..78035d34b086d362ecda272192b3ab82f7d829c0 100755
--- a/nal/test/nal8.1.24.nal
+++ b/nal/test/nal8.1.24.nal
@@ -1,5 +1,5 @@
 ********** [34 + 30 -> 35]
-  IN: <(*,SELF,{t001}) --> at>. :|: 
-  IN: <(&/,<(*,SELF,{t001}) --> at>,(^open,{t001}))=/><{t001} --> [opened]>>. :|:
+<(*,SELF,{t001}) --> at>. :|: 
+<(&/,<(*,SELF,{t001}) --> at>,+100,(^open,{t001}))=/><{t001} --> [opened]>>. :|:
 20
-''outputMustContain('<(^open,{t001}) =/> <{t001} --> [opened]>>. :\: %1.00;0.43%')
+''outputMustContain('<(^open,{t001}) =/> <{t001} --> [opened]>>. :!100: %1.00;0.81%')
diff --git a/nal/test/nal8.1.25.nal b/nal/test/nal8.1.25.nal
index 0022f23dc0c0742fe0f652d07256069f6ba930d7..64e96bed5e1c805ab48333c7f1ad84c0e0310dc6 100755
--- a/nal/test/nal8.1.25.nal
+++ b/nal/test/nal8.1.25.nal
@@ -1,5 +1,5 @@
 ********** [34 + 29 -> 36]
-  IN: <(*,SELF,{t001}) --> at>. :|:
-  IN: (&/,<(*,SELF,{t001}) --> at>,(^open,{t001}))! 
+ <(*,SELF,{t001}) --> at>. :|:
+ (&/,<(*,SELF,{t001}) --> at>,(^open,{SELF},{t001}))! 
 25
-''outputMustContain('(^open,{t001})! %1.00;0.43%')
+''outputMustContain('(^open,{SELF},{t001})! %1.00;0.43%')
diff --git a/nal/test/nal8.1.27.nal b/nal/test/nal8.1.27.nal
index 95eecc5824fba9d48ba2c53e57092cad7be96ff8..4d5b748ac4ecdf686bcf25f8320c3627bc5fcb12 100755
--- a/nal/test/nal8.1.27.nal
+++ b/nal/test/nal8.1.27.nal
@@ -1,5 +1,5 @@
 ********** [35 + 37 -> 38]
-  IN: <(^open,{t001})=/><{t001} --> [opened]>>. :|: 
-  IN: (^open,{t001}). :|:
+<(^open,{SELF},{t001})=/><{t001} --> [opened]>>. :|: 
+(^open,{SELF},{t001}). :|:
 1
-''outputMustContain('<{t001} --> [opened]>. :/: %1.00;0.43%')
+''outputMustContain('<{t001} --> [opened]>. :!5: %1.00;0.81%')
diff --git a/nal/test/nal8.1.3.nal b/nal/test/nal8.1.3.nal
index a48b894ed8b2f39e2ed9d30e2704e45d0ed7f4f5..61f298429b5fb89c77414a00798bc3c5d58bc332 100755
--- a/nal/test/nal8.1.3.nal
+++ b/nal/test/nal8.1.3.nal
@@ -1,5 +1,5 @@
 ********** [13 + 06 -> 14]:
-  IN: <(*,SELF,{t002}) --> reachable>! 
-  IN: <(&|,<(*,$1,#2) --> on>,<(*,SELF,#2) --> at>)=|><(*,SELF,$1) --> reachable>>.
+<(*,SELF,{t002}) --> reachable>! 
+<(&|,<(*,$1,#2) --> on>,<(*,SELF,#2) --> at>)=|><(*,SELF,$1) --> reachable>>.
 10
 ''outputMustContain('(&|,<(*,SELF,#1) --> at>,<(*,{t002},#1) --> on>)! %1.00;0.81%')
diff --git a/nal/test/nal8.1.4.nal b/nal/test/nal8.1.4.nal
index 2935cd1b0a9d4e9c3191aa61a81929f026839d49..841b9f040f9ac2f834131a08f8f1387c21a39406 100755
--- a/nal/test/nal8.1.4.nal
+++ b/nal/test/nal8.1.4.nal
@@ -1,5 +1,5 @@
 ********** [07 + 14 -> 15]:
-  IN: <(*,{t002},{t003}) --> on>. :|: 
-  IN: (&|,<(*,{t002},#1) --> on>,<(*,#1,SELF) --> at>)! 
+<(*,{t002},{t003}) --> on>. :|: 
+(&|,<(*,{t002},#1) --> on>,<(*,#1,SELF) --> at>)! 
 350
-''outputMustContain('<(*,{t003},SELF) --> at>! :\: %1.00;0.81%')
+''outputMustContain('<(*,{t003},SELF) --> at>! %1.00;0.43%')
diff --git a/nal/test/nal8.1.5.nal b/nal/test/nal8.1.5.nal
index 23dbbd9229c0be91e3d45bf64c8bb8b357bbea26..8eba9938a1ab1b8f93c4c84d294563512cbff4e6 100755
--- a/nal/test/nal8.1.5.nal
+++ b/nal/test/nal8.1.5.nal
@@ -1,5 +1,5 @@
 ********** [15 + 09 -> 16]:
-  IN: <(*,SELF,{t003}) --> at>!
-  IN: <(^go-to,$1)=/><(*,SELF,$1) --> at>>.
+<(*,SELF,{t003}) --> at>!
+<(^go-to,$1)=/><(*,SELF,$1) --> at>>.
 100
 ''outputMustContain('(^go-to,{t003})! %1.00;0.81%')
diff --git a/nal/test/nal8.1.7.nal b/nal/test/nal8.1.7.nal
index 6b220c830bc0e6be98bbfcb2a16aa73a25d079f0..0b39168398b9d206ccaf7abe54d85da9503f6ef1 100755
--- a/nal/test/nal8.1.7.nal
+++ b/nal/test/nal8.1.7.nal
@@ -1,4 +1,4 @@
 <(*,{t003}) --> ^go-to>. :|: 
 <<(*,$1) --> ^go-to> =/> <(*,SELF,$1) --> at>>. 
 20
-''outputMustContain('<(*,SELF,{t003}) --> at>. :/: %1.00;0.81%')
+''outputMustContain('<(*,SELF,{t003}) --> at>. :!5: %1.00;0.81%')
diff --git a/nal/test/nal8.1.8.nal b/nal/test/nal8.1.8.nal
index 8abf6bea2ff63fd5400f61479b3c73e01a5c269c..55a1808183d0ca5c936dd3b54373e89c77a68415 100755
--- a/nal/test/nal8.1.8.nal
+++ b/nal/test/nal8.1.8.nal
@@ -1,4 +1,4 @@
 ********** [18 -> 19]
-  IN: <SELF --> (/,at,_,{t003})>. :\:
+<SELF --> (/,at,_,{t003})>. :\:
 6
-''outputMustContain('<{t003} --> (/,at,SELF,_)>. :\: %1.00;0.90%')
+''outputMustContain('<{t003} --> (/,at,SELF,_)>. :!-5: %1.00;0.90%')
diff --git a/nal/test/nal8.1.9.nal b/nal/test/nal8.1.9.nal
index a0301ed425e6c9b9847219092d50647e5354ae07..c4ecad7f1fe074d4db270e1eb5a0699816cef10a 100755
--- a/nal/test/nal8.1.9.nal
+++ b/nal/test/nal8.1.9.nal
@@ -1,5 +1,5 @@
 ********** [07 -> 20]
-  IN: <(*,{t002},{t003}) --> on>. :|:
+<(*,{t002},{t003}) --> on>. :|:
 6
 
-''outputMustContain('<{t003} --> (/,on,{t002},_)>. :\: %1.00;0.90%')
+''outputMustContain('<{t003} --> (/,on,{t002},_)>. :!0: %1.00;0.90%')
diff --git a/nal/test/nal8.2.1.nal b/nal/test/nal8.2.1.nal
index ef9fe78dd387eba4167d0b8de8b6f668dd678fce..9c598148ab34b2d39741db7d4912cd45e125919e 100644
--- a/nal/test/nal8.2.1.nal
+++ b/nal/test/nal8.2.1.nal
@@ -1,5 +1,5 @@
 ********** [10 + 05 -> 11]
-  IN: <(&/,<(*,Self,{t002}) --> hold>,(^go-to,{t001}),(^open,{t001})) =/> <{t001} --> [opened]>>.  
-  IN: <(&/,<(*,Self,{t002}) --> reachable>,(^pick,{t002})) =/> <(*,Self,{t002}) --> hold>>.  
+<(&/,<(*,Self,{t002}) --> hold>,(^go-to,{t001}),(^open,{t001})) =/> <{t001} --> [opened]>>.  
+<(&/,<(*,Self,{t002}) --> reachable>,(^pick,{t002})) =/> <(*,Self,{t002}) --> hold>>.  
 40
 ''outputMustContain('<(&/,<(*,Self,{t002}) --> reachable>,(^pick,{t002}),(^go-to,{t001}),(^open,{t001})) =/> <{t001} --> [opened]>>. %1.00;0.81%')
diff --git a/nal/test/nal8.2.2.nal b/nal/test/nal8.2.2.nal
index 07a6ed318f9a74706cfd8fd6563884d7cf17a798..415722698f5ee8d1d39758c14d456cd95a8e83b7 100644
--- a/nal/test/nal8.2.2.nal
+++ b/nal/test/nal8.2.2.nal
@@ -1,6 +1,6 @@
 
 ********** [06 + 07 -> 12]
-  IN: <(&|,<(*,$1,$2) --> on>,<(*,Self,$2) --> at>) =|> <(*,Self,$1) --> reachable>>.
-  IN: <(*,{t002},{t003}) --> on>. :|:
-8
-''outputMustContain('<<(*,Self,{t003}) --> at> =|> <(*,Self,{t002}) --> reachable>>. :\: %1.00;0.81%')
+<(&|,<(*,$1,$2) --> on>,<(*,Self,$2) --> at>) =|> <(*,Self,$1) --> reachable>>.
+<(*,{t002},{t003}) --> on>. :|:
+80
+''outputMustContain('<<(*,Self,{t003}) --> at> =|> <(*,Self,{t002}) --> reachable>>. :!0: %1.00;0.81%')
diff --git a/nal/test/nal8.2.3.nal b/nal/test/nal8.2.3.nal
index 240247b0b38e7df4a709697fad29ad68ecc85853..f1e7e5b6273a4dd87ed6f955a7d0c73a6263ad3d 100644
--- a/nal/test/nal8.2.3.nal
+++ b/nal/test/nal8.2.3.nal
@@ -1,5 +1,5 @@
 ********** [13 + 09 -> 14]
-  IN: <(&/,<(*,Self,{t003}) --> at>,(^pick,{t002}),(^go-to,{t001}),(^open,{t001})) =/> <{t001} --> [opened]>>. :|: 
-  IN: <(^go-to,$1) =/> <(*,Self,$1) --> at>>.  
+<(&/,<(*,Self,{t003}) --> at>,(^pick,{t002}),(^go-to,{t001}),(^open,{t001})) =/> <{t001} --> [opened]>>. :|: 
+<(^go-to,$1) =/> <(*,Self,$1) --> at>>.  
 16
 ''outputMustContain('<(&/,(^go-to,{t003}),(^pick,{t002}),(^go-to,{t001}),(^open,{t001})) =/> <{t001} --> [opened]>>. %1.00;0.43%')
diff --git a/nal/test/nal8.2.4.nal b/nal/test/nal8.2.4.nal
index 85cf536586850fdff13eabf7724aca17035047df..86b45cbee5bc333f69b48140b741a481d6ed4cc0 100644
--- a/nal/test/nal8.2.4.nal
+++ b/nal/test/nal8.2.4.nal
@@ -1,5 +1,5 @@
 ********** [01 + 14 -> 15]
-  IN: <{t001} --> [opened]>!  
-  IN: <(&/,(^go-to,{t003}),(^pick,{t002}),(^go-to,{t001}),(^open,{t001})) =/> <{t001} --> [opened]>>. :|:
+<{t001} --> [opened]>!  
+<(&/,(^go-to,{t003}),(^pick,{t002}),(^go-to,{t001}),(^open,{t001})) =/> <{t001} --> [opened]>>. :|:
 24
 ''outputMustContain('(&/,(^go-to,{t003}),(^pick,{t002}),(^go-to,{t001}),(^open,{t001}))! %1.00;0.43%')
diff --git a/nal/test/nal8.3.0.nal b/nal/test/nal8.3.0.nal
index d374240614f1a74eca6e3eefae4f11d1fbfc55a9..e23eff3120a98c5bbc3a2f7876687c4476a032cb 100644
--- a/nal/test/nal8.3.0.nal
+++ b/nal/test/nal8.3.0.nal
@@ -1,6 +1,6 @@
 
 ********** [01 + 06 -> 10]: 
-  IN: <{t001} --> [opened]>!  
-  IN: <(&/,<(*,Self,{t001}) --> at>,(^break,{t001})) =/> <{t001} --> [opened]>>.
+<{t001} --> [opened]>!  
+<(&/,<(*,Self,{t001}) --> at>,(^break,{t001})) =/> <{t001} --> [opened]>>.
 28
 ''outputMustContain('(&/,<(*,Self,{t001}) --> at>,(^break,{t001}))! %1.00;0.81%')
diff --git a/nal/test/nal8.3.1.nal b/nal/test/nal8.3.1.nal
index 9202078d6265322da051be8ce8367ec3acab7fc3..e243a8cc2227c750555d74e9199c3a5f7b8f6401 100644
--- a/nal/test/nal8.3.1.nal
+++ b/nal/test/nal8.3.1.nal
@@ -1,6 +1,6 @@
 
 ********** [10 + 07 -> 11]: 
-  IN: (&/,<(*,Self,{t001}) --> at>,(^break,{t001}))! 
-  IN: <(*,Self,{t001}) --> at>. :|: 
+(&/,<(*,Self,{t001}) --> at>,(^break,{t001}))! 
+<(*,Self,{t001}) --> at>. :|: 
 25
 ''outputMustContain('(^break,{t001})! %1.00;0.43%')
diff --git a/nal/test/nal8.3.2.nal b/nal/test/nal8.3.2.nal
index c7b468b5fec85a35b17290f78d5fa24df1ef31c1..84bbd03f952f2647149ed8ec96307f4cd46ea484 100644
--- a/nal/test/nal8.3.2.nal
+++ b/nal/test/nal8.3.2.nal
@@ -1,6 +1,6 @@
 
 ********** [09 + 08 -> 12]:
-  IN: <(^break,$1) =/> <$1 --> [damaged]>>.
-  IN: <{t001} --> [damaged]>! 
+<(^break,$1) =/> <$1 --> [damaged]>>.
+<{t001} --> [damaged]>! 
 17
 ''outputMustContain('(^break,{t001})! %1.00;0.81%')
diff --git a/nal/test/nal8.3.3.nal b/nal/test/nal8.3.3.nal
index d2bf5783a3c89fe1d35e20b422e11924b8c9a1c9..3b1067d4d4bd8055557145ac88a79c11cafaebe8 100644
--- a/nal/test/nal8.3.3.nal
+++ b/nal/test/nal8.3.3.nal
@@ -1,7 +1,7 @@
 ********** [12 + 11 -> 13]: 
-  IN: (^break,{t001})! %0.00;0.86% 
+(^break,{t001})! %0.00;0.86% 
 1
-  IN: (^break,{t001})! %1.00;0.73% 
+(^break,{t001})! %1.00;0.73% 
 1
 ''outputMustContain('(^break,{t001})! %0.31;0.90%')
 
diff --git a/nal/test/nal8.3.4.nal b/nal/test/nal8.3.4.nal
index 4cad258dce5d6219f436c46bd4e6213e1cf415b2..f8457d03831365311a11fea903b8ca5ec6b9403f 100644
--- a/nal/test/nal8.3.4.nal
+++ b/nal/test/nal8.3.4.nal
@@ -1,6 +1,6 @@
 ********** [13 + 14 -> 15]: 
-  IN: (^break,{t001})! %0.31;0.89% 
+(^break,{t001})! %0.31;0.89% 
 1
-  IN: (^break,{t001})! %1.00;0.95% 
+(^break,{t001})! %1.00;0.95% 
 1
 ''outputMustContain('(^break,{t001})! %0.79;0.96%')
diff --git a/nal/test/nal8.4.0.nal b/nal/test/nal8.4.0.nal
index d6e0e960784a48ac35d015ba95b1b5fd695345de..271c490bee50fd36da5152090a2da48503c02583 100644
--- a/nal/test/nal8.4.0.nal
+++ b/nal/test/nal8.4.0.nal
@@ -1,6 +1,6 @@
 
 ********** [04 + 03 -> 05]:
-  IN: <(*,Self,key001) --> reachable>. :|: 
-  IN: <(&/,<(*,Self,key001) --> reachable>,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. 
+<(*,Self,key001) --> reachable>. :|: 
+<(&/,<(*,Self,key001) --> reachable>,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. 
 1
-''outputMustContain('<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :\: %1.00;0.81%') 
+''outputMustContain('<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :!0: %1.00;0.81%') 
diff --git a/nal/test/nal8.4.1.nal b/nal/test/nal8.4.1.nal
index c7b8a5a25773d2341cc8368a159134ff8368568b..c3e329ff2d3ee544bec7da652419d25e96a16ba0 100644
--- a/nal/test/nal8.4.1.nal
+++ b/nal/test/nal8.4.1.nal
@@ -1,6 +1,6 @@
 
 ********** [05 + 01 -> 06]:
-  IN: <(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|:  
-  IN: <(*,Self,key001) --> hold>!  
+<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|:  
+<(*,Self,key001) --> hold>!  
 8
 ''outputMustContain('(^pick,key001)! %1.00;0.43%') 
diff --git a/nal/test/nal8.4.2.nal b/nal/test/nal8.4.2.nal
index ff4aa7b6725d79eaf9922a8b6755a39bdbbb6dcc..7c062ea8b9ac76008f14b9b13bf028e033492c93 100644
--- a/nal/test/nal8.4.2.nal
+++ b/nal/test/nal8.4.2.nal
@@ -1,6 +1,6 @@
 ********** [07 + 05 -> 08]:
-  IN: (^pick,key001). :\: 
-  IN: <(^pick,key001) =/> <(*,Self,key001) --> hold>>.  
+(^pick,key001). :\: 
+<(^pick,key001) =/> <(*,Self,key001) --> hold>>.  
 15
-''outputMustContain('<(*,Self,key001) --> hold>. :\: %1.00;0.81%') 
+''outputMustContain('<(*,Self,key001) --> hold>. :!0: %1.00;0.81%') 
 
diff --git a/nal/test/nal8.4.3.nal b/nal/test/nal8.4.3.nal
index 509828eb0f582ff27a5ca2edaa3b24339e3e0ee5..6f0cd28556695be6fff500f751ec72f8ac4c46b8 100644
--- a/nal/test/nal8.4.3.nal
+++ b/nal/test/nal8.4.3.nal
@@ -1,6 +1,6 @@
 ********** [08 + 09 -> 10]:
-  IN: <(*,Self,key001) --> hold>. :|: %1.00;0.81% 
+<(*,Self,key001) --> hold>. :|: %1.00;0.81% 
 1
-  IN: <(*,Self,key001) --> hold>. :|:
+<(*,Self,key001) --> hold>. :|:
 5
-''outputMustContain('<(*,Self,key001) --> hold>. :|: %1.00;0.93%') 
+''outputMustContain('<(*,Self,key001) --> hold>. :!1: %1.00;0.93%') 
diff --git a/nal/test/nal8.4.4.nal b/nal/test/nal8.4.4.nal
index bf3a638f0bedafe84994ddd85e643747836cead7..c8a1318aebb944d0829cd4eb7207b85d5ee5561e 100644
--- a/nal/test/nal8.4.4.nal
+++ b/nal/test/nal8.4.4.nal
@@ -1,10 +1,10 @@
 
 
 ********** [02 + 10 -> 11]:
-  IN: <(*,Self,key001) --> hold>. :|: %0% 
+<(*,Self,key001) --> hold>. :|: %0% 
 5
-  IN: <(*,Self,key001) --> hold>. :|: %1.00;0.91% 
+<(*,Self,key001) --> hold>. :|: %1.00;0.91% 
 5
-  IN: <(*,Self,key001) --> hold>? :|: 
+<(*,Self,key001) --> hold>? :|: 
 50
-''outputMustContain('<(*,Self,key001) --> hold>. :\: %0.53;0.95%') 
+''outputMustContain('<(*,Self,key001) --> hold>. :!5: %0.53;0.95%') 
diff --git a/nal/test/nal8.4.5.nal b/nal/test/nal8.4.5.nal
deleted file mode 100644
index e78beaae1b4c77aff838bfd9eea08b599085f9f6..0000000000000000000000000000000000000000
--- a/nal/test/nal8.4.5.nal
+++ /dev/null
@@ -1,7 +0,0 @@
-
-********** [07 + 11 -> 12]:
-  IN: (^pick,key001). :\:  
-  IN: <(*,Self,key001) --> hold>. :|: 
-5
-''outputMustContain('<(&/,(^pick,key001),+3) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.45%') 
-'adjusted +2 to +3
\ No newline at end of file
diff --git a/nal/test/nal8.4.6.nal b/nal/test/nal8.4.6.nal
index 37679e366a66eda866b388dae16920677b23aa51..4f77df983c14160b1ccb8d433559898b416a13d0 100644
--- a/nal/test/nal8.4.6.nal
+++ b/nal/test/nal8.4.6.nal
@@ -1,5 +1,5 @@
 ********** [05 + 12 -> 13]:
-  IN: <(^pick,key001) =/> <(*,Self,key001) --> hold>>. :\: %1.00;0.90%
-  IN: <(^pick,key001) =/> <(*,Self,key001) --> hold>>. :\: %1.00;0.45% 
+<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :\: %1.00;0.90%
+<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :\: %1.00;0.45% 
 35
-''outputMustContain('<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :\: %1.00;0.91%') 
+''outputMustContain('<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :!-5: %1.00;0.91%') 
diff --git a/nal/test/nal8.4.7.nal b/nal/test/nal8.4.7.nal
index b22132251029671dafd2ac01e096ccede528e3f6..daa365915ff7f9993bd1bf05169dfe83f7a7ea4c 100644
--- a/nal/test/nal8.4.7.nal
+++ b/nal/test/nal8.4.7.nal
@@ -1,9 +1,8 @@
 
 
 ********** [04 + 13 -> 14]:
-  IN: <(*,Self,key001) --> reachable>. :|:
+<(*,Self,key001) --> reachable>. :|:
 11
-  IN: <(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: 
+<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: 
 20
-''outputMustContain('<(&/,<(*,Self,key001) --> reachable>,+4,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.45%') 
-'adjusted +3 to +4
+''outputMustContain('<(&/,<(*,Self,key001) --> reachable>,+11,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. :!11: %1.00;0.45%') 
diff --git a/nal/test/nal8.5.0.nal b/nal/test/nal8.5.0.nal
index 9512b5ab6086d5fd22ea7482017c82b981318d45..e7c61ac48c4f013d91625c52377da552b80965e9 100644
--- a/nal/test/nal8.5.0.nal
+++ b/nal/test/nal8.5.0.nal
@@ -1,6 +1,6 @@
 
 ********** [03 + 04 -> 05]:
-  IN: <(&/,<(*,Self,key001) --> reachable>,(^pick,key001)) =/> <(*,Self,key001) --> hold>>.
-  IN: <(*,Self,key001) --> reachable>. :|:  
+<(&/,<(*,Self,key001) --> reachable>,(^pick,key001)) =/> <(*,Self,key001) --> hold>>.
+<(*,Self,key001) --> reachable>. :|:  
 1
-''outputMustContain('<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :\: %1.00;0.81%')
+''outputMustContain('<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :!0: %1.00;0.81%')
diff --git a/nal/test/nal8.5.1.nal b/nal/test/nal8.5.1.nal
index 71d0282d749b1555655bbbb492d870f84508e335..2c5fe42d2d8a88ce35d1712935853188ea21b9ec 100644
--- a/nal/test/nal8.5.1.nal
+++ b/nal/test/nal8.5.1.nal
@@ -1,6 +1,6 @@
 
 ********** [05 + 01 -> 06]:
-  IN: <(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.81% 
-  IN: <(*,Self,key001) --> hold>! 
+<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.81% 
+<(*,Self,key001) --> hold>! 
 10
 ''outputMustContain('(^pick,key001)! %1.00;0.40%')
diff --git a/nal/test/nal8.5.2.nal b/nal/test/nal8.5.2.nal
index c78dcf657151752faffc7d045e2c5daeb65532a3..f8aeecdb85c0f0760738c40cebc6cf742a40186f 100644
--- a/nal/test/nal8.5.2.nal
+++ b/nal/test/nal8.5.2.nal
@@ -1,6 +1,6 @@
 
 ********** [07 + 05 -> 08]:
-  IN: (^pick,key001). :|:
-  IN: <(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.81%
+(^pick,key001). :|:
+<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.81%
 8
-''outputMustContain('<(*,Self,key001) --> hold>. :/: %1.00;0.38%')
+''outputMustContain('<(*,Self,key001) --> hold>. :!5: %1.00;0.73%')
diff --git a/nal/test/nal8.5.3.nal b/nal/test/nal8.5.3.nal
index fc9a2e380a482db970b4bc34a980d784b4dae867..81c7d912943602d2743bfc4320004bb0657275f2 100644
--- a/nal/test/nal8.5.3.nal
+++ b/nal/test/nal8.5.3.nal
@@ -1,7 +1,7 @@
 ********** [08 + 09 -> 10]:
-  IN: <(*,Self,key001) --> hold>. :|: %1.00;0.73%
+<(*,Self,key001) --> hold>. :|: %1.00;0.73%
 6
-  IN: <(*,Self,key001) --> hold>. :|: %1.00;0.90%
+<(*,Self,key001) --> hold>. :|: %1.00;0.90%
 10
-''outputMustContain('<(*,Self,key001) --> hold>. :|: %1.00;0.92%')
+''outputMustContain('<(*,Self,key001) --> hold>. :!6: %1.00;0.92%')
 
diff --git a/nal/test/nal8.5.4.nal b/nal/test/nal8.5.4.nal
index c22ada55295cc725a22c0fd7f79a24b263e18632..379b12bf5abcd8acdf9d48664eec4034dafaf964 100644
--- a/nal/test/nal8.5.4.nal
+++ b/nal/test/nal8.5.4.nal
@@ -1,8 +1,10 @@
 ********** [07 + 09 -> 11]:
-  IN: (^pick,key001). :|: %1.00;0.90% 
+<a --> A>. :|:
+10
+(^pick,{SELF},key001). :|: %1.00;0.90% 
 11
-  IN: <(*,Self,key001) --> hold>. :|: 
+<(*,Self,key001) --> hold>. :|: 
 16
-''outputMustContain('<(&/,(^pick,key001),+4) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.45%)
+''outputMustContain('<(&/,<a --> A>,+10,(^pick,{SELF},key001),+11) =/> <(*,Self,key001) --> hold>>. :!21: %1.00;0.42%)
 'adjusted +3 to +4 ^
 
diff --git a/nal/test/nal8.5.5.nal b/nal/test/nal8.5.5.nal
index 092b4e5fcef3974f1236e8279aef42c7a37c7725..b798582404f18ed5e7ddfb3ad3c2688aa3b03b38 100644
--- a/nal/test/nal8.5.5.nal
+++ b/nal/test/nal8.5.5.nal
@@ -1,7 +1,7 @@
 ********** [05 + 11 -> 12]:
-  IN: <(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.81% {0 : 0 : 1} 
-11
-  IN: <(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.45% {1 : 1 : 2} 
+<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.81%
+1
+<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.45%
 10
-''outputMustContain('<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.84%')
+''outputMustContain('<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :!1: %1.00;0.84%')
 
diff --git a/nal/test/nal8.5.6.nal b/nal/test/nal8.5.6.nal
index cc7249e850740f66d53b533d73fb3ec3c004a0f2..9100fd49d724720a4ded18180ed5f26705c1d107 100644
--- a/nal/test/nal8.5.6.nal
+++ b/nal/test/nal8.5.6.nal
@@ -1,9 +1,9 @@
 
 ********** [04 + 12 -> 13]:
-  IN: <(*,Self,key001) --> reachable>. :|: 
+<(*,Self,key001) --> reachable>. :|: 
 11
-  IN: <(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.84%
+<(^pick,key001) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.84%
 17
-''outputMustContain('<(&/,<(*,Self,key001) --> reachable>,+4,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. :|: %1.00;0.43%')
+''outputMustContain('<(&/,<(*,Self,key001) --> reachable>,+11,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. :!11: %1.00;0.43%')
 'adjusted +3 to +4
 
diff --git a/nal/test/nal8.5.7.nal b/nal/test/nal8.5.7.nal
index e5e301a6699812005542e323d24268f7b1131e0b..2ae211d275faedd6a3a2afddd6c3aeffa8c43549 100644
--- a/nal/test/nal8.5.7.nal
+++ b/nal/test/nal8.5.7.nal
@@ -1,8 +1,8 @@
 
 ********** [03 + 13 -> 14]:
-  IN: <(&/,<(*,Self,key001) --> reachable>,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. %1.00;0.90% 
+<(&/,<(*,Self,key001) --> reachable>,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. %1.00;0.90% 
 1
-  IN: <(&/,<(*,Self,key001) --> reachable>,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. %1.00;0.43% 
+<(&/,<(*,Self,key001) --> reachable>,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. %1.00;0.43% 
 1
 ''outputMustContain('<(&/,<(*,Self,key001) --> reachable>,(^pick,key001)) =/> <(*,Self,key001) --> hold>>. %1.00;0.91%')
 
diff --git a/nars_core/nars/control/DerivationContext.java b/nars_core/nars/control/DerivationContext.java
index 8e12f4d3c49b7c371f82fb9bc00dc6dca56b1f5c..070f3589b32cf7a48ce36948e12b4ce56185a016 100644
--- a/nars_core/nars/control/DerivationContext.java
+++ b/nars_core/nars/control/DerivationContext.java
@@ -63,9 +63,9 @@ public class DerivationContext {
     }
     public boolean derivedTask(final Task task, final boolean revised, final boolean single, boolean overlapAllowed, boolean addToMemory) {                        
 
-        if(task.sentence.isGoal() && (task.sentence.term instanceof Implication ||
+        if((task.sentence.isGoal() || task.sentence.isQuest()) && (task.sentence.term instanceof Implication ||
                                       task.sentence.term instanceof Equivalence)) {
-            return false; //implication and equivalence goals are not supported anymore
+            return false; //implication and equivalence goals and quests are not supported anymore
         }
 
         if (!task.budget.aboveThreshold()) {
@@ -74,7 +74,7 @@ public class DerivationContext {
         } 
         if (task.sentence != null && task.sentence.truth != null) {
             float conf = task.sentence.truth.getConfidence();
-            if (conf == 0) {
+            if (conf < Parameters.TRUTH_EPSILON) {
                 //no confidence - we can delete the wrongs out that way.
                 memory.removeTask(task, "Ignored (zero confidence)");
                 return false;
@@ -236,23 +236,6 @@ public class DerivationContext {
         return null;
     }
 
-    /**
-     * Shared final operations by all double-premise rules, called from the
-     * rules except StructuralRules
-     *
-     * @param newContent The content of the sentence in task
-     * @param newTruth The truth value of the sentence in task
-     * @param newBudget The budget value in task
-     * @param revisible Whether the sentence is revisible
-     */
-    //    public void doublePremiseTask(Term newContent, TruthValue newTruth, BudgetValue newBudget, boolean revisible) {
-    //        if (newContent != null) {
-    //            Sentence taskSentence = currentTask.getSentence();
-    //            Sentence newSentence = new Sentence(newContent, taskSentence.getPunctuation(), newTruth, newStamp, revisible);
-    //            Task newTask = new Task(newSentence, newBudget, currentTask, currentBelief);
-    //            derivedTask(newTask, false, false);
-    //        }
-    //    }
     /**
      * Shared final operations by all single-premise rules, called in
      * StructuralRules
diff --git a/nars_core/nars/entity/Sentence.java b/nars_core/nars/entity/Sentence.java
index ec988a02ae48bd3bb531e310bd9ab8e896bcb6f7..a79eb84de4cad9104d6c9a1c7d3d639863353e94 100644
--- a/nars_core/nars/entity/Sentence.java
+++ b/nars_core/nars/entity/Sentence.java
@@ -110,7 +110,7 @@ public class Sentence<T extends Term> implements Cloneable, Serializable {
                         //refined:
                         int u = 0;
                         while(c.term[c.term.length-1-u] instanceof Interval) {
-                            time += ((Interval)c.term[c.term.length-1]).time;
+                            time += ((Interval)c.term[c.term.length-1-u]).time;
                             u++;
                         }
                         
@@ -123,6 +123,24 @@ public class Sentence<T extends Term> implements Cloneable, Serializable {
                         if(!c.isSpatial && stamp!=null && stamp.getOccurrenceTime() != Stamp.ETERNAL)
                             stamp.setOccurrenceTime(stamp.getOccurrenceTime()-time);
                     }
+                    if(c.term[0] instanceof Interval) {
+                        long time=0; 
+                        //refined:
+                        int u = 0;
+                        while(c.term[u] instanceof Interval) {
+                            time += ((Interval)c.term[u]).time;
+                            u++;
+                        }
+                        
+                        Term[] term2=new Term[c.term.length-u];
+                        System.arraycopy(c.term, u, term2, 0, term2.length);
+                        _content=(T) Conjunction.make(term2, c.getTemporalOrder(), c.isSpatial);
+                        //ok we removed a part of the interval, we have to transform the occurence time of the sentence back
+                        //accordingly
+                        
+                        if(!c.isSpatial && stamp!=null && stamp.getOccurrenceTime() != Stamp.ETERNAL)
+                            stamp.setOccurrenceTime(stamp.getOccurrenceTime()+time);
+                    }
                 }
             }
         }
@@ -497,12 +515,15 @@ public class Sentence<T extends Term> implements Cloneable, Serializable {
             Long Int = diffabs;
             timediff = diff>0 ? "+"+String.valueOf(Int) : "-"+String.valueOf(Int);
         }
-        String tenseString = ":"+timediff+":"; //stamp.getTense(t, nar.memory.getDuration());
         
+        if(Parameters.TEST_RUNNING) {
+            timediff = "!"+String.valueOf(stamp.getOccurrenceTime());
+        }
+        
+        String tenseString = ":"+timediff+":"; //stamp.getTense(t, nar.memory.getDuration());
         if(stamp.getOccurrenceTime() == Stamp.ETERNAL)
             tenseString="";
         
-        
         CharSequence stampString = showStamp ? stamp.name() : null;
         
         int stringLength = contentName.length() + tenseString.length() + 1 + 1;
diff --git a/nars_core/nars/inference/CompositionalRules.java b/nars_core/nars/inference/CompositionalRules.java
index 1b2e8b222b5d5f3429112248a6240e89567734c2..5110b15df16f2123236a4ab06405484119fd3578 100644
--- a/nars_core/nars/inference/CompositionalRules.java
+++ b/nars_core/nars/inference/CompositionalRules.java
@@ -297,10 +297,10 @@ public final class CompositionalRules {
         if (isTemporalConjunction && (compound.getTemporalOrder() == TemporalRules.ORDER_FORWARD) && (index != 0)) {
             return;
         }
-        long occurrence_time = nal.getTheNewStamp().getOccurrenceTime();
+        long occurrence_time = nal.getCurrentTask().sentence.getOccurenceTime();
         if(isTemporalConjunction && (compound.getTemporalOrder() == TemporalRules.ORDER_FORWARD)) {
             if(!nal.getCurrentTask().sentence.isEternal() && compound.term[index + 1] instanceof Interval) {
-                long shift_occurrence = ((Interval)compound.term[1]).time;
+                long shift_occurrence = ((Interval)compound.term[index + 1]).time;
                 occurrence_time = nal.getCurrentTask().sentence.getOccurenceTime() + shift_occurrence;
             }
         }
diff --git a/nars_core/nars/inference/RuleTables.java b/nars_core/nars/inference/RuleTables.java
index 55931bb8a65e57f97a7a869560e2a050178ff7e8..6e55776915a0deb87badd653f2cce9d0553c9ad6 100644
--- a/nars_core/nars/inference/RuleTables.java
+++ b/nars_core/nars/inference/RuleTables.java
@@ -267,7 +267,7 @@ public class RuleTables {
             Operation op = (Operation) taskTerm;
             if(op.getPredicate() == nal.memory.getOperator("^want")) {
                 TruthValue newTruth = TruthFunctions.deduction(task.sentence.truth, Parameters.reliance);
-                nal.singlePremiseTask(beliefTerm, Symbols.GOAL_MARK, newTruth, BudgetFunctions.forward(newTruth, nal));
+                nal.singlePremiseTask(((Operation)taskTerm).getArguments().term[1], Symbols.GOAL_MARK, newTruth, BudgetFunctions.forward(newTruth, nal));
             }
         }
     }
@@ -440,8 +440,10 @@ public class RuleTables {
                     }
                     t1 = beliefStatement.getPredicate();
                     t2 = taskStatement.getPredicate();
-                    SyllogisticRules.abdIndCom(t1, t2, taskSentence, belief, figure, nal);
-
+                    boolean sensational = SyllogisticRules.abdIndCom(t1, t2, taskSentence, belief, figure, nal);
+                    if(sensational) {
+                        return;
+                    }
                     CompositionalRules.composeCompound(taskStatement, beliefStatement, 0, nal);
                     //if(taskSentence.getOccurenceTime()==Stamp.ETERNAL && belief.getOccurenceTime()==Stamp.ETERNAL)
                     CompositionalRules.introVarOuter(taskStatement, beliefStatement, 0, nal);//introVarImage(taskContent, beliefContent, index, memory);             
@@ -495,7 +497,10 @@ public class RuleTables {
                     t1 = taskStatement.getSubject();
                     t2 = beliefStatement.getSubject();
                     if (!SyllogisticRules.conditionalAbd(t1, t2, taskStatement, beliefStatement, nal)) {         // if conditional abduction, skip the following
-                        SyllogisticRules.abdIndCom(t1, t2, taskSentence, belief, figure, nal);
+                        boolean sensational = SyllogisticRules.abdIndCom(t1, t2, taskSentence, belief, figure, nal);
+                        if(sensational) {
+                            return;
+                        }
                         CompositionalRules.composeCompound(taskStatement, beliefStatement, 1, nal);
                         CompositionalRules.introVarOuter(taskStatement, beliefStatement, 1, nal);// introVarImage(taskContent, beliefContent, index, memory);
 
@@ -760,13 +765,10 @@ public class RuleTables {
             } else if (compound.containsTerm(component)) {
                 StructuralRules.structuralCompound(compound, component, compoundTask, index, nal);
             }
-//        } else if ((compound instanceof Negation) && !memory.getCurrentTask().isStructural()) {
         } else if (compound instanceof Negation) {
             if (compoundTask) {
                 if (compound.term[0] instanceof CompoundTerm)
                     StructuralRules.transformNegation((CompoundTerm)compound.term[0], nal);
-            } else {
-                StructuralRules.transformNegation(compound, nal);
             }
         }
     }
@@ -827,10 +829,11 @@ public class RuleTables {
             if (task.sentence.isJudgment()) {
                 if (statement instanceof Inheritance) {
                     StructuralRules.structuralCompose1(compound, index, statement, nal);
-                    if (!(compound instanceof SetExt || compound instanceof SetInt || compound instanceof Negation)) {
+                    if (!(compound instanceof SetExt || compound instanceof SetInt || compound instanceof Negation
+                            || compound instanceof Conjunction || compound instanceof Disjunction)) {
                         StructuralRules.structuralCompose2(compound, index, statement, side, nal);
                     }    // {A --> B, A @ (A&C)} |- (A&C) --> (B&C)
-                } else if ((statement instanceof Similarity) && !(compound instanceof Conjunction)) {
+                } else if (!(compound instanceof Negation || compound instanceof Conjunction || compound instanceof Disjunction)) {
                     StructuralRules.structuralCompose2(compound, index, statement, side, nal);
                 }       // {A <-> B, A @ (A&C)} |- (A&C) <-> (B&C)
             }
diff --git a/nars_core/nars/inference/SyllogisticRules.java b/nars_core/nars/inference/SyllogisticRules.java
index beb3afd5f834cdb2150ca0d435056c13393f208c..2f1ba89cb263d81585cd0dc6469ae1cb7df61538 100644
--- a/nars_core/nars/inference/SyllogisticRules.java
+++ b/nars_core/nars/inference/SyllogisticRules.java
@@ -125,9 +125,9 @@ public final class SyllogisticRules {
      * removed?
      * @param nal Reference to the memory
      */
-    static void abdIndCom(Term term1, Term term2, final Sentence sentence1, final Sentence sentence2, final int figure, final DerivationContext nal) {
+    static boolean abdIndCom(Term term1, Term term2, final Sentence sentence1, final Sentence sentence2, final int figure, final DerivationContext nal) {
         if (Statement.invalidStatement(term1, term2) || Statement.invalidPair(term1, term2)) {
-            return;
+            return false;
         }
         int order1 = sentence1.term.getTemporalOrder();
         int order2 = sentence2.term.getTemporalOrder();
@@ -165,29 +165,45 @@ public final class SyllogisticRules {
             budget3 = BudgetFunctions.forward(truth3, nal);
         }
         
-        long delta2 = 0;
-        while ((term2 instanceof Conjunction) && (((CompoundTerm) term2).term[0] instanceof Interval)) {
+        if(term1.imagination != null && term2.imagination != null) {
+            TruthValue T = term1.imagination.AbductionOrComparisonTo(term2.imagination, true);
+            nal.doublePremiseTask(
+                Statement.make(NativeOperator.SIMILARITY, term1, term2, TemporalRules.ORDER_NONE), 
+                    T, budget3.clone(),false, false);   
+            TruthValue T2 = term1.imagination.AbductionOrComparisonTo(term2.imagination, false);
+            nal.doublePremiseTask(
+                Statement.make(NativeOperator.INHERITANCE, term1, term2, TemporalRules.ORDER_NONE), 
+                    T2, budget3.clone(),false, false);   
+            TruthValue T3 = term2.imagination.AbductionOrComparisonTo(term1.imagination, false);
+            nal.doublePremiseTask(
+                Statement.make(NativeOperator.INHERITANCE, term2, term1, TemporalRules.ORDER_NONE), 
+                    T3, budget3.clone(),false, false);   
+            return true; //no need for other syllogistic inference, it were sensational terms,
+        }           //but it would not hurt to allow it either.. but why afford tasks that summarize
+                    //so little evidence in comparison to the amount summarized by the array comparison.
+        long occurrence_time2 = nal.getCurrentTask().sentence.getOccurenceTime();
+        while (occurrence_time2!=Stamp.ETERNAL && (term2 instanceof Conjunction) && (((CompoundTerm) term2).term[0] instanceof Interval)) {
             Interval interval = (Interval) ((CompoundTerm) term2).term[0];
-            delta2 += interval.time;
+            occurrence_time2 += interval.time;
             term2 = ((CompoundTerm)term2).setComponent(0, null, nal.mem());
         }
-        long delta1 = 0;
-        while ((term1 instanceof Conjunction) && (((CompoundTerm) term1).term[0] instanceof Interval)) {
+        long occurrence_time1 = nal.getCurrentTask().sentence.getOccurenceTime();
+        while (occurrence_time1!=Stamp.ETERNAL && (term1 instanceof Conjunction) && (((CompoundTerm) term1).term[0] instanceof Interval)) {
             Interval interval = (Interval) ((CompoundTerm) term1).term[0];
-            delta1 += interval.time;
+            occurrence_time1 += interval.time;
             term1 = ((CompoundTerm)term1).setComponent(0, null, nal.mem());
         }
         
         if (order != ORDER_INVALID) {
-            nal.getTheNewStamp().setOccurrenceTime(delta1);
+            nal.getTheNewStamp().setOccurrenceTime(occurrence_time1);
             nal.doublePremiseTask(
                     Statement.make(taskContent, term1, term2, order), 
                         truth1, budget1,false, false);
-            nal.getTheNewStamp().setOccurrenceTime(delta2);
+            nal.getTheNewStamp().setOccurrenceTime(occurrence_time2);
             nal.doublePremiseTask(
                     Statement.make(taskContent, term2, term1, reverseOrder(order)), 
                         truth2, budget2,false, false);
-            nal.getTheNewStamp().setOccurrenceTime(delta1);
+            nal.getTheNewStamp().setOccurrenceTime(occurrence_time1);
             nal.doublePremiseTask(
                     Statement.makeSym(taskContent, term1, term2, order), 
                         truth3, budget3,false, false);
@@ -217,6 +233,7 @@ public final class SyllogisticRules {
                 Statement.make(NativeOperator.SIMILARITY, term1, term2, TemporalRules.ORDER_NONE), 
                     truth3, budget3.clone(),false, false);
         }
+        return false;
     }
     
     
@@ -414,14 +431,13 @@ public final class SyllogisticRules {
             return;
         
         int order = statement.getTemporalOrder();
-        long occurrence_time = nal.getTheNewStamp().getOccurrenceTime();
+        long occurrence_time = nal.getCurrentTask().sentence.getOccurenceTime();
         if ((order != ORDER_NONE) && (order!=ORDER_INVALID)) {
             long baseTime = subSentence.getOccurenceTime(); 
-            if (baseTime == Stamp.ETERNAL) { // =/> always should produce events
-                baseTime = nal.getTime();
+            if (baseTime != Stamp.ETERNAL) {
+                long inc = order * Parameters.DURATION;
+                occurrence_time = (side == 0) ? baseTime+inc : baseTime-inc;
             }
-            long inc = order * Parameters.DURATION;
-            occurrence_time = (side == 0) ? baseTime+inc : baseTime-inc;
         }
 
         TruthValue beliefTruth = beliefSentence.truth;
@@ -591,7 +607,7 @@ public final class SyllogisticRules {
         if (content == null)
             return;        
         
-        long occurrence_time = nal.getTheNewStamp().getOccurrenceTime();
+        long occurrence_time = nal.getCurrentTask().sentence.getOccurenceTime();
         if (delta != 0) {
             long baseTime = taskSentence.getOccurenceTime();
             if (baseTime != Stamp.ETERNAL) {
diff --git a/nars_core/nars/language/Interval.java b/nars_core/nars/language/Interval.java
index c0242f450707cbb92b5f8e7276d7d4eb95ecee63..722bcdf6d4461b3f720828c55a39a1bd7f149479 100644
--- a/nars_core/nars/language/Interval.java
+++ b/nars_core/nars/language/Interval.java
@@ -29,7 +29,7 @@ import nars.io.Symbols;
 public class Interval extends Term {
     
     public static Interval interval(final String i) {
-        return new Interval( Long.parseLong(i.substring(1)) - 1);
+        return new Interval(Long.parseLong(i.substring(1)));
     }
     
     @Override
diff --git a/nars_core/nars/language/Term.java b/nars_core/nars/language/Term.java
index 5d4b57185904a65dcf24413cb30cbf9f334d1c56..87ff1e441248ce0849cf6825224052a7ab13672f 100644
--- a/nars_core/nars/language/Term.java
+++ b/nars_core/nars/language/Term.java
@@ -176,7 +176,7 @@ public class Term implements AbstractTerm, Serializable {
             t.index_variable = index_variable;
         }
         t.name = name();
-        
+        t.imagination = imagination;
         return t;
     }
     
diff --git a/nars_core/nars/main/NAR.java b/nars_core/nars/main/NAR.java
index f09f0cf8057588f29a385b930d0c593360ddec84..95ce17050ddbb8ea7a2625133f19554608523f03 100644
--- a/nars_core/nars/main/NAR.java
+++ b/nars_core/nars/main/NAR.java
@@ -39,6 +39,8 @@ import nars.language.Term;
 import nars.storage.LevelBag;
 import nars.io.events.Events.CyclesEnd;
 import nars.io.events.Events.CyclesStart;
+import nars.io.events.OutputHandler;
+import nars.language.Inheritance;
 
 
 /**
@@ -260,8 +262,33 @@ public class NAR extends SensoryChannel implements Serializable,Runnable {
             if(addCommand(text)) {
                 return;
             }
-            Task t = narsese.parseTask(text.trim());
-            this.memory.inputTask(t);
+            Task task = narsese.parseTask(text.trim());
+            //check if it should go to a sensory channel instead:
+            Term t = ((Task) task).getTerm();
+            if(t != null && t instanceof Inheritance) {
+                Term predicate = ((Inheritance) t).getPredicate();
+                if(this.sensoryChannels.containsKey(predicate)) {
+                    Inheritance inh = (Inheritance) task.sentence.term;
+                    Term subj = inh.getSubject();
+                    //map to pei's -1 to 1 indexing schema
+                    if(subj.term_indices == null) {
+                        String variable = subj.toString().split("\\[")[0];
+                        String[] vals = subj.toString().split("\\[")[1].split("\\]")[0].split(",");
+                        double height = Double.parseDouble(vals[0]);
+                        double width = Double.parseDouble(vals[1]);
+                        int wval = (int) Math.round((width+1.0f)/2.0f*(this.sensoryChannels.get(predicate).width-1));
+                        int hval = (int) Math.round(((height+1.0f)/2.0f*(this.sensoryChannels.get(predicate).height-1)));
+                        String newInput = "<"+variable+"["+hval+","+wval+"] --> "+predicate+">"+task.sentence.punctuation+ " :|:";
+                        this.emit(OutputHandler.IN.class, task);
+                        this.addInput(newInput);
+                        return;
+                    }
+                    this.sensoryChannels.get(predicate).addInput((Task) task);
+                    return;
+                }
+            }
+            //else input into NARS directly:
+            this.memory.inputTask(task);
         } catch (Exception ex) {
             //Logger.getLogger(NAR.class.getName()).log(Level.SEVERE, null, ex);
         }
diff --git a/nars_core/nars/main/Parameters.java b/nars_core/nars/main/Parameters.java
index 48dadbb1bbdafed5d3094e33c9444e925f0f70fd..dc7e989a558f2fa08b55f750a103158c6b25f08c 100644
--- a/nars_core/nars/main/Parameters.java
+++ b/nars_core/nars/main/Parameters.java
@@ -42,6 +42,7 @@ public class Parameters {
     /** use this for advanced error checking, at the expense of lower performance.
         it is enabled for unit tests automatically regardless of the value here.    */
     public static boolean DEBUG = false;
+    public static boolean TEST_RUNNING = false;
 
     /** for thorough bag debugging (slow) */
     public static boolean DEBUG_BAG = false;
diff --git a/nars_core/nars/main/Plugins.java b/nars_core/nars/main/Plugins.java
index 10a28afa8f4cf2f2cee62cc0209b71500e4d3f45..fe10d9931ffa232e893243e5d3bd6f8e02c2afdf 100644
--- a/nars_core/nars/main/Plugins.java
+++ b/nars_core/nars/main/Plugins.java
@@ -9,7 +9,7 @@ import nars.plugin.mental.Counting;
 import nars.plugin.mental.Abbreviation;
 import nars.language.SetInt;
 import nars.language.Term;
-//import nars.plugin.perception.VisionChannel;
+import nars.plugin.perception.VisionChannel;
 
 /**
  * Default set of NAR parameters which have been classically used for development.
@@ -20,9 +20,9 @@ public class Plugins {
         n.addPlugin(new RuntimeNARSettings());
         n.addPlugin(new Emotions());
         n.addPlugin(new Anticipate());      // expect an event 
-        //Term label = SetInt.make(new Term("bright"));
+        Term label = SetInt.make(new Term("bright"));
         //n.addSensoryChannel(label.toString(),
-        //                    new VisionChannel(label, n, n, 1, 1));
+        //                    new VisionChannel(label, n, n, 30, 30));
         boolean full_internal_experience = false;
         if(!full_internal_experience) {
             n.addPlugin(new InternalExperience());
diff --git a/nars_core/nars/plugin/perception/SensoryChannel.java b/nars_core/nars/plugin/perception/SensoryChannel.java
index 595e1b75cd0bb8b2a31aef7a9dfa988509f3036e..027e79f3ced3d754f7e3d78137350348adca52ce 100644
--- a/nars_core/nars/plugin/perception/SensoryChannel.java
+++ b/nars_core/nars/plugin/perception/SensoryChannel.java
@@ -17,6 +17,8 @@ public abstract class SensoryChannel implements Serializable {
     private Collection<SensoryChannel> reportResultsTo;
     public NAR nar; //for top-down influence of concept budgets
     public List<Task> results = new ArrayList<Task>();
+    public int height = 0; //1D channels have height 1
+    public int width = 0;
     public SensoryChannel(){}
     public SensoryChannel(NAR nar, Collection<SensoryChannel> reportResultsTo) {
         this.reportResultsTo = reportResultsTo;
diff --git a/nars_core/nars/plugin/perception/VisionChannel.java b/nars_core/nars/plugin/perception/VisionChannel.java
index 95d3e9f0485735999c7baa1c0e2b027860081978..48dbfc5de73ce8bfb05b57ad9e38980754736277 100644
--- a/nars_core/nars/plugin/perception/VisionChannel.java
+++ b/nars_core/nars/plugin/perception/VisionChannel.java
@@ -16,8 +16,8 @@ public class VisionChannel extends SensoryChannel {
     double[][] inputs;
     boolean[][] updated;
     int cnt_updated = 0;
-    int height = 0;
-    int width = 0;
+    int px = 0;
+    int py = 0;
     Term label;
     NAR nar;
     public VisionChannel(Term label, NAR nar, SensoryChannel reportResultsTo, int width, int height) {
@@ -30,13 +30,24 @@ public class VisionChannel extends SensoryChannel {
         updated = new boolean[height][width];
     }
     
+    String subj = ""; 
     public boolean AddToMatrix(Task t) {
+        Inheritance inh = (Inheritance) t.getTerm(); //channels receive inheritances
+        String cur_subj = inh.getSubject().index_variable.toString();
+        if(!cur_subj.equals(subj)) { //when subject changes, we start to collect from scratch,
+            cnt_updated = 0; //this way multiple matrices can be processed by the same vision channel
+            updated = new boolean[height][width];
+            subj = cur_subj;
+        }
         int x = t.getTerm().term_indices[2];
         int y = t.getTerm().term_indices[3];
-        inputs[y][x] = t.sentence.getTruth().getFrequency();
         if(!updated[y][x]) {
+            inputs[y][x] = t.sentence.getTruth().getFrequency();
             cnt_updated++;
             updated[y][x] = true;
+        } else { //a second value, so take average of frequencies
+                 //revision wouldn't be proper as each sensory point can just have 1 vote
+            inputs[y][x] = (inputs[y][x]+t.sentence.getTruth().getFrequency()) / 2.0f;
         }
         if(cnt_updated == height*width) {
             cnt_updated = 0;
@@ -53,10 +64,24 @@ public class VisionChannel extends SensoryChannel {
         return nar;
     }
     
+    int termid=0;
     @Override
     public void step_start()
     {
-        Sentence s = new Sentence(Inheritance.make(new Term("A"), this.label), 
+        termid++;
+        Term V = new Term(subj+termid);
+        //the visual space has to be a copy.
+        float[][] cpy = new float[height][width];
+        for(int i=0;i<height;i++) {
+            for(int j=0;j<width;j++) {
+                cpy[i][j] = (float) inputs[i][j];
+            }
+        } 
+        VisualSpace vspace = new VisualSpace(nar, cpy, py, px, height, width);
+        //attach sensation to term:
+        V.imagination = vspace;
+        
+        Sentence s = new Sentence(Inheritance.make(V, this.label), 
                                                    Symbols.JUDGMENT_MARK, 
                                                    new TruthValue(1.0f,
                                                    Parameters.DEFAULT_JUDGMENT_CONFIDENCE), 
@@ -67,5 +92,4 @@ public class VisionChannel extends SensoryChannel {
         this.results.add(T);//feeds results into "upper" sensory channels:
         this.step_finished(); 
     }
-    
 }
diff --git a/nars_core/nars/plugin/perception/VisualSpace.java b/nars_core/nars/plugin/perception/VisualSpace.java
index 47a3249820a00d038a0f9ee8172628587c3c728d..96398f772657a6b6f917f55e0c7c2fb5b1bd1c02 100644
--- a/nars_core/nars/plugin/perception/VisualSpace.java
+++ b/nars_core/nars/plugin/perception/VisualSpace.java
@@ -72,8 +72,8 @@ public class VisualSpace implements ImaginationSpace {
         TruthValue sim = new TruthValue(1.0f, 0.0f);
         for(int i=0; i<this.height; i++) {
             for(int j=0; j<this.width; j++) {
-                int i2 = (int) (((double) this.height) * kh);
-                int j2 = (int) (((double) this.width)  * kw);
+                int i2 = (int) (((double) i) * kh);
+                int j2 = (int) (((double) j)  * kw);
                 TruthValue t1 = new TruthValue(cropped[i][j], Parameters.DEFAULT_JUDGMENT_CONFIDENCE);
                 TruthValue t2 = new TruthValue(other.cropped[i2][j2], Parameters.DEFAULT_JUDGMENT_CONFIDENCE);
                 TruthValue t3 = comparison ? TruthFunctions.comparison(t1,t2) : TruthFunctions.abduction(t1,t2);
diff --git a/nars_core/nars/storage/Memory.java b/nars_core/nars/storage/Memory.java
index 3e02748a530f8345d7347fe50e603b59727a15d6..cc48ffa84a7419bace6ea67a5514db275461f0f1 100644
--- a/nars_core/nars/storage/Memory.java
+++ b/nars_core/nars/storage/Memory.java
@@ -79,7 +79,6 @@ public class Memory implements Serializable, Iterable<Concept> {
     
     //emotion meter keeping track of global emotion
     public final Emotions emotion = new Emotions();   
-    
     public long decisionBlock = 0;
     public Task lastDecision = null;
     public boolean allowExecution = true;
@@ -143,6 +142,7 @@ public class Memory implements Serializable, Iterable<Concept> {
         this.seq_current.clear();
         cycle = 0;
         emotion.resetEmotions();
+        this.lastDecision = null;
         resetStatic();
         event.emit(ResetEnd.class);
     }
diff --git a/nars_test/nars/core/NALTest.java b/nars_test/nars/core/NALTest.java
index 5f305d0b8bf6451a18db37db74a19bb5ce6b7c6d..8f44df78b1b8725b128ccfc749c5b0e77eb397f3 100644
--- a/nars_test/nars/core/NALTest.java
+++ b/nars_test/nars/core/NALTest.java
@@ -30,6 +30,7 @@ public class NALTest  {
     static {
         Memory.randomNumber.setSeed(1);
         Parameters.DEBUG = true;
+        Parameters.TEST_RUNNING = true;
     }
 
     int minCycles = 1550; //TODO reduce this to one or zero to avoid wasting any extra time during tests
diff --git a/nars_test/nars/core/NALTestSome.java b/nars_test/nars/core/NALTestSome.java
index c8fb787ffb88a6ca8124e4cba9babf1731c208b3..47bbe1c901e431ca8f2c336520668b4268166f58 100644
--- a/nars_test/nars/core/NALTestSome.java
+++ b/nars_test/nars/core/NALTestSome.java
@@ -1,55 +1,55 @@
-package nars.core;
-
-import java.io.File;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-
-/**
- * runs a subset of the test cases, selected by the boolean include(filename) function
- */
-@RunWith(Parameterized.class)
-public class NALTestSome extends NALTest {
-
-    static {
-        showOutput = true;
-        showSuccess = showOutput;
-        showTrace = false;               
-    }
-    
-   public static boolean include(String filename) {
-       //return true; //filename.startsWith("nal6.8.nal");
-       return filename.startsWith("nars_multistep_3");
-   }
-
-   
-    @Parameterized.Parameters
-    public static Collection params() {
-        List l = new LinkedList();
-        
-        //File folder = new File("nal/ClassicalConditioning");
-        File folder = new File("nal/test");
-        
-        for (final File file : folder.listFiles()) {
-            if (file.getName().equals("README.txt") || file.getName().contains(".png"))
-                continue;
-            if (include(file.getName()))
-                l.add(new Object[] { file.getAbsolutePath() } );
-        }
-                  
-        return l;
-    }
-   
-   public static void main(String[] args) {
-        org.junit.runner.JUnitCore.runClasses(NALTestSome.class);
-   }    
-
-   public NALTestSome(String scriptPath) {
-       super(scriptPath);//, true);
-
-   }
-
-}
+package nars.core;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+
+/**
+ * runs a subset of the test cases, selected by the boolean include(filename) function
+ */
+@RunWith(Parameterized.class)
+public class NALTestSome extends NALTest {
+
+    static {
+        showOutput = true;
+        showSuccess = showOutput;
+        showTrace = false;               
+    }
+    
+   public static boolean include(String filename) {
+       //return true; //filename.startsWith("nal6.8.nal");
+       return filename.startsWith("nal7.18.nal");
+   }
+
+   
+    @Parameterized.Parameters
+    public static Collection params() {
+        List l = new LinkedList();
+        
+        //File folder = new File("nal/ClassicalConditioning");
+        File folder = new File("nal/test");
+        
+        for (final File file : folder.listFiles()) {
+            if (file.getName().equals("README.txt") || file.getName().contains(".png"))
+                continue;
+            if (include(file.getName()))
+                l.add(new Object[] { file.getAbsolutePath() } );
+        }
+                  
+        return l;
+    }
+   
+   public static void main(String[] args) {
+        org.junit.runner.JUnitCore.runClasses(NALTestSome.class);
+   }    
+
+   public NALTestSome(String scriptPath) {
+       super(scriptPath);//, true);
+
+   }
+
+}