diff --git a/_modules/maas.py b/_modules/maas.py
index 0677fcd..e1cbf0f 100644
--- a/_modules/maas.py
+++ b/_modules/maas.py
@@ -106,7 +106,6 @@
                 data = self.fill_data(name, config_data, **extra)
                 if name in all_elements:
                     self._update = True
-                    LOG.error('%s DATA %s', all_elements[name], data)
                     data = self.update(data, all_elements[name])
                     self.send(data)
                     ret['updated'].append(name)
@@ -312,13 +311,12 @@
         self._update_key = 'system_id'
 
     def fill_data(self, name, machine_data):
-        main_interface = next(machine_data['interfaces'][0].iteritems())
-        interfaces = machine_data['interfaces'][1:]
+        self._interface = machine_data['interface']
         power_data = machine_data['power_parameters']
         data = {
             'hostname': name,
             'architecture': machine_data.get('architecture', 'amd64/generic'),
-            'mac_addresses': main_interface[1],
+            'mac_addresses': self._interface['mac'],
             'power_type': machine_data.get('power_type', 'ipmi'),
             'power_parameters_power_address': power_data['power_address'],
         }
@@ -339,6 +337,33 @@
             new[self._update_key] = str(old[self._update_key])
         return new
 
+    def _link_interface(self, system_id, interface_id):
+        if 'ip' not in self._interface:
+            return
+        data = {
+            'mode': 'STATIC',
+            'subnet': self._interface.get('subnet'),
+            'ip_address': self._interface.get('ip'),
+        }
+        if 'default_gateway' in self._interface:
+            data['default_gateway'] = self._interface.get('gateway')
+        if self._update:
+            data['force'] = '1'
+        LOG.info('interfaces link_subnet %s %s %s', system_id, interface_id,
+                _format_data(data))
+        self._maas.post(u'/api/2.0/nodes/{0}/interfaces/{1}/'
+                        .format(system_id, interface_id), 'link_subnet',
+                        **data)
+
+    def send(self, data):
+        response = super(Device, self).send(data)
+        resp_json = json.loads(response)
+        system_id = resp_json['system_id']
+        iface_id = resp_json['interface_set'][0]['id']
+        self._link_interface(maas, system_id, iface_id)
+        return response
+
+
 class BootResource(MaasObject):
     def __init__(self):
         super(BootResource, self).__init__()
