diff --git src/daemon/common/commonFile.ml src/daemon/common/commonFile.ml
index def19f2..4aed6ea 100644
--- src/daemon/common/commonFile.ml
+++ src/daemon/common/commonFile.ml
@@ -397,12 +397,12 @@ let default_file_print_sources file o =
   if List.length !allsources > 0 then begin
 
     html_mods_table_header buf "sourcesTable" "sources al" [
-        ( "1", "srh br ac", "Client number", "Num" ) ;
-        ( "0", "srh br", "Client Name", "Name" ) ;
-        ( "0", "srh br", "IP address", "IP address" ) ;
-        ( "0", "srh br", "Client software", "CS" ) ;
-        ( "1", "srh ar", "Total UL bytes to this client for all files", "UL" ) ;
-        ( "1", "srh ar br", "Total DL bytes from this client for all files", "DL" ) ; ];
+        ( Num, "srh br ac", "Client number", "Num" ) ;
+        ( Str, "srh br", "Client Name", "Name" ) ;
+        ( Str, "srh br", "IP address", "IP address" ) ;
+        ( Str, "srh br", "Client software", "CS" ) ;
+        ( Num, "srh ar", "Total UL bytes to this client for all files", "UL" ) ;
+        ( Num, "srh ar br", "Total DL bytes from this client for all files", "DL" ) ; ];
 
     html_mods_cntr_init ();
 
@@ -704,8 +704,8 @@ let file_print file o =
 
       html_mods_cntr_init ();
       html_mods_table_header buf "sourcesInfo" "sourcesInfo" [
-        ( "0", "srh br", "File Info", "Info" ) ;
-        ( "0", "srh", "Value", "Value" ) ];
+        ( Str, "srh br", "File Info", "Info" ) ;
+        ( Str, "srh", "Value", "Value" ) ];
 
       Printf.bprintf buf "\\<tr class=\\\"dl-%d\\\"\\>" (html_mods_cntr ());
       html_mods_td buf [
diff --git src/daemon/common/commonServer.ml src/daemon/common/commonServer.ml
index 61ce172..2c3bbdd 100644
--- src/daemon/common/commonServer.ml
+++ src/daemon/common/commonServer.ml
@@ -377,27 +377,27 @@ let server_print_html_header buf ext =
 -100px; z-index:+1\\\" onmouseover=\\\"overdiv=1;\\\"  onmouseout=\\\"overdiv=0; setTimeout(\\\'hideLayer()\\\',1000)\\\"\\>\\&nbsp;\\</div\\>";
 
     html_mods_table_header buf "serversTable" (Printf.sprintf "servers%s" ext) ([
-    ( "1", "srh", "Server number", "#" ) ;
-    ( "0", "srh", "Connect|Disconnect", "C/D" ) ;
-    ( "0", "srh", "Remove", "Rem" ) ;
-    ( "0", "srh", "Preferred", "P" ) ;
-    ( "0", "srh", "Master servers", "M" ) ;
-    ( "0", "srh", "[Hi]gh or [Lo]w ID", "ID" ) ;
-    ( "0", "srh", "Network name", "Network" ) ;
-    ( "0", "srh", "Connection status", "Status" ) ;
-    ( "0", "srh br", "IP address", "IP address" ) ;
-    ] @ (if Geoip.active () then [( "0", "srh br", "Country Code/Name", "CC" )] else []) @ [
-    ( "1", "srh ar", "Number of connected users", "Users" ) ;
-    ( "1", "srh ar br", "Max number of users", "MaxUsers" ) ;
-    ( "1", "srh ar br", "LowID users", "LowID" ) ;
-    ( "1", "srh ar", "Number of files indexed on server", "Files" );
-    ( "1", "srh ar br", "Number of published files on server", "Publ" );
-    ( "1", "srh ar", "Soft file limit", "Soft" ) ;
-    ( "1", "srh ar br", "Hard file limit", "Hard" ) ;
-    ( "0", "srh ar br", "Ping (ms)", "Ping" ) ;
-    ( "0", "srh br", "Server version", "Version" ) ;
-    ( "0", "srh", "Server name", "Name" ) ;
-    ( "0", "srh", "Server details", "Details" ) ])
+    ( Num, "srh", "Server number", "#" ) ;
+    ( Str, "srh", "Connect|Disconnect", "C/D" ) ;
+    ( Str, "srh", "Remove", "Rem" ) ;
+    ( Str, "srh", "Preferred", "P" ) ;
+    ( Str, "srh", "Master servers", "M" ) ;
+    ( Str, "srh", "[Hi]gh or [Lo]w ID", "ID" ) ;
+    ( Str, "srh", "Network name", "Network" ) ;
+    ( Str, "srh", "Connection status", "Status" ) ;
+    ( Str, "srh br", "IP address", "IP address" ) ;
+    ] @ (if Geoip.active () then [( Str, "srh br", "Country Code/Name", "CC" )] else []) @ [
+    ( Num, "srh ar", "Number of connected users", "Users" ) ;
+    ( Num, "srh ar br", "Max number of users", "MaxUsers" ) ;
+    ( Num, "srh ar br", "LowID users", "LowID" ) ;
+    ( Num, "srh ar", "Number of files indexed on server", "Files" );
+    ( Num, "srh ar br", "Number of published files on server", "Publ" );
+    ( Num, "srh ar", "Soft file limit", "Soft" ) ;
+    ( Num, "srh ar br", "Hard file limit", "Hard" ) ;
+    ( Num, "srh ar br", "Ping (ms)", "Ping" ) ;
+    ( Str, "srh br", "Server version", "Version" ) ;
+    ( Str, "srh", "Server name", "Name" ) ;
+    ( Str, "srh", "Server details", "Details" ) ])
 
 let server_print s o =
   let impl = as_server_impl s in
