regen
diff --git a/man/libzip.man b/man/libzip.man
index 9372046..f00a1ab 100644
--- a/man/libzip.man
+++ b/man/libzip.man
@@ -1,4 +1,4 @@
-.TH "LIBZIP" "3" "June 23, 2012" "NiH" "Library Functions Manual"
+.TH "LIBZIP" "3" "August 2, 2014" "NiH" "Library Functions Manual"
 .nh
 .if n .ad l
 .SH "NAME"
@@ -50,9 +50,9 @@
 zip_source_buffer(3)
 zip_source_file(3)
 zip_source_filep(3)
+zip_source_free(3)
 zip_source_function(3)
 zip_source_zip(3)
-zip_source_free(3)
 .SS "rename files"
 zip_rename(3)
 .SS "delete files"
@@ -74,6 +74,7 @@
 .SS "miscellaneous"
 zip_set_archive_comment(3)
 zip_set_archive_flag(3)
+zip_source(3)
 .SH "ERROR HANDLING"
 zip_error_to_str(3)
 zip_strerror(3)
diff --git a/man/zip_add.man b/man/zip_add.man
index 5e49ecf..cac6a39 100644
--- a/man/zip_add.man
+++ b/man/zip_add.man
@@ -11,12 +11,16 @@
 \fB#include <zip.h>\fR
 .sp
 \fIzip_int64_t\fR
-.br
-\fBzip_add\fR(\fIstruct zip *archive\fR,\ \fIconst char *name\fR,\ \fIstruct zip_source *source\fR);
-.sp
+.PD 0
+.HP 4n
+\fBzip_add\fR(\fIstruct\ zip\ *archive\fR, \fIconst\ char\ *name\fR, \fIstruct\ zip_source\ *source\fR);
+.PD
+.PP
 \fIint\fR
-.br
-\fBzip_replace\fR(\fIstruct zip *archive\fR,\ \fIzip_uint64_t index\fR,\ \fIstruct zip_source *source\fR);
+.PD 0
+.HP 4n
+\fBzip_replace\fR(\fIstruct\ zip\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIstruct\ zip_source\ *source\fR);
+.PD
 .SH "DESCRIPTION"
 The function
 \fBzip_add\fR()
diff --git a/man/zip_file_add.man b/man/zip_file_add.man
index 84ddebd..e2107bc 100644
--- a/man/zip_file_add.man
+++ b/man/zip_file_add.man
@@ -1,4 +1,4 @@
-.TH "ZIP_FILE_ADD" "3" "October 6, 2012" "NiH" "Library Functions Manual"
+.TH "ZIP_FILE_ADD" "3" "August 2, 2014" "NiH" "Library Functions Manual"
 .nh
 .if n .ad l
 .SH "NAME"
@@ -11,12 +11,16 @@
 \fB#include <zip.h>\fR
 .sp
 \fIzip_int64_t\fR
-.br
-\fBzip_file_add\fR(\fIstruct zip *archive\fR,\ \fIconst char *name\fR,\ \fIstruct zip_source *source\fR,\ \fIzip_flags_t flags\fR);
-.sp
+.PD 0
+.HP 4n
+\fBzip_file_add\fR(\fIstruct\ zip\ *archive\fR, \fIconst\ char\ *name\fR, \fIstruct\ zip_source\ *source\fR, \fIzip_flags_t\ flags\fR);
+.PD
+.PP
 \fIint\fR
-.br
-\fBzip_file_replace\fR(\fIstruct zip *archive\fR,\ \fIzip_uint64_t index\fR,\ \fIstruct zip_source *source\fR,\ \fIzip_flags_t flags\fR);
+.PD 0
+.HP 4n
+\fBzip_file_replace\fR(\fIstruct\ zip\ *archive\fR, \fIzip_uint64_t\ index\fR, \fIstruct\ zip_source\ *source\fR, \fIzip_flags_t\ flags\fR);
+.PD
 .SH "DESCRIPTION"
 The function
 \fBzip_file_add\fR()
