--- shell_src/goshGraph.cpp.orig	2013-06-04 14:51:44.000000000 +0200
+++ shell_src/goshGraph.cpp	2013-06-04 16:26:04.000000000 +0200
@@ -173,7 +173,7 @@
         {
             TNode u = atol(argv[2]);
             TNode v = G -> SwapNode(u);
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(v));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(v)));
             return TCL_OK;
         }
 
@@ -384,12 +384,12 @@
 
                 try
                 {
-                    sprintf(interp->result,"%f",G->FlowValue(sourceNode,sourceNode^1));
+                    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->FlowValue(sourceNode,sourceNode^1)));
                     return TCL_OK;
                 }
                 catch (ERCheck)
                 {
-                    sprintf(interp->result,"Flow is corrupted");
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Flow is corrupted", -1));
                     return TCL_ERROR;
                 }
             }
@@ -400,12 +400,12 @@
                 try
                 {
                     G -> FlowValue(sourceNode,sourceNode^1);
-                    sprintf(interp->result,"%f",ret);
+                    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(ret));
                     return TCL_OK;
                 }
                 catch (ERCheck)
                 {
-                    interp->result = "Flow is corrupted";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Flow is corrupted", -1));
                     return TCL_ERROR;
                 }
             }
@@ -453,6 +453,8 @@
 int Goblin_Sparse_Cmd (abstractMixedGraph *G,Tcl_Interp* interp,int argc,
     _CONST_QUAL_ char* argv[]) throw(ERRejected,ERRange)
 {
+    Tcl_ResetResult(interp);
+
     if (strcmp(argv[1],"reorder")==0)
     {
         if (argc!=4)
@@ -466,29 +468,27 @@
             if (strcmp(argv[3],"-planar")==0)
             {
                 if (G->PlanarizeIncidenceOrder())
-                    interp->result = "1";
-                else interp->result = "0";
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
+                else
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(0));
                 return GOSH_OK;
             }
 
             if (strcmp(argv[3],"-shuffle")==0)
             {
                 G -> RandomizeIncidenceOrder();
-                interp->result = "";
                 return GOSH_OK;
             }
 
             if (strcmp(argv[3],"-geometric")==0)
             {
                 G -> IncidenceOrderFromDrawing();
-                interp->result = "";
                 return GOSH_OK;
             }
 
             if (strcmp(argv[3],"-outerplanar")==0)
             {
                 G -> GrowExteriorFace();
-                interp->result = "";
                 return GOSH_OK;
             }
 
@@ -517,14 +517,13 @@
             else
             {
                 delete[] keyValue;
-                interp->result = "Missing key value specification";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing key value specification", -1));
                 return TCL_OK;
             }
 
             GR -> ReorderNodeIndices(keyValue);
 
             delete[] keyValue;
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -550,18 +549,17 @@
             else
             {
                 delete[] keyValue;
-                interp->result = "Missing key value specification";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing key value specification", -1));
                 return TCL_OK;
             }
 
             GR -> ReorderEdgeIndices(keyValue);
 
             delete[] keyValue;
-            interp->result = "";
             return TCL_OK;
         }
 
-        sprintf(interp->result,"Unknown option: %s reorder %s",argv[0],argv[2]);
+        Tcl_AppendResult(interp, "Unknown option: ", argv[0], " reorder ", argv[2], (char *)NULL);
         return TCL_ERROR;
     }
 
@@ -600,12 +598,11 @@
                     sourceNode,targetNode)
            )
         {
-            interp->result = "";
             return GOSH_OK;
         }
         else
         {
-            interp->result = "Graph is not edge series parallel";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Graph is not edge series parallel", -1));
             return GOSH_ERROR;
         }
     }
@@ -625,7 +622,7 @@
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>((G->N1())));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>((G->N1()))));
         return TCL_OK;
     }
 
@@ -637,7 +634,7 @@
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>((G->N2())));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>((G->N2()))));
         return TCL_OK;
     }
 
@@ -648,9 +645,11 @@
 int Goblin_Undirected_Cmd (abstractGraph *G,Tcl_Interp* interp,int argc,
     _CONST_QUAL_ char* argv[]) throw(ERRejected,ERRange)
 {
+    Tcl_ResetResult(interp);
+
     if (argc<2)
     {
-        interp->result = "Missing arguments";
+        Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing arguments", -1));
         return TCL_ERROR;
     }
 
@@ -669,7 +668,6 @@
             Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -687,7 +685,6 @@
             Goblin_Dense_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Dense_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -701,7 +698,7 @@
 
         TFloat ret = G -> MaximumMatching();
 
-        sprintf(interp->result,"%f",ret);
+        Tcl_SetObjResult(interp, Tcl_NewDoubleObj(ret));
         return TCL_OK;
     }
 
@@ -715,12 +712,12 @@
 
         if (G -> MinCMatching())
         {
-            sprintf(interp->result,"%f",G->Weight());
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->Weight()));
             return TCL_OK;
         }
         else
         {
-            interp->result = "No such structure exists";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("No such structure exists", -1));
             return TCL_ERROR;
         }
     }
@@ -735,7 +732,7 @@
 
         TFloat ret = G -> MinCEdgeCover();
 
-        sprintf(interp->result,"%f",ret);
+        Tcl_SetObjResult(interp, Tcl_NewDoubleObj(ret));
         return TCL_OK;
     }
 
@@ -750,12 +747,12 @@
         try
         {
             G -> MinCTJoin(demandNodes(*G));
-            sprintf(interp->result,"%f",G->Weight());
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->Weight()));
             return TCL_OK;
         }
         catch (ERRejected)
         {
-            interp->result = "No such structure exists";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("No such structure exists", -1));
             return TCL_ERROR;
         }
     }
@@ -767,9 +764,11 @@
 int Goblin_Directed_Cmd (abstractDiGraph *G,Tcl_Interp* interp,int argc,
     _CONST_QUAL_ char* argv[]) throw(ERRejected,ERRange)
 {
+    Tcl_ResetResult(interp);
+
     if (argc<2)
     {
-        interp->result = "Missing arguments";
+        Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing arguments", -1));
         return TCL_ERROR;
     }
 
@@ -788,7 +787,6 @@
             Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -806,7 +804,6 @@
             Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -824,7 +821,6 @@
             Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -842,7 +838,6 @@
             Goblin_Ilp_Cmd,reinterpret_cast<ClientData>(XLP),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Ilp);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -860,7 +855,6 @@
             Goblin_Balanced_FNW_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Balanced_FNW);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -876,11 +870,10 @@
 
         if (v==NoNode)
         {
-            interp->result = "*";
             return TCL_OK;
         }
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>(v));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(v)));
         return TCL_OK;
     }
 
@@ -896,11 +889,11 @@
 
         if (v==NoNode)
         {
-            interp->result = "Graph is not a DAG";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Graph is not a DAG", -1));
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>(v));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(v)));
         return TCL_OK;
     }
 
@@ -916,7 +909,7 @@
         }
 
         TCap ret = G->TreePacking(rootNode);
-        sprintf(interp->result,"%f",ret);
+        Tcl_SetObjResult(interp, Tcl_NewDoubleObj(ret));
         return TCL_OK;
     }
 
@@ -927,9 +920,11 @@
 int Goblin_Generic_Graph_Cmd (abstractMixedGraph *G,Tcl_Interp* interp,int argc,
     _CONST_QUAL_ char* argv[]) throw(ERRejected,ERRange)
 {
+    Tcl_ResetResult(interp);
+
     if (argc<2)
     {
-        interp->result = "Missing arguments";
+        Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing arguments", -1));
         return TCL_ERROR;
     }
 
@@ -947,7 +942,6 @@
             Goblin_Graph_Display_Proxy_Cmd,reinterpret_cast<ClientData>(DP),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Graph_Display_Proxy);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -966,7 +960,6 @@
             Goblin_Mixed_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Mixed_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1003,7 +996,6 @@
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Mixed_Graph);
         }
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1032,7 +1024,6 @@
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
         }
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1050,7 +1041,6 @@
             Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1068,7 +1058,6 @@
             Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1099,7 +1088,6 @@
             Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1117,7 +1105,6 @@
             Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1135,7 +1122,6 @@
             Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1153,7 +1139,6 @@
             Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1204,7 +1189,6 @@
             Goblin_Mixed_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Mixed_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1222,7 +1206,6 @@
             Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1252,7 +1235,6 @@
             Goblin_Sparse_Bigraph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Bigraph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1270,7 +1252,6 @@
             Goblin_Mixed_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Mixed_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1288,7 +1269,6 @@
             Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1306,7 +1286,6 @@
             Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1324,7 +1303,6 @@
             Goblin_Mixed_Graph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Mixed_Graph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1342,7 +1320,6 @@
             Goblin_Dense_Digraph_Cmd,reinterpret_cast<ClientData>(H),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Dense_Digraph);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1361,7 +1338,6 @@
             Goblin_Ilp_Cmd,reinterpret_cast<ClientData>(XLP),
             (Tcl_CmdDeleteProc *)Goblin_Delete_Ilp);
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1378,7 +1354,7 @@
 
         if (!X->IsGraphObject())
         {
-            sprintf(interp->result,"Not a graph object ID: %s",argv[argc-1]);
+            Tcl_AppendResult(interp, "Not a graph object ID: ", argv[argc-1], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -1386,7 +1362,7 @@
 
         if (Y==NULL || !(Y->IsSparse()))
         {
-            interp->result = "Unhandled object type";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Unhandled object type", -1));
             return TCL_ERROR;
         }
 
@@ -1417,7 +1393,6 @@
             G -> AddGraphByNodes(*Y,mergeLayoutMode);
         }
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -1443,7 +1418,7 @@
             {
                 if (argc==5)
                 {
-                    interp->result = "Missing coordinate values";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing coordinate values", -1));
                     return TCL_ERROR;
                 }
 
@@ -1454,7 +1429,6 @@
                     G->Representation() -> SetC(p,TDim(i-5),pos);
                 }
 
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1462,13 +1436,13 @@
             {
                 if (!G->IsSparse())
                 {
-                    interp->result = "Operation applies to sparse graphs only";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Operation applies to sparse graphs only", -1));
                     return TCL_ERROR;
                 }
 
                 sparseRepresentation* GR = static_cast<sparseRepresentation*>(G->Representation());
 
-                sprintf(interp->result,"%lu",static_cast<unsigned long>(GR->InsertThreadSuccessor(p)));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(GR->InsertThreadSuccessor(p))));
                 return TCL_OK;
             }
 
@@ -1476,27 +1450,27 @@
             {
                 if (strcmp(argv[5],"-cx")==0)
                 {
-                    sprintf(interp->result,"%f",G->C(p,0));
+                    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->C(p,0)));
                 }
                 else if (strcmp(argv[5],"-cy")==0)
                 {
-                    sprintf(interp->result,"%f",G->C(p,1));
+                    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->C(p,1)));
                 }
                 else if (strcmp(argv[5],"-successor")==0)
                 {
                     if (G->ThreadSuccessor(p)!=NoNode)
                     {
-                        sprintf(interp->result,"%lu",static_cast<unsigned long>(G->ThreadSuccessor(p)));
+                        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->ThreadSuccessor(p))));
                     }
-                    else interp->result = "*";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
                 }
                 else if (strcmp(argv[5],"-hidden")==0)
                 {
-                    sprintf(interp->result,"%d",G->HiddenNode(p));
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(G->HiddenNode(p)));
                 }
                 else
                 {
-                    sprintf(interp->result,"Unknown layout point attribute: %s",argv[5]);
+                    Tcl_AppendResult(interp, "Unknown layout point attribute: ", argv[5], (char *)NULL);
                     return TCL_ERROR;
                 }
 
@@ -1507,13 +1481,12 @@
         if (strcmp(argv[2],"alignWithOrigin")==0)
         {
             G -> Layout_AlignWithOrigin();
-            interp->result = "";
             return TCL_OK;
         }
 
         if (strcmp(argv[2],"#points")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(G->L()));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->L())));
             return TCL_OK;
         }
 
@@ -1522,21 +1495,18 @@
             if (strcmp(argv[3],"freeze")==0)
             {
                 G -> Layout_FreezeBoundingBox();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"default")==0)
             {
                 G -> Layout_DefaultBoundingBox();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"release")==0)
             {
                 G -> Layout_ReleaseBoundingBox();
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1546,7 +1516,7 @@
 
             if (pos<=0 || pos>=argc-1)
             {
-                interp->result = "Missing value for parameter \"-coordinate\"";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing value for parameter \"-coordinate\"", -1));
                 return TCL_ERROR;
             }
 
@@ -1554,7 +1524,7 @@
 
             if (coordinate>=G->Dim())
             {
-                interp->result = "Invalid coordinate index";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Invalid coordinate index", -1));
                 return TCL_ERROR;
             }
 
