diff --git a/doc/src/sgml/ecpg.sgml b/doc/src/sgml/ecpg.sgml
index 5a8d1f1..0ecde60 100644
--- a/doc/src/sgml/ecpg.sgml
+++ b/doc/src/sgml/ecpg.sgml
@@ -1932,9 +1932,14 @@ EXEC SQL SELECT started, duration INTO :ts1, :iv1 FROM datetbl WHERE d=:date1;
 PGTYPEStimestamp_add_interval(&ts1, &iv1, &tsout);
 out = PGTYPEStimestamp_to_asc(&tsout);
 printf("Started + duration: %s\n", out);
-free(out);
+PGTYPES_free(out);
 ]]>
 </programlisting>
+   Some functions such as <function>PGTYPESnumeric_to_asc</function> return
+   a character string. To free those strings, you need to use
+   <function>PGTYPES_free()/<function> instead of <function>free()</function>.
+   This is necessary for Windows, because memory allocation and release must be
+   done with the functions in the same version of library.
   </para>
 
   <sect2 id="ecpg-pgtypes-numeric">
diff --git a/src/interfaces/ecpg/include/pgtypes_date.h b/src/interfaces/ecpg/include/pgtypes_date.h
index caf8a33..68459a0 100644
--- a/src/interfaces/ecpg/include/pgtypes_date.h
+++ b/src/interfaces/ecpg/include/pgtypes_date.h
@@ -24,6 +24,11 @@ extern void PGTYPESdate_today(date *);
 extern int	PGTYPESdate_defmt_asc(date *, const char *, const char *);
 extern int	PGTYPESdate_fmt_asc(date, const char *, char *);
 
+#ifndef PGTYPES_FREE
+#define PGTYPES_FREE
+	extern void PGTYPES_free(void *ptr);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/interfaces/ecpg/include/pgtypes_interval.h b/src/interfaces/ecpg/include/pgtypes_interval.h
index 5747736..5aa0dc6 100644
--- a/src/interfaces/ecpg/include/pgtypes_interval.h
+++ b/src/interfaces/ecpg/include/pgtypes_interval.h
@@ -40,6 +40,11 @@ extern interval * PGTYPESinterval_from_asc(char *, char **);
 extern char *PGTYPESinterval_to_asc(interval *);
 extern int	PGTYPESinterval_copy(interval *, interval *);
 
+#ifndef PGTYPES_FREE
+#define PGTYPES_FREE
+	extern void PGTYPES_free(void *ptr);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/interfaces/ecpg/include/pgtypes_numeric.h b/src/interfaces/ecpg/include/pgtypes_numeric.h
index 56c46ea..ac9387d 100644
--- a/src/interfaces/ecpg/include/pgtypes_numeric.h
+++ b/src/interfaces/ecpg/include/pgtypes_numeric.h
@@ -60,6 +60,11 @@ int			PGTYPESnumeric_to_long(numeric *, long *);
 int			PGTYPESnumeric_to_decimal(numeric *, decimal *);
 int			PGTYPESnumeric_from_decimal(decimal *, numeric *);
 
+#ifndef PGTYPES_FREE
+#define PGTYPES_FREE
+	extern void PGTYPES_free(void *ptr);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/interfaces/ecpg/include/pgtypes_timestamp.h b/src/interfaces/ecpg/include/pgtypes_timestamp.h
index 1545be4..73486f6 100644
--- a/src/interfaces/ecpg/include/pgtypes_timestamp.h
+++ b/src/interfaces/ecpg/include/pgtypes_timestamp.h
@@ -23,6 +23,11 @@ extern int	PGTYPEStimestamp_defmt_asc(const char *, const char *, timestamp *);
 extern int	PGTYPEStimestamp_add_interval(timestamp * tin, interval * span, timestamp * tout);
 extern int	PGTYPEStimestamp_sub_interval(timestamp * tin, interval * span, timestamp * tout);
 
+#ifndef PGTYPES_FREE
+#define PGTYPES_FREE
+	extern void PGTYPES_free(void *ptr);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/interfaces/ecpg/pgtypeslib/common.c b/src/interfaces/ecpg/pgtypeslib/common.c
index ae29b6c..8c07c0c 100644
--- a/src/interfaces/ecpg/pgtypeslib/common.c
+++ b/src/interfaces/ecpg/pgtypeslib/common.c
@@ -138,3 +138,10 @@ pgtypes_fmt_replace(union un_fmt_comb replace_val, int replace_type, char **outp
 	}
 	return 0;
 }