@@ -64,11 +68,8 @@
 .PP
 The data is obtained from the
 \fIsource\fR
-argument.
-See the
-\fBzip_source_*\fR()
-functions cited in
-\fISEE ALSO\fR.
+argument, see
+zip_source(3).
 .PD
 .SH "RETURN VALUES"
 Upon successful completion,
@@ -125,10 +126,7 @@
 Archive was opened in read-only mode.
 .SH "SEE ALSO"
 libzip(3),
-zip_source_file(3),
-zip_source_filep(3),
-zip_source_function(3),
-zip_source_zip(3)
+zip_source(3)
 .SH "AUTHORS"
 Dieter Baron <\fIdillo@nih.at\fR>
 and
diff --git a/man/zip_source.man b/man/zip_source.man
new file mode 100644
index 0000000..c7b7806
--- /dev/null
+++ b/man/zip_source.man
@@ -0,0 +1,47 @@
+.TH "ZIP_SOURCE" "3" "August 2, 2014" "NiH" "Library Functions Manual"
+.nh
+.if n .ad l
+.SH "NAME"
+\fBzip_source\fR
+\- zip data source structure
+.SH "LIBRARY"
+libzip (-lzip)
+.SH "SYNOPSIS"
+\fB#include <zip.h>\fR
+.sp
+\fIstruct zip_source *zs\fR;
+.SH "DESCRIPTION"
+A
+\fIstruct zip_source\fR
+is a data source used by
+libzip(3)
+for adding or replacing file contents for a file in a zip archive.
+It is created by calling one of
+zip_source_buffer(3),
+zip_source_file(3),
+zip_source_filep(3),
+zip_source_free(3),
+zip_source_function(3),
+or
+zip_source_zip(3)
+and passed to
+zip_file_add(3)
+or
+zip_file_replace(3).
+These functions will free the
+\fIstruct zip_source\fR
+when they are done using it, so
+zip_source_free(3)
+only needs to be called when these functions return an error.
+.SH "SEE ALSO"
+libzip(3),
+zip_source_buffer(3),
+zip_source_file(3),
+zip_source_filep(3),
+zip_source_free(3),
+zip_source_function(3),
+zip_source_zip(3)
+.SH "AUTHORS"
+Dieter Baron <\fIdillo@nih.at\fR>
+and
+Thomas Klausner <\fItk@giga.or.at\fR>
diff --git a/man/zip_source_buffer.man b/man/zip_source_buffer.man
index bfa56a1..45d4207 100644
--- a/man/zip_source_buffer.man
+++ b/man/zip_source_buffer.man
@@ -1,4 +1,4 @@
-.TH "ZIP_SOURCE_DATA" "3" "April 27, 2014" "NiH" "Library Functions Manual"
+.TH "ZIP_SOURCE_BUFFER" "3" "August 2, 2014" "NiH" "Library Functions Manual"
 .nh
 .if n .ad l
 .SH "NAME"
@@ -50,11 +50,7 @@
 libzip(3),
 zip_add(3),
 zip_replace(3),
-zip_source_file(3),
-zip_source_filep(3),
-zip_source_free(3),
-zip_source_function(3),
-zip_source_zip(3)
+zip_source(3)
 .SH "AUTHORS"
 Dieter Baron <\fIdillo@nih.at\fR>
 and
diff --git a/man/zip_source_file.man b/man/zip_source_file.man
index 1a69767..21578c7 100644
--- a/man/zip_source_file.man
+++ b/man/zip_source_file.man
@@ -1,4 +1,4 @@
-.TH "ZIP_SOURCE_FILE" "3" "August 1, 2008" "NiH" "Library Functions Manual"
+.TH "ZIP_SOURCE_FILE" "3" "August 2, 2014" "NiH" "Library Functions Manual"
 .nh
 .if n .ad l
 .SH "NAME"