diff --git src/daemon/common/commonSources.ml src/daemon/common/commonSources.ml
index a862cab..56d7175 100644
--- src/daemon/common/commonSources.ml
+++ src/daemon/common/commonSources.ml
@@ -491,30 +491,30 @@ module Make(M:
          Printf.bprintf buf "\\</tr\\>\\</table\\>\\</div\\>\n";
 	 
          html_mods_table_header buf "sourcesTable" "sources" [
-           ( "0", "srh br", "New sources", 
+           ( Str, "srh br", "New sources", 
 	     Printf.sprintf "New(%d)" new_sources_queue );
-           ( "0", "srh br", "Good sources", 
+           ( Str, "srh br", "Good sources", 
 	     Printf.sprintf "Good(%d)" good_sources_queue );
-           ( "0", "srh br", "Ready saved sources", 
+           ( Str, "srh br", "Ready saved sources", 
 	     Printf.sprintf "Ready(%d)" ready_saved_sources_queue);
-           ( "0", "srh br", "Waiting saved sources", 
+           ( Str, "srh br", "Waiting saved sources", 
 	     Printf.sprintf "Wait(%d)" waiting_saved_sources_queue);
-           ( "0", "srh br", "Old sources 1", 
+           ( Str, "srh br", "Old sources 1", 
 	     Printf.sprintf "Old1(%d)" old_sources1_queue );
-           ( "0", "srh br", "Old sources 2", 
+           ( Str, "srh br", "Old sources 2", 
 	     Printf.sprintf "Old2(%d)" old_sources2_queue );
-           ( "0", "srh br", "Old sources 3", 
+           ( Str, "srh br", "Old sources 3", 
 	     Printf.sprintf "Old3(%d)" old_sources3_queue );
-           ( "0", "srh br", "Do not try sources", 
+           ( Str, "srh br", "Do not try sources", 
 	     Printf.sprintf "nTry(%d)" do_not_try_queue );
-           ( "0", "srh br", "Connected sources", 
+           ( Str, "srh br", "Connected sources", 
 	     Printf.sprintf "Conn(%d)" connected_sources_queue );
-           ( "0", "srh br", "Connecting sources", 
+           ( Str, "srh br", "Connecting sources", 
 	     Printf.sprintf "Cing(%d)" connecting_sources_queue );
-           ( "0", "srh br", "Busy sources", 
+           ( Str, "srh br", "Busy sources", 
 	     Printf.sprintf "Busy(%d)" busy_sources_queue );
-           ( "0", "srh br", "Total sources", "All" );
-           ( "0", "srh br", "Filename", "Name" ); ];
+           ( Str, "srh br", "Total sources", "All" );
+           ( Str, "srh br", "Filename", "Name" ); ];
        else begin
          Printf.bprintf buf "Statistics on sources: time %d\n" (last_time ());
          Printf.bprintf buf "File sources per manager queue(%d):\n" 
@@ -694,19 +694,19 @@ module Make(M:
          Printf.bprintf buf "\\</table\\>\\</div\\>\n";
 
          html_mods_table_header buf "sourcesTable" "sources" [
-           ( "0", "srh", "New sources", "New" );
-           ( "0", "srh", "Good sources", "Good" );
-           ( "0", "srh", "Ready sources", "Ready" );
-           ( "0", "srh", "Waiting sources", "Wait" );
-           ( "0", "srh", "Old sources 1", "Old1" );
-           ( "0", "srh", "Old sources 2", "Old2" );
-           ( "0", "srh", "Old sources 3", "Old3" );
-           ( "0", "srh", "Do not try", "nTry" );
-           ( "0", "srh", "Connected sources", "Conn" );
-           ( "0", "srh", "Connecting sources", "Cing" );
-           ( "0", "srh", "Busy sources", "Busy" );
-           ( "0", "srh", "Total sources", "All" );
-           ( "0", "srh", "Type", "Type" ); ];
+           ( Str, "srh", "New sources", "New" );
+           ( Str, "srh", "Good sources", "Good" );
+           ( Str, "srh", "Ready sources", "Ready" );
+           ( Str, "srh", "Waiting sources", "Wait" );
+           ( Str, "srh", "Old sources 1", "Old1" );
+           ( Str, "srh", "Old sources 2", "Old2" );
+           ( Str, "srh", "Old sources 3", "Old3" );
+           ( Str, "srh", "Do not try", "nTry" );
+           ( Str, "srh", "Connected sources", "Conn" );
+           ( Str, "srh", "Connecting sources", "Cing" );
+           ( Str, "srh", "Busy sources", "Busy" );
+           ( Str, "srh", "Total sources", "All" );
+           ( Str, "srh", "Type", "Type" ); ];
 
        end
        else
@@ -835,9 +835,9 @@ module Make(M:
        ) connecting_sources;
        if output_type = HTML then begin
          html_mods_table_header buf "sourcesTable" "sources" [
-           ( "0", "srh", "Connecting sources", "Connecting sources" );
-           ( "0", "srh", "Next direct sources", "Next direct sources" );
-           ( "0", "srh", "Next indirect sources", "Next indirect sources" ); ];
+           ( Str, "srh", "Connecting sources", "Connecting sources" );
+           ( Str, "srh", "Next direct sources", "Next direct sources" );
+           ( Str, "srh", "Next indirect sources", "Next indirect sources" ); ];
          Printf.bprintf buf "\\<tr class=\\\"dl-1\\\"\\>";
          html_mods_td buf [
            ("", "sr", (Printf.sprintf "%d entries" 
diff --git src/daemon/common/commonStats.ml src/daemon/common/commonStats.ml
index bbc82f3..893c200 100644
--- src/daemon/common/commonStats.ml
+++ src/daemon/common/commonStats.ml
@@ -319,26 +319,26 @@ let print_stats_ascii buf arr l tl uptime =
 
 let stats_html_header buf =
   html_mods_table_header buf ~total:"1" "csTable" "cs" [
-   ( "0", "srh", "Client brand", "Brand" );
-   ( "0", "srh", "Separator", ":" );
-   ( "1", "srh ar", "Successful connections", "Seen" );
-   ( "1", "srh", "Successful connections percent", "%" );
-   ( "0", "srh", "Separator", "|" );
-   ( "1", "srh ar", "File requests received", "Reqs" );
-   ( "1", "srh", "File requests received percent", "%" );
-   ( "0", "srh", "Separator", "|" );
-   ( "1", "srh ar", "Total bans", "B" );
-   ( "1", "srh", "Total bans percent", "%" );
-   ( "0", "srh", "Separator", "|" ); 
-   ( "1", "srh ar", "Total uploads", "UL" );
-   ( "1", "srh", "Total uploads percent", "%" );
-   ( "1", "srh ar", "Total uploads average KB/s", "KB/s" );
-   ( "0", "srh", "Separator", "|" );
-   ( "1", "srh ar", "Total downloads", "DL" );
-   ( "1", "srh", "Total downloads percent", "%" );
-   ( "1", "srh ar", "Total downloads average KB/s", "KB/s" );
-   ( "0", "srh", "Separator", "|" );
-   ( "1", "srh", "Total uploads:downloads ratio", "U:DL" );
+   ( Str, "srh", "Client brand", "Brand" );
+   ( Str, "srh", "Separator", ":" );
+   ( Num, "srh ar", "Successful connections", "Seen" );
+   ( Num, "srh", "Successful connections percent", "%" );
+   ( Str, "srh", "Separator", "|" );
+   ( Num, "srh ar", "File requests received", "Reqs" );
+   ( Num, "srh", "File requests received percent", "%" );
+   ( Str, "srh", "Separator", "|" );
+   ( Num, "srh ar", "Total bans", "B" );
+   ( Num, "srh", "Total bans percent", "%" );
+   ( Str, "srh", "Separator", "|" ); 
+   ( Num, "srh ar", "Total uploads", "UL" );
+   ( Num, "srh", "Total uploads percent", "%" );
+   ( Num, "srh ar", "Total uploads average KB/s", "KB/s" );
+   ( Str, "srh", "Separator", "|" );
+   ( Num, "srh ar", "Total downloads", "DL" );
+   ( Num, "srh", "Total downloads percent", "%" );
+   ( Num, "srh ar", "Total downloads average KB/s", "KB/s" );
+   ( Str, "srh", "Separator", "|" );
+   ( Num, "srh", "Total uploads:downloads ratio", "U:DL" );
   ]
 
 let stats_list l arr = 
diff --git src/daemon/driver/driverCommands.ml src/daemon/driver/driverCommands.ml
index fa70f9b..a075e0c 100644
--- src/daemon/driver/driverCommands.ml
+++ src/daemon/driver/driverCommands.ml
@@ -110,18 +110,18 @@ let list_options_html o list =
   let buf = o.conn_buf in
   if !!html_mods_use_js_helptext then
     html_mods_table_header buf "upstatsTable" "upstats" [
-      ( "0", "srh", "Option name", "Name (Help=mouseOver)" ) ;
-      ( "0", "srh", "Option value", "Value (press ENTER to save)" ) ;
-      ( "0", "srh", "Option default", "Default" );
-      ( "0", "srh", "Option type", "Type" );
+      ( Str, "srh", "Option name", "Name (Help=mouseOver)" ) ;
+      ( Str, "srh", "Option value", "Value (press ENTER to save)" ) ;
+      ( Str, "srh", "Option default", "Default" );
+      ( Str, "srh", "Option type", "Type" );
     ]
   else
     html_mods_table_header buf "voTable" "vo" [
-      ( "0", "srh", "Option name", "Name" ) ;
-      ( "0", "srh", "Option value", "Value (press ENTER to save)" ) ;
-      ( "0", "srh", "Option default", "Default" ) ;
-      ( "0", "srh", "Option type", "Type" );
-      ( "0", "srh", "Option description", "Help" ) ];
+      ( Str, "srh", "Option name", "Name" ) ;
+      ( Str, "srh", "Option value", "Value (press ENTER to save)" ) ;
+      ( Str, "srh", "Option default", "Default" ) ;
+      ( Str, "srh", "Option type", "Type" );
+      ( Str, "srh", "Option description", "Help" ) ];
 
   html_mods_cntr_init ();
 
@@ -212,9 +212,9 @@ let list_calendar o list =
   let buf = o.conn_buf in
   if o.conn_output = HTML then begin
       html_mods_table_header buf "web_infoTable" "vo" [
-        ( "0", "srh", "Weekdays", "Weekdays" ) ;
-        ( "0", "srh", "Hours", "Hours" ) ;
-        ( "0", "srh", "Command", "Command" ) ] ;
+        ( Str, "srh", "Weekdays", "Weekdays" ) ;
+        ( Str, "srh", "Hours", "Hours" ) ;
+        ( Str, "srh", "Command", "Command" ) ] ;
       html_mods_cntr_init ();
       List.iter (fun (wdays, hours, command) ->
           Printf.bprintf buf "\\<tr class=\\\"dl-%d\\\"\\>" (html_mods_cntr ());
@@ -419,21 +419,21 @@ let _ =
         let buf = o.conn_buf in
         if args = ["all"] then begin
             if use_html_mods o then html_mods_table_header buf "vcTable" "vc" ([
-                ( "1", "srh ac", "Client number", "Num" ) ;
-                ( "0", "srh", "Network", "Network" ) ;
-                ( "0", "srh", "IP address", "IP address" ) ;
-                ] @ (if Geoip.active () then [( "0", "srh", "Country Code/Name", "CC" )] else []) @ [
-                ( "0", "srh", "Client name", "Client name" ) ;
-                ( "0", "srh", "Client brand", "CB" ) ;
-                ( "0", "srh", "Client release", "CR" ) ;
+                ( Num, "srh ac", "Client number", "Num" ) ;
+                ( Str, "srh", "Network", "Network" ) ;
+                ( Str, "srh", "IP address", "IP address" ) ;
+                ] @ (if Geoip.active () then [( Str, "srh", "Country Code/Name", "CC" )] else []) @ [
+                ( Str, "srh", "Client name", "Client name" ) ;
+                ( Str, "srh", "Client brand", "CB" ) ;
+                ( Str, "srh", "Client release", "CR" ) ;
                 ] @
-                (if !!emule_mods_count then [( "0", "srh", "eMule MOD", "EM" )] else [])
+                (if !!emule_mods_count then [( Str, "srh", "eMule MOD", "EM" )] else [])
                 @ [
-                ( "0", "srh", "Client file queue", "Q" ) ;
-                ( "1", "srh ar", "Total UL bytes to this client for all files", "tUL" ) ;
-                ( "1", "srh ar br", "Total DL bytes from this client for all files", "tDL" ) ;
-                ( "1", "srh ar", "Session UL bytes to this client for all files", "sUL" ) ;
-                ( "1", "srh ar", "Session DL bytes from this client for all files", "sDL" )]);
+                ( Str, "srh", "Client file queue", "Q" ) ;
+                ( Num, "srh ar", "Total UL bytes to this client for all files", "tUL" ) ;
+                ( Num, "srh ar br", "Total DL bytes from this client for all files", "tDL" ) ;
+                ( Num, "srh ar", "Session UL bytes to this client for all files", "sUL" ) ;
+                ( Num, "srh ar", "Session DL bytes from this client for all files", "sDL" )]);
 
             html_mods_cntr_init ();
             let all_clients_list = clients_get_all () in
@@ -571,11 +571,11 @@ let _ =
 
             if use_html_mods o then
               html_mods_table_header buf "serversTable" "servers" [
-                ( "0", "srh", "Timestamp", "Time" ) ;
-                ( "0", "srh", "IP address", "IP address" ) ;
-                ( "1", "srh", "Client number", "Num" ) ;
-                ( "0", "srh", "Client name", "Client name" ) ;
-                ( "0", "srh", "Message text", "Message" ) ] ;
+                ( Str, "srh", "Timestamp", "Time" ) ;
+                ( Str, "srh", "IP address", "IP address" ) ;
+                ( Num, "srh", "Client number", "Num" ) ;
+                ( Str, "srh", "Client name", "Client name" ) ;
+                ( Str, "srh", "Message text", "Message" ) ] ;
 
             Fifo.iter (fun (t,i,num,n,s) ->
                 if use_html_mods o then begin
@@ -971,11 +971,11 @@ let _ =
 \\</td\\>\\</tr\\>
 \\<tr\\>\\<td\\>";
             html_mods_table_header buf "friendsTable" "friends" [
-              ( "1", "srh", "Client number", "Num" ) ;
-              ( "0", "srh", "Remove", "Remove" ) ;
-              ( "0", "srh", "Network", "Network" ) ;
-              ( "0", "srh", "Name", "Name" ) ;
-              ( "0", "srh", "State", "State" ) ] ;
+              ( Num, "srh", "Client number", "Num" ) ;
+              ( Str, "srh", "Remove", "Remove" ) ;
+              ( Str, "srh", "Network", "Network" ) ;
+              ( Str, "srh", "Name", "Name" ) ;
+              ( Str, "srh", "State", "State" ) ] ;
           end;
         html_mods_cntr_init ();
         List.iter (fun c ->
@@ -1194,15 +1194,15 @@ let _ =
             html_mods_big_header_start buf "shares" [t1;t2];
 
             html_mods_table_header buf ~total:"1" "sharesTable" "shares" [
-               ( "0", "srh", "Country name", "Country" ) ;
-               ( "0", "srh", "Country code", "Code" ) ;
-               ( "0", "srh", "Continent", "Con" ) ;
-               ( "1", "srh ar", "Session uploaded", "sUl" ) ;
-               ( "1", "srh ar", "Session downloaded", "sDl" ) ;
-               ( "1", "srh ar", "Session seen", "sSe" ) ;
-               ( "1", "srh ar", "Total uploaded", "tUl" ) ;
-               ( "1", "srh ar", "Total downloaded", "tDl" ) ;
-               ( "1", "srh ar", "Total seen", "tSe" ) ;
+               ( Str, "srh", "Country name", "Country" ) ;
+               ( Str, "srh", "Country code", "Code" ) ;
+               ( Str, "srh", "Continent", "Con" ) ;
+               ( Num, "srh ar", "Session uploaded", "sUl" ) ;
+               ( Num, "srh ar", "Session downloaded", "sDl" ) ;
+               ( Num, "srh ar", "Session seen", "sSe" ) ;
+               ( Num, "srh ar", "Total uploaded", "tUl" ) ;
+               ( Num, "srh ar", "Total downloaded", "tDl" ) ;
+               ( Num, "srh ar", "Total seen", "tSe" ) ;
             ];
             html_mods_cntr_init ();
             let csu = ref 0L in
@@ -1287,11 +1287,11 @@ let _ =
         if use_html_mods o then
           begin
             html_mods_table_header buf "sharesTable" "shares" [
-               ( "0", "srh ar", "Number", "Num" ) ;
-               ( "0", "srh", "Country code", "Code" ) ;
-               ( "0", "srh", "Country name", "Country" ) ;
-               ( "0", "srh", "Continent code", "Con" ) ;
-               ( "0", "srh", "Continent name", "Continent" ) ;
+               ( Num, "srh ar", "Number", "Num" ) ;
+               ( Str, "srh", "Country code", "Code" ) ;
+               ( Str, "srh", "Country name", "Country" ) ;
+               ( Str, "srh", "Continent code", "Con" ) ;
+               ( Str, "srh", "Continent name", "Continent" ) ;
             ];
             html_mods_cntr_init ();
             Array.iteri (fun i _ ->
@@ -1510,8 +1510,8 @@ let _ =
                             \\<a onclick=\\\"javascript:window.location.reload()\\\"\\>Refresh results\\</a\\>\\</td\\>
                           \\</tr\\>\\</table\\>\\</td\\>\\</tr\\>\\<tr\\>\\<td\\>";
       html_mods_table_header buf "sharesTable" "shares" [
-        ( "0", "srh", "Network", "Network" ) ;
-        ( "0", "srh", "Result", "Result" ) ]
+        ( Str, "srh", "Network", "Network" ) ;
+        ( Str, "srh", "Result", "Result" ) ]
     end;
     html_mods_cntr_init ();
     List.iter (fun (net, result) -> 
@@ -2255,12 +2255,12 @@ action=\\\"javascript:submitHtmlModsStyle();\\\"\\>";
 	    else begin
 
     	      html_mods_table_header buf "web_infoTable" "vo" [
-	        ( "0", "srh ac", "Click to remove URL", "Remove" ) ;
-	        ( "0", "srh", "Download now", "DL" ) ;
-	        ( "0", "srh", "Filetype", "Type" ) ;
-	        ( "0", "srh", "Interval in hours", "Interval" ) ;
-	        ( "0", "srh", "URL", "URL" ) ;
-	        ( "0", "srh", "URL state", "State" ) ;
+	        ( Str, "srh ac", "Click to remove URL", "Remove" ) ;
+	        ( Str, "srh", "Download now", "DL" ) ;
+	        ( Str, "srh", "Filetype", "Type" ) ;
+	        ( Num, "srh", "Interval in hours", "Interval" ) ;
+	        ( Str, "srh", "URL", "URL" ) ;
+	        ( Str, "srh", "URL state", "State" ) ;
               ] ;
 
               html_mods_cntr_init ();
@@ -2294,8 +2294,8 @@ action=\\\"javascript:submitHtmlModsStyle();\\\"\\>";
             Printf.bprintf buf "\\</table\\>\\</td\\>\\<tr\\>\\</table\\>\\</div\\>\\<P\\>";
 
     	    html_mods_table_header buf "web_infoTable" "vo" [
-	      ( "0", "srh", "Web kind", "Kind" );
-	      ( "0", "srh", "Description", "Type" ) ];
+	      ( Str, "srh", "Web kind", "Kind" );
+	      ( Str, "srh", "Description", "Type" ) ];
 
             html_mods_cntr_init ();
             List.iter (fun (kind, data) ->
@@ -2513,14 +2513,14 @@ let _ =
 \\<tr\\>\\<td\\>";
 
             html_mods_table_header buf "sharesTable" "shares" [
-               ( "0", "srh ac", "Click to unshare directory", "Unshare" ) ;
-               ( "1", "srh ar", "Priority", "P" ) ;
-               ( "0", "srh", "Directory", "Directory" ) ;
-               ( "0", "srh", "Strategy", "Strategy" ) ;
-               ( "1", "srh ar", "HDD used", "used" ) ;
-               ( "1", "srh ar", "HDD free", "free" ) ;
-               ( "1", "srh ar", "% free", "% free" ) ;
-               ( "0", "srh", "Filesystem", "FS" ) ];
+               ( Str, "srh ac", "Click to unshare directory", "Unshare" ) ;
+               ( Num, "srh ar", "Priority", "P" ) ;
+               ( Str, "srh", "Directory", "Directory" ) ;
+               ( Str, "srh", "Strategy", "Strategy" ) ;
+               ( Num, "srh ar", "HDD used", "used" ) ;
+               ( Num, "srh ar", "HDD free", "free" ) ;
+               ( Num, "srh ar", "% free", "% free" ) ;
+               ( Str, "srh", "Filesystem", "FS" ) ];
 
             html_mods_cntr_init ();
             List.iter (fun shared_dir ->
@@ -2564,13 +2564,13 @@ let _ =
 
 	    html_mods_big_header_start buf "sharesTable" ["Share strategies"];
             html_mods_table_header buf "sharesTable" "shares" [
-               ( "0", "srh", "Name", "Name" ) ;
-               ( "0", "srh", "Incoming", "Incoming" ) ;
-               ( "0", "srh", "Directories", "Directories" ) ;
-               ( "0", "srh", "Recursive", "Recursive" ) ;
-               ( "0", "srh", "Minsize", "Minsize" ) ;
-               ( "0", "srh", "Maxsize", "Maxsize" ) ;
-               ( "0", "srh", "Extensions", "Extensions" ) ];
+               ( Str, "srh", "Name", "Name" ) ;
+               ( Str, "srh", "Incoming", "Incoming" ) ;
+               ( Str, "srh", "Directories", "Directories" ) ;
+               ( Str, "srh", "Recursive", "Recursive" ) ;
+               ( Num, "srh", "Minsize", "Minsize" ) ;
+               ( Num, "srh", "Maxsize", "Maxsize" ) ;
+               ( Str, "srh", "Extensions", "Extensions" ) ];
 
             html_mods_cntr_init ();
 
@@ -2765,25 +2765,25 @@ let _ =
               begin
 
                 html_mods_table_header buf "uploadersTable" "uploaders" ([
-                  ( "1", "srh ac", "Client number", "Num" ) ;
-                  ( "0", "srh", "Network", "Network" ) ;
-                  ( "0", "srh", "Connection type [I]ndirect [D]irect", "C" ) ;
-                  ( "0", "srh", "Client name", "Client name" ) ;
-                  ( "0", "srh", "Secure User Identification [N]one, [P]assed, [F]ailed", "S" ) ;
-                  ( "0", "srh", "IP address", "IP address" ) ;
-		  ] @ (if Geoip.active () then [( "0", "srh", "Country Code/Name", "CC" )] else []) @ [
-                  ( "0", "srh", "Connected time (minutes)", "CT" ) ;
-                  ( "0", "srh", "Client brand", "CB" ) ;
-                  ( "0", "srh", "Client release", "CR" ) ;
+                  ( Num, "srh ac", "Client number", "Num" ) ;
+                  ( Str, "srh", "Network", "Network" ) ;
+                  ( Str, "srh", "Connection type [I]ndirect [D]irect", "C" ) ;
+                  ( Str, "srh", "Client name", "Client name" ) ;
+                  ( Str, "srh", "Secure User Identification [N]one, [P]assed, [F]ailed", "S" ) ;
+                  ( Str, "srh", "IP address", "IP address" ) ;
+		  ] @ (if Geoip.active () then [( Str, "srh", "Country Code/Name", "CC" )] else []) @ [
+                  ( Str, "srh", "Connected time (minutes)", "CT" ) ;
+                  ( Str, "srh", "Client brand", "CB" ) ;
+                  ( Str, "srh", "Client release", "CR" ) ;
                   ] @
-                  (if !!emule_mods_count then [( "0", "srh", "eMule MOD", "EM" )] else [])
+                  (if !!emule_mods_count then [( Str, "srh", "eMule MOD", "EM" )] else [])
                   @ [
-                  ( "0", "srh ar", "Total DL bytes from this client for all files", "tDL" ) ;
-                  ( "0", "srh ar", "Total UL bytes to this client for all files", "tUL" ) ;
-                  ( "0", "srh ar", "Session DL bytes from this client for all files", "sDL" ) ;
-                  ( "0", "srh ar", "Session UL bytes to this client for all files", "sUL" ) ;
-                  ( "0", "srh ar", "Slot kind", "Slot" ) ;
-                  ( "0", "srh", "Filename", "Filename" ) ]);
+                  ( Num, "srh ar", "Total DL bytes from this client for all files", "tDL" ) ;
+                  ( Num, "srh ar", "Total UL bytes to this client for all files", "tUL" ) ;
+                  ( Num, "srh ar", "Session DL bytes from this client for all files", "sDL" ) ;
+                  ( Num, "srh ar", "Session UL bytes to this client for all files", "sUL" ) ;
+                  ( Str, "srh ar", "Slot kind", "Slot" ) ;
+                  ( Str, "srh", "Filename", "Filename" ) ]);
 
                 List.iter (fun c ->
                     try
@@ -2848,23 +2848,23 @@ let _ =
               begin
                 Printf.bprintf buf "\\<br\\>\\<br\\>";
                 html_mods_table_header buf "uploadersTable" "uploaders" ([
-                  ( "1", "srh ac", "Client number", "Num" ) ;
-                  ( "0", "srh", "Network", "Network" ) ;
-                  ( "0", "srh", "Connection type [I]ndirect [D]irect", "C" ) ;
-                  ( "0", "srh", "Client name", "Client name" ) ;
-                  ( "0", "srh", "Secure User Identification [N]one, [P]assed, [F]ailed", "S" ) ;
-                  ( "0", "srh", "IP address", "IP address" ) ;
-		  ] @ (if Geoip.active () then [( "0", "srh", "Country Code/Name", "CC" )] else []) @ [
-                  ( "0", "srh", "Client brand", "CB" ) ;
-                  ( "0", "srh", "Client release", "CR" ) ;
+                  ( Num, "srh ac", "Client number", "Num" ) ;
+                  ( Str, "srh", "Network", "Network" ) ;
+                  ( Str, "srh", "Connection type [I]ndirect [D]irect", "C" ) ;
+                  ( Str, "srh", "Client name", "Client name" ) ;
+                  ( Str, "srh", "Secure User Identification [N]one, [P]assed, [F]ailed", "S" ) ;
+                  ( Str, "srh", "IP address", "IP address" ) ;
+		  ] @ (if Geoip.active () then [( Str, "srh", "Country Code/Name", "CC" )] else []) @ [
+                  ( Str, "srh", "Client brand", "CB" ) ;
+                  ( Str, "srh", "Client release", "CR" ) ;
                   ] @
-                  (if !!emule_mods_count then [( "0", "srh", "eMule MOD", "EM" )] else [])
+                  (if !!emule_mods_count then [( Str, "srh", "eMule MOD", "EM" )] else [])
                   @ [
-                  ( "0", "srh ar", "Total DL bytes from this client for all files", "tDL" ) ;
-                  ( "0", "srh ar", "Total UL bytes to this client for all files", "tUL" ) ;
-                  ( "0", "srh ar", "Session DL bytes from this client for all files", "sDL" ) ;
-                  ( "0", "srh ar", "Session UL bytes to this client for all files", "sUL" ) ;
-                  ( "0", "srh", "Filename", "Filename" ) ]);
+                  ( Num, "srh ar", "Total DL bytes from this client for all files", "tDL" ) ;
+                  ( Num, "srh ar", "Total UL bytes to this client for all files", "tUL" ) ;
+                  ( Num, "srh ar", "Session DL bytes from this client for all files", "sDL" ) ;
+                  ( Num, "srh ar", "Session UL bytes to this client for all files", "sUL" ) ;
+                  ( Str, "srh", "Filename", "Filename" ) ]);
 
                 Intmap.iter (fun cnum c ->
 
@@ -3059,25 +3059,25 @@ let _ =
 
         if use_html_mods o then
           html_mods_table_header buf "downloadersTable" "downloaders" ([
-              ( "1", "srh ac", "Client number (click to add as friend)", "Num" ) ;
-              ( "0", "srh", "Client state", "CS" ) ;
-              ( "0", "srh", "Client name", "Name" ) ;
-              ( "0", "srh", "Client brand", "CB" ) ;
-              ( "0", "srh", "Client release", "CR" ) ;
+              ( Num, "srh ac", "Client number (click to add as friend)", "Num" ) ;
+              ( Str, "srh", "Client state", "CS" ) ;
+              ( Str, "srh", "Client name", "Name" ) ;
+              ( Str, "srh", "Client brand", "CB" ) ;
+              ( Str, "srh", "Client release", "CR" ) ;
             ] @
-              (if !!emule_mods_count then [( "0", "srh", "eMule MOD", "EM" )] else [])
+              (if !!emule_mods_count then [( Str, "srh", "eMule MOD", "EM" )] else [])
             @ [
-              ( "0", "srh", "Overnet [T]rue, [F]alse", "O" ) ;
-              ( "1", "srh ar", "Connected time (minutes)", "CT" ) ;
-              ( "0", "srh", "Connection [I]ndirect, [D]irect", "C" ) ;
-              ( "0", "srh", "Secure User Identification [N]one, [P]assed, [F]ailed", "S" ) ;
-              ( "0", "srh", "IP address", "IP address" ) ;
-              ] @ (if Geoip.active () then [( "0", "srh", "Country Code/Name", "CC" )] else []) @ [ 
-              ( "1", "srh ar", "Total UL bytes to this client for all files", "tUL");
-              ( "1", "srh ar", "Total DL bytes from this client for all files", "tDL");
-              ( "1", "srh ar", "Session UL bytes to this client for all files", "sUL");
-              ( "1", "srh ar", "Session DL bytes from this client for all files", "sDL");
-              ( "0", "srh", "Filename", "Filename" ) ]);
+              ( Str, "srh", "Overnet [T]rue, [F]alse", "O" ) ;
+              ( Num, "srh ar", "Connected time (minutes)", "CT" ) ;
+              ( Str, "srh", "Connection [I]ndirect, [D]irect", "C" ) ;
+              ( Str, "srh", "Secure User Identification [N]one, [P]assed, [F]ailed", "S" ) ;
+              ( Str, "srh", "IP address", "IP address" ) ;
+              ] @ (if Geoip.active () then [( Str, "srh", "Country Code/Name", "CC" )] else []) @ [ 
+              ( Num, "srh ar", "Total UL bytes to this client for all files", "tUL");
+              ( Num, "srh ar", "Total DL bytes from this client for all files", "tDL");
+              ( Num, "srh ar", "Session UL bytes to this client for all files", "sUL");
+              ( Num, "srh ar", "Session DL bytes from this client for all files", "sDL");
+              ( Str, "srh", "Filename", "Filename" ) ]);
 
         let counter = ref 0 in
 
@@ -3555,15 +3555,15 @@ let _ =
 \\</td\\>\\</tr\\>\\</table\\>\\</td\\>\\</tr\\>\\<tr\\>\\<td\\>";
 
             html_mods_table_header buf "sharesTable" "shares" [
-              ( "0", "srh ac", "Click to remove user", "Remove" ) ;
-              ( "0", "srh", "Username", "User" ) ;
-              ( "0", "srh ac", "Only member of admin groups have admin rights", "Admin" ) ;
-              ( "0", "srh", "Member of groups", "Groups" ) ;
-              ( "0", "srh", "Default group", "Default group" ) ;
-              ( "0", "srh", "Mail address", "Email" ) ;
-              ( "0", "srh", "Commit dir", "Commit dir" ) ;
-              ( "0", "srh ar", "Download quota", "Max DLs" ) ;
-              ( "0", "srh ar", "Download count", "DLs" ) ];
+              ( Str, "srh ac", "Click to remove user", "Remove" ) ;
+              ( Str, "srh", "Username", "User" ) ;
+              ( Str, "srh ac", "Only member of admin groups have admin rights", "Admin" ) ;
+              ( Str, "srh", "Member of groups", "Groups" ) ;
+              ( Str, "srh", "Default group", "Default group" ) ;
+              ( Str, "srh", "Mail address", "Email" ) ;
+              ( Str, "srh", "Commit dir", "Commit dir" ) ;
+              ( Num, "srh ar", "Download quota", "Max DLs" ) ;
+              ( Num, "srh ar", "Download count", "DLs" ) ];
 
             html_mods_cntr_init ();
             user2_users_iter (fun user ->
@@ -3626,11 +3626,11 @@ class=\\\"srb\\\"\\>%s\\</a\\> " user.user_name group.group_name group.group_nam
 \\</td\\>\\</tr\\>\\</table\\>\\</td\\>\\</tr\\>\\<tr\\>\\<td\\>";
 
             html_mods_table_header buf "sharesTable" "shares" [
-              ( "0", "srh ac", "Click to remove group", "Remove" );
-              ( "0", "srh", "Groupname", "Group" );
-              ( "0", "srh ac", "Click to change status", "Admin" );
-              ( "0", "srh ar", "Member count", "Mem" );
-              ( "0", "srh ar", "Download count", "DLs" ) ];
+              ( Str, "srh ac", "Click to remove group", "Remove" );
+              ( Str, "srh", "Groupname", "Group" );
+              ( Str, "srh ac", "Click to change status", "Admin" );
+              ( Num, "srh ar", "Member count", "Mem" );
+              ( Num, "srh ar", "Download count", "DLs" ) ];
 
 	    html_mods_cntr_init ();
             user2_groups_iter (fun group ->
@@ -4009,8 +4009,8 @@ let _ =
             if o.conn_output = HTML then begin
                 Printf.bprintf buf "\\</pre\\>\\<div class=\\\"cs\\\"\\>";
                 html_mods_table_header buf "rssTable" "results" [
-                   ( "0", "sr", "Content", "Content" ) ;
-                   ( "0", "sr", "MLDonkey Download", "Download" ) ];
+                   ( Str, "sr", "Content", "Content" ) ;
+                   ( Str, "sr", "MLDonkey Download", "Download" ) ];
                 Printf.bprintf buf "\\<tr\\>";
                 html_mods_td buf [
                   (r.Rss.ch_title ^ " : " ^ url ^ (Printf.sprintf ", loaded %d hours ago" (((last_time ()) - feed.CW.rss_date) / 3600)), "srh", r.Rss.ch_title);
@@ -4127,9 +4127,9 @@ let _ =
 	List.iter (fun (tablename, l) ->
 	  html_mods_cntr_init ();
 	  html_mods_table_header buf ~total:"1" tablename "servers" [
-	    ( "0", "srh ac br", "Description (" ^ tablename ^ ")", "Description (" ^ tablename ^ ")") ;
-	    ( "1", "srh ar", "Hits", "Hits") ;
-	    ( "0", "srh ac", "Range", "Range")];
+	    ( Str, "srh ac br", "Description (" ^ tablename ^ ")", "Description (" ^ tablename ^ ")") ;
+	    ( Num, "srh ar", "Hits", "Hits") ;
+	    ( Str, "srh ac", "Range", "Range")];
           let nhits = 
 	    Ip_set.bl_fold_left (fun nhits br ->
 		Printf.bprintf buf "\\<tr class=\\\"dl-%d\\\"\\>"
diff --git src/daemon/driver/driverInteractive.ml src/daemon/driver/driverInteractive.ml
index e9b0bd3..b626fed 100644
--- src/daemon/driver/driverInteractive.ml
+++ src/daemon/driver/driverInteractive.ml
@@ -1671,13 +1671,13 @@ let print_results stime buf o results =
     begin
 
       html_mods_table_header buf "resultsTable" "results" [
-		( "1", "srh", "Number", "#" ) ;
-		( "1", "srh ar", "Size", "Size" ) ;
-		( "0", "srh ar", "Availability", "A" )  ;
-		( "0", "srh ar", "Status, D = already downloaded", "S" )  ;
-		( "0", "srh", "Filename", "Name" ) ;
-		( "0", "srh", "Tag", "Tag" ) ;
-		( "0", "srh", "MD4", "MD4" ) ];
+		( Num, "srh", "Number", "#" ) ;
+		( Num, "srh ar", "Size", "Size" ) ;
+		( Str, "srh ar", "Availability", "A" )  ;
+		( Str, "srh ar", "Status, D = already downloaded", "S" )  ;
+		( Str, "srh", "Filename", "Name" ) ;
+		( Str, "srh", "Tag", "Tag" ) ;
+		( Str, "srh", "MD4", "MD4" ) ];
 
       print_table_html_mods buf
        (List.rev !files)
@@ -1733,16 +1733,16 @@ let browse_friends () =
 
 let networks_header buf =
     html_mods_table_header buf "networkTable" "networkInfo" [
-      ( "0", "srh br", "Network name", "Network" ) ;
-      ( "0", "srh br", "Status", "Status" ) ;
-      ( "0", "srh br", "Has upload", "Upload" ) ;
-      ( "0", "srh br", "Has servers", "Servers" ) ;
-      ( "0", "srh br", "Has supernodes", "Supernodes" ) ;
-      ( "0", "srh br", "Has search", "Search" ) ;
-      ( "0", "srh br", "Has chat", "Chat" ) ;
-      ( "0", "srh br", "Has rooms", "Rooms" ) ;
-      ( "0", "srh", "Has multinet", "Multinet" ) ;
-      ( "0", "srh", "Has porttest", "Porttest" ) ]
+      ( Str, "srh br", "Network name", "Network" ) ;
+      ( Str, "srh br", "Status", "Status" ) ;
+      ( Str, "srh br", "Has upload", "Upload" ) ;
+      ( Str, "srh br", "Has servers", "Servers" ) ;
+      ( Str, "srh br", "Has supernodes", "Supernodes" ) ;
+      ( Str, "srh br", "Has search", "Search" ) ;
+      ( Str, "srh br", "Has chat", "Chat" ) ;
+      ( Str, "srh br", "Has rooms", "Rooms" ) ;
+      ( Str, "srh", "Has multinet", "Multinet" ) ;
+      ( Str, "srh", "Has porttest", "Porttest" ) ]
 
 let print_network_modules buf o =
   let buf = o.conn_buf in
@@ -1946,8 +1946,8 @@ let buildinfo html buf =
      
     if html then
       html_mods_table_header buf "sharesTable" "shares" [
-       ( "0", "srh", "core Build information", "Buildinfo" ) ;
-       ( "0", "srh", "", "" ) ]
+       ( Str, "srh", "core Build information", "Buildinfo" ) ;
+       ( Str, "srh", "", "" ) ]
     else
       Printf.bprintf buf "\n\t--Buildinfo--\n";
     html_mods_cntr_init ();
@@ -2075,8 +2075,8 @@ let runinfo html buf o =
 
     if html then
       html_mods_table_header buf "sharesTable" "shares" [
-       ( "0", "srh", "core runtime information", "Runinfo" ) ;
-       ( "0", "srh", "", "" ) ]
+       ( Str, "srh", "core runtime information", "Runinfo" ) ;
+       ( Str, "srh", "", "" ) ]
     else
       Printf.bprintf buf "\n\t--Runinfo--\n";
     html_mods_cntr_init ();
@@ -2112,9 +2112,9 @@ let portinfo html buf =
   let fill_network s = String.make (max 0 (!network_name_list_width - 7)) s in
   if html then
       html_mods_table_header buf "sharesTable" "shares" [
-       ( "0", "srh", "Network", "Network" ) ;
-       ( "0", "srh ar", "Port", "Port" ) ;
-       ( "1", "srh", "Type", "Type" ) ]
+       ( Str, "srh", "Network", "Network" ) ;
+       ( Num, "srh ar", "Port", "Port" ) ;
+       ( Str, "srh", "Type", "Type" ) ]
   else
     begin
       Printf.bprintf buf "\n\t--Portinfo--\n";
@@ -2158,12 +2158,12 @@ let diskinfo html buf =
   html_mods_cntr_init ();
   if html then
       html_mods_table_header buf "sharesTable" "shares" [
-       ( "0", "srh", "Directory", "Directory" ) ;
-       ( "0", "srh", "Directory type", "Type" ) ;
-       ( "1", "srh ar", "HDD used", "used" ) ;
-       ( "1", "srh ar", "HDD free", "free" ) ;
-       ( "1", "srh ar", "% free", "% free" ) ;
-       ( "0", "srh", "Filesystem", "FS" ) ]
+       ( Str, "srh", "Directory", "Directory" ) ;
+       ( Str, "srh", "Directory type", "Type" ) ;
+       ( Num, "srh ar", "HDD used", "used" ) ;
+       ( Num, "srh ar", "HDD free", "free" ) ;
+       ( Num, "srh ar", "% free", "% free" ) ;
+       ( Str, "srh", "Filesystem", "FS" ) ]
   else
     begin
       Printf.bprintf buf "\n\t--Diskinfo--\n";
@@ -2459,14 +2459,14 @@ let print_upstats o list server =
 
   if use_html_mods o then
     html_mods_table_header buf "upstatsTable" "upstats" [
-      ( "1", "srh", "Total file requests", "Reqs" ) ;
-      ( "1", "srh", "Total bytes sent", "Total" ) ;
-      ( "1", "srh", "Upload Ratio", "UPRatio" ) ;
-      ( "0", "srh", "Preview", "P" ) ;
-      ( "0", "srh", "Filename", "Filename" );
-      ( "0", "srh", "Statistic links", "Stats" );
-      ( "0", "srh", "Published on servers", "Publ" );
-      ( "0", "srh", "Share status", "Status" )
+      ( Num, "srh", "Total file requests", "Reqs" ) ;
+      ( Num, "srh", "Total bytes sent", "Total" ) ;
+      ( Num, "srh", "Upload Ratio", "UPRatio" ) ;
+      ( Str, "srh", "Preview", "P" ) ;
+      ( Str, "srh", "Filename", "Filename" );
+      ( Str, "srh", "Statistic links", "Stats" );
+      ( Str, "srh", "Published on servers", "Publ" );
+      ( Str, "srh", "Share status", "Status" )
     ]
   else
     begin
diff --git src/networks/bittorrent/bTInteractive.ml src/networks/bittorrent/bTInteractive.ml
index 4877428..bf0a809 100644
--- src/networks/bittorrent/bTInteractive.ml
+++ src/networks/bittorrent/bTInteractive.ml
@@ -484,42 +484,42 @@ let op_file_print_sources file o =
   if Hashtbl.length file.file_clients > 0 then begin
 
       let header_list = [
-        ( "1", "srh br ac", "Client number", "Num" ) ;
-        ( "0", "srh br", "Client UID", "UID" ) ;
-        ( "0", "srh br", "Client software", "Soft" ) ;
-        ( "0", "srh", "IP address", "IP address" ) ;
-        ( "0", "srh br ar", "Port", "Port" ) ;
-        ] @ (if Geoip.active () then [( "0", "srh br ar", "Country Code/Name", "CC" )] else []) @ [
-        ( "1", "srh ar", "Total UL bytes to this client for all files", "tUL" ) ;
-        ( "1", "srh ar br", "Total DL bytes from this client for all files", "tDL" ) ;
-        ( "1", "srh ar", "Session UL bytes to this client for all files", "sUL" ) ;
-        ( "1", "srh ar br", "Session DL bytes from this client for all files", "sDL" ) ;
-        ( "0", "srh ar", "Interested [T]rue, [F]alse", "I" ) ;
-        ( "0", "srh ar", "Choked [T]rue, [F]alse", "C" ) ;
-        ( "1", "srh br ar", "Allowed to write", "A" ) ;
-        ( "0", "srh ar", "Interesting [T]rue, [F]alse", "I" );
-        ( "0", "srh ar", "Already sent interested [T]rue, [F]alse", "A" );
-        ( "0", "srh br ar", "Already sent not interested [T]rue, [F]alse", "N" );
-
-        ( "0", "srh ar", "Good [T]rue, [F]alse", "G" );
-        ( "0", "srh ar", "Incoming [T]rue, [F]alse", "I" );
-        ( "0", "srh br ar", "Registered bitfield [T]rue, [F]alse", "B" );
-
-        ( "0", "srh ar", "Connect Time", "T" );
-        ( "0", "srh ar", "Last optimist", "L.Opt" );
-        ( "0", "srh br ar", "Num try", "N" );
-
-        ( "0", "srh", "DHT [T]rue, [F]alse", "D" );
-        ( "0", "srh", "Cache extensions [T]rue, [F]alse", "C" );
-        ( "0", "srh", "Fast extensions [T]rue, [F]alse", "F" );
-        ( "0", "srh", "uTorrent extensions [T]rue, [F]alse", "U" );
-        ( "0", "srh br", "Azureus messaging protocol [T]rue, [F]alse", "A" );
+        ( Num, "srh br ac", "Client number", "Num" ) ;
+        ( Str, "srh br", "Client UID", "UID" ) ;
+        ( Str, "srh br", "Client software", "Soft" ) ;
+        ( Str, "srh", "IP address", "IP address" ) ;
+        ( Num, "srh br ar", "Port", "Port" ) ;
+        ] @ (if Geoip.active () then [( Str, "srh br ar", "Country Code/Name", "CC" )] else []) @ [
+        ( Num, "srh ar", "Total UL bytes to this client for all files", "tUL" ) ;
+        ( Num, "srh ar br", "Total DL bytes from this client for all files", "tDL" ) ;
+        ( Num, "srh ar", "Session UL bytes to this client for all files", "sUL" ) ;
+        ( Num, "srh ar br", "Session DL bytes from this client for all files", "sDL" ) ;
+        ( Str, "srh ar", "Interested [T]rue, [F]alse", "I" ) ;
+        ( Str, "srh ar", "Choked [T]rue, [F]alse", "C" ) ;
+        ( Num, "srh br ar", "Allowed to write", "A" ) ;
+        ( Str, "srh ar", "Interesting [T]rue, [F]alse", "I" );
+        ( Str, "srh ar", "Already sent interested [T]rue, [F]alse", "A" );
+        ( Str, "srh br ar", "Already sent not interested [T]rue, [F]alse", "N" );
+
+        ( Str, "srh ar", "Good [T]rue, [F]alse", "G" );
+        ( Str, "srh ar", "Incoming [T]rue, [F]alse", "I" );
+        ( Str, "srh br ar", "Registered bitfield [T]rue, [F]alse", "B" );
+
+        ( Num, "srh ar", "Connection Time", "T" );
+        ( Str, "srh ar", "Last optimistic unchoke", "L.Opt" );
+        ( Num, "srh br ar", "Number of tries", "N" );
+
+        ( Str, "srh", "DHT [T]rue, [F]alse", "D" );
+        ( Str, "srh", "Cache extensions [T]rue, [F]alse", "C" );
+        ( Str, "srh", "Fast extensions [T]rue, [F]alse", "F" );
+        ( Str, "srh", "uTorrent extensions [T]rue, [F]alse", "U" );
+        ( Str, "srh br", "Azureus messaging protocol [T]rue, [F]alse", "A" );
 (*
-        ( "0", "srh", "Bitmap (absent|partial|present|verified)", (colored_chunks
+        ( Str, "srh", "Bitmap (absent|partial|present|verified)", (colored_chunks
         (Array.init (String.length info.G.file_chunks)
         (fun i -> ((int_of_char info.G.file_chunks.[i])-48)))) ) ;
 *)
-        ( "1", "srh ar", "Number of full chunks", (Printf.sprintf "%d"
+        ( Num, "srh ar", "Number of full chunks", (Printf.sprintf "%d"
           (match file.file_swarmer with
           | None -> 0
           | Some swarmer ->
@@ -566,7 +566,7 @@ let op_file_print_sources file o =
             ("", "sr", (btos c.client_incoming));
             ("", "br sr", (btos c.client_registered_bitfield));
 
-            ("", "sr", Printf.sprintf "%d" c.client_connect_time);
+            ("", "sr", Printf.sprintf "%d" ((last_time () - c.client_connect_time) / 60));
             ("", "ar sr", string_of_date c.client_last_optimist);
             ("", "br sr", Printf.sprintf "%d" c.client_num_try);
 
@@ -1190,8 +1190,8 @@ let commands =
         if use_html_mods o then begin
           html_mods_cntr_init ();
           html_mods_table_header o.conn_buf "sourcesInfo" "sourcesInfo" [
-            ( "0", "srh br", "File Info", "Info" ) ;
-            ( "0", "srh", "Value", "Value" ) ]
+            ( Str, "srh br", "File Info", "Info" ) ;
+            ( Str, "srh", "Value", "Value" ) ]
         end;
         op_file_print file.impl_file_val o;
         if use_html_mods o then begin
diff --git src/networks/direct_connect/dcInteractive.ml src/networks/direct_connect/dcInteractive.ml
index 1eda9d9..d34863c 100644
--- src/networks/direct_connect/dcInteractive.ml
+++ src/networks/direct_connect/dcInteractive.ml
@@ -125,12 +125,12 @@ let td_command text title ?(blink=false) ?(target=`Output) cmd =
 (* Print DC hubs header *)
 let dc_hublist_print_html_header buf ext =
     html_mods_table_header buf "serversTable" (Printf.sprintf "servers%s" ext) [
-                ( "1", "srh", "Hub number", "#" ) ;
-                ( "0", "srh", "Add hub to servers", "Add" ) ;
-                ( "0", "srh", "Hub name", "Hub name" ) ; 
-                ( "0", "srh", "IP address", "IP address" ) ;
-                ( "1", "srh", "Users in hub", "Users" ) ;
-                ( "0", "srh", "Hub info", "Info" ) ]
+                ( Num, "srh", "Hub number", "#" ) ;
+                ( Str, "srh", "Add hub to servers", "Add" ) ;
+                ( Str, "srh", "Hub name", "Hub name" ) ; 
+                ( Str, "srh", "IP address", "IP address" ) ;
+                ( Num, "srh", "Users in hub", "Users" ) ;
+                ( Str, "srh", "Hub info", "Info" ) ]
 
 (* print in html or txt list of hubs *)
 let hublist_print h hnum o =
@@ -165,22 +165,22 @@ let hublist_print h hnum o =
 (* Print DC users header *)
 let dc_user_print_html_header buf =
     html_mods_table_header buf "serversTable" "servers" [
-                ( "1", "srh", "User number", "#" );
-                ( "0", "srh", "User name", "Name" );
-                ( "0", "srh", "User type", "Type" );
-                ( "1", "srh", "Users slots (all/free)", "Slots" );
-                ( "1", "srh", "Users connected hubs (Normal/Vipped/Opped)", "Hubs" );
-                ( "0", "srh", "Users mode", "Mode" );
-                ( "1", "srh", "Users shared size", "Shared" );
-                ( "0", "srh", "User state", "State" );
-                ( "0", "srh", "User description field", "Description" );
-                ( "1", "srh", "User clients number", "Clients" );
-                ( "1", "srh", "Users servers number", "Servers" );
-                ( "0", "srh", "Download this clients filelist", "Filelist" );
-                ( "0", "srh", "Open chat window with this user. Blinking tells there are new unread messages", "Chat");
-                ( "1", "srh", "User total uploaded bytes", "Up" );
-                ( "1", "srh", "User total downloaded bytes", "Down" );
-                ( "0", "srh", "User client supports", "Supports" ); ];
+                ( Num, "srh", "User number", "#" );
+                ( Str, "srh", "User name", "Name" );
+                ( Str, "srh", "User type", "Type" );
+                ( Num, "srh", "Users slots (all/free)", "Slots" );
+                ( Num, "srh", "Users connected hubs (Normal/Vipped/Opped)", "Hubs" );
+                ( Str, "srh", "Users mode", "Mode" );
+                ( Num, "srh", "Users shared size", "Shared" );
+                ( Str, "srh", "User state", "State" );
+                ( Str, "srh", "User description field", "Description" );
+                ( Num, "srh", "User clients number", "Clients" );
+                ( Num, "srh", "Users servers number", "Servers" );
+                ( Str, "srh", "Download this clients filelist", "Filelist" );
+                ( Str, "srh", "Open chat window with this user. Blinking tells there are new unread messages", "Chat");
+                ( Num, "srh", "User total uploaded bytes", "Up" );
+                ( Num, "srh", "User total downloaded bytes", "Down" );
+                ( Str, "srh", "User client supports", "Supports" ); ];
     ()
 
 (* print in html or txt list of users *)
@@ -258,14 +258,14 @@ let user_print user num o =
 (* Print DC hubs header *)
 let dc_hub_print_html_header buf =
     html_mods_table_header buf "serversTable" "servers" [
-                ( "1", "srh", "Hub number", "#" ) ;
-                ( "0", "srh", "Set/UnSet server autoconnection state", "Auto" ) ;
-                ( "0", "srh", "Hub name", "Hub name" ) ;
-                ( "0", "srh", "IP address", "IP address" ) ;
-                ( "0", "srh", "My state in this hub", "State" ) ;
-                ( "1", "srh", "Users in hub", "Users" ) ;
-                ( "0", "srh", "Hub info", "Info" );
-                ( "0", "srh", "Open chat window with this hub. Blinking tells there are new unread message", "Chat" ) ]
+                ( Num, "srh", "Hub number", "#" ) ;
+                ( Str, "srh", "Set/UnSet server autoconnection state", "Auto" ) ;
+                ( Str, "srh", "Hub name", "Hub name" ) ;
+                ( Str, "srh", "IP address", "IP address" ) ;
+                ( Str, "srh", "My state in this hub", "State" ) ;
+                ( Num, "srh", "Users in hub", "Users" ) ;
+                ( Str, "srh", "Hub info", "Info" );
+                ( Str, "srh", "Open chat window with this hub. Blinking tells there are new unread message", "Chat" ) ]
 
 (* Print list of connected hubs *)
 let hub_print s num o =
@@ -310,14 +310,14 @@ let hub_print s num o =
 (* Print DC clients header *)
 let dc_client_print_html_header buf =
     html_mods_table_header buf "serversTable" "servers" [
-                ( "1", "srh", "Client number", "#" );
-                ( "0", "srh", "Remove Client", "Rem" );
-                ( "0", "srh", "Client name", "Name" );
-                ( "0", "srh", "Client ip/port", "Ip:Port" );
-                ( "0", "srh", "Client state", "State" );
-                ( "0", "srh", "Client connection", "Conn" );
-                ( "0", "srh", "Client last error/count", "Error" );
-                ( "0", "srh", "Client file", "File" ); ];
+                ( Num, "srh", "Client number", "#" );
+                ( Str, "srh", "Remove Client", "Rem" );
+                ( Str, "srh", "Client name", "Name" );
+                ( Str, "srh", "Client ip/port", "Ip:Port" );
+                ( Str, "srh", "Client state", "State" );
+                ( Str, "srh", "Client connection", "Conn" );
+                ( Str, "srh", "Client last error/count", "Error" );
+                ( Str, "srh", "Client file", "File" ); ];
             ()
 
 (* print in html or txt list of clients *)
@@ -380,14 +380,14 @@ let client_print name client num o =
 (* Print DC files header *)
 let dc_file_print_html_header buf =
     html_mods_table_header buf "serversTable" "servers" [
-                ( "1", "srh", "File number", "#" );
-                ( "0", "srh", "File name/path", "File" );
-                ( "1", "srh", "File size", "Size" );
-                ( "0", "srh", "Tiger Tree Hash and magnet url", "TTH and magnet" ); 
-                ( "1", "srh", "Files clients number (sources)", "Clients" );
-                ( "1", "srh", "Autosearches done", "Searches" );
-                ( "0", "srh", "Find new source by tth", "Find TTH" );
-                ( "0", "srh", "Find new source by similar name context", "Find similar" );  ];
+                ( Num, "srh", "File number", "#" );
+                ( Str, "srh", "File name/path", "File" );
+                ( Num, "srh", "File size", "Size" );
+                ( Str, "srh", "Tiger Tree Hash and magnet url", "TTH and magnet" ); 
+                ( Num, "srh", "Files clients number (sources)", "Clients" );
+                ( Num, "srh", "Autosearches done", "Searches" );
+                ( Str, "srh", "Find new source by tth", "Find TTH" );
+                ( Str, "srh", "Find new source by similar name context", "Find similar" );  ];
     ()  
 
 let html_show_tth file size tth =
@@ -437,11 +437,11 @@ let file_print file num o =
 (* Print DC shared files header *)
 let dc_shared_print_html_header buf =
     html_mods_table_header buf "serversTable" "servers" [
-                ( "1", "srh", "File number", "#" );
-                ( "0", "srh", "Shared file name", "Name" );
-                ( "1", "srh", "Shared file size", "Size" );
-                ( "0", "srh", "Tiger Tree Hash and magnet url", "TTH and magnet" );
-                (*( "1", "srh", "Shared files Tiger tree array length", "TTree #" );*) ];
+                ( Num, "srh", "File number", "#" );
+                ( Str, "srh", "Shared file name", "Name" );
+                ( Num, "srh", "Shared file size", "Size" );
+                ( Str, "srh", "Tiger Tree Hash and magnet url", "TTH and magnet" );
+                (*( Num, "srh", "Shared files Tiger tree array length", "TTree #" );*) ];
     ()
 
 
@@ -464,8 +464,8 @@ let shared_print dcsh num o =
 (* Print DC filelist header *)
 let dc_filelist_print_html_header buf =
     html_mods_table_header buf "serversTable" "servers" [
-                ( "1", "srh", "Number", "#" ) ;
-                ( "0", "srh", "Filelist name", "Filelist" ) ]
+                ( Num, "srh", "Number", "#" ) ;
+                ( Str, "srh", "Filelist name", "Filelist" ) ]
 
 (* Print one line from filelist *)
 let filelist_print fname line o =
@@ -535,10 +535,10 @@ let dc_list o group_type group_name =
 (* Print DC filelist files header *)
 let dc_filelist_files_print_html_header buf =
     html_mods_table_header buf "serversTable" (Printf.sprintf "servers") [
-                ( "1", "srh", "Number", "#" );
-                ( "0", "srh", "File/Directory name", "File/Directory name" );
-                ( "1", "srh", "File Size", "Size" );
-                ( "0", "srh", "Files TTH", "TTH" ) ]
+                ( Num, "srh", "Number", "#" );
+                ( Str, "srh", "File/Directory name", "File/Directory name" );
+                ( Num, "srh", "File Size", "Size" );
+                ( Str, "srh", "Files TTH", "TTH" ) ]
 
 (* Print one line from filelist file *)
 let filelist_file_print is_file spaces username dir fname fsize ftth line o =
@@ -584,8 +584,8 @@ let filelist_file_print is_file spaces username dir fname fsize ftth line o =
 (* Print DC info header *)
 let dc_info_html_header buf =
   html_mods_table_header buf "sharesTable" "shares" [
-       ( "0", "srh", "Direct Connect information", "DC Info" ) ;
-       ( "0", "srh", empty_string, empty_string ) ]
+       ( Str, "srh", "Direct Connect information", "DC Info" ) ;
+       ( Str, "srh", empty_string, empty_string ) ]
 
 (* Print DC info *)
 let dc_info_print info data line o =
@@ -819,9 +819,9 @@ let commands = [
     end else     
       Printf.bprintf buf "%d logged messages\n" (List.length messages);
     if use_html_mods o then html_mods_table_header buf "serversTable" "servers" [
-                ( "0", "srh", "Timestamp", "Time" );
-                ( "0", "srh", "Who message is from", "From" );
-                ( "0", "srh", "Message text", "Message" ) ];
+                ( Str, "srh", "Timestamp", "Time" );
+                ( Str, "srh", "Who message is from", "From" );
+                ( Str, "srh", "Message text", "Message" ) ];
     List.iter (fun (t,f,m) ->
       let msg =
         (match m with
diff --git src/networks/donkey/donkeyInteractive.ml src/networks/donkey/donkeyInteractive.ml
index ab4e5bd..56bd9ff 100644
--- src/networks/donkey/donkeyInteractive.ml
+++ src/networks/donkey/donkeyInteractive.ml
@@ -858,9 +858,9 @@ parent.fstatus.location.href='submit?q=rename+'+i+'+\\\"'+encodeURIComponent(for
 \\</script\\>";
 
           html_mods_table_header buf "scan_tempTable" "scan_temp" [
-            ( "0", "srh", "Filename", "Filename (press ENTER to rename)" ) ;
-            ( "0", "srh", "Status", "Status" ) ;
-            ( "0", "srh", "MD4 (link=ed2k)", "MD4 (link=ed2k)" ); ];
+            ( Str, "srh", "Filename", "Filename (press ENTER to rename)" ) ;
+            ( Str, "srh", "Status", "Status" ) ;
+            ( Str, "srh", "MD4 (link=ed2k)", "MD4 (link=ed2k)" ); ];
 
 
     end;
@@ -1426,41 +1426,41 @@ parent.fstatus.location.href='submit?q=rename+%d+\\\"'+encodeURIComponent(formID
       in
 
       html_mods_table_header buf "sourcesTable" "sources al" ([
-          ( "1", "srh ac", "Client number (click to add as friend)", "Num" ) ;
-          ( "0", "srh", "[A] = Active download from client", "A" ) ;
-          ( "0", "srh", "Client state", "CS" ) ;
-          ( "0", "srh", "Client name", "Name" ) ;
-          ( "0", "srh", "Client brand", "CB" ) ;
-          ( "0", "srh", "Client release", "CR" ) ;
+          ( Num, "srh ac", "Client number (click to add as friend)", "Num" ) ;
+          ( Str, "srh", "[A] = Active download from client", "A" ) ;
+          ( Str, "srh", "Client state", "CS" ) ;
+          ( Str, "srh", "Client name", "Name" ) ;
+          ( Str, "srh", "Client brand", "CB" ) ;
+          ( Str, "srh", "Client release", "CR" ) ;
         ] @
-          (if !!emule_mods_count then [( "0", "srh", "eMule MOD", "EM" )] else [])
+          (if !!emule_mods_count then [( Str, "srh", "eMule MOD", "EM" )] else [])
         @ [
-          ( "0", "srh", "Overnet [T]rue, [F]alse", "O" ) ;
-          ( "0", "srh", "Connection [I]ndirect, [D]irect", "C" ) ;
-          ( "0", "srh", "Secure User Identification [N]one, [P]assed, [F]ailed", "S" ) ;
-          ( "0", "srh br", "IP address", "IP address" ) ;
-          ] @ (if Geoip.active () then [( "0", "srh br", "Country Code/Name", "CC" )] else []) @ [
-          ( "1", "srh ar", "Total UL bytes to this client for all files", "tUL" ) ;
-          ( "1", "srh ar br", "Total DL bytes from this client for all files", "tDL" ) ;
-          ( "1", "srh ar", "Session UL bytes to this client for all files", "sUL" ) ;
-          ( "1", "srh ar br", "Session DL bytes from this client for all files", "sDL" ) ;
-          ( "1", "srh ar", "Your queue rank on this client", "Rnk" ) ;
-          ( "1", "srh ar br", "Source score", "Scr" ) ;
-          ( "1", "srh ar br", "Last ok", "LO" ) ;
-          ( "1", "srh ar", "Request score", "RS" ) ;
-          ( "1", "srh ar", "Request queue (see sources command)", "RQ" ) ;
-          ( "1", "srh ar br", "Request time (last connect) (# minutes ago)", "RT" ) ;
-          ( "0", "srh", "Has a slot [T]rue, [F]alse", "H" ) ;
-          ( "0", "srh br", "Banned [T]rue, [F]alse", "B" ) ;
-          ( "1", "srh ar", "Requests sent", "RS" ) ;
-          ( "1", "srh ar", "Requests received", "RR" ) ;
-          ( "1", "srh ar br", "Connected time (minutes)", "CT" ) ;
-          ( "0", "srh br", "Client MD4", "MD4" ) ;
-          ( "0", "srh", "Chunks (absent|partial|present|verified)",
+          ( Str, "srh", "Overnet [T]rue, [F]alse", "O" ) ;
+          ( Str, "srh", "Connection [I]ndirect, [D]irect", "C" ) ;
+          ( Str, "srh", "Secure User Identification [N]one, [P]assed, [F]ailed", "S" ) ;
+          ( Str, "srh br", "IP address", "IP address" ) ;
+          ] @ (if Geoip.active () then [( Str, "srh br", "Country Code/Name", "CC" )] else []) @ [
+          ( Num, "srh ar", "Total UL bytes to this client for all files", "tUL" ) ;
+          ( Num, "srh ar br", "Total DL bytes from this client for all files", "tDL" ) ;
+          ( Num, "srh ar", "Session UL bytes to this client for all files", "sUL" ) ;
+          ( Num, "srh ar br", "Session DL bytes from this client for all files", "sDL" ) ;
+          ( Num, "srh ar", "Your queue rank on this client", "Rnk" ) ;
+          ( Num, "srh ar br", "Source score", "Scr" ) ;
+          ( Num, "srh ar br", "Last ok", "LO" ) ;
+          ( Num, "srh ar", "Request score", "RS" ) ;
+          ( Num, "srh ar", "Request queue (see sources command)", "RQ" ) ;
+          ( Num, "srh ar br", "Request time (last connect) (# minutes ago)", "RT" ) ;
+          ( Str, "srh", "Has a slot [T]rue, [F]alse", "H" ) ;
+          ( Str, "srh br", "Banned [T]rue, [F]alse", "B" ) ;
+          ( Num, "srh ar", "Requests sent", "RS" ) ;
+          ( Num, "srh ar", "Requests received", "RR" ) ;
+          ( Num, "srh ar br", "Connected time (minutes)", "CT" ) ;
+          ( Str, "srh br", "Client MD4", "MD4" ) ;
+          ( Str, "srh", "Chunks (absent|partial|present|verified)",
 	  match chunks with
 	  | None -> ""
 	  | Some chunks -> colored_chunks chunks) ;
-          ( "1", "srh ar", "Number of full chunks", (Printf.sprintf "%d"
+          ( Num, "srh ar", "Number of full chunks", (Printf.sprintf "%d"
             (match chunks with
 	    | None -> 0
 	    | Some chunks ->
diff --git src/utils/cdk/printf2.ml src/utils/cdk/printf2.ml
index 0aa6a9f..4bdfc82 100644
--- src/utils/cdk/printf2.ml
+++ src/utils/cdk/printf2.ml
@@ -300,6 +300,7 @@ let html_mods_commands buf n c l =
     ( "bu bbig", "Extend search to more servers and view results", "mSub('output','vr');", "Extend search" ) ;
 *)
 
+type sort_kind = Num (* numeric, parse size suffixes (kMGT) *) | Str (* plain string *)
 
 let html_mods_table_header buf ?(total = "0") n c l =
     (* Name Class List *)
@@ -308,9 +309,10 @@ let html_mods_table_header buf ?(total = "0") n c l =
     if List.length l > 0 then begin
         Printf.bprintf buf "\\<tr\\>";
         List.iter (fun (w,x,y,z)  ->
+         let sort = match w with Num -> "1" | Str -> "0" in
          (* Sort Class Title Value *)
          Printf.bprintf buf "\\<td onClick=\\\"_tabSort(this,%s,%s);\\\" class=\\\"%s\\\" title=\\\"%s\\\"\\>%s\\</td\\>"
-         w total x y z;
+         sort total x y z;
         ) l;
         Printf.bprintf buf "\\</tr\\>"
       end
diff --git src/utils/cdk/printf2.mli src/utils/cdk/printf2.mli
index 6f765ac..97d164e 100644
--- src/utils/cdk/printf2.mli
+++ src/utils/cdk/printf2.mli
@@ -45,10 +45,12 @@ val log_to_file : out_channel -> unit
 val log_to_buffer : Buffer.t -> unit
 val close_log : unit -> unit
 
+type sort_kind = Num (* numeric, parse size suffixes (kMGT) *) | Str (* plain string *)
+
 val html_mods_big_header_start : Buffer.t -> string -> string list -> unit
 val html_mods_big_header_end : Buffer.t -> unit
 val html_mods_commands : Buffer.t -> string -> string -> (string * string * string * string) list -> unit
-val html_mods_table_header : Buffer.t -> ?total:string -> string -> string -> (string * string * string * string) list -> unit
+val html_mods_table_header : Buffer.t -> ?total:string -> string -> string -> (sort_kind * string * string * string) list -> unit
 val html_mods_table_header_colspan : Buffer.t -> ?total:string -> string -> string -> (string * string * string * string * string) list -> unit
 val html_mods_table_no_header : Buffer.t -> string -> string -> (string * string * string) list -> unit
 val html_mods_table_one_row : Buffer.t -> string -> string -> (string * string * string) list -> unit
