diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml
index 43ec1a9bf6a34b4f47f26d71f6826b94a770a0b5..40d4f1fee9f9fdc5862cc7b1adf883663068d68e 100644
--- a/doc/src/sgml/libpq.sgml
+++ b/doc/src/sgml/libpq.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.115 2003/03/24 18:33:52 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/libpq.sgml,v 1.116 2003/03/25 02:44:36 momjian Exp $
 -->
 
  <chapter id="libpq">
@@ -1049,8 +1049,7 @@ characters that are otherwise interpreted specially by the SQL parser.
 <function>PQescapeString</> performs this operation.
 </para>
 <para>
-The
-parameter <parameter>from</> points to the first character of the string that
+The parameter <parameter>from</> points to the first character of the string that
 is to be escaped, and the <parameter>length</> parameter counts the
 number of characters in this string.  (A terminating zero byte is
 neither necessary nor counted.)  <parameter>to</> shall point to a
@@ -1117,7 +1116,9 @@ unsigned char *PQescapeBytea(const unsigned char *from,
 
   <para>
    <function>PQescapeBytea</> returns an escaped version of the
-   <parameter>from</parameter> parameter binary string in memory allocated with <function>malloc()</>.
+   <parameter>from</parameter> parameter binary string in memory
+   allocated with <function>malloc()</>, and must be freed using
+   <function>PQfreemem()</>.
    The return string has all special characters replaced
    so that they can be properly processed by the PostgreSQL string literal
    parser, and the <type>bytea</type> input function. A terminating zero
@@ -1143,8 +1144,11 @@ unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length);
    such as might be returned by <function>PQgetvalue</function> when applied to a
    <type>bytea</type> column. <function>PQunescapeBytea</function> converts
    this string representation into its binary representation.
-   It returns a pointer to a buffer allocated with <function>malloc()</function>, or null on error, and puts the size
-   of the buffer in <parameter>to_length</parameter>.
+   It returns a pointer to a buffer allocated with
+   <function>malloc()</function>, or null on error, and puts the size of
+   the buffer in <parameter>to_length</parameter>. The memory must be
+   freed using <function>PQfreemem()</>.
+
   </para>
   </listitem>
   </varlistentry>
@@ -1161,7 +1165,9 @@ void PQfreemem(void *ptr);
 
 <para>
    Frees memory allocated by <application>libpq</>, particularly
-   <function>PQescapeBytea</function> and <function>PQunescapeBytea</function>.
+   <function>PQescapeBytea</function>,
+   <function>PQunescapeBytea</function>,
+   and <function>PQnotifies</function>.
    It is needed by Win32, which can not free memory across
    DLL's, unless multithreaded DLL's (/MD in VC6) are used.
   </para>
@@ -1926,7 +1932,7 @@ typedef struct pgNotify {
 } PGnotify;
 </synopsis>
 After processing a <structname>PGnotify</structname> object returned by <function>PQnotifies</function>,
-be sure to free it with <function>free()</function> to avoid a memory leak.
+be sure to free it with <function>PQfreemem()</function>.
 </para>
 
 <note>
@@ -2867,7 +2873,7 @@ main()
             fprintf(stderr,
                  "ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
                     notify-&gt;relname, notify-&gt;be_pid);
-            free(notify);
+            PQfreemem(notify);
         }
     }
 
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index 9f493a4d1300e9fca709333e93617a0012013b5f..ba6e2954481c73e50b638b61b65ed3fff1b1f0ae 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -3,7 +3,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.61 2003/03/20 15:39:52 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.62 2003/03/25 02:44:36 momjian Exp $
  */
 #include "postgres_fe.h"
 #include "common.h"
