diff --git a/src/interfaces/ecpg/ecpglib/connect.c b/src/interfaces/ecpg/ecpglib/connect.c
index ee5ed4711859d5cab12603dc96cd26ab05517958..99c94a10bbfa68c2a3f031277e571fcb6c4290a7 100644
--- a/src/interfaces/ecpg/ecpglib/connect.c
+++ b/src/interfaces/ecpg/ecpglib/connect.c
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.3 2003/04/08 12:34:25 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/connect.c,v 1.4 2003/05/02 14:43:25 meskes Exp $ */
 
 #include "postgres_fe.h"
 
@@ -11,8 +11,6 @@
 static struct connection *all_connections = NULL,
 		   *actual_connection = NULL;
 
-extern enum COMPAT_MODE ecpg_compat_mode;
-
 struct connection *
 ECPGget_connection(const char *connection_name)
 {
@@ -259,6 +257,20 @@ ECPGnoticeProcessor(void *arg, const char *message)
 	sqlca.sqlwarn[0] = 'W';
 }
 
+/* this contains some quick hacks, needs to be cleaned up, but it works */
+bool
+ECPGconnect_informix(int lineno, const char *name, const char *user, const char *passwd, const char *connection_name, int autocommit)
+{
+	char *informix_name = (char *)name, *envname;
+	
+	/* Informix uses an environment variable DBPATH that overrides
+	 * the connection parameters given here */
+	envname = getenv("DBPATH");
+	if (envname)
+		informix_name = envname;
+	return (ECPGconnect(lineno, informix_name, user, passwd, connection_name, autocommit));
+}
+	
 /* this contains some quick hacks, needs to be cleaned up, but it works */
 bool
 ECPGconnect(int lineno, const char *name, const char *user, const char *passwd, const char *connection_name, int autocommit)
@@ -269,26 +281,13 @@ ECPGconnect(int lineno, const char *name, const char *user, const char *passwd,
 			   *tmp,
 			   *port = NULL,
 			   *realname = NULL,
-			   *options = NULL,
-			   *envname;
+			   *options = NULL;
 
 	ECPGinit_sqlca();
 
 	if ((this = (struct connection *) ECPGalloc(sizeof(struct connection), lineno)) == NULL)
 		return false;
 
-	if (ecpg_compat_mode == ECPG_COMPAT_INFORMIX)
-	{
-		/* Informix uses an environment variable DBPATH that overrides
-		 * the connection parameters given here */
-		envname = getenv("DBPATH");
-		if (envname)
-		{
-			free(dbname);
-			dbname=strdup(envname);
-		}
-	}
-	
 	if (dbname == NULL && connection_name == NULL)
 		connection_name = "DEFAULT";
 
diff --git a/src/interfaces/ecpg/include/ecpglib.h b/src/interfaces/ecpg/include/ecpglib.h
index b4700deaff7be575ab04fd556bd783541db4845d..195a464dd9177bad98bbe0ba6a177415f1dabb54 100644
--- a/src/interfaces/ecpg/include/ecpglib.h
+++ b/src/interfaces/ecpg/include/ecpglib.h
@@ -42,6 +42,7 @@ void		ECPGdebug(int, FILE *);
 bool		ECPGstatus(int, const char *);
 bool		ECPGsetcommit(int, const char *, const char *);
 bool		ECPGsetconn(int, const char *);
+bool		ECPGconnect_informix(int, const char *, const char *, const char *, const char *, int);
 bool		ECPGconnect(int, const char *, const char *, const char *, const char *, int);
 bool		ECPGdo(int, const char *, char *,...);
 bool		ECPGtrans(int, const char *, const char *);
diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c
index 2634eeee9c65ee626ea64ad18df6d10e9864fe31..cd9f319fb54e67a85c7eeab55fbc204f05cef9a2 100644
--- a/src/interfaces/ecpg/preproc/ecpg.c
+++ b/src/interfaces/ecpg/preproc/ecpg.c
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.67 2003/05/01 17:16:57 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.68 2003/05/02 14:43:25 meskes Exp $ */
 
 /* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
 /* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
@@ -339,7 +339,7 @@ main(int argc, char *const argv[])
 				lex_init();
 
 				/* we need several includes */
-				fprintf(yyout, "/* Processed by ecpg (%d.%d.%d) */\n/* These four include files are added by the preprocessor */\n#include <ecpgtype.h>\n#include <ecpglib.h>\n#include <ecpgerrno.h>\n#include <sqlca.h>\n#line 1 \"%s\"\nenum COMPAT_MODE ecpg_compat_mode=%d;\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL, input_filename, compat);
+				fprintf(yyout, "/* Processed by ecpg (%d.%d.%d) */\n/* These four include files are added by the preprocessor */\n#include <ecpgtype.h>\n#include <ecpglib.h>\n#include <ecpgerrno.h>\n#include <sqlca.h>\n#line 1 \"%s\"\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL, input_filename);
 
 				/* add some compatibility headers */
 				if (compat == ECPG_COMPAT_INFORMIX)
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index 3b474a40e7559ded78dbb77cb2f4518d6a4b2bd4..1448d3757c6f4b6699de7c73677d82423e512929 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.215 2003/03/27 14:29:17 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.216 2003/05/02 14:43:25 meskes Exp $ */
 
 /* Copyright comment */
 %{
@@ -528,7 +528,10 @@ stmt:  AlterDatabaseSetStmt { output_statement($1, 0, connection); }
 			if (connection)
 				mmerror(PARSE_ERROR, ET_ERROR, "no at option for connect statement.\n");
 
-			fprintf(yyout, "{ ECPGconnect(__LINE__, %s, %d); ", $1, autocommit);
+			if (compat == ECPG_COMPAT_INFORMIX)
+				fprintf(yyout, "{ ECPGconnect_informix(__LINE__, %s, %d); ", $1, autocommit);
+			else
+				fprintf(yyout, "{ ECPGconnect(__LINE__, %s, %d); ", $1, autocommit);
 			reset_variables();
 			whenever_action(2);
 			free($1);