diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py
index 2630d1e..ab4bea4 100644
--- a/web/pgadmin/browser/server_groups/servers/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/__init__.py
@@ -1310,7 +1310,8 @@ class ServerNode(PGChildNodeView):
 
         # Connect the Server
         manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid)
-        manager.update(server)
+        if not manager.connection().connected():
+            manager.update(server)
         conn = manager.connection()
 
         # Get enc key
diff --git a/web/pgadmin/static/js/sqleditor/new_connection_dialog.js b/web/pgadmin/static/js/sqleditor/new_connection_dialog.js
index 10850e1..b19a50a 100644
--- a/web/pgadmin/static/js/sqleditor/new_connection_dialog.js
+++ b/web/pgadmin/static/js/sqleditor/new_connection_dialog.js
@@ -243,7 +243,6 @@ let NewConnectionDialog = {
                   'title': _.escape(tab_title),
                   'user': newConnCollectionModel['user'],
                   'role': newConnCollectionModel['role'],
-                  'password': response.password,
                   'server_name': _.escape(response.server_name),
                   'database_name': _.escape(selected_database_name),
                   'is_selected': false,
@@ -260,13 +259,12 @@ let NewConnectionDialog = {
       setTimeout(function(){
         Alertify.newConnectionDialog('Connect to server.').resizeTo(pgAdmin.Browser.stdW.md,pgAdmin.Browser.stdH.md);
       }, 500);
-    }).fail(function(error) {
+    }).fail(function() {
       Alertify.alert().setting({
         'title': gettext('Connection lost'),
         'label':gettext('Ok'),
         'message': gettext('Connection to the server has been lost.'),
         'onok': function(){
-          alert(error);
           //Close the window after connection is lost
           window.close();
         },
diff --git a/web/pgadmin/static/js/sqleditor/new_connection_dialog_model.js b/web/pgadmin/static/js/sqleditor/new_connection_dialog_model.js
index 09b2979..1dd32b7 100644
--- a/web/pgadmin/static/js/sqleditor/new_connection_dialog_model.js
+++ b/web/pgadmin/static/js/sqleditor/new_connection_dialog_model.js
@@ -78,7 +78,6 @@ export default function newConnectionDialogModel(response, sgid, sid) {
       server: parseInt(sid),
       database: null,
       user: null,
-      password: null,
       server_name: server_name,
       database_name: database_name,
     },
@@ -92,7 +91,63 @@ export default function newConnectionDialogModel(response, sgid, sid) {
       select2: {
         allowClear: false,
       },
+      transform: function(data) {
+        let group_template_options = [];
+        for (let key in data) {
+          if (data.hasOwnProperty(key)) {
+            group_template_options.push({'group': key, 'optval': data[key]});
+          }
+        }
+        return group_template_options;
+      },
       control: Backform.Select2Control.extend({
+        template: _.template([
+          '<% if(label == false) {} else {%>',
+          '  <label class="<%=Backform.controlLabelClassName%>"><%=label%></label>',
+          '<% }%>',
+          '<div class="<%=controlsClassName%>">',
+          ' <select class="<%=Backform.controlClassName%> <%=extraClasses.join(\' \')%>"',
+          '  name="<%=name%>" value="<%-value%>" <%=disabled ? "disabled" : ""%>',
+          '  <%=required ? "required" : ""%><%= select2.multiple ? " multiple>" : ">" %>',
+          '  <%=select2.first_empty ? " <option></option>" : ""%>',
+          '  <% for (var i=0; i < options.length; i++) {%>',
+          '   <% if (options[i].group) { %>',
+          '     <% var group = options[i].group; %>',
+          '     <% if (options[i].optval) { %> <% var option_length = options[i].optval.length; %>',
+          '      <optgroup label="<%=group%>">',
+          '      <% for (var subindex=0; subindex < option_length; subindex++) {%>',
+          '        <% var option = options[i].optval[subindex]; %>',
+          '        <option ',
+          '        <% if (option.image) { %> data-image=<%=option.image%> <%}%>',
+          '        <% if (option.connected) { %> data-connected=connected <%}%>',
+          '        value=<%- formatter.fromRaw(option.value) %>',
+          '        <% if (option.selected) {%>selected="selected"<%} else {%>',
+          '        <% if (!select2.multiple && option.value === rawValue) {%>selected="selected"<%}%>',
+          '        <% if (select2.multiple && rawValue && rawValue.indexOf(option.value) != -1){%>selected="selected" data-index="rawValue.indexOf(option.value)"<%}%>',
+          '        <%}%>',
+          '        <%= disabled ? "disabled" : ""%>><%-option.label%></option>',
+          '      <%}%>',
+          '      </optgroup>',
+          '     <%}%>',
+          '   <%} else {%>',
+          '     <% var option = options[i]; %>',
+          '     <option ',
+          '     <% if (option.image) { %> data-image=<%=option.image%> <%}%>',
+          '     <% if (option.connected) { %> data-connected=connected <%}%>',
+          '     value=<%- formatter.fromRaw(option.value) %>',
+          '     <% if (option.selected) {%>selected="selected"<%} else {%>',
+          '     <% if (!select2.multiple && option.value === rawValue) {%>selected="selected"<%}%>',
+          '     <% if (select2.multiple && rawValue && rawValue.indexOf(option.value) != -1){%>selected="selected" data-index="rawValue.indexOf(option.value)"<%}%>',
+          '     <%}%>',
+          '     <%= disabled ? "disabled" : ""%>><%-option.label%></option>',
+          '   <%}%>',
+          '  <%}%>',
+          ' </select>',
+          ' <% if (helpMessage && helpMessage.length) { %>',
+          ' <span class="<%=Backform.helpMessageClassName%>"><%=helpMessage%></span>',
+          ' <% } %>',
+          '</div>',
+        ].join('\n')),
         connect: function(self) {
           let local_self = self;
 
@@ -147,11 +202,14 @@ export default function newConnectionDialogModel(response, sgid, sid) {
                         local_self.model.attributes.user = null;
                         local_self.model.attributes.role = null;
                         Backform.Select2Control.prototype.onChange.apply(local_self, arguments);
-                        response.server_list.forEach(function(obj){
-                          if(obj.id==self.model.changed.server) {
-                            response.server_name = obj.name;
-                          }
+                        Object.keys(response.server_list).forEach(key => {
+                          response.server_list[key].forEach(option => {
+                            if (option.value == parseInt(sid)) {
+                              response.server_name = option.label;
+                            }
+                          });
                         });
+
                         loadingDiv.addClass('d-none');
                         alertify.connectServer().destroy();
                       })
@@ -160,8 +218,6 @@ export default function newConnectionDialogModel(response, sgid, sid) {
                         alertify.connectServer().destroy();
                         alertify.connectServer('Connect to server', xhr.responseJSON.result, local_self.getValueFromDOM());
                       });
-                  } else {
-                    response.password = $('#password').val();
                   }
                 } else {
                   local_self.model.attributes.database = null;
@@ -178,6 +234,19 @@ export default function newConnectionDialogModel(response, sgid, sid) {
         render: function() {
           let self = this;
           self.connect(self);
+          Object.keys(response.server_list).forEach(key => {
+            response.server_list[key].forEach(option => {
+              if (option.value == parseInt(sid)) {
+                response.server_name = option.label;
+              }
+            });
+          });
+          var transform = self.field.get('transform') || self.defaults.transform;
+          if (transform && _.isFunction(transform)) {
+            self.field.set('options', transform.bind(self, response.server_list));
+          } else {
+            self.field.set('options', response.server_list);
+          }
           return Backform.Select2Control.prototype.render.apply(self, arguments);
         },
         onChange: function() {
@@ -200,10 +269,12 @@ export default function newConnectionDialogModel(response, sgid, sid) {
             },
           }).done(function () {
             Backform.Select2Control.prototype.onChange.apply(self, arguments);
-            response.server_list.forEach(function(obj){
-              if(obj.id==self.model.changed.server) {
-                response.server_name = obj.name;
-              }
+            Object.keys(response.server_list).forEach(key => {
+              response.server_list[key].forEach(option => {
+                if (option.value == parseInt(sid)) {
+                  response.server_name = option.label;
+                }
+              });
             });
             loadingDiv.addClass('d-none');
           }).fail(function(xhr){
@@ -213,17 +284,6 @@ export default function newConnectionDialogModel(response, sgid, sid) {
 
         },
       }),
-      options: function() {
-        return _.map(response.server_list, (obj) => {
-          if (obj.id == parseInt(sid))
-            response.server_name = obj.name;
-
-          return {
-            value: obj.id,
-            label: obj.name,
-          };
-        });
-      },
     },
     {
       id: 'database',
@@ -302,27 +362,6 @@ export default function newConnectionDialogModel(response, sgid, sid) {
       url: 'sqleditor.get_new_connection_role',
       disabled: false,
     },
-    /*{
-      id: 'password',
-      name: 'password',
-      label: gettext('Password'tools/sqleditor/__init__.py),
-      type: 'password',
-      editable: true,
-      disabled: true,
-      deps: ['user'],
-      control: Backform.InputControl.extend({
-        render: function() {
-          let self = this;
-          self.model.attributes.password = null;
-          Backform.InputControl.prototype.render.apply(self, arguments);
-          return self;
-        },
-        onChange: function() {
-          let self = this;
-          Backform.InputControl.prototype.onChange.apply(self, arguments);
-        },
-      }),
-    },*/
     ],
     validate: function() {
       let msg = null;
@@ -336,11 +375,6 @@ export default function newConnectionDialogModel(response, sgid, sid) {
         this.errorModel.set('user', msg);
         return msg;
       }
-      /*else if((this.attributes.password == '' || _.isUndefined(this.get('password')) || _.isNull(this.get('password')))) {
-        msg = gettext('Please enter password');
-        this.errorModel.set('password', msg);
-        return msg;
-      }*/
       return null;
     },
   });
diff --git a/web/pgadmin/tools/debugger/__init__.py b/web/pgadmin/tools/debugger/__init__.py
index 1949709..422a8ae 100644
--- a/web/pgadmin/tools/debugger/__init__.py
+++ b/web/pgadmin/tools/debugger/__init__.py
@@ -98,6 +98,18 @@ class DebuggerModule(PgAdminModule):
             )
         )
 
+        self.tab_title = self.preference.register(
+            'display', 'debugger_tab_title_placeholder',
+            gettext("Debugger tab title placeholder"),
+            'text', '%FUNCTION%/%SCHEMA%/%DATABASE%',
+            category_label=PREF_LABEL_DISPLAY,
+            help_str=gettext(
+                'Supported placeholders: FUNCTION, SCHEMA and DATABASE. '
+                'You can also provide any string with or '
+                'without placeholders'
+            )
+        )
+
         self.preference.register(
             'keyboard_shortcuts', 'btn_start',
             gettext('Accesskey (Continue/Start)'), 'keyboardshortcut',
diff --git a/web/pgadmin/tools/sqleditor/__init__.py b/web/pgadmin/tools/sqleditor/__init__.py
index 9da8842..f9fb26f 100644
--- a/web/pgadmin/tools/sqleditor/__init__.py
+++ b/web/pgadmin/tools/sqleditor/__init__.py
@@ -46,7 +46,7 @@ from pgadmin.tools.sqleditor.utils.macros import get_macros,\
     get_user_macros, set_macros
 from pgadmin.utils.constants import MIMETYPE_APP_JS, \
     SERVER_CONNECTION_CLOSED, ERROR_MSG_TRANS_ID_NOT_FOUND, ERROR_FETCHING_DATA
-from pgadmin.model import Server
+from pgadmin.model import Server, ServerGroup
 from pgadmin.tools.schema_diff.node_registry import SchemaDiffRegistry
 
 MODULE_NAME = 'sqleditor'
@@ -1489,10 +1489,14 @@ def get_new_connection_data(sgid, sid=None):
     :extract_sql_from_network_parameters,
     """
     try:
-        # if sid and not did:
+        server_groups = ServerGroup.query.all()
+        server_group_data = {server_group.name: [] for server_group in
+                             server_groups}
         servers = Server.query.all()
-        server_list = [
-            {'name': server.serialize['name'], "id": server.serialize['id']}
+
+        [server_group_data[server.servers.name].append(
+            {'label': server.serialize['name'],
+             "value": server.serialize['id']})
             for server in servers]
 
         msg = "Success"
@@ -1501,7 +1505,7 @@ def get_new_connection_data(sgid, sid=None):
                 'status': True,
                 'msg': msg,
                 'result': {
-                    'server_list': server_list
+                    'server_list': server_group_data
                 }
             }
         )
diff --git a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
index d3a2d25..905d782 100644
--- a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
+++ b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js
@@ -173,8 +173,13 @@ define('tools.querytool', [
         var dropdownElement = document.getElementById('connections-list');
         dropdownElement.innerHTML = '';
         data_list.forEach((option, index) => {
-          $('#connections-list').append('<li class="connection-list-item" data-index='+ index +'><a class="dropdown-item" href="#" tabindex="0">'+ option.title +'</a></li>');
-
+          var opt = '';
+          if ('is_selected' in option && option['is_selected']) {
+            opt = '<li class="connection-list-item selected-connection" data-index='+ index +'><a class="dropdown-item" href="#" tabindex="0">'+ option.title +'</a></li>';
+          } else {
+            opt = '<li class="connection-list-item" data-index='+ index +'><a class="dropdown-item" href="#" tabindex="0">'+ option.title +'</a></li>';
+          }
+          $('#connections-list').append(opt);
         });
         var self = this;
         $('.connection-list-item').click(function() {
@@ -2131,7 +2136,6 @@ define('tools.querytool', [
     on_change_connection: function(connection_details, ref) {
       if(!connection_details['is_selected']) {
         var self = this;
-        self.set_selected_option(connection_details);
         var loadingDiv = null;
         var msgDiv = null;
         if(ref){
@@ -2145,66 +2149,78 @@ define('tools.querytool', [
           msgDiv = loadingDiv.find('.sql-editor-busy-text');
         }
 
-        $.ajax({
-          url: url_for('datagrid.update_query_tool_connection', {
-            'trans_id': self.transId,
-            'sgid': connection_details['server_group'],
-            'sid': connection_details['server'],
-            'did': connection_details['database'],
-          }),
-          method: 'POST',
-          contentType: 'application/json',
-          data: JSON.stringify(connection_details),
-        })
-          .done(function(res) {
-            if(res.success) {
-              self.transId = res.data.tran_id;
-              self.handler.transId = res.data.tran_id;
-              self.handler.url_params = {
-                'did': connection_details['database'],
-                'is_query_tool': self.handler.url_params.is_query_tool,
-                'server_type': self.handler.url_params.server_type,
+        alertify.confirm(gettext('Change connection.'),
+          gettext('Change connection will lose all non committed changes for current connection, do you want to continue?'),
+          function() {
+            self.set_selected_option(connection_details);
+            $.ajax({
+              url: url_for('datagrid.update_query_tool_connection', {
+                'trans_id': self.transId,
                 'sgid': connection_details['server_group'],
                 'sid': connection_details['server'],
-                'title': connection_details['title'],
-              };
-              self.set_editor_title(_.unescape(self.handler.url_params.title));
-              self.handler.setTitle(_.unescape(self.handler.url_params.title));
-              let success_msg = connection_details['server_name'] + '/' + connection_details['database_name'] + '- Database connected';
-              alertify.success(success_msg);
-              if(ref){
-                let connection_data = {
-                  'server_group': self.handler.url_params.sgid,
-                  'server': connection_details['server'],
-                  'database': connection_details['database'],
-                  'user': connection_details['user'],
-                  'title': connection_details['title'],
-                  'role': connection_details['role'],
-                  'password': connection_details['password'],
-                  'is_allow_new_connection': true,
-                  'database_name': connection_details['database_name'],
-                  'server_name': connection_details['server_name'],
-                  'is_selected': true,
-                };
-                self.connection_list.unshift(connection_data);
-                self.render_connection(self.connection_list);
-                loadingDiv.addClass('d-none');
-                alertify.newConnectionDialog().destroy();
-                ref.close();
-              } else {
-                loadingDiv.addClass('d-none');
-              }
-            }
-            return true;
-          })
-          .fail(function(xhr) {
+                'did': connection_details['database'],
+              }),
+              method: 'POST',
+              contentType: 'application/json',
+              data: JSON.stringify(connection_details),
+            })
+              .done(function(res) {
+                if(res.success) {
+                  self.transId = res.data.tran_id;
+                  self.handler.transId = res.data.tran_id;
+                  self.handler.url_params = {
+                    'did': connection_details['database'],
+                    'is_query_tool': self.handler.url_params.is_query_tool,
+                    'server_type': self.handler.url_params.server_type,
+                    'sgid': connection_details['server_group'],
+                    'sid': connection_details['server'],
+                    'title': connection_details['title'],
+                  };
+                  self.set_editor_title(_.unescape(self.handler.url_params.title));
+                  self.handler.setTitle(_.unescape(self.handler.url_params.title));
+                  let success_msg = connection_details['server_name'] + '/' + connection_details['database_name'] + '- Database connected';
+                  alertify.success(success_msg);
+                  if(ref){
+                    let connection_data = {
+                      'server_group': self.handler.url_params.sgid,
+                      'server': connection_details['server'],
+                      'database': connection_details['database'],
+                      'user': connection_details['user'],
+                      'title': connection_details['title'],
+                      'role': connection_details['role'],
+                      'is_allow_new_connection': true,
+                      'database_name': connection_details['database_name'],
+                      'server_name': connection_details['server_name'],
+                      'is_selected': true,
+                    };
+                    self.connection_list.unshift(connection_data);
+                    self.render_connection(self.connection_list);
+                    loadingDiv.addClass('d-none');
+                    alertify.newConnectionDialog().destroy();
+                    ref.close();
+                  } else {
+                    loadingDiv.addClass('d-none');
+                  }
+                }
+                return true;
+              })
+              .fail(function(xhr) {
+                if(xhr.status == 428) {
+                  alertify.connectServer('Connect to server', xhr.responseJSON.result, connection_details['server'], false);
+                } else {
+                  alertify.error(xhr.responseJSON['errormsg']);
+                }
+              });
+          },
+          function() {
             loadingDiv.addClass('d-none');
-            if(xhr.status == 428) {
-              alertify.connectServer('Connect to server', xhr.responseJSON.result, connection_details['server'], false);
-            } else {
-              alertify.error(xhr.responseJSON['errormsg']);
-            }
-          });
+            alertify.newConnectionDialog().destroy();
+            return true;
+          }
+        ).set('labels', {
+          ok: gettext('Yes'),
+          cancel: gettext('No'),
+        });
       }
     },
   });
diff --git a/web/pgadmin/tools/sqleditor/static/scss/_sqleditor.scss b/web/pgadmin/tools/sqleditor/static/scss/_sqleditor.scss
index 7fc576a..9d5ba4d 100644
--- a/web/pgadmin/tools/sqleditor/static/scss/_sqleditor.scss
+++ b/web/pgadmin/tools/sqleditor/static/scss/_sqleditor.scss
@@ -371,6 +371,9 @@ div.strikeout:after {
   height: 100%;
 }
 
+.selected-connection {
+  background-color: $color-primary-light;
+}
 
 /* Setting it to hardcoded white as the SVG generated is having white bg
  * Need to check what can be done.
diff --git a/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py b/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py
index 76523b1..642a1eb 100644
--- a/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py
+++ b/web/pgadmin/tools/sqleditor/utils/query_tool_preferences.py
@@ -326,6 +326,29 @@ def register_query_tool_preferences(self):
         )
     )
 
+    self.qt_tab_title = self.preference.register(
+        'display', 'qt_tab_title_placeholder',
+        gettext("Query tool tab title placeholder"),
+        'text', '%DATABASE%/%USERNAME%@%SERVER%',
+        category_label=PREF_LABEL_DISPLAY,
+        help_str=gettext(
+            'Supported placeholders: DATABASE, USERNAME and SERVER. '
+            'You can also provide any string with or without placeholders.'
+        )
+    )
+
+    self.ve_edt_tab_title = self.preference.register(
+        'display', 'vw_edt_tab_title_placeholder',
+        gettext("View/Edit tab title placeholder"),
+        'text', '%SCHEMA%.%TABLE%/%DATABASE%/%USERNAME%@%SERVER%',
+        category_label=PREF_LABEL_DISPLAY,
+        help_str=gettext(
+            'Supported placeholders: SCHEMA, TABLE, DATABASE, USERNAME and '
+            'SERVER. You can also provide any string with or '
+            'without placeholders.'
+        )
+    )
+
     self.connection_status = self.preference.register(
         'display', 'connection_status_fetch_time',
         gettext("Connection status refresh rate"), 'integer', 2,