@@ -1564,7 +1534,7 @@
 
                 if (pos<=0 || pos>=argc-2)
                 {
-                    interp->result = "Missing values for parameter \"-range\"";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing values for parameter \"-range\"", -1));
                     return TCL_ERROR;
                 }
 
@@ -1572,7 +1542,6 @@
                 TFloat cMax = TFloat(atol(argv[pos+2]));
 
                 G -> Layout_TransformCoordinate(coordinate,cMin,cMax);
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1585,7 +1554,7 @@
 
                 if (pos>0 && pos<argc)
                 {
-                    sprintf(interp->result,"%f",cMax);
+                    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(cMax));
                     return TCL_OK;
                 }
 
@@ -1593,7 +1562,7 @@
 
                 if (pos>0 && pos<argc)
                 {
-                    sprintf(interp->result,"%f",cMin);
+                    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(cMin));
                     return TCL_OK;
                 }
 
@@ -1603,15 +1572,15 @@
                 {
                     TFloat spacing = 1.0;
                     G -> GetLayoutParameter(TokLayoutBendSpacing,spacing);
-                    sprintf(interp->result,"%lu",static_cast<unsigned long>((cMax-cMin)/spacing));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>((cMax-cMin)/spacing)));
                     return TCL_OK;
                 }
 
-                interp->result = "Missing parameter specification";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing parameter specification", -1));
                 return TCL_ERROR;
             }
 
-            sprintf(interp->result,"Unknown option: %s layout boundingBox %s",argv[0],argv[3]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[0], " layout boundingBox ", argv[3], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -1630,15 +1599,14 @@
                 if (   argv[keyCount][0]!='-'
                     || !G->SetLayoutParameter(&(argv[keyCount][1]),argv[keyCount+1]))
                 {
-                    sprintf(interp->result,"Invalid assignment: %s layout configure %s %s",
-                        argv[0],argv[keyCount],argv[keyCount+1]);
+                    Tcl_AppendResult(interp, "Invalid assignment: ", argv[0], " layout configure ",
+                            argv[keyCount], argv[keyCount+1], (char *)NULL);
                     return TCL_ERROR;
                 }
 
                 keyCount += 2;
             }
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1654,16 +1622,16 @@
             {
                 if (G->Dim()>0 && G->CMax(0)>-100000 && G->CMax(1)>-100000)
                 {
-                    interp->result = "1";
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
                 }
                 else
                 {
-                    interp->result = "0";
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(0));
                 }
             }
-            else if (!G->GetLayoutParameter(&(argv[3][1]),interp->result))
+            else if (!G->GetLayoutParameter(&(argv[3][1]),(char *)Tcl_GetStringResult(interp)))
             {
-                sprintf(interp->result,"Unknown layout parameter %s",argv[3]);
+                Tcl_AppendResult(interp, "Unknown layout parameter ", argv[3], (char *)NULL);
                 return TCL_ERROR;
             }
 
@@ -1681,7 +1649,7 @@
             }
             else
             {
-                interp->result = "Missing value for parameter \"-spacing\"";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing value for parameter \"-spacing\"", -1));
                 return TCL_ERROR;
             }
         }
@@ -1690,13 +1658,12 @@
         {
             if (!G->IsSparse())
             {
-                interp->result = "Operation applies to sparse graphs only";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Operation applies to sparse graphs only", -1));
                 return TCL_ERROR;
             }
 
             static_cast<sparseRepresentation*>(G->Representation()) -> Layout_ArcRouting(spacing);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1715,7 +1682,7 @@
                 }
                 else
                 {
-                    interp->result = "Missing value for parameter \"-dx\"";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing value for parameter \"-dx\"", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1730,7 +1697,7 @@
                 }
                 else
                 {
-                    interp->result = "Missing value for parameter \"-dy\"";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing value for parameter \"-dy\"", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1761,7 +1728,6 @@
             }
             catch (ERRejected) {}
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1800,7 +1766,6 @@
                         abstractMixedGraph::FDP_DEFAULT,int(spacing));
             }
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1869,7 +1834,6 @@
                 G -> Layout_Layered(method,dx,dy);
             }
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1887,7 +1851,7 @@
             {
                 if (!(G->Layout_Outerplanar(spacing)))
                 {
-                    interp->result = "No outerplanar embedding given";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("No outerplanar embedding given", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1896,7 +1860,6 @@
                 G -> Layout_Circular(spacing);
             }
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1904,7 +1867,6 @@
         {
             G -> Layout_Equilateral(spacing);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1916,7 +1878,7 @@
             if (pos<argc-1) grid = atol(argv[pos+1]);
             else
             {
-                interp->result = "Missing value for parameter \"-grid\"";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing value for parameter \"-grid\"", -1));
                 return TCL_ERROR;
             }
         }
@@ -1932,7 +1894,7 @@
                 if (pos<argc-1) aBasis = atol(argv[pos+1]);
                 else
                 {
-                    interp->result = "Missing value for parameter \"-basis\"";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing value for parameter \"-basis\"", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1946,7 +1908,6 @@
                 G -> Layout_StraightLineDrawing(aBasis,grid);
             }
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1963,7 +1924,7 @@
                     if (pos<argc-1) rootNode = atol(argv[pos+1]);
                     else
                     {
-                        interp->result = "Missing value for parameter \"-rootNode\"";
+                        Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing value for parameter \"-rootNode\"", -1));
                         return TCL_ERROR;
                     }
                 }
@@ -1995,7 +1956,6 @@
                 G -> Layout_Kandinsky(abstractMixedGraph::ORTHO_DEFAULT,grid);
             }
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -2024,11 +1984,10 @@
                     abstractMixedGraph::ORTHO_VISIBILITY_TRIM,grid);
             }
 
-            interp->result = "";
             return TCL_OK;
         }
 
-        sprintf(interp->result,"Unknown option: %s layout %s",argv[0],argv[2]);
+        Tcl_AppendResult(interp, "Unknown option: ", argv[0], " layout ", argv[2], (char *)NULL);
         return TCL_ERROR;
     }
 
@@ -2054,11 +2013,11 @@
             try
             {
                 G -> ExtractTree(rootNode);
-                interp->result = "1";
+                Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
             }
             catch (ERCheck)
             {
-                interp->result = "Invalid input data";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Invalid input data", -1));
                 return TCL_ERROR;
             }
 
@@ -2087,11 +2046,11 @@
             try
             {
                 G -> ExtractPath(sourceNode,targetNode);
-                interp->result = "1";
+                Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
             }
             catch (ERCheck)
             {
-                interp->result = "Invalid input data";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Invalid input data", -1));
                 return TCL_ERROR;
             }
 
@@ -2108,11 +2067,11 @@
         {
             try
             {
-                sprintf(interp->result,"%lu",static_cast<unsigned long>(G->ExtractCycles()));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->ExtractCycles())));
             }
             catch (ERCheck)
             {
-                interp->result = "Invalid input data";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Invalid input data", -1));
                 return TCL_ERROR;
             }
 
@@ -2121,7 +2080,7 @@
 
         try
         {
-            interp->result = "1";
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
 
             if (strcmp(argv[2],"matching")==0)
             {
@@ -2159,20 +2118,20 @@
                 return TCL_OK;
             }
 
-            interp->result = "1";
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
         }
         catch (ERCheck)
         {
-            interp->result = "Invalid input data";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Invalid input data", -1));
             return TCL_ERROR;
         }
         catch (ERRejected)
         {
-            interp->result = "Invalid input data";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Invalid input data", -1));
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"Unknown option: %s extract %s",argv[0],argv[2]);
+        Tcl_AppendResult(interp, "Unknown option: ", argv[0], " extract ", argv[2], (char *)NULL);
         return TCL_ERROR;
     }
 
@@ -2185,7 +2144,6 @@
         }
 
         Tcl_DeleteCommand(interp,argv[0]);
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -2223,12 +2181,11 @@
             }
             else
             {
-                sprintf(interp->result,"Unknown register attribute: %s",argv[i]);
+                Tcl_AppendResult(interp, "Unknown register attribute: ", argv[1], (char *)NULL);
                 return TCL_ERROR;
             }
         }
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -2240,7 +2197,7 @@
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>(G->N()));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->N())));
         return TCL_OK;
     }
 
@@ -2252,7 +2209,7 @@
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>(G->M()));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->M())));
         return TCL_OK;
     }
 
@@ -2270,74 +2227,83 @@
         {
             TNode s = G->DefaultSourceNode();
 
-            if (s==NoNode) interp->result = "*";
-            else sprintf(interp->result,"%lu",static_cast<unsigned long>(s));
+            if (s==NoNode) {
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+            } else {
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(s)));
+            }
         }
         else if (strcmp(argv[2],"-targetNode")==0)
         {
             TNode t = G->DefaultTargetNode();
 
-            if (t==NoNode) interp->result = "*";
-            else sprintf(interp->result,"%lu",static_cast<unsigned long>(t));
+            if (t==NoNode) {
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+            } else {
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(t)));
+            }
         }
         else if (strcmp(argv[2],"-rootNode")==0)
         {
             TNode r = G->DefaultRootNode();
 
-            if (r==NoNode) interp->result = "*";
-            else sprintf(interp->result,"%lu",static_cast<unsigned long>(r));
+            if (r==NoNode) {
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+            } else {
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(r)));
+            }
         }
         else if (strcmp(argv[2],"-metricType")==0)
         {
-            sprintf(interp->result,"%d",G->MetricType());
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->MetricType()));
         }
         else if (strcmp(argv[2],"-sparse")==0)
         {
-            sprintf(interp->result,"%s", (G->IsSparse()) ? "1" : "0");
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->IsSparse() ? 1 : 0));
         }
         else if (strcmp(argv[2],"-directed")==0)
         {
-            sprintf(interp->result,"%s", (G->IsDirected()) ? "1" : "0");
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->IsDirected() ? 1 : 0));
         }
         else if (strcmp(argv[2],"-undirected")==0)
         {
-            sprintf(interp->result,"%s", (G->IsUndirected()) ? "1" : "0");
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->IsUndirected() ? 1 : 0));
         }
         else if (strcmp(argv[2],"-bipartite")==0)
         {
-            sprintf(interp->result,"%s", (G->IsBipartite()) ? "1" : "0");
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->IsBipartite() ? 1 : 0));
         }
         else if (strcmp(argv[2],"-planar")==0)
         {
-            sprintf(interp->result,"%s", (G->IsPlanar()) ? "1" : "0");
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->IsPlanar() ? 1 : 0));
         }
         else if (strcmp(argv[2],"-chordal")==0)
         {
-            sprintf(interp->result,"%s", (G->IsChordal()) ? "1" : "0");
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->IsChordal() ? 1 : 0));
         }
         else if (strcmp(argv[2],"-co-chordal")==0)
         {
-            sprintf(interp->result,"%s", (G->IsChordal(abstractMixedGraph::PERFECT_COMPLEMENT)) ? "1" : "0");
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->IsChordal(abstractMixedGraph::PERFECT_COMPLEMENT) ? 1 : 0));
         }
         else if (strcmp(argv[2],"-balanced")==0)
         {
-            sprintf(interp->result,"%s", (G->IsBalanced()) ? "1" : "0");
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->IsBalanced() ? 1 : 0));
         }
         else if (strcmp(argv[2],"-graphObject")==0)
         {
-            interp->result = "1";
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
         }
         else if (strcmp(argv[2],"-cardinality")==0)
         {
-            sprintf(interp->result,"%f",G->Cardinality());
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->Cardinality()));
         }
         else if (strcmp(argv[2],"-edgeLength")==0)
         {
-            sprintf(interp->result,"%f",G->Length());
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->Length()));
         }
         else if (strcmp(argv[2],"-subgraphWeight")==0)
         {
-            sprintf(interp->result,"%f",G->Weight());
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->Weight()));
         }
         else
         {
@@ -2354,12 +2320,11 @@
     {
         if (!G->IsSparse())
         {
-            interp->result = "Operation applies to sparse graphs only";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Operation applies to sparse graphs only", -1));
             return TCL_ERROR;
         }
 
         static_cast<sparseRepresentation*>(G->Representation()) -> ExplicitParallels();
-        interp->result = "";
         return TCL_OK;
     }
  
@@ -2471,7 +2436,6 @@
             }
         }
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -2484,7 +2448,6 @@
         }
 
         G -> Write(argv[2]);
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -2531,18 +2494,17 @@
 
             if (targetNode!=NoNode && G->Dist(targetNode)<InfFloat)
             {
-                sprintf(interp->result,"%f",G->Dist(targetNode));
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->Dist(targetNode)));
                 return TCL_OK;
             }
             else
             {
-                interp->result = "*";
                 return TCL_OK;
             }
         }
         catch (...) {}
 
-        interp->result = "Unable to assign distance labels";
+        Tcl_SetObjResult(interp, Tcl_NewStringObj("Unable to assign distance labels", -1));
         return TCL_ERROR;
     }
 
