diff --git a/doc/sefun/object_info b/doc/sefun/object_info
index 3945651..bee892e 100644
--- a/doc/sefun/object_info
+++ b/doc/sefun/object_info
@@ -1,129 +1,148 @@
-DEPRECATED
-SYNOPSIS
-        #include <objectinfo.h>
 
-        mixed * object_info(object ob, int what)
-        mixed * object_info(object ob, int what, int index)
+object_info()
+*************
+
+
+DEPRECATED
+==========
+
+
+SYNOPSIS
+========
+
+   #include <objectinfo.h>
+
+   mixed * object_info(object ob, int what)
+   mixed * object_info(object ob, int what, int index)
+
 
 DESCRIPTION
-        Returns some internal information about object <ob>, collected
-        in an array. Argument <what> determines which information is
-        returned.
+===========
 
-        The result is usually an array. However, if <index> is specified,
-        the result is the value from position <index> of the array which
-        would have been returned normally.
+   Returns some internal information about object <ob>, collected
+   in an array. Argument <what> determines which information is
+   returned.
 
-        The possible values of <what>, and the indices of the returned
-        arrays are defined in the include file <objectinfo.h>, and may
-        change in future versions of the driver!
+   The result is usually an array. However, if <index> is specified,
+   the result is the value from position <index> of the array which
+   would have been returned normally.
+
+   The possible values of <what>, and the indices of the returned
+   arrays are defined in the include file <objectinfo.h>, and may
+   change in future versions of the driver!
 
 
-        <what> == OINFO_BASIC:
+   <what> == OINFO_BASIC:
 
-          This call returns basic information about <ob>:
+     This call returns basic information about <ob>:
 
-          int [OIB_HEART_BEAT]:       1 if <ob> has a heart_beat, 0 else.
-          int [OIB_IS_WIZARD]:        1 if <ob> has the wizard flag set,
-                                        0 else.
-            This entry is always 0 when set_is_wizard() is not available.
-          int [OIB_ENABLE_COMMANDS]:  1 if <ob> can give commands, 0 else.
-          int [OIB_CLONE]:            1 if <ob> is a clone, 0 else.
-          int [OIB_DESTRUCTED]:       1 if <ob> is destructed, 0 else.
-          int [OIB_SWAPPED]:          1 if <ob> is swapped, 0 else.
-          int [OIB_ONCE_INTERACTIVE]: 1 if <ob> was once interactive, 0 else.
-          int [OIB_RESET_STATE]:      1 if <ob> is (still) reset, 0 else.
-          int [OIB_WILL_CLEAN_UP]:    1 if <ob> will call clean_up(), 0 else.
-          int [OIB_LAMBDA_REFERENCED]: 1 if <ob> has lambdas, 0 else.
-          int [OIB_SHADOW]:           1 if <ob> has a shadow structure tied
-                                        to it, 0 if not.
-          int [OIB_REPLACED]:         1 if the program for <ob> was replaced,
-                                      0 else.
-          int [OIB_NEXT_RESET]:   time of the next reset
-          int [OIB_TIME_OF_REF]:  time of the last call to <ob>
-          int [OIB_NEXT_CLEANUP]: time of the next data cleanup
-          int [OIB_REF]:          number of references to <ob>
-          int [OIB_GIGATICKS] and [OIB_TICKS]: together, these numbers
-            give the accumulated evaluation cost spend in <ob>
-          int [OIB_SWAP_NUM]:     the swap number for <ob>s program,
-                                  or -1 if not swapped.
-          int [OIB_PROG_SWAPPED]: 1 if <ob>'s program is swapped, 0 else.
-          int [OIB_VAR_SWAPPED]:  1 if <ob>'s variables are swapped, 0 else.
-          int [OIB_NAME]:         <ob>'s object name.
-          int [OIB_LOAD_NAME]:    <ob>'s load name.
-          object [OIB_NEXT_ALL]:  next object in the object list.
-          object [OIB_PREV_ALL]:  previous object in the object list.
+     int [OIB_HEART_BEAT]:       1 if <ob> has a heart_beat, 0 else.
+     int [OIB_IS_WIZARD]:        1 if <ob> has the wizard flag set,
+                                   0 else.
+       This entry is always 0 when set_is_wizard() is not available.
+     int [OIB_ENABLE_COMMANDS]:  1 if <ob> can give commands, 0 else.
+     int [OIB_CLONE]:            1 if <ob> is a clone, 0 else.
+     int [OIB_DESTRUCTED]:       1 if <ob> is destructed, 0 else.
+     int [OIB_SWAPPED]:          1 if <ob> is swapped, 0 else.
+     int [OIB_ONCE_INTERACTIVE]: 1 if <ob> was once interactive, 0 else.
+     int [OIB_RESET_STATE]:      1 if <ob> is (still) reset, 0 else.
+     int [OIB_WILL_CLEAN_UP]:    1 if <ob> will call clean_up(), 0 else.
+     int [OIB_LAMBDA_REFERENCED]: 1 if <ob> has lambdas, 0 else.
+     int [OIB_SHADOW]:           1 if <ob> has a shadow structure tied
+                                   to it, 0 if not.
+     int [OIB_REPLACED]:         1 if the program for <ob> was replaced,
+                                 0 else.
+     int [OIB_NEXT_RESET]:   time of the next reset
+     int [OIB_TIME_OF_REF]:  time of the last call to <ob>
+     int [OIB_NEXT_CLEANUP]: time of the next data cleanup
+     int [OIB_REF]:          number of references to <ob>
+     int [OIB_GIGATICKS] and [OIB_TICKS]: together, these numbers
+       give the accumulated evaluation cost spend in <ob>
+     int [OIB_SWAP_NUM]:     the swap number for <ob>s program,
+                             or -1 if not swapped.
+     int [OIB_PROG_SWAPPED]: 1 if <ob>'s program is swapped, 0 else.
+     int [OIB_VAR_SWAPPED]:  1 if <ob>'s variables are swapped, 0 else.
+     int [OIB_NAME]:         <ob>'s object name.
+     int [OIB_LOAD_NAME]:    <ob>'s load name.
+     object [OIB_NEXT_ALL]:  next object in the object list.
+     object [OIB_PREV_ALL]:  previous object in the object list.
 
 
-        <what> == OINFO_POSITION:
+   <what> == OINFO_POSITION:
 
