diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py
index 63a6e8ac8..96b227216 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py
@@ -252,9 +252,7 @@ class DatabaseView(PGChildNodeView):
 
     def retrieve_last_system_oid(self):
         last_system_oid = 0
-        if self.blueprint.show_system_objects:
-            last_system_oid = 0
-        elif (
+        if (
             self.manager.db_info is not None and
             self.manager.did in self.manager.db_info
         ):
@@ -294,6 +292,8 @@ class DatabaseView(PGChildNodeView):
 
         for row in rset['rows']:
             dbname = row['name']
+            if row['is_sys_obj'] and not self.blueprint.show_system_objects:
+                continue
             if self.manager.db == dbname:
                 connected = True
                 can_drop = can_dis_conn = False
@@ -340,9 +340,11 @@ class DatabaseView(PGChildNodeView):
         :return:
         """
         res = []
+        last_system_oid = self.retrieve_last_system_oid()
+
         SQL = render_template(
             "/".join([self.template_path, self._NODES_SQL]),
-            last_system_oid=0,
+            last_system_oid=last_system_oid,
             show_system_objects=True,
         )
         status, rset = self.conn.execute_dict(SQL)
@@ -360,9 +362,11 @@ class DatabaseView(PGChildNodeView):
 
     @check_precondition(action="node")
     def node(self, gid, sid, did):
+        last_system_oid = self.retrieve_last_system_oid()
+
         SQL = render_template(
             "/".join([self.template_path, self._NODES_SQL]),
-            did=did, conn=self.conn, last_system_oid=0,
+            did=did, conn=self.conn, last_system_oid=last_system_oid,
             show_system_objects=self.blueprint.show_system_objects,
         )
         status, rset = self.conn.execute_2darray(SQL)
@@ -389,7 +393,8 @@ class DatabaseView(PGChildNodeView):
                     connected=connected,
                     spcname=row['spcname'],
                     allowConn=row['datallowconn'],
-                    canCreate=row['cancreate']
+                    canCreate=row['cancreate'],
+                    isTemplate=row['is_template']
                 ),
                 status=200
             )
@@ -398,10 +403,11 @@ class DatabaseView(PGChildNodeView):
 
     @check_precondition(action="properties")
     def properties(self, gid, sid, did):
+        last_system_oid = self.retrieve_last_system_oid()
 
         SQL = render_template(
             "/".join([self.template_path, self._PROPERTIES_SQL]),
-            did=did, conn=self.conn, last_system_oid=0,
+            did=did, conn=self.conn, last_system_oid=last_system_oid,
             show_system_objects=self.blueprint.show_system_objects,
         )
         status, res = self.conn.execute_dict(SQL)
@@ -626,10 +632,12 @@ class DatabaseView(PGChildNodeView):
             if not status:
                 return internal_server_error(errormsg=msg)
 
+        last_system_oid = self.retrieve_last_system_oid()
+
         # We need oid of newly created database
         SQL = render_template(
             "/".join([self.template_path, self._PROPERTIES_SQL]),
-            name=data['name'], conn=self.conn, last_system_oid=0,
+            name=data['name'], conn=self.conn, last_system_oid=last_system_oid,
             show_system_objects=self.blueprint.show_system_objects,
         )
         SQL = SQL.strip('\n').strip(' ')
@@ -701,12 +709,14 @@ class DatabaseView(PGChildNodeView):
         return False, ''
 
     def _fetch_db_details(self, data, did):
+
         if did is not None:
             # Fetch the name of database for comparison
+            last_system_oid = self.retrieve_last_system_oid()
             status, rset = self.conn.execute_dict(
                 render_template(
                     "/".join([self.template_path, self._NODES_SQL]),
-                    did=did, conn=self.conn, last_system_oid=0,
+                    did=did, conn=self.conn, last_system_oid=last_system_oid,
                     show_system_objects=self.blueprint.show_system_objects,
                 )
             )
@@ -806,12 +816,14 @@ class DatabaseView(PGChildNodeView):
         # used for offline updates
         self.manager.release(conn_id="db_offline_update")
 
+        last_system_oid = self.retrieve_last_system_oid()
+
         # Fetch the new data again after update for proper node
         # generation
         status, rset = self.conn.execute_dict(
             render_template(
                 "/".join([self.template_path, self._NODES_SQL]),
-                did=did, conn=self.conn, last_system_oid=0,
+                did=did, conn=self.conn, last_system_oid=last_system_oid,
                 show_system_objects=self.blueprint.show_system_objects,
             )
         )
@@ -850,7 +862,9 @@ class DatabaseView(PGChildNodeView):
                 canCreate=res['cancreate'],
                 canDisconn=can_dis_conn,
                 canDrop=can_drop,
-                inode=True if res['datallowconn'] else False
+                inode=True if res['datallowconn'] else False,
+                isTemplate=res['is_template']
+
             )
         )
 
@@ -974,10 +988,12 @@ class DatabaseView(PGChildNodeView):
         if did is not None:
             # Fetch the name of database for comparison
             conn = self.manager.connection()
+            last_system_oid = self.retrieve_last_system_oid()
+
             status, rset = conn.execute_dict(
                 render_template(
                     "/".join([self.template_path, self._NODES_SQL]),
-                    did=did, conn=conn, last_system_oid=0,
+                    did=did, conn=conn, last_system_oid=last_system_oid,
                     show_system_objects=self.blueprint.show_system_objects,
                 )
             )
@@ -1146,9 +1162,11 @@ class DatabaseView(PGChildNodeView):
         """
 
         conn = self.manager.connection()
+        last_system_oid = self.retrieve_last_system_oid()
+
         SQL = render_template(
             "/".join([self.template_path, self._PROPERTIES_SQL]),
-            did=did, conn=conn, last_system_oid=0,
+            did=did, conn=conn, last_system_oid=last_system_oid,
             show_system_objects=False,
         )
         status, res = conn.execute_dict(SQL)
diff --git a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js
index 871b9db92..bb3893765 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js
+++ b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js
@@ -52,7 +52,7 @@ export default class DatabaseSchema extends BaseUISchema {
     super({
       name: undefined,
       owner: undefined,
-      is_sys_obj: undefined,
+      is_sys_obj: false,
       comment: undefined,
       encoding: 'UTF8',
       template: undefined,
@@ -141,8 +141,8 @@ export default class DatabaseSchema extends BaseUISchema {
         min: -1,
       },{
         id: 'is_template', label: gettext('Template?'),
-        editable: false, type: 'switch', group: gettext('Definition'),
-        readonly: true,  mode: ['properties', 'edit'],
+        type: 'switch', group: gettext('Definition'),
+        mode: ['properties', 'edit'],
       },{
         id: 'datallowconn', label: gettext('Allow connections?'),
         editable: false, type: 'switch', group: gettext('Definition'),
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.1_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.1_plus/properties.sql
index 7e6bb1adf..d97063421 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.1_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.1_plus/properties.sql
@@ -40,6 +40,4 @@ AND
 db.datname in ({{db_restrictions}})
 {% endif %}
 
-AND db.datistemplate in (false, {{show_system_objects}})
-
 ORDER BY datname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/properties.sql
index dc6e4ef39..a6f996b8f 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/properties.sql
@@ -47,6 +47,5 @@ AND
 db.datname in ({{db_restrictions}})
 {% endif %}
 
-AND db.datistemplate in (false, {{show_system_objects}})
 
 ORDER BY datname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/alter_online.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/alter_online.sql
index 40ec137ba..65766d546 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/alter_online.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/alter_online.sql
@@ -155,3 +155,8 @@
 {% endif %}
 
 {% endif %}
+
+{# Change the connection limit #}
+{% if data.is_template is defined %}
+ALTER DATABASE {{ conn|qtIdent(data.name) }} WITH IS_TEMPLATE  = {{ data.is_template }};
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_online.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_online.sql
index 9296ee6cb..60cf869b5 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_online.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_online.sql
@@ -136,3 +136,8 @@
 {% endif %}
 {% endif %}
 {% endif %}
+
+{# Change the connection limit #}
+{% data.is_template is defined %}
+ALTER DATABASE {{ conn|qtIdent(data.name) }} WITH IS_TEMPLATE  = {{ data.is_template }};
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql
index d6d33e0d4..64fac38a8 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql
@@ -1,12 +1,13 @@
 SELECT
     db.oid as did, db.datname as name, ta.spcname as spcname, db.datallowconn,
-    pg_catalog.has_database_privilege(db.oid, 'CREATE') as cancreate, datdba as owner
+    pg_catalog.has_database_privilege(db.oid, 'CREATE') as cancreate, datdba as owner,
+    db.datistemplate AS is_template,
+    (CASE WHEN db.oid <= {{ last_system_oid}}::oid THEN true ElSE false END) AS is_sys_obj
 FROM
     pg_catalog.pg_database db
     LEFT OUTER JOIN pg_catalog.pg_tablespace ta ON db.dattablespace = ta.oid
-WHERE {% if did %}
-db.oid = {{ did|qtLiteral }}::OID{% else %}
-db.oid > {{ last_system_oid }}::OID
+ {% if did %}
+WHERE db.oid = {{ did|qtLiteral }}::OID
 {% endif %}
 {% if db_restrictions %}
 
@@ -14,10 +15,5 @@ AND
 db.datname in ({{db_restrictions}})
 {% endif %}
 
-{% if show_system_objects %}
-AND db.datistemplate in (false, {{show_system_objects}})
-{% else %}
-AND db.datistemplate in (false)
-{% endif %}
 
 ORDER BY datname;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql
index ac692b0ef..a4eb88170 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql
@@ -31,6 +31,5 @@ AND
 db.datname in ({{db_restrictions}})
 {% endif %}
 
-AND db.datistemplate in (false, {{show_system_objects}})
 
 ORDER BY datname;