@@ -2609,7 +2571,7 @@
             }
         }
 
-        sprintf(interp->result,"%f",retCap);
+        Tcl_SetObjResult(interp, Tcl_NewDoubleObj(retCap));
         return TCL_OK;
     }
 
@@ -2632,11 +2594,11 @@
 
         if (strongConnnectivity)
         {
-            sprintf(interp->result,"%d",G->StronglyEdgeConnected(kappa));
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->StronglyEdgeConnected(kappa)));
         }
         else
         {
-            sprintf(interp->result,"%d",G->EdgeConnected(kappa));
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->EdgeConnected(kappa)));
         }
 
         return TCL_OK;
@@ -2680,12 +2642,11 @@
 
         if (feasible)
         {
-            interp->result = "";
             return TCL_OK;
         }
         else
         {
-            interp->result = "Graph is not 2-connected";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Graph is not 2-connected", -1));
             return TCL_ERROR;
         }
     }
@@ -2702,7 +2663,7 @@
 
             if (threshold<=0)
             {
-                sprintf(interp->result,"Invalid bound specification: %s",argv[pos+1]);
+                Tcl_AppendResult(interp, "Invalid bound specification: ", argv[pos+1], (char *)NULL);
                 return TCL_ERROR;
             }
 
@@ -2712,12 +2673,12 @@
 
         if (chi>0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(chi));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(chi)));
             return TCL_OK;
         }
         else
         {
-            interp->result = "No such structure exists";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("No such structure exists", -1));
             return TCL_ERROR;
         }
     }
@@ -2734,7 +2695,7 @@
 
             if (threshold<=0)
             {
-                sprintf(interp->result,"Invalid bound specification: %s",argv[pos+1]);
+                Tcl_AppendResult(interp, "Invalid bound specification: ", argv[pos+1], (char *)NULL);
                 return TCL_ERROR;
             }
 
@@ -2744,12 +2705,12 @@
 
         if (chi>0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(chi));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(chi)));
             return TCL_OK;
         }
         else
         {
-            interp->result = "No such structure exists";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("No such structure exists", -1));
             return TCL_ERROR;
         }
     }
@@ -2766,7 +2727,7 @@
 
             if (threshold<=0)
             {
-                sprintf(interp->result,"Invalid bound specification: %s",argv[pos+1]);
+                Tcl_AppendResult(interp, "Invalid bound specification: ", argv[pos+1], (char *)NULL);
                 return TCL_ERROR;
             }
 
@@ -2776,12 +2737,12 @@
 
         if (chi>0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(chi));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(chi)));
             return TCL_OK;
         }
         else
         {
-            interp->result = "No such structure exists";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("No such structure exists", -1));
             return TCL_ERROR;
         }
     }
@@ -2794,7 +2755,7 @@
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>(G->StableSet()));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->StableSet())));
         return TCL_OK;
     }
 
@@ -2806,7 +2767,7 @@
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>(G->Clique()));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->Clique())));
         return TCL_OK;
     }
 
@@ -2818,7 +2779,7 @@
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>(G->VertexCover()));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->VertexCover())));
         return TCL_OK;
     }
 
@@ -2830,13 +2791,13 @@
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%d",G->EulerianCycle());
+        Tcl_SetObjResult(interp, Tcl_NewIntObj(G->EulerianCycle()));
         return TCL_OK;
     }
 
     if (strcmp(argv[1],"feedbackArcSet")==0)
     {
-        sprintf(interp->result,"%f",G->FeedbackArcSet());
+        Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->FeedbackArcSet()));
         return TCL_OK;
     }
 
@@ -2855,12 +2816,12 @@
 
         if (ret!=InfFloat)
         {
-            sprintf(interp->result,"%f",ret);
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(ret));
             return TCL_OK;
         }
         else
         {
-            interp->result = "Graph is non-Hamiltonian";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Graph is non-Hamiltonian", -1));
             return TCL_ERROR;
         }
     }
@@ -2892,12 +2853,12 @@
 
         if (ret!=InfFloat)
         {
-            sprintf(interp->result,"%f",ret);
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(ret));
             return TCL_OK;
         }
         else
         {
-            interp->result = "Graph is disconnected";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Graph is disconnected", -1));
             return TCL_ERROR;
         }
     }
@@ -2917,12 +2878,12 @@
 
         if (ret!=InfFloat)
         {
-            sprintf(interp->result,"%f",ret);
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(ret));
             return TCL_OK;
         }
         else
         {
-            interp->result = "Terminal nodes are disconnected";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Terminal nodes are disconnected", -1));
             return TCL_ERROR;
         }
     }
@@ -2949,12 +2910,11 @@
         {
             if (G->AdmissibleBFlow())
             {
-                interp->result = "";
                 return TCL_OK;
             }
             else
             {
-                interp->result = "No such structure exists";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("No such structure exists", -1));
                 return TCL_ERROR;
             }
         }
@@ -2964,12 +2924,12 @@
 
             try
             {
-                sprintf(interp->result,"%f",flowValue);
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(flowValue));
                 return TCL_OK;
             }
             catch (ERCheck)
             {
-                sprintf(interp->result,"Flow is corrupted");
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("FLow is corrupted", -1));
                 return TCL_ERROR;
             }
         }
@@ -2978,12 +2938,12 @@
             try
             {
                 TFloat ret = G->MinCostBFlow();
-                sprintf(interp->result,"%f",ret);
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(ret));
                 return TCL_OK;
             }
             catch (ERRejected)
             {
-                interp->result = "No such structure exists";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("No such structure exists", -1));
                 return TCL_ERROR;
             }
         }
@@ -2992,12 +2952,12 @@
             try
             {
                 TFloat ret = G -> MinCostSTFlow(sourceNode,targetNode);
-                sprintf(interp->result,"%f",ret);
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(ret));
                 return TCL_OK;
             }
             catch (ERCheck)
             {
-                interp->result = "Flow is corrupted";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Flow is corrupted", -1));
                 return TCL_ERROR;
             }
         }
@@ -3013,7 +2973,7 @@
         }
 
         G -> ChinesePostman(adjustUCap);
-        sprintf(interp->result,"%f",G->Weight());
+        Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->Weight()));
         return TCL_OK;
     }
 
@@ -3034,7 +2994,7 @@
             targetNode = atol(argv[pos+1]);
         }
 
-        sprintf(interp->result,"%f",G->MaxCut(sourceNode,targetNode));
+        Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->MaxCut(sourceNode,targetNode)));
 
         G -> InitSubgraph();
 
@@ -3068,40 +3028,44 @@
             if (G->MaxDemand()!=InfCap)
             {
                 if (G->MaxDemand()!=(long int)(G->MaxDemand()))
-                    sprintf(interp->result,"%f",G->MaxDemand());
-                else  sprintf(interp->result,"%ld",(long int)G->MaxDemand());
+                    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->MaxDemand()));
+                else
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(G->MaxDemand()));
             }
-            else interp->result = "*";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[2],"-lowerBound")==0)
         {
             if (G->MaxLCap()!=(long int)(G->MaxLCap()))
-                sprintf(interp->result,"%f",G->MaxLCap());
-            else  sprintf(interp->result,"%ld",(long int)G->MaxLCap());
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->MaxLCap()));
+            else  
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(G->MaxLCap()));
         }
         else if (strcmp(argv[2],"-upperBound")==0)
         {
             if (G->MaxUCap()!=InfCap)
             {
                 if (G->MaxUCap()!=(long int)(G->MaxUCap()))
-                    sprintf(interp->result,"%f",G->MaxUCap());
-                else  sprintf(interp->result,"%ld",(long int)G->MaxUCap());
+                    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->MaxUCap()));
+                else
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(G->MaxUCap()));
             }
-            else interp->result = "*";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[2],"-edgeLength")==0)
         {
             if (G->MaxLength()!=InfFloat)
             {
                 if (G->MaxLength()!=(long int)(G->MaxLength()))
-                    sprintf(interp->result,"%f",G->MaxLength());
-                else  sprintf(interp->result,"%ld",(long int)G->MaxLength());
+                    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->MaxLength()));
+                else
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(G->MaxLength()));
             }
-            else interp->result = "*";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else
         {
-            sprintf(interp->result,"Unknown graph attribute: %s",argv[2]);
+            Tcl_AppendResult(interp, "Unknown graph attribute: ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -3119,23 +3083,23 @@
 
         if (strcmp(argv[2],"-nodeDemand")==0)
         {
-            sprintf(interp->result,"%d",G->CDemand());
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->CDemand()));
         }
         else if (strcmp(argv[2],"-lowerBound")==0)
         {
-            sprintf(interp->result,"%d",G->CLCap());
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->CLCap()));
         }
         else if (strcmp(argv[2],"-upperBound")==0)
         {
-            sprintf(interp->result,"%d",G->CUCap());
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->CUCap()));
         }
         else if (strcmp(argv[2],"-edgeLength")==0)
         {
-            sprintf(interp->result,"%d",G->CLength());
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->CLength()));
         }
         else
         {
-            sprintf(interp->result,"Unknown graph attribute: %s",argv[2]);
+            Tcl_AppendResult(interp, "Unknown graph attribute: ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -3219,7 +3183,7 @@
                 }
                 else
                 {
-                    sprintf(interp->result,"Unknown metric type: %s",argv[i+1]);
+                    Tcl_AppendResult(interp, "Unknown metric type: ", argv[i+1], (char *)NULL);
                     return TCL_ERROR;
                 }
 
@@ -3229,17 +3193,15 @@
             {
                 TArc a = (strcmp(argv[i+1],"*")!=0) ? TArc(atol(argv[i+1])) : NoArc;
                 G -> MarkExteriorFace(a);
-                interp->result = "";
                 return GOSH_OK;
             }
             else
             {
-                sprintf(interp->result,"Unknown graph attribute: %s",argv[i]);
+                Tcl_AppendResult(interp, "Unknown graph attribute: ", argv[i], (char *)NULL);
                 return TCL_ERROR;
             }
         }
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -3248,7 +3210,7 @@
     {
         if (argc!=4)
         {
-            interp->result = "Missing end nodes";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing end nodes", -1));
             return TCL_ERROR;
         }
 
@@ -3256,8 +3218,8 @@
         TNode v = (TArc)atol(argv[3]);
         TArc a = G->Adjacency(u,v);
 
-        if (a==NoArc) interp->result = "*";
-        else sprintf(interp->result,"%lu",static_cast<unsigned long>(a));
+        if (a==NoArc) Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+        else Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(a)));
 
         return TCL_OK;
     }
@@ -3275,6 +3237,8 @@
 int Goblin_Node_Cmd (abstractMixedGraph *G,Tcl_Interp* interp,int argc,
     _CONST_QUAL_ char* argv[]) throw(ERRejected,ERRange)
 {
+    Tcl_ResetResult(interp);
+
     if (argc<3)
     {
         WrongNumberOfArguments(interp,argc,argv);
@@ -3289,7 +3253,7 @@
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>(G->InsertNode()));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->InsertNode())));
         return TCL_OK;
     }
 
@@ -3304,7 +3268,6 @@
     if (strcmp(argv[3],"delete")==0)
     {
         G->DeleteNode(v);
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -3313,62 +3276,58 @@
         if (strcmp(argv[4],"-firstIncidence")==0)
         {
             if (G->First(v)!=NoArc)
-            {
-                sprintf(interp->result,"%lu",static_cast<unsigned long>(G->First(v)));
-            }
-            else interp->result = "*";
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->First(v))));
+            else 
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[4],"-nodeDemand")==0)
         {
-            sprintf(interp->result,"%g",static_cast<double>(G->Demand(v)));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(static_cast<double>(G->Demand(v))));
         }
         else if (strcmp(argv[4],"-cx")==0)
         {
-            sprintf(interp->result,"%f",static_cast<double>(G->C(v,0)));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(static_cast<double>(G->C(v,0))));
         }
         else if (strcmp(argv[4],"-cy")==0)
         {
-            sprintf(interp->result,"%f",static_cast<double>(G->C(v,1)));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(static_cast<double>(G->C(v,1))));
         }
         else if (strcmp(argv[4],"-distance")==0)
         {
             if (G->Dist(v)!=InfFloat)
-            {
-                sprintf(interp->result,"%g",static_cast<double>(G->Dist(v)));
-            }
-            else interp->result = "*";
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(static_cast<double>(G->Dist(v))));
+            else 
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[4],"-potential")==0)
         {
-            sprintf(interp->result,"%g",static_cast<double>(G->Pi(v)));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(static_cast<double>(G->Pi(v))));
         }
         else if (strcmp(argv[4],"-nodeColour")==0)
         {
             if (G->NodeColour(v)!=NoNode)
-            {
-                sprintf(interp->result,"%lu",static_cast<unsigned long>(G->NodeColour(v)));
-            }
-            else interp->result = "*";
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->NodeColour(v))));
+            else 
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[4],"-predecessorArc")==0)
         {
             if (G->Pred(v)!=NoArc)
-            {
-                sprintf(interp->result,"%lu",static_cast<unsigned long>(G->Pred(v)));
-            }
-            else interp->result = "*";
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->Pred(v))));
+            else
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[4],"-degree")==0)
         {
-            sprintf(interp->result,"%g",G->Deg(v));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->Deg(v)));
         }
         else if (strcmp(argv[4],"-hidden")==0)
         {
-            sprintf(interp->result,"%d",G->HiddenNode(v));
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->HiddenNode(v)));
         }
         else
         {
-            sprintf(interp->result,"Unknown node attribute: %s",argv[4]);
+            Tcl_AppendResult(interp, "Unknown node attribute: ", argv[4], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -3383,7 +3342,7 @@
             {
                 if (!G->IsSparse())
                 {
-                    interp->result = "Operation applies to sparse graphs only";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Operation applies to sparse graphs only", -1));
                     return TCL_ERROR;
                 }
 
@@ -3422,16 +3381,15 @@
             }
             else
             {
-                sprintf(interp->result,"Unknown node attribute: %s",argv[i]);
+                Tcl_AppendResult(interp, "Unknown node attribute: ", argv[i], (char *)NULL);
                 return TCL_ERROR;
             }
         }
 
-        interp->result = "";
         return TCL_OK;
     }
 
