diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
index 1ef8270..ee5ee60 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py
@@ -863,8 +863,9 @@ It may have been removed by another user.
                     nodes.extend(module.get_nodes(**kwargs))
             else:
                 nodes.extend(module.get_nodes(**kwargs))
-
-        return make_json_response(data=nodes)
+        # Sorting nodes based on label
+        sorted_nodes = sorted(nodes, key=lambda n: n['label'].lower())
+        return make_json_response(data=sorted_nodes)
 
 
 
diff --git a/web/pgadmin/browser/templates/browser/js/node.js b/web/pgadmin/browser/templates/browser/js/node.js
index afb4648..4e0f536 100644
--- a/web/pgadmin/browser/templates/browser/js/node.js
+++ b/web/pgadmin/browser/templates/browser/js/node.js
@@ -1042,7 +1042,6 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, pgBrowser, Backform) {
         }.bind(panel),
         updateTreeItem = function(that) {
           var panel = this;
-
           // Clear the cache for this node now.
           setTimeout(function() { that.clear_cache.apply(that, item); }, 0);
 
@@ -1055,21 +1054,61 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, pgBrowser, Backform) {
             tree.addIcon(item, {icon: newNodeData.icon});
             tree.setLabel(item, {label: newNodeData.label});
             _.extend(itemData, newNodeData);
+            sort_tree(tree, item);
           } else if (view.model.get('name')) {
             tree.setLabel(item, {label: view.model.get("name")});
-            if (
-              view.model.get('data').icon && view.model.get('data').icon != ''
-            )
-              tree.addIcon(item, {icon: view.model.get('data').icon});
+            if (view.model.get('data').icon
+                  && view.model.get('data').icon != '') {
+                    tree.addIcon(item, {
+                      icon: view.model.get('data').icon
+                    });
+                  }
+            sort_tree(tree, item);
           }
-          tree.deselect(item);
+
+          tree.isSelected(item) ? tree.deselect(item) : null;
           panel.$container.removeAttr('action-mode');
           setTimeout(function() { closePanel(); }, 0);
-          setTimeout(function() { tree.select(item, {focus: true}); }, 10);
-
+          if(tree.isSelected(item)) {
+            setTimeout(function() {
+                tree.isSelected(item) ? null : tree.select(item, {focus: true});
+              }, 10);
+          }
           pgBrowser.Events.trigger(
             'pgadmin-node:updated:' + that.type, item, that
           );
+
+        },
+        /*
+            Here we will sort the tree if the node item has been
+            added or updated by user
+        */
+        sort_tree = function(tree, item) {
+          // Refresh parent & sort it
+          if(tree.hasParent(item)) {
+            // If nested search then do not over-write search item id
+            var itemBefore = tree.itemData(item),
+              parent_node = tree.parent(item),
+              d = tree.itemData(parent_node);
+            tree.close(parent_node);
+            tree.unload(parent_node);
+            tree.setInode(parent_node, (d && d.inode) || false);
+            tree.deselect(parent_node);
+            tree.select(parent_node);
+            tree.open(parent_node, {success: function() {
+              // Once its open, we will search for our element
+              // and if found then make it selected
+              tree.search(parent_node, { search: itemBefore.id,
+                            success: function(found) {
+                              setTimeout(function() { tree.select(found, {focus: true}); }, 10);
+                            },
+                            fail: function(item) {
+                              // We were not able to find item in parent, lets close parent
+                              tree.close(parent_node);
+                            }
+              });
+            }});
+          }
         },
         saveNewNode = function(that) {
           var panel = this;
@@ -1084,6 +1123,7 @@ function($, _, S, pgAdmin, Menu, Backbone, Alertify, pgBrowser, Backform) {
                 setTimeout(function() {closePanel();}, 0);
                 if (i) {
                   tree.select(i, {focus: true});
+                  sort_tree(tree, i);
                 }
                 pgBrowser.Events.trigger(
                   'pgadmin-node:created:' + that.type, i, that
diff --git a/web/pgadmin/browser/utils.py b/web/pgadmin/browser/utils.py
index 612fcec..478760e 100644
--- a/web/pgadmin/browser/utils.py
+++ b/web/pgadmin/browser/utils.py
@@ -280,8 +280,10 @@ class NodeView(with_metaclass(MethodViewType, View)):
 
         for module in self.blueprint.submodules:
             children.extend(module.get_nodes(*args, **kwargs))
+        # Sorting nodes based on label
+        sorted_children = sorted(children, key=lambda n: n['label'].lower())
 
-        return make_json_response(data=children)
+        return make_json_response(data=sorted_children)
 
 
 class PGChildNodeView(NodeView):
@@ -320,8 +322,9 @@ class PGChildNodeView(NodeView):
                     nodes.extend(module.get_nodes(**kwargs))
             else:
                 nodes.extend(module.get_nodes(**kwargs))
-
-        return make_json_response(data=nodes)
+        # Sorting nodes based on label
+        sorted_nodes = sorted(nodes, key=lambda n: n['label'].lower())
+        return make_json_response(data=sorted_nodes)
 
     def get_dependencies(self, conn, object_id, where=None):
         """