@@ -441,7 +441,7 @@ PrintNotifications(void)
 	{
 		fprintf(pset.queryFout, gettext("Asynchronous NOTIFY '%s' from backend with pid %d received.\n"),
 				notify->relname, notify->be_pid);
-		free(notify);
+		PQfreemem(notify);
 		fflush(pset.queryFout);
 	}
 }
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c
index 0fdd925a09c30140d0aec5a64ddcb4beb5713965..24a46edc4150da3661e7244c1dfab8f22ce394b6 100644
--- a/src/interfaces/ecpg/ecpglib/execute.c
+++ b/src/interfaces/ecpg/ecpglib/execute.c
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.4 2003/03/20 15:56:50 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.5 2003/03/25 02:44:36 momjian Exp $ */
 
 /*
  * The aim is to get a simpler inteface to the database routines.
@@ -1197,7 +1197,7 @@ ECPGexecute(struct statement * stmt)
 	{
 		ECPGlog("ECPGexecute line %d: ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
 				stmt->lineno, notify->relname, notify->be_pid);
-		ECPGfree(notify);
+		PQfreemem(notify);
 	}
 
 	return status;
diff --git a/src/interfaces/libpgtcl/pgtclId.c b/src/interfaces/libpgtcl/pgtclId.c
index c1b32866d4137decc4f973b4ec158f63de2296ab..7467b0241223d7e266155d1cd82e560634427b3c 100644
--- a/src/interfaces/libpgtcl/pgtclId.c
+++ b/src/interfaces/libpgtcl/pgtclId.c
@@ -13,7 +13,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.40 2003/02/01 00:22:12 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpgtcl/Attic/pgtclId.c,v 1.41 2003/03/25 02:44:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -554,7 +554,7 @@ Pg_Notify_EventProc(Tcl_Event *evPtr, int flags)
 	if (event->connid == NULL)
 	{
 		if (event->notify)
-			PQfreeNotify(event->notify);
+			PQfreemem(event->notify);
 		return 1;
 	}
 
@@ -634,7 +634,7 @@ Pg_Notify_EventProc(Tcl_Event *evPtr, int flags)
 	Tcl_Release((ClientData) event->connid);
 
 	if (event->notify)
-		PQfreeNotify(event->notify);
+		PQfreemem(event->notify);
 
 	return 1;
 }
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index 5b8a6d3ef04de6478a8ecddbe33469c857106f2d..9e86b3aa6726c0ae1e8bbe2e36bd88d849ae995a 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.127 2003/03/22 03:29:06 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.128 2003/03/25 02:44:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1577,20 +1577,6 @@ PQnotifies(PGconn *conn)
 	return event;
 }
 
-/*
- * PQfreeNotify - free's the memory associated with a PGnotify
- *
- * This function is needed on Windows when using libpq.dll and
- * for example libpgtcl.dll: All memory allocated inside a dll
- * should be freed in the context of the same dll.
- *
- */
-void
-PQfreeNotify(PGnotify *notify)
-{
-	free(notify);
-}
-
 /*
  * PQgetline - gets a newline-terminated string from the backend.
  *
@@ -2470,3 +2456,22 @@ PQsendSome(PGconn *conn)
 {
 	return pqSendSome(conn);
 }
+
+/*
+ * PQfreeNotify - free's the memory associated with a PGnotify
+ *
+ * This function is here only for binary backward compatibility.
+ * New code should use PQfreemem().  A macro will automatically map
+ * calls to PQfreemem.  It should be removed in the future.  bjm 2003-03-24
+ */
+
+#undef PQfreeNotify
+void PQfreeNotify(PGnotify *notify);
+
+void
+PQfreeNotify(PGnotify *notify)
+{
+	PQfreemem(notify);
+}
+
+
diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h
index ce9132deb4bffa499cb356705d86ed610c95501f..d32b6fdeea37f7123ac3f8d1e2b97107bdf86189 100644
--- a/src/interfaces/libpq/libpq-fe.h
+++ b/src/interfaces/libpq/libpq-fe.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: libpq-fe.h,v 1.90 2003/03/22 03:29:06 momjian Exp $
+ * $Id: libpq-fe.h,v 1.91 2003/03/25 02:44:36 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -260,7 +260,8 @@ extern void PQfreemem(void *ptr);
 /* Simple synchronous query */
 extern PGresult *PQexec(PGconn *conn, const char *query);
 extern PGnotify *PQnotifies(PGconn *conn);
-extern void PQfreeNotify(PGnotify *notify);
+/* Exists for backward compatibility.  bjm 2003-03-24 */
+#define PQfreeNotify(ptr) PQfreemem(ptr)
 
 /* Interface for multiple-result or asynchronous queries */
 extern int	PQsendQuery(PGconn *conn, const char *query);
diff --git a/src/interfaces/python/pgmodule.c b/src/interfaces/python/pgmodule.c
index f0194ed0e17b945ca60295a5b22543a7bd02d240..b659c99759e97738ad705e914a51d727a3ad2d0d 100644
--- a/src/interfaces/python/pgmodule.c
+++ b/src/interfaces/python/pgmodule.c
@@ -2066,7 +2066,7 @@ pg_getnotify(pgobject * self, PyObject * args)
 		}
 
 		PyTuple_SET_ITEM(notify_result, 1, temp);
-		free(notify);
+		PQfreemem(notify);
 	}
 	else
 	{
diff --git a/src/test/examples/testlibpq2.c b/src/test/examples/testlibpq2.c
index 059e39102e2ec7b2ffc9d0a1069f686a8850f081..8f5a1ec3abbaabf372c83e104be788a10d8409de 100644
--- a/src/test/examples/testlibpq2.c
+++ b/src/test/examples/testlibpq2.c
@@ -98,7 +98,7 @@ main()
 			fprintf(stderr,
 				 "ASYNC NOTIFY of '%s' from backend pid '%d' received\n",
 					notify->relname, notify->be_pid);
-			free(notify);
+			PQfreemem(notify);
 			break;
 		}
 		PQclear(res);