-    sprintf(interp->result,"Unknown option: %s node %s",argv[0],argv[2]);
+    Tcl_AppendResult(interp, "Unknown option: ", argv[0], " node ", argv[2], (char *)NULL);
     return TCL_ERROR;
 }
 
@@ -3449,14 +3407,14 @@
     {
         if (argc!=5)
         {
-            interp->result = "Missing end nodes";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing end nodes", -1));
             return TCL_ERROR;
         }
 
         TNode u = TArc(atol(argv[3]));
         TNode v = TArc(atol(argv[4]));
 
-        sprintf(interp->result,"%lu",static_cast<unsigned long>(G->InsertArc(u,v)));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->InsertArc(u,v))));
         return TCL_OK;
     }
 
@@ -3466,12 +3424,11 @@
     {
         if (!G->IsSparse())
         {
-            interp->result = "Operation applies to sparse graphs only";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Operation applies to sparse graphs only", -1));
             return TCL_ERROR;
         }
 
         static_cast<sparseRepresentation*>(G->Representation()) -> DeleteArc(a);
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -3479,12 +3436,11 @@
     {
         if (!G->IsSparse())
         {
-            interp->result = "Operation applies to sparse graphs only";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Operation applies to sparse graphs only", -1));
             return TCL_ERROR;
         }
 
         static_cast<sparseRepresentation*>(G->Representation()) -> ContractArc(a);
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -3492,12 +3448,11 @@
     {
         if (!G->IsSparse())
         {
-            interp->result = "Operation applies to sparse graphs only";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Operation applies to sparse graphs only", -1));
             return TCL_ERROR;
         }
 
         static_cast<sparseRepresentation*>(G->Representation()) -> ReleaseEdgeControlPoints(a);
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -3505,12 +3460,11 @@
     {
         if (!G->IsSparse())
         {
-            interp->result = "Operation applies to sparse graphs only";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Operation applies to sparse graphs only", -1));
             return TCL_ERROR;
         }
 
         static_cast<sparseRepresentation*>(G->Representation()) -> FlipArc(a);
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -3518,75 +3472,70 @@
     {
         if (strcmp(argv[4],"-righthandArc")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(G->Right(a,G->StartNode(a))));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->Right(a,G->StartNode(a)))));
         }
         else if (strcmp(argv[4],"-endNode")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(G->EndNode(a)));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->EndNode(a))));
         }
         else if (strcmp(argv[4],"-startNode")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(G->StartNode(a)));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->StartNode(a))));
         }
         else if (strcmp(argv[4],"-directed")==0)
         {
-            sprintf(interp->result,"%d",G->Orientation(a));
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->Orientation(a)));
         }
         else if (strcmp(argv[4],"-upperBound")==0)
         {
             if (G->UCap(a)!=InfCap)
-            {
-                sprintf(interp->result,"%g",static_cast<double>(G->UCap(a)));
-            }
-            else  sprintf(interp->result,"*");
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->UCap(a)));
+            else
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[4],"-lowerBound")==0)
         {
-            sprintf(interp->result,"%g",static_cast<double>(G->LCap(a)));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(static_cast<double>(G->LCap(a))));
         }
         else if (strcmp(argv[4],"-edgeLength")==0)
         {
             if (G->Length(a)!=InfFloat)
-            {
-                sprintf(interp->result,"%g",static_cast<double>(G->Length(a)));
-            }
-            else interp->result = "*";
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->Length(a)));
+            else
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[4],"-edgeColour")==0)
         {
             if (G->EdgeColour(a)!=NoArc)
-            {
-                sprintf(interp->result,"%lu",static_cast<unsigned long>(G->EdgeColour(a)));
-            }
-            else interp->result = "*";
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->EdgeColour(a))));
+            else
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[4],"-subgraph")==0)
         {
-            sprintf(interp->result,"%g",static_cast<double>(G->Sub(a)));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(G->Sub(a)));
         }
         else if (strcmp(argv[4],"-labelAnchorPoint")==0)
         {
             if (G->ArcLabelAnchor(a)!=NoNode)
-            {
-                sprintf(interp->result,"%lu",static_cast<unsigned long>(G->ArcLabelAnchor(a)));
-            }
-            else interp->result = "*";
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->ArcLabelAnchor(a))));
+            else
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[4],"-portNode")==0)
         {
             if (G->PortNode(a)!=NoNode)
-            {
-                sprintf(interp->result,"%lu",static_cast<unsigned long>(G->PortNode(a)));
-            }
-            else interp->result = "*";
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(G->PortNode(a))));
+            else
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
         }
         else if (strcmp(argv[4],"-hidden")==0)
         {
-            sprintf(interp->result,"%d",G->HiddenArc(a));
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(G->HiddenArc(a)));
         }
         else
         {
-            sprintf(interp->result,"Unknown node attribute: %s",argv[4]);
+            Tcl_AppendResult(interp, "Unknown node attribute: ", argv[4], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -3619,7 +3568,7 @@
             {
                 if (!G->IsSparse())
                 {
-                    interp->result = "Operation applies to sparse graphs only";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Operation applies to sparse graphs only", -1));
                     return TCL_ERROR;
                 }
 
@@ -3644,12 +3593,11 @@
             }
             else
             {
-                sprintf(interp->result,"Unknown arc attribute: %s",argv[i]);
+                Tcl_AppendResult(interp, "Unknown arc attribute: ", argv[i], (char *)NULL);
                 return TCL_ERROR;
             }
         }
 
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -3663,7 +3611,7 @@
 
         if (!G->IsSparse())
         {
-            interp->result = "Operation applies to sparse graphs only";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Operation applies to sparse graphs only", -1));
             return TCL_ERROR;
         }
 
@@ -3671,20 +3619,20 @@
 
         if (strcmp(argv[4],"-labelAnchorPoint")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(GR->ProvideArcLabelAnchor(a)));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(GR->ProvideArcLabelAnchor(a))));
             return TCL_OK;
         }
 
         if (strcmp(argv[4],"-portNode")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(GR->ProvidePortNode(a)));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(GR->ProvidePortNode(a))));
             return TCL_OK;
         }
 
-        sprintf(interp->result,"Unknown layout point type: %s",argv[4]);
+        Tcl_AppendResult(interp, "Unknown layout point type: ", argv[4], (char *)NULL);
         return TCL_ERROR;
     }
 
-    sprintf(interp->result,"Unknown option: %s arc %s",argv[0],argv[2]);
+    Tcl_AppendResult(interp, "Unknown option: ", argv[0], " arc ", argv[2], (char *)NULL);
     return TCL_ERROR;
 }
--- shell_src/goshLin.cpp.orig	2013-06-04 16:26:29.000000000 +0200
+++ shell_src/goshLin.cpp	2013-06-04 16:49:40.000000000 +0200
@@ -16,6 +16,8 @@
 int Goblin_Ilp_Cmd (ClientData clientData,Tcl_Interp* interp,
     int argc,_CONST_QUAL_ char* argv[])
 {
+    Tcl_ResetResult(interp);
+
     mipInstance* XLP = reinterpret_cast<mipInstance*>(clientData);
 
     if (setjmp(goblinThreadData[Goblin_MyThreadIndex()].jumpBuffer) != 0)
@@ -27,14 +29,12 @@
         if (argc==2 && strcmp(argv[1],"delete")==0)
         {
             Tcl_DeleteCommand(interp,argv[0]);
-            interp->result = "";
             return TCL_OK;
         }
 
         if (argc==2 && strcmp(argv[1],"reset")==0)
         {
             XLP -> ResetBasis();
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -59,7 +59,6 @@
 
             XLP -> Write(argv[argc-1],f);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -74,7 +73,6 @@
             if (strcmp(argv[2],"bas")==0 || strcmp(argv[2],"basis")==0)
             {
                 XLP -> ReadBASFile(argv[3]);
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -82,17 +80,15 @@
             {
                 if (XLP->K()>0 || XLP->L()>0)
                 {
-                    interp->result = "Instance must be initial";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Instance must be initial", -1));
                     return TCL_ERROR;
                 }
 
                 XLP -> ReadMPSFile(argv[3]);
-                interp->result = "";
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: %s read %s",
-                argv[0],argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[0], " read ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -104,7 +100,7 @@
                 return TCL_ERROR;
             }
 
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(XLP->K()));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(XLP->K())));
             return TCL_OK;
         }
 
@@ -116,7 +112,7 @@
                 return TCL_ERROR;
             }
 
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(XLP->L()));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(XLP->L())));
             return TCL_OK;
         }
 
@@ -130,7 +126,7 @@
 
             if (strcmp(argv[2],"-mipObject")==0)
             {
-                interp->result = "1";
+                Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
                 return TCL_OK;
             }
 
@@ -149,8 +145,9 @@
             mipFactory *theMipFactory = (mipFactory*)CT->pMipFactory;
 
             if (theMipFactory->Orientation()==mipFactory::ROW_ORIENTED)
-                interp->result = "row";
-            else interp->result = "column";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("row", -1));
+            else
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("column", -1));
 
             return TCL_OK;
         }
@@ -164,10 +161,11 @@
             }
 
             if (XLP->ObjectSense()==managedObject::MAXIMIZE)
-                interp->result = "maximize";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("maximize", -1));
             else if (XLP->ObjectSense()==managedObject::MINIMIZE)
-                interp->result = "minimize";
-            else interp->result = "flat";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("minimize", -1));
+            else
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("flat", -1));
 
             return TCL_OK;
         }
@@ -181,7 +179,6 @@
             }
 
             XLP -> SetObjectSense(managedObject::MAXIMIZE);
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -194,7 +191,6 @@
             }
 
             XLP -> SetObjectSense(managedObject::MINIMIZE);
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -207,7 +203,6 @@
             }
 
             XLP -> FlipObjectSense();
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -220,7 +215,6 @@
             }
 
             XLP -> SetObjectSense(managedObject::NO_OBJECTIVE);
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -233,7 +227,6 @@
             }
 
             XLP -> Strip();
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -249,7 +242,6 @@
             TIndex l = TIndex(atol(argv[3]));
             TIndex nz = TIndex(atol(argv[4]));
             XLP -> Resize(k,l,nz);
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -263,7 +255,7 @@
 
             TIndex i = TIndex(atol(argv[2]));
             TIndex j = TIndex(atol(argv[3]));
-            sprintf(interp->result,"%g", XLP -> Coeff(i,j));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP -> Coeff(i,j)));
             return TCL_OK;
         }
 
@@ -285,11 +277,11 @@
 
                 TIndex j = TIndex(atol(argv[3]));
                 TIndex i = TIndex(atol(argv[4]));
-                sprintf(interp->result,"%g", XLP->Tableau(j,i));
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->Tableau(j,i)));
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: %s tableau %s",argv[0],argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[0], " tableau ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -311,11 +303,11 @@
 
                 TIndex i = TIndex(atol(argv[3]));
                 TIndex j = TIndex(atol(argv[4]));
