diff --git a/fbconnect.js b/fbconnect.js
index 4067954..4f65e90 100644
--- a/fbconnect.js
+++ b/fbconnect.js
@@ -1,281 +1,286 @@
 // $Id: fbconnect.js,v 1.4 2010/03/21 16:26:03 vectoroc Exp $
 
-Drupal.fbconnect = Drupal.fbconnect || {};
-Drupal.fbconnect.init = function () {
-  Drupal.behaviors.fbconnect = function(context) {
-    if (context != document) {
-      jQuery(context).each(function() { FB.XFBML.parse(this); });
-    }
-    Drupal.fbconnect.initLogoutLinks(context);
-  }
+jQuery(document).ready(function() {
+	
+	Drupal.fbconnect = Drupal.fbconnect || {};
+	Drupal.fbconnect.init = function () {
+	  Drupal.behaviors.fbconnect = function(context) {
+	    if (context != document) {
+	      jQuery(context).each(function() { FB.XFBML.parse(this); });
+	    }
+	    Drupal.fbconnect.initLogoutLinks(context);
+	  }
   
-  if (Drupal.settings.fbconnect.loginout_mode == 'auto') {
-    FB.Event.subscribe('auth.sessionChange', Drupal.fbconnect.reload_ifUserConnected);
-//    FB.Event.subscribe('auth.login', function(response) {
-//      console.log('event auth.login');
-//    });
-  }
+	  if (Drupal.settings.fbconnect.loginout_mode == 'auto') {
+	    FB.Event.subscribe('auth.sessionChange', Drupal.fbconnect.reload_ifUserConnected);
+	//    FB.Event.subscribe('auth.login', function(response) {
+	//      console.log('event auth.login');
+	//    });
+	  }
   
-  Drupal.behaviors.fbconnect(document);
-}
+	  Drupal.behaviors.fbconnect(document);
+	}
 
-Drupal.fbconnect.logout = function(keep_fbaccount_logged) {
-  var logout_url = Drupal.settings.basePath + 'logout'; 
+	Drupal.fbconnect.logout = function(keep_fbaccount_logged) {
+	  var logout_url = Drupal.settings.basePath + 'logout'; 
   
-  if (!keep_fbaccount_logged) {
-    FB.logout(function(response) { 
-      window.location.href = logout_url; 
-    });
-  }
-  else {
-    window.location.href = logout_url;
-  }
-}
+	  if (!keep_fbaccount_logged) {
+	    FB.logout(function(response) { 
+	      window.location.href = logout_url; 
+	    });
+	  }
+	  else {
+	    window.location.href = logout_url;
+	  }
+	}
 
-Drupal.fbconnect.reload_ifUserConnected = function(state) {
-  var user = Drupal.settings.fbconnect.user;
+	Drupal.fbconnect.reload_ifUserConnected = function(state) {
+	  var user = Drupal.settings.fbconnect.user;
   
-  if (!state.session || user.uid) return;
-  if (state.session.uid != user.fbuid) {
-    window.location.reload();
-  }
-};
+	  if (!state.session || user.uid) return;
+	  if (state.session.uid != user.fbuid) {
+	    window.location.reload();
+	  }
+	};
 
-Drupal.fbconnect.initLogoutLinks = function(context) {
-  var loginout_mode = Drupal.settings.fbconnect.loginout_mode;
-  var user          = Drupal.settings.fbconnect.user;
-  var basePath      = Drupal.settings.basePath;
-  var logout_url    = basePath + 'logout'; 
-  var links         = $('a[href='+ logout_url +']', context).not('.logout_link_inited');
+	Drupal.fbconnect.initLogoutLinks = function(context) {
+	  var loginout_mode = Drupal.settings.fbconnect.loginout_mode;
+	  var user          = Drupal.settings.fbconnect.user;
+	  var basePath      = Drupal.settings.basePath;
+	  var logout_url    = basePath + 'logout';
+		// alert("u");
+	  var links         = jQuery('a[href='+ logout_url +']', context).not('.logout_link_inited');
   
-  if (loginout_mode == 'manual') return;
+	  if (loginout_mode == 'manual') return;
   
-  links.addClass('logout_link_inited').click(function() {
-    var fbuid = FB.getSession() && FB.getSession().uid;
-    if (!user.fbuid || user.fbuid != fbuid) return;
-    if (loginout_mode == 'auto') { 
-      Drupal.fbconnect.logout();
-    }
-    else if (loginout_mode == 'ask') {    
-      var t_args  = {'!site_name' : Drupal.settings.fbconnect.invite_name};
-      var buttons = [
-          { 
-            'label': Drupal.t('Facebook and !site_name', t_args), 
-            'click': function() {
-              this.close();
-              Drupal.fbconnect.logout();
-            }
-          }, {
-            'name': 'cancel', 
-            'label': Drupal.t('!site_name Only', t_args), 
-            'click': function() {
-              this.close();
-              Drupal.fbconnect.logout(true);
-            }
-          }              
-      ];
+	  links.addClass('logout_link_inited').click(function() {
+	    var fbuid = FB.getSession() && FB.getSession().uid;
+	    if (!user.fbuid || user.fbuid != fbuid) return;
+	    if (loginout_mode == 'auto') { 
+	      Drupal.fbconnect.logout();
+	    }
+	    else if (loginout_mode == 'ask') {    
+	      var t_args  = {'!site_name' : Drupal.settings.fbconnect.invite_name};
+	      var buttons = [
+	          { 
+	            'label': Drupal.t('Facebook and !site_name', t_args), 
+	            'click': function() {
+	              this.close();
+	              Drupal.fbconnect.logout();
+	            }
+	          }, {
+	            'name': 'cancel', 
+	            'label': Drupal.t('!site_name Only', t_args), 
+	            'click': function() {
+	              this.close();
+	              Drupal.fbconnect.logout(true);
+	            }
+	          }              
+	      ];
     
-      var dialog = new Drupal.fbconnect.PopupDialog({
-        'title'   : Drupal.t('Logout'),
-        'message' : Drupal.t('Do you also want to logout from your Facebook account?'),
-        'buttons' : buttons 
-      });      
-    }
+	      var dialog = new Drupal.fbconnect.PopupDialog({
+	        'title'   : Drupal.t('Logout'),
+	        'message' : Drupal.t('Do you also want to logout from your Facebook account?'),
+	        'buttons' : buttons 
+	      });      
+	    }
     
-    return false;
-  });
-};
-
-Drupal.fbconnect.DoFastRegistration =  function(link) {
-  FB.login(function(response) {
-    if (response.session && /email/.test(response.perms)) {
-      window.location.href = link.href;
-    }
-  }, {perms:'email'});
-};
+	    return false;
+	  });
+	};
 
+	Drupal.fbconnect.DoFastRegistration =  function(link) {
+	  FB.login(function(response) {
+	    if (response.session && /email/.test(response.perms)) {
+	      window.location.href = link.href;
+	    }
+	  }, {perms:'email'});
+	};
 
-function facebook_onlogin_ready() {
-  // http://github.com/facebook/connect-js/issues/194
-  if (!FB.getSession()) {
-    return;
-  }
-  $("#fbconnect-autoconnect-form").submit();
-}
-
-/**
- * Create a dialog. 
- *
- * @param opts {Object} Options:
- * @see Drupal.fbconnect.PopupDialog.prototype.prepareDefaults
- *
- * @return {Object}
- */
-Drupal.fbconnect.PopupDialog = function(options) {
-  this.prepareDefaults(options);
-  this.container = Drupal.theme('fb_popup_dialog', this.options);  
-  this.dialog = FB.Dialog.create({
-    content : this.container,
-    visible : false,
-    loader  : true,
-    onClose : this.__close_handler,
-    closeIcon : true
-  });
+	/**
+	 * Create a dialog. 
+	 *
+	 * @param opts {Object} Options:
+	 * @see Drupal.fbconnect.PopupDialog.prototype.prepareDefaults
+	 *
+	 * @return {Object}
+	 */
+	Drupal.fbconnect.PopupDialog = function(options) {
+	  this.prepareDefaults(options);
+	  this.container = Drupal.theme('fb_popup_dialog', this.options);  
+	  this.dialog = FB.Dialog.create({
+	    content : this.container,
+	    visible : false,
+	    loader  : true,
+	    onClose : this.__close_handler,
+	    closeIcon : true
+	  });
   
-//  FB.XFBML.parse(dialog);
+	//  FB.XFBML.parse(dialog);
   
-//  var popup = new FB.UI.PopupDialog(
-//    oThis.options.title, 
-//    oThis.container, 
-//    oThis.options.showLoading,
-//    oThis.options.hideUntilLoaded
-//  );
+	//  var popup = new FB.UI.PopupDialog(
+	//    oThis.options.title, 
+	//    oThis.container, 
+	//    oThis.options.showLoading,
+	//    oThis.options.hideUntilLoaded
+	//  );
   
-  this.callback('load', this.dialog);
-};
+	  this.callback('load', this.dialog);
+	};
 
-Drupal.fbconnect.PopupDialog.prototype.options = {};
+	Drupal.fbconnect.PopupDialog.prototype.options = {};
 
-Drupal.fbconnect.PopupDialog.prototype.createHandler = function(event, data) {
-  var oThis = this;
-  return function() { oThis.callback(event, data); };
-};
+	Drupal.fbconnect.PopupDialog.prototype.createHandler = function(event, data) {
+	  var oThis = this;
+	  return function() { oThis.callback(event, data); };
+	};
 
-Drupal.fbconnect.PopupDialog.prototype.callback = function(event, data) {
-  data = data || {};
-  switch (event) {
-  case 'click':
-    var btn = data;
-    if (btn.click instanceof Function) btn.click.apply(this, [btn]);
-    else if (btn.name == 'cancel') this.close();
-    break;
+	Drupal.fbconnect.PopupDialog.prototype.callback = function(event, data) {
+	  data = data || {};
+	  switch (event) {
+	  case 'click':
+	    var btn = data;
+	    if (btn.click instanceof Function) btn.click.apply(this, [btn]);
+	    else if (btn.name == 'cancel') this.close();
+	    break;
     
-  case 'close':
-    var btn = this.findButton('cancel'); 
-    if (btn) this.callback('click', btn);
-    break;
+	  case 'close':
+	    var btn = this.findButton('cancel'); 
+	    if (btn) this.callback('click', btn);
+	    break;
     
-  case 'load':
-    this.show();
-    break;
-  }
-};
+	  case 'load':
+	    this.show();
+	    break;
+	  }
+	};
 
-Drupal.fbconnect.PopupDialog.prototype.prepareDefaults = function(options) {
-  var defaults = {
-    'title'           : '',
-    'message'         : ' - ',
-    'buttons'         : {},
-    'showLoading'     : false,
-    'hideUntilLoaded' : false
-  };  
-  $.extend(this.options, defaults, options);
+	Drupal.fbconnect.PopupDialog.prototype.prepareDefaults = function(options) {
+	  var defaults = {
+	    'title'           : '',
+	    'message'         : ' - ',
+	    'buttons'         : {},
+	    'showLoading'     : false,
+	    'hideUntilLoaded' : false
+	  };  
+	  $.extend(this.options, defaults, options);
   
-  this.__close_handler = this.createHandler('close', {});
-  this.options.dialog = this; 
-  if (this.options.callback instanceof Function) {
-    this.callback = this.options.callback;
-  }
-};
+	  this.__close_handler = this.createHandler('close', {});
+	  this.options.dialog = this; 
+	  if (this.options.callback instanceof Function) {
+	    this.callback = this.options.callback;
+	  }
+	};
 
-Drupal.fbconnect.PopupDialog.prototype.show = function() {
-  if (this.dialog) {    
-    FB.Dialog.show(this.dialog);
-  }
-};
+	Drupal.fbconnect.PopupDialog.prototype.show = function() {
+	  if (this.dialog) {    
+	    FB.Dialog.show(this.dialog);
+	  }
+	};
 
-Drupal.fbconnect.PopupDialog.prototype.close = function() {
-  if (this.dialog) {
-    FB.Dialog.remove(this.dialog);
-  }
-};
+	Drupal.fbconnect.PopupDialog.prototype.close = function() {
+	  if (this.dialog) {
+	    FB.Dialog.remove(this.dialog);
+	  }
+	};
 
-Drupal.fbconnect.PopupDialog.prototype.findButton = function(name) {
-  var button = null;
-  jQuery.each(this.options.buttons, function(i, btn) {
-    if (btn.name == name) {
-      button = btn;
-      return true;
-    }
-  });
+	Drupal.fbconnect.PopupDialog.prototype.findButton = function(name) {
+	  var button = null;
+	  jQuery.each(this.options.buttons, function(i, btn) {
+	    if (btn.name == name) {
+	      button = btn;
+	      return true;
+	    }
+	  });
   
-  return button;
-}
+	  return button;
+	}
 
-Drupal.theme.prototype.fb_popup_dialog_buttons = function(buttons, dialog) {
-  buttons = buttons || {};
-  var container = $('<div class="dialog_buttons"></div>');
+	Drupal.theme.prototype.fb_popup_dialog_buttons = function(buttons, dialog) {
+	  buttons = buttons || {};
+	  var container = $('<div class="dialog_buttons"></div>');
   
-  jQuery.each(buttons, function(i, btn) {
-    var button = $('<input type="button" class="dialog_inputbutton">');
-    if (!btn['name']) btn['name'] = i;
-    if (btn.attr) button.attr(btn.attr);
-    if (btn['class']) button.addClass(btn['class']);
-    if (btn['name'] == 'cancel') button.addClass('dialog_inputaux');
-    button.addClass('fb_button_' + i);
-    button.attr('value', btn.label);
-    button.click(dialog.createHandler('click', btn));
-    button.appendTo(container);
-  });
+	  jQuery.each(buttons, function(i, btn) {
+	    var button = $('<input type="button" class="dialog_inputbutton">');
+	    if (!btn['name']) btn['name'] = i;
+	    if (btn.attr) button.attr(btn.attr);
+	    if (btn['class']) button.addClass(btn['class']);
+	    if (btn['name'] == 'cancel') button.addClass('dialog_inputaux');
+	    button.addClass('fb_button_' + i);
+	    button.attr('value', btn.label);
+	    button.click(dialog.createHandler('click', btn));
+	    button.appendTo(container);
+	  });
     
-  return container.get(0);
-};
+	  return container.get(0);
+	};
 
-Drupal.theme.prototype.fb_popup_dialog = function(options) {
-  options = options || {buttons:{}};
-  var container = document.createDocumentFragment();
-  var elements  =  [
-     '<h2 class="dialog_header"><span>',
-    options.title.toString(),
-    '</span></h2>',
-       '<div class="dialog_stripes"></div>',
-    '<div class="dialog_content">',
-    options.message.toString(),
-    '</div>'
-  ];
+	Drupal.theme.prototype.fb_popup_dialog = function(options) {
+	  options = options || {buttons:{}};
+	  var container = document.createDocumentFragment();
+	  var elements  =  [
+	     '<h2 class="dialog_header"><span>',
+	    options.title.toString(),
+	    '</span></h2>',
+	       '<div class="dialog_stripes"></div>',
+	    '<div class="dialog_content">',
+	    options.message.toString(),
+	    '</div>'
+	  ];
   
-  $(elements.join("\n")).each(function() {
-    container.appendChild(this);
-  });
-  if (options.buttons) {
-    container.appendChild(
-      Drupal.theme('fb_popup_dialog_buttons', options.buttons, options.dialog)
-    );
-  }
+	  $(elements.join("\n")).each(function() {
+	    container.appendChild(this);
+	  });
+	  if (options.buttons) {
+	    container.appendChild(
+	      Drupal.theme('fb_popup_dialog_buttons', options.buttons, options.dialog)
+	    );
+	  }
 
-  return container;
-};
+	  return container;
+	};
 
 
-Drupal.theme.prototype.fbml_name = function(fbuid, options) {
-  var output = ['<fb:name uid="', fbuid, '"'];
-  var defaults = {
-    'useyou' : false,
-    'linked' : false
-  };
+	Drupal.theme.prototype.fbml_name = function(fbuid, options) {
+	  var output = ['<fb:name uid="', fbuid, '"'];
+	  var defaults = {
+	    'useyou' : false,
+	    'linked' : false
+	  };
   
-  options = $.extend({}, defaults, options);
+	  options = $.extend({}, defaults, options);
   
-  output.push('" useyou="'+ (!!options.useyou ? 'true' : 'false') +'"');
-  output.push('" linked="'+ (!!options.linked ? 'true' : 'false') +'"');
-  output.push('></fb:name>');
+	  output.push('" useyou="'+ (!!options.useyou ? 'true' : 'false') +'"');
+	  output.push('" linked="'+ (!!options.linked ? 'true' : 'false') +'"');
+	  output.push('></fb:name>');
   
-  return output.join('');
-};
+	  return output.join('');
+	};
 
-Drupal.theme.prototype.fbml_profile_pic = function(fbuid, options) {
-  var output = ['<fb:profile-pic uid="', fbuid, '"'];
-  options = options || {};
+	Drupal.theme.prototype.fbml_profile_pic = function(fbuid, options) {
+	  var output = ['<fb:profile-pic uid="', fbuid, '"'];
+	  options = options || {};
   
-  if (options.width)  output.push('" width="'+ options.width +'"');
-  if (options.height) output.push('" height="'+ options.height +'"');
-  if (options.size)   output.push('" size="'+ options.size +'"');
+	  if (options.width)  output.push('" width="'+ options.width +'"');
+	  if (options.height) output.push('" height="'+ options.height +'"');
+	  if (options.size)   output.push('" size="'+ options.size +'"');
   
-  output.push('" facebook-logo="'+ (!!options['facebook-logo'] ? 'true' : 'false') +'"')
-  output.push('" linked="'+ (!!options.linked ? 'true' : 'false') +'"');  
-  output.push('></fb:profile-pic>');
+	  output.push('" facebook-logo="'+ (!!options['facebook-logo'] ? 'true' : 'false') +'"')
+	  output.push('" linked="'+ (!!options.linked ? 'true' : 'false') +'"');  
+	  output.push('></fb:profile-pic>');
   
-  return output.join('');
-};
+	  return output.join('');
+	};
+
+	jQuery(document).bind('fb:init', Drupal.fbconnect.init);
+
+});
 
