diff --git a/doc/builtin/aggregate_mapping b/doc/builtin/aggregate_mapping
index 1526e41be348392e8f6f37ab5cc9aa3df503f121..498e6616da00fce7c7306a550902c469f11beec8 100644
--- a/doc/builtin/aggregate_mapping
+++ b/doc/builtin/aggregate_mapping
@@ -4,7 +4,7 @@ NAME
 SYNTAX
 	mapping aggregate_mapping(mixed ... elems);
 	or
-	(< key1:val1, key2:val2, ... >)
+	([ key1:val1, key2:val2, ... ])
 
 DESCRIPTION
 	Groups the arguments together two and two to key-index pairs and
diff --git a/doc/builtin/arrayp b/doc/builtin/arrayp
index c6b844e20d6e2973212def87f0a1cc11294ba06d..32c691eb54f8c99c78517e8160dbe996a6fe2e52 100644
--- a/doc/builtin/arrayp
+++ b/doc/builtin/arrayp
@@ -11,5 +11,5 @@ KEYWORDS
 	array
 
 SEE ALSO
-	allocate, intp, programp, floatp, stringp, objectp, regexpp,
-	mappingp, listp, functionp
+	allocate, intp, programp, floatp, stringp, objectp, mappingp,
+	listp, functionp
diff --git a/doc/builtin/backtrace b/doc/builtin/backtrace
index 3d421acc48225eba49d1d07ba5f930cb323d894d..ce824d420da8d223128b70fcb2f08d2a0cbdb8af 100644
--- a/doc/builtin/backtrace
+++ b/doc/builtin/backtrace
@@ -10,9 +10,9 @@ DESCRIPTION
 	in the stack. Each entry has this format:
 
 	({
-	   file, /* a string with the filename if known, else zero */
-	   function, /* The function-pointer to the called function */
-	   line, /* an integer containing the line if known, else zero */
+	   file,	/* a string with the filename if known, else zero */
+	   function,	/* The function-pointer to the called function */
+	   line,	/* an integer containing the line if known, else zero */
 	})
 
 	The current call frame will be last in the array, and the one above
diff --git a/doc/builtin/call_function b/doc/builtin/call_function
index fb4eafb870b92945874481314daf1003494edc21..0af1d5b98a3321d77fe1c4660c451505bf354a96 100644
--- a/doc/builtin/call_function
+++ b/doc/builtin/call_function
@@ -12,5 +12,8 @@ DESCRIPTION
 	you will never have to write call_function(), because you will use the
 	second syntax instead.
 
+KEYWORDS
+	function
+
 SEE ALSO
 	backtrace, get_function
diff --git a/doc/builtin/call_out_info b/doc/builtin/call_out_info
index c3399fe8aefdaf7a1de5d12c02bed1d9c8c46857..1b20ed39627716e8aebe55bc65cbafca6458929e 100644
--- a/doc/builtin/call_out_info
+++ b/doc/builtin/call_out_info
@@ -10,12 +10,12 @@ DESCRIPTION
 	contains an array that looks like this:
 
 	({
-	   time_left, /* an int */
-	   caller, /* the object that made the call out */
-	   function, /* the function to be called */
-	   arg1, /* the first argument, if any */
-	   arg2, /* the second argument, if any */
-	   ... /* and so on... */
+	   time_left,	/* an int */
+	   caller,	/* the object that made the call out */
+	   function,	/* the function to be called */
+	   arg1,	/* the first argument, if any */
+	   arg2,	/* the second argument, if any */
+	   ...  	/* and so on... */
 	})
 
 SEE ALSO
diff --git a/doc/builtin/combine_path b/doc/builtin/combine_path
index 84cd9cb5b3325222f1037435970978b67f8cb46b..49043c3c7a45d64ad7bd119c3c3c074d4f70275c 100644
--- a/doc/builtin/combine_path
+++ b/doc/builtin/combine_path
@@ -17,7 +17,8 @@ EXAMPLES
 	> combine_path("/foo/bar","./sune.c");
 	Result: /foo/bar/sune.c
 
+KEYWORDS
+	file
+
 SEE ALSO
 	getcwd
-
-	
\ No newline at end of file
diff --git a/doc/builtin/crypt b/doc/builtin/crypt
index d4e0e5b68d63ac4f5b3a200f365df825f3f5d664..8add8594933781dec429aae95c9fa91fca4632e6 100644
--- a/doc/builtin/crypt
+++ b/doc/builtin/crypt
@@ -16,8 +16,10 @@ DESCRIPTION
 
 EXAMPLES
 	To crypt a password use:
-		crypted_password = crypt(typed_password);
+	  crypted_password = crypt(typed_password);
 	To see if the same password was used again use:
-		matched = crypt(typed_password, crypted_password);
+	  matched = crypt(typed_password, crypted_password);
 
-		
\ No newline at end of file
+
+KEYWORDS
+	string
diff --git a/doc/builtin/floatp b/doc/builtin/floatp
index 4dfdab9df7ba4d9fe0d3b5efd1b48b5c3e748ca1..da740e9e4d2e8b11bdd0ae1252d59f4f0056a385 100644
--- a/doc/builtin/floatp
+++ b/doc/builtin/floatp
@@ -11,5 +11,5 @@ KEYWORDS
 	float
 
 SEE ALSO
-	intp, programp, arrayp, stringp, objectp, regexpp,
+	intp, programp, arrayp, stringp, objectp,
 	mappingp, listp, functionp
diff --git a/doc/builtin/functionp b/doc/builtin/functionp
index b6996bfe700892b8117492e1e109f2c928878f43..abb23b36ef0f8d5f8b44688f3b2afed356f0010e 100644
--- a/doc/builtin/functionp
+++ b/doc/builtin/functionp
@@ -11,5 +11,5 @@ KEYWORDS
 	function
 
 SEE ALSO
-	intp, programp, arrayp, stringp, objectp, regexpp,
+	intp, programp, arrayp, stringp, objectp,
 	mappingp, listp, floatp
diff --git a/doc/builtin/intp b/doc/builtin/intp
index e04eeeb390c9418aed05a214adb24519d193880f..cbcd1710655987eb912359015f33fcc9952c303c 100644
--- a/doc/builtin/intp
+++ b/doc/builtin/intp
@@ -11,5 +11,5 @@ KEYWORDS
 	int
 
 SEE ALSO
-	arrayp, programp, floatp, stringp, objectp, regexpp,
+	arrayp, programp, floatp, stringp, objectp,
 	mappingp, listp, functionp
diff --git a/doc/builtin/kill b/doc/builtin/kill
index ad0dc868a479ef4db91f89e4edd5547a76de9b72..25588cfe3c6aa591179f135fb5d97d92afc0207e 100644
--- a/doc/builtin/kill
+++ b/doc/builtin/kill
@@ -10,34 +10,34 @@ DESCRIPTION
 
 	Some signals and their supposed purpose:
 
-	SIGHUP	Hangup, sent to process when user logs out
-	SIGINT	Interrupt, normally sent by ctrl-c
-	SIGQUIT	Quit, sent by ctrl-\
-	SIGILL	Illegal instruction
-	SIGTRAP	Trap, mostly used by debuggers
-	SIGABRT	Aborts process, can be caught, used by uLPC whenever something
-		goes seriously wrong.
-	SIGBUS	Bus error
-	SIGFPE	Floating point error (such as division by zero)
-	SIGKILL	Really kill a process, cannot be caught
-	SIGUSR1	Signal reserved for whatever you want to use it for.
-	SIGSEGV	Segmentation fault, caused by accessing memory where you
-		shouldn't. Should never happen to uLPC.
-	SIGUSR2	Signal reserved for whatever you want to use it for.
-	SIGALRM	Signal used for timer interrupts.
-	SIGTERM	Termination signal
-	SIGSTKFLT Stack fault
-	SIGCHLD	Child process died
-	SIGCONT	Continue suspended
-	SIGSTOP	Stop process
-	SIGSTP	Suspend process
-	SIGTTIN	tty input for background process
-	SIGTTOU	tty output for background process
-	SIGXCPU	Out of cpu
-	SIGXFSZ	File size limit exceeded
-	SIGPROF	Profile trap
-	SIGWINCH Window change signal
-	
+	SIGHUP  	Hangup, sent to process when user logs out
+	SIGINT  	Interrupt, normally sent by ctrl-c
+	SIGQUIT 	Quit, sent by ctrl-\
+	SIGILL  	Illegal instruction
+	SIGTRAP 	Trap, mostly used by debuggers
+	SIGABRT 	Aborts process, can be caught, used by uLPC whenever something
+		        goes seriously wrong.
+	SIGBUS  	Bus error
+	SIGFPE  	Floating point error (such as division by zero)
+	SIGKILL 	Really kill a process, cannot be caught
+	SIGUSR1 	Signal reserved for whatever you want to use it for.
+	SIGSEGV 	Segmentation fault, caused by accessing memory where you
+		        shouldn't. Should never happen to uLPC.
+	SIGUSR2 	Signal reserved for whatever you want to use it for.
+	SIGALRM 	Signal used for timer interrupts.
+	SIGTERM 	Termination signal
+	SIGSTKFLT	Stack fault
+	SIGCHLD 	Child process died
+	SIGCONT 	Continue suspended
+	SIGSTOP 	Stop process
+	SIGSTP  	Suspend process
+	SIGTTIN 	tty input for background process
+	SIGTTOU 	tty output for background process
+	SIGXCPU 	Out of cpu
+	SIGXFSZ 	File size limit exceeded
+	SIGPROF 	Profile trap
+	SIGWINCH	Window change signal
+
 	Note that you have to use signame to translate the name of a signal
 	to it's number.
 
diff --git a/doc/builtin/listp b/doc/builtin/listp
index 25fdf57cedb1369001f24dadd89633af1f8f9a11..16c92365f4fc4e31cd6c131716f67c094c311477 100644
--- a/doc/builtin/listp
+++ b/doc/builtin/listp
@@ -11,5 +11,5 @@ KEYWORDS
 	list
 
 SEE ALSO
-	intp, programp, arrayp, stringp, objectp, regexpp,
+	intp, programp, arrayp, stringp, objectp,
 	mappingp, floatp, functionp
diff --git a/doc/builtin/mappingp b/doc/builtin/mappingp
index 9eaa3b0e9147a0e7013c04bacd164a58b4ab7ca5..6247155ce88edb73ba17a71e034e72bb521dc385 100644
--- a/doc/builtin/mappingp
+++ b/doc/builtin/mappingp
@@ -11,5 +11,5 @@ KEYWORDS
 	mapping
 
 SEE ALSO
-	intp, programp, arrayp, stringp, objectp, regexpp,
+	intp, programp, arrayp, stringp, objectp,
 	listp, floatp, functionp
diff --git a/doc/builtin/object_program b/doc/builtin/object_program
index 028e16e896685e455a0a6632583e533cc3630912..88f634f5600d3e9dd3e24dbf23014f1755c0b10b 100644
--- a/doc/builtin/object_program
+++ b/doc/builtin/object_program
@@ -7,7 +7,7 @@ SYNTAX
 DESCRIPTION
 	This function returns the program from which o was cloned.
 
-KEYWORD
+KEYWORDS
 	object
 
 SEE ALSO
