diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py
index 11f835c7..2b03d5c6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py
@@ -722,6 +722,13 @@ class LanguageView(PGChildNodeView):
             else:
                 old_data[row['deftype']] = [priv]
 
+        # To format privileges
+        if 'lanacl' in old_data:
+            old_data['lanacl'] = parse_priv_to_db(
+                old_data['lanacl'],
+                ['U']
+            )
+
         seclabels = []
         if 'seclabels' in old_data and old_data['seclabels'] is not None:
             import re
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/acl.sql
index c760114f..dfdafac1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/acl.sql
@@ -17,3 +17,4 @@ FROM
 LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
 LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
 GROUP BY g.rolname, gt.rolname
+ORDER BY grantee
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/sqlpane.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/sqlpane.sql
index d4f4f65d..e5ac14a7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/sqlpane.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/sqlpane.sql
@@ -5,7 +5,7 @@
 -- DROP LANGUAGE {{ conn|qtIdent(data.name) }}
 
 {# ============= CREATE LANGUAGE Query ============= #}
-CREATE {% if data.trusted %}TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIdent(data.name) }}
+CREATE{% if data.trusted %} TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIdent(data.name) }}
 {% if data.lanproc %}
     HANDLER {{ conn|qtIdent(data.lanproc) }}
 {% endif %}
@@ -14,7 +14,7 @@ CREATE {% if data.trusted %}TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIde
 {% endif %}
 {% if data.lanval %}
     VALIDATOR {{ conn|qtIdent(data.lanval) }}{% endif %};