+
+/* Just frees memory (mostly needed for Windows) */
+void
+PGTYPES_free(void *ptr)
+{
+	free(ptr);
+}
diff --git a/src/interfaces/ecpg/pgtypeslib/exports.txt b/src/interfaces/ecpg/pgtypeslib/exports.txt
index 70ef01a..0cdddfb 100644
--- a/src/interfaces/ecpg/pgtypeslib/exports.txt
+++ b/src/interfaces/ecpg/pgtypeslib/exports.txt
@@ -45,3 +45,4 @@ PGTYPEStimestamp_from_asc       42
 PGTYPEStimestamp_sub            43
 PGTYPEStimestamp_sub_interval   44
 PGTYPEStimestamp_to_asc         45
+PGTYPES_free                    46
diff --git a/src/interfaces/ecpg/pgtypeslib/extern.h b/src/interfaces/ecpg/pgtypeslib/extern.h
index 9df800e..072563e 100644
--- a/src/interfaces/ecpg/pgtypeslib/extern.h
+++ b/src/interfaces/ecpg/pgtypeslib/extern.h
@@ -37,6 +37,7 @@ int			pgtypes_fmt_replace(union un_fmt_comb, int, char **, int *);
 
 char	   *pgtypes_alloc(long);
 char	   *pgtypes_strdup(const char *);
+void PGTYPES_free(void *ptr);
 
 #ifndef bool
 #define bool char
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c
index 3f90022..a756675 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c
@@ -113,18 +113,18 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 
 	text = PGTYPESdate_to_asc(date1);
 	printf ("Date: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf ("timestamp: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	iv1 = PGTYPESinterval_from_asc("13556 days 12 hours 34 minutes 14 seconds ", NULL);
 	PGTYPESinterval_copy(iv1, &iv2);
 	text = PGTYPESinterval_to_asc(&iv2);
 	printf ("interval: %s\n", text);
 	PGTYPESinterval_free(iv1);
-	free(text);
+	PGTYPES_free(text);
 
 	PGTYPESdate_mdyjul(mdy, &date2);
 	printf("m: %d, d: %d, y: %d\n", mdy[0], mdy[1], mdy[2]);
@@ -144,7 +144,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_fmt_asc(date1, fmt, out);
 	printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1));
 	printf("Above date in format \"%s\" is \"%s\"\n", fmt, out);
-	free(text);
+	PGTYPES_free(text);
 	free(out);
 
 	out = (char*) malloc(48);
