diff --git a/.gitignore b/.gitignore
index 8a4f119..20dcfdf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@ install-sh
 .deps
 .libs
 compile
+ChangeLog
diff --git a/AUTHORS b/AUTHORS
index e119bbd..f588512 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1 +1,7 @@
-Daniel Drake <dsd@gentoo.org>
+Copyright (C) 2007 Daniel Drake <dsd@gentoo.org>
+Copyright (C) 2006-2007 Timo Hoenig <thoenig@suse.de>
+Copyright (C) 2006 Pavel Machek <pavel@suse.cz>
+Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+Copyright (C) 2004,2006 Thomas Vander Stichele <thomas at apestaart dot org>
+Copyright (C) 2007 Cyrille Bagard
+Copyright (C) 2007 Vasily Khoruzhick
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
index 941b3ac..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1 +0,0 @@
-The ChangeLog is maintained in the git source control system.
diff --git a/HACKING b/HACKING
index fcd3e19..00ff206 100644
--- a/HACKING
+++ b/HACKING
@@ -1,3 +1,14 @@
+Copyright notices
+=================
+
+If you make a contribution substantial enough to add or update a copyright
+notice on a file, such notice must be mirrored in the AUTHORS file. This is
+to make it easy for people to comply to section 6 of the LGPL, which states
+that a "work that uses the Library" must include copyright notices from
+this library. By providing them all in one place, hopefully we save such
+users some time.
+
+
 USB
 ===
 
diff --git a/Makefile.am b/Makefile.am
index 1921cdc..729a285 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,3 +10,9 @@ pkgconfigdir=$(libdir)/pkgconfig
 pkgconfig_DATA=libfprint.pc
 DISTCLEANFILES=libfprint.pc
 
+.PHONY: ChangeLog
+ChangeLog:
+	git --git-dir $(top_srcdir)/.git log > ChangeLog
+
+dist-hook: ChangeLog
+
diff --git a/README b/README
index 6e4686c..a965892 100644
--- a/README
+++ b/README
@@ -17,9 +17,15 @@ http://www.reactivated.net/fprint/Libfprint
 libfprint is licensed under the GNU LGPL version 2.1. See the COPYING file
 for the license text.
 
+Section 6 of the license states that for compiled works that use this
+library, such works must include libfprint copyright notices alongside the
+copyright notices for the other parts of the work. We have attempted to
+make this process slightly easier for you by grouping these all in one place:
+the AUTHORS file.
+
 libfprint includes code from NIST's NBIS software distribution:
 http://fingerprint.nist.gov/NBIS/index.html
 We include bozorth3 from the US export controlled distribution. We have
 determined that it is fine to ship bozorth3 in an open source project,
-see http://reactivated.net/fprint/US_export_control
+see http://reactivated.net/fprint/wiki/US_export_control
 
diff --git a/THANKS b/THANKS
index 68143f9..76c0817 100644
--- a/THANKS
+++ b/THANKS
@@ -6,4 +6,3 @@ Craig Watson (NIST)
 James Vasile (SFLC)
 Toby Howard (University of Manchester)
 Seemant Kulleen
-Vasily Khoruzhick
diff --git a/libfprint/core.c b/libfprint/core.c
index 928b285..6fc2616 100644
--- a/libfprint/core.c
+++ b/libfprint/core.c
@@ -453,7 +453,8 @@ API_EXPORTED struct fp_dscv_dev **fp_discover_devs(void)
  * Free a list of discovered devices. This function destroys the list and all
  * discovered devices that it included, so make sure you have opened your
  * discovered device <b>before</b> freeing the list.
- * \param devs the list of discovered devices
+ * \param devs the list of discovered devices. If NULL, function simply
+ * returns.
  */
 API_EXPORTED void fp_dscv_devs_free(struct fp_dscv_dev **devs)
 {
@@ -619,10 +620,13 @@ static void do_close(struct fp_dev *dev)
 /** \ingroup dev
  * Close a device. You must call this function when you are finished using
  * a fingerprint device.
- * \param dev the device to close
+ * \param dev the device to close. If NULL, function simply returns.
  */
 API_EXPORTED void fp_dev_close(struct fp_dev *dev)
 {
+	if (!dev)
+		return;
+
 	fp_dbg("");
 
 	if (g_slist_index(opened_devices, (gconstpointer) dev) == -1)
diff --git a/libfprint/data.c b/libfprint/data.c
index 97ed5d0..79d161d 100644
--- a/libfprint/data.c
+++ b/libfprint/data.c
@@ -378,7 +378,7 @@ API_EXPORTED int fp_print_data_from_dscv_print(struct fp_dscv_print *print,
 
 /** \ingroup print_data
  * Frees a stored print. Must be called when you are finished using the print.
- * \param data the stored print to destroy
+ * \param data the stored print to destroy. If NULL, function simply returns.
  */
 API_EXPORTED void fp_print_data_free(struct fp_print_data *data)
 {
@@ -586,7 +586,8 @@ API_EXPORTED struct fp_dscv_print **fp_discover_prints(void)
  * Frees a list of discovered prints. This function also frees the discovered
  * prints themselves, so make sure you do not use any discovered prints
  * after calling this function.
- * \param prints the list of discovered prints
+ * \param prints the list of discovered prints. If NULL, function simply
+ * returns.
  */
 API_EXPORTED void fp_dscv_prints_free(struct fp_dscv_print **prints)
 {