diff --git a/doc/builtin/objectp b/doc/builtin/objectp
index d31cd55bc6956ec49735281ac909d4f7a4ccd87d..ee74c51b9f517b4291d1e2eb19b6d13f5d3e6acf 100644
--- a/doc/builtin/objectp
+++ b/doc/builtin/objectp
@@ -11,5 +11,5 @@ KEYWORDS
 	object
 
 SEE ALSO
-	intp, programp, floatp, stringp, arrayp, regexpp,
+	intp, programp, floatp, stringp, arrayp,
 	mappingp, listp, functionp
diff --git a/doc/builtin/programp b/doc/builtin/programp
index 16304dbca7086d2566222e36c5a8fa1ae4519b15..83757aee930be01ed8824b98ab80db208ab299aa 100644
--- a/doc/builtin/programp
+++ b/doc/builtin/programp
@@ -11,5 +11,5 @@ KEYWORDS
 	program
 
 SEE ALSO
-	intp, listp, arrayp, stringp, objectp, regexpp,
+	intp, listp, arrayp, stringp, objectp,
 	mappingp, floatp, functionp
diff --git a/doc/builtin/replace b/doc/builtin/replace
index ea479ae070bb60a3b8fb89e57fe42fffd5d4cca7..32d2e1ed8af1c99c1a8d3a526061f7557b1bd145 100644
--- a/doc/builtin/replace
+++ b/doc/builtin/replace
@@ -14,17 +14,20 @@ DESCRIPTION
 	This function can do several kinds replacement operations, the
 	different syntaxes do different things as follow:
 
-	1) string replace(string s, string from, string to);
+	string replace(string s, string from, string to);
+
 	   When given strings as second and third argument, a copy of
 	   s with every occurance of 'from' return 'to'.
 
-	2) string replace(string s, string *from, string *to);
+	string replace(string s, string *from, string *to);
+
 	   When given arrays of strings as second and third argument,
 	   every occurance of from[0] in s is replaced by to[0],
 	   from[1] is replaced by to[1] and so on...
 
-	3) array replace(array a, mixed from, mixed to);
-	4) mapping replace(mapping a, mixed from, mixed to);
+	array replace(array a, mixed from, mixed to);	
+	mapping replace(mapping a, mixed from, mixed to);
+
 	   When the first argument is an array or mapping, the values in
 	   a are searched for values equal to from, which are replaced by
 	   to destructively.
diff --git a/doc/builtin/sscanf b/doc/builtin/sscanf
index af6bd6e990f8d376447ac5bb04ec9554460a7914..22526c5210dcf89d83e0737bbd62d6bc26ba4393 100644
--- a/doc/builtin/sscanf
+++ b/doc/builtin/sscanf
@@ -9,13 +9,17 @@ DESCRIPTION
 	separated by "%d,%s,%c and %f. Every % corresponds to one of var1,
 	var2...
 
-	%d gives an integer
-	%f gives a float
-	%c matches one char but returns an integer
-	%s gives a string
-	%[set] matches a string containing a given set of characters.
-	 (thos given inside the brackets) %[^set] means any character
-	 ecept those inside brackets. %[0-9H] means any number or 'H'.
+	%d	gives an integer
+	%o	gives an octal integer
+	%x	gives a hexadecimal integer
+	%D	gives an integer that is either octal (leading zero),
+		hexadecimal (leading 0x) or decimal.
+	%f	gives a float
+	%c	matches one char and returns it as an integer
+	%s	gives a string
+	%[set]	matches a string containing a given set of characters.
+		(thos given inside the brackets) %[^set] means any character
+		ecept those inside brackets. %[0-9H] means any number or 'H'.
 
 	If a * is put between the percent and the operator, the operator
 	will not only match it's argument, not assign any variables.
diff --git a/doc/builtin/stringp b/doc/builtin/stringp
index 15fa5d0eee1dcab2cf623e6a09e4fa00e71cb3cc..b153861faf053db08d78e82177adbd91ed29738b 100644
--- a/doc/builtin/stringp
+++ b/doc/builtin/stringp
@@ -11,5 +11,5 @@ KEYWORDS
 	string
 
 SEE ALSO
-	intp, listp, arrayp, programp, objectp, regexpp,
+	intp, listp, arrayp, programp, objectp,
 	mappingp, floatp, functionp
diff --git a/doc/operators/addition b/doc/operators/addition
index 984838a5221c6a5e2084b3051d88bb44180a06cd..f7ab8da026be5eec29a6324a38dcc0a28b755a16 100644
--- a/doc/operators/addition
+++ b/doc/operators/addition
@@ -15,8 +15,8 @@ DESCRIPTION
 	the number is converted to a printable string first.
 
 EXAMPLES
-	"a"+10		returns "a10"
-	10+20		returns 30
+	"a"+10  	returns "a10"
+	10+20   	returns 30
 	({1})+({2})	returns ({1,2})
 	(<1>)+(<1>)	returns (<1,1>)
 
diff --git a/doc/simulated/PI b/doc/simulated/PI
index 4723df2dc24b7f0e8a4dc5241f20aaa2c48cedc4..7326afddffd997bbe8d55ff3a89597d77cab04e4 100644
--- a/doc/simulated/PI
+++ b/doc/simulated/PI
@@ -6,3 +6,6 @@ SYNTAX
 
 DESCRIPTION
 	This is not a function, it is a constant added by simulate.lpc.
+
+KEYWORDS
+	float
diff --git a/doc/simulated/capitalize b/doc/simulated/capitalize
index afcd237894ec7ce38b3d5870a49fa2b600c29cb4..fd6f8bb12022c2b27339f240884af0ae6dddbcf1 100644
--- a/doc/simulated/capitalize
+++ b/doc/simulated/capitalize
@@ -8,5 +8,8 @@ DESCRIPTION
 	Convert the first character in str to upper case, and return the
 	new string.
 
