Index: !install.txt
===================================================================
--- !install.txt	(revision 241bedb6f1d6449ffdb439e34e3e516aece75b5e)
+++ !install.txt	(revision 95d57e0d7d6f5d657a04128f30d1e5e8ef938086)
@@ -12,5 +12,5 @@
 in my case, i could only compile the 1.11.00 version (due to a known bug, you may try to configure with --disable-cplusplus)
 of course, you can try any version, over 1.07
-follow the next steps, as root:
+follow the next steps, as root (this step is not needed, if you're upgrading from a pervious version):
 	cd /usr/src
 	wget http://dfn.dl.sourceforge.net/sourceforge/xmlrpc-c/xmlrpc-c-1.11.00.tgz
@@ -21,10 +21,9 @@
 	make install
 
-to get the svn for libtorrent, and rtorrent, you have to previously installed svn (apt-get install svn, ford debian, ubuntu)
 to install libtorrent, follow the next steps, as a root:
 	mkdir /usr/src/libtorrent
-	svn co svn://rakshasa.no/libtorrent/trunk/libtorrent /usr/src/libtorrent
-	cd /usr/src/libtorrent
-	./autogen.sh
+	wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.11.8.tar.gz
+	tar xvf libtorrent-0.11.8.tar.gz
+	cd /usr/src/libtorrent-0.11.8
 	./configure
 	make
@@ -33,7 +32,7 @@
 to install rtorrent, follow the next steps, as a root:
 	mkdir /usr/src/rtorrent
-	svn co svn://rakshasa.no/libtorrent/trunk/rtorrent /usr/src/rtorrent
-	cd /usr/src/rtorrent
-	./autogen.sh
+	wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.7.8.tar.gz
+	tar xvf rtorrent-0.7.8.tar.gz
+	cd /usr/src/rtorrent-0.7.8
 	./configure --with-xmlrpc-c
 	make
@@ -42,5 +41,5 @@
 now, after everything's done
 -extract the rtwi-xxxxxx.tar.gz to some place where your webserver can see it
--open the includes/config.php.inc, and edit the next lines:
+-open the includes/config.php.inc, and edit the next lines (this step is not needed, if you're upgrading from a pervious version):
  -$abs_path (the absolute path of your webroot, i.e.: "/var/www")
  -$domain (your domain, i.e.: "example.com")
@@ -50,13 +49,12 @@
 
 -you can find an example .rtorrent.rc file here: http://libtorrent.rakshasa.no/browser/trunk/rtorrent/doc/rtorrent.rc?rev=latest
--if you don't have a .rtorrent.rc file, create one in each user's home directory
 -open .rtorrent.rc, and edit them (for each user)
  -add this line to your .rtorrent.rc "scgi_port = 127.0.0.1:12345" where 12345 can be replaced by your choice, and restart rtorrent
  -if you have more than one user, set a different port for each user's .rtorrent.rc file (be aware, to set different session directories for the users)
 
--adding users:
+-adding users (this step is not needed, if you're upgrading from a pervious version):
  -find row 44, and change it:
  -replace "userX" with the actual linux username (keep the quotes)
- -replace "1234567890abcdef1234567890abcdef12345678" with the sha1 hash of the choosen password for the webui (you can generate the sha1 hash here => http://www.johnmaguire.us/tools/hashcalc/index.php)
+ -replace "1234567890abcdef1234567890abcdef12345678" with the hash of the choosen password for the webui (you can generate the sha1 hash here => http://www.johnmaguire.us/tools/hashcalc/index.php)
  -replace "12345", with the port, you've set in the user's .rtorrent.rc file
  -keep the quotes in the last three steps
Index: includes/config.inc.php
===================================================================
--- includes/config.inc.php	(revision 241bedb6f1d6449ffdb439e34e3e516aece75b5e)
+++ includes/config.inc.php	(revision 95d57e0d7d6f5d657a04128f30d1e5e8ef938086)
@@ -43,4 +43,6 @@
 //	"username"		=> array( "pass" => "7e240de74fb1ed08fa08d38063f6a6a91462a815", "port"	=> "36100" ),
 	"cyla"		=> array( "pass" => "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8", "port"	=> "36100" ),
+	"freez"		=> array( "pass" => "3c6ac60db4ea17076ddd3e044799e70832916837", "port"	=> "36099" ),
+	"pilok"		=> array( "pass" => "bbe31b37f154f7eadbc657d4187e79122592cd13", "port"	=> "36098" ),
 );
 
Index: includes/messages.en.inc.php
===================================================================
--- includes/messages.en.inc.php	(revision 241bedb6f1d6449ffdb439e34e3e516aece75b5e)
+++ includes/messages.en.inc.php	(revision 95d57e0d7d6f5d657a04128f30d1e5e8ef938086)
@@ -72,14 +72,16 @@
 	"d_ignore_commands_0"			=> "Not ignoring commands",
 	"d_ignore_commands_1"			=> "Ignoring commands",
-	"d_is_active_0"				=> "Stopped",
-	"d_is_active_1"				=> "Started",
-	"d_is_hash_checked_0"			=> "Hash not checked",
-	"d_is_hash_checked_1"			=> "Hash checked",
-	"d_is_multi_file_multi"			=> "Multi",
-	"d_is_multi_file_single"		=> "Single",
-	"d_is_open_0"				=> "Closed",
-	"d_is_open_1"				=> "Open",
+	"d_active_0"				=> "Stopped",
+	"d_active_1"				=> "Started",
+	"d_hash_checked_0"			=> "Hash not checked",
+	"d_hash_checked_1"			=> "Hash checked",
+	"d_multi_file_multi"			=> "Multi",
+	"d_multi_file_single"		=> "Single",
+	"d_open_0"				=> "Closed",
+	"d_open_1"				=> "Open",
 	"d_complete_0"				=> "Incomplete",
 	"d_complete_1"				=> "Completed",
+	"d_hash_checking_0"			=> "Not hashing",
+	"d_hash_checking_1"			=> "Hashing",
 	"d_hashing_0"				=> "Not hashing",
 	"d_hashing_1"				=> "Normal hashing",
@@ -99,6 +101,6 @@
 	"t_enabled_0"				=> "Disabled",
 	"t_enabled_1"				=> "Enabled",
-	"t_is_open_0"				=> "Closed",
-	"t_is_open_1"				=> "Open",
+	"t_open_0"				=> "Closed",
+	"t_open_1"				=> "Open",
 	"t_type_1"				=> "TCP",
 	"t_type_2"				=> "UDP",
@@ -106,5 +108,5 @@
 	"bind_0000"				=> "Not set",
 	"ip_0000"				=> "All IP addresses",
-	"proxy_address_000"			=> "Not set",
+	"proxy_address_0000"			=> "Not set",
 
 	"pics"					=> "rTWi - The rTorrent Web interface",
Index: index.html
===================================================================
--- index.html	(revision 241bedb6f1d6449ffdb439e34e3e516aece75b5e)
+++ index.html	(revision 95d57e0d7d6f5d657a04128f30d1e5e8ef938086)
@@ -1,3 +1,24 @@
 <?php
+
+$xmlrpc_methods = array(
+	"si"	=> array( "get_bind", "get_check_hash", "get_connection_leech", "get_connection_seed", "get_directory", "get_download_rate", "get_handshake_log", "get_hash_interval", "get_hash_max_tries", "get_hash_read_ahead", "get_http_cacert", "get_http_capath", "get_http_proxy", "get_ip", "get_key_layout", "get_max_downloads_div", "get_max_downloads_global", "get_max_file_size", "get_max_memory_usage", "get_max_open_files", "get_max_open_http", "get_max_open_sockets", "get_max_peers", "get_max_peers_seed", "get_max_uploads", "get_max_uploads_div", "get_max_uploads_global", "get_memory_usage", "get_min_peers", "get_min_peers_seed", "get_name", "get_peer_exchange", "get_port_open", "get_port_random", "get_port_range", "get_preload_min_size", "get_preload_required_rate", "get_preload_type", "get_proxy_address", "get_receive_buffer_size", "get_safe_free_diskspace", "get_safe_sync", "get_scgi_dont_route", "get_send_buffer_size", "get_session", "get_session_lock", "get_session_on_completion", "get_split_file_size", "get_split_suffix", "get_stats_not_preloaded", "get_stats_preloaded", "get_timeout_safe_sync", "get_timeout_sync", "get_tracker_dump", "get_tracker_numwant", "get_upload_rate", "get_use_udp_trackers", "system.client_version", "system.get_cwd", "system.hostname", "system.library_version", "system.pid" ),
+	"d"	=> array( "d.get_base_filename=", "d.get_base_path=", "d.get_bytes_done=", "d.get_chunk_size=", "d.get_chunks_hashed=", "d.get_complete=", "d.get_completed_bytes=", "d.get_completed_chunks=", "d.get_connection_current=", "d.get_connection_leech=", "d.get_connection_seed=", "d.get_creation_date=", "d.get_custom1=", "d.get_custom2=", "d.get_custom3=", "d.get_custom4=", "d.get_custom5=", "d.get_directory=", "d.get_down_rate=", "d.get_down_total=", "d.get_free_diskspace=", "d.get_hash=", "d.get_hashing=", "d.get_ignore_commands=", "d.get_left_bytes=", "d.get_local_id=", "d.get_local_id_html=", "d.get_max_file_size=", "d.get_max_peers=", "d.get_max_uploads=", "d.get_message=", "d.get_min_peers=", "d.get_name=", "d.get_peer_exchange=", "d.get_peers_accounted=", "d.get_peers_complete=", "d.get_peers_connected=", "d.get_peers_max=", "d.get_peers_min=", "d.get_peers_not_connected=", "d.get_priority=", "d.get_priority_str=", "d.get_ratio=", "d.get_size_bytes=", "d.get_size_chunks=", "d.get_size_files=", "d.get_skip_rate=", "d.get_skip_total=", "d.get_state=", "d.get_state_changed=", "d.get_tied_to_file=", "d.get_tracker_focus=", "d.get_tracker_numwant=", "d.get_tracker_size=", "d.get_up_rate=", "d.get_up_total=", "d.get_uploads_max=", "d.is_active=", "d.is_hash_checked=", "d.is_hash_checking=", "d.is_multi_file=", "d.is_open=", "d.is_private=" ),
+	"f"	=> array( "f.get_completed_chunks=", "f.get_frozen_path=", "f.get_is_created=", "f.get_is_open=", "f.get_last_touched=", "f.get_match_depth_next=", "f.get_match_depth_prev=", "f.get_offset=", "f.get_path=", "f.get_path_components=", "f.get_path_depth=", "f.get_priority=", "f.get_range_first=", "f.get_range_second=", "f.get_size_bytes=", "f.get_size_chunks=" ),
+	"t"	=> array( "t.get_group=", "t.get_id=", "t.get_min_interval=", "t.get_normal_interval=", "t.get_scrape_complete=", "t.get_scrape_downloaded=", "t.get_scrape_incomplete=", "t.get_scrape_time_last=", "t.get_type=", "t.get_url=", "t.is_enabled=", "t.is_open=" )
+);
+
+function make_abs_path( &$rel_path, &$cwd, $home ) {
+	if ( substr( $rel_path, 0, 2 ) == "./" ) {
+		$ret = substr( $rel_path, 2 );
+		$ret = "{$cwd}/{$ret}";
+	} elseif ( substr( $rel_path, 0, 2 ) == "~/" ) {
+		$ret = substr( $rel_path, 2 );
+		$ret = "{$home}/{$ret}";
+	} else {
+		$ret = $rel_path;
+	}
+	$ret = str_replace( "//", "/", $ret );
+	return $ret;
+}
 
 function switch_bytes( $bytes ) {
@@ -19,5 +40,5 @@
 }
 
-function prepare_si_responses( &$responses, &$message ) {
+function prepare_si_responses( &$responses, &$message, &$home_path ) {
 	$bytes_down_arr = switch_bytes( $responses["bytes_down"] );
 	$bytes_up_arr = switch_bytes( $responses["bytes_up"] );
@@ -69,11 +90,6 @@
 	$responses["tracker_numwant_value"] = $responses["tracker_numwant"] == -1 ? $message["disabled"] : $responses["tracker_numwant"];
 
-
-	if ( substr( $responses["directory"], 0, 2 ) == "./" ) {
-		$responses["directory_value"] = substr( $responses["directory"], 2 );
-		$responses["directory_value"] = "{$home_path}{$_SESSION["rtwi_nick"]}/{$responses["directory_value"]}";
-	} else {
-		$responses["directory_value"] = $responses["directory"];
-	}
+	$responses["directory_value"] = make_abs_path( $responses["directory"], $responses["get_cwd"], "{$home_path}{$_SESSION["rtwi_nick"]}" );
+	$responses["session_value"] = make_abs_path( $responses["session"], $responses["get_cwd"], "{$home_path}{$_SESSION["rtwi_nick"]}" );
 
 	if ( $responses["max_file_size"] == -1 ) {
@@ -88,5 +104,5 @@
 		$responses["split_file_size_value"] = $message["disabled"];
 	} else {
-		$max_file_size_arr = switch_bytes( $responses["split_file_size"] );
+		$split_file_size_arr = switch_bytes( $responses["split_file_size"] );
 		$responses["split_file_size_value"] = sprintf( "%.1f", $split_file_size_arr[0] );
 		$responses["split_file_size_suffix"] = $split_file_size_arr[1];
@@ -98,5 +114,5 @@
 }
 
-function prepare_d_responses( &$responses, &$message, &$home_path ) {
+function prepare_d_responses( &$responses, &$message, &$home_path, &$cwd ) {
 	$d_bytes_done_arr = switch_bytes( $responses["d_bytes_done"] );
 	$d_chunk_size_arr = switch_bytes( $responses["d_chunk_size"] );
@@ -140,26 +156,29 @@
 	$responses["d_up_total_suffix"] = $d_up_total_arr[1];
 
+	$responses["d_active_value"] = $responses["d_active"] == 1 ? $message["d_active_1"] : $message["d_active_0"];
 	$responses["d_complete_value"] = $responses["d_complete"] == 1 ? $message["d_complete_1"] : $message["d_complete_0"];
 	$responses["d_connection_current_value"] = $responses["d_connection_current"] == "seed" ? $message["d_connection_current_seed"] : $message["d_connection_current_leech"];
+	$responses["d_creation_date_value"] = date( "Y-m-d H:i:s", $responses["d_creation_date"] );
 	$responses["d_ignore_commands_value"] = $responses["d_ignore_commands"] == 1 ? $message["d_ignore_commands_1"] : $message["d_ignore_commands_0"];
-	$responses["d_is_active_value"] = $responses["d_is_active"] == 1 ? $message["d_is_active_1"] : $message["d_is_active_0"];
-	$responses["d_is_hash_checked_value"] = $responses["d_is_hash_checked"] == 1 ? $message["d_is_hash_checked_1"] : $message["d_is_hash_checked_0"];
-	$responses["d_is_multi_file_value"] = $responses["d_is_multi_file"] == 1 ? $message["d_is_multi_file_multi"] : $message["d_is_multi_file_single"];
-	$responses["d_is_open_value"] = $responses["d_is_open"] == 1 ? $message["d_is_open_1"] : $message["d_is_open_0"];
+	$responses["d_hash_checked_value"] = $responses["d_hash_checked"] == 1 ? $message["d_hash_checked_1"] : $message["d_hash_checked_0"];
+	$responses["d_hash_checking_value"] = $responses["d_hash_checking"] == 1 ? $message["d_hash_checking_1"] : $message["d_hash_checking_0"];
+	$responses["d_max_peers_value"] = $responses["d_max_peers"] == -1 ? $message["disabled"] : $responses["d_max_peers"];
+	$responses["d_max_uploads_value"] = $responses["d_max_uploads"] == -1 ? $message["disabled"] : $responses["d_max_uploads"];
+	$responses["d_min_peers_value"] = $responses["d_min_peers"] == -1 ? $message["disabled"] : $responses["d_min_peers"];
+	$responses["d_multi_file_value"] = $responses["d_multi_file"] == 1 ? $message["d_multi_file_multi"] : $message["d_multi_file_single"];
+	$responses["d_open_value"] = $responses["d_open"] == 1 ? $message["d_open_1"] : $message["d_open_0"];
+	$responses["d_peer_exchange_value"] = $responses["d_peer_exchange"] == 0 ? $message["disabled"] : $message["enabled"];
+	$responses["d_peers_max_value"] = $responses["d_peers_max"] == -1 ? $message["disabled"] : $responses["d_peers_max"];
+	$responses["d_peers_min_value"] = $responses["d_peers_min"] == -1 ? $message["disabled"] : $responses["d_peers_min"];
+	$responses["d_private_value"] = $responses["d_private"] == 1 ? $message["yes"] : $message["no"];
 	$responses["d_state_value"] = $responses["d_state"] == 1 ? $message["d_state_1"] : $message["d_state_0"];
 	$responses["d_state_changed_value"] = date( "Y-m-d H:i:s", $responses["d_state_changed"] );
-
-	if ( substr( $responses["d_base_path"], 0, 2 ) == "./" ) {
-		$responses["d_base_path_value"] = substr( $responses["d_base_path"], 2 );
-		$responses["d_base_path_value"] = "{$home_path}{$_SESSION["rtwi_nick"]}/{$responses["d_base_path_value"]}";
-	} else {
-		$responses["d_base_path_value"] = $responses["d_base_path"];
-	}
-	if ( substr( $responses["d_directory"], 0, 2 ) == "./" ) {
-		$responses["d_directory_value"] = substr( $responses["d_directory"], 2 );
-		$responses["d_directory_value"] = "{$home_path}{$_SESSION["rtwi_nick"]}/{$responses["d_directory_value"]}";
-	} else {
-		$responses["d_directory_value"] = $responses["d_directory"];
-	}
+	$responses["d_tracker_numwant_value"] = $responses["d_tracker_numwant"] == -1 ? $message["disabled"] : $responses["d_tracker_numwant"];
+	$responses["d_uploads_max_value"] = $responses["d_uploads_max"] == -1 ? $message["disabled"] : $responses["d_uploads_max"];
+
+	$responses["d_base_path_value"] = make_abs_path( $responses["d_base_path"], $cwd, "{$home_path}{$_SESSION["rtwi_nick"]}" );
+	$responses["d_directory_value"] = make_abs_path( $responses["d_directory"], $cwd, "{$home_path}{$_SESSION["rtwi_nick"]}" );
+	$responses["d_tied_to_file_value"] = make_abs_path( $responses["d_tied_to_file"], $cwd, "{$home_path}{$_SESSION["rtwi_nick"]}" );
+
 	if ( $responses["d_down_rate"] > 0 ) {
 		$responses["d_estimated_time"] = $responses["d_left_bytes"] / $responses["d_down_rate"];
@@ -204,5 +223,5 @@
 }
 
-function prepare_f_responses( &$responses, &$message, &$home_path ) {
+function prepare_f_responses( &$responses, &$message, &$home_path, &$cwd ) {
 	$responses["f_last_touched"] = sprintf( "%.0f", $responses["f_last_touched"] );
 	$responses["f_range_first"] += 1;
@@ -216,10 +235,6 @@
 	$responses["f_last_touched_value"] = date( "Y-m-d H:i:s", substr( $responses["f_last_touched"], 0, -6 ) );
 
-	if ( substr( $responses["f_frozen_path"], 0, 2 ) == "./" ) {
-		$responses["f_frozen_path_value"] = substr( $responses["f_frozen_path"], 2 );
-		$responses["f_frozen_path_value"] = "{$home_path}{$_SESSION["rtwi_nick"]}/{$responses["f_frozen_path_value"]}";
-	} else {
-		$responses["f_frozen_path_value"] = $responses["f_frozen_path"];
-	}
+	$responses["f_frozen_path_value"] = make_abs_path( $responses["f_frozen_path"], $cwd, "{$home_path}{$_SESSION["rtwi_nick"]}" );
+
 	if ( $responses["f_size_chunks"] == 0 ) {
 		$responses["f_percentage"] = 1;
@@ -242,8 +257,10 @@
 
 function prepare_trac_responses( &$responses, &$message ) {
+	$t_scrape_downloaded_arr = switch_bytes( $responses["t_scrape_downloaded"] );
+
 	$responses["t_scrape_time_last"] = sprintf( "%.0f", $responses["t_scrape_time_last"] );
 
 	$responses["t_enabled_value"] = $responses["t_enabled"] == 1 ? $message["t_enabled_1"] : $message["t_enabled_0"];
-	$responses["t_is_open_value"] = $responses["t_is_open"] == 1 ? $message["t_is_open_1"] : $message["t_is_open_0"];
+	$responses["t_open_value"] = $responses["t_open"] == 1 ? $message["t_open_1"] : $message["t_open_0"];
 	$responses["t_min_interval_value"] = sprintf( "%02d:%02d:%02d", floor( $responses["t_min_interval"] / 3600 ), $responses["t_min_interval"] / 60 % 60, $responses["t_min_interval"] % 60 );
 	$responses["t_normal_interval_value"] = sprintf( "%02d:%02d:%02d", floor( $responses["t_normal_interval"] / 3600 ), $responses["t_normal_interval"] / 60 % 60, $responses["t_normal_interval"] % 60 );
@@ -371,5 +388,5 @@
 	$out = "{$len}:{$headers},{$request}";
 
-	$fp = @fsockopen( $xmlrpc_array["host"], $xmlrpc_array["port"], $errno, $errstr, $xmlrpc_array["timeout"] );
+	$fp = fsockopen( $xmlrpc_array["host"], $xmlrpc_array["port"], $errno, $errstr, $xmlrpc_array["timeout"] );
 	if ( $fp ) {
 		fwrite( $fp, $out );
@@ -403,4 +420,8 @@
 			$methodval = substr( $methodval, 5 );
 			$methodval = "{$prefix}{$methodval}";
+		} elseif ( strlen( $methodval ) > 6 && $methodval[6] == "." ) {
+			$prefix = substr( $methodval, 0, 1 );
+			$methodval = substr( $methodval, 7 );
+			$methodval = "{$methodval}";
 		} else {
 			$methodval = substr( $methodval, 4 );
@@ -437,5 +458,5 @@
 
 error_reporting( E_ALL );
-error_reporting( E_ALL ^ E_NOTICE );
+//error_reporting( E_ALL ^ E_NOTICE );
 
 session_start();
@@ -450,5 +471,5 @@
 $st = getmicrotime();
 
- if ( isset( $_REQUEST["mod"] ) ) {
+if ( isset( $_REQUEST["mod"] ) ) {
 	$mod = $_REQUEST["mod"];
 } else {
@@ -580,14 +601,17 @@
 		if ( in_array( "..", split( "/", $directory ) ) || in_array( ".", split( "/", $directory ) ) ) {
 			$_SESSION["rtwi_err"] = "badrtdirectory";
-			header( "location: {$url["index"]}?mod=addtorrent" );
+			header( "location: {$url["index"]}" );
 			exit;
+		} elseif ( substr( $directory, 0, 2 ) == "~/" ) {
+			$directory = substr( $directory, 2 );
+			$directory = "{$home_path}{$_SESSION["rtwi_nick"]}/{$directory}";
 		} elseif ( substr( $directory, 0, 2 ) == "./" ) {
 			$directory = substr( $directory, 2 );
-			$directory = "{$home_path}{$_SESSION["rtwi_nick"]}/{$directory}";
+			$directory = "{$si_responses["get_cwd"]}/{$directory}";
 		} elseif ( substr( $directory, 0, strlen( "{$home_path}{$_SESSION["rtwi_nick"]}" ) ) == "{$home_path}{$_SESSION["rtwi_nick"]}" ) {
 			$directory = "{$directory}";
 		} else {
 			$_SESSION["rtwi_err"] = "badrtdirectory";
-			header( "location: {$url["index"]}?mod=addtorrent" );
+			header( "location: {$url["index"]}" );
 			exit;
 		}
@@ -602,5 +626,5 @@
 		if ( in_array( "..", split( "/", $path ) ) || in_array( ".", split( "/", $path ) ) ) {
 			$_SESSION["rtwi_err"] = "badatpath";
-			header( "location: {$url["index"]}?mod=addtorrent" );
+			header( "location: {$url["index"]}" );
 			exit;
 		}
@@ -641,5 +665,9 @@
 		addrefresh( $xml, $tnode, $message );
 
-		$methodlist = array( "d.get_base_filename=", "d.get_base_path=", "d.get_bytes_done=", "d.get_chunk_size=", "d.get_chunks_hashed=", "d.get_complete=", "d.get_completed_bytes=", "d.get_completed_chunks=", "d.get_connection_current=", "d.get_connection_leech=", "d.get_connection_seed=", "d.get_directory=", "d.get_down_rate=", "d.get_down_total=", "d.get_free_diskspace=", "d.get_hash=", "d.get_hashing=", "d.get_ignore_commands=", "d.get_is_active=", "d.get_is_hash_checked=", "d.get_is_hash_checking=", "d.get_is_multi_file=", "d.get_is_open=", "d.get_left_bytes=", "d.get_max_file_size=", "d.get_max_peers=", "d.get_max_uploads=", "d.get_min_peers=", "d.get_name=", "d.get_peers_accounted=", "d.get_peers_complete=", "d.get_peers_connected=", "d.get_peers_max=", "d.get_peers_min=", "d.get_peers_not_connected=", "d.get_priority=", "d.get_priority_str=", "d.get_ratio=", "d.get_size_bytes=", "d.get_size_chunks=", "d.get_size_files=", "d.get_skip_rate=", "d.get_skip_total=", "d.get_state=", "d.get_state_changed=", "d.get_tied_to_file=", "d.get_tracker_focus=", "d.get_tracker_numwant=", "d.get_tracker_size=", "d.get_up_rate=", "d.get_up_total=", "d.get_uploads_max=" );
+		// retrieving server info
+		$methodlist = $xmlrpc_methods["si"];
+		$si_responses = xmlrpc_multicall( $xmlrpc_array, $methodlist );
+
+		$methodlist = $xmlrpc_methods["d"];
 		$request = xmlrpc_encode_request( "d.multicall", array_merge( array( $_SESSION["rtwi_view"] ), $methodlist ) );
 		$response = xmlrpc_call( $xmlrpc_array, $request );
@@ -652,18 +680,17 @@
 		for ( $i = 0; $i < count( $response ); $i++ ) {
 			for ( $r = 0; $r < count( $methodlist ); $r++ ) {
-				$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
-				$responses[$i][$methodval] = $response[$i][$r];
+				$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $methodlist[$r] );
+				$d_responses[$i][$methodval] = $response[$i][$r];
 			}
-			$bytes_down += $responses[$i]["d_down_rate"];
-			$bytes_up += $responses[$i]["d_up_rate"];
-			if ( $responses[$i]["d_hash"] == $hash ) {
-				$torrent = $responses[$i];
+			$bytes_down += $d_responses[$i]["d_down_rate"];
+			$bytes_up += $d_responses[$i]["d_up_rate"];
+			if ( $d_responses[$i]["d_hash"] == $hash ) {
+				$torrent = $d_responses[$i];
 			}
 		}
-		unset( $responses );
+		unset( $d_responses );
 
 		if ( is_array( $torrent ) ) {
-			prepare_d_responses( $torrent, $message, $home_path );
-
+			prepare_d_responses( $torrent, $message, $home_path, $si_responses["get_cwd"] );
 			switch ( $page ) {
 				case "peers" : {
@@ -687,5 +714,5 @@
 					$node->setAttribute( "dirname", $torrent["d_directory_value"] );
 
-					$methodlist = array( "f.get_completed_chunks=", "f.get_frozen_path=", "f.get_is_created=", "f.get_is_open=", "f.get_last_touched=", "f.get_match_depth_next=", "f.get_match_depth_prev=", "f.get_offset=", "f.get_path=", "f.get_path_components=", "f.get_path_depth=", "f.get_priority=", "f.get_range_first=", "f.get_range_second=", "f.get_size_bytes=", "f.get_size_chunks=" );
+					$methodlist = $xmlrpc_methods["f"];
 					$request = xmlrpc_encode_request( "f.multicall", array_merge( array( $torrent["d_hash"], 0 ), $methodlist ) );
 					$response = xmlrpc_call( $xmlrpc_array, $request );
@@ -698,34 +725,13 @@
 						}
 					}
-$st0 = getmicrotime();
 					for ( $i = 0; $i < $torrent["d_size_files"]; $i++ ) {
-$st1 = getmicrotime();
-						prepare_f_responses( $responses[$i], $message, $home_path );
-$tt1 = getmicrotime();
-$st2 = getmicrotime();
-//						$fnode = build_xmltree( $responses[$i]["f_path_components"], $node, $xml );
-$fnode = $node->appendChild( $xml->createElement( "file" ) );
-$fnode->setAttribute( "filename", $responses[$i]["f_path"] );
-$tt2 = getmicrotime();
-$st3 = getmicrotime();
+						prepare_f_responses( $responses[$i], $message, $home_path, $si_response["get_cwd"] );
+						$fnode = build_xmltree( $responses[$i]["f_path_components"], $node, $xml );
+
+						//$fnode = $node->appendChild( $xml->createElement( "file" ) );
+						//$fnode->setAttribute( "filename", $responses[$i]["f_path"] );
 						$fnode->setAttribute( "id", $i );
-$tt3 = getmicrotime();
-$st4 = getmicrotime();
 						xmlrpc_multiappend( $xml, $fnode, $responses[$i] );
-$tt4 = getmicrotime();
-
-$time1 += $tt1 - $st1;
-$time2 += $tt2 - $st2;
-$time3 += $tt3 - $st3;
-$time4 += $tt4 - $st4;
 					}
-$tt0 = getmicrotime();
-$time0 += $tt0 - $st0;
-
-//printf( "\r\n0 time: %0.6f sec<br />\r\n", $time0 );
-//printf( "\r\n1 time: %0.6f sec<br />\r\n", $time1 );
-//printf( "\r\n2 time: %0.6f sec<br />\r\n", $time2 );
-//printf( "\r\n3 time: %0.6f sec<br />\r\n", $time3 );
-//printf( "\r\n4 time: %0.6f sec<br />\r\n", $time4 );
 
 					break;
@@ -736,5 +742,5 @@
 					$node = $node->appendChild( $xml->createElement( "torrent_trackers" ) );
 
-					$methodlist = array( "t.get_enabled=", "t.get_group=", "t.get_id=", "t.get_is_open=", "t.get_min_interval=", "t.get_normal_interval=", "t.get_scrape_complete=", "t.get_scrape_downloaded=", "t.get_scrape_incomplete=", "t.get_scrape_time_last=", "t.get_type=", "t.get_url=" );
+					$methodlist = $xmlrpc_methods["t"];
 					$request = xmlrpc_encode_request( "t.multicall", array_merge( array( $torrent["d_hash"], 0 ), $methodlist ) );
 					$response = xmlrpc_call( $xmlrpc_array, $request );
@@ -743,5 +749,5 @@
 					for ( $i = 0; $i < count( $response ); $i++ ) {
 						for ( $r = 0; $r < count( $methodlist ); $r++ ) {
-							$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
+							$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $methodlist[$r] );
 							$responses[$i][$methodval] = $response[$i][$r];
 						}
@@ -769,5 +775,4 @@
 				}
 			}
-
 			xmlrpc_multiappend( $xml, $node, $torrent );
 		} else {
@@ -775,23 +780,21 @@
 		}
 
-		$methodlist = array( "get_bind", "get_check_hash", "get_client_version", "get_connection_leech", "get_connection_seed", "get_directory", "get_download_rate", "get_handshake_log", "get_hash_interval", "get_hash_max_tries", "get_hash_read_ahead", "get_hostname", "get_http_cacert", "get_http_capath", "get_http_proxy", "get_ip", "get_key_layout", "get_library_version", "get_max_downloads_div", "get_max_downloads_global", "get_max_file_size", "get_max_memory_usage", "get_max_open_files", "get_max_open_http", "get_max_open_sockets", "get_max_peers", "get_max_peers_seed", "get_max_uploads", "get_max_uploads_div", "get_max_uploads_global", "get_min_peers", "get_min_peers_seed", "get_name", "get_pid", "get_port_open", "get_port_random", "get_port_range", "get_preload_min_size", "get_preload_required_rate", "get_preload_type", "get_proxy_address", "get_receive_buffer_size", "get_safe_sync", "get_scgi_dont_route", "get_send_buffer_size", "get_session", "get_session_lock", "get_session_on_completion", "get_split_file_size", "get_split_suffix", "get_timeout_safe_sync", "get_timeout_sync", "get_tracker_dump", "get_tracker_numwant", "get_umask", "get_upload_rate", "get_use_udp_trackers", "get_working_directory" );
-		$responses = xmlrpc_multicall( $xmlrpc_array, $methodlist );
-		$responses["bytes_down"] = $bytes_down;
-		$responses["bytes_up"] = $bytes_up;
-
-		prepare_si_responses( $responses, $message );
-
-		$node = $tnode->appendChild( $xml->createElement( "bytes_down", $responses["bytes_down"] ) );
-		$node->setAttribute( "suffix", $responses["bytes_down_suffix"] );
-		$node->setAttribute( "value", $responses["bytes_down_value"] );
-		$node = $tnode->appendChild( $xml->createElement( "bytes_up", $responses["bytes_up"] ) );
-		$node->setAttribute( "suffix", $responses["bytes_up_suffix"] );
-		$node->setAttribute( "value", $responses["bytes_up_value"] );
-		$node = $tnode->appendChild( $xml->createElement( "download_rate", $responses["download_rate"] ) );
-		$node->setAttribute( "suffix", $responses["download_rate_suffix"] );
-		$node->setAttribute( "value", $responses["download_rate_value"] );
-		$node = $tnode->appendChild( $xml->createElement( "upload_rate", $responses["upload_rate"] ) );
-		$node->setAttribute( "suffix", $responses["upload_rate_suffix"] );
-		$node->setAttribute( "value", $responses["upload_rate_value"] );
+		$si_responses["bytes_down"] = $bytes_down;
+		$si_responses["bytes_up"] = $bytes_up;
+
+		prepare_si_responses( $si_responses, $message, $home_path );
+
+		$node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) );
+		$node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] );
+		$node->setAttribute( "value", $si_responses["bytes_down_value"] );
+		$node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) );
+		$node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] );
+		$node->setAttribute( "value", $si_responses["bytes_up_value"] );
+		$node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) );
+		$node->setAttribute( "suffix", $si_responses["download_rate_suffix"] );
+		$node->setAttribute( "value", $si_responses["download_rate_value"] );
+		$node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) );
+		$node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] );
+		$node->setAttribute( "value", $si_responses["upload_rate_value"] );
 
 		if ( $ajax === true ) {
@@ -805,5 +808,8 @@
 	case "getfile" : { // download a file
 		if ( $id >= 0 ) {
-		// sha1 hash
+			// retrieving server info
+			$methodlist = $xmlrpc_methods["si"];
+			$si_responses = xmlrpc_multicall( $xmlrpc_array, $methodlist );
+
 			$request = xmlrpc_encode_request( "download_list", array( $_SESSION["rtwi_view"] ) );
 			$response = xmlrpc_call( $xmlrpc_array, $request );
@@ -842,10 +848,5 @@
 				$f_size_bytes = xmlrpc_decode( $response );
 
-				if ( substr( $d_directory, 0, 2 ) == "./" ) {
-					$d_directory_value = substr( $d_directory, 2 );
-					$d_directory_value = "{$home_path}{$_SESSION["rtwi_nick"]}/{$d_directory_value}";
-				} else {
-					$d_directory_value = $d_directory;
-				}
+				$d_directory_value = make_abs_path( $d_directory, $si_responses["get_cwd"], "{$home_path}{$_SESSION["rtwi_nick"]}" );
 			} else {
 				$_SESSION["rtwi_err"] = "nohashfound";
@@ -864,4 +865,8 @@
 		addrefresh( $xml, $tnode, $message );
 
+		// retrieving server info
+		$methodlist = $xmlrpc_methods["si"];
+		$si_responses = xmlrpc_multicall( $xmlrpc_array, $methodlist );
+
 		$methodlist = array( "d.get_down_rate=", "d.get_up_rate=" );
 		$request = xmlrpc_encode_request( "d.multicall", array_merge( array( $_SESSION["rtwi_view"] ), $methodlist ) );
@@ -875,32 +880,30 @@
 			for ( $r = 0; $r < count( $methodlist ); $r++ ) {
 				$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
-				$responses[$i][$methodval] = $response[$i][$r];
+				$d_responses[$i][$methodval] = $response[$i][$r];
 			}
-			$bytes_down += $responses[$i]["d_down_rate"];
-			$bytes_up += $responses[$i]["d_up_rate"];
-		}
-
-		$methodlist = array( "get_bind", "get_check_hash", "get_client_version", "get_connection_leech", "get_connection_seed", "get_directory", "get_download_rate", "get_handshake_log", "get_hash_interval", "get_hash_max_tries", "get_hash_read_ahead", "get_hostname", "get_http_cacert", "get_http_capath", "get_http_proxy", "get_ip", "get_key_layout", "get_library_version", "get_max_downloads_div", "get_max_downloads_global", "get_max_file_size", "get_max_memory_usage", "get_max_open_files", "get_max_open_http", "get_max_open_sockets", "get_max_peers", "get_max_peers_seed", "get_max_uploads", "get_max_uploads_div", "get_max_uploads_global", "get_min_peers", "get_min_peers_seed", "get_name", "get_pid", "get_port_open", "get_port_random", "get_port_range", "get_preload_min_size", "get_preload_required_rate", "get_preload_type", "get_proxy_address", "get_receive_buffer_size", "get_safe_sync", "get_scgi_dont_route", "get_send_buffer_size", "get_session", "get_session_lock", "get_session_on_completion", "get_split_file_size", "get_split_suffix", "get_timeout_safe_sync", "get_timeout_sync", "get_tracker_dump", "get_tracker_numwant", "get_umask", "get_upload_rate", "get_use_udp_trackers", "get_working_directory" );
-		$responses = xmlrpc_multicall( $xmlrpc_array, $methodlist );
-		$responses["bytes_down"] = $bytes_down;
-		$responses["bytes_up"] = $bytes_up;
-
-		prepare_si_responses( $responses, $message );
-
-		$node = $tnode->appendChild( $xml->createElement( "bytes_down", $responses["bytes_down"] ) );
-		$node->setAttribute( "suffix", $responses["bytes_down_suffix"] );
-		$node->setAttribute( "value", $responses["bytes_down_value"] );
-		$node = $tnode->appendChild( $xml->createElement( "bytes_up", $responses["bytes_up"] ) );
-		$node->setAttribute( "suffix", $responses["bytes_up_suffix"] );
-		$node->setAttribute( "value", $responses["bytes_up_value"] );
-		$node = $tnode->appendChild( $xml->createElement( "download_rate", $responses["download_rate"] ) );
-		$node->setAttribute( "suffix", $responses["download_rate_suffix"] );
-		$node->setAttribute( "value", $responses["download_rate_value"] );
-		$node = $tnode->appendChild( $xml->createElement( "upload_rate", $responses["upload_rate"] ) );
-		$node->setAttribute( "suffix", $responses["upload_rate_suffix"] );
-		$node->setAttribute( "value", $responses["upload_rate_value"] );
+			$bytes_down += $d_responses[$i]["d_down_rate"];
+			$bytes_up += $d_responses[$i]["d_up_rate"];
+		}
+
+		$si_responses["bytes_down"] = $bytes_down;
+		$si_responses["bytes_up"] = $bytes_up;
+
+		prepare_si_responses( $si_responses, $message, $home_path );
+
+		$node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) );
+		$node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] );
+		$node->setAttribute( "value", $si_responses["bytes_down_value"] );
+		$node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) );
+		$node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] );
+		$node->setAttribute( "value", $si_responses["bytes_up_value"] );
+		$node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) );
+		$node->setAttribute( "suffix", $si_responses["download_rate_suffix"] );
+		$node->setAttribute( "value", $si_responses["download_rate_value"] );
+		$node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) );
+		$node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] );
+		$node->setAttribute( "value", $si_responses["upload_rate_value"] );
 
 		$inode = $tnode->appendChild( $xml->createElement( "server_info" ) );
