diff --git a/app/admin/views.py b/app/admin/views.py
index 69aad416a49850f6927de0a9b15f5427eb978a44..998718ff6f595c17b2de2a2a5895b0db0f806be7 100644
--- a/app/admin/views.py
+++ b/app/admin/views.py
@@ -85,9 +85,3 @@ class NetworkAdmin(AdminModelView):
     form_overrides = {
         'vlan_name': fields.StringField,
     }
-
-    form_args = {
-        'gateway': {
-            'filters': [lambda x: x or None],
-        },
-    }
diff --git a/app/defaults.py b/app/defaults.py
index 737f7d689004860a7391c24051620c5ad790623f..4eaf8a1c2b5f9177ebe4e2fcd7ebc083b4a6707d 100644
--- a/app/defaults.py
+++ b/app/defaults.py
@@ -28,6 +28,5 @@ defaults = [
     models.DeviceType(name='VME'),
     models.DeviceType(name='PLC'),
 
-    models.Tag(name='gateway', admin_only=True),
     models.Tag(name='IOC', admin_only=False),
 ]
diff --git a/app/models.py b/app/models.py
index dc1cf05fae08b5e92bd30e5f21312640e55ee7ec..2dd4a6b70547a9a2f9060f056e85b2f1a9e6ca85 100644
--- a/app/models.py
+++ b/app/models.py
@@ -511,12 +511,10 @@ class Network(CreatedMixin, db.Model):
         return [addr for addr in self.ip_range()
                 if addr not in self.used_ips()]
 
+    @property
     def gateway(self):
-        """Return the network gateway"""
-        for interface in self.interfaces:
-            if 'gateway' in [tag.name for tag in interface.tags]:
-                return interface
-        return None
+        """Return the network gateway IP"""
+        return list(self.network_ip.hosts())[-1]
 
     @staticmethod
     def ip_in_network(ip, address):
diff --git a/app/network/forms.py b/app/network/forms.py
index ff5222bc2bedb217747a7f236ec9c724a504338d..37b9a7fe8599e51e0fb41a1368aa93bec177c93b 100644
--- a/app/network/forms.py
+++ b/app/network/forms.py
@@ -34,17 +34,6 @@ def starts_with_hostname(form, field):
         raise validators.ValidationError(f'Interface name shall start with the hostname "{hostname}"')
 
 
-def validate_tags(form, field):
-    choices = dict(field.choices)
-    for tag_id in field.data:
-        tag_name = choices.get(tag_id)
-        if tag_name == 'gateway':
-            network = models.Network.query.get(form.network_id.data)
-            existing_gateway = network.gateway()
-            if existing_gateway is not None:
-                raise validators.ValidationError(f'A gateway is already defined for network {network}: {existing_gateway}')
-
-
 def ip_in_network(form, field):
     """Check that the IP is in the network"""
     network_id_field = form['network_id']
@@ -149,8 +138,7 @@ class InterfaceForm(CSEntryForm):
         description='space separated list of cnames (must be 2-20 characters long and contain only letters, numbers and dash)',
         validators=[validators.Optional(),
                     RegexpList(HOST_NAME_RE)])
-    tags = SelectMultipleField('Tags', coerce=utils.coerce_to_str_or_none,
-                               validators=[validate_tags])
+    tags = SelectMultipleField('Tags', coerce=utils.coerce_to_str_or_none)
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
diff --git a/tests/functional/test_models.py b/tests/functional/test_models.py
index fd5063d27d0ebf29bc37fc5bd06a6ffa1ea99789..bf2185fc105750f86464cca751a209e2cde1dec2 100644
--- a/tests/functional/test_models.py
+++ b/tests/functional/test_models.py
@@ -94,6 +94,13 @@ def test_network_available_and_used_ips(network_factory, interface_factory):
     assert list(network2.available_ips()) == []
 
 
+def test_network_gateway(network_factory):
+    network = network_factory(address='192.168.0.0/24')
+    assert str(network.gateway) == '192.168.0.254'
+    network = network_factory(address='172.16.110.0/23')
+    assert str(network.gateway) == '172.16.111.254'
+
+
 def test_mac_address_validation(mac_factory):
     mac = mac_factory(address='F4:A7:39:15:DA:01')
     assert mac.address == 'f4:a7:39:15:da:01'