+KEYWORDS
+	string
+
 SEE ALSO
 	builtin/lower_case, builtin/upper_case
diff --git a/doc/simulated/file_size b/doc/simulated/file_size
index 05a07d0ea2f9d0633afc13798d948fb9943e1e07..650918d1391d6e432ef469a8103ca0d9510641da 100644
--- a/doc/simulated/file_size
+++ b/doc/simulated/file_size
@@ -9,5 +9,8 @@ DESCRIPTION
 	does not exist, or that it is not readable by you. Size -2
 	indicates that it is a directory.
 
+KEYWORDS
+	file
+
 SEE ALSO
 	write_file, read_bytes
diff --git a/doc/simulated/filter_array b/doc/simulated/filter_array
index bda384c9cd1474387fb7ecac63ed6a6966b45b41..4ad54ca6e155db3ac0033640bc37bfe82ef9f3eb 100644
--- a/doc/simulated/filter_array
+++ b/doc/simulated/filter_array
@@ -21,5 +21,8 @@ DESCRIPTION
 	Filter array calls all functionpointers in the array arr, and
 	return all that returned true.
 
+KEYWORDS
+	array
+
 SEE ALSO
 	sum_arrays, map_array
diff --git a/doc/simulated/get_function b/doc/simulated/get_function
index 581ec53314245155078bca6dd2efcb8e662611c2..a1da375025352ef068e110d3e2e136b11f96fea5 100644
--- a/doc/simulated/get_function
+++ b/doc/simulated/get_function
@@ -6,3 +6,6 @@ SYNTAX
 
 DESCRIPTION
 	Defined as: return o[name];
+
+KEYWORDS
+	function
diff --git a/doc/simulated/l_sizeof b/doc/simulated/l_sizeof
index d8daf84a539f843ee58929a3b7bbff71da22b9f8..002009287ff958bba2b1c8c8123779acc4f1f417 100644
--- a/doc/simulated/l_sizeof
+++ b/doc/simulated/l_sizeof
@@ -7,5 +7,8 @@ SYNTAX
 DESCRIPTION
 	This function is equal to builtin/sizeof.
 
+KEYWORDS
+	list
+
 SEE ALSO
 	builtin/sizeof
\ No newline at end of file
diff --git a/doc/simulated/m_indices b/doc/simulated/m_indices
index 657023deb87a61f21bf43924e616bc77affa6fb5..01183e045fbfb290f8616d789598ebb0352e2730 100644
--- a/doc/simulated/m_indices
+++ b/doc/simulated/m_indices
@@ -7,5 +7,8 @@ SYNTAX
 DESCRIPTION
 	This function is equal to builtin/indices
 
+KEYWORDS
+	mapping
+
 SEE ALSO
 	builtin/indices
diff --git a/doc/simulated/m_sizeof b/doc/simulated/m_sizeof
index 63db3ea12ed25d3fd7f840cf6642609fa6173567..a716131e3433a99956a64377e92b442006918f28 100644
--- a/doc/simulated/m_sizeof
+++ b/doc/simulated/m_sizeof
@@ -7,5 +7,8 @@ SYNTAX
 DESCRIPTION
 	This function is equal to builtin/sizeof.
 
+KEYWORDS
+	mapping
+
 SEE ALSO
 	builtin/sizeof
\ No newline at end of file
diff --git a/doc/simulated/m_values b/doc/simulated/m_values
index 95175ccd02da3e4623ced667358f3176fa4f0536..6624758740ea0c68a8ba7feb72197acbc4a61d8b 100644
--- a/doc/simulated/m_values
+++ b/doc/simulated/m_values
@@ -7,5 +7,8 @@ SYNTAX
 DESCRIPTION
 	This function is equal to builtin/values
 
+KEYWORDS
+	mapping
+
 SEE ALSO
 	builtin/values
diff --git a/doc/simulated/map_array b/doc/simulated/map_array
index be8fe70b5cdb09951a3f2b1ef26e71acab9799ff..a4c19872899743334679f3788bf8112699a19d71 100644
--- a/doc/simulated/map_array
+++ b/doc/simulated/map_array
@@ -21,5 +21,8 @@ DESCRIPTION
 	Map array calls the functions in the array arr:
 	arr[x]=arr[x]->fun(@ args);
 
+KEYWORDS
+	array
+
 SEE ALSO
 	sum_arrays, filter_array
diff --git a/doc/simulated/master b/doc/simulated/master
index f0594d1aa6cd145451a2d0ba0a63b79b1f84e794..7015cbfaee58d4890cf7fc2ac56e6f5a749630b6 100644
--- a/doc/simulated/master
+++ b/doc/simulated/master
@@ -6,3 +6,6 @@ SYNTAX
 
 DESCRIPTION
 	Master is added by the master object to make it easier to access it.
+
+KEYWORDS
+	object
diff --git a/doc/simulated/member_array b/doc/simulated/member_array
index 0abc1df604599a81795b1a5be2a4ed75e89147b3..c336f183f911df00bd13680a98b61fccf7b5ac19 100644
--- a/doc/simulated/member_array
+++ b/doc/simulated/member_array
@@ -7,3 +7,6 @@ SYNTAX
 DESCRIPTION
 	Returns the index of the first occurence of item in array arr.
 	If not found, then -1 is returned.
+
+KEYWORDS
+	array
diff --git a/doc/simulated/mklist b/doc/simulated/mklist
index 2629ce1573a41e3859ea91fcb785d1a502778b23..836e52c72ed3de479e47f04aae834666a7520860 100644
--- a/doc/simulated/mklist
+++ b/doc/simulated/mklist
@@ -15,5 +15,8 @@ EXAMPLE
 	    3
 	>)
 
