diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb
index 4e45b155b..63cceafa0 100644
--- a/app/controllers/users/omniauth_callbacks_controller.rb
+++ b/app/controllers/users/omniauth_callbacks_controller.rb
@@ -124,6 +124,10 @@ class Users::OmniauthCallbacksController < ApplicationController
 
     email = data[:email]
 
+    # If the auth supplies a name / username, use those. Otherwise start with email.
+    name = data[:name] || data[:email]
+    username = data[:nickname] || data[:email]
+
     user_open_id = UserOpenId.find_by_url(identity_url)
 
     if user_open_id.blank? && user = User.find_by_email(email)
@@ -147,8 +151,8 @@ class Users::OmniauthCallbacksController < ApplicationController
     else
       @data = {
         email: email,
-        name: User.suggest_name(email),
-        username: User.suggest_username(email),
+        name: User.suggest_name(name),
+        username: User.suggest_username(username),
         email_valid: true ,
         auth_provider: data[:provider]
       }
diff --git a/app/models/user.rb b/app/models/user.rb
index 70c1e096e..56cdff20a 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -51,6 +51,9 @@ class User < ActiveRecord::Base
   end
 
   def self.suggest_username(name)
+
+    return nil unless name.present?
+    
     # If it's an email
     if name =~ /([^@]+)@([^\.]+)/
       name = Regexp.last_match[1]
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index e1712d60d..2332011ac 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -394,6 +394,11 @@ describe User do
   end
 
   describe '.suggest_username' do
+
+    it "doesn't raise an error on nil username" do
+      User.suggest_username(nil).should be_nil
+    end
+
     it 'corrects weird characters' do
       User.suggest_username("Darth%^Vadar").should == "Darth_Vadar"
     end