diff --git a/configure.in b/configure.in
index 0e7913c..4cd639c 100644
--- a/configure.in
+++ b/configure.in
@@ -933,6 +933,89 @@ AC_SUBST(MONO_CFLAGS)
 AC_SUBST(MONO_LIBS)
 ])
 
+# GObject Introspection
+GIR_REQ=1.0.0
+AC_ARG_ENABLE(introspection,
+          AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]],
+                         [Enable introspection for this build]),, 
+                         [enable_introspection=no])
+
+AC_MSG_CHECKING([for gobject-introspection])
+
+dnl presence/version checking
+AS_CASE([$enable_introspection],
+[no], [
+    found_introspection="no (disabled, use --enable-introspection to enable)"
+],
+[yes],[
+    PKG_CHECK_EXISTS([gobject-introspection-1.0],,
+                     AC_MSG_ERROR([gobject-introspection-1.0 is not installed]))
+    PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $GIR_REQ],
+                     found_introspection=yes,
+                     AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME]))
+],
+[auto],[
+    PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $GIR_REQ], found_introspection=yes, found_introspection=no)
+dnl Canonicalize enable_introspection
+enable_introspection=$found_introspection
+],
+[	
+    AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@])
+])
+
+AC_MSG_RESULT([$found_introspection])
+
+INTROSPECTION_SCANNER=
+INTROSPECTION_COMPILER=
+INTROSPECTION_GENERATE=
+INTROSPECTION_GIRDIR=
+INTROSPECTION_TYPELIBDIR=
+if test "x$found_introspection" = "xyes"; then
+   INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
+   INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
+   INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+   INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+   INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+   INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
+   INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
+   INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+fi
+AC_SUBST(INTROSPECTION_SCANNER)
+AC_SUBST(INTROSPECTION_COMPILER)
+AC_SUBST(INTROSPECTION_GENERATE)
+AC_SUBST(INTROSPECTION_GIRDIR)
+AC_SUBST(INTROSPECTION_TYPELIBDIR)
+AC_SUBST(INTROSPECTION_CFLAGS)
+AC_SUBST(INTROSPECTION_LIBS)
+AC_SUBST(INTROSPECTION_MAKEFILE)
+
+AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
+dnl we need to change the install directories for distcheck
+AC_ARG_WITH([gir-dir],
+	AS_HELP_STRING(
+		[--with-gir-dir],
+		[
+		 path to gir repository
+		 (automatically detected via pkg-config)
+		]
+	),
+	[GIRDIR=$withval],
+	[GIRDIR=$INTROSPECTION_GIRDIR]
+)
+AC_SUBST(GIRDIR)
+AC_ARG_WITH([typelib-dir],
+	AS_HELP_STRING(
+		[--with-typelib-dir],
+		[
+		 path to typelibs repository
+		 (automatically detected via pkg-config)
+		]
+	),
+	[TYPELIBDIR=$withval],
+	[TYPELIBDIR=$INTROSPECTION_TYPELIBDIR]
+)
+AC_SUBST(TYPELIBDIR)
+
 dnl **************************************************
 dnl * Config defaults
 dnl **************************************************
diff --git a/src/Makefile.am b/src/Makefile.am
index c485399..a6657a2 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -484,3 +484,41 @@ gtkaction_DATA = GNOME_Gnumeric-gtk.xml
 GNOME_Gnumeric-gtk.xml: GNOME_Gnumeric-gtk.xml.in
 	sed -e 's/ _name *=/ name=/' <$<  >$@
 DISTCLEANFILES = GNOME_Gnumeric-gtk.xml