-jQuery(document).bind('fb:init', Drupal.fbconnect.init);
\ No newline at end of file
+
+function facebook_onlogin_ready() {
+  // http://github.com/facebook/connect-js/issues/194
+  if (!FB.getSession()) {
+    return;
+  }
+  jQuery("#fbconnect-autoconnect-form").submit();
+}
diff --git a/fbconnect.module b/fbconnect.module
index 467b9cf..1b42cd2 100644
--- a/fbconnect.module
+++ b/fbconnect.module
@@ -38,17 +38,6 @@ function fbconnect_menu() {
     'weight' => 3,
   );
 
-//  $items['user/%user_category/edit/fbconnect'] = array(
-//    'title' => 'Facebook',
-//    'page callback' => 'fbconnect_user_identities',
-//    'page arguments' => array(1),
-//    'access callback' => 'user_edit_access',
-//    'access arguments' => array(1),
-//    'load arguments' => array('%map', '%index'),
-//    'type' => MENU_LOCAL_TASK,
-//    'file' => 'fbconnect.pages.inc',
-//  );
-
   $items['fbconnect/register/prompt'] = array(
     'title' => 'Facebook connect',
     'page callback' => 'fbconnect_prompt_page',
@@ -83,6 +72,16 @@ function fbconnect_menu() {
 }
 
 /**
+ * Implements hook_rdf_namespaces().
+ * Add xmlns:fb="http://www.facebook.com/2008/fbml" attribute to html tag.
+ */
+function fbconnect_rdf_namespaces() {
+  return array(
+    'fb' => 'http://www.facebook.com/2008/fbml',
+  );
+}
+
+/**
  * Implements hook_theme().
  */
 function fbconnect_theme() {
@@ -145,11 +144,20 @@ function fbconnect_init() {
 }
 
 /**
+ * Implements hook_user_delete().
+ */
+function fbconnect_user_delete($account) {
+  db_delete('fbconnect_users')
+    ->condition('uid', $account->uid)
+    ->execute();
+}
+
+/**
  * Implements hook_user_cancel().
  */
 function fbconnect_user_cancel($edit, $account, $method) {
   db_delete('fbconnect_users')
-    ->condition('uid', $user->uid)
+    ->condition('uid', $account->uid)
     ->execute();
 }
 
@@ -214,7 +222,7 @@ function fbconnect_form_alter(&$form, $form_state, $form_id) {
 
       // Render fbconnect on login block.
     case 'user_login_block':
-      if (!empty($_GET['destination']) && ($_GET['destination'] != 'fbconnect/link') && facebook_client()) {
+      if ( ((!isset($_GET['destination']))||($_GET['destination'] != 'fbconnect/link')) && facebook_client()) {
 
         #848354 : ask user for email permission when account linking is disabled
         $attr = array();
@@ -225,8 +233,8 @@ function fbconnect_form_alter(&$form, $form_state, $form_id) {
         $form['fbconnect_button'] = array(
           '#type' => 'item',
           '#description' => t('Sign in using Facebook'),
-          '#value' => fbconnect_render_button($attr),
-          '#weight' => 1,
+          '#markup' => fbconnect_render_button($attr),
+          '#weight' => 200,
           '#id' => 'fbconnect_button',
         );
       }
@@ -290,6 +298,7 @@ function _facebook_client_search_paths() {
     drupal_get_path('module', 'fbconnect'),
     module_invoke('libraries', 'get_path', 'facebook-platform'),
     module_invoke('libraries', 'get_path', 'facebook-client'),
+		'sites/all/libraries/facebook-php-sdk',
   ));
 }
 
@@ -435,7 +444,7 @@ function fbconnect_render_js() {
 /**
  * Implements hook_footer().
  */
-function fbconnect_footer() {
+function fbconnect_page_alter(&$page) {
   if (facebook_client() && !_fbconnect_is_excluded_page($_GET['q'])) {
     $config = fbconnect_get_config();
     $footer = array();
@@ -470,12 +479,13 @@ CODE;
 
     if (!fbconnect_get_fbuid(TRUE)) {
       // Display the autoconnect form.
-      $footer['autoconnect-form'] = '<div style="display: none">' . drupal_get_form('fbconnect_autoconnect_form') . '</div>';
+      $footer['autoconnect-form'] = '<div style="display: none">' . drupal_render(drupal_get_form('fbconnect_autoconnect_form')) . '</div>';
     }
 
-    //    drupal_alter('fbconnect_footer', $footer);
-
-    return join("\n", $footer);
+    $page['page_bottom']['fb_init_code'] = array(
+      '#type' => 'markup',
+      '#markup' => implode("\n", $footer),
+    );
   }
 }
 
@@ -529,7 +539,9 @@ function fbconnect_autoconnect_form_submit($form, &$form_state) {
       }
       elseif ($uid) {
         $account = user_load($uid);
-        user_external_login($account);
+				$GLOBALS['user'] = $account;
+				$account_login = (array) $account;
+				user_login_finalize($account_login);
         module_invoke('rules', 'invoke_event', 'fbconnect_user_login', $account);
       }
     }
@@ -548,12 +560,12 @@ function fbconnect_autoconnect_form_submit($form, &$form_state) {
  */
 function _is_fbconnect_user($fbuid) {
   if ($fbuid) {
-    $query = db_select('users', 'u')
-      ->fields('u', 'uid')
-      ->innerJoin('fbconnect_users', 'f', 'u.uid = f.uid')
-      ->condition('fbuid', $fbuid)
-      ->execute();
-    return $query->fetchField();
+    $query = db_select('users', 'u');
+    $query->innerJoin('fbconnect_users', 'f', 'u.uid = f.uid');
+    $query->condition('f.fbuid', $fbuid);
+    $query->fields('u', array('uid'));
+    $result = $query->execute();
+    return $result->fetchField();
   }
 }
 
@@ -566,8 +578,8 @@ function _is_fbconnect_user($fbuid) {
  */
 function _get_user_fbuid($uid) {
   if ($uid) {
-    $query = "SELECT fbuid FROM {fbconnect_users} where uid = %d";
-    return db_query($query, $uid)->fetchField();
+    $query = "SELECT fbuid FROM {fbconnect_users} where uid = :uid";
+    return db_query($query, array(':uid' => $uid))->fetchField();
   }
 }
 
@@ -580,46 +592,44 @@ function _get_user_fbuid($uid) {
  *   Facebook user id
  */
 function fbconnect_register($uid, $fbuid) {
-  if (_get_user_fbuid($uid)) {
-    return FALSE;
-  }
-  if (_is_fbconnect_user($fbuid)) {
-    return FALSE;
-  }
 
-  $delete_query = 'DELETE FROM {fbconnect_users} WHERE uid = %d';
-  $insert_query = 'INSERT INTO {fbconnect_users} (uid, fbuid, timestamp) VALUES (%d, \'%s\', %d)';
+	if (_get_user_fbuid($uid)) {
+		return FALSE;
+	}
+	if (_is_fbconnect_user($fbuid)) {
+		return FALSE;
+	}
 
-  db_delete('fbconnect_users')
-    ->condition('uid', $uid)
-    ->execute();
+	$delete_query = 'DELETE FROM {fbconnect_users} WHERE uid = %d';
+	$insert_query = 'INSERT INTO {fbconnect_users} (uid, fbuid, timestamp) VALUES (%d, \'%s\', %d)';
 
-  $id = db_insert('fbconnect_users')
-    ->fields(array(
-      'uid' => $uid,
-      'fbuid' => $fbuid,
-      'timestamp' => REQUEST_TIME,
-    ))
-    ->execute();
+	db_delete('fbconnect_users')
+		->condition('uid', $uid)
+		->execute();
 
-  if ($id) {
-    $account = user_load($uid);
-    $account->fbuid = $fbuid;
+	db_insert('fbconnect_users')
+		->fields(array(
+			'uid' => $uid,
+			'fbuid' => $fbuid,
+			'timestamp' => REQUEST_TIME,
+			))
+	->execute();
 
-    user_save($account, array('fbuid' => $fbuid));
-    module_invoke('rules', 'invoke_event', 'fbconnect_user_registered', $account);
+	$account = user_load($uid);
+	$account->fbuid = $fbuid;
 
-    watchdog(
-      'fbconnect',
-      'User has connected his Facebook account (@fbuid)',
-      array('@fbuid' => $fbuid),
-      WATCHDOG_NOTICE,
-      l(t('edit'), "user/$uid/edit/fbconnect")
-    );
+	user_save($account, array('data' => array('fbuid' => $fbuid)));
+	module_invoke('rules', 'invoke_event', 'fbconnect_user_registered', $account);
 
-    return TRUE;
-  }
-  return FALSE;
+	watchdog(
+		'fbconnect',
+		'User has connected his Facebook account (@fbuid)',
+		array('@fbuid' => $fbuid),
+		WATCHDOG_NOTICE,
+		l(t('edit'), "user/$uid/edit/fbconnect")
+	);
+
+	return TRUE;
 }
 
 /**
@@ -659,7 +669,7 @@ function fbconnect_unregister($fbuid) {
     $account = user_load($uid);
     $account->fbuid = NULL;
 
-    user_save($account, array('fbuid' => NULL));
+    user_save($account, array('data' => array('fbuid' => NULL)));
     module_invoke('rules', 'invoke_event', 'fbconnect_user_unregistered', $account);
 
     watchdog(
@@ -796,6 +806,7 @@ function fbconnect_theme_registry_alter(&$theme_registry) {
       'arguments' => array('account' => NULL),
       'function' => 'fbconnect_theme_user_picture_override',
       'preprocess functions' => array(),
+			'theme path' => drupal_get_path('module', 'fbconnect'),
     );
   }
 }
@@ -804,6 +815,7 @@ function fbconnect_theme_registry_alter(&$theme_registry) {
  * Our replacement for theme('user_picture', ...)
  */
 function fbconnect_theme_user_picture_override($account) {
+	$account = $account['account'];
   // manually set in nodeapi or comments
   if (isset($account->fbconnect_picture_preset)) {
     $preset = $account->fbconnect_picture_preset;
@@ -811,18 +823,24 @@ function fbconnect_theme_user_picture_override($account) {
   elseif (variable_get('fbconnect_pic_size', '')) {
     // Default user picture preset.
     $preset = variable_get('fbconnect_pic_size', 'square');
-  }
+  } else {
+		$preset = 'square';
+	}
 
-  if (!isset($account->fbuid)) {
+  if (!isset($account->data['fbuid'])) {
     $user_data = unserialize(db_query('SELECT data FROM {users} WHERE uid = :uid', array(':uid' => $account->uid))->fetchField());
     $account->fbuid     = @$user_data['fbuid'];
     $account->fb_avatar = @$user_data['fb_avatar'];
   }
   // First learn the Facebook id
-  $fbuid    = $account->fbuid;
+	if (isset($account->data['fbuid'])) {
+  	$fbuid = $account->data['fbuid'];
+	} else {
+		$fbuid = NULL;
+	}
   $user_url = url('user/' . $account->uid);
 
-  if ($fbuid && isset($account->fb_avatar) && $account->fb_avatar) {
+  if ($fbuid && isset($account->data['fb_avatar']) && $account->data['fb_avatar']) {
     $output = theme('fbconnect_user_picture_override', array('fbuid' => $fbuid, 'account' => $account, 'user_url' => $user_url, 'size' => variable_get('fbconnect_pic_size', $preset), 'logo' => variable_get('fbconnect_pic_logo', TRUE)));
   }
   else {
@@ -908,6 +926,7 @@ function theme_fbconnect_login_button($variables) {
  */
 function fbconnect_menu_alter(&$callbacks) {
   $callbacks['user/%user_category/edit/fbconnect']['page callback'] = 'fbconnect_user_identities';
+  $callbacks['user/%user_category/edit/fbconnect']['page arguments'] = array(1);
   $callbacks['user/%user_category/edit/fbconnect']['module'] = 'fbconnect';
   $callbacks['user/%user_category/edit/fbconnect']['file'] = 'fbconnect.pages.inc';
 }
diff --git a/fbconnect.pages.inc b/fbconnect.pages.inc
index 13f64cf..38a2b15 100644
--- a/fbconnect.pages.inc
+++ b/fbconnect.pages.inc
@@ -38,7 +38,7 @@ function fbconnect_prompt_page_links() {
     array(
       'title' => $link_msg,
       'href' => 'user',
-      array('query' => 'destination=fbconnect/link'),
+      'query' => array('destination'=>'fbconnect/link'),
     ),
   );
 
@@ -52,7 +52,7 @@ function fbconnect_prompt_page_links() {
 function fbconnect_register_page($form, $form_state = array()) {
   $conf  = fbconnect_get_config();
   $data  = fbconnect_get_user_info('name, email');
-  $form  = drupal_retrieve_form('user_register', $form_state);
+  $form  = drupal_retrieve_form('user_register_form', $form_state);
   $site  = $conf['invite_name'];
 
   // #758918 : prevent users registration if admin has blocked free registration
@@ -62,7 +62,7 @@ function fbconnect_register_page($form, $form_state = array()) {
     return;
   }
 
-  drupal_prepare_form('user_register', $form, $form_state);
+  drupal_prepare_form('user_register_form', $form, $form_state);
 
   $form['name']['#default_value'] = $data['name'];
 
@@ -98,7 +98,7 @@ function fbconnect_register_page($form, $form_state = array()) {
     $form_state['values']['fb_visible'] = 1;
     $form_state['values']['fb_avatar']  = 1;
 
-    drupal_validate_form('user_register', $form, $form_state);
+    drupal_validate_form('user_register_form', $form, $form_state);
     $success = !form_get_errors();
     if (!$success) {
       $dest = array('query' => 'destination=fbconnect/link');
@@ -159,7 +159,7 @@ function fbconnect_register_form_submit($form, &$form_state) {
   $data['fb_visible'] = $form_state['values']['fb_visible'];
 
   user_save($user, $data);
-  user_external_login($user);
+	user_login_finalize($user);
   $_SESSION['fbconnect_feed']['type'] = 'register';
 }
 
@@ -173,7 +173,7 @@ function fbconnect_user_identities($account) {
 
   drupal_set_title(check_plain($account->name));
 
-  if (isset($account->fbuid) && $account->fbuid) {
+  if (isset($account->data['fbuid']) && $account->data['fbuid'] && $uid) {
     return drupal_get_form('fbconnect_user_settings_form', $account);
   }
   elseif ($uid && $account->uid != $uid) {
@@ -198,7 +198,7 @@ function fbconnect_user_settings_form($form, $form_state, $account) {
     '#type' => 'checkbox',
     '#title' => t('Let my Facebook friends see me on @site', array('@site' => $conf['invite_name'])),
     '#description' => t('My Facebook friends will be able to see that I own an account on this website.'),
-    '#default_value' => isset($account->fb_visible) ? $account->fb_visible : NULL,
+    '#default_value' => isset($account->data['fb_visible']) ? $account->data['fb_visible']  : NULL,
   );
 
   // Whether user picture is enabled,
@@ -207,7 +207,7 @@ function fbconnect_user_settings_form($form, $form_state, $account) {
     $form['fb_avatar'] = array(
       '#type' => 'checkbox',
       '#title' => t('Use my Facebook picture as user picture'),
-      '#default_value' => isset($account->fb_avatar) ? $account->fb_avatar : NULL,
+      '#default_value' => isset($account->data['fb_avatar']) ? $account->data['fb_avatar'] : NULL,
     );
   }
 
@@ -235,7 +235,7 @@ function fbconnect_user_settings_form($form, $form_state, $account) {
   $form['fbconnect']['profile'] = array(
     '#type' =>  'item',
     '#title' => t('Linked to this Facebook account'),
-    '#value' => '<fb:name uid="' . $account->fbuid . '" useyou="false" linked="true"></fb:name>',
+    '#markup' => '<fb:name uid="' . $account->data['fbuid'] . '" useyou="false" linked="true"></fb:name>',
   );
 
   $form['fbconnect']['unlink'] = array(
@@ -257,10 +257,10 @@ function fbconnect_user_settings_form($form, $form_state, $account) {
  */
 function fbconnect_user_settings_form_submit($form, &$form_state) {
   $account = $form_state['values']['account'];
-  $visible = $form_state['values']['visibility'];
+  $visible = $form_state['values']['fb_visible'];
   $avatar  = $form_state['values']['fb_avatar'];
   $op      = $form_state['values']['op'];
-  $fbuid   = $account->fbuid;
+  $fbuid   = $account->data['fbuid'];
 
   $data['fb_visible'] = $form_state['values']['fb_visible'];
   $data['fb_avatar']  = $form_state['values']['fb_avatar'];
@@ -276,7 +276,7 @@ function fbconnect_user_settings_form_submit($form, &$form_state) {
   }
 
   if ($data) {
-    user_save($account, $data);
+    user_save($account, array('data' => $data));
   }
   drupal_set_message(t('Your configuration options have been saved.'));
 }
@@ -291,7 +291,7 @@ function theme_fbconnect_user_picture_override($variables) {
   $size = $variables['size'];
   $logo = $variables['logo'];
   $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http';
-  $path = $protocol . '://graph.facebook.com/' . $fbuid . ' /picture?type=' . $size;
+  $path = $protocol . '://graph.facebook.com/' . $fbuid . '/picture?type=' . $size;
   $image = theme('image', array('path' => $path));
   return '<div class="picture">' . l($image, $path, array('html' => TRUE)) . '</div>';
 }
