diff -ur6 /home/mark/mediawiki-1.3.0beta2/includes/SpecialPreferences.php includes/SpecialPreferences.php
--- /home/mark/mediawiki-1.3.0beta2/includes/SpecialPreferences.php	Sun Jun  6 05:36:36 2004
+++ includes/SpecialPreferences.php	Wed Jun  9 23:51:55 2004
@@ -335,31 +335,43 @@
 
 		$wgOut->addHTML( "<fieldset>
 		<legend>".wfMsg('prefs-personal')."</legend>");
 	        if ($wgAllowRealName) {
 		    $wgOut->addHTML("<div><label>$yrn: <input type='text' name=\"wpRealName\" value=\"{$this->mRealName}\" size='20' /></label></div>");
 		}
+		/*
 	        $wgOut->addHTML("
 		<div><label>$yem: <input type='text' name=\"wpUserEmail\" value=\"{$this->mUserEmail}\" size='20' /></label></div>
 		<div><label><input type='checkbox' $emfc value=\"1\" name=\"wpEmailFlag\" /> $emf</label></div>
 		<div><label>$ynn: <input type='text' name=\"wpNick\" value=\"{$this->mNick}\" size='12' /></label></div>\n" );
+		*/
+
+		$wgOut->addHTML("
+                <div><label>$yem: {$this->mUserEmail}</label></div>
+                <div><label><input type='checkbox' $emfc value=\"1\" name=\"wpEmailFlag\" /> $emf</label></div>
+                <div><label>$ynn: <input type='text' name=\"wpNick\" value=\"{$this->mNick}\" size='12' /></label></div>\n" );
 
 		# Fields for changing password
 		#
 		$this->mOldpass = wfEscapeHTML( $this->mOldpass );
 		$this->mNewpass = wfEscapeHTML( $this->mNewpass );
 		$this->mRetypePass = wfEscapeHTML( $this->mRetypePass );
-
+		
+		/*
 		$wgOut->addHTML( "<fieldset>
 	<legend>$cp</legend>
 	<div><label>$opw: <input type='password' name=\"wpOldpass\" value=\"{$this->mOldpass}\" size='20' /></label></div>
 	<div><label>$npw: <input type='password' name=\"wpNewpass\" value=\"{$this->mNewpass}\" size='20' /></label></div>
 	<div><label>$rpw: <input type='password' name=\"wpRetypePass\" value=\"{$this->mRetypePass}\" size='20' /></label></div>
 	" . $this->getToggle( "rememberpassword" ) . "
 	</fieldset>
 	<div class='prefsectiontip'>".wfMsg('prefs-help-userdata')."</div>\n</fieldset>\n" );
+		*/
+		
+		$wgOut->addHTML( "$cp <div class='prefsectiontip'>" .
+			wfMsg('prefs-help-userdata')."</div>\n</fieldset>\n" );
 
 	
 		# Quickbar setting
 		#
 		$wgOut->addHtml( "<fieldset>\n<legend>$qb</legend>\n" );
 		for ( $i = 0; $i < count( $qbs ); ++$i ) {
diff -ur6 /home/mark/mediawiki-1.3.0beta2/includes/User.php includes/User.php
--- /home/mark/mediawiki-1.3.0beta2/includes/User.php	Sun Jun  6 05:36:36 2004
+++ includes/User.php	Wed Jun  9 23:17:55 2004
@@ -1,13 +1,13 @@
 <?php
 # See user.doc
 
 require_once( "WatchedItem.php" );
 
 class User {
-	/* private */ var $mId, $mName, $mPassword, $mEmail, $mNewtalk;
+	/* private */ var $mId, $mName, $mPassword, $mSalt, $mEmail, $mNewtalk;
 	/* private */ var $mRights, $mOptions;
 	/* private */ var $mDataLoaded, $mNewpassword;
 	/* private */ var $mSkin;
 	/* private */ var $mBlockedby, $mBlockreason;
 	/* private */ var $mTouched;
 	/* private */ var $mCookiePassword;
@@ -22,21 +22,26 @@
 	#
 	function newFromName( $name )
 	{
 		$u = new User();
 
 		# Clean up name according to title rules
-
+		
+		/*
 		$t = Title::newFromText( $name );
 		$u->setName( $t->getText() );
+		*/
+		
+		$u->setName( $name );
 		return $u;
 	}
 
 	/* static */ function whoIs( $id )
 	{
-		return wfGetSQL( "user", "user_name", "user_id=$id" );
+		/* return wfGetSQL( "user", "user_name", "user_id=$id" ); */
+		return wfGetSQL( "liveservices.nick", "liveservices.nick.nick", "liveservices.nick.nick_id=$id" );
 	}
 
 	/* static */ function whoIsReal( $id )
 	{
 		return wfGetSQL( "user", "user_real_name", "user_id=$id" );
 	}
@@ -45,14 +50,17 @@
 	{
 		$nt = Title::newFromText( $name );
 		if( is_null( $nt ) ) {
 			# Illegal name
 			return null;
 		}
-		$sql = "SELECT user_id FROM user WHERE user_name='" .
-		  wfStrencode( $nt->getText() ) . "'";
+		/* $sql = "SELECT user_id FROM user WHERE user_name='" . */
+		$sql = "SELECT nick.nick_id AS user_id " .
+			"FROM liveservices.nick " . 
+			"WHERE LCase(nick)=LCase('" .
+		  wfStrencode( $nt->getText() ) . "')";
 		$res = wfQuery( $sql, DB_READ, "User::idFromName" );
 
 		if ( 0 == wfNumRows( $res ) ) {
 			return 0;
 		} else {
 			$s = wfFetchObject( $res );
@@ -86,12 +94,13 @@
 		global $wgNamespacesToBeSearchedDefault;
 
 		$this->mId = $this->mNewtalk = 0;
 		$this->mName = $wgIP;
 		$this->mEmail = "";
 		$this->mPassword = $this->mNewpassword = "";
+		$this->mSalt = "";
 		$this->mRights = array();
 		$defOpt = $wgLang->getDefaultUserOptions() ;
 		foreach ( $defOpt as $oname => $val ) {
 			$this->mOptions[$oname] = $val;
 		}
 		foreach ($wgNamespacesToBeSearchedDefault as $nsnum => $val) {
@@ -255,23 +264,40 @@
 		}
 		if(!$this->mId) {
 			$this->mDataLoaded = true;
 			return;
 		} # the following stuff is for non-anonymous users only
 
+		/* 
 		$sql = "SELECT user_name,user_password,user_newpassword,user_email," .
 		  "user_real_name,user_options,user_rights,user_touched " . 
                   " FROM user WHERE user_id=" . $this->mId;
+		*/
+
+		global $wgDBname;
+		$sql = "SELECT nick.nick AS user_name, nick.pass AS user_password, " .
+			"nick.salt AS user_salt, nick.pass AS user_newpassword, " .
+			"nick.email AS user_email, " .
+			"user.user_real_name AS user_real_name, " .
+			"user.user_options AS user_options, " .
+			"user.user_rights AS user_rights, " .
+			"user.user_touched AS user_touched " .
+			"FROM liveservices.nick AS nick " .
+			"LEFT JOIN " . $wgDBname .
+			".user AS user ON (nick.nick_id = user.user_id) ".
+			"WHERE nick.nick_id=" . $this->mId;
+			
 		$res = wfQuery( $sql, DB_READ, "User::loadFromDatabase" );
 
 		if ( wfNumRows( $res ) > 0 ) {
 			$s = wfFetchObject( $res );
 			$this->mName = $s->user_name;
 			$this->mEmail = $s->user_email;
 			$this->mRealName = $s->user_real_name;
 			$this->mPassword = $s->user_password;
+			$this->mSalt = $s->user_salt;
 			$this->mNewpassword = $s->user_newpassword;
 			$this->decodeOptions( $s->user_options );
 			$this->mRights = explode( ",", strtolower( $s->user_rights ) );
 			$this->mTouched = $s->user_touched;
 		}
 
@@ -332,22 +358,27 @@
 		$this->loadFromDatabase();
 		return $this->mNewpassword;
 	}
 
 	function addSalt( $p )
 	{
+		/* 
 		global $wgPasswordSalt;
 		if($wgPasswordSalt)
 			return md5( "{$this->mId}-{$p}" );
 		else
 			return $p;
+		*/
+
+		return sha1( $p . $this->mSalt );
 	}
 
 	function encryptPassword( $p )
 	{
-		return $this->addSalt( md5( $p ) );
+		/* return $this->addSalt( md5( $p ) ); */
+		return $this->addSalt( $p );
 	}
 
 	function setPassword( $str )
 	{
 		$this->loadFromDatabase();
 		$this->setCookiePassword( $str );
@@ -572,17 +603,13 @@
 				$wgMemc->delete( "$wgDBname:newtalk:ip:{$this->mName}" );
 			}
 		}
 		if ( 0 == $this->mId ) { return; }
 
 		$sql = "UPDATE user SET " .
-		  "user_name= '" . wfStrencode( $this->mName ) . "', " .
-		  "user_password= '" . wfStrencode( $this->mPassword ) . "', " .
-		  "user_newpassword= '" . wfStrencode( $this->mNewpassword ) . "', " .
 		  "user_real_name= '" . wfStrencode( $this->mRealName ) . "', " .
-		  "user_email= '" . wfStrencode( $this->mEmail ) . "', " .
 		  "user_options= '" . $this->encodeOptions() . "', " .
 		  "user_rights= '" . wfStrencode( implode( ",", $this->mRights ) ) . "', " .
 		  "user_touched= '" . wfStrencode( $this->mTouched ) .
 		  "' WHERE user_id={$this->mId}";
 		wfQuery( $sql, DB_WRITE, "User::saveSettings" );
 		$wgMemc->delete( "$wgDBname:user:id:$this->mId" );
@@ -590,25 +617,43 @@
 
 	# Checks if a user with the given name exists
 	#
 	function idForName()
 	{
 		$gotid = 0;
-		$s = trim( $this->mName );
-		if ( 0 == strcmp( "", $s ) ) return 0;
+		$name = trim( $this->mName );
+		if ( 0 == strcmp( "", $name ) ) return 0;
 
-		$sql = "SELECT user_id FROM user WHERE user_name='" .
-		  wfStrencode( $s ) . "'";
-		$res = wfQuery( $sql, DB_READ, "User::idForName" );
-		if ( 0 == wfNumRows( $res ) ) { return 0; }
+		$sql = "SELECT nick.nick_id AS user_id ".
+			"FROM liveservices.nick AS nick " .
+			"WHERE LCase(nick)=LCase('" . wfStrencode( $name ) . "')";
 
-		$s = wfFetchObject( $res );
-		if ( "" == $s ) return 0;
+		$ress = wfQuery( $sql, DB_READ, "User::idForName" );
+		if ( 0 == wfNumRows( $ress ) ) { return 0; }
+
+                $s = wfFetchObject( $ress );
+                if ( "" == $s ) return 0;
+
+                $gotid = $s->user_id;
+
+		/* User exists in services db */
+
+                $sql = "SELECT user_id FROM user WHERE user_id=" . $gotid;
+		$resu = wfQuery( $sql, DB_READ, "User::idForName" );
+
+		if ( 0 == wfNumRows( $resu ) ) {
+			# Add a default row for this user to the user table
+			$sql = "INSERT INTO user (user_id, user_name) " .
+				"VALUES (" . $gotid . ", '" .
+				wfStrencode ( $name ) . "')";
+			wfQuery( $sql, DB_WRITE, "User::idForName" );
+		}
+                
+		wfFreeResult( $ress );
+		wfFreeResult( $resu );
 
-		$gotid = $s->user_id;
-		wfFreeResult( $res );
 		return $gotid;
 	}
 
 	function addToDatabase()
 	{
 		$sql = "INSERT INTO user (user_name,user_password,user_newpassword," .