+KEYWORDS
+	list
+
 SEE ALSO
 	builtin/aggregate_list
\ No newline at end of file
diff --git a/doc/simulated/read_bytes b/doc/simulated/read_bytes
index 95e5e32adaf15cfa5bc6c1f5888e992460fdcb17..7f042ad694722d0d799a8d6c19ae400591329f03 100644
--- a/doc/simulated/read_bytes
+++ b/doc/simulated/read_bytes
@@ -8,6 +8,9 @@ DESCRIPTION
 	Read len number of bytes from file file staring at byte start and
 	return it as a string.
 
+KEYWORDS
+	file
+
 SEE ALSO
 	write_file
 
diff --git a/doc/simulated/regexp b/doc/simulated/regexp
index 05f14528ed31e0ba4340800b870b25097e4c4b4e..3d3ac3b8ebdbbf10e2db10f9dcfd2f6c52ce03e3 100644
--- a/doc/simulated/regexp
+++ b/doc/simulated/regexp
@@ -7,5 +7,8 @@ SYNTAX
 DESCRIPTION
 	Return those strings in arr that matches the regexp in reg.
 
+KEYWORDS
+	string
+
 SEE ALSO
 	regexp/regexp
diff --git a/doc/simulated/search_array b/doc/simulated/search_array
index 98468d9533e0286af4ab12909af7e9d36622f0c4..8db3a37a920541523a6002bce1753200b176dafb 100644
--- a/doc/simulated/search_array
+++ b/doc/simulated/search_array
@@ -13,5 +13,8 @@ DESCRIPTION
 	first call that returned true instead or returning an array of the
 	returned values. If no call returns true, -1 is returned.
 
+KEYWORDS
+	array
+
 SEE ALSO
 	sum_arrays, filter_array, member_array
diff --git a/doc/simulated/sort_array b/doc/simulated/sort_array
index f50e9753c17e1832ac04027b5a15eaea2758ecdc..de6a6ea4f532fc5f0b44053280595134eb0d471f 100644
--- a/doc/simulated/sort_array
+++ b/doc/simulated/sort_array
@@ -11,5 +11,8 @@ DESCRIPTION
 	sent as 3rd, 4th etc. argument to fun. If fun is omitted, < is unsed
 	instead.
 
+KEYWORDS
+	array
+
 SEE ALSO
 	map_array, filter_array
diff --git a/doc/simulated/spawn b/doc/simulated/spawn
index c04ee827b704eeaefcea24604338f3695f1be996..231512d32dfdab4a9ce6d7298afb3b0f07b6b8ce 100644
--- a/doc/simulated/spawn
+++ b/doc/simulated/spawn
@@ -17,6 +17,6 @@ DESCRIPTION
 	should go.
 
 SEE ALSO
-	popen, files/fork, files/exec, files/files->pipe,
-	files/files->dup2
+	popen, files/fork, files/exec, files/file->pipe,
+	files/file->dup2
 
diff --git a/doc/simulated/strlen b/doc/simulated/strlen
index 905b99604702356d501b9bbbfc1c848772402b78..a9b0ba07047e47093c8097c6da19d76342dd0709 100644
--- a/doc/simulated/strlen
+++ b/doc/simulated/strlen
@@ -7,5 +7,8 @@ SYNTAX
 DESCRIPTION
 	This function is equal to builtin/sizeof.
 
+KEYWORDS
+	string
+
 SEE ALSO
 	builtin/sizeof
\ No newline at end of file
diff --git a/doc/simulated/strstr b/doc/simulated/strstr
index 08bd1463faee02d0ec7d8c6d0d2c3725e2abb2e9..29d12b5d5d13fbfbe1efe346dd0d12ef352de892 100644
--- a/doc/simulated/strstr
+++ b/doc/simulated/strstr
@@ -8,5 +8,8 @@ DESCRIPTION
 	Return the position of str2 in str1, if str2 can't be found in str1
 	-1 is returned.
 
+KEYWORDS
+	string
+
 SEE ALSO
 	builtin/sscanf, builtin/explode
diff --git a/doc/simulated/sum_arrays b/doc/simulated/sum_arrays
index 7c9bfb881e5f475a8599ec50b9364846e758b864..414f09d2f1562989f5ef4e1c2e6c4971efb349c4 100644
--- a/doc/simulated/sum_arrays
+++ b/doc/simulated/sum_arrays
@@ -7,18 +7,21 @@ SYNTAX
 DESCRIPTION
 	Works like this:
 
-        mixed *sum_arrays(function fun,mixed *arr1,...)
-        {
-          int e;
+	mixed *sum_arrays(function fun,mixed *arr1,...)
+	{
+	  int e;
 	  mixed *res=allocate(sizeof(arr1));
-          for(e=0;e<sizeof(arr1);e++)
-          {
+	  for(e=0;e<sizeof(arr1);e++)
+	  {
 	    res[e]=fun(arr1[e],arr2[e],...);
-          }
+	  }
 	  return res;
-        }
+	}
 
 	Simple ehh?
 
+KEYWORDS
+	array
+
 SEE ALSO
 	map_array, filter_array, search_array
diff --git a/doc/simulated/this_function b/doc/simulated/this_function
index ee659e954558a44fe4b56eccd015a70f0148e2d2..d1bdf36935d4dcd2a03197c5b6eeae8c53130869 100644
--- a/doc/simulated/this_function
+++ b/doc/simulated/this_function
@@ -8,6 +8,9 @@ DESCRIPTION
 	Returns a functionpointer to the current function, useful for
 	making recursive lambda-functions.
 
