diff --git a/web/pgadmin/static/bundle/codemirror.js b/web/pgadmin/static/bundle/codemirror.js
index 10b3e3b7..9178a763 100644
--- a/web/pgadmin/static/bundle/codemirror.js
+++ b/web/pgadmin/static/bundle/codemirror.js
@@ -14,6 +14,7 @@ import 'codemirror/addon/search/jump-to-line';
 import 'codemirror/addon/edit/matchbrackets';
 import 'codemirror/addon/edit/closebrackets';
 import 'codemirror/addon/comment/comment';
-import '../js/codemirror/addon/fold/pgadmin-sqlfoldcode';
+import 'sources/codemirror/addon/fold/pgadmin-sqlfoldcode';
+import 'sources/codemirror/extension/centre_on_line';
 
-export default CodeMirror;
\ No newline at end of file
+export default CodeMirror;
diff --git a/web/pgadmin/static/css/bootstrap.overrides.css b/web/pgadmin/static/css/bootstrap.overrides.css
index 2ab44f0e..b38e65e0 100644
--- a/web/pgadmin/static/css/bootstrap.overrides.css
+++ b/web/pgadmin/static/css/bootstrap.overrides.css
@@ -49,7 +49,14 @@ body {
     width: 100% !important;
 }
 
-.pg-panel-content { position:absolute;top:0px;left:0px;right:0px;bottom:0px; }
+.pg-panel-content {
+  position:absolute;
+  top:0px;
+  left:0px;
+  right:0px;
+  bottom:0px;
+  height: 100%!important;
+}
 
 /* iFrames should have no border */
 iframe {
diff --git a/web/pgadmin/static/js/codemirror/extension/centre_on_line.js b/web/pgadmin/static/js/codemirror/extension/centre_on_line.js
new file mode 100644
index 00000000..427d0dd1
--- /dev/null
+++ b/web/pgadmin/static/js/codemirror/extension/centre_on_line.js
@@ -0,0 +1,7 @@
+import CodeMirror from 'codemirror/lib/codemirror';
+
+CodeMirror.defineExtension('centerOnLine', function(line) {
+  var ht = this.getScrollInfo().clientHeight;
+  var coords = this.charCoords({line: line, ch: 0}, 'local');
+  this.scrollTo(null, (coords.top + coords.bottom - ht) / 2);
+});
diff --git a/web/pgadmin/tools/debugger/static/js/debugger_ui.js b/web/pgadmin/tools/debugger/static/js/debugger_ui.js
index 6f6fad5b..edba6ace 100644
--- a/web/pgadmin/tools/debugger/static/js/debugger_ui.js
+++ b/web/pgadmin/tools/debugger/static/js/debugger_ui.js
@@ -128,7 +128,7 @@ define([
             this.set('title', title);
             this.data = data;
             this.restart_debug = restart_debug;
-
+            this.preferences = window.top.pgAdmin.Browser.get_preferences_for_module('debugger');
             // Variables to store the data sent from sqlite database
             var func_args_data = this.func_args_data = [];
 
@@ -710,7 +710,7 @@ define([
                     }
                   );
 
-                  if (res.data.newBrowserTab) {
+                  if (self.preferences.debugger_new_browser_tab) {
                     window.open(url, '_blank');
                   } else {
                     pgBrowser.Events.once(
diff --git a/web/pgadmin/tools/debugger/static/js/direct.js b/web/pgadmin/tools/debugger/static/js/direct.js
index 35a6970e..fdd1b413 100644
--- a/web/pgadmin/tools/debugger/static/js/direct.js
+++ b/web/pgadmin/tools/debugger/static/js/direct.js
@@ -128,6 +128,33 @@ define([
         return result;
       },
 
+      setActiveLine: function(lineNo) {
+        let editor = pgTools.DirectDebug.editor;
+
+        /* If lineNo sent, remove active line */
+        if(lineNo && self.active_line_no) {
+          editor.removeLineClass(
+            self.active_line_no, 'wrap', 'CodeMirror-activeline-background'
+          );
+        }
+
+        /* If lineNo not sent, set it to active line */
+        if(!lineNo && self.active_line_no) {
+          lineNo = self.active_line_no;
+        }
+
+        /* Set new active line only if positive */
+        if(lineNo > 0) {
+          self.active_line_no = lineNo;
+          editor.addLineClass(
+            self.active_line_no, 'wrap', 'CodeMirror-activeline-background'
+          );
+
+          /* centerOnLine is codemirror extension in bundle/codemirror.js */
+          editor.centerOnLine(self.active_line_no);
+        }
+      },
+
       // Function to start the executer and execute the user requested option for debugging
       start_execution: function(trans_id, port_num) {
         var self = this;
@@ -181,11 +208,8 @@ define([
               res.data.result[0].linenumber != null
             ) {
               pgTools.DirectDebug.editor.setValue(res.data.result[0].src);
-              self.active_line_no = (res.data.result[0].linenumber - 2);
-              pgTools.DirectDebug.editor.addLineClass(
-                (res.data.result[0].linenumber - 2), 'wrap',
-                'CodeMirror-activeline-background'
-              );
+
+              self.setActiveLine(res.data.result[0].linenumber - 2);
             }
             // Call function to create and update local variables ....
             self.GetStackInformation(trans_id);
@@ -336,26 +360,18 @@ define([
                   if (res.data.result[0].src != undefined || res.data.result[0].src != null) {
                     pgTools.DirectDebug.polling_timeout_idle = false;
                     pgTools.DirectDebug.docker.finishLoading(50);
-                    pgTools.DirectDebug.editor.setValue(res.data.result[0].src);
+                    if (res.data.result[0].src != pgTools.DirectDebug.editor.getValue()) {
+                      pgTools.DirectDebug.editor.setValue(res.data.result[0].src);
+                      self.UpdateBreakpoint(trans_id);
+                    }
                     self.UpdateBreakpoint(trans_id);
-                    pgTools.DirectDebug.editor.removeLineClass(
-                      self.active_line_no, 'wrap', 'CodeMirror-activeline-background'
-                    );
-                    pgTools.DirectDebug.editor.addLineClass(
-                      (res.data.result[0].linenumber - 2),
-                      'wrap', 'CodeMirror-activeline-background'
-                    );
-                    self.active_line_no = (res.data.result[0].linenumber - 2);
+                    self.setActiveLine(res.data.result[0].linenumber - 2);
                     // Update the stack, local variables and parameters information
                     self.GetStackInformation(trans_id);
 
                   } else if (!pgTools.DirectDebug.debug_type && !pgTools.DirectDebug.first_time_indirect_debug) {
                     pgTools.DirectDebug.docker.finishLoading(50);
-                    if (self.active_line_no != undefined) {
-                      pgTools.DirectDebug.editor.removeLineClass(
-                        self.active_line_no, 'wrap', 'CodeMirror-activeline-background'
-                      );
-                    }
+                    self.setActiveLine(-1);
                     self.clear_all_breakpoint(trans_id);
                     self.execute_query(trans_id);
                     pgTools.DirectDebug.first_time_indirect_debug = true;
@@ -369,15 +385,7 @@ define([
                       self.UpdateBreakpoint(trans_id);
                     }
 
-                    pgTools.DirectDebug.editor.removeLineClass(
-                      self.active_line_no, 'wrap', 'CodeMirror-activeline-background'
-                    );
-                    pgTools.DirectDebug.editor.addLineClass(
-                      (res.data.result[0].linenumber - 2),
-                      'wrap', 'CodeMirror-activeline-background'
-                    );
-                    self.active_line_no = (res.data.result[0].linenumber - 2);
-
+                    self.setActiveLine(res.data.result[0].linenumber - 2);
                     // Update the stack, local variables and parameters information
                     self.GetStackInformation(trans_id);
                   }
@@ -493,9 +501,7 @@ define([
                    As Once the EDB procedure execution is completed then we are
                    not getting any result so we need ignore the result.
                   */
-                  pgTools.DirectDebug.editor.removeLineClass(
-                    self.active_line_no, 'wrap', 'CodeMirror-activeline-background'
-                  );
+                  self.setActiveLine(-1);
                   pgTools.DirectDebug.direct_execution_completed = true;
                   pgTools.DirectDebug.polling_timeout_idle = true;
 
@@ -524,9 +530,7 @@ define([
                 } else {
                   // Call function to create and update local variables ....
                   if (res.data.result != null) {
-                    pgTools.DirectDebug.editor.removeLineClass(
-                      self.active_line_no, 'wrap', 'CodeMirror-activeline-background'
-                    );
+                    self.setActiveLine(-1);
                     self.AddResults(res.data.col_info, res.data.result);
                     pgTools.DirectDebug.results_panel.focus();
                     pgTools.DirectDebug.direct_execution_completed = true;
@@ -572,9 +576,7 @@ define([
                 );
               } else if (res.data.status === 'ERROR') {
                 pgTools.DirectDebug.direct_execution_completed = true;
-                pgTools.DirectDebug.editor.removeLineClass(
-                  self.active_line_no, 'wrap', 'CodeMirror-activeline-background'
-                );
+                self.setActiveLine(-1);
 
                 //Set the Alertify message to inform the user that execution is
                 // completed with error.
@@ -837,9 +839,7 @@ define([
         .done(function(res) {
           if (res.data.status) {
             // Call function to create and update local variables ....
-            pgTools.DirectDebug.editor.removeLineClass(
-              self.active_line_no, 'wrap', 'CodeMirror-activeline-background'
-            );
+            self.setActiveLine(-1);
             pgTools.DirectDebug.direct_execution_completed = true;
             pgTools.DirectDebug.is_user_aborted_debugging = true;
 
@@ -1368,12 +1368,7 @@ define([
           if (res.data.status) {
             pgTools.DirectDebug.editor.setValue(res.data.result[0].src);
             self.UpdateBreakpoint(pgTools.DirectDebug.trans_id);
-            // active_line_no =
-            //   self.active_line_no = (res.data.result[0].linenumber - 2);
-            pgTools.DirectDebug.editor.addLineClass(
-              (res.data.result[0].linenumber - 2), 'wrap',
-              'CodeMirror-activeline-background'
-            );
+            self.setActiveLine(res.data.result[0].linenumber - 2);
             // Call function to create and update local variables ....
             self.GetLocalVariables(pgTools.DirectDebug.trans_id);
           }
@@ -1621,7 +1616,6 @@ define([
         if (res.data.status === 'Success') {
           self.intializePanels();
           // If status is Success then find the port number to attach the executer.
-          //self.start_execution(trans_id, res.data.result);
           controller.start_execution(trans_id, res.data.result);
         } else if (res.data.status === 'Busy') {
           // If status is Busy then poll the result by recursive call to the poll function
@@ -1770,10 +1764,10 @@ define([
           'stack_pane', wcDocker.DOCK.STACKED, self.parameters_panel);
 
       var editor_pane = $('<div id="stack_editor_pane" ' +
-        'class="full-container-pane info"></div>');
+        'class="pg-panel-content info"></div>');
       var code_editor_area = $('<textarea id="debugger-editor-textarea">' +
-        '</textarea>').append(editor_pane);
-      self.code_editor_panel.layout().addItem(code_editor_area);
+        '</textarea>').appendTo(editor_pane);
+      self.code_editor_panel.layout().addItem(editor_pane);
 
       // To show the line-number and set breakpoint marker details by user.
       self.editor = CodeMirror.fromTextArea(