-          This call returns information about <ob>'s position in the
-          global list of objects:
+     This call returns information about <ob>'s position in the
+     global list of objects:
 
-          object [OIP_NEXT]: next object in the object list.
-          object [OIP_PREV]: previous object in the object list.
-          int    [OIP_POS]:  position of <ob> in list, counting from 0 up.
+     object [OIP_NEXT]: next object in the object list.
+     object [OIP_PREV]: previous object in the object list.
+     int    [OIP_POS]:  position of <ob> in list, counting from 0 up.
 
-          This call can be expensive in computing time.
+     This call can be expensive in computing time.
 
 
-        <what> == OINFO_MEMORY:
+   <what> == OINFO_MEMORY:
 
-          This call returns information about the program <ob> uses:
+     This call returns information about the program <ob> uses:
 
-          int    [OIM_REF]:            number of references to the program.
-          string [OIM_NAME]:           name of program.
-          int    [OIM_PROG_SIZE]:      size of the program.
-          int    [OIM_NUM_FUNCTIONS]:  number of functions in the program.
-          int    [OIM_SIZE_FUNCTIONS]: size needed for the function structs.
-          int    [OIM_NUM_VARIABLES]:  number of variables in the program.
-          int    [OIM_SIZE_VARIABLES]: size needed for the variable structs.
-          int    [OIM_NUM_STRINGS]:    number of strings in the program.
-          int    [OIM_SIZE_STRINGS]:   size needed for the string pointers.
-          int    [OIM_SIZE_STRINGS_DATA]: size needed for the string data,
-                                       scaled down according to the extend of
-                                       data sharing.
-          int    [OIM_SIZE_STRINGS_TOTAL]: unmodified size needed for the
-                                       string data.
-          int    [OIM_NUM_INCLUDES]:   number of included files in the program.
-          int    [OIM_NUM_INHERITED]:  number of inherited programs.
-          int    [OIM_SIZE_INHERITED]: size needed for the inherit structs.
-          int    [OIM_TOTAL_SIZE]:     total size of the program.
-          int    [OIM_DATA_SIZE]:      total size of the values held in the
-                                       object's variables, scaled down
-                                       according to the extend of data
-                                       sharing.
-          int    [OIM_DATA_SIZE_TOTAL]: unmodified total size of the values
-                                       held in the object's variables
-          int    [OIM_NO_INHERIT]:     1 if the program can't be inherited.
-          int    [OIM_NO_CLONE]:       1 if the program/blueprint can't be
-                                       cloned.
-          int    [OIM_NO_SHADOW]:      1 if the program's functions can't be
-                                       shadowed.
-          int    [OIM_SHARE_VARIABLES]:  1 if clones of this program share
-                                       their initial variable values with
-                                       the blueprint.
+     int    [OIM_REF]:            number of references to the program.
+     string [OIM_NAME]:           name of program.
+     int    [OIM_PROG_SIZE]:      size of the program.
+     int    [OIM_NUM_FUNCTIONS]:  number of functions in the program.
+     int    [OIM_SIZE_FUNCTIONS]: size needed for the function structs.
+     int    [OIM_NUM_VARIABLES]:  number of variables in the program.
+     int    [OIM_SIZE_VARIABLES]: size needed for the variable structs.
+     int    [OIM_NUM_STRINGS]:    number of strings in the program.
+     int    [OIM_SIZE_STRINGS]:   size needed for the string pointers.
+     int    [OIM_SIZE_STRINGS_DATA]: size needed for the string data,
+                                  scaled down according to the extend of
+                                  data sharing.
+     int    [OIM_SIZE_STRINGS_TOTAL]: unmodified size needed for the
+                                  string data.
+     int    [OIM_NUM_INCLUDES]:   number of included files in the program.
+     int    [OIM_NUM_INHERITED]:  number of inherited programs.
+     int    [OIM_SIZE_INHERITED]: size needed for the inherit structs.
+     int    [OIM_TOTAL_SIZE]:     total size of the program.
+     int    [OIM_DATA_SIZE]:      total size of the values held in the
+                                  object's variables, scaled down
+                                  according to the extend of data
+                                  sharing.
+     int    [OIM_DATA_SIZE_TOTAL]: unmodified total size of the values
+                                  held in the object's variables
+     int    [OIM_NO_INHERIT]:     1 if the program can't be inherited.
+     int    [OIM_NO_CLONE]:       1 if the program/blueprint can't be
+                                  cloned.
+     int    [OIM_NO_SHADOW]:      1 if the program's functions can't be
+                                  shadowed.
+     int    [OIM_SHARE_VARIABLES]:  1 if clones of this program share
+                                  their initial variable values with
+                                  the blueprint.
 
