diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 55c1cfde8b97e15f98cbf57e19c032c967c00525..53c81753edc898462ef8a32ca3b72922b5dbbf59 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -631,3 +631,10 @@ Tue Sep 14 22:26:40 CEST 1999
 	- Return OID in sqlca.sqlerrd[1] if possible.
 	- Set ecpg version to 2.6.3
 	- Set library version to 3.0.2
+
+Fri Sep 17 07:43:55 CEST 1999
+
+	- Fixed bug in parsing C strings.
+	- Fixed bug in parsing operators.
+	- Set ecpg version to 2.6.4
+
diff --git a/src/interfaces/ecpg/include/sqlca.h b/src/interfaces/ecpg/include/sqlca.h
index 003d6ebff8bc162fa1d88dea0c056d4c05afab4d..4e6534c8e4f775178ff9277620ee16bd8c75da67 100644
--- a/src/interfaces/ecpg/include/sqlca.h
+++ b/src/interfaces/ecpg/include/sqlca.h
@@ -19,7 +19,7 @@ extern		"C"
 		char		sqlerrp[8];
 		long		sqlerrd[6];
 		/* Element 0: empty						*/
-		/* 1:  OID of processed tuple if applicable  		*/
+		/* 1: OID of processed tuple if applicable  		*/
 		/* 2: number of rows processed	*/
 		/* after an INSERT, UPDATE or */
 		/* DELETE statement			 */
diff --git a/src/interfaces/ecpg/preproc/Makefile b/src/interfaces/ecpg/preproc/Makefile
index b7894548aef6861491aa4e294d087f3ded09f194..117e2527afe833c28d9077d92447b143fb8031aa 100644
--- a/src/interfaces/ecpg/preproc/Makefile
+++ b/src/interfaces/ecpg/preproc/Makefile
@@ -3,7 +3,7 @@ include $(SRCDIR)/Makefile.global
 
 MAJOR_VERSION=2
 MINOR_VERSION=6
-PATCHLEVEL=3
+PATCHLEVEL=4
 
 CFLAGS+=-I../include -DMAJOR_VERSION=$(MAJOR_VERSION) \
 	-DMINOR_VERSION=$(MINOR_VERSION) -DPATCHLEVEL=$(PATCHLEVEL) \
diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l
index f583a60294b8ac834814b8f5863fd904b28aff59..71fd39a1086a1c8aedaa2e09747e93f18e74d2eb 100644
--- a/src/interfaces/ecpg/preproc/pgc.l
+++ b/src/interfaces/ecpg/preproc/pgc.l
@@ -110,9 +110,13 @@ xqcat			{quote}{space}*\n{space}*{quote}
 dquote			\"
 xdstart			{dquote}
 xdstop			{dquote}
-xdcqdq			\\\"
 xdinside		[^"]*
-xdcinside		({xdinside}|{xdcqdq})*
+
+/* special stuff for C strings */
+xdcqq			\\\\
+xdcqdq			\\\"
+xdcother		[^"]
+xdcinside		({xdcqq}|{xdcqdq}|{xdcother})
 
 /* Comments
  * Ignored by the scanner and parser.
@@ -133,7 +137,7 @@ identifier		{letter}{letter_or_digit}*
 typecast		"::"
 
 self			[,()\[\].;$\:\+\-\*\/\%\^\<\>\=\|]
-op_and_self		[\~\!\@\#\^\&\|\?\$\:\+\-\*\/\%\<\>\=]
+op_and_self		[\~\!\@\#\^\&\|\`\?\$\:\+\-\*\/\%\<\>\=]
 operator		{op_and_self}+
 
 xmstop			-
@@ -287,7 +291,6 @@ cppline		{space}*#.*(\\{space}*\n)*\n*
 					memcpy(literal+llen, yytext, yyleng+1);
 					llen += yyleng;
 				}
-
 <xm>{space}*	{ /* ignore */ }
 <xm>{xmstop}	{
 					BEGIN(SQL);