-		xmlrpc_multiappend( $xml, $inode, $responses );
+		xmlrpc_multiappend( $xml, $inode, $si_responses );
 
 		$layout_file = "layout.main.index.xsl";
@@ -914,5 +917,9 @@
 		addrefresh( $xml, $tnode, $message );
 
-		$methodlist = array( "d.get_base_filename=", "d.get_base_path=", "d.get_bytes_done=", "d.get_chunk_size=", "d.get_chunks_hashed=", "d.get_complete=", "d.get_completed_bytes=", "d.get_completed_chunks=", "d.get_connection_current=", "d.get_connection_leech=", "d.get_connection_seed=", "d.get_directory=", "d.get_down_rate=", "d.get_down_total=", "d.get_free_diskspace=", "d.get_hash=", "d.get_hashing=", "d.get_ignore_commands=", "d.get_is_active=", "d.get_is_hash_checked=", "d.get_is_hash_checking=", "d.get_is_multi_file=", "d.get_is_open=", "d.get_left_bytes=", "d.get_max_file_size=", "d.get_max_peers=", "d.get_max_uploads=", "d.get_min_peers=", "d.get_name=", "d.get_peers_accounted=", "d.get_peers_complete=", "d.get_peers_connected=", "d.get_peers_max=", "d.get_peers_min=", "d.get_peers_not_connected=", "d.get_priority=", "d.get_priority_str=", "d.get_ratio=", "d.get_size_bytes=", "d.get_size_chunks=", "d.get_size_files=", "d.get_skip_rate=", "d.get_skip_total=", "d.get_state=", "d.get_state_changed=", "d.get_tied_to_file=", "d.get_tracker_focus=", "d.get_tracker_numwant=", "d.get_tracker_size=", "d.get_up_rate=", "d.get_up_total=", "d.get_uploads_max=" );
+		// retrieving server info
+		$methodlist = $xmlrpc_methods["si"];
+		$si_responses = xmlrpc_multicall( $xmlrpc_array, $methodlist );
+
+		$methodlist = $xmlrpc_methods["d"];
 		$request = xmlrpc_encode_request( "d.multicall", array_merge( array( $_SESSION["rtwi_view"] ), $methodlist ) );
 		$response = xmlrpc_call( $xmlrpc_array, $request );
