diff --git a/_modules/contrail.py b/_modules/contrail.py
index 2596b1a..10c7680 100644
--- a/_modules/contrail.py
+++ b/_modules/contrail.py
@@ -22,7 +22,7 @@
 try:
     from vnc_api import vnc_api
     from vnc_api.vnc_api import LinklocalServiceEntryType, \
-        LinklocalServicesTypes, GlobalVrouterConfig
+        LinklocalServicesTypes, GlobalVrouterConfig, GlobalSystemConfig
     from vnc_api.gen.resource_client import VirtualRouter, AnalyticsNode, \
         ConfigNode, DatabaseNode, BgpRouter
     from vnc_api.gen.resource_xsd import AddressFamilies, BgpSessionAttributes, \
@@ -32,6 +32,13 @@
 except ImportError:
     HAS_CONTRAIL = False
 
+
+try:
+    from vnc_api.gen.resource_xsd import GracefulRestartParametersType
+    HAS_OLD = False
+except ImportError:
+    HAS_OLD = True
+
 __opts__ = {}
 
 
@@ -703,7 +710,7 @@
     return ret
 
 
-def global_vrouter_config_create(name, parent_type, encap_priority, vxlan_vn_id_mode, *fq_names, **kwargs):
+def global_vrouter_config_create(name, parent_type, encap_priority, vxlan_vn_id_mode, flow_export_rate, *fq_names, **kwargs):
     '''
     Create specific Contrail global vrouter config
 
@@ -731,6 +738,7 @@
             fq_name=fq_names,
             vxlan_network_identifier_mode=vxlan_vn_id_mode,
             parent_type=parent_type,
+            flow_export_rate=flow_export_rate,
         )
         if __opts__['test']:
             ret['result'] = None
@@ -1620,3 +1628,169 @@
         ret['comment'] = "ServiceApplianceSet " + name + " has been deleted"
         ret['changes'] = {'ServiceApplianceSet': {'old': name, 'new': ''}}
     return ret
+
+def global_system_config_list(**kwargs):
+    '''
+    Return a list of all global system configs
+
+    CLI Example:
+
+    .. code-block:: bash
+
+        salt '*' contrail.global_system_config_list
+    '''
+
+    ret = {}
+    vnc_client = _auth(**kwargs)
+    gsysconfs = vnc_client._objects_list('global-system-config', detail=True)
+    for gsysconf in gsysconfs:
+        ret[gsysconf.name] = gsysconf.__dict__
+    return ret
+
+
+def global_system_config_get(name, **kwargs):
+    '''
+    Return a specific Contrail global system config
+
+    CLI Example:
+
+    .. code-block:: bash
+
+        salt '*' contrail.global_system_config_get name
+    '''
+    ret = {}
+    vnc_client = _auth(**kwargs)
+    gsc_objs = vnc_client._objects_list('global-system-config', detail=True)
+    for gsc_obj in gsc_objs:
+        if name == gsc_obj.name:
+                ret[name] = gsc_obj.__dict__
+    if len(ret) == 0:
+        return {'Error': 'Error in retrieving global system config.'}
+    return ret
+
+
+def global_system_config_create(name, ans=64512, grp=None,  **kwargs):
+    '''
+    Create Contrail global system config
+
+    CLI Example:
+
+    .. code-block:: bash
+
+        salt '*' contrail.global_system_config_create name=default-global-system-config ans=64512
+    '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
+    vnc_client = _auth(**kwargs)
+
+    gsc_objs = global_system_config_list(**kwargs)
+    if name in gsc_objs:
+        config_obj = vnc_client.global_system_config_read(fq_name=[name])
+        if config_obj.graceful_restart_parameters and not HAS_OLD:
+            curr_grp = str(config_obj.graceful_restart_parameters).replace(" ", "").split(",")
+            curr_grpd = dict(item.split('=') for item in curr_grp)
+
+        if grp and 'enable' in grp and not HAS_OLD:
+            grp_obj = GracefulRestartParametersType()
+            if 'enable' in grp:
+                grp_obj.enable = grp['enable']
+                if curr_grpd and str(grp['enable']) != str(curr_grpd['enable']):
+                    ret['changes']['enable'] = {"from": str(curr_grpd['enable']), "to": str(grp['enable'])}
+                elif not curr_grpd:
+                    ret['changes']['enable'] = {"from": None, "to": grp['enable']}
+            if 'restart_time' in grp:
+                grp_obj.restart_time = grp['restart_time']
+                if curr_grpd and grp['restart_time'] != int(curr_grpd['restart_time']):
+                    ret['changes']['restart_time'] = {"from": int(curr_grpd['restart_time']), "to": grp['restart_time']}
+                elif not curr_grpd:
+                    ret['changes']['restart_time'] = {"from": None, "to": grp['restart_time']}
+            if 'end_of_rib_timeout' in grp:
+                grp_obj.end_of_rib_timeout = grp['end_of_rib_timeout']
+                if curr_grpd and grp['end_of_rib_timeout'] != int(curr_grpd['end_of_rib_timeout']):
+                    ret['changes']['end_of_rib_timeout'] = {"from": int(curr_grpd['end_of_rib_timeout']), "to": grp['end_of_rib_timeout']}
+                elif not curr_grpd:
+                    ret['changes']['end_of_rib_timeout'] = {"from": None, "to": grp['end_of_rib_timeout']}
+            if 'bgp_helper_enable' in grp:
+                grp_obj.bgp_helper_enable = grp['bgp_helper_enable']
+                if curr_grpd and str(grp['bgp_helper_enable']) != str(curr_grpd['bgp_helper_enable']):
+                    ret['changes']['bgp_helper_enable'] = {"from": str(curr_grpd['bgp_helper_enable']), "to": grp['bgp_helper_enable']}
+                elif not curr_grpd:
+                    ret['changes']['bgp_helper_enable'] = {"from": None, "to": grp['bgp_helper_enable']}
+            if 'xmpp_helper_enable' in grp:
+                grp_obj.xmpp_helper_enable = grp['xmpp_helper_enable']
+                if curr_grpd and str(grp['xmpp_helper_enable']) != str(curr_grpd['xmpp_helper_enable']):
+                    ret['changes']['xmpp_helper_enable'] = {"from": str(curr_grpd['xmpp_helper_enable']), "to": grp['xmpp_helper_enable']}
+                elif not curr_grpd:
+                    ret['changes']['xmpp_helper_enable'] = {"from": None, "to": grp['xmpp_helper_enable']}
+            if 'long_lived_restart_time' in grp:
+                grp_obj.long_lived_restart_time = grp['long_lived_restart_time']
+                if curr_grpd and grp['long_lived_restart_time'] != int(curr_grpd['long_lived_restart_time']):
+                    ret['changes']['long_lived_restart_time'] = {"from": int(curr_grpd['long_lived_restart_time']), "to": grp['long_lived_restart_time']}
+                elif not curr_grpd:
+                    ret['changes']['long_lived_restart_time'] = {"from": None, "to": grp['long_lived_restart_time']}
+        else:
+            grp_obj = None
+
+        config_obj.graceful_restart_parameters = grp_obj
+
+        if ans:
+            if config_obj.autonomous_system != ans:
+                ret['changes']['autonomous_system'] = {"from": config_obj.autonomous_system, "to": ans}
+                config_obj.autonomous_system = ans
+
+        vnc_client.global_system_config_update(config_obj)
+        ret['comment'] = 'Global system config  ' + name + ' has been updated'
+    else:
+        config_obj = GlobalSystemConfig(name=name)
+        if grp and not HAS_OLD:
+            grp_obj = GracefulRestartParametersType()
+            if 'enable' in grp:
+                grp_obj.enable = grp['enable']
+            if 'restart_time' in grp:
+                grp_obj.restart_time = grp['restart_time']
+            if 'end_of_rib_timeout' in grp:
+                grp_obj.end_of_rib_timeout = grp['end_of_rib_timeout']
+            if 'bgp_helper_enable' in grp:
+                grp_obj.bgp_helper_enable = grp['bgp_helper_enable']
+            if 'xmpp_helper_enable' in grp:
+                grp_obj.xmpp_helper_enable = grp['xmpp_helper_enable']
+            if 'long_lived_restart_time' in grp:
+                grp_obj.long_lived_restart_time = grp['long_lived_restart_time']
+            config_obj.graceful_restart_parameters = grp_obj
+        if ans:
+            config_obj.autonomous_system = ans
+
+        vnc_client.global_system_config_create(config_obj)
+        ret['changes'] = {"created": "new"}
+        ret['comment'] = 'Global system config  ' + name + ' has been created '
+
+    return ret
+
+
+def global_system_config_delete(name, **kwargs):
+    '''
+    Delete specific Contrail global system config
+
+    CLI Example:
+
+    .. code-block:: bash
+
+        salt '*' contrail.global_system_config_delete name
+    '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': ''}
+    vnc_client = _auth(**kwargs)
+
+    gsc_obj = GlobalSystemConfig(name)
+    if __opts__['test']:
+        ret['result'] = None
+        ret['comment'] = "Global system config " + name + " will be deleted"
+    else:
+        vnc_client.global_system_config_delete(fq_name=gsc_obj.get_fq_name())
+        ret['comment'] = "GlobalSystemConfig " + name + " has been deleted"
+        ret['changes'] = {'GlobalSystemConfig': {'old': name, 'new': ''}}
+    return ret
diff --git a/_states/contrail.py b/_states/contrail.py
index 8e20d86..ea74ce3 100644
--- a/_states/contrail.py
+++ b/_states/contrail.py
@@ -133,6 +133,7 @@
       - parent_type: "global-system-config"
       - encap_priority : "MPLSoUDP,MPLSoGRE"
       - vxlan_vn_id_mode : "automatic"
+      - flow_export_rate: 100
       - fq_names:
         - default-global-system-config
         - default-global-vrouter-config
@@ -299,6 +300,7 @@
         - name: dbs01
         - ip_address: 10.0.0.33
 
+
 Enforce the database node absence
 -----------------------------------
 
@@ -309,8 +311,31 @@
         - name: dbs01
 
 
+Enforce the global system config existence
+------------------------------------------
+
+.. code-block:: yaml
+    global_system_config_update:
+      contrail.global_system_config_present:
+        - name: default-global-system_config
+        - ans: 64512
+        - grp:
+            enable: true
+            restart_time: 400
+            bgp_helper_enable: true
+            xmpp_helper_enable: true
+            long_lived_restart_time: 400
+            end_of_rib_timeout: 40
 
 
+Enforce the global system config absence
+----------------------------------------
+
+.. code-block:: yaml
+
+    global_system_config_delete:
+      contrail.global_system_config_absent:
+        - name: global-system_config
 '''
 
 