-    {# ============= ALTER LANGUAGE Query ============= #}
+{# ============= ALTER LANGUAGE Query ============= #}
 {% if data.lanowner %}
 
 ALTER LANGUAGE {{ conn|qtIdent(data.name) }}
@@ -30,7 +30,7 @@ COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
 {% if data.lanacl and data.lanacl|length > 0 %}
 
 {% for priv in data.lanacl %}
-{{ PRIVILEGE.RESETALL(conn, 'LANGUAGE', priv.grantee, data.name) }}
+{{ PRIVILEGE.APPLY(conn, 'LANGUAGE', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
 {% endfor %}
 {% endif %}
 {# ============= PRIVILEGES on LANGUAGE ============= #}
@@ -39,4 +39,4 @@ COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
 {% for r in data.seclabels %}
 {{ SECLABEL.APPLY(conn, 'PROCEDURAL LANGUAGE', data.name, r.provider, r.label) }}
 {% endfor %}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql
index c13aa510..9054baa4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql
@@ -21,3 +21,4 @@ FROM
 LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
 LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
 GROUP BY g.rolname, gt.rolname
+ORDER BY grantee
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql
index d0003cf4..e5ac14a7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql
@@ -5,7 +5,7 @@
 -- DROP LANGUAGE {{ conn|qtIdent(data.name) }}
 
 {# ============= CREATE LANGUAGE Query ============= #}
-CREATE {% if data.trusted %}TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIdent(data.name) }}
+CREATE{% if data.trusted %} TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIdent(data.name) }}
 {% if data.lanproc %}
     HANDLER {{ conn|qtIdent(data.lanproc) }}
 {% endif %}
@@ -14,7 +14,7 @@ CREATE {% if data.trusted %}TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIde
 {% endif %}
 {% if data.lanval %}
     VALIDATOR {{ conn|qtIdent(data.lanval) }}{% endif %};
-  {# ============= ALTER LANGUAGE Query ============= #}
+{# ============= ALTER LANGUAGE Query ============= #}
 {% if data.lanowner %}
 
 ALTER LANGUAGE {{ conn|qtIdent(data.name) }}
@@ -30,7 +30,7 @@ COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
 {% if data.lanacl and data.lanacl|length > 0 %}
 
 {% for priv in data.lanacl %}
-{{ PRIVILEGE.RESETALL(conn, 'LANGUAGE', priv.grantee, data.name) }}
+{{ PRIVILEGE.APPLY(conn, 'LANGUAGE', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
 {% endfor %}
 {% endif %}
 {# ============= PRIVILEGES on LANGUAGE ============= #}
@@ -39,4 +39,4 @@ COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
 {% for r in data.seclabels %}
 {{ SECLABEL.APPLY(conn, 'PROCEDURAL LANGUAGE', data.name, r.provider, r.label) }}
 {% endfor %}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_comment_privileges.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_comment_privileges.sql
new file mode 100644
index 00000000..acc99758
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_comment_privileges.sql
@@ -0,0 +1,18 @@
+-- Language: Lan2_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+    HANDLER plpgsql_call_handler
+    INLINE plpgsql_inline_handler
+    VALIDATOR plpgsql_validator;
+
+ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+    OWNER TO <OWNER>;
+
+COMMENT ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+    IS 'This is comment on custom trusted language';
+
+GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
+
+GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO postgres WITH GRANT OPTION;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_trusted_lan_name.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_trusted_lan_name.sql
new file mode 100644
index 00000000..d9c28893
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_trusted_lan_name.sql
@@ -0,0 +1,11 @@
+-- Language: Lan2_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+    HANDLER plpgsql_call_handler
+    INLINE plpgsql_inline_handler
+    VALIDATOR plpgsql_validator;
+
+ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+    OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_trusted_language.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_trusted_language.sql
new file mode 100644
index 00000000..9b5ff05e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_trusted_language.sql
@@ -0,0 +1,11 @@
+-- Language: Lan1_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+    HANDLER plpgsql_call_handler
+    INLINE plpgsql_inline_handler
+    VALIDATOR plpgsql_validator;
+
+ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+    OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_untrusted_language.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_untrusted_language.sql
new file mode 100644
index 00000000..b2890ba4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_untrusted_language.sql
@@ -0,0 +1,11 @@
+-- Language: Lan1_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+
+CREATE PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+    HANDLER plpgsql_call_handler
+    INLINE plpgsql_inline_handler
+    VALIDATOR plpgsql_validator;
+
+ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+    OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/test.json b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/test.json
new file mode 100644
index 00000000..b1c7b18c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/test.json
@@ -0,0 +1,86 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create trusted language",
+      "endpoint": "NODE-language.obj",
+      "sql_endpoint": "NODE-language.sql_id",
+      "data": {
+          "name": "Lan1_$%{}[]()&*^!@\"'`\\/#",
+          "trusted": true,
+          "lanproc": "plpgsql_call_handler",
+          "laninl": "plpgsql_inline_handler",
+          "lanval": "plpgsql_validator",
+          "is_template": false
+      },
+      "expected_sql_file": "create_trusted_language.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter trusted language name",
+      "endpoint": "NODE-language.obj_id",
+      "sql_endpoint": "NODE-language.sql_id",
+      "data": {
+        "name": "Lan2_$%{}[]()&*^!@\"'`\\/#"
+      },
+      "expected_sql_file": "alter_trusted_lan_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter comment and privileges",
+      "endpoint": "NODE-language.obj_id",
+      "sql_endpoint": "NODE-language.sql_id",
+      "data": {
+        "description": "This is comment on custom trusted language",
+        "lanacl": {
+          "added":[{
+            "grantee": "PUBLIC",
+            "grantor": "postgres",
+            "privileges":[
+              {
+                "privilege_type": "U",
+                "privilege": true,
+                "with_grant": false
+              }]
+          },{
+            "grantee": "postgres",
+            "grantor": "postgres",
+            "privileges":[{
+              "privilege_type": "U",
+              "privilege": true,
+              "with_grant": true
+            }]
+          }]
+        }
+      },
+      "expected_sql_file": "alter_comment_privileges.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop trusted language",
+      "endpoint": "NODE-language.obj_id",
+      "data": {}
+    },
+    {
+      "type": "create",
+      "name": "Create untrusted language",
+      "endpoint": "NODE-language.obj",
+      "sql_endpoint": "NODE-language.sql_id",
+      "data": {
+          "name": "Lan1_$%{}[]()&*^!@\"'`\\/#",
+          "trusted": false,
+          "lanproc": "plpgsql_call_handler",
+          "laninl": "plpgsql_inline_handler",
+          "lanval": "plpgsql_validator",
+          "is_template": false
+      },
+      "expected_sql_file": "create_untrusted_language.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop untrusted language",
+      "endpoint": "NODE-language.obj_id",
+      "data": {}
+    }
+  ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_comment_privileges.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_comment_privileges.sql
new file mode 100644
index 00000000..3681e4fa
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_comment_privileges.sql
@@ -0,0 +1,18 @@
+-- Language: Lan2_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+    HANDLER spl_call_handler
+    INLINE spl_inline_handler
+    VALIDATOR spl_validator;
+
+ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+    OWNER TO <OWNER>;
+
+COMMENT ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+    IS 'This is comment on custom trusted language';
+
+GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
+
+GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO enterprisedb WITH GRANT OPTION;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_trusted_lan_name.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_trusted_lan_name.sql
new file mode 100644
index 00000000..9c41b6d0
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_trusted_lan_name.sql
@@ -0,0 +1,11 @@
+-- Language: Lan2_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+    HANDLER spl_call_handler
+    INLINE spl_inline_handler
+    VALIDATOR spl_validator;
+
+ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+    OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_trusted_language.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_trusted_language.sql
new file mode 100644
index 00000000..b197ce2c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_trusted_language.sql
@@ -0,0 +1,11 @@
+-- Language: Lan1_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+    HANDLER spl_call_handler
+    INLINE spl_inline_handler
+    VALIDATOR spl_validator;
+
+ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+    OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_untrusted_language.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_untrusted_language.sql
new file mode 100644
index 00000000..96792bd7
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_untrusted_language.sql
@@ -0,0 +1,11 @@
+-- Language: Lan1_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+
+CREATE PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+    HANDLER spl_call_handler
+    INLINE spl_inline_handler
+    VALIDATOR spl_validator;
+
+ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+    OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/test.json b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/test.json
new file mode 100644
index 00000000..48ffa74f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/test.json
@@ -0,0 +1,85 @@
+{
+  "scenarios": [
+    {
+      "type": "create",
+      "name": "Create trusted language",
+      "endpoint": "NODE-language.obj",
+      "sql_endpoint": "NODE-language.sql_id",
+      "data": {
+          "name": "Lan1_$%{}[]()&*^!@\"'`\\/#",
+          "trusted": true,
+          "lanproc": "spl_call_handler",
+          "laninl": "spl_inline_handler",
+          "lanval": "spl_validator",
+          "is_template": false
+      },
+      "expected_sql_file": "create_trusted_language.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter trusted language name",
+      "endpoint": "NODE-language.obj_id",
+      "sql_endpoint": "NODE-language.sql_id",
+      "data": {
+        "name": "Lan2_$%{}[]()&*^!@\"'`\\/#"
+      },
+      "expected_sql_file": "alter_trusted_lan_name.sql"
+    },
+    {
+      "type": "alter",
+      "name": "Alter comment and privileges",
+      "endpoint": "NODE-language.obj_id",
+      "sql_endpoint": "NODE-language.sql_id",
+      "data": {
+        "description": "This is comment on custom trusted language",
+        "lanacl": {
+          "added":[{
+            "grantee": "PUBLIC",
+            "grantor": "enterprisedb",
+            "privileges":[{
+              "privilege_type": "U",
+              "privilege": true,
+              "with_grant": false
+            }]
+          },{
+            "grantee": "enterprisedb",
+            "grantor": "enterprisedb",
+            "privileges":[{
+              "privilege_type": "U",
+              "privilege": true,
+              "with_grant": true
+            }]
+          }]
+        }
+      },
+      "expected_sql_file": "alter_comment_privileges.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop trusted language",
+      "endpoint": "NODE-language.obj_id",
+      "data": {}
+    },
+    {
+      "type": "create",
+      "name": "Create untrusted language",
+      "endpoint": "NODE-language.obj",
+      "sql_endpoint": "NODE-language.sql_id",
+      "data": {
+          "name": "Lan1_$%{}[]()&*^!@\"'`\\/#",
+          "trusted": false,
+          "lanproc": "spl_call_handler",
+          "laninl": "spl_inline_handler",
+          "lanval": "spl_validator",
+          "is_template": false
+      },
+      "expected_sql_file": "create_untrusted_language.sql"
+    },
+    {
+      "type": "delete",
+      "name": "Drop untrusted language",
+      "endpoint": "NODE-language.obj_id",
+      "data": {}
+    }
+  ]
+}