@@ -924,36 +931,32 @@
 		for ( $i = 0; $i < count( $response ); $i++ ) {
 			for ( $r = 0; $r < count( $methodlist ); $r++ ) {
-				$methodval = preg_replace( "/(.)\.get_(.*)=/", "$1_$2", $methodlist[$r] );
-				$responses[$i][$methodval] = $response[$i][$r];
+				$methodval = preg_replace( "/(.)\.(get|is)_(.*)=/", "$1_$3", $methodlist[$r] );
+				$d_responses[$i][$methodval] = $response[$i][$r];
 			}
-			$bytes_down += $responses[$i]["d_down_rate"];
-			$bytes_up += $responses[$i]["d_up_rate"];
-
-			prepare_d_responses( $responses[$i], $message, $home_path );
-
+			$bytes_down += $d_responses[$i]["d_down_rate"];
+			$bytes_up += $d_responses[$i]["d_up_rate"];
+
+			prepare_d_responses( $d_responses[$i], $message, $home_path, $si_responses["get_cwd"] );
 			$ttnode = $tnode->appendChild( $xml->createElement( "torrent" ) );
-
-			xmlrpc_multiappend( $xml, $ttnode, $responses[$i] );
-		}
-
-		$methodlist = array( "get_bind", "get_check_hash", "get_client_version", "get_connection_leech", "get_connection_seed", "get_directory", "get_download_rate", "get_handshake_log", "get_hash_interval", "get_hash_max_tries", "get_hash_read_ahead", "get_hostname", "get_http_cacert", "get_http_capath", "get_http_proxy", "get_ip", "get_key_layout", "get_library_version", "get_max_downloads_div", "get_max_downloads_global", "get_max_file_size", "get_max_memory_usage", "get_max_open_files", "get_max_open_http", "get_max_open_sockets", "get_max_peers", "get_max_peers_seed", "get_max_uploads", "get_max_uploads_div", "get_max_uploads_global", "get_min_peers", "get_min_peers_seed", "get_name", "get_pid", "get_port_open", "get_port_random", "get_port_range", "get_preload_min_size", "get_preload_required_rate", "get_preload_type", "get_proxy_address", "get_receive_buffer_size", "get_safe_sync", "get_scgi_dont_route", "get_send_buffer_size", "get_session", "get_session_lock", "get_session_on_completion", "get_split_file_size", "get_split_suffix", "get_timeout_safe_sync", "get_timeout_sync", "get_tracker_dump", "get_tracker_numwant", "get_umask", "get_upload_rate", "get_use_udp_trackers", "get_working_directory" );
-		$responses = xmlrpc_multicall( $xmlrpc_array, $methodlist );
-		$responses["bytes_down"] = $bytes_down;
-		$responses["bytes_up"] = $bytes_up;
-
-		prepare_si_responses( $responses, $message );
-
-		$node = $tnode->appendChild( $xml->createElement( "bytes_down", $responses["bytes_down"] ) );
-		$node->setAttribute( "suffix", $responses["bytes_down_suffix"] );
-		$node->setAttribute( "value", $responses["bytes_down_value"] );
-		$node = $tnode->appendChild( $xml->createElement( "bytes_up", $responses["bytes_up"] ) );
-		$node->setAttribute( "suffix", $responses["bytes_up_suffix"] );
-		$node->setAttribute( "value", $responses["bytes_up_value"] );
-		$node = $tnode->appendChild( $xml->createElement( "download_rate", $responses["download_rate"] ) );
-		$node->setAttribute( "suffix", $responses["download_rate_suffix"] );
-		$node->setAttribute( "value", $responses["download_rate_value"] );
-		$node = $tnode->appendChild( $xml->createElement( "upload_rate", $responses["upload_rate"] ) );
-		$node->setAttribute( "suffix", $responses["upload_rate_suffix"] );
-		$node->setAttribute( "value", $responses["upload_rate_value"] );
+			xmlrpc_multiappend( $xml, $ttnode, $d_responses[$i] );
+		}
+
+		$si_responses["bytes_down"] = $bytes_down;
+		$si_responses["bytes_up"] = $bytes_up;
+
+		prepare_si_responses( $si_responses, $message, $home_path );
+
+		$node = $tnode->appendChild( $xml->createElement( "bytes_down", $si_responses["bytes_down"] ) );
+		$node->setAttribute( "suffix", $si_responses["bytes_down_suffix"] );
+		$node->setAttribute( "value", $si_responses["bytes_down_value"] );
+		$node = $tnode->appendChild( $xml->createElement( "bytes_up", $si_responses["bytes_up"] ) );
+		$node->setAttribute( "suffix", $si_responses["bytes_up_suffix"] );
+		$node->setAttribute( "value", $si_responses["bytes_up_value"] );
+		$node = $tnode->appendChild( $xml->createElement( "download_rate", $si_responses["download_rate"] ) );
+		$node->setAttribute( "suffix", $si_responses["download_rate_suffix"] );
+		$node->setAttribute( "value", $si_responses["download_rate_value"] );
+		$node = $tnode->appendChild( $xml->createElement( "upload_rate", $si_responses["upload_rate"] ) );
+		$node->setAttribute( "suffix", $si_responses["upload_rate_suffix"] );
+		$node->setAttribute( "value", $si_responses["upload_rate_value"] );
 
 		$layout_file = "layout.main.index.xsl";
