diff --git a/Slang/slang.html b/Slang/slang.html
index 082b57a..07bb833 100755
--- a/Slang/slang.html
+++ b/Slang/slang.html
@@ -120,6 +120,7 @@ function runCommand(){
 		var c = commands[commands.length-1]
 		c.innerText = command.innerText
 		c.focus()
+		window.scrollTo(0,document.body.scrollHeight)
 	}, false)
 	
 	try{
diff --git a/Slang/slang.js b/Slang/slang.js
index 9414062..6a7e72d 100755
--- a/Slang/slang.js
+++ b/Slang/slang.js
@@ -399,7 +399,7 @@ var NAMESPACE = {
 		var e = context.stack.pop()
 		if(i < 0){
 			var l = context.stack[context.stack.length-1]
-			l.splice(l.length + i + 1, 0, e)
+			l.splice(l.length + i, 0, e)
 		} else {
 			context.stack[context.stack.length-1].splice(i, 0, e)
 		}
@@ -413,12 +413,13 @@ var NAMESPACE = {
 		return context.stack[context.stack.length-1].length
 	},
 	// b c -- b
-	'each': function(context){
+	'map': function(context){
 		var c = context.stack.pop()
 		var b = context.stack[context.stack.length-1]
 		for(var i=0; i < b.length; i++){
 			// exec block in a separate context...
 			var res = run({
+				//stack: [i, b[i], c],
 				stack: [b[i], c],
 				code: ['exec'],
 				// NOTE: this can have side-effects on the context...
@@ -544,13 +545,69 @@ var BOOTSTRAP = [
 ' not interpreted in any way.',
 '',
 '-------------------------------------------------------------------------------',
+'',
+'Basic words for block manipulation:',
+'',
+'Get block length',
+'		[ 1 2 3 ] len',
+'	Result:',
+'		3',
+'',
+'Pop element form block tail',
+'		[ 1 2 3 ] pop',
+'	Result:',
+'		[ 1 2 ] 3',
+'',
+'Push element to block tail',
+'		[ 1 2 3 ] 4 push',
+'	Result:',
+'		[ 1 2 3 4 ]',
+'',
+'NOTE: all indexes can be negative values, these will indicate the',
+'	position relative to the tail, -1 being the last element.',
+'',
+'Get element at position (0)',
+'		[ 1 2 3 ] -1 at',
+'	Result:',
+'		[ 1 2 3 ] 3',
+'',
+'Put element (123) at position (0)',
+'		[ 1 2 3 ] 123 0 to',
+'	Result:',
+'		[ 123 2 3 ]',
+'',
+'Put element (123) before position (0)',
+'		[ 1 2 3 ] 123 0 before',
+'	Result:',
+'		[ 123 1 2 3 ]',
+'',
+'Expand block to stack -- "block 2 stack"',
+'		[ 1 2 3 ] b2s',
+'	Result:',
+'		1 2 3',
+'',
+'',
+'-------------------------------------------------------------------------------',
 's2b drop',
 '--',
 '-- With that out of the way, let\'s start with the bootstrap...',
-'--',
-'-- make a new block instance shorthand...',
-':: [] [ [ ] clone ]',
 '',
+'-- misc...',
+':: . ( x -- ) [ drop ]',
+':: .. ( x -- ) [ print drop ]',
+'',
+':: ne ( a -- b ) [ eq not ]',
+':: isT ( a -- b ) [ not not true eq ]',
+':: isF ( a -- b ) [ not isT ]',
+'',
+':: inc ( a -- b ) [ 1 add ]',
+':: dec ( a -- b ) [ 1 sub ]',
+'',
+':: ! ( a -- b ) [ [ dup 1 ne ] ? [ dup 1 sub ! mul ] ]',
+'',
+'',
+'',
+'-- Stack/code manipulation...',
 ':: _swap ( x | y -- y | x ) [ 1 1 _swapN ]',
 ':: _push ( x |  -- | x ) [ 0 _swapN ]',
 ':: _pull (  | x -- x |  ) [ 0 swap _swapN ]',
@@ -560,15 +617,16 @@ var BOOTSTRAP = [
 '-- like exec but will run a block in current context...',
 ':: b2c [ len rot b2s tor 0 _swapN ]',
 '',
-':: . ( x -- ) [ drop ]',
-':: .. ( x -- ) [ print drop ]',
-'',
 ':: swap2 ( a _ b -- b _ a ) [ swap rot swap tor swap ]',
 ':: dup2 ( a b -- a b a b ) [ dup swap2 dup rot swap2 tor swap ]',
 '',
-':: ne ( a -- b ) [ eq not ]',
-':: isT ( a -- b ) [ not not true eq ]',
-':: isF ( a -- b ) [ not isT ]',
+'-- this is here for devel use only',
+':: _clear ( ... -- ) [ s2b print drop ] ',
+':: _stack_size ( -- l ) [ s2b len swap b2s tor ] ',
+'',
+'',
+'',
+'-- Flow control...',
 '',
 '-- Classic conditional word:',
 '--   [ cond ] [ A ] [ B ] if',
@@ -601,12 +659,50 @@ var BOOTSTRAP = [
 '		[ exec [ _run_then 1 ] and [ swap _run_else 2 ] or b2s 2 _swapN ]',
 '',
 '',
-'-- list/block 2\'nd gen stuff...',
-':: push ( b e i -- b ) [ -1 before ]',
 '',
+'-- List/block 2\'nd gen stuff...',
+'-- make a new block instance shorthand...',
+':: [] [ [ ] clone ]',
+'',
+'-- insert element after index...',
+':: after ( b e i -- b ) [',
+'	-- special case, when at end, need to push the alement after it...',
+'	dup [ -1 eq ] ?',
+'		[ . push ]',
+'	else',
+'		[ inc before ] ]',
+'',
+'-- push element to tail of block...',
+':: push ( b e -- b ) [ swap len rot swap tor to ]',
+'',
+'-- Filter the block via a condition...',
+'--',
+'-- the condition block must have the folowing stack effect: elem -- bool',
+':: filter ( b c -- b ) [',
+'	-- prepare the condition...',
+'	\\ dup 0 before',
+'	-- define the template...',
+'	[ TEST ? [  ] else [ . ] ] clone',
+'		-- prepare the template...',
+'		swap 0 to',
+'			-- do the filtering',
+'			map ]',
+'',
+'-- Create a block containing a range numbers form 0 to n-1...',
+':: range ( n -- b ) [',
+'	-- initial state...',
+'	[ dup isNumber ] ? ',
+'		[ [] swap ]',
+'	-- get first elem...',
+'	else',
+'		[ 0 at ]',
+'	-- we got to the end...',
+'	[ dup 0 eq ] ? ',
+'		[ drop ]',
+'	-- dec push new and continue...',
+'	else',
+'		[ 1 sub 0 before range ] ]',
 '',
-':: inc ( a -- b ) [ 1 add ]',
-':: dec ( a -- b ) [ 1 sub ]',
 '',
 '',
 '-- Meta-word examples (experimental)...',
@@ -646,29 +742,30 @@ var BOOTSTRAP = [
 'infix: > gt',
 '',
 '',
-'-- this is here for devel use only',
-':: _clear ( ... -- ) [ s2b print drop ] ',
-':: _stack_size ( -- l ) [ s2b len swap b2s tor ] ',
 '',
+'-- Tests and examples...',
 '',
-'-- tests and examples...',
+'-- Mandatory "hello word" word example...',
 ':: hi ( -- ) [ "Hello World!" print drop ]',
-':: ! ( a -- b ) [ [ dup 1 ne ] ? [ dup 1 sub ! mul ] ]',
-':: range ( n -- b ) [',
-'		-- initial state...',
-'		[ dup isNumber ] ? ',
-'			[ [] swap ]',
-'		-- get first elem...',
-'		else',
-'			[ 0 at ]',
-'		-- we got to the end...',
-'		[ dup 0 eq ] ? ',
-'			[ drop ]',
-'		-- dec push new and continue...',
-'		else',
-'			[ 1 sub 0 before range ] ]',
+'',
+'-- Create a block containg a range of n numbers form 0 and adding s to',
+'-- each next number...',
 ':: range2 ( n s -- b )',
-'		[ swap range swap [] swap push \\ * 0 before each ]',
+'		[ swap range swap [] swap push \\ * 0 before map ]',
+'',
+'-- Sum up the elements of a block...',
+':: sum ( L -- s ) [',
+'	-- empty list, sum is 0...',
+'	[ len 0 eq ] ?',
+'		[ . 0 ]',
+'	else',
+'		-- sum of list of len 1 is it\'s content, so just pop it...',
+'		[ [ len 1 eq ] ?',
+'			[ pop swap . ]',
+'		-- and now recursively sum up elements till the list is 1 in length...',
+'		else',
+'			[ pop rot pop tor add push sum ] ] ]',
+'',
 ''].join('\n')