--- a/mysqltcl.c
+++ b/mysqltcl.c
@@ -378,12 +378,14 @@
 static int
 mysqlPrimConfl (char* msg)
 {
+  const char *resultPtr;
   Tcl_SetVar2 (saved_interp, MysqlStatusArr, MYSQL_STATUS_CODE, "-1",
 	       TCL_GLOBAL_ONLY);
   Tcl_SetResult (saved_interp, "", TCL_STATIC) ;
   Tcl_AppendResult (saved_interp, saved_argv[0], ": ", msg, (char*)NULL) ;
+  resultPtr = Tcl_GetStringResult(saved_interp); 
   Tcl_SetVar2 (saved_interp, MysqlStatusArr, MYSQL_STATUS_MSG,
-	       saved_interp->result, TCL_GLOBAL_ONLY);
+	       resultPtr, TCL_GLOBAL_ONLY);
   mysqlReassemble () ;
   return TCL_ERROR ;
 }
@@ -400,6 +402,7 @@
 mysqlServerConfl (MYSQL *sock)
 {
   const char *cp;
+  const char *resultPtr;
   Tcl_SetVar2 (saved_interp, MysqlStatusArr, MYSQL_STATUS_CODE, "-1",
 	       TCL_GLOBAL_ONLY);
   Tcl_SetResult (saved_interp, "", TCL_STATIC) ;
@@ -408,8 +411,9 @@
   else cp = NULL;
   Tcl_AppendResult (saved_interp, saved_argv[0], "/db server: ",
 		    (cp == NULL) ? "" : cp, (char*)NULL) ;
+  resultPtr = Tcl_GetStringResult(saved_interp); 
   Tcl_SetVar2 (saved_interp, MysqlStatusArr, MYSQL_STATUS_MSG,
-	       saved_interp->result, TCL_GLOBAL_ONLY);
+	       resultPtr, TCL_GLOBAL_ONLY);
   mysqlReassemble () ;
   return TCL_ERROR ;
 }
@@ -647,7 +651,7 @@
 	}
       break ;
     case MYSQL_COL_LENGTH_K:
-      sprintf (buf, "%d", fld->length) ;
+      sprintf (buf, "%lu", fld->length) ;
       res = buf ;
       break ;
 #ifdef IS_PRI_KEY
@@ -1072,11 +1076,13 @@
 #endif /* TCL_MAJOR_VERSION >= 8 && TCL_MINOR_VERSION >= 2 */
 
   if ((mysqlHandle[hand].result = mysql_store_result(MYSQLCON(hand)))== NULL) {
-    (void)strcpy (interp->result, "-1") ;
+    Tcl_SetResult(interp, "-1", TCL_STATIC);
   } else {
+    char buf[30];
     mysqlHandle[hand].res_count = mysql_num_rows (mysqlHandle[hand].result) ;
     mysqlHandle[hand].col_count = mysql_num_fields (mysqlHandle[hand].result) ;
-    (void)sprintf (interp->result, "%d", mysqlHandle[hand].res_count) ;
+    (void)sprintf (buf, "%d", mysqlHandle[hand].res_count) ;
+    Tcl_SetResult(interp, buf, TCL_STATIC);
   }
   return TCL_OK;
 }
@@ -1138,7 +1144,11 @@
 #endif /* TCL_MAJOR_VERSION >= 8 && TCL_MINOR_VERSION >= 2 */
 
   num_rows = mysql_affected_rows(MYSQLCON(hand));
-  (void)sprintf (interp->result, "%d", num_rows) ;
+  {
+    char buf[30];
+    (void)sprintf (buf, "%d", num_rows) ;
+    Tcl_SetResult(interp, buf, TCL_STATIC);
+  }
   if (mysql_insert_id(MYSQLCON(hand)) != 0)
     mysqlHandle[hand].last_insert_id = mysql_insert_id(MYSQLCON(hand));
   return TCL_OK ;
@@ -1231,7 +1241,11 @@
     mysql_data_seek (mysqlHandle[hand].result, row);
     mysqlHandle[hand].res_count = total - row;
   }
-  (void)sprintf (interp->result, "%d", mysqlHandle[hand].res_count) ;
+  {
+    char buf[30];
+    (void)sprintf (buf, "%d", mysqlHandle[hand].res_count) ;
+    Tcl_SetResult(interp, buf, TCL_STATIC);
+  }
   return TCL_OK;
 }
 
@@ -1386,7 +1400,7 @@
   switch (idx) {
   case MYSQL_INFNAME_OPT:
   case MYSQL_INFNAMEQ_OPT:
-    strcpy (interp->result, mysqlHandle[hand].connection->database) ;
+      Tcl_SetResult(interp, mysqlHandle[hand].connection->database, TCL_STATIC);
     break ;
   case MYSQL_INFTABLES_OPT:
     if ((list= mysql_list_tables (MYSQLCON(hand), NULL)) == NULL)
@@ -1400,7 +1414,7 @@
       break ;
     case MYSQL_INFHOST_OPT:
     case MYSQL_INFHOSTQ_OPT:
-      strcpy (interp->result, mysqlHandle[hand].connection->host) ;
+      Tcl_SetResult(interp, mysqlHandle[hand].connection->host, TCL_STATIC) ;
       break ;
     case MYSQL_INFLIST_OPT:
       if ((list = mysql_list_dbs (MYSQLCON(hand), NULL)) == NULL)
@@ -1473,17 +1487,29 @@
   switch (idx) {
     case MYSQL_RESROWS_OPT:
     case MYSQL_RESROWSQ_OPT:
-      sprintf (interp->result, "%d", mysqlHandle[hand].res_count) ;
+    {
+        char buf[30];
+        sprintf(buf, "%d", mysqlHandle[hand].res_count);
+        Tcl_SetResult(interp, buf, TCL_STATIC);
+    }
       break ;
     case MYSQL_RESCOLS_OPT:
     case MYSQL_RESCOLSQ_OPT:
-      sprintf (interp->result, "%d", mysqlHandle[hand].col_count) ;
+    {
+        char buf[30];
+      sprintf (buf, "%d", mysqlHandle[hand].col_count) ;
+        Tcl_SetResult(interp, buf, TCL_STATIC);
+    }
       break ;
     case MYSQL_RESCUR_OPT:
     case MYSQL_RESCURQ_OPT:
-      sprintf (interp->result, "%d", 
+    {
+        char buf[30];
+      sprintf (buf, "%d", 
 	       (int)(mysql_num_rows (mysqlHandle[hand].result)
 	       - mysqlHandle[hand].res_count)) ;
+        Tcl_SetResult(interp, buf, TCL_STATIC);
+    }
     default: /* unknown option: not possible, already checked, but anyway... */
       sprintf (buf, "'%s' unknown option", argv[2]);
       return mysqlPrimConfl (buf) ;
@@ -1637,7 +1663,7 @@
   else
     res = (numeric)?"4":"RESULT_PENDING" ;
 
-  (void)strcpy (interp->result, res) ;
+  Tcl_SetResult(interp, (char *)res, TCL_STATIC) ;
   return TCL_OK ;
 }
 
@@ -1656,7 +1682,10 @@
   if ((hand = mysqlPrologue(interp, argc, argv, 2, get_handle_conn,
 			    "handle")) < 0)
     return TCL_ERROR;
-  (void)sprintf (interp->result, "%d", mysqlHandle[hand].last_insert_id);
+  {char buf[30];
+    (void)sprintf (buf, "%d", mysqlHandle[hand].last_insert_id);
+    Tcl_SetResult(interp, buf, TCL_STATIC);
+  }
   return TCL_OK;
 }