@@ -7,9 +7,11 @@
 .SH "LIBRARY"
 libzip (-lzip)
 .SH "SYNOPSIS"
-\fIstruct\ zip_source\ *\fR
-.br
-\fBzip_source_file\fR(\fIstruct zip *archive\fR,\ \fIconst char *fname\fR,\ \fIzip_uint64_t start\fR,\ \fIzip_int64_t len\fR);
+\fIstruct zip_source *\fR
+.PD 0
+.HP 4n
+\fBzip_source_file\fR(\fIstruct\ zip\ *archive\fR, \fIconst\ char\ *fname\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR);
+.PD
 .SH "DESCRIPTION"
 The function
 \fBzip_source_file\fR()
@@ -59,11 +61,7 @@
 libzip(3),
 zip_add(3),
 zip_replace(3),
-zip_source_buffer(3),
-zip_source_filep(3),
-zip_source_free(3),
-zip_source_function(3),
-zip_source_zip(3)
+zip_source(3)
 .SH "AUTHORS"
 Dieter Baron <\fIdillo@nih.at\fR>
 and
diff --git a/man/zip_source_filep.man b/man/zip_source_filep.man
index 2d693c4..ce7c3d2 100644
--- a/man/zip_source_filep.man
+++ b/man/zip_source_filep.man
@@ -1,4 +1,4 @@
-.TH "ZIP_SOURCE_FILEP" "3" "August 1, 2008" "NiH" "Library Functions Manual"
+.TH "ZIP_SOURCE_FILEP" "3" "August 2, 2014" "NiH" "Library Functions Manual"
 .nh
 .if n .ad l
 .SH "NAME"
@@ -7,9 +7,11 @@
 .SH "LIBRARY"
 libzip (-lzip)
 .SH "SYNOPSIS"
-\fIstruct\ zip_source\ *\fR
-.br
-\fBzip_source_filep\fR(\fIstruct zip *archive\fR,\ \fIFILE *file\fR,\ \fIzip_uint64_t start\fR,\ \fIzip_int64_t len\fR);
+\fIstruct zip_source *\fR
+.PD 0
+.HP 4n
+\fBzip_source_filep\fR(\fIstruct\ zip\ *archive\fR, \fIFILE\ *file\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR);
+.PD
 .SH "DESCRIPTION"
 The function
 \fBzip_source_filep\fR()
@@ -50,11 +52,7 @@
 libzip(3),
 zip_add(3),
 zip_replace(3),
-zip_source_buffer(3),
-zip_source_file(3),
-zip_source_free(3),
-zip_source_function(3),
-zip_source_zip(3)
+zip_source(3)
 .SH "AUTHORS"
 Dieter Baron <\fIdillo@nih.at\fR>
 and
diff --git a/man/zip_source_free.man b/man/zip_source_free.man
index 5fa3c79..d90b654 100644
--- a/man/zip_source_free.man
+++ b/man/zip_source_free.man
@@ -1,4 +1,4 @@
-.TH "ZIP_SOURCE_FREE" "3" "April 23, 2006" "NiH" "Library Functions Manual"
+.TH "ZIP_SOURCE_FREE" "3" "August 2, 2014" "NiH" "Library Functions Manual"
 .nh
 .if n .ad l
 .SH "NAME"
@@ -10,8 +10,10 @@
 \fB#include <zip.h>\fR
 .sp
 \fIvoid\fR
-.br
-\fBzip_source_free\fR(\fIstruct zip_source *source\fR);
+.PD 0
+.HP 4n
+\fBzip_source_free\fR(\fIstruct\ zip_source\ *source\fR);
+.PD
 .SH "DESCRIPTION"
 The function
 \fBzip_source_free\fR()
@@ -33,11 +35,7 @@
 call.
 .SH "SEE ALSO"
 libzip(3),
-zip_source_buffer(3),
-zip_source_file(3),
-zip_source_filep(3),
-zip_source_function(3),
-zip_source_zip(3)
+zip_source(3)
 .SH "AUTHORS"
 Dieter Baron <\fIdillo@nih.at\fR>
 and
diff --git a/man/zip_source_function.man b/man/zip_source_function.man
index bec9a33..e82bbc0 100644
--- a/man/zip_source_function.man
+++ b/man/zip_source_function.man
@@ -1,4 +1,4 @@
-.TH "ZIP_SOURCE_FUNCTION" "3" "September 22, 2013" "NiH" "Library Functions Manual"
+.TH "ZIP_SOURCE_FUNCTION" "3" "August 2, 2014" "NiH" "Library Functions Manual"
 .nh
 .if n .ad l
 .SH "NAME"
@@ -9,9 +9,11 @@
 .SH "SYNOPSIS"
 \fB#include <zip.h>\fR
 .sp
-\fIstruct\ zip_source\ *\fR
-.br
-\fBzip_source_function\fR(\fIstruct zip *archive\fR,\ \fIzip_source_callback fn\fR,\ \fIvoid *userdata\fR);
+\fIstruct zip_source *\fR
+.PD 0
+.HP 4n
+\fBzip_source_function\fR(\fIstruct\ zip\ *archive\fR, \fIzip_source_callback\ fn\fR, \fIvoid\ *userdata\fR);
+.PD
 .SH "DESCRIPTION"
 The function
 \fBzip_source_function\fR()
@@ -133,11 +135,7 @@
 libzip(3),
 zip_add(3),
 zip_replace(3),
-zip_source_buffer(3),
-zip_source_file(3),
-zip_source_filep(3),
-zip_source_free(3),
-zip_source_zip(3),
+zip_source(3),
 zip_stat_init(3)
 .SH "AUTHORS"
 Dieter Baron <\fIdillo@nih.at\fR>
diff --git a/man/zip_source_zip.man b/man/zip_source_zip.man
index 157c07b..ab4ca6c 100644
--- a/man/zip_source_zip.man
+++ b/man/zip_source_zip.man
@@ -1,4 +1,4 @@
-.TH "ZIP_SOURCE_ZIP" "3" "July 22, 2012" "NiH" "Library Functions Manual"
+.TH "ZIP_SOURCE_ZIP" "3" "August 2, 2014" "NiH" "Library Functions Manual"
 .nh
 .if n .ad l
 .SH "NAME"
@@ -9,9 +9,11 @@
 .SH "SYNOPSIS"
 \fB#include <zip.h>\fR
 .sp
-\fIstruct\ zip_source\ *\fR
-.br
-\fBzip_source_zip\fR(\fIstruct zip *archive\fR,\ \fIstruct zip *srcarchive\fR,\ \fIzip_uint64_t srcidx\fR,\ \fIzip_flags_t flags\fR,\ \fIzip_uint64_t start\fR,\ \fIzip_int64_t len\fR);
+\fIstruct zip_source *\fR
+.PD 0
+.HP 4n
+\fBzip_source_zip\fR(\fIstruct\ zip\ *archive\fR, \fIstruct\ zip\ *srcarchive\fR, \fIzip_uint64_t\ srcidx\fR, \fIzip_flags_t\ flags\fR, \fIzip_uint64_t\ start\fR, \fIzip_int64_t\ len\fR);
+.PD
 .SH "DESCRIPTION"
 The function
 \fBzip_source_zip\fR()
@@ -84,11 +86,7 @@
 libzip(3),
 zip_add(3),
 zip_replace(3),
-zip_source_buffer(3),
-zip_source_file(3),
-zip_source_filep(3),
-zip_source_free(3),
-zip_source_function(3)
+zip_source(3)
 .SH "AUTHORS"
 Dieter Baron <\fIdillo@nih.at\fR>
 and