diff --git a/master/fsm.c b/master/fsm.c
index 0823b2d343ab35223c8609faeff77327900d954d..7b13e0e2bb685bf4c022b044c4ad7486ff4e8ef2 100644
--- a/master/fsm.c
+++ b/master/fsm.c
@@ -219,8 +219,8 @@ void ec_fsm_master_broadcast(ec_fsm_t *fsm /**< finite state machine */)
         printk(".\n");
     }
 
-    // topology change in free-run mode: clear all slaves and scan the bus
-    if (topology_change && master->mode == EC_MASTER_MODE_FREERUN) {
+    // topology change in idle mode: clear all slaves and scan the bus
+    if (topology_change && master->mode == EC_MASTER_MODE_IDLE) {
         EC_INFO("Scanning bus.\n");
 
         ec_master_eoe_stop(master);
@@ -311,7 +311,7 @@ void ec_fsm_master_action_process_states(ec_fsm_t *fsm
         return;
     }
 
-    if (master->mode == EC_MASTER_MODE_FREERUN) {
+    if (master->mode == EC_MASTER_MODE_IDLE) {
         // nothing to configure. check for pending EEPROM write operations.
         list_for_each_entry(slave, &master->slaves, list) {
             if (!slave->new_eeprom_data) continue;
@@ -670,7 +670,7 @@ void ec_fsm_master_scan_slaves(ec_fsm_t *fsm /**< finite state machine */)
             coupler_subindex++;
         }
 
-        if (master->mode == EC_MASTER_MODE_FREERUN) {
+        if (master->mode == EC_MASTER_MODE_IDLE) {
             // start EoE processing
             ec_master_eoe_start(master);
         }
diff --git a/master/master.c b/master/master.c
index 83ef7b7076025630412623310e6df5617b4c07f9..bbf4ca1a326a08fac4d588cdc68b51c76f6d0f07 100644
--- a/master/master.c
+++ b/master/master.c
@@ -55,7 +55,7 @@
 
 /*****************************************************************************/
 
-void ec_master_freerun(void *);
+void ec_master_idle(void *);
 void ec_master_eoe_run(unsigned long);
 ssize_t ec_show_master_attribute(struct kobject *, struct attribute *, char *);
 ssize_t ec_store_master_attribute(struct kobject *, struct attribute *,
@@ -116,7 +116,7 @@ int ec_master_init(ec_master_t *master, /**< EtherCAT master */
     INIT_LIST_HEAD(&master->domains);
     INIT_LIST_HEAD(&master->eoe_handlers);
     ec_datagram_init(&master->simple_datagram);
-    INIT_WORK(&master->freerun_work, ec_master_freerun, (void *) master);
+    INIT_WORK(&master->idle_work, ec_master_idle, (void *) master);
     init_timer(&master->eoe_timer);
     master->eoe_timer.function = ec_master_eoe_run;
     master->eoe_timer.data = (unsigned long) master;
@@ -218,7 +218,7 @@ void ec_master_reset(ec_master_t *master /**< EtherCAT master */)
     ec_domain_t *domain, *next_d;
 
     ec_master_eoe_stop(master);
-    ec_master_freerun_stop(master);
+    ec_master_idle_stop(master);
     ec_master_clear_slaves(master);
 
     // empty datagram queue
@@ -675,41 +675,43 @@ void ec_master_output_stats(ec_master_t *master /**< EtherCAT master */)
 /*****************************************************************************/
 
 /**
-   Starts the Free-Run mode.
+   Starts the Idle mode.
 */
 
-void ec_master_freerun_start(ec_master_t *master /**< EtherCAT master */)
+void ec_master_idle_start(ec_master_t *master /**< EtherCAT master */)
 {
-    if (master->mode == EC_MASTER_MODE_FREERUN) return;
+    if (master->mode == EC_MASTER_MODE_IDLE) return;
 
     if (master->mode == EC_MASTER_MODE_RUNNING) {
-        EC_ERR("ec_master_freerun_start: Master already running!\n");
+        EC_ERR("ec_master_idle_start: Master already running!\n");
         return;
     }
 
-    EC_INFO("Starting Free-Run mode.\n");
+    EC_INFO("Starting Idle mode.\n");
 
-    master->mode = EC_MASTER_MODE_FREERUN;
+    master->mode = EC_MASTER_MODE_IDLE;
     ec_fsm_reset(&master->fsm);
-    queue_delayed_work(master->workqueue, &master->freerun_work, 1);
+    queue_delayed_work(master->workqueue, &master->idle_work, 1);
 }
 
 /*****************************************************************************/
 
 /**
-   Stops the Free-Run mode.
+   Stops the Idle mode.
 */
 
-void ec_master_freerun_stop(ec_master_t *master /**< EtherCAT master */)
+void ec_master_idle_stop(ec_master_t *master /**< EtherCAT master */)
 {
-    if (master->mode != EC_MASTER_MODE_FREERUN) return;
+    if (master->mode != EC_MASTER_MODE_IDLE) return;
 
     ec_master_eoe_stop(master);
 
-    EC_INFO("Stopping Free-Run mode.\n");
-    master->mode = EC_MASTER_MODE_ORPHANED;
+    EC_INFO("Stopping Idle mode.\n");
+    master->mode = EC_MASTER_MODE_ORPHANED; // this is important for the
+                                            // IDLE work function to not
+                                            // queue itself again
 
-    if (!cancel_delayed_work(&master->freerun_work)) {
+    if (!cancel_delayed_work(&master->idle_work)) {
         flush_workqueue(master->workqueue);
     }
 
@@ -719,10 +721,10 @@ void ec_master_freerun_stop(ec_master_t *master /**< EtherCAT master */)
 /*****************************************************************************/
 
 /**
-   Free-Run mode function.
+   Idle mode function.
 */
 
-void ec_master_freerun(void *data /**< master pointer */)
+void ec_master_idle(void *data /**< master pointer */)
 {
     ec_master_t *master = (ec_master_t *) data;
 
@@ -739,8 +741,8 @@ void ec_master_freerun(void *data /**< master pointer */)
     // release master lock
     spin_unlock_bh(&master->internal_lock);
 
-    if (master->mode == EC_MASTER_MODE_FREERUN)
-        queue_delayed_work(master->workqueue, &master->freerun_work, 1);
+    if (master->mode == EC_MASTER_MODE_IDLE)
+        queue_delayed_work(master->workqueue, &master->idle_work, 1);
 }
 
 /*****************************************************************************/
@@ -845,8 +847,8 @@ ssize_t ec_show_master_attribute(struct kobject *kobj, /**< kobject */
         switch (master->mode) {
             case EC_MASTER_MODE_ORPHANED:
                 return sprintf(buffer, "ORPHANED\n");
-            case EC_MASTER_MODE_FREERUN:
-                return sprintf(buffer, "FREERUN\n");
+            case EC_MASTER_MODE_IDLE:
+                return sprintf(buffer, "IDLE\n");
             case EC_MASTER_MODE_RUNNING:
                 return sprintf(buffer, "RUNNING\n");
         }
@@ -1026,7 +1028,7 @@ void ec_master_eoe_run(unsigned long data /**< master pointer */)
         if (master->request_cb(master->cb_data))
             goto queue_timer;
     }
-    else if (master->mode == EC_MASTER_MODE_FREERUN) {
+    else if (master->mode == EC_MASTER_MODE_IDLE) {
         spin_lock(&master->internal_lock);
     }
     else
@@ -1043,7 +1045,7 @@ void ec_master_eoe_run(unsigned long data /**< master pointer */)
     if (master->mode == EC_MASTER_MODE_RUNNING) {
         master->release_cb(master->cb_data);
     }
-    else if (master->mode == EC_MASTER_MODE_FREERUN) {
+    else if (master->mode == EC_MASTER_MODE_IDLE) {
         spin_unlock(&master->internal_lock);
     }
 
diff --git a/master/master.h b/master/master.h
index 571544ca832beff2427fc9d1aa18af5cc120f02b..7eb46baddbb00bc380f7af770cc5d03f55b68963 100644
--- a/master/master.h
+++ b/master/master.h
@@ -58,7 +58,7 @@
 typedef enum
 {
     EC_MASTER_MODE_ORPHANED,
-    EC_MASTER_MODE_FREERUN,
+    EC_MASTER_MODE_IDLE,
     EC_MASTER_MODE_RUNNING
 }
 ec_master_mode_t;
@@ -104,21 +104,22 @@ struct ec_master
 
     struct list_head domains; /**< list of domains */
 
-    ec_datagram_t simple_datagram; /**< datagram structure for initialization */
+    ec_datagram_t simple_datagram; /**< datagram structure for
+                                      initialization */
     unsigned int timeout; /**< timeout in synchronous IO */
 
     int debug_level; /**< master debug level */
     ec_stats_t stats; /**< cyclic statistics */
 
     struct workqueue_struct *workqueue; /**< master workqueue */
-    struct work_struct freerun_work; /**< free run work object */
+    struct work_struct idle_work; /**< free run work object */
     ec_fsm_t fsm; /**< master state machine */
     ec_master_mode_t mode; /**< master mode */
 
     struct timer_list eoe_timer; /**< EoE timer object */
     unsigned int eoe_running; /**< non-zero, if EoE processing is active. */
     struct list_head eoe_handlers; /**< Ethernet-over-EtherCAT handlers */
-    spinlock_t internal_lock; /**< spinlock used in freerun mode */
+    spinlock_t internal_lock; /**< spinlock used in idle mode */
     int (*request_cb)(void *); /**< lock request callback */
     void (*release_cb)(void *); /**< lock release callback */
     void *cb_data; /**< data parameter of locking callbacks */
@@ -134,8 +135,8 @@ void ec_master_clear(struct kobject *);
 void ec_master_reset(ec_master_t *);
 
 // free run
-void ec_master_freerun_start(ec_master_t *);
-void ec_master_freerun_stop(ec_master_t *);
+void ec_master_idle_start(ec_master_t *);
+void ec_master_idle_stop(ec_master_t *);
 
 // EoE
 void ec_master_eoe_start(ec_master_t *);
diff --git a/master/module.c b/master/module.c
index 4f84f9f3c3c3c54b5f7bcad7da1235f70a95ce9e..1933844dee3230c67b529672db8ab8218be42d8a 100644
--- a/master/module.c
+++ b/master/module.c
@@ -350,7 +350,7 @@ void ecdev_unregister(unsigned int master_index, /**< master index */
    Starts the master associated with the device.
    This function has to be called by the network device driver to tell the
    master that the device is ready to send and receive data. The master
-   will enter the free-run mode then.
+   will enter the idle mode then.
    \ingroup DeviceInterface
 */
 
@@ -364,7 +364,7 @@ int ecdev_start(unsigned int master_index /**< master index */)
         return -1;
     }
 
-    ec_master_freerun_start(master);
+    ec_master_idle_start(master);
     return 0;
 }
 
@@ -382,7 +382,7 @@ void ecdev_stop(unsigned int master_index /**< master index */)
     ec_master_t *master;
     if (!(master = ec_find_master(master_index))) return;
 
-    ec_master_freerun_stop(master);
+    ec_master_idle_stop(master);
 
     if (ec_device_close(master->device))
         EC_WARN("Failed to close device!\n");
@@ -424,7 +424,7 @@ ec_master_t *ecrt_request_master(unsigned int master_index
         goto out_release;
     }
 
-    ec_master_freerun_stop(master);
+    ec_master_idle_stop(master);
     ec_master_reset(master);
     master->mode = EC_MASTER_MODE_RUNNING;
 
@@ -441,7 +441,7 @@ ec_master_t *ecrt_request_master(unsigned int master_index
  out_module_put:
     module_put(master->device->module);
     ec_master_reset(master);
-    ec_master_freerun_start(master);
+    ec_master_idle_start(master);
  out_release:
     master->reserved = 0;
  out_return:
@@ -466,7 +466,7 @@ void ecrt_release_master(ec_master_t *master /**< EtherCAT master */)
     }
 
     ec_master_reset(master);
-    ec_master_freerun_start(master);
+    ec_master_idle_start(master);
 
     module_put(master->device->module);
     master->reserved = 0;
diff --git a/master/slave.c b/master/slave.c
index b05380e5ccc4032e493c053df2c06ce3e8f37851..9c77dd11347591cce9c84687c0f277b932591343 100644
--- a/master/slave.c
+++ b/master/slave.c
@@ -1281,8 +1281,8 @@ ssize_t ec_slave_write_eeprom(ec_slave_t *slave, /**< EtherCAT slave */
         return -1;
     }
 
-    if (slave->master->mode != EC_MASTER_MODE_FREERUN) {
-        EC_ERR("Writing EEPROMs only allowed in freerun mode!\n");
+    if (slave->master->mode != EC_MASTER_MODE_IDLE) {
+        EC_ERR("Writing EEPROMs only allowed in idle mode!\n");
         return -1;
     }