+KEYWORDS
+	function
+
 SEE ALSO
 	builtin/get_function, builtin/function_name, builtin/function_object,
 	builtin/backtrace
diff --git a/doc/simulated/write_file b/doc/simulated/write_file
index 04e7c1fa84a83a4a2c20e1a1147c6d8ba5ba1600..174e7084ab1fad5f200c058f8c0532cea13146ae 100644
--- a/doc/simulated/write_file
+++ b/doc/simulated/write_file
@@ -7,5 +7,8 @@ SYNTAX
 DESCRIPTION
 	Append the string str onto the file file. Returns number of bytes written.
 
+KEYWORDS
+	file
+
 SEE ALSO
 	read_file
diff --git a/doc/types/array b/doc/types/array
index 5576582658305a0b4a37925179b31c811b6fa470..2bbbf51f372fc3594129ac73256b6720ba3d9077 100644
--- a/doc/types/array
+++ b/doc/types/array
@@ -20,27 +20,30 @@ DESCRIPTION
 	Here follows a list of operators that applies to arrays:
 	In this list a and b is used to represent an array expression:
 
-	a + b  : summation ( ({1}) + ({2}) returns ({1,2}) )
-	a - b  : subtraction, returns a copy of a with all values that are
-	         present in b removed, ( ({1, 2, 3}) - ({2}) returns ({1,3}) )
-	a & b  : intersection, return an array with all values that are
-		 present in both a and b
-	a | b  : union, return an array with all values that are present in
-	         a or b, differs from summation in that values that are
-	         present in both a and b are only returned once.
-	a ^ b  : xor, return an array with all values that are present in
-	         a or b but not in both.
-	a * c  : multiplication (c is a string) same thing as implode(a,c)
-	a == b : returns 1 if a is the same array as b, same size and values
-	         is not enough.
-	a != b : returns 0 if a is the same array as b, same size and values
-	         is not enough.
-	! a    : boolean not, returns 0
-	a[c]   : indexing, returns element c in the array (c is an int)
-	a[c]=d : setting, sets element c in the array to d (c is an int)
-	a[c..d]: range (c & d are ints) returns an array containing a pice of
-	         the array a. The piece starts at element c and ends (and
-	         includes) element d.
+	a + b	summation ( ({1}) + ({2}) returns ({1,2}) )
+	a - b	subtraction, returns a copy of a with all values that are
+		present in b removed, ( ({1, 2, 3}) - ({2}) returns ({1,3}) )
+	a & b	intersection, return an array with all values that are
+		present in both a and b
+	a | b	union, return an array with all values that are present in
+		a or b, differs from summation in that values that are
+		present in both a and b are only returned once.
+	a ^ b	xor, return an array with all values that are present in
+		a or b but not in both.
+	a * c	multiplication (c is a string) same thing as implode(a,c)
+	a == b	returns 1 if a is the same array as b, same size and values
+		is not enough.
+	a != b	returns 0 if a is the same array as b, same size and values
+		is not enough.
+	! a	boolean not, returns 0
+	a[c]	indexing, returns element c in the array (c is an int)
+	a[c]=d	setting, sets element c in the array to d (c is an int)
+	a[c..d]	range (c & d are ints) returns an array containing a pice of
+		the array a. The piece starts at element c and ends (and
+		includes) element d.
+
+KEYWORDS
+	type
 
 SEE ALSO
 	mapping, list, builtin/allocate, builtin/sizeof, builtin/values
diff --git a/doc/types/float b/doc/types/float
index 4b27d692e488067820e8f1332269bfc3c5e9228f..ca52ca30afe5663a4c71df3876e354ffe57fd89a 100644
--- a/doc/types/float
+++ b/doc/types/float
@@ -13,22 +13,25 @@ DESCRIPTION
 	A list of operators that applies to floats follows:
 	In this list a and b is used to represent a float expression:
 
-	a + b  : summation
-	a - b  : subtraction
-	a * b  : multiplication
-	a / b  : integer division
-	a % b  : modulo ( same thing as  a - floor( a / b ) * b )
-	- a    : negation
-	a == b : return 1 if a is equal to b, 0 otherwise
-	a != b : return 0 if a is equal to b, 1 otherwise
-	a < b  : returns 1 if a is lesser than b, 0 otherwise
-	a <= b : returns 1 if a is lesser or equal to b, 0 otherwise
-	a > b  : returns 1 if a is greater than b, 0 otherwise
-	a >= b : returns 1 if a is greater or equal to b, 0 otherwise
+	a + b	summation
+	a - b	subtraction
+	a * b	multiplication
+	a / b	integer division
+	a % b	modulo ( same thing as  a - floor( a / b ) * b )
+	- a	negation
+	a == b	return 1 if a is equal to b, 0 otherwise
+	a != b	return 0 if a is equal to b, 1 otherwise
+	a < b	returns 1 if a is lesser than b, 0 otherwise
+	a <= b	returns 1 if a is lesser or equal to b, 0 otherwise
+	a > b	returns 1 if a is greater than b, 0 otherwise
+	a >= b	returns 1 if a is greater or equal to b, 0 otherwise
 
 NOTA BENE
 	floats and ints cannot be used together, they have to be cast
 	to the same type first.
 
+KEYWORDS
+	type
+
 SEE ALSO
-	float, modules/math
+	math/sin, math/cos, math/tan, math/sqrt
diff --git a/doc/types/function b/doc/types/function
index d0db01411fa9efab5c95aad728467e50fcb2e246..ad60ad37a6c7fc186eca8c20a66e4b8db96f437a 100644
--- a/doc/types/function
+++ b/doc/types/function
@@ -13,6 +13,9 @@ DESCRIPTION
 	become 0. If you try to call a functionpointer that has is 0 then 0
 	will be returned.
 
