diff --git a/erpnext/public/js/hierarchy_chart/hierarchy_chart_mobile.js b/erpnext/public/js/hierarchy_chart/hierarchy_chart_mobile.js
index d48b4c8..58530ea 100644
--- a/erpnext/public/js/hierarchy_chart/hierarchy_chart_mobile.js
+++ b/erpnext/public/js/hierarchy_chart/hierarchy_chart_mobile.js
@@ -88,7 +88,7 @@
 					me.$sibling_group = $(`<div class="sibling-group mt-4 mb-4"></div>`);
 					me.page.main.append(me.$sibling_group);
 
-					me.setup_hierarchy()
+					me.setup_hierarchy();
 					me.render_root_nodes();
 				}
 			}
@@ -194,9 +194,9 @@
 
 	collapse_node() {
 		let node = this.selected_node;
-		if (node.expandable) {
+		if (node.expandable && node.$children) {
 			node.$children.hide();
-			node.expanded = false;
+			node.expanded = 0;
 
 			// add a collapsed level to show the collapsed parent
 			// and a button beside it to move to that level
@@ -212,10 +212,7 @@
 			frappe.run_serially([
 				() => this.get_child_nodes(node.parent_id, node.id),
 				(child_nodes) => this.get_node_group(child_nodes, node.parent_id),
-				(node_group) => {
-					node_parent.find('.collapsed-level')
-						.append(node_group);
-				},
+				(node_group) => node_parent.find('.collapsed-level').append(node_group),
 				() => this.setup_node_group_action()
 			]);
 		}
@@ -268,7 +265,7 @@
 		}
 
 		node.$children.show();
-		node.expanded = true;
+		node.expanded = 1;
 	}
 
 	add_node(node, data) {
@@ -380,13 +377,16 @@
 
 		node_element.click(function() {
 			if (node.is_root) {
+				var el = $(this).detach();
 				me.$hierarchy.empty();
-				me.add_node_to_hierarchy(node, true);
+				$(`#connectors`).empty();
+				me.add_node_to_hierarchy(el, node);
 			} else if (node_element.is(':visible') && node_element.hasClass('active-path')) {
 				me.remove_levels_after_node(node);
 				me.remove_orphaned_connectors();
 			} else {
-				me.add_node_to_hierarchy(node, true);
+				var el = $(this).detach();
+				me.add_node_to_hierarchy(el, node);
 				me.collapse_node();
 			}
 
@@ -417,15 +417,15 @@
 		});
 	}
 
-	add_node_to_hierarchy(node) {
-		this.$hierarchy.append(`
-			<li class="level">
-				<div class="node-level d-flex flex-row">
-				</div>
-			</li>
-		`);
+	add_node_to_hierarchy(node_element, node) {
+		this.$hierarchy.append(`<li class="level"></li>`);
+		node_element.removeClass('active-child active-path');
+		this.$hierarchy.find('.level:last').append(node_element);
 
-		node.$link.appendTo(this.$hierarchy.find('.level:last'));
+		let node_object = this.nodes[node.id];
+		node_object.expanded = 0;
+		node_object.$children = undefined;
+		this.nodes[node.id] = node_object;
 	}
 
 	get_node_group(nodes, parent, collapsed=true) {
@@ -478,9 +478,11 @@
 	expand_sibling_group_node(parent) {
 		let node_object = this.nodes[parent];
 		let node = node_object.$link;
+
 		node.removeClass('active-child active-path');
 		node_object.expanded = 0;
 		node_object.$children = undefined;
+		this.nodes[node.id] = node_object;
 
 		// show parent's siblings and expand parent node
 		frappe.run_serially([
@@ -491,17 +493,21 @@
 					this.$sibling_group.empty().append(node_group);
 			},
 			() => this.setup_node_group_action(),
-			() => {
-				this.$hierarchy.empty().append(`
-					<li class="level"></li>
-				`);
-				this.$hierarchy.find('.level').append(node);
-				$(`#connectors`).empty();
-				this.expand_node(node_object);
-			}
+			() => this.reattach_and_expand_node(node, node_object)
 		]);
 	}
 
+	reattach_and_expand_node(node, node_object) {
+		var el = node.detach();
+
+		this.$hierarchy.empty().append(`
+			<li class="level"></li>
+		`);
+		this.$hierarchy.find('.level').append(el);
+		$(`#connectors`).empty();
+		this.expand_node(node_object);
+	}
+
 	remove_levels_after_node(node) {
 		let level = $(`#${node.id}`).parent().parent().index();
 
