background, user_info
diff --git a/build.json b/build.json
index 76f3da0..17d38b3 100644
--- a/build.json
+++ b/build.json
@@ -9,6 +9,7 @@
 			"lib/js/wn/require.js",
 			"lib/js/wn/dom.js",
 			"lib/js/wn/page.js",
+			"lib/js/wn/misc/user.js",
 			"lib/js/lib/json2.js",
 			"lib/js/core.js"
 		]
diff --git a/erpnext/home/page/activity/activity.js b/erpnext/home/page/activity/activity.js
index d72c7ae..7dbf476 100644
--- a/erpnext/home/page/activity/activity.js
+++ b/erpnext/home/page/activity/activity.js
@@ -19,7 +19,7 @@
 			%(link)s %(subject)s <span class="user-info">%(by)s</span>', data));
 	},
 	scrub_data: function(data) {
-		data.by = wn.boot.user_fullnames[data.owner];
+		data.by = wn.user_info(data.owner).fullname;
 		
 		// feedtype
 		if(!data.feed_type) {
diff --git a/erpnext/startup/js/complete_setup.js b/erpnext/startup/js/complete_setup.js
index 26b2d3b..ac89aff 100644
--- a/erpnext/startup/js/complete_setup.js
+++ b/erpnext/startup/js/complete_setup.js
@@ -82,7 +82,7 @@
 		$c_obj('Setup Control','setup_account',data,function(r, rt){
 			sys_defaults = r.message;
 			user_fullname = r.message.user_fullname;
-			wn.boot.user_fullnames[user] = user_fullname;
+			wn.boot.user_info[user].fullname = user_fullname;
 			d.hide();
 			$('header').toggle(true);
 			page_body.wntoolbar.set_user_name();
diff --git a/erpnext/utilities/page/messages/messages.js b/erpnext/utilities/page/messages/messages.js
index 43adce4..f33c47b 100644
--- a/erpnext/utilities/page/messages/messages.js
+++ b/erpnext/utilities/page/messages/messages.js
@@ -65,7 +65,7 @@
 		$(wn.pages.messages).find('.well').toggle(contact==user ? false : true);
 
 		$(wn.pages.messages).find('h1:first').html('Messages: ' 
-			+ (user==contact ? 'From everyone' : wn.boot.user_fullnames[contact]))
+			+ (user==contact ? 'From everyone' : wn.user_info(contact).fullname));
 
 		erpnext.messages.contact = contact;
 		erpnext.messages.list.opts.args.contact = contact;
@@ -98,7 +98,7 @@
 			},
 			render_row: function(wrapper, data) {
 				data.creation = dateutil.comment_when(data.creation);
-				data.comment_by_fullname = wn.boot.user_fullnames[data.owner];
+				data.comment_by_fullname = wn.user_info(data.owner).fullname;
 
 				data.reply_html = '';
 				if(data.owner==user) {
@@ -143,7 +143,7 @@
 				var $body = $(wn.pages.messages).find('.section-body');
 				for(var i in r.message) {
 					var p = r.message[i];
-					p.fullname = wn.boot.user_fullnames[p.name];
+					p.fullname = wn.user_info(p.name).fullname;
 					p.name = p.name.replace('@', '__at__');
 					$body.append(repl('<div class="section-item">\
 						<a href="#!messages/%(name)s">%(fullname)s</a></div>', p))
diff --git a/erpnext/utilities/page/users/users.js b/erpnext/utilities/page/users/users.js
index 76f5672..d1c916c 100644
--- a/erpnext/utilities/page/users/users.js
+++ b/erpnext/utilities/page/users/users.js
@@ -70,7 +70,7 @@
 		} else {
 			data.imgsrc = 'lib/images/ui/no_img_' + (data.gender=='Female' ? 'f' : 'm') + '.gif';
 		}
-		data.fullname = wn.boot.user_fullnames[data.name];
+		data.fullname = wn.user_info(data.name).fullname;
 		data.delete_html = '';
 		if(!data.enabled) 
 			data.delete_html = '<a class="close" title="delete">&times;</a>';
@@ -232,6 +232,7 @@
 				$c_page('utilities', 'users', 'add_user', v, function(r,rt) {
 					if(r.exc) { msgprint(r.exc); return; }
 					else {
+						wn.boot.user_info[v.user] = {fullname:v.first_name + ' ' + v.last_name};
 						d.hide();
 						me.refresh();
 					}
diff --git a/js/all-app.js b/js/all-app.js
index e5e7967..fafaec2 100644
--- a/js/all-app.js
+++ b/js/all-app.js
Binary files differ
diff --git a/js/all-web.js b/js/all-web.js
index 1df9639..5137d58 100644
--- a/js/all-web.js
+++ b/js/all-web.js
@@ -128,6 +128,15 @@
 state=window.location.hash;if(state!=src){window.location.hash=state;}
 else{document.title=title;}}}
 /*
+ *	lib/js/wn/misc/user.js
+ */
+wn.user_info=function(uid){var def={'fullname':uid,'image':'lib/images/ui/no_img_m.gif'}
+if(!wn.boot.user_info)return def
+if(!wn.boot.user_info[uid])return def
+if(!wn.boot.user_info[uid].fullname)
+wn.boot.user_info[uid].fullname=uid;if(!wn.boot.user_info[uid].image)
+wn.boot.user_info[uid].image=def.image;return wn.boot.user_info[uid];}
+/*
  *	lib/js/lib/json2.js
  */
 var JSON;if(!JSON){JSON={};}
@@ -1028,7 +1037,7 @@
 /*
  *	lib/js/legacy/app.js
  */
-var popup_cont;var session={};var start_sid=null;if(!wn)var wn={};function startup(){start_sid=get_cookie('sid');popup_cont=$a(document.getElementsByTagName('body')[0],'div');var setup_globals=function(r){wn.boot=r;profile=r.profile;user=r.profile.name;user_fullname=wn.boot.user_fullnames?wn.boot.user_fullnames[user]:'Guest';user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;home_page=r.home_page;_p.letter_heads=r.letter_heads;sys_defaults=r.sysdefaults;session.rt=profile.can_read;if(r.ipinfo)session.ipinfo=r.ipinfo;session.dt_labels=r.dt_labels;session.rev_dt_labels={}
+var popup_cont;var session={};var start_sid=null;if(!wn)var wn={};function startup(){start_sid=get_cookie('sid');popup_cont=$a(document.getElementsByTagName('body')[0],'div');var setup_globals=function(r){wn.boot=r;profile=r.profile;user=r.profile.name;user_fullname=wn.user_info(user).fullname;user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;home_page=r.home_page;_p.letter_heads=r.letter_heads;sys_defaults=r.sysdefaults;session.rt=profile.can_read;if(r.ipinfo)session.ipinfo=r.ipinfo;session.dt_labels=r.dt_labels;session.rev_dt_labels={}
 if(r.dt_labels){for(key in r.dt_labels)session.rev_dt_labels[r.dt_labels[key]]=key;}
 wn.control_panel=r.control_panel;}
 var setup_history=function(r){rename_observers.push(nav_obj);}
diff --git a/version.num b/version.num
index c189136..eb6fa5a 100644
--- a/version.num
+++ b/version.num
@@ -1 +1 @@
-769
\ No newline at end of file
+773
\ No newline at end of file