-                sprintf(interp->result,"%g", XLP->BaseInverse(i,j));
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->BaseInverse(i,j)));
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: %s inverse %s",argv[0],argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[0], " inverse ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -329,17 +321,17 @@
 
             if (strcmp(argv[2],"primal")==0)
             {
-                sprintf(interp->result,"%d",XLP->PrimalFeasible());
+                Tcl_SetObjResult(interp, Tcl_NewIntObj(XLP->PrimalFeasible()));
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"dual")==0)
             {
-                sprintf(interp->result,"%d",XLP->DualFeasible());
+                Tcl_SetObjResult(interp, Tcl_NewIntObj(XLP->DualFeasible()));
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: %s feasible %s",argv[0],argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[0], " feasible ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -357,7 +349,6 @@
                 TIndex j = TIndex(atol(argv[4]));
                 TFloat a = TFloat(atof(argv[5]));
                 XLP -> SetCoeff(i,j,a);
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -376,7 +367,6 @@
                     XLP -> SetIndex(i,j,mipInstance::UPPER);
                 else XLP -> SetIndex(i,j,mipInstance::LOWER);
 
-                interp->result = "";
                 return TCL_OK;
             }
         }
@@ -387,8 +377,10 @@
             {
                 TRestr i = XLP-> PivotRow();
 
-                if (i==NoRestr) interp->result = "*";
-                else sprintf(interp->result,"%ld",i);
+                if (i==NoRestr)
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+                else
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(i));
 
                 return TCL_OK;
             }
@@ -398,12 +390,12 @@
                 TRestr i = XLP-> PivotRow();
                 mipInstance::TLowerUpper tp = XLP-> PivotDirection();
 
-                if (i==NoRestr) interp->result = "";
-                else
+                if (i!=NoRestr)
                 {
                     if (tp==mipInstance::LOWER)
-                        interp->result = "lower";
-                    else interp->result = "upper";
+                        Tcl_SetObjResult(interp, Tcl_NewStringObj("lower", -1));
+                    else
+                        Tcl_SetObjResult(interp, Tcl_NewStringObj("upper", -1));
                 }
 
                 return TCL_OK;
@@ -413,8 +405,10 @@
             {
                 TVar i =XLP-> PivotColumn();
 
-                if (i==NoVar) interp->result = "*";
-                else sprintf(interp->result,"%ld",i);
+                if (i==NoVar)
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+                else
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(i));
 
                 return TCL_OK;
             }
@@ -433,7 +427,6 @@
             if (strcmp(argv[4],"lower")==0) tp = mipInstance::LOWER;
 
             XLP -> Pivot(i,j,tp);
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -441,7 +434,7 @@
         {
             if (argc==2 || strcmp(argv[2],"primal")==0)
             {
-                sprintf(interp->result,"%g", XLP->ObjVal());
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->ObjVal()));
                 return TCL_OK;
             }
 
@@ -453,11 +446,11 @@
 
             if (strcmp(argv[2],"dual")==0)
             {
-                interp->result = "Not implemented yet";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Not implemented yet", -1));
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: %s objective %s",argv[0],argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[0], " objective ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -472,32 +465,28 @@
             if (strcmp(argv[2],"lp")==0)
             {
                 XLP -> SolveLP();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"primal")==0)
             {
                 XLP -> SolvePrimal();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"dual")==0)
             {
                 XLP -> SolveDual();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"mixed")==0 || strcmp(argv[2],"mip")==0)
             {
                 XLP -> SolveMIP();
-                interp->result = "";
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: %s solve %s",argv[0],argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[0], " solve ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -512,18 +501,16 @@
             if (strcmp(argv[2],"primal")==0)
             {
                 XLP -> StartPrimal();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"dual")==0)
             {
                 XLP -> StartDual();
-                interp->result = "";
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: %s start %s",argv[0],argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[0], " start ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -541,7 +528,6 @@
                 Goblin_Ilp_Cmd,reinterpret_cast<ClientData>(YLP),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Ilp);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -559,7 +545,6 @@
                 Goblin_Ilp_Cmd,reinterpret_cast<ClientData>(YLP),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Ilp);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -577,7 +562,6 @@
                 Goblin_Ilp_Cmd,reinterpret_cast<ClientData>(YLP),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Ilp);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -618,7 +602,7 @@
         TFloat l = TFloat(atof(argv[3]));
         TFloat u = TFloat(atof(argv[4]));
 
-        sprintf(interp->result,"%ld",XLP->AddRestr(l,u));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(XLP->AddRestr(l,u)));
         return TCL_OK;
     }
 
@@ -632,8 +616,10 @@
 
         TRestr i = XLP->RestrIndex((char*)argv[3]);
 
-        if (i==NoRestr) interp->result = "*";
-        else sprintf(interp->result,"%ld",i);
+        if (i==NoRestr)
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+        else
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(i));
 
         return TCL_OK;
     }
@@ -643,51 +629,55 @@
     if (strcmp(argv[3],"cancel")==0)
     {
         XLP -> DeleteRestr(i);
-        interp->result = "";
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"ubound")==0)
     {
-        if (XLP->UBound(i)==InfFloat) sprintf(interp->result,"*");
-        else sprintf(interp->result,"%g",XLP->UBound(i));
+        if (XLP->UBound(i)==InfFloat)
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+        else
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->UBound(i)));
 
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"lbound")==0)
     {
-        if (XLP->LBound(i)==-InfFloat) sprintf(interp->result,"*");
-        else sprintf(interp->result,"%g",XLP->LBound(i));
+        if (XLP->LBound(i)==-InfFloat)
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+        else
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->LBound(i)));
 
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"label")==0)
     {
-        sprintf(interp->result,"%s",
-            XLP->RestrLabel(i,managedObject::OWNED_BY_RECEIVER));
+        Tcl_SetObjResult(interp, Tcl_NewStringObj(XLP->RestrLabel(i,managedObject::OWNED_BY_RECEIVER), -1));
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"type")==0)
     {
         if (XLP->RestrType(i)==mipInstance::NON_BASIC)
-            interp->result = "non_basic";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("non_basic", -1));
         if (XLP->RestrType(i)==mipInstance::BASIC_UB)
-            interp->result = "upper";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("upper", -1));
         if (XLP->RestrType(i)==mipInstance::BASIC_LB)
-            interp->result = "lower";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("lower", -1));
         if (XLP->RestrType(i)==mipInstance::RESTR_CANCELED)
-            interp->result = "canceled";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("canceled", -1));
 
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"index")==0)
     {
-        if (XLP->RevIndex(i)==NoIndex) sprintf(interp->result,"*");
-        else sprintf(interp->result,"%ld",XLP->RevIndex(i));
+        if (XLP->RevIndex(i)==NoIndex)
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+        else
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(XLP->RevIndex(i)));
 
         return TCL_OK;
     }
@@ -702,18 +692,25 @@
 
         if (strcmp(argv[4],"lower")==0)
         {
-            sprintf(interp->result,"%g",XLP->Y(i,mipInstance::LOWER));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->Y(i,mipInstance::LOWER)));
             return TCL_OK;
         }
 
         if (strcmp(argv[4],"upper")==0)
         {
-            sprintf(interp->result,"%g",XLP->Y(i,mipInstance::UPPER));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->Y(i,mipInstance::UPPER)));
             return TCL_OK;
         }
 
+#if TCL_MAJOR_VERSION > 8 || (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION > 5)
+        Tcl_Obj *resObj = Tcl_NewObj();
+        Tcl_AppendPrintfToObj(resObj, "Unknown option: %s row %ld value %s",
+            argv[0],i,argv[4]);
+        Tcl_SetObjResult(interp, resObj);
+#else
         sprintf(interp->result,"Unknown option: %s row %ld value %s",
             argv[0],i,argv[4]);
+#endif
         return TCL_ERROR;
     }
 
@@ -727,18 +724,25 @@
 
         if (strcmp(argv[4],"lower")==0)
         {
-            sprintf(interp->result,"%g",XLP->Slack(i,mipInstance::LOWER));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->Slack(i,mipInstance::LOWER)));
             return TCL_OK;
         }
 
         if (strcmp(argv[4],"upper")==0)
         {
-            sprintf(interp->result,"%g",XLP->Slack(i,mipInstance::UPPER));
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->Slack(i,mipInstance::UPPER)));
             return TCL_OK;
         }
 
+#if TCL_MAJOR_VERSION > 8 || (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION > 5)
+        Tcl_Obj *resObj = Tcl_NewObj();
+        Tcl_AppendPrintfToObj(resObj, "Unknown option: %s rebound %ld value %s",
+            argv[0],i,argv[4]);
+        Tcl_SetObjResult(interp, resObj);
+#else
         sprintf(interp->result,"Unknown option: %s redbound %ld value %s",
             argv[0],i,argv[4]);
+#endif
         return TCL_ERROR;
     }
 
@@ -757,7 +761,6 @@
             if (strcmp(argv[5],"*")!=0) uu = TFloat(atof(argv[5]));
 
             XLP -> SetUBound(i,uu);
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -768,22 +771,20 @@
             if (strcmp(argv[5],"*")!=0) ll = TFloat(atof(argv[5]));
 
             XLP -> SetLBound(i,ll);
-            interp->result = "";
             return TCL_OK;
         }
 
         if (strcmp(argv[4],"label")==0)
         {
             XLP -> SetRestrLabel(i,(char*)argv[5],managedObject::OWNED_BY_SENDER);
-            interp->result = "";
             return TCL_OK;
         }
 
-        sprintf(interp->result,"Unknown option: %s row %s set %s",argv[0],argv[2],argv[4]);
+        Tcl_AppendResult(interp, "Unknown option: ", argv[0], " row ", argv[2], " set ", argv[4], (char *)NULL);
         return TCL_ERROR;
     }
 
-    sprintf(interp->result,"Unknown option: %s row %s",argv[0],argv[2]);
+    Tcl_AppendResult(interp, "Unknown option: ", argv[0], " row ", argv[2], (char *)NULL);
     return TCL_ERROR;
 }
 
@@ -815,12 +816,12 @@
         {
             if (strcmp(argv[3],"float")!=0)
             {
-                interp->result = "Unknown variable type";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Unknown variable type", -1));
                 return TCL_ERROR;
             }
         }
 
-        sprintf(interp->result,"%ld",XLP->AddVar(l,u,tp));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(XLP->AddVar(l,u,tp)));
         return TCL_OK;
     }
 
@@ -834,8 +835,10 @@
 
         TVar i = XLP->VarIndex((char*)argv[3]);
 
-        if (i==NoVar) interp->result = "*";
-        else sprintf(interp->result,"%ld",i);
+        if (i==NoVar)
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+        else
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(i));
 
         return TCL_OK;
     }
@@ -845,14 +848,15 @@
     if (strcmp(argv[3],"cancel")==0)
     {
         XLP -> DeleteVar(i);
-        interp->result = "";
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"urange")==0)
     {
-        if (XLP->URange(i)==InfFloat) sprintf(interp->result,"*");
-        else sprintf(interp->result,"%g",XLP->URange(i));
+        if (XLP->URange(i)==InfFloat)
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+        else
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->URange(i)));
 
         return TCL_OK;
     }
@@ -860,46 +864,47 @@
 
     if (strcmp(argv[3],"lrange")==0)
     {
-        if (XLP->LRange(i)==-InfFloat) sprintf(interp->result,"*");
-        else sprintf(interp->result,"%g",XLP->LRange(i));
+        if (XLP->LRange(i)==-InfFloat)
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("*", -1));
+        else
+            Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->LRange(i)));
 
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"cost")==0)
     {
-        sprintf(interp->result,"%g",XLP->Cost(i));
+        Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->Cost(i)));
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"type")==0)
     {
         if (XLP->VarType(i)==mipInstance::VAR_INT)
-            interp->result = "integer";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("integer", -1));
         if (XLP->VarType(i)==mipInstance::VAR_FLOAT)
-            interp->result = "float";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("float", -1));
         if (XLP->VarType(i)==mipInstance::VAR_CANCELED)
-            interp->result = "canceled";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("canceled", -1));
 
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"label")==0)
     {
-        sprintf(interp->result,"%s",
-            XLP->VarLabel(i,managedObject::OWNED_BY_RECEIVER));
+        Tcl_SetObjResult(interp, Tcl_NewStringObj(XLP->VarLabel(i,managedObject::OWNED_BY_RECEIVER), -1));
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"index")==0)
     {
-        sprintf(interp->result,"%ld",XLP->Index(i));
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(XLP->Index(i)));
         return TCL_OK;
     }
 
     if (strcmp(argv[3],"value")==0)
     {
-        sprintf(interp->result,"%g",XLP->X(i));
+        Tcl_SetObjResult(interp, Tcl_NewDoubleObj(XLP->X(i)));
         return TCL_OK;
     }
 
@@ -908,18 +913,16 @@
         if (strcmp(argv[4],"int")==0 || strcmp(argv[4],"integer")==0)
         {
             XLP -> SetVarType(i,mipInstance::VAR_INT);
-            interp->result = "";
             return TCL_OK;
         }
 
         if (strcmp(argv[4],"float")==0)
         {
             XLP -> SetVarType(i,mipInstance::VAR_FLOAT);
-            interp->result = "";
             return TCL_OK;
         }
 
