diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py
index 14b9f9d..5779f34 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py
@@ -458,6 +458,55 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
             status=200
         )
 
+    def _get_argument_values(self, data):
+        proargtypes = [ptype for ptype in data['proargtypenames'].split(",")] \
+            if data['proargtypenames'] else []
+        proargmodes = data['proargmodes'] if data['proargmodes'] else \
+            ['i'] * len(proargtypes)
+        proargnames = data['proargnames'] if data['proargnames'] else []
+        proargdefaultvals = [ptype for ptype in
+                             data['proargdefaultvals'].split(",")] \
+            if data['proargdefaultvals'] else []
+        proallargtypes = data['proallargtypes'] \
+            if data['proallargtypes'] else []
+
+        return {'proargtypes': proargtypes, 'proargmodes': proargmodes,
+                'proargnames': proargnames,
+                'proargdefaultvals': proargdefaultvals,
+                'proallargtypes': proallargtypes}
+
+    def _params_list_for_display(self, proargmodes_fltrd, proargtypes,
+                                 proargnames, proargdefaultvals):
+        # Insert null value against the parameters which do not have
+        # default values.
+        if len(proargmodes_fltrd) > len(proargdefaultvals):
+            dif = len(proargmodes_fltrd) - len(proargdefaultvals)
+            while (dif > 0):
+                proargdefaultvals.insert(0, '')
+                dif -= 1
+
+        param = {"arguments": [
+            self._map_arguments_dict(
+                i, proargmodes_fltrd[i] if len(proargmodes_fltrd) > i else '',
+                proargtypes[i] if len(proargtypes) > i else '',
+                proargnames[i] if len(proargnames) > i else '',
+                proargdefaultvals[i] if len(proargdefaultvals) > i else ''
+            )
+            for i in range(len(proargtypes))]}
+        return param
+
+    def _display_properties_argument_list(self, proargmodes_fltrd, proargtypes,
+                                         proargnames, proargdefaultvals):
+        proargs = [self._map_arguments_list(
+            proargmodes_fltrd[i] if len(proargmodes_fltrd) > i else '',
+            proargtypes[i] if len(proargtypes) > i else '',
+            proargnames[i] if len(proargnames) > i else '',
+            proargdefaultvals[i] if len(proargdefaultvals) > i else ''
+        )
+            for i in range(len(proargtypes))]
+
+        return proargs
+
     def _format_arguments_from_db(self, data):
         """
         Create Argument list of the Function.
@@ -478,16 +527,12 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
                     proargnames: Argument Name
                     proargdefaultvals: Default Value of the Argument
         """
