diff --git a/lib/modules/Sql.pmod/pgsql.h b/lib/modules/Sql.pmod/pgsql.h
index d0b31cbf28f167ba3919522d2547d8418ad22c62..b8056f277e0ba76ea1ffd60ddc1e0f4bafd4ba63 100644
--- a/lib/modules/Sql.pmod/pgsql.h
+++ b/lib/modules/Sql.pmod/pgsql.h
@@ -72,7 +72,7 @@
 #ifdef PG_DEBUG
 #define PD(X ...)            werror(X)
 			     // PT() puts this in the backtrace
-#define PT(X ...)	     (lambda(object _this){return (X);}(this))
+#define PT(X ...)	     (lambda(object _this){(X);}(this))
 #else
 #undef PG_DEBUGMORE
 #define PD(X ...)	     0
diff --git a/lib/modules/Sql.pmod/pgsql.pike b/lib/modules/Sql.pmod/pgsql.pike
index 3661637f8962bf2cfc8619eba1bb15012b093ff4..30c93353f0a8f1a1b5fe6732c4e3cfd4c956092f 100644
--- a/lib/modules/Sql.pmod/pgsql.pike
+++ b/lib/modules/Sql.pmod/pgsql.pike
@@ -313,7 +313,7 @@ private .pgsql_util.conxion getsocket(void|int nossl) {
 //! through the generic SQL-interface.
 /*semi*/final void cancelquery() {
   PD("CancelRequest\n");
-  .pgsql_util.conxion lcon=getsocket(1);
+  .pgsql_util.conxion lcon=getsocket(2);
   lcon->add_int32(16)->add_int32(PG_PROTOCOL(1234,5678))
    ->add_int32(backendpid)->add(cancelsecret)->sendcmd(FLUSHSEND);
   lcon=0;
@@ -617,6 +617,7 @@ final void _processloop(.pgsql_util.conxion ci) {
         _connectfail();
       else
         destruct(waitforauthready);
+      unnamedstatement=0;
       termlock=0;
       return;
     }
@@ -625,10 +626,11 @@ final void _processloop(.pgsql_util.conxion ci) {
 }
 
 private void procmessage() {
+  mixed err;
   int terminating=0;
+  err = catch {
   .pgsql_util.conxion ci=c;		// cache value FIXME sensible?
   .pgsql_util.conxiin cr=ci->i;		// cache value FIXME sensible?
-  mixed err;
 #ifdef PG_DEBUG
   PD("Processloop\n");
 
@@ -1190,6 +1192,12 @@ private void procmessage() {
   termlock=0;
   if(err && !stringp(err))
     throw(err);
+  };
+  if (err) {
+    unnamedstatement=0;
+    termlock = 0;
+    throw(err);
+  }
 }
 
 //! Closes the connection to the database, any running queries are
@@ -1201,9 +1209,11 @@ private void procmessage() {
 /*semi*/final void close() {
   if(qportals && qportals->size())
     catch(cancelquery());
-  termlock=unnamedstatement->lock(1);
+  if (unnamedstatement)
+    termlock=unnamedstatement->lock(1);
   c->close();
-  unnamedstatement->lock(1);
+  if (unnamedstatement)
+    unnamedstatement->lock(1);
   destruct(c);destruct(waitforauthready);
 }
 
diff --git a/lib/modules/Sql.pmod/pgsql_util.pmod b/lib/modules/Sql.pmod/pgsql_util.pmod
index f30e388b9999571473221694ac12112ee20fc1f2..2eaec13420b7e7fcc956e24b97463ca8db00a999 100644
--- a/lib/modules/Sql.pmod/pgsql_util.pmod
+++ b/lib/modules/Sql.pmod/pgsql_util.pmod
@@ -208,7 +208,11 @@ class conxiin {
   }
 
   final int read_cb(mixed id,mixed b) {
-    PD("Read callback %O\n",(string)b);
+    PD("Read callback %O\n",((string)b)
+#ifndef PG_DEBUGMORE
+      [..255]
+#endif
+     );
     Thread.MutexKey lock=fillreadmux->lock();
     if(procmsg&&id)
       procmsg=0,lock=0,Thread.Thread(id);
@@ -411,8 +415,10 @@ outer:
       socket->set_backend(local_backend);
       socket->set_buffer_mode(i,0);
       socket->set_nonblocking(i->read_cb,write_cb,close);
-      connectfail=pgsqlsess->_connectfail;
-      Thread.Thread(pgsqlsess->_processloop,this);
+      if (nossl != 2) {
+        connectfail=pgsqlsess->_connectfail;
+        Thread.Thread(pgsqlsess->_processloop,this);
+      }
       return;
     };
     catch(connectfail(err));