Index: input.php
===================================================================
--- input.php	(revision 241bedb6f1d6449ffdb439e34e3e516aece75b5e)
+++ input.php	(revision 95d57e0d7d6f5d657a04128f30d1e5e8ef938086)
@@ -66,5 +66,5 @@
 switch ( $_REQUEST["mod"] ) {
 	case "login" : { // login
-		if ( isset( $_REQUEST["loginname"] ) && isset( $_REQUEST["loginpass"] ) && $_REQUEST["loginname"] != "" && $_REQUEST["loginpass"] != "" && $users[$_REQUEST["loginname"]]["pass"] == sha1( $_REQUEST["loginpass"] ) ) {
+		if ( isset( $_REQUEST["loginname"] ) && isset( $_REQUEST["loginpass"] ) && $_REQUEST["loginname"] != "" && $_REQUEST["loginpass"] != "" && array_key_exists( $_REQUEST["loginname"], $users ) && $users[$_REQUEST["loginname"]]["pass"] == sha1( $_REQUEST["loginpass"] ) ) {
 			$_SESSION["rtwi_auth"] = 1;
 			$_SESSION["rtwi_nick"] = $_REQUEST["loginname"];
@@ -185,6 +185,9 @@
 		$request = xmlrpc_encode_request( "get_directory", array() );
 		$response = xmlrpc_call( $xmlrpc_array, $request );
-		$response = str_replace( "i8", "double", $response );
 		$directory = xmlrpc_decode( $response );
+		$request = xmlrpc_encode_request( "system.get_cwd", array() );
+		$response = xmlrpc_call( $xmlrpc_array, $request );
+		$cwd = xmlrpc_decode( $response );
+
 		if ( substr( $directory, -1 ) == "/" ) {
 			$directory = substr( $directory, 0, -1 );
@@ -195,4 +198,7 @@
 			exit;
 		} elseif ( substr( $directory, 0, 2 ) == "./" ) {
+			$directory = substr( $directory, 2 );
+			$directory = "{$cwd}/{$directory}";
+		} elseif ( substr( $directory, 0, 2 ) == "~/" ) {
 			$directory = substr( $directory, 2 );
 			$directory = "{$home_path}{$_SESSION["rtwi_nick"]}/{$directory}";
Index: themes/default_ajax/inc/style.css
===================================================================
--- themes/default_ajax/inc/style.css	(revision 241bedb6f1d6449ffdb439e34e3e516aece75b5e)
+++ themes/default_ajax/inc/style.css	(revision 95d57e0d7d6f5d657a04128f30d1e5e8ef938086)
@@ -140,9 +140,4 @@
 }
 
-img.icon {
-		width: 1em;
-		height: 1em;
-}
-
 .submit {
 		margin: 0 0 0 .3em;
@@ -180,6 +175,16 @@
 }
 
+.ticon {
+		float: left;
+		width: 1em;
+}
+
+.ticon img {
+		width: .8125em;
+}
+
 .tname {
 		float: left;
+		margin: 0;
 }
 
@@ -245,6 +250,6 @@
 }
 
-.changepriorityform {
-		float: left;
+.tpriority .submit {
+		font-size: smaller;
 }
 
@@ -256,4 +261,11 @@
 		font-size: smaller;
 		text-align: right;
+}
+
+.tmessage {
+		float: left;
+		margin: 0 .5em 0 1.2em;
+		background: #eeeeee;
+		font-size: smaller;
 }
 
@@ -360,5 +372,5 @@
 .fpriority {
 		float: right;
-		width: 7em;
+		width: 8em;
 		margin: 0 0 0 .5em;
 		text-align: right;
@@ -368,5 +380,5 @@
 .tcontent .fpriority {
 		float: right;
-		width: 5.5em;
+		width: 6em;
 		margin: 0 0 0 .5em;
 		text-align: right;
@@ -411,8 +423,12 @@
 .tenabled {
 		float: left;
-		width: 10.5em;
-		margin: 0 0 0 .5em;
-		font-size: smaller;
-		background: #eeeeee;
+		width: 11.5em;
+		margin: 0 0 0 .5em;
+		font-size: smaller;
+		background: #eeeeee;
+}
+
+.tenabled .submit {
+		font-size: smaller;
 }
 
Index: themes/default_ajax/layout.ajax.index.xsl
===================================================================
--- themes/default_ajax/layout.ajax.index.xsl	(revision 241bedb6f1d6449ffdb439e34e3e516aece75b5e)
+++ themes/default_ajax/layout.ajax.index.xsl	(revision 95d57e0d7d6f5d657a04128f30d1e5e8ef938086)
@@ -66,5 +66,5 @@
     <xsl:choose>
      <xsl:when test="d_tied_to_file != ''">
-      <xsl:value-of select="d_tied_to_file" />
+      <xsl:value-of select="d_tied_to_file/@value" />
      </xsl:when>
      <xsl:otherwise>
@@ -80,7 +80,7 @@
    </div>
    <div class="inforight">
-    <xsl:value-of select="d_is_multi_file/@value" />
+    <xsl:value-of select="d_multi_file/@value" />
     <xsl:choose>
-     <xsl:when test="d_is_multi_file != 0">
+     <xsl:when test="d_multi_file != 0">
       <xsl:text> </xsl:text>
       <xsl:value-of select="d_size_files" />
Index: themes/default_ajax/layout.main.index.xsl
===================================================================
--- themes/default_ajax/layout.main.index.xsl	(revision 241bedb6f1d6449ffdb439e34e3e516aece75b5e)
+++ themes/default_ajax/layout.main.index.xsl	(revision 95d57e0d7d6f5d657a04128f30d1e5e8ef938086)
@@ -145,5 +145,5 @@
     </li>
     <li class="formsend">
-     <input class="inputok" type="image" src="themes/default_ajax/pics/btn_ok.gif" title="Add torrent" alt="[OK]" value="ok" />
+     <input class="inputok" type="submit" name="addtorrent" title="Add torrent" value="Add torrent" />
     </li>
    </ul>
@@ -221,5 +221,5 @@
    <xsl:text>]</xsl:text>
    <noscript>
-    <input class="submit" id="vtsubmit" type="image" src="themes/default_ajax/pics/btn_ok.gif" name="vtsubmit" alt="[OK]" value="ok" />
+    <input class="submit" id="vtsubmit" type="submit" name="vtsubmit" title="OK" value="OK" />
    </noscript>
   </form>
@@ -245,5 +245,5 @@
    <xsl:text>]</xsl:text>
    <noscript>
-    <input class="submit" id="rrsubmit" type="image" src="themes/default_ajax/pics/btn_ok.gif" name="rrsubmit" alt="[OK]" value="ok" />
+    <input class="submit" id="rrsubmit" type="submit" name="rrsubmit" title="OK" value="OK" />
    </noscript>
   </form>
@@ -263,19 +263,24 @@
  <xsl:template match="torrent">
   <li class="tline">
-   <div class="tname">
+   <div class="ticon">
     <xsl:choose>
-     <xsl:when test="d_is_active != 0">
-      <img class="icon" src="themes/default_ajax/pics/{d_connection_current}.gif" alt="{d_connection_current}" title="{d_connection_current/@value} since {d_state_changed/@value}" />
+     <xsl:when test="d_active != 0">
+      <img class="icon" src="themes/default_ajax/pics/{d_connection_current}ing.png" alt="{d_connection_current}" title="{d_connection_current/@value} since {d_state_changed/@value}" />
      </xsl:when>
      <xsl:when test="d_hashing != 0">
-      <img class="icon" src="themes/default_ajax/pics/hashing.gif" alt="hashing" title="Hashing since {d_state_changed/@value}" />
-     </xsl:when>
-     <xsl:when test="d_is_open != 0">
-      <img class="icon" src="themes/default_ajax/pics/stopped.gif" alt="stopped" title="Stopped since {d_state_changed/@value}" />
+      <img class="icon" src="themes/default_ajax/pics/hashing.png" alt="hashing" title="Hashing since {d_state_changed/@value}" />
+     </xsl:when>
+     <xsl:when test="d_complete != 0">
+      <img class="icon" src="themes/default_ajax/pics/finished.png" alt="finished" title="Finished since {d_state_changed/@value}" />
+     </xsl:when>
+     <xsl:when test="d_open != 0">
+      <img class="icon" src="themes/default_ajax/pics/stopped.png" alt="stopped" title="Stopped since {d_state_changed/@value}" />
      </xsl:when>
      <xsl:otherwise>
-      <img class="icon" src="themes/default_ajax/pics/closed.gif" alt="closed" title="Closed since {d_state_changed/@value}" />
+      <img class="icon" src="themes/default_ajax/pics/closed.png" alt="closed" title="Closed since {d_state_changed/@value}" />
      </xsl:otherwise>
     </xsl:choose>
+   </div>
+   <div class="tname">
     <a href="?mod=torrent&amp;hash={d_hash}" title="Details" onclick="if ( document.getElementById( 'torrent_{d_hash}' ).style.display == '' ) {{ document.getElementById( 'torrent_{d_hash}' ).style.display = 'none' }} else {{ document.getElementById( 'torrent_{d_hash}' ).style.display = ''}} return false;"><xsl:value-of select="d_name" /></a>
    </div>
@@ -290,5 +295,5 @@
     </xsl:choose>
     <xsl:choose>
-     <xsl:when test="d_is_active != 0">
+     <xsl:when test="d_active != 0">
       <a href="{/root/iurl}?mod=torrentstop&amp;hash={d_hash}" title="Stop">Stop</a>
      </xsl:when>
@@ -305,5 +310,5 @@
     </xsl:choose>
     <xsl:choose>
-     <xsl:when test="d_is_open = 0">
+     <xsl:when test="d_open = 0">
       <a href="{/root/iurl}?mod=torrentopen&amp;hash={d_hash}" title="Open">Open</a>
      </xsl:when>
@@ -428,7 +433,11 @@
      <xsl:text>]</xsl:text>
      <noscript>
-      <input class="submit" type="image" src="themes/default_ajax/pics/btn_ok.gif" name="submit" value="ok" />
+      <input class="submit" type="submit" name="submit" value="OK" title="OK" />
      </noscript>
     </form>
+   </div>
+   <div class="clr"></div>
+   <div class="tmessage">
+    <span>Message: <xsl:value-of select="d_message" /></span>
    </div>
    <div class="clr"></div>
@@ -449,5 +458,5 @@
 
  <xsl:template match="torrent_info">
-  <li class="line">
+  <li class="line spacer">
    <div class="infoleft">
     <xsl:text>Name:</xsl:text>
@@ -458,10 +467,28 @@
    <div class="clr"></div>
   </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:text>Info hash:</xsl:text>
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_hash" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:text>Local ID:</xsl:text>
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_local_id" />
+   </div>
+   <div class="clr"></div>
+  </li>
   <li class="line spacer">
    <div class="infoleft">
-    <xsl:text>Info hash:</xsl:text>
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="d_hash" />
+    <xsl:text>Local ID (html):</xsl:text>
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_local_id_html" />
    </div>
    <div class="clr"></div>
@@ -483,5 +510,5 @@
     <xsl:choose>
      <xsl:when test="d_tied_to_file != ''">
-      <xsl:value-of select="d_tied_to_file" />
+      <xsl:value-of select="d_tied_to_file/@value" />
      </xsl:when>
      <xsl:otherwise>
@@ -492,12 +519,12 @@
    <div class="clr"></div>
   </li>
-  <li class="line spacer">
+  <li class="line">
    <div class="infoleft">
     <xsl:text>File stats:</xsl:text>
    </div>
    <div class="inforight">
-    <xsl:value-of select="d_is_multi_file/@value" />
+    <xsl:value-of select="d_multi_file/@value" />
     <xsl:choose>
-     <xsl:when test="d_is_multi_file != 0">
+     <xsl:when test="d_multi_file != 0">
       <xsl:text> </xsl:text>
       <xsl:value-of select="d_size_files" />
@@ -505,4 +532,13 @@
      </xsl:when>
     </xsl:choose>
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line spacer">
+   <div class="infoleft">
+    <xsl:text>Private:</xsl:text>
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_private/@value" />
    </div>
    <div class="clr"></div>
@@ -563,4 +599,13 @@
   <li class="line">
    <div class="infoleft">
+    <xsl:text>Trackers:</xsl:text>
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="d_tracker_size" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
     <xsl:text>Leechers:</xsl:text>
    </div>
@@ -652,5 +697,5 @@
    <div class="clr"></div>
   </li>
-  <li class="line">
+  <li class="line spacer">
    <div class="infoleft">
     <xsl:text>Library version:</xsl:text>
@@ -661,10 +706,28 @@
    <div class="clr"></div>
   </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:text>Working directory:</xsl:text>
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="get_cwd" />
+   </div>
+   <div class="clr"></div>
+  </li>
+  <li class="line">
+   <div class="infoleft">
+    <xsl:text>Download directory:</xsl:text>
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="directory/@value" />
+   </div>
+   <div class="clr"></div>
+  </li>
   <li class="line spacer">
    <div class="infoleft">
-    <xsl:text>Directory:</xsl:text>
-   </div>
-   <div class="inforight">
-    <xsl:value-of select="directory/@value" />
+    <xsl:text>Session directory:</xsl:text>
+   </div>
+   <div class="inforight">
+    <xsl:value-of select="session/@value" />
    </div>
    <div class="clr"></div>
@@ -857,5 +920,5 @@
      <xsl:text>]</xsl:text>
      <noscript>
-      <input class="submit" type="image" src="themes/default_ajax/pics/btn_ok.gif" name="submit" value="ok" />
+      <input class="submit" type="submit" name="OK" value="OK" title="OK" />
      </noscript>
     </form>
@@ -938,7 +1001,7 @@
      </div>
      <div class="tenabled">
-      <form class="changetrackerenabledform" name="changetrackerenabledfor_{@id}" method="post" action="{/root/iurl}?mod=changetrackerenabled&amp;hash={/root/hash}&amp;id={@id}">
+      <form class="changetrackerenabledform" name="changetrackerenabledform_{@id}" method="post" action="{/root/iurl}?mod=changetrackerenabled&amp;hash={/root/hash}&amp;id={@id}">
        <xsl:text>Enabled: </xsl:text>
-       <select class="whiteselect" name="rackerenabled" title="Select if tracker is enabled" onchange="window.location='{/root/iurl}?mod=changetrackerenabled&amp;hash={/root/hash}&amp;id={@id}&amp;trackerenabled='+this.value;">
+       <select class="whiteselect" name="trackerenabled" title="Select if tracker is enabled" onchange="window.location='{/root/iurl}?mod=changetrackerenabled&amp;hash={/root/hash}&amp;id={@id}&amp;trackerenabled='+this.value;">
         <xsl:choose>
          <xsl:when test="t_enabled = 0">
@@ -953,5 +1016,5 @@
        </select>
        <noscript>
-        <input class="submit" type="image" src="themes/default_ajax/pics/btn_ok.gif" name="submit" value="ok" />
+        <input class="submit" type="submit" name="submit" value="OK" title="OK" />
        </noscript>
       </form>
Index: themes/default_ajax/layout.main.login.xsl
===================================================================
--- themes/default_ajax/layout.main.login.xsl	(revision 241bedb6f1d6449ffdb439e34e3e516aece75b5e)
+++ themes/default_ajax/layout.main.login.xsl	(revision 95d57e0d7d6f5d657a04128f30d1e5e8ef938086)
@@ -46,5 +46,5 @@
        </li>
        <li class="formsend">
-        <input class="inputok" type="image" src="themes/default_ajax/pics/btn_ok.gif" title="Login" alt="[OK]" value="ok" />
+        <input class="inputok" type="submit" title="Login" name="Login" value="Login" />
        </li>
       </ul>
