diff --git a/src/interfaces/odbc/options.c b/src/interfaces/odbc/options.c
index c9d6d107bd52e6d78cd1aaf910caa8429f401a9a..ccc419299dd62a8b28f93491caa45f1e8d257481 100644
--- a/src/interfaces/odbc/options.c
+++ b/src/interfaces/odbc/options.c
@@ -314,32 +314,18 @@ int i;
 
 	case SQL_AUTOCOMMIT:
 
-		/*  Since we are almost always in a transaction, this is now ok.
-			Even if we were, the logic will handle it by sending a commit
-			after the statement.
-		
 		if (CC_is_in_trans(conn)) {
-			conn->errormsg = "Cannot switch commit mode while a transaction is in progres";
+			conn->errormsg = "Cannot switch commit mode while a transaction is in progress";
 			conn->errornumber = CONN_TRANSACT_IN_PROGRES;
 			CC_log_error(func, "", conn);
 			return SQL_ERROR;
 		}
-		*/
 
 		mylog("SQLSetConnectOption: AUTOCOMMIT: transact_status=%d, vparam=%d\n", conn->transact_status, vParam);
 
 		switch(vParam) {
 		case SQL_AUTOCOMMIT_OFF:
 			CC_set_autocommit_off(conn);
-		/* The following two lines are new.
-		   With this modification the SELECT statements
-		   are also included in the transactions.
-		   Error handling should be written, 
-		   this is missing yet, see
-		   SC_execute in statement.c for details. Zoltan
-		*/    
-			CC_send_query(conn,"BEGIN",NULL);
-			CC_set_in_trans(conn);
 			break;
 
 		case SQL_AUTOCOMMIT_ON:
diff --git a/src/interfaces/odbc/statement.c b/src/interfaces/odbc/statement.c
index 0fac4d6bc089fca1844f25bb36f8ef2b34c9e80a..e3b8a0fdffdea966a3d4af9b6ef0e461807f3a3e 100644
--- a/src/interfaces/odbc/statement.c
+++ b/src/interfaces/odbc/statement.c
@@ -750,12 +750,12 @@ QueryInfo qi;
 		starting a transaction first.
 
 		A transaction should be begun if and only if
-		we use declare/fetch and the statement is SELECT.
+		we use declare/fetch and the statement is SELECT
+		or we are not in autocommit state
 		We assume that the Postgres backend has an autocommit
 		feature as default. (Zoltan Kovacs, 04/26/2000)
 	*/
-	// if ( ! self->internal && ! CC_is_in_trans(conn) && (globals.use_declarefetch || STMT_UPDATE(self))) {
-	if ( ! self->internal && ! CC_is_in_trans(conn) && globals.use_declarefetch && self->statement_type == STMT_TYPE_SELECT) {
+	if ( ! self->internal && ! CC_is_in_trans(conn) && ((globals.use_declarefetch && self->statement_type == STMT_TYPE_SELECT) || ! CC_is_in_autocommit(conn))) {
 
 		mylog("   about to begin a transaction on statement = %u\n", self);
 		res = CC_send_query(conn, "BEGIN", NULL);
@@ -831,16 +831,9 @@ QueryInfo qi;
 		mylog("      it's NOT a select statement: stmt=%u\n", self);
 		self->result = CC_send_query(conn, self->stmt_with_params, NULL);
 
-		/*	If we are in autocommit, we must send the commit. */
-		/*	No, we shouldn't. Postgres backend does the
+		/*	We shouldn't send COMMIT. Postgres backend does the
 			autocommit if neccessary. (Zoltan, 04/26/2000)
 		*/
-/*		if ( ! self->internal && CC_is_in_autocommit(conn) && STMT_UPDATE(self)) {
-	    res = CC_send_query(conn, "COMMIT", NULL);
-	    QR_Destructor(res);
-	    CC_set_no_trans(conn);
-		}*/		
-
 	}
 
 	conn->status = oldstatus;