diff --git a/erpnext/hub_node/api.py b/erpnext/hub_node/api.py
index 2a928d4..df3e7ef 100644
--- a/erpnext/hub_node/api.py
+++ b/erpnext/hub_node/api.py
@@ -19,6 +19,7 @@
 @frappe.whitelist()
 def register_marketplace(company, company_description):
 	validate_registerer()
+
 	settings = frappe.get_single('Marketplace Settings')
 	message = settings.register_seller(company, company_description)
 
@@ -151,6 +152,14 @@
 	except Exception as e:
 		frappe.log_error(message=e, title='Hub Sync Error')
 
+@frappe.whitelist()
+def get_unregistered_users():
+	settings = frappe.get_single('Marketplace Settings')
+	registered_users = [user.user for user in settings.users] + ['Administrator', 'Guest']
+	all_users = [user.name for user in frappe.db.get_all('User', filters={'enabled': 1})]
+	unregistered_users = [user for user in all_users if user not in registered_users]
+	return unregistered_users
+
 
 def item_sync_preprocess(intended_item_publish_count):
 	response = call_hub_method('pre_items_publish', {
diff --git a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py
index ebe8b70..5ea3011 100644
--- a/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py
+++ b/erpnext/hub_node/doctype/marketplace_settings/marketplace_settings.py
@@ -15,18 +15,16 @@
 
 	def register_seller(self, company, company_description):
 
-		country, currency, description = frappe.db.get_value('Company', company,
-			['country', 'default_currency', 'company_description'])
+		country, currency, company_logo = frappe.db.get_value('Company', company,
+			['country', 'default_currency', 'company_logo'])
 
 		company_details = {
 			'company': company,
 			'country': country,
-			# 'city': '',
 			'currency': currency,
 			'company_description': company_description,
-			# 'company_logo': company_logo,
-
-			'site_name': frappe.utils.get_url(),
+			'company_logo': company_logo,
+			'site_name': frappe.utils.get_url()
 		}
 
 		hub_connection = self.get_connection()
diff --git a/erpnext/public/js/hub/Sidebar.vue b/erpnext/public/js/hub/Sidebar.vue
index 6e0b26c..164e78d 100644
--- a/erpnext/public/js/hub/Sidebar.vue
+++ b/erpnext/public/js/hub/Sidebar.vue
@@ -19,7 +19,7 @@
 export default {
 	data() {
 		return {
-			hub_registered: hub.settings.registered,
+			hub_registered: hub.is_user_registered(),
 			items: [
 				{
 					label: __('Browse'),
diff --git a/erpnext/public/js/hub/components/ReviewArea.vue b/erpnext/public/js/hub/components/ReviewArea.vue
index 070d0a6..159fdd1 100644
--- a/erpnext/public/js/hub/components/ReviewArea.vue
+++ b/erpnext/public/js/hub/components/ReviewArea.vue
@@ -56,8 +56,6 @@
 		},
 
 		on_submit_review(values) {
-			values.user = hub.settings.company_email;
-
 			this.review_area.reset();
 
 			hub.call('add_item_review', {
diff --git a/erpnext/public/js/hub/components/profile_dialog.js b/erpnext/public/js/hub/components/profile_dialog.js
index ea827ff..636bf14 100644
--- a/erpnext/public/js/hub/components/profile_dialog.js
+++ b/erpnext/public/js/hub/components/profile_dialog.js
@@ -24,16 +24,10 @@
 				}
 			}
 		},
-		// {
-		// 	fieldname: 'company_logo',
-		// 	label: __('Logo'),
-		// 	fieldtype: 'Attach Image',
-		// 	read_only: true
-		// },
 		{
+			label: __('About your company'),
 			fieldname: 'company_description',
-			label: __('About Your Company'),
-			fieldtype: 'Long Text'
+			fieldtype: 'Text'
 		}
 	];
 
@@ -48,7 +42,7 @@
 			// TODO: Say "we notice that the company description and logo isn't set. Please set them in master."
 			// Only then allow to register
 
-			const mandatory_fields = ['company'];
+			const mandatory_fields = ['company', 'company_description'];
 			mandatory_fields.forEach(field => {
 				const value = form_values[field];
 				if (!value) {
@@ -65,7 +59,7 @@
 	// Post create
 	const default_company = frappe.defaults.get_default('company');
 	dialog.set_value('company', default_company);
-	dialog.set_value('company_email', frappe.session.user);
+	dialog.set_value('email', frappe.session.user);
 
 	return dialog;
 }
diff --git a/erpnext/public/js/hub/marketplace.js b/erpnext/public/js/hub/marketplace.js
index 9df6303..bacca47 100644
--- a/erpnext/public/js/hub/marketplace.js
+++ b/erpnext/public/js/hub/marketplace.js
@@ -22,17 +22,20 @@
 
 		frappe.model.with_doc('Marketplace Settings').then(doc => {
 			hub.settings = doc;
-			const is_registered = hub.settings.registered;
-			const is_registered_seller = hub.settings.company_email === frappe.session.user;
+
 			this.setup_header();
 			this.make_sidebar();
 			this.make_body();
 			this.setup_events();
 			this.refresh();
-			if (!is_registered && !is_registered_seller && frappe.user_roles.includes('System Manager')) {
-				this.page.set_primary_action('Become a Seller', this.show_register_dialog.bind(this))
-			} else {
-				this.page.set_secondary_action('Add Users', this.show_add_user_dialog.bind(this));
+
+			if (is_subset(['System Manager', 'Item Manager'], frappe.user_roles)) {
+				// show buttons only to System Manager
+				if (!hub.is_seller_registered()) {
+					this.page.set_primary_action('Become a Seller', this.show_register_dialog.bind(this))
+				} else {
+					this.page.set_secondary_action('Add Users', this.show_add_user_dialog.bind(this));
+				}
 			}
 		});
 	}
@@ -118,45 +121,73 @@
 	}
 
 	show_add_user_dialog() {
-		const user_list = Object.keys(frappe.boot.user_info)
-			.filter(user => !['Administrator', 'Guest', frappe.session.user].includes(user));
-		const d = new frappe.ui.Dialog({
-			title: __('Add Users to Marketplace'),
-			fields: [
-				{
-					label: __('Users'),
-					fieldname: 'users',
-					fieldtype: 'MultiSelect',
-					reqd: 1,
-					get_data() {
-						return user_list;
-					}
-				}
-			],
-			primary_action({ users }) {
-				const selected_users = users.split(',').map(d => d.trim()).filter(Boolean);
+		this.get_unregistered_users()
+			.then(r => {
+				const user_list = r.message;
 
-				if (!selected_users.every(user => user_list.includes(user))) {
-					d.set_df_property('users', 'description', __('Some emails are invalid'));
-					return;
-				} else {
-					d.set_df_property('users', 'description', '');
-				}
+				const d = new frappe.ui.Dialog({
+					title: __('Add Users to Marketplace'),
+					fields: [
+						{
+							label: __('Users'),
+							fieldname: 'users',
+							fieldtype: 'MultiSelect',
+							reqd: 1,
+							get_data() {
+								return user_list;
+							}
+						}
+					],
+					primary_action({ users }) {
+						const selected_users = users.split(',').map(d => d.trim()).filter(Boolean);
 
-				frappe.call('erpnext.hub_node.api.register_users', {
-					user_list: selected_users
-				})
-				.then(r => {
-					d.hide();
+						if (!selected_users.every(user => user_list.includes(user))) {
+							d.set_df_property('users', 'description', __('Some emails are invalid'));
+							return;
+						} else {
+							d.set_df_property('users', 'description', '');
+						}
 
-					if (r.message && r.message.length) {
-						frappe.show_alert('Added {0} users', [r.message.length]);
+						frappe.call('erpnext.hub_node.api.register_users', {
+							user_list: selected_users
+						})
+						.then(r => {
+							d.hide();
+
+							if (r.message && r.message.length) {
+								frappe.show_alert(__('Added {0} users', [r.message.length]));
+							}
+						});
 					}
 				});
-			}
-		});
 
-		d.show();
+				d.show();
+			});
 	}
 
+	get_unregistered_users() {
+		return frappe.call('erpnext.hub_node.api.get_unregistered_users')
+	}
+
+}
+
+Object.assign(hub, {
+	is_seller_registered() {
+		return hub.settings.registered;
+	},
+
+	is_user_registered() {
+		return this.is_seller_registered() && hub.settings.users
+			.filter(hub_user => hub_user.user === frappe.session.user)
+			.length === 1;
+	},
+});
+
+/**
+ * Returns true if list_a is subset of list_b
+ * @param {Array} list_a
+ * @param {Array} list_b
+ */
+function is_subset(list_a, list_b) {
+	return list_a.every(item => list_b.includes(item));
 }
diff --git a/erpnext/public/js/hub/pages/Buying.vue b/erpnext/public/js/hub/pages/Buying.vue
index ddb4b11..ebf593a 100644
--- a/erpnext/public/js/hub/pages/Buying.vue
+++ b/erpnext/public/js/hub/pages/Buying.vue
@@ -13,8 +13,8 @@
 					v-route="'marketplace/buying/' + item.name"
 				>
 					<div slot="subtitle">
-						<span>{{item.recent_message.sender}}: </span>
-						<span>{{item.recent_message.content | striphtml}}</span>
+						<span>{{ get_sender(item.recent_message) }}: </span>
+						<span>{{ item.recent_message.message | striphtml }}</span>
 					</div>
 				</item-list-card>
 			</div>
@@ -47,6 +47,9 @@
 	methods: {
 		get_items_for_messages() {
 			return hub.call('get_buying_items_for_messages', {}, 'action:send_message');
+		},
+		get_sender(message) {
+			return message.sender === frappe.session.user ? __('You') : (message.sender_name || message.sender);
 		}
 	}
 }
diff --git a/erpnext/public/js/hub/pages/Item.vue b/erpnext/public/js/hub/pages/Item.vue
index 5d07bcd..272be58 100644
--- a/erpnext/public/js/hub/pages/Item.vue
+++ b/erpnext/public/js/hub/pages/Item.vue
@@ -81,7 +81,7 @@
 		is_own_item() {
 			let is_own_item = false;
 			if(this.item) {
-				if(this.item.hub_seller === hub.setting.company_email) {
+				if(this.item.hub_seller === hub.settings.hub_seller_name) {
 					is_own_item = true;
 				}
 			}
@@ -224,13 +224,11 @@
 					if (!message) return;
 
 					hub.call('send_message', {
-						from_seller: hub.settings.company_email,
-						to_seller: this.item.hub_seller,
 						hub_item: this.item.name,
 						message
 					})
 						.then(() => {
-							d.hide();
+							this.contact_seller_dialog.hide();
 							frappe.set_route('marketplace', 'buying', this.item.name);
 							erpnext.hub.trigger('action:send_message')
 						});
diff --git a/erpnext/public/js/hub/pages/Messages.vue b/erpnext/public/js/hub/pages/Messages.vue
index 1930bcb..73506e9 100644
--- a/erpnext/public/js/hub/pages/Messages.vue
+++ b/erpnext/public/js/hub/pages/Messages.vue
@@ -16,7 +16,7 @@
 						<div class="level margin-bottom" v-for="message in messages" :key="message.name">
 							<div class="level-left ellipsis" style="width: 80%;">
 								<div v-html="frappe.avatar(message.sender)" />
-								<div style="white-space: normal;" v-html="message.content" />
+								<div style="white-space: normal;" v-html="message.message" />
 							</div>
 							<div class="level-right text-muted" v-html="frappe.datetime.comment_when(message.creation, true)" />
 						</div>
@@ -64,13 +64,12 @@
 	methods: {
 		send_message(message) {
 			this.messages.push({
-				sender: hub.settings.company_email,
-				content: message,
+				sender: frappe.session.user,
+				message: message,
 				creation: Date.now(),
 				name: frappe.utils.get_random(6)
 			});
 			hub.call('send_message', {
-				from_seller: hub.settings.company_email,
 				to_seller: this.get_against_seller(),
 				hub_item: this.item_details.name,
 				message
diff --git a/erpnext/public/js/hub/pages/PublishedItems.vue b/erpnext/public/js/hub/pages/PublishedItems.vue
index 52df285..6559f79 100644
--- a/erpnext/public/js/hub/pages/PublishedItems.vue
+++ b/erpnext/public/js/hub/pages/PublishedItems.vue
@@ -5,10 +5,10 @@
 	>
 		<section-header>
 			<div>
-				<h5>{{ page_title }}</h5>
+				<h5>{{ __('Published Items') }}</h5>
 				<p v-if="items.length"
 					class="text-muted margin-bottom">
-					{{ published_items_message }}
+					{{ __('You can publish upto 200 items.') }}
 				</p>
 			</div>
 
@@ -16,7 +16,7 @@
 				class="btn btn-default btn-xs publish-items"
 				v-route="'marketplace/publish'"
 			>
-				<span>{{ publish_button_text }}</span>
+				<span>{{ __('Publish More Items') }}</span>
 			</button>
 
 		</section-header>
@@ -26,7 +26,7 @@
 			:items="items"
 			:item_id_fieldname="item_id_fieldname"
 			:on_click="go_to_item_details_page"
-			:empty_state_message="empty_state_message"
+			:empty_state_message="__('You haven\'t published any items yet.')"
 			:empty_state_action="publish_page_action"
 		>
 		</item-cards-container>
@@ -44,16 +44,9 @@
 			publish_page_action: {
 				label: __('Publish Your First Items'),
 				on_click: () => {
-					frappe.set_route(`marketplace/home`);
+					frappe.set_route(`marketplace/publish`);
 				}
-			},
-
-			// Constants
-			page_title: __('Published Items'),
-			publish_button_text: __('Publish More Items'),
-			published_items_message: __('You can publish upto 200 items.'),
-			// TODO: Add empty state action
-			empty_state_message: __('You haven\'t published any items yet.')
+			}
 		};
 	},
 	created() {
diff --git a/erpnext/public/js/hub/vue-plugins.js b/erpnext/public/js/hub/vue-plugins.js
index e18af0c..439c1f2 100644
--- a/erpnext/public/js/hub/vue-plugins.js
+++ b/erpnext/public/js/hub/vue-plugins.js
@@ -62,5 +62,5 @@
 });
 
 Vue.filter('striphtml', function (text) {
-	return strip_html(text);
+	return strip_html(text || '');
 });
\ No newline at end of file