@@ -466,7 +491,7 @@
 
 
 def global_vrouter_config_present(name, parent_type, encap_priority="MPLSoUDP,MPLSoGRE", vxlan_vn_id_mode="automatic",
-                                  *fq_names, **kwargs):
+                                  flow_export_rate=None, *fq_names, **kwargs):
     '''
     Ensures that the Contrail global vrouter config exists.
 
@@ -475,9 +500,10 @@
     :param encap_priority: 	Ordered list of encapsulations that vrouter will use in priority order
     :param vxlan_vn_id_mode:	Method of allocation of VxLAN VNI(s).
     :param fq_names:		Fully Qualified Name of resource devided <string>array
+    :param flow_export_rate:	Flow export rate is global config, rate at which each vrouter will sample and export flow records to analytics
     '''
     ret = __salt__['contrail.global_vrouter_config_create'](name, parent_type, encap_priority, vxlan_vn_id_mode,
-                                                            *fq_names, **kwargs)
+                                                            flow_export_rate, *fq_names, **kwargs)
     if len(ret['changes']) == 0:
         pass
     return ret
@@ -734,3 +760,33 @@
     if 'Error' not in physical_router:
         ret = __salt__['contrail.service_appliance_set_delete'](name, **kwargs)
     return ret
+
+
+def global_system_config_present(name, ans=64512, grp=None, **kwargs):
+    '''
+    Ensures that the Contrail global system config exists or is updated
+
+    :param name:        Virtual router name
+    :param ans:         Autonomous system number
+    :param grp:         Graceful-Restart-Parameters - dict of parameters
+    '''
+    ret = __salt__['contrail.global_system_config_create'](name=name, ans=ans, grp=grp, **kwargs)
+    if len(ret['changes']) == 0:
+        pass
+    return ret
+
+
+def global_system_config_absent(name, **kwargs):
+    '''
+    Ensure that the Contrail global system config doesn't exist
+
+    :param name: The name of the global system config that should not exist
+    '''
+    ret = {'name': name,
+           'changes': {},
+           'result': True,
+           'comment': 'Global system config "{0}" is already absent'.format(name)}
+    gsc = __salt__['contrail.global_system_config_get'](name, **kwargs)
+    if 'Error' not in gsc:
+        ret = __salt__['contrail.global_system_config_delete'](name, **kwargs)
+    return ret