+
+BUILT_GIRSOURCES = Gnm-@GNUMERIC_API_VER@.gir
+
+Gnm-@GNUMERIC_API_VER@.gir: $(libspreadsheet_include_HEADER)
+Gnm-@GNUMERIC_API_VER@.gir: $(libspreadsheet_la_SOURCES)
+Gnm-@GNUMERIC_API_VER@.gir: libspreadsheet.la
+Gnm-@GNUMERIC_API_VER@.gir: $(INTROSPECTION_SCANNER) Makefile
+	$(AM_V_GEN) $(INTROSPECTION_SCANNER) -v --namespace Gnm \
+		--nsversion="@GNUMERIC_API_VER@" \
+	    --add-include-path=$(srcdir) --add-include-path=. \
+	    --include=GObject-2.0 \
+	    --include=Gio-2.0 \
+	    --include=libxml2-2.0 \
+	    --include=Gsf-1 \
+	    --include=GOffice-0.10 \
+	    --library=libspreadsheet.la \
+	    --libtool="$(LIBTOOL)" \
+	    --output $@ \
+	    --pkg libspreadsheet-@GNUMERIC_API_VER@ \
+	    --accept-unprefixed \
+	    -I$(top_srcdir) \
+	    $(libspreadsheet_include_HEADERS) $(libspreadsheet_la_SOURCES)
+
+if HAVE_INTROSPECTION
+
+girdir = $(GIRDIR)
+gir_DATA = $(BUILT_GIRSOURCES)
+
+typelibsdir = $(TYPELIBDIR)
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+CLEANFILES += $(gir_DATA) $(typelibs_DATA)
+
+%.typelib: %.gir $(INTROSPECTION_COMPILER)
+	$(AM_V_GEN) LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(INTROSPECTION_COMPILER) --includedir=$(srcdir) --includedir=. $(G_IR_COMPILER_OPTS) $< -o $(builddir)/$(@F)
+
+endif # HAVE_INTROSPECTION
+
diff --git a/src/application.c b/src/application.c
index 17293c1..138be1b 100644
--- a/src/application.c
+++ b/src/application.c
@@ -441,7 +441,13 @@ gnm_app_workbook_foreach (GnmWbIterFunc cback, gpointer data)
 	return TRUE;
 }
 
-/* Get nth workbook.  Index is zero-based.  */
+/**
+ * gnm_app_workbook_get_by_index:
+ * @i: index
+ * 
+ * Get nth workbook.  Index is zero-based.
+ * Return value: (transfer none): the nth workbook if any.
+ */
 Workbook *
 gnm_app_workbook_get_by_index (int i)
 {
diff --git a/src/cell.c b/src/cell.c
index 52f4d1a..32d8db5 100644
--- a/src/cell.c
+++ b/src/cell.c
@@ -1004,3 +1004,27 @@ gnm_cell_convert_expr_to_value (GnmCell *cell)
 	cell->base.texpr = NULL;
 }
 
+static GnmCell *
+cell_copy (GnmCell *cell)
+{
+	return cell;
+}
+
+static GnmCell *
+cell_free (GnmCell *cell)
+{
+}
+
+GType
+gnm_cell_get_type (void)
+{
+    static GType type_cell = 0;
+
+    if (!type_cell)
+	type_cell = g_boxed_type_register_static
+	    ("GnmCell",
+	     (GBoxedCopyFunc) cell_copy,
+	     (GBoxedFreeFunc) cell_free);
+
+    return type_cell;
+}
diff --git a/src/cell.h b/src/cell.h
index 152c4c1..02d6e3b 100644
--- a/src/cell.h
+++ b/src/cell.h
@@ -29,6 +29,8 @@ struct _GnmCell {
 	GnmValue      *value;	/* computed or entered (Must be non NULL) */
 };
 
+GType	    gnm_cell_get_type (void);
+
 /**
  * GnmCell state checking
  */
diff --git a/src/complex.h b/src/complex.h
index f4385e1..767758f 100644
--- a/src/complex.h
+++ b/src/complex.h
@@ -9,7 +9,7 @@
 G_BEGIN_DECLS
 
 #ifdef GNM_WITH_LONG_DOUBLE
-typedef go_complexl complex_t;
+#define complex_t go_complexl
 #define complex_init go_complex_initl
 #define complex_add go_complex_addl
 #define complex_sub go_complex_subl
@@ -31,7 +31,7 @@ typedef go_complexl complex_t;
 #define complex_to_polar go_complex_to_polarl
 #define complex_from_polar go_complex_from_polarl
 #else
-typedef go_complex complex_t;
+#define complex_t go_complex
 #define complex_init go_complex_init
 #define complex_add go_complex_add
 #define complex_sub go_complex_sub
diff --git a/src/format-template.h b/src/format-template.h
index e1b2d73..c47c22f 100644
--- a/src/format-template.h
+++ b/src/format-template.h
@@ -74,6 +74,13 @@ typedef struct {
 	char *description;
 } FormatTemplateCategory;
 
