diff --git a/erpnext/home/page/event_updates/event_updates.js b/erpnext/home/page/event_updates/event_updates.js
index ee348e6..74f12d8 100644
--- a/erpnext/home/page/event_updates/event_updates.js
+++ b/erpnext/home/page/event_updates/event_updates.js
@@ -585,6 +585,7 @@
 		this.wrapper.innerHTML = '';
 		this.profile_settings = $a($a(this.wrapper, 'p'), 'span', 'link_type', {fontWeight:'bold'});
 		this.profile_settings.innerHTML = user_fullname + ' (Profile Settings)';
+		this.profile_settings.id = "user_fullname";
 		this.profile_settings.onclick = function() { loadpage('profile-settings'); }
 
 		this.span = $a($a(this.wrapper, 'p'), 'span', 'link_type', {fontWeight:'bold'});
@@ -614,7 +615,7 @@
 	
 			// complete registration
 			if(in_list(user_roles,'System Manager')) { 
-				pscript.complete_registration(r.message.registration_complete); 
+				pscript.complete_registration(r.message.registration_complete, r.message.profile); 
 			}
 			
 			// setup wizard
@@ -627,15 +628,19 @@
 
 // complete my company registration
 // --------------------------------
-pscript.complete_registration = function(is_complete) {
+pscript.complete_registration = function(is_complete, profile) {
 	if(is_complete == 'No'){
-		var d = new Dialog(400, 200, "Please Complete Your Registration");
+		var d = new Dialog(400, 200, "Setup your Account");
 		if(user != 'Administrator'){
 			d.no_cancel(); // Hide close image
 			$dh(page_body.wntoolbar.wrapper);
 		}
 
 		d.make_body([
+			['HTML', 'Your Profile Details', '<h4>Your Profile Details</h4>'],
+			['Data', 'First Name'],
+			['Data', 'Last Name'],
+			['HTML', 'Company Details', '<h4>Create your first company</h4>'],
 			['Data','Company Name','Example: Your Company LLC'],
 	  		['Data','Company Abbreviation', 'Example: YC (all your acconts will have this as a suffix)'],
 	  		['Select','Fiscal Year Start Date'],
@@ -649,7 +654,16 @@
 			d.widgets['Company Name'].value = locals['Control Panel']['Control Panel'].company_name;
 			d.widgets['Company Name'].disabled = 1;
 		}
-		
+
+		if(profile && profile.length>0) {
+			if(profile[0].first_name && profile[0].first_name!='None') {
+				d.widgets['First Name'].value = profile[0].first_name;
+			}
+
+			if(profile[0].last_name && profile[0].last_name!='None') {
+				d.widgets['Last Name'].value = profile[0].last_name;
+			}
+		}		
 
 		//d.widgets['Save'].disabled = true;	  // disable Save button
 		pscript.make_dialog_field(d);
@@ -666,14 +680,20 @@
 					d.widgets['Company Name'].value,
 					d.widgets['Company Abbreviation'].value,
 					d.widgets['Fiscal Year Start Date'].value,
-					d.widgets['Default Currency'].value
+					d.widgets['Default Currency'].value,
+					d.widgets['First Name'].value,
+					d.widgets['Last Name'].value
 				];
 				
 				$c_obj('Setup Control','setup_account',JSON.stringify(args),function(r, rt){
-					sys_defaults = r.message;
+					sys_defaults = r.message.sys_defaults;
+					user_fullname = r.message.user_fullname;
 					d.hide();
 					$ds(page_body.wntoolbar.wrapper);
+					$('#user_fullname').html(user_fullname + " (Profile Settings)");
 				});
+			} else {
+				d.widgets['Save'].done_working();
 			}
 		}
 		d.show();
@@ -699,12 +719,12 @@
 // ---------------
 pscript.validate_fields = function(d)
 {
-	var lst = ['Company Abbreviation', 'Fiscal Year Start Date', 'Default Currency'];
-	var msg = 'Please enter the following fields';
+	var lst = ['First Name', 'Company Name', 'Company Abbreviation', 'Fiscal Year Start Date', 'Default Currency'];
+	var msg = 'Please enter the following fields\n';
 	var flag = 1;
 	for(var i=0; i<lst.length; i++)
 	{
-		if(!d.widgets[lst[i]].value){
+		if(!d.widgets[lst[i]].value || d.widgets[lst[i]].value=='None'){
 			flag = 0;
 			msg = msg + NEWLINE + lst[i];
 		}
diff --git a/erpnext/home/page/event_updates/event_updates.py b/erpnext/home/page/event_updates/event_updates.py
index 1d1d1b2..e4690d0 100644
--- a/erpnext/home/page/event_updates/event_updates.py
+++ b/erpnext/home/page/event_updates/event_updates.py
@@ -36,7 +36,10 @@
 		'is_trial': webnotes.conn.get_global('is_trial'),
 		'days_to_expiry': (webnotes.conn.get_global('days_to_expiry') or '0'),
 		'setup_status': get_setup_status(),
-		'registration_complete': cint(get_defaults('registration_complete')) and 'Yes' or 'No'
+		'registration_complete': cint(get_defaults('registration_complete')) and 'Yes' or 'No',
+		'profile': webnotes.conn.sql("""\
+			SELECT first_name, last_name FROM `tabProfile`
+			WHERE name=%s AND docstatus<2""", webnotes.user.name, as_dict=1)
 	}
 	return ret
 
@@ -89,4 +92,4 @@
 		return ''
 		
 	return {'ret': ret, 'percent': percent}
-		
\ No newline at end of file
+		
diff --git a/erpnext/setup/doctype/setup_control/setup_control.py b/erpnext/setup/doctype/setup_control/setup_control.py
index 55b967e..6616338 100644
--- a/erpnext/setup/doctype/setup_control/setup_control.py
+++ b/erpnext/setup/doctype/setup_control/setup_control.py
@@ -47,9 +47,17 @@
 	# Account Setup
 	# ---------------
 	def setup_account(self, args):
-		company_name, comp_abbr, fy_start, currency = eval(args)
+		import webnotes
+		company_name, comp_abbr, fy_start, currency, first_name, last_name = eval(args)
 		curr_fiscal_year,fy_start_date = self.get_fy_details(fy_start)
 		self.currency = currency
+
+		# Update Profile
+		if last_name=='None': last_name = None
+		webnotes.conn.sql("""\
+			UPDATE `tabProfile` SET first_name=%s, last_name=%s
+			WHERE name=%s AND docstatus<2""", (first_name, last_name, webnotes.user.name))
+			
 		
 		# Fiscal Year
 		master_dict = {'Fiscal Year':{'year':curr_fiscal_year, 'year_start_date':fy_start_date}}
@@ -66,6 +74,7 @@
 								'default_currency': currency,
 								'default_company':company_name,
 								'default_valuation_method':'FIFO',
+								'default_stock_uom':'Nos',
 								'date_format':'dd-mm-yyyy',
 								'default_currency_format':'Lacs',
 								'so_required':'No',
@@ -87,7 +96,8 @@
 		msgprint("Great! Your company has now been created")
 		
 		import webnotes.utils
-		return webnotes.utils.get_defaults()
+		user_fullname = (first_name or '') + (last_name and (" " + last_name) or '')
+		return {'sys_defaults': webnotes.utils.get_defaults(), 'user_fullname': user_fullname}
 
 		
 	# Get Fiscal year Details