-        proargtypes = [ptype for ptype in data['proargtypenames'].split(",")] \
-            if data['proargtypenames'] else []
-        proargmodes = data['proargmodes'] if data['proargmodes'] else \
-            ['i'] * len(proargtypes)
-        proargnames = data['proargnames'] if data['proargnames'] else []
-        proargdefaultvals = [ptype for ptype in
-                             data['proargdefaultvals'].split(",")] \
-            if data['proargdefaultvals'] else []
-        proallargtypes = data['proallargtypes'] \
-            if data['proallargtypes'] else []
+        arguments = self._get_argument_values(data)
+        proargtypes = arguments['proargtypes']
+        proargmodes = arguments['proargmodes']
+        proargnames = arguments['proargnames']
+        proargdefaultvals = arguments['proargdefaultvals']
+        proallargtypes = arguments['proallargtypes']
 
         proargmodenames = {
             'i': 'IN', 'o': 'OUT', 'b': 'INOUT', 'v': 'VARIADIC', 't': 'TABLE'
@@ -553,34 +598,16 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
         for i in proargnames_fltrd:
             proargnames.remove(i)
 
-        # Insert null value against the parameters which do not have
-        # default values.
-        if len(proargmodes_fltrd) > len(proargdefaultvals):
-            dif = len(proargmodes_fltrd) - len(proargdefaultvals)
-            while (dif > 0):
-                proargdefaultvals.insert(0, '')
-                dif -= 1
-
         # Prepare list of Argument list dict to be displayed in the Data Grid.
-        params = {"arguments": [
-            self._map_arguments_dict(
-                i, proargmodes_fltrd[i] if len(proargmodes_fltrd) > i else '',
-                proargtypes[i] if len(proargtypes) > i else '',
-                proargnames[i] if len(proargnames) > i else '',
-                proargdefaultvals[i] if len(proargdefaultvals) > i else ''
-            )
-            for i in range(len(proargtypes))]}
+        params = self._params_list_for_display(proargmodes_fltrd, proargtypes,
+                                               proargnames, proargdefaultvals)
 
         # Prepare string formatted Argument to be displayed in the Properties
         # panel.
-
-        proargs = [self._map_arguments_list(
-            proargmodes_fltrd[i] if len(proargmodes_fltrd) > i else '',
-            proargtypes[i] if len(proargtypes) > i else '',
-            proargnames[i] if len(proargnames) > i else '',
-            proargdefaultvals[i] if len(proargdefaultvals) > i else ''
-        )
-            for i in range(len(proargtypes))]
+        proargs = self._display_properties_argument_list(proargmodes_fltrd,
+                                                         proargtypes,
+                                                         proargnames,
+                                                         proargdefaultvals)
 
         proargs = {"proargs": ", ".join(proargs)}
 
@@ -834,8 +861,7 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
                 status, res = self.conn.execute_2darray(SQL)
                 if not status:
                     return internal_server_error(errormsg=res)
-
-                if not res['rows']:
+                elif not res['rows']:
                     return make_json_response(
                         success=0,
                         errormsg=gettext(
@@ -1516,9 +1542,9 @@ class FunctionView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare):
         ) + '(' + res['rows'][0]['func_with_identity_arguments'] + ')'
 
         # Fetch only arguments
-        argString = name[name.rfind('('):].strip('(').strip(')')
-        if len(argString) > 0:
-            args = argString.split(',')
+        arg_string = name[name.rfind('('):].strip('(').strip(')')
+        if len(arg_string) > 0:
+            args = arg_string.split(',')
             # Remove unwanted spaces from arguments
             args = [arg.strip(' ') for arg in args]
 
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py
index 810f235..adcc1ba 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py
@@ -451,7 +451,7 @@ class PackageView(PGChildNodeView, SchemaDiffObjectCompare):
                 if not status:
                     return internal_server_error(errormsg=res)
 
-                if not res['rows']:
+                elif not res['rows']:
                     return make_json_response(
                         success=0,
                         errormsg=_(
@@ -586,71 +586,13 @@ class PackageView(PGChildNodeView, SchemaDiffObjectCompare):
             diff_schema: Target Schema
         """
 
-        required_args = [
-            u'name'
-        ]
-
         if diff_schema:
             data['schema'] = diff_schema
         else:
             data['schema'] = self.schema
 
         if pkgid is not None and not sqltab:
-            SQL = render_template(
-                "/".join([self.template_path, 'properties.sql']), scid=scid,
-                pkgid=pkgid)
-            status, res = self.conn.execute_dict(SQL)
-            if not status:
-                return internal_server_error(errormsg=res)
-            if len(res['rows']) == 0:
-                return gone(
-                    errormsg=_("Could not find the package in the database.")
-                )
-
-            res['rows'][0]['pkgheadsrc'] = self.get_inner(
-                res['rows'][0]['pkgheadsrc'])
-            res['rows'][0]['pkgbodysrc'] = self.get_inner(
-                res['rows'][0]['pkgbodysrc'])
-
-            SQL = render_template("/".join([self.template_path, 'acl.sql']),
-                                  scid=scid,
-                                  pkgid=pkgid)
-
-            status, rset1 = self.conn.execute_dict(SQL)
-
-            if not status:
-                return internal_server_error(errormsg=rset1)
-
-            for row in rset1['rows']:
-                priv = parse_priv_from_db(row)
-                res['rows'][0].setdefault(row['deftype'], []).append(priv)
-
-            # Making copy of output for further processing
-            old_data = dict(res['rows'][0])
-
-            # To format privileges data coming from client
-            for key in ['pkgacl']:
-                if key in data and data[key] is not None:
-                    if 'added' in data[key]:
-                        data[key]['added'] = parse_priv_to_db(
-                            data[key]['added'], self.acl)
-                    if 'changed' in data[key]:
-                        data[key]['changed'] = parse_priv_to_db(
-                            data[key]['changed'], self.acl)
-                    if 'deleted' in data[key]:
-                        data[key]['deleted'] = parse_priv_to_db(
-                            data[key]['deleted'], self.acl)
-
-            # If name is not present with in update data then copy it
-            # from old data
-            for arg in required_args:
-                if arg not in data:
-                    data[arg] = old_data[arg]
-
-            SQL = render_template("/".join([self.template_path, 'update.sql']),
-                                  data=data, o_data=old_data, conn=self.conn,
-                                  is_schema_diff=diff_schema)
-            return SQL, data['name'] if 'name' in data else old_data['name']
+            return self.get_sql_with_pkgid(scid, pkgid, data, diff_schema)
         else:
             # To format privileges coming from client
             if 'pkgacl' in data:
@@ -661,6 +603,71 @@ class PackageView(PGChildNodeView, SchemaDiffObjectCompare):
 
             return SQL, data['name']
 
+    def format_privilege_data(self, data):
+        # To format privileges data coming from client
+        for key in ['pkgacl']:
+            if key in data and data[key] is not None:
+                if 'added' in data[key]:
+                    data[key]['added'] = parse_priv_to_db(
+                        data[key]['added'], self.acl)
+                if 'changed' in data[key]:
+                    data[key]['changed'] = parse_priv_to_db(
+                        data[key]['changed'], self.acl)
+                if 'deleted' in data[key]:
+                    data[key]['deleted'] = parse_priv_to_db(
+                        data[key]['deleted'], self.acl)
+
+    def get_sql_with_pkgid(self, scid, pkgid, data, diff_schema):
+        required_args = [
+            u'name'
+        ]
+        SQL = render_template(
+            "/".join([self.template_path, 'properties.sql']), scid=scid,
+            pkgid=pkgid)
+        status, res = self.conn.execute_dict(SQL)
+        if not status:
+            return internal_server_error(errormsg=res)
+        elif len(res['rows']) == 0:
+            return gone(
+                errormsg=_("Could not find the package in the database.")
+            )
+
+        res['rows'][0]['pkgheadsrc'] = self.get_inner(
+            res['rows'][0]['pkgheadsrc'])
+        res['rows'][0]['pkgbodysrc'] = self.get_inner(
+            res['rows'][0]['pkgbodysrc'])
+
+        SQL = render_template("/".join([self.template_path, 'acl.sql']),
+                              scid=scid,
+                              pkgid=pkgid)
+
+        status, rset1 = self.conn.execute_dict(SQL)
+
+        if not status:
+            return internal_server_error(errormsg=rset1)
+
+        for row in rset1['rows']:
+            priv = parse_priv_from_db(row)
+            res['rows'][0].setdefault(row['deftype'], []).append(priv)
+
+        # Making copy of output for further processing
+        old_data = dict(res['rows'][0])
+
+        # To format privileges data coming from client
+        self.format_privilege_data(data)
+
+        # If name is not present with in update data then copy it
+        # from old data
+        for arg in required_args:
+            if arg not in data:
+                data[arg] = old_data[arg]
+
+        SQL = render_template("/".join([self.template_path, 'update.sql']),
+                              data=data, o_data=old_data, conn=self.conn,
+                              is_schema_diff=diff_schema)
+        return SQL, data['name'] if 'name' in data else old_data['name']
+
+
     @check_precondition(action="sql")
     def sql(self, gid, sid, did, scid, pkgid, diff_schema=None,
             json_resp=True):