+typedef struct {
+	gboolean left;
+	gboolean right;
+	gboolean top;
+	gboolean bottom;
+} FormatEdges;
+
 struct _GnmFormatTemplate {
 	FormatTemplateCategory *category;
 	GSList *members;	/* the actual TemplateMembers */
@@ -90,12 +97,7 @@ struct _GnmFormatTemplate {
 	gboolean patterns;
 	gboolean alignment;
 
-	struct {
-		gboolean left;
-		gboolean right;
-		gboolean top;
-		gboolean bottom;
-	} edges;
+	FormatEdges edges;
 
 /* <private> */
 	/* pre-calculate styles */
diff --git a/src/func.c b/src/func.c
index ddc591b..fdfe9ab 100644
--- a/src/func.c
+++ b/src/func.c
@@ -1003,6 +1003,8 @@ gnm_func_unref (GnmFunc *func)
 		func->ref_notify (func, 0);
 }
 
+/**
+ */
 GnmFunc *
 gnm_func_lookup (char const *name, Workbook *scope)
 {
diff --git a/src/gnm-style-impl.h b/src/gnm-style-impl.h
index 2cbdcb1..ad998a0 100644
--- a/src/gnm-style-impl.h
+++ b/src/gnm-style-impl.h
@@ -11,6 +11,22 @@
 
 G_BEGIN_DECLS
 
+typedef struct {
+	GnmColor *font;
+	GnmColor *back;
+	GnmColor *pattern;
+} GnmStyleColor;
+
+typedef struct {
+	GOString	*name;
+	gboolean	bold;
+	gboolean	italic;
+	GnmUnderline	underline;
+	gboolean	strikethrough;
+	GOFontScript	script;
+	double		size;
+} GnmStyleFontDetails;
+
 struct _GnmStyle {
 	unsigned int	changed;
 	unsigned int	set;
@@ -29,24 +45,12 @@ struct _GnmStyle {
 	PangoContext  *font_context;
 
 /* public */
-	struct {
-		GnmColor *font;
-		GnmColor *back;
-		GnmColor *pattern;
-	}  color;
+	GnmStyleColor  color;
 	GnmBorder	*borders[MSTYLE_BORDER_DIAGONAL - MSTYLE_BORDER_TOP + 1];
 	guint32          pattern;
 
 #warning TODO use GOFont
-	struct {
-		GOString	*name;
-		gboolean	bold;
-		gboolean	italic;
-		GnmUnderline	underline;
-		gboolean	strikethrough;
-		GOFontScript	script;
-		double		size;
-	} font_detail;
+	GnmStyleFontDetails font_detail;
 
 	GOFormat const *format;
 	GnmHAlign	 h_align;
diff --git a/src/parse-util.h b/src/parse-util.h
index bdeb23e..62cbd80 100644
--- a/src/parse-util.h
+++ b/src/parse-util.h
@@ -94,6 +94,61 @@ typedef enum {
 	GNM_EXPR_PARSE_UNKNOWN_NAMES_ARE_INVALID	   = 1 << 5
 } GnmExprParseFlags;
 
+typedef struct {
+	/* Called a lot for anything that might be a reference.  */
+	char const *(*range_ref) (GnmRangeRef *res, char const *in,
+				  GnmParsePos const *pp,
+				  GnmConventions const *convs);
+				/* GError **err); */
+
+	/* Called to unescape strings */
+	char const *(*string) (char const *in, GString *target,
+			       GnmConventions const *convs);
+
+	/* Called a lot for anything that might be a function name or
+	 * defined name.  */
+	char const *(*name) (char const *in,
+			     GnmConventions const *convs);
+	/* Returns true if a tentative expression name is legal. */
+	gboolean (*name_validate) (const char *name);
+
+	/* Must return non-NULL, and absorb the args, including the list. */
+	GnmExpr const *(*func) (GnmConventions const *convs,
+			        /* make scope more useful, eg a
+				 * ParsePos * to allow for
+				 * sheet/object specific functions
+				 * */
+				Workbook *scope,
+				char const *name,
+				GnmExprList *args);
+	Workbook *(*external_wb) (GnmConventions const *convs,
+				 Workbook *ref_wb,
+				 char const *unquoted_name);
+} GnmConventionsImport;
+
+typedef struct {
+	int decimal_digits;
+
+	gboolean translated;
+
+	void (*string)	  (GnmConventionsOut *out,
+			   GOString const *str);
+	void (*func)	  (GnmConventionsOut *out,
+			   GnmExprFunction const *func);
+	void (*name)	  (GnmConventionsOut *out,
+			   GnmExprName const *name);
+	void (*cell_ref)  (GnmConventionsOut *out,
+			   GnmCellRef const *cell_ref,
+			   gboolean no_sheetname);
+	void (*range_ref) (GnmConventionsOut *out,
+			   GnmRangeRef const *range_ref);
+	void (*boolean)	  (GnmConventionsOut *out,
+			   gboolean val);
+
+	GString * (*quote_sheet_name) (GnmConventions const *convs,
+				       char const *name);
+} GnmConventionsExport;
+
 struct _GnmConventions {
 	int ref_count;
 
@@ -144,61 +199,10 @@ struct _GnmConventions {
 	gboolean exp_is_left_associative;
 
 /* Import specific functions ------------------------------------- */
-	struct {
-		/* Called a lot for anything that might be a reference.  */
-		char const *(*range_ref) (GnmRangeRef *res, char const *in,
-					  GnmParsePos const *pp,
-					  GnmConventions const *convs);
-					/* GError **err); */
-
-		/* Called to unescape strings */
-		char const *(*string) (char const *in, GString *target,
-				       GnmConventions const *convs);
-
-		/* Called a lot for anything that might be a function name or
-		 * defined name.  */
-		char const *(*name) (char const *in,
-				     GnmConventions const *convs);
-		/* Returns true if a tentative expression name is legal. */
-		gboolean (*name_validate) (const char *name);
-
-		/* Must return non-NULL, and absorb the args, including the list. */
-		GnmExpr const *(*func) (GnmConventions const *convs,
-				        /* make scope more useful, eg a
-					 * ParsePos * to allow for
-					 * sheet/object specific functions
-					 * */
-					Workbook *scope,
-					char const *name,
-					GnmExprList *args);
-		Workbook *(*external_wb) (GnmConventions const *convs,
-					 Workbook *ref_wb,
-					 char const *unquoted_name);
-	} input;
+	GnmConventionsImport input;
 
 /* Export specific functions ----------------------------------- */
-	struct {
-		int decimal_digits;
-
-		gboolean translated;
-
-		void (*string)	  (GnmConventionsOut *out,
-				   GOString const *str);
-		void (*func)	  (GnmConventionsOut *out,
-				   GnmExprFunction const *func);
-		void (*name)	  (GnmConventionsOut *out,
-				   GnmExprName const *name);
-		void (*cell_ref)  (GnmConventionsOut *out,
-				   GnmCellRef const *cell_ref,
-				   gboolean no_sheetname);
-		void (*range_ref) (GnmConventionsOut *out,
-				   GnmRangeRef const *range_ref);
-		void (*boolean)	  (GnmConventionsOut *out,
-				   gboolean val);
-
-		GString * (*quote_sheet_name) (GnmConventions const *convs,
-					       char const *name);
-	} output;
+	GnmConventionsExport output;
 };
 GnmConventions *gnm_conventions_new	 (void);
 GnmConventions *gnm_conventions_new_full (unsigned size);
diff --git a/src/print-info.h b/src/print-info.h
index 6ecda8a..e42c79e 100644
--- a/src/print-info.h
+++ b/src/print-info.h
@@ -57,28 +57,42 @@ typedef struct {
 	GArray	*details; /* ordered array of GnmPageBreak  */
 } GnmPageBreaks;
 
+typedef enum {
+	PRINT_SCALE_PERCENTAGE,
+	PRINT_SCALE_FIT_PAGES
+} PrintScaleType;
+
+typedef struct {
+	double x;
+	double y;
+} PrintScalePercent;
+
+typedef struct {
+	int cols;
+	int rows;
+	double y;
+} PrintScaleDim;
+
+typedef struct {
+	PrintScaleType type;
+
+	/* We store separate x and y scales internally, for the
+	* 'fit-to' printing feature. (They are calculated at print-time)
+	* When the user is doing the simple scaling, both these values
+	* will be equal.
+	*/
+	PrintScalePercent percentage;
+
+	PrintScaleDim dim;
+} PrintInfoScaling;
+
+typedef struct {
+	GnmPageBreaks *h,  /* between rows */
+		      *v;  /* between columns */
+} PrintInfoPageBreaks;
+
 struct _PrintInformation {
-	struct {
-		enum {
-			PRINT_SCALE_PERCENTAGE,
-			PRINT_SCALE_FIT_PAGES
-		} type;
-
-		/* We store separate x and y scales internally, for the
-		* 'fit-to' printing feature. (They are calculated at print-time)
-		* When the user is doing the simple scaling, both these values
-		* will be equal.
-		*/
-		struct {
-			double x;
-			double y;
-		} percentage;
-
-		struct { /* zero == use as many as required */
-			int cols;
-			int rows;
-		} dim;
-	} scaling;
+	PrintInfoScaling scaling;
 	double           edge_to_below_header;
 	double           edge_to_above_footer;
         DesiredDisplay   desired_display;
@@ -98,10 +112,7 @@ struct _PrintInformation {
 	GnmPrintCommentPlacementType comment_placement;
 	GnmPrintErrorsType error_display;
 
-	struct {
-		GnmPageBreaks *h,  /* between rows */
-			      *v;  /* between columns */
-	} page_breaks;
+	PrintInfoPageBreaks page_breaks;
 	PrintHF		*header, *footer;
 
 	int		  start_page; /* < 0 implies auto */
diff --git a/src/sheet.c b/src/sheet.c
index 19ba6c1..3d1d2ce 100644
--- a/src/sheet.c
+++ b/src/sheet.c
@@ -2751,6 +2751,9 @@ sheet_cell_get_value (Sheet *sheet, int const col, int const row)
 
 /**
  * sheet_cell_set_text:
+ * @cell A cell.
+ * @text, the text to set.
+ * @markup: (allow-none): an optional PangoAttrList.
  *
  * Marks the sheet as dirty
  * Clears old spans.
diff --git a/src/stf-parse.h b/src/stf-parse.h
index c48cd9d..01115c1 100644
--- a/src/stf-parse.h
+++ b/src/stf-parse.h
@@ -21,22 +21,26 @@ typedef enum {
 } StfTrimType_t;
 
 typedef struct {
+	guchar       min, max;
+} StfCompiledTerminator;
+
+typedef struct {
+	GSList *str;
+	char   *chr;
+	gboolean duplicates;         /* See two text separators as one? */
+} StfSeparator;
+
+typedef struct {
 	StfParseType_t       parsetype;             /* The type of import to do */
 	StfTrimType_t        trim_spaces;           /* Trim spaces in fields? */
 
 	GSList *             terminator;            /* Line terminators */
 	char *               locale;
 
-	struct {
-		guchar       min, max;
-	} compiled_terminator;
+	StfCompiledTerminator compiled_terminator;
 
 	/* CSV related */
-	struct {
-		GSList *str;
-		char   *chr;
-		gboolean duplicates;         /* See two text separators as one? */
-	} sep;
+	StfSeparator sep;
 	gunichar             stringindicator;       /* String indicator */
 	gboolean             indicator_2x_is_single;/* 2 quote chars form a single non-terminating quote */
 	gboolean             trim_seps;             /* Ignore initial seps.  */
diff --git a/src/style-font.h b/src/style-font.h
index 4ef7638..5513827 100644
--- a/src/style-font.h
+++ b/src/style-font.h
@@ -8,14 +8,16 @@
 
 G_BEGIN_DECLS
 
+typedef struct {
+	GOFont const *font;
+	GOFontMetrics *metrics;
+} GnmGOFont;
+
 struct _GnmFont {
 	int	 ref_count;
 	char	*font_name;
 	double	 size_pts;
-	struct {
-		GOFont const *font;
-		GOFontMetrics *metrics;
-	} go;
+	GnmGOFont go;
 	PangoContext *context;
 
 	unsigned int is_bold : 1;
diff --git a/src/workbook-control-priv.h b/src/workbook-control-priv.h
index a529292..13db885 100644
--- a/src/workbook-control-priv.h
+++ b/src/workbook-control-priv.h
@@ -14,6 +14,28 @@ struct _WorkbookControl {
 
 	gulong clipboard_changed_signal;
 };
+
+typedef struct {
+	void (*add)	(WorkbookControl *wbc, SheetView *sv);
+	void (*remove)	(WorkbookControl *wbc, Sheet *sheet);
+	void (*focus)   (WorkbookControl *wbc, Sheet *sheet);
+	void (*remove_all) (WorkbookControl *wbc);
+	
+} WbcSheetManager;
+
+typedef struct {
+	void (*truncate)(WorkbookControl *wbc, int n, gboolean is_undo);
+	void (*pop)	(WorkbookControl *wbc, gboolean is_undo);
+	void (*push)	(WorkbookControl *wbc, gboolean is_undo,
+			 char const *text, gpointer key);
+	void (*labels)	(WorkbookControl *wbc,
+				 char const *undo, char const *redo);
+} WbcUndoRedo;
+
+typedef struct {
+	void (*update)      (WorkbookControl *wbc, int flags);
+} WbcMenuState;
+
 typedef struct {
 	GODocControlClass base;
 
@@ -28,23 +50,9 @@ typedef struct {
 	void (*edit_finish)	    (WorkbookControl *wbc, gboolean accept);
 	void (*selection_descr_set) (WorkbookControl *wbc, char const *text);
 	void (*update_action_sensitivity)  (WorkbookControl *wbc);
-	struct {
-		void (*add)	(WorkbookControl *wbc, SheetView *sv);
-		void (*remove)	(WorkbookControl *wbc, Sheet *sheet);
-		void (*focus)   (WorkbookControl *wbc, Sheet *sheet);
-		void (*remove_all) (WorkbookControl *wbc);
-	} sheet;
-	struct {
-		void (*truncate)(WorkbookControl *wbc, int n, gboolean is_undo);
-		void (*pop)	(WorkbookControl *wbc, gboolean is_undo);
-		void (*push)	(WorkbookControl *wbc, gboolean is_undo,
-				 char const *text, gpointer key);
-		void (*labels)	(WorkbookControl *wbc,
-				 char const *undo, char const *redo);
-	} undo_redo;
-	struct {
-		void (*update)      (WorkbookControl *wbc, int flags);
-	} menu_state;
+	WbcSheetManager sheet;
+	WbcUndoRedo undo_redo;
+	WbcMenuState menu_state;
 
 	gboolean (*claim_selection)      (WorkbookControl *wbc);
 	void	 (*paste_from_selection) (WorkbookControl *wbc,
diff --git a/src/workbook.c b/src/workbook.c
index 60ad994..685129c 100644
--- a/src/workbook.c
+++ b/src/workbook.c
@@ -750,6 +750,14 @@ workbook_sheet_index_update (Workbook *wb, int start)
 	}
 }
 
+/**
+ * workbook_sheet_by_index:
+ * @wb: workbook to lookup the sheet on
+ * @i: the sheet index we are looking for.
+ *
+ * Return value: (transfer none): a pointer to a Sheet or NULL if the sheet
+ * was not found.
+ */
 Sheet *
 workbook_sheet_by_index (Workbook const *wb, int i)
 {
@@ -768,9 +776,9 @@ workbook_sheet_by_index (Workbook const *wb, int i)
 /**
  * workbook_sheet_by_name:
  * @wb: workbook to lookup the sheet on
- * @name: the sheet name we are looking for.
+ * @sheet_name: the sheet name we are looking for.
  *
- * Returns a pointer to a Sheet or NULL if the sheet
+ * Return value: (transfer none): a pointer to a Sheet or NULL if the sheet
  * was not found.
  */
 Sheet *
@@ -905,12 +913,16 @@ workbook_sheet_attach (Workbook *wb, Sheet *new_sheet)
 }
 
 /**
- * workbook_sheet_add :
- * @wb :
- * @pos : position to add, -1 meaning append.
+ * workbook_sheet_add:
+ * @wb: a workbook.
+ * @pos: position to add, -1 meaning append.
+ * @columns: the sheet columns number.
+ * @rows: the sheet rows number.
  *
  * Create and name a new sheet, putting it at position @pos.  The sheet
  * returned is not ref'd.  (The ref belongs to the workbook.)
+ *
+ * Return value: (transfer none): the new sheet.
  */
 Sheet *
 workbook_sheet_add (Workbook *wb, int pos, int columns, int rows)
@@ -932,13 +944,17 @@ workbook_sheet_add (Workbook *wb, int pos, int columns, int rows)
 }
 
 /**
- * workbook_sheet_add_with_type :
- * @wb :
- * @pos : position to add, -1 meaning append.
- * @type : sheet type.
+ * workbook_sheet_add_with_typ :
+ * @wb: a workbook.
+ * @sheet_type: the sheet type.
+ * @pos: position to add, -1 meaning append.
+ * @columns: the sheet columns number.
+ * @rows: the sheet rows number.
  *
  * Create and name a new sheet, putting it at position @pos.  The sheet
  * returned is not ref'd.  (The ref belongs to the workbook.)
+ *
+ * Return value: (transfer none): the new sheet.
  */
 Sheet *
 workbook_sheet_add_with_type (Workbook *wb, GnmSheetType sheet_type, int pos, int columns, int rows)
