diff --git a/TODO b/TODO
index 251624e9debb1bf3f335a5a1a3fe0be98c4da83a..0e03bac0283f6e6582e91ab9e127a555d9254e6d 100644
--- a/TODO
+++ b/TODO
@@ -45,6 +45,7 @@ Version 1.5.0:
   the SDO handlers.
 * Apply watchdog patches from J. Mohre.
 * Move device driver files in subdirectories.
+* Document ec_fsm_foe members.
 
 Future issues:
 
diff --git a/master/cdev.c b/master/cdev.c
index cf9ec7eec595651b2a3fa57cb2dec299193fa326..b798d3f7eead1b50e28f1c72ae31606568a1050b 100644
--- a/master/cdev.c
+++ b/master/cdev.c
@@ -44,6 +44,8 @@
 #include "voe_handler.h"
 #include "ioctl.h"
 
+/** Set to 1 to enable ioctl() command debugging.
+ */
 #define DEBUG_IOCTL 0
 
 /*****************************************************************************/
diff --git a/master/foe_request.c b/master/foe_request.c
index 4cce67a7e10c04886750bb68242c680b2e79d38a..dd2ca18f95820fe3dc09557dfceb24eced75ac9a 100644
--- a/master/foe_request.c
+++ b/master/foe_request.c
@@ -149,7 +149,9 @@ int ec_foe_request_copy_data(
  *
  * \return non-zero if the timeout was exceeded, else zero.
  */
-int ec_foe_request_timed_out(const ec_foe_request_t *req /**< FoE request. */)
+int ec_foe_request_timed_out(
+        const ec_foe_request_t *req /**< FoE request. */
+        )
 {
     return req->issue_timeout
         && jiffies - req->jiffies_start > HZ * req->issue_timeout / 1000;
@@ -157,28 +159,49 @@ int ec_foe_request_timed_out(const ec_foe_request_t *req /**< FoE request. */)
 
 /*****************************************************************************/
 
-void ec_foe_request_timeout(ec_foe_request_t *req, uint32_t timeout)
+/** Set the request timeout.
+ */
+void ec_foe_request_timeout(
+        ec_foe_request_t *req, /**< FoE request. */
+        uint32_t timeout /**< Timeout in ms. */
+        )
 {
     req->issue_timeout = timeout;
 }
 
 /*****************************************************************************/
 
-uint8_t *ec_foe_request_data(ec_foe_request_t *req)
+/** Returns a pointer to the request's data.
+ *
+ * \return Data pointer.
+ */
+uint8_t *ec_foe_request_data(
+        ec_foe_request_t *req /**< FoE request. */
+        )
 {
     return req->buffer;
 }
 
 /*****************************************************************************/
 
-size_t ec_foe_request_data_size(const ec_foe_request_t *req)
+/** Returns the data size.
+ *
+ * \return Data size.
+ */
+size_t ec_foe_request_data_size(
+        const ec_foe_request_t *req /**< FoE request. */
+        )
 {
     return req->data_size;
 }
 
 /*****************************************************************************/
 
-void ec_foe_request_read(ec_foe_request_t *req)
+/** Prepares a read request (slave to master).
+ */
+void ec_foe_request_read(
+        ec_foe_request_t *req /**< FoE request. */
+        )
 {
     req->dir = EC_DIR_INPUT;
     req->state = EC_INT_REQUEST_QUEUED;
@@ -188,7 +211,11 @@ void ec_foe_request_read(ec_foe_request_t *req)
 
 /*****************************************************************************/
 
-void ec_foe_request_write(ec_foe_request_t *req)
+/** Prepares a write request (master to slave).
+ */
+void ec_foe_request_write(
+        ec_foe_request_t *req /**< FoE request. */
+        )
 {
     req->dir = EC_DIR_OUTPUT;
     req->state = EC_INT_REQUEST_QUEUED;
diff --git a/master/fsm_foe.c b/master/fsm_foe.c
index e746c6879fafc1e623f57e8c3ef2f0407a30892e..6bae96177af6dd431c824fc5e0298170496541b9 100644
--- a/master/fsm_foe.c
+++ b/master/fsm_foe.c
@@ -46,8 +46,12 @@
  */
 #define EC_FSM_FOE_TIMEOUT 3000
 
+/** Mailbox type FoE.
+ */
 #define EC_MBOX_TYPE_FILEACCESS 0x04
 
+/** Size of the FoE header.
+ */
 #define EC_FOE_HEADER_SIZE 6
 // uint8_t  OpCode
 // uint8_t  reserved
@@ -152,6 +156,8 @@ int ec_fsm_foe_success(ec_fsm_foe_t *fsm /**< Finite state machine */)
 
 /*****************************************************************************/
 
+/** Prepares an FoE transfer.
+ */
 void ec_fsm_foe_transfer(
         ec_fsm_foe_t *fsm, /**< State machine. */
         ec_slave_t *slave, /**< EtherCAT slave. */
@@ -263,7 +269,11 @@ int ec_foe_prepare_wrq_send(ec_fsm_foe_t *fsm)
 
 /*****************************************************************************/
 
-void ec_fsm_foe_write(ec_fsm_foe_t *fsm /**< finite state machine */)
+/** Start a write operation.
+ */
+void ec_fsm_foe_write(
+        ec_fsm_foe_t *fsm /**< FoE statemachine. */
+        )
 {
     fsm->tx_buffer = fsm->request->buffer;
     fsm->tx_buffer_size = fsm->request->data_size;
@@ -276,10 +286,9 @@ void ec_fsm_foe_write(ec_fsm_foe_t *fsm /**< finite state machine */)
 }
 
 /*****************************************************************************/
-/**
-   Initializes the SII write state machine.
-*/
 
+/** Initializes the FoE write state machine.
+ */
 void ec_fsm_foe_write_start(ec_fsm_foe_t *fsm /**< finite state machine */)
 {
     ec_slave_t *slave = fsm->slave;
@@ -309,7 +318,11 @@ void ec_fsm_foe_write_start(ec_fsm_foe_t *fsm /**< finite state machine */)
 
 /*****************************************************************************/
 
-void ec_fsm_foe_state_ack_check(ec_fsm_foe_t *fsm)
+/** Check for acknowledge.
+ */
+void ec_fsm_foe_state_ack_check(
+        ec_fsm_foe_t *fsm /**< FoE statemachine. */
+        )
 {
     ec_datagram_t *datagram = fsm->datagram;
     ec_slave_t *slave = fsm->slave;
@@ -359,9 +372,12 @@ void ec_fsm_foe_state_ack_check(ec_fsm_foe_t *fsm)
 
 /*****************************************************************************/
 
-void ec_fsm_foe_state_ack_read(ec_fsm_foe_t *fsm)
+/** Acknowledge a read operation.
+ */
+void ec_fsm_foe_state_ack_read(
+        ec_fsm_foe_t *fsm /**< FoE statemachine. */
+        )
 {
-
     ec_datagram_t *datagram = fsm->datagram;
     ec_slave_t *slave = fsm->slave;
     uint8_t *data, mbox_prot;
@@ -433,13 +449,15 @@ void ec_fsm_foe_state_ack_read(ec_fsm_foe_t *fsm)
 }
 
 /*****************************************************************************/
-/**
-   State: WRQ SENT.
-   Checks is the previous transmit datagram succeded and sends the next
-   fragment, if necessary.
-*/
 
-void ec_fsm_foe_state_wrq_sent(ec_fsm_foe_t *fsm)
+/** State: WRQ SENT.
+ *
+ * Checks is the previous transmit datagram succeded and sends the next
+ * fragment, if necessary.
+ */
+void ec_fsm_foe_state_wrq_sent(
+        ec_fsm_foe_t *fsm /**< FoE statemachine. */
+        )
 {
     ec_datagram_t *datagram = fsm->datagram;
     ec_slave_t *slave = fsm->slave;
@@ -474,13 +492,15 @@ void ec_fsm_foe_state_wrq_sent(ec_fsm_foe_t *fsm)
 }
 
 /*****************************************************************************/
-/**
-   State: WRQ SENT.
-   Checks is the previous transmit datagram succeded and sends the next
-   fragment, if necessary.
-*/
 
-void ec_fsm_foe_state_data_sent(ec_fsm_foe_t *fsm)
+/** State: WRQ SENT.
+ *
+ * Checks is the previous transmit datagram succeded and sends the next
+ * fragment, if necessary.
+ */
+void ec_fsm_foe_state_data_sent(
+        ec_fsm_foe_t *fsm /**< Foe statemachine. */
+        )
 {
     ec_datagram_t *datagram = fsm->datagram;
     ec_slave_t *slave = fsm->slave;
@@ -543,7 +563,11 @@ int ec_foe_prepare_rrq_send(ec_fsm_foe_t *fsm)
 
 /*****************************************************************************/
 
-int ec_foe_prepare_send_ack(ec_fsm_foe_t *foe)
+/** Prepare to send an acknowledge.
+ */
+int ec_foe_prepare_send_ack(
+        ec_fsm_foe_t *foe /**< FoE statemachine. */
+        )
 {
     uint8_t *data;
 
@@ -559,13 +583,16 @@ int ec_foe_prepare_send_ack(ec_fsm_foe_t *foe)
 }
 
 /*****************************************************************************/
-/**
-   State: RRQ SENT.
-   Checks is the previous transmit datagram succeded and sends the next
-   fragment, if necessary.
-*/
 
-void ec_fsm_foe_state_rrq_sent( ec_fsm_foe_t *fsm ) {
+/** State: RRQ SENT.
+ *
+ * Checks is the previous transmit datagram succeded and sends the next
+ * fragment, if necessary.
+ */
+void ec_fsm_foe_state_rrq_sent(
+        ec_fsm_foe_t *fsm /**< FoE statemachine. */
+        )
+{
     ec_datagram_t *datagram = fsm->datagram;
     ec_slave_t *slave = fsm->slave;
 
@@ -600,7 +627,11 @@ void ec_fsm_foe_state_rrq_sent( ec_fsm_foe_t *fsm ) {
 
 /*****************************************************************************/
 
-void ec_fsm_foe_read(ec_fsm_foe_t *fsm /**< finite state machine */)
+/** Start a read operation.
+ */
+void ec_fsm_foe_read(
+        ec_fsm_foe_t *fsm /**< FoE state machine. */
+        )
 {
     fsm->state = ec_fsm_foe_read_start;
     fsm->rx_filename = fsm->request->file_name;
@@ -612,7 +643,11 @@ void ec_fsm_foe_read(ec_fsm_foe_t *fsm /**< finite state machine */)
 
 /*****************************************************************************/
 
-void ec_fsm_foe_read_start(ec_fsm_foe_t *fsm /**< finite state machine */)
+/** Starting state for read operations.
+ */
+void ec_fsm_foe_read_start(
+        ec_fsm_foe_t *fsm /**< FoE statemachine. */
+        )
 {
     size_t current_size;
     ec_slave_t *slave = fsm->slave;
@@ -645,7 +680,12 @@ void ec_fsm_foe_read_start(ec_fsm_foe_t *fsm /**< finite state machine */)
 
 /*****************************************************************************/
 
-void ec_fsm_foe_state_data_check ( ec_fsm_foe_t *fsm ) {
+/** Check for data.
+ */
+void ec_fsm_foe_state_data_check(
+        ec_fsm_foe_t *fsm /**< FoE statemachine. */
+        )
+{
     ec_datagram_t *datagram = fsm->datagram;
     ec_slave_t *slave = fsm->slave;
 
@@ -694,7 +734,11 @@ void ec_fsm_foe_state_data_check ( ec_fsm_foe_t *fsm ) {
 
 /*****************************************************************************/
 
-void ec_fsm_foe_state_data_read(ec_fsm_foe_t *fsm)
+/** Start reading data.
+ */
+void ec_fsm_foe_state_data_read(
+        ec_fsm_foe_t *fsm /**< FoE statemachine. */
+        )
 {
     size_t rec_size;
     uint8_t *data, opCode, packet_no, mbox_prot;
@@ -815,8 +859,12 @@ void ec_fsm_foe_state_data_read(ec_fsm_foe_t *fsm)
 
 /*****************************************************************************/
 
-void ec_fsm_foe_state_sent_ack( ec_fsm_foe_t *fsm ) {
-
+/** Sent an acknowledge.
+ */
+void ec_fsm_foe_state_sent_ack(
+        ec_fsm_foe_t *fsm /**< FoE statemachine. */
+        )
+{
     ec_datagram_t *datagram = fsm->datagram;
     ec_slave_t *slave = fsm->slave;
 
@@ -859,7 +907,12 @@ void ec_fsm_foe_state_sent_ack( ec_fsm_foe_t *fsm ) {
 
 /*****************************************************************************/
 
-void ec_foe_set_tx_error(ec_fsm_foe_t *fsm, uint32_t errorcode)
+/** Set an error code and go to the send error state.
+ */
+void ec_foe_set_tx_error(
+        ec_fsm_foe_t *fsm, /**< FoE statemachine. */
+        uint32_t errorcode /**< FoE error code. */
+        )
 {
     fsm->tx_errors++;
     fsm->request->result = errorcode;
@@ -868,7 +921,12 @@ void ec_foe_set_tx_error(ec_fsm_foe_t *fsm, uint32_t errorcode)
 
 /*****************************************************************************/
 
-void ec_foe_set_rx_error(ec_fsm_foe_t *fsm, uint32_t errorcode)
+/** Set an error code and go to the receive error state.
+ */
+void ec_foe_set_rx_error(
+        ec_fsm_foe_t *fsm, /**< FoE statemachine. */
+        uint32_t errorcode /**< FoE error code. */
+        )
 {
     fsm->rx_errors++;
     fsm->request->result = errorcode;
diff --git a/master/fsm_foe.h b/master/fsm_foe.h
index 62362256dff6bf73136445583b7cfaa9d172cf44..2940b2d806a2adba9f986847ce5d4c3f74986a02 100644
--- a/master/fsm_foe.h
+++ b/master/fsm_foe.h
@@ -60,6 +60,8 @@ struct ec_fsm_foe {
     ec_foe_request_t *request; /**< FoE request */
     uint8_t toggle; /**< toggle bit for segment commands */
 
+    /** \cond */
+
     uint32_t tx_errors;
     uint8_t *tx_buffer;
     uint32_t tx_buffer_size;
@@ -81,6 +83,8 @@ struct ec_fsm_foe {
     uint32_t rx_last_packet;
     uint8_t *rx_filename;
     uint32_t rx_filename_len;
+
+    /** \endcond */
 };
 
 /*****************************************************************************/
diff --git a/master/slave.h b/master/slave.h
index aa7fb707d15cc24e1a1051b7d8fe09bc9d18e7dc..ffe9cd4d579d7c373890846f3f8236bf3a31a24c 100644
--- a/master/slave.h
+++ b/master/slave.h
@@ -124,10 +124,13 @@ struct ec_slave
     ec_slave_state_t current_state; /**< Current application state. */
     unsigned int error_flag; /**< Stop processing after an error. */
     unsigned int force_config; /**< Force (re-)configuration. */
-    uint16_t configured_rx_mailbox_offset;
-    uint16_t configured_rx_mailbox_size;
-    uint16_t configured_tx_mailbox_offset;
-    uint16_t configured_tx_mailbox_size;
+    uint16_t configured_rx_mailbox_offset; /**< Configured receive mailbox
+                                             offset. */
+    uint16_t configured_rx_mailbox_size; /**< Configured receive mailbox size.
+                                          */
+    uint16_t configured_tx_mailbox_offset; /**< Configured send mailbox
+                                             offset. */
+    uint16_t configured_tx_mailbox_size; /**< Configured send mailbox size. */
 
     // base data
     uint8_t base_type; /**< Slave type. */