-        sprintf(interp->result,"Unknown option: %s variable %s mark %s",argv[0],argv[2],argv[4]);
+        Tcl_AppendResult(interp, "Unknown option: ", argv[0], " variable ", argv[2], " mark ", argv[4], (char *)NULL);
         return TCL_ERROR;
     }
 
@@ -938,7 +941,6 @@
             if (strcmp(argv[5],"*")!=0) uu = TFloat(atof(argv[5]));
 
             XLP -> SetURange(i,uu);
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -947,7 +949,6 @@
             TFloat ll = -InfFloat;
             if (strcmp(argv[5],"*")!=0) ll = TFloat(atof(argv[5]));
             XLP -> SetLRange(i,ll);
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -955,22 +956,20 @@
         {
             TFloat cc = TFloat(atof(argv[5]));
             XLP -> SetCost(i,cc);
-            interp->result = "";
             return TCL_OK;
         }
 
         if (strcmp(argv[4],"label")==0)
         {
             XLP -> SetVarLabel(i,(char*)argv[5],managedObject::OWNED_BY_SENDER);
-            interp->result = "";
             return TCL_OK;
         }
 
-        sprintf(interp->result,"Unknown option: %s variable %s set %s",argv[0],argv[2],argv[4]);
+        Tcl_AppendResult(interp, "Unknown option: ", argv[0], " variable ", argv[2], " set ", argv[4], (char *)NULL);
         return TCL_ERROR;
     }
 
-    sprintf(interp->result,"Unknown option: %s variable %s",argv[0],argv[2]);
+    Tcl_AppendResult(interp, "Unknown option: ", argv[0], " variable ", argv[2], (char *)NULL);
     return TCL_ERROR;
 }
 
--- shell_src/goshMain.cpp.orig	2013-06-04 17:06:23.000000000 +0200
+++ shell_src/goshMain.cpp	2013-06-04 17:26:19.000000000 +0200
@@ -298,7 +298,7 @@
 
     if (Tcl_EvalFile(interp2,(char*)scriptName)==TCL_ERROR)
     {
-        sprintf(CT->logBuffer,"...Thread exit status: %s",interp2->result);
+        sprintf(CT->logBuffer,"...Thread exit status: %s",Tcl_GetStringResult(interp2));
         CT -> LogEntry(LOG_IO,NoHandle,CT->logBuffer);
     }
 
@@ -337,6 +337,8 @@
 int Goblin_Cmd (ClientData clientData,Tcl_Interp* interp,int argc,
     _CONST_QUAL_ char* argv[])
 {
+    Tcl_ResetResult(interp);
+
     if (argc<2)
     {
         WrongNumberOfArguments(interp,argc,argv);
@@ -366,7 +368,6 @@
                 Goblin_Mixed_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Mixed_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -384,7 +385,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -410,7 +410,6 @@
                 Goblin_Sparse_Bigraph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Bigraph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -428,7 +427,6 @@
                 Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -446,7 +444,6 @@
                 Goblin_Dense_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Dense_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -470,7 +467,6 @@
                 Goblin_Dense_Bigraph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Dense_Bigraph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -488,7 +484,6 @@
                 Goblin_Dense_Digraph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Dense_Digraph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -539,7 +534,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -589,7 +583,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -676,7 +669,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -739,7 +731,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -755,7 +746,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -773,7 +763,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -795,7 +784,6 @@
                 Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -818,7 +806,6 @@
                 Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -836,7 +823,6 @@
                 Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Digraph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -851,7 +837,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -866,7 +851,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -881,7 +865,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -921,7 +904,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -937,7 +919,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -962,7 +943,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -980,7 +960,6 @@
                 Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(G),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Sparse_Graph);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -990,7 +969,7 @@
         {
             if (goblinController::pMipFactory==NULL)
             {
-                interp->result = "No LP solver loaded";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("No LP solver loaded", -1));
                 return TCL_ERROR;
             }
 
@@ -1016,7 +995,6 @@
                 Goblin_Ilp_Cmd,reinterpret_cast<ClientData>(XLP),
                 (Tcl_CmdDeleteProc *)Goblin_Delete_Ilp);
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1054,7 +1032,7 @@
 
             if (!X)
             {
-                interp->result = "Unknown format specification";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Unknown format specification", -1));
                 return TCL_ERROR;
             }
 
@@ -1141,7 +1119,6 @@
                     (Tcl_CmdDeleteProc *)Goblin_Delete_Mixed_Graph);
             }
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1162,13 +1139,12 @@
                 Tcl_CreateCommand(interp,const_cast<char*>(argv[2]),
                     Goblin_Ilp_Cmd,reinterpret_cast<ClientData>(Y),NULL);
 
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (!X->IsGraphObject())
             {
-                sprintf(interp->result,"Not a graph object ID: %s",argv[3]);
+                Tcl_AppendResult(interp, "Not a graph object ID: ", argv[3], (char *)NULL);
                 return TCL_ERROR;
             }
 
@@ -1179,7 +1155,6 @@
                 Tcl_CreateCommand(interp,const_cast<char*>(argv[2]),
                     Goblin_Mixed_Graph_Cmd,reinterpret_cast<ClientData>(Y),NULL);
 
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1190,7 +1165,6 @@
                 Tcl_CreateCommand(interp,const_cast<char*>(argv[2]),
                     Goblin_Sparse_Graph_Cmd,reinterpret_cast<ClientData>(Y),NULL);
 
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1201,7 +1175,6 @@
                 Tcl_CreateCommand(interp,const_cast<char*>(argv[2]),
                     Goblin_Dense_Graph_Cmd,reinterpret_cast<ClientData>(Y),NULL);
 
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1212,7 +1185,6 @@
                 Tcl_CreateCommand(interp,const_cast<char*>(argv[2]),
                     Goblin_Sparse_Bigraph_Cmd,reinterpret_cast<ClientData>(Y),NULL);
 
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1223,7 +1195,6 @@
                 Tcl_CreateCommand(interp,const_cast<char*>(argv[2]),
                     Goblin_Dense_Bigraph_Cmd,reinterpret_cast<ClientData>(Y),NULL);
 
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1234,7 +1205,6 @@
                 Tcl_CreateCommand(interp,const_cast<char*>(argv[2]),
                     Goblin_Sparse_Digraph_Cmd,reinterpret_cast<ClientData>(Y),NULL);
 
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1245,7 +1215,6 @@
                 Tcl_CreateCommand(interp,const_cast<char*>(argv[2]),
                     Goblin_Dense_Digraph_Cmd,reinterpret_cast<ClientData>(Y),NULL);
 
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1256,11 +1225,10 @@
                 Tcl_CreateCommand(interp,const_cast<char*>(argv[2]),
                     Goblin_Balanced_FNW_Cmd,reinterpret_cast<ClientData>(Y),NULL);
 
-                interp->result = "";
                 return TCL_OK;
             }
 
-            interp->result = "Unknown object type";
+            Tcl_SetObjResult(interp, Tcl_NewStringObj("Unknown object type", -1));
             return TCL_ERROR;
         }
 
@@ -1293,7 +1261,7 @@
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: goblin export %s",argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: goblin export ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -1316,7 +1284,6 @@
                 else CT->LogEntry(MSG_ECHO,NoHandle,(char*)argv[2]);
             }
 
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1334,7 +1301,7 @@
 
                 if (threadIndex>=MAX_NUM_THREADS)
                 {
-                    interp->result = "No more thread handle available";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("No more thread handle available", -1));
                     return TCL_ERROR;
                 }
 
@@ -1344,7 +1311,6 @@
                 pthread_create(&goblinThreadData[threadIndex].threadID,
                                 NULL,Goblin_Thread,(void*)scriptName);
 
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1360,7 +1326,6 @@
 
                 sprintf(returnCode,"%s",argv[3]);
                 errorCode = TCL_OK;
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1376,7 +1341,6 @@
 
                 sprintf(returnCode,"%s",argv[3]);
                 errorCode = TCL_ERROR;
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1389,15 +1353,15 @@
             if (strcmp(argv[2],"stop")==0)
             {
                 MSG -> SolverSignalStop();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"idle")==0)
             {
                 if (MSG->SolverIdle())
-                    interp->result = "1";
-                else interp->result = "0";
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
+                else
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(0));
 
                 return TCL_OK;
             }
@@ -1405,8 +1369,9 @@
             if (strcmp(argv[2],"running")==0)
             {
                 if (MSG->SolverRunning())
-                    interp->result = "1";
-                else interp->result = "0";
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
+                else
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(0));
 
                 return TCL_OK;
             }
@@ -1421,19 +1386,18 @@
             {
                 #if defined(_PROGRESS_)
 
-                sprintf(interp->result,"%g",
-                    static_cast<double>(CT->ProgressCounter()));
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(static_cast<double>(CT->ProgressCounter())));
 
                 #else
 
-                interp->result = "1.0";
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(1.0));
 
                 #endif
 
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: goblin solver %s",argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: goblin solver ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -1450,12 +1414,14 @@
                 try
                 {
                     unsigned long lineNumber = atol(argv[3]);
-                    MSG->GetLineByNumber(transscriptName,interp->result, TCL_RESULT_SIZE,lineNumber);
+                    const char *s = Tcl_GetStringResult(interp);
+                    size_t slen   = strlen(s);
+                    MSG->GetLineByNumber(transscriptName,(char *)s,slen,lineNumber);
                     return TCL_OK;
                 }
                 catch (ERRejected)
                 {
-                    interp->result = "Could not access transcript file";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Could not access transcript file", -1));
                     return TCL_ERROR;
                 }
         }
@@ -1466,12 +1432,11 @@
                 {
                     unsigned long lineNumber = atol(argv[3]);
                     MSG->LoadBuffer(transscriptName,lineNumber);
-                    interp->result = "";
                     return TCL_OK;
                 }
                 catch (ERRejected)
                 {
-                    interp->result = "Could not access transcript file";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Could not access transcript file", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1484,39 +1449,37 @@
 
             if (strcmp(argv[2],"#bufferSize")==0)
             {
-                sprintf(interp->result,"%lu",static_cast<unsigned long>(MSG->GetBufferSize()));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(MSG->GetBufferSize())));
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"#numLines")==0)
             {
-                sprintf(interp->result,"%lu",static_cast<unsigned long>(MSG->GetNumLines(transscriptName)));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(MSG->GetNumLines(transscriptName))));
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"restart")==0)
             {
                 MSG -> Restart();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"reset")==0)
             {
                 MSG -> MsgReset();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"eof")==0)
             {
-                interp->result = const_cast<char*>((MSG->MsgEndOfBuffer()) ? "1" : "0");
+                Tcl_SetObjResult(interp, Tcl_NewIntObj(MSG->MsgEndOfBuffer() ? 1 : 0));
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"void")==0)
             {
-                interp->result = const_cast<char*>((MSG->MsgVoid()) ? "1" : "0");
+                Tcl_SetObjResult(interp, Tcl_NewIntObj(MSG->MsgVoid() ? 1 : 0));
                 return TCL_OK;
             }
 
@@ -1525,12 +1488,11 @@
                 try
                 {
                     MSG -> MsgSkip();
-                    interp->result = "";
                     return TCL_OK;
                 }
                 catch (ERRejected)
                 {
-                    interp->result = "Message queue is empty";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Message queue is empty", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1539,12 +1501,13 @@
             {
                 try
                 {
-                    MSG->MsgText(interp->result, TCL_RESULT_SIZE);
+                    const char *s = Tcl_GetStringResult(interp);
+                    MSG->MsgText((char *)s, strlen(s));
                     return TCL_OK;
                 }
                 catch (ERRejected)
                 {
-                    interp->result = "Message queue is empty";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Message queue is empty", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1554,12 +1517,12 @@
                 try
                 {
                     msgType ret = MSG->MsgClass();
-                    sprintf(interp->result,"%d",ret);
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(ret));
                     return TCL_OK;
                 }
                 catch (ERRejected)
                 {
-                    interp->result = "Message queue is empty";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Message queue is empty", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1569,12 +1532,12 @@
                 try
                 {
                     TModule ret = MSG->MsgModule();
-                    sprintf(interp->result,"%lu",static_cast<unsigned long>(ret));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(ret)));
                     return TCL_OK;
                 }
                 catch (ERRejected)
                 {
-                    interp->result = "Message queue is empty";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Message queue is empty", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1584,12 +1547,12 @@
                 try
                 {
                     THandle ret = MSG->MsgHandle();
-                    sprintf(interp->result,"%lu",static_cast<unsigned long>(ret));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(ret)));
                     return TCL_OK;
                 }
                 catch (ERRejected)
                 {
-                    interp->result = "Message queue is empty";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Message queue is empty", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1599,12 +1562,12 @@
                 try
                 {
                     int ret = MSG->MsgLevel();
-                    sprintf(interp->result,"%d",ret);
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(ret));
                     return TCL_OK;
                 }
                 catch (ERRejected)
                 {
-                    interp->result = "Message queue is empty";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Message queue is empty", -1));
                     return TCL_ERROR;
                 }
             }