@@ -164,7 +164,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc1: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mmmm. dd. yyyy";
@@ -172,7 +172,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc2: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "yy/mm/dd";
@@ -180,7 +180,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc3: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "yy/mm/dd";
@@ -188,7 +188,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc4: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "dd-mm-yy";
@@ -196,7 +196,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc5: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mmddyy";
@@ -204,7 +204,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc6: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mmm. dd. yyyy";
@@ -212,7 +212,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc7: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mmm. dd. yyyy";
@@ -220,7 +220,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc8: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mm yy   dd.";
@@ -228,7 +228,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc9: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "yyyy fierj mm   dd.";
@@ -236,7 +236,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc10: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mm/dd/yy";
@@ -244,28 +244,28 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc12: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	PGTYPEStimestamp_current(&ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	/* can't output this in regression mode */
 	/* printf("timestamp_current: Now: %s\n", text); */
-	free(text);
+	PGTYPES_free(text);
 
 	ts1 = PGTYPEStimestamp_from_asc("96-02-29", NULL);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_to_asc1: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	ts1 = PGTYPEStimestamp_from_asc("1994-02-11 3:10:35", NULL);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_to_asc2: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	ts1 = PGTYPEStimestamp_from_asc("1994-02-11 26:10:35", NULL);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_to_asc3: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 /*	abc-03:10:35-def-02/11/94-gh  */
 /*      12345678901234567890123456789 */
@@ -280,161 +280,161 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %d %H:%M:%S %z %Y";
 	in =  "Tue Jul 22 17:28:44 +0200 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %d %H:%M:%S %z %Y";
 	in =  "Tue Feb 29 17:28:44 +0200 2000";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %d %H:%M:%S %z %Y";
 	in =  "Tue Feb 29 17:28:44 +0200 1900";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %d %H:%M:%S %z %Y";
 	in =  "Tue Feb 29 17:28:44 +0200 1996";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%b %d %H:%M:%S %z %Y";
 	in =  "      Jul 31 17:28:44 +0200 1996";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%b %d %H:%M:%S %z %Y";
 	in =  "      Jul 32 17:28:44 +0200 1996";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %d %H:%M:%S %z %Y";
 	in =  "Tue Feb 29 17:28:44 +0200 1997";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%";
 	in =  "Tue Jul 22 17:28:44 +0200 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "a %";
 	in =  "Tue Jul 22 17:28:44 +0200 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%b, %d %H_%M`%S %z %Y";
 	in =  "    Jul, 22 17_28 `44 +0200  2003  ";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %%%d %H:%M:%S %Z %Y";
 	in =  "Tue Jul %22 17:28:44 CEST 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %%%d %H:%M:%S %Z %Y";
 	in =  "Tue Jul %22 17:28:44 CEST 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "abc%n %C %B %%%d %H:%M:%S %Z %Y";
 	in =  "abc\n   19 October %22 17:28:44 CEST 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "abc%n %C %B %%%d %H:%M:%S %Z %y";
 	in =  "abc\n   18 October %34 17:28:44 CEST 80";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "";
 	in =  "abc\n   18 October %34 17:28:44 CEST 80";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = NULL;
 	in =  "1980-04-12 3:49:44      ";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, NULL) = %s, error: %d\n", in, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%B %d, %Y. Time: %I:%M%p";
 	in =  "July 14, 1988. Time: 9:15am";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	in = "September 6 at 01:30 pm in the year 1983";
 	fmt = "%B %d at %I:%M %p in the year %Y";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	in = "  1976, July 14. Time: 9:15am";
 	fmt = "%Y,   %B %d. Time: %I:%M %p";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	in = "  1976, July 14. Time: 9:15 am";
 	fmt = "%Y,   %B %d. Time: %I:%M%p";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	in = "  1976, P.M. July 14. Time: 9:15";
 	fmt = "%Y, %P  %B %d. Time: %I:%M";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	in = "1234567890";
 	fmt = "%s";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	{ ECPGtrans(__LINE__, NULL, "rollback");
 #line 365 "dt_test.pgc"
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c
index 4024980..cd34d5f 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c
@@ -110,14 +110,14 @@ main(void)
 	text = PGTYPEStimestamp_to_asc(ts1);
 
 	printf("timestamp: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = PGTYPESdate_from_timestamp(ts1);
 	dc = PGTYPESdate_new();
 	*dc = date1;
 	text = PGTYPESdate_to_asc(*dc);
 	printf("Date of timestamp: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 	PGTYPESdate_free(dc);
 
 	for (i = 0; dates[i]; i++)
@@ -132,7 +132,7 @@ main(void)
 					i, err ? "-" : text,
 					endptr ? 'N' : 'Y',
 					err ? 'T' : 'F');
-		free(text);
+		PGTYPES_free(text);
 		if (!err)
 		{
 			for (j = 0; times[j]; j++)
@@ -147,7 +147,7 @@ main(void)
 				text = PGTYPEStimestamp_to_asc(ts1);
 				printf("TS[%d,%d]: %s\n",
 				       i, j, errno ? "-" : text);
-				free(text);
+				PGTYPES_free(text);
 				free(t);
 			}
 		}
@@ -171,13 +171,13 @@ main(void)
 			continue;
 		text = PGTYPESinterval_to_asc(i1);
 		printf("interval[%d]: %s\n", i, text ? text : "-");
-		free(text);
+		PGTYPES_free(text);
 
 		ic = PGTYPESinterval_new();
 		PGTYPESinterval_copy(i1, ic);
 		text = PGTYPESinterval_to_asc(i1);
 		printf("interval_copy[%d]: %s\n", i, text ? text : "-");
-		free(text);
+		PGTYPES_free(text);
 		PGTYPESinterval_free(ic);
 		PGTYPESinterval_free(i1);
 	}
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-num_test.c b/src/interfaces/ecpg/test/expected/pgtypeslib-num_test.c
index 47c3202..0ae53de 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-num_test.c
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-num_test.c
@@ -78,7 +78,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESnumeric_from_int(1407, value1);
 	text = PGTYPESnumeric_to_asc(value1, -1);
 	printf("from int = %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 	PGTYPESnumeric_free(value1);
 
 	value1 = PGTYPESnumeric_from_asc("2369.7", NULL);
@@ -87,12 +87,12 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESnumeric_add(value1, value2, res);
 	text = PGTYPESnumeric_to_asc(res, -1);
 	printf("add = %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	PGTYPESnumeric_sub(res, value2, res);
 	text = PGTYPESnumeric_to_asc(res, -1);
 	printf("sub = %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 	PGTYPESnumeric_free(value2);
 
 	des = PGTYPESnumeric_new();
@@ -122,7 +122,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	PGTYPESnumeric_mul(res, des, res);
 	text = PGTYPESnumeric_to_asc(res, -1);
 	printf("mul = %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 	PGTYPESnumeric_free(des);
 
 	value2 = PGTYPESnumeric_from_asc("10000", NULL);
@@ -139,7 +139,7 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
 	i = PGTYPESnumeric_to_long(value1, &l1) | PGTYPESnumeric_to_long(value2, &l2);
 	printf("to long(%d) = %ld %ld\n", i, l1, l2);
 
-	free(text);
+	PGTYPES_free(text);
 	PGTYPESnumeric_free(value1);
 	PGTYPESnumeric_free(value2);
 	PGTYPESnumeric_free(res);
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-num_test2.c b/src/interfaces/ecpg/test/expected/pgtypeslib-num_test2.c
index d31834e..069aa57 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-num_test2.c
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-num_test2.c
@@ -77,21 +77,21 @@ main(void)
 
 		text = PGTYPESnumeric_to_asc(num, -1);
 		if (!text) check_errno();
-		printf("num[%d,1]: %s\n", i, text); free(text);
+		printf("num[%d,1]: %s\n", i, text); PGTYPES_free(text);
 		text = PGTYPESnumeric_to_asc(num, 0);
 		if (!text) check_errno();
-		printf("num[%d,2]: %s\n", i, text); free(text);
+		printf("num[%d,2]: %s\n", i, text); PGTYPES_free(text);
 		text = PGTYPESnumeric_to_asc(num, 1);
 		if (!text) check_errno();
-		printf("num[%d,3]: %s\n", i, text); free(text);
+		printf("num[%d,3]: %s\n", i, text); PGTYPES_free(text);
 		text = PGTYPESnumeric_to_asc(num, 2);
 		if (!text) check_errno();
-		printf("num[%d,4]: %s\n", i, text); free(text);
+		printf("num[%d,4]: %s\n", i, text); PGTYPES_free(text);
 
 		nin = PGTYPESnumeric_new();
 		text = PGTYPESnumeric_to_asc(nin, 2);
 		if (!text) check_errno();
-		printf("num[%d,5]: %s\n", i, text); free(text);
+		printf("num[%d,5]: %s\n", i, text); PGTYPES_free(text);
 
 		r = PGTYPESnumeric_to_long(num, &l);
 		if (r) check_errno();
@@ -103,7 +103,7 @@ main(void)
 			text = PGTYPESnumeric_to_asc(nin, 2);
 			q = PGTYPESnumeric_cmp(num, nin);
 			printf("num[%d,7]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-			free(text);
+			PGTYPES_free(text);
 		}
 
 		r = PGTYPESnumeric_to_int(num, &k);
@@ -116,7 +116,7 @@ main(void)
 			text = PGTYPESnumeric_to_asc(nin, 2);
 			q = PGTYPESnumeric_cmp(num, nin);
 			printf("num[%d,9]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-			free(text);
+			PGTYPES_free(text);
 		}
 
 		if (i != 6)
@@ -147,7 +147,7 @@ main(void)
 			text = PGTYPESnumeric_to_asc(nin, 2);
 			q = PGTYPESnumeric_cmp(num, nin);
 			printf("num[%d,12]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-			free(text);
+			PGTYPES_free(text);
 		}
 
 		PGTYPESdecimal_free(dec);
@@ -173,7 +173,7 @@ main(void)
 			{
 				text = PGTYPESnumeric_to_asc(a, 10);
 				printf("num[a,%d,%d]: %s\n", i, j, text);
-				free(text);
+				PGTYPES_free(text);
 			}
 			r = PGTYPESnumeric_sub(numarr[i], numarr[j], s);
 			if (r)
@@ -185,7 +185,7 @@ main(void)
 			{
 				text = PGTYPESnumeric_to_asc(s, 10);
 				printf("num[s,%d,%d]: %s\n", i, j, text);
-				free(text);
+				PGTYPES_free(text);
 			}
 			r = PGTYPESnumeric_mul(numarr[i], numarr[j], m);
 			if (r)
@@ -197,7 +197,7 @@ main(void)
 			{
 				text = PGTYPESnumeric_to_asc(m, 10);
 				printf("num[m,%d,%d]: %s\n", i, j, text);
-				free(text);
+				PGTYPES_free(text);
 			}
 			r = PGTYPESnumeric_div(numarr[i], numarr[j], d);
 			if (r)
@@ -209,7 +209,7 @@ main(void)
 			{
 				text = PGTYPESnumeric_to_asc(d, 10);
 				printf("num[d,%d,%d]: %s\n", i, j, text);
-				free(text);
+				PGTYPES_free(text);
 			}
 
 			PGTYPESnumeric_free(a);
@@ -223,7 +223,7 @@ main(void)
 	{
 		text = PGTYPESnumeric_to_asc(numarr[i], -1);
 		printf("%d: %s\n", i, text);
-		free(text);
+		PGTYPES_free(text);
 		PGTYPESnumeric_free(numarr[i]);
 	}
 	free(numarr);
diff --git a/src/interfaces/ecpg/test/expected/preproc-outofscope.c b/src/interfaces/ecpg/test/expected/preproc-outofscope.c
index f4676a0..78d357d 100644
--- a/src/interfaces/ecpg/test/expected/preproc-outofscope.c
+++ b/src/interfaces/ecpg/test/expected/preproc-outofscope.c
@@ -87,6 +87,11 @@ int			PGTYPESnumeric_to_long(numeric *, long *);
 int			PGTYPESnumeric_to_decimal(numeric *, decimal *);
 int			PGTYPESnumeric_from_decimal(decimal *, numeric *);
 
+#ifndef PGTYPES_FREE
+#define PGTYPES_FREE
+	extern void PGTYPES_free(void *ptr);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/interfaces/ecpg/test/expected/sql-sqlda.c b/src/interfaces/ecpg/test/expected/sql-sqlda.c
index ffaf52c..0555c27 100644
--- a/src/interfaces/ecpg/test/expected/sql-sqlda.c
+++ b/src/interfaces/ecpg/test/expected/sql-sqlda.c
@@ -109,6 +109,11 @@ int			PGTYPESnumeric_to_long(numeric *, long *);
 int			PGTYPESnumeric_to_decimal(numeric *, decimal *);
 int			PGTYPESnumeric_from_decimal(decimal *, numeric *);
 
+#ifndef PGTYPES_FREE
+#define PGTYPES_FREE
+	extern void PGTYPES_free(void *ptr);
+#endif
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc b/src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc
index 1cc156c..fdd6614 100644
--- a/src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc
+++ b/src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc
@@ -39,18 +39,18 @@ main(void)
 
 	text = PGTYPESdate_to_asc(date1);
 	printf ("Date: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf ("timestamp: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	iv1 = PGTYPESinterval_from_asc("13556 days 12 hours 34 minutes 14 seconds ", NULL);
 	PGTYPESinterval_copy(iv1, &iv2);
 	text = PGTYPESinterval_to_asc(&iv2);
 	printf ("interval: %s\n", text);
 	PGTYPESinterval_free(iv1);
-	free(text);
+	PGTYPES_free(text);
 
 	PGTYPESdate_mdyjul(mdy, &date2);
 	printf("m: %d, d: %d, y: %d\n", mdy[0], mdy[1], mdy[2]);
@@ -70,7 +70,7 @@ main(void)
 	PGTYPESdate_fmt_asc(date1, fmt, out);
 	printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1));
 	printf("Above date in format \"%s\" is \"%s\"\n", fmt, out);
-	free(text);
+	PGTYPES_free(text);
 	free(out);
 
 	out = (char*) malloc(48);
@@ -90,7 +90,7 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc1: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mmmm. dd. yyyy";
@@ -98,7 +98,7 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc2: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "yy/mm/dd";
@@ -106,7 +106,7 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc3: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "yy/mm/dd";
@@ -114,7 +114,7 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc4: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "dd-mm-yy";
@@ -122,7 +122,7 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc5: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mmddyy";
@@ -130,7 +130,7 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc6: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mmm. dd. yyyy";
@@ -138,7 +138,7 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc7: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mmm. dd. yyyy";
@@ -146,7 +146,7 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc8: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mm yy   dd.";
@@ -154,7 +154,7 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc9: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "yyyy fierj mm   dd.";
@@ -162,7 +162,7 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc10: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = 0;
 	fmt = "mm/dd/yy";
@@ -170,28 +170,28 @@ main(void)
 	PGTYPESdate_defmt_asc(&date1, fmt, in);
 	text = PGTYPESdate_to_asc(date1);
 	printf("date_defmt_asc12: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	PGTYPEStimestamp_current(&ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	/* can't output this in regression mode */
 	/* printf("timestamp_current: Now: %s\n", text); */
-	free(text);
+	PGTYPES_free(text);
 
 	ts1 = PGTYPEStimestamp_from_asc("96-02-29", NULL);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_to_asc1: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	ts1 = PGTYPEStimestamp_from_asc("1994-02-11 3:10:35", NULL);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_to_asc2: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	ts1 = PGTYPEStimestamp_from_asc("1994-02-11 26:10:35", NULL);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_to_asc3: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 /*	abc-03:10:35-def-02/11/94-gh  */
 /*      12345678901234567890123456789 */
@@ -206,161 +206,161 @@ main(void)
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %d %H:%M:%S %z %Y";
 	in =  "Tue Jul 22 17:28:44 +0200 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %d %H:%M:%S %z %Y";
 	in =  "Tue Feb 29 17:28:44 +0200 2000";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %d %H:%M:%S %z %Y";
 	in =  "Tue Feb 29 17:28:44 +0200 1900";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %d %H:%M:%S %z %Y";
 	in =  "Tue Feb 29 17:28:44 +0200 1996";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%b %d %H:%M:%S %z %Y";
 	in =  "      Jul 31 17:28:44 +0200 1996";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%b %d %H:%M:%S %z %Y";
 	in =  "      Jul 32 17:28:44 +0200 1996";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %d %H:%M:%S %z %Y";
 	in =  "Tue Feb 29 17:28:44 +0200 1997";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%";
 	in =  "Tue Jul 22 17:28:44 +0200 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "a %";
 	in =  "Tue Jul 22 17:28:44 +0200 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%b, %d %H_%M`%S %z %Y";
 	in =  "    Jul, 22 17_28 `44 +0200  2003  ";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %%%d %H:%M:%S %Z %Y";
 	in =  "Tue Jul %22 17:28:44 CEST 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%a %b %%%d %H:%M:%S %Z %Y";
 	in =  "Tue Jul %22 17:28:44 CEST 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "abc%n %C %B %%%d %H:%M:%S %Z %Y";
 	in =  "abc\n   19 October %22 17:28:44 CEST 2003";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "abc%n %C %B %%%d %H:%M:%S %Z %y";
 	in =  "abc\n   18 October %34 17:28:44 CEST 80";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "";
 	in =  "abc\n   18 October %34 17:28:44 CEST 80";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error (should be error!): %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = NULL;
 	in =  "1980-04-12 3:49:44      ";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, NULL) = %s, error: %d\n", in, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	fmt = "%B %d, %Y. Time: %I:%M%p";
 	in =  "July 14, 1988. Time: 9:15am";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	in = "September 6 at 01:30 pm in the year 1983";
 	fmt = "%B %d at %I:%M %p in the year %Y";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	in = "  1976, July 14. Time: 9:15am";
 	fmt = "%Y,   %B %d. Time: %I:%M %p";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	in = "  1976, July 14. Time: 9:15 am";
 	fmt = "%Y,   %B %d. Time: %I:%M%p";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	in = "  1976, P.M. July 14. Time: 9:15";
 	fmt = "%Y, %P  %B %d. Time: %I:%M";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	in = "1234567890";
 	fmt = "%s";
 	i = PGTYPEStimestamp_defmt_asc(in, fmt, &ts1);
 	text = PGTYPEStimestamp_to_asc(ts1);
 	printf("timestamp_defmt_asc(%s, %s) = %s, error: %d\n", in, fmt, text, i);
-	free(text);
+	PGTYPES_free(text);
 
 	exec sql rollback;
         exec sql disconnect;
diff --git a/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc b/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc
index 9e1f432..dfeceab 100644
--- a/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc
+++ b/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc
@@ -75,14 +75,14 @@ main(void)
 	text = PGTYPEStimestamp_to_asc(ts1);
 
 	printf("timestamp: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	date1 = PGTYPESdate_from_timestamp(ts1);
 	dc = PGTYPESdate_new();
 	*dc = date1;
 	text = PGTYPESdate_to_asc(*dc);
 	printf("Date of timestamp: %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 	PGTYPESdate_free(dc);
 
 	for (i = 0; dates[i]; i++)
@@ -97,7 +97,7 @@ main(void)
 					i, err ? "-" : text,
 					endptr ? 'N' : 'Y',
 					err ? 'T' : 'F');
-		free(text);
+		PGTYPES_free(text);
 		if (!err)
 		{
 			for (j = 0; times[j]; j++)
@@ -112,7 +112,7 @@ main(void)
 				text = PGTYPEStimestamp_to_asc(ts1);
 				printf("TS[%d,%d]: %s\n",
 				       i, j, errno ? "-" : text);
-				free(text);
+				PGTYPES_free(text);
 				free(t);
 			}
 		}
@@ -136,13 +136,13 @@ main(void)
 			continue;
 		text = PGTYPESinterval_to_asc(i1);
 		printf("interval[%d]: %s\n", i, text ? text : "-");
-		free(text);
+		PGTYPES_free(text);
 
 		ic = PGTYPESinterval_new();
 		PGTYPESinterval_copy(i1, ic);
 		text = PGTYPESinterval_to_asc(i1);
 		printf("interval_copy[%d]: %s\n", i, text ? text : "-");
-		free(text);
+		PGTYPES_free(text);
 		PGTYPESinterval_free(ic);
 		PGTYPESinterval_free(i1);
 	}
diff --git a/src/interfaces/ecpg/test/pgtypeslib/num_test.pgc b/src/interfaces/ecpg/test/pgtypeslib/num_test.pgc
index d276f70..d06dddc 100644
--- a/src/interfaces/ecpg/test/pgtypeslib/num_test.pgc
+++ b/src/interfaces/ecpg/test/pgtypeslib/num_test.pgc
@@ -38,7 +38,7 @@ main(void)
 	PGTYPESnumeric_from_int(1407, value1);
 	text = PGTYPESnumeric_to_asc(value1, -1);
 	printf("from int = %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 	PGTYPESnumeric_free(value1);
 
 	value1 = PGTYPESnumeric_from_asc("2369.7", NULL);
@@ -47,12 +47,12 @@ main(void)
 	PGTYPESnumeric_add(value1, value2, res);
 	text = PGTYPESnumeric_to_asc(res, -1);
 	printf("add = %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 
 	PGTYPESnumeric_sub(res, value2, res);
 	text = PGTYPESnumeric_to_asc(res, -1);
 	printf("sub = %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 	PGTYPESnumeric_free(value2);
 
 	des = PGTYPESnumeric_new();
@@ -68,7 +68,7 @@ main(void)
 	PGTYPESnumeric_mul(res, des, res);
 	text = PGTYPESnumeric_to_asc(res, -1);
 	printf("mul = %s\n", text);
-	free(text);
+	PGTYPES_free(text);
 	PGTYPESnumeric_free(des);
 
 	value2 = PGTYPESnumeric_from_asc("10000", NULL);
@@ -85,7 +85,7 @@ main(void)
 	i = PGTYPESnumeric_to_long(value1, &l1) | PGTYPESnumeric_to_long(value2, &l2);
 	printf("to long(%d) = %ld %ld\n", i, l1, l2);
 
-	free(text);
+	PGTYPES_free(text);
 	PGTYPESnumeric_free(value1);
 	PGTYPESnumeric_free(value2);
 	PGTYPESnumeric_free(res);
diff --git a/src/interfaces/ecpg/test/pgtypeslib/num_test2.pgc b/src/interfaces/ecpg/test/pgtypeslib/num_test2.pgc
index 16ca6a4..58ecca9 100644
--- a/src/interfaces/ecpg/test/pgtypeslib/num_test2.pgc
+++ b/src/interfaces/ecpg/test/pgtypeslib/num_test2.pgc
@@ -59,21 +59,21 @@ main(void)
 
 		text = PGTYPESnumeric_to_asc(num, -1);
 		if (!text) check_errno();
-		printf("num[%d,1]: %s\n", i, text); free(text);
+		printf("num[%d,1]: %s\n", i, text); PGTYPES_free(text);
 		text = PGTYPESnumeric_to_asc(num, 0);
 		if (!text) check_errno();
-		printf("num[%d,2]: %s\n", i, text); free(text);
+		printf("num[%d,2]: %s\n", i, text); PGTYPES_free(text);
 		text = PGTYPESnumeric_to_asc(num, 1);
 		if (!text) check_errno();
-		printf("num[%d,3]: %s\n", i, text); free(text);
+		printf("num[%d,3]: %s\n", i, text); PGTYPES_free(text);
 		text = PGTYPESnumeric_to_asc(num, 2);
 		if (!text) check_errno();
-		printf("num[%d,4]: %s\n", i, text); free(text);
+		printf("num[%d,4]: %s\n", i, text); PGTYPES_free(text);
 
 		nin = PGTYPESnumeric_new();
 		text = PGTYPESnumeric_to_asc(nin, 2);
 		if (!text) check_errno();
-		printf("num[%d,5]: %s\n", i, text); free(text);
+		printf("num[%d,5]: %s\n", i, text); PGTYPES_free(text);
 
 		r = PGTYPESnumeric_to_long(num, &l);
 		if (r) check_errno();
@@ -85,7 +85,7 @@ main(void)
 			text = PGTYPESnumeric_to_asc(nin, 2);
 			q = PGTYPESnumeric_cmp(num, nin);
 			printf("num[%d,7]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-			free(text);
+			PGTYPES_free(text);
 		}
 
 		r = PGTYPESnumeric_to_int(num, &k);
@@ -98,7 +98,7 @@ main(void)
 			text = PGTYPESnumeric_to_asc(nin, 2);
 			q = PGTYPESnumeric_cmp(num, nin);
 			printf("num[%d,9]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-			free(text);
+			PGTYPES_free(text);
 		}
 
 		if (i != 6)
@@ -129,7 +129,7 @@ main(void)
 			text = PGTYPESnumeric_to_asc(nin, 2);
 			q = PGTYPESnumeric_cmp(num, nin);
 			printf("num[%d,12]: %s (r: %d - cmp: %d)\n", i, text, r, q);
-			free(text);
+			PGTYPES_free(text);
 		}
 
 		PGTYPESdecimal_free(dec);
@@ -155,7 +155,7 @@ main(void)
 			{
 				text = PGTYPESnumeric_to_asc(a, 10);
 				printf("num[a,%d,%d]: %s\n", i, j, text);
-				free(text);
+				PGTYPES_free(text);
 			}
 			r = PGTYPESnumeric_sub(numarr[i], numarr[j], s);
 			if (r)
@@ -167,7 +167,7 @@ main(void)
 			{
 				text = PGTYPESnumeric_to_asc(s, 10);
 				printf("num[s,%d,%d]: %s\n", i, j, text);
-				free(text);
+				PGTYPES_free(text);
 			}
 			r = PGTYPESnumeric_mul(numarr[i], numarr[j], m);
 			if (r)
@@ -179,7 +179,7 @@ main(void)
 			{
 				text = PGTYPESnumeric_to_asc(m, 10);
 				printf("num[m,%d,%d]: %s\n", i, j, text);
-				free(text);
+				PGTYPES_free(text);
 			}
 			r = PGTYPESnumeric_div(numarr[i], numarr[j], d);
 			if (r)
@@ -191,7 +191,7 @@ main(void)
 			{
 				text = PGTYPESnumeric_to_asc(d, 10);
 				printf("num[d,%d,%d]: %s\n", i, j, text);
-				free(text);
+				PGTYPES_free(text);
 			}
 
 			PGTYPESnumeric_free(a);
@@ -205,7 +205,7 @@ main(void)
 	{
 		text = PGTYPESnumeric_to_asc(numarr[i], -1);
 		printf("%d: %s\n", i, text);
-		free(text);
+		PGTYPES_free(text);
 		PGTYPESnumeric_free(numarr[i]);
 	}
 	free(numarr);
