diff --git a/contrib/passwordcheck/passwordcheck.c b/contrib/passwordcheck/passwordcheck.c
index 78c44b2d05c7b70c6ad4ca0f5c22bdc4b3f8f8c8..8c8c3bb517daffd13fa65fa54023cf3da3a7b636 100644
--- a/contrib/passwordcheck/passwordcheck.c
+++ b/contrib/passwordcheck/passwordcheck.c
@@ -26,10 +26,14 @@
 
 PG_MODULE_MAGIC;
 
+/* Saved hook value in case of unload */
+static check_password_hook_type prev_check_password_hook = NULL;
+
 /* passwords shorter than this will be rejected */
 #define MIN_PWD_LENGTH 8
 
 extern void _PG_init(void);
+extern void _PG_fini(void);
 
 /*
  * check_password
@@ -62,6 +66,11 @@ check_password(const char *username,
 	bool		pwd_has_letter,
 				pwd_has_nonletter;
 
+	if (prev_check_password_hook)
+		prev_check_password_hook(username, password,
+								 password_type, validuntil_time,
+								 validuntil_null);
+
 	switch (password_type)
 	{
 		case PASSWORD_TYPE_MD5:
@@ -143,5 +152,16 @@ void
 _PG_init(void)
 {
 	/* activate password checks when the module is loaded */
+	prev_check_password_hook = check_password_hook;
 	check_password_hook = check_password;
 }
+
+/*
+ * Module unload function
+ */
+void
+_PG_fini(void)
+{
+	/* uninstall hook */
+	check_password_hook = prev_check_password_hook;
+}