@@ -1617,16 +1580,18 @@
                     return TCL_ERROR;
                 }
 
-                size_t numChars = MSG->TraceFilename(interp->result, TCL_RESULT_SIZE);
+                const char *s = Tcl_GetStringResult(interp);
+                size_t slen   = strlen(s);
+                size_t numChars = MSG->TraceFilename((char *)s, slen);
 
                 if (numChars==0)
                 {
-                    interp->result = "Tcl result size overflow";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Tcl result size overflow", -1));
                     return TCL_ERROR;
                 }
-                else if (numChars>=TCL_RESULT_SIZE)
+                else if (numChars>=slen)
                 {
-                    interp->result = "No more queued trace files";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("No more queued trace files", -1));
                     return TCL_ERROR;
                 }
 
@@ -1635,25 +1600,23 @@
 
             if (strcmp(argv[2],"blocked")==0)
             {
-                interp->result = const_cast<char*>((MSG->TraceEvent()) ? "1" : "0");
+                Tcl_SetObjResult(interp, Tcl_NewIntObj(MSG->TraceEvent() ? 1 : 0));
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"unblock")==0)
             {
                 MSG -> TraceUnblock();
-                interp->result = "";
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: goblin messenger %s",argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: goblin messenger ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
         if (strcmp(argv[1],"configure")==0)
         {
             CT->Configure(argc,(const char**)argv);
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -1670,7 +1633,6 @@
             if (strcmp(argv[2],"reset")==0)
             {
                 CT -> ResetTimers();
-                interp->result = "";
                 return TCL_OK;
             }
 
@@ -1678,7 +1640,7 @@
 
             if (i>=NoTimer)
             {
-                sprintf(interp->result,"No such timer: %u",i);
+                Tcl_AppendResult(interp, "No such timer: ", argv[2], (char *)NULL);
                 return TCL_ERROR;
             }
 
@@ -1694,12 +1656,11 @@
 
                 if (j>=NoTimer)
                 {
-                    sprintf(interp->result,"No such Timer: %u",j);
+                Tcl_AppendResult(interp, "No such timer: ", argv[4], (char *)NULL);
                     return TCL_ERROR;
                 }
 
-                sprintf(interp->result,"%g",
-                    static_cast<double>(CT->globalTimer[i]->ChildTime(TTimer(j))));
+                Tcl_SetObjResult(interp, Tcl_NewDoubleObj(static_cast<double>(CT->globalTimer[i]->ChildTime(TTimer(j)))));
                 return TCL_OK;
             }
 
@@ -1712,67 +1673,58 @@
             if (strcmp(argv[3],"reset")==0)
             {
                 CT -> globalTimer[i] -> Reset();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"enable")==0)
             {
                 CT -> globalTimer[i] -> Enable();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"disable")==0)
             {
                 CT -> globalTimer[i] -> Disable();
-                interp->result = "";
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"label")==0)
             {
-                sprintf(interp->result,"%s",
-                    listOfTimers[i].timerName);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfTimers[i].timerName, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"acc")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(CT->globalTimer[i]->AccTime()));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(CT->globalTimer[i]->AccTime())));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"av")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(CT->globalTimer[i]->AvTime()));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(CT->globalTimer[i]->AvTime())));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"max")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(CT->globalTimer[i]->MaxTime()));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(CT->globalTimer[i]->MaxTime())));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"min")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(CT->globalTimer[i]->MinTime()));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(CT->globalTimer[i]->MinTime())));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"prev")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(CT->globalTimer[i]->PrevTime()));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(CT->globalTimer[i]->PrevTime())));
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: goblin timer <index> %s",argv[3]);
+            Tcl_AppendResult(interp, "Unknown option: goblin timer <index> ", argv[3], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -1790,71 +1742,65 @@
 
             if (i>=NoModule)
             {
-                sprintf(interp->result,"No such module: %d",i);
+                Tcl_AppendResult(interp, "No such module: ", argv[2], (char *)NULL);
                 return TCL_ERROR;
             }
 
             if (strcmp(argv[3],"name")==0)
             {
-                sprintf(interp->result,"%s",listOfModules[i].moduleName);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfModules[i].moduleName, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"timer")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(listOfModules[i].moduleTimer));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(listOfModules[i].moduleTimer)));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"implementor1")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(listOfModules[i].implementor1));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(listOfModules[i].implementor1)));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"implementor2")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(listOfModules[i].implementor2));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(listOfModules[i].implementor2)));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"encoding_date")==0)
             {
-                sprintf(interp->result,"%s",listOfModules[i].encodingDate);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfModules[i].encodingDate, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"revision_date")==0)
             {
-                sprintf(interp->result,"%s",listOfModules[i].revisionDate);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfModules[i].revisionDate, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"original_reference")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(listOfModules[i].originalReference));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(listOfModules[i].originalReference)));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"authors_reference")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(listOfModules[i].authorsReference));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(listOfModules[i].authorsReference)));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"text_book")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(listOfModules[i].textBook));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(listOfModules[i].textBook)));
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: goblin module <index> %s",argv[3]);
+            Tcl_AppendResult(interp, "Unknown option: goblin module <index> ", argv[3], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -1870,29 +1816,29 @@
 
             if (i>=NoAuthor)
             {
-                sprintf(interp->result,"No such author: %d",i);
+                Tcl_AppendResult(interp, "No such author: ", argv[2], (char *)NULL);
                 return TCL_ERROR;
             }
 
             if (strcmp(argv[3],"name")==0)
             {
-                sprintf(interp->result,"%s",listOfAuthors[i].name);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfAuthors[i].name, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"affiliation")==0)
             {
-                sprintf(interp->result,"%s",listOfAuthors[i].affiliation);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfAuthors[i].affiliation, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"e_mail")==0)
             {
-                sprintf(interp->result,"%s",listOfAuthors[i].e_mail);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfAuthors[i].e_mail, -1));
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: goblin author <index> %s",argv[3]);
+            Tcl_AppendResult(interp, "Unknown option: goblin author <index> ", argv[3], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -1908,67 +1854,65 @@
 
             if (i>=NoReference)
             {
-                sprintf(interp->result,"No such reference: %d",i);
+                Tcl_AppendResult(interp, "No such reference: ", argv[2], (char *)NULL);
                 return TCL_ERROR;
             }
 
             if (strcmp(argv[3],"key")==0)
             {
-                sprintf(interp->result,"%s",listOfReferences[i].refKey);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfReferences[i].refKey, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"authors")==0)
             {
-                sprintf(interp->result,"%s",listOfReferences[i].authors);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfReferences[i].authors, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"title")==0)
             {
-                sprintf(interp->result,"%s",listOfReferences[i].title);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfReferences[i].title, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"type")==0)
             {
-                sprintf(interp->result,"%s",listOfReferences[i].type);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfReferences[i].type, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"collection")==0)
             {
-                sprintf(interp->result,"%s",listOfReferences[i].collection);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfReferences[i].collection, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"editors")==0)
             {
-                sprintf(interp->result,"%s",listOfReferences[i].editors);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfReferences[i].editors, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"volume")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(listOfReferences[i].volume));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(listOfReferences[i].volume)));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"publisher")==0)
             {
-                sprintf(interp->result,"%s",listOfReferences[i].publisher);
+                Tcl_SetObjResult(interp, Tcl_NewStringObj(listOfReferences[i].publisher, -1));
                 return TCL_OK;
             }
 
             if (strcmp(argv[3],"year")==0)
             {
-                sprintf(interp->result,"%lu",
-                    static_cast<unsigned long>(listOfReferences[i].year));
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(listOfReferences[i].year)));
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: goblin reference <index> %s",argv[3]);
+            Tcl_AppendResult(interp, "Unknown option: goblin reference <index> ", argv[3], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -1982,31 +1926,31 @@
 
         if (strcmp(argv[1],"size")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(goblinHeapSize));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(goblinHeapSize)));
             return TCL_OK;
         }
 
         if (strcmp(argv[1],"maxsize")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(goblinMaxSize));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(goblinMaxSize)));
             return TCL_OK;
         }
 
         if (strcmp(argv[1],"#allocs")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(goblinNAllocs));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(goblinNAllocs)));
             return TCL_OK;
         }
 
         if (strcmp(argv[1],"#objects")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(goblinNObjects));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(goblinNObjects)));
             return TCL_OK;
         }
 
         if (strcmp(argv[1],"#fragments")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(goblinNFragments));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(goblinNFragments)));
             return TCL_OK;
         }
 
@@ -2014,25 +1958,25 @@
 
         if (strcmp(argv[1],"#timers")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(NoTimer));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(NoTimer)));
             return TCL_OK;
         }
 
         if (strcmp(argv[1],"#authors")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(NoAuthor));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(NoAuthor)));
             return TCL_OK;
         }
 
         if (strcmp(argv[1],"#modules")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(NoModule));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(NoModule)));
             return TCL_OK;
         }
 
         if (strcmp(argv[1],"#references")==0)
         {
-            sprintf(interp->result,"%lu",static_cast<unsigned long>(NoReference));
+            Tcl_SetObjResult(interp, Tcl_NewLongObj(static_cast<unsigned long>(NoReference)));
             return TCL_OK;
         }
 
@@ -2044,7 +1988,6 @@
             CT->logStream = new ofstream(transscriptName);
             MSG -> Restart();
 
-            interp->result = "";
             return TCL_OK;
         }
     }
@@ -2053,7 +1996,7 @@
         return Goblin_Propagate_Exception(interp);
     }
 
-    sprintf(interp->result,"Unknown option: goblin %s",argv[1]);
+    Tcl_AppendResult(interp, "Unknown option: goblin ", argv[1], (char *)NULL);
     return TCL_ERROR;
 }
 
@@ -2083,9 +2026,11 @@
 int Goblin_Generic_Cmd (managedObject *X,Tcl_Interp* interp,int argc,
     _CONST_QUAL_ char* argv[]) throw(ERRejected,ERRange)
 {
+    Tcl_ResetResult(interp);
+
     if (argc<2)
     {
-        interp->result = "Missing arguments";
+        Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing arguments", -1));
         return TCL_ERROR;
     }
 
@@ -2098,7 +2043,6 @@
         }
 
         CT -> SetMaster(X->Handle());
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -2110,7 +2054,7 @@
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"%ld",X->Handle());
+        Tcl_SetObjResult(interp, Tcl_NewLongObj(X->Handle()));
         return TCL_OK;
     }
 
@@ -2123,7 +2067,6 @@
         }
 
         X -> Display();
-        interp->result = "";
         return TCL_OK;
     }
 
@@ -2144,11 +2087,11 @@
             strcmp(argv[2],"-balanced")==0
            )
         {
-            interp->result = "0";
+            Tcl_SetObjResult(interp, Tcl_NewIntObj(0));
             return TCL_OK;
         }
 
-        sprintf(interp->result,"Unknown object attribute: %s",argv[2]);
+        Tcl_AppendResult(interp, "Unknown object attribute: ", argv[2], (char *)NULL);
         return TCL_ERROR;
     }
 
@@ -2163,11 +2106,10 @@
         if (strcmp(argv[2],"name")==0)
         {
             X -> SetLabel((char*)argv[3]);
-            interp->result = "";
             return TCL_OK;
         }
 
-        sprintf(interp->result,"Unknown option: %s set %s",argv[0],argv[2]);
+        Tcl_AppendResult(interp, "Unknown option: ", argv[0], " set ", argv[2], (char *)NULL);
         return TCL_ERROR;
     }
 
@@ -2186,46 +2128,43 @@
             if (argc>4) opt = atol(argv[4]);
 
             X -> ExportToAscii(argv[3],opt);
-            interp->result = "";
             return TCL_OK;
         }
 
         if (strcmp(argv[2],"goblet")==0 || strcmp(argv[2],"tk")==0)
         {
             X -> ExportToTk(argv[3]);
-            interp->result = "";
             return TCL_OK;
         }
 
         if (strcmp(argv[2],"xfig")==0)
         {
             X -> ExportToXFig(argv[3]);
-            interp->result = "";
             return TCL_OK;
         }
 
         if (strcmp(argv[2],"dot")==0)
         {
             X -> ExportToDot(argv[3]);
-            interp->result = "";
             return TCL_OK;
         }
 
-        sprintf(interp->result,"Unknown export format: %s",argv[2]);
+        Tcl_AppendResult(interp, "Unknown export format: ", argv[2], (char *)NULL);
         return TCL_ERROR;
     }
 
-    sprintf(interp->result,"Unknown option: %s",argv[1]);
+    Tcl_AppendResult(interp, "Unknown option: ", argv[1], (char *)NULL);
     return TCL_ERROR;
 }
 
 
 int Goblin_Propagate_Exception (Tcl_Interp* interp) throw()
 {
+    Tcl_ResetResult(interp);
+
     if (CT->savedErrorMsgType != NO_MSG)
     {
-        sprintf(interp->result,"%s - %s",
-            CT->savedErrorMethodName,CT->savedErrorDescription);
+        Tcl_AppendResult(interp, CT->savedErrorMethodName, " - ", CT->savedErrorDescription, (char *)NULL);
 
         CT->savedErrorMsgType = NO_MSG;
     }
@@ -2233,7 +2172,7 @@
     {
         CT->Error(MSG_WARN,NoHandle,"Goblin_Propagate_Exception",
             "An unknown exception has occured");
-        sprintf(interp->result,"An unknown exception has occured");
+        Tcl_SetObjResult(interp, Tcl_NewStringObj("An unknown exception has occured", -1));
     }
 
     CT -> logLevel = 0;
@@ -2243,14 +2182,16 @@
 
 void WrongNumberOfArguments(Tcl_Interp* interp,int argc,_CONST_QUAL_ char* argv[]) throw()
 {
-    sprintf(interp->result,"Wrong number of arguments for command \"%s",argv[0]);
+    Tcl_ResetResult(interp);
+
+    Tcl_AppendResult(interp, "Wrong number of arguments for command \"", argv[0], (char *)NULL);
 
     for (int i=1;i<argc;++i)
     {
-        sprintf(interp->result + strlen(interp->result)," %s",argv[i]);
+        Tcl_AppendResult(interp, " ", argv[i], (char *)NULL);
     }
 
-    sprintf(interp->result + strlen(interp->result),"\"");
+    Tcl_AppendResult(interp, "\"", (char *)NULL);
 }
 
 
@@ -2264,7 +2205,7 @@
     }
     else
     {
-        interp->result = "Missing number of graph nodes";
+        Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing number of graph nodes", -1));
         return NoNode;
     }
 }
--- shell_src/goshDisplayProxy.cpp.orig	2013-06-04 18:16:00.000000000 +0200
+++ shell_src/goshDisplayProxy.cpp	2013-06-04 18:16:07.000000000 +0200
@@ -17,6 +17,8 @@
 int Goblin_Graph_Display_Proxy_Cmd (ClientData clientData,Tcl_Interp* interp,
     int argc,_CONST_QUAL_ char* argv[])
 {
+    Tcl_ResetResult(interp);
+
     graphDisplayProxy* DP = reinterpret_cast<graphDisplayProxy*>(clientData);
 
     if (setjmp(goblinThreadData[Goblin_MyThreadIndex()].jumpBuffer) != 0)
@@ -25,7 +27,7 @@
     }
     else if (argc==1)
     {
-        interp->result = "Missing object command";
+        Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing object command", -1));
         return TCL_ERROR;
     }
     else try
@@ -33,7 +35,6 @@
         if (strcmp(argv[1],"synchronize")==0)
         {
             DP -> Synchronize();
-            interp->result = "";
             return TCL_OK;
         }
 
@@ -41,23 +42,23 @@
         {
             if (strcmp(argv[2],"-canvasWidth")==0)
             {
-                sprintf(interp->result,"%ld",DP->CanvasWidth());
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasWidth()));
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"-canvasHeight")==0)
             {
-                sprintf(interp->result,"%ld",DP->CanvasHeight());
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasHeight()));
                 return TCL_OK;
             }
 
             if (strcmp(argv[2],"-canvasArrowSize")==0)
             {
-                sprintf(interp->result,"%g",DP->CanvasArrowSize());
+                Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasArrowSize()));
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: %s",argv[2]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[2], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -65,7 +66,7 @@
         {
             if (argc==2)
             {
-                interp->result = "Missing node index";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing node index", -1));
                 return TCL_ERROR;
             }
 
@@ -73,7 +74,7 @@
 
             if (argc<4)
             {
-                interp->result = "Missing command option";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing command option", -1));
                 return TCL_ERROR;
             }
 
@@ -81,39 +82,43 @@
             {
                 if (strcmp(argv[4],"-mapped")==0)
                 {
-                    sprintf(interp->result,"%s",DP->IsNodeMapped(v) ? "1" : "0");
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(DP->IsNodeMapped(v) ? 1 : 0));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-canvasWidth")==0)
                 {
-                    sprintf(interp->result,"%ld",DP->CanvasNodeWidth(v));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasNodeWidth(v)));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-canvasHeight")==0)
                 {
-                    sprintf(interp->result,"%ld",DP->CanvasNodeHeight(v));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasNodeHeight(v)));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-label")==0)
                 {
-                    DP -> CompoundNodeLabel(interp->result,256,v);
+                    char tmp[256];
+                    DP -> CompoundNodeLabel(tmp,256,v);
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj(tmp, -1));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-colour")==0)
                 {
-                    DP -> CanvasNodeColour(interp->result,v);
+                    char tmp[256];
+                    DP -> CanvasNodeColour(tmp,v);
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj(tmp, -1));
                     return TCL_OK;
                 }
 
-                sprintf(interp->result,"Unknown option: %s",argv[4]);
+                Tcl_AppendResult(interp, "Unknown option: ", argv[4], (char *)NULL);
                 return TCL_ERROR;
             }
 
-            sprintf(interp->result,"Unknown option: %s",argv[3]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[3], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -121,7 +126,7 @@
         {
             if (argc==2)
             {
-                interp->result = "Missing arc index";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing arc index", -1));
                 return TCL_ERROR;
             }
 
@@ -129,7 +134,7 @@
 
             if (argc<4)
             {
-                interp->result = "Missing command option";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing command option", -1));
                 return TCL_ERROR;
             }
 
@@ -137,44 +142,48 @@
             {
                 if (strcmp(argv[4],"-mapped")==0)
                 {
-                    sprintf(interp->result,"%s",DP->IsArcMapped(a) ? "1" : "0");
+                    Tcl_SetObjResult(interp, Tcl_NewIntObj(DP->IsArcMapped(a) ? 1 : 0));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-canvasPortX")==0)
                 {
-                    sprintf(interp->result,"%ld",DP->CanvasCXOfPort(a));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasCXOfPort(a)));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-canvasPortY")==0)
                 {
-                    sprintf(interp->result,"%ld",DP->CanvasCYOfPort(a));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasCYOfPort(a)));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-label")==0)
                 {
-                    DP -> CompoundArcLabel(interp->result,256,a);
+                    char tmp[256];
+                    DP -> CompoundArcLabel(tmp,256,a);
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj(tmp, -1));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-colour")==0)
                 {
-                    DP -> CanvasArcColour(interp->result,a);
+                    char tmp[256];
+                    DP -> CanvasArcColour(tmp,a);
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj(tmp, -1));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-width")==0)
                 {
-                    sprintf(interp->result,"%ld",DP->CanvasArcWidth(a));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasArcWidth(a)));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-dash")==0)
                 {
                     const char* dashMode[] = {""," -dash ."," -dash -"," -dash -."};
-                    sprintf(interp->result,"%s",dashMode[DP->CanvasArcDashMode(a)]);
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj(dashMode[DP->CanvasArcDashMode(a)], -1));
                     return TCL_OK;
                 }
 
@@ -184,35 +193,41 @@
                     {
                         case ARROW_BOTH:
                         {
-                            interp->result = "both";
+                            Tcl_SetObjResult(interp, Tcl_NewStringObj("both", -1));
                             return TCL_OK;
                         }
                         case ARROW_FORWARD:
                         {
-                            interp->result = "last";
+                            Tcl_SetObjResult(interp, Tcl_NewStringObj("last", -1));
                             return TCL_OK;
                         }
                         case ARROW_BACKWARD:
                         {
-                            interp->result = "first";
+                            Tcl_SetObjResult(interp, Tcl_NewStringObj("first", -1));
                             return TCL_OK;
                         }
                         case ARROW_NONE:
                         {
-                            interp->result = "none";
+                            Tcl_SetObjResult(interp, Tcl_NewStringObj("none", -1));
                             return TCL_OK;
                         }
                     }
 
+#if TCL_MAJOR_VERSION > 8 || (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION > 5)
+                    Tcl_Obj *resObj = Tcl_NewObj();
+                    Tcl_AppendPrintfToObj(resObj, "Unknown arrow display mode: %d",DP->ArrowDirections(a));
+                    Tcl_SetObjResult(interp, resObj);
+#else
                     sprintf(interp->result,"Unknown arrow display mode: %d",DP->ArrowDirections(a));
+#endif
                     return TCL_OK;
                 }
 
-                sprintf(interp->result,"Unknown option: %s",argv[4]);
+                Tcl_AppendResult(interp, "Unknown option: ", argv[4], (char *)NULL);
                 return TCL_ERROR;
             }
 
-            sprintf(interp->result,"Unknown option: %s",argv[3]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[3], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -220,7 +235,7 @@
         {
             if (argc==2)
             {
-                interp->result = "Missing layout point index";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing layout point index", -1));
                 return TCL_ERROR;
             }
 
@@ -228,7 +243,7 @@
 
             if (argc<4)
             {
-                interp->result = "Missing command option";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing command option", -1));
                 return TCL_ERROR;
             }
 
@@ -236,17 +251,17 @@
             {
                 if (strcmp(argv[4],"-canvasX")==0)
                 {
-                    sprintf(interp->result,"%ld",DP->CanvasCXOfPoint(p));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasCXOfPoint(p)));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-canvasY")==0)
                 {
-                    sprintf(interp->result,"%ld",DP->CanvasCYOfPoint(p));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasCYOfPoint(p)));
                     return TCL_OK;
                 }
 
-                sprintf(interp->result,"Unknown option: %s",argv[4]);
+                Tcl_AppendResult(interp, "Unknown option: ", argv[4], (char *)NULL);
                 return TCL_ERROR;
             }
 
@@ -254,16 +269,15 @@
             {
                 if (argc<6)
                 {
-                    interp->result = "Missing coordinate values";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing coordinate values", -1));
                     return TCL_ERROR;
                 }
 
                 DP -> PlaceLayoutPoint(p,atol(argv[4]),atol(argv[5]));
-                interp->result = "";
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: %s",argv[3]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[3], (char *)NULL);
             return TCL_ERROR;
         }
 
@@ -271,7 +285,7 @@
         {
             if (argc==2)
             {
-                interp->result = "Missing arc index";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing arc index", -1));
                 return TCL_ERROR;
             }
 
@@ -279,7 +293,7 @@
 
             if (argc<4)
             {
-                interp->result = "Missing command option";
+                Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing command option", -1));
                 return TCL_ERROR;
             }
 
@@ -287,17 +301,17 @@
             {
                 if (strcmp(argv[4],"-canvasX")==0)
                 {
-                    sprintf(interp->result,"%ld",DP->CanvasCXOfArcLabelAnchor(a));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasCXOfArcLabelAnchor(a)));
                     return TCL_OK;
                 }
 
                 if (strcmp(argv[4],"-canvasY")==0)
                 {
-                    sprintf(interp->result,"%ld",DP->CanvasCYOfArcLabelAnchor(a));
+                    Tcl_SetObjResult(interp, Tcl_NewLongObj(DP->CanvasCYOfArcLabelAnchor(a)));
                     return TCL_OK;
                 }
 
-                sprintf(interp->result,"Unknown option: %s",argv[4]);
+                Tcl_AppendResult(interp, "Unknown option: ", argv[4], (char *)NULL);
                 return TCL_ERROR;
             }
 
@@ -305,20 +319,19 @@
             {
                 if (argc<6)
                 {
-                    interp->result = "Missing coordinate values";
+                    Tcl_SetObjResult(interp, Tcl_NewStringObj("Missing coordinate values", -1));
                     return TCL_ERROR;
                 }
 
                 DP -> PlaceArcLabelAnchor(a,atol(argv[4]),atol(argv[5]));
-                interp->result = "";
                 return TCL_OK;
             }
 
-            sprintf(interp->result,"Unknown option: %s",argv[3]);
+            Tcl_AppendResult(interp, "Unknown option: ", argv[3], (char *)NULL);
             return TCL_ERROR;
         }
 
-        sprintf(interp->result,"Unknown option: %s",argv[1]);
+        Tcl_AppendResult(interp, "Unknown option: ", argv[1], (char *)NULL);
         return TCL_ERROR;
     }
     catch (...)
--- glpk_wrap/glpkInit.cpp.orig	2013-06-05 09:18:26.000000000 +0200
+++ glpk_wrap/glpkInit.cpp	2013-06-05 09:19:08.000000000 +0200
@@ -29,7 +29,7 @@
 
     if (Tcl_PkgRequire(interp,"goblin","2.6",0)==NULL)
     {
-        sprintf(interp->result,"GOBLIN must be loaded before the GLPK plugin");
+        Tcl_SetObjResult(interp, Tcl_NewStringObj("GOBLIN must be loaded before the GLPK plugin", -1));
         return TCL_ERROR;
     }
 