-          This call swaps in the program if necessary.
-          Note that the OIM_SIZE_xxx entries only give the size spent on
-          the structures and pointers, not the size of the variable data,
-          function code, and strings themselves.
+     This call swaps in the program if necessary.
+     Note that the OIM_SIZE_xxx entries only give the size spent on
+     the structures and pointers, not the size of the variable data,
+     function code, and strings themselves.
+
 
 HISTORY
-        Introduced in LDMud 3.2.6.
-        Changes in LDMud 3.2.7:
-          - new basic result OIB_REPLACED.
-          - basic result OIB_IS_WIZARD is always 0 if set_is_wizard()
-              is not available.
-          - basic result OIB_APPROVED is gone.
-        LDMud 3.2.8 added OIM_DATA_SIZE to the result of OINFO_MEMORY.
-        LDMud 3.2.9 added the index mechanism, OIM_NUM_INCLUDES,
-          OIM_NO_INHERIT, OIM_NO_SHADOW, OIM_NO_CLONE, OIM_SIZE_STRINGS_DATA,
-          OIM_SIZE_STRINGS_TOTAL, and OIM_DATA_SIZE_TOTAL to the result
-          of OINFO_MEMORY.
-        LDMud 3.3.378 added the OIM_SHARE_VARIABLES to the result
-          of OINFO_MEMORY.
-        LDMud 3.3.654 added the OIB_NEXT_CLEANUP to the result of OINFO_BASIC.
+=======
+
+   Introduced in LDMud 3.2.6.
+   Changes in LDMud 3.2.7:
+     - new basic result OIB_REPLACED.
+     - basic result OIB_IS_WIZARD is always 0 if set_is_wizard()
+         is not available.
+     - basic result OIB_APPROVED is gone.
+   LDMud 3.2.8 added OIM_DATA_SIZE to the result of OINFO_MEMORY.
+   LDMud 3.2.9 added the index mechanism, OIM_NUM_INCLUDES,
+     OIM_NO_INHERIT, OIM_NO_SHADOW, OIM_NO_CLONE, OIM_SIZE_STRINGS_DATA,
+     OIM_SIZE_STRINGS_TOTAL, and OIM_DATA_SIZE_TOTAL to the result
+     of OINFO_MEMORY.
+   LDMud 3.3.378 added the OIM_SHARE_VARIABLES to the result
+     of OINFO_MEMORY.
+   LDMud 3.3.654 added the OIB_NEXT_CLEANUP to the result of OINFO_BASIC.
+
 
 SEE ALSO
-        debug_info(E)
+========
+
+   debug_info(E)