+KEYWORDS
+	type
+
 SEE ALSO
 	object, builtin/call_function, builtin/functionp,
 	builtin/function_object, builtin/function_name
diff --git a/doc/types/int b/doc/types/int
index b4fa8802006134ab230ade4acc0f9ed35f06b3c4..e174c18023aeb647622f9768401b0f6ae2e612b8 100644
--- a/doc/types/int
+++ b/doc/types/int
@@ -14,23 +14,26 @@ DESCRIPTION
 
 	In this list a and b is used to represent an integer expression:
 
-	a + b  : summation
-	a - b  : subtraction
-	a * b  : multiplication
-	a / b  : integer division
-	a % b  : modulo ( same thing as  a - ( a / b ) * b )
-	a | b  : bitwise or
-	a & b  : bitwise and
-	a ^ b  : bitwise xor
-	! a    : boolean not, returns 1 if a is zero 0 otherwise
-	~ a    : bitwise complement
-	- a    : negation
-	a == b : return 1 if a is equal to b, 0 otherwise
-	a != b : return 0 if a is equal to b, 1 otherwise
-	a < b  : returns 1 if a is lesser than b, 0 otherwise
-	a <= b : returns 1 if a is lesser or equal to b, 0 otherwise
-	a > b  : returns 1 if a is greater than b, 0 otherwise
-	a >= b : returns 1 if a is greater or equal to b, 0 otherwise
+	a + b	summation
+	a - b	subtraction
+	a * b	multiplication
+	a / b	integer division
+	a % b	modulo ( same thing as  a - ( a / b ) * b )
+	a | b	bitwise or
+	a & b	bitwise and
+	a ^ b	bitwise xor
+	! a	boolean not, returns 1 if a is zero 0 otherwise
+	~ a	bitwise complement
+	- a	negation
+	a == b	return 1 if a is equal to b, 0 otherwise
+	a != b	return 0 if a is equal to b, 1 otherwise
+	a < b	returns 1 if a is lesser than b, 0 otherwise
+	a <= b	returns 1 if a is lesser or equal to b, 0 otherwise
+	a > b	returns 1 if a is greater than b, 0 otherwise
+	a >= b	returns 1 if a is greater or equal to b, 0 otherwise
+
+KEYWORDS
+	type
 
 SEE ALSO
 	float	
diff --git a/doc/types/list b/doc/types/list
index ceee09092588b4dbfc2b9c51057fa9713395143f..b361d0915c9254493abd4f91c6147764486ecd28 100644
--- a/doc/types/list
+++ b/doc/types/list
@@ -11,25 +11,28 @@ DESCRIPTION
 	Here follows a list of operators that applies to lists:
 	In this list a and b is used to represent a list expression:
 
-	a + b  : summation ( (<1>) + (<2>) returns (<1,2>) )
-	a - b  : subtraction, returns a copy of a with all values that are
-                 present in b removed.
-        a & b  : intersection, return a list with all values that are
-                 present in both a & b.
-        a | b  : union, return a list with all values that are present in
-                 a or b, differs from summation in that values that are
-                 present in both a and b are only returned once.
-        a ^ b  : xor, return a list with all indices that are present in
-                 a or b but not in both.
-        a == b : returns 1 if a is the same list as b, same size and values
-                 is not enough.
-        a != b : returns 1 if a is the same list as b, same size and values
-                 is not enough.
-        ! a    : boolean not, returns 0
-	a[c]   : indexing, returns 1 c is present in the list a.
-	a[c]=d : setting, if d is true, c is added to the list if it is not
-		 present already. If d is false, it is removed if it is
-                 present.
+	a + b	summation ( (<1>) + (<2>) returns (<1,2>) )
+	a - b	subtraction, returns a copy of a with all values that are
+		present in b removed.
+	a & b	intersection, return a list with all values that are
+		present in both a & b.
+	a | b	union, return a list with all values that are present in
+		a or b, differs from summation in that values that are
+		present in both a and b are only returned once.
+	a ^ b	xor, return a list with all indices that are present in
+		a or b but not in both.
+	a == b	returns 1 if a is the same list as b, same size and values
+		is not enough.
+	a != b	returns 1 if a is the same list as b, same size and values
+		is not enough.
+	! a	boolean not, returns 0
+	a[c]	indexing, returns 1 c is present in the list a.
+	a[c]=d	setting, if d is true, c is added to the list if it is not
+		present already. If d is false, it is removed if it is
+		present.
+
+KEYWORDS
+	type
 
 SEE ALSO
 	mapping, array, builtin/indices, builtin/sizeof
diff --git a/doc/types/mapping b/doc/types/mapping
index a4db94328fcece0b7bd992edce591c435589de42..f009414380323923d62c3d8634e9f0ac0469d250 100644
--- a/doc/types/mapping
+++ b/doc/types/mapping
@@ -16,29 +16,32 @@ DESCRIPTION
 	Here follows a list of operators that applies to mappings:
 	In this list a and b is used to represent a mapping expression:
 
