diff --git a/lib/modules/Sql.pmod/tds.pike b/lib/modules/Sql.pmod/tds.pike
index f0101cf0d0f961194b112b44451cf1331719a647..043497985f09816f0f7728378747b08db0d2e6b2 100644
--- a/lib/modules/Sql.pmod/tds.pike
+++ b/lib/modules/Sql.pmod/tds.pike
@@ -1,13 +1,13 @@
 /*
- * $Id: tds.pike,v 1.10 2006/02/13 14:04:17 grubba Exp $
+ * $Id: tds.pike,v 1.11 2006/02/14 10:20:34 grubba Exp $
  *
  * A Pike implementation of the TDS protocol.
  *
  * Henrik Grubbstr�m 2006-02-08.
  */
 
-#define TDS_DEBUG
-#define TDS_CONVERT_DEBUG
+/* #define TDS_DEBUG */
+/* #define TDS_CONVERT_DEBUG */
 
 #ifdef TDS_DEBUG
 #define TDS_WERROR(X...)	werror("TDS:" + X)
@@ -661,6 +661,8 @@ static {
 	tds_error("%d: %s:%s:%d %s\n",
 		  level, proc_name, server, line, message);
       } else {
+	last_error = sprintf("%d: %s:%s:%d %s\n",
+			     level, proc_name, server, line, message);
 	TDS_WERROR("%d: %s:%s:%d %s\n",
 		   level, proc_name, server, line, message);
       }
@@ -730,6 +732,7 @@ static {
 
     int get_cardinal_type(int col_type)
     {
+      // FIXME: This function could be done away with.
       switch (col_type) {
       case XSYBVARBINARY:
 	return SYBVARBINARY;
@@ -916,8 +919,8 @@ static {
 	inp->get_raw(inp->get_smallint());
 	break;
       default:
-	TDS_WERROR("FIXME: Got unknown token in process_default_tokens: %d\n",
-		   token_type);
+	werror("TDS: WARNING: Got unknown token in process_default_tokens: %d\n",
+	       token_type);
 	break;
       }
     }
@@ -950,7 +953,8 @@ static {
 	  TDS_WERROR("  TDS_ROW_TOKEN pending\n");
 	  return column_info;
 	default:
-	  TDS_WERROR("==> FIXME: process_result_tokens\n");
+	  werror("TDS: WARNING: Unhandled token in process_result_tokens: %d\n",
+		 token_type);
 	  // FALL_THROUGH
 	case TDS_ORDERBY_TOKEN:
 	  /* Ignore. */
@@ -1017,6 +1021,7 @@ static {
 	string raw = inp->get_raw(colsize);
 	TDS_WERROR("BLOB. colsize:%d, raw: %O\n", colsize, raw);
 	if (is_char_type(info->cardinal_type)) {
+	  // FIXME: Move this to convert()?
 	  return utf16_to_string(raw);
 	}
 	return raw;
@@ -1025,6 +1030,7 @@ static {
 	TDS_WERROR("Got raw data: %O\ncolumn_size:%d colsize:%d\n%s\n",
 		   raw, info->column_size, colsize, hex_dump(raw));
 	if (is_unicode_type(info->column_type)) {
+	  // FIXME: Move this to convert()?
 	  raw = utf16_to_string(raw);
 	}
 	if (colsize < info->column_size) {
@@ -1072,6 +1078,7 @@ static {
       case SYBIMAGE:
       case XSYBBINARY:
       case XSYBVARBINARY:
+	// Strings have already been converted.
 	TDS_CONV_WERROR("%O ==> %O\n", raw, raw);
 	return raw;
       case SYBMONEYN:
@@ -1127,6 +1134,8 @@ static {
 	// FIXME:
 	TDS_CONV_WERROR("Not yet supported: %d (%O)\n",
 			info->cardinal_type, raw);
+	werror("TDS: WARNING: Datatype %d not yet supported. raw: %O\n",
+	       info->cardinal_type, raw);
 	return raw;
       case SYBBIT:
       case SYBBITN:
@@ -1145,7 +1154,7 @@ static {
 	  } else {
 	    val = array_sscanf(raw + ("\x00"*8), "%-8c")[0];
 	  }
-	  TDS_WERROR("%O ==> \"%d\"\n", raw, val);
+	  TDS_CONV_WERROR("%O ==> \"%d\"\n", raw, val);
 	  return sprintf("%d", val);
 	}
       case SYBDATETIMN: