diff --git a/erpnext/hub_node/api.py b/erpnext/hub_node/api.py
index 559e22a..86ad031 100644
--- a/erpnext/hub_node/api.py
+++ b/erpnext/hub_node/api.py
@@ -42,11 +42,19 @@
 def publish_selected_items(items_to_publish):
 	items_to_publish = json.loads(items_to_publish)
 	if not len(items_to_publish):
-		return
+		frappe.throw('No items to publish')
 
-	for item_code in items_to_publish:
+	for item in items_to_publish:
+		item_code = item.get('item_code')
 		frappe.db.set_value('Item', item_code, 'publish_in_hub', 1)
 
+		frappe.get_doc({
+			'doctype': 'Hub Tracked Item',
+			'item_code': item_code,
+			'hub_category': item.get('hub_category'),
+			# 'images': item.get('images')
+		}).insert()
+
 	try:
 		hub_settings = frappe.get_doc('Hub Settings')
 		item_sync_preprocess()
diff --git a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py b/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py
index 9445e3a..3f13520 100644
--- a/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py
+++ b/erpnext/hub_node/data_migration_mapping/item_to_hub_item/__init__.py
@@ -1,19 +1,24 @@
-import io, base64, urllib, os
+import frappe, io, base64, urllib, os
 
 def pre_process(doc):
 
-	file_path = doc.image
-	file_name = os.path.basename(file_path)
+	# file_path = doc.image
+	# file_name = os.path.basename(file_path)
 
-	if file_path.startswith('http'):
-		url = file_path
-		file_path = os.path.join('/tmp', file_name)
-		urllib.urlretrieve(url, file_path)
+	# if file_path.startswith('http'):
+	# 	url = file_path
+	# 	file_path = os.path.join('/tmp', file_name)
+	# 	urllib.urlretrieve(url, file_path)
 
-	with io.open(file_path, 'rb') as f:
-		doc.image = base64.b64encode(f.read())
+	# with io.open(file_path, 'rb') as f:
+	# 	doc.image = base64.b64encode(f.read())
 
-	doc.image_file_name = file_name
+	# doc.image_file_name = file_name
+
+	cached_details = frappe.get_doc('Hub Tracked Item', doc.item_code)
+
+	if cached_details:
+		doc.hub_category = cached_details.hub_category
 
 	return doc
 
diff --git a/erpnext/hub_node/doctype/hub_tracked_item/hub_tracked_item.json b/erpnext/hub_node/doctype/hub_tracked_item/hub_tracked_item.json
index 063c878..7a0bc2a 100644
--- a/erpnext/hub_node/doctype/hub_tracked_item/hub_tracked_item.json
+++ b/erpnext/hub_node/doctype/hub_tracked_item/hub_tracked_item.json
@@ -3,6 +3,7 @@
  "allow_guest_to_view": 0, 
  "allow_import": 0, 
  "allow_rename": 0, 
+ "autoname": "field:item_code", 
  "beta": 0, 
  "creation": "2018-03-18 09:33:50.267762", 
  "custom": 0, 
@@ -14,6 +15,7 @@
  "fields": [
   {
    "allow_bulk_edit": 0, 
+   "allow_in_quick_entry": 0, 
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
@@ -41,6 +43,70 @@
    "search_index": 0, 
    "set_only_once": 0, 
    "translatable": 0, 
+   "unique": 1
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_in_quick_entry": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "hub_category", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Hub Category", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "translatable": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_in_quick_entry": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "images", 
+   "fieldtype": "Long Text", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Images", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "translatable": 0, 
    "unique": 0
   }
  ], 
@@ -49,12 +115,12 @@
  "hide_toolbar": 0, 
  "idx": 0, 
  "image_view": 0, 
- "in_create": 1, 
+ "in_create": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2018-03-18 09:34:01.757713", 
+ "modified": "2018-08-19 19:30:01.449904", 
  "modified_by": "Administrator", 
  "module": "Hub Node", 
  "name": "Hub Tracked Item", 
@@ -63,7 +129,6 @@
  "permissions": [
   {
    "amend": 0, 
-   "apply_user_permissions": 0, 
    "cancel": 0, 
    "create": 1, 
    "delete": 1, 
@@ -89,5 +154,6 @@
  "sort_field": "modified", 
  "sort_order": "DESC", 
  "track_changes": 1, 
- "track_seen": 0
+ "track_seen": 0, 
+ "track_views": 0
 }
\ No newline at end of file
diff --git a/erpnext/public/js/hub/pages/publish.js b/erpnext/public/js/hub/pages/publish.js
index a76f946..035278b 100644
--- a/erpnext/public/js/hub/pages/publish.js
+++ b/erpnext/public/js/hub/pages/publish.js
@@ -3,13 +3,17 @@
 import { get_local_item_card_html } from '../components/item_card';
 import { make_search_bar } from '../components/search_bar';
 
+
 erpnext.hub.Publish = class Publish extends SubPage {
 	make_wrapper() {
 		super.make_wrapper();
-		this.items_to_publish = [];
+		this.items_to_publish = {};
 		this.unpublished_items = [];
 		this.fetched_items = [];
 
+		this.cache = erpnext.hub.cache.items_to_publish;
+		this.cache = [];
+
 		frappe.realtime.on("items-sync", (data) => {
 			this.$wrapper.find('.progress-bar').css('width', data.progress_percent+'%');
 
@@ -58,7 +62,7 @@
 	}
 
 	get_publishing_header() {
-		const title_html = `<b>${__('Select Products to Publish')}</b>`;
+		const title_html = `<h5>${__('Select Products to Publish')}</h5>`;
 
 		const subtitle_html = `<p class="text-muted">
 			${__(`Only products with an image, description and category can be published.
@@ -71,6 +75,9 @@
 		</button>`;
 
 		return $(`
+			<div class="subpage-title flex"><h5>${__('Selected Products')}</h5></div>
+			<div class="row hub-items-container selected-items"></div>
+
 			<div class='subpage-title flex'>
 				<div>
 					${title_html}
@@ -87,27 +94,97 @@
 				.then(this.refresh.bind(this))
 		});
 
+		this.selected_items_container = this.$wrapper.find('.selected-items');
+
+		this.$current_selected_card = null;
+
+		this.make_publishing_dialog();
+
 		this.$wrapper.on('click', '.hub-card', (e) => {
 			const $target = $(e.currentTarget);
-			$target.toggleClass('active');
+			const item_code = $target.attr('data-id');
+			this.show_publishing_dialog_for_item(item_code);
 
-			// Get total items
-			const total_items = this.$wrapper.find('.hub-card.active').length;
+			this.$current_selected_card = $target.parent();
 
-			let button_label;
-			if (total_items > 0) {
-				const more_than_one = total_items > 1;
-				button_label = __('Publish {0} item{1}', [total_items, more_than_one ? 's' : '']);
-			} else {
-				button_label = __('Publish');
-			}
+			this.update_selected_items_count()
 
-			this.$wrapper.find('.publish-items')
-				.text(button_label)
-				.prop('disabled', total_items === 0);
 		});
 	}
 
+	make_publishing_dialog() {
+		this.publishing_dialog = new frappe.ui.Dialog({
+			title: __('Edit Publishing Details'),
+			fields: [
+				{
+					"label": "Item Code",
+					"fieldname": "item_code",
+					"fieldtype": "Data",
+					"read_only": 1
+				},
+				{
+					"label": "Hub Category",
+					"fieldname": "hub_category",
+					"fieldtype": "Autocomplete",
+					"options": ["Agriculture", "Books", "Chemicals", "Clothing",
+						"Electrical", "Electronics", "Energy", "Fashion", "Food and Beverage",
+						"Health", "Home", "Industrial", "Machinery", "Packaging and Printing",
+						"Sports", "Transportation"
+					],
+					"reqd": 1
+				}
+			],
+			primary_action_label: __('Set Details'),
+			primary_action: () => {
+				const values = this.publishing_dialog.get_values(true);
+				this.items_to_publish[values.item_code] = values;
+
+				this.$current_selected_card.appendTo(this.selected_items_container);
+				this.$current_selected_card.find('.hub-card').toggleClass('active');
+
+				this.publishing_dialog.hide();
+			},
+			secondary_action: () => {
+				const values = this.publishing_dialog.get_values(true);
+				this.items_to_publish[values.item_code] = values;
+			}
+		});
+	}
+
+	show_publishing_dialog_for_item(item_code) {
+		let item_data = this.items_to_publish[item_code];
+
+		if(!item_data) { item_data = { item_code }; }
+
+		this.publishing_dialog.clear();
+		this.publishing_dialog.set_values(item_data);
+		this.publishing_dialog.show();
+	}
+
+	update_selected_items_count() {
+		const total_items = this.$wrapper.find('.hub-card.active').length;
+
+		let button_label;
+		if (total_items > 0) {
+			const more_than_one = total_items > 1;
+			button_label = __('Publish {0} item{1}', [total_items, more_than_one ? 's' : '']);
+		} else {
+			button_label = __('Publish');
+		}
+
+		this.$wrapper.find('.publish-items')
+			.text(button_label)
+			.prop('disabled', total_items === 0);
+	}
+
+	add_item_to_publish() {
+		//
+	}
+
+	remove_item_from_publish() {
+		//
+	}
+
 	show_message(message) {
 		const $message = $(`<div class="subpage-message">
 			<p class="text-muted flex">
@@ -211,19 +288,22 @@
 			item_codes_to_publish.push($(this).attr("data-id"));
 		});
 
-		this.unpublished_items = this.fetched_items.filter(item => {
-			return !item_codes_to_publish.includes(item.item_code);
-		});
+		// this.unpublished_items = this.fetched_items.filter(item => {
+		// 	return !item_codes_to_publish.includes(item.item_code);
+		// });
 
-		const items_to_publish = this.fetched_items.filter(item => {
-			return item_codes_to_publish.includes(item.item_code);
-		});
-		this.items_to_publish = items_to_publish;
+		// const items_to_publish = this.fetched_items.filter(item => {
+		// 	return item_codes_to_publish.includes(item.item_code);
+		// });
+
+		// this.items_to_publish = items_to_publish;
+
+		const items_data_to_publish = item_codes_to_publish.map(item_code => this.items_to_publish[item_code])
 
 		return frappe.call(
 			'erpnext.hub_node.api.publish_selected_items',
 			{
-				items_to_publish: item_codes_to_publish
+				items_to_publish: items_data_to_publish
 			}
 		)
 	}