-	a + b  : summation ( ([1:1]) + ([2:2,2:2]) returns ([1:1,2:2]) )
-	a - b  : subtraction, returns a copy of a with all pairs whos
-                 index is present in b removed.
-        a & b  : intersection, return a mapping with all indices that are
-		 present in both a and b, if an index is present in both
-                 a & b the data for that index will be taken from b.
-        a | b  : union, return a mapping with all values that are present in
-                 a or b, differs from summation in that values that are
-                 present in both a and b are only returned once, as with
-                 intersection, data will be taken from b when possible.
-        a ^ b  : xor, return a mapping with all indices that are present in
-                 a or b but not in both.
-        a == b : returns 1 if a is the same mapping as b, same size, indices
-                 and values is not enough, 0 otherwise.
-        a != b : returns 0 if a is the same mapping as b, same size, indices
-                 and values is not enough, 1 otherwise.
-        ! a    : boolean not, returns 0
-	a[c]   : indexing, returns the value associated with the value c
-                 in the mapping a. If there is no index c in the mapping
-                 zero will be returned. (With zero type = 1)
-	a[c]=d : setting, this associates d with c in the mapping, the index
-                 c will be added to the mapping automatically if it isn't
-                 already there.
+	a + b	summation ( ([1:1]) + ([2:2,2:2]) returns ([1:1,2:2]) )
+	a - b	subtraction, returns a copy of a with all pairs whos
+		index is present in b removed.
+	a & b	intersection, return a mapping with all indices that are
+		resent in both a and b, if an index is present in both
+		a & b the data for that index will be taken from b.
+	a | b	union, return a mapping with all values that are present in
+		a or b, differs from summation in that values that are
+		present in both a and b are only returned once, as with
+		intersection, data will be taken from b when possible.
+	a ^ b	xor, return a mapping with all indices that are present in
+		a or b but not in both.
+	a == b	returns 1 if a is the same mapping as b, same size, indices
+		and values is not enough, 0 otherwise.
+	a != b	returns 0 if a is the same mapping as b, same size, indices
+		and values is not enough, 1 otherwise.
+	! a	boolean not, returns 0
+	a[c]	indexing, returns the value associated with the value c
+		in the mapping a. If there is no index c in the mapping
+		zero will be returned. (With zero type = 1)
+	a[c]=d	setting, this associates d with c in the mapping, the index
+		c will be added to the mapping automatically if it isn't
+		already there.
+
+KEYWORDS
+	type
 
 SEE ALSO
 	array, list, builtin/sizeof, builtin/indices, builtin/values
diff --git a/doc/types/object b/doc/types/object
index 7c3a1873c8c72e03f27764f528a800655df3b738..316e6c185cf4459b1b06f20b9dbc5526b7422306 100644
--- a/doc/types/object
+++ b/doc/types/object
@@ -10,13 +10,16 @@ DESCRIPTION
 	In this list, o and o2 are used to represent object expressions,
 	and s is a string expression:
 
-	o[s]     : indexing, returns the identifier named s in the object o,
-                   an identifier is a global variable or a function.
-	o[s]=c   : This sets the global variable s int the object o to c,
-		   if s is a function however, an error is produced.
-	o -> foo : same as o["foo"]
-	o == o2  : return 1 if o and o2 are the same object
-	o != o2  : return 0 if o and o2 are the same object
+	o[s]	indexing, returns the identifier named s in the object o,
+		an identifier is a global variable or a function.
+	o[s]=c	This sets the global variable s int the object o to c,
+		if s is a function however, an error is produced.
+	o->foo	same as o["foo"]
+	o == o2	return 1 if o and o2 are the same object
+	o != o2	return 0 if o and o2 are the same object
+
+KEYWORDS
+	type
 
 SEE ALSO
 	program, function, builtin/clone, builtin/destruct
diff --git a/doc/types/program b/doc/types/program
index e48520b314514d74092850ac032d00d3c13751aa..b428dbcf85bfe13e2ffc9575a5e03f0fbfe795db 100644
--- a/doc/types/program
+++ b/doc/types/program
@@ -8,6 +8,9 @@ DESCRIPTION
 	arguments to clone() and the only operators that applies to programs
 	are == and !=.
 
+KEYWORDS
+	type
+
 SEE ALSO
 	object, function, builtin/compile_file, builtin/compile_string,
 	builtin/clone
diff --git a/doc/types/string b/doc/types/string
index b69fb8053b1c55ececb896e065812780bd61453a..8074d27562742c34aba1d2a3b064bb8653608cc8 100644
--- a/doc/types/string
+++ b/doc/types/string
@@ -17,18 +17,22 @@ DESCRIPTION
 	A list of operators that applies to strings follow:
 	In this list a and b is used to represent a string expression:
 
-	a + b  : summation ( "a"+"b" returns "ab")
-	a - b  : subtraction ( same as replace(a,b,"") )
-	a / b  : division ( same thing as explode(a,b) )
-	! a    : boolean not, returns 0
-
-	The following operators compare two string alphabetically:	
-	a == b : return 1 if a is equal to b, 0 otherwise
-	a != b : return 0 if a is equal to b, 1 otherwise
-	a < b  : returns 1 if a is lesser than b, 0 otherwise
-	a <= b : returns 1 if a is lesser or equal to b, 0 otherwise
-	a > b  : returns 1 if a is greater than b, 0 otherwise
-	a >= b : returns 1 if a is greater or equal to b, 0 otherwise
+	a + b	summation ( "a"+"b" returns "ab")
+	a - b	subtraction ( same as replace(a,b,"") )
+	a / b	division ( same thing as explode(a,b) )
+	! a	boolean not, returns 0
+
+	The following operators compare two string alphabetically:
+
+	a == b	return 1 if a is equal to b, 0 otherwise
+	a != b	return 0 if a is equal to b, 1 otherwise
+	a < b	returns 1 if a is lesser than b, 0 otherwise
+	a <= b	returns 1 if a is lesser or equal to b, 0 otherwise
+	a > b	returns 1 if a is greater than b, 0 otherwise
+	a >= b	returns 1 if a is greater or equal to b, 0 otherwise
+
+KEYWORDS
+	type
 
 SEE ALSO
 	builtin/indices, builtin/values, builtin/sscanf